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

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: More test cleanup 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 {
Nate Chapin 2015/09/01 23:54:47 Moved without modification from farther down in th
51 public:
52 static PassOwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> create(Frame* parent)
53 {
54 return adoptPtrWillBeNoop(new StubFrameLoaderClientWithParent(parent));
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)
68 {
69 }
70
71 RawPtrWillBeMember<Frame> m_parent;
72 };
73
74 class StubFrameOwner : public NoBaseWillBeGarbageCollectedFinalized<StubFrameOwn er>, public FrameOwner {
Nate Chapin 2015/09/01 23:54:47 Moved without modification from farther down in th
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 {
86 protected:
87 void SetUp() override
88 {
89 dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
90 dummyPageHolder->page().setDeviceScaleFactor(1.0);
91 documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), Resou rceRequest("http://www.example.com"), SubstituteData());
92 document = toHTMLDocument(&dummyPageHolder->document());
93 fetchContext = static_cast<FrameFetchContext*>(&documentLoader->fetcher( )->context());
94 FrameFetchContext::provideDocumentToContext(*fetchContext, document.get( ));
95 }
96
97 void TearDown() override
98 {
99 documentLoader->detachFromFrame();
100 documentLoader.clear();
101
102 if (childFrame) {
103 childDocumentLoader->detachFromFrame();
104 childDocumentLoader.clear();
105 childFrame->detach(FrameDetachType::Remove);
106 }
107 }
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;
dcheng 2015/09/02 17:17:12 It might be nice to update these to use the right
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 {
50 public: 138 public:
51 FrameFetchContextUpgradeTest() 139 FrameFetchContextUpgradeTest()
52 : secureURL(ParsedURLString, "https://secureorigin.test/image.png") 140 : secureURL(ParsedURLString, "https://secureorigin.test/image.png")
dcheng 2015/09/02 17:17:12 Maybe just inline this directly into line 142? I d
Nate Chapin 2015/09/02 17:29:55 Done.
53 , exampleOrigin(SecurityOrigin::create(KURL(ParsedURLString, "https://ex ample.test/"))) 141 , exampleOrigin(SecurityOrigin::create(KURL(ParsedURLString, "https://ex ample.test/")))
54 , secureOrigin(SecurityOrigin::create(secureURL)) 142 , secureOrigin(SecurityOrigin::create(secureURL))
55 { 143 {
56 } 144 }
57 145
58 protected: 146 protected:
59 virtual void SetUp()
60 {
61 dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
62 dummyPageHolder->page().setDeviceScaleFactor(1.0);
63 documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), Resou rceRequest("http://www.example.com"), SubstituteData());
64 document = toHTMLDocument(&dummyPageHolder->document());
65 fetchContext = &documentLoader->fetcher()->context();
66 FrameFetchContext::provideDocumentToContext(*fetchContext, document.get( ));
67 }
68
69 virtual void TearDown()
70 {
71 documentLoader->detachFromFrame();
72 documentLoader.clear();
73 }
74
75 void expectUpgrade(const char* input, const char* expected) 147 void expectUpgrade(const char* input, const char* expected)
76 { 148 {
77 expectUpgrade(input, WebURLRequest::RequestContextScript, WebURLRequest: :FrameTypeNone, expected); 149 expectUpgrade(input, WebURLRequest::RequestContextScript, WebURLRequest: :FrameTypeNone, expected);
78 } 150 }
79 151
80 void expectUpgrade(const char* input, WebURLRequest::RequestContext requestC ontext, WebURLRequest::FrameType frameType, const char* expected) 152 void expectUpgrade(const char* input, WebURLRequest::RequestContext requestC ontext, WebURLRequest::FrameType frameType, const char* expected)
81 { 153 {
82 KURL inputURL(ParsedURLString, input); 154 KURL inputURL(ParsedURLString, input);
83 KURL expectedURL(ParsedURLString, expected); 155 KURL expectedURL(ParsedURLString, expected);
84 156
(...skipping 21 matching lines...) Expand all
106 178
107 fetchContext->upgradeInsecureRequest(fetchRequest); 179 fetchContext->upgradeInsecureRequest(fetchRequest);
108 180
109 EXPECT_STREQ(shouldPrefer ? "1" : "", 181 EXPECT_STREQ(shouldPrefer ? "1" : "",
110 fetchRequest.resourceRequest().httpHeaderField("Upgrade-Insecure-Req uests").utf8().data()); 182 fetchRequest.resourceRequest().httpHeaderField("Upgrade-Insecure-Req uests").utf8().data());
111 } 183 }
112 184
113 KURL secureURL; 185 KURL secureURL;
114 RefPtr<SecurityOrigin> exampleOrigin; 186 RefPtr<SecurityOrigin> exampleOrigin;
115 RefPtr<SecurityOrigin> secureOrigin; 187 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 }; 188 };
124 189
125 TEST_F(FrameFetchContextUpgradeTest, UpgradeInsecureResourceRequests) 190 TEST_F(FrameFetchContextUpgradeTest, UpgradeInsecureResourceRequests)
126 { 191 {
127 struct TestCase { 192 struct TestCase {
128 const char* original; 193 const char* original;
129 const char* upgraded; 194 const char* upgraded;
130 } tests[] = { 195 } tests[] = {
131 { "http://example.test/image.png", "https://example.test/image.png" }, 196 { "http://example.test/image.png", "https://example.test/image.png" },
132 { "http://example.test:80/image.png", "https://example.test:443/image.pn g" }, 197 { "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 282
218 for (const auto& test : tests) { 283 for (const auto& test : tests) {
219 document->setInsecureRequestsPolicy(SecurityContext::InsecureRequestsDoN otUpgrade); 284 document->setInsecureRequestsPolicy(SecurityContext::InsecureRequestsDoN otUpgrade);
220 expectHTTPSHeader(test.toRequest, test.frameType, test.shouldPrefer); 285 expectHTTPSHeader(test.toRequest, test.frameType, test.shouldPrefer);
221 286
222 document->setInsecureRequestsPolicy(SecurityContext::InsecureRequestsUpg rade); 287 document->setInsecureRequestsPolicy(SecurityContext::InsecureRequestsUpg rade);
223 expectHTTPSHeader(test.toRequest, test.frameType, test.shouldPrefer); 288 expectHTTPSHeader(test.toRequest, test.frameType, test.shouldPrefer);
224 } 289 }
225 } 290 }
226 291
227 class FrameFetchContextHintsTest : public ::testing::Test { 292 class FrameFetchContextHintsTest : public FrameFetchContextTest {
228 public: 293 public:
229 FrameFetchContextHintsTest() { } 294 FrameFetchContextHintsTest() { }
230 295
231 protected: 296 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) 297 void expectHeader(const char* input, const char* headerName, bool isPresent, const char* headerValue, float width = 0)
249 { 298 {
250 KURL inputURL(ParsedURLString, input); 299 KURL inputURL(ParsedURLString, input);
251 FetchRequest fetchRequest = FetchRequest(ResourceRequest(inputURL), Fetc hInitiatorInfo()); 300 FetchRequest fetchRequest = FetchRequest(ResourceRequest(inputURL), Fetc hInitiatorInfo());
252 if (width > 0) { 301 if (width > 0) {
253 FetchRequest::ResourceWidth resourceWidth; 302 FetchRequest::ResourceWidth resourceWidth;
254 resourceWidth.width = width; 303 resourceWidth.width = width;
255 resourceWidth.isSet = true; 304 resourceWidth.isSet = true;
256 fetchRequest.setResourceWidth(resourceWidth); 305 fetchRequest.setResourceWidth(resourceWidth);
257 } 306 }
258 fetchContext->addClientHintsIfNecessary(fetchRequest); 307 fetchContext->addClientHintsIfNecessary(fetchRequest);
259 308
260 EXPECT_STREQ(isPresent ? headerValue : "", 309 EXPECT_STREQ(isPresent ? headerValue : "",
261 fetchRequest.resourceRequest().httpHeaderField(headerName).utf8().da ta()); 310 fetchRequest.resourceRequest().httpHeaderField(headerName).utf8().da ta());
262 } 311 }
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 }; 312 };
271 313
272 TEST_F(FrameFetchContextHintsTest, MonitorDPRHints) 314 TEST_F(FrameFetchContextHintsTest, MonitorDPRHints)
273 { 315 {
274 expectHeader("http://www.example.com/1.gif", "DPR", false, ""); 316 expectHeader("http://www.example.com/1.gif", "DPR", false, "");
275 ClientHintsPreferences preferences; 317 ClientHintsPreferences preferences;
276 preferences.setShouldSendDPR(true); 318 preferences.setShouldSendDPR(true);
277 document->clientHintsPreferences().updateFrom(preferences); 319 document->clientHintsPreferences().updateFrom(preferences);
278 expectHeader("http://www.example.com/1.gif", "DPR", true, "1"); 320 expectHeader("http://www.example.com/1.gif", "DPR", true, "1");
279 dummyPageHolder->page().setDeviceScaleFactor(2.5); 321 dummyPageHolder->page().setDeviceScaleFactor(2.5);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 ClientHintsPreferences preferences; 358 ClientHintsPreferences preferences;
317 preferences.setShouldSendDPR(true); 359 preferences.setShouldSendDPR(true);
318 preferences.setShouldSendResourceWidth(true); 360 preferences.setShouldSendResourceWidth(true);
319 preferences.setShouldSendViewportWidth(true); 361 preferences.setShouldSendViewportWidth(true);
320 document->clientHintsPreferences().updateFrom(preferences); 362 document->clientHintsPreferences().updateFrom(preferences);
321 expectHeader("http://www.example.com/1.gif", "DPR", true, "1"); 363 expectHeader("http://www.example.com/1.gif", "DPR", true, "1");
322 expectHeader("http://www.example.com/1.gif", "Width", true, "400", 400); 364 expectHeader("http://www.example.com/1.gif", "Width", true, "400", 400);
323 expectHeader("http://www.example.com/1.gif", "Viewport-Width", true, "500"); 365 expectHeader("http://www.example.com/1.gif", "Viewport-Width", true, "500");
324 } 366 }
325 367
326 class StubFrameLoaderClientWithParent final : public EmptyFrameLoaderClient { 368 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 { 369 {
392 // Default case 370 // Default case
393 ResourceRequest request("http://www.example.com"); 371 ResourceRequest request("http://www.example.com");
394 EXPECT_EQ(UseProtocolCachePolicy, fetchContext->resourceRequestCachePolicy(r equest, Resource::MainResource)); 372 EXPECT_EQ(UseProtocolCachePolicy, fetchContext->resourceRequestCachePolicy(r equest, Resource::MainResource));
395 373
396 // Post 374 // Post
397 ResourceRequest postRequest("http://www.example.com"); 375 ResourceRequest postRequest("http://www.example.com");
398 postRequest.setHTTPMethod("POST"); 376 postRequest.setHTTPMethod("POST");
399 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( postRequest, Resource::MainResource)); 377 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( postRequest, Resource::MainResource));
400 378
(...skipping 11 matching lines...) Expand all
412 document->frame()->loader().setLoadType(FrameLoadTypeSame); 390 document->frame()->loader().setLoadType(FrameLoadTypeSame);
413 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( request, Resource::MainResource)); 391 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( request, Resource::MainResource));
414 392
415 // Conditional request 393 // Conditional request
416 document->frame()->loader().setLoadType(FrameLoadTypeStandard); 394 document->frame()->loader().setLoadType(FrameLoadTypeStandard);
417 ResourceRequest conditional("http://www.example.com"); 395 ResourceRequest conditional("http://www.example.com");
418 conditional.setHTTPHeaderField("If-Modified-Since", "foo"); 396 conditional.setHTTPHeaderField("If-Modified-Since", "foo");
419 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( conditional, Resource::MainResource)); 397 EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy( conditional, Resource::MainResource));
420 398
421 // Set up a child frame 399 // Set up a child frame
422 OwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> client = StubFrameLoader ClientWithParent::create(document->frame()); 400 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 401
433 // Child frame as part of back/forward 402 // Child frame as part of back/forward
434 document->frame()->loader().setLoadType(FrameLoadTypeBackForward); 403 document->frame()->loader().setLoadType(FrameLoadTypeBackForward);
435 EXPECT_EQ(ReturnCacheDataElseLoad, childFetchContext->resourceRequestCachePo licy(request, Resource::MainResource)); 404 EXPECT_EQ(ReturnCacheDataElseLoad, childFetchContext->resourceRequestCachePo licy(request, Resource::MainResource));
436 405
437 // Child frame as part of reload 406 // Child frame as part of reload
438 document->frame()->loader().setLoadType(FrameLoadTypeReload); 407 document->frame()->loader().setLoadType(FrameLoadTypeReload);
439 EXPECT_EQ(ReloadIgnoringCacheData, childFetchContext->resourceRequestCachePo licy(request, Resource::MainResource)); 408 EXPECT_EQ(ReloadIgnoringCacheData, childFetchContext->resourceRequestCachePo licy(request, Resource::MainResource));
440 409
441 // Child frame as part of end to end reload 410 // Child frame as part of end to end reload
442 document->frame()->loader().setLoadType(FrameLoadTypeReloadFromOrigin); 411 document->frame()->loader().setLoadType(FrameLoadTypeReloadFromOrigin);
443 EXPECT_EQ(ReloadBypassingCache, childFetchContext->resourceRequestCachePolic y(request, Resource::MainResource)); 412 EXPECT_EQ(ReloadBypassingCache, childFetchContext->resourceRequestCachePolic y(request, Resource::MainResource));
413 }
444 414
445 childDocumentLoader->detachFromFrame(); 415 TEST_F(FrameFetchContextTest, ModifyPriorityForExperiments)
446 childDocumentLoader.clear(); 416 {
447 childFrame->detach(FrameDetachType::Remove); 417 Settings* settings = document->frame()->settings();
418 FetchRequest request(ResourceRequest("http://www.example.com"), FetchInitiat orInfo());
419
420 FetchRequest preloadRequest(ResourceRequest("http://www.example.com"), Fetch InitiatorInfo());
421 preloadRequest.setForPreload(true);
422
423 FetchRequest deferredRequest(ResourceRequest("http://www.example.com"), Fetc hInitiatorInfo());
424 deferredRequest.setDefer(FetchRequest::LazyLoad);
425
426 // Start with all experiments disabled.
427 settings->setFEtchIncreaseAsyncScriptPriority(false);
428 settings->setFEtchIncreaseFontPriority(false);
429 settings->setFEtchDeferLateScripts(false);
430 settings->setFEtchIncreasePriorities(false);
431 settings->setLowPriorityIframes(false);
432
433 // Base case, no priority change. Note that this triggers m_imageFetched, wh ich will matter for setFetchDeferLateScripts() case below.
434 EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiment s(ResourceLoadPriorityLow, Resource::Image, request));
435
436 // Font priority with and without fetchIncreaseFontPriority()
437 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Font, request));
438 settings->setFEtchIncreaseFontPriority(true);
439 EXPECT_EQ(ResourceLoadPriorityHigh, fetchContext->modifyPriorityForExperimen ts(ResourceLoadPriorityMedium, Resource::Font, request));
440
441 // Basic script cases
442 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, request));
443 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
444
445 // Enable deferring late scripts. Preload priority should drop.
446 settings->setFEtchDeferLateScripts(true);
447 EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiment s(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
448
449 // Enable increasing priority of async scripts.
450 EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiment s(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
451 settings->setFEtchIncreaseAsyncScriptPriority(true);
452 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
453
454 // Enable increased priorities for the remainder.
455 settings->setFEtchIncreasePriorities(true);
456
457 // Re-test font priority with increased prioriries
458 settings->setFEtchIncreaseFontPriority(false);
459 EXPECT_EQ(ResourceLoadPriorityHigh, fetchContext->modifyPriorityForExperimen ts(ResourceLoadPriorityMedium, Resource::Font, request));
460 settings->setFEtchIncreaseFontPriority(true);
461 EXPECT_EQ(ResourceLoadPriorityVeryHigh, fetchContext->modifyPriorityForExper iments(ResourceLoadPriorityMedium, Resource::Font, request));
462
463 // Re-test basic script cases and deferring late script case with increased prioriries
464 settings->setFEtchIncreasePriorities(true);
465 settings->setFEtchDeferLateScripts(false);
466 EXPECT_EQ(ResourceLoadPriorityVeryHigh, fetchContext->modifyPriorityForExper iments(ResourceLoadPriorityMedium, Resource::Script, request));
467 EXPECT_EQ(ResourceLoadPriorityHigh, fetchContext->modifyPriorityForExperimen ts(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
468
469 // Re-test deferring late scripts.
470 settings->setFEtchDeferLateScripts(true);
471 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
472
473 // Re-test increasing priority of async scripts. Should ignore general incra esed priorities.
474 settings->setFEtchIncreaseAsyncScriptPriority(false);
475 EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiment s(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
476 settings->setFEtchIncreaseAsyncScriptPriority(true);
477 EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperim ents(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
478
479 // Set up a child frame, test main resource load with and without setLowPrio rityIframes()
480 FrameFetchContext* childFetchContext = createChildFrame();
481 EXPECT_EQ(ResourceLoadPriorityVeryHigh, childFetchContext->modifyPriorityFor Experiments(ResourceLoadPriorityVeryHigh, Resource::MainResource, request));
482 settings->setLowPriorityIframes(true);
483 EXPECT_EQ(ResourceLoadPriorityVeryLow, childFetchContext->modifyPriorityForE xperiments(ResourceLoadPriorityVeryHigh, Resource::MainResource, request));
484
485 // Ensure we don't go out of bounds
486 settings->setFEtchIncreasePriorities(true);
487 EXPECT_EQ(ResourceLoadPriorityVeryHigh, fetchContext->modifyPriorityForExper iments(ResourceLoadPriorityVeryHigh, Resource::Script, request));
488 settings->setFEtchIncreasePriorities(false);
489 settings->setFEtchDeferLateScripts(true);
490 EXPECT_EQ(ResourceLoadPriorityVeryLow, fetchContext->modifyPriorityForExperi ments(ResourceLoadPriorityVeryLow, Resource::Script, preloadRequest));
448 } 491 }
449 492
450 } // namespace 493 } // 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