| 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 9d67c9f2b8cf92546377650511116620ce9d9685..ad91efd99937aa3d07ec89c2facc951be7ab3c1d 100644
|
| --- a/content/browser/loader/mock_resource_loader.cc
|
| +++ b/content/browser/loader/mock_resource_loader.cc
|
| @@ -96,30 +96,43 @@ MockResourceLoader::Status MockResourceLoader::OnResponseStarted(
|
|
|
| MockResourceLoader::Status MockResourceLoader::OnWillRead(int min_size) {
|
| EXPECT_EQ(Status::IDLE, status_);
|
| + EXPECT_FALSE(io_buffer_);
|
| + EXPECT_EQ(0, io_buffer_size_);
|
| +
|
| status_ = Status::CALLING_HANDLER;
|
|
|
| - scoped_refptr<net::IOBuffer> buf;
|
| - int buf_size;
|
| - bool result = resource_handler_->OnWillRead(&buf, &buf_size, min_size);
|
| + bool result =
|
| + resource_handler_->OnWillRead(&io_buffer_, &io_buffer_size_, min_size);
|
| // 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) {
|
| + EXPECT_EQ(0, io_buffer_size_);
|
| + EXPECT_FALSE(io_buffer_);
|
| status_ = Status::CANCELED;
|
| } else {
|
| - EXPECT_LE(min_size, buf_size);
|
| + EXPECT_LE(min_size, io_buffer_size_);
|
| + EXPECT_LT(0, io_buffer_size_);
|
| + EXPECT_TRUE(io_buffer_);
|
| status_ = Status::IDLE;
|
| }
|
| return status_;
|
| };
|
|
|
| -MockResourceLoader::Status MockResourceLoader::OnReadCompleted(int bytes_read) {
|
| +MockResourceLoader::Status MockResourceLoader::OnReadCompleted(
|
| + base::StringPiece bytes) {
|
| EXPECT_EQ(Status::IDLE, status_);
|
| + EXPECT_LE(bytes.size(), static_cast<size_t>(io_buffer_size_));
|
| +
|
| + status_ = Status::CALLING_HANDLER;
|
| + std::copy(bytes.begin(), bytes.end(), io_buffer_->data());
|
| + io_buffer_ = nullptr;
|
| + io_buffer_size_ = 0;
|
| status_ = Status::CALLING_HANDLER;
|
|
|
| bool defer = false;
|
| - bool result = resource_handler_->OnReadCompleted(bytes_read, &defer);
|
| + bool result = resource_handler_->OnReadCompleted(bytes.size(), &defer);
|
| // The second case isn't really allowed, but a number of classes do it
|
| // anyways.
|
| EXPECT_TRUE(status_ == Status::CALLING_HANDLER ||
|
| @@ -142,6 +155,8 @@ MockResourceLoader::Status MockResourceLoader::OnResponseCompleted(
|
| (!status.is_success() && status_ == Status::CANCELED &&
|
| error_code_ == status.error()));
|
|
|
| + io_buffer_ = nullptr;
|
| + io_buffer_size_ = 0;
|
| status_ = Status::CALLING_HANDLER;
|
|
|
| bool defer = false;
|
| @@ -155,6 +170,37 @@ MockResourceLoader::Status MockResourceLoader::OnResponseCompleted(
|
| return status_;
|
| }
|
|
|
| +MockResourceLoader::Status
|
| +MockResourceLoader::OnResponseCompletedFromExternalOutOfBandCancel(
|
| + const net::URLRequestStatus& url_request_status) {
|
| + // This can happen at any point, except from a recursive call from
|
| + // ResourceHandler.
|
| + EXPECT_NE(Status::CALLING_HANDLER, status_);
|
| +
|
| + io_buffer_ = nullptr;
|
| + io_buffer_size_ = 0;
|
| + status_ = Status::CALLING_HANDLER;
|
| +
|
| + bool defer = false;
|
| + resource_handler_->OnResponseCompleted(url_request_status, &defer);
|
| + EXPECT_EQ(Status::CALLING_HANDLER, status_);
|
| + if (defer) {
|
| + status_ = Status::CALLBACK_PENDING;
|
| + } else {
|
| + status_ = Status::IDLE;
|
| + }
|
| + return status_;
|
| +}
|
| +
|
| +void MockResourceLoader::WaitUntilIdleOrCanceled() {
|
| + if (status_ == Status::IDLE || status_ == Status::CANCELED)
|
| + return;
|
| + EXPECT_FALSE(canceled_or_idle_run_loop_);
|
| + canceled_or_idle_run_loop_.reset(new base::RunLoop());
|
| + canceled_or_idle_run_loop_->Run();
|
| + EXPECT_TRUE(status_ == Status::IDLE || status_ == Status::CANCELED);
|
| +}
|
| +
|
| void MockResourceLoader::Cancel() {
|
| CancelWithError(net::ERR_ABORTED);
|
| }
|
| @@ -178,11 +224,15 @@ void MockResourceLoader::CancelWithError(int error_code) {
|
| status_ == Status::CALLING_HANDLER || status_ == Status::IDLE);
|
| status_ = Status::CANCELED;
|
| error_code_ = error_code;
|
| + if (canceled_or_idle_run_loop_)
|
| + canceled_or_idle_run_loop_->Quit();
|
| }
|
|
|
| void MockResourceLoader::Resume() {
|
| EXPECT_EQ(Status::CALLBACK_PENDING, status_);
|
| status_ = Status::IDLE;
|
| + if (canceled_or_idle_run_loop_)
|
| + canceled_or_idle_run_loop_->Quit();
|
| }
|
|
|
| } // namespace content
|
|
|