| 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 595f3b97acc8279cd8d947f1026bd0b63c9b2008..6ffe3d720ee51c5fbbec1d54e68964ddec7d78de 100644
|
| --- a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
|
| +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
|
| @@ -44,13 +44,17 @@
|
| #include "platform/heap/Handle.h"
|
| #include "platform/heap/HeapAllocator.h"
|
| #include "platform/heap/Member.h"
|
| +#include "platform/network/ResourceError.h"
|
| #include "platform/network/ResourceRequest.h"
|
| #include "platform/network/ResourceTimingInfo.h"
|
| #include "platform/scheduler/test/fake_web_task_runner.h"
|
| +#include "platform/testing/TestingPlatformSupport.h"
|
| #include "platform/testing/URLTestHelpers.h"
|
| #include "platform/testing/weburl_loader_mock.h"
|
| +#include "platform/testing/weburl_loader_mock_factory_impl.h"
|
| #include "platform/weborigin/KURL.h"
|
| #include "public/platform/Platform.h"
|
| +#include "public/platform/WebURLLoader.h"
|
| #include "public/platform/WebURLLoaderMockFactory.h"
|
| #include "public/platform/WebURLResponse.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -67,7 +71,58 @@ constexpr char kTestResourceMimeType[] = "image/png";
|
| constexpr int kTestResourceSize = 103; // size of web/tests/data/white-1x1.png
|
| }
|
|
|
| -class ResourceFetcherTest : public ::testing::Test {};
|
| +class FetchTestingWebURLLoaderMockFactory : public WebURLLoaderMockFactoryImpl {
|
| + public:
|
| + FetchTestingWebURLLoaderMockFactory()
|
| + : m_context(MockFetchContext::create(
|
| + MockFetchContext::kShouldLoadNewResource)) {}
|
| + ~FetchTestingWebURLLoaderMockFactory() override {}
|
| +
|
| + MockFetchContext* context() { return m_context.get(); }
|
| +
|
| + private:
|
| + void RunUntilIdle() override { m_context->runLoadingTaskRunnerUntilIdle(); }
|
| + Persistent<MockFetchContext> m_context;
|
| +};
|
| +
|
| +class FetchTestingPlatform : public TestingPlatformSupportWithMockScheduler {
|
| + public:
|
| + FetchTestingPlatform()
|
| + : m_urlLoaderMockFactory(new FetchTestingWebURLLoaderMockFactory) {}
|
| + ~FetchTestingPlatform() override {}
|
| +
|
| + // Platform:
|
| + WebURLError cancelledError(const WebURL& url) const override {
|
| + return ResourceError::ResourceError(errorDomainBlinkInternal, -1,
|
| + url.string(),
|
| + "cancelledError for testing");
|
| + }
|
| + WebURLLoaderMockFactory* getURLLoaderMockFactory() override {
|
| + return m_urlLoaderMockFactory.get();
|
| + }
|
| + WebURLLoader* createURLLoader() override {
|
| + return m_urlLoaderMockFactory->createURLLoader(
|
| + m_oldPlatform->createURLLoader());
|
| + }
|
| + MockFetchContext* context() { return m_urlLoaderMockFactory->context(); }
|
| +
|
| + private:
|
| + std::unique_ptr<FetchTestingWebURLLoaderMockFactory> m_urlLoaderMockFactory;
|
| +};
|
| +
|
| +class ResourceFetcherTest : public ::testing::Test {
|
| + public:
|
| + ResourceFetcherTest() {}
|
| + ~ResourceFetcherTest() override {}
|
| +
|
| + protected:
|
| + MockFetchContext* context() { return m_platform->context(); }
|
| +
|
| + ScopedTestingPlatformSupport<FetchTestingPlatform> m_platform;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(ResourceFetcherTest);
|
| +};
|
|
|
| TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) {
|
| KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png");
|
| @@ -90,8 +145,7 @@ TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) {
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, UseExistingResource) {
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
|
|
| KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
|
| ResourceResponse response;
|
| @@ -128,8 +182,7 @@ TEST_F(ResourceFetcherTest, Vary) {
|
| resource->finish();
|
| ASSERT_TRUE(resource->hasVaryHeader());
|
|
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
| ResourceRequest resourceRequest(url);
|
| resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
|
| FetchRequest fetchRequest =
|
| @@ -151,8 +204,7 @@ TEST_F(ResourceFetcherTest, NavigationTimingInfo) {
|
| response.setURL(url);
|
| response.setHTTPStatusCode(200);
|
|
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
| ResourceRequest resourceRequest(url);
|
| resourceRequest.setFrameType(WebURLRequest::FrameTypeNested);
|
| resourceRequest.setRequestContext(WebURLRequest::RequestContextForm);
|
| @@ -186,10 +238,8 @@ TEST_F(ResourceFetcherTest, NavigationTimingInfo) {
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, VaryOnBack) {
|
| - MockFetchContext* context =
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource);
|
| - context->setCachePolicy(CachePolicyHistoryBuffer);
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(context);
|
| + context()->setCachePolicy(CachePolicyHistoryBuffer);
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
|
|
| KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
|
| Resource* resource = RawResource::create(url, Resource::Raw);
|
| @@ -214,8 +264,7 @@ TEST_F(ResourceFetcherTest, VaryOnBack) {
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, VaryResource) {
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
|
|
| KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
|
| ResourceResponse response;
|
| @@ -285,8 +334,7 @@ TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) {
|
| URLTestHelpers::registerMockedURLLoadWithCustomResponse(
|
| url, kTestResourceFilename, WebString::fromUTF8(""),
|
| WrappedResourceResponse(response));
|
| - ResourceFetcher* fetcher1 = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher1 = ResourceFetcher::create(context());
|
| ResourceRequest request1(url);
|
| request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache");
|
| FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo());
|
| @@ -302,8 +350,7 @@ TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) {
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, DontReuseMediaDataUrl) {
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
| ResourceRequest request(KURL(ParsedURLString, "data:text/html,foo"));
|
| request.setRequestContext(WebURLRequest::RequestContextVideo);
|
| ResourceLoaderOptions options;
|
| @@ -368,8 +415,7 @@ TEST_F(ResourceFetcherTest, ResponseOnCancel) {
|
| URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
|
| kTestResourceMimeType);
|
|
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
| ResourceRequest resourceRequest(url);
|
| resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
|
| FetchRequest fetchRequest =
|
| @@ -388,7 +434,7 @@ class ScopedMockRedirectRequester {
|
| WTF_MAKE_NONCOPYABLE(ScopedMockRedirectRequester);
|
|
|
| public:
|
| - ScopedMockRedirectRequester() : m_context(nullptr) {}
|
| + ScopedMockRedirectRequester(MockFetchContext* context) : m_context(context) {}
|
|
|
| ~ScopedMockRedirectRequester() { cleanUp(); }
|
|
|
| @@ -409,9 +455,6 @@ class ScopedMockRedirectRequester {
|
| }
|
|
|
| void request(const WebString& url) {
|
| - DCHECK(!m_context);
|
| - m_context =
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource);
|
| ResourceFetcher* fetcher = ResourceFetcher::create(m_context);
|
| ResourceRequest resourceRequest(url);
|
| resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
|
| @@ -426,8 +469,6 @@ class ScopedMockRedirectRequester {
|
| memoryCache()->evictResources();
|
| }
|
|
|
| - MockFetchContext* context() const { return m_context; }
|
| -
|
| private:
|
| Member<MockFetchContext> m_context;
|
| };
|
| @@ -435,24 +476,24 @@ class ScopedMockRedirectRequester {
|
| TEST_F(ResourceFetcherTest, SameOriginRedirect) {
|
| const char redirectURL[] = "http://127.0.0.1:8000/redirect.html";
|
| const char finalURL[] = "http://127.0.0.1:8000/final.html";
|
| - ScopedMockRedirectRequester requester;
|
| + ScopedMockRedirectRequester requester(context());
|
| requester.registerRedirect(redirectURL, finalURL);
|
| requester.registerFinalResource(finalURL);
|
| requester.request(redirectURL);
|
|
|
| EXPECT_EQ(kRedirectResponseOverheadBytes + kTestResourceSize,
|
| - requester.context()->getTransferSize());
|
| + context()->getTransferSize());
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, CrossOriginRedirect) {
|
| const char redirectURL[] = "http://otherorigin.test/redirect.html";
|
| const char finalURL[] = "http://127.0.0.1:8000/final.html";
|
| - ScopedMockRedirectRequester requester;
|
| + ScopedMockRedirectRequester requester(context());
|
| requester.registerRedirect(redirectURL, finalURL);
|
| requester.registerFinalResource(finalURL);
|
| requester.request(redirectURL);
|
|
|
| - EXPECT_EQ(kTestResourceSize, requester.context()->getTransferSize());
|
| + EXPECT_EQ(kTestResourceSize, context()->getTransferSize());
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, ComplexCrossOriginRedirect) {
|
| @@ -460,14 +501,14 @@ TEST_F(ResourceFetcherTest, ComplexCrossOriginRedirect) {
|
| const char redirectURL2[] = "http://otherorigin.test/redirect2.html";
|
| const char redirectURL3[] = "http://127.0.0.1:8000/redirect3.html";
|
| const char finalURL[] = "http://127.0.0.1:8000/final.html";
|
| - ScopedMockRedirectRequester requester;
|
| + ScopedMockRedirectRequester requester(context());
|
| requester.registerRedirect(redirectURL1, redirectURL2);
|
| requester.registerRedirect(redirectURL2, redirectURL3);
|
| requester.registerRedirect(redirectURL3, finalURL);
|
| requester.registerFinalResource(finalURL);
|
| requester.request(redirectURL1);
|
|
|
| - EXPECT_EQ(kTestResourceSize, requester.context()->getTransferSize());
|
| + EXPECT_EQ(kTestResourceSize, context()->getTransferSize());
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, SynchronousRequest) {
|
| @@ -475,8 +516,7 @@ TEST_F(ResourceFetcherTest, SynchronousRequest) {
|
| URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
|
| kTestResourceMimeType);
|
|
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
| ResourceRequest resourceRequest(url);
|
| resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
|
| FetchRequest fetchRequest(resourceRequest, FetchInitiatorInfo());
|
| @@ -491,8 +531,7 @@ TEST_F(ResourceFetcherTest, SynchronousRequest) {
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, PreloadResourceTwice) {
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
|
|
| KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
|
| URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
|
| @@ -516,8 +555,7 @@ TEST_F(ResourceFetcherTest, PreloadResourceTwice) {
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, LinkPreloadResourceAndUse) {
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
|
|
| KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
|
| URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
|
| @@ -553,13 +591,13 @@ TEST_F(ResourceFetcherTest, LinkPreloadResourceAndUse) {
|
| Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
|
| EXPECT_TRUE(memoryCache()->contains(resource));
|
| EXPECT_FALSE(resource->isPreloaded());
|
| +
|
| + memoryCache()->remove(resource);
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndUse) {
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| - ResourceFetcher* fetcher2 = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
| + ResourceFetcher* fetcher2 = ResourceFetcher::create(context());
|
|
|
| KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
|
| URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
|
| @@ -634,6 +672,8 @@ TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndUse) {
|
| fetcher2->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
|
| EXPECT_TRUE(memoryCache()->contains(resource));
|
| EXPECT_FALSE(resource->isPreloaded());
|
| +
|
| + memoryCache()->remove(resource);
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, Revalidate304) {
|
| @@ -647,8 +687,7 @@ TEST_F(ResourceFetcherTest, Revalidate304) {
|
| resource->responseReceived(response, nullptr);
|
| resource->finish();
|
|
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
| ResourceRequest resourceRequest(url);
|
| resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
|
| FetchRequest fetchRequest =
|
| @@ -663,10 +702,8 @@ TEST_F(ResourceFetcherTest, Revalidate304) {
|
| }
|
|
|
| TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndMove) {
|
| - ResourceFetcher* fetcher = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| - ResourceFetcher* fetcher2 = ResourceFetcher::create(
|
| - MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
|
| + ResourceFetcher* fetcher = ResourceFetcher::create(context());
|
| + ResourceFetcher* fetcher2 = ResourceFetcher::create(context());
|
|
|
| KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
|
| URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
|
|
|