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 */); |
+ } |
+} |