blob: 63b20a4d2de321b1cc6787b13d4410165739f145 [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));
$('pack-extension-dismiss').addEventListener('click', function() {
cr.dispatchSimpleEvent(overlay, 'cancelOverlay');
});
$('pack-extension-commit').addEventListener('click',
this.handleCommit_.bind(this));
$('browse-extension-dir').addEventListener('click',
this.handleBrowseExtensionDir_.bind(this));
$('browse-private-key').addEventListener('click',
this.handleBrowsePrivateKey_.bind(this));
},
/**
* Handles a click on the dismiss button.
* @param {Event} e The click event.
*/
handleDismiss_: function(e) {
extensions.ExtensionSettings.showOverlay(null);
},
/**
* Handles a click on the pack button.
* @param {Event} e The click event.
*/
handleCommit_: function(e) {
var extensionPath = $('extension-root-dir').value;
var privateKeyPath = $('extension-private-key').value;
chrome.developerPrivate.packDirectory(
extensionPath, privateKeyPath, 0, this.onPackResponse_.bind(this));
},
/**
* Utility function which asks the C++ to show a platform-specific file
* select dialog, and set the value property of |node| to the selected path.
* @param {chrome.developerPrivate.SelectType} selectType
* The type of selection to use.
* @param {chrome.developerPrivate.FileType} fileType
* The type of file to select.
* @param {HTMLInputElement} node The node to set the value of.
* @private
*/
showFileDialog_: function(selectType, fileType, node) {
chrome.developerPrivate.choosePath(selectType, fileType, function(path) {
// Last error is set if the user canceled the dialog.
if (!chrome.runtime.lastError && path)
node.value = path;
});
},
/**
* Handles the showing of the extension directory browser.
* @param {Event} e Change event.
* @private
*/
handleBrowseExtensionDir_: function(e) {
this.showFileDialog_(
chrome.developerPrivate.SelectType.FOLDER,
chrome.developerPrivate.FileType.LOAD,
/** @type {HTMLInputElement} */ ($('extension-root-dir')));
},
/**
* Handles the showing of the extension private key file.
* @param {Event} e Change event.
* @private
*/
handleBrowsePrivateKey_: function(e) {
this.showFileDialog_(
chrome.developerPrivate.SelectType.FILE,
chrome.developerPrivate.FileType.PEM,
/** @type {HTMLInputElement} */ ($('extension-private-key')));
},
/**
* Handles a response from a packDirectory call.
* @param {chrome.developerPrivate.PackDirectoryResponse} response The
* response of the pack call.
* @private
*/
onPackResponse_: function(response) {
/** @type {string} */
var alertTitle;
/** @type {string} */
var alertOk;
/** @type {string} */
var alertCancel;
/** @type {function()} */
var alertOkCallback;
/** @type {function()} */
var alertCancelCallback;
var closeAlert = function() {
extensions.ExtensionSettings.showOverlay(null);
};
switch (response.status) {
case chrome.developerPrivate.PackStatus.SUCCESS:
alertTitle = loadTimeData.getString('packExtensionOverlay');
alertOk = loadTimeData.getString('ok');
alertOkCallback = closeAlert;
// No 'Cancel' option.
break;
case chrome.developerPrivate.PackStatus.WARNING:
alertTitle = loadTimeData.getString('packExtensionWarningTitle');
alertOk = loadTimeData.getString('packExtensionProceedAnyway');
alertCancel = loadTimeData.getString('cancel');
alertOkCallback = function() {
chrome.developerPrivate.packDirectory(
response.item_path,
response.pem_path,
response.override_flags,
this.onPackResponse_.bind(this));
closeAlert();
}.bind(this);
alertCancelCallback = closeAlert;
break;
case chrome.developerPrivate.PackStatus.ERROR:
alertTitle = loadTimeData.getString('packExtensionErrorTitle');
alertOk = loadTimeData.getString('ok');
alertOkCallback = function() {
extensions.ExtensionSettings.showOverlay(
$('pack-extension-overlay'));
};
// No 'Cancel' option.
break;
default:
assertNotReached();
return;
}
alertOverlay.setValues(alertTitle,
response.message,
alertOk,
alertCancel,
alertOkCallback,
alertCancelCallback);
extensions.ExtensionSettings.showOverlay($('alertOverlay'));
},
};
// Export
return {
PackExtensionOverlay: PackExtensionOverlay
};
});