OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 <include src="../uber/uber_utils.js"> | 5 <include src="../uber/uber_utils.js"> |
6 <include src="extension_code.js"> | 6 <include src="extension_code.js"> |
7 <include src="extension_commands_overlay.js"> | 7 <include src="extension_commands_overlay.js"> |
8 <include src="extension_error_overlay.js"> | 8 <include src="extension_error_overlay.js"> |
9 <include src="extension_focus_manager.js"> | 9 <include src="extension_focus_manager.js"> |
10 <include src="extension_list.js"> | 10 <include src="extension_list.js"> |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
130 | 130 |
131 // Set the title. | 131 // Set the title. |
132 uber.setTitle(loadTimeData.getString('extensionSettings')); | 132 uber.setTitle(loadTimeData.getString('extensionSettings')); |
133 | 133 |
134 // This will request the data to show on the page and will get a response | 134 // This will request the data to show on the page and will get a response |
135 // back in returnExtensionsData. | 135 // back in returnExtensionsData. |
136 chrome.send('extensionSettingsRequestExtensionsData'); | 136 chrome.send('extensionSettingsRequestExtensionsData'); |
137 | 137 |
138 var extensionLoader = extensions.ExtensionLoader.getInstance(); | 138 var extensionLoader = extensions.ExtensionLoader.getInstance(); |
139 | 139 |
140 $('toggle-dev-on').addEventListener('change', | 140 $('toggle-dev-on').addEventListener('change', function(e) { |
141 this.handleToggleDevMode_.bind(this)); | 141 this.updateDevControlsVisibility_(true); |
142 $('dev-controls').addEventListener('webkitTransitionEnd', | 142 chrome.send('extensionSettingsToggleDeveloperMode', |
143 this.handleDevControlsTransitionEnd_.bind(this)); | 143 [$('toggle-dev-on').checked]); |
Dan Beam
2015/01/30 19:41:31
sending a true/false arg makes it harder for the J
| |
144 }.bind(this)); | |
145 | |
146 window.addEventListener('resize', function() { | |
Dan Beam
2015/01/30 19:41:31
this happens when zoomed
| |
147 this.updateDevControlsVisibility_(false); | |
148 }.bind(this)); | |
144 | 149 |
145 // Set up the three dev mode buttons (load unpacked, pack and update). | 150 // Set up the three dev mode buttons (load unpacked, pack and update). |
146 $('load-unpacked').addEventListener('click', function(e) { | 151 $('load-unpacked').addEventListener('click', function(e) { |
147 extensionLoader.loadUnpacked(); | 152 extensionLoader.loadUnpacked(); |
148 }); | 153 }); |
149 $('pack-extension').addEventListener('click', | 154 $('pack-extension').addEventListener('click', |
150 this.handlePackExtension_.bind(this)); | 155 this.handlePackExtension_.bind(this)); |
151 $('update-extensions-now').addEventListener('click', | 156 $('update-extensions-now').addEventListener('click', |
152 this.handleUpdateExtensionNow_.bind(this)); | 157 this.handleUpdateExtensionNow_.bind(this)); |
153 | 158 |
154 // Set up the close dialog for the apps developer tools promo. | 159 // Set up the close dialog for the apps developer tools promo. |
155 $('apps-developer-tools-promo').querySelector('.close-button'). | 160 $('apps-developer-tools-promo').querySelector('.close-button'). |
156 addEventListener('click', function(e) { | 161 addEventListener('click', function(e) { |
157 this.displayPromo_ = false; | 162 this.displayPromo_ = false; |
158 this.updatePromoVisibility_(); | 163 this.updateDevControlsVisibility_(true); |
159 chrome.send('extensionSettingsDismissADTPromo'); | 164 chrome.send('extensionSettingsDismissADTPromo'); |
165 | |
166 if (cr.ui.FocusOutlineManager.forDocument(document).visible) | |
167 $('update-extensions-now').focus(); | |
Dan Beam
2015/01/30 19:41:30
this moves the focus if the keyboard was used to h
| |
160 }.bind(this)); | 168 }.bind(this)); |
161 | 169 |
162 if (!loadTimeData.getBoolean('offStoreInstallEnabled')) { | 170 if (!loadTimeData.getBoolean('offStoreInstallEnabled')) { |
163 this.dragWrapper_ = new cr.ui.DragWrapper(document.documentElement, | 171 this.dragWrapper_ = new cr.ui.DragWrapper(document.documentElement, |
164 dragWrapperHandler); | 172 dragWrapperHandler); |
165 } | 173 } |
166 | 174 |
167 extensions.PackExtensionOverlay.getInstance().initializePage(); | 175 extensions.PackExtensionOverlay.getInstance().initializePage(); |
168 | 176 |
169 // Hook up the configure commands link to the overlay. | 177 // Hook up the configure commands link to the overlay. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
201 var path = document.location.pathname; | 209 var path = document.location.pathname; |
202 if (path.length > 1) { | 210 if (path.length > 1) { |
203 // Skip starting slash and remove trailing slash (if any). | 211 // Skip starting slash and remove trailing slash (if any). |
204 var overlayName = path.slice(1).replace(/\/$/, ''); | 212 var overlayName = path.slice(1).replace(/\/$/, ''); |
205 if (overlayName == 'configureCommands') | 213 if (overlayName == 'configureCommands') |
206 this.showExtensionCommandsConfigUi_(); | 214 this.showExtensionCommandsConfigUi_(); |
207 } | 215 } |
208 }, | 216 }, |
209 | 217 |
210 /** | 218 /** |
211 * Updates the Chrome Apps and Extensions Developer Tools promotion's | |
212 * visibility. | |
213 * @private | |
214 */ | |
215 updatePromoVisibility_: function() { | |
Dan Beam
2015/01/30 19:41:31
combined updatePromoVisibility_ and handleToggleDe
| |
216 var extensionSettings = $('extension-settings'); | |
217 var visible = extensionSettings.classList.contains('dev-mode') && | |
218 this.displayPromo_; | |
219 | |
220 var adtPromo = $('apps-developer-tools-promo'); | |
221 var controls = adtPromo.querySelectorAll('a, button'); | |
222 Array.prototype.forEach.call(controls, function(control) { | |
223 control[visible ? 'removeAttribute' : 'setAttribute']('tabindex', '-1'); | |
224 }); | |
225 | |
226 adtPromo.setAttribute('aria-hidden', !visible); | |
227 extensionSettings.classList.toggle('adt-promo', visible); | |
228 }, | |
229 | |
230 /** | |
231 * Handles the Pack Extension button. | 219 * Handles the Pack Extension button. |
232 * @param {Event} e Change event. | 220 * @param {Event} e Change event. |
233 * @private | 221 * @private |
234 */ | 222 */ |
235 handlePackExtension_: function(e) { | 223 handlePackExtension_: function(e) { |
236 ExtensionSettings.showOverlay($('pack-extension-overlay')); | 224 ExtensionSettings.showOverlay($('pack-extension-overlay')); |
237 chrome.send('metricsHandler:recordAction', ['Options_PackExtension']); | 225 chrome.send('metricsHandler:recordAction', ['Options_PackExtension']); |
238 }, | 226 }, |
239 | 227 |
240 /** | 228 /** |
(...skipping 19 matching lines...) Expand all Loading... | |
260 /** | 248 /** |
261 * Handles the Update Extension Now button. | 249 * Handles the Update Extension Now button. |
262 * @param {Event} e Change event. | 250 * @param {Event} e Change event. |
263 * @private | 251 * @private |
264 */ | 252 */ |
265 handleUpdateExtensionNow_: function(e) { | 253 handleUpdateExtensionNow_: function(e) { |
266 chrome.send('extensionSettingsAutoupdate'); | 254 chrome.send('extensionSettingsAutoupdate'); |
267 }, | 255 }, |
268 | 256 |
269 /** | 257 /** |
270 * Handles the Toggle Dev Mode button. | 258 * Updates the visibility of the developer controls based on whether the |
271 * @param {Event} e Change event. | 259 * [x] Developer mode checkbox is checked. Also called if a user dismisses |
260 * the apps developer tools promo. | |
261 * @param {boolean} animated Whether to animate any updates. | |
272 * @private | 262 * @private |
273 */ | 263 */ |
274 handleToggleDevMode_: function(e) { | 264 updateDevControlsVisibility_: function(animated) { |
275 if ($('toggle-dev-on').checked) { | 265 var showDevControls = $('toggle-dev-on').checked; |
276 $('dev-controls').hidden = false; | 266 $('extension-settings').classList.toggle('dev-mode', showDevControls); |
277 window.setTimeout(function() { | |
278 $('extension-settings').classList.add('dev-mode'); | |
279 }, 0); | |
280 } else { | |
281 $('extension-settings').classList.remove('dev-mode'); | |
282 } | |
283 window.setTimeout(this.updatePromoVisibility_.bind(this), 0); | |
284 | 267 |
285 chrome.send('extensionSettingsToggleDeveloperMode'); | 268 var devControls = $('dev-controls'); |
286 }, | 269 devControls.classList.toggle('animated', animated); |
287 | 270 |
288 /** | 271 var buttons = devControls.querySelector('.button-container'); |
289 * Called when a transition has ended for #dev-controls. | 272 var adtPromo = $('apps-developer-tools-promo'); |
290 * @param {Event} e webkitTransitionEnd event. | 273 [ |
291 * @private | 274 {root: buttons, focusable: showDevControls}, |
292 */ | 275 {root: adtPromo, focusable: showDevControls && this.displayPromo_}, |
293 handleDevControlsTransitionEnd_: function(e) { | 276 ].forEach(function(entry) { |
294 if (e.propertyName == 'height' && | 277 var controls = entry.root.querySelectorAll('a, button'); |
295 !$('extension-settings').classList.contains('dev-mode')) { | 278 Array.prototype.forEach.call(controls, function(control) { |
296 $('dev-controls').hidden = true; | 279 control.tabIndex = entry.focusable ? 0 : -1; |
297 } | 280 }); |
281 entry.root.setAttribute('aria-hidden', !entry.focusable); | |
282 }); | |
283 | |
284 window.requestAnimationFrame(function() { | |
285 devControls.style.height = !showDevControls ? '' : | |
286 (this.displayPromo_ ? adtPromo.offsetHeight : 0) + | |
287 buttons.offsetHeight + 'px'; | |
288 }.bind(this)); | |
298 }, | 289 }, |
299 }; | 290 }; |
300 | 291 |
301 /** | 292 /** |
302 * Called by the dom_ui_ to re-populate the page with data representing | 293 * Called by the dom_ui_ to re-populate the page with data representing |
303 * the current state of installed extensions. | 294 * the current state of installed extensions. |
304 * @param {ExtensionDataResponse} extensionsData | 295 * @param {ExtensionDataResponse} extensionsData |
305 */ | 296 */ |
306 ExtensionSettings.returnExtensionsData = function(extensionsData) { | 297 ExtensionSettings.returnExtensionsData = function(extensionsData) { |
307 // We can get called many times in short order, thus we need to | 298 // We can get called many times in short order, thus we need to |
(...skipping 14 matching lines...) Expand all Loading... | |
322 extensionsData.extensions.sort(function(a, b) { | 313 extensionsData.extensions.sort(function(a, b) { |
323 function compare(x, y) { | 314 function compare(x, y) { |
324 return x < y ? -1 : (x > y ? 1 : 0); | 315 return x < y ? -1 : (x > y ? 1 : 0); |
325 } | 316 } |
326 return compare(a.order, b.order) || | 317 return compare(a.order, b.order) || |
327 compare(a.name.toLowerCase(), b.name.toLowerCase()) || | 318 compare(a.name.toLowerCase(), b.name.toLowerCase()) || |
328 compare(a.id, b.id); | 319 compare(a.id, b.id); |
329 }); | 320 }); |
330 } | 321 } |
331 | 322 |
323 var supervised = extensionsData.profileIsSupervised; | |
324 | |
332 var pageDiv = $('extension-settings'); | 325 var pageDiv = $('extension-settings'); |
333 var marginTop = 0; | 326 pageDiv.classList.toggle('profile-is-supervised', supervised); |
334 if (extensionsData.profileIsSupervised) { | 327 pageDiv.classList.toggle('showing-banner', supervised); |
335 pageDiv.classList.add('profile-is-supervised'); | |
336 } else { | |
337 pageDiv.classList.remove('profile-is-supervised'); | |
338 } | |
339 if (extensionsData.profileIsSupervised) { | |
340 pageDiv.classList.add('showing-banner'); | |
341 $('toggle-dev-on').disabled = true; | |
342 marginTop += 45; | |
343 } else { | |
344 pageDiv.classList.remove('showing-banner'); | |
345 $('toggle-dev-on').disabled = false; | |
346 } | |
347 | 328 |
348 pageDiv.style.marginTop = marginTop + 'px'; | 329 var devControlsCheckbox = $('toggle-dev-on'); |
330 devControlsCheckbox.checked = extensionsData.developerMode; | |
331 devControlsCheckbox.disabled = supervised; | |
349 | 332 |
350 if (extensionsData.developerMode) { | 333 var instance = ExtensionSettings.getInstance(); |
351 pageDiv.classList.add('dev-mode'); | 334 instance.displayPromo_ = extensionsData.promoteAppsDevTools; |
352 $('toggle-dev-on').checked = true; | 335 instance.updateDevControlsVisibility_(false); |
Dan Beam
2015/01/30 19:41:30
most of this is purely simplifications or moving f
| |
353 $('dev-controls').hidden = false; | |
354 } else { | |
355 pageDiv.classList.remove('dev-mode'); | |
356 $('toggle-dev-on').checked = false; | |
357 } | |
358 | |
359 ExtensionSettings.getInstance().displayPromo_ = | |
360 extensionsData.promoteAppsDevTools; | |
361 ExtensionSettings.getInstance().updatePromoVisibility_(); | |
362 | 336 |
363 $('load-unpacked').disabled = extensionsData.loadUnpackedDisabled; | 337 $('load-unpacked').disabled = extensionsData.loadUnpackedDisabled; |
364 | 338 |
365 ExtensionsList.prototype.data_ = extensionsData; | 339 ExtensionsList.prototype.data_ = extensionsData; |
366 var extensionList = $('extension-settings-list'); | 340 var extensionList = $('extension-settings-list'); |
367 ExtensionsList.decorate(extensionList); | 341 ExtensionsList.decorate(extensionList); |
368 }; | 342 }; |
369 | 343 |
370 // Indicate that warning |message| has occured for pack of |crx_path| and | 344 // Indicate that warning |message| has occured for pack of |crx_path| and |
371 // |pem_path| files. Ask if user wants override the warning. Send | 345 // |pem_path| files. Ask if user wants override the warning. Send |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
470 | 444 |
471 // Export | 445 // Export |
472 return { | 446 return { |
473 ExtensionSettings: ExtensionSettings | 447 ExtensionSettings: ExtensionSettings |
474 }; | 448 }; |
475 }); | 449 }); |
476 | 450 |
477 window.addEventListener('load', function(e) { | 451 window.addEventListener('load', function(e) { |
478 extensions.ExtensionSettings.getInstance().initialize(); | 452 extensions.ExtensionSettings.getInstance().initialize(); |
479 }); | 453 }); |
OLD | NEW |