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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/loader/FrameFetchContext.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/loader/FrameFetchContextTest.cpp
diff --git a/Source/core/loader/FrameFetchContextTest.cpp b/Source/core/loader/FrameFetchContextTest.cpp
index 75ae5c2da912923f1797d4be95218dc7c2d1b976..e948beee3ba088bcbeaa440d269a480b962c5a0e 100644
--- a/Source/core/loader/FrameFetchContextTest.cpp
+++ b/Source/core/loader/FrameFetchContextTest.cpp
@@ -35,6 +35,7 @@
#include "core/frame/FrameHost.h"
#include "core/frame/FrameOwner.h"
#include "core/frame/FrameView.h"
+#include "core/frame/Settings.h"
#include "core/html/HTMLDocument.h"
#include "core/loader/DocumentLoader.h"
#include "core/loader/EmptyClients.h"
@@ -46,32 +47,103 @@
namespace blink {
-class FrameFetchContextUpgradeTest : public ::testing::Test {
+class StubFrameLoaderClientWithParent final : public EmptyFrameLoaderClient {
Nate Chapin 2015/09/01 23:54:47 Moved without modification from farther down in th
public:
- FrameFetchContextUpgradeTest()
- : secureURL(ParsedURLString, "https://secureorigin.test/image.png")
- , exampleOrigin(SecurityOrigin::create(KURL(ParsedURLString, "https://example.test/")))
- , secureOrigin(SecurityOrigin::create(secureURL))
+ static PassOwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> create(Frame* parent)
+ {
+ return adoptPtrWillBeNoop(new StubFrameLoaderClientWithParent(parent));
+ }
+
+ DEFINE_INLINE_VIRTUAL_TRACE()
{
+ visitor->trace(m_parent);
+ EmptyFrameLoaderClient::trace(visitor);
}
+ Frame* parent() const override { return m_parent.get(); }
+
+private:
+ explicit StubFrameLoaderClientWithParent(Frame* parent)
+ : m_parent(parent)
+ {
+ }
+
+ RawPtrWillBeMember<Frame> m_parent;
+};
+
+class StubFrameOwner : public NoBaseWillBeGarbageCollectedFinalized<StubFrameOwner>, public FrameOwner {
Nate Chapin 2015/09/01 23:54:47 Moved without modification from farther down in th
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(StubFrameOwner);
+public:
+ DEFINE_INLINE_VIRTUAL_TRACE() { FrameOwner::trace(visitor); }
+
+ bool isLocal() const override { return false; }
+ SandboxFlags sandboxFlags() const override { return SandboxNone; }
+ void dispatchLoad() override { }
+ void renderFallbackContent() override { }
+};
+
+class FrameFetchContextTest : public ::testing::Test {
protected:
- virtual void SetUp()
+ void SetUp() override
{
dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
dummyPageHolder->page().setDeviceScaleFactor(1.0);
documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), ResourceRequest("http://www.example.com"), SubstituteData());
document = toHTMLDocument(&dummyPageHolder->document());
- fetchContext = &documentLoader->fetcher()->context();
+ fetchContext = static_cast<FrameFetchContext*>(&documentLoader->fetcher()->context());
FrameFetchContext::provideDocumentToContext(*fetchContext, document.get());
}
- virtual void TearDown()
+ void TearDown() override
{
documentLoader->detachFromFrame();
documentLoader.clear();
+
+ if (childFrame) {
+ childDocumentLoader->detachFromFrame();
+ childDocumentLoader.clear();
+ childFrame->detach(FrameDetachType::Remove);
+ }
}
+ FrameFetchContext* createChildFrame()
+ {
+ childClient = StubFrameLoaderClientWithParent::create(document->frame());
+ childFrame = LocalFrame::create(childClient.get(), document->frame()->host(), &owner);
+ childFrame->setView(FrameView::create(childFrame.get(), IntSize(500, 500)));
+ childFrame->init();
+ childDocumentLoader = DocumentLoader::create(childFrame.get(), ResourceRequest("http://www.example.com"), SubstituteData());
+ childDocument = childFrame->document();
+ FrameFetchContext* childFetchContext = static_cast<FrameFetchContext*>(&childDocumentLoader->fetcher()->context());
+ FrameFetchContext::provideDocumentToContext(*childFetchContext, childDocument.get());
+ return childFetchContext;
+ }
+
+ OwnPtr<DummyPageHolder> dummyPageHolder;
+ // We don't use the DocumentLoader directly in any tests, but need to keep it around as long
+ // as the ResourceFetcher and Document live due to indirect usage.
+ RefPtrWillBePersistent<DocumentLoader> documentLoader;
dcheng 2015/09/02 17:17:12 It might be nice to update these to use the right
+ RefPtrWillBePersistent<Document> document;
+ Persistent<FrameFetchContext> fetchContext;
+
+ OwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> childClient;
+ RefPtrWillBeRawPtr<LocalFrame> childFrame;
+ RefPtrWillBePersistent<DocumentLoader> childDocumentLoader;
+ RefPtrWillBePersistent<Document> childDocument;
+ StubFrameOwner owner;
+
+};
+
+class FrameFetchContextUpgradeTest : public FrameFetchContextTest {
+public:
+ FrameFetchContextUpgradeTest()
+ : 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.
+ , exampleOrigin(SecurityOrigin::create(KURL(ParsedURLString, "https://example.test/")))
+ , secureOrigin(SecurityOrigin::create(secureURL))
+ {
+ }
+
+protected:
void expectUpgrade(const char* input, const char* expected)
{
expectUpgrade(input, WebURLRequest::RequestContextScript, WebURLRequest::FrameTypeNone, expected);
@@ -113,13 +185,6 @@ protected:
KURL secureURL;
RefPtr<SecurityOrigin> exampleOrigin;
RefPtr<SecurityOrigin> secureOrigin;
-
- OwnPtr<DummyPageHolder> dummyPageHolder;
- // We don't use the DocumentLoader directly in any tests, but need to keep it around as long
- // as the ResourceFetcher and Document live due to indirect usage.
- RefPtrWillBePersistent<DocumentLoader> documentLoader;
- RefPtrWillBePersistent<Document> document;
- Persistent<FetchContext> fetchContext;
};
TEST_F(FrameFetchContextUpgradeTest, UpgradeInsecureResourceRequests)
@@ -224,27 +289,11 @@ TEST_F(FrameFetchContextUpgradeTest, SendHTTPSHeader)
}
}
-class FrameFetchContextHintsTest : public ::testing::Test {
+class FrameFetchContextHintsTest : public FrameFetchContextTest {
public:
FrameFetchContextHintsTest() { }
protected:
- virtual void SetUp()
- {
- dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
- dummyPageHolder->page().setDeviceScaleFactor(1.0);
- documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), ResourceRequest("http://www.example.com"), SubstituteData());
- document = toHTMLDocument(&dummyPageHolder->document());
- fetchContext = static_cast<FrameFetchContext*>(&documentLoader->fetcher()->context());
- FrameFetchContext::provideDocumentToContext(*fetchContext, document.get());
- }
-
- virtual void TearDown()
- {
- documentLoader->detachFromFrame();
- documentLoader.clear();
- }
-
void expectHeader(const char* input, const char* headerName, bool isPresent, const char* headerValue, float width = 0)
{
KURL inputURL(ParsedURLString, input);
@@ -260,13 +309,6 @@ protected:
EXPECT_STREQ(isPresent ? headerValue : "",
fetchRequest.resourceRequest().httpHeaderField(headerName).utf8().data());
}
-
- OwnPtr<DummyPageHolder> dummyPageHolder;
- // We don't use the DocumentLoader directly in any tests, but need to keep it around as long
- // as the ResourceFetcher and Document live due to indirect usage.
- RefPtrWillBePersistent<DocumentLoader> documentLoader;
- RefPtrWillBePersistent<Document> document;
- Persistent<FrameFetchContext> fetchContext;
};
TEST_F(FrameFetchContextHintsTest, MonitorDPRHints)
@@ -323,71 +365,7 @@ TEST_F(FrameFetchContextHintsTest, MonitorAllHints)
expectHeader("http://www.example.com/1.gif", "Viewport-Width", true, "500");
}
-class StubFrameLoaderClientWithParent final : public EmptyFrameLoaderClient {
-public:
- static PassOwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> create(Frame* parent)
- {
- return adoptPtrWillBeNoop(new StubFrameLoaderClientWithParent(parent));
- }
-
- DEFINE_INLINE_VIRTUAL_TRACE()
- {
- visitor->trace(m_parent);
- EmptyFrameLoaderClient::trace(visitor);
- }
-
- Frame* parent() const override { return m_parent.get(); }
-
-private:
- explicit StubFrameLoaderClientWithParent(Frame* parent)
- : m_parent(parent)
- {
- }
-
- RawPtrWillBeMember<Frame> m_parent;
-};
-
-class StubFrameOwner : public NoBaseWillBeGarbageCollectedFinalized<StubFrameOwner>, public FrameOwner {
- WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(StubFrameOwner);
-public:
- DEFINE_INLINE_VIRTUAL_TRACE() { FrameOwner::trace(visitor); }
-
- bool isLocal() const override { return false; }
- SandboxFlags sandboxFlags() const override { return SandboxNone; }
- void dispatchLoad() override { }
- void renderFallbackContent() override { }
-};
-
-class FrameFetchContextCachePolicyTest : public ::testing::Test {
-public:
- FrameFetchContextCachePolicyTest() { }
-
-protected:
- void SetUp() override
- {
- dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
- dummyPageHolder->page().setDeviceScaleFactor(1.0);
- documentLoader = DocumentLoader::create(&dummyPageHolder->frame(), ResourceRequest("http://www.example.com"), SubstituteData());
- document = toHTMLDocument(&dummyPageHolder->document());
- fetchContext = static_cast<FrameFetchContext*>(&documentLoader->fetcher()->context());
- FrameFetchContext::provideDocumentToContext(*fetchContext, document.get());
- }
-
- void TearDown() override
- {
- documentLoader->detachFromFrame();
- documentLoader.clear();
- }
-
- OwnPtr<DummyPageHolder> dummyPageHolder;
- // We don't use the DocumentLoader directly in any tests, but need to keep it around as long
- // as the ResourceFetcher and Document live due to indirect usage.
- RefPtrWillBePersistent<DocumentLoader> documentLoader;
- RefPtrWillBePersistent<Document> document;
- Persistent<FrameFetchContext> fetchContext;
-};
-
-TEST_F(FrameFetchContextCachePolicyTest, MainResource)
+TEST_F(FrameFetchContextTest, MainResource)
{
// Default case
ResourceRequest request("http://www.example.com");
@@ -419,16 +397,7 @@ TEST_F(FrameFetchContextCachePolicyTest, MainResource)
EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy(conditional, Resource::MainResource));
// Set up a child frame
- OwnPtrWillBeRawPtr<StubFrameLoaderClientWithParent> client = StubFrameLoaderClientWithParent::create(document->frame());
- StubFrameOwner owner;
- RefPtrWillBeRawPtr<LocalFrame> childFrame = LocalFrame::create(client.get(), document->frame()->host(), &owner);
- childFrame->setView(FrameView::create(childFrame.get(), IntSize(500, 500)));
- childFrame->init();
- RefPtrWillBePersistent<DocumentLoader> childDocumentLoader =
- DocumentLoader::create(childFrame.get(), ResourceRequest("http://www.example.com"), SubstituteData());
- RefPtrWillBePersistent<Document> childDocument = childFrame->document();
- FrameFetchContext* childFetchContext = static_cast<FrameFetchContext*>(&childDocumentLoader->fetcher()->context());
- FrameFetchContext::provideDocumentToContext(*childFetchContext, childDocument.get());
+ FrameFetchContext* childFetchContext = createChildFrame();
// Child frame as part of back/forward
document->frame()->loader().setLoadType(FrameLoadTypeBackForward);
@@ -441,10 +410,84 @@ TEST_F(FrameFetchContextCachePolicyTest, MainResource)
// Child frame as part of end to end reload
document->frame()->loader().setLoadType(FrameLoadTypeReloadFromOrigin);
EXPECT_EQ(ReloadBypassingCache, childFetchContext->resourceRequestCachePolicy(request, Resource::MainResource));
+}
- childDocumentLoader->detachFromFrame();
- childDocumentLoader.clear();
- childFrame->detach(FrameDetachType::Remove);
+TEST_F(FrameFetchContextTest, ModifyPriorityForExperiments)
+{
+ Settings* settings = document->frame()->settings();
+ FetchRequest request(ResourceRequest("http://www.example.com"), FetchInitiatorInfo());
+
+ FetchRequest preloadRequest(ResourceRequest("http://www.example.com"), FetchInitiatorInfo());
+ preloadRequest.setForPreload(true);
+
+ FetchRequest deferredRequest(ResourceRequest("http://www.example.com"), FetchInitiatorInfo());
+ deferredRequest.setDefer(FetchRequest::LazyLoad);
+
+ // Start with all experiments disabled.
+ settings->setFEtchIncreaseAsyncScriptPriority(false);
+ settings->setFEtchIncreaseFontPriority(false);
+ settings->setFEtchDeferLateScripts(false);
+ settings->setFEtchIncreasePriorities(false);
+ settings->setLowPriorityIframes(false);
+
+ // Base case, no priority change. Note that this triggers m_imageFetched, which will matter for setFetchDeferLateScripts() case below.
+ EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityLow, Resource::Image, request));
+
+ // Font priority with and without fetchIncreaseFontPriority()
+ EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Font, request));
+ settings->setFEtchIncreaseFontPriority(true);
+ EXPECT_EQ(ResourceLoadPriorityHigh, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Font, request));
+
+ // Basic script cases
+ EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, request));
+ EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
+
+ // Enable deferring late scripts. Preload priority should drop.
+ settings->setFEtchDeferLateScripts(true);
+ EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
+
+ // Enable increasing priority of async scripts.
+ EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
+ settings->setFEtchIncreaseAsyncScriptPriority(true);
+ EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
+
+ // Enable increased priorities for the remainder.
+ settings->setFEtchIncreasePriorities(true);
+
+ // Re-test font priority with increased prioriries
+ settings->setFEtchIncreaseFontPriority(false);
+ EXPECT_EQ(ResourceLoadPriorityHigh, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Font, request));
+ settings->setFEtchIncreaseFontPriority(true);
+ EXPECT_EQ(ResourceLoadPriorityVeryHigh, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Font, request));
+
+ // Re-test basic script cases and deferring late script case with increased prioriries
+ settings->setFEtchIncreasePriorities(true);
+ settings->setFEtchDeferLateScripts(false);
+ EXPECT_EQ(ResourceLoadPriorityVeryHigh, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, request));
+ EXPECT_EQ(ResourceLoadPriorityHigh, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
+
+ // Re-test deferring late scripts.
+ settings->setFEtchDeferLateScripts(true);
+ EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, preloadRequest));
+
+ // Re-test increasing priority of async scripts. Should ignore general incraesed priorities.
+ settings->setFEtchIncreaseAsyncScriptPriority(false);
+ EXPECT_EQ(ResourceLoadPriorityLow, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
+ settings->setFEtchIncreaseAsyncScriptPriority(true);
+ EXPECT_EQ(ResourceLoadPriorityMedium, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityMedium, Resource::Script, deferredRequest));
+
+ // Set up a child frame, test main resource load with and without setLowPriorityIframes()
+ FrameFetchContext* childFetchContext = createChildFrame();
+ EXPECT_EQ(ResourceLoadPriorityVeryHigh, childFetchContext->modifyPriorityForExperiments(ResourceLoadPriorityVeryHigh, Resource::MainResource, request));
+ settings->setLowPriorityIframes(true);
+ EXPECT_EQ(ResourceLoadPriorityVeryLow, childFetchContext->modifyPriorityForExperiments(ResourceLoadPriorityVeryHigh, Resource::MainResource, request));
+
+ // Ensure we don't go out of bounds
+ settings->setFEtchIncreasePriorities(true);
+ EXPECT_EQ(ResourceLoadPriorityVeryHigh, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityVeryHigh, Resource::Script, request));
+ settings->setFEtchIncreasePriorities(false);
+ settings->setFEtchDeferLateScripts(true);
+ EXPECT_EQ(ResourceLoadPriorityVeryLow, fetchContext->modifyPriorityForExperiments(ResourceLoadPriorityVeryLow, Resource::Script, preloadRequest));
}
} // namespace
« 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