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

Unified Diff: chrome/browser/ui/webui/extensions/extension_settings_handler.cc

Issue 10908184: Enforce the 'requirements' field in manifests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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 side-by-side diff with in-line comments
Download patch
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();
+}

Powered by Google App Engine
This is Rietveld 408576698