Commit 02bfd845 authored by Clark DuVall's avatar Clark DuVall Committed by Commit Bot

Fix webRequest not seeing events on redirect to service worker

When a request was redirected to a page with a service worker installed,
webRequest was not seeing the events. This is because the network loader
factory was no longer proxied on the redirect.

Bug: 1012977
Change-Id: I1161a8d6ac58711b83427accc8026a0981fa527e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2079932Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarKaran Bhatia <karandeepb@chromium.org>
Commit-Queue: Clark DuVall <cduvall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#745580}
parent 03e9af96
...@@ -2734,6 +2734,30 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerWebRequestApiTest, ...@@ -2734,6 +2734,30 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerWebRequestApiTest,
RunServiceWorkerFetchTest("empty.js"); RunServiceWorkerFetchTest("empty.js");
} }
IN_PROC_BROWSER_TEST_P(ServiceWorkerWebRequestApiTest,
ServiceWorkerFallbackAfterRedirect) {
embedded_test_server()->ServeFilesFromSourceDirectory("content/test/data");
ASSERT_TRUE(embedded_test_server()->Start());
InstallRequestHeaderModifyingExtension();
RegisterServiceWorker("/fetch_event_passthrough.js", "/echoheader");
// Make sure the request is intercepted with no redirect.
ui_test_utils::NavigateToURL(
browser(), embedded_test_server()->GetURL("/echoheader?foo"));
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
EXPECT_EQ("bar", EvalJs(web_contents, "document.body.textContent;"));
// Make sure the request is intercepted with a redirect.
GURL redirect_url = embedded_test_server()->GetURL(
"/server-redirect?" +
embedded_test_server()->GetURL("/echoheader?foo").spec());
ui_test_utils::NavigateToURL(browser(), redirect_url);
EXPECT_EQ("bar", EvalJs(web_contents, "document.body.textContent;"));
}
// An extension should be able to modify the request header for service worker // An extension should be able to modify the request header for service worker
// script by using WebRequest API. // script by using WebRequest API.
IN_PROC_BROWSER_TEST_P(ServiceWorkerWebRequestApiTest, ServiceWorkerScript) { IN_PROC_BROWSER_TEST_P(ServiceWorkerWebRequestApiTest, ServiceWorkerScript) {
......
...@@ -760,11 +760,14 @@ class NavigationURLLoaderImpl::URLLoaderRequestController ...@@ -760,11 +760,14 @@ class NavigationURLLoaderImpl::URLLoaderRequestController
DCHECK(proxied_factory_remote_.is_valid()); DCHECK(proxied_factory_remote_.is_valid());
// We don't worry about reconnection since it's a single navigation. // We don't worry about reconnection since it's a single navigation.
network_loader_factory_->Clone(std::move(proxied_factory_receiver_)); network_loader_factory_->Clone(std::move(proxied_factory_receiver_));
factory = base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>( // Replace the network factory with the proxied version since this may
std::move(proxied_factory_remote_)); // need to be used in redirects, and we've already consumed
} else { // |proxied_factory_receiver_|.
factory = network_loader_factory_; network_loader_factory_ =
base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>(
std::move(proxied_factory_remote_));
} }
factory = network_loader_factory_;
} }
url_chain_.push_back(resource_request_->url); url_chain_.push_back(resource_request_->url);
*out_options = GetURLLoaderOptions( *out_options = GetURLLoaderOptions(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment