Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 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 |