Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(907)

Unified Diff: content/browser/loader/mock_resource_loader.cc

Issue 2526983002: Refactor ResourceHandler API. (Closed)
Patch Set: Fix merge again (?) Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/loader/mock_resource_loader.cc
diff --git a/content/browser/loader/mock_resource_loader.cc b/content/browser/loader/mock_resource_loader.cc
index c47403db6be140cdc6931ce9efd1f855006f6536..de360269a9c941b64ae1acedcf5f3cb27621dae1 100644
--- a/content/browser/loader/mock_resource_loader.cc
+++ b/content/browser/loader/mock_resource_loader.cc
@@ -9,88 +9,87 @@
#include "base/memory/ptr_util.h"
#include "base/memory/ref_counted.h"
#include "content/browser/loader/resource_controller.h"
-#include "content/browser/loader/resource_handler.h"
#include "net/base/io_buffer.h"
#include "net/url_request/url_request_status.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content {
+class MockResourceLoader::TestResourceController : public ResourceController {
+ public:
+ explicit TestResourceController(base::WeakPtr<MockResourceLoader> mock_loader)
+ : mock_loader_(mock_loader) {}
+ ~TestResourceController() override {}
+
+ void Resume() override { mock_loader_->OnResume(); }
+
+ void Cancel() override { CancelWithError(net::ERR_ABORTED); }
+
+ void CancelAndIgnore() override {
+ ADD_FAILURE() << "Unexpected CancelAndIgnore call.";
+ Cancel();
+ }
+
+ void CancelWithError(int error_code) override {
+ mock_loader_->OnCancel(error_code);
+ }
+
+ base::WeakPtr<MockResourceLoader> mock_loader_;
+};
+
MockResourceLoader::MockResourceLoader(ResourceHandler* resource_handler)
- : resource_handler_(resource_handler) {
- resource_handler_->SetController(this);
+ : resource_handler_(resource_handler), weak_factory_(this) {
+ resource_handler_->SetDelegate(this);
}
MockResourceLoader::~MockResourceLoader() {}
MockResourceLoader::Status MockResourceLoader::OnWillStart(const GURL& url) {
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs());
EXPECT_EQ(Status::IDLE, status_);
- status_ = Status::CALLING_HANDLER;
- bool defer = false;
- bool result = resource_handler_->OnWillStart(url, &defer);
- // The second case isn't really allowed, but a number of classes do it
- // anyways.
- EXPECT_TRUE(status_ == Status::CALLING_HANDLER ||
- (result == false && status_ == Status::CANCELED));
- if (!result) {
- status_ = Status::CANCELED;
- } else if (defer) {
+ status_ = Status::CALLING_HANDLER;
+ resource_handler_->OnWillStart(url, base::MakeUnique<TestResourceController>(
+ weak_factory_.GetWeakPtr()));
+ if (status_ == Status::CALLING_HANDLER)
status_ = Status::CALLBACK_PENDING;
- } else {
- status_ = Status::IDLE;
- }
return status_;
}
MockResourceLoader::Status MockResourceLoader::OnRequestRedirected(
const net::RedirectInfo& redirect_info,
ResourceResponse* response) {
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs());
EXPECT_EQ(Status::IDLE, status_);
- status_ = Status::CALLING_HANDLER;
- bool defer = false;
- bool result =
- resource_handler_->OnRequestRedirected(redirect_info, response, &defer);
- // The second case isn't really allowed, but a number of classes do it
- // anyways.
- EXPECT_TRUE(status_ == Status::CALLING_HANDLER ||
- (result == false && status_ == Status::CANCELED));
- if (!result) {
- status_ = Status::CANCELED;
- } else if (defer) {
+ status_ = Status::CALLING_HANDLER;
+ resource_handler_->OnRequestRedirected(
+ redirect_info, response,
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr()));
+ if (status_ == Status::CALLING_HANDLER)
status_ = Status::CALLBACK_PENDING;
- } else {
- status_ = Status::IDLE;
- }
return status_;
}
MockResourceLoader::Status MockResourceLoader::OnResponseStarted(
ResourceResponse* response) {
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs());
EXPECT_EQ(Status::IDLE, status_);
- status_ = Status::CALLING_HANDLER;
- bool defer = false;
- bool result = resource_handler_->OnResponseStarted(response, &defer);
- // The second case isn't really allowed, but a number of classes do it
- // anyways.
- EXPECT_TRUE(status_ == Status::CALLING_HANDLER ||
- (result == false && status_ == Status::CANCELED));
- if (!result) {
- status_ = Status::CANCELED;
- } else if (defer) {
+ status_ = Status::CALLING_HANDLER;
+ resource_handler_->OnResponseStarted(
+ response,
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr()));
+ if (status_ == Status::CALLING_HANDLER)
status_ = Status::CALLBACK_PENDING;
- } else {
- status_ = Status::IDLE;
- }
return status_;
}
MockResourceLoader::Status MockResourceLoader::OnWillRead(int min_size) {
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs());
EXPECT_EQ(Status::IDLE, status_);
- status_ = Status::CALLING_HANDLER;
+ status_ = Status::CALLING_HANDLER;
scoped_refptr<net::IOBuffer> buf;
int buf_size;
bool result = resource_handler_->OnWillRead(&buf, &buf_size, min_size);
@@ -108,27 +107,21 @@ MockResourceLoader::Status MockResourceLoader::OnWillRead(int min_size) {
};
MockResourceLoader::Status MockResourceLoader::OnReadCompleted(int bytes_read) {
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs());
EXPECT_EQ(Status::IDLE, status_);
- status_ = Status::CALLING_HANDLER;
- bool defer = false;
- bool result = resource_handler_->OnReadCompleted(bytes_read, &defer);
- // The second case isn't really allowed, but a number of classes do it
- // anyways.
- EXPECT_TRUE(status_ == Status::CALLING_HANDLER ||
- (result == false && status_ == Status::CANCELED));
- if (!result) {
- status_ = Status::CANCELED;
- } else if (defer) {
+ status_ = Status::CALLING_HANDLER;
+ resource_handler_->OnReadCompleted(
+ bytes_read,
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr()));
+ if (status_ == Status::CALLING_HANDLER)
status_ = Status::CALLBACK_PENDING;
- } else {
- status_ = Status::IDLE;
- }
return status_;
}
MockResourceLoader::Status MockResourceLoader::OnResponseCompleted(
const net::URLRequestStatus& status) {
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs());
// This should only happen while the ResourceLoader is idle or the request was
// canceled.
EXPECT_TRUE(status_ == Status::IDLE ||
@@ -136,45 +129,49 @@ MockResourceLoader::Status MockResourceLoader::OnResponseCompleted(
error_code_ == status.error()));
status_ = Status::CALLING_HANDLER;
-
- bool defer = false;
- resource_handler_->OnResponseCompleted(status, &defer);
- EXPECT_EQ(Status::CALLING_HANDLER, status_);
- if (defer) {
+ resource_handler_->OnResponseCompleted(
+ status,
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr()));
+ if (status_ == Status::CALLING_HANDLER)
status_ = Status::CALLBACK_PENDING;
- } else {
- status_ = Status::IDLE;
- }
+ EXPECT_NE(Status::CANCELED, status_);
return status_;
}
-void MockResourceLoader::Cancel() {
- CancelWithError(net::ERR_ABORTED);
-}
+void MockResourceLoader::OutOfBandCancel(int error_code, bool tell_renderer) {
+ // Shouldn't be called in-band.
+ EXPECT_NE(Status::CALLING_HANDLER, status_);
+
+ status_ = Status::CANCELED;
+ canceled_out_of_band_ = true;
-void MockResourceLoader::CancelAndIgnore() {
- NOTREACHED();
+ // To mimic real behavior, keep old error, in the case of double-cancel.
+ if (error_code_ == net::OK)
+ error_code_ = error_code;
}
-void MockResourceLoader::CancelWithError(int error_code) {
- EXPECT_LT(error_code, 0);
- // Ignore double cancels. Classes shouldn't be doing this, as
- // ResourceLoader doesn't really support it, but they do anywways. :(
- // TODO(mmenke): Remove this check.
- if (error_code_ != net::OK)
+void MockResourceLoader::OnCancel(int error_code) {
+ // It's currently allowed to be canceled in-band after being cancelled
+ // out-of-band, so do nothing, unless the status is no longer CANCELED, which
+ // which case, OnResponseCompleted has already been called, and cancels aren't
+ // expected then.
+ // TODO(mmenke): Make CancelOutOfBand synchronously destroy the
+ // ResourceLoader.
+ if (canceled_out_of_band_ && status_ == Status::CANCELED)
return;
- // ResourceLoader really expects canceled not to be called synchronously, but
- // a lot of code does it, so allow it.
- // TODO(mmenke): Remove CALLING_HANDLER.
+ EXPECT_LT(error_code, 0);
EXPECT_TRUE(status_ == Status::CALLBACK_PENDING ||
- status_ == Status::CALLING_HANDLER || status_ == Status::IDLE);
+ status_ == Status::CALLING_HANDLER);
+
status_ = Status::CANCELED;
error_code_ = error_code;
}
-void MockResourceLoader::Resume() {
- EXPECT_EQ(Status::CALLBACK_PENDING, status_);
+void MockResourceLoader::OnResume() {
+ EXPECT_TRUE(status_ == Status::CALLBACK_PENDING ||
+ status_ == Status::CALLING_HANDLER);
+
status_ = Status::IDLE;
}

Powered by Google App Engine
This is Rietveld 408576698