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..ed1a98f3a6b90098b2ed9e4311b51d63ae0ecd2a 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" |
@@ -624,6 +626,18 @@ 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) && |
+ !requirements_checker_.get()) { |
+ // Recheck the requirements. |
+ scoped_refptr<const Extension> extension = |
+ extension_service_->GetExtensionById(extension_id, |
+ true /* include disabled */); |
+ requirements_checker_.reset(new extensions::RequirementsChecker()); |
+ requirements_checker_->Check( |
+ extension, |
+ base::Bind(&ExtensionSettingsHandler::OnRequirementsChecked, |
+ AsWeakPtr(), extension_id)); |
} else { |
extension_service_->EnableExtension(extension_id); |
} |
@@ -887,3 +901,16 @@ 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 */); |
+ } |
+ requirements_checker_.reset(); |
+} |