Chromium Code Reviews| 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 |