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 |