| 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 |