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

Side by Side Diff: Source/core/loader/FrameFetchContextTest.cpp

Issue 1319153004: Cleanup ResourceLoadPriority setting (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Guess who uploaded without compiling locally Created 5 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/loader/FrameFetchContext.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015, Google Inc. All rights reserved. 2 * Copyright (c) 2015, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 17 matching lines...) Expand all
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "core/loader/FrameFetchContext.h" 32 #include "core/loader/FrameFetchContext.h"
33 33
34 #include "core/fetch/FetchInitiatorInfo.h" 34 #include "core/fetch/FetchInitiatorInfo.h"
35 #include "core/frame/FrameHost.h" 35 #include "core/frame/FrameHost.h"
36 #include "core/frame/FrameOwner.h" 36 #include "core/frame/FrameOwner.h"
37 #include "core/frame/FrameView.h" 37 #include "core/frame/FrameView.h"
38 #include "core/frame/Settings.h"
38 #include "core/html/HTMLDocument.h" 39 #include "core/html/HTMLDocument.h"
39 #include "core/loader/DocumentLoader.h" 40 #include "core/loader/DocumentLoader.h"
40 #include "core/loader/EmptyClients.h" 41 #include "core/loader/EmptyClients.h"
41 #include "core/page/Page.h" 42 #include "core/page/Page.h"
42 #include "core/testing/DummyPageHolder.h" 43 #include "core/testing/DummyPageHolder.h"
43 #include "platform/network/ResourceRequest.h" 44 #include "platform/network/ResourceRequest.h"
44 #include "platform/weborigin/KURL.h" 45 #include "platform/weborigin/KURL.h"
45 #include <gtest/gtest.h> 46 #include <gtest/gtest.h>
46 47
47 namespace blink { 48 namespace blink {
48 49
49 class FrameFetchContextUpgradeTest : public ::testing::Test { 50 class StubFrameLoaderClientWithParent final : public EmptyFrameLoaderClient {
50 public: 51 public:
51 FrameFetchContextUpgradeTest() 52 static PassOwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> create(Frame* parent)
52 : secureURL(ParsedURLString, "https://secureorigin.test/image.png") 53 {
53 , exampleOrigin(SecurityOrigin::create(KURL(ParsedURLString, "https://ex ample.test/"))) 54 return adoptPtrWillBeNoop(new StubFrameLoaderClientWithParent(parent));
54 , secureOrigin(SecurityOrigin::create(secureURL)) 55 }
56
57 DEFINE_INLINE_VIRTUAL_TRACE()
58 {
59 visitor->trace(m_parent);
60 EmptyFrameLoaderClient::trace(visitor);
61 }
62
63 Frame* parent() const override { return m_parent.get(); }
64
65 private:
66 explicit StubFrameLoaderClientWithParent(Frame* parent)
67 : m_parent(parent)
55 { 68 {
56 } 69 }
57 70
71 RawPtrWillBeMember<Frame> m_parent;
72 };
73
74 class StubFrameOwner : public NoBaseWillBeGarbageCollectedFinalized<StubFrameOwn er>, public FrameOwner {
75 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(StubFrameOwner);
76 public:
77 DEFINE_INLINE_VIRTUAL_TRACE() { FrameOwner::trace(visitor); }
78
79 bool isLocal() const override { return false; }
80 SandboxFlags sandboxFlags() const override { return SandboxNone; }
81 void dispatchLoad() override { }
82 void renderFallbackContent() override { }
83 };
84
85 class FrameFetchContextTest : public ::testing::Test {
58 protected: 86 protected:
59 virtual void SetUp() 87 void SetUp() override
60 { 88 {
61 dummyPageHolder = DummyPageHolder::create(IntSize(500, 500)); 89 dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
62 dummyPageHolder->page().setDeviceScaleFactor(1.0); 90 dummyPageHolder->page().setDeviceScaleFactor(1.0);
63 documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), Resou rceRequest("http://www.example.com"), SubstituteData()); 91 documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), Resou rceRequest("http://www.example.com"), SubstituteData());
64 document = toHTMLDocument(&dummyPageHolder->document()); 92 document = toHTMLDocument(&dummyPageHolder->document());
65 fetchContext = &documentLoader->fetcher()->context(); 93 fetchContext = static_cast<FrameFetchContext*>(&documentLoader->fetcher( )->context());
66 FrameFetchContext::provideDocumentToContext(*fetchContext, document.get( )); 94 FrameFetchContext::provideDocumentToContext(*fetchContext, document.get( ));
67 } 95 }
68 96
69 virtual void TearDown() 97 void TearDown() override
70 { 98 {
71 documentLoader->detachFromFrame(); 99 documentLoader->detachFromFrame();
72 documentLoader.clear(); 100 documentLoader.clear();
101
102 if (childFrame) {
103 childDocumentLoader->detachFromFrame();
104 childDocumentLoader.clear();
105 childFrame->detach(FrameDetachType::Remove);
106 }
73 } 107 }
74 108
109 FrameFetchContext* createChildFrame()
110 {
111 childClient = StubFrameLoaderClientWithParent::create(document->frame()) ;
112 childFrame = LocalFrame::create(childClient.get(), document->frame()->ho st(), &owner);
113 childFrame->setView(FrameView::create(childFrame.get(), IntSize(500, 500 )));
114 childFrame->init();
115 childDocumentLoader = DocumentLoader::create(childFrame.get(), ResourceR equest("http://www.example.com"), SubstituteData());
116 childDocument = childFrame->document();
117 FrameFetchContext* childFetchContext = static_cast<FrameFetchContext*>(& childDocumentLoader->fetcher()->context());
118 FrameFetchContext::provideDocumentToContext(*childFetchContext, childDoc ument.get());
119 return childFetchContext;
120 }
121
122 OwnPtr<DummyPageHolder> dummyPageHolder;
123 // We don't use the DocumentLoader directly in any tests, but need to keep i t around as long
124 // as the ResourceFetcher and Document live due to indirect usage.
125 RefPtrWillBePersistent<DocumentLoader> documentLoader;
126 RefPtrWillBePersistent<Document> document;
127 Persistent<FrameFetchContext> fetchContext;
128
129 OwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> childClient;
130 RefPtrWillBeRawPtr<LocalFrame> childFrame;
131 RefPtrWillBePersistent<DocumentLoader> childDocumentLoader;
132 RefPtrWillBePersistent<Document> childDocument;
133 StubFrameOwner owner;
134
135 };
136
137 class FrameFetchContextUpgradeTest : public FrameFetchContextTest {
138 public:
139 FrameFetchContextUpgradeTest()
140 : exampleOrigin(SecurityOrigin::create(KURL(ParsedURLString, "https://ex ample.test/")))
141 , secureOrigin(SecurityOrigin::create(KURL(ParsedURLString, "https://sec ureorigin.test/image.png")))
142 {
143 }
144
145 protected:
75 void expectUpgrade(const char* input, const char* expected) 146 void expectUpgrade(const char* input, const char* expected)
76 { 147 {
77 expectUpgrade(input, WebURLRequest::RequestContextScript, WebURLRequest: :FrameTypeNone, expected); 148 expectUpgrade(input, WebURLRequest::RequestContextScript, WebURLRequest: :FrameTypeNone, expected);
78 } 149 }
79 150
80 void expectUpgrade(const char* input, WebURLRequest::RequestContext requestC ontext, WebURLRequest::FrameType frameType, const char* expected) 151 void expectUpgrade(const char* input, WebURLRequest::RequestContext requestC ontext, WebURLRequest::FrameType frameType, const char* expected)
81 { 152 {
82 KURL inputURL(ParsedURLString, input); 153 KURL inputURL(ParsedURLString, input);
83 KURL expectedURL(ParsedURLString, expected); 154 KURL expectedURL(ParsedURLString, expected);
84 155
(...skipping 18 matching lines...) Expand all
103 FetchRequest fetchRequest = FetchRequest(ResourceRequest(inputURL), Fetc hInitiatorInfo()); 174 FetchRequest fetchRequest = FetchRequest(ResourceRequest(inputURL), Fetc hInitiatorInfo());
104 fetchRequest.mutableResourceRequest().setRequestContext(WebURLRequest::R equestContextScript); 175 fetchRequest.mutableResourceRequest().setRequestContext(WebURLRequest::R equestContextScript);
105 fetchRequest.mutableResourceRequest().setFrameType(frameType); 176 fetchRequest.mutableResourceRequest().setFrameType(frameType);
106 177
107 fetchContext->upgradeInsecureRequest(fetchRequest); 178 fetchContext->upgradeInsecureRequest(fetchRequest);
108 179
109 EXPECT_STREQ(shouldPrefer ? "1" : "", 180 EXPECT_STREQ(shouldPrefer ? "1" : "",
110 fetchRequest.resourceRequest().httpHeaderField("Upgrade-Insecure-Req uests").utf8().data()); 181 fetchRequest.resourceRequest().httpHeaderField("Upgrade-Insecure-Req uests").utf8().data());
111 } 182 }
112 183
113 KURL secureURL;
114 RefPtr<SecurityOrigin> exampleOrigin; 184 RefPtr<SecurityOrigin> exampleOrigin;
115 RefPtr<SecurityOrigin> secureOrigin; 185 RefPtr<SecurityOrigin> secureOrigin;
116
117 OwnPtr<DummyPageHolder> dummyPageHolder;
118 // We don't use the DocumentLoader directly in any tests, but need to keep i t around as long
119 // as the ResourceFetcher and Document live due to indirect usage.
120 RefPtrWillBePersistent<DocumentLoader> documentLoader;
121 RefPtrWillBePersistent<Document> document;
122 Persistent<FetchContext> fetchContext;
123 }; 186 };
124 187
125 TEST_F(FrameFetchContextUpgradeTest, UpgradeInsecureResourceRequests) 188 TEST_F(FrameFetchContextUpgradeTest, UpgradeInsecureResourceRequests)
126 { 189 {
127 struct TestCase { 190 struct TestCase {
128 const char* original; 191 const char* original;
129 const char* upgraded; 192 const char* upgraded;
130 } tests[] = { 193 } tests[] = {
131 { "http://example.test/image.png", "https://example.test/image.png" }, 194 { "http://example.test/image.png", "https://example.test/image.png" },
132 { "http://example.test:80/image.png", "https://example.test:443/image.pn g" }, 195 { "http://example.test:80/image.png", "https://example.test:443/image.pn g" },
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 280
218 for (const auto& test : tests) { 281 for (const auto& test : tests) {
219 document->setInsecureRequestsPolicy(SecurityContext::InsecureRequestsDoN otUpgrade); 282 document->setInsecureRequestsPolicy(SecurityContext::InsecureRequestsDoN otUpgrade);
220 expectHTTPSHeader(test.toRequest, test.frameType, test.shouldPrefer); 283 expectHTTPSHeader(test.toRequest, test.frameType, test.shouldPrefer);
221 284
222 document->setInsecureRequestsPolicy(SecurityContext::InsecureRequestsUpg rade); 285 document->setInsecureRequestsPolicy(SecurityContext::InsecureRequestsUpg rade);
223 expectHTTPSHeader(test.toRequest, test.frameType, test.shouldPrefer); 286 expectHTTPSHeader(test.toRequest, test.frameType, test.shouldPrefer);
224 } 287 }
225 } 288 }
226 289
227 class FrameFetchContextHintsTest : public ::testing::Test { 290 class FrameFetchContextHintsTest : public FrameFetchContextTest {
228 public: 291 public:
229 FrameFetchContextHintsTest() { } 292 FrameFetchContextHintsTest() { }
230 293
231 protected: 294 protected:
232 virtual void SetUp()
233 {
234 dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
235 dummyPageHolder->page().setDeviceScaleFactor(1.0);
236 documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), Resou rceRequest("http://www.example.com"), SubstituteData());
237 document = toHTMLDocument(&dummyPageHolder->document());
238 fetchContext = static_cast<FrameFetchContext*>(&documentLoader->fetcher( )->context());
239 FrameFetchContext::provideDocumentToContext(*fetchContext, document.get( ));
240 }
241
242 virtual void TearDown()
243 {
244 documentLoader->detachFromFrame();
245 documentLoader.clear();
246 }
247
248 void expectHeader(const char* input, const char* headerName, bool isPresent, const char* headerValue, float width = 0) 295 void expectHeader(const char* input, const char* headerName, bool isPresent, const char* headerValue, float width = 0)
249 { 296 {
250 KURL inputURL(ParsedURLString, input); 297 KURL inputURL(ParsedURLString, input);
251 FetchRequest fetchRequest = FetchRequest(ResourceRequest(inputURL), Fetc hInitiatorInfo()); 298 FetchRequest fetchRequest = FetchRequest(ResourceRequest(inputURL), Fetc hInitiatorInfo());
252 if (width > 0) { 299 if (width > 0) {
253 FetchRequest::ResourceWidth resourceWidth; 300 FetchRequest::ResourceWidth resourceWidth;
254 resourceWidth.width = width; 301 resourceWidth.width = width;
255 resourceWidth.isSet = true; 302 resourceWidth.isSet = true;
256 fetchRequest.setResourceWidth(resourceWidth); 303 fetchRequest.setResourceWidth(resourceWidth);
257 } 304 }
258 fetchContext->addClientHintsIfNecessary(fetchRequest); 305 fetchContext->addClientHintsIfNecessary(fetchRequest);
259 306
260 EXPECT_STREQ(isPresent ? headerValue : "", 307 EXPECT_STREQ(isPresent ? headerValue : "",
261 fetchRequest.resourceRequest().httpHeaderField(headerName).utf8().da ta()); 308 fetchRequest.resourceRequest().httpHeaderField(headerName).utf8().da ta());
262 } 309 }
263
264 OwnPtr<DummyPageHolder> dummyPageHolder;
265 // We don't use the DocumentLoader directly in any tests, but need to keep i t around as long
266 // as the ResourceFetcher and Document live due to indirect usage.
267 RefPtrWillBePersistent<DocumentLoader> documentLoader;
268 RefPtrWillBePersistent<Document> document;
269 Persistent<FrameFetchContext> fetchContext;
270 }; 310 };
271 311
272 TEST_F(FrameFetchContextHintsTest, MonitorDPRHints) 312 TEST_F(FrameFetchContextHintsTest, MonitorDPRHints)
273 { 313 {
274 expectHeader("http://www.example.com/1.gif", "DPR", false, ""); 314 expectHeader("http://www.example.com/1.gif", "DPR", false, "");
275 ClientHintsPreferences preferences; 315 ClientHintsPreferences preferences;
276 preferences.setShouldSendDPR(true); 316 preferences.setShouldSendDPR(true);
277 document->clientHintsPreferences().updateFrom(preferences); 317 document->clientHintsPreferences().updateFrom(preferences);
278 expectHeader("http://www.example.com/1.gif", "DPR", true, "1"); 318 expectHeader("http://www.example.com/1.gif", "DPR", true, "1");
279 dummyPageHolder->page().setDeviceScaleFactor(2.5); 319 dummyPageHolder->page().setDeviceScaleFactor(2.5);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 ClientHintsPreferences preferences; 356 ClientHintsPreferences preferences;
317 preferences.setShouldSendDPR(true); 357 preferences.setShouldSendDPR(true);
318 preferences.setShouldSendResourceWidth(true); 358 preferences.setShouldSendResourceWidth(true);
319 preferences.setShouldSendViewportWidth(true); 359 preferences.setShouldSendViewportWidth(true);
320 document->clientHintsPreferences().updateFrom(preferences); 360 document->clientHintsPreferences().updateFrom(preferences);
321 expectHeader("http://www.example.com/1.gif", "DPR", true, "1"); 361 expectHeader("http://www.example.com/1.gif", "DPR", true, "1");
322 expectHeader("http://www.example.com/1.gif", "Width", true, "400", 400); 362 expectHeader("http://www.example.com/1.gif", "Width", true, "400", 400);
323 expectHeader("http://www.example.com/1.gif", "Viewport-Width", true, "500"); 363 expectHeader("http://www.example.com/1.gif", "Viewport-Width", true, "500");
324 } 364 }
325 365
326 class StubFrameLoaderClientWithParent final : public EmptyFrameLoaderClient { 366 TEST_F(FrameFetchContextTest, MainResource)
327 public:
328 static PassOwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> create(Frame* parent)
329 {
330 return adoptPtrWillBeNoop(new StubFrameLoaderClientWithParent(parent));
331 }
332
333 DEFINE_INLINE_VIRTUAL_TRACE()
334 {
335 visitor->trace(m_parent);
336 EmptyFrameLoaderClient::trace(visitor);
337 }
338
339 Frame* parent() const override { return m_parent.get(); }
340
341 private:
342 explicit StubFrameLoaderClientWithParent(Frame* parent)
343 : m_parent(parent)
344 {
345 }
346
347 RawPtrWillBeMember<Frame> m_parent;
348 };
349
350 class StubFrameOwner : public NoBaseWillBeGarbageCollectedFinalized<StubFrameOwn er>, public FrameOwner {
351 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(StubFrameOwner);
352 public:
353 DEFINE_INLINE_VIRTUAL_TRACE() { FrameOwner::trace(visitor); }
354
355 bool isLocal() const override { return false; }
356 SandboxFlags sandboxFlags() const override { return SandboxNone; }
357 void dispatchLoad() override { }
358 void renderFallbackContent() override { }
359 };
360
361 class FrameFetchContextCachePolicyTest : public ::testing::Test {
362 public:
363 FrameFetchContextCachePolicyTest() { }
364
365 protected:
366 void SetUp() override
367 {
368 dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
369 dummyPageHolder->page().setDeviceScaleFactor(1.0);
370 documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), Resou rceRequest("http://www.example.com"), SubstituteData());
371 document = toHTMLDocument(&dummyPageHolder->document());
372 fetchContext = static_cast<FrameFetchContext*>(&documentLoader->fetcher( )->context());
373 FrameFetchContext::provideDocumentToContext(*fetchContext, document.get( ));
374 }
375
376 void TearDown() override
377 {
378 documentLoader->detachFromFrame();
379 documentLoader.clear();
380 }
381
382 OwnPtr<DummyPageHolder> dummyPageHolder;
383 // We don't use the DocumentLoader directly in any tests, but need to keep i t around as long
384 // as the ResourceFetcher and Document live due to indirect usage.
385 RefPtrWillBePersistent<DocumentLoader> documentLoader;
386 RefPtrWillBePersistent<Document> document;
387 Persistent<FrameFetchContext> fetchContext;
388 };
389
390 TEST_F(FrameFetchContextCachePolicyTest, MainResource)
391 { 367 {
392 // Default case 368 // Default case
393 ResourceRequest request("http://www.example.com"); 369 ResourceRequest request("http://www.example.com");
394 EXPECT_EQ(UseProtocolCachePolicy, fetchContext->resourceRequestCachePolicy(r equest, Resource::MainResource)); 370 EXPECT_EQ(UseProtocolCachePolicy, fetchContext->resourceRequestCachePolicy(r equest, Resource::MainResource));
395 371
396 // Post 372 // Post
397 ResourceRequest postRequest("http://www.example.com"); 373 ResourceRequest postRequest("http://www.example.com");
398 postRequest.setHTTPMethod("POST"); 374 postRequest.setHTTPMethod("POST");
399 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( postRequest, Resource::MainResource)); 375 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( postRequest, Resource::MainResource));
400 376
(...skipping 11 matching lines...) Expand all
412 document->frame()->loader().setLoadType(FrameLoadTypeSame); 388 document->frame()->loader().setLoadType(FrameLoadTypeSame);
413 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( request, Resource::MainResource)); 389 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( request, Resource::MainResource));
414 390
415 // Conditional request 391 // Conditional request
416 document->frame()->loader().setLoadType(FrameLoadTypeStandard); 392 document->frame()->loader().setLoadType(FrameLoadTypeStandard);
417 ResourceRequest conditional("http://www.example.com"); 393 ResourceRequest conditional("http://www.example.com");
418 conditional.setHTTPHeaderField("If-Modified-Since", "foo"); 394 conditional.setHTTPHeaderField("If-Modified-Since", "foo");
419 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( conditional, Resource::MainResource)); 395 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( conditional, Resource::MainResource));
420 396
421 // Set up a child frame 397 // Set up a child frame
422 OwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> client = StubFrameLoader ClientWithParent::create(document->frame()); 398 FrameFetchContext* childFetchContext = createChildFrame();
423 StubFrameOwner owner;
424 RefPtrWillBeRawPtr<LocalFrame> childFrame = LocalFrame::create(client.get(), document->frame()->host(), &owner);
425 childFrame->setView(FrameView::create(childFrame.get(), IntSize(500, 500)));
426 childFrame->init();
427 RefPtrWillBePersistent<DocumentLoader> childDocumentLoader =
428 DocumentLoader::create(childFrame.get(), ResourceRequest("http://www.exa mple.com"), SubstituteData());
429 RefPtrWillBePersistent<Document> childDocument = childFrame->document();
430 FrameFetchContext* childFetchContext = static_cast<FrameFetchContext*>(&chil dDocumentLoader->fetcher()->context());
431 FrameFetchContext::provideDocumentToContext(*childFetchContext, childDocumen t.get());
432 399
433 // Child frame as part of back/forward 400 // Child frame as part of back/forward
434 document->frame()->loader().setLoadType(FrameLoadTypeBackForward); 401 document->frame()->loader().setLoadType(FrameLoadTypeBackForward);
435 EXPECT_EQ(ReturnCacheDataElseLoad, childFetchContext->resourceRequestCachePo licy(request, Resource::MainResource)); 402 EXPECT_EQ(ReturnCacheDataElseLoad, childFetchContext->resourceRequestCachePo licy(request, Resource::MainResource));
436 403
437 // Child frame as part of reload 404 // Child frame as part of reload
438 document->frame()->loader().setLoadType(FrameLoadTypeReload); 405 document->frame()->loader().setLoadType(FrameLoadTypeReload);
439 EXPECT_EQ(ReloadIgnoringCacheData, childFetchContext->resourceRequestCachePo licy(request, Resource::MainResource)); 406 EXPECT_EQ(ReloadIgnoringCacheData, childFetchContext->resourceRequestCachePo licy(request, Resource::MainResource));
440 407
441 // Child frame as part of end to end reload 408 // Child frame as part of end to end reload
442 document->frame()->loader().setLoadType(FrameLoadTypeReloadFromOrigin); 409 document->frame()->loader().setLoadType(FrameLoadTypeReloadFromOrigin);
443 EXPECT_EQ(ReloadBypassingCache, childFetchContext->resourceRequestCachePolic y(request, Resource::MainResource)); 410 EXPECT_EQ(ReloadBypassingCache, childFetchContext->resourceRequestCachePolic y(request, Resource::MainResource));
411 }
444 412
445 childDocumentLoader->detachFromFrame(); 413 TEST_F(FrameFetchContextTest, ModifyPriorityForExperiments)
446 childDocumentLoader.clear(); 414 {
447 childFrame->detach(FrameDetachType::Remove); 415 Settings* settings = document->frame()->settings();
416 FetchRequest request(ResourceRequest("http://www.example.com"), FetchInitiat orInfo());
417
418 FetchRequest preloadRequest(ResourceRequest("http://www.example.com"), Fetch InitiatorInfo());
419 preloadRequest.setForPreload(true);
420
421 FetchRequest deferredRequest(ResourceRequest("http://www.example.com"), Fetc hInitiatorInfo());
422 deferredRequest.setDefer(FetchRequest::LazyLoad);
423
424 // Start with all experiments disabled.
425 settings->setFEtchIncreaseAsyncScriptPriority(false);
426 settings->setFEtchIncreaseFontPriority(false);
427 settings->setFEtchDeferLateScripts(false);
428 settings->setFEtchIncreasePriorities(false);
429 settings->setLowPriorityIframes(false);
430
431 // Base case, no priority change. Note that this triggers m_imageFetched, wh ich will matter for setFetchDeferLateScripts() case below.
432 EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiment s(ResourceLoadPriorityLow, Resource::Image, request));
433
434 // Font priority with and without fetchIncreaseFontPriority()
435 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Font, request));
436 settings->setFEtchIncreaseFontPriority(true);
437 EXPECT_EQ(ResourceLoadPriorityHigh, fetchContext->modifyPriorityForExperimen ts(ResourceLoadPriorityMedium, Resource::Font, request));
438
439 // Basic script cases
440 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, request));
441 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
442
443 // Enable deferring late scripts. Preload priority should drop.
444 settings->setFEtchDeferLateScripts(true);
445 EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiment s(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
446
447 // Enable increasing priority of async scripts.
448 EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiment s(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
449 settings->setFEtchIncreaseAsyncScriptPriority(true);
450 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
451
452 // Enable increased priorities for the remainder.
453 settings->setFEtchIncreasePriorities(true);
454
455 // Re-test font priority with increased prioriries
456 settings->setFEtchIncreaseFontPriority(false);
457 EXPECT_EQ(ResourceLoadPriorityHigh, fetchContext->modifyPriorityForExperimen ts(ResourceLoadPriorityMedium, Resource::Font, request));
458 settings->setFEtchIncreaseFontPriority(true);
459 EXPECT_EQ(ResourceLoadPriorityVeryHigh, fetchContext->modifyPriorityForExper iments(ResourceLoadPriorityMedium, Resource::Font, request));
460
461 // Re-test basic script cases and deferring late script case with increased prioriries
462 settings->setFEtchIncreasePriorities(true);
463 settings->setFEtchDeferLateScripts(false);
464 EXPECT_EQ(ResourceLoadPriorityVeryHigh, fetchContext->modifyPriorityForExper iments(ResourceLoadPriorityMedium, Resource::Script, request));
465 EXPECT_EQ(ResourceLoadPriorityHigh, fetchContext->modifyPriorityForExperimen ts(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
466
467 // Re-test deferring late scripts.
468 settings->setFEtchDeferLateScripts(true);
469 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
470
471 // Re-test increasing priority of async scripts. Should ignore general incra esed priorities.
472 settings->setFEtchIncreaseAsyncScriptPriority(false);
473 EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiment s(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
474 settings->setFEtchIncreaseAsyncScriptPriority(true);
475 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
476
477 // Set up a child frame, test main resource load with and without setLowPrio rityIframes()
478 FrameFetchContext* childFetchContext = createChildFrame();
479 EXPECT_EQ(ResourceLoadPriorityVeryHigh, childFetchContext->modifyPriorityFor Experiments(ResourceLoadPriorityVeryHigh, Resource::MainResource, request));
480 settings->setLowPriorityIframes(true);
481 EXPECT_EQ(ResourceLoadPriorityVeryLow, childFetchContext->modifyPriorityForE xperiments(ResourceLoadPriorityVeryHigh, Resource::MainResource, request));
482
483 // Ensure we don't go out of bounds
484 settings->setFEtchIncreasePriorities(true);
485 EXPECT_EQ(ResourceLoadPriorityVeryHigh, fetchContext->modifyPriorityForExper iments(ResourceLoadPriorityVeryHigh, Resource::Script, request));
486 settings->setFEtchIncreasePriorities(false);
487 settings->setFEtchDeferLateScripts(true);
488 EXPECT_EQ(ResourceLoadPriorityVeryLow, fetchContext->modifyPriorityForExperi ments(ResourceLoadPriorityVeryLow, Resource::Script, preloadRequest));
448 } 489 }
449 490
450 } // namespace 491 } // namespace
OLDNEW
« no previous file with comments | « Source/core/loader/FrameFetchContext.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698