| 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 59535923a7b4be03bff534883e0f601dc2ce6a26..4ad1ba638feee4d4cf1e26c56b1bddcb22ef3832 100644
|
| --- a/content/browser/loader/mojo_async_resource_handler_unittest.cc
|
| +++ b/content/browser/loader/mojo_async_resource_handler_unittest.cc
|
| @@ -246,6 +246,7 @@ class MojoAsyncResourceHandlerWithCustomDataPipeOperations
|
| is_end_write_expectation_set_ = true;
|
| end_write_expectation_ = end_write_expectation;
|
| }
|
| + bool has_received_bad_message() const { return has_received_bad_message_; }
|
|
|
| private:
|
| MojoResult BeginWrite(void** data, uint32_t* available) override {
|
| @@ -258,9 +259,13 @@ class MojoAsyncResourceHandlerWithCustomDataPipeOperations
|
| return end_write_expectation_;
|
| return MojoAsyncResourceHandler::EndWrite(written);
|
| }
|
| + void ReportBadMessage(const std::string& error) override {
|
| + has_received_bad_message_ = true;
|
| + }
|
|
|
| bool is_begin_write_expectation_set_ = false;
|
| bool is_end_write_expectation_set_ = false;
|
| + bool has_received_bad_message_ = false;
|
| MojoResult begin_write_expectation_ = MOJO_RESULT_UNKNOWN;
|
| MojoResult end_write_expectation_ = MOJO_RESULT_UNKNOWN;
|
|
|
| @@ -839,7 +844,7 @@ TEST_F(MojoAsyncResourceHandlerTest,
|
| url_loader_client_.RunUntilResponseBodyArrived();
|
| ASSERT_TRUE(url_loader_client_.response_body().is_valid());
|
| handler_->ResetBeginWriteExpectation();
|
| - handler_->ResumeForTesting();
|
| + handler_->OnWritableForTesting();
|
|
|
| std::string actual;
|
| while (actual.size() < written) {
|
| @@ -1078,6 +1083,76 @@ TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) {
|
| 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);
|
| + 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_FALSE(url_loader_client_.has_received_response());
|
| + ASSERT_FALSE(url_loader_client_.has_received_redirect());
|
| + url_loader_client_.RunUntilRedirectReceived();
|
| +
|
| + ASSERT_FALSE(url_loader_client_.has_received_response());
|
| + 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());
|
| + handler_->FollowRedirect();
|
| + EXPECT_EQ(1, resource_controller_.num_resume_calls());
|
| +
|
| + 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_FALSE(url_loader_client_.has_received_response());
|
| + ASSERT_FALSE(url_loader_client_.has_received_redirect());
|
| + url_loader_client_.RunUntilRedirectReceived();
|
| +
|
| + ASSERT_FALSE(url_loader_client_.has_received_response());
|
| + 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());
|
| + handler_->FollowRedirect();
|
| + EXPECT_EQ(2, resource_controller_.num_resume_calls());
|
| +
|
| + // Give the final response.
|
| + defer = false;
|
| + ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer));
|
| + ASSERT_FALSE(defer);
|
| +
|
| + net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK);
|
| + handler_->OnResponseCompleted(status, &defer);
|
| + ASSERT_FALSE(defer);
|
| +
|
| + ASSERT_FALSE(url_loader_client_.has_received_completion());
|
| + url_loader_client_.RunUntilComplete();
|
| +
|
| + ASSERT_TRUE(url_loader_client_.has_received_response());
|
| + ASSERT_TRUE(url_loader_client_.has_received_completion());
|
| + EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code);
|
| +}
|
| +
|
| +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.
|
| TEST_P(
|
| MojoAsyncResourceHandlerWithAllocationSizeTest,
|
|
|