| 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 "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "content/child/resource_dispatcher.h" | 10 #include "content/child/resource_dispatcher.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 MojoResult result = | 110 MojoResult result = |
| 111 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | 111 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, |
| 112 MOJO_WRITE_DATA_FLAG_NONE); | 112 MOJO_WRITE_DATA_FLAG_NONE); |
| 113 ASSERT_EQ(MOJO_RESULT_OK, result); | 113 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 114 EXPECT_EQ(5u, size); | 114 EXPECT_EQ(5u, size); |
| 115 | 115 |
| 116 base::RunLoop().RunUntilIdle(); | 116 base::RunLoop().RunUntilIdle(); |
| 117 EXPECT_EQ("hello", request_peer_context_.data); | 117 EXPECT_EQ("hello", request_peer_context_.data); |
| 118 } | 118 } |
| 119 | 119 |
| 120 // OnStartLoadingResponseBody can be called before OnReceiveResponse. Because | |
| 121 // of the lack of the ordering guarantee between the message channel and the | |
| 122 // data pipe, bytes can arrive before OnReceiveResponse. URLLoaderClientImpl | |
| 123 // should restore the order. | |
| 124 TEST_F(URLLoaderClientImplTest, ResponseBodyShouldComeAfterResponse) { | |
| 125 ResourceResponseHead response_head; | |
| 126 | |
| 127 mojo::DataPipe data_pipe(DataPipeOptions()); | |
| 128 url_loader_client_->OnStartLoadingResponseBody( | |
| 129 std::move(data_pipe.consumer_handle)); | |
| 130 uint32_t size = 5; | |
| 131 MojoResult result = | |
| 132 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | |
| 133 MOJO_WRITE_DATA_FLAG_NONE); | |
| 134 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 135 EXPECT_EQ(5u, size); | |
| 136 | |
| 137 base::RunLoop().RunUntilIdle(); | |
| 138 EXPECT_EQ("", request_peer_context_.data); | |
| 139 | |
| 140 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 141 | |
| 142 EXPECT_FALSE(request_peer_context_.received_response); | |
| 143 EXPECT_EQ("", request_peer_context_.data); | |
| 144 base::RunLoop().RunUntilIdle(); | |
| 145 EXPECT_TRUE(request_peer_context_.received_response); | |
| 146 EXPECT_EQ("hello", request_peer_context_.data); | |
| 147 } | |
| 148 | |
| 149 TEST_F(URLLoaderClientImplTest, OnReceiveRedirect) { | 120 TEST_F(URLLoaderClientImplTest, OnReceiveRedirect) { |
| 150 ResourceResponseHead response_head; | 121 ResourceResponseHead response_head; |
| 151 net::RedirectInfo redirect_info; | 122 net::RedirectInfo redirect_info; |
| 152 | 123 |
| 153 url_loader_client_->OnReceiveRedirect(redirect_info, response_head); | 124 url_loader_client_->OnReceiveRedirect(redirect_info, response_head); |
| 154 | 125 |
| 155 EXPECT_EQ(0, request_peer_context_.seen_redirects); | 126 EXPECT_EQ(0, request_peer_context_.seen_redirects); |
| 156 base::RunLoop().RunUntilIdle(); | 127 base::RunLoop().RunUntilIdle(); |
| 157 EXPECT_EQ(1, request_peer_context_.seen_redirects); | 128 EXPECT_EQ(1, request_peer_context_.seen_redirects); |
| 158 } | 129 } |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 base::RunLoop().RunUntilIdle(); | 231 base::RunLoop().RunUntilIdle(); |
| 261 EXPECT_EQ("hello", request_peer_context_.data); | 232 EXPECT_EQ("hello", request_peer_context_.data); |
| 262 EXPECT_FALSE(request_peer_context_.complete); | 233 EXPECT_FALSE(request_peer_context_.complete); |
| 263 | 234 |
| 264 data_pipe.producer_handle.reset(); | 235 data_pipe.producer_handle.reset(); |
| 265 base::RunLoop().RunUntilIdle(); | 236 base::RunLoop().RunUntilIdle(); |
| 266 EXPECT_EQ("hello", request_peer_context_.data); | 237 EXPECT_EQ("hello", request_peer_context_.data); |
| 267 EXPECT_TRUE(request_peer_context_.complete); | 238 EXPECT_TRUE(request_peer_context_.complete); |
| 268 } | 239 } |
| 269 | 240 |
| 270 TEST_F(URLLoaderClientImplTest, CancelOnReceiveResponseWithoutResponseBody) { | 241 TEST_F(URLLoaderClientImplTest, CancelOnReceiveResponse) { |
| 271 request_peer_context_.cancel_on_receive_response = true; | 242 request_peer_context_.cancel_on_receive_response = true; |
| 272 | 243 |
| 273 ResourceResponseHead response_head; | 244 ResourceResponseHead response_head; |
| 274 ResourceRequestCompletionStatus completion_status; | 245 ResourceRequestCompletionStatus completion_status; |
| 275 | 246 |
| 276 url_loader_client_->OnReceiveResponse(response_head, nullptr); | 247 url_loader_client_->OnReceiveResponse(response_head, nullptr); |
| 277 mojo::DataPipe data_pipe(DataPipeOptions()); | 248 mojo::DataPipe data_pipe(DataPipeOptions()); |
| 278 url_loader_client_->OnStartLoadingResponseBody( | 249 url_loader_client_->OnStartLoadingResponseBody( |
| 279 std::move(data_pipe.consumer_handle)); | 250 std::move(data_pipe.consumer_handle)); |
| 280 url_loader_client_->OnComplete(completion_status); | 251 url_loader_client_->OnComplete(completion_status); |
| 281 | 252 |
| 282 EXPECT_FALSE(request_peer_context_.received_response); | 253 EXPECT_FALSE(request_peer_context_.received_response); |
| 283 EXPECT_FALSE(request_peer_context_.complete); | 254 EXPECT_FALSE(request_peer_context_.complete); |
| 284 EXPECT_FALSE(request_peer_context_.cancelled); | 255 EXPECT_FALSE(request_peer_context_.cancelled); |
| 285 | 256 |
| 286 base::RunLoop().RunUntilIdle(); | 257 base::RunLoop().RunUntilIdle(); |
| 287 EXPECT_TRUE(request_peer_context_.received_response); | 258 EXPECT_TRUE(request_peer_context_.received_response); |
| 288 EXPECT_FALSE(request_peer_context_.complete); | 259 EXPECT_FALSE(request_peer_context_.complete); |
| 289 EXPECT_TRUE(request_peer_context_.cancelled); | 260 EXPECT_TRUE(request_peer_context_.cancelled); |
| 290 } | 261 } |
| 291 | 262 |
| 292 TEST_F(URLLoaderClientImplTest, CancelOnReceiveResponseWithResponseBody) { | |
| 293 request_peer_context_.cancel_on_receive_response = true; | |
| 294 | |
| 295 ResourceResponseHead response_head; | |
| 296 ResourceRequestCompletionStatus completion_status; | |
| 297 | |
| 298 mojo::DataPipe data_pipe(DataPipeOptions()); | |
| 299 uint32_t size = 5; | |
| 300 MojoResult result = | |
| 301 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | |
| 302 MOJO_WRITE_DATA_FLAG_NONE); | |
| 303 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 304 EXPECT_EQ(5u, size); | |
| 305 | |
| 306 url_loader_client_->OnStartLoadingResponseBody( | |
| 307 std::move(data_pipe.consumer_handle)); | |
| 308 base::RunLoop().RunUntilIdle(); | |
| 309 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 310 url_loader_client_->OnComplete(completion_status); | |
| 311 | |
| 312 EXPECT_FALSE(request_peer_context_.received_response); | |
| 313 EXPECT_FALSE(request_peer_context_.complete); | |
| 314 EXPECT_FALSE(request_peer_context_.cancelled); | |
| 315 | |
| 316 base::RunLoop().RunUntilIdle(); | |
| 317 EXPECT_TRUE(request_peer_context_.received_response); | |
| 318 EXPECT_FALSE(request_peer_context_.complete); | |
| 319 EXPECT_TRUE(request_peer_context_.cancelled); | |
| 320 } | |
| 321 | |
| 322 TEST_F(URLLoaderClientImplTest, CancelOnReceiveData) { | 263 TEST_F(URLLoaderClientImplTest, CancelOnReceiveData) { |
| 323 request_peer_context_.cancel_on_receive_data = true; | 264 request_peer_context_.cancel_on_receive_data = true; |
| 324 | 265 |
| 325 ResourceResponseHead response_head; | 266 ResourceResponseHead response_head; |
| 326 ResourceRequestCompletionStatus completion_status; | 267 ResourceRequestCompletionStatus completion_status; |
| 327 | 268 |
| 328 mojo::DataPipe data_pipe(DataPipeOptions()); | 269 mojo::DataPipe data_pipe(DataPipeOptions()); |
| 329 uint32_t size = 5; | 270 uint32_t size = 5; |
| 330 MojoResult result = | 271 MojoResult result = |
| 331 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | 272 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, |
| 332 MOJO_WRITE_DATA_FLAG_NONE); | 273 MOJO_WRITE_DATA_FLAG_NONE); |
| 333 ASSERT_EQ(MOJO_RESULT_OK, result); | 274 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 334 EXPECT_EQ(5u, size); | 275 EXPECT_EQ(5u, size); |
| 335 | 276 |
| 277 url_loader_client_->OnReceiveResponse(response_head, nullptr); |
| 336 url_loader_client_->OnStartLoadingResponseBody( | 278 url_loader_client_->OnStartLoadingResponseBody( |
| 337 std::move(data_pipe.consumer_handle)); | 279 std::move(data_pipe.consumer_handle)); |
| 338 base::RunLoop().RunUntilIdle(); | |
| 339 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 340 url_loader_client_->OnComplete(completion_status); | 280 url_loader_client_->OnComplete(completion_status); |
| 341 | 281 |
| 342 EXPECT_FALSE(request_peer_context_.received_response); | 282 EXPECT_FALSE(request_peer_context_.received_response); |
| 343 EXPECT_EQ("", request_peer_context_.data); | 283 EXPECT_EQ("", request_peer_context_.data); |
| 344 EXPECT_FALSE(request_peer_context_.complete); | 284 EXPECT_FALSE(request_peer_context_.complete); |
| 345 EXPECT_FALSE(request_peer_context_.cancelled); | 285 EXPECT_FALSE(request_peer_context_.cancelled); |
| 346 | 286 |
| 347 base::RunLoop().RunUntilIdle(); | 287 base::RunLoop().RunUntilIdle(); |
| 348 EXPECT_TRUE(request_peer_context_.received_response); | 288 EXPECT_TRUE(request_peer_context_.received_response); |
| 349 EXPECT_EQ("hello", request_peer_context_.data); | 289 EXPECT_EQ("hello", request_peer_context_.data); |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 | 502 |
| 563 dispatcher_->SetDefersLoading(request_id_, false); | 503 dispatcher_->SetDefersLoading(request_id_, false); |
| 564 base::RunLoop().RunUntilIdle(); | 504 base::RunLoop().RunUntilIdle(); |
| 565 EXPECT_TRUE(request_peer_context_.received_response); | 505 EXPECT_TRUE(request_peer_context_.received_response); |
| 566 EXPECT_TRUE(request_peer_context_.complete); | 506 EXPECT_TRUE(request_peer_context_.complete); |
| 567 EXPECT_EQ(4, request_peer_context_.total_encoded_data_length); | 507 EXPECT_EQ(4, request_peer_context_.total_encoded_data_length); |
| 568 EXPECT_FALSE(request_peer_context_.cancelled); | 508 EXPECT_FALSE(request_peer_context_.cancelled); |
| 569 } | 509 } |
| 570 | 510 |
| 571 } // namespace content | 511 } // namespace content |
| OLD | NEW |