TEST_F(ResourceFetcherTest, LinkPreloadImageAndUse) {
    ResourceFetcher* fetcher =
        ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());

    KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
    URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png");

    // Link preload preload scanner
    FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
    fetchRequestOriginal.setLinkPreload(true);
    Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher);
    ASSERT_TRUE(resource);
    EXPECT_TRUE(resource->isLinkPreload());
    Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
    fetcher->preloadStarted(resource);

    // Image preload scanner
    FetchRequest fetchRequestPreloadScanner =
        FetchRequest(url, FetchInitiatorInfo());
    Resource* imgPreloadScannerResource =
        ImageResource::fetch(fetchRequestPreloadScanner, fetcher);
    EXPECT_EQ(resource, imgPreloadScannerResource);
    EXPECT_FALSE(resource->isLinkPreload());
    fetcher->preloadStarted(resource);

    // Image created by parser
    FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
    Resource* newResource = ImageResource::fetch(fetchRequest, fetcher);
    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, PreloadImageTwice) {
    ResourceFetcher* fetcher =
        ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());

    KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
    URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png");

    FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
    Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher);
    ASSERT_TRUE(resource);
    Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
    fetcher->preloadStarted(resource);

    FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
    Resource* newResource = ImageResource::fetch(fetchRequest, fetcher);
    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());
}