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 |