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

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

Issue 252593003: Improve UI for unpacked extensions failing to load (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Resources updated Created 6 years, 8 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
(Empty)
1 // Copyright 2014 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 'use strict';
7
8 /**
9 * Construct an ExtensionLoadError around the given |div|.
10 * @param {HTMLDivElement} div The HTML div for the extension load error.
11 * @constructor
12 */
13 function ExtensionLoadError(div) {
14 div.__proto__ = ExtensionLoadError.prototype;
15 div.init();
16 return div;
17 }
18
19 ExtensionLoadError.prototype = {
20 __proto__: HTMLDivElement.prototype,
21
22 /**
23 * Initialize the ExtensionLoadError div.
24 */
25 init: function() {
26 this.path_ = this.querySelector('#extension-load-error-path');
27 this.reason_ = this.querySelector('#extension-load-error-reason');
28 this.manifest_ = this.querySelector('#extension-load-error-manifest');
29
30 this.querySelector('#extension-load-error-retry-button').addEventListener(
31 'click', function(e) {
32 chrome.send('extensionLoaderRetry');
33 this.hide_();
34 }.bind(this));
35
36 this.querySelector('#extension-load-error-give-up-button').
37 addEventListener('click', function(e) {
38 this.hide_();
39 }.bind(this));
40 },
41
42 /**
43 * Display the load error to the user.
44 * @param {string} path The path from which the extension was loaded.
45 * @param {string} reason The reason the extension failed to load.
46 * @param {string} manifest The manifest object, with highlighted regions.
47 */
48 show: function(path, reason, manifest) {
49 this.path_.textContent = path;
50 this.reason_.textContent = reason;
51
52 manifest.message = reason;
53 extensions.ExtensionUtil.populateCodeDiv(
54 this.manifest_,
55 manifest,
56 loadTimeData.getString('extensionLoadCouldNotLoadManifest'));
57 this.hidden = false;
58
59 var errorSpan =
60 this.manifest_.querySelector('.extension-code-highlighted-source');
61 if (errorSpan)
62 errorSpan.scrollIntoView(false);
63 },
64
65 /**
66 * Hide the extension load error.
67 * @private
68 */
69 hide_: function() {
70 this.hidden = true;
71 }
72 };
73
74 /**
75 * The ExtensionLoader is the class in charge of loading unpacked extensions.
76 * @constructor
77 */
78 function ExtensionLoader() {
79 this.__proto__ = ExtensionLoader.prototype;
not at google - send to devlin 2014/04/25 20:15:52 don't need this here
Devlin 2014/04/25 20:48:40 Done.
80 this.init();
not at google - send to devlin 2014/04/25 20:15:52 and it seems like you might as well inline init()
Devlin 2014/04/25 20:48:40 It's small enough. Sure.
81 }
82
83 cr.addSingletonGetter(ExtensionLoader);
84
85 ExtensionLoader.prototype = {
86 /**
87 * Perform first-time initialization.
88 */
89 init: function() {
90 /**
91 * The ExtensionLoadError to show any errors from loading an unpacked
92 * extension.
93 * @type {ExtensionLoadError}
94 * @private
95 */
96 this.loadError_ = new ExtensionLoadError($('extension-load-error'));
97 },
98
99 /**
100 * Begin the sequence of loading an unpacked extension. If an error is
101 * encountered, this object will get notified via notifyFailed().
102 */
103 loadUnpacked: function() {
104 chrome.send('extensionLoaderLoadUnpacked');
105 },
106
107 /**
108 * Notify the ExtensionLoader that loading an unpacked extension failed.
109 * Show the ExtensionLoadError.
110 * @param {string} filePath The path to the unpacked extension.
111 * @param {string} reason The reason the extension failed to load.
112 * @param {Object} manifest An object with three strings: beforeHighlight,
113 * afterHighlight, and highlight. These represent three portions of the
114 * file's content to display - the portion which is most relevant and
115 * should be emphasized (highlight), and the parts both before and after
116 * this portion. These may be empty.
117 */
118 notifyFailed: function(filePath, reason, manifest) {
119 this.loadError_.show(filePath, reason, manifest);
120 }
121 };
122
123 /*
124 * A static forwarding function for ExtensionLoader.notifyFailed.
125 * @param {string} filePath The path to the unpacked extension.
126 * @param {string} reason The reason the extension failed to load.
127 * @param {Object} manifest The manifest of the failed extension.
128 * @see ExtensionLoader.notifyFailed
129 */
130 ExtensionLoader.notifyLoadFailed = function(filePath, reason, manifest) {
131 ExtensionLoader.getInstance().notifyFailed(filePath, reason, manifest);
132 };
133
134 return {
135 ExtensionLoader: ExtensionLoader
136 };
137 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698