text: // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  cr.define('extensions', function() {
    /**
     * PackExtensionOverlay class
     * Encapsulated handling of the 'Pack Extension' overlay page.
     * @constructor
     */
    function PackExtensionOverlay() {
    }
  
    cr.addSingletonGetter(PackExtensionOverlay);
  
    PackExtensionOverlay.prototype = {
      /**
       * Initialize the page.
       */
      initializePage: function() {
        var overlay = $('overlay');
        cr.ui.overlay.setupOverlay(overlay);
        cr.ui.overlay.globalInitialization();
        overlay.addEventListener('cancelOverlay', this.handleDismiss_.bind(this));
  
        $('packExtensionDismiss').addEventListener('click',
            this.handleDismiss_.bind(this));
        $('packExtensionCommit').addEventListener('click',
            this.handleCommit_.bind(this));
        $('browseExtensionDir').addEventListener('click',
            this.handleBrowseExtensionDir_.bind(this));
        $('browsePrivateKey').addEventListener('click',
            this.handleBrowsePrivateKey_.bind(this));
      },
  
      /**
       * Handles a click on the dismiss button.
       * @param {Event} e The click event.
       */
      handleDismiss_: function(e) {
        ExtensionSettings.showOverlay(null);
      },
  
      /**
       * Handles a click on the pack button.
       * @param {Event} e The click event.
       */
      handleCommit_: function(e) {
        var extensionPath = $('extensionRootDir').value;
        var privateKeyPath = $('extensionPrivateKey').value;
        chrome.send('pack', [extensionPath, privateKeyPath, 0]);
      },
  
      /**
       * Utility function which asks the C++ to show a platform-specific file
       * select dialog, and fire |callback| with the |filePath| that resulted.
       * |selectType| can be either 'file' or 'folder'. |operation| can be 'load'
       * or 'pem' which are signals to the C++ to do some operation-specific
       * configuration.
       * @private
       */
      showFileDialog_: function(selectType, operation, callback) {
        handleFilePathSelected = function(filePath) {
          callback(filePath);
          handleFilePathSelected = function() {};
        };
  
        chrome.send('packExtensionSelectFilePath', [selectType, operation]);
      },
  
      /**
       * Handles the showing of the extension directory browser.
       * @param {Event} e Change event.
       * @private
       */
      handleBrowseExtensionDir_: function(e) {
        this.showFileDialog_('folder', 'load', function(filePath) {
          $('extensionRootDir').value = filePath;
        });
      },
  
      /**
       * Handles the showing of the extension private key file.
       * @param {Event} e Change event.
       * @private
       */
      handleBrowsePrivateKey_: function(e) {
        this.showFileDialog_('file', 'pem', function(filePath) {
          $('extensionPrivateKey').value = filePath;
        });
      },
    };
  
    /**
     * Wrap up the pack process by showing the success |message| and closing
     * the overlay.
     * @param {string} message The message to show to the user.
     */
    PackExtensionOverlay.showSuccessMessage = function(message) {
      alertOverlay.setValues(
          loadTimeData.getString('packExtensionOverlay'),
          message,
          loadTimeData.getString('ok'),
          '',
          function() {
            ExtensionSettings.showOverlay(null);
          },
          null);
      ExtensionSettings.showOverlay($('alertOverlay'));
    };
  
    /**
     * Post an alert overlay showing |message|, and upon acknowledgement, close
     * the alert overlay and return to showing the PackExtensionOverlay.
     */
    PackExtensionOverlay.showError = function(message) {
      alertOverlay.setValues(
          loadTimeData.getString('packExtensionErrorTitle'),
          message,
          loadTimeData.getString('ok'),
          '',
          function() {
            ExtensionSettings.showOverlay($('packExtensionOverlay'));
          },
          null);
      ExtensionSettings.showOverlay($('alertOverlay'));
    };
  
    // Export
    return {
      PackExtensionOverlay: PackExtensionOverlay
    };
  });
  
  // Update the C++ call so this isn't necessary.
  var PackExtensionOverlay = extensions.PackExtensionOverlay;
  