Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 2812513004: service worker: Clarify the navigation preload network error message. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <map> 8 #include <map>
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 net::HttpResponseInfo info; 408 net::HttpResponseInfo info;
409 const char data[] = 409 const char data[] =
410 "HTTP/1.1 200 OK\0" 410 "HTTP/1.1 200 OK\0"
411 "Content-Type: application/javascript\0" 411 "Content-Type: application/javascript\0"
412 "\0"; 412 "\0";
413 info.headers = 413 info.headers =
414 new net::HttpResponseHeaders(std::string(data, arraysize(data))); 414 new net::HttpResponseHeaders(std::string(data, arraysize(data)));
415 return info; 415 return info;
416 } 416 }
417 417
418 const std::string kNavigationPreloadAbortError =
419 "The service worker navigation preload request was cancelled before "
420 "'preloadResponse' settled. If you intend to use "
421 "'preloadResponse', use waitUntil() or respondWith() to wait for "
422 "the promise to settle.";
423
418 } // namespace 424 } // namespace
419 425
420 class ServiceWorkerBrowserTest : public ContentBrowserTest { 426 class ServiceWorkerBrowserTest : public ContentBrowserTest {
421 protected: 427 protected:
422 using self = ServiceWorkerBrowserTest; 428 using self = ServiceWorkerBrowserTest;
423 429
424 void SetUpOnMainThread() override { 430 void SetUpOnMainThread() override {
425 ASSERT_TRUE(embedded_test_server()->InitializeAndListen()); 431 ASSERT_TRUE(embedded_test_server()->InitializeAndListen());
426 StoragePartition* partition = BrowserContext::GetDefaultStoragePartition( 432 StoragePartition* partition = BrowserContext::GetDefaultStoragePartition(
427 shell()->web_contents()->GetBrowserContext()); 433 shell()->web_contents()->GetBrowserContext());
(...skipping 1466 matching lines...) Expand 10 before | Expand all | Expand 10 after
1894 StartServerAndNavigateToSetup(); 1900 StartServerAndNavigateToSetup();
1895 SetupForNavigationPreloadTest(page_url, worker_url); 1901 SetupForNavigationPreloadTest(page_url, worker_url);
1896 1902
1897 EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete()); 1903 EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
1898 1904
1899 const base::string16 title = base::ASCIIToUTF16("REJECTED"); 1905 const base::string16 title = base::ASCIIToUTF16("REJECTED");
1900 TitleWatcher title_watcher(shell()->web_contents(), title); 1906 TitleWatcher title_watcher(shell()->web_contents(), title);
1901 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); 1907 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED"));
1902 NavigateToURL(shell(), page_url); 1908 NavigateToURL(shell(), page_url);
1903 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); 1909 EXPECT_EQ(title, title_watcher.WaitAndGetTitle());
1904 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", 1910 std::string expected =
1905 GetTextContent()); 1911 "The service worker navigation preload request failed with network error "
1912 "code -102.";
1913 EXPECT_EQ("NetworkError: " + expected, GetTextContent());
1906 } 1914 }
1907 1915
1908 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, 1916 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
1909 CanceledByInterceptor) { 1917 CanceledByInterceptor) {
1910 content::ResourceDispatcherHost::Get()->RegisterInterceptor( 1918 content::ResourceDispatcherHost::Get()->RegisterInterceptor(
1911 kNavigationPreloadHeaderName, "", 1919 kNavigationPreloadHeaderName, "",
1912 base::Bind(&CancellingInterceptorCallback)); 1920 base::Bind(&CancellingInterceptorCallback));
1913 1921
1914 const char kPageUrl[] = "/service_worker/navigation_preload.html"; 1922 const char kPageUrl[] = "/service_worker/navigation_preload.html";
1915 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; 1923 const char kWorkerUrl[] = "/service_worker/navigation_preload.js";
1916 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); 1924 const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
1917 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); 1925 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
1918 RegisterStaticFile( 1926 RegisterStaticFile(
1919 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, 1927 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript,
1920 "text/javascript"); 1928 "text/javascript");
1921 1929
1922 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", 1930 EXPECT_EQ("NetworkError: " + kNavigationPreloadAbortError,
1923 LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED")); 1931 LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED"));
1924 } 1932 }
1925 1933
1926 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, 1934 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
1927 PreloadHeadersSimple) { 1935 PreloadHeadersSimple) {
1928 const char kPageUrl[] = "/service_worker/navigation_preload.html"; 1936 const char kPageUrl[] = "/service_worker/navigation_preload.html";
1929 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; 1937 const char kWorkerUrl[] = "/service_worker/navigation_preload.js";
1930 const char kPage[] = "<title>ERROR</title>Hello world."; 1938 const char kPage[] = "<title>ERROR</title>Hello world.";
1931 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); 1939 const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
1932 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); 1940 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
2032 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); 2040 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
2033 RegisterCustomResponse(kPageUrl, kPageResponse); 2041 RegisterCustomResponse(kPageUrl, kPageResponse);
2034 RegisterStaticFile( 2042 RegisterStaticFile(
2035 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, 2043 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript,
2036 "text/javascript"); 2044 "text/javascript");
2037 RegisterStaticFile(kRedirectedPageUrl1, kRedirectedPage, "text/html"); 2045 RegisterStaticFile(kRedirectedPageUrl1, kRedirectedPage, "text/html");
2038 2046
2039 // According to the spec, multiple Location headers is not an error. So the 2047 // According to the spec, multiple Location headers is not an error. So the
2040 // preloadResponse must be resolved with an opaque redirect response. 2048 // preloadResponse must be resolved with an opaque redirect response.
2041 // But Chrome treats multiple Location headers as an error (crbug.com/98895). 2049 // But Chrome treats multiple Location headers as an error (crbug.com/98895).
2042 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", 2050 std::string expected =
2051 "The service worker navigation preload request failed with network error "
2052 "code -350.";
2053 EXPECT_EQ("NetworkError: " + expected,
2043 LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED")); 2054 LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED"));
2044 2055
2045 // The page request must be sent only once, since the worker responded with 2056 // The page request must be sent only once, since the worker responded with
2046 // a generated Response. 2057 // a generated Response.
2047 EXPECT_EQ(1, GetRequestCount(kPageUrl)); 2058 EXPECT_EQ(1, GetRequestCount(kPageUrl));
2048 // The redirected request must not be sent. 2059 // The redirected request must not be sent.
2049 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl1)); 2060 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl1));
2050 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl2)); 2061 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl2));
2051 } 2062 }
2052 2063
(...skipping 10 matching lines...) Expand all
2063 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); 2074 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
2064 RegisterCustomResponse(kPageUrl, kPageResponse); 2075 RegisterCustomResponse(kPageUrl, kPageResponse);
2065 RegisterStaticFile( 2076 RegisterStaticFile(
2066 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, 2077 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript,
2067 "text/javascript"); 2078 "text/javascript");
2068 2079
2069 // TODO(horo): According to the spec, even if the location URL is invalid, the 2080 // TODO(horo): According to the spec, even if the location URL is invalid, the
2070 // preloadResponse must be resolve with an opaque redirect response. But 2081 // preloadResponse must be resolve with an opaque redirect response. But
2071 // currently Chrome handles the invalid location URL in the browser process as 2082 // currently Chrome handles the invalid location URL in the browser process as
2072 // an error. crbug.com/707185 2083 // an error. crbug.com/707185
2073 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", 2084 EXPECT_EQ("NetworkError: " + kNavigationPreloadAbortError,
2074 LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED")); 2085 LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED"));
2075 2086
2076 // The page request must be sent only once, since the worker responded with 2087 // The page request must be sent only once, since the worker responded with
2077 // a generated Response. 2088 // a generated Response.
2078 EXPECT_EQ(1, GetRequestCount(kPageUrl)); 2089 EXPECT_EQ(1, GetRequestCount(kPageUrl));
2079 } 2090 }
2080 2091
2081 // Tests responding with the navigation preload response when the navigation 2092 // Tests responding with the navigation preload response when the navigation
2082 // occurred after a redirect. 2093 // occurred after a redirect.
2083 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, 2094 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
2934 // effect in CanSuspendRenderer(). 2945 // effect in CanSuspendRenderer().
2935 shell()->web_contents()->WasHidden(); 2946 shell()->web_contents()->WasHidden();
2936 EXPECT_TRUE(rph->IsProcessBackgrounded()); 2947 EXPECT_TRUE(rph->IsProcessBackgrounded());
2937 2948
2938 // The process which has service worker thread shouldn't be suspended. 2949 // The process which has service worker thread shouldn't be suspended.
2939 EXPECT_FALSE(memory_coordinator->CanSuspendRenderer(render_process_id)); 2950 EXPECT_FALSE(memory_coordinator->CanSuspendRenderer(render_process_id));
2940 } 2951 }
2941 #endif 2952 #endif
2942 2953
2943 } // namespace content 2954 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698