| 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 b3e7bd54f971fbf5d812bba2597586dc155d2ec9..840620250ddb4cd037a48cb5684ca8f8cc17f25b 100644
|
| --- a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
|
| +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
|
| @@ -49,6 +49,7 @@
|
| #include "platform/weborigin/KURL.h"
|
| #include "public/platform/Platform.h"
|
| #include "public/platform/WebTaskRunner.h"
|
| +#include "public/platform/WebURLError.h"
|
| #include "public/platform/WebURLLoaderMockFactory.h"
|
| #include "public/platform/WebURLResponse.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -749,4 +750,86 @@ TEST_F(ResourceFetcherTest, Revalidate304) {
|
| EXPECT_NE(resource, newResource);
|
| }
|
|
|
| +class CacheAwareResourceClient
|
| + : public GarbageCollectedFinalized<CacheAwareResourceClient>,
|
| + public RawResourceClient {
|
| + USING_GARBAGE_COLLECTED_MIXIN(CacheAwareResourceClient);
|
| +
|
| + public:
|
| + CacheAwareResourceClient() : m_willReloadAfterDiskCacheMissCalled(false) {}
|
| +
|
| + void setResource(Resource* resource) {
|
| + ASSERT_FALSE(m_resource);
|
| + m_resource = resource;
|
| + }
|
| +
|
| + void willReloadAfterDiskCacheMiss(Resource* resource) override {
|
| + EXPECT_EQ(m_resource, resource);
|
| + m_willReloadAfterDiskCacheMissCalled = true;
|
| + }
|
| +
|
| + bool willReloadAfterDiskCacheMissCalled() const {
|
| + return m_willReloadAfterDiskCacheMissCalled;
|
| + }
|
| +
|
| + DEFINE_INLINE_TRACE() {
|
| + visitor->trace(m_resource);
|
| + RawResourceClient::trace(visitor);
|
| + }
|
| +
|
| + String debugName() const override { return "CacheAwareResourceClient"; }
|
| +
|
| + private:
|
| + Member<Resource> m_resource;
|
| + bool m_willReloadAfterDiskCacheMissCalled;
|
| +};
|
| +
|
| +void runCacheAwareLoadingTest(CacheAwareResourceClient* client,
|
| + const WebURLError& error) {
|
| + ResourceFetcher* fetcher =
|
| + ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
|
| + KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
|
| + FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
|
| + fetchRequest.mutableResourceRequest().setIsCacheAwareLoadingEnabled(true);
|
| +
|
| + ResourceResponse response;
|
| + response.setURL(url);
|
| + Platform::current()->getURLLoaderMockFactory()->registerErrorURL(
|
| + url, WrappedResourceResponse(response), error);
|
| +
|
| + Resource* resource =
|
| + fetcher->requestResource(fetchRequest, TestResourceFactory());
|
| + ASSERT_TRUE(resource);
|
| + ASSERT_TRUE(resource->resourceRequest().isCacheAwareLoadingActivated());
|
| +
|
| + client->setResource(resource);
|
| + resource->addClient(client);
|
| + Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
|
| + Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
|
| +
|
| + resource->removeClient(client);
|
| + memoryCache()->remove(resource);
|
| +}
|
| +
|
| +TEST_F(ResourceFetcherTest, CacheAwareLoading) {
|
| + Persistent<CacheAwareResourceClient> client = new CacheAwareResourceClient;
|
| + WebURLError error;
|
| + error.reason = -400; // ERR_CACHE_MISS
|
| + runCacheAwareLoadingTest(client, error);
|
| + EXPECT_TRUE(client->willReloadAfterDiskCacheMissCalled());
|
| +}
|
| +
|
| +TEST_F(ResourceFetcherTest, CacheAwareLoadingFailByAccessCheck) {
|
| + Persistent<CacheAwareResourceClient> client = new CacheAwareResourceClient;
|
| + runCacheAwareLoadingTest(client,
|
| + ResourceError::cancelledDueToAccessCheckError(""));
|
| + EXPECT_FALSE(client->willReloadAfterDiskCacheMissCalled());
|
| +}
|
| +
|
| +TEST_F(ResourceFetcherTest, CacheAwareLoadingFailByCancellation) {
|
| + Persistent<CacheAwareResourceClient> client = new CacheAwareResourceClient;
|
| + runCacheAwareLoadingTest(client, ResourceError::cancelledError(""));
|
| + EXPECT_FALSE(client->willReloadAfterDiskCacheMissCalled());
|
| +}
|
| +
|
| } // namespace blink
|
|
|