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

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

Issue 2350813003: NoState Prefetch: CSP test (Closed)
Patch Set: filled in bug Created 4 years, 2 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/browser/prerender/prerender_test_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
diff --git a/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc b/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
index a5234a3b2ff45afde5c213cdc7b43c6586acaf78..1c47edbc69df3364205c2c2982a76b7abfdf5cdd 100644
--- a/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
+++ b/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
@@ -6,7 +6,6 @@
#include "base/strings/string16.h"
#include "base/strings/string_split.h"
#include "base/task_scheduler/post_task.h"
-#include "base/threading/platform_thread.h" // For |Sleep()|.
#include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/prerender/prerender_test_utils.h"
@@ -77,9 +76,12 @@ const char kPrefetchImagePage[] = "prerender/prefetch_image.html";
const char kPrefetchJpeg[] = "prerender/image.jpeg";
const char kPrefetchLoaderPath[] = "/prerender/prefetch_loader.html";
const char kPrefetchLoopPage[] = "prerender/prefetch_loop.html";
+const char kPrefetchMetaCSP[] = "prerender/prefetch_meta_csp.html";
const char kPrefetchPage[] = "prerender/prefetch_page.html";
const char kPrefetchPage2[] = "prerender/prefetch_page2.html";
const char kPrefetchPng[] = "prerender/image.png";
+const char kPrefetchResponseHeaderCSP[] =
+ "prerender/prefetch_response_csp.html";
const char kPrefetchScript[] = "prerender/prefetch.js";
const char kPrefetchScript2[] = "prerender/prefetch2.js";
const char kPrefetchSubresourceRedirectPage[] =
@@ -148,13 +150,13 @@ class NoStatePrefetchBrowserTest
base::FilePath file_path = base::FilePath::FromUTF8Unsafe(path_str);
replacement.SetPathStr(file_path.value());
const GURL url = src_server()->base_url().ReplaceComponents(replacement);
- CountRequestFor(url, path_str, counter);
+ CountRequestForUrl(url, path_str, counter);
}
// As above, but specify the data path and URL separately.
- void CountRequestFor(const GURL& url,
- const std::string& path_str,
- RequestCounter* counter) {
+ void CountRequestForUrl(const GURL& url,
+ const std::string& path_str,
+ RequestCounter* counter) {
base::FilePath url_file = ui_test_utils::GetTestFilePath(
base::FilePath(), base::FilePath::FromUTF8Unsafe(path_str));
content::BrowserThread::PostTask(
@@ -272,11 +274,54 @@ IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchCrossDomain) {
"http://%s:%d/%s", secondary_domain.c_str(),
embedded_test_server()->host_port_pair().port(), kPrefetchPage));
RequestCounter cross_domain_counter;
- CountRequestFor(cross_domain_url, kPrefetchPage, &cross_domain_counter);
+ CountRequestForUrl(cross_domain_url, kPrefetchPage, &cross_domain_counter);
PrerenderTestURL(cross_domain_url, FINAL_STATUS_APP_TERMINATING, 1);
cross_domain_counter.WaitForCount(1);
}
+// Checks that response header CSP is respected.
+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);
+ CountRequestForUrl(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);
+ // TODO(pasko): wait for prefetch to be finished before checking the counts.
+ first_script.WaitForCount(0);
+}
+
+// Checks that CSP in the meta tag cancels the prefetch.
+// TODO(mattcary): probably this behavior should be consistent with
+// response-header CSP. See crbug/656581.
+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);
+ CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script);
+ PrerenderTestURL(kPrefetchMetaCSP, FINAL_STATUS_APP_TERMINATING, 1);
+ // TODO(mattcary): See test comment above. If the meta CSP tag were parsed,
+ // |second_script| would be loaded. Instead as the background scanner bails as
+ // soon as the meta CSP tag is seen, only |main_page| is fetched.
+ main_page.WaitForCount(1);
+ // TODO(pasko): wait for prefetch to be finished before checking the counts.
+ second_script.WaitForCount(0);
+ first_script.WaitForCount(0);
+}
+
// Checks simultaneous prefetch.
IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) {
RequestCounter first_main_counter;
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698