Chromium Code Reviews| Index: extensions/browser/api/web_request/web_request_api.cc |
| diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc |
| index 0aaa4fad49fdd99661c424b454038001ed5c9ec3..5ae6cfb77e99184394a00ea546af2f7f88c0869e 100644 |
| --- a/extensions/browser/api/web_request/web_request_api.cc |
| +++ b/extensions/browser/api/web_request/web_request_api.cc |
| @@ -147,7 +147,8 @@ bool IsWebRequestEvent(const std::string& event_name) { |
| // Returns whether |request| has been triggered by an extension in |
| // |extension_info_map|. |
| bool IsRequestFromExtension(const net::URLRequest* request, |
| - const InfoMap* extension_info_map) { |
| + const InfoMap* extension_info_map, |
| + void* browser_context_id) { |
| // |extension_info_map| is NULL for system-level requests. |
| if (!extension_info_map) |
| return false; |
| @@ -159,7 +160,25 @@ bool IsRequestFromExtension(const net::URLRequest* request, |
| if (!info) |
| return false; |
| - return extension_info_map->process_map().Contains(info->GetChildID()); |
| + const std::set<std::string> extension_ids = |
| + extension_info_map->process_map().GetExtensionsInProcess( |
| + info->GetChildID()); |
| + if (extension_ids.empty()) |
| + return false; |
| + |
| + content::BrowserContext* browser_context = |
| + reinterpret_cast<content::BrowserContext*>(browser_context_id); |
| + if (browser_context) { |
|
robwu
2015/09/05 17:29:10
I'm not sure whether it is safe to use |browser_co
not at google - send to devlin
2015/09/08 16:09:20
It's not valid to use the BrowserContext on the IO
robwu
2015/09/08 17:19:48
Yes, of course.
|
| + // Hosted apps are like normal web pages (crbug.com/526413). |
| + const ExtensionSet& enabled_extensions = |
| + ExtensionRegistry::Get(browser_context)->enabled_extensions(); |
| + for (const std::string& extension_id : extension_ids) { |
| + const Extension* extension = enabled_extensions.GetByID(extension_id); |
| + if (extension && !extension->is_hosted_app()) |
| + return true; |
| + } |
| + } |
| + return false; |
| } |
| void ExtractRequestRoutingInfo(const net::URLRequest* request, |
| @@ -1587,7 +1606,7 @@ ExtensionWebRequestEventRouter::GetMatchingListeners( |
| &routing_id, &resource_type); |
| bool is_request_from_extension = |
| - IsRequestFromExtension(request, extension_info_map); |
| + IsRequestFromExtension(request, extension_info_map, browser_context); |
| const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
| // We are conservative here and assume requests are asynchronous in case |