Chromium Code Reviews| 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..daf6cf44898b94e561eae4e1661bd531dec26880 100644 |
| --- a/content/child/url_loader_client_impl_unittest.cc |
| +++ b/content/child/url_loader_client_impl_unittest.cc |
| @@ -351,4 +351,227 @@ 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, CancelRequestDuringFlusingDeferredMessage) { |
|
kinuko
2016/12/23 13:11:23
nit: Flusing -> Flushing
yhirano
2016/12/26 05:08:35
Done.
|
| + request_peer_context_.cancel_on_receive_response = true; |
| + |
| + 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_FALSE(request_peer_context_.complete); |
| + EXPECT_EQ("", request_peer_context_.data); |
| + EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); |
| + EXPECT_TRUE(request_peer_context_.cancelled); |
| +} |
| + |
| +TEST_F(URLLoaderClientImplTest, SetDeferredDuringFlusingDeferredMessage) { |
|
kinuko
2016/12/23 13:11:24
ditto
yhirano
2016/12/26 05:08:35
Done.
|
| + 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); |
| +} |
| + |
| } // namespace content |