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

Unified Diff: extensions/browser/api/web_request/web_request_api.cc

Issue 1267183003: Hide requests in an extension from other extensions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update comment in operator<, remove blank line, OOPIF-friendly test Created 5 years, 4 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
« no previous file with comments | « chrome/test/data/extensions/api_test/webrequest_extensions/main/manifest.json ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 801e58dfe539abb0035c42ec723b76cb05d80043..04a2beda3e0169586936ec5008e89d5e13b0b2a7 100644
--- a/extensions/browser/api/web_request/web_request_api.cc
+++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -416,7 +416,7 @@ void WebRequestAPI::OnListenerRemoved(const EventListenerInfo& details) {
details.browser_context,
details.extension_id,
details.event_name,
- 0 /* embedder_process_id */,
+ 0 /* embedder_process_id (ignored) */,
0 /* web_view_instance_id */));
}
@@ -445,12 +445,21 @@ struct ExtensionWebRequestEventRouter::EventListener {
if (sub_event_name != that.sub_event_name)
return sub_event_name < that.sub_event_name;
- if (embedder_process_id != that.embedder_process_id)
- return embedder_process_id < that.embedder_process_id;
-
if (web_view_instance_id != that.web_view_instance_id)
return web_view_instance_id < that.web_view_instance_id;
+ if (web_view_instance_id == 0) {
+ // Do not filter by process ID for non-webviews, because this comparator
+ // is also used to find and remove an event listener when an extension is
+ // unloaded. At this point, the event listener cannot be mapped back to
+ // the original process, so 0 is used instead of the actual process ID.
+ DCHECK(embedder_process_id == 0 || that.embedder_process_id == 0);
+ return false;
+ }
+
+ if (embedder_process_id != that.embedder_process_id)
+ return embedder_process_id < that.embedder_process_id;
+
return false;
}
@@ -1238,6 +1247,8 @@ void ExtensionWebRequestEventRouter::OnEventHandled(
const std::string& sub_event_name,
uint64 request_id,
EventResponse* response) {
+ // TODO(robwu): Does this also work with webviews? operator< (used by find)
+ // takes the webview ID into account, which is not set on |listener|.
EventListener listener;
listener.extension_id = extension_id;
listener.sub_event_name = sub_event_name;
@@ -1470,6 +1481,12 @@ void ExtensionWebRequestEventRouter::GetMatchingListenersImpl(
it->web_view_instance_id != web_view_info.instance_id))
continue;
+ // Filter requests from other extensions / apps. This does not work for
+ // content scripts, or extension pages in non-extension processes.
battre 2015/08/05 13:49:46 Also extensions can be hosted in the same process.
robwu 2015/08/05 16:38:09 You mean another extension within some webRequest
not at google - send to devlin 2015/08/05 16:49:59 I think the question is can extensions share a ren
+ if (is_request_from_extension &&
+ it->embedder_process_id != render_process_host_id)
+ continue;
+
if (!it->filter.urls.is_empty() && !it->filter.urls.MatchesURL(url))
continue;
if (web_request_event_router_delegate_ &&
@@ -2190,9 +2207,7 @@ bool WebRequestInternalAddEventListenerFunction::RunSync() {
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(5, &web_view_instance_id));
base::WeakPtr<IOThreadExtensionMessageFilter> ipc_sender = ipc_sender_weak();
- int embedder_process_id =
- ipc_sender.get() && web_view_instance_id > 0 ?
- ipc_sender->render_process_id() : 0;
+ int embedder_process_id = ipc_sender ? ipc_sender->render_process_id() : 0;
const Extension* extension =
extension_info_map()->extensions().GetByID(extension_id_safe());
« no previous file with comments | « chrome/test/data/extensions/api_test/webrequest_extensions/main/manifest.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698