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

Side by Side Diff: chrome/browser/ui/webui/extensions/extension_settings_handler.h

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
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 #ifndef CHROME_BROWSER_UI_WEBUI_EXTENSIONS_EXTENSION_SETTINGS_HANDLER_H_ 5 #ifndef CHROME_BROWSER_UI_WEBUI_EXTENSIONS_EXTENSION_SETTINGS_HANDLER_H_
6 #define CHROME_BROWSER_UI_WEBUI_EXTENSIONS_EXTENSION_SETTINGS_HANDLER_H_ 6 #define CHROME_BROWSER_UI_WEBUI_EXTENSIONS_EXTENSION_SETTINGS_HANDLER_H_
7 7
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/prefs/pref_change_registrar.h" 13 #include "base/prefs/pref_change_registrar.h"
14 #include "base/scoped_observer.h" 14 #include "base/scoped_observer.h"
15 #include "chrome/browser/extensions/error_console/error_console.h" 15 #include "chrome/browser/extensions/error_console/error_console.h"
16 #include "chrome/browser/extensions/extension_install_prompt.h" 16 #include "chrome/browser/extensions/extension_install_prompt.h"
17 #include "chrome/browser/extensions/extension_install_ui.h" 17 #include "chrome/browser/extensions/extension_install_ui.h"
18 #include "chrome/browser/extensions/extension_uninstall_dialog.h" 18 #include "chrome/browser/extensions/extension_uninstall_dialog.h"
19 #include "chrome/browser/extensions/extension_warning_service.h" 19 #include "chrome/browser/extensions/extension_warning_service.h"
20 #include "chrome/browser/extensions/requirements_checker.h" 20 #include "chrome/browser/extensions/requirements_checker.h"
21 #include "content/public/browser/navigation_controller.h" 21 #include "content/public/browser/navigation_controller.h"
22 #include "content/public/browser/notification_observer.h" 22 #include "content/public/browser/notification_observer.h"
23 #include "content/public/browser/notification_registrar.h" 23 #include "content/public/browser/notification_registrar.h"
24 #include "content/public/browser/web_contents_observer.h" 24 #include "content/public/browser/web_contents_observer.h"
25 #include "content/public/browser/web_ui_message_handler.h" 25 #include "content/public/browser/web_ui_message_handler.h"
26 #include "extensions/browser/extension_prefs.h" 26 #include "extensions/browser/extension_prefs.h"
27 #include "extensions/browser/extension_prefs_observer.h" 27 #include "extensions/browser/extension_prefs_observer.h"
28 #include "ui/shell_dialogs/select_file_dialog.h"
29 #include "url/gurl.h" 28 #include "url/gurl.h"
30 29
31 class ExtensionService; 30 class ExtensionService;
32 31
33 namespace base { 32 namespace base {
34 class DictionaryValue; 33 class DictionaryValue;
35 class FilePath; 34 class FilePath;
36 class ListValue; 35 class ListValue;
37 } 36 }
38 37
(...skipping 22 matching lines...) Expand all
61 int render_view_id; 60 int render_view_id;
62 bool incognito; 61 bool incognito;
63 bool generated_background_page; 62 bool generated_background_page;
64 }; 63 };
65 64
66 // Extension Settings UI handler. 65 // Extension Settings UI handler.
67 class ExtensionSettingsHandler 66 class ExtensionSettingsHandler
68 : public content::WebUIMessageHandler, 67 : public content::WebUIMessageHandler,
69 public content::NotificationObserver, 68 public content::NotificationObserver,
70 public content::WebContentsObserver, 69 public content::WebContentsObserver,
71 public ui::SelectFileDialog::Listener,
72 public ErrorConsole::Observer, 70 public ErrorConsole::Observer,
73 public ExtensionInstallPrompt::Delegate, 71 public ExtensionInstallPrompt::Delegate,
74 public ExtensionPrefsObserver, 72 public ExtensionPrefsObserver,
75 public ExtensionUninstallDialog::Delegate, 73 public ExtensionUninstallDialog::Delegate,
76 public ExtensionWarningService::Observer, 74 public ExtensionWarningService::Observer,
77 public base::SupportsWeakPtr<ExtensionSettingsHandler> { 75 public base::SupportsWeakPtr<ExtensionSettingsHandler> {
78 public: 76 public:
79 ExtensionSettingsHandler(); 77 ExtensionSettingsHandler();
80 virtual ~ExtensionSettingsHandler(); 78 virtual ~ExtensionSettingsHandler();
81 79
(...skipping 20 matching lines...) Expand all
102 const GURL& url, 100 const GURL& url,
103 content::NavigationController::ReloadType reload_type) OVERRIDE; 101 content::NavigationController::ReloadType reload_type) OVERRIDE;
104 102
105 // Allows injection for testing by friend classes. 103 // Allows injection for testing by friend classes.
106 ExtensionSettingsHandler(ExtensionService* service, 104 ExtensionSettingsHandler(ExtensionService* service,
107 ManagementPolicy* policy); 105 ManagementPolicy* policy);
108 106
109 // WebUIMessageHandler implementation. 107 // WebUIMessageHandler implementation.
110 virtual void RegisterMessages() OVERRIDE; 108 virtual void RegisterMessages() OVERRIDE;
111 109
112 // Loads an unpacked extension from |path|.
113 void LoadUnpackedExtension(const base::FilePath& path);
114
115 // Returns the index of the given FilePath in the vector of currently loading
116 // extensions. Returns -1 if not found.
117 int IndexOfLoadingPath(const base::FilePath& path);
118
119 // Adds |path| to the vector of currently loading extensions. Registers
120 // for the load retry notification if vector is empty before call.
121 void AddLoadingPath(const base::FilePath& path);
122
123 // Removes |path| from the vector of currently loading extensions. Unregisters
124 // for the load retry notification if vector is empty after call.
125 void RemoveLoadingPath(const base::FilePath& path);
126
127 // SelectFileDialog::Listener implementation.
128 virtual void FileSelected(const base::FilePath& path,
129 int index,
130 void* params) OVERRIDE;
131 virtual void MultiFilesSelected(
132 const std::vector<base::FilePath>& files, void* params) OVERRIDE;
133 virtual void FileSelectionCanceled(void* params) OVERRIDE;
134
135 // ErrorConsole::Observer implementation. 110 // ErrorConsole::Observer implementation.
136 virtual void OnErrorAdded(const ExtensionError* error) OVERRIDE; 111 virtual void OnErrorAdded(const ExtensionError* error) OVERRIDE;
137 112
138 // content::NotificationObserver implementation. 113 // content::NotificationObserver implementation.
139 virtual void Observe(int type, 114 virtual void Observe(int type,
140 const content::NotificationSource& source, 115 const content::NotificationSource& source,
141 const content::NotificationDetails& details) OVERRIDE; 116 const content::NotificationDetails& details) OVERRIDE;
142 117
143 // ExtensionPrefsObserver implementation. 118 // ExtensionPrefsObserver implementation.
144 virtual void OnExtensionDisableReasonsChanged(const std::string& extension_id, 119 virtual void OnExtensionDisableReasonsChanged(const std::string& extension_id,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 169
195 // Callback for "permissions" message. 170 // Callback for "permissions" message.
196 void HandlePermissionsMessage(const base::ListValue* args); 171 void HandlePermissionsMessage(const base::ListValue* args);
197 172
198 // Callback for "showButton" message. 173 // Callback for "showButton" message.
199 void HandleShowButtonMessage(const base::ListValue* args); 174 void HandleShowButtonMessage(const base::ListValue* args);
200 175
201 // Callback for "autoupdate" message. 176 // Callback for "autoupdate" message.
202 void HandleAutoUpdateMessage(const base::ListValue* args); 177 void HandleAutoUpdateMessage(const base::ListValue* args);
203 178
204 // Callback for "loadUnpackedExtension" message.
205 void HandleLoadUnpackedExtensionMessage(const base::ListValue* args);
206
207 // Callback for the "dismissADTPromo" message. 179 // Callback for the "dismissADTPromo" message.
208 void HandleDismissADTPromoMessage(const base::ListValue* args); 180 void HandleDismissADTPromoMessage(const base::ListValue* args);
209 181
210 // Utility for calling JavaScript window.alert in the page. 182 // Utility for calling JavaScript window.alert in the page.
211 void ShowAlert(const std::string& message); 183 void ShowAlert(const std::string& message);
212 184
213 // Utility for callbacks that get an extension ID as the sole argument. 185 // Utility for callbacks that get an extension ID as the sole argument.
214 // Returns NULL if the extension isn't active. 186 // Returns NULL if the extension isn't active.
215 const Extension* GetActiveExtension(const base::ListValue* args); 187 const Extension* GetActiveExtension(const base::ListValue* args);
216 188
(...skipping 30 matching lines...) Expand all
247 // Does nothing if |path| is not a currently loading extension this object is 219 // Does nothing if |path| is not a currently loading extension this object is
248 // tracking. 220 // tracking.
249 void HandleLoadRetryMessage(bool retry, const base::FilePath& path); 221 void HandleLoadRetryMessage(bool retry, const base::FilePath& path);
250 222
251 // Our model. Outlives us since it's owned by our containing profile. 223 // Our model. Outlives us since it's owned by our containing profile.
252 ExtensionService* extension_service_; 224 ExtensionService* extension_service_;
253 225
254 // A convenience member, filled once the extension_service_ is known. 226 // A convenience member, filled once the extension_service_ is known.
255 ManagementPolicy* management_policy_; 227 ManagementPolicy* management_policy_;
256 228
257 // Used to pick the directory when loading an extension.
258 scoped_refptr<ui::SelectFileDialog> load_extension_dialog_;
259
260 // Used to start the |load_extension_dialog_| in the last directory that was
261 // loaded.
262 base::FilePath last_unpacked_directory_;
263
264 // Used to keep track of FilePaths for all extensions in the process of
265 // loading for the purpose of retrying on load failure.
266 std::vector<base::FilePath> loading_extension_directories_;
267
268 // Used to show confirmation UI for uninstalling extensions in incognito mode. 229 // Used to show confirmation UI for uninstalling extensions in incognito mode.
269 scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_; 230 scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_;
270 231
271 // The id of the extension we are prompting the user about. 232 // The id of the extension we are prompting the user about.
272 std::string extension_id_prompting_; 233 std::string extension_id_prompting_;
273 234
274 // If true, we will ignore notifications in ::Observe(). This is needed 235 // If true, we will ignore notifications in ::Observe(). This is needed
275 // to prevent reloading the page when we were the cause of the 236 // to prevent reloading the page when we were the cause of the
276 // notification. 237 // notification.
277 bool ignore_notifications_; 238 bool ignore_notifications_;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 // Whether we found any DISABLE_NOT_VERIFIED extensions and want to kick off 279 // Whether we found any DISABLE_NOT_VERIFIED extensions and want to kick off
319 // a verification check to try and rescue them. 280 // a verification check to try and rescue them.
320 bool should_do_verification_check_; 281 bool should_do_verification_check_;
321 282
322 DISALLOW_COPY_AND_ASSIGN(ExtensionSettingsHandler); 283 DISALLOW_COPY_AND_ASSIGN(ExtensionSettingsHandler);
323 }; 284 };
324 285
325 } // namespace extensions 286 } // namespace extensions
326 287
327 #endif // CHROME_BROWSER_UI_WEBUI_EXTENSIONS_EXTENSION_SETTINGS_HANDLER_H_ 288 #endif // CHROME_BROWSER_UI_WEBUI_EXTENSIONS_EXTENSION_SETTINGS_HANDLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698