| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "core/html/parser/HTMLPreloadScanner.h" | 6 #include "core/html/parser/HTMLPreloadScanner.h" |
| 7 | 7 |
| 8 #include "core/MediaTypeNames.h" | 8 #include "core/MediaTypeNames.h" |
| 9 #include "core/css/MediaValuesCached.h" | 9 #include "core/css/MediaValuesCached.h" |
| 10 #include "core/fetch/ClientHintsPreferences.h" | 10 #include "core/fetch/ClientHintsPreferences.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 ClientHintsPreferences preferences; | 27 ClientHintsPreferences preferences; |
| 28 }; | 28 }; |
| 29 | 29 |
| 30 struct PreconnectTestCase { | 30 struct PreconnectTestCase { |
| 31 const char* baseURL; | 31 const char* baseURL; |
| 32 const char* inputHTML; | 32 const char* inputHTML; |
| 33 const char* preconnectedHost; | 33 const char* preconnectedHost; |
| 34 CrossOriginAttributeValue crossOrigin; | 34 CrossOriginAttributeValue crossOrigin; |
| 35 }; | 35 }; |
| 36 | 36 |
| 37 struct ReferrerPolicyTestCase { |
| 38 const char* baseURL; |
| 39 const char* inputHTML; |
| 40 const char* preloadedURL; // Or nullptr if no preload is expected. |
| 41 const char* outputBaseURL; |
| 42 Resource::Type type; |
| 43 int resourceWidth; |
| 44 ReferrerPolicy referrerPolicy; |
| 45 }; |
| 46 |
| 37 class MockHTMLResourcePreloader : public ResourcePreloader { | 47 class MockHTMLResourcePreloader : public ResourcePreloader { |
| 38 public: | 48 public: |
| 39 void preloadRequestVerification(Resource::Type type, const char* url, const
char* baseURL, int width, const ClientHintsPreferences& preferences) | 49 void preloadRequestVerification(Resource::Type type, const char* url, const
char* baseURL, int width, const ClientHintsPreferences& preferences) |
| 40 { | 50 { |
| 41 if (!url) { | 51 if (!url) { |
| 42 EXPECT_FALSE(m_preloadRequest); | 52 EXPECT_FALSE(m_preloadRequest); |
| 43 return; | 53 return; |
| 44 } | 54 } |
| 45 EXPECT_FALSE(m_preloadRequest->isPreconnect()); | 55 EXPECT_FALSE(m_preloadRequest->isPreconnect()); |
| 46 EXPECT_EQ(type, m_preloadRequest->resourceType()); | 56 EXPECT_EQ(type, m_preloadRequest->resourceType()); |
| 47 EXPECT_STREQ(url, m_preloadRequest->resourceURL().ascii().data()); | 57 EXPECT_STREQ(url, m_preloadRequest->resourceURL().ascii().data()); |
| 48 EXPECT_STREQ(baseURL, m_preloadRequest->baseURL().string().ascii().data(
)); | 58 EXPECT_STREQ(baseURL, m_preloadRequest->baseURL().string().ascii().data(
)); |
| 49 EXPECT_EQ(width, m_preloadRequest->resourceWidth()); | 59 EXPECT_EQ(width, m_preloadRequest->resourceWidth()); |
| 50 EXPECT_EQ(preferences.shouldSendDPR(), m_preloadRequest->preferences().s
houldSendDPR()); | 60 EXPECT_EQ(preferences.shouldSendDPR(), m_preloadRequest->preferences().s
houldSendDPR()); |
| 51 EXPECT_EQ(preferences.shouldSendResourceWidth(), m_preloadRequest->prefe
rences().shouldSendResourceWidth()); | 61 EXPECT_EQ(preferences.shouldSendResourceWidth(), m_preloadRequest->prefe
rences().shouldSendResourceWidth()); |
| 52 EXPECT_EQ(preferences.shouldSendViewportWidth(), m_preloadRequest->prefe
rences().shouldSendViewportWidth()); | 62 EXPECT_EQ(preferences.shouldSendViewportWidth(), m_preloadRequest->prefe
rences().shouldSendViewportWidth()); |
| 53 } | 63 } |
| 54 | 64 |
| 65 void preloadRequestVerification(Resource::Type type, const char* url, const
char* baseURL, int width, ReferrerPolicy referrerPolicy) |
| 66 { |
| 67 preloadRequestVerification(type, url, baseURL, width, ClientHintsPrefere
nces()); |
| 68 EXPECT_EQ(referrerPolicy, m_preloadRequest->referrerPolicy()); |
| 69 } |
| 70 |
| 55 void preconnectRequestVerification(const String& host, CrossOriginAttributeV
alue crossOrigin) | 71 void preconnectRequestVerification(const String& host, CrossOriginAttributeV
alue crossOrigin) |
| 56 { | 72 { |
| 57 if (!host.isNull()) { | 73 if (!host.isNull()) { |
| 58 EXPECT_TRUE(m_preloadRequest->isPreconnect()); | 74 EXPECT_TRUE(m_preloadRequest->isPreconnect()); |
| 59 EXPECT_STREQ(m_preloadRequest->resourceURL().ascii().data(), host.as
cii().data()); | 75 EXPECT_STREQ(m_preloadRequest->resourceURL().ascii().data(), host.as
cii().data()); |
| 60 EXPECT_EQ(m_preloadRequest->isCORS(), crossOrigin != CrossOriginAttr
ibuteNotSet); | 76 EXPECT_EQ(m_preloadRequest->isCORS(), crossOrigin != CrossOriginAttr
ibuteNotSet); |
| 61 EXPECT_EQ(m_preloadRequest->isAllowCredentials(), crossOrigin == Cro
ssOriginAttributeUseCredentials); | 77 EXPECT_EQ(m_preloadRequest->isAllowCredentials(), crossOrigin == Cro
ssOriginAttributeUseCredentials); |
| 62 } | 78 } |
| 63 } | 79 } |
| 64 | 80 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 | 151 |
| 136 void test(PreconnectTestCase testCase) | 152 void test(PreconnectTestCase testCase) |
| 137 { | 153 { |
| 138 MockHTMLResourcePreloader preloader; | 154 MockHTMLResourcePreloader preloader; |
| 139 KURL baseURL(ParsedURLString, testCase.baseURL); | 155 KURL baseURL(ParsedURLString, testCase.baseURL); |
| 140 m_scanner->appendToEnd(String(testCase.inputHTML)); | 156 m_scanner->appendToEnd(String(testCase.inputHTML)); |
| 141 m_scanner->scan(&preloader, baseURL); | 157 m_scanner->scan(&preloader, baseURL); |
| 142 preloader.preconnectRequestVerification(testCase.preconnectedHost, testC
ase.crossOrigin); | 158 preloader.preconnectRequestVerification(testCase.preconnectedHost, testC
ase.crossOrigin); |
| 143 } | 159 } |
| 144 | 160 |
| 161 void test(ReferrerPolicyTestCase testCase) |
| 162 { |
| 163 MockHTMLResourcePreloader preloader; |
| 164 KURL baseURL(ParsedURLString, testCase.baseURL); |
| 165 m_scanner->appendToEnd(String(testCase.inputHTML)); |
| 166 m_scanner->scan(&preloader, baseURL); |
| 167 |
| 168 preloader.preloadRequestVerification(testCase.type, testCase.preloadedUR
L, testCase.outputBaseURL, testCase.resourceWidth, testCase.referrerPolicy); |
| 169 } |
| 170 |
| 145 private: | 171 private: |
| 146 OwnPtr<DummyPageHolder> m_dummyPageHolder; | 172 OwnPtr<DummyPageHolder> m_dummyPageHolder; |
| 147 OwnPtr<HTMLPreloadScanner> m_scanner; | 173 OwnPtr<HTMLPreloadScanner> m_scanner; |
| 148 }; | 174 }; |
| 149 | 175 |
| 150 TEST_F(HTMLPreloadScannerTest, testImages) | 176 TEST_F(HTMLPreloadScannerTest, testImages) |
| 151 { | 177 { |
| 152 TestCase testCases[] = { | 178 TestCase testCases[] = { |
| 153 {"http://example.test", "<img src='bla.gif'>", "bla.gif", "http://exampl
e.test/", Resource::Image, 0}, | 179 {"http://example.test", "<img src='bla.gif'>", "bla.gif", "http://exampl
e.test/", Resource::Image, 0}, |
| 154 {"http://example.test", "<img srcset='bla.gif 320w, blabla.gif 640w'>",
"blabla.gif", "http://example.test/", Resource::Image, 0}, | 180 {"http://example.test", "<img srcset='bla.gif 320w, blabla.gif 640w'>",
"blabla.gif", "http://example.test/", Resource::Image, 0}, |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 {"http://example.test", "<picture><source sizes='50vw' srcset='srcset_bl
a.gif'><img src='bla.gif'></picture>", "srcset_bla.gif", "http://example.test/",
Resource::Image, 250}, | 316 {"http://example.test", "<picture><source sizes='50vw' srcset='srcset_bl
a.gif'><img src='bla.gif'></picture>", "srcset_bla.gif", "http://example.test/",
Resource::Image, 250}, |
| 291 {"http://example.test", "<picture><source sizes='50vw' srcset='srcset_bl
a.gif'><img sizes='50w' src='bla.gif'></picture>", "srcset_bla.gif", "http://exa
mple.test/", Resource::Image, 250}, | 317 {"http://example.test", "<picture><source sizes='50vw' srcset='srcset_bl
a.gif'><img sizes='50w' src='bla.gif'></picture>", "srcset_bla.gif", "http://exa
mple.test/", Resource::Image, 250}, |
| 292 {"http://example.test", "<picture><source srcset='srcset_bla.gif' sizes=
'50vw'><img sizes='50w' src='bla.gif'></picture>", "srcset_bla.gif", "http://exa
mple.test/", Resource::Image, 250}, | 318 {"http://example.test", "<picture><source srcset='srcset_bla.gif' sizes=
'50vw'><img sizes='50w' src='bla.gif'></picture>", "srcset_bla.gif", "http://exa
mple.test/", Resource::Image, 250}, |
| 293 {"http://example.test", "<picture><source srcset='srcset_bla.gif'><img s
izes='50w' src='bla.gif'></picture>", "srcset_bla.gif", "http://example.test/",
Resource::Image, 0}, | 319 {"http://example.test", "<picture><source srcset='srcset_bla.gif'><img s
izes='50w' src='bla.gif'></picture>", "srcset_bla.gif", "http://example.test/",
Resource::Image, 0}, |
| 294 }; | 320 }; |
| 295 | 321 |
| 296 for (const auto& testCase : testCases) | 322 for (const auto& testCase : testCases) |
| 297 test(testCase); | 323 test(testCase); |
| 298 } | 324 } |
| 299 | 325 |
| 326 TEST_F(HTMLPreloadScannerTest, testReferrerPolicy) |
| 327 { |
| 328 ReferrerPolicyTestCase testCases[] = { |
| 329 { "http://example.test", "<img src='bla.gif'/>", "bla.gif", "http://exam
ple.test/", Resource::Image, 0, ReferrerPolicyDefault }, |
| 330 { "http://example.test", "<img referrerpolicy='origin' src='bla.gif'/>",
"bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPolicyOrigin }, |
| 331 { "http://example.test", "<meta name='referrer' content='not-a-valid-pol
icy'><img src='bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image,
0, ReferrerPolicyDefault }, |
| 332 { "http://example.test", "<img referrerpolicy='origin' referrerpolicy='o
rigin-when-crossorigin' src='bla.gif'/>", "bla.gif", "http://example.test/", Res
ource::Image, 0, ReferrerPolicyOrigin }, |
| 333 { "http://example.test", "<img referrerpolicy='not-a-valid-policy' src='
bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPoli
cyDefault }, |
| 334 { "http://example.test", "<meta name='referrer' content='no-referrer'><i
mg referrerpolicy='origin' src='bla.gif'/>", "bla.gif", "http://example.test/",
Resource::Image, 0, ReferrerPolicyOrigin }, |
| 335 // The scanner's state is not reset between test cases, so all subsequen
t test cases have a document referrer policy of no-referrer. |
| 336 { "http://example.test", "<img referrerpolicy='not-a-valid-policy' src='
bla.gif'/>", "bla.gif", "http://example.test/", Resource::Image, 0, ReferrerPoli
cyNever }, |
| 337 { "http://example.test", "<img src='bla.gif'/>", "bla.gif", "http://exam
ple.test/", Resource::Image, 0, ReferrerPolicyNever } |
| 338 }; |
| 339 |
| 340 for (const auto& testCase : testCases) |
| 341 test(testCase); |
| 342 } |
| 343 |
| 300 } // namespace blink | 344 } // namespace blink |
| OLD | NEW |