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 1404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1415 ~ServiceWorkerNavigationPreloadTest() override {} | 1415 ~ServiceWorkerNavigationPreloadTest() override {} |
1416 | 1416 |
1417 void SetUpCommandLine(base::CommandLine* command_line) override { | 1417 void SetUpCommandLine(base::CommandLine* command_line) override { |
1418 command_line->AppendSwitchASCII( | 1418 command_line->AppendSwitchASCII( |
1419 switches::kEnableFeatures, | 1419 switches::kEnableFeatures, |
1420 features::kServiceWorkerNavigationPreload.name); | 1420 features::kServiceWorkerNavigationPreload.name); |
1421 } | 1421 } |
1422 | 1422 |
1423 protected: | 1423 protected: |
1424 void SetupForNavigationPreloadTest(const GURL& scope, | 1424 void SetupForNavigationPreloadTest(const GURL& scope, |
1425 const GURL& worker_url) { | 1425 const GURL& worker_url, |
| 1426 bool enable_navigation_preload) { |
1426 scoped_refptr<WorkerActivatedObserver> observer = | 1427 scoped_refptr<WorkerActivatedObserver> observer = |
1427 new WorkerActivatedObserver(wrapper()); | 1428 new WorkerActivatedObserver(wrapper()); |
1428 observer->Init(); | 1429 observer->Init(); |
1429 public_context()->RegisterServiceWorker( | 1430 public_context()->RegisterServiceWorker( |
1430 scope, worker_url, | 1431 scope, worker_url, |
1431 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); | 1432 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); |
1432 observer->Wait(); | 1433 observer->Wait(); |
1433 | 1434 if (enable_navigation_preload) { |
1434 RunOnIOThread(base::Bind(&self::EnableNavigationPreloadOnIO, | 1435 RunOnIOThread(base::Bind(&self::EnableNavigationPreloadOnIO, |
1435 base::Unretained(this), scope)); | 1436 base::Unretained(this), scope)); |
| 1437 } |
1436 | 1438 |
1437 embedded_test_server()->RegisterRequestMonitor( | 1439 embedded_test_server()->RegisterRequestMonitor( |
1438 base::Bind(&self::MonitorRequestHandler, base::Unretained(this))); | 1440 base::Bind(&self::MonitorRequestHandler, base::Unretained(this))); |
1439 } | 1441 } |
1440 | 1442 |
1441 void RegisterStaticFile(const GURL& url, | 1443 void RegisterStaticFile(const GURL& url, |
1442 const std::string& content, | 1444 const std::string& content, |
1443 const std::string& content_type) { | 1445 const std::string& content_type) { |
1444 embedded_test_server()->RegisterRequestHandler( | 1446 embedded_test_server()->RegisterRequestHandler( |
1445 base::Bind(&self::StaticRequestHandler, base::Unretained(this), url, | 1447 base::Bind(&self::StaticRequestHandler, base::Unretained(this), url, |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1543 | 1545 |
1544 std::vector<std::string> request_log_; | 1546 std::vector<std::string> request_log_; |
1545 }; | 1547 }; |
1546 | 1548 |
1547 const char ServiceWorkerNavigationPreloadTest::kPreloadResponseTestScript[] = | 1549 const char ServiceWorkerNavigationPreloadTest::kPreloadResponseTestScript[] = |
1548 "var preload_resolve;\n" | 1550 "var preload_resolve;\n" |
1549 "var preload_promise = new Promise(r => { preload_resolve = r; });\n" | 1551 "var preload_promise = new Promise(r => { preload_resolve = r; });\n" |
1550 "self.addEventListener('fetch', event => {\n" | 1552 "self.addEventListener('fetch', event => {\n" |
1551 " event.waitUntil(event.navigationPreload.then(\n" | 1553 " event.waitUntil(event.navigationPreload.then(\n" |
1552 " r => {\n" | 1554 " r => {\n" |
| 1555 " if (!r) {\n" |
| 1556 " preload_resolve(\n" |
| 1557 " {result: 'RESOLVED', info: 'Resolved with ' + r + '.'});\n" |
| 1558 " return;\n" |
| 1559 " }\n" |
1553 " var info = {};\n" | 1560 " var info = {};\n" |
1554 " info.type = r.type;\n" | 1561 " info.type = r.type;\n" |
1555 " info.url = r.url;\n" | 1562 " info.url = r.url;\n" |
1556 " info.status = r.status;\n" | 1563 " info.status = r.status;\n" |
1557 " info.ok = r.ok;\n" | 1564 " info.ok = r.ok;\n" |
1558 " info.statusText = r.statusText;\n" | 1565 " info.statusText = r.statusText;\n" |
1559 " info.headers = [];\n" | 1566 " info.headers = [];\n" |
1560 " r.headers.forEach((v, n) => { info.headers.push([n,v]); });\n" | 1567 " r.headers.forEach((v, n) => { info.headers.push([n,v]); });\n" |
1561 " preload_resolve({result: 'RESOLVED',\n" | 1568 " preload_resolve({result: 'RESOLVED',\n" |
1562 " info: JSON.stringify(info)}); },\n" | 1569 " info: JSON.stringify(info)}); },\n" |
(...skipping 27 matching lines...) Expand all Loading... |
1590 const char kPage[] = "<title>PASS</title>Hello world."; | 1597 const char kPage[] = "<title>PASS</title>Hello world."; |
1591 const char kScript[] = | 1598 const char kScript[] = |
1592 "self.addEventListener('fetch', event => {\n" | 1599 "self.addEventListener('fetch', event => {\n" |
1593 " // Do nothing.\n" | 1600 " // Do nothing.\n" |
1594 " });"; | 1601 " });"; |
1595 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1602 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1596 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1603 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1597 RegisterStaticFile(page_url, kPage, "text/html"); | 1604 RegisterStaticFile(page_url, kPage, "text/html"); |
1598 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1605 RegisterStaticFile(worker_url, kScript, "text/javascript"); |
1599 | 1606 |
1600 SetupForNavigationPreloadTest(page_url, worker_url); | 1607 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1608 true /* enable_navigation_preload */); |
1601 | 1609 |
1602 const base::string16 title = base::ASCIIToUTF16("PASS"); | 1610 const base::string16 title = base::ASCIIToUTF16("PASS"); |
1603 TitleWatcher title_watcher(shell()->web_contents(), title); | 1611 TitleWatcher title_watcher(shell()->web_contents(), title); |
1604 NavigateToURL(shell(), page_url); | 1612 NavigateToURL(shell(), page_url); |
1605 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1613 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1606 EXPECT_EQ("Hello world.", GetTextContent()); | 1614 EXPECT_EQ("Hello world.", GetTextContent()); |
1607 | 1615 |
1608 // The page request must be sent twice. Once for navigation preload, and once | 1616 // The page request must be sent twice. Once for navigation preload, and once |
1609 // for fallback since respondWith wasn't used. | 1617 // for fallback since respondWith wasn't used. |
1610 EXPECT_EQ(2, GetRequestCount(kPageUrl)); | 1618 EXPECT_EQ(2, GetRequestCount(kPageUrl)); |
(...skipping 14 matching lines...) Expand all Loading... |
1625 " {headers: [['content-type', 'text/html']]}));\n" | 1633 " {headers: [['content-type', 'text/html']]}));\n" |
1626 " return;\n" | 1634 " return;\n" |
1627 " }\n" | 1635 " }\n" |
1628 " event.respondWith(event.navigationPreload);\n" | 1636 " event.respondWith(event.navigationPreload);\n" |
1629 " });"; | 1637 " });"; |
1630 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1638 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1631 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1639 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1632 RegisterStaticFile(page_url, kPage, "text/html"); | 1640 RegisterStaticFile(page_url, kPage, "text/html"); |
1633 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1641 RegisterStaticFile(worker_url, kScript, "text/javascript"); |
1634 | 1642 |
1635 SetupForNavigationPreloadTest(page_url, worker_url); | 1643 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1644 true /* enable_navigation_preload */); |
1636 | 1645 |
1637 const base::string16 title = base::ASCIIToUTF16("PASS"); | 1646 const base::string16 title = base::ASCIIToUTF16("PASS"); |
1638 TitleWatcher title_watcher(shell()->web_contents(), title); | 1647 TitleWatcher title_watcher(shell()->web_contents(), title); |
1639 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | 1648 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
1640 NavigateToURL(shell(), page_url); | 1649 NavigateToURL(shell(), page_url); |
1641 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1650 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1642 EXPECT_EQ("Hello world.", GetTextContent()); | 1651 EXPECT_EQ("Hello world.", GetTextContent()); |
1643 | 1652 |
1644 // The page request must be sent only once, since the worker responded with | 1653 // The page request must be sent only once, since the worker responded with |
1645 // the navigation preload response | 1654 // the navigation preload response |
(...skipping 14 matching lines...) Expand all Loading... |
1660 " .then(text =>\n" | 1669 " .then(text =>\n" |
1661 " new Response(\n" | 1670 " new Response(\n" |
1662 " text,\n" | 1671 " text,\n" |
1663 " {headers: [['content-type', 'text/html']]})));\n" | 1672 " {headers: [['content-type', 'text/html']]})));\n" |
1664 " });"; | 1673 " });"; |
1665 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1674 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1666 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1675 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1667 RegisterStaticFile(page_url, kPage, "text/html"); | 1676 RegisterStaticFile(page_url, kPage, "text/html"); |
1668 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1677 RegisterStaticFile(worker_url, kScript, "text/javascript"); |
1669 | 1678 |
1670 SetupForNavigationPreloadTest(page_url, worker_url); | 1679 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1680 true /* enable_navigation_preload */); |
1671 | 1681 |
1672 const base::string16 title = base::ASCIIToUTF16("PASS"); | 1682 const base::string16 title = base::ASCIIToUTF16("PASS"); |
1673 TitleWatcher title_watcher(shell()->web_contents(), title); | 1683 TitleWatcher title_watcher(shell()->web_contents(), title); |
1674 NavigateToURL(shell(), page_url); | 1684 NavigateToURL(shell(), page_url); |
1675 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1685 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1676 EXPECT_EQ("Hello world.", GetTextContent()); | 1686 EXPECT_EQ("Hello world.", GetTextContent()); |
1677 | 1687 |
1678 // The page request must be sent only once, since the worker responded with | 1688 // The page request must be sent only once, since the worker responded with |
1679 // "Hello world". | 1689 // "Hello world". |
1680 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 1690 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1716 "self.addEventListener('message', event => {\n" | 1726 "self.addEventListener('message', event => {\n" |
1717 " event.waitUntil(\n" | 1727 " event.waitUntil(\n" |
1718 " preload_promise.then(\n" | 1728 " preload_promise.then(\n" |
1719 " result => event.ports[0].postMessage(result)));\n" | 1729 " result => event.ports[0].postMessage(result)));\n" |
1720 " });"; | 1730 " });"; |
1721 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1731 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1722 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1732 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1723 RegisterStaticFile(page_url, kPage, "text/html"); | 1733 RegisterStaticFile(page_url, kPage, "text/html"); |
1724 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1734 RegisterStaticFile(worker_url, kScript, "text/javascript"); |
1725 | 1735 |
1726 SetupForNavigationPreloadTest(page_url, worker_url); | 1736 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1737 true /* enable_navigation_preload */); |
1727 | 1738 |
1728 const base::string16 title = base::ASCIIToUTF16("REJECTED"); | 1739 const base::string16 title = base::ASCIIToUTF16("REJECTED"); |
1729 TitleWatcher title_watcher(shell()->web_contents(), title); | 1740 TitleWatcher title_watcher(shell()->web_contents(), title); |
1730 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | 1741 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); |
1731 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | 1742 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
1732 NavigateToURL(shell(), page_url); | 1743 NavigateToURL(shell(), page_url); |
1733 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1744 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1734 | 1745 |
1735 EXPECT_EQ( | 1746 EXPECT_EQ( |
1736 "AbortError: Service Worker navigation preload aborted. Need to guard " | 1747 "AbortError: Service Worker navigation preload aborted. Need to guard " |
1737 "with respondWith or waitUntil.", | 1748 "with respondWith or waitUntil.", |
1738 GetTextContent()); | 1749 GetTextContent()); |
1739 } | 1750 } |
1740 | 1751 |
1741 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NetworkError) { | 1752 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NetworkError) { |
1742 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1753 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1743 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1754 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1744 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1755 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1745 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1756 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1746 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); | 1757 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); |
1747 | 1758 |
1748 SetupForNavigationPreloadTest(page_url, worker_url); | 1759 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1760 true /* enable_navigation_preload */); |
1749 | 1761 |
1750 EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete()); | 1762 EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete()); |
1751 | 1763 |
1752 const base::string16 title = base::ASCIIToUTF16("REJECTED"); | 1764 const base::string16 title = base::ASCIIToUTF16("REJECTED"); |
1753 TitleWatcher title_watcher(shell()->web_contents(), title); | 1765 TitleWatcher title_watcher(shell()->web_contents(), title); |
1754 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | 1766 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); |
1755 NavigateToURL(shell(), page_url); | 1767 NavigateToURL(shell(), page_url); |
1756 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1768 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1757 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", | 1769 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", |
1758 GetTextContent()); | 1770 GetTextContent()); |
1759 } | 1771 } |
1760 | 1772 |
1761 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, | 1773 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, |
1762 PreloadHeadersSimple) { | 1774 PreloadHeadersSimple) { |
1763 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1775 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1764 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1776 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1765 const char kPage[] = "<title>ERROR</title>Hello world."; | 1777 const char kPage[] = "<title>ERROR</title>Hello world."; |
1766 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1778 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1767 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1779 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1768 RegisterStaticFile(page_url, kPage, "text/html"); | 1780 RegisterStaticFile(page_url, kPage, "text/html"); |
1769 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); | 1781 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); |
1770 | 1782 |
1771 SetupForNavigationPreloadTest(page_url, worker_url); | 1783 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1784 true /* enable_navigation_preload */); |
1772 | 1785 |
1773 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); | 1786 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); |
1774 TitleWatcher title_watcher(shell()->web_contents(), title); | 1787 TitleWatcher title_watcher(shell()->web_contents(), title); |
1775 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); | 1788 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); |
1776 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | 1789 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
1777 NavigateToURL(shell(), page_url); | 1790 NavigateToURL(shell(), page_url); |
1778 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1791 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1779 | 1792 |
1780 // The page request must be sent only once, since the worker responded with | 1793 // The page request must be sent only once, since the worker responded with |
1781 // a generated Response. | 1794 // a generated Response. |
1782 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 1795 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
1783 std::unique_ptr<base::Value> result = | 1796 std::unique_ptr<base::Value> result = |
1784 base::JSONReader::Read(GetTextContent()); | 1797 base::JSONReader::Read(GetTextContent()); |
1785 base::DictionaryValue* dict = nullptr; | 1798 base::DictionaryValue* dict = nullptr; |
1786 ASSERT_TRUE(result->GetAsDictionary(&dict)); | 1799 ASSERT_TRUE(result->GetAsDictionary(&dict)); |
1787 EXPECT_EQ("basic", GetString(*dict, "type")); | 1800 EXPECT_EQ("basic", GetString(*dict, "type")); |
1788 EXPECT_EQ(page_url, GURL(GetString(*dict, "url"))); | 1801 EXPECT_EQ(page_url, GURL(GetString(*dict, "url"))); |
1789 EXPECT_EQ(200, GetInt(*dict, "status")); | 1802 EXPECT_EQ(200, GetInt(*dict, "status")); |
1790 EXPECT_EQ(true, GetBoolean(*dict, "ok")); | 1803 EXPECT_EQ(true, GetBoolean(*dict, "ok")); |
1791 EXPECT_EQ("OK", GetString(*dict, "statusText")); | 1804 EXPECT_EQ("OK", GetString(*dict, "statusText")); |
1792 EXPECT_TRUE(CheckHeader(*dict, "content-type", "text/html")); | 1805 EXPECT_TRUE(CheckHeader(*dict, "content-type", "text/html")); |
1793 EXPECT_TRUE(CheckHeader(*dict, "content-length", | 1806 EXPECT_TRUE(CheckHeader(*dict, "content-length", |
1794 base::IntToString(sizeof(kPage) - 1))); | 1807 base::IntToString(sizeof(kPage) - 1))); |
1795 } | 1808 } |
1796 | 1809 |
| 1810 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NotEnabled) { |
| 1811 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
| 1812 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
| 1813 const char kPage[] = "<title>ERROR</title>Hello world."; |
| 1814 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
| 1815 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
| 1816 RegisterStaticFile(page_url, kPage, "text/html"); |
| 1817 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); |
| 1818 |
| 1819 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1820 false /* enable_navigation_preload */); |
| 1821 |
| 1822 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); |
| 1823 TitleWatcher title_watcher(shell()->web_contents(), title); |
| 1824 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); |
| 1825 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
| 1826 NavigateToURL(shell(), page_url); |
| 1827 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
| 1828 |
| 1829 // The page request must not be sent, since the worker responded with a |
| 1830 // generated Response and the navigation preload isn't enabled. |
| 1831 EXPECT_EQ(0, GetRequestCount(kPageUrl)); |
| 1832 EXPECT_EQ("Resolved with null.", GetTextContent()); |
| 1833 } |
| 1834 |
1797 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, | 1835 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, |
1798 PreloadHeadersCustom) { | 1836 PreloadHeadersCustom) { |
1799 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1837 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1800 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1838 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1801 const char kPageResponse[] = | 1839 const char kPageResponse[] = |
1802 "HTTP/1.1 201 HELLOWORLD\r\n" | 1840 "HTTP/1.1 201 HELLOWORLD\r\n" |
1803 "Connection: close\r\n" | 1841 "Connection: close\r\n" |
1804 "Content-Length: 32\r\n" | 1842 "Content-Length: 32\r\n" |
1805 "Content-Type: text/html\r\n" | 1843 "Content-Type: text/html\r\n" |
1806 "Custom-Header: pen pineapple\r\n" | 1844 "Custom-Header: pen pineapple\r\n" |
1807 "Custom-Header: apple pen\r\n" | 1845 "Custom-Header: apple pen\r\n" |
1808 "Set-Cookie: COOKIE1\r\n" | 1846 "Set-Cookie: COOKIE1\r\n" |
1809 "Set-Cookie2: COOKIE2\r\n" | 1847 "Set-Cookie2: COOKIE2\r\n" |
1810 "\r\n" | 1848 "\r\n" |
1811 "<title>ERROR</title>Hello world."; | 1849 "<title>ERROR</title>Hello world."; |
1812 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1850 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1813 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1851 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1814 RegisterCustomResponse(page_url, kPageResponse); | 1852 RegisterCustomResponse(page_url, kPageResponse); |
1815 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); | 1853 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); |
1816 | 1854 |
1817 SetupForNavigationPreloadTest(page_url, worker_url); | 1855 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1856 true /* enable_navigation_preload */); |
1818 | 1857 |
1819 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); | 1858 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); |
1820 TitleWatcher title_watcher(shell()->web_contents(), title); | 1859 TitleWatcher title_watcher(shell()->web_contents(), title); |
1821 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); | 1860 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); |
1822 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | 1861 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
1823 NavigateToURL(shell(), page_url); | 1862 NavigateToURL(shell(), page_url); |
1824 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1863 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1825 | 1864 |
1826 // The page request must be sent only once, since the worker responded with | 1865 // The page request must be sent only once, since the worker responded with |
1827 // a generated Response. | 1866 // a generated Response. |
(...skipping 27 matching lines...) Expand all Loading... |
1855 "\r\n"; | 1894 "\r\n"; |
1856 const char kRedirectedPage[] = "<title>ERROR</title>Redirected page."; | 1895 const char kRedirectedPage[] = "<title>ERROR</title>Redirected page."; |
1857 const GURL redirecred_page_url = | 1896 const GURL redirecred_page_url = |
1858 embedded_test_server()->GetURL(kRedirectedPageUrl); | 1897 embedded_test_server()->GetURL(kRedirectedPageUrl); |
1859 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1898 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1860 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1899 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1861 RegisterCustomResponse(page_url, kPageResponse); | 1900 RegisterCustomResponse(page_url, kPageResponse); |
1862 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); | 1901 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); |
1863 RegisterStaticFile(redirecred_page_url, kRedirectedPage, "text/html"); | 1902 RegisterStaticFile(redirecred_page_url, kRedirectedPage, "text/html"); |
1864 | 1903 |
1865 SetupForNavigationPreloadTest(page_url, worker_url); | 1904 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1905 true /* enable_navigation_preload */); |
1866 | 1906 |
1867 const base::string16 title = base::ASCIIToUTF16("REJECTED"); | 1907 const base::string16 title = base::ASCIIToUTF16("REJECTED"); |
1868 TitleWatcher title_watcher(shell()->web_contents(), title); | 1908 TitleWatcher title_watcher(shell()->web_contents(), title); |
1869 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | 1909 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); |
1870 NavigateToURL(shell(), page_url); | 1910 NavigateToURL(shell(), page_url); |
1871 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1911 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1872 | 1912 |
1873 // The page request must be sent only once, since the worker responded with | 1913 // The page request must be sent only once, since the worker responded with |
1874 // a generated Response. | 1914 // a generated Response. |
1875 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 1915 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2592 ServiceWorkerV8CacheStrategiesNormalTest, | 2632 ServiceWorkerV8CacheStrategiesNormalTest, |
2593 ::testing::Values(true, false)); | 2633 ::testing::Values(true, false)); |
2594 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, | 2634 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, |
2595 ServiceWorkerV8CacheStrategiesAggressiveTest, | 2635 ServiceWorkerV8CacheStrategiesAggressiveTest, |
2596 ::testing::Values(true, false)); | 2636 ::testing::Values(true, false)); |
2597 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, | 2637 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, |
2598 ServiceWorkerDisableWebSecurityTest, | 2638 ServiceWorkerDisableWebSecurityTest, |
2599 ::testing::Values(true, false)); | 2639 ::testing::Values(true, false)); |
2600 | 2640 |
2601 } // namespace content | 2641 } // namespace content |
OLD | NEW |