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

Unified Diff: content/browser/loader/mojo_async_resource_handler_unittest.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/mojo_async_resource_handler_unittest.cc
diff --git a/content/browser/loader/mojo_async_resource_handler_unittest.cc b/content/browser/loader/mojo_async_resource_handler_unittest.cc
index e67713a24c73f6e085a63444c40c8314861cfb67..b68b52d76e8a58bf147d69e81100d1952b122da2 100644
--- a/content/browser/loader/mojo_async_resource_handler_unittest.cc
+++ b/content/browser/loader/mojo_async_resource_handler_unittest.cc
@@ -18,6 +18,7 @@
#include "content/browser/loader/resource_controller.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
#include "content/browser/loader/resource_request_info_impl.h"
+#include "content/browser/loader/test_resource_handler_wrapper.h"
#include "content/browser/loader/test_url_loader_client.h"
#include "content/common/resource_request_completion_status.h"
#include "content/common/url_loader.mojom.h"
@@ -173,55 +174,6 @@ class TestResourceDispatcherHostDelegate final
DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate);
};
-class TestResourceController : public ResourceController {
- public:
- TestResourceController() {}
- ~TestResourceController() override {}
-
- void Cancel() override { ADD_FAILURE() << "Cancel should not be called."; }
-
- void CancelAndIgnore() override {
- ADD_FAILURE() << "CancelAndIgnore should not be called.";
- }
-
- void CancelWithError(int error_code) override {
- // While cancelling more than once is legal, none of these tests should do
- // it.
- EXPECT_FALSE(is_cancel_with_error_called_);
-
- is_cancel_with_error_called_ = true;
- error_ = error_code;
- if (quit_closure_)
- quit_closure_.Run();
- }
-
- void Resume() override { ++num_resume_calls_; }
-
- void RunUntilCancelWithErrorCalled() {
- base::RunLoop run_loop;
- quit_closure_ = run_loop.QuitClosure();
- run_loop.Run();
- }
-
- void set_quit_closure(const base::Closure& quit_closure) {
- quit_closure_ = quit_closure;
- }
-
- bool is_cancel_with_error_called() const {
- return is_cancel_with_error_called_;
- }
- int error() const { return error_; }
- int num_resume_calls() const { return num_resume_calls_; }
-
- private:
- bool is_cancel_with_error_called_ = false;
- int error_ = net::OK;
- int num_resume_calls_ = 0;
- base::Closure quit_closure_;
-
- DISALLOW_COPY_AND_ASSIGN(TestResourceController);
-};
-
class MojoAsyncResourceHandlerWithCustomDataPipeOperations
: public MojoAsyncResourceHandler {
public:
@@ -359,7 +311,7 @@ class MojoAsyncResourceHandlerTestBase {
handler_.reset(new MojoAsyncResourceHandlerWithCustomDataPipeOperations(
request_.get(), &rdh_, factory_impl->PassLoaderRequest(),
std::move(client_ptr)));
- handler_->SetController(&resource_controller_);
+ handler_wrapper_.reset(new TestResourceHandlerWrapper(handler_.get()));
}
virtual ~MojoAsyncResourceHandlerTestBase() {
@@ -370,35 +322,20 @@ class MojoAsyncResourceHandlerTestBase {
}
// Returns false if something bad happens.
- bool CallOnWillStart() {
- bool defer = false;
- if (!handler_->OnWillStart(request_->url(), &defer)) {
- ADD_FAILURE() << "OnWillStart returns false.";
- return false;
- }
- if (defer) {
- ADD_FAILURE() << "OnWillStart sets |defer| true.";
- return false;
- }
- return true;
- }
-
- // Returns false if something bad happens.
bool CallOnWillStartAndOnResponseStarted() {
rdh_delegate_.set_num_on_response_started_calls_expectation(1);
- if (!CallOnWillStart())
+ TestResourceHandlerWrapper::Result result =
+ handler_wrapper_->OnWillStart(request_->url());
+ EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, result);
+ if (result != TestResourceHandlerWrapper::Result::RESUME)
return false;
scoped_refptr<ResourceResponse> response = new ResourceResponse();
- bool defer = false;
- if (!handler_->OnResponseStarted(response.get(), &defer)) {
- ADD_FAILURE() << "OnResponseStarted returns false.";
- return false;
- }
- if (defer) {
- ADD_FAILURE() << "OnResponseStarted sets |defer| true.";
+ result = handler_wrapper_->OnResponseStarted(response.get());
+ EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, result);
+ if (result != TestResourceHandlerWrapper::Result::RESUME)
return false;
- }
+
if (url_loader_client_.has_received_response()) {
ADD_FAILURE() << "URLLoaderClient unexpectedly gets a response.";
return false;
@@ -413,12 +350,12 @@ class MojoAsyncResourceHandlerTestBase {
mojom::URLLoaderFactoryPtr url_loader_factory_;
mojom::URLLoaderAssociatedPtr url_loader_proxy_;
TestURLLoaderClient url_loader_client_;
- TestResourceController resource_controller_;
std::unique_ptr<TestBrowserContext> browser_context_;
std::unique_ptr<net::TestDelegate> url_request_delegate_;
std::unique_ptr<net::URLRequest> request_;
std::unique_ptr<MojoAsyncResourceHandlerWithCustomDataPipeOperations>
handler_;
+ std::unique_ptr<TestResourceHandlerWrapper> handler_wrapper_;
DISALLOW_COPY_AND_ASSIGN(MojoAsyncResourceHandlerTestBase);
};
@@ -444,14 +381,14 @@ TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) {
}
TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) {
- bool defer = false;
- EXPECT_TRUE(handler_->OnWillStart(request_->url(), &defer));
- EXPECT_FALSE(defer);
+ EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnWillStart(request_->url()));
}
TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) {
rdh_delegate_.set_num_on_response_started_calls_expectation(1);
- ASSERT_TRUE(CallOnWillStart());
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnWillStart(request_->url()));
scoped_refptr<ResourceResponse> response = new ResourceResponse();
response->head.content_length = 99;
@@ -460,14 +397,12 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) {
response->head.response_start =
base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(28);
- bool defer = false;
-
EXPECT_EQ(0, rdh_delegate_.num_on_response_started_calls());
base::TimeTicks now1 = base::TimeTicks::Now();
- ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer));
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseStarted(response.get()));
base::TimeTicks now2 = base::TimeTicks::Now();
- EXPECT_FALSE(defer);
EXPECT_EQ(request_->creation_time(), response->head.request_start);
EXPECT_LE(now1, response->head.response_start);
EXPECT_LE(response->head.response_start, now2);
@@ -502,14 +437,13 @@ TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) {
EXPECT_FALSE(io_buffer);
EXPECT_EQ(0, io_buffer_size);
EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing());
- EXPECT_TRUE(resource_controller_.is_cancel_with_error_called());
- EXPECT_EQ(net::ERR_INSUFFICIENT_RESOURCES, resource_controller_.error());
+ // TODO(mmenke): Should make sure the class is cancelling with
+ // ERR_INSUFFICIENT_RESOURCES here (Which it isn't currently doing).
handler_ = nullptr;
EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing());
}
TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) {
- bool defer = false;
scoped_refptr<net::IOBuffer> io_buffer;
int io_buffer_size = 0;
@@ -524,8 +458,8 @@ TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) {
io_buffer->data()[0] = 'A';
io_buffer->data()[1] = 'B';
- ASSERT_TRUE(handler_->OnReadCompleted(2, &defer));
- EXPECT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnReadCompleted(2));
std::string contents;
while (contents.size() < 2) {
@@ -547,7 +481,6 @@ TEST_F(MojoAsyncResourceHandlerTest,
OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) {
MojoAsyncResourceHandler::SetAllocationSizeForTesting(2);
- bool defer = false;
scoped_refptr<net::IOBuffer> io_buffer;
int io_buffer_size = 0;
@@ -562,8 +495,8 @@ TEST_F(MojoAsyncResourceHandlerTest,
const std::string data("abcdefgh");
strcpy(io_buffer->data(), data.c_str());
- ASSERT_TRUE(handler_->OnReadCompleted(data.size(), &defer));
- EXPECT_TRUE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING,
+ handler_wrapper_->OnReadCompleted(data.size()));
std::string contents;
while (contents.size() < data.size()) {
@@ -580,7 +513,8 @@ TEST_F(MojoAsyncResourceHandlerTest,
contents.append(buffer, read_size);
}
EXPECT_EQ(data, contents);
- EXPECT_EQ(0, resource_controller_.num_resume_calls());
+ EXPECT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING,
+ handler_wrapper_->last_result());
}
TEST_F(MojoAsyncResourceHandlerTest,
@@ -603,7 +537,6 @@ TEST_F(MojoAsyncResourceHandlerTest,
}
TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) {
- bool defer = false;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
ResourceRequestInfoImpl::ForRequest(request_.get())
@@ -611,9 +544,9 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) {
net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK);
base::TimeTicks now1 = base::TimeTicks::Now();
- handler_->OnResponseCompleted(status, &defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompleted(status));
base::TimeTicks now2 = base::TimeTicks::Now();
- EXPECT_FALSE(defer);
url_loader_client_.RunUntilComplete();
EXPECT_TRUE(url_loader_client_.has_received_completion());
@@ -628,13 +561,13 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) {
// This test case sets different status values from OnResponseCompleted.
TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) {
rdh_.SetDelegate(nullptr);
- bool defer = false;
// Don't use CallOnWillStartAndOnResponseStarted as this test case manually
// sets the null delegate.
- ASSERT_TRUE(CallOnWillStart());
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnWillStart(request_->url()));
scoped_refptr<ResourceResponse> response = new ResourceResponse();
- ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseStarted(response.get()));
ASSERT_FALSE(url_loader_client_.has_received_response());
url_loader_client_.RunUntilResponseReceived();
@@ -644,9 +577,9 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) {
net::ERR_ABORTED);
base::TimeTicks now1 = base::TimeTicks::Now();
- handler_->OnResponseCompleted(status, &defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompleted(status));
base::TimeTicks now2 = base::TimeTicks::Now();
- EXPECT_FALSE(defer);
url_loader_client_.RunUntilComplete();
EXPECT_TRUE(url_loader_client_.has_received_completion());
@@ -662,11 +595,10 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) {
TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) {
net::URLRequestStatus status(net::URLRequestStatus::CANCELED,
net::ERR_TIMED_OUT);
- bool defer = false;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
- handler_->OnResponseCompleted(status, &defer);
- EXPECT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompleted(status));
url_loader_client_.RunUntilComplete();
EXPECT_TRUE(url_loader_client_.has_received_completion());
@@ -677,11 +609,10 @@ TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) {
TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) {
net::URLRequestStatus status(net::URLRequestStatus::FAILED,
net::ERR_TIMED_OUT);
- bool defer = false;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
- handler_->OnResponseCompleted(status, &defer);
- EXPECT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompleted(status));
url_loader_client_.RunUntilComplete();
EXPECT_TRUE(url_loader_client_.has_received_completion());
@@ -694,16 +625,15 @@ TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) {
scoped_refptr<net::IOBuffer> io_buffer;
int io_buffer_size = 0;
- bool defer = false;
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
url_loader_client_.RunUntilResponseBodyArrived();
ASSERT_TRUE(url_loader_client_.response_body().is_valid());
- ASSERT_TRUE(handler_->OnReadCompleted(0, &defer));
- EXPECT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnReadCompleted(0));
net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK);
- handler_->OnResponseCompleted(status, &defer);
- EXPECT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompleted(status));
url_loader_client_.RunUntilComplete();
EXPECT_TRUE(url_loader_client_.has_received_completion());
@@ -734,14 +664,13 @@ TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission) {
ASSERT_TRUE(url_loader_client_.response_body().is_valid());
ASSERT_GT(io_buffer_size, 0);
memset(io_buffer->data(), 'a', io_buffer_size);
- bool defer = false;
- ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer));
- // We don't care |defer|'s value here.
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING,
+ handler_wrapper_->OnReadCompleted(io_buffer_size));
- defer = false;
+ // Out of band cancel.
net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED);
- handler_->OnResponseCompleted(status, &defer);
- EXPECT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompletedForOutOfBandCancel(status));
url_loader_client_.RunUntilComplete();
EXPECT_TRUE(url_loader_client_.has_received_completion());
@@ -778,10 +707,9 @@ TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) {
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
url_loader_client_.RunUntilResponseBodyArrived();
ASSERT_TRUE(url_loader_client_.response_body().is_valid());
- bool defer = false;
net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED);
- handler_->OnResponseCompleted(status, &defer);
- EXPECT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompleted(status));
url_loader_client_.RunUntilComplete();
EXPECT_TRUE(url_loader_client_.has_received_completion());
@@ -809,7 +737,6 @@ TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) {
int io_buffer_size = 0;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
- EXPECT_FALSE(resource_controller_.is_cancel_with_error_called());
}
TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) {
@@ -835,10 +762,11 @@ TEST_F(MojoAsyncResourceHandlerTest,
EXPECT_GT(io_buffer_size, 0);
memset(io_buffer->data(), 'X', io_buffer_size);
written += io_buffer_size;
- bool defer = false;
- ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer));
- if (defer)
+ TestResourceHandlerWrapper::Result result =
+ handler_wrapper_->OnReadCompleted(io_buffer_size);
+ if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING)
break;
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result);
}
url_loader_client_.RunUntilResponseBodyArrived();
@@ -860,7 +788,8 @@ TEST_F(MojoAsyncResourceHandlerTest,
}
EXPECT_EQ(std::string(written, 'X'), actual);
- EXPECT_EQ(1, resource_controller_.num_resume_calls());
+ EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->last_result());
}
TEST_F(MojoAsyncResourceHandlerTest,
@@ -876,12 +805,12 @@ TEST_F(MojoAsyncResourceHandlerTest,
TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) {
scoped_refptr<net::IOBuffer> io_buffer;
int io_buffer_size = 0;
- bool defer = false;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT);
- ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer));
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::CANCEL,
+ handler_wrapper_->OnReadCompleted(io_buffer_size));
}
TEST_F(MojoAsyncResourceHandlerTest,
@@ -889,12 +818,12 @@ TEST_F(MojoAsyncResourceHandlerTest,
MojoAsyncResourceHandler::SetAllocationSizeForTesting(2);
scoped_refptr<net::IOBuffer> io_buffer;
int io_buffer_size = 0;
- bool defer = false;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT);
- ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer));
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::CANCEL,
+ handler_wrapper_->OnReadCompleted(io_buffer_size));
}
TEST_F(MojoAsyncResourceHandlerTest,
@@ -908,11 +837,13 @@ TEST_F(MojoAsyncResourceHandlerTest,
ASSERT_TRUE(url_loader_client_.response_body().is_valid());
while (true) {
- bool defer = false;
- ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer));
ASSERT_GE(io_buffer_size, 0);
- if (defer)
+ TestResourceHandlerWrapper::Result result =
+ handler_wrapper_->OnReadCompleted(io_buffer_size);
+ if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING)
break;
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result);
+
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
}
@@ -928,15 +859,15 @@ TEST_F(MojoAsyncResourceHandlerTest,
}
handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT);
- resource_controller_.RunUntilCancelWithErrorCalled();
+ handler_wrapper_->RunUntilCanceled();
EXPECT_FALSE(url_loader_client_.has_received_completion());
- EXPECT_TRUE(resource_controller_.is_cancel_with_error_called());
- EXPECT_EQ(net::ERR_FAILED, resource_controller_.error());
+ EXPECT_EQ(TestResourceHandlerWrapper::Result::CANCEL,
+ handler_wrapper_->last_result());
+ EXPECT_EQ(net::ERR_FAILED, handler_wrapper_->net_error());
}
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest,
OnWillReadWithLongContents) {
- bool defer = false;
scoped_refptr<net::IOBuffer> io_buffer;
int io_buffer_size = 0;
@@ -949,8 +880,8 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest,
for (int i = 0; i < 3 * io_buffer_size + 2; ++i)
expected += ('A' + i % 26);
- ASSERT_TRUE(handler_->OnReadCompleted(0, &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnReadCompleted(0));
url_loader_client_.RunUntilResponseBodyArrived();
ASSERT_TRUE(url_loader_client_.response_body().is_valid());
@@ -958,12 +889,18 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest,
size_t written = 0;
std::string actual;
while (actual.size() < expected.size()) {
- while (written < expected.size() && !defer) {
+ while (written < expected.size() &&
+ handler_wrapper_->last_result() ==
+ TestResourceHandlerWrapper::Result::RESUME) {
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
const size_t to_be_written = std::min(static_cast<size_t>(io_buffer_size),
expected.size() - written);
memcpy(io_buffer->data(), &expected[written], to_be_written);
- ASSERT_TRUE(handler_->OnReadCompleted(to_be_written, &defer));
+
+ // Request should be resumed or paused.
+ ASSERT_NE(TestResourceHandlerWrapper::Result::CANCEL,
+ handler_wrapper_->OnReadCompleted(to_be_written));
+
written += to_be_written;
}
@@ -976,10 +913,10 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest,
ASSERT_EQ(MOJO_RESULT_OK, result);
actual.append(buf, read_size);
}
- int resume_count = resource_controller_.num_resume_calls();
+
+ // Give mojo a chance pass data back and forth, and to request more data
+ // from the handler.
base::RunLoop().RunUntilIdle();
- // Continue writing if controller->Resume() is called.
- defer = (resume_count == resource_controller_.num_resume_calls());
}
EXPECT_EQ(expected, actual);
}
@@ -988,47 +925,50 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest,
BeginWriteFailsOnReadCompleted) {
scoped_refptr<net::IOBuffer> io_buffer;
int io_buffer_size = 0;
- bool defer = false;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN);
- ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer));
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::CANCEL,
+ handler_wrapper_->OnReadCompleted(io_buffer_size));
}
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest,
BeginWriteReturnsShouldWaitOnReadCompleted) {
scoped_refptr<net::IOBuffer> io_buffer;
int io_buffer_size = 0;
- bool defer = false;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT);
- ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer));
- EXPECT_TRUE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING,
+ handler_wrapper_->OnReadCompleted(io_buffer_size));
}
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest,
BeginWriteFailsOnResume) {
- bool defer = false;
int io_buffer_size = 0;
scoped_refptr<net::IOBuffer> io_buffer;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
- ASSERT_TRUE(handler_->OnReadCompleted(0, &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnReadCompleted(0));
url_loader_client_.RunUntilResponseBodyArrived();
ASSERT_TRUE(url_loader_client_.response_body().is_valid());
- while (!defer) {
+ while (true) {
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
- ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer));
+ TestResourceHandlerWrapper::Result result =
+ handler_wrapper_->OnReadCompleted(io_buffer_size);
+ if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING)
+ break;
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result);
}
handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN);
- while (!resource_controller_.is_cancel_with_error_called()) {
+ while (handler_wrapper_->last_result() !=
+ TestResourceHandlerWrapper::Result::CANCEL) {
char buf[256];
uint32_t read_size = sizeof(buf);
MojoResult result =
@@ -1039,28 +979,30 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest,
}
EXPECT_FALSE(url_loader_client_.has_received_completion());
- EXPECT_EQ(net::ERR_FAILED, resource_controller_.error());
- EXPECT_EQ(0, resource_controller_.num_resume_calls());
+ EXPECT_EQ(net::ERR_FAILED, handler_wrapper_->net_error());
}
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) {
- bool defer = false;
ASSERT_TRUE(CallOnWillStartAndOnResponseStarted());
- while (!defer) {
+ while (true) {
scoped_refptr<net::IOBuffer> io_buffer;
int io_buffer_size = 0;
ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1));
- ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer));
+ TestResourceHandlerWrapper::Result result =
+ handler_wrapper_->OnReadCompleted(io_buffer_size);
+ if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING)
+ break;
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result);
}
url_loader_client_.RunUntilResponseBodyArrived();
ASSERT_TRUE(url_loader_client_.response_body().is_valid());
- defer = false;
net::URLRequestStatus status(net::URLRequestStatus::CANCELED,
net::ERR_ABORTED);
- handler_->OnResponseCompleted(status, &defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompletedForOutOfBandCancel(status));
ASSERT_FALSE(url_loader_client_.has_received_completion());
url_loader_client_.RunUntilComplete();
@@ -1080,21 +1022,20 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) {
}
base::RunLoop().RunUntilIdle();
- EXPECT_EQ(0, resource_controller_.num_resume_calls());
}
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) {
rdh_delegate_.set_num_on_response_started_calls_expectation(1);
- bool defer = false;
- ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnWillStart(request_->url()));
+
scoped_refptr<ResourceResponse> response = new ResourceResponse();
net::RedirectInfo redirect_info;
redirect_info.status_code = 301;
- ASSERT_TRUE(
- handler_->OnRequestRedirected(redirect_info, response.get(), &defer));
- ASSERT_TRUE(defer);
+ ASSERT_EQ(
+ TestResourceHandlerWrapper::Result::CALLBACK_PENDING,
+ handler_wrapper_->OnRequestRedirected(redirect_info, response.get()));
ASSERT_FALSE(url_loader_client_.has_received_response());
ASSERT_FALSE(url_loader_client_.has_received_redirect());
@@ -1104,17 +1045,18 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) {
ASSERT_TRUE(url_loader_client_.has_received_redirect());
EXPECT_EQ(301, url_loader_client_.redirect_info().status_code);
- EXPECT_EQ(0, resource_controller_.num_resume_calls());
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING,
+ handler_wrapper_->last_result());
handler_->FollowRedirect();
- EXPECT_EQ(1, resource_controller_.num_resume_calls());
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->last_result());
url_loader_client_.ClearHasReceivedRedirect();
// Redirect once more.
- defer = false;
redirect_info.status_code = 302;
- ASSERT_TRUE(
- handler_->OnRequestRedirected(redirect_info, response.get(), &defer));
- ASSERT_TRUE(defer);
+ ASSERT_EQ(
+ TestResourceHandlerWrapper::Result::CALLBACK_PENDING,
+ handler_wrapper_->OnRequestRedirected(redirect_info, response.get()));
ASSERT_FALSE(url_loader_client_.has_received_response());
ASSERT_FALSE(url_loader_client_.has_received_redirect());
@@ -1124,18 +1066,19 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) {
ASSERT_TRUE(url_loader_client_.has_received_redirect());
EXPECT_EQ(302, url_loader_client_.redirect_info().status_code);
- EXPECT_EQ(1, resource_controller_.num_resume_calls());
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING,
+ handler_wrapper_->last_result());
handler_->FollowRedirect();
- EXPECT_EQ(2, resource_controller_.num_resume_calls());
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->last_result());
// Give the final response.
- defer = false;
- ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseStarted(response.get()));
net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK);
- handler_->OnResponseCompleted(status, &defer);
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompleted(status));
ASSERT_FALSE(url_loader_client_.has_received_completion());
url_loader_client_.RunUntilComplete();
@@ -1145,12 +1088,13 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) {
EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code);
}
+// Test the case where th other process tells the ResourceHandler to follow a
+// redirect, despite the fact that no redirect has been received yet.
TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest,
MalformedFollowRedirectRequest) {
handler_->FollowRedirect();
EXPECT_TRUE(handler_->has_received_bad_message());
- EXPECT_EQ(0, resource_controller_.num_resume_calls());
}
// Typically ResourceHandler methods are called in this order.
@@ -1158,13 +1102,12 @@ TEST_P(
MojoAsyncResourceHandlerWithAllocationSizeTest,
OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnResponseCompleted) {
rdh_delegate_.set_num_on_response_started_calls_expectation(1);
- bool defer = false;
- ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnWillStart(request_->url()));
scoped_refptr<ResourceResponse> response = new ResourceResponse();
- ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseStarted(response.get()));
ASSERT_FALSE(url_loader_client_.has_received_response());
url_loader_client_.RunUntilResponseReceived();
@@ -1180,11 +1123,11 @@ TEST_P(
url_loader_client_.RunUntilResponseBodyArrived();
ASSERT_TRUE(url_loader_client_.response_body().is_valid());
- ASSERT_TRUE(handler_->OnReadCompleted(1, &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnReadCompleted(1));
net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK);
- handler_->OnResponseCompleted(status, &defer);
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompleted(status));
ASSERT_FALSE(url_loader_client_.has_received_completion());
url_loader_client_.RunUntilComplete();
@@ -1217,10 +1160,9 @@ TEST_P(
MojoAsyncResourceHandlerWithAllocationSizeTest,
OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnResponseCompleted) {
rdh_delegate_.set_num_on_response_started_calls_expectation(1);
- bool defer = false;
- ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnWillStart(request_->url()));
int io_buffer_size = 0;
scoped_refptr<net::IOBuffer> io_buffer;
@@ -1234,17 +1176,17 @@ TEST_P(
ASSERT_TRUE(url_loader_client_.response_body().is_valid());
scoped_refptr<ResourceResponse> response = new ResourceResponse();
- ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseStarted(response.get()));
ASSERT_FALSE(url_loader_client_.has_received_response());
url_loader_client_.RunUntilResponseReceived();
- ASSERT_TRUE(handler_->OnReadCompleted(1, &defer));
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnReadCompleted(1));
net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK);
- handler_->OnResponseCompleted(status, &defer);
- ASSERT_FALSE(defer);
+ ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME,
+ handler_wrapper_->OnResponseCompleted(status));
ASSERT_FALSE(url_loader_client_.has_received_completion());
url_loader_client_.RunUntilComplete();

Powered by Google App Engine
This is Rietveld 408576698