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

Unified Diff: third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp

Issue 2808663003: Explicitly tell the preload request where to take the referrer from (Closed)
Patch Set: comment Created 3 years, 8 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
Index: third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp
index b9971a4f432b959ad7a84b09e45437c5cc224275..fac52f75db440bf921e8c89f01e6982b11e62416 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp
@@ -4,6 +4,7 @@
#include "core/html/parser/HTMLPreloadScanner.h"
+#include <memory>
#include "core/MediaTypeNames.h"
#include "core/css/MediaValuesCached.h"
#include "core/frame/Settings.h"
@@ -12,9 +13,12 @@
#include "core/html/parser/HTMLResourcePreloader.h"
#include "core/html/parser/PreloadRequest.h"
#include "core/testing/DummyPageHolder.h"
+#include "platform/exported/WrappedResourceResponse.h"
#include "platform/loader/fetch/ClientHintsPreferences.h"
+#include "platform/weborigin/SecurityOrigin.h"
+#include "public/platform/Platform.h"
+#include "public/platform/WebURLLoaderMockFactory.h"
#include "testing/gtest/include/gtest/gtest.h"
-#include <memory>
namespace blink {
@@ -43,6 +47,9 @@ struct ReferrerPolicyTestCase {
Resource::Type type;
int resource_width;
ReferrerPolicy referrer_policy;
+ // Expected referrer header of the preload request, or nullptr if the header
+ // shouldn't be checked (and no network request should be created).
+ const char* expected_referrer;
};
struct NonceTestCase {
@@ -89,6 +96,19 @@ class MockHTMLResourcePreloader : public ResourcePreloader {
EXPECT_EQ(referrer_policy, preload_request_->GetReferrerPolicy());
}
+ void PreloadRequestVerification(Resource::Type type,
+ const char* url,
+ const char* base_url,
+ int width,
+ ReferrerPolicy referrer_policy,
+ Document* document,
+ const char* expected_referrer) {
+ PreloadRequestVerification(type, url, base_url, width, referrer_policy);
+ Resource* resource = preload_request_->Start(document);
+ ASSERT_TRUE(resource);
+ EXPECT_EQ(expected_referrer, resource->GetResourceRequest().HttpReferrer());
+ }
+
void PreconnectRequestVerification(const String& host,
CrossOriginAttributeValue cross_origin) {
if (!host.IsNull()) {
@@ -155,6 +175,9 @@ class HTMLPreloadScannerTest : public testing::Test {
ReferrerPolicy document_referrer_policy = kReferrerPolicyDefault) {
HTMLParserOptions options(&dummy_page_holder_->GetDocument());
KURL document_url(kParsedURLString, "http://whatever.test/");
+ dummy_page_holder_->GetDocument().SetURL(document_url);
+ dummy_page_holder_->GetDocument().SetSecurityOrigin(
+ SecurityOrigin::Create(document_url));
dummy_page_holder_->GetDocument().GetSettings()->SetViewportEnabled(
viewport_state == kViewportEnabled);
dummy_page_holder_->GetDocument().GetSettings()->SetViewportMetaEnabled(
@@ -200,9 +223,16 @@ class HTMLPreloadScannerTest : public testing::Test {
PreloadRequestStream requests = scanner_->Scan(base_url, nullptr);
preloader.TakeAndPreload(requests);
- preloader.PreloadRequestVerification(
- test_case.type, test_case.preloaded_url, test_case.output_base_url,
- test_case.resource_width, test_case.referrer_policy);
+ if (test_case.expected_referrer) {
+ preloader.PreloadRequestVerification(
+ test_case.type, test_case.preloaded_url, test_case.output_base_url,
+ test_case.resource_width, test_case.referrer_policy,
+ &dummy_page_holder_->GetDocument(), test_case.expected_referrer);
+ } else {
+ preloader.PreloadRequestVerification(
+ test_case.type, test_case.preloaded_url, test_case.output_base_url,
+ test_case.resource_width, test_case.referrer_policy);
+ }
}
void Test(NonceTestCase test_case) {
@@ -617,47 +647,54 @@ TEST_F(HTMLPreloadScannerTest, testReferrerPolicy) {
"http://example.test/", Resource::kImage, 0, kReferrerPolicyDefault},
{"http://example.test", "<img referrerpolicy='origin' src='bla.gif'/>",
"bla.gif", "http://example.test/", Resource::kImage, 0,
- kReferrerPolicyOrigin},
+ kReferrerPolicyOrigin, nullptr},
{"http://example.test",
"<meta name='referrer' content='not-a-valid-policy'><img "
"src='bla.gif'/>",
"bla.gif", "http://example.test/", Resource::kImage, 0,
- kReferrerPolicyDefault},
+ kReferrerPolicyDefault, nullptr},
{"http://example.test",
"<img referrerpolicy='origin' referrerpolicy='origin-when-cross-origin' "
"src='bla.gif'/>",
"bla.gif", "http://example.test/", Resource::kImage, 0,
- kReferrerPolicyOrigin},
+ kReferrerPolicyOrigin, nullptr},
{"http://example.test",
"<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif",
- "http://example.test/", Resource::kImage, 0, kReferrerPolicyDefault},
- {"http://example.test",
- "<meta name='referrer' content='no-referrer'><img "
- "referrerpolicy='origin' src='bla.gif'/>",
- "bla.gif", "http://example.test/", Resource::kImage, 0,
- kReferrerPolicyOrigin},
+ "http://example.test/", Resource::kImage, 0, kReferrerPolicyDefault,
+ nullptr},
{"http://example.test",
"<link rel=preload as=image referrerpolicy='origin-when-cross-origin' "
"href='bla.gif'/>",
"bla.gif", "http://example.test/", Resource::kImage, 0,
- kReferrerPolicyOriginWhenCrossOrigin},
+ kReferrerPolicyOriginWhenCrossOrigin, nullptr},
+ {"http://example.test",
+ "<link rel='stylesheet' href='sheet.css' type='text/css'>", "sheet.css",
+ "http://example.test/", Resource::kCSSStyleSheet, 0,
+ kReferrerPolicyDefault, nullptr},
{"http://example.test",
"<link rel=preload as=image referrerpolicy='origin' "
"referrerpolicy='origin-when-cross-origin' href='bla.gif'/>",
"bla.gif", "http://example.test/", Resource::kImage, 0,
- kReferrerPolicyOrigin},
+ kReferrerPolicyOrigin, nullptr},
+ {"http://example.test",
+ "<meta name='referrer' content='no-referrer'><img "
+ "referrerpolicy='origin' src='bla.gif'/>",
+ "bla.gif", "http://example.test/", Resource::kImage, 0,
+ kReferrerPolicyOrigin, nullptr},
// The scanner's state is not reset between test cases, so all subsequent
// test cases have a document referrer policy of no-referrer.
{"http://example.test",
"<link rel=preload as=image referrerpolicy='not-a-valid-policy' "
"href='bla.gif'/>",
"bla.gif", "http://example.test/", Resource::kImage, 0,
- kReferrerPolicyNever},
+ kReferrerPolicyNever, nullptr},
{"http://example.test",
"<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif",
- "http://example.test/", Resource::kImage, 0, kReferrerPolicyNever},
+ "http://example.test/", Resource::kImage, 0, kReferrerPolicyNever,
+ nullptr},
{"http://example.test", "<img src='bla.gif'/>", "bla.gif",
- "http://example.test/", Resource::kImage, 0, kReferrerPolicyNever}};
+ "http://example.test/", Resource::kImage, 0, kReferrerPolicyNever,
+ nullptr}};
for (const auto& test_case : test_cases)
Test(test_case);
@@ -698,23 +735,24 @@ TEST_F(HTMLPreloadScannerTest, testReferrerPolicyOnDocument) {
RunSetUp(kViewportEnabled, kPreloadEnabled, kReferrerPolicyOrigin);
ReferrerPolicyTestCase test_cases[] = {
{"http://example.test", "<img src='blah.gif'/>", "blah.gif",
- "http://example.test/", Resource::kImage, 0, kReferrerPolicyOrigin},
+ "http://example.test/", Resource::kImage, 0, kReferrerPolicyOrigin,
+ nullptr},
{"http://example.test", "<style>@import url('blah.css');</style>",
"blah.css", "http://example.test/", Resource::kCSSStyleSheet, 0,
- kReferrerPolicyOrigin},
+ kReferrerPolicyOrigin, nullptr},
// Tests that a meta-delivered referrer policy with an unrecognized policy
// value does not override the document's referrer policy.
{"http://example.test",
"<meta name='referrer' content='not-a-valid-policy'><img "
"src='bla.gif'/>",
"bla.gif", "http://example.test/", Resource::kImage, 0,
- kReferrerPolicyOrigin},
+ kReferrerPolicyOrigin, nullptr},
// Tests that a meta-delivered referrer policy with a valid policy value
// does override the document's referrer policy.
{"http://example.test",
"<meta name='referrer' content='unsafe-url'><img src='bla.gif'/>",
"bla.gif", "http://example.test/", Resource::kImage, 0,
- kReferrerPolicyAlways},
+ kReferrerPolicyAlways, nullptr},
};
for (const auto& test_case : test_cases)
@@ -846,4 +884,23 @@ TEST_F(HTMLPreloadScannerTest, testUppercaseAsValues) {
Test(test_case);
}
+TEST_F(HTMLPreloadScannerTest, ReferrerHeader) {
+ RunSetUp(kViewportEnabled, kPreloadEnabled, kReferrerPolicyAlways);
+
+ KURL preload_url(kParsedURLString, "http://example.test/sheet.css");
+ Platform::Current()->GetURLLoaderMockFactory()->RegisterURL(
+ preload_url, WrappedResourceResponse(ResourceResponse()), "");
+
+ ReferrerPolicyTestCase test_case = {
+ "http://example.test",
+ "<link rel='stylesheet' href='sheet.css' type='text/css'>",
+ "sheet.css",
+ "http://example.test/",
+ Resource::kCSSStyleSheet,
+ 0,
+ kReferrerPolicyAlways,
+ "http://whatever.test/"};
+ Test(test_case);
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698