OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011 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 // Used for observing function of the backend datasource for this page by |
| 6 // tests. |
| 7 var webui_responded_ = false; |
| 8 |
| 9 cr.define('options', function() { |
| 10 var OptionsPage = options.OptionsPage; |
| 11 var ExtensionsList = options.ExtensionsList; |
| 12 |
| 13 /** |
| 14 * ExtensionSettings class |
| 15 * Encapsulated handling of the 'Manage Extensions' page. |
| 16 * @class |
| 17 */ |
| 18 function ExtensionSettings() { |
| 19 OptionsPage.call(this, 'extensions', |
| 20 templateData.extensionSettingsTabTitle, |
| 21 'extension-settings'); |
| 22 } |
| 23 |
| 24 cr.addSingletonGetter(ExtensionSettings); |
| 25 |
| 26 ExtensionSettings.prototype = { |
| 27 __proto__: OptionsPage.prototype, |
| 28 |
| 29 /** |
| 30 * Initialize the page. |
| 31 */ |
| 32 initializePage: function() { |
| 33 OptionsPage.prototype.initializePage.call(this); |
| 34 |
| 35 // This will request the data to show on the page and will get a response |
| 36 // back in returnExtensionsData. |
| 37 chrome.send('extensionSettingsRequestExtensionsData'); |
| 38 |
| 39 // Set up the developer mode button. |
| 40 var toggleDevMode = $('toggle-dev-on'); |
| 41 toggleDevMode.addEventListener('click', |
| 42 this.handleToggleDevMode_.bind(this)); |
| 43 |
| 44 // Setup the gallery related links and text. |
| 45 $('suggest-gallery').innerHTML = |
| 46 localStrings.getString('extensionSettingsSuggestGallery'); |
| 47 $('get-more-extensions').innerHTML = |
| 48 localStrings.getString('extensionSettingsGetMoreExtensions'); |
| 49 |
| 50 // Set up the three dev mode buttons (load unpacked, pack and update). |
| 51 $('load-unpacked').addEventListener('click', |
| 52 this.handleLoadUnpackedExtension_.bind(this)); |
| 53 $('pack-extension').addEventListener('click', |
| 54 this.handlePackExtension_.bind(this)); |
| 55 $('update-extensions-now').addEventListener('click', |
| 56 this.handleUpdateExtensionNow_.bind(this)); |
| 57 }, |
| 58 |
| 59 /** |
| 60 * Utility function which asks the C++ to show a platform-specific file |
| 61 * select dialog, and fire |callback| with the |filePath| that resulted. |
| 62 * |selectType| can be either 'file' or 'folder'. |operation| can be 'load', |
| 63 * 'packRoot', or 'pem' which are signals to the C++ to do some |
| 64 * operation-specific configuration. |
| 65 * @private |
| 66 */ |
| 67 showFileDialog_: function(selectType, operation, callback) { |
| 68 handleFilePathSelected = function(filePath) { |
| 69 callback(filePath); |
| 70 handleFilePathSelected = function() {}; |
| 71 }; |
| 72 |
| 73 chrome.send('extensionSettingsSelectFilePath', [selectType, operation]); |
| 74 }, |
| 75 |
| 76 /** |
| 77 * Handles the Load Unpacked Extension button. |
| 78 * @param {Event} e Change event. |
| 79 * @private |
| 80 */ |
| 81 handleLoadUnpackedExtension_: function(e) { |
| 82 this.showFileDialog_('folder', 'load', function(filePath) { |
| 83 chrome.send('extensionSettingsLoad', [String(filePath)]); |
| 84 }); |
| 85 |
| 86 chrome.send('coreOptionsUserMetricsAction', |
| 87 ['Options_LoadUnpackedExtension']); |
| 88 }, |
| 89 |
| 90 /** |
| 91 * Handles the Pack Extension button. |
| 92 * @param {Event} e Change event. |
| 93 * @private |
| 94 */ |
| 95 handlePackExtension_: function(e) { |
| 96 OptionsPage.navigateToPage('packExtensionOverlay'); |
| 97 chrome.send('coreOptionsUserMetricsAction', ['Options_PackExtension']); |
| 98 }, |
| 99 |
| 100 /** |
| 101 * Handles the Update Extension Now button. |
| 102 * @param {Event} e Change event. |
| 103 * @private |
| 104 */ |
| 105 handleUpdateExtensionNow_: function(e) { |
| 106 chrome.send('extensionSettingsAutoupdate', []); |
| 107 }, |
| 108 |
| 109 /** |
| 110 * Handles the Toggle Dev Mode button. |
| 111 * @param {Event} e Change event. |
| 112 * @private |
| 113 */ |
| 114 handleToggleDevMode_: function(e) { |
| 115 var dev = $('dev'); |
| 116 if (!dev.classList.contains('dev-open')) { |
| 117 // Make the Dev section visible. |
| 118 dev.classList.add('dev-open'); |
| 119 dev.classList.remove('dev-closed'); |
| 120 |
| 121 $('load-unpacked').classList.add('dev-button-visible'); |
| 122 $('load-unpacked').classList.remove('dev-button-hidden'); |
| 123 $('pack-extension').classList.add('dev-button-visible'); |
| 124 $('pack-extension').classList.remove('dev-button-hidden'); |
| 125 $('update-extensions-now').classList.add('dev-button-visible'); |
| 126 $('update-extensions-now').classList.remove('dev-button-hidden'); |
| 127 } else { |
| 128 // Hide the Dev section. |
| 129 dev.classList.add('dev-closed'); |
| 130 dev.classList.remove('dev-open'); |
| 131 |
| 132 $('load-unpacked').classList.add('dev-button-hidden'); |
| 133 $('load-unpacked').classList.remove('dev-button-visible'); |
| 134 $('pack-extension').classList.add('dev-button-hidden'); |
| 135 $('pack-extension').classList.remove('dev-button-visible'); |
| 136 $('update-extensions-now').classList.add('dev-button-hidden'); |
| 137 $('update-extensions-now').classList.remove('dev-button-visible'); |
| 138 } |
| 139 |
| 140 chrome.send('extensionSettingsToggleDeveloperMode', []); |
| 141 }, |
| 142 }; |
| 143 |
| 144 /** |
| 145 * Called by the dom_ui_ to re-populate the page with data representing |
| 146 * the current state of installed extensions. |
| 147 */ |
| 148 ExtensionSettings.returnExtensionsData = function(extensionsData) { |
| 149 webui_responded_ = true; |
| 150 |
| 151 $('no-extensions').hidden = true; |
| 152 $('suggest-gallery').hidden = true; |
| 153 $('get-more-extensions-container').hidden = true; |
| 154 |
| 155 if (extensionsData.extensions.length > 0) { |
| 156 // Enforce order specified in the data or (if equal) then sort by |
| 157 // extension name (case-insensitive). |
| 158 extensionsData.extensions.sort(function(a, b) { |
| 159 if (a.order == b.order) { |
| 160 a = a.name.toLowerCase(); |
| 161 b = b.name.toLowerCase(); |
| 162 return a < b ? -1 : (a > b ? 1 : 0); |
| 163 } else { |
| 164 return a.order < b.order ? -1 : 1; |
| 165 } |
| 166 }); |
| 167 |
| 168 $('get-more-extensions-container').hidden = false; |
| 169 } else { |
| 170 $('no-extensions').hidden = false; |
| 171 $('suggest-gallery').hidden = false; |
| 172 } |
| 173 |
| 174 ExtensionsList.prototype.data_ = extensionsData; |
| 175 |
| 176 var extensionList = $('extension-settings-list'); |
| 177 ExtensionsList.decorate(extensionList); |
| 178 } |
| 179 |
| 180 // Export |
| 181 return { |
| 182 ExtensionSettings: ExtensionSettings |
| 183 }; |
| 184 }); |
OLD | NEW |