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 "chrome/browser/ui/webui/extensions/extension_settings_handler.h" | 5 #include "chrome/browser/ui/webui/extensions/extension_settings_handler.h" |
6 | 6 |
7 #include "apps/app_load_service.h" | 7 #include "apps/app_load_service.h" |
8 #include "apps/app_restore_service.h" | 8 #include "apps/app_restore_service.h" |
9 #include "apps/saved_files_service.h" | 9 #include "apps/saved_files_service.h" |
10 #include "apps/shell_window.h" | 10 #include "apps/shell_window.h" |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 | 111 |
112 ExtensionSettingsHandler::ExtensionSettingsHandler() | 112 ExtensionSettingsHandler::ExtensionSettingsHandler() |
113 : extension_service_(NULL), | 113 : extension_service_(NULL), |
114 management_policy_(NULL), | 114 management_policy_(NULL), |
115 ignore_notifications_(false), | 115 ignore_notifications_(false), |
116 deleting_rvh_(NULL), | 116 deleting_rvh_(NULL), |
117 registered_for_notifications_(false), | 117 registered_for_notifications_(false), |
118 rvh_created_callback_( | 118 rvh_created_callback_( |
119 base::Bind(&ExtensionSettingsHandler::RenderViewHostCreated, | 119 base::Bind(&ExtensionSettingsHandler::RenderViewHostCreated, |
120 base::Unretained(this))), | 120 base::Unretained(this))), |
121 warning_service_observer_(this) { | 121 warning_service_observer_(this), |
| 122 error_console_observer_(this) { |
122 } | 123 } |
123 | 124 |
124 ExtensionSettingsHandler::~ExtensionSettingsHandler() { | 125 ExtensionSettingsHandler::~ExtensionSettingsHandler() { |
125 content::RenderViewHost::RemoveCreatedCallback(rvh_created_callback_); | 126 content::RenderViewHost::RemoveCreatedCallback(rvh_created_callback_); |
126 | 127 |
127 // There may be pending file dialogs, we need to tell them that we've gone | 128 // There may be pending file dialogs, we need to tell them that we've gone |
128 // away so they don't try and call back to us. | 129 // away so they don't try and call back to us. |
129 if (load_extension_dialog_.get()) | 130 if (load_extension_dialog_.get()) |
130 load_extension_dialog_->ListenerDestroyed(); | 131 load_extension_dialog_->ListenerDestroyed(); |
131 } | 132 } |
132 | 133 |
133 ExtensionSettingsHandler::ExtensionSettingsHandler(ExtensionService* service, | 134 ExtensionSettingsHandler::ExtensionSettingsHandler(ExtensionService* service, |
134 ManagementPolicy* policy) | 135 ManagementPolicy* policy) |
135 : extension_service_(service), | 136 : extension_service_(service), |
136 management_policy_(policy), | 137 management_policy_(policy), |
137 ignore_notifications_(false), | 138 ignore_notifications_(false), |
138 deleting_rvh_(NULL), | 139 deleting_rvh_(NULL), |
139 registered_for_notifications_(false), | 140 registered_for_notifications_(false), |
140 warning_service_observer_(this) { | 141 warning_service_observer_(this), |
| 142 error_console_observer_(this) { |
141 } | 143 } |
142 | 144 |
143 // static | 145 // static |
144 void ExtensionSettingsHandler::RegisterProfilePrefs( | 146 void ExtensionSettingsHandler::RegisterProfilePrefs( |
145 user_prefs::PrefRegistrySyncable* registry) { | 147 user_prefs::PrefRegistrySyncable* registry) { |
146 registry->RegisterBooleanPref( | 148 registry->RegisterBooleanPref( |
147 prefs::kExtensionsUIDeveloperMode, | 149 prefs::kExtensionsUIDeveloperMode, |
148 false, | 150 false, |
149 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 151 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
150 } | 152 } |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 | 260 |
259 // If the ErrorConsole is enabled, get the errors for the extension and add | 261 // If the ErrorConsole is enabled, get the errors for the extension and add |
260 // them to the list. Otherwise, use the install warnings (using both is | 262 // them to the list. Otherwise, use the install warnings (using both is |
261 // redundant). | 263 // redundant). |
262 ErrorConsole* error_console = | 264 ErrorConsole* error_console = |
263 ErrorConsole::Get(extension_service_->profile()); | 265 ErrorConsole::Get(extension_service_->profile()); |
264 if (error_console->enabled()) { | 266 if (error_console->enabled()) { |
265 const ErrorConsole::ErrorList& errors = | 267 const ErrorConsole::ErrorList& errors = |
266 error_console->GetErrorsForExtension(extension->id()); | 268 error_console->GetErrorsForExtension(extension->id()); |
267 if (!errors.empty()) { | 269 if (!errors.empty()) { |
268 scoped_ptr<ListValue> list(new ListValue); | 270 scoped_ptr<ListValue> manifest_errors(new ListValue); |
| 271 scoped_ptr<ListValue> runtime_errors(new ListValue); |
269 for (ErrorConsole::ErrorList::const_iterator iter = errors.begin(); | 272 for (ErrorConsole::ErrorList::const_iterator iter = errors.begin(); |
270 iter != errors.end(); ++iter) { | 273 iter != errors.end(); ++iter) { |
271 list->Append((*iter)->ToValue().release()); | 274 if ((*iter)->type() == ExtensionError::MANIFEST_ERROR) |
| 275 manifest_errors->Append((*iter)->ToValue().release()); |
| 276 else |
| 277 runtime_errors->Append((*iter)->ToValue().release()); |
272 } | 278 } |
273 extension_data->Set("manifestErrors", list.release()); | 279 if (!manifest_errors->empty()) |
| 280 extension_data->Set("manifestErrors", manifest_errors.release()); |
| 281 if (!runtime_errors->empty()) |
| 282 extension_data->Set("runtimeErrors", runtime_errors.release()); |
274 } | 283 } |
275 } else if (Manifest::IsUnpackedLocation(extension->location())) { | 284 } else if (Manifest::IsUnpackedLocation(extension->location())) { |
276 const std::vector<InstallWarning>& install_warnings = | 285 const std::vector<InstallWarning>& install_warnings = |
277 extension->install_warnings(); | 286 extension->install_warnings(); |
278 if (!install_warnings.empty()) { | 287 if (!install_warnings.empty()) { |
279 scoped_ptr<base::ListValue> list(new base::ListValue()); | 288 scoped_ptr<base::ListValue> list(new base::ListValue()); |
280 for (std::vector<InstallWarning>::const_iterator it = | 289 for (std::vector<InstallWarning>::const_iterator it = |
281 install_warnings.begin(); it != install_warnings.end(); ++it) { | 290 install_warnings.begin(); it != install_warnings.end(); ++it) { |
282 base::DictionaryValue* item = new base::DictionaryValue(); | 291 base::DictionaryValue* item = new base::DictionaryValue(); |
283 item->SetString("message", it->message); | 292 item->SetString("message", it->message); |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 void* params) { | 482 void* params) { |
474 last_unpacked_directory_ = base::FilePath(path); | 483 last_unpacked_directory_ = base::FilePath(path); |
475 UnpackedInstaller::Create(extension_service_)->Load(path); | 484 UnpackedInstaller::Create(extension_service_)->Load(path); |
476 } | 485 } |
477 | 486 |
478 void ExtensionSettingsHandler::MultiFilesSelected( | 487 void ExtensionSettingsHandler::MultiFilesSelected( |
479 const std::vector<base::FilePath>& files, void* params) { | 488 const std::vector<base::FilePath>& files, void* params) { |
480 NOTREACHED(); | 489 NOTREACHED(); |
481 } | 490 } |
482 | 491 |
| 492 void ExtensionSettingsHandler::FileSelectionCanceled(void* params) { |
| 493 } |
| 494 |
| 495 void ExtensionSettingsHandler::OnErrorAdded(const ExtensionError* error) { |
| 496 MaybeUpdateAfterNotification(); |
| 497 } |
| 498 |
483 void ExtensionSettingsHandler::Observe( | 499 void ExtensionSettingsHandler::Observe( |
484 int type, | 500 int type, |
485 const content::NotificationSource& source, | 501 const content::NotificationSource& source, |
486 const content::NotificationDetails& details) { | 502 const content::NotificationDetails& details) { |
487 Profile* profile = Profile::FromWebUI(web_ui()); | 503 Profile* profile = Profile::FromWebUI(web_ui()); |
488 Profile* source_profile = NULL; | 504 Profile* source_profile = NULL; |
489 switch (type) { | 505 switch (type) { |
490 // We listen for notifications that will result in the page being | 506 // We listen for notifications that will result in the page being |
491 // repopulated with data twice for the same event in certain cases. | 507 // repopulated with data twice for the same event in certain cases. |
492 // For instance, EXTENSION_LOADED & EXTENSION_HOST_CREATED because | 508 // For instance, EXTENSION_LOADED & EXTENSION_HOST_CREATED because |
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
999 chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, | 1015 chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, |
1000 content::NotificationService::AllBrowserContextsAndSources()); | 1016 content::NotificationService::AllBrowserContextsAndSources()); |
1001 | 1017 |
1002 content::RenderViewHost::AddCreatedCallback(rvh_created_callback_); | 1018 content::RenderViewHost::AddCreatedCallback(rvh_created_callback_); |
1003 | 1019 |
1004 content::WebContentsObserver::Observe(web_ui()->GetWebContents()); | 1020 content::WebContentsObserver::Observe(web_ui()->GetWebContents()); |
1005 | 1021 |
1006 warning_service_observer_.Add( | 1022 warning_service_observer_.Add( |
1007 ExtensionSystem::Get(profile)->warning_service()); | 1023 ExtensionSystem::Get(profile)->warning_service()); |
1008 | 1024 |
| 1025 error_console_observer_.Add(ErrorConsole::Get(profile)); |
| 1026 |
1009 base::Closure callback = base::Bind( | 1027 base::Closure callback = base::Bind( |
1010 &ExtensionSettingsHandler::MaybeUpdateAfterNotification, | 1028 &ExtensionSettingsHandler::MaybeUpdateAfterNotification, |
1011 base::Unretained(this)); | 1029 base::Unretained(this)); |
1012 | 1030 |
1013 pref_registrar_.Init(profile->GetPrefs()); | 1031 pref_registrar_.Init(profile->GetPrefs()); |
1014 pref_registrar_.Add(prefs::kExtensionInstallDenyList, callback); | 1032 pref_registrar_.Add(prefs::kExtensionInstallDenyList, callback); |
1015 } | 1033 } |
1016 | 1034 |
1017 std::vector<ExtensionPage> | 1035 std::vector<ExtensionPage> |
1018 ExtensionSettingsHandler::GetInspectablePagesForExtension( | 1036 ExtensionSettingsHandler::GetInspectablePagesForExtension( |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1151 extension_service_->EnableExtension(extension_id); | 1169 extension_service_->EnableExtension(extension_id); |
1152 } else { | 1170 } else { |
1153 ExtensionErrorReporter::GetInstance()->ReportError( | 1171 ExtensionErrorReporter::GetInstance()->ReportError( |
1154 UTF8ToUTF16(JoinString(requirement_errors, ' ')), | 1172 UTF8ToUTF16(JoinString(requirement_errors, ' ')), |
1155 true /* be noisy */); | 1173 true /* be noisy */); |
1156 } | 1174 } |
1157 requirements_checker_.reset(); | 1175 requirements_checker_.reset(); |
1158 } | 1176 } |
1159 | 1177 |
1160 } // namespace extensions | 1178 } // namespace extensions |
OLD | NEW |