1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 cr.define('extensions', function() { 6 /** 7 * PackExtensionOverlay class 8 * Encapsulated handling of the 'Pack Extension' overlay page. 9 * @constructor 10 */ 11 function PackExtensionOverlay() { 12 } 13 14 cr.addSingletonGetter(PackExtensionOverlay); 15 16 PackExtensionOverlay.prototype = { 17 /** 18 * Initialize the page. 19 */ 20 initializePage: function() { 21 var overlay = $('overlay'); 22 cr.ui.overlay.setupOverlay(overlay); 23 cr.ui.overlay.globalInitialization(); 24 overlay.addEventListener('cancelOverlay', this.handleDismiss_.bind(this)); 25 26 $('pack-extension-dismiss').addEventListener('click', 27 this.handleDismiss_.bind(this)); 28 $('pack-extension-commit').addEventListener('click', 29 this.handleCommit_.bind(this)); 30 $('browse-extension-dir').addEventListener('click', 31 this.handleBrowseExtensionDir_.bind(this)); 32 $('browse-private-key').addEventListener('click', 33 this.handleBrowsePrivateKey_.bind(this)); 34 }, 35 36 /** 37 * Handles a click on the dismiss button. 38 * @param {Event} e The click event. 39 */ 40 handleDismiss_: function(e) { 41 extensions.ExtensionSettings.showOverlay(null); 42 }, 43 44 /** 45 * Handles a click on the pack button. 46 * @param {Event} e The click event. 47 */ 48 handleCommit_: function(e) { 49 var extensionPath = $('extension-root-dir').value; 50 var privateKeyPath = $('extension-private-key').value; 51 chrome.send('pack', [extensionPath, privateKeyPath, 0]); 52 }, 53 54 /** 55 * Utility function which asks the C++ to show a platform-specific file 56 * select dialog, and fire |callback| with the |filePath| that resulted. 57 * |selectType| can be either 'file' or 'folder'. |operation| can be 'load' 58 * or 'pem' which are signals to the C++ to do some operation-specific 59 * configuration. 60 * @private 61 */ 62 showFileDialog_: function(selectType, operation, callback) { 63 handleFilePathSelected = function(filePath) { 64 callback(filePath); 65 handleFilePathSelected = function() {}; 66 }; 67 68 chrome.send('packExtensionSelectFilePath', [selectType, operation]); 69 }, 70 71 /** 72 * Handles the showing of the extension directory browser. 73 * @param {Event} e Change event. 74 * @private 75 */ 76 handleBrowseExtensionDir_: function(e) { 77 this.showFileDialog_('folder', 'load', function(filePath) { 78 $('extension-root-dir').value = filePath; 79 }); 80 }, 81 82 /** 83 * Handles the showing of the extension private key file. 84 * @param {Event} e Change event. 85 * @private 86 */ 87 handleBrowsePrivateKey_: function(e) { 88 this.showFileDialog_('file', 'pem', function(filePath) { 89 $('extension-private-key').value = filePath; 90 }); 91 }, 92 }; 93 94 /** 95 * Wrap up the pack process by showing the success |message| and closing 96 * the overlay. 97 * @param {string} message The message to show to the user. 98 */ 99 PackExtensionOverlay.showSuccessMessage = function(message) { 100 alertOverlay.setValues( 101 loadTimeData.getString('packExtensionOverlay'), 102 message, 103 loadTimeData.getString('ok'), 104 '', 105 function() { 106 extensions.ExtensionSettings.showOverlay(null); 107 }, 108 null); 109 extensions.ExtensionSettings.showOverlay($('alertOverlay')); 110 }; 111 112 /** 113 * Post an alert overlay showing |message|, and upon acknowledgement, close 114 * the alert overlay and return to showing the PackExtensionOverlay. 115 */ 116 PackExtensionOverlay.showError = function(message) { 117 alertOverlay.setValues( 118 loadTimeData.getString('packExtensionErrorTitle'), 119 message, 120 loadTimeData.getString('ok'), 121 '', 122 function() { 123 extensions.ExtensionSettings.showOverlay($('pack-extension-overlay')); 124 }, 125 null); 126 extensions.ExtensionSettings.showOverlay($('alertOverlay')); 127 }; 128 129 // Export 130 return { 131 PackExtensionOverlay: PackExtensionOverlay 132 }; 133 }); 134