| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/child/url_loader_client_impl.h" | 5 #include "content/child/url_loader_client_impl.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 MojoResult result = | 111 MojoResult result = |
| 112 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | 112 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, |
| 113 MOJO_WRITE_DATA_FLAG_NONE); | 113 MOJO_WRITE_DATA_FLAG_NONE); |
| 114 ASSERT_EQ(MOJO_RESULT_OK, result); | 114 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 115 EXPECT_EQ(5u, size); | 115 EXPECT_EQ(5u, size); |
| 116 | 116 |
| 117 base::RunLoop().RunUntilIdle(); | 117 base::RunLoop().RunUntilIdle(); |
| 118 EXPECT_EQ("hello", request_peer_context_.data); | 118 EXPECT_EQ("hello", request_peer_context_.data); |
| 119 } | 119 } |
| 120 | 120 |
| 121 // OnStartLoadingResponseBody can be called before OnReceiveResponse. Because | |
| 122 // of the lack of the ordering guarantee between the message channel and the | |
| 123 // data pipe, bytes can arrive before OnReceiveResponse. URLLoaderClientImpl | |
| 124 // should restore the order. | |
| 125 TEST_F(URLLoaderClientImplTest, ResponseBodyShouldComeAfterResponse) { | |
| 126 ResourceResponseHead response_head; | |
| 127 | |
| 128 mojo::DataPipe data_pipe(DataPipeOptions()); | |
| 129 url_loader_client_->OnStartLoadingResponseBody( | |
| 130 std::move(data_pipe.consumer_handle)); | |
| 131 uint32_t size = 5; | |
| 132 MojoResult result = | |
| 133 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | |
| 134 MOJO_WRITE_DATA_FLAG_NONE); | |
| 135 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 136 EXPECT_EQ(5u, size); | |
| 137 | |
| 138 base::RunLoop().RunUntilIdle(); | |
| 139 EXPECT_EQ("", request_peer_context_.data); | |
| 140 | |
| 141 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 142 | |
| 143 EXPECT_FALSE(request_peer_context_.received_response); | |
| 144 EXPECT_EQ("", request_peer_context_.data); | |
| 145 base::RunLoop().RunUntilIdle(); | |
| 146 EXPECT_TRUE(request_peer_context_.received_response); | |
| 147 EXPECT_EQ("hello", request_peer_context_.data); | |
| 148 } | |
| 149 | |
| 150 TEST_F(URLLoaderClientImplTest, OnReceiveRedirect) { | 121 TEST_F(URLLoaderClientImplTest, OnReceiveRedirect) { |
| 151 ResourceResponseHead response_head; | 122 ResourceResponseHead response_head; |
| 152 net::RedirectInfo redirect_info; | 123 net::RedirectInfo redirect_info; |
| 153 | 124 |
| 154 url_loader_client_->OnReceiveRedirect(redirect_info, response_head); | 125 url_loader_client_->OnReceiveRedirect(redirect_info, response_head); |
| 155 | 126 |
| 156 EXPECT_EQ(0, request_peer_context_.seen_redirects); | 127 EXPECT_EQ(0, request_peer_context_.seen_redirects); |
| 157 base::RunLoop().RunUntilIdle(); | 128 base::RunLoop().RunUntilIdle(); |
| 158 EXPECT_EQ(1, request_peer_context_.seen_redirects); | 129 EXPECT_EQ(1, request_peer_context_.seen_redirects); |
| 159 } | 130 } |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 base::RunLoop().RunUntilIdle(); | 248 base::RunLoop().RunUntilIdle(); |
| 278 EXPECT_EQ("hello", request_peer_context_.data); | 249 EXPECT_EQ("hello", request_peer_context_.data); |
| 279 EXPECT_FALSE(request_peer_context_.complete); | 250 EXPECT_FALSE(request_peer_context_.complete); |
| 280 | 251 |
| 281 data_pipe.producer_handle.reset(); | 252 data_pipe.producer_handle.reset(); |
| 282 base::RunLoop().RunUntilIdle(); | 253 base::RunLoop().RunUntilIdle(); |
| 283 EXPECT_EQ("hello", request_peer_context_.data); | 254 EXPECT_EQ("hello", request_peer_context_.data); |
| 284 EXPECT_TRUE(request_peer_context_.complete); | 255 EXPECT_TRUE(request_peer_context_.complete); |
| 285 } | 256 } |
| 286 | 257 |
| 287 TEST_F(URLLoaderClientImplTest, CancelOnReceiveResponseWithoutResponseBody) { | 258 TEST_F(URLLoaderClientImplTest, CancelOnReceiveResponse) { |
| 288 request_peer_context_.cancel_on_receive_response = true; | 259 request_peer_context_.cancel_on_receive_response = true; |
| 289 | 260 |
| 290 ResourceResponseHead response_head; | 261 ResourceResponseHead response_head; |
| 291 ResourceRequestCompletionStatus completion_status; | 262 ResourceRequestCompletionStatus completion_status; |
| 292 | 263 |
| 293 url_loader_client_->OnReceiveResponse(response_head, nullptr); | 264 url_loader_client_->OnReceiveResponse(response_head, nullptr); |
| 294 mojo::DataPipe data_pipe(DataPipeOptions()); | 265 mojo::DataPipe data_pipe(DataPipeOptions()); |
| 295 url_loader_client_->OnStartLoadingResponseBody( | 266 url_loader_client_->OnStartLoadingResponseBody( |
| 296 std::move(data_pipe.consumer_handle)); | 267 std::move(data_pipe.consumer_handle)); |
| 297 url_loader_client_->OnComplete(completion_status); | 268 url_loader_client_->OnComplete(completion_status); |
| 298 | 269 |
| 299 EXPECT_FALSE(request_peer_context_.received_response); | 270 EXPECT_FALSE(request_peer_context_.received_response); |
| 300 EXPECT_FALSE(request_peer_context_.complete); | 271 EXPECT_FALSE(request_peer_context_.complete); |
| 301 EXPECT_FALSE(request_peer_context_.cancelled); | 272 EXPECT_FALSE(request_peer_context_.cancelled); |
| 302 | 273 |
| 303 base::RunLoop().RunUntilIdle(); | 274 base::RunLoop().RunUntilIdle(); |
| 304 EXPECT_TRUE(request_peer_context_.received_response); | 275 EXPECT_TRUE(request_peer_context_.received_response); |
| 305 EXPECT_FALSE(request_peer_context_.complete); | 276 EXPECT_FALSE(request_peer_context_.complete); |
| 306 EXPECT_TRUE(request_peer_context_.cancelled); | 277 EXPECT_TRUE(request_peer_context_.cancelled); |
| 307 } | 278 } |
| 308 | 279 |
| 309 TEST_F(URLLoaderClientImplTest, CancelOnReceiveResponseWithResponseBody) { | |
| 310 request_peer_context_.cancel_on_receive_response = true; | |
| 311 | |
| 312 ResourceResponseHead response_head; | |
| 313 ResourceRequestCompletionStatus completion_status; | |
| 314 | |
| 315 mojo::DataPipe data_pipe(DataPipeOptions()); | |
| 316 uint32_t size = 5; | |
| 317 MojoResult result = | |
| 318 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | |
| 319 MOJO_WRITE_DATA_FLAG_NONE); | |
| 320 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 321 EXPECT_EQ(5u, size); | |
| 322 | |
| 323 url_loader_client_->OnStartLoadingResponseBody( | |
| 324 std::move(data_pipe.consumer_handle)); | |
| 325 base::RunLoop().RunUntilIdle(); | |
| 326 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 327 url_loader_client_->OnComplete(completion_status); | |
| 328 | |
| 329 EXPECT_FALSE(request_peer_context_.received_response); | |
| 330 EXPECT_FALSE(request_peer_context_.complete); | |
| 331 EXPECT_FALSE(request_peer_context_.cancelled); | |
| 332 | |
| 333 base::RunLoop().RunUntilIdle(); | |
| 334 EXPECT_TRUE(request_peer_context_.received_response); | |
| 335 EXPECT_FALSE(request_peer_context_.complete); | |
| 336 EXPECT_TRUE(request_peer_context_.cancelled); | |
| 337 } | |
| 338 | |
| 339 TEST_F(URLLoaderClientImplTest, CancelOnReceiveData) { | 280 TEST_F(URLLoaderClientImplTest, CancelOnReceiveData) { |
| 340 request_peer_context_.cancel_on_receive_data = true; | 281 request_peer_context_.cancel_on_receive_data = true; |
| 341 | 282 |
| 342 ResourceResponseHead response_head; | 283 ResourceResponseHead response_head; |
| 343 ResourceRequestCompletionStatus completion_status; | 284 ResourceRequestCompletionStatus completion_status; |
| 344 | 285 |
| 345 mojo::DataPipe data_pipe(DataPipeOptions()); | 286 mojo::DataPipe data_pipe(DataPipeOptions()); |
| 346 uint32_t size = 5; | 287 uint32_t size = 5; |
| 347 MojoResult result = | 288 MojoResult result = |
| 348 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | 289 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, |
| 349 MOJO_WRITE_DATA_FLAG_NONE); | 290 MOJO_WRITE_DATA_FLAG_NONE); |
| 350 ASSERT_EQ(MOJO_RESULT_OK, result); | 291 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 351 EXPECT_EQ(5u, size); | 292 EXPECT_EQ(5u, size); |
| 352 | 293 |
| 294 url_loader_client_->OnReceiveResponse(response_head, nullptr); |
| 353 url_loader_client_->OnStartLoadingResponseBody( | 295 url_loader_client_->OnStartLoadingResponseBody( |
| 354 std::move(data_pipe.consumer_handle)); | 296 std::move(data_pipe.consumer_handle)); |
| 355 base::RunLoop().RunUntilIdle(); | |
| 356 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 357 url_loader_client_->OnComplete(completion_status); | 297 url_loader_client_->OnComplete(completion_status); |
| 358 | 298 |
| 359 EXPECT_FALSE(request_peer_context_.received_response); | 299 EXPECT_FALSE(request_peer_context_.received_response); |
| 360 EXPECT_EQ("", request_peer_context_.data); | 300 EXPECT_EQ("", request_peer_context_.data); |
| 361 EXPECT_FALSE(request_peer_context_.complete); | 301 EXPECT_FALSE(request_peer_context_.complete); |
| 362 EXPECT_FALSE(request_peer_context_.cancelled); | 302 EXPECT_FALSE(request_peer_context_.cancelled); |
| 363 | 303 |
| 364 base::RunLoop().RunUntilIdle(); | 304 base::RunLoop().RunUntilIdle(); |
| 365 EXPECT_TRUE(request_peer_context_.received_response); | 305 EXPECT_TRUE(request_peer_context_.received_response); |
| 366 EXPECT_EQ("hello", request_peer_context_.data); | 306 EXPECT_EQ("hello", request_peer_context_.data); |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 | 519 |
| 580 dispatcher_->SetDefersLoading(request_id_, false); | 520 dispatcher_->SetDefersLoading(request_id_, false); |
| 581 base::RunLoop().RunUntilIdle(); | 521 base::RunLoop().RunUntilIdle(); |
| 582 EXPECT_TRUE(request_peer_context_.received_response); | 522 EXPECT_TRUE(request_peer_context_.received_response); |
| 583 EXPECT_TRUE(request_peer_context_.complete); | 523 EXPECT_TRUE(request_peer_context_.complete); |
| 584 EXPECT_EQ(4, request_peer_context_.total_encoded_data_length); | 524 EXPECT_EQ(4, request_peer_context_.total_encoded_data_length); |
| 585 EXPECT_FALSE(request_peer_context_.cancelled); | 525 EXPECT_FALSE(request_peer_context_.cancelled); |
| 586 } | 526 } |
| 587 | 527 |
| 588 } // namespace content | 528 } // namespace content |
| OLD | NEW |