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

Unified Diff: third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp

Issue 2319483002: Turn off isLinkPreload() when used (Closed)
Patch Set: Using a mock resource client Created 4 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
Index: third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
index 8f0084cc9974b7945f23fbd28f3634a819a86e54..05646be376de3df3f056119a39d446eed5078488 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
@@ -34,6 +34,7 @@
#include "core/fetch/FetchInitiatorTypeNames.h"
#include "core/fetch/FetchRequest.h"
#include "core/fetch/MemoryCache.h"
+#include "core/fetch/MockResourceClients.h"
#include "core/fetch/RawResource.h"
#include "core/fetch/ResourceLoader.h"
#include "platform/exported/WrappedResourceResponse.h"
@@ -513,7 +514,130 @@ TEST_F(ResourceFetcherTest, SynchronousRequest)
EXPECT_TRUE(resource->isLoaded());
EXPECT_EQ(ResourceLoadPriorityHighest, resource->resourceRequest().priority());
+ Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
memoryCache()->remove(resource);
}
+TEST_F(ResourceFetcherTest, PreloadImageTwice)
+{
+ ResourceFetcher* fetcher = ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
+
+ KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
+ ResourceResponse response;
+ response.setURL(url);
+ response.setHTTPStatusCode(200);
+ URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, testImageFilename, WebString::fromUTF8(""), WrappedResourceResponse(response));
+
+ FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
+ Resource* resource = fetcher->requestResource(fetchRequestOriginal, TestResourceFactory(Resource::Image));
+ ASSERT_TRUE(resource);
+ Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
+ fetcher->preloadStarted(resource);
+
+ FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
+ Resource* newResource = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Image));
+ EXPECT_EQ(resource, newResource);
+ fetcher->preloadStarted(resource);
+
+ fetcher->clearPreloads(ResourceFetcher::ClearAllPreloads);
+ Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
+ EXPECT_FALSE(memoryCache()->contains(resource));
+ EXPECT_FALSE(resource->isPreloaded());
+}
+
+
+TEST_F(ResourceFetcherTest, LinkPreloadImageAndUse)
+{
+ ResourceFetcher* fetcher = ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
+
+ KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
+ ResourceResponse response;
+ response.setURL(url);
+ response.setHTTPStatusCode(200);
+ URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, testImageFilename, WebString::fromUTF8(""), WrappedResourceResponse(response));
+
+ // Link preload preload scanner
+ FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
+ fetchRequestOriginal.setLinkPreload(true);
+ Resource* resource = fetcher->requestResource(fetchRequestOriginal, TestResourceFactory(Resource::Image));
+ ASSERT_TRUE(resource);
+ EXPECT_TRUE(resource->isLinkPreload());
+ Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
+ fetcher->preloadStarted(resource);
+
+ // Image preload scanner
+ FetchRequest fetchRequestPreloadScanner = FetchRequest(url, FetchInitiatorInfo());
+ Resource* imgPreloadScannerResource = fetcher->requestResource(fetchRequestPreloadScanner, TestResourceFactory(Resource::Image));
+ EXPECT_EQ(resource, imgPreloadScannerResource);
+ EXPECT_FALSE(resource->isLinkPreload());
+ fetcher->preloadStarted(resource);
+
+ // Image created by parser
+ FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
+ Resource* newResource = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Image));
+ Persistent<MockResourceClient> client = new MockResourceClient(newResource);
+ EXPECT_EQ(resource, newResource);
+ EXPECT_FALSE(resource->isLinkPreload());
+
+ // DCL reached
+ fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
+ Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
+ EXPECT_TRUE(memoryCache()->contains(resource));
+ EXPECT_FALSE(resource->isPreloaded());
+}
+
+TEST_F(ResourceFetcherTest, LinkPreloadImageMultipleFetchersAndUse)
+{
+ ResourceFetcher* fetcher = ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
+ ResourceFetcher* fetcher2 = ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
+
+ KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
+ ResourceResponse response;
+ response.setURL(url);
+ response.setHTTPStatusCode(200);
+ URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, testImageFilename, WebString::fromUTF8(""), WrappedResourceResponse(response));
+
+ FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
+ fetchRequestOriginal.setLinkPreload(true);
+ Resource* resource = fetcher->requestResource(fetchRequestOriginal, TestResourceFactory(Resource::Image));
+ ASSERT_TRUE(resource);
+ EXPECT_TRUE(resource->isLinkPreload());
+ Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
+ fetcher->preloadStarted(resource);
+
+ FetchRequest fetchRequestSecond = FetchRequest(url, FetchInitiatorInfo());
+ fetchRequestSecond.setLinkPreload(true);
+ Resource* secondResource = fetcher2->requestResource(fetchRequestSecond, TestResourceFactory(Resource::Image));
+ ASSERT_TRUE(secondResource);
+ EXPECT_TRUE(secondResource->isLinkPreload());
+ Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
+ fetcher2->preloadStarted(secondResource);
+
+ // Image preload scanner
+ FetchRequest fetchRequestPreloadScanner = FetchRequest(url, FetchInitiatorInfo());
+ Resource* imgPreloadScannerResource = fetcher->requestResource(fetchRequestPreloadScanner, TestResourceFactory(Resource::Image));
+ EXPECT_EQ(resource, imgPreloadScannerResource);
+ EXPECT_FALSE(resource->isLinkPreload());
+ fetcher->preloadStarted(resource);
+
+ // Image created by parser
+ FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
+ Resource* newResource = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Image));
+ Persistent<MockResourceClient> client = new MockResourceClient(newResource);
+ EXPECT_EQ(resource, newResource);
+ EXPECT_FALSE(resource->isLinkPreload());
+
+ // DCL reached on first fetcher
+ EXPECT_TRUE(resource->isPreloaded());
+ fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
+ Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
+ EXPECT_TRUE(memoryCache()->contains(resource));
+ EXPECT_TRUE(resource->isPreloaded());
+
+ // DCL reached on second fetcher
+ fetcher2->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
+ EXPECT_TRUE(memoryCache()->contains(resource));
+ EXPECT_FALSE(resource->isPreloaded());
+}
+
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp ('k') | third_party/WebKit/Source/core/loader/ImageLoader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698