Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: content/child/url_loader_client_impl_unittest.cc

Issue 2633123002: [Mojo-Loading] OnStartLoadingResponseBody should be called after OnReceiveResponse (Closed)
Patch Set: fix Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698