Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(254)

Side by Side Diff: third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp

Issue 2424943002: Add ReferrerPolicy support to preload (Closed)
Patch Set: Fix test. Again Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 mutable bool m_isHTTPS; 76 mutable bool m_isHTTPS;
77 mutable bool m_isCrossOrigin; 77 mutable bool m_isCrossOrigin;
78 }; 78 };
79 79
80 TEST(LinkLoaderTest, Preload) { 80 TEST(LinkLoaderTest, Preload) {
81 struct TestCase { 81 struct TestCase {
82 const char* href; 82 const char* href;
83 const char* as; 83 const char* as;
84 const char* type; 84 const char* type;
85 const char* media; 85 const char* media;
86 const char* referrerPolicy;
86 const ResourceLoadPriority priority; 87 const ResourceLoadPriority priority;
87 const WebURLRequest::RequestContext context; 88 const WebURLRequest::RequestContext context;
88 const bool linkLoaderShouldLoadValue; 89 const bool linkLoaderShouldLoadValue;
89 const bool expectingLoad; 90 const bool expectingLoad;
91 const ReferrerPolicy expectedReferrerPolicy;
90 } cases[] = { 92 } cases[] = {
91 {"http://example.test/cat.jpg", "image", "", "", ResourceLoadPriorityLow, 93 {"http://example.test/cat.jpg", "image", "", "", "",
92 WebURLRequest::RequestContextImage, true, true}, 94 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true,
93 {"http://example.test/cat.js", "script", "", "", ResourceLoadPriorityHigh, 95 ReferrerPolicyDefault},
94 WebURLRequest::RequestContextScript, true, true}, 96 {"http://example.test/cat.js", "script", "", "", "",
95 {"http://example.test/cat.css", "style", "", "", 97 ResourceLoadPriorityHigh, WebURLRequest::RequestContextScript, true,
98 true, ReferrerPolicyDefault},
99 {"http://example.test/cat.css", "style", "", "", "",
96 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true, 100 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true,
97 true}, 101 true, ReferrerPolicyDefault},
98 // TODO(yoav): It doesn't seem like the audio context is ever used. That 102 // TODO(yoav): It doesn't seem like the audio context is ever used. That
99 // should probably be fixed (or we can consolidate audio and video). 103 // should probably be fixed (or we can consolidate audio and video).
100 {"http://example.test/cat.wav", "media", "", "", ResourceLoadPriorityLow, 104 {"http://example.test/cat.wav", "media", "", "", "",
101 WebURLRequest::RequestContextVideo, true, true}, 105 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true,
102 {"http://example.test/cat.mp4", "media", "", "", ResourceLoadPriorityLow, 106 ReferrerPolicyDefault},
103 WebURLRequest::RequestContextVideo, true, true}, 107 {"http://example.test/cat.mp4", "media", "", "", "",
104 {"http://example.test/cat.vtt", "track", "", "", ResourceLoadPriorityLow, 108 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true,
105 WebURLRequest::RequestContextTrack, true, true}, 109 ReferrerPolicyDefault},
106 {"http://example.test/cat.woff", "font", "", "", 110 {"http://example.test/cat.vtt", "track", "", "", "",
111 ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true,
112 ReferrerPolicyDefault},
113 {"http://example.test/cat.woff", "font", "", "", "",
107 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextFont, true, 114 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextFont, true,
108 true}, 115 true, ReferrerPolicyDefault},
109 // TODO(yoav): subresource should be *very* low priority (rather than 116 // TODO(yoav): subresource should be *very* low priority (rather than
110 // low). 117 // low).
111 {"http://example.test/cat.empty", "", "", "", ResourceLoadPriorityHigh, 118 {"http://example.test/cat.empty", "", "", "", "",
112 WebURLRequest::RequestContextSubresource, true, true}, 119 ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true,
113 {"http://example.test/cat.blob", "blabla", "", "", 120 true, ReferrerPolicyDefault},
121 {"http://example.test/cat.blob", "blabla", "", "", "",
114 ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, 122 ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false,
115 false}, 123 false, ReferrerPolicyDefault},
116 {"bla://example.test/cat.gif", "image", "", "", 124 {"bla://example.test/cat.gif", "image", "", "", "",
117 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, 125 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage,
118 false, false}, 126 false, false, ReferrerPolicyDefault},
119 // MIME type tests 127 // MIME type tests
120 {"http://example.test/cat.webp", "image", "image/webp", "", 128 {"http://example.test/cat.webp", "image", "image/webp", "", "",
121 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true}, 129 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true,
122 {"http://example.test/cat.svg", "image", "image/svg+xml", "", 130 ReferrerPolicyDefault},
123 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true}, 131 {"http://example.test/cat.svg", "image", "image/svg+xml", "", "",
124 {"http://example.test/cat.jxr", "image", "image/jxr", "", 132 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true,
133 ReferrerPolicyDefault},
134 {"http://example.test/cat.jxr", "image", "image/jxr", "", "",
125 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage, 135 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextImage,
126 false, false}, 136 false, false, ReferrerPolicyDefault},
127 {"http://example.test/cat.js", "script", "text/javascript", "", 137 {"http://example.test/cat.js", "script", "text/javascript", "", "",
128 ResourceLoadPriorityHigh, WebURLRequest::RequestContextScript, true, 138 ResourceLoadPriorityHigh, WebURLRequest::RequestContextScript, true,
129 true}, 139 true, ReferrerPolicyDefault},
130 {"http://example.test/cat.js", "script", "text/coffeescript", "", 140 {"http://example.test/cat.js", "script", "text/coffeescript", "", "",
131 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextScript, 141 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextScript,
132 false, false}, 142 false, false, ReferrerPolicyDefault},
133 {"http://example.test/cat.css", "style", "text/css", "", 143 {"http://example.test/cat.css", "style", "text/css", "", "",
134 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true, 144 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextStyle, true,
135 true}, 145 true, ReferrerPolicyDefault},
136 {"http://example.test/cat.css", "style", "text/sass", "", 146 {"http://example.test/cat.css", "style", "text/sass", "", "",
137 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextStyle, 147 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextStyle,
138 false, false}, 148 false, false, ReferrerPolicyDefault},
139 {"http://example.test/cat.wav", "media", "audio/wav", "", 149 {"http://example.test/cat.wav", "media", "audio/wav", "", "",
140 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true}, 150 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true,
141 {"http://example.test/cat.wav", "media", "audio/mp57", "", 151 ReferrerPolicyDefault},
152 {"http://example.test/cat.wav", "media", "audio/mp57", "", "",
142 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextVideo, 153 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextVideo,
143 false, false}, 154 false, false, ReferrerPolicyDefault},
144 {"http://example.test/cat.webm", "media", "video/webm", "", 155 {"http://example.test/cat.webm", "media", "video/webm", "", "",
145 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true}, 156 ResourceLoadPriorityLow, WebURLRequest::RequestContextVideo, true, true,
146 {"http://example.test/cat.mp199", "media", "video/mp199", "", 157 ReferrerPolicyDefault},
158 {"http://example.test/cat.mp199", "media", "video/mp199", "", "",
147 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextVideo, 159 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextVideo,
148 false, false}, 160 false, false, ReferrerPolicyDefault},
149 {"http://example.test/cat.vtt", "track", "text/vtt", "", 161 {"http://example.test/cat.vtt", "track", "text/vtt", "", "",
150 ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true}, 162 ResourceLoadPriorityLow, WebURLRequest::RequestContextTrack, true, true,
151 {"http://example.test/cat.vtt", "track", "text/subtitlething", "", 163 ReferrerPolicyDefault},
164 {"http://example.test/cat.vtt", "track", "text/subtitlething", "", "",
152 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextTrack, 165 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextTrack,
153 false, false}, 166 false, false, ReferrerPolicyDefault},
154 {"http://example.test/cat.woff", "font", "font/woff2", "", 167 {"http://example.test/cat.woff", "font", "font/woff2", "", "",
155 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextFont, true, 168 ResourceLoadPriorityVeryHigh, WebURLRequest::RequestContextFont, true,
156 true}, 169 true, ReferrerPolicyDefault},
157 {"http://example.test/cat.woff", "font", "font/woff84", "", 170 {"http://example.test/cat.woff", "font", "font/woff84", "", "",
158 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextFont, false, 171 ResourceLoadPriorityUnresolved, WebURLRequest::RequestContextFont, false,
159 false}, 172 false, ReferrerPolicyDefault},
160 {"http://example.test/cat.empty", "", "foo/bar", "", 173 {"http://example.test/cat.empty", "", "foo/bar", "", "",
161 ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true, 174 ResourceLoadPriorityHigh, WebURLRequest::RequestContextSubresource, true,
162 true}, 175 true, ReferrerPolicyDefault},
163 {"http://example.test/cat.blob", "blabla", "foo/bar", "", 176 {"http://example.test/cat.blob", "blabla", "foo/bar", "", "",
164 ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false, 177 ResourceLoadPriorityLow, WebURLRequest::RequestContextSubresource, false,
165 false}, 178 false, ReferrerPolicyDefault},
166 // Media tests 179 // Media tests
167 {"http://example.test/cat.gif", "image", "image/gif", 180 {"http://example.test/cat.gif", "image", "image/gif",
168 "(max-width: 600px)", ResourceLoadPriorityLow, 181 "(max-width: 600px)", "", ResourceLoadPriorityLow,
169 WebURLRequest::RequestContextImage, true, true}, 182 WebURLRequest::RequestContextImage, true, true, ReferrerPolicyDefault},
170 {"http://example.test/cat.gif", "image", "image/gif", 183 {"http://example.test/cat.gif", "image", "image/gif",
171 "(max-width: 400px)", ResourceLoadPriorityUnresolved, 184 "(max-width: 400px)", "", ResourceLoadPriorityUnresolved,
172 WebURLRequest::RequestContextImage, true, false}, 185 WebURLRequest::RequestContextImage, true, false, ReferrerPolicyDefault},
173 {"http://example.test/cat.gif", "image", "image/gif", 186 {"http://example.test/cat.gif", "image", "image/gif",
174 "(max-width: 600px)", ResourceLoadPriorityLow, 187 "(max-width: 600px)", "", ResourceLoadPriorityLow,
175 WebURLRequest::RequestContextImage, false, false}, 188 WebURLRequest::RequestContextImage, false, false, ReferrerPolicyDefault},
189 // Referrer Policy
190 {"http://example.test/cat.gif", "image", "image/gif", "", "origin",
191 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true,
192 ReferrerPolicyOrigin},
193 {"http://example.test/cat.gif", "image", "image/gif", "",
194 "origin-when-crossorigin", ResourceLoadPriorityLow,
195 WebURLRequest::RequestContextImage, true, true,
196 ReferrerPolicyOriginWhenCrossOrigin},
197 {"http://example.test/cat.gif", "image", "image/gif", "", "no-referrer",
198 ResourceLoadPriorityLow, WebURLRequest::RequestContextImage, true, true,
199 ReferrerPolicyNever},
176 }; 200 };
177 201
178 // Test the cases with a single header 202 // Test the cases with a single header
179 for (const auto& testCase : cases) { 203 for (const auto& testCase : cases) {
180 std::unique_ptr<DummyPageHolder> dummyPageHolder = 204 std::unique_ptr<DummyPageHolder> dummyPageHolder =
181 DummyPageHolder::create(IntSize(500, 500)); 205 DummyPageHolder::create(IntSize(500, 500));
182 dummyPageHolder->frame().settings()->setScriptEnabled(true); 206 dummyPageHolder->frame().settings()->setScriptEnabled(true);
183 Persistent<MockLinkLoaderClient> loaderClient = 207 Persistent<MockLinkLoaderClient> loaderClient =
184 MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue); 208 MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue);
185 LinkLoader* loader = LinkLoader::create(loaderClient.get()); 209 LinkLoader* loader = LinkLoader::create(loaderClient.get());
186 KURL hrefURL = KURL(KURL(), testCase.href); 210 KURL hrefURL = KURL(KURL(), testCase.href);
187 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); 211 URLTestHelpers::registerMockedErrorURLLoad(hrefURL);
188 loader->loadLink(LinkRelAttribute("preload"), CrossOriginAttributeNotSet, 212 loader->loadLink(LinkRelAttribute("preload"), CrossOriginAttributeNotSet,
189 testCase.type, testCase.as, testCase.media, hrefURL, 213 testCase.type, testCase.as, testCase.media,
214 testCase.referrerPolicy, hrefURL,
190 dummyPageHolder->document(), NetworkHintsMock()); 215 dummyPageHolder->document(), NetworkHintsMock());
191 ASSERT_TRUE(dummyPageHolder->document().fetcher()); 216 ASSERT_TRUE(dummyPageHolder->document().fetcher());
192 HeapListHashSet<Member<Resource>>* preloads = 217 HeapListHashSet<Member<Resource>>* preloads =
193 dummyPageHolder->document().fetcher()->preloads(); 218 dummyPageHolder->document().fetcher()->preloads();
194 if (testCase.expectingLoad) { 219 if (testCase.expectingLoad) {
195 if (!preloads) { 220 if (!preloads) {
196 fprintf(stderr, "Unexpected result %s %s %s\n", testCase.href, 221 fprintf(stderr, "Unexpected result %s %s %s\n", testCase.href,
197 testCase.as, testCase.type); 222 testCase.as, testCase.type);
198 } 223 }
199 EXPECT_TRUE(preloads); 224 EXPECT_TRUE(preloads);
200 } else { 225 } else {
201 EXPECT_FALSE(preloads); 226 EXPECT_FALSE(preloads);
202 } 227 }
203 if (preloads) { 228 if (preloads) {
204 if (testCase.priority == ResourceLoadPriorityUnresolved) { 229 if (testCase.priority == ResourceLoadPriorityUnresolved) {
205 EXPECT_EQ(0u, preloads->size()); 230 EXPECT_EQ(0u, preloads->size());
206 } else { 231 } else {
207 EXPECT_EQ(1u, preloads->size()); 232 EXPECT_EQ(1u, preloads->size());
208 if (preloads->size() > 0) { 233 if (preloads->size() > 0) {
209 Resource* resource = preloads->begin().get()->get(); 234 Resource* resource = preloads->begin().get()->get();
210 EXPECT_EQ(testCase.priority, resource->resourceRequest().priority()); 235 EXPECT_EQ(testCase.priority, resource->resourceRequest().priority());
211 EXPECT_EQ(testCase.context, 236 EXPECT_EQ(testCase.context,
212 resource->resourceRequest().requestContext()); 237 resource->resourceRequest().requestContext());
238 if (testCase.expectedReferrerPolicy != ReferrerPolicyDefault) {
239 EXPECT_EQ(testCase.expectedReferrerPolicy,
240 resource->resourceRequest().getReferrerPolicy());
241 }
213 } 242 }
214 } 243 }
215 dummyPageHolder->document().fetcher()->clearPreloads(); 244 dummyPageHolder->document().fetcher()->clearPreloads();
216 } 245 }
217 memoryCache()->evictResources(); 246 memoryCache()->evictResources();
218 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); 247 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs();
219 } 248 }
220 } 249 }
221 250
222 TEST(LinkLoaderTest, DNSPrefetch) { 251 TEST(LinkLoaderTest, DNSPrefetch) {
(...skipping 15 matching lines...) Expand all
238 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); 267 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true);
239 Persistent<MockLinkLoaderClient> loaderClient = 268 Persistent<MockLinkLoaderClient> loaderClient =
240 MockLinkLoaderClient::create(testCase.shouldLoad); 269 MockLinkLoaderClient::create(testCase.shouldLoad);
241 LinkLoader* loader = LinkLoader::create(loaderClient.get()); 270 LinkLoader* loader = LinkLoader::create(loaderClient.get());
242 KURL hrefURL = 271 KURL hrefURL =
243 KURL(KURL(ParsedURLStringTag(), String("http://example.com")), 272 KURL(KURL(ParsedURLStringTag(), String("http://example.com")),
244 testCase.href); 273 testCase.href);
245 NetworkHintsMock networkHints; 274 NetworkHintsMock networkHints;
246 loader->loadLink(LinkRelAttribute("dns-prefetch"), 275 loader->loadLink(LinkRelAttribute("dns-prefetch"),
247 CrossOriginAttributeNotSet, String(), String(), String(), 276 CrossOriginAttributeNotSet, String(), String(), String(),
248 hrefURL, dummyPageHolder->document(), networkHints); 277 String(), hrefURL, dummyPageHolder->document(),
278 networkHints);
249 EXPECT_FALSE(networkHints.didPreconnect()); 279 EXPECT_FALSE(networkHints.didPreconnect());
250 EXPECT_EQ(testCase.shouldLoad, networkHints.didDnsPrefetch()); 280 EXPECT_EQ(testCase.shouldLoad, networkHints.didDnsPrefetch());
251 } 281 }
252 } 282 }
253 283
254 TEST(LinkLoaderTest, Preconnect) { 284 TEST(LinkLoaderTest, Preconnect) {
255 struct { 285 struct {
256 const char* href; 286 const char* href;
257 CrossOriginAttributeValue crossOrigin; 287 CrossOriginAttributeValue crossOrigin;
258 const bool shouldLoad; 288 const bool shouldLoad;
(...skipping 11 matching lines...) Expand all
270 std::unique_ptr<DummyPageHolder> dummyPageHolder = 300 std::unique_ptr<DummyPageHolder> dummyPageHolder =
271 DummyPageHolder::create(IntSize(500, 500)); 301 DummyPageHolder::create(IntSize(500, 500));
272 Persistent<MockLinkLoaderClient> loaderClient = 302 Persistent<MockLinkLoaderClient> loaderClient =
273 MockLinkLoaderClient::create(testCase.shouldLoad); 303 MockLinkLoaderClient::create(testCase.shouldLoad);
274 LinkLoader* loader = LinkLoader::create(loaderClient.get()); 304 LinkLoader* loader = LinkLoader::create(loaderClient.get());
275 KURL hrefURL = 305 KURL hrefURL =
276 KURL(KURL(ParsedURLStringTag(), String("http://example.com")), 306 KURL(KURL(ParsedURLStringTag(), String("http://example.com")),
277 testCase.href); 307 testCase.href);
278 NetworkHintsMock networkHints; 308 NetworkHintsMock networkHints;
279 loader->loadLink(LinkRelAttribute("preconnect"), testCase.crossOrigin, 309 loader->loadLink(LinkRelAttribute("preconnect"), testCase.crossOrigin,
280 String(), String(), String(), hrefURL, 310 String(), String(), String(), String(), hrefURL,
281 dummyPageHolder->document(), networkHints); 311 dummyPageHolder->document(), networkHints);
282 EXPECT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); 312 EXPECT_EQ(testCase.shouldLoad, networkHints.didPreconnect());
283 EXPECT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); 313 EXPECT_EQ(testCase.isHTTPS, networkHints.isHTTPS());
284 EXPECT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); 314 EXPECT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin());
285 } 315 }
286 } 316 }
287 317
288 } // namespace blink 318 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698