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

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: Android fix 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 /**
27 * The element which displays the path of the extension.
28 * @type {HTMLSpanElement}
29 * @private
30 */
31 this.path_ = this.querySelector('#extension-load-error-path');
32
33 /**
34 * The element which displays the reason the extension failed to load.
35 * @type {HTMLSpanElement}
36 * @private
37 */
38 this.reason_ = this.querySelector('#extension-load-error-reason');
39
40 /**
41 * The element which displays the manifest code.
42 * @type {ExtensionCode}
43 * @private
44 */
45 this.manifest_ = new extensions.ExtensionCode(
46 this.querySelector('#extension-load-error-manifest'));
47
48 this.querySelector('#extension-load-error-retry-button').addEventListener(
49 'click', function(e) {
50 chrome.send('extensionLoaderRetry');
51 this.hide_();
52 }.bind(this));
53
54 this.querySelector('#extension-load-error-give-up-button').
55 addEventListener('click', function(e) {
56 this.hide_();
57 }.bind(this));
58 },
59
60 /**
61 * Display the load error to the user.
62 * @param {string} path The path from which the extension was loaded.
63 * @param {string} reason The reason the extension failed to load.
64 * @param {string} manifest The manifest object, with highlighted regions.
65 */
66 show: function(path, reason, manifest) {
67 this.path_.textContent = path;
68 this.reason_.textContent = reason;
69
70 manifest.message = reason;
71 this.manifest_.populate(
72 manifest,
73 loadTimeData.getString('extensionLoadCouldNotLoadManifest'));
74 this.hidden = false;
75 this.manifest_.scrollToError();
76 },
77
78 /**
79 * Hide the extension load error.
80 * @private
81 */
82 hide_: function() {
83 this.hidden = true;
84 }
85 };
86
87 /**
88 * The ExtensionLoader is the class in charge of loading unpacked extensions.
89 * @constructor
90 */
91 function ExtensionLoader() {
92 /**
93 * The ExtensionLoadError to show any errors from loading an unpacked
94 * extension.
95 * @type {ExtensionLoadError}
96 * @private
97 */
98 this.loadError_ = new ExtensionLoadError($('extension-load-error'));
99 }
100
101 cr.addSingletonGetter(ExtensionLoader);
102
103 ExtensionLoader.prototype = {
104 /**
105 * Begin the sequence of loading an unpacked extension. If an error is
106 * encountered, this object will get notified via notifyFailed().
107 */
108 loadUnpacked: function() {
109 chrome.send('extensionLoaderLoadUnpacked');
110 },
111
112 /**
113 * Notify the ExtensionLoader that loading an unpacked extension failed.
114 * Show the ExtensionLoadError.
115 * @param {string} filePath The path to the unpacked extension.
116 * @param {string} reason The reason the extension failed to load.
117 * @param {Object} manifest An object with three strings: beforeHighlight,
118 * afterHighlight, and highlight. These represent three portions of the
119 * file's content to display - the portion which is most relevant and
120 * should be emphasized (highlight), and the parts both before and after
121 * this portion. These may be empty.
122 */
123 notifyFailed: function(filePath, reason, manifest) {
124 this.loadError_.show(filePath, reason, manifest);
125 }
126 };
127
128 /*
129 * A static forwarding function for ExtensionLoader.notifyFailed.
130 * @param {string} filePath The path to the unpacked extension.
131 * @param {string} reason The reason the extension failed to load.
132 * @param {Object} manifest The manifest of the failed extension.
133 * @see ExtensionLoader.notifyFailed
134 */
135 ExtensionLoader.notifyLoadFailed = function(filePath, reason, manifest) {
136 ExtensionLoader.getInstance().notifyFailed(filePath, reason, manifest);
137 };
138
139 return {
140 ExtensionLoader: ExtensionLoader
141 };
142 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/extensions/extension_load_error.html ('k') | chrome/browser/resources/extensions/extensions.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698