Commit 659c3676 authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

Minimize direct use of ResourceClient::SetResource() and Resource::AddClient() in tests

Bug: 793028
Change-Id: Icff8fce73e745969e4022329a7cb0374ce43698c
Reviewed-on: https://chromium-review.googlesource.com/818197Reviewed-by: default avatarHiroshige Hayashizaki <hiroshige@chromium.org>
Commit-Queue: Nate Chapin <japhet@chromium.org>
Cr-Commit-Position: refs/heads/master@{#523279}
parent eff32606
...@@ -1237,14 +1237,10 @@ TEST(ImageResourceTest, FailedRevalidationSvgToSvg) { ...@@ -1237,14 +1237,10 @@ TEST(ImageResourceTest, FailedRevalidationSvgToSvg) {
// Tests for pruning. // Tests for pruning.
TEST(ImageResourceTest, AddClientAfterPrune) { TEST(ImageResourceTest, Prune) {
KURL url("http://127.0.0.1:8000/foo"); KURL url("http://127.0.0.1:8000/foo");
ImageResource* image_resource = ImageResource::CreateForTest(url); ImageResource* image_resource = ImageResource::CreateForTest(url);
// Adds a ResourceClient but not ImageResourceObserver.
Persistent<MockResourceClient> client1 =
new MockResourceClient(image_resource);
ReceiveResponse(image_resource, url, "image/jpeg", ReceiveResponse(image_resource, url, "image/jpeg",
reinterpret_cast<const char*>(kJpegImage), reinterpret_cast<const char*>(kJpegImage),
sizeof(kJpegImage)); sizeof(kJpegImage));
...@@ -1255,9 +1251,6 @@ TEST(ImageResourceTest, AddClientAfterPrune) { ...@@ -1255,9 +1251,6 @@ TEST(ImageResourceTest, AddClientAfterPrune) {
EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width());
EXPECT_EQ(kJpegImageHeight, EXPECT_EQ(kJpegImageHeight,
image_resource->GetContent()->GetImage()->height()); image_resource->GetContent()->GetImage()->height());
EXPECT_TRUE(client1->NotifyFinishedCalled());
client1->RemoveAsClient();
EXPECT_FALSE(image_resource->IsAlive()); EXPECT_FALSE(image_resource->IsAlive());
...@@ -1265,17 +1258,12 @@ TEST(ImageResourceTest, AddClientAfterPrune) { ...@@ -1265,17 +1258,12 @@ TEST(ImageResourceTest, AddClientAfterPrune) {
EXPECT_TRUE(image_resource->GetContent()->HasImage()); EXPECT_TRUE(image_resource->GetContent()->HasImage());
// Re-adds a ResourceClient but not ImageResourceObserver.
Persistent<MockResourceClient> client2 =
new MockResourceClient(image_resource);
blink::testing::RunPendingTasks(); blink::testing::RunPendingTasks();
ASSERT_TRUE(image_resource->GetContent()->HasImage()); ASSERT_TRUE(image_resource->GetContent()->HasImage());
EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull()); EXPECT_FALSE(image_resource->GetContent()->GetImage()->IsNull());
EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width()); EXPECT_EQ(kJpegImageWidth, image_resource->GetContent()->GetImage()->width());
EXPECT_EQ(kJpegImageHeight, EXPECT_EQ(kJpegImageHeight,
image_resource->GetContent()->GetImage()->height()); image_resource->GetContent()->GetImage()->height());
EXPECT_TRUE(client2->NotifyFinishedCalled());
} }
TEST(ImageResourceTest, CancelOnDecodeError) { TEST(ImageResourceTest, CancelOnDecodeError) {
......
...@@ -154,7 +154,6 @@ jumbo_source_set("test_support") { ...@@ -154,7 +154,6 @@ jumbo_source_set("test_support") {
"testing/MockFetchContext.h", "testing/MockFetchContext.h",
"testing/MockResource.cpp", "testing/MockResource.cpp",
"testing/MockResource.h", "testing/MockResource.h",
"testing/MockResourceClient.cpp",
"testing/MockResourceClient.h", "testing/MockResourceClient.h",
"testing/WebURLLoaderFactoryWithMock.cpp", "testing/WebURLLoaderFactoryWithMock.cpp",
"testing/WebURLLoaderFactoryWithMock.h", "testing/WebURLLoaderFactoryWithMock.h",
......
...@@ -92,7 +92,7 @@ class MemoryCacheCorrectnessTest : public ::testing::Test { ...@@ -92,7 +92,7 @@ class MemoryCacheCorrectnessTest : public ::testing::Test {
MockResource* FetchMockResource() { MockResource* FetchMockResource() {
ResourceRequest resource_request{KURL(kResourceURL)}; ResourceRequest resource_request{KURL(kResourceURL)};
FetchParameters fetch_params(resource_request); FetchParameters fetch_params(resource_request);
return MockResource::Fetch(fetch_params, Fetcher()); return MockResource::Fetch(fetch_params, Fetcher(), nullptr);
} }
ResourceFetcher* Fetcher() const { return fetcher_.Get(); } ResourceFetcher* Fetcher() const { return fetcher_.Get(); }
void AdvanceClock(double seconds) { platform_->AdvanceClockSeconds(seconds); } void AdvanceClock(double seconds) { platform_->AdvanceClockSeconds(seconds); }
......
...@@ -167,7 +167,8 @@ TEST(ResourceTest, RevalidationSucceeded) { ...@@ -167,7 +167,8 @@ TEST(ResourceTest, RevalidationSucceeded) {
// Simulate a successful revalidation. // Simulate a successful revalidation.
resource->SetRevalidatingRequest(ResourceRequest("data:text/html,")); resource->SetRevalidatingRequest(ResourceRequest("data:text/html,"));
Persistent<MockResourceClient> client = new MockResourceClient(resource); Persistent<MockResourceClient> client = new MockResourceClient;
resource->AddClient(client);
ResourceResponse revalidating_response; ResourceResponse revalidating_response;
revalidating_response.SetHTTPStatusCode(304); revalidating_response.SetHTTPStatusCode(304);
...@@ -179,7 +180,7 @@ TEST(ResourceTest, RevalidationSucceeded) { ...@@ -179,7 +180,7 @@ TEST(ResourceTest, RevalidationSucceeded) {
GetMemoryCache()->ResourceForURL(KURL("data:text/html,"))); GetMemoryCache()->ResourceForURL(KURL("data:text/html,")));
GetMemoryCache()->Remove(resource); GetMemoryCache()->Remove(resource);
client->RemoveAsClient(); resource->RemoveClient(client);
EXPECT_FALSE(resource->IsAlive()); EXPECT_FALSE(resource->IsAlive());
EXPECT_FALSE(client->NotifyFinishedCalled()); EXPECT_FALSE(client->NotifyFinishedCalled());
} }
...@@ -197,7 +198,8 @@ TEST(ResourceTest, RevalidationSucceededForResourceWithoutBody) { ...@@ -197,7 +198,8 @@ TEST(ResourceTest, RevalidationSucceededForResourceWithoutBody) {
// Simulate a successful revalidation. // Simulate a successful revalidation.
resource->SetRevalidatingRequest(ResourceRequest("data:text/html,")); resource->SetRevalidatingRequest(ResourceRequest("data:text/html,"));
Persistent<MockResourceClient> client = new MockResourceClient(resource); Persistent<MockResourceClient> client = new MockResourceClient;
resource->AddClient(client);
ResourceResponse revalidating_response; ResourceResponse revalidating_response;
revalidating_response.SetHTTPStatusCode(304); revalidating_response.SetHTTPStatusCode(304);
...@@ -209,7 +211,7 @@ TEST(ResourceTest, RevalidationSucceededForResourceWithoutBody) { ...@@ -209,7 +211,7 @@ TEST(ResourceTest, RevalidationSucceededForResourceWithoutBody) {
GetMemoryCache()->ResourceForURL(KURL("data:text/html,"))); GetMemoryCache()->ResourceForURL(KURL("data:text/html,")));
GetMemoryCache()->Remove(resource); GetMemoryCache()->Remove(resource);
client->RemoveAsClient(); resource->RemoveClient(client);
EXPECT_FALSE(resource->IsAlive()); EXPECT_FALSE(resource->IsAlive());
EXPECT_FALSE(client->NotifyFinishedCalled()); EXPECT_FALSE(client->NotifyFinishedCalled());
} }
...@@ -249,7 +251,8 @@ TEST(ResourceTest, RevalidationSucceededUpdateHeaders) { ...@@ -249,7 +251,8 @@ TEST(ResourceTest, RevalidationSucceededUpdateHeaders) {
EXPECT_EQ("custom value", EXPECT_EQ("custom value",
resource->GetResponse().HttpHeaderField("x-custom")); resource->GetResponse().HttpHeaderField("x-custom"));
Persistent<MockResourceClient> client = new MockResourceClient(resource); Persistent<MockResourceClient> client = new MockResourceClient;
resource->AddClient(client);
// Perform a revalidation step. // Perform a revalidation step.
ResourceResponse revalidating_response; ResourceResponse revalidating_response;
...@@ -282,8 +285,6 @@ TEST(ResourceTest, RevalidationSucceededUpdateHeaders) { ...@@ -282,8 +285,6 @@ TEST(ResourceTest, RevalidationSucceededUpdateHeaders) {
resource->GetResponse().HttpHeaderField("proxy-connection")); resource->GetResponse().HttpHeaderField("proxy-connection"));
EXPECT_EQ("updated", resource->GetResponse().HttpHeaderField("x-custom")); EXPECT_EQ("updated", resource->GetResponse().HttpHeaderField("x-custom"));
client->RemoveAsClient();
resource->RemoveClient(client); resource->RemoveClient(client);
EXPECT_FALSE(resource->IsAlive()); EXPECT_FALSE(resource->IsAlive());
EXPECT_FALSE(client->NotifyFinishedCalled()); EXPECT_FALSE(client->NotifyFinishedCalled());
...@@ -317,7 +318,8 @@ TEST(ResourceTest, RedirectDuringRevalidation) { ...@@ -317,7 +318,8 @@ TEST(ResourceTest, RedirectDuringRevalidation) {
EXPECT_EQ("https://example.com/1", EXPECT_EQ("https://example.com/1",
resource->LastResourceRequest().Url().GetString()); resource->LastResourceRequest().Url().GetString());
Persistent<MockResourceClient> client = new MockResourceClient(resource); Persistent<MockResourceClient> client = new MockResourceClient;
resource->AddClient(client);
// The revalidating request is redirected. // The revalidating request is redirected.
ResourceResponse redirect_response; ResourceResponse redirect_response;
...@@ -355,7 +357,8 @@ TEST(ResourceTest, RedirectDuringRevalidation) { ...@@ -355,7 +357,8 @@ TEST(ResourceTest, RedirectDuringRevalidation) {
EXPECT_TRUE(client->NotifyFinishedCalled()); EXPECT_TRUE(client->NotifyFinishedCalled());
// Test the case where a client is added after revalidation is completed. // Test the case where a client is added after revalidation is completed.
Persistent<MockResourceClient> client2 = new MockResourceClient(resource); Persistent<MockResourceClient> client2 = new MockResourceClient;
resource->AddClient(client2);
// Because the client is added asynchronously, // Because the client is added asynchronously,
// |runUntilIdle()| is called to make |client2| to be notified. // |runUntilIdle()| is called to make |client2| to be notified.
...@@ -365,8 +368,8 @@ TEST(ResourceTest, RedirectDuringRevalidation) { ...@@ -365,8 +368,8 @@ TEST(ResourceTest, RedirectDuringRevalidation) {
GetMemoryCache()->Remove(resource); GetMemoryCache()->Remove(resource);
client->RemoveAsClient(); resource->RemoveClient(client);
client2->RemoveAsClient(); resource->RemoveClient(client2);
EXPECT_FALSE(resource->IsAlive()); EXPECT_FALSE(resource->IsAlive());
} }
......
...@@ -26,10 +26,11 @@ class MockResourceFactory final : public NonTextResourceFactory { ...@@ -26,10 +26,11 @@ class MockResourceFactory final : public NonTextResourceFactory {
// static // static
MockResource* MockResource::Fetch(FetchParameters& params, MockResource* MockResource::Fetch(FetchParameters& params,
ResourceFetcher* fetcher) { ResourceFetcher* fetcher,
ResourceClient* client) {
params.SetRequestContext(WebURLRequest::kRequestContextSubresource); params.SetRequestContext(WebURLRequest::kRequestContextSubresource);
Resource* resource = fetcher->RequestResource(params, MockResourceFactory()); return static_cast<MockResource*>(
return static_cast<MockResource*>(resource); fetcher->RequestResource(params, MockResourceFactory(), client));
} }
// static // static
......
...@@ -20,7 +20,9 @@ struct ResourceLoaderOptions; ...@@ -20,7 +20,9 @@ struct ResourceLoaderOptions;
// class to verify classes that consume Resource sub-classes in a simple way. // class to verify classes that consume Resource sub-classes in a simple way.
class MockResource final : public Resource { class MockResource final : public Resource {
public: public:
static MockResource* Fetch(FetchParameters&, ResourceFetcher*); static MockResource* Fetch(FetchParameters&,
ResourceFetcher*,
ResourceClient*);
static MockResource* Create(const ResourceRequest&); static MockResource* Create(const ResourceRequest&);
MockResource(const ResourceRequest&, const ResourceLoaderOptions&); MockResource(const ResourceRequest&, const ResourceLoaderOptions&);
}; };
......
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "platform/loader/testing/MockResourceClient.h"
namespace blink {
MockResourceClient::MockResourceClient(Resource* resource)
: resource_(resource),
notify_finished_called_(false),
encoded_size_on_notify_finished_(0) {
resource_->AddClient(this);
}
MockResourceClient::~MockResourceClient() {}
void MockResourceClient::NotifyFinished(Resource* resource) {
CHECK(!notify_finished_called_);
notify_finished_called_ = true;
encoded_size_on_notify_finished_ = resource->EncodedSize();
}
void MockResourceClient::RemoveAsClient() {
resource_->RemoveClient(this);
resource_ = nullptr;
}
void MockResourceClient::Dispose() {
if (resource_) {
resource_->RemoveClient(this);
resource_ = nullptr;
}
}
void MockResourceClient::Trace(blink::Visitor* visitor) {
visitor->Trace(resource_);
ResourceClient::Trace(visitor);
}
} // namespace blink
...@@ -32,37 +32,28 @@ ...@@ -32,37 +32,28 @@
#define MockResourceClient_h #define MockResourceClient_h
#include "platform/heap/Handle.h" #include "platform/heap/Handle.h"
#include "platform/loader/fetch/Resource.h"
#include "platform/loader/fetch/ResourceClient.h" #include "platform/loader/fetch/ResourceClient.h"
namespace blink { namespace blink {
class MockResourceClient : public GarbageCollectedFinalized<MockResourceClient>, class MockResourceClient : public GarbageCollectedFinalized<MockResourceClient>,
public ResourceClient { public ResourceClient {
USING_PRE_FINALIZER(MockResourceClient, Dispose);
USING_GARBAGE_COLLECTED_MIXIN(MockResourceClient); USING_GARBAGE_COLLECTED_MIXIN(MockResourceClient);
public: public:
explicit MockResourceClient(Resource*); MockResourceClient() {}
~MockResourceClient() override; ~MockResourceClient() override {}
void NotifyFinished(Resource*) override; void NotifyFinished(Resource*) override {
String DebugName() const override { return "MockResourceClient"; } CHECK(!notify_finished_called_);
virtual bool NotifyFinishedCalled() const { return notify_finished_called_; } notify_finished_called_ = true;
size_t EncodedSizeOnNotifyFinished() const {
return encoded_size_on_notify_finished_;
} }
String DebugName() const override { return "MockResourceClient"; }
virtual void RemoveAsClient(); bool NotifyFinishedCalled() const { return notify_finished_called_; }
virtual void Dispose(); void RemoveAsClient() { ClearResource(); }
void Trace(blink::Visitor*) override;
protected: protected:
Member<Resource> resource_; bool notify_finished_called_ = false;
bool notify_finished_called_;
size_t encoded_size_on_notify_finished_;
}; };
} // namespace blink } // namespace blink
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment