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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 char* media; |
95 const ResourceLoadPriority priority; | 95 const ResourceLoadPriority priority; |
96 const WebURLRequest::RequestContext context; | 96 const WebURLRequest::RequestContext context; |
97 const bool linkLoaderShouldLoadValue; | 97 const bool linkLoaderShouldLoadValue; |
98 const bool expectingLoad; | 98 const bool expectingLoad; |
99 const char* accept; | |
100 } cases[] = { | 99 } cases[] = { |
101 {"http://example.test/cat.jpg", "image", "", "", ResourceLoadPriorityVer
yLow, WebURLRequest::RequestContextImage, true, true, "image/webp,image/*,*/*;q=
0.8"}, | 100 {"http://example.test/cat.jpg", "image", "", "", ResourceLoadPriorityVer
yLow, WebURLRequest::RequestContextImage, true, true}, |
102 {"http://example.test/cat.js", "script", "", "", ResourceLoadPriorityMed
ium, WebURLRequest::RequestContextScript, true, true, "*/*"}, | 101 {"http://example.test/cat.js", "script", "", "", ResourceLoadPriorityMed
ium, WebURLRequest::RequestContextScript, true, true}, |
103 {"http://example.test/cat.css", "style", "", "", ResourceLoadPriorityHig
h, WebURLRequest::RequestContextStyle, true, true, "text/css,*/*;q=0.1"}, | 102 {"http://example.test/cat.css", "style", "", "", ResourceLoadPriorityHig
h, WebURLRequest::RequestContextStyle, true, true}, |
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). | 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). |
105 {"http://example.test/cat.wav", "media", "", "", ResourceLoadPriorityLow
, WebURLRequest::RequestContextVideo, true, true, ""}, | 104 {"http://example.test/cat.wav", "media", "", "", ResourceLoadPriorityLow
, WebURLRequest::RequestContextVideo, true, true}, |
106 {"http://example.test/cat.mp4", "media", "", "", ResourceLoadPriorityLow
, WebURLRequest::RequestContextVideo, true, true, ""}, | 105 {"http://example.test/cat.mp4", "media", "", "", ResourceLoadPriorityLow
, WebURLRequest::RequestContextVideo, true, true}, |
107 {"http://example.test/cat.vtt", "track", "", "", ResourceLoadPriorityLow
, WebURLRequest::RequestContextTrack, true, true, ""}, | 106 {"http://example.test/cat.vtt", "track", "", "", ResourceLoadPriorityLow
, WebURLRequest::RequestContextTrack, true, true}, |
108 {"http://example.test/cat.woff", "font", "", "", ResourceLoadPriorityMed
ium, WebURLRequest::RequestContextFont, true, true, ""}, | 107 {"http://example.test/cat.woff", "font", "", "", ResourceLoadPriorityMed
ium, WebURLRequest::RequestContextFont, true, true}, |
109 // TODO(yoav): subresource should be *very* low priority (rather than lo
w). | 108 // TODO(yoav): subresource should be *very* low priority (rather than lo
w). |
110 {"http://example.test/cat.empty", "", "", "", ResourceLoadPriorityLow, W
ebURLRequest::RequestContextSubresource, true, true, ""}, | 109 {"http://example.test/cat.empty", "", "", "", ResourceLoadPriorityLow, W
ebURLRequest::RequestContextSubresource, true, true}, |
111 {"http://example.test/cat.blob", "blabla", "", "", ResourceLoadPriorityL
ow, WebURLRequest::RequestContextSubresource, false, false, ""}, | 110 {"http://example.test/cat.blob", "blabla", "", "", ResourceLoadPriorityL
ow, WebURLRequest::RequestContextSubresource, false, false}, |
112 {"bla://example.test/cat.gif", "image", "", "", ResourceLoadPriorityUnre
solved, WebURLRequest::RequestContextImage, false, false, ""}, | 111 {"bla://example.test/cat.gif", "image", "", "", ResourceLoadPriorityUnre
solved, WebURLRequest::RequestContextImage, false, false}, |
113 // MIME type tests | 112 // MIME type tests |
114 {"http://example.test/cat.webp", "image", "image/webp", "", ResourceLoad
PriorityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,ima
ge/*,*/*;q=0.8"}, | 113 {"http://example.test/cat.webp", "image", "image/webp", "", ResourceLoad
PriorityVeryLow, WebURLRequest::RequestContextImage, true, true}, |
115 {"http://example.test/cat.svg", "image", "image/svg+xml", "", ResourceLo
adPriorityVeryLow, WebURLRequest::RequestContextImage, true, true, "image/webp,i
mage/*,*/*;q=0.8"}, | 114 {"http://example.test/cat.svg", "image", "image/svg+xml", "", ResourceLo
adPriorityVeryLow, WebURLRequest::RequestContextImage, true, true}, |
116 {"http://example.test/cat.jxr", "image", "image/jxr", "", ResourceLoadPr
iorityUnresolved, WebURLRequest::RequestContextImage, false, false, ""}, | 115 {"http://example.test/cat.jxr", "image", "image/jxr", "", ResourceLoadPr
iorityUnresolved, WebURLRequest::RequestContextImage, false, false}, |
117 {"http://example.test/cat.js", "script", "text/javascript", "", Resource
LoadPriorityMedium, WebURLRequest::RequestContextScript, true, true, "*/*"}, | 116 {"http://example.test/cat.js", "script", "text/javascript", "", Resource
LoadPriorityMedium, WebURLRequest::RequestContextScript, true, true}, |
118 {"http://example.test/cat.js", "script", "text/coffeescript", "", Resour
ceLoadPriorityUnresolved, WebURLRequest::RequestContextScript, false, false, ""}
, | 117 {"http://example.test/cat.js", "script", "text/coffeescript", "", Resour
ceLoadPriorityUnresolved, WebURLRequest::RequestContextScript, false, false}, |
119 {"http://example.test/cat.css", "style", "text/css", "", ResourceLoadPri
orityHigh, WebURLRequest::RequestContextStyle, true, true, "text/css,*/*;q=0.1"}
, | 118 {"http://example.test/cat.css", "style", "text/css", "", ResourceLoadPri
orityHigh, WebURLRequest::RequestContextStyle, true, true}, |
120 {"http://example.test/cat.css", "style", "text/sass", "", ResourceLoadPr
iorityUnresolved, WebURLRequest::RequestContextStyle, false, false, ""}, | 119 {"http://example.test/cat.css", "style", "text/sass", "", ResourceLoadPr
iorityUnresolved, WebURLRequest::RequestContextStyle, false, false}, |
121 {"http://example.test/cat.wav", "media", "audio/wav", "", ResourceLoadPr
iorityLow, WebURLRequest::RequestContextVideo, true, true, ""}, | 120 {"http://example.test/cat.wav", "media", "audio/wav", "", ResourceLoadPr
iorityLow, WebURLRequest::RequestContextVideo, true, true}, |
122 {"http://example.test/cat.wav", "media", "audio/mp57", "", ResourceLoadP
riorityUnresolved, WebURLRequest::RequestContextVideo, false, false, ""}, | 121 {"http://example.test/cat.wav", "media", "audio/mp57", "", ResourceLoadP
riorityUnresolved, WebURLRequest::RequestContextVideo, false, false}, |
123 {"http://example.test/cat.webm", "media", "video/webm", "", ResourceLoad
PriorityLow, WebURLRequest::RequestContextVideo, true, true, ""}, | 122 {"http://example.test/cat.webm", "media", "video/webm", "", ResourceLoad
PriorityLow, WebURLRequest::RequestContextVideo, true, true}, |
124 {"http://example.test/cat.mp199", "media", "video/mp199", "", ResourceLo
adPriorityUnresolved, WebURLRequest::RequestContextVideo, false, false, ""}, | 123 {"http://example.test/cat.mp199", "media", "video/mp199", "", ResourceLo
adPriorityUnresolved, WebURLRequest::RequestContextVideo, false, false}, |
125 {"http://example.test/cat.vtt", "track", "text/vtt", "", ResourceLoadPri
orityLow, WebURLRequest::RequestContextTrack, true, true, ""}, | 124 {"http://example.test/cat.vtt", "track", "text/vtt", "", ResourceLoadPri
orityLow, WebURLRequest::RequestContextTrack, true, true}, |
126 {"http://example.test/cat.vtt", "track", "text/subtitlething", "", Resou
rceLoadPriorityUnresolved, WebURLRequest::RequestContextTrack, false, false, ""}
, | 125 {"http://example.test/cat.vtt", "track", "text/subtitlething", "", Resou
rceLoadPriorityUnresolved, WebURLRequest::RequestContextTrack, false, false}, |
127 {"http://example.test/cat.woff", "font", "font/woff2", "", ResourceLoadP
riorityMedium, WebURLRequest::RequestContextFont, true, true, ""}, | 126 {"http://example.test/cat.woff", "font", "font/woff2", "", ResourceLoadP
riorityMedium, WebURLRequest::RequestContextFont, true, true}, |
128 {"http://example.test/cat.woff", "font", "font/woff84", "", ResourceLoad
PriorityUnresolved, WebURLRequest::RequestContextFont, false, false, ""}, | 127 {"http://example.test/cat.woff", "font", "font/woff84", "", ResourceLoad
PriorityUnresolved, WebURLRequest::RequestContextFont, false, false}, |
129 {"http://example.test/cat.empty", "", "foo/bar", "", ResourceLoadPriorit
yLow, WebURLRequest::RequestContextSubresource, true, true, ""}, | 128 {"http://example.test/cat.empty", "", "foo/bar", "", ResourceLoadPriorit
yLow, WebURLRequest::RequestContextSubresource, true, true}, |
130 {"http://example.test/cat.blob", "blabla", "foo/bar", "", ResourceLoadPr
iorityLow, WebURLRequest::RequestContextSubresource, false, false, ""}, | 129 {"http://example.test/cat.blob", "blabla", "foo/bar", "", ResourceLoadPr
iorityLow, WebURLRequest::RequestContextSubresource, false, false}, |
131 // Media tests | 130 // 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"}, | 131 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px
)", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, true, true}
, |
133 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 400px
)", ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, true, fa
lse, ""}, | 132 {"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"}, | 133 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px
)", ResourceLoadPriorityVeryLow, WebURLRequest::RequestContextImage, false, fals
e}, |
135 }; | 134 }; |
136 | 135 |
137 // Test the cases with a single header | 136 // Test the cases with a single header |
138 for (const auto& testCase : cases) { | 137 for (const auto& testCase : cases) { |
139 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); | 138 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz
e(500, 500)); |
140 dummyPageHolder->frame().settings()->setScriptEnabled(true); | 139 dummyPageHolder->frame().settings()->setScriptEnabled(true); |
141 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr
eate(testCase.linkLoaderShouldLoadValue); | 140 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr
eate(testCase.linkLoaderShouldLoadValue); |
142 LinkLoader* loader = LinkLoader::create(loaderClient.get()); | 141 LinkLoader* loader = LinkLoader::create(loaderClient.get()); |
143 KURL hrefURL = KURL(KURL(), testCase.href); | 142 KURL hrefURL = KURL(KURL(), testCase.href); |
144 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); | 143 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); |
(...skipping 16 matching lines...) Expand all Loading... |
161 } | 160 } |
162 if (preloads) { | 161 if (preloads) { |
163 if (testCase.priority == ResourceLoadPriorityUnresolved) { | 162 if (testCase.priority == ResourceLoadPriorityUnresolved) { |
164 ASSERT_EQ((unsigned)0, preloads->size()); | 163 ASSERT_EQ((unsigned)0, preloads->size()); |
165 } else { | 164 } else { |
166 ASSERT_EQ((unsigned)1, preloads->size()); | 165 ASSERT_EQ((unsigned)1, preloads->size()); |
167 if (preloads->size() > 0) { | 166 if (preloads->size() > 0) { |
168 Resource* resource = preloads->begin().get()->get(); | 167 Resource* resource = preloads->begin().get()->get(); |
169 ASSERT_EQ(testCase.priority, resource->resourceRequest().pri
ority()); | 168 ASSERT_EQ(testCase.priority, resource->resourceRequest().pri
ority()); |
170 ASSERT_EQ(testCase.context, resource->resourceRequest().requ
estContext()); | 169 ASSERT_EQ(testCase.context, resource->resourceRequest().requ
estContext()); |
171 ASSERT_STREQ(testCase.accept, resource->accept().getString()
.ascii().data()); | |
172 } | 170 } |
173 } | 171 } |
174 dummyPageHolder->document().fetcher()->clearPreloads(); | 172 dummyPageHolder->document().fetcher()->clearPreloads(); |
175 } | 173 } |
176 memoryCache()->evictResources(); | 174 memoryCache()->evictResources(); |
177 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); | 175 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); |
178 } | 176 } |
179 } | 177 } |
180 | 178 |
181 TEST(LinkLoaderTest, DNSPrefetch) | 179 TEST(LinkLoaderTest, DNSPrefetch) |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 hrefURL, | 240 hrefURL, |
243 dummyPageHolder->document(), | 241 dummyPageHolder->document(), |
244 networkHints); | 242 networkHints); |
245 ASSERT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); | 243 ASSERT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); |
246 ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); | 244 ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); |
247 ASSERT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); | 245 ASSERT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); |
248 } | 246 } |
249 } | 247 } |
250 | 248 |
251 } // namespace blink | 249 } // namespace blink |
OLD | NEW |