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 9f748b065c1532afcb9df30f011593bba130eb7c..de69ef0192004363b4485e856467cf9fc8ccf816 100644 |
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp |
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp |
@@ -513,7 +513,127 @@ 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)); |
+ EXPECT_EQ(resource, newResource); |
+ EXPECT_FALSE(resource->isLinkPreload()); |
+ |
+ // DCL reached |
+ fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); |
+ Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
+ EXPECT_FALSE(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(); |
+ fetcher->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)); |
+ EXPECT_EQ(resource, newResource); |
+ EXPECT_FALSE(resource->isLinkPreload()); |
+ |
+ // DCL reached on first fetcher |
+ fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); |
+ Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
+ EXPECT_FALSE(memoryCache()->contains(resource)); |
+ EXPECT_FALSE(resource->isPreloaded()); |
+ |
+ // DCL reached on second fetcher |
+ fetcher2->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); |
+ EXPECT_FALSE(memoryCache()->contains(resource)); |
+ EXPECT_FALSE(resource->isPreloaded()); |
+} |
+ |
} // namespace blink |