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

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 "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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698