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

Unified Diff: third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp

Issue 2871233002: Separate preload matching from MemoryCache (Closed)
Patch Set: fix Created 3 years, 7 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 | « third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp
index 6b3047689356e9cb628ceb566dd552ee86c0ff1a..13638fc15d3dec5318932fa6d19a7db4b7227d27 100644
--- a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp
+++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp
@@ -493,18 +493,22 @@ TEST_F(ResourceFetcherTest, PreloadResourceTwice) {
FetchParameters fetch_params_original =
FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
+ fetch_params_original.SetLinkPreload(true);
Resource* resource = MockResource::Fetch(fetch_params_original, fetcher);
ASSERT_TRUE(resource);
+ EXPECT_TRUE(resource->IsLinkPreload());
+ EXPECT_TRUE(fetcher->ContainsAsPreload(resource));
Platform::Current()->GetURLLoaderMockFactory()->ServeAsynchronousRequests();
- fetcher->PreloadStarted(resource);
FetchParameters fetch_params =
FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
+ fetch_params.SetLinkPreload(true);
Resource* new_resource = MockResource::Fetch(fetch_params, fetcher);
EXPECT_EQ(resource, new_resource);
- fetcher->PreloadStarted(resource);
+ EXPECT_TRUE(fetcher->ContainsAsPreload(resource));
fetcher->ClearPreloads(ResourceFetcher::kClearAllPreloads);
+ EXPECT_FALSE(fetcher->ContainsAsPreload(resource));
EXPECT_FALSE(GetMemoryCache()->Contains(resource));
EXPECT_FALSE(resource->IsPreloaded());
}
@@ -523,7 +527,6 @@ TEST_F(ResourceFetcherTest, LinkPreloadResourceAndUse) {
ASSERT_TRUE(resource);
EXPECT_TRUE(resource->IsLinkPreload());
Platform::Current()->GetURLLoaderMockFactory()->ServeAsynchronousRequests();
- fetcher->PreloadStarted(resource);
// Resource created by preload scanner
FetchParameters fetch_params_preload_scanner =
@@ -532,7 +535,6 @@ TEST_F(ResourceFetcherTest, LinkPreloadResourceAndUse) {
MockResource::Fetch(fetch_params_preload_scanner, fetcher);
EXPECT_EQ(resource, preload_scanner_resource);
EXPECT_FALSE(resource->IsLinkPreload());
- fetcher->PreloadStarted(resource);
// Resource created by parser
FetchParameters fetch_params =
@@ -548,7 +550,29 @@ TEST_F(ResourceFetcherTest, LinkPreloadResourceAndUse) {
EXPECT_FALSE(resource->IsPreloaded());
}
-TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndUse) {
+TEST_F(ResourceFetcherTest, PreloadMatchWithBypassingCache) {
+ ResourceFetcher* fetcher = ResourceFetcher::Create(Context());
+ KURL url(kParsedURLString, "http://127.0.0.1:8000/foo.png");
+ RegisterMockedURLLoad(url);
+
+ FetchParameters fetch_params_original =
+ FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
+ fetch_params_original.SetLinkPreload(true);
+ Resource* resource = MockResource::Fetch(fetch_params_original, fetcher);
+ ASSERT_TRUE(resource);
+ EXPECT_TRUE(resource->IsLinkPreload());
+ Platform::Current()->GetURLLoaderMockFactory()->ServeAsynchronousRequests();
+
+ FetchParameters fetch_params_second =
+ FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
+ fetch_params_second.MutableResourceRequest().SetCachePolicy(
+ WebCachePolicy::kBypassingCache);
+ Resource* second_resource = MockResource::Fetch(fetch_params_second, fetcher);
+ EXPECT_EQ(resource, second_resource);
+ EXPECT_FALSE(resource->IsLinkPreload());
+}
+
+TEST_F(ResourceFetcherTest, CrossFramePreloadMatchIsNotAllowed) {
ResourceFetcher* fetcher = ResourceFetcher::Create(Context());
ResourceFetcher* fetcher2 = ResourceFetcher::Create(Context());
@@ -562,73 +586,116 @@ TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndUse) {
ASSERT_TRUE(resource);
EXPECT_TRUE(resource->IsLinkPreload());
Platform::Current()->GetURLLoaderMockFactory()->ServeAsynchronousRequests();
- fetcher->PreloadStarted(resource);
FetchParameters fetch_params_second =
FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
- fetch_params_second.SetLinkPreload(true);
+ fetch_params_second.MutableResourceRequest().SetCachePolicy(
+ WebCachePolicy::kBypassingCache);
Resource* second_resource =
MockResource::Fetch(fetch_params_second, fetcher2);
- ASSERT_TRUE(second_resource);
- EXPECT_TRUE(second_resource->IsLinkPreload());
- Platform::Current()->GetURLLoaderMockFactory()->ServeAsynchronousRequests();
- fetcher2->PreloadStarted(second_resource);
- // Link rel preload scanner
- FetchParameters fetch_params_link_preload_scanner =
- FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
- fetch_params_link_preload_scanner.SetLinkPreload(true);
- Resource* link_preload_scanner_resource =
- MockResource::Fetch(fetch_params_link_preload_scanner, fetcher);
- EXPECT_EQ(resource, link_preload_scanner_resource);
+ EXPECT_NE(resource, second_resource);
EXPECT_TRUE(resource->IsLinkPreload());
- fetcher->PreloadStarted(resource);
+}
- // Resource created by preload scanner
- FetchParameters fetch_params_preload_scanner =
- FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
- Resource* preload_scanner_resource =
- MockResource::Fetch(fetch_params_preload_scanner, fetcher);
- EXPECT_EQ(resource, preload_scanner_resource);
- EXPECT_FALSE(resource->IsLinkPreload());
- fetcher->PreloadStarted(resource);
+TEST_F(ResourceFetcherTest, RepetitiveLinkPreloadShouldBeMerged) {
+ ResourceFetcher* fetcher = ResourceFetcher::Create(Context());
- // Resource created by preload scanner on the second fetcher
- FetchParameters fetch_params_preload_scanner2 =
- FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
- Resource* preload_scanner_resource2 =
- MockResource::Fetch(fetch_params_preload_scanner2, fetcher2);
- EXPECT_EQ(resource, preload_scanner_resource2);
- EXPECT_FALSE(resource->IsLinkPreload());
- fetcher2->PreloadStarted(resource);
+ KURL url(kParsedURLString, "http://127.0.0.1:8000/foo.png");
+ RegisterMockedURLLoad(url);
- // Resource created by parser
- FetchParameters fetch_params =
+ FetchParameters fetch_params_for_request =
FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
- Resource* new_resource = MockResource::Fetch(fetch_params, fetcher);
- Persistent<MockResourceClient> client = new MockResourceClient(new_resource);
- EXPECT_EQ(resource, new_resource);
- EXPECT_FALSE(resource->IsLinkPreload());
+ FetchParameters fetch_params_for_preload = fetch_params_for_request;
+ fetch_params_for_preload.SetLinkPreload(true);
- // Resource created by parser on the second fetcher
- FetchParameters fetch_params2 =
+ Resource* resource1 = MockResource::Fetch(fetch_params_for_preload, fetcher);
+ ASSERT_TRUE(resource1);
+ EXPECT_TRUE(resource1->IsPreloaded());
+ EXPECT_TRUE(fetcher->ContainsAsPreload(resource1));
+ Platform::Current()->GetURLLoaderMockFactory()->ServeAsynchronousRequests();
+
+ // The second preload fetch returnes the first preload.
+ Resource* resource2 = MockResource::Fetch(fetch_params_for_preload, fetcher);
+ EXPECT_TRUE(fetcher->ContainsAsPreload(resource1));
+ EXPECT_TRUE(resource1->IsPreloaded());
+ EXPECT_EQ(resource1, resource2);
+
+ // preload matching
+ Resource* resource3 = MockResource::Fetch(fetch_params_for_request, fetcher);
+ EXPECT_EQ(resource1, resource3);
+ EXPECT_FALSE(fetcher->ContainsAsPreload(resource1));
+ EXPECT_FALSE(resource1->IsPreloaded());
+}
+
+TEST_F(ResourceFetcherTest, RepetitiveSpeculativePreloadShouldBeMerged) {
+ ResourceFetcher* fetcher = ResourceFetcher::Create(Context());
+
+ KURL url(kParsedURLString, "http://127.0.0.1:8000/foo.png");
+ RegisterMockedURLLoad(url);
+
+ FetchParameters fetch_params_for_request =
FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
- Resource* new_resource2 = MockResource::Fetch(fetch_params, fetcher2);
- Persistent<MockResourceClient> client2 =
- new MockResourceClient(new_resource2);
- EXPECT_EQ(resource, new_resource2);
- EXPECT_FALSE(resource->IsLinkPreload());
+ FetchParameters fetch_params_for_preload = fetch_params_for_request;
+ fetch_params_for_preload.SetSpeculativePreloadType(
+ FetchParameters::SpeculativePreloadType::kInDocument);
+
+ Resource* resource1 = MockResource::Fetch(fetch_params_for_preload, fetcher);
+ ASSERT_TRUE(resource1);
+ EXPECT_TRUE(resource1->IsPreloaded());
+ EXPECT_TRUE(fetcher->ContainsAsPreload(resource1));
+ Platform::Current()->GetURLLoaderMockFactory()->ServeAsynchronousRequests();
- // DCL reached on first fetcher
- EXPECT_TRUE(resource->IsPreloaded());
- fetcher->ClearPreloads(ResourceFetcher::kClearSpeculativeMarkupPreloads);
- EXPECT_TRUE(GetMemoryCache()->Contains(resource));
- EXPECT_TRUE(resource->IsPreloaded());
+ // The second preload fetch returnes the first preload.
+ Resource* resource2 = MockResource::Fetch(fetch_params_for_preload, fetcher);
+ EXPECT_TRUE(fetcher->ContainsAsPreload(resource1));
+ EXPECT_TRUE(resource1->IsPreloaded());
+ EXPECT_EQ(resource1, resource2);
+
+ // preload matching
+ Resource* resource3 = MockResource::Fetch(fetch_params_for_request, fetcher);
+ EXPECT_EQ(resource1, resource3);
+ EXPECT_FALSE(fetcher->ContainsAsPreload(resource1));
+ EXPECT_FALSE(resource1->IsPreloaded());
+}
- // DCL reached on second fetcher
- fetcher2->ClearPreloads(ResourceFetcher::kClearSpeculativeMarkupPreloads);
- EXPECT_TRUE(GetMemoryCache()->Contains(resource));
- EXPECT_FALSE(resource->IsPreloaded());
+TEST_F(ResourceFetcherTest, SpeculativePreloadShouldBePromotedToLinkePreload) {
+ ResourceFetcher* fetcher = ResourceFetcher::Create(Context());
+
+ KURL url(kParsedURLString, "http://127.0.0.1:8000/foo.png");
+ RegisterMockedURLLoad(url);
+
+ FetchParameters fetch_params_for_request =
+ FetchParameters(ResourceRequest(url), FetchInitiatorInfo());
+ FetchParameters fetch_params_for_speculative_preload =
+ fetch_params_for_request;
+ fetch_params_for_speculative_preload.SetSpeculativePreloadType(
+ FetchParameters::SpeculativePreloadType::kInDocument);
+ FetchParameters fetch_params_for_link_preload = fetch_params_for_request;
+ fetch_params_for_link_preload.SetLinkPreload(true);
+
+ Resource* resource1 =
+ MockResource::Fetch(fetch_params_for_speculative_preload, fetcher);
+ ASSERT_TRUE(resource1);
+ EXPECT_TRUE(resource1->IsPreloaded());
+ EXPECT_FALSE(resource1->IsLinkPreload());
+ EXPECT_TRUE(fetcher->ContainsAsPreload(resource1));
+ Platform::Current()->GetURLLoaderMockFactory()->ServeAsynchronousRequests();
+
+ // The second preload fetch returnes the first preload.
+ Resource* resource2 =
+ MockResource::Fetch(fetch_params_for_link_preload, fetcher);
+ EXPECT_TRUE(fetcher->ContainsAsPreload(resource1));
+ EXPECT_TRUE(resource1->IsPreloaded());
+ EXPECT_TRUE(resource1->IsLinkPreload());
+ EXPECT_EQ(resource1, resource2);
+
+ // preload matching
+ Resource* resource3 = MockResource::Fetch(fetch_params_for_request, fetcher);
+ EXPECT_EQ(resource1, resource3);
+ EXPECT_FALSE(fetcher->ContainsAsPreload(resource1));
+ EXPECT_FALSE(resource1->IsPreloaded());
+ EXPECT_FALSE(resource1->IsLinkPreload());
}
TEST_F(ResourceFetcherTest, Revalidate304) {
@@ -670,7 +737,6 @@ TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndMove) {
ASSERT_TRUE(resource);
EXPECT_TRUE(resource->IsLinkPreload());
EXPECT_FALSE(fetcher->IsFetching());
- fetcher->PreloadStarted(resource);
// Resource created by parser on the second fetcher
FetchParameters fetch_params2 =
« no previous file with comments | « third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698