Index: chrome/browser/extensions/extension_webrequest_api.cc |
diff --git a/chrome/browser/extensions/extension_webrequest_api.cc b/chrome/browser/extensions/extension_webrequest_api.cc |
index 6b9a148909de96be5fbb73c00ad4a0ebb3e19bc5..3c6bcca149284a3492d74a56065ffcf49aa3e422 100644 |
--- a/chrome/browser/extensions/extension_webrequest_api.cc |
+++ b/chrome/browser/extensions/extension_webrequest_api.cc |
@@ -1477,6 +1477,18 @@ bool WebRequestAddEventListener::RunImpl() { |
extension_info_map()->extensions().GetByID(extension_id()); |
std::string extension_name = extension ? extension->name() : extension_id(); |
+ // We check automatically whether the extension has the 'webRequest' |
+ // permission. For blocking calls we require the additional permission |
+ // 'webRequestBlocking'. |
+ if ((extra_info_spec & |
+ (ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING | |
+ ExtensionWebRequestEventRouter::ExtraInfoSpec::ASYNC_BLOCKING)) && |
+ !extension->HasAPIPermission( |
+ ExtensionAPIPermission::kWebRequestBlocking)) { |
+ error_ = keys::kBlockingPermissionRequired; |
+ return false; |
+ } |
+ |
ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
profile_id(), extension_id(), extension_name, |
event_name, sub_event_name, filter, |