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

Unified Diff: chrome/browser/prerender/prerender_nostate_prefetch_test.cc

Issue 2350813003: NoState Prefetch: CSP test (Closed)
Patch Set: comment/typo Created 4 years, 3 months 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
« no previous file with comments | « no previous file | chrome/test/data/prerender/prerender_prefetch_meta_csp.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_nostate_prefetch_test.cc
diff --git a/chrome/browser/prerender/prerender_nostate_prefetch_test.cc b/chrome/browser/prerender/prerender_nostate_prefetch_test.cc
index c6a751dc5ac5827aa5ad900486802349458dd34f..c373f0865c6d13ab304c16e85e3301eff7217767 100644
--- a/chrome/browser/prerender/prerender_nostate_prefetch_test.cc
+++ b/chrome/browser/prerender/prerender_nostate_prefetch_test.cc
@@ -36,16 +36,18 @@ namespace prerender {
// etc) are fussy about relative versus absolute paths. With the exception of
// kPrefetchLoaderPath, which is only used in PrerenderTestURLImpl, all other
// paths should be relative.
+const char kPrefetchMetaCSP[] = "prerender/prerender_prefetch_meta_csp.html";
+const char kPrefetchResponseHeaderCSP[] =
+ "prerender/prerender_prefetch_response_csp.html";
+const char kPrefetchImagePage[] = "prerender/prerender_prefetch_image.html";
+const char kPrefetchJpeg[] = "prerender/image.jpeg";
const char kPrefetchLoaderPath[] = "/prerender/prerender_prefetch_loader.html";
+const char kPrefetchLoopPage[] = "prerender/prerender_prefetch_loop.html";
const char kPrefetchPage[] = "prerender/prerender_prefetch_page.html";
-const char kPrefetchScript[] = "prerender/prerender_prefetch.js";
const char kPrefetchPage2[] = "prerender/prerender_prefetch_page2.html";
-const char kPrefetchScript2[] = "prerender/prerender_prefetch2.js";
-const char kPrefetchImagePage[] = "prerender/prerender_prefetch_image.html";
-const char kPrefetchLoopPage[] = "prerender/prerender_prefetch_loop.html";
-
-const char kPrefetchJpeg[] = "prerender/image.jpeg";
const char kPrefetchPng[] = "prerender/image.png";
+const char kPrefetchScript[] = "prerender/prerender_prefetch.js";
+const char kPrefetchScript2[] = "prerender/prerender_prefetch2.js";
const char kPageBool[] = "pageBool";
const char kScriptBool[] = "scriptBool";
@@ -74,6 +76,18 @@ class NoStatePrefetchBrowserTest
counter->AsWeakPtr()));
}
+ // Set up a request counter for a specific URL, serving data from path.
+ void CountRequestFor(const GURL& url,
pasko 2016/09/26 17:05:10 CountRequestForUrl() looks better than this overlo
mattcary 2016/09/27 08:13:18 Done.
+ const std::string& path,
+ RequestCounter* counter) {
+ base::FilePath url_file =
+ ui_test_utils::GetTestFilePath(base::FilePath(), base::FilePath(path));
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&CreateCountingInterceptorOnIO, url, url_file,
+ counter->AsWeakPtr()));
+ }
+
// Fetches a boolean value from javascript. Returns whether the fetch
// succeeded; the value of the variable is returned in value. If
// javascript_variable does not exist, this returns false and value is
@@ -217,6 +231,47 @@ IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchCrossDomain) {
"Prerender.webcross_PrerenderNotSwappedInPLT", 1);
}
+// Check that response header CSP is handled correctly.
+IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, ResponseHeaderCSP) {
+ static const std::string secondary_domain = "foo.bar";
+ host_resolver()->AddRule(secondary_domain, "127.0.0.1");
+ RequestCounter main_page;
+ CountRequestFor(kPrefetchResponseHeaderCSP, &main_page);
+ RequestCounter first_script;
+ CountRequestFor(kPrefetchScript, &first_script);
+ RequestCounter second_script;
+ GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2);
+ CountRequestFor(second_script_url, kPrefetchScript2, &second_script);
+ PrerenderTestURL(kPrefetchResponseHeaderCSP, FINAL_STATUS_APP_TERMINATING, 1);
+ // The second script is in the correct domain for CSP, but the first script is
+ // not.
+ main_page.WaitForCount(1);
+ second_script.WaitForCount(1);
+ first_script.WaitForCount(0);
pasko 2016/09/26 17:05:10 does WaitForCount actually check that it won't cou
mattcary 2016/09/27 08:13:18 No. There doesn't seem to be an easy way to confir
pasko 2016/10/05 14:09:55 Agreed. I am working on signalling from the scanne
mattcary 2016/10/12 15:09:10 Done.
+}
+
+// Check CSP in the meta tag cancels the prefetch.
+// TODO(mattcary): probably we don't want to cancel this so we're consistent
pasko 2016/09/26 17:05:10 by 'this' do you mean the prefetch or the request?
mattcary 2016/09/27 08:13:18 Clarified the comment. By "this" I mean the prere
pasko 2016/10/05 14:09:55 Ah, good to know. It is indeed good to have a test
+// with response-header CSP. But it seems to be difficult, and probably meta tag
+// CSP is not as common, so it may not be worth the complexity.
+IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, MetaTagCSP) {
+ static const std::string secondary_domain = "foo.bar";
+ host_resolver()->AddRule(secondary_domain, "127.0.0.1");
+ RequestCounter main_page;
+ CountRequestFor(kPrefetchMetaCSP, &main_page);
+ RequestCounter first_script;
+ CountRequestFor(kPrefetchScript, &first_script);
+ RequestCounter second_script;
+ GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2);
+ CountRequestFor(second_script_url, kPrefetchScript2, &second_script);
+ PrerenderTestURL(kPrefetchMetaCSP, FINAL_STATUS_APP_TERMINATING, 1);
+ // Probably we should be loading the second script. But currently we bail on
+ // the preload scanner if we see the CSP meta tag
pasko 2016/09/26 17:05:10 I am confused. What does it mean to 'bail out on t
mattcary 2016/09/27 08:13:18 Clarified the comment. See above.
+ main_page.WaitForCount(1);
+ second_script.WaitForCount(0);
+ first_script.WaitForCount(0);
+}
+
// Check that we support simultaneous prefetch.
IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) {
RequestCounter first_main_counter;
« no previous file with comments | « no previous file | chrome/test/data/prerender/prerender_prefetch_meta_csp.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698