| Index: content/child/url_loader_client_impl_unittest.cc
|
| diff --git a/content/child/url_loader_client_impl_unittest.cc b/content/child/url_loader_client_impl_unittest.cc
|
| index cec32a7207c92cc4dd6cd82eef824eff967891ea..a26febf921def6b3e74bfc50695d1f19b0f27734 100644
|
| --- a/content/child/url_loader_client_impl_unittest.cc
|
| +++ b/content/child/url_loader_client_impl_unittest.cc
|
| @@ -351,4 +351,221 @@ TEST_F(URLLoaderClientImplTest, CancelOnReceiveData) {
|
| EXPECT_TRUE(request_peer_context_.cancelled);
|
| }
|
|
|
| +TEST_F(URLLoaderClientImplTest, Defer) {
|
| + ResourceResponseHead response_head;
|
| + ResourceRequestCompletionStatus completion_status;
|
| +
|
| + url_loader_client_->OnReceiveResponse(response_head, nullptr);
|
| + url_loader_client_->OnComplete(completion_status);
|
| +
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, true);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, false);
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(request_peer_context_.received_response);
|
| + EXPECT_TRUE(request_peer_context_.complete);
|
| +}
|
| +
|
| +TEST_F(URLLoaderClientImplTest, DeferWithResponseBody) {
|
| + ResourceResponseHead response_head;
|
| + ResourceRequestCompletionStatus completion_status;
|
| +
|
| + url_loader_client_->OnReceiveResponse(response_head, nullptr);
|
| + mojo::DataPipe data_pipe(DataPipeOptions());
|
| + uint32_t size = 5;
|
| + MojoResult result =
|
| + mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size,
|
| + MOJO_WRITE_DATA_FLAG_NONE);
|
| + ASSERT_EQ(MOJO_RESULT_OK, result);
|
| + EXPECT_EQ(5u, size);
|
| + data_pipe.producer_handle.reset();
|
| +
|
| + url_loader_client_->OnStartLoadingResponseBody(
|
| + std::move(data_pipe.consumer_handle));
|
| + url_loader_client_->OnComplete(completion_status);
|
| +
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, true);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, false);
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(request_peer_context_.received_response);
|
| + EXPECT_TRUE(request_peer_context_.complete);
|
| + EXPECT_EQ("hello", request_peer_context_.data);
|
| +}
|
| +
|
| +// As "transfer size update" message is handled specially in the implementation,
|
| +// we have a separate test.
|
| +TEST_F(URLLoaderClientImplTest, DeferWithTransferSizeUpdated) {
|
| + ResourceResponseHead response_head;
|
| + ResourceRequestCompletionStatus completion_status;
|
| +
|
| + url_loader_client_->OnReceiveResponse(response_head, nullptr);
|
| + mojo::DataPipe data_pipe(DataPipeOptions());
|
| + uint32_t size = 5;
|
| + MojoResult result =
|
| + mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size,
|
| + MOJO_WRITE_DATA_FLAG_NONE);
|
| + ASSERT_EQ(MOJO_RESULT_OK, result);
|
| + EXPECT_EQ(5u, size);
|
| + data_pipe.producer_handle.reset();
|
| +
|
| + url_loader_client_->OnStartLoadingResponseBody(
|
| + std::move(data_pipe.consumer_handle));
|
| + url_loader_client_->OnTransferSizeUpdated(4);
|
| + url_loader_client_->OnComplete(completion_status);
|
| +
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, true);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, false);
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(request_peer_context_.received_response);
|
| + EXPECT_TRUE(request_peer_context_.complete);
|
| + EXPECT_EQ("hello", request_peer_context_.data);
|
| + EXPECT_EQ(4, request_peer_context_.total_encoded_data_length);
|
| +}
|
| +
|
| +TEST_F(URLLoaderClientImplTest, SetDeferredDuringFlushingDeferredMessage) {
|
| + request_peer_context_.defer_on_redirect = true;
|
| +
|
| + net::RedirectInfo redirect_info;
|
| + ResourceResponseHead response_head;
|
| + ResourceRequestCompletionStatus completion_status;
|
| +
|
| + url_loader_client_->OnReceiveRedirect(redirect_info, response_head);
|
| + url_loader_client_->OnReceiveResponse(response_head, nullptr);
|
| + mojo::DataPipe data_pipe(DataPipeOptions());
|
| + uint32_t size = 5;
|
| + MojoResult result =
|
| + mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size,
|
| + MOJO_WRITE_DATA_FLAG_NONE);
|
| + ASSERT_EQ(MOJO_RESULT_OK, result);
|
| + EXPECT_EQ(5u, size);
|
| + data_pipe.producer_handle.reset();
|
| +
|
| + url_loader_client_->OnStartLoadingResponseBody(
|
| + std::move(data_pipe.consumer_handle));
|
| + url_loader_client_->OnTransferSizeUpdated(4);
|
| + url_loader_client_->OnComplete(completion_status);
|
| +
|
| + EXPECT_EQ(0, request_peer_context_.seen_redirects);
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, true);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(0, request_peer_context_.seen_redirects);
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, false);
|
| + EXPECT_EQ(0, request_peer_context_.seen_redirects);
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(1, request_peer_context_.seen_redirects);
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ("", request_peer_context_.data);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| + EXPECT_FALSE(request_peer_context_.cancelled);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, false);
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(1, request_peer_context_.seen_redirects);
|
| + EXPECT_TRUE(request_peer_context_.received_response);
|
| + EXPECT_TRUE(request_peer_context_.complete);
|
| + EXPECT_EQ("hello", request_peer_context_.data);
|
| + EXPECT_EQ(4, request_peer_context_.total_encoded_data_length);
|
| + EXPECT_FALSE(request_peer_context_.cancelled);
|
| +}
|
| +
|
| +TEST_F(URLLoaderClientImplTest,
|
| + SetDeferredDuringFlushingDeferredMessageOnTransferSizeUpdated) {
|
| + request_peer_context_.defer_on_transfer_size_updated = true;
|
| +
|
| + ResourceResponseHead response_head;
|
| + ResourceRequestCompletionStatus completion_status;
|
| +
|
| + url_loader_client_->OnReceiveResponse(response_head, nullptr);
|
| +
|
| + url_loader_client_->OnTransferSizeUpdated(4);
|
| + url_loader_client_->OnComplete(completion_status);
|
| +
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, true);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, false);
|
| + EXPECT_FALSE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length);
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(request_peer_context_.received_response);
|
| + EXPECT_FALSE(request_peer_context_.complete);
|
| + EXPECT_EQ(4, request_peer_context_.total_encoded_data_length);
|
| + EXPECT_FALSE(request_peer_context_.cancelled);
|
| +
|
| + dispatcher_->SetDefersLoading(request_id_, false);
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(request_peer_context_.received_response);
|
| + EXPECT_TRUE(request_peer_context_.complete);
|
| + EXPECT_EQ(4, request_peer_context_.total_encoded_data_length);
|
| + EXPECT_FALSE(request_peer_context_.cancelled);
|
| +}
|
| +
|
| } // namespace content
|
|
|