Index: Source/core/html/parser/HTMLPreloadScannerTest.cpp |
diff --git a/Source/core/html/parser/HTMLPreloadScannerTest.cpp b/Source/core/html/parser/HTMLPreloadScannerTest.cpp |
index a2f673629fe932cb80817591f327b6db3056d244..166608ba5ca34999988490e51cc7ebe0d3ca7bef 100644 |
--- a/Source/core/html/parser/HTMLPreloadScannerTest.cpp |
+++ b/Source/core/html/parser/HTMLPreloadScannerTest.cpp |
@@ -34,6 +34,16 @@ struct PreconnectTestCase { |
CrossOriginAttributeValue crossOrigin; |
}; |
+struct ReferrerPolicyTestCase { |
+ const char* baseURL; |
+ const char* inputHTML; |
+ const char* preloadedURL; // Or nullptr if no preload is expected. |
+ const char* outputBaseURL; |
+ Resource::Type type; |
+ int resourceWidth; |
+ ReferrerPolicy referrerPolicy; |
+}; |
+ |
class MockHTMLResourcePreloader : public ResourcePreloader { |
public: |
void preloadRequestVerification(Resource::Type type, const char* url, const char* baseURL, int width, const ClientHintsPreferences& preferences) |
@@ -52,6 +62,12 @@ public: |
EXPECT_EQ(preferences.shouldSendViewportWidth(), m_preloadRequest->preferences().shouldSendViewportWidth()); |
} |
+ void preloadRequestVerification(Resource::Type type, const char* url, const char* baseURL, int width, ReferrerPolicy referrerPolicy) |
+ { |
+ preloadRequestVerification(type, url, baseURL, width, ClientHintsPreferences()); |
+ EXPECT_EQ(referrerPolicy, m_preloadRequest->referrerPolicy()); |
+ } |
+ |
void preconnectRequestVerification(const String& host, CrossOriginAttributeValue crossOrigin) |
{ |
if (!host.isNull()) { |
@@ -142,6 +158,16 @@ protected: |
preloader.preconnectRequestVerification(testCase.preconnectedHost, testCase.crossOrigin); |
} |
+ void test(ReferrerPolicyTestCase testCase) |
+ { |
+ MockHTMLResourcePreloader preloader; |
+ KURL baseURL(ParsedURLString, testCase.baseURL); |
+ m_scanner->appendToEnd(String(testCase.inputHTML)); |
+ m_scanner->scan(&preloader, baseURL); |
+ |
+ preloader.preloadRequestVerification(testCase.type, testCase.preloadedURL, testCase.outputBaseURL, testCase.resourceWidth, testCase.referrerPolicy); |
+ } |
+ |
private: |
OwnPtr<DummyPageHolder> m_dummyPageHolder; |
OwnPtr<HTMLPreloadScanner> m_scanner; |
@@ -297,4 +323,22 @@ TEST_F(HTMLPreloadScannerTest, testPicture) |
test(testCase); |
} |
+TEST_F(HTMLPreloadScannerTest, testReferrerPolicy) |
+{ |
+ ReferrerPolicyTestCase testCases[] = { |
+ { "http://example.test", "<img src='bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPolicyDefault }, |
+ { "http://example.test", "<img referrerpolicy='origin' src='bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPolicyOrigin }, |
+ { "http://example.test", "<meta name='referrer' content='not-a-valid-policy'><img src='bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPolicyDefault }, |
+ { "http://example.test", "<img referrerpolicy='origin' referrerpolicy='origin-when-crossorigin' src='bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPolicyOrigin }, |
+ { "http://example.test", "<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPolicyDefault }, |
+ { "http://example.test", "<meta name='referrer' content='no-referrer'><img referrerpolicy='origin' src='bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPolicyOrigin }, |
+ // 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", "<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPolicyNever }, |
+ { "http://example.test", "<img src='bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPolicyNever } |
+ }; |
+ |
+ for (const auto& testCase : testCases) |
+ test(testCase); |
+} |
+ |
} // namespace blink |