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 <base/macros.h> | 7 #include <base/macros.h> |
8 #include <memory> | 8 #include <memory> |
9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
10 #include "core/html/LinkRelAttribute.h" | 10 #include "core/html/LinkRelAttribute.h" |
11 #include "core/loader/DocumentLoader.h" | 11 #include "core/loader/DocumentLoader.h" |
12 #include "core/loader/LinkLoaderClient.h" | 12 #include "core/loader/LinkLoaderClient.h" |
13 #include "core/loader/NetworkHintsInterface.h" | 13 #include "core/loader/NetworkHintsInterface.h" |
14 #include "core/testing/DummyPageHolder.h" | 14 #include "core/testing/DummyPageHolder.h" |
15 #include "platform/loader/fetch/MemoryCache.h" | 15 #include "platform/loader/fetch/MemoryCache.h" |
16 #include "platform/loader/fetch/ResourceFetcher.h" | 16 #include "platform/loader/fetch/ResourceFetcher.h" |
17 #include "platform/loader/fetch/ResourceLoadPriority.h" | 17 #include "platform/loader/fetch/ResourceLoadPriority.h" |
18 #include "platform/testing/URLTestHelpers.h" | 18 #include "platform/testing/URLTestHelpers.h" |
19 #include "public/platform/Platform.h" | 19 #include "public/platform/Platform.h" |
20 #include "public/platform/WebURLLoaderMockFactory.h" | 20 #include "public/platform/WebURLLoaderMockFactory.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
22 | 22 |
23 namespace blink { | 23 namespace blink { |
24 | 24 |
| 25 namespace { |
| 26 |
25 class MockLinkLoaderClient final | 27 class MockLinkLoaderClient final |
26 : public GarbageCollectedFinalized<MockLinkLoaderClient>, | 28 : public GarbageCollectedFinalized<MockLinkLoaderClient>, |
27 public LinkLoaderClient { | 29 public LinkLoaderClient { |
28 USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient); | 30 USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient); |
29 | 31 |
30 public: | 32 public: |
31 static MockLinkLoaderClient* create(bool shouldLoad) { | 33 static MockLinkLoaderClient* create(bool shouldLoad) { |
32 return new MockLinkLoaderClient(shouldLoad); | 34 return new MockLinkLoaderClient(shouldLoad); |
33 } | 35 } |
34 | 36 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 bool isHTTPS() { return m_isHTTPS; } | 76 bool isHTTPS() { return m_isHTTPS; } |
75 bool isCrossOrigin() { return m_isCrossOrigin; } | 77 bool isCrossOrigin() { return m_isCrossOrigin; } |
76 | 78 |
77 private: | 79 private: |
78 mutable bool m_didDnsPrefetch = false; | 80 mutable bool m_didDnsPrefetch = false; |
79 mutable bool m_didPreconnect = false; | 81 mutable bool m_didPreconnect = false; |
80 mutable bool m_isHTTPS = false; | 82 mutable bool m_isHTTPS = false; |
81 mutable bool m_isCrossOrigin = false; | 83 mutable bool m_isCrossOrigin = false; |
82 }; | 84 }; |
83 | 85 |
84 TEST(LinkLoaderTest, Preload) { | 86 struct PreloadTestParams { |
85 struct TestCase { | 87 const char* href; |
86 const char* href; | 88 const char* as; |
87 const char* as; | 89 const char* type; |
88 const char* type; | 90 const char* media; |
89 const char* media; | 91 const ReferrerPolicy referrerPolicy; |
90 const ReferrerPolicy referrerPolicy; | 92 const ResourceLoadPriority priority; |
91 const ResourceLoadPriority priority; | 93 const WebURLRequest::RequestContext context; |
92 const WebURLRequest::RequestContext context; | 94 const bool linkLoaderShouldLoadValue; |
93 const bool linkLoaderShouldLoadValue; | 95 const bool expectingLoad; |
94 const bool expectingLoad; | 96 const ReferrerPolicy expectedReferrerPolicy; |
95 const ReferrerPolicy expectedReferrerPolicy; | 97 }; |
96 } cases[] = { | |
97 {"http://example.test/cat.jpg", "image", "", "", ReferrerPolicyDefault, | |
98 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true, | |
99 ReferrerPolicyDefault}, | |
100 {"http://example.test/cat.js", "script", "", "", ReferrerPolicyDefault, | |
101 ResourceLoadPriorityHigh, WebURLRequest::RequestContextScript, true, | |
102 true, ReferrerPolicyDefault}, | |
103 {"http://example.test/cat.css", "style", "", "", ReferrerPolicyDefault, | |
104 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true, | |
105 true, ReferrerPolicyDefault}, | |
106 // TODO(yoav): It doesn't seem like the audio context is ever used. That | |
107 // should probably be fixed (or we can consolidate audio and video). | |
108 {"http://example.test/cat.wav", "audio", "", "", ReferrerPolicyDefault, | |
109 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, | |
110 ReferrerPolicyDefault}, | |
111 {"http://example.test/cat.mp4", "video", "", "", ReferrerPolicyDefault, | |
112 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, | |
113 ReferrerPolicyDefault}, | |
114 {"http://example.test/cat.vtt", "track", "", "", ReferrerPolicyDefault, | |
115 ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true, | |
116 ReferrerPolicyDefault}, | |
117 {"http://example.test/cat.woff", "font", "", "", ReferrerPolicyDefault, | |
118 ResourceLoadPriorityHigh, WebURLRequest::RequestContextFont, true, true, | |
119 ReferrerPolicyDefault}, | |
120 // TODO(yoav): subresource should be *very* low priority (rather than | |
121 // low). | |
122 {"http://example.test/cat.empty", "", "", "", ReferrerPolicyDefault, | |
123 ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true, | |
124 true, ReferrerPolicyDefault}, | |
125 {"http://example.test/cat.blob", "blabla", "", "", ReferrerPolicyDefault, | |
126 ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, | |
127 false, ReferrerPolicyDefault}, | |
128 {"bla://example.test/cat.gif", "image", "", "", ReferrerPolicyDefault, | |
129 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, | |
130 false, false, ReferrerPolicyDefault}, | |
131 // MIME type tests | |
132 {"http://example.test/cat.webp", "image", "image/webp", "", | |
133 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
134 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, | |
135 {"http://example.test/cat.svg", "image", "image/svg+xml", "", | |
136 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
137 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, | |
138 {"http://example.test/cat.jxr", "image", "image/jxr", "", | |
139 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
140 WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault}, | |
141 {"http://example.test/cat.js", "script", "text/javascript", "", | |
142 ReferrerPolicyDefault, ResourceLoadPriorityHigh, | |
143 WebURLRequest::RequestContextScript, true, true, ReferrerPolicyDefault}, | |
144 {"http://example.test/cat.js", "script", "text/coffeescript", "", | |
145 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
146 WebURLRequest::RequestContextScript, false, false, | |
147 ReferrerPolicyDefault}, | |
148 {"http://example.test/cat.css", "style", "text/css", "", | |
149 ReferrerPolicyDefault, ResourceLoadPriorityVeryHigh, | |
150 WebURLRequest::RequestContextStyle, true, true, ReferrerPolicyDefault}, | |
151 {"http://example.test/cat.css", "style", "text/sass", "", | |
152 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
153 WebURLRequest::RequestContextStyle, false, false, ReferrerPolicyDefault}, | |
154 {"http://example.test/cat.wav", "audio", "audio/wav", "", | |
155 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
156 WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault}, | |
157 {"http://example.test/cat.wav", "audio", "audio/mp57", "", | |
158 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
159 WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault}, | |
160 {"http://example.test/cat.webm", "video", "video/webm", "", | |
161 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
162 WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault}, | |
163 {"http://example.test/cat.mp199", "video", "video/mp199", "", | |
164 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
165 WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault}, | |
166 {"http://example.test/cat.vtt", "track", "text/vtt", "", | |
167 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
168 WebURLRequest::RequestContextTrack, true, true, ReferrerPolicyDefault}, | |
169 {"http://example.test/cat.vtt", "track", "text/subtitlething", "", | |
170 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
171 WebURLRequest::RequestContextTrack, false, false, ReferrerPolicyDefault}, | |
172 {"http://example.test/cat.woff", "font", "font/woff2", "", | |
173 ReferrerPolicyDefault, ResourceLoadPriorityHigh, | |
174 WebURLRequest::RequestContextFont, true, true, ReferrerPolicyDefault}, | |
175 {"http://example.test/cat.woff", "font", "font/woff84", "", | |
176 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, | |
177 WebURLRequest::RequestContextFont, false, false, ReferrerPolicyDefault}, | |
178 {"http://example.test/cat.empty", "", "foo/bar", "", | |
179 ReferrerPolicyDefault, ResourceLoadPriorityHigh, | |
180 WebURLRequest::RequestContextSubresource, true, true, | |
181 ReferrerPolicyDefault}, | |
182 {"http://example.test/cat.blob", "blabla", "foo/bar", "", | |
183 ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
184 WebURLRequest::RequestContextSubresource, false, false, | |
185 ReferrerPolicyDefault}, | |
186 // Media tests | |
187 {"http://example.test/cat.gif", "image", "image/gif", | |
188 "(max-width: 600px)", ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
189 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, | |
190 {"http://example.test/cat.gif", "image", "image/gif", | |
191 "(max-width: 400px)", ReferrerPolicyDefault, | |
192 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, true, | |
193 false, ReferrerPolicyDefault}, | |
194 {"http://example.test/cat.gif", "image", "image/gif", | |
195 "(max-width: 600px)", ReferrerPolicyDefault, ResourceLoadPriorityLow, | |
196 WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault}, | |
197 // Referrer Policy | |
198 {"http://example.test/cat.gif", "image", "image/gif", "", | |
199 ReferrerPolicyOrigin, ResourceLoadPriorityLow, | |
200 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyOrigin}, | |
201 {"http://example.test/cat.gif", "image", "image/gif", "", | |
202 ReferrerPolicyOriginWhenCrossOrigin, ResourceLoadPriorityLow, | |
203 WebURLRequest::RequestContextImage, true, true, | |
204 ReferrerPolicyOriginWhenCrossOrigin}, | |
205 {"http://example.test/cat.gif", "image", "image/gif", "", | |
206 ReferrerPolicyNever, ResourceLoadPriorityLow, | |
207 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyNever}, | |
208 }; | |
209 | 98 |
210 // Test the cases with a single header | 99 class LinkLoaderPreloadTest |
211 for (const auto& testCase : cases) { | 100 : public ::testing::TestWithParam<PreloadTestParams> { |
212 std::unique_ptr<DummyPageHolder> dummyPageHolder = | 101 public: |
213 DummyPageHolder::create(IntSize(500, 500)); | 102 ~LinkLoaderPreloadTest() { |
214 dummyPageHolder->frame().settings()->setScriptEnabled(true); | |
215 Persistent<MockLinkLoaderClient> loaderClient = | |
216 MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue); | |
217 LinkLoader* loader = LinkLoader::create(loaderClient.get()); | |
218 KURL hrefURL = KURL(KURL(), testCase.href); | |
219 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); | |
220 loader->loadLink(LinkRelAttribute("preload"), CrossOriginAttributeNotSet, | |
221 testCase.type, testCase.as, testCase.media, | |
222 testCase.referrerPolicy, hrefURL, | |
223 dummyPageHolder->document(), NetworkHintsMock()); | |
224 ASSERT_TRUE(dummyPageHolder->document().fetcher()); | |
225 HeapListHashSet<Member<Resource>>* preloads = | |
226 dummyPageHolder->document().fetcher()->preloads(); | |
227 if (testCase.expectingLoad) { | |
228 if (!preloads) { | |
229 fprintf(stderr, "Unexpected result %s %s %s\n", testCase.href, | |
230 testCase.as, testCase.type); | |
231 } | |
232 EXPECT_TRUE(preloads); | |
233 } else { | |
234 EXPECT_FALSE(preloads); | |
235 } | |
236 if (preloads) { | |
237 if (testCase.priority == ResourceLoadPriorityUnresolved) { | |
238 EXPECT_EQ(0u, preloads->size()); | |
239 } else { | |
240 EXPECT_EQ(1u, preloads->size()); | |
241 if (preloads->size() > 0) { | |
242 Resource* resource = preloads->begin().get()->get(); | |
243 EXPECT_EQ(testCase.priority, resource->resourceRequest().priority()); | |
244 EXPECT_EQ(testCase.context, | |
245 resource->resourceRequest().requestContext()); | |
246 if (testCase.expectedReferrerPolicy != ReferrerPolicyDefault) { | |
247 EXPECT_EQ(testCase.expectedReferrerPolicy, | |
248 resource->resourceRequest().getReferrerPolicy()); | |
249 } | |
250 } | |
251 } | |
252 dummyPageHolder->document().fetcher()->clearPreloads(); | |
253 } | |
254 Platform::current() | 103 Platform::current() |
255 ->getURLLoaderMockFactory() | 104 ->getURLLoaderMockFactory() |
256 ->unregisterAllURLsAndClearMemoryCache(); | 105 ->unregisterAllURLsAndClearMemoryCache(); |
257 } | 106 } |
| 107 }; |
| 108 |
| 109 TEST_P(LinkLoaderPreloadTest, Preload) { |
| 110 const auto& testCase = GetParam(); |
| 111 std::unique_ptr<DummyPageHolder> dummyPageHolder = |
| 112 DummyPageHolder::create(IntSize(500, 500)); |
| 113 ResourceFetcher* fetcher = dummyPageHolder->document().fetcher(); |
| 114 ASSERT_TRUE(fetcher); |
| 115 dummyPageHolder->frame().settings()->setScriptEnabled(true); |
| 116 Persistent<MockLinkLoaderClient> loaderClient = |
| 117 MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue); |
| 118 LinkLoader* loader = LinkLoader::create(loaderClient.get()); |
| 119 KURL hrefURL = KURL(KURL(), testCase.href); |
| 120 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); |
| 121 loader->loadLink(LinkRelAttribute("preload"), CrossOriginAttributeNotSet, |
| 122 testCase.type, testCase.as, testCase.media, |
| 123 testCase.referrerPolicy, hrefURL, |
| 124 dummyPageHolder->document(), NetworkHintsMock()); |
| 125 if (testCase.expectingLoad && |
| 126 testCase.priority != ResourceLoadPriorityUnresolved) { |
| 127 ASSERT_EQ(1, fetcher->countPreloads()); |
| 128 Resource* resource = loader->linkPreloadedResourceForTesting(); |
| 129 ASSERT_NE(resource, nullptr); |
| 130 EXPECT_TRUE(fetcher->containsAsPreloadForTesting(resource)); |
| 131 EXPECT_EQ(testCase.priority, resource->resourceRequest().priority()); |
| 132 EXPECT_EQ(testCase.context, resource->resourceRequest().requestContext()); |
| 133 if (testCase.expectedReferrerPolicy != ReferrerPolicyDefault) { |
| 134 EXPECT_EQ(testCase.expectedReferrerPolicy, |
| 135 resource->resourceRequest().getReferrerPolicy()); |
| 136 } |
| 137 } else { |
| 138 ASSERT_EQ(0, fetcher->countPreloads()); |
| 139 } |
258 } | 140 } |
259 | 141 |
| 142 constexpr PreloadTestParams kPreloadTestParams[] = { |
| 143 {"http://example.test/cat.jpg", "image", "", "", ReferrerPolicyDefault, |
| 144 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true, |
| 145 ReferrerPolicyDefault}, |
| 146 {"http://example.test/cat.js", "script", "", "", ReferrerPolicyDefault, |
| 147 ResourceLoadPriorityHigh, WebURLRequest::RequestContextScript, true, true, |
| 148 ReferrerPolicyDefault}, |
| 149 {"http://example.test/cat.css", "style", "", "", ReferrerPolicyDefault, |
| 150 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true, |
| 151 true, ReferrerPolicyDefault}, |
| 152 // TODO(yoav): It doesn't seem like the audio context is ever used. That |
| 153 // should probably be fixed (or we can consolidate audio and video). |
| 154 {"http://example.test/cat.wav", "audio", "", "", ReferrerPolicyDefault, |
| 155 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, |
| 156 ReferrerPolicyDefault}, |
| 157 {"http://example.test/cat.mp4", "video", "", "", ReferrerPolicyDefault, |
| 158 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true, |
| 159 ReferrerPolicyDefault}, |
| 160 {"http://example.test/cat.vtt", "track", "", "", ReferrerPolicyDefault, |
| 161 ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true, |
| 162 ReferrerPolicyDefault}, |
| 163 {"http://example.test/cat.woff", "font", "", "", ReferrerPolicyDefault, |
| 164 ResourceLoadPriorityHigh, WebURLRequest::RequestContextFont, true, true, |
| 165 ReferrerPolicyDefault}, |
| 166 // TODO(yoav): subresource should be *very* low priority (rather than |
| 167 // low). |
| 168 {"http://example.test/cat.empty", "", "", "", ReferrerPolicyDefault, |
| 169 ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true, |
| 170 true, ReferrerPolicyDefault}, |
| 171 {"http://example.test/cat.blob", "blabla", "", "", ReferrerPolicyDefault, |
| 172 ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, |
| 173 false, ReferrerPolicyDefault}, |
| 174 {"bla://example.test/cat.gif", "image", "", "", ReferrerPolicyDefault, |
| 175 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, false, |
| 176 false, ReferrerPolicyDefault}, |
| 177 // MIME type tests |
| 178 {"http://example.test/cat.webp", "image", "image/webp", "", |
| 179 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 180 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, |
| 181 {"http://example.test/cat.svg", "image", "image/svg+xml", "", |
| 182 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 183 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, |
| 184 {"http://example.test/cat.jxr", "image", "image/jxr", "", |
| 185 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 186 WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault}, |
| 187 {"http://example.test/cat.js", "script", "text/javascript", "", |
| 188 ReferrerPolicyDefault, ResourceLoadPriorityHigh, |
| 189 WebURLRequest::RequestContextScript, true, true, ReferrerPolicyDefault}, |
| 190 {"http://example.test/cat.js", "script", "text/coffeescript", "", |
| 191 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 192 WebURLRequest::RequestContextScript, false, false, ReferrerPolicyDefault}, |
| 193 {"http://example.test/cat.css", "style", "text/css", "", |
| 194 ReferrerPolicyDefault, ResourceLoadPriorityVeryHigh, |
| 195 WebURLRequest::RequestContextStyle, true, true, ReferrerPolicyDefault}, |
| 196 {"http://example.test/cat.css", "style", "text/sass", "", |
| 197 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 198 WebURLRequest::RequestContextStyle, false, false, ReferrerPolicyDefault}, |
| 199 {"http://example.test/cat.wav", "audio", "audio/wav", "", |
| 200 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 201 WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault}, |
| 202 {"http://example.test/cat.wav", "audio", "audio/mp57", "", |
| 203 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 204 WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault}, |
| 205 {"http://example.test/cat.webm", "video", "video/webm", "", |
| 206 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 207 WebURLRequest::RequestContextVideo, true, true, ReferrerPolicyDefault}, |
| 208 {"http://example.test/cat.mp199", "video", "video/mp199", "", |
| 209 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 210 WebURLRequest::RequestContextVideo, false, false, ReferrerPolicyDefault}, |
| 211 {"http://example.test/cat.vtt", "track", "text/vtt", "", |
| 212 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 213 WebURLRequest::RequestContextTrack, true, true, ReferrerPolicyDefault}, |
| 214 {"http://example.test/cat.vtt", "track", "text/subtitlething", "", |
| 215 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 216 WebURLRequest::RequestContextTrack, false, false, ReferrerPolicyDefault}, |
| 217 {"http://example.test/cat.woff", "font", "font/woff2", "", |
| 218 ReferrerPolicyDefault, ResourceLoadPriorityHigh, |
| 219 WebURLRequest::RequestContextFont, true, true, ReferrerPolicyDefault}, |
| 220 {"http://example.test/cat.woff", "font", "font/woff84", "", |
| 221 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 222 WebURLRequest::RequestContextFont, false, false, ReferrerPolicyDefault}, |
| 223 {"http://example.test/cat.empty", "", "foo/bar", "", ReferrerPolicyDefault, |
| 224 ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true, |
| 225 true, ReferrerPolicyDefault}, |
| 226 {"http://example.test/cat.blob", "blabla", "foo/bar", "", |
| 227 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 228 WebURLRequest::RequestContextSubresource, false, false, |
| 229 ReferrerPolicyDefault}, |
| 230 // Media tests |
| 231 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)", |
| 232 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 233 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault}, |
| 234 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 400px)", |
| 235 ReferrerPolicyDefault, ResourceLoadPriorityUnresolved, |
| 236 WebURLRequest::RequestContextImage, true, false, ReferrerPolicyDefault}, |
| 237 {"http://example.test/cat.gif", "image", "image/gif", "(max-width: 600px)", |
| 238 ReferrerPolicyDefault, ResourceLoadPriorityLow, |
| 239 WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault}, |
| 240 // Referrer Policy |
| 241 {"http://example.test/cat.gif", "image", "image/gif", "", |
| 242 ReferrerPolicyOrigin, ResourceLoadPriorityLow, |
| 243 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyOrigin}, |
| 244 {"http://example.test/cat.gif", "image", "image/gif", "", |
| 245 ReferrerPolicyOriginWhenCrossOrigin, ResourceLoadPriorityLow, |
| 246 WebURLRequest::RequestContextImage, true, true, |
| 247 ReferrerPolicyOriginWhenCrossOrigin}, |
| 248 {"http://example.test/cat.gif", "image", "image/gif", "", |
| 249 ReferrerPolicyNever, ResourceLoadPriorityLow, |
| 250 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyNever}}; |
| 251 |
| 252 INSTANTIATE_TEST_CASE_P(LinkLoaderPreloadTest, |
| 253 LinkLoaderPreloadTest, |
| 254 ::testing::ValuesIn(kPreloadTestParams)); |
| 255 |
260 TEST(LinkLoaderTest, Prefetch) { | 256 TEST(LinkLoaderTest, Prefetch) { |
261 struct TestCase { | 257 struct TestCase { |
262 const char* href; | 258 const char* href; |
263 // TODO(yoav): Add support for type and media crbug.com/662687 | 259 // TODO(yoav): Add support for type and media crbug.com/662687 |
264 const char* type; | 260 const char* type; |
265 const char* media; | 261 const char* media; |
266 const ReferrerPolicy referrerPolicy; | 262 const ReferrerPolicy referrerPolicy; |
267 const bool linkLoaderShouldLoadValue; | 263 const bool linkLoaderShouldLoadValue; |
268 const bool expectingLoad; | 264 const bool expectingLoad; |
269 const ReferrerPolicy expectedReferrerPolicy; | 265 const ReferrerPolicy expectedReferrerPolicy; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 NetworkHintsMock networkHints; | 366 NetworkHintsMock networkHints; |
371 loader->loadLink(LinkRelAttribute("preconnect"), testCase.crossOrigin, | 367 loader->loadLink(LinkRelAttribute("preconnect"), testCase.crossOrigin, |
372 String(), String(), String(), ReferrerPolicyDefault, | 368 String(), String(), String(), ReferrerPolicyDefault, |
373 hrefURL, dummyPageHolder->document(), networkHints); | 369 hrefURL, dummyPageHolder->document(), networkHints); |
374 EXPECT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); | 370 EXPECT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); |
375 EXPECT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); | 371 EXPECT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); |
376 EXPECT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); | 372 EXPECT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); |
377 } | 373 } |
378 } | 374 } |
379 | 375 |
| 376 } // namespace |
| 377 |
380 } // namespace blink | 378 } // namespace blink |
OLD | NEW |