blob: e4b9f0d1c3d78634008a2e80c431001eed2c1450 [file] [log] [blame]
// 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;