diff options
Diffstat (limited to 'chrome/browser/extensions/api/web_request/web_request_api.cc')
-rw-r--r-- | chrome/browser/extensions/api/web_request/web_request_api.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/chrome/browser/extensions/api/web_request/web_request_api.cc b/chrome/browser/extensions/api/web_request/web_request_api.cc index fce2f1f..23c2a59 100644 --- a/chrome/browser/extensions/api/web_request/web_request_api.cc +++ b/chrome/browser/extensions/api/web_request/web_request_api.cc @@ -397,6 +397,7 @@ struct ExtensionWebRequestEventRouter::EventListener { 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 @@ bool ExtensionWebRequestEventRouter::AddEventListener( 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 @@ bool ExtensionWebRequestEventRouter::AddEventListener( 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 ExtensionWebRequestEventRouter::RemoveWebViewEventListeners( 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 @@ void ExtensionWebRequestEventRouter::RemoveWebViewEventListeners( 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 @@ void ExtensionWebRequestEventRouter::GetMatchingListenersImpl( 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 @@ bool WebRequestAddEventListener::RunImpl() { 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 @@ bool WebRequestAddEventListener::RunImpl() { 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(); |