diff options
Diffstat (limited to 'chrome/browser/extensions/api')
3 files changed, 38 insertions, 22 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(); diff --git a/chrome/browser/extensions/api/web_request/web_request_api.h b/chrome/browser/extensions/api/web_request/web_request_api.h index 15c985b..fba59b0 100644 --- a/chrome/browser/extensions/api/web_request/web_request_api.h +++ b/chrome/browser/extensions/api/web_request/web_request_api.h @@ -246,6 +246,7 @@ class ExtensionWebRequestEventRouter const RequestFilter& filter, int extra_info_spec, int embedder_process_id, + int embedder_routing_id, int web_view_instance_id, base::WeakPtr<IPC::Sender> ipc_sender); @@ -260,6 +261,7 @@ class ExtensionWebRequestEventRouter void* profile, const std::string& extension_id, int embedder_process_id, + int embedder_routing_id, int web_view_instance_id); // Called when an incognito profile is created or destroyed. diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc index ccf2655..2c8774f 100644 --- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc @@ -224,12 +224,12 @@ TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) { base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", - filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, - ipc_sender_factory.GetWeakPtr()); + filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, + MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", - filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, - ipc_sender_factory.GetWeakPtr()); + filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, + MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); net::URLRequestJobFactoryImpl job_factory; job_factory.SetProtocolHandler( @@ -359,12 +359,12 @@ TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceCancel) { base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", - filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, - ipc_sender_factory.GetWeakPtr()); + filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, + MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", - filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, - ipc_sender_factory.GetWeakPtr()); + filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, + MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); GURL request_url("about:blank"); net::URLRequest request(request_url, &delegate_, context_.get()); @@ -427,11 +427,11 @@ TEST_F(ExtensionWebRequestTest, SimulateChancelWhileBlocked) { base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension_id, extension_id, kEventName, kEventName + "/1", - filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, - ipc_sender_factory.GetWeakPtr()); + filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, + MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension_id, extension_id, kEventName2, kEventName2 + "/1", - filter, 0, -1, -1, ipc_sender_factory.GetWeakPtr()); + filter, 0, -1, MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); GURL request_url("about:blank"); net::URLRequest request(request_url, &delegate_, context_.get()); @@ -620,7 +620,8 @@ TEST_F(ExtensionWebRequestTest, AccessRequestBodyData) { ASSERT_TRUE(GenerateInfoSpec(string_spec_post, &extra_info_spec_body)); ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension_id, extension_id, kEventName, kEventName + "/1", - filter, extra_info_spec_body, -1, -1, ipc_sender_factory.GetWeakPtr()); + filter, extra_info_spec_body, -1, MSG_ROUTING_NONE, -1, + ipc_sender_factory.GetWeakPtr()); FireURLRequestWithData(kMethodPost, kMultipart, form_1, form_2); @@ -636,7 +637,8 @@ TEST_F(ExtensionWebRequestTest, AccessRequestBodyData) { GenerateInfoSpec(string_spec_no_post, &extra_info_spec_empty)); ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension_id, extension_id, kEventName, kEventName + "/1", - filter, extra_info_spec_empty, -1, -1, ipc_sender_factory.GetWeakPtr()); + filter, extra_info_spec_empty, -1, MSG_ROUTING_NONE, -1, + ipc_sender_factory.GetWeakPtr()); FireURLRequestWithData(kMethodPost, kMultipart, form_1, form_2); @@ -646,7 +648,8 @@ TEST_F(ExtensionWebRequestTest, AccessRequestBodyData) { // Subscribe to OnBeforeRequest with requestBody requirement. ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension_id, extension_id, kEventName, kEventName + "/1", - filter, extra_info_spec_body, -1, -1, ipc_sender_factory.GetWeakPtr()); + filter, extra_info_spec_body, -1, MSG_ROUTING_NONE, -1, + ipc_sender_factory.GetWeakPtr()); // Part 3. // Now send a POST request with body which is not parseable as a form. @@ -704,7 +707,8 @@ TEST_F(ExtensionWebRequestTest, NoAccessRequestBodyData) { // Subscribe to OnBeforeRequest with requestBody requirement. ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension_id, extension_id, kEventName, kEventName + "/1", - filter, extra_info_spec, -1, -1, ipc_sender_factory.GetWeakPtr()); + filter, extra_info_spec, -1, MSG_ROUTING_NONE, -1, + ipc_sender_factory.GetWeakPtr()); // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. const GURL request_url("http://www.example.com"); @@ -814,19 +818,19 @@ TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) { // higher precedence than extension 1. ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension1_id, extension1_id, kEventName, kEventName + "/1", - filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, - ipc_sender_factory.GetWeakPtr()); + filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, + MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension2_id, extension2_id, kEventName, kEventName + "/2", - filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, -1, - ipc_sender_factory.GetWeakPtr()); + filter, ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING, -1, + MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); // Install one extension that observes the final headers. ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( &profile_, extension3_id, extension3_id, keys::kOnSendHeadersEvent, std::string(keys::kOnSendHeadersEvent) + "/3", filter, - ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS, -1, -1, - ipc_sender_factory.GetWeakPtr()); + ExtensionWebRequestEventRouter::ExtraInfoSpec::REQUEST_HEADERS, -1, + MSG_ROUTING_NONE, -1, ipc_sender_factory.GetWeakPtr()); GURL request_url("http://doesnotexist/does_not_exist.html"); net::URLRequest request(request_url, &delegate_, context_.get()); |