Chromium Code Reviews| 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)); |
|
Charlie Harrison
2016/09/12 21:32:31
Why is the resource evicted when it was used by a
Yoav Weiss
2016/09/12 21:51:08
Good catch! The resource is evicted since the reso
|
| + 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 |