Index: content/browser/service_worker/service_worker_browsertest.cc |
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc |
index fd1fc193e97039a7d44fcd0b63e9ba5a0d2ea855..59aa3d4d20b087b604675c4a277116ecc8973b1f 100644 |
--- a/content/browser/service_worker/service_worker_browsertest.cc |
+++ b/content/browser/service_worker/service_worker_browsertest.cc |
@@ -1991,27 +1991,65 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, |
// Navigate to a same-origin, out of scope URL that redirects to the target |
// URL. The navigation preload request should be the single request to the |
// target URL. |
- TitleWatcher title_watcher1(shell()->web_contents(), |
- base::ASCIIToUTF16("?1")); |
+ const base::string16 title1 = base::ASCIIToUTF16("?1"); |
+ TitleWatcher title_watcher1(shell()->web_contents(), title1); |
NavigateToURL(shell(), redirect_page_url); |
+ EXPECT_EQ(title1, title_watcher1.WaitAndGetTitle()); |
EXPECT_EQ(1, GetRequestCount(kPageUrl + "?1")); |
// Navigate to a same-origin, in-scope URL that redirects to the target URL. |
// The navigation preload request should be the single request to the target |
// URL. |
- TitleWatcher title_watcher2(shell()->web_contents(), |
- base::ASCIIToUTF16("?2")); |
+ const base::string16 title2 = base::ASCIIToUTF16("?2"); |
+ TitleWatcher title_watcher2(shell()->web_contents(), title2); |
NavigateToURL(shell(), in_scope_redirect_page_url); |
+ EXPECT_EQ(title2, title_watcher2.WaitAndGetTitle()); |
EXPECT_EQ(1, GetRequestCount(kPageUrl + "?2")); |
// Navigate to a cross-origin URL that redirects to the target URL. The |
// navigation preload request should be the single request to the target URL. |
- TitleWatcher title_watcher3(shell()->web_contents(), |
- base::ASCIIToUTF16("?3")); |
+ const base::string16 title3 = base::ASCIIToUTF16("?3"); |
+ TitleWatcher title_watcher3(shell()->web_contents(), title3); |
NavigateToURL(shell(), cross_origin_redirect_page_url); |
+ EXPECT_EQ(title3, title_watcher3.WaitAndGetTitle()); |
EXPECT_EQ(1, GetRequestCount(kPageUrl + "?3")); |
} |
+// When the content type of the page is not correctly set, |
+// OnStartLoadingResponseBody() of mojom::URLLoaderClient is called before |
+// OnReceiveResponse(). This behavior is caused by MimeSniffingResourceHandler. |
+// This test checks that even if the MimeSniffingResourceHandler is triggered |
+// navigation preload must be handled correctly. |
+IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, |
+ RespondWithNavigationPreloadWithMimeSniffing) { |
+ const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
+ const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
+ const char kPage[] = "<title>PASS</title>Hello world."; |
+ const char kScript[] = |
+ "self.addEventListener('fetch', event => {\n" |
+ " event.respondWith(event.preloadResponse);\n" |
+ " });"; |
+ const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
+ const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
+ |
+ // Setting an empty content type to trigger MimeSniffingResourceHandler. |
+ RegisterStaticFile(kPageUrl, kPage, ""); |
+ RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); |
+ |
+ SetupForNavigationPreloadTest(page_url, worker_url, |
+ true /* enable_navigation_preload */); |
+ |
+ const base::string16 title = base::ASCIIToUTF16("PASS"); |
+ TitleWatcher title_watcher(shell()->web_contents(), title); |
+ NavigateToURL(shell(), page_url); |
+ EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
+ EXPECT_EQ("Hello world.", GetTextContent()); |
+ |
+ // The page request must be sent only once, since the worker responded with |
+ // the navigation preload response |
+ EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
+} |
+ |
// Flaky on Win/Mac: http://crbug.com/533631 |
#if defined(OS_WIN) || defined(OS_MACOSX) |
#define MAYBE_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure DISABLED_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure |