| 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 18 matching lines...) Expand all Loading... |
| 29 | 29 |
| 30 typedef struct { | 30 typedef struct { |
| 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 } PreconnectTestCase; | 35 } PreconnectTestCase; |
| 36 | 36 |
| 37 class MockHTMLResourcePreloader : public ResourcePreloader { | 37 class MockHTMLResourcePreloader : public ResourcePreloader { |
| 38 public: | 38 public: |
| 39 void preloadRequestVerification(Resource::Type type, const String& url, cons
t String& baseURL, int width) | 39 void preloadRequestVerification(Resource::Type type, const String& url, cons
t String& baseURL, int width, const ClientHintsPreferences& preferences) |
| 40 { | 40 { |
| 41 EXPECT_FALSE(m_preloadRequest->isPreconnect()); | 41 EXPECT_FALSE(m_preloadRequest->isPreconnect()); |
| 42 EXPECT_EQ(type, m_preloadRequest->resourceType()); | 42 EXPECT_EQ(type, m_preloadRequest->resourceType()); |
| 43 EXPECT_STREQ(url.ascii().data(), m_preloadRequest->resourceURL().ascii()
.data()); | 43 EXPECT_STREQ(url.ascii().data(), m_preloadRequest->resourceURL().ascii()
.data()); |
| 44 EXPECT_STREQ(baseURL.ascii().data(), m_preloadRequest->baseURL().string(
).ascii().data()); | 44 EXPECT_STREQ(baseURL.ascii().data(), m_preloadRequest->baseURL().string(
).ascii().data()); |
| 45 EXPECT_EQ(width, m_preloadRequest->resourceWidth()); | 45 EXPECT_EQ(width, m_preloadRequest->resourceWidth()); |
| 46 EXPECT_EQ(preferences.shouldSendDPR(), m_preloadRequest->preferences().s
houldSendDPR()); |
| 47 EXPECT_EQ(preferences.shouldSendResourceWidth(), m_preloadRequest->prefe
rences().shouldSendResourceWidth()); |
| 48 EXPECT_EQ(preferences.shouldSendViewportWidth(), m_preloadRequest->prefe
rences().shouldSendViewportWidth()); |
| 46 } | 49 } |
| 47 | 50 |
| 48 void preconnectRequestVerification(const String& host, CrossOriginAttributeV
alue crossOrigin) | 51 void preconnectRequestVerification(const String& host, CrossOriginAttributeV
alue crossOrigin) |
| 49 { | 52 { |
| 50 if (!host.isNull()) { | 53 if (!host.isNull()) { |
| 51 EXPECT_TRUE(m_preloadRequest->isPreconnect()); | 54 EXPECT_TRUE(m_preloadRequest->isPreconnect()); |
| 52 EXPECT_STREQ(m_preloadRequest->resourceURL().ascii().data(), host.as
cii().data()); | 55 EXPECT_STREQ(m_preloadRequest->resourceURL().ascii().data(), host.as
cii().data()); |
| 53 EXPECT_EQ(m_preloadRequest->isCORS(), crossOrigin != CrossOriginAttr
ibuteNotSet); | 56 EXPECT_EQ(m_preloadRequest->isCORS(), crossOrigin != CrossOriginAttr
ibuteNotSet); |
| 54 EXPECT_EQ(m_preloadRequest->isAllowCredentials(), crossOrigin == Cro
ssOriginAttributeUseCredentials); | 57 EXPECT_EQ(m_preloadRequest->isAllowCredentials(), crossOrigin == Cro
ssOriginAttributeUseCredentials); |
| 55 } | 58 } |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 runSetUp(true); | 108 runSetUp(true); |
| 106 } | 109 } |
| 107 | 110 |
| 108 void test(TestCase testCase) | 111 void test(TestCase testCase) |
| 109 { | 112 { |
| 110 MockHTMLResourcePreloader preloader; | 113 MockHTMLResourcePreloader preloader; |
| 111 KURL baseURL(ParsedURLString, testCase.baseURL); | 114 KURL baseURL(ParsedURLString, testCase.baseURL); |
| 112 m_scanner->appendToEnd(String(testCase.inputHTML)); | 115 m_scanner->appendToEnd(String(testCase.inputHTML)); |
| 113 m_scanner->scan(&preloader, baseURL); | 116 m_scanner->scan(&preloader, baseURL); |
| 114 | 117 |
| 115 preloader.preloadRequestVerification(testCase.type, testCase.preloadedUR
L, testCase.outputBaseURL, testCase.resourceWidth); | 118 preloader.preloadRequestVerification(testCase.type, testCase.preloadedUR
L, testCase.outputBaseURL, testCase.resourceWidth, testCase.preferences); |
| 116 } | 119 } |
| 117 | 120 |
| 118 void test(PreconnectTestCase testCase) | 121 void test(PreconnectTestCase testCase) |
| 119 { | 122 { |
| 120 MockHTMLResourcePreloader preloader; | 123 MockHTMLResourcePreloader preloader; |
| 121 KURL baseURL(ParsedURLString, testCase.baseURL); | 124 KURL baseURL(ParsedURLString, testCase.baseURL); |
| 122 m_scanner->appendToEnd(String(testCase.inputHTML)); | 125 m_scanner->appendToEnd(String(testCase.inputHTML)); |
| 123 m_scanner->scan(&preloader, baseURL); | 126 m_scanner->scan(&preloader, baseURL); |
| 124 preloader.preconnectRequestVerification(testCase.preconnectedHost, testC
ase.crossOrigin); | 127 preloader.preconnectRequestVerification(testCase.preconnectedHost, testC
ase.crossOrigin); |
| 125 } | 128 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 { | 224 { |
| 222 ClientHintsPreferences dpr; | 225 ClientHintsPreferences dpr; |
| 223 ClientHintsPreferences resourceWidth; | 226 ClientHintsPreferences resourceWidth; |
| 224 ClientHintsPreferences all; | 227 ClientHintsPreferences all; |
| 225 ClientHintsPreferences viewportWidth; | 228 ClientHintsPreferences viewportWidth; |
| 226 dpr.setShouldSendDPR(true); | 229 dpr.setShouldSendDPR(true); |
| 227 all.setShouldSendDPR(true); | 230 all.setShouldSendDPR(true); |
| 228 resourceWidth.setShouldSendResourceWidth(true); | 231 resourceWidth.setShouldSendResourceWidth(true); |
| 229 all.setShouldSendResourceWidth(true); | 232 all.setShouldSendResourceWidth(true); |
| 230 viewportWidth.setShouldSendViewportWidth(true); | 233 viewportWidth.setShouldSendViewportWidth(true); |
| 234 all.setShouldSendViewportWidth(true); |
| 231 TestCase testCases[] = { | 235 TestCase testCases[] = { |
| 232 {"http://example.test", "<meta http-equiv='accept-ch' content='bla'><img
srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/",
Resource::Image, 0}, | 236 {"http://example.test", "<meta http-equiv='accept-ch' content='bla'><img
srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/",
Resource::Image, 0}, |
| 233 {"http://example.test", "<meta http-equiv='accept-ch' content='dprw'><im
g srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/"
, Resource::Image, 0}, | 237 {"http://example.test", "<meta http-equiv='accept-ch' content='dprw'><im
g srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/"
, Resource::Image, 0}, |
| 234 {"http://example.test", "<meta http-equiv='accept-ch'><img srcset='bla.g
if 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Ima
ge, 0}, | 238 {"http://example.test", "<meta http-equiv='accept-ch'><img srcset='bla.g
if 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Ima
ge, 0}, |
| 235 {"http://example.test", "<meta http-equiv='accept-ch' content='dpr \t'><
img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test
/", Resource::Image, 0, dpr}, | 239 {"http://example.test", "<meta http-equiv='accept-ch' content='dpr \t'><
img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test
/", Resource::Image, 0, dpr}, |
| 236 {"http://example.test", "<meta http-equiv='accept-ch' content='bla,dpr \
t'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.
test/", Resource::Image, 0, dpr}, | 240 {"http://example.test", "<meta http-equiv='accept-ch' content='bla,dpr \
t'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.
test/", Resource::Image, 0, dpr}, |
| 237 {"http://example.test", "<meta http-equiv='accept-ch' content=' width
'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.t
est/", Resource::Image, 0, resourceWidth}, | 241 {"http://example.test", "<meta http-equiv='accept-ch' content=' width
'><img sizes='100vw' srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "ht
tp://example.test/", Resource::Image, 500, resourceWidth}, |
| 238 {"http://example.test", "<meta http-equiv='accept-ch' content=' width
, wutever'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://
example.test/", Resource::Image, 0, resourceWidth}, | 242 {"http://example.test", "<meta http-equiv='accept-ch' content=' width
, wutever'><img sizes='300px' srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.
gif", "http://example.test/", Resource::Image, 300, resourceWidth}, |
| 239 {"http://example.test", "<meta http-equiv='accept-ch' content=' viewpor
t-width '><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://
example.test/", Resource::Image, 0, resourceWidth}, | 243 {"http://example.test", "<meta http-equiv='accept-ch' content=' viewpor
t-width '><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://
example.test/", Resource::Image, 0, viewportWidth}, |
| 240 {"http://example.test", "<meta http-equiv='accept-ch' content=' viewpor
t-width , wutever'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif",
"http://example.test/", Resource::Image, 0, resourceWidth}, | 244 {"http://example.test", "<meta http-equiv='accept-ch' content=' viewpor
t-width , wutever'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif",
"http://example.test/", Resource::Image, 0, viewportWidth}, |
| 241 {"http://example.test", "<meta http-equiv='accept-ch' content=' viewpor
t-width ,width, wutever, dpr \t'><img srcset='bla.gif 320w, blabla.gif 640w'>",
"blabla.gif", "http://example.test/", Resource::Image, 0, all}, | 245 {"http://example.test", "<meta http-equiv='accept-ch' content=' viewpor
t-width ,width, wutever, dpr \t'><img sizes='90vw' srcset='bla.gif 320w, blabla
.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 450, all}, |
| 242 }; | 246 }; |
| 243 | 247 |
| 244 for (const auto& testCase : testCases) | 248 for (const auto& testCase : testCases) { |
| 249 runSetUp(false); |
| 245 test(testCase); | 250 test(testCase); |
| 251 } |
| 246 } | 252 } |
| 247 | 253 |
| 248 TEST_F(HTMLPreloadScannerTest, testPreconnect) | 254 TEST_F(HTMLPreloadScannerTest, testPreconnect) |
| 249 { | 255 { |
| 250 PreconnectTestCase testCases[] = { | 256 PreconnectTestCase testCases[] = { |
| 251 {"http://example.test", "<link rel=preconnect href=http://example2.test>
", "http://example2.test", CrossOriginAttributeNotSet}, | 257 {"http://example.test", "<link rel=preconnect href=http://example2.test>
", "http://example2.test", CrossOriginAttributeNotSet}, |
| 252 {"http://example.test", "<link rel=preconnect href=http://example2.test
crossorigin=anonymous>", "http://example2.test", CrossOriginAttributeAnonymous}, | 258 {"http://example.test", "<link rel=preconnect href=http://example2.test
crossorigin=anonymous>", "http://example2.test", CrossOriginAttributeAnonymous}, |
| 253 {"http://example.test", "<link rel=preconnect href=http://example2.test
crossorigin='use-credentials'>", "http://example2.test", CrossOriginAttributeUse
Credentials}, | 259 {"http://example.test", "<link rel=preconnect href=http://example2.test
crossorigin='use-credentials'>", "http://example2.test", CrossOriginAttributeUse
Credentials}, |
| 254 {"http://example.test", "<link rel=preconnected href=http://example2.tes
t crossorigin='use-credentials'>", nullptr, CrossOriginAttributeNotSet}, | 260 {"http://example.test", "<link rel=preconnected href=http://example2.tes
t crossorigin='use-credentials'>", nullptr, CrossOriginAttributeNotSet}, |
| 255 {"http://example.test", "<link rel=preconnect href=ws://example2.test cr
ossorigin='use-credentials'>", nullptr, CrossOriginAttributeNotSet}, | 261 {"http://example.test", "<link rel=preconnect href=ws://example2.test cr
ossorigin='use-credentials'>", nullptr, CrossOriginAttributeNotSet}, |
| 256 }; | 262 }; |
| 257 | 263 |
| 258 for (const auto& testCase : testCases) | 264 for (const auto& testCase : testCases) |
| 259 test(testCase); | 265 test(testCase); |
| 260 } | 266 } |
| 261 | 267 |
| 262 } // namespace blink | 268 } // namespace blink |
| OLD | NEW |