| 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 1532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1543 request_log_.push_back(request.relative_url); | 1543 request_log_.push_back(request.relative_url); |
| 1544 } | 1544 } |
| 1545 | 1545 |
| 1546 std::vector<std::string> request_log_; | 1546 std::vector<std::string> request_log_; |
| 1547 }; | 1547 }; |
| 1548 | 1548 |
| 1549 const char ServiceWorkerNavigationPreloadTest::kPreloadResponseTestScript[] = | 1549 const char ServiceWorkerNavigationPreloadTest::kPreloadResponseTestScript[] = |
| 1550 "var preload_resolve;\n" | 1550 "var preload_resolve;\n" |
| 1551 "var preload_promise = new Promise(r => { preload_resolve = r; });\n" | 1551 "var preload_promise = new Promise(r => { preload_resolve = r; });\n" |
| 1552 "self.addEventListener('fetch', event => {\n" | 1552 "self.addEventListener('fetch', event => {\n" |
| 1553 " event.waitUntil(event.navigationPreload.then(\n" | 1553 " event.waitUntil(event.preloadResponse.then(\n" |
| 1554 " r => {\n" | 1554 " r => {\n" |
| 1555 " if (!r) {\n" | 1555 " if (!r) {\n" |
| 1556 " preload_resolve(\n" | 1556 " preload_resolve(\n" |
| 1557 " {result: 'RESOLVED', info: 'Resolved with ' + r + '.'});\n" | 1557 " {result: 'RESOLVED', info: 'Resolved with ' + r + '.'});\n" |
| 1558 " return;\n" | 1558 " return;\n" |
| 1559 " }\n" | 1559 " }\n" |
| 1560 " var info = {};\n" | 1560 " var info = {};\n" |
| 1561 " info.type = r.type;\n" | 1561 " info.type = r.type;\n" |
| 1562 " info.url = r.url;\n" | 1562 " info.url = r.url;\n" |
| 1563 " info.status = r.status;\n" | 1563 " info.status = r.status;\n" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1620 // See: https://github.com/w3c/ServiceWorker/issues/920#issuecomment-251150270 | 1620 // See: https://github.com/w3c/ServiceWorker/issues/920#issuecomment-251150270 |
| 1621 } | 1621 } |
| 1622 | 1622 |
| 1623 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, | 1623 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, |
| 1624 RespondWithNavigationPreload) { | 1624 RespondWithNavigationPreload) { |
| 1625 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1625 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
| 1626 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1626 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
| 1627 const char kPage[] = "<title>PASS</title>Hello world."; | 1627 const char kPage[] = "<title>PASS</title>Hello world."; |
| 1628 const char kScript[] = | 1628 const char kScript[] = |
| 1629 "self.addEventListener('fetch', event => {\n" | 1629 "self.addEventListener('fetch', event => {\n" |
| 1630 " if (!event.navigationPreload) {\n" | 1630 " if (!event.preloadResponse) {\n" |
| 1631 " event.respondWith(\n" | 1631 " event.respondWith(\n" |
| 1632 " new Response('<title>ERROR</title>'," | 1632 " new Response('<title>ERROR</title>'," |
| 1633 " {headers: [['content-type', 'text/html']]}));\n" | 1633 " {headers: [['content-type', 'text/html']]}));\n" |
| 1634 " return;\n" | 1634 " return;\n" |
| 1635 " }\n" | 1635 " }\n" |
| 1636 " event.respondWith(event.navigationPreload);\n" | 1636 " event.respondWith(event.preloadResponse);\n" |
| 1637 " });"; | 1637 " });"; |
| 1638 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1638 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
| 1639 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1639 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
| 1640 RegisterStaticFile(page_url, kPage, "text/html"); | 1640 RegisterStaticFile(page_url, kPage, "text/html"); |
| 1641 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1641 RegisterStaticFile(worker_url, kScript, "text/javascript"); |
| 1642 | 1642 |
| 1643 SetupForNavigationPreloadTest(page_url, worker_url, | 1643 SetupForNavigationPreloadTest(page_url, worker_url, |
| 1644 true /* enable_navigation_preload */); | 1644 true /* enable_navigation_preload */); |
| 1645 | 1645 |
| 1646 const base::string16 title = base::ASCIIToUTF16("PASS"); | 1646 const base::string16 title = base::ASCIIToUTF16("PASS"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1657 // See: https://github.com/w3c/ServiceWorker/issues/920#issuecomment-251150270 | 1657 // See: https://github.com/w3c/ServiceWorker/issues/920#issuecomment-251150270 |
| 1658 } | 1658 } |
| 1659 | 1659 |
| 1660 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, GetResponseText) { | 1660 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, GetResponseText) { |
| 1661 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1661 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
| 1662 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1662 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
| 1663 const char kPage[] = "<title>PASS</title>Hello world."; | 1663 const char kPage[] = "<title>PASS</title>Hello world."; |
| 1664 const char kScript[] = | 1664 const char kScript[] = |
| 1665 "self.addEventListener('fetch', event => {\n" | 1665 "self.addEventListener('fetch', event => {\n" |
| 1666 " event.respondWith(\n" | 1666 " event.respondWith(\n" |
| 1667 " event.navigationPreload\n" | 1667 " event.preloadResponse\n" |
| 1668 " .then(response => response.text())\n" | 1668 " .then(response => response.text())\n" |
| 1669 " .then(text =>\n" | 1669 " .then(text =>\n" |
| 1670 " new Response(\n" | 1670 " new Response(\n" |
| 1671 " text,\n" | 1671 " text,\n" |
| 1672 " {headers: [['content-type', 'text/html']]})));\n" | 1672 " {headers: [['content-type', 'text/html']]})));\n" |
| 1673 " });"; | 1673 " });"; |
| 1674 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1674 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
| 1675 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1675 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
| 1676 RegisterStaticFile(page_url, kPage, "text/html"); | 1676 RegisterStaticFile(page_url, kPage, "text/html"); |
| 1677 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1677 RegisterStaticFile(worker_url, kScript, "text/javascript"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1688 // 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 |
| 1689 // "Hello world". | 1689 // "Hello world". |
| 1690 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 1690 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
| 1691 } | 1691 } |
| 1692 | 1692 |
| 1693 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, | 1693 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, |
| 1694 AbortPreloadRequest) { | 1694 AbortPreloadRequest) { |
| 1695 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1695 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
| 1696 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1696 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
| 1697 const char kPage[] = "<title>ERROR</title>Hello world."; | 1697 const char kPage[] = "<title>ERROR</title>Hello world."; |
| 1698 // In this script, event.navigationPreload is not guarded by event.waitUntil. | 1698 // In this script, event.preloadResponse is not guarded by event.waitUntil. |
| 1699 // So the preload request should be canceled, when the fetch event handler | 1699 // So the preload request should be canceled, when the fetch event handler |
| 1700 // has been executed. | 1700 // has been executed. |
| 1701 const char kScript[] = | 1701 const char kScript[] = |
| 1702 "var preload_resolve;\n" | 1702 "var preload_resolve;\n" |
| 1703 "var preload_promise = new Promise(r => { preload_resolve = r; });\n" | 1703 "var preload_promise = new Promise(r => { preload_resolve = r; });\n" |
| 1704 "self.addEventListener('fetch', event => {\n" | 1704 "self.addEventListener('fetch', event => {\n" |
| 1705 " event.navigationPreload.then(\n" | 1705 " event.preloadResponse.then(\n" |
| 1706 " _ => { preload_resolve({result: 'RESOLVED',\n" | 1706 " _ => { preload_resolve({result: 'RESOLVED',\n" |
| 1707 " info: 'Preload resolved.'}); },\n" | 1707 " info: 'Preload resolved.'}); },\n" |
| 1708 " e => { preload_resolve({result: 'REJECTED',\n" | 1708 " e => { preload_resolve({result: 'REJECTED',\n" |
| 1709 " info: e.toString()}); });\n" | 1709 " info: e.toString()}); });\n" |
| 1710 " event.respondWith(\n" | 1710 " event.respondWith(\n" |
| 1711 " new Response(\n" | 1711 " new Response(\n" |
| 1712 " '<title>WAITING</title><script>\\n' +\n" | 1712 " '<title>WAITING</title><script>\\n' +\n" |
| 1713 " 'var channel = new MessageChannel();\\n' +\n" | 1713 " 'var channel = new MessageChannel();\\n' +\n" |
| 1714 " 'channel.port1.onmessage = e => {\\n' +\n" | 1714 " 'channel.port1.onmessage = e => {\\n' +\n" |
| 1715 " ' var div = document.createElement(\\'div\\');\\n' +\n" | 1715 " ' var div = document.createElement(\\'div\\');\\n' +\n" |
| (...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2632 ServiceWorkerV8CacheStrategiesNormalTest, | 2632 ServiceWorkerV8CacheStrategiesNormalTest, |
| 2633 ::testing::Values(true, false)); | 2633 ::testing::Values(true, false)); |
| 2634 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, | 2634 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, |
| 2635 ServiceWorkerV8CacheStrategiesAggressiveTest, | 2635 ServiceWorkerV8CacheStrategiesAggressiveTest, |
| 2636 ::testing::Values(true, false)); | 2636 ::testing::Values(true, false)); |
| 2637 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, | 2637 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, |
| 2638 ServiceWorkerDisableWebSecurityTest, | 2638 ServiceWorkerDisableWebSecurityTest, |
| 2639 ::testing::Values(true, false)); | 2639 ::testing::Values(true, false)); |
| 2640 | 2640 |
| 2641 } // namespace content | 2641 } // namespace content |
| OLD | NEW |