| Index: third_party/WebKit/Source/core/fetch/RawResourceTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/fetch/RawResourceTest.cpp b/third_party/WebKit/Source/core/fetch/RawResourceTest.cpp
|
| deleted file mode 100644
|
| index acc22a82e4bd44f72c5a3a69abd8ce99a373dff2..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/core/fetch/RawResourceTest.cpp
|
| +++ /dev/null
|
| @@ -1,567 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2013, Google Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions are
|
| - * met:
|
| - *
|
| - * * Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * * Redistributions in binary form must reproduce the above
|
| - * copyright notice, this list of conditions and the following disclaimer
|
| - * in the documentation and/or other materials provided with the
|
| - * distribution.
|
| - * * Neither the name of Google Inc. nor the names of its
|
| - * contributors may be used to endorse or promote products derived from
|
| - * this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "core/fetch/RawResource.h"
|
| -
|
| -#include "core/fetch/MemoryCache.h"
|
| -#include "core/fetch/ResourceFetcher.h"
|
| -#include "platform/SharedBuffer.h"
|
| -#include "platform/heap/Handle.h"
|
| -#include "platform/network/ResourceTimingInfo.h"
|
| -#include "platform/testing/UnitTestHelpers.h"
|
| -#include "public/platform/Platform.h"
|
| -#include "public/platform/WebScheduler.h"
|
| -#include "public/platform/WebThread.h"
|
| -#include "public/platform/WebURL.h"
|
| -#include "public/platform/WebURLResponse.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace blink {
|
| -
|
| -using ::testing::InSequence;
|
| -using ::testing::_;
|
| -using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>;
|
| -
|
| -class MockRawResourceClient
|
| - : public GarbageCollectedFinalized<MockRawResourceClient>,
|
| - public RawResourceClient {
|
| - USING_GARBAGE_COLLECTED_MIXIN(MockRawResourceClient);
|
| -
|
| - public:
|
| - static MockRawResourceClient* create() {
|
| - return new ::testing::StrictMock<MockRawResourceClient>;
|
| - }
|
| -
|
| - MOCK_METHOD3(dataSent,
|
| - void(Resource*, unsigned long long, unsigned long long));
|
| - MOCK_METHOD3(responseReceivedInternal,
|
| - void(Resource*,
|
| - const ResourceResponse&,
|
| - WebDataConsumerHandle*));
|
| - MOCK_METHOD3(setSerializedCachedMetadata,
|
| - void(Resource*, const char*, size_t));
|
| - MOCK_METHOD3(dataReceived, void(Resource*, const char*, size_t));
|
| - MOCK_METHOD3(redirectReceived,
|
| - bool(Resource*,
|
| - const ResourceRequest&,
|
| - const ResourceResponse&));
|
| - MOCK_METHOD0(redirectBlocked, void());
|
| - MOCK_METHOD2(dataDownloaded, void(Resource*, int));
|
| - MOCK_METHOD2(didReceiveResourceTiming,
|
| - void(Resource*, const ResourceTimingInfo&));
|
| -
|
| - void responseReceived(
|
| - Resource* resource,
|
| - const ResourceResponse& response,
|
| - std::unique_ptr<WebDataConsumerHandle> handle) override {
|
| - responseReceivedInternal(resource, response, handle.get());
|
| - }
|
| -
|
| - String debugName() const override { return "MockRawResourceClient"; }
|
| -
|
| - DEFINE_INLINE_VIRTUAL_TRACE() { RawResourceClient::trace(visitor); }
|
| -
|
| - protected:
|
| - MockRawResourceClient() = default;
|
| -};
|
| -
|
| -TEST(RawResourceTest, DontIgnoreAcceptForCacheReuse) {
|
| - ResourceRequest jpegRequest;
|
| - jpegRequest.setHTTPAccept("image/jpeg");
|
| -
|
| - RawResource* jpegResource(RawResource::create(jpegRequest, Resource::Raw));
|
| -
|
| - ResourceRequest pngRequest;
|
| - pngRequest.setHTTPAccept("image/png");
|
| -
|
| - EXPECT_FALSE(jpegResource->canReuse(pngRequest));
|
| -}
|
| -
|
| -class DummyClient final : public GarbageCollectedFinalized<DummyClient>,
|
| - public RawResourceClient {
|
| - USING_GARBAGE_COLLECTED_MIXIN(DummyClient);
|
| -
|
| - public:
|
| - DummyClient() : m_called(false), m_numberOfRedirectsReceived(0) {}
|
| - ~DummyClient() override {}
|
| -
|
| - // ResourceClient implementation.
|
| - void notifyFinished(Resource* resource) override { m_called = true; }
|
| - String debugName() const override { return "DummyClient"; }
|
| -
|
| - void dataReceived(Resource*, const char* data, size_t length) override {
|
| - m_data.append(data, length);
|
| - }
|
| -
|
| - bool redirectReceived(Resource*,
|
| - const ResourceRequest&,
|
| - const ResourceResponse&) override {
|
| - ++m_numberOfRedirectsReceived;
|
| - return true;
|
| - }
|
| -
|
| - bool called() { return m_called; }
|
| - int numberOfRedirectsReceived() const { return m_numberOfRedirectsReceived; }
|
| - const Vector<char>& data() { return m_data; }
|
| - DEFINE_INLINE_TRACE() { RawResourceClient::trace(visitor); }
|
| -
|
| - private:
|
| - bool m_called;
|
| - int m_numberOfRedirectsReceived;
|
| - Vector<char> m_data;
|
| -};
|
| -
|
| -// This client adds another client when notified.
|
| -class AddingClient final : public GarbageCollectedFinalized<AddingClient>,
|
| - public RawResourceClient {
|
| - USING_GARBAGE_COLLECTED_MIXIN(AddingClient);
|
| -
|
| - public:
|
| - AddingClient(DummyClient* client, Resource* resource)
|
| - : m_dummyClient(client), m_resource(resource) {}
|
| -
|
| - ~AddingClient() override {}
|
| -
|
| - // ResourceClient implementation.
|
| - void notifyFinished(Resource* resource) override {
|
| - // First schedule an asynchronous task to remove the client.
|
| - // We do not expect a client to be called if the client is removed before
|
| - // a callback invocation task queued inside addClient() is scheduled.
|
| - Platform::current()
|
| - ->currentThread()
|
| - ->scheduler()
|
| - ->loadingTaskRunner()
|
| - ->postTask(BLINK_FROM_HERE, WTF::bind(&AddingClient::removeClient,
|
| - wrapPersistent(this)));
|
| - resource->addClient(m_dummyClient);
|
| - }
|
| - String debugName() const override { return "AddingClient"; }
|
| -
|
| - void removeClient() { m_resource->removeClient(m_dummyClient); }
|
| -
|
| - DEFINE_INLINE_VIRTUAL_TRACE() {
|
| - visitor->trace(m_dummyClient);
|
| - visitor->trace(m_resource);
|
| - RawResourceClient::trace(visitor);
|
| - }
|
| -
|
| - private:
|
| - Member<DummyClient> m_dummyClient;
|
| - Member<Resource> m_resource;
|
| -};
|
| -
|
| -TEST(RawResourceTest, RevalidationSucceeded) {
|
| - Resource* resource =
|
| - RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
|
| - ResourceResponse response;
|
| - response.setHTTPStatusCode(200);
|
| - resource->responseReceived(response, nullptr);
|
| - const char data[5] = "abcd";
|
| - resource->appendData(data, 4);
|
| - resource->finish();
|
| - memoryCache()->add(resource);
|
| -
|
| - // Simulate a successful revalidation.
|
| - resource->setRevalidatingRequest(ResourceRequest("data:text/html,"));
|
| -
|
| - Persistent<DummyClient> client = new DummyClient;
|
| - resource->addClient(client);
|
| -
|
| - ResourceResponse revalidatingResponse;
|
| - revalidatingResponse.setHTTPStatusCode(304);
|
| - resource->responseReceived(revalidatingResponse, nullptr);
|
| - EXPECT_FALSE(resource->isCacheValidator());
|
| - EXPECT_EQ(200, resource->response().httpStatusCode());
|
| - EXPECT_EQ(4u, resource->resourceBuffer()->size());
|
| - EXPECT_EQ(resource, memoryCache()->resourceForURL(
|
| - KURL(ParsedURLString, "data:text/html,")));
|
| - memoryCache()->remove(resource);
|
| -
|
| - resource->removeClient(client);
|
| - EXPECT_FALSE(resource->isAlive());
|
| - EXPECT_FALSE(client->called());
|
| - EXPECT_EQ("abcd", String(client->data().data(), client->data().size()));
|
| -}
|
| -
|
| -TEST(RawResourceTest, RevalidationSucceededForResourceWithoutBody) {
|
| - Resource* resource =
|
| - RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
|
| - ResourceResponse response;
|
| - response.setHTTPStatusCode(200);
|
| - resource->responseReceived(response, nullptr);
|
| - resource->finish();
|
| - memoryCache()->add(resource);
|
| -
|
| - // Simulate a successful revalidation.
|
| - resource->setRevalidatingRequest(ResourceRequest("data:text/html,"));
|
| -
|
| - Persistent<DummyClient> client = new DummyClient;
|
| - resource->addClient(client);
|
| -
|
| - ResourceResponse revalidatingResponse;
|
| - revalidatingResponse.setHTTPStatusCode(304);
|
| - resource->responseReceived(revalidatingResponse, nullptr);
|
| - EXPECT_FALSE(resource->isCacheValidator());
|
| - EXPECT_EQ(200, resource->response().httpStatusCode());
|
| - EXPECT_FALSE(resource->resourceBuffer());
|
| - EXPECT_EQ(resource, memoryCache()->resourceForURL(
|
| - KURL(ParsedURLString, "data:text/html,")));
|
| - memoryCache()->remove(resource);
|
| -
|
| - resource->removeClient(client);
|
| - EXPECT_FALSE(resource->isAlive());
|
| - EXPECT_FALSE(client->called());
|
| - EXPECT_EQ(0u, client->data().size());
|
| -}
|
| -
|
| -TEST(RawResourceTest, RevalidationSucceededUpdateHeaders) {
|
| - Resource* resource =
|
| - RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
|
| - ResourceResponse response;
|
| - response.setHTTPStatusCode(200);
|
| - response.addHTTPHeaderField("keep-alive", "keep-alive value");
|
| - response.addHTTPHeaderField("expires", "expires value");
|
| - response.addHTTPHeaderField("last-modified", "last-modified value");
|
| - response.addHTTPHeaderField("proxy-authenticate", "proxy-authenticate value");
|
| - response.addHTTPHeaderField("proxy-connection", "proxy-connection value");
|
| - response.addHTTPHeaderField("x-custom", "custom value");
|
| - resource->responseReceived(response, nullptr);
|
| - resource->finish();
|
| - memoryCache()->add(resource);
|
| -
|
| - // Simulate a successful revalidation.
|
| - resource->setRevalidatingRequest(ResourceRequest("data:text/html,"));
|
| -
|
| - // Validate that these headers pre-update.
|
| - EXPECT_EQ("keep-alive value",
|
| - resource->response().httpHeaderField("keep-alive"));
|
| - EXPECT_EQ("expires value", resource->response().httpHeaderField("expires"));
|
| - EXPECT_EQ("last-modified value",
|
| - resource->response().httpHeaderField("last-modified"));
|
| - EXPECT_EQ("proxy-authenticate value",
|
| - resource->response().httpHeaderField("proxy-authenticate"));
|
| - EXPECT_EQ("proxy-authenticate value",
|
| - resource->response().httpHeaderField("proxy-authenticate"));
|
| - EXPECT_EQ("proxy-connection value",
|
| - resource->response().httpHeaderField("proxy-connection"));
|
| - EXPECT_EQ("custom value", resource->response().httpHeaderField("x-custom"));
|
| -
|
| - Persistent<DummyClient> client = new DummyClient;
|
| - resource->addClient(client.get());
|
| -
|
| - // Perform a revalidation step.
|
| - ResourceResponse revalidatingResponse;
|
| - revalidatingResponse.setHTTPStatusCode(304);
|
| - // Headers that aren't copied with an 304 code.
|
| - revalidatingResponse.addHTTPHeaderField("keep-alive", "garbage");
|
| - revalidatingResponse.addHTTPHeaderField("expires", "garbage");
|
| - revalidatingResponse.addHTTPHeaderField("last-modified", "garbage");
|
| - revalidatingResponse.addHTTPHeaderField("proxy-authenticate", "garbage");
|
| - revalidatingResponse.addHTTPHeaderField("proxy-connection", "garbage");
|
| - // Header that is updated with 304 code.
|
| - revalidatingResponse.addHTTPHeaderField("x-custom", "updated");
|
| - resource->responseReceived(revalidatingResponse, nullptr);
|
| -
|
| - // Validate the original response.
|
| - EXPECT_EQ(200, resource->response().httpStatusCode());
|
| -
|
| - // Validate that these headers are not updated.
|
| - EXPECT_EQ("keep-alive value",
|
| - resource->response().httpHeaderField("keep-alive"));
|
| - EXPECT_EQ("expires value", resource->response().httpHeaderField("expires"));
|
| - EXPECT_EQ("last-modified value",
|
| - resource->response().httpHeaderField("last-modified"));
|
| - EXPECT_EQ("proxy-authenticate value",
|
| - resource->response().httpHeaderField("proxy-authenticate"));
|
| - EXPECT_EQ("proxy-authenticate value",
|
| - resource->response().httpHeaderField("proxy-authenticate"));
|
| - EXPECT_EQ("proxy-connection value",
|
| - resource->response().httpHeaderField("proxy-connection"));
|
| - EXPECT_EQ("updated", resource->response().httpHeaderField("x-custom"));
|
| -
|
| - memoryCache()->remove(resource);
|
| -
|
| - resource->removeClient(client);
|
| - EXPECT_FALSE(resource->isAlive());
|
| - EXPECT_FALSE(client->called());
|
| - EXPECT_EQ(0u, client->data().size());
|
| -}
|
| -
|
| -TEST(RawResourceTest, RedirectDuringRevalidation) {
|
| - Resource* resource = RawResource::create(
|
| - ResourceRequest("https://example.com/1"), Resource::Raw);
|
| - ResourceResponse response;
|
| - response.setURL(KURL(ParsedURLString, "https://example.com/1"));
|
| - response.setHTTPStatusCode(200);
|
| - resource->responseReceived(response, nullptr);
|
| - const char data[5] = "abcd";
|
| - resource->appendData(data, 4);
|
| - resource->finish();
|
| - memoryCache()->add(resource);
|
| -
|
| - EXPECT_FALSE(resource->isCacheValidator());
|
| - EXPECT_EQ("https://example.com/1",
|
| - resource->resourceRequest().url().getString());
|
| - EXPECT_EQ("https://example.com/1",
|
| - resource->lastResourceRequest().url().getString());
|
| -
|
| - // Simulate a revalidation.
|
| - resource->setRevalidatingRequest(ResourceRequest("https://example.com/1"));
|
| - EXPECT_TRUE(resource->isCacheValidator());
|
| - EXPECT_EQ("https://example.com/1",
|
| - resource->resourceRequest().url().getString());
|
| - EXPECT_EQ("https://example.com/1",
|
| - resource->lastResourceRequest().url().getString());
|
| -
|
| - Persistent<DummyClient> client = new DummyClient;
|
| - resource->addClient(client);
|
| -
|
| - // The revalidating request is redirected.
|
| - ResourceResponse redirectResponse;
|
| - redirectResponse.setURL(KURL(ParsedURLString, "https://example.com/1"));
|
| - redirectResponse.setHTTPHeaderField("location", "https://example.com/2");
|
| - redirectResponse.setHTTPStatusCode(308);
|
| - ResourceRequest redirectedRevalidatingRequest("https://example.com/2");
|
| - resource->willFollowRedirect(redirectedRevalidatingRequest, redirectResponse);
|
| - EXPECT_FALSE(resource->isCacheValidator());
|
| - EXPECT_EQ("https://example.com/1",
|
| - resource->resourceRequest().url().getString());
|
| - EXPECT_EQ("https://example.com/2",
|
| - resource->lastResourceRequest().url().getString());
|
| -
|
| - // The final response is received.
|
| - ResourceResponse revalidatingResponse;
|
| - revalidatingResponse.setURL(KURL(ParsedURLString, "https://example.com/2"));
|
| - revalidatingResponse.setHTTPStatusCode(200);
|
| - resource->responseReceived(revalidatingResponse, nullptr);
|
| - const char data2[4] = "xyz";
|
| - resource->appendData(data2, 3);
|
| - resource->finish();
|
| - EXPECT_FALSE(resource->isCacheValidator());
|
| - EXPECT_EQ("https://example.com/1",
|
| - resource->resourceRequest().url().getString());
|
| - EXPECT_EQ("https://example.com/2",
|
| - resource->lastResourceRequest().url().getString());
|
| - EXPECT_FALSE(resource->isCacheValidator());
|
| - EXPECT_EQ(200, resource->response().httpStatusCode());
|
| - EXPECT_EQ(3u, resource->resourceBuffer()->size());
|
| - EXPECT_EQ(resource, memoryCache()->resourceForURL(
|
| - KURL(ParsedURLString, "https://example.com/1")));
|
| -
|
| - EXPECT_TRUE(client->called());
|
| - EXPECT_EQ(1, client->numberOfRedirectsReceived());
|
| - EXPECT_EQ("xyz", String(client->data().data(), client->data().size()));
|
| -
|
| - // Test the case where a client is added after revalidation is completed.
|
| - Persistent<DummyClient> client2 = new DummyClient;
|
| - resource->addClient(client2);
|
| -
|
| - // Because RawResourceClient is added asynchronously,
|
| - // |runPendingTasks()| is called to make |client2| to be notified.
|
| - testing::runPendingTasks();
|
| -
|
| - EXPECT_TRUE(client2->called());
|
| - EXPECT_EQ(1, client2->numberOfRedirectsReceived());
|
| - EXPECT_EQ("xyz", String(client2->data().data(), client2->data().size()));
|
| -
|
| - memoryCache()->remove(resource);
|
| -
|
| - resource->removeClient(client);
|
| - resource->removeClient(client2);
|
| - EXPECT_FALSE(resource->isAlive());
|
| -}
|
| -
|
| -TEST(RawResourceTest, AddClientDuringCallback) {
|
| - Resource* raw =
|
| - RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
|
| -
|
| - // Create a non-null response.
|
| - ResourceResponse response = raw->response();
|
| - response.setURL(KURL(ParsedURLString, "http://600.613/"));
|
| - raw->setResponse(response);
|
| - raw->finish();
|
| - EXPECT_FALSE(raw->response().isNull());
|
| -
|
| - Persistent<DummyClient> dummyClient = new DummyClient();
|
| - Persistent<AddingClient> addingClient =
|
| - new AddingClient(dummyClient.get(), raw);
|
| - raw->addClient(addingClient);
|
| - testing::runPendingTasks();
|
| - raw->removeClient(addingClient);
|
| - EXPECT_FALSE(dummyClient->called());
|
| - EXPECT_FALSE(raw->isAlive());
|
| -}
|
| -
|
| -// This client removes another client when notified.
|
| -class RemovingClient : public GarbageCollectedFinalized<RemovingClient>,
|
| - public RawResourceClient {
|
| - USING_GARBAGE_COLLECTED_MIXIN(RemovingClient);
|
| -
|
| - public:
|
| - explicit RemovingClient(DummyClient* client) : m_dummyClient(client) {}
|
| -
|
| - ~RemovingClient() override {}
|
| -
|
| - // ResourceClient implementation.
|
| - void notifyFinished(Resource* resource) override {
|
| - resource->removeClient(m_dummyClient);
|
| - resource->removeClient(this);
|
| - }
|
| - String debugName() const override { return "RemovingClient"; }
|
| - DEFINE_INLINE_TRACE() {
|
| - visitor->trace(m_dummyClient);
|
| - RawResourceClient::trace(visitor);
|
| - }
|
| -
|
| - private:
|
| - Member<DummyClient> m_dummyClient;
|
| -};
|
| -
|
| -TEST(RawResourceTest, RemoveClientDuringCallback) {
|
| - Resource* raw =
|
| - RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
|
| -
|
| - // Create a non-null response.
|
| - ResourceResponse response = raw->response();
|
| - response.setURL(KURL(ParsedURLString, "http://600.613/"));
|
| - raw->setResponse(response);
|
| - raw->finish();
|
| - EXPECT_FALSE(raw->response().isNull());
|
| -
|
| - Persistent<DummyClient> dummyClient = new DummyClient();
|
| - Persistent<RemovingClient> removingClient =
|
| - new RemovingClient(dummyClient.get());
|
| - raw->addClient(dummyClient);
|
| - raw->addClient(removingClient);
|
| - testing::runPendingTasks();
|
| - EXPECT_FALSE(raw->isAlive());
|
| -}
|
| -
|
| -// ResourceClient can be added to |m_clients| asynchronously via
|
| -// ResourceCallback. When revalidation is started after ResourceCallback is
|
| -// scheduled and before it is dispatched, ResourceClient's callbacks should be
|
| -// called appropriately.
|
| -TEST(RawResourceTest, StartFailedRevalidationWhileResourceCallback) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
|
| -
|
| - ResourceResponse response;
|
| - response.setURL(url);
|
| - response.setHTTPStatusCode(200);
|
| -
|
| - ResourceResponse newResponse;
|
| - newResponse.setURL(url);
|
| - newResponse.setHTTPStatusCode(201);
|
| -
|
| - Resource* resource =
|
| - RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
|
| - resource->responseReceived(response, nullptr);
|
| - resource->appendData("oldData", 8);
|
| - resource->finish();
|
| -
|
| - InSequence s;
|
| - Checkpoint checkpoint;
|
| -
|
| - MockRawResourceClient* client = MockRawResourceClient::create();
|
| -
|
| - EXPECT_CALL(checkpoint, Call(1));
|
| - EXPECT_CALL(*client, responseReceivedInternal(resource, newResponse, _));
|
| - EXPECT_CALL(*client, dataReceived(resource, ::testing::StrEq("newData"), 8));
|
| -
|
| - // Add a client. No callbacks are made here because ResourceCallback is
|
| - // scheduled asynchronously.
|
| - resource->addClient(client);
|
| - EXPECT_FALSE(resource->isCacheValidator());
|
| -
|
| - // Start revalidation.
|
| - resource->setRevalidatingRequest(ResourceRequest(url));
|
| - EXPECT_TRUE(resource->isCacheValidator());
|
| -
|
| - // Make the ResourceCallback to be dispatched.
|
| - testing::runPendingTasks();
|
| -
|
| - checkpoint.Call(1);
|
| -
|
| - resource->responseReceived(newResponse, nullptr);
|
| - resource->appendData("newData", 8);
|
| -}
|
| -
|
| -TEST(RawResourceTest, StartSuccessfulRevalidationWhileResourceCallback) {
|
| - KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
|
| -
|
| - ResourceResponse response;
|
| - response.setURL(url);
|
| - response.setHTTPStatusCode(200);
|
| -
|
| - ResourceResponse newResponse;
|
| - newResponse.setURL(url);
|
| - newResponse.setHTTPStatusCode(304);
|
| -
|
| - Resource* resource =
|
| - RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw);
|
| - resource->responseReceived(response, nullptr);
|
| - resource->appendData("oldData", 8);
|
| - resource->finish();
|
| -
|
| - InSequence s;
|
| - Checkpoint checkpoint;
|
| -
|
| - MockRawResourceClient* client = MockRawResourceClient::create();
|
| -
|
| - EXPECT_CALL(checkpoint, Call(1));
|
| - EXPECT_CALL(*client, responseReceivedInternal(resource, response, _));
|
| - EXPECT_CALL(*client, dataReceived(resource, ::testing::StrEq("oldData"), 8));
|
| -
|
| - // Add a client. No callbacks are made here because ResourceCallback is
|
| - // scheduled asynchronously.
|
| - resource->addClient(client);
|
| - EXPECT_FALSE(resource->isCacheValidator());
|
| -
|
| - // Start revalidation.
|
| - resource->setRevalidatingRequest(ResourceRequest(url));
|
| - EXPECT_TRUE(resource->isCacheValidator());
|
| -
|
| - // Make the ResourceCallback to be dispatched.
|
| - testing::runPendingTasks();
|
| -
|
| - checkpoint.Call(1);
|
| -
|
| - resource->responseReceived(newResponse, nullptr);
|
| -}
|
| -
|
| -TEST(RawResourceTest, CanReuseDevToolsEmulateNetworkConditionsClientIdHeader) {
|
| - ResourceRequest request("data:text/html,");
|
| - request.setHTTPHeaderField(
|
| - HTTPNames::X_DevTools_Emulate_Network_Conditions_Client_Id, "Foo");
|
| - Resource* raw = RawResource::create(request, Resource::Raw);
|
| - EXPECT_TRUE(raw->canReuse(ResourceRequest("data:text/html,")));
|
| -}
|
| -
|
| -} // namespace blink
|
|
|