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(); |