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 "core/loader/LinkLoader.h" | 5 #include "core/loader/LinkLoader.h" |
6 | 6 |
7 #include "core/fetch/MemoryCache.h" | 7 #include "core/fetch/MemoryCache.h" |
8 #include "core/fetch/ResourceFetcher.h" | 8 #include "core/fetch/ResourceFetcher.h" |
9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
10 #include "core/html/LinkRelAttribute.h" | 10 #include "core/html/LinkRelAttribute.h" |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 mutable bool m_isCrossOrigin; | 84 mutable bool m_isCrossOrigin; |
85 | 85 |
86 }; | 86 }; |
87 | 87 |
88 TEST(LinkLoaderTest, Preload) | 88 TEST(LinkLoaderTest, Preload) |
89 { | 89 { |
90 struct TestCase { | 90 struct TestCase { |
91 const char* href; | 91 const char* href; |
92 const char* as; | 92 const char* as; |
93 const char* type; | 93 const char* type; |
| 94 const char* media; |
94 const ResourceLoadPriority priority; | 95 const ResourceLoadPriority priority; |
95 const WebURLRequest::RequestContext context; | 96 const WebURLRequest::RequestContext context; |
96 const bool linkLoaderShouldLoadValue; | 97 const bool linkLoaderShouldLoadValue; |
97 const bool expectingLoad; | 98 const bool expectingLoad; |
98 const char* accept; | 99 const char* accept; |
99 } cases[] = { | 100 } cases[] = { |
100 {"http://example.test/cat.jpg", "image", "", ResourceLoadPriorityVeryLow
, WebURLRequest::RequestContextImage, true, true, "image/webp,image/*,*/*;q=0.8"
}, | 101 {"http://example.test/cat.jpg", "image", "", "", ResourceLoadPriorityVer
yLow, WebURLRequest::RequestContextImage, true, true, "image/webp,image/*,*/*;q=
0.8"}, |
101 {"http://example.test/cat.js", "script", "", ResourceLoadPriorityMedium,
WebURLRequest::RequestContextScript, true, true, "*/*"}, | 102 {"http://example.test/cat.js", "script", "", "", ResourceLoadPriorityMed
ium, WebURLRequest::RequestContextScript, true, true, "*/*"}, |
102 {"http://example.test/cat.css", "style", "", ResourceLoadPriorityHigh, W
ebURLRequest::RequestContextStyle, true, true, "text/css,*/*;q=0.1"}, | 103 {"http://example.test/cat.css", "style", "", "", ResourceLoadPriorityHig
h, WebURLRequest::RequestContextStyle, true, true, "text/css,*/*;q=0.1"}, |
103 // TODO(yoav): It doesn't seem like the audio context is ever used. That
should probably be fixed (or we can consolidate audio and video). | 104 // TODO(yoav): It doesn't seem like the audio context is ever used. That
should probably be fixed (or we can consolidate audio and video). |
104 {"http://example.test/cat.wav", "media", "", ResourceLoadPriorityLow, We
bURLRequest::RequestContextVideo, true, true, ""}, | 105 {"http://example.test/cat.wav", "media", "", "", ResourceLoadPriorityLow
, WebURLRequest::RequestContextVideo, true, true, ""}, |
105 {"http://example.test/cat.mp4", "media", "", ResourceLoadPriorityLow, We
bURLRequest::RequestContextVideo, true, true, ""}, | 106 {"http://example.test/cat.mp4", "media", "", "", ResourceLoadPriorityLow
, WebURLRequest::RequestContextVideo, true, true, ""}, |
106 {"http://example.test/cat.vtt", "track", "", ResourceLoadPriorityLow, We
bURLRequest::RequestContextTrack, true, true, ""}, | 107 {"http://example.test/cat.vtt", "track", "", "", ResourceLoadPriorityLow
, WebURLRequest::RequestContextTrack, true, true, ""}, |
107 {"http://example.test/cat.woff", "font", "", ResourceLoadPriorityMedium,
WebURLRequest::RequestContextFont, true, true, ""}, | 108 {"http://example.test/cat.woff", "font", "", "", ResourceLoadPriorityMed
ium, WebURLRequest::RequestContextFont, true, true, ""}, |
108 // TODO(yoav): subresource should be *very* low priority (rather than lo
w). | 109 // TODO(yoav): subresource should be *very* low priority (rather than lo
w). |
109 {"http://example.test/cat.empty", "", "", ResourceLoadPriorityLow, WebUR
LRequest::RequestContextSubresource, true, true, ""}, | 110 {"http://example.test/cat.empty", "", "", "", ResourceLoadPriorityLow, W
ebURLRequest::RequestContextSubresource, true, true, ""}, |
110 {"http://example.test/cat.blob", "blabla", "", ResourceLoadPriorityLow,
WebURLRequest::RequestContextSubresource, false, false, ""}, | 111 {"http://example.test/cat.blob", "blabla", "", "", ResourceLoadPriorityL
ow, WebURLRequest::RequestContextSubresource, false, false, ""}, |
111 {"bla://example.test/cat.gif", "image", "", ResourceLoadPriorityUnresolv
ed, WebURLRequest::RequestContextImage, false, false, ""}, | 112 {"bla://example.test/cat.gif", "image", "", "", ResourceLoadPriorityUnre
solved, WebURLRequest::RequestContextImage, false, false, ""}, |
112 // MIME type tests | 113 // MIME type tests |
113 {"http://example.test/cat.webp", "image", "image/webp", ResourceLoadPrio
rityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,image/*
,*/*;q=0.8"}, | 114 {"http://example.test/cat.webp", "image", "image/webp", "", ResourceLoad
PriorityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,ima
ge/*,*/*;q=0.8"}, |
114 {"http://example.test/cat.svg", "image", "image/svg+xml", ResourceLoadPr
iorityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,image
/*,*/*;q=0.8"}, | 115 {"http://example.test/cat.svg", "image", "image/svg+xml", "", ResourceLo
adPriorityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,i
mage/*,*/*;q=0.8"}, |
115 {"http://example.test/cat.jxr", "image", "image/jxr", ResourceLoadPriori
tyUnresolved, WebURLRequest::RequestContextImage, false, false, ""}, | 116 {"http://example.test/cat.jxr", "image", "image/jxr", "", ResourceLoadPr
iorityUnresolved, WebURLRequest::RequestContextImage, false, false, ""}, |
116 {"http://example.test/cat.js", "script", "text/javascript", ResourceLoad
PriorityMedium, WebURLRequest::RequestContextScript, true, true, "*/*"}, | 117 {"http://example.test/cat.js", "script", "text/javascript", "", Resource
LoadPriorityMedium, WebURLRequest::RequestContextScript, true, true, "*/*"}, |
117 {"http://example.test/cat.js", "script", "text/coffeescript", ResourceLo
adPriorityUnresolved, WebURLRequest::RequestContextScript, false, false, ""}, | 118 {"http://example.test/cat.js", "script", "text/coffeescript", "", Resour
ceLoadPriorityUnresolved, WebURLRequest::RequestContextScript, false, false, ""}
, |
118 {"http://example.test/cat.css", "style", "text/css", ResourceLoadPriorit
yHigh, WebURLRequest::RequestContextStyle, true, true, "text/css,*/*;q=0.1"}, | 119 {"http://example.test/cat.css", "style", "text/css", "", ResourceLoadPri
orityHigh, WebURLRequest::RequestContextStyle, true, true, "text/css,*/*;q=0.1"}
, |
119 {"http://example.test/cat.css", "style", "text/sass", ResourceLoadPriori
tyUnresolved, WebURLRequest::RequestContextStyle, false, false, ""}, | 120 {"http://example.test/cat.css", "style", "text/sass", "", ResourceLoadPr
iorityUnresolved, WebURLRequest::RequestContextStyle, false, false, ""}, |
120 {"http://example.test/cat.wav", "media", "audio/wav", ResourceLoadPriori
tyLow, WebURLRequest::RequestContextVideo, true, true, ""}, | 121 {"http://example.test/cat.wav", "media", "audio/wav", "", ResourceLoadPr
iorityLow, WebURLRequest::RequestContextVideo, true, true, ""}, |
121 {"http://example.test/cat.wav", "media", "audio/mp57", ResourceLoadPrior
ityUnresolved, WebURLRequest::RequestContextVideo, false, false, ""}, | 122 {"http://example.test/cat.wav", "media", "audio/mp57", "", ResourceLoadP
riorityUnresolved, WebURLRequest::RequestContextVideo, false, false, ""}, |
122 {"http://example.test/cat.webm", "media", "video/webm", ResourceLoadPrio
rityLow, WebURLRequest::RequestContextVideo, true, true, ""}, | 123 {"http://example.test/cat.webm", "media", "video/webm", "", ResourceLoad
PriorityLow, WebURLRequest::RequestContextVideo, true, true, ""}, |
123 {"http://example.test/cat.mp199", "media", "video/mp199", ResourceLoadPr
iorityUnresolved, WebURLRequest::RequestContextVideo, false, false, ""}, | 124 {"http://example.test/cat.mp199", "media", "video/mp199", "", ResourceLo
adPriorityUnresolved, WebURLRequest::RequestContextVideo, false, false, ""}, |
124 {"http://example.test/cat.vtt", "track", "text/vtt", ResourceLoadPriorit
yLow, WebURLRequest::RequestContextTrack, true, true, ""}, | 125 {"http://example.test/cat.vtt", "track", "text/vtt", "", ResourceLoadPri
orityLow, WebURLRequest::RequestContextTrack, true, true, ""}, |
125 {"http://example.test/cat.vtt", "track", "text/subtitlething", ResourceL
oadPriorityUnresolved, WebURLRequest::RequestContextTrack, false, false, ""}, | 126 {"http://example.test/cat.vtt", "track", "text/subtitlething", "", Resou
rceLoadPriorityUnresolved, WebURLRequest::RequestContextTrack, false, false, ""}
, |
126 {"http://example.test/cat.woff", "font", "font/woff2", ResourceLoadPrior
ityMedium, WebURLRequest::RequestContextFont, true, true, ""}, | 127 {"http://example.test/cat.woff", "font", "font/woff2", "", ResourceLoadP
riorityMedium, WebURLRequest::RequestContextFont, true, true, ""}, |
127 {"http://example.test/cat.woff", "font", "font/woff84", ResourceLoadPrio
rityUnresolved, WebURLRequest::RequestContextFont, false, false, ""}, | 128 {"http://example.test/cat.woff", "font", "font/woff84", "", ResourceLoad
PriorityUnresolved, WebURLRequest::RequestContextFont, false, false, ""}, |
128 {"http://example.test/cat.empty", "", "foo/bar", ResourceLoadPriorityLow
, WebURLRequest::RequestContextSubresource, true, true, ""}, | 129 {"http://example.test/cat.empty", "", "foo/bar", "", ResourceLoadPriorit
yLow, WebURLRequest::RequestContextSubresource, true, true, ""}, |
129 {"http://example.test/cat.blob", "blabla", "foo/bar", ResourceLoadPriori
tyLow, WebURLRequest::RequestContextSubresource, false, false, ""}, | 130 {"http://example.test/cat.blob", "blabla", "foo/bar", "", ResourceLoadPr
iorityLow, WebURLRequest::RequestContextSubresource, false, false, ""}, |
| 131 // Media tests |
| 132 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px
)", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true,
"image/webp,image/*,*/*;q=0.8"}, |
| 133 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 400px
)", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, true, fa
lse, ""}, |
| 134 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px
)", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, false, fals
e, "image/webp,image/*,*/*;q=0.8"}, |
130 }; | 135 }; |
131 | 136 |
132 // Test the cases with a single header | 137 // Test the cases with a single header |
133 for (const auto& testCase : cases) { | 138 for (const auto& testCase : cases) { |
134 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 139 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
135 dummyPageHolder->frame().settings()->setScriptEnabled(true); | 140 dummyPageHolder->frame().settings()->setScriptEnabled(true); |
136 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.linkLoaderShouldLoadValue); | 141 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.linkLoaderShouldLoadValue); |
137 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); | 142 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); |
138 KURL hrefURL = KURL(KURL(), testCase.href); | 143 KURL hrefURL = KURL(KURL(), testCase.href); |
139 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); | 144 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); |
140 loader->loadLink(LinkRelAttribute("preload"), | 145 loader->loadLink(LinkRelAttribute("preload"), |
141 CrossOriginAttributeNotSet, | 146 CrossOriginAttributeNotSet, |
142 testCase.type, | 147 testCase.type, |
143 testCase.as, | 148 testCase.as, |
| 149 testCase.media, |
144 hrefURL, | 150 hrefURL, |
145 dummyPageHolder->document(), | 151 dummyPageHolder->document(), |
146 NetworkHintsMock()); | 152 NetworkHintsMock()); |
147 ASSERT(dummyPageHolder->document().fetcher()); | 153 ASSERT(dummyPageHolder->document().fetcher()); |
148 WillBeHeapListHashSet<RefPtrWillBeMember<Resource>>* preloads = dummyPag
eHolder->document().fetcher()->preloads(); | 154 WillBeHeapListHashSet<RefPtrWillBeMember<Resource>>* preloads = dummyPag
eHolder->document().fetcher()->preloads(); |
149 if (testCase.expectingLoad) { | 155 if (testCase.expectingLoad) { |
150 if (!preloads) | 156 if (!preloads) |
151 fprintf(stderr, "Unexpected result %s %s %s\n", testCase.href, t
estCase.as, testCase.type); | 157 fprintf(stderr, "Unexpected result %s %s %s\n", testCase.href, t
estCase.as, testCase.type); |
152 ASSERT_NE(nullptr, preloads); | 158 ASSERT_NE(nullptr, preloads); |
153 } else { | 159 } else { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 196 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
191 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); | 197 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); |
192 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); | 198 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); |
193 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); | 199 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); |
194 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); | 200 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); |
195 NetworkHintsMock networkHints; | 201 NetworkHintsMock networkHints; |
196 loader->loadLink(LinkRelAttribute("dns-prefetch"), | 202 loader->loadLink(LinkRelAttribute("dns-prefetch"), |
197 CrossOriginAttributeNotSet, | 203 CrossOriginAttributeNotSet, |
198 String(), | 204 String(), |
199 String(), | 205 String(), |
| 206 String(), |
200 hrefURL, | 207 hrefURL, |
201 dummyPageHolder->document(), | 208 dummyPageHolder->document(), |
202 networkHints); | 209 networkHints); |
203 ASSERT_FALSE(networkHints.didPreconnect()); | 210 ASSERT_FALSE(networkHints.didPreconnect()); |
204 ASSERT_EQ(testCase.shouldLoad, networkHints.didDnsPrefetch()); | 211 ASSERT_EQ(testCase.shouldLoad, networkHints.didDnsPrefetch()); |
205 } | 212 } |
206 } | 213 } |
207 | 214 |
208 TEST(LinkLoaderTest, Preconnect) | 215 TEST(LinkLoaderTest, Preconnect) |
209 { | 216 { |
(...skipping 14 matching lines...) Expand all Loading... |
224 for (const auto& testCase : cases) { | 231 for (const auto& testCase : cases) { |
225 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 232 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
226 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); | 233 OwnPtrWillBePersistent<MockLinkLoaderClient> loaderClient = MockLinkLoad
erClient::create(testCase.shouldLoad); |
227 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); | 234 OwnPtrWillBeRawPtr<LinkLoader> loader = LinkLoader::create(loaderClient.
get()); |
228 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); | 235 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co
m")), testCase.href); |
229 NetworkHintsMock networkHints; | 236 NetworkHintsMock networkHints; |
230 loader->loadLink(LinkRelAttribute("preconnect"), | 237 loader->loadLink(LinkRelAttribute("preconnect"), |
231 testCase.crossOrigin, | 238 testCase.crossOrigin, |
232 String(), | 239 String(), |
233 String(), | 240 String(), |
| 241 String(), |
234 hrefURL, | 242 hrefURL, |
235 dummyPageHolder->document(), | 243 dummyPageHolder->document(), |
236 networkHints); | 244 networkHints); |
237 ASSERT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); | 245 ASSERT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); |
238 ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); | 246 ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); |
239 ASSERT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); | 247 ASSERT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); |
240 } | 248 } |
241 } | 249 } |
242 | 250 |
243 } // namespace blink | 251 } // namespace blink |
OLD | NEW |