Index: trunk/src/chrome/browser/extensions/api/web_request/web_request_api.cc |
=================================================================== |
--- trunk/src/chrome/browser/extensions/api/web_request/web_request_api.cc (revision 222122) |
+++ trunk/src/chrome/browser/extensions/api/web_request/web_request_api.cc (working copy) |
@@ -397,6 +397,7 @@ |
RequestFilter filter; |
int extra_info_spec; |
int embedder_process_id; |
+ int embedder_routing_id; |
int webview_instance_id; |
base::WeakPtr<IPC::Sender> ipc_sender; |
mutable std::set<uint64> blocked_requests; |
@@ -1172,6 +1173,7 @@ |
const RequestFilter& filter, |
int extra_info_spec, |
int embedder_process_id, |
+ int embedder_routing_id, |
int webview_instance_id, |
base::WeakPtr<IPC::Sender> ipc_sender) { |
@@ -1186,6 +1188,7 @@ |
listener.extra_info_spec = extra_info_spec; |
listener.ipc_sender = ipc_sender; |
listener.embedder_process_id = embedder_process_id; |
+ listener.embedder_routing_id = embedder_routing_id; |
listener.webview_instance_id = webview_instance_id; |
if (listener.webview_instance_id) |
RecordAction(content::UserMetricsAction("WebView.WebRequest.AddListener")); |
@@ -1238,6 +1241,7 @@ |
void* profile, |
const std::string& extension_id, |
int embedder_process_id, |
+ int embedder_routing_id, |
int webview_instance_id) { |
// Iterate over all listeners of all WebRequest events to delete |
// any listeners that belong to the provided <webview>. |
@@ -1249,7 +1253,10 @@ |
for (std::set<EventListener>::iterator listener_iter = listeners.begin(); |
listener_iter != listeners.end(); ++listener_iter) { |
const EventListener& listener = *listener_iter; |
+ // TODO(fsamuel): Investigate making <webview> instance IDs unique within |
+ // a process. |
if (listener.embedder_process_id == embedder_process_id && |
+ listener.embedder_routing_id == embedder_routing_id && |
listener.webview_instance_id == webview_instance_id) |
listeners_to_delete.push_back(listener); |
} |
@@ -1371,6 +1378,7 @@ |
if (is_guest && |
(it->embedder_process_id != webview_info.embedder_process_id || |
+ it->embedder_routing_id != webview_info.embedder_routing_id || |
it->webview_instance_id != webview_info.instance_id)) |
continue; |
@@ -2079,6 +2087,7 @@ |
int embedder_process_id = |
ipc_sender.get() ? ipc_sender->render_process_id() : -1; |
+ int embedder_routing_id = routing_id(); |
const Extension* extension = |
extension_info_map()->extensions().GetByID(extension_id()); |
@@ -2113,7 +2122,8 @@ |
ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
profile_id(), extension_id(), extension_name, |
event_name, sub_event_name, filter, extra_info_spec, |
- embedder_process_id, webview_instance_id, ipc_sender_weak()); |
+ embedder_process_id, embedder_routing_id, webview_instance_id, |
+ ipc_sender_weak()); |
EXTENSION_FUNCTION_VALIDATE(success); |
helpers::ClearCacheOnNavigation(); |