Chromium Code Reviews| Index: chrome/browser/ui/webui/extensions/extension_settings_handler.cc |
| diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc |
| index 163ffdf3b8cf918fd8e800834fb2462fbebc9f75..d746ad64fd5e88ff7525a9c606fc62a02171cc9b 100644 |
| --- a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc |
| +++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc |
| @@ -10,6 +10,7 @@ |
| #include "base/bind_helpers.h" |
| #include "base/command_line.h" |
| #include "base/file_util.h" |
| +#include "base/string_util.h" |
| #include "base/string_number_conversions.h" |
| #include "base/utf_string_conversions.h" |
| #include "base/values.h" |
| @@ -18,6 +19,7 @@ |
| #include "chrome/browser/debugger/devtools_window.h" |
| #include "chrome/browser/extensions/crx_installer.h" |
| #include "chrome/browser/extensions/extension_disabled_ui.h" |
| +#include "chrome/browser/extensions/extension_error_reporter.h" |
| #include "chrome/browser/extensions/extension_host.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/extensions/extension_system.h" |
| @@ -75,7 +77,8 @@ ExtensionSettingsHandler::ExtensionSettingsHandler() |
| management_policy_(NULL), |
| ignore_notifications_(false), |
| deleting_rvh_(NULL), |
| - registered_for_notifications_(false) { |
| + registered_for_notifications_(false), |
| + requirements_checker_(new extensions::RequirementsChecker()) { |
|
Aaron Boodman
2012/09/04 21:48:57
Nit: Can delay creating this until needed.
eaugusti
2012/09/04 23:52:15
Done.
|
| } |
| ExtensionSettingsHandler::~ExtensionSettingsHandler() { |
| @@ -93,7 +96,8 @@ ExtensionSettingsHandler::ExtensionSettingsHandler(ExtensionService* service, |
| management_policy_(policy), |
| ignore_notifications_(false), |
| deleting_rvh_(NULL), |
| - registered_for_notifications_(false) { |
| + registered_for_notifications_(false), |
| + requirements_checker_(new extensions::RequirementsChecker()) { |
| } |
| // static |
| @@ -624,6 +628,16 @@ void ExtensionSettingsHandler::HandleEnableMessage(const ListValue* args) { |
| web_ui()->GetWebContents()); |
| extensions::ShowExtensionDisabledDialog( |
| extension_service_, browser, extension); |
| + } else if (prefs->GetDisableReasons(extension_id) & |
| + Extension::DISABLE_UNSUPPORTED_REQUIREMENT) { |
| + // Recheck the requirements. |
| + scoped_refptr<const Extension> extension = |
| + extension_service_->GetExtensionById(extension_id, |
| + true /* include disabled */); |
| + requirements_checker_->Check( |
| + extension, |
| + base::Bind(&ExtensionSettingsHandler::OnRequirementsChecked, |
| + AsWeakPtr(), extension_id)); |
| } else { |
| extension_service_->EnableExtension(extension_id); |
| } |
| @@ -887,3 +901,15 @@ void ExtensionSettingsHandler::InspectExtensionHost( |
| if (host) |
| DevToolsWindow::OpenDevToolsWindow(host->render_view_host()); |
| } |
| + |
| +void ExtensionSettingsHandler::OnRequirementsChecked( |
| + std::string extension_id, |
| + std::vector<std::string> requirement_errors) { |
| + if (requirement_errors.empty()) { |
| + extension_service_->EnableExtension(extension_id); |
| + } else { |
| + ExtensionErrorReporter::GetInstance()->ReportError( |
| + UTF8ToUTF16(JoinString(requirement_errors, ' ')), |
| + true /* be noisy */); |
| + } |
| +} |