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

Unified Diff: Source/core/loader/FrameFetchContextTest.cpp

Issue 1213913003: Don't revalidate all resources for FrameLoadTypeSame (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix oilpan + assert failures Created 5 years, 5 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') | Source/core/loader/FrameLoader.cpp » ('j') | 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 7ca3d2370fcde01a59995dc73307740e78d19590..8d570b147aeca64b7dbabeafa16226699963884c 100644
--- a/Source/core/loader/FrameFetchContextTest.cpp
+++ b/Source/core/loader/FrameFetchContextTest.cpp
@@ -32,9 +32,12 @@
#include "core/loader/FrameFetchContext.h"
#include "core/fetch/FetchInitiatorInfo.h"
+#include "core/frame/FrameHost.h"
+#include "core/frame/FrameOwner.h"
#include "core/frame/FrameView.h"
#include "core/html/HTMLDocument.h"
#include "core/loader/DocumentLoader.h"
+#include "core/loader/EmptyClients.h"
#include "core/page/Page.h"
#include "core/testing/DummyPageHolder.h"
#include "platform/network/ResourceRequest.h"
@@ -320,4 +323,116 @@ TEST_F(FrameFetchContextHintsTest, MonitorAllHints)
expectHeader("http://www.example.com/1.gif", "Viewport-Width", true, "500");
}
+class StubFrameLoaderClientWithParent : public EmptyFrameLoaderClient {
+public:
+ explicit StubFrameLoaderClientWithParent(Frame* parent)
+ : m_parent(parent)
+ {
+ }
+
+ Frame* parent() const override { return m_parent; }
+
+private:
+ 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)
+{
+ // Default case
+ ResourceRequest request("http://www.example.com");
+ EXPECT_EQ(UseProtocolCachePolicy, fetchContext->resourceRequestCachePolicy(request, Resource::MainResource));
+
+ // Post
+ ResourceRequest postRequest("http://www.example.com");
+ postRequest.setHTTPMethod("POST");
+ EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy(postRequest, Resource::MainResource));
+
+ // Re-post
+ document->frame()->loader().setLoadType(FrameLoadTypeBackForward);
+ EXPECT_EQ(ReturnCacheDataDontLoad, fetchContext->resourceRequestCachePolicy(postRequest, Resource::MainResource));
+
+ // Enconding overriden
+ document->frame()->loader().setLoadType(FrameLoadTypeStandard);
+ document->frame()->host()->setOverrideEncoding("foo");
+ EXPECT_EQ(ReturnCacheDataElseLoad, fetchContext->resourceRequestCachePolicy(request, Resource::MainResource));
+ document->frame()->host()->setOverrideEncoding(AtomicString());
+
+ // FrameLoadTypeSame
+ document->frame()->loader().setLoadType(FrameLoadTypeSame);
+ EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy(request, Resource::MainResource));
+
+ // Conditional request
+ document->frame()->loader().setLoadType(FrameLoadTypeStandard);
+ ResourceRequest conditional("http://www.example.com");
+ conditional.setHTTPHeaderField("If-Modified-Since", "foo");
+ EXPECT_EQ(ReloadIgnoringCacheData, fetchContext->resourceRequestCachePolicy(conditional, Resource::MainResource));
+
+ // Set up a child frame
+ StubFrameLoaderClientWithParent client(document->frame());
+ StubFrameOwner owner;
+ RefPtrWillBeRawPtr<LocalFrame> childFrame = LocalFrame::create(&client, 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());
+
+ // Child frame as part of back/forward
+ document->frame()->loader().setLoadType(FrameLoadTypeBackForward);
+ EXPECT_EQ(ReturnCacheDataElseLoad, childFetchContext->resourceRequestCachePolicy(request, Resource::MainResource));
+
+ // Child frame as part of reload
+ document->frame()->loader().setLoadType(FrameLoadTypeReload);
+ EXPECT_EQ(ReloadIgnoringCacheData, childFetchContext->resourceRequestCachePolicy(request, Resource::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();
+}
+
} // namespace
« no previous file with comments | « Source/core/loader/FrameFetchContext.cpp ('k') | Source/core/loader/FrameLoader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698