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

Unified Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 2467793002: use scoped_refptr
Patch Set: add test 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_browsertest.cc
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 822d03afcfe4d520a582fa9aa88c5194b7cecb9b..99a1e56ea06f4c11ce7da82f50ebc45311ff403e 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -65,6 +65,7 @@
#include "content/shell/browser/shell.h"
#include "content/shell/browser/shell_content_browser_client.h"
#include "content/test/test_content_browser_client.h"
+#include "net/dns/mock_host_resolver.h"
#include "net/log/net_log_with_source.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
@@ -1414,6 +1415,11 @@ class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest {
~ServiceWorkerNavigationPreloadTest() override {}
+ void SetUpOnMainThread() override {
+ host_resolver()->AddRule("*", "127.0.0.1");
+ ServiceWorkerBrowserTest::SetUpOnMainThread();
+ }
+
void SetUpCommandLine(base::CommandLine* command_line) override {
command_line->AppendSwitchASCII(
switches::kEnableFeatures,
@@ -1440,17 +1446,26 @@ class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest {
base::Bind(&self::MonitorRequestHandler, base::Unretained(this)));
}
- void RegisterStaticFile(const GURL& url,
+ void RegisterStaticFile(const std::string& relative_url,
const std::string& content,
const std::string& content_type) {
embedded_test_server()->RegisterRequestHandler(
- base::Bind(&self::StaticRequestHandler, base::Unretained(this), url,
- content, content_type));
+ base::Bind(&self::StaticRequestHandler, base::Unretained(this),
+ relative_url, content, content_type));
+ }
+
+ void RegisterCustomResponse(const std::string& relative_url,
+ const std::string& response) {
+ embedded_test_server()->RegisterRequestHandler(
+ base::Bind(&self::CustomRequestHandler, base::Unretained(this),
+ relative_url, response));
}
- void RegisterCustomResponse(const GURL& url, const std::string& response) {
- embedded_test_server()->RegisterRequestHandler(base::Bind(
- &self::CustomRequestHandler, base::Unretained(this), url, response));
+ void RegisterKeepSearchRedirect(const std::string& relative_url,
+ const std::string& redirect_location) {
+ embedded_test_server()->RegisterRequestHandler(
+ base::Bind(&self::KeepSearchRedirectHandler, base::Unretained(this),
+ relative_url, redirect_location));
}
int GetRequestCount(const std::string& relative_url) const {
@@ -1510,15 +1525,13 @@ class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest {
}
std::unique_ptr<net::test_server::HttpResponse> StaticRequestHandler(
- const GURL& url,
+ const std::string& relative_url,
const std::string& content,
const std::string& content_type,
const net::test_server::HttpRequest& request) const {
- const GURL absolute_url =
- embedded_test_server()->GetURL(request.relative_url);
- if (absolute_url != url)
+ const size_t query_position = request.relative_url.find('?');
+ if (request.relative_url.substr(0, query_position) != relative_url)
return std::unique_ptr<net::test_server::HttpResponse>();
-
std::unique_ptr<net::test_server::BasicHttpResponse> http_response(
base::MakeUnique<net::test_server::BasicHttpResponse>());
http_response->set_code(net::HTTP_OK);
@@ -1528,17 +1541,33 @@ class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest {
}
std::unique_ptr<net::test_server::HttpResponse> CustomRequestHandler(
- const GURL& url,
+ const std::string& relative_url,
const std::string& response,
const net::test_server::HttpRequest& request) const {
- const GURL absolute_url =
- embedded_test_server()->GetURL(request.relative_url);
- if (absolute_url != url)
+ const size_t query_position = request.relative_url.find('?');
+ if (request.relative_url.substr(0, query_position) != relative_url)
return std::unique_ptr<net::test_server::HttpResponse>();
-
return base::MakeUnique<CustomResponse>(response);
}
+ std::unique_ptr<net::test_server::HttpResponse> KeepSearchRedirectHandler(
+ const std::string& relative_url,
+ const std::string& redirect_location,
+ const net::test_server::HttpRequest& request) const {
+ const size_t query_position = request.relative_url.find('?');
+ if (request.relative_url.substr(0, query_position) != relative_url)
+ return std::unique_ptr<net::test_server::HttpResponse>();
+ std::unique_ptr<net::test_server::BasicHttpResponse> response(
+ new net::test_server::BasicHttpResponse());
+ response->set_code(net::HTTP_PERMANENT_REDIRECT);
+ response->AddCustomHeader(
+ "Location",
+ query_position == std::string::npos
+ ? redirect_location
+ : redirect_location + request.relative_url.substr(query_position));
+ return std::move(response);
+ }
+
void MonitorRequestHandler(const net::test_server::HttpRequest& request) {
request_log_.push_back(request.relative_url);
}
@@ -1601,8 +1630,8 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NetworkFallback) {
" });";
const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterStaticFile(page_url, kPage, "text/html");
- RegisterStaticFile(worker_url, kScript, "text/javascript");
+ RegisterStaticFile(kPageUrl, kPage, "text/html");
+ RegisterStaticFile(kWorkerUrl, kScript, "text/javascript");
SetupForNavigationPreloadTest(page_url, worker_url,
true /* enable_navigation_preload */);
@@ -1637,8 +1666,8 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest,
" });";
const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterStaticFile(page_url, kPage, "text/html");
- RegisterStaticFile(worker_url, kScript, "text/javascript");
+ RegisterStaticFile(kPageUrl, kPage, "text/html");
+ RegisterStaticFile(kWorkerUrl, kScript, "text/javascript");
SetupForNavigationPreloadTest(page_url, worker_url,
true /* enable_navigation_preload */);
@@ -1673,8 +1702,8 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, GetResponseText) {
" });";
const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterStaticFile(page_url, kPage, "text/html");
- RegisterStaticFile(worker_url, kScript, "text/javascript");
+ RegisterStaticFile(kPageUrl, kPage, "text/html");
+ RegisterStaticFile(kWorkerUrl, kScript, "text/javascript");
SetupForNavigationPreloadTest(page_url, worker_url,
true /* enable_navigation_preload */);
@@ -1730,8 +1759,8 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest,
" });";
const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterStaticFile(page_url, kPage, "text/html");
- RegisterStaticFile(worker_url, kScript, "text/javascript");
+ RegisterStaticFile(kPageUrl, kPage, "text/html");
+ RegisterStaticFile(kWorkerUrl, kScript, "text/javascript");
SetupForNavigationPreloadTest(page_url, worker_url,
true /* enable_navigation_preload */);
@@ -1754,7 +1783,7 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NetworkError) {
const char kWorkerUrl[] = "/service_worker/navigation_preload.js";
const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript");
+ RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript");
SetupForNavigationPreloadTest(page_url, worker_url,
true /* enable_navigation_preload */);
@@ -1777,8 +1806,8 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest,
const char kPage[] = "<title>ERROR</title>Hello world.";
const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterStaticFile(page_url, kPage, "text/html");
- RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript");
+ RegisterStaticFile(kPageUrl, kPage, "text/html");
+ RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript");
SetupForNavigationPreloadTest(page_url, worker_url,
true /* enable_navigation_preload */);
@@ -1813,8 +1842,8 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NotEnabled) {
const char kPage[] = "<title>ERROR</title>Hello world.";
const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterStaticFile(page_url, kPage, "text/html");
- RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript");
+ RegisterStaticFile(kPageUrl, kPage, "text/html");
+ RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript");
SetupForNavigationPreloadTest(page_url, worker_url,
false /* enable_navigation_preload */);
@@ -1849,8 +1878,8 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest,
"<title>ERROR</title>Hello world.";
const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterCustomResponse(page_url, kPageResponse);
- RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript");
+ RegisterCustomResponse(kPageUrl, kPageResponse);
+ RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript");
SetupForNavigationPreloadTest(page_url, worker_url,
true /* enable_navigation_preload */);
@@ -1897,9 +1926,9 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, RejectRedirects) {
embedded_test_server()->GetURL(kRedirectedPageUrl);
const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterCustomResponse(page_url, kPageResponse);
- RegisterStaticFile(worker_url, kPreloadResponseTestScript, "text/javascript");
- RegisterStaticFile(redirecred_page_url, kRedirectedPage, "text/html");
+ RegisterCustomResponse(kPageUrl, kPageResponse);
+ RegisterStaticFile(kWorkerUrl, kPreloadResponseTestScript, "text/javascript");
+ RegisterStaticFile(kRedirectedPageUrl, kRedirectedPage, "text/html");
SetupForNavigationPreloadTest(page_url, worker_url,
true /* enable_navigation_preload */);
@@ -1921,6 +1950,56 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, RejectRedirects) {
GetTextContent());
}
+IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest,
+ RedirectAndRespondWithNavigationPreload) {
+ const std::string kPageUrl = "/service_worker/navigation_preload.html";
+ const char kWorkerUrl[] = "/service_worker/navigation_preload.js";
+ const char kPage[] =
+ "<title></title>\n"
+ "<script>document.title = document.location.search;</script>";
+ const char kScript[] =
+ "self.addEventListener('fetch', event => {\n"
+ " if (event.request.url.indexOf('navigation_preload.html') == -1)\n"
+ " return; // For in scope redirection.\n"
+ " event.respondWith(event.navigationPreload);\n"
+ " });";
+ const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
+ const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
+ RegisterStaticFile(kPageUrl, kPage, "text/html");
+ RegisterStaticFile(kWorkerUrl, kScript, "text/javascript");
+
+ const char kRedirectPageUrl[] = "/redirect";
+ const char kInScopeRedirectPageUrl[] = "/service_worker/redirect";
+ RegisterKeepSearchRedirect(kRedirectPageUrl, page_url.spec());
+ RegisterKeepSearchRedirect(kInScopeRedirectPageUrl, page_url.spec());
+
+ SetupForNavigationPreloadTest(
+ embedded_test_server()->GetURL("/service_worker/"), worker_url,
+ true /* enable_navigation_preload */);
+
+ const GURL redirect_page_url =
+ embedded_test_server()->GetURL(kRedirectPageUrl).Resolve("?1");
+ const GURL in_scope_redirect_page_url =
+ embedded_test_server()->GetURL(kInScopeRedirectPageUrl).Resolve("?2");
+ const GURL cross_origin_redirect_page_url =
+ embedded_test_server()->GetURL("a.com", kRedirectPageUrl).Resolve("?3");
+
+ TitleWatcher title_watcher1(shell()->web_contents(),
+ base::ASCIIToUTF16("?1"));
+ NavigateToURL(shell(), redirect_page_url);
+ EXPECT_EQ(1, GetRequestCount(kPageUrl + "?1"));
+
+ TitleWatcher title_watcher2(shell()->web_contents(),
+ base::ASCIIToUTF16("?2"));
+ NavigateToURL(shell(), in_scope_redirect_page_url);
+ EXPECT_EQ(1, GetRequestCount(kPageUrl + "?2"));
+
+ TitleWatcher title_watcher3(shell()->web_contents(),
+ base::ASCIIToUTF16("?3"));
+ NavigateToURL(shell(), cross_origin_redirect_page_url);
+ EXPECT_EQ(1, GetRequestCount(kPageUrl + "?3"));
+}
+
// Flaky on Win/Mac: http://crbug.com/533631
#if defined(OS_WIN) || defined(OS_MACOSX)
#define MAYBE_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure DISABLED_ResponseFromHTTPSServiceWorkerIsMarkedAsSecure

Powered by Google App Engine
This is Rietveld 408576698