Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Side by Side Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 2460223003: Support Service Worker NavigationPreload with PlzNavigate. (Closed)
Patch Set: Keep ResourceMessageFilter in ServiceWorkerProviderHost. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698