Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: chrome/browser/resources/extensions/extensions.js

Issue 406713002: Allow drag-and-drop of zipped extensions on chrome://extensions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add zipfile installer Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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_focus_manager.js"> 8 <include src="extension_focus_manager.js">
9 <include src="extension_list.js"> 9 <include src="extension_list.js">
10 <include src="pack_extension_overlay.js"> 10 <include src="pack_extension_overlay.js">
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 // its item entry. 59 // its item entry.
60 for (var i = 0; i < e.dataTransfer.items.length; ++i) { 60 for (var i = 0; i < e.dataTransfer.items.length; ++i) {
61 if (e.dataTransfer.items[i].kind == 'file' && 61 if (e.dataTransfer.items[i].kind == 'file' &&
62 e.dataTransfer.items[i].webkitGetAsEntry().isDirectory) { 62 e.dataTransfer.items[i].webkitGetAsEntry().isDirectory) {
63 toSend = 'installDroppedDirectory'; 63 toSend = 'installDroppedDirectory';
64 break; 64 break;
65 } 65 }
66 } 66 }
67 // Only process files that look like extensions. Other files should 67 // Only process files that look like extensions. Other files should
68 // navigate the browser normally. 68 // navigate the browser normally.
69 if (!toSend && /\.(crx|user\.js)$/i.test(e.dataTransfer.files[0].name)) 69 if (!toSend &&
70 /\.(crx|user\.js|zip)$/i.test(e.dataTransfer.files[0].name)) {
70 toSend = 'installDroppedFile'; 71 toSend = 'installDroppedFile';
72 }
71 73
72 if (toSend) { 74 if (toSend) {
73 e.preventDefault(); 75 e.preventDefault();
74 chrome.send(toSend); 76 chrome.send(toSend);
75 } 77 }
76 } 78 }
77 }; 79 };
78 80
79 /** 81 /**
80 * ExtensionSettings class 82 * ExtensionSettings class
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 332
331 ExtensionSettings.getInstance().displayPromo_ = 333 ExtensionSettings.getInstance().displayPromo_ =
332 extensionsData.promoteAppsDevTools; 334 extensionsData.promoteAppsDevTools;
333 ExtensionSettings.getInstance().updatePromoVisibility_(); 335 ExtensionSettings.getInstance().updatePromoVisibility_();
334 336
335 $('load-unpacked').disabled = extensionsData.loadUnpackedDisabled; 337 $('load-unpacked').disabled = extensionsData.loadUnpackedDisabled;
336 338
337 ExtensionsList.prototype.data_ = extensionsData; 339 ExtensionsList.prototype.data_ = extensionsData;
338 var extensionList = $('extension-settings-list'); 340 var extensionList = $('extension-settings-list');
339 ExtensionsList.decorate(extensionList); 341 ExtensionsList.decorate(extensionList);
340 } 342 };
341 343
342 // 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
343 // |pem_path| files. Ask if user wants override the warning. Send 345 // |pem_path| files. Ask if user wants override the warning. Send
344 // |overrideFlags| to repeated 'pack' call to accomplish the override. 346 // |overrideFlags| to repeated 'pack' call to accomplish the override.
345 ExtensionSettings.askToOverrideWarning = 347 ExtensionSettings.askToOverrideWarning =
346 function(message, crx_path, pem_path, overrideFlags) { 348 function(message, crx_path, pem_path, overrideFlags) {
347 var closeAlert = function() { 349 var closeAlert = function() {
348 ExtensionSettings.showOverlay(null); 350 ExtensionSettings.showOverlay(null);
349 }; 351 };
350 352
351 alertOverlay.setValues( 353 alertOverlay.setValues(
352 loadTimeData.getString('packExtensionWarningTitle'), 354 loadTimeData.getString('packExtensionWarningTitle'),
353 message, 355 message,
354 loadTimeData.getString('packExtensionProceedAnyway'), 356 loadTimeData.getString('packExtensionProceedAnyway'),
355 loadTimeData.getString('cancel'), 357 loadTimeData.getString('cancel'),
356 function() { 358 function() {
357 chrome.send('pack', [crx_path, pem_path, overrideFlags]); 359 chrome.send('pack', [crx_path, pem_path, overrideFlags]);
358 closeAlert(); 360 closeAlert();
359 }, 361 },
360 closeAlert); 362 closeAlert);
361 ExtensionSettings.showOverlay($('alertOverlay')); 363 ExtensionSettings.showOverlay($('alertOverlay'));
362 } 364 };
363 365
364 /** 366 /**
365 * Returns the current overlay or null if one does not exist. 367 * Returns the current overlay or null if one does not exist.
366 * @return {Element} The overlay element. 368 * @return {Element} The overlay element.
367 */ 369 */
368 ExtensionSettings.getCurrentOverlay = function() { 370 ExtensionSettings.getCurrentOverlay = function() {
369 return document.querySelector('#overlay .page.showing'); 371 return document.querySelector('#overlay .page.showing');
370 } 372 };
371 373
372 /** 374 /**
373 * Sets the given overlay to show. This hides whatever overlay is currently 375 * Sets the given overlay to show. This hides whatever overlay is currently
374 * showing, if any. 376 * showing, if any.
375 * @param {HTMLElement} node The overlay page to show. If falsey, all overlays 377 * @param {HTMLElement} node The overlay page to show. If falsey, all overlays
376 * are hidden. 378 * are hidden.
377 */ 379 */
378 ExtensionSettings.showOverlay = function(node) { 380 ExtensionSettings.showOverlay = function(node) {
379 var pageDiv = $('extension-settings'); 381 var pageDiv = $('extension-settings');
380 if (node) { 382 if (node) {
(...skipping 12 matching lines...) Expand all
393 node.classList.add('showing'); 395 node.classList.add('showing');
394 396
395 var pages = document.querySelectorAll('.page'); 397 var pages = document.querySelectorAll('.page');
396 for (var i = 0; i < pages.length; i++) { 398 for (var i = 0; i < pages.length; i++) {
397 pages[i].setAttribute('aria-hidden', node ? 'true' : 'false'); 399 pages[i].setAttribute('aria-hidden', node ? 'true' : 'false');
398 } 400 }
399 401
400 overlay.hidden = !node; 402 overlay.hidden = !node;
401 uber.invokeMethodOnParent(node ? 'beginInterceptingEvents' : 403 uber.invokeMethodOnParent(node ? 'beginInterceptingEvents' :
402 'stopInterceptingEvents'); 404 'stopInterceptingEvents');
403 } 405 };
404 406
405 /** 407 /**
406 * Utility function to find the width of various UI strings and synchronize 408 * Utility function to find the width of various UI strings and synchronize
407 * the width of relevant spans. This is crucial for making sure the 409 * the width of relevant spans. This is crucial for making sure the
408 * Enable/Enabled checkboxes align, as well as the Developer Mode checkbox. 410 * Enable/Enabled checkboxes align, as well as the Developer Mode checkbox.
409 */ 411 */
410 function measureCheckboxStrings() { 412 function measureCheckboxStrings() {
411 var trashWidth = 30; 413 var trashWidth = 30;
412 var measuringDiv = $('font-measuring-div'); 414 var measuringDiv = $('font-measuring-div');
413 measuringDiv.textContent = 415 measuringDiv.textContent =
414 loadTimeData.getString('extensionSettingsEnabled'); 416 loadTimeData.getString('extensionSettingsEnabled');
415 var pxWidth = measuringDiv.clientWidth + trashWidth; 417 var pxWidth = measuringDiv.clientWidth + trashWidth;
416 measuringDiv.textContent = 418 measuringDiv.textContent =
417 loadTimeData.getString('extensionSettingsEnable'); 419 loadTimeData.getString('extensionSettingsEnable');
418 pxWidth = Math.max(measuringDiv.clientWidth + trashWidth, pxWidth); 420 pxWidth = Math.max(measuringDiv.clientWidth + trashWidth, pxWidth);
419 measuringDiv.textContent = 421 measuringDiv.textContent =
420 loadTimeData.getString('extensionSettingsDeveloperMode'); 422 loadTimeData.getString('extensionSettingsDeveloperMode');
421 pxWidth = Math.max(measuringDiv.clientWidth, pxWidth); 423 pxWidth = Math.max(measuringDiv.clientWidth, pxWidth);
422 424
423 var style = document.createElement('style'); 425 var style = document.createElement('style');
424 style.type = 'text/css'; 426 style.type = 'text/css';
425 style.textContent = 427 style.textContent =
426 '.enable-checkbox-text {' + 428 '.enable-checkbox-text {' +
427 ' min-width: ' + (pxWidth - trashWidth) + 'px;' + 429 ' min-width: ' + (pxWidth - trashWidth) + 'px;' +
428 '}' + 430 '}' +
429 '#dev-toggle span {' + 431 '#dev-toggle span {' +
430 ' min-width: ' + pxWidth + 'px;' + 432 ' min-width: ' + pxWidth + 'px;' +
431 '}'; 433 '}';
432 document.querySelector('head').appendChild(style); 434 document.querySelector('head').appendChild(style);
433 } 435 };
434 436
435 // Export 437 // Export
436 return { 438 return {
437 ExtensionSettings: ExtensionSettings 439 ExtensionSettings: ExtensionSettings
438 }; 440 };
439 }); 441 });
440 442
441 window.addEventListener('load', function(e) { 443 window.addEventListener('load', function(e) {
442 extensions.ExtensionSettings.getInstance().initialize(); 444 extensions.ExtensionSettings.getInstance().initialize();
443 }); 445 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698