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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
58 #include "content/public/common/content_switches.h" | 58 #include "content/public/common/content_switches.h" |
59 #include "content/public/common/referrer.h" | 59 #include "content/public/common/referrer.h" |
60 #include "content/public/common/resource_type.h" | 60 #include "content/public/common/resource_type.h" |
61 #include "content/public/common/web_preferences.h" | 61 #include "content/public/common/web_preferences.h" |
62 #include "content/public/test/browser_test_utils.h" | 62 #include "content/public/test/browser_test_utils.h" |
63 #include "content/public/test/content_browser_test.h" | 63 #include "content/public/test/content_browser_test.h" |
64 #include "content/public/test/content_browser_test_utils.h" | 64 #include "content/public/test/content_browser_test_utils.h" |
65 #include "content/shell/browser/shell.h" | 65 #include "content/shell/browser/shell.h" |
66 #include "content/shell/browser/shell_content_browser_client.h" | 66 #include "content/shell/browser/shell_content_browser_client.h" |
67 #include "content/test/test_content_browser_client.h" | 67 #include "content/test/test_content_browser_client.h" |
68 #include "net/dns/mock_host_resolver.h" | |
68 #include "net/log/net_log_with_source.h" | 69 #include "net/log/net_log_with_source.h" |
69 #include "net/test/embedded_test_server/embedded_test_server.h" | 70 #include "net/test/embedded_test_server/embedded_test_server.h" |
70 #include "net/test/embedded_test_server/http_request.h" | 71 #include "net/test/embedded_test_server/http_request.h" |
71 #include "net/test/embedded_test_server/http_response.h" | 72 #include "net/test/embedded_test_server/http_response.h" |
72 #include "net/url_request/url_request_filter.h" | 73 #include "net/url_request/url_request_filter.h" |
73 #include "net/url_request/url_request_interceptor.h" | 74 #include "net/url_request/url_request_interceptor.h" |
74 #include "net/url_request/url_request_test_job.h" | 75 #include "net/url_request/url_request_test_job.h" |
75 #include "storage/browser/blob/blob_data_handle.h" | 76 #include "storage/browser/blob/blob_data_handle.h" |
76 #include "storage/browser/blob/blob_data_snapshot.h" | 77 #include "storage/browser/blob/blob_data_snapshot.h" |
77 #include "storage/browser/blob/blob_reader.h" | 78 #include "storage/browser/blob/blob_reader.h" |
(...skipping 1329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1407 base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure())); | 1408 base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure())); |
1408 run_loop.Run(); | 1409 run_loop.Run(); |
1409 } | 1410 } |
1410 | 1411 |
1411 class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest { | 1412 class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest { |
1412 public: | 1413 public: |
1413 using self = ServiceWorkerNavigationPreloadTest; | 1414 using self = ServiceWorkerNavigationPreloadTest; |
1414 | 1415 |
1415 ~ServiceWorkerNavigationPreloadTest() override {} | 1416 ~ServiceWorkerNavigationPreloadTest() override {} |
1416 | 1417 |
1418 void SetUpOnMainThread() override { | |
1419 host_resolver()->AddRule("*", "127.0.0.1"); | |
1420 ServiceWorkerBrowserTest::SetUpOnMainThread(); | |
1421 } | |
1422 | |
1417 void SetUpCommandLine(base::CommandLine* command_line) override { | 1423 void SetUpCommandLine(base::CommandLine* command_line) override { |
1418 command_line->AppendSwitchASCII( | 1424 command_line->AppendSwitchASCII( |
1419 switches::kEnableFeatures, | 1425 switches::kEnableFeatures, |
1420 features::kServiceWorkerNavigationPreload.name); | 1426 features::kServiceWorkerNavigationPreload.name); |
1421 } | 1427 } |
1422 | 1428 |
1423 protected: | 1429 protected: |
1424 void SetupForNavigationPreloadTest(const GURL& scope, | 1430 void SetupForNavigationPreloadTest(const GURL& scope, |
1425 const GURL& worker_url, | 1431 const GURL& worker_url, |
1426 bool enable_navigation_preload) { | 1432 bool enable_navigation_preload) { |
1427 scoped_refptr<WorkerActivatedObserver> observer = | 1433 scoped_refptr<WorkerActivatedObserver> observer = |
1428 new WorkerActivatedObserver(wrapper()); | 1434 new WorkerActivatedObserver(wrapper()); |
1429 observer->Init(); | 1435 observer->Init(); |
1430 public_context()->RegisterServiceWorker( | 1436 public_context()->RegisterServiceWorker( |
1431 scope, worker_url, | 1437 scope, worker_url, |
1432 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); | 1438 base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing))); |
1433 observer->Wait(); | 1439 observer->Wait(); |
1434 if (enable_navigation_preload) { | 1440 if (enable_navigation_preload) { |
1435 RunOnIOThread(base::Bind(&self::EnableNavigationPreloadOnIO, | 1441 RunOnIOThread(base::Bind(&self::EnableNavigationPreloadOnIO, |
1436 base::Unretained(this), scope)); | 1442 base::Unretained(this), scope)); |
1437 } | 1443 } |
1438 | 1444 |
1439 embedded_test_server()->RegisterRequestMonitor( | 1445 embedded_test_server()->RegisterRequestMonitor( |
1440 base::Bind(&self::MonitorRequestHandler, base::Unretained(this))); | 1446 base::Bind(&self::MonitorRequestHandler, base::Unretained(this))); |
1441 } | 1447 } |
1442 | 1448 |
1443 void RegisterStaticFile(const GURL& url, | 1449 void RegisterStaticFile(const std::string& relative_url, |
1444 const std::string& content, | 1450 const std::string& content, |
1445 const std::string& content_type) { | 1451 const std::string& content_type) { |
1446 embedded_test_server()->RegisterRequestHandler( | 1452 embedded_test_server()->RegisterRequestHandler( |
1447 base::Bind(&self::StaticRequestHandler, base::Unretained(this), url, | 1453 base::Bind(&self::StaticRequestHandler, base::Unretained(this), |
1448 content, content_type)); | 1454 relative_url, content, content_type)); |
1449 } | 1455 } |
1450 | 1456 |
1451 void RegisterCustomResponse(const GURL& url, const std::string& response) { | 1457 void RegisterCustomResponse(const std::string& relative_url, |
1452 embedded_test_server()->RegisterRequestHandler(base::Bind( | 1458 const std::string& response) { |
1453 &self::CustomRequestHandler, base::Unretained(this), url, response)); | 1459 embedded_test_server()->RegisterRequestHandler( |
1460 base::Bind(&self::CustomRequestHandler, base::Unretained(this), | |
1461 relative_url, response)); | |
1462 } | |
1463 | |
1464 void RegisterKeepSearchRedirect(const std::string& relative_url, | |
1465 const std::string& redirect_location) { | |
1466 embedded_test_server()->RegisterRequestHandler( | |
1467 base::Bind(&self::KeepSearchRedirectHandler, base::Unretained(this), | |
1468 relative_url, redirect_location)); | |
1454 } | 1469 } |
1455 | 1470 |
1456 int GetRequestCount(const std::string& relative_url) const { | 1471 int GetRequestCount(const std::string& relative_url) const { |
1457 int count = 0; | 1472 int count = 0; |
1458 for (const auto& request : request_log_) { | 1473 for (const auto& request : request_log_) { |
1459 if (request == relative_url) | 1474 if (request == relative_url) |
1460 ++count; | 1475 ++count; |
1461 } | 1476 } |
1462 return count; | 1477 return count; |
1463 } | 1478 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1503 const base::Closure& continuation, | 1518 const base::Closure& continuation, |
1504 ServiceWorkerStatusCode status, | 1519 ServiceWorkerStatusCode status, |
1505 scoped_refptr<ServiceWorkerRegistration> registration) { | 1520 scoped_refptr<ServiceWorkerRegistration> registration) { |
1506 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1521 EXPECT_EQ(SERVICE_WORKER_OK, status); |
1507 ASSERT_TRUE(registration->active_version()); | 1522 ASSERT_TRUE(registration->active_version()); |
1508 registration->active_version()->set_navigation_preload_enabled(true); | 1523 registration->active_version()->set_navigation_preload_enabled(true); |
1509 continuation.Run(); | 1524 continuation.Run(); |
1510 } | 1525 } |
1511 | 1526 |
1512 std::unique_ptr<net::test_server::HttpResponse> StaticRequestHandler( | 1527 std::unique_ptr<net::test_server::HttpResponse> StaticRequestHandler( |
1513 const GURL& url, | 1528 const std::string& relative_url, |
1514 const std::string& content, | 1529 const std::string& content, |
1515 const std::string& content_type, | 1530 const std::string& content_type, |
1516 const net::test_server::HttpRequest& request) const { | 1531 const net::test_server::HttpRequest& request) const { |
1517 const GURL absolute_url = | 1532 const size_t query_position = request.relative_url.find('?'); |
1518 embedded_test_server()->GetURL(request.relative_url); | 1533 if (request.relative_url.substr(0, query_position) != relative_url) |
1519 if (absolute_url != url) | |
1520 return std::unique_ptr<net::test_server::HttpResponse>(); | 1534 return std::unique_ptr<net::test_server::HttpResponse>(); |
1521 | |
1522 std::unique_ptr<net::test_server::BasicHttpResponse> http_response( | 1535 std::unique_ptr<net::test_server::BasicHttpResponse> http_response( |
1523 base::MakeUnique<net::test_server::BasicHttpResponse>()); | 1536 base::MakeUnique<net::test_server::BasicHttpResponse>()); |
1524 http_response->set_code(net::HTTP_OK); | 1537 http_response->set_code(net::HTTP_OK); |
1525 http_response->set_content(content); | 1538 http_response->set_content(content); |
1526 http_response->set_content_type(content_type); | 1539 http_response->set_content_type(content_type); |
1527 return std::move(http_response); | 1540 return std::move(http_response); |
1528 } | 1541 } |
1529 | 1542 |
1530 std::unique_ptr<net::test_server::HttpResponse> CustomRequestHandler( | 1543 std::unique_ptr<net::test_server::HttpResponse> CustomRequestHandler( |
1531 const GURL& url, | 1544 const std::string& relative_url, |
1532 const std::string& response, | 1545 const std::string& response, |
1533 const net::test_server::HttpRequest& request) const { | 1546 const net::test_server::HttpRequest& request) const { |
1534 const GURL absolute_url = | 1547 const size_t query_position = request.relative_url.find('?'); |
1535 embedded_test_server()->GetURL(request.relative_url); | 1548 if (request.relative_url.substr(0, query_position) != relative_url) |
1536 if (absolute_url != url) | |
1537 return std::unique_ptr<net::test_server::HttpResponse>(); | 1549 return std::unique_ptr<net::test_server::HttpResponse>(); |
1550 return base::MakeUnique<CustomResponse>(response); | |
1551 } | |
1538 | 1552 |
1539 return base::MakeUnique<CustomResponse>(response); | 1553 std::unique_ptr<net::test_server::HttpResponse> KeepSearchRedirectHandler( |
1554 const std::string& relative_url, | |
1555 const std::string& redirect_location, | |
1556 const net::test_server::HttpRequest& request) const { | |
1557 const size_t query_position = request.relative_url.find('?'); | |
1558 if (request.relative_url.substr(0, query_position) != relative_url) | |
1559 return std::unique_ptr<net::test_server::HttpResponse>(); | |
1560 std::unique_ptr<net::test_server::BasicHttpResponse> response( | |
1561 new net::test_server::BasicHttpResponse()); | |
1562 response->set_code(net::HTTP_PERMANENT_REDIRECT); | |
1563 response->AddCustomHeader( | |
1564 "Location", | |
1565 query_position == std::string::npos | |
1566 ? redirect_location | |
1567 : redirect_location + request.relative_url.substr(query_position)); | |
1568 return std::move(response); | |
1540 } | 1569 } |
1541 | 1570 |
1542 void MonitorRequestHandler(const net::test_server::HttpRequest& request) { | 1571 void MonitorRequestHandler(const net::test_server::HttpRequest& request) { |
1543 request_log_.push_back(request.relative_url); | 1572 request_log_.push_back(request.relative_url); |
1544 } | 1573 } |
1545 | 1574 |
1546 std::vector<std::string> request_log_; | 1575 std::vector<std::string> request_log_; |
1547 }; | 1576 }; |
1548 | 1577 |
1549 const char ServiceWorkerNavigationPreloadTest::kPreloadResponseTestScript[] = | 1578 const char ServiceWorkerNavigationPreloadTest::kPreloadResponseTestScript[] = |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1594 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NetworkFallback) { | 1623 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NetworkFallback) { |
1595 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1624 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1596 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1625 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1597 const char kPage[] = "<title>PASS</title>Hello world."; | 1626 const char kPage[] = "<title>PASS</title>Hello world."; |
1598 const char kScript[] = | 1627 const char kScript[] = |
1599 "self.addEventListener('fetch', event => {\n" | 1628 "self.addEventListener('fetch', event => {\n" |
1600 " // Do nothing.\n" | 1629 " // Do nothing.\n" |
1601 " });"; | 1630 " });"; |
1602 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1631 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1603 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1632 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1604 RegisterStaticFile(page_url, kPage, "text/html"); | 1633 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1605 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1634 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); |
1606 | 1635 |
1607 SetupForNavigationPreloadTest(page_url, worker_url, | 1636 SetupForNavigationPreloadTest(page_url, worker_url, |
1608 true /* enable_navigation_preload */); | 1637 true /* enable_navigation_preload */); |
1609 | 1638 |
1610 const base::string16 title = base::ASCIIToUTF16("PASS"); | 1639 const base::string16 title = base::ASCIIToUTF16("PASS"); |
1611 TitleWatcher title_watcher(shell()->web_contents(), title); | 1640 TitleWatcher title_watcher(shell()->web_contents(), title); |
1612 NavigateToURL(shell(), page_url); | 1641 NavigateToURL(shell(), page_url); |
1613 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1642 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1614 EXPECT_EQ("Hello world.", GetTextContent()); | 1643 EXPECT_EQ("Hello world.", GetTextContent()); |
1615 | 1644 |
(...skipping 14 matching lines...) Expand all Loading... | |
1630 " if (!event.navigationPreload) {\n" | 1659 " if (!event.navigationPreload) {\n" |
1631 " event.respondWith(\n" | 1660 " event.respondWith(\n" |
1632 " new Response('<title>ERROR</title>'," | 1661 " new Response('<title>ERROR</title>'," |
1633 " {headers: [['content-type', 'text/html']]}));\n" | 1662 " {headers: [['content-type', 'text/html']]}));\n" |
1634 " return;\n" | 1663 " return;\n" |
1635 " }\n" | 1664 " }\n" |
1636 " event.respondWith(event.navigationPreload);\n" | 1665 " event.respondWith(event.navigationPreload);\n" |
1637 " });"; | 1666 " });"; |
1638 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1667 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1639 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1668 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1640 RegisterStaticFile(page_url, kPage, "text/html"); | 1669 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1641 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1670 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); |
1642 | 1671 |
1643 SetupForNavigationPreloadTest(page_url, worker_url, | 1672 SetupForNavigationPreloadTest(page_url, worker_url, |
1644 true /* enable_navigation_preload */); | 1673 true /* enable_navigation_preload */); |
1645 | 1674 |
1646 const base::string16 title = base::ASCIIToUTF16("PASS"); | 1675 const base::string16 title = base::ASCIIToUTF16("PASS"); |
1647 TitleWatcher title_watcher(shell()->web_contents(), title); | 1676 TitleWatcher title_watcher(shell()->web_contents(), title); |
1648 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | 1677 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
1649 NavigateToURL(shell(), page_url); | 1678 NavigateToURL(shell(), page_url); |
1650 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1679 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1651 EXPECT_EQ("Hello world.", GetTextContent()); | 1680 EXPECT_EQ("Hello world.", GetTextContent()); |
(...skipping 14 matching lines...) Expand all Loading... | |
1666 " event.respondWith(\n" | 1695 " event.respondWith(\n" |
1667 " event.navigationPreload\n" | 1696 " event.navigationPreload\n" |
1668 " .then(response => response.text())\n" | 1697 " .then(response => response.text())\n" |
1669 " .then(text =>\n" | 1698 " .then(text =>\n" |
1670 " new Response(\n" | 1699 " new Response(\n" |
1671 " text,\n" | 1700 " text,\n" |
1672 " {headers: [['content-type', 'text/html']]})));\n" | 1701 " {headers: [['content-type', 'text/html']]})));\n" |
1673 " });"; | 1702 " });"; |
1674 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1703 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1675 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1704 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1676 RegisterStaticFile(page_url, kPage, "text/html"); | 1705 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1677 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1706 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); |
1678 | 1707 |
1679 SetupForNavigationPreloadTest(page_url, worker_url, | 1708 SetupForNavigationPreloadTest(page_url, worker_url, |
1680 true /* enable_navigation_preload */); | 1709 true /* enable_navigation_preload */); |
1681 | 1710 |
1682 const base::string16 title = base::ASCIIToUTF16("PASS"); | 1711 const base::string16 title = base::ASCIIToUTF16("PASS"); |
1683 TitleWatcher title_watcher(shell()->web_contents(), title); | 1712 TitleWatcher title_watcher(shell()->web_contents(), title); |
1684 NavigateToURL(shell(), page_url); | 1713 NavigateToURL(shell(), page_url); |
1685 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1714 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1686 EXPECT_EQ("Hello world.", GetTextContent()); | 1715 EXPECT_EQ("Hello world.", GetTextContent()); |
1687 | 1716 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1723 " '</script>'," | 1752 " '</script>'," |
1724 " {headers: [['content-type', 'text/html']]}));\n" | 1753 " {headers: [['content-type', 'text/html']]}));\n" |
1725 " });\n" | 1754 " });\n" |
1726 "self.addEventListener('message', event => {\n" | 1755 "self.addEventListener('message', event => {\n" |
1727 " event.waitUntil(\n" | 1756 " event.waitUntil(\n" |
1728 " preload_promise.then(\n" | 1757 " preload_promise.then(\n" |
1729 " result => event.ports[0].postMessage(result)));\n" | 1758 " result => event.ports[0].postMessage(result)));\n" |
1730 " });"; | 1759 " });"; |
1731 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1760 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1732 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1761 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1733 RegisterStaticFile(page_url, kPage, "text/html"); | 1762 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1734 RegisterStaticFile(worker_url, kScript, "text/javascript"); | 1763 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); |
1735 | 1764 |
1736 SetupForNavigationPreloadTest(page_url, worker_url, | 1765 SetupForNavigationPreloadTest(page_url, worker_url, |
1737 true /* enable_navigation_preload */); | 1766 true /* enable_navigation_preload */); |
1738 | 1767 |
1739 const base::string16 title = base::ASCIIToUTF16("REJECTED"); | 1768 const base::string16 title = base::ASCIIToUTF16("REJECTED"); |
1740 TitleWatcher title_watcher(shell()->web_contents(), title); | 1769 TitleWatcher title_watcher(shell()->web_contents(), title); |
1741 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | 1770 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); |
1742 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | 1771 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
1743 NavigateToURL(shell(), page_url); | 1772 NavigateToURL(shell(), page_url); |
1744 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1773 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1745 | 1774 |
1746 EXPECT_EQ( | 1775 EXPECT_EQ( |
1747 "AbortError: Service Worker navigation preload aborted. Need to guard " | 1776 "AbortError: Service Worker navigation preload aborted. Need to guard " |
1748 "with respondWith or waitUntil.", | 1777 "with respondWith or waitUntil.", |
1749 GetTextContent()); | 1778 GetTextContent()); |
1750 } | 1779 } |
1751 | 1780 |
1752 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NetworkError) { | 1781 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NetworkError) { |
1753 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1782 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1754 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1783 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1755 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1784 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1756 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1785 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1757 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); | 1786 RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript"); |
1758 | 1787 |
1759 SetupForNavigationPreloadTest(page_url, worker_url, | 1788 SetupForNavigationPreloadTest(page_url, worker_url, |
1760 true /* enable_navigation_preload */); | 1789 true /* enable_navigation_preload */); |
1761 | 1790 |
1762 EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete()); | 1791 EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete()); |
1763 | 1792 |
1764 const base::string16 title = base::ASCIIToUTF16("REJECTED"); | 1793 const base::string16 title = base::ASCIIToUTF16("REJECTED"); |
1765 TitleWatcher title_watcher(shell()->web_contents(), title); | 1794 TitleWatcher title_watcher(shell()->web_contents(), title); |
1766 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | 1795 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); |
1767 NavigateToURL(shell(), page_url); | 1796 NavigateToURL(shell(), page_url); |
1768 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1797 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1769 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", | 1798 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", |
1770 GetTextContent()); | 1799 GetTextContent()); |
1771 } | 1800 } |
1772 | 1801 |
1773 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, | 1802 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, |
1774 PreloadHeadersSimple) { | 1803 PreloadHeadersSimple) { |
1775 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1804 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1776 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1805 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1777 const char kPage[] = "<title>ERROR</title>Hello world."; | 1806 const char kPage[] = "<title>ERROR</title>Hello world."; |
1778 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1807 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1779 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1808 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1780 RegisterStaticFile(page_url, kPage, "text/html"); | 1809 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1781 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); | 1810 RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript"); |
1782 | 1811 |
1783 SetupForNavigationPreloadTest(page_url, worker_url, | 1812 SetupForNavigationPreloadTest(page_url, worker_url, |
1784 true /* enable_navigation_preload */); | 1813 true /* enable_navigation_preload */); |
1785 | 1814 |
1786 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); | 1815 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); |
1787 TitleWatcher title_watcher(shell()->web_contents(), title); | 1816 TitleWatcher title_watcher(shell()->web_contents(), title); |
1788 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); | 1817 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); |
1789 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | 1818 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
1790 NavigateToURL(shell(), page_url); | 1819 NavigateToURL(shell(), page_url); |
1791 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1820 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
(...skipping 14 matching lines...) Expand all Loading... | |
1806 EXPECT_TRUE(CheckHeader(*dict, "content-length", | 1835 EXPECT_TRUE(CheckHeader(*dict, "content-length", |
1807 base::IntToString(sizeof(kPage) - 1))); | 1836 base::IntToString(sizeof(kPage) - 1))); |
1808 } | 1837 } |
1809 | 1838 |
1810 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NotEnabled) { | 1839 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NotEnabled) { |
1811 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1840 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1812 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1841 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1813 const char kPage[] = "<title>ERROR</title>Hello world."; | 1842 const char kPage[] = "<title>ERROR</title>Hello world."; |
1814 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1843 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1815 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1844 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1816 RegisterStaticFile(page_url, kPage, "text/html"); | 1845 RegisterStaticFile(kPageUrl, kPage, "text/html"); |
1817 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); | 1846 RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript"); |
1818 | 1847 |
1819 SetupForNavigationPreloadTest(page_url, worker_url, | 1848 SetupForNavigationPreloadTest(page_url, worker_url, |
1820 false /* enable_navigation_preload */); | 1849 false /* enable_navigation_preload */); |
1821 | 1850 |
1822 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); | 1851 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); |
1823 TitleWatcher title_watcher(shell()->web_contents(), title); | 1852 TitleWatcher title_watcher(shell()->web_contents(), title); |
1824 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); | 1853 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); |
1825 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | 1854 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
1826 NavigateToURL(shell(), page_url); | 1855 NavigateToURL(shell(), page_url); |
1827 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1856 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
(...skipping 14 matching lines...) Expand all Loading... | |
1842 "Content-Length: 32\r\n" | 1871 "Content-Length: 32\r\n" |
1843 "Content-Type: text/html\r\n" | 1872 "Content-Type: text/html\r\n" |
1844 "Custom-Header: pen pineapple\r\n" | 1873 "Custom-Header: pen pineapple\r\n" |
1845 "Custom-Header: apple pen\r\n" | 1874 "Custom-Header: apple pen\r\n" |
1846 "Set-Cookie: COOKIE1\r\n" | 1875 "Set-Cookie: COOKIE1\r\n" |
1847 "Set-Cookie2: COOKIE2\r\n" | 1876 "Set-Cookie2: COOKIE2\r\n" |
1848 "\r\n" | 1877 "\r\n" |
1849 "<title>ERROR</title>Hello world."; | 1878 "<title>ERROR</title>Hello world."; |
1850 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1879 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1851 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1880 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1852 RegisterCustomResponse(page_url, kPageResponse); | 1881 RegisterCustomResponse(kPageUrl, kPageResponse); |
1853 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); | 1882 RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript"); |
1854 | 1883 |
1855 SetupForNavigationPreloadTest(page_url, worker_url, | 1884 SetupForNavigationPreloadTest(page_url, worker_url, |
1856 true /* enable_navigation_preload */); | 1885 true /* enable_navigation_preload */); |
1857 | 1886 |
1858 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); | 1887 const base::string16 title = base::ASCIIToUTF16("RESOLVED"); |
1859 TitleWatcher title_watcher(shell()->web_contents(), title); | 1888 TitleWatcher title_watcher(shell()->web_contents(), title); |
1860 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); | 1889 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("REJECTED")); |
1861 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | 1890 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); |
1862 NavigateToURL(shell(), page_url); | 1891 NavigateToURL(shell(), page_url); |
1863 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1892 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
(...skipping 26 matching lines...) Expand all Loading... | |
1890 const char kPageResponse[] = | 1919 const char kPageResponse[] = |
1891 "HTTP/1.1 302 Found\r\n" | 1920 "HTTP/1.1 302 Found\r\n" |
1892 "Connection: close\r\n" | 1921 "Connection: close\r\n" |
1893 "Location: /service_worker/navigation_preload_redirected.html\r\n" | 1922 "Location: /service_worker/navigation_preload_redirected.html\r\n" |
1894 "\r\n"; | 1923 "\r\n"; |
1895 const char kRedirectedPage[] = "<title>ERROR</title>Redirected page."; | 1924 const char kRedirectedPage[] = "<title>ERROR</title>Redirected page."; |
1896 const GURL redirecred_page_url = | 1925 const GURL redirecred_page_url = |
1897 embedded_test_server()->GetURL(kRedirectedPageUrl); | 1926 embedded_test_server()->GetURL(kRedirectedPageUrl); |
1898 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1927 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1899 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1928 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1900 RegisterCustomResponse(page_url, kPageResponse); | 1929 RegisterCustomResponse(kPageUrl, kPageResponse); |
1901 RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript"); | 1930 RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript"); |
1902 RegisterStaticFile(redirecred_page_url, kRedirectedPage, "text/html"); | 1931 RegisterStaticFile(kRedirectedPageUrl, kRedirectedPage, "text/html"); |
1903 | 1932 |
1904 SetupForNavigationPreloadTest(page_url, worker_url, | 1933 SetupForNavigationPreloadTest(page_url, worker_url, |
1905 true /* enable_navigation_preload */); | 1934 true /* enable_navigation_preload */); |
1906 | 1935 |
1907 const base::string16 title = base::ASCIIToUTF16("REJECTED"); | 1936 const base::string16 title = base::ASCIIToUTF16("REJECTED"); |
1908 TitleWatcher title_watcher(shell()->web_contents(), title); | 1937 TitleWatcher title_watcher(shell()->web_contents(), title); |
1909 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | 1938 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); |
1910 NavigateToURL(shell(), page_url); | 1939 NavigateToURL(shell(), page_url); |
1911 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1940 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1912 | 1941 |
1913 // The page request must be sent only once, since the worker responded with | 1942 // The page request must be sent only once, since the worker responded with |
1914 // a generated Response. | 1943 // a generated Response. |
1915 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 1944 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
1916 // The redirected request must not be sent. | 1945 // The redirected request must not be sent. |
1917 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl)); | 1946 EXPECT_EQ(0, GetRequestCount(kRedirectedPageUrl)); |
1918 // TODO(horo): When MojoAsyncResourceHandler will support redirection, we | 1947 // TODO(horo): When MojoAsyncResourceHandler will support redirection, we |
1919 // shold provide more specific error message. | 1948 // shold provide more specific error message. |
1920 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", | 1949 EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", |
1921 GetTextContent()); | 1950 GetTextContent()); |
1922 } | 1951 } |
1923 | 1952 |
falken
2016/11/02 14:15:29
This seems sufficiently complex that some comments
horo
2016/11/03 02:30:43
Done.
| |
1953 IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, | |
1954 RedirectAndRespondWithNavigationPreload) { | |
1955 const std::string kPageUrl = "/service_worker/navigation_preload.html"; | |
1956 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | |
1957 const char kPage[] = | |
1958 "<title></title>\n" | |
1959 "<script>document.title = document.location.search;</script>"; | |
1960 const char kScript[] = | |
1961 "self.addEventListener('fetch', event => {\n" | |
1962 " if (event.request.url.indexOf('navigation_preload.html') == -1)\n" | |
1963 " return; // For in scope redirection.\n" | |
1964 " event.respondWith(event.navigationPreload);\n" | |
1965 " });"; | |
1966 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | |
1967 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | |
1968 RegisterStaticFile(kPageUrl, kPage, "text/html"); | |
1969 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); | |
1970 | |
1971 const char kRedirectPageUrl[] = "/redirect"; | |
1972 const char kInScopeRedirectPageUrl[] = "/service_worker/redirect"; | |
falken
2016/11/02 14:15:29
// Register redirects to the target URL. The servi
horo
2016/11/03 02:30:43
Done.
| |
1973 RegisterKeepSearchRedirect(kRedirectPageUrl, page_url.spec()); | |
1974 RegisterKeepSearchRedirect(kInScopeRedirectPageUrl, page_url.spec()); | |
1975 | |
1976 SetupForNavigationPreloadTest( | |
1977 embedded_test_server()->GetURL("/service_worker/"), worker_url, | |
1978 true /* enable_navigation_preload */); | |
1979 | |
1980 const GURL redirect_page_url = | |
1981 embedded_test_server()->GetURL(kRedirectPageUrl).Resolve("?1"); | |
1982 const GURL in_scope_redirect_page_url = | |
1983 embedded_test_server()->GetURL(kInScopeRedirectPageUrl).Resolve("?2"); | |
1984 const GURL cross_origin_redirect_page_url = | |
1985 embedded_test_server()->GetURL("a.com", kRedirectPageUrl).Resolve("?3"); | |
1986 | |
falken
2016/11/02 14:15:28
// Navigate to a same-origin, out of scope URL tha
horo
2016/11/03 02:30:43
Done.
| |
1987 TitleWatcher title_watcher1(shell()->web_contents(), | |
1988 base::ASCIIToUTF16("?1")); | |
1989 NavigateToURL(shell(), redirect_page_url); | |
1990 EXPECT_EQ(1, GetRequestCount(kPageUrl + "?1")); | |
1991 | |
falken
2016/11/02 14:15:28
// Navigate to a same-origin, in-scope URL that re
horo
2016/11/03 02:30:43
Done.
| |
1992 TitleWatcher title_watcher2(shell()->web_contents(), | |
1993 base::ASCIIToUTF16("?2")); | |
1994 NavigateToURL(shell(), in_scope_redirect_page_url); | |
1995 EXPECT_EQ(1, GetRequestCount(kPageUrl + "?2")); | |
1996 | |
falken
2016/11/02 14:15:29
// Navigate to a cross-origin URL that redirects t
horo
2016/11/03 02:30:43
Done.
| |
1997 TitleWatcher title_watcher3(shell()->web_contents(), | |
1998 base::ASCIIToUTF16("?3")); | |
1999 NavigateToURL(shell(), cross_origin_redirect_page_url); | |
2000 EXPECT_EQ(1, GetRequestCount(kPageUrl + "?3")); | |
2001 } | |
2002 | |
1924 // Flaky on Win/Mac: http://crbug.com/533631 | 2003 // Flaky on Win/Mac: http://crbug.com/533631 |
1925 #if defined(OS_WIN) || defined(OS_MACOSX) | 2004 #if defined(OS_WIN) || defined(OS_MACOSX) |
1926 #define MAYBE_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure DISABLED_ResponseFr omHTTPSServiceWorkerIsMarkedAsSecure | 2005 #define MAYBE_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure DISABLED_ResponseFr omHTTPSServiceWorkerIsMarkedAsSecure |
1927 #else | 2006 #else |
1928 #define MAYBE_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure ResponseFromHTTPSSe rviceWorkerIsMarkedAsSecure | 2007 #define MAYBE_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure ResponseFromHTTPSSe rviceWorkerIsMarkedAsSecure |
1929 #endif | 2008 #endif |
1930 IN_PROC_BROWSER_TEST_P(ServiceWorkerBrowserTest, | 2009 IN_PROC_BROWSER_TEST_P(ServiceWorkerBrowserTest, |
1931 MAYBE_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure) { | 2010 MAYBE_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure) { |
1932 const char kPageUrl[] = "/service_worker/fetch_event_blob.html"; | 2011 const char kPageUrl[] = "/service_worker/fetch_event_blob.html"; |
1933 const char kWorkerUrl[] = "/service_worker/fetch_event_blob.js"; | 2012 const char kWorkerUrl[] = "/service_worker/fetch_event_blob.js"; |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2632 ServiceWorkerV8CacheStrategiesNormalTest, | 2711 ServiceWorkerV8CacheStrategiesNormalTest, |
2633 ::testing::Values(true, false)); | 2712 ::testing::Values(true, false)); |
2634 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, | 2713 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, |
2635 ServiceWorkerV8CacheStrategiesAggressiveTest, | 2714 ServiceWorkerV8CacheStrategiesAggressiveTest, |
2636 ::testing::Values(true, false)); | 2715 ::testing::Values(true, false)); |
2637 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, | 2716 INSTANTIATE_TEST_CASE_P(ServiceWorkerBrowserTest, |
2638 ServiceWorkerDisableWebSecurityTest, | 2717 ServiceWorkerDisableWebSecurityTest, |
2639 ::testing::Values(true, false)); | 2718 ::testing::Values(true, false)); |
2640 | 2719 |
2641 } // namespace content | 2720 } // namespace content |
OLD | NEW |