OLD | NEW |
---|---|
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 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
381 std::string name; | 381 std::string name; |
382 EXPECT_TRUE(name_value_pair->GetString(0, &name)); | 382 EXPECT_TRUE(name_value_pair->GetString(0, &name)); |
383 std::string value; | 383 std::string value; |
384 EXPECT_TRUE(name_value_pair->GetString(1, &value)); | 384 EXPECT_TRUE(name_value_pair->GetString(1, &value)); |
385 if (name == header_name && value == header_value) | 385 if (name == header_name && value == header_value) |
386 return true; | 386 return true; |
387 } | 387 } |
388 return false; | 388 return false; |
389 } | 389 } |
390 | 390 |
391 bool HasHeader(const base::DictionaryValue& dict, | |
392 base::StringPiece header_name) { | |
393 const base::ListValue* headers = nullptr; | |
394 EXPECT_TRUE(dict.GetList("headers", &headers)); | |
395 for (size_t i = 0; i < headers->GetSize(); ++i) { | |
396 const base::ListValue* name_value_pair = nullptr; | |
397 EXPECT_TRUE(headers->GetList(i, &name_value_pair)); | |
398 EXPECT_EQ(2u, name_value_pair->GetSize()); | |
399 std::string name; | |
400 EXPECT_TRUE(name_value_pair->GetString(0, &name)); | |
401 if (name == header_name) | |
402 return true; | |
403 } | |
404 return false; | |
405 } | |
406 | |
391 net::HttpResponseInfo CreateHttpResponseInfo() { | 407 net::HttpResponseInfo CreateHttpResponseInfo() { |
392 net::HttpResponseInfo info; | 408 net::HttpResponseInfo info; |
393 const char data[] = | 409 const char data[] = |
394 "HTTP/1.1 200 OK\0" | 410 "HTTP/1.1 200 OK\0" |
395 "Content-Type: application/javascript\0" | 411 "Content-Type: application/javascript\0" |
396 "\0"; | 412 "\0"; |
397 info.headers = | 413 info.headers = |
398 new net::HttpResponseHeaders(std::string(data, arraysize(data))); | 414 new net::HttpResponseHeaders(std::string(data, arraysize(data))); |
399 return info; | 415 return info; |
400 } | 416 } |
(...skipping 1090 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1491 scoped_refptr<WorkerActivatedObserver> observer = | 1507 scoped_refptr<WorkerActivatedObserver> observer = |
1492 new WorkerActivatedObserver(wrapper()); | 1508 new WorkerActivatedObserver(wrapper()); |
1493 observer->Init(); | 1509 observer->Init(); |
1494 | 1510 |
1495 public_context()->RegisterServiceWorker( | 1511 public_context()->RegisterServiceWorker( |
1496 scope, worker_url, | 1512 scope, worker_url, |
1497 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); | 1513 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); |
1498 observer->Wait(); | 1514 observer->Wait(); |
1499 } | 1515 } |
1500 | 1516 |
1517 std::string LoadNavigationPreloadTestPage(const GURL& page_url, | |
1518 const GURL& worker_url, | |
1519 const char* expected_result) { | |
1520 RegisterMonitorRequestHandler(); | |
1521 StartServerAndNavigateToSetup(); | |
1522 SetupForNavigationPreloadTest(page_url, worker_url); | |
1523 | |
1524 const base::string16 title = base::ASCIIToUTF16("PASS"); | |
1525 TitleWatcher title_watcher(shell()->web_contents(), title); | |
1526 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | |
1527 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); | |
1528 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | |
1529 NavigateToURL(shell(), page_url); | |
1530 EXPECT_EQ(base::ASCIIToUTF16(expected_result), | |
1531 title_watcher.WaitAndGetTitle()); | |
1532 return GetTextContent(); | |
1533 } | |
1534 | |
1501 void RegisterMonitorRequestHandler() { | 1535 void RegisterMonitorRequestHandler() { |
1502 embedded_test_server()->RegisterRequestMonitor( | 1536 embedded_test_server()->RegisterRequestMonitor( |
1503 base::Bind(&self::MonitorRequestHandler, base::Unretained(this))); | 1537 base::Bind(&self::MonitorRequestHandler, base::Unretained(this))); |
1504 } | 1538 } |
1505 | 1539 |
1506 void RegisterStaticFile(const std::string& relative_url, | 1540 void RegisterStaticFile(const std::string& relative_url, |
1507 const std::string& content, | 1541 const std::string& content, |
1508 const std::string& content_type) { | 1542 const std::string& content_type) { |
1509 embedded_test_server()->RegisterRequestHandler( | 1543 embedded_test_server()->RegisterRequestHandler( |
1510 base::Bind(&self::StaticRequestHandler, base::Unretained(this), | 1544 base::Bind(&self::StaticRequestHandler, base::Unretained(this), |
(...skipping 24 matching lines...) Expand all Loading... | |
1535 std::string GetTextContent() { | 1569 std::string GetTextContent() { |
1536 base::RunLoop run_loop; | 1570 base::RunLoop run_loop; |
1537 std::string text_content; | 1571 std::string text_content; |
1538 shell()->web_contents()->GetMainFrame()->ExecuteJavaScriptForTests( | 1572 shell()->web_contents()->GetMainFrame()->ExecuteJavaScriptForTests( |
1539 base::ASCIIToUTF16("document.body.textContent;"), | 1573 base::ASCIIToUTF16("document.body.textContent;"), |
1540 base::Bind(&StoreString, &text_content, run_loop.QuitClosure())); | 1574 base::Bind(&StoreString, &text_content, run_loop.QuitClosure())); |
1541 run_loop.Run(); | 1575 run_loop.Run(); |
1542 return text_content; | 1576 return text_content; |
1543 } | 1577 } |
1544 | 1578 |
1579 void OpaqueRedirectResponseCheck(const std::string& text_content, | |
1580 const GURL& page_url) const { | |
1581 std::unique_ptr<base::Value> result = base::JSONReader::Read(text_content); | |
1582 base::DictionaryValue* dict = nullptr; | |
1583 ASSERT_TRUE(result->GetAsDictionary(&dict)); | |
1584 EXPECT_EQ("opaqueredirect", GetString(*dict, "type")); | |
1585 EXPECT_EQ(page_url, GURL(GetString(*dict, "url"))); | |
1586 EXPECT_EQ(0, GetInt(*dict, "status")); | |
1587 EXPECT_FALSE(GetBoolean(*dict, "ok")); | |
1588 EXPECT_EQ("", GetString(*dict, "statusText")); | |
1589 const base::ListValue* headers = nullptr; | |
1590 ASSERT_TRUE(dict->GetList("headers", &headers)); | |
1591 EXPECT_EQ(0u, headers->GetSize()); | |
1592 } | |
1593 | |
1545 std::map<std::string, std::vector<net::test_server::HttpRequest>> | 1594 std::map<std::string, std::vector<net::test_server::HttpRequest>> |
1546 request_log_; | 1595 request_log_; |
1547 | 1596 |
1548 private: | 1597 private: |
1549 class CustomResponse : public net::test_server::HttpResponse { | 1598 class CustomResponse : public net::test_server::HttpResponse { |
1550 public: | 1599 public: |
1551 CustomResponse(const std::string& response) : response_(response) {} | 1600 CustomResponse(const std::string& response) : response_(response) {} |
1552 ~CustomResponse() override {} | 1601 ~CustomResponse() override {} |
1553 | 1602 |
1554 void SendResponse( | 1603 void SendResponse( |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1675 const char kPage[] = "<title>PASS</title>Hello world."; | 1724 const char kPage[] = "<title>PASS</title>Hello world."; |
1676 const std::string kScript = kEnableNavigationPreloadScript + | 1725 const std::string kScript = kEnableNavigationPreloadScript + |
1677 "self.addEventListener('fetch', event => {\n" | 1726 "self.addEventListener('fetch', event => {\n" |
1678 " // Do nothing.\n" | 1727 " // Do nothing.\n" |
1679 " });"; | 1728 " });"; |
1680 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1729 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1681 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1730 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1682 RegisterStaticFile(kPageUrl, kPage, "text/html"); | 1731 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1683 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); | 1732 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); |
1684 | 1733 |
1685 RegisterMonitorRequestHandler(); | 1734 EXPECT_EQ("Hello world.", |
1686 StartServerAndNavigateToSetup(); | 1735 LoadNavigationPreloadTestPage(page_url, worker_url, "PASS")); |
1687 SetupForNavigationPreloadTest(page_url, worker_url); | |
1688 | |
1689 const base::string16 title = base::ASCIIToUTF16("PASS"); | |
1690 TitleWatcher title_watcher(shell()->web_contents(), title); | |
1691 NavigateToURL(shell(), page_url); | |
1692 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
1693 EXPECT_EQ("Hello world.", GetTextContent()); | |
1694 | 1736 |
1695 // The page request must be sent once or twice: | 1737 // The page request must be sent once or twice: |
1696 // - A navigation preload request may be sent. But it is possible that the | 1738 // - A navigation preload request may be sent. But it is possible that the |
1697 // navigation preload request is canceled before reaching the server. | 1739 // navigation preload request is canceled before reaching the server. |
1698 // - A fallback request must be sent since respondWith wasn't used. | 1740 // - A fallback request must be sent since respondWith wasn't used. |
1699 const int request_count = GetRequestCount(kPageUrl); | 1741 const int request_count = GetRequestCount(kPageUrl); |
1700 ASSERT_TRUE(request_count == 1 || request_count == 2); | 1742 ASSERT_TRUE(request_count == 1 || request_count == 2); |
1701 if (request_count == 1) { | 1743 if (request_count == 1) { |
1702 // Fallback request. | 1744 // Fallback request. |
1703 EXPECT_FALSE(HasNavigationPreloadHeader(request_log_[kPageUrl][0])); | 1745 EXPECT_FALSE(HasNavigationPreloadHeader(request_log_[kPageUrl][0])); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1809 " {headers: [['content-type', 'text/html']]}));\n" | 1851 " {headers: [['content-type', 'text/html']]}));\n" |
1810 " return;\n" | 1852 " return;\n" |
1811 " }\n" | 1853 " }\n" |
1812 " event.respondWith(event.preloadResponse);\n" | 1854 " event.respondWith(event.preloadResponse);\n" |
1813 " });"; | 1855 " });"; |
1814 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1856 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1815 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1857 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1816 RegisterStaticFile(kPageUrl, kPage, "text/html"); | 1858 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1817 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); | 1859 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); |
1818 | 1860 |
1819 RegisterMonitorRequestHandler(); | 1861 EXPECT_EQ("Hello world.", |
1820 StartServerAndNavigateToSetup(); | 1862 LoadNavigationPreloadTestPage(page_url, worker_url, "PASS")); |
1821 SetupForNavigationPreloadTest(page_url, worker_url); | |
1822 | |
1823 const base::string16 title = base::ASCIIToUTF16("PASS"); | |
1824 TitleWatcher title_watcher(shell()->web_contents(), title); | |
1825 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | |
1826 NavigateToURL(shell(), page_url); | |
1827 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
1828 EXPECT_EQ("Hello world.", GetTextContent()); | |
1829 | 1863 |
1830 // The page request must be sent only once, since the worker responded with | 1864 // The page request must be sent only once, since the worker responded with |
1831 // the navigation preload response | 1865 // the navigation preload response |
1832 ASSERT_EQ(1, GetRequestCount(kPageUrl)); | 1866 ASSERT_EQ(1, GetRequestCount(kPageUrl)); |
1833 EXPECT_EQ("true", | 1867 EXPECT_EQ("true", |
1834 request_log_[kPageUrl][0].headers[kNavigationPreloadHeaderName]); | 1868 request_log_[kPageUrl][0].headers[kNavigationPreloadHeaderName]); |
1835 } | 1869 } |
1836 | 1870 |
1837 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, GetResponseText) { | 1871 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, GetResponseText) { |
1838 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1872 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1839 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1873 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1840 const char kPage[] = "<title>PASS</title>Hello world."; | 1874 const char kPage[] = "<title>PASS</title>Hello world."; |
1841 const std::string kScript = | 1875 const std::string kScript = |
1842 kEnableNavigationPreloadScript + | 1876 kEnableNavigationPreloadScript + |
1843 "self.addEventListener('fetch', event => {\n" | 1877 "self.addEventListener('fetch', event => {\n" |
1844 " event.respondWith(\n" | 1878 " event.respondWith(\n" |
1845 " event.preloadResponse\n" | 1879 " event.preloadResponse\n" |
1846 " .then(response => response.text())\n" | 1880 " .then(response => response.text())\n" |
1847 " .then(text =>\n" | 1881 " .then(text =>\n" |
1848 " new Response(\n" | 1882 " new Response(\n" |
1849 " text,\n" | 1883 " text,\n" |
1850 " {headers: [['content-type', 'text/html']]})));\n" | 1884 " {headers: [['content-type', 'text/html']]})));\n" |
1851 " });"; | 1885 " });"; |
1852 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1886 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1853 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1887 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1854 RegisterStaticFile(kPageUrl, kPage, "text/html"); | 1888 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1855 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); | 1889 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); |
1856 | 1890 |
1857 RegisterMonitorRequestHandler(); | 1891 EXPECT_EQ("Hello world.", |
1858 StartServerAndNavigateToSetup(); | 1892 LoadNavigationPreloadTestPage(page_url, worker_url, "PASS")); |
1859 SetupForNavigationPreloadTest(page_url, worker_url); | |
1860 | |
1861 const base::string16 title = base::ASCIIToUTF16("PASS"); | |
1862 TitleWatcher title_watcher(shell()->web_contents(), title); | |
1863 NavigateToURL(shell(), page_url); | |
1864 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
1865 EXPECT_EQ("Hello world.", GetTextContent()); | |
1866 | 1893 |
1867 // The page request must be sent only once, since the worker responded with | 1894 // The page request must be sent only once, since the worker responded with |
1868 // "Hello world". | 1895 // "Hello world". |
1869 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 1896 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
1870 } | 1897 } |
1871 | 1898 |
1872 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, EmptyBody) { | 1899 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, EmptyBody) { |
1873 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1900 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1874 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1901 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1875 const char kPage[] = ""; | 1902 const char kPage[] = ""; |
1876 const std::string kScript = | 1903 const std::string kScript = |
1877 kEnableNavigationPreloadScript + | 1904 kEnableNavigationPreloadScript + |
1878 "self.addEventListener('fetch', event => {\n" | 1905 "self.addEventListener('fetch', event => {\n" |
1879 " event.respondWith(\n" | 1906 " event.respondWith(\n" |
1880 " event.preloadResponse\n" | 1907 " event.preloadResponse\n" |
1881 " .then(response => response.text())\n" | 1908 " .then(response => response.text())\n" |
1882 " .then(text =>\n" | 1909 " .then(text =>\n" |
1883 " new Response(\n" | 1910 " new Response(\n" |
1884 " '<title>PASS</title>[' + text + ']',\n" | 1911 " '<title>PASS</title>[' + text + ']',\n" |
1885 " {headers: [['content-type', 'text/html']]})));\n" | 1912 " {headers: [['content-type', 'text/html']]})));\n" |
1886 " });"; | 1913 " });"; |
1887 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1914 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1888 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1915 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1889 RegisterStaticFile(kPageUrl, kPage, "text/html"); | 1916 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1890 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); | 1917 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); |
1891 | 1918 |
1892 RegisterMonitorRequestHandler(); | 1919 EXPECT_EQ("[]", LoadNavigationPreloadTestPage(page_url, worker_url, "PASS")); |
1893 StartServerAndNavigateToSetup(); | |
1894 SetupForNavigationPreloadTest(page_url, worker_url); | |
1895 | |
1896 const base::string16 title = base::ASCIIToUTF16("PASS"); | |
1897 TitleWatcher title_watcher(shell()->web_contents(), title); | |
1898 NavigateToURL(shell(), page_url); | |
1899 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
1900 EXPECT_EQ("[]", GetTextContent()); | |
1901 | 1920 |
1902 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 1921 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
1903 } | 1922 } |
1904 | 1923 |
1905 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NetworkError) { | 1924 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NetworkError) { |
1906 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1925 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1907 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1926 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1908 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1927 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1909 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1928 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1910 RegisterStaticFile( | 1929 RegisterStaticFile( |
(...skipping 22 matching lines...) Expand all Loading... | |
1933 base::Bind(&CancellingInterceptorCallback)); | 1952 base::Bind(&CancellingInterceptorCallback)); |
1934 | 1953 |
1935 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1954 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1936 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1955 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1937 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1956 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1938 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1957 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1939 RegisterStaticFile( | 1958 RegisterStaticFile( |
1940 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, | 1959 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, |
1941 "text/javascript"); | 1960 "text/javascript"); |
1942 | 1961 |
1943 RegisterMonitorRequestHandler(); | |
1944 StartServerAndNavigateToSetup(); | |
1945 SetupForNavigationPreloadTest(page_url, worker_url); | |
1946 | |
1947 const base::string16 title = base::ASCIIToUTF16("REJECTED"); | |
1948 TitleWatcher title_watcher(shell()->web_contents(), title); | |
1949 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | |
1950 NavigateToURL(shell(), page_url); | |
1951 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
1952 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", | 1962 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", |
1953 GetTextContent()); | 1963 LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED")); |
1954 } | 1964 } |
1955 | 1965 |
1956 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, | 1966 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, |
1957 PreloadHeadersSimple) { | 1967 PreloadHeadersSimple) { |
1958 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1968 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1959 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1969 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1960 const char kPage[] = "<title>ERROR</title>Hello world."; | 1970 const char kPage[] = "<title>ERROR</title>Hello world."; |
1961 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1971 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1962 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1972 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1963 RegisterStaticFile(kPageUrl, kPage, "text/html"); | 1973 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1964 RegisterStaticFile( | 1974 RegisterStaticFile( |
1965 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, | 1975 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, |
1966 "text/javascript"); | 1976 "text/javascript"); |
1967 | 1977 |
1968 RegisterMonitorRequestHandler(); | 1978 std::unique_ptr<base::Value> result = base::JSONReader::Read( |
1969 StartServerAndNavigateToSetup(); | 1979 LoadNavigationPreloadTestPage(page_url, worker_url, "RESOLVED")); |
1970 SetupForNavigationPreloadTest(page_url, worker_url); | |
1971 | |
1972 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); | |
1973 TitleWatcher title_watcher(shell()->web_contents(), title); | |
1974 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); | |
1975 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | |
1976 NavigateToURL(shell(), page_url); | |
1977 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
1978 | 1980 |
1979 // The page request must be sent only once, since the worker responded with | 1981 // The page request must be sent only once, since the worker responded with |
1980 // a generated Response. | 1982 // a generated Response. |
1981 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 1983 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
1982 std::unique_ptr<base::Value> result = | |
1983 base::JSONReader::Read(GetTextContent()); | |
1984 base::DictionaryValue* dict = nullptr; | 1984 base::DictionaryValue* dict = nullptr; |
1985 ASSERT_TRUE(result->GetAsDictionary(&dict)); | 1985 ASSERT_TRUE(result->GetAsDictionary(&dict)); |
1986 EXPECT_EQ("basic", GetString(*dict, "type")); | 1986 EXPECT_EQ("basic", GetString(*dict, "type")); |
1987 EXPECT_EQ(page_url, GURL(GetString(*dict, "url"))); | 1987 EXPECT_EQ(page_url, GURL(GetString(*dict, "url"))); |
1988 EXPECT_EQ(200, GetInt(*dict, "status")); | 1988 EXPECT_EQ(200, GetInt(*dict, "status")); |
1989 EXPECT_EQ(true, GetBoolean(*dict, "ok")); | 1989 EXPECT_TRUE(GetBoolean(*dict, "ok")); |
1990 EXPECT_EQ("OK", GetString(*dict, "statusText")); | 1990 EXPECT_EQ("OK", GetString(*dict, "statusText")); |
1991 EXPECT_TRUE(CheckHeader(*dict, "content-type", "text/html")); | 1991 EXPECT_TRUE(CheckHeader(*dict, "content-type", "text/html")); |
1992 EXPECT_TRUE(CheckHeader(*dict, "content-length", | 1992 EXPECT_TRUE(CheckHeader(*dict, "content-length", |
1993 base::IntToString(sizeof(kPage) - 1))); | 1993 base::IntToString(sizeof(kPage) - 1))); |
1994 } | 1994 } |
1995 | 1995 |
1996 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NotEnabled) { | 1996 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NotEnabled) { |
1997 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1997 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1998 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1998 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1999 const char kPage[] = "<title>ERROR</title>Hello world."; | 1999 const char kPage[] = "<title>ERROR</title>Hello world."; |
2000 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 2000 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
2001 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 2001 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
2002 RegisterStaticFile(kPageUrl, kPage, "text/html"); | 2002 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
2003 RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript"); | 2003 RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript"); |
2004 | 2004 |
2005 RegisterMonitorRequestHandler(); | 2005 EXPECT_EQ("Resolved with undefined.", |
2006 StartServerAndNavigateToSetup(); | 2006 LoadNavigationPreloadTestPage(page_url, worker_url, "RESOLVED")); |
2007 SetupForNavigationPreloadTest(page_url, worker_url); | |
2008 | |
2009 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); | |
2010 TitleWatcher title_watcher(shell()->web_contents(), title); | |
2011 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); | |
2012 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | |
2013 NavigateToURL(shell(), page_url); | |
2014 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
2015 | 2007 |
2016 // The page request must not be sent, since the worker responded with a | 2008 // The page request must not be sent, since the worker responded with a |
2017 // generated Response and the navigation preload isn't enabled. | 2009 // generated Response and the navigation preload isn't enabled. |
2018 EXPECT_EQ(0, GetRequestCount(kPageUrl)); | 2010 EXPECT_EQ(0, GetRequestCount(kPageUrl)); |
2019 EXPECT_EQ("Resolved with undefined.", GetTextContent()); | |
2020 } | 2011 } |
2021 | 2012 |
2022 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, | 2013 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, |
2023 PreloadHeadersCustom) { | 2014 PreloadHeadersCustom) { |
2024 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 2015 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
2025 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 2016 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
2026 const char kPageResponse[] = | 2017 const char kPageResponse[] = |
2027 "HTTP/1.1 201 HELLOWORLD\r\n" | 2018 "HTTP/1.1 201 HELLOWORLD\r\n" |
2028 "Connection: close\r\n" | 2019 "Connection: close\r\n" |
2029 "Content-Length: 32\r\n" | 2020 "Content-Length: 32\r\n" |
2030 "Content-Type: text/html\r\n" | 2021 "Content-Type: text/html\r\n" |
2031 "Custom-Header: pen pineapple\r\n" | 2022 "Custom-Header: pen pineapple\r\n" |
2032 "Custom-Header: apple pen\r\n" | 2023 "Custom-Header: apple pen\r\n" |
2033 "Set-Cookie: COOKIE1\r\n" | 2024 "Set-Cookie: COOKIE1\r\n" |
2034 "Set-Cookie2: COOKIE2\r\n" | 2025 "Set-Cookie2: COOKIE2\r\n" |
2035 "\r\n" | 2026 "\r\n" |
2036 "<title>ERROR</title>Hello world."; | 2027 "<title>ERROR</title>Hello world."; |
2037 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 2028 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
2038 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 2029 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
2039 RegisterCustomResponse(kPageUrl, kPageResponse); | 2030 RegisterCustomResponse(kPageUrl, kPageResponse); |
2040 RegisterStaticFile( | 2031 RegisterStaticFile( |
2041 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, | 2032 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, |
2042 "text/javascript"); | 2033 "text/javascript"); |
2043 | 2034 |
2044 RegisterMonitorRequestHandler(); | 2035 std::unique_ptr<base::Value> result = base::JSONReader::Read( |
2045 StartServerAndNavigateToSetup(); | 2036 LoadNavigationPreloadTestPage(page_url, worker_url, "RESOLVED")); |
2046 SetupForNavigationPreloadTest(page_url, worker_url); | |
2047 | |
2048 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); | |
2049 TitleWatcher title_watcher(shell()->web_contents(), title); | |
2050 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); | |
2051 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | |
2052 NavigateToURL(shell(), page_url); | |
2053 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
2054 | 2037 |
2055 // The page request must be sent only once, since the worker responded with | 2038 // The page request must be sent only once, since the worker responded with |
2056 // a generated Response. | 2039 // a generated Response. |
2057 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 2040 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
2058 std::unique_ptr<base::Value> result = | |
2059 base::JSONReader::Read(GetTextContent()); | |
2060 base::DictionaryValue* dict = nullptr; | 2041 base::DictionaryValue* dict = nullptr; |
2061 ASSERT_TRUE(result->GetAsDictionary(&dict)); | 2042 ASSERT_TRUE(result->GetAsDictionary(&dict)); |
2062 EXPECT_EQ("basic", GetString(*dict, "type")); | 2043 EXPECT_EQ("basic", GetString(*dict, "type")); |
2063 EXPECT_EQ(page_url, GURL(GetString(*dict, "url"))); | 2044 EXPECT_EQ(page_url, GURL(GetString(*dict, "url"))); |
2064 EXPECT_EQ(201, GetInt(*dict, "status")); | 2045 EXPECT_EQ(201, GetInt(*dict, "status")); |
2065 EXPECT_EQ(true, GetBoolean(*dict, "ok")); | 2046 EXPECT_TRUE(GetBoolean(*dict, "ok")); |
2066 EXPECT_EQ("HELLOWORLD", GetString(*dict, "statusText")); | 2047 EXPECT_EQ("HELLOWORLD", GetString(*dict, "statusText")); |
2067 EXPECT_TRUE(CheckHeader(*dict, "content-type", "text/html")); | 2048 EXPECT_TRUE(CheckHeader(*dict, "content-type", "text/html")); |
2068 EXPECT_TRUE(CheckHeader(*dict, "content-length", "32")); | 2049 EXPECT_TRUE(CheckHeader(*dict, "content-length", "32")); |
2069 EXPECT_TRUE(CheckHeader(*dict, "custom-header", "pen pineapple, apple pen")); | 2050 EXPECT_TRUE(CheckHeader(*dict, "custom-header", "pen pineapple, apple pen")); |
2070 // The forbidden response headers (Set-Cookie, Set-Cookie2) must be removed. | 2051 // The forbidden response headers (Set-Cookie, Set-Cookie2) must be removed. |
2071 EXPECT_FALSE(dict->HasKey("set-cookie")); | 2052 EXPECT_FALSE(HasHeader(*dict, "set-cookie")); |
2072 EXPECT_FALSE(dict->HasKey("set-cookie2")); | 2053 EXPECT_FALSE(HasHeader(*dict, "set-cookie2")); |
2073 } | 2054 } |
2074 | 2055 |
2075 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, RejectRedirects) { | 2056 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NormalRedirect) { |
2076 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 2057 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
2077 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 2058 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
2078 const char kRedirectedPageUrl[] = | 2059 const char kRedirectedPageUrl[] = |
2079 "/service_worker/navigation_preload_redirected.html"; | 2060 "/service_worker/navigation_preload_redirected.html"; |
2080 const char kPageResponse[] = | 2061 const char kPageResponse[] = |
2081 "HTTP/1.1 302 Found\r\n" | 2062 "HTTP/1.1 302 Found\r\n" |
2082 "Connection: close\r\n" | 2063 "Connection: close\r\n" |
2083 "Location: /service_worker/navigation_preload_redirected.html\r\n" | 2064 "Location: /service_worker/navigation_preload_redirected.html\r\n" |
2084 "\r\n"; | 2065 "\r\n"; |
2085 const char kRedirectedPage[] = "<title>ERROR</title>Redirected page."; | 2066 const char kRedirectedPage[] = "<title>ERROR</title>Redirected page."; |
2086 const GURL redirecred_page_url = | |
2087 embedded_test_server()->GetURL(kRedirectedPageUrl); | |
2088 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 2067 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
2089 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 2068 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
2090 RegisterCustomResponse(kPageUrl, kPageResponse); | 2069 RegisterCustomResponse(kPageUrl, kPageResponse); |
2091 RegisterStaticFile( | 2070 RegisterStaticFile( |
2092 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, | 2071 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, |
2093 "text/javascript"); | 2072 "text/javascript"); |
2094 RegisterStaticFile(kRedirectedPageUrl, kRedirectedPage, "text/html"); | 2073 RegisterStaticFile(kRedirectedPageUrl, kRedirectedPage, "text/html"); |
2095 | 2074 |
2096 RegisterMonitorRequestHandler(); | 2075 OpaqueRedirectResponseCheck( |
2097 StartServerAndNavigateToSetup(); | 2076 LoadNavigationPreloadTestPage(page_url, worker_url, "RESOLVED"), |
2098 SetupForNavigationPreloadTest(page_url, worker_url); | 2077 page_url); |
2099 | |
2100 const base::string16 title = base::ASCIIToUTF16("REJECTED"); | |
2101 TitleWatcher title_watcher(shell()->web_contents(), title); | |
2102 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | |
2103 NavigateToURL(shell(), page_url); | |
2104 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
2105 | 2078 |
2106 // The page request must be sent only once, since the worker responded with | 2079 // The page request must be sent only once, since the worker responded with |
2107 // a generated Response. | 2080 // a generated Response. |
2108 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 2081 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
2109 // The redirected request must not be sent. | 2082 // The redirected request must not be sent. |
2110 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl)); | 2083 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl)); |
2111 EXPECT_EQ( | 2084 } |
2112 "NetworkError: Service Worker navigation preload doesn't support " | 2085 |
2113 "redirects.", | 2086 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, |
2114 GetTextContent()); | 2087 InvalidRedirect_MultiLocation) { |
2088 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | |
2089 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | |
2090 const char kRedirectedPageUrl1[] = | |
2091 "/service_worker/navigation_preload_redirected1.html"; | |
2092 const char kRedirectedPageUrl2[] = | |
2093 "/service_worker/navigation_preload_redirected2.html"; | |
2094 const char kPageResponse[] = | |
2095 "HTTP/1.1 302 Found\r\n" | |
2096 "Connection: close\r\n" | |
2097 "Location: /service_worker/navigation_preload_redirected1.html\r\n" | |
2098 "Location: /service_worker/navigation_preload_redirected2.html\r\n" | |
2099 "\r\n"; | |
2100 const char kRedirectedPage[] = "<title>ERROR</title>Redirected page."; | |
2101 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | |
2102 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | |
2103 RegisterCustomResponse(kPageUrl, kPageResponse); | |
2104 RegisterStaticFile( | |
2105 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, | |
2106 "text/javascript"); | |
2107 RegisterStaticFile(kRedirectedPageUrl1, kRedirectedPage, "text/html"); | |
2108 | |
2109 // According to the spec, multiple Location headers is not an error. So the | |
2110 // preloadResponse must be resolved with an opaque redirect response. | |
2111 // But Chrome treats multiple Location headers as an error (crbug.com/98895). | |
2112 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", | |
2113 LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED")); | |
2114 | |
2115 // The page request must be sent only once, since the worker responded with | |
2116 // a generated Response. | |
2117 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | |
2118 // The redirected request must not be sent. | |
2119 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl1)); | |
2120 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl2)); | |
2121 } | |
2122 | |
2123 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, | |
2124 InvalidRedirect_InvalidLocation) { | |
2125 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | |
2126 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | |
2127 const char kPageResponse[] = | |
2128 "HTTP/1.1 302 Found\r\n" | |
2129 "Connection: close\r\n" | |
2130 "Location: http://\r\n" | |
2131 "\r\n"; | |
2132 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | |
2133 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | |
2134 RegisterCustomResponse(kPageUrl, kPageResponse); | |
2135 RegisterStaticFile( | |
2136 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, | |
2137 "text/javascript"); | |
2138 | |
2139 // According to the spec, even if the location URL is invalid, the | |
2140 // preloadResponse must be resolve with an opaque redirect response. But | |
2141 // currently Chrome handles the invalid location URL in the browser process as | |
2142 // an error. | |
falken
2017/03/31 07:36:03
Make this a TODO with bug?
horo
2017/03/31 09:56:30
Done.
| |
2143 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", | |
2144 LoadNavigationPreloadTestPage(page_url, worker_url, "REJECTED")); | |
2145 | |
2146 // The page request must be sent only once, since the worker responded with | |
2147 // a generated Response. | |
2148 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | |
2149 } | |
2150 | |
2151 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, | |
2152 InvalidRedirect_NoLocation) { | |
2153 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | |
2154 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | |
2155 const char kPageResponse[] = | |
2156 "HTTP/1.1 302 Found\r\n" | |
2157 "Connection: close\r\n" | |
2158 "Custom-Header: hello\r\n" | |
2159 "\r\n"; | |
2160 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | |
2161 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | |
2162 RegisterCustomResponse(kPageUrl, kPageResponse); | |
2163 RegisterStaticFile( | |
2164 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, | |
2165 "text/javascript"); | |
2166 | |
2167 OpaqueRedirectResponseCheck( | |
2168 LoadNavigationPreloadTestPage(page_url, worker_url, "RESOLVED"), | |
2169 page_url); | |
2170 | |
2171 // The page request must be sent only once, since the worker responded with | |
2172 // a generated Response. | |
2173 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | |
2174 } | |
2175 | |
2176 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, | |
2177 InvalidRedirect_NoLocationWithBody) { | |
2178 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | |
2179 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | |
2180 const char kPageResponse[] = | |
2181 "HTTP/1.1 302 Found\r\n" | |
2182 "Connection: close\r\n" | |
2183 "Custom-Header: hello\r\n" | |
2184 "\r\n" | |
2185 "Body\r\n"; | |
2186 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | |
2187 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | |
2188 RegisterCustomResponse(kPageUrl, kPageResponse); | |
2189 RegisterStaticFile( | |
2190 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, | |
2191 "text/javascript"); | |
2192 | |
2193 OpaqueRedirectResponseCheck( | |
2194 LoadNavigationPreloadTestPage(page_url, worker_url, "RESOLVED"), | |
2195 page_url); | |
2196 | |
2197 // The page request must be sent only once, since the worker responded with | |
2198 // a generated Response. | |
2199 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | |
2115 } | 2200 } |
2116 | 2201 |
2117 // Tests responding with the navigation preload response when the navigation | 2202 // Tests responding with the navigation preload response when the navigation |
2118 // occurred after a redirect. | 2203 // occurred after a redirect. |
2119 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, | 2204 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, |
2120 RedirectAndRespondWithNavigationPreload) { | 2205 RedirectAndRespondWithNavigationPreload) { |
2121 const std::string kPageUrl = "/service_worker/navigation_preload.html"; | 2206 const std::string kPageUrl = "/service_worker/navigation_preload.html"; |
2122 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 2207 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
2123 const char kPage[] = | 2208 const char kPage[] = |
2124 "<title></title>\n" | 2209 "<title></title>\n" |
(...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2970 // effect in CanSuspendRenderer(). | 3055 // effect in CanSuspendRenderer(). |
2971 shell()->web_contents()->WasHidden(); | 3056 shell()->web_contents()->WasHidden(); |
2972 EXPECT_TRUE(rph->IsProcessBackgrounded()); | 3057 EXPECT_TRUE(rph->IsProcessBackgrounded()); |
2973 | 3058 |
2974 // The process which has service worker thread shouldn't be suspended. | 3059 // The process which has service worker thread shouldn't be suspended. |
2975 EXPECT_FALSE(memory_coordinator->CanSuspendRenderer(render_process_id)); | 3060 EXPECT_FALSE(memory_coordinator->CanSuspendRenderer(render_process_id)); |
2976 } | 3061 } |
2977 #endif | 3062 #endif |
2978 | 3063 |
2979 } // namespace content | 3064 } // namespace content |
OLD | NEW |