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/browser/loader/mojo_async_resource_handler.h" | 5 #include "content/browser/loader/mojo_async_resource_handler.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/callback.h" | 12 #include "base/callback.h" |
13 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
14 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
15 #include "base/memory/scoped_vector.h" | 15 #include "base/memory/scoped_vector.h" |
16 #include "base/memory/weak_ptr.h" | 16 #include "base/memory/weak_ptr.h" |
17 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
18 #include "content/browser/loader/resource_controller.h" | 18 #include "content/browser/loader/resource_controller.h" |
19 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 19 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
20 #include "content/browser/loader/resource_request_info_impl.h" | 20 #include "content/browser/loader/resource_request_info_impl.h" |
| 21 #include "content/browser/loader/test_resource_handler_wrapper.h" |
21 #include "content/browser/loader/test_url_loader_client.h" | 22 #include "content/browser/loader/test_url_loader_client.h" |
22 #include "content/common/resource_request_completion_status.h" | 23 #include "content/common/resource_request_completion_status.h" |
23 #include "content/common/url_loader.mojom.h" | 24 #include "content/common/url_loader.mojom.h" |
24 #include "content/public/browser/appcache_service.h" | 25 #include "content/public/browser/appcache_service.h" |
25 #include "content/public/browser/navigation_data.h" | 26 #include "content/public/browser/navigation_data.h" |
26 #include "content/public/browser/resource_context.h" | 27 #include "content/public/browser/resource_context.h" |
27 #include "content/public/browser/resource_dispatcher_host_delegate.h" | 28 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
28 #include "content/public/browser/resource_throttle.h" | 29 #include "content/public/browser/resource_throttle.h" |
29 #include "content/public/browser/stream_info.h" | 30 #include "content/public/browser/stream_info.h" |
30 #include "content/public/common/resource_response.h" | 31 #include "content/public/common/resource_response.h" |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 num_on_response_started_calls_expectation_ = expectation; | 167 num_on_response_started_calls_expectation_ = expectation; |
167 } | 168 } |
168 | 169 |
169 private: | 170 private: |
170 int num_on_response_started_calls_ = 0; | 171 int num_on_response_started_calls_ = 0; |
171 int num_on_response_started_calls_expectation_ = 0; | 172 int num_on_response_started_calls_expectation_ = 0; |
172 | 173 |
173 DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate); | 174 DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate); |
174 }; | 175 }; |
175 | 176 |
176 class TestResourceController : public ResourceController { | |
177 public: | |
178 TestResourceController() {} | |
179 ~TestResourceController() override {} | |
180 | |
181 void Cancel() override { ADD_FAILURE() << "Cancel should not be called."; } | |
182 | |
183 void CancelAndIgnore() override { | |
184 ADD_FAILURE() << "CancelAndIgnore should not be called."; | |
185 } | |
186 | |
187 void CancelWithError(int error_code) override { | |
188 // While cancelling more than once is legal, none of these tests should do | |
189 // it. | |
190 EXPECT_FALSE(is_cancel_with_error_called_); | |
191 | |
192 is_cancel_with_error_called_ = true; | |
193 error_ = error_code; | |
194 if (quit_closure_) | |
195 quit_closure_.Run(); | |
196 } | |
197 | |
198 void Resume() override { ++num_resume_calls_; } | |
199 | |
200 void RunUntilCancelWithErrorCalled() { | |
201 base::RunLoop run_loop; | |
202 quit_closure_ = run_loop.QuitClosure(); | |
203 run_loop.Run(); | |
204 } | |
205 | |
206 void set_quit_closure(const base::Closure& quit_closure) { | |
207 quit_closure_ = quit_closure; | |
208 } | |
209 | |
210 bool is_cancel_with_error_called() const { | |
211 return is_cancel_with_error_called_; | |
212 } | |
213 int error() const { return error_; } | |
214 int num_resume_calls() const { return num_resume_calls_; } | |
215 | |
216 private: | |
217 bool is_cancel_with_error_called_ = false; | |
218 int error_ = net::OK; | |
219 int num_resume_calls_ = 0; | |
220 base::Closure quit_closure_; | |
221 | |
222 DISALLOW_COPY_AND_ASSIGN(TestResourceController); | |
223 }; | |
224 | |
225 class MojoAsyncResourceHandlerWithCustomDataPipeOperations | 177 class MojoAsyncResourceHandlerWithCustomDataPipeOperations |
226 : public MojoAsyncResourceHandler { | 178 : public MojoAsyncResourceHandler { |
227 public: | 179 public: |
228 MojoAsyncResourceHandlerWithCustomDataPipeOperations( | 180 MojoAsyncResourceHandlerWithCustomDataPipeOperations( |
229 net::URLRequest* request, | 181 net::URLRequest* request, |
230 ResourceDispatcherHostImpl* rdh, | 182 ResourceDispatcherHostImpl* rdh, |
231 mojom::URLLoaderAssociatedRequest mojo_request, | 183 mojom::URLLoaderAssociatedRequest mojo_request, |
232 mojom::URLLoaderClientAssociatedPtr url_loader_client) | 184 mojom::URLLoaderClientAssociatedPtr url_loader_client) |
233 : MojoAsyncResourceHandler(request, | 185 : MojoAsyncResourceHandler(request, |
234 rdh, | 186 rdh, |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 url_loader_factory_.FlushForTesting(); | 304 url_loader_factory_.FlushForTesting(); |
353 DCHECK(weak_binding); | 305 DCHECK(weak_binding); |
354 TestURLLoaderFactory* factory_impl = | 306 TestURLLoaderFactory* factory_impl = |
355 static_cast<TestURLLoaderFactory*>(weak_binding->impl()); | 307 static_cast<TestURLLoaderFactory*>(weak_binding->impl()); |
356 | 308 |
357 mojom::URLLoaderClientAssociatedPtr client_ptr; | 309 mojom::URLLoaderClientAssociatedPtr client_ptr; |
358 client_ptr.Bind(factory_impl->PassClientPtrInfo()); | 310 client_ptr.Bind(factory_impl->PassClientPtrInfo()); |
359 handler_.reset(new MojoAsyncResourceHandlerWithCustomDataPipeOperations( | 311 handler_.reset(new MojoAsyncResourceHandlerWithCustomDataPipeOperations( |
360 request_.get(), &rdh_, factory_impl->PassLoaderRequest(), | 312 request_.get(), &rdh_, factory_impl->PassLoaderRequest(), |
361 std::move(client_ptr))); | 313 std::move(client_ptr))); |
362 handler_->SetController(&resource_controller_); | 314 handler_wrapper_.reset(new TestResourceHandlerWrapper(handler_.get())); |
363 } | 315 } |
364 | 316 |
365 virtual ~MojoAsyncResourceHandlerTestBase() { | 317 virtual ~MojoAsyncResourceHandlerTestBase() { |
366 net::URLRequestFilter::GetInstance()->ClearHandlers(); | 318 net::URLRequestFilter::GetInstance()->ClearHandlers(); |
367 MojoAsyncResourceHandler::SetAllocationSizeForTesting( | 319 MojoAsyncResourceHandler::SetAllocationSizeForTesting( |
368 MojoAsyncResourceHandler::kDefaultAllocationSize); | 320 MojoAsyncResourceHandler::kDefaultAllocationSize); |
369 base::RunLoop().RunUntilIdle(); | 321 base::RunLoop().RunUntilIdle(); |
370 } | 322 } |
371 | 323 |
372 // Returns false if something bad happens. | 324 // Returns false if something bad happens. |
373 bool CallOnWillStart() { | |
374 bool defer = false; | |
375 if (!handler_->OnWillStart(request_->url(), &defer)) { | |
376 ADD_FAILURE() << "OnWillStart returns false."; | |
377 return false; | |
378 } | |
379 if (defer) { | |
380 ADD_FAILURE() << "OnWillStart sets |defer| true."; | |
381 return false; | |
382 } | |
383 return true; | |
384 } | |
385 | |
386 // Returns false if something bad happens. | |
387 bool CallOnWillStartAndOnResponseStarted() { | 325 bool CallOnWillStartAndOnResponseStarted() { |
388 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 326 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
389 if (!CallOnWillStart()) | 327 TestResourceHandlerWrapper::Result result = |
| 328 handler_wrapper_->OnWillStart(request_->url()); |
| 329 EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
| 330 if (result != TestResourceHandlerWrapper::Result::RESUME) |
390 return false; | 331 return false; |
391 | 332 |
392 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 333 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
393 bool defer = false; | 334 result = handler_wrapper_->OnResponseStarted(response.get()); |
394 if (!handler_->OnResponseStarted(response.get(), &defer)) { | 335 EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
395 ADD_FAILURE() << "OnResponseStarted returns false."; | 336 if (result != TestResourceHandlerWrapper::Result::RESUME) |
396 return false; | 337 return false; |
397 } | 338 |
398 if (defer) { | |
399 ADD_FAILURE() << "OnResponseStarted sets |defer| true."; | |
400 return false; | |
401 } | |
402 if (url_loader_client_.has_received_response()) { | 339 if (url_loader_client_.has_received_response()) { |
403 ADD_FAILURE() << "URLLoaderClient unexpectedly gets a response."; | 340 ADD_FAILURE() << "URLLoaderClient unexpectedly gets a response."; |
404 return false; | 341 return false; |
405 } | 342 } |
406 url_loader_client_.RunUntilResponseReceived(); | 343 url_loader_client_.RunUntilResponseReceived(); |
407 return true; | 344 return true; |
408 } | 345 } |
409 | 346 |
410 TestBrowserThreadBundle thread_bundle_; | 347 TestBrowserThreadBundle thread_bundle_; |
411 TestResourceDispatcherHostDelegate rdh_delegate_; | 348 TestResourceDispatcherHostDelegate rdh_delegate_; |
412 ResourceDispatcherHostImpl rdh_; | 349 ResourceDispatcherHostImpl rdh_; |
413 mojom::URLLoaderFactoryPtr url_loader_factory_; | 350 mojom::URLLoaderFactoryPtr url_loader_factory_; |
414 mojom::URLLoaderAssociatedPtr url_loader_proxy_; | 351 mojom::URLLoaderAssociatedPtr url_loader_proxy_; |
415 TestURLLoaderClient url_loader_client_; | 352 TestURLLoaderClient url_loader_client_; |
416 TestResourceController resource_controller_; | |
417 std::unique_ptr<TestBrowserContext> browser_context_; | 353 std::unique_ptr<TestBrowserContext> browser_context_; |
418 std::unique_ptr<net::TestDelegate> url_request_delegate_; | 354 std::unique_ptr<net::TestDelegate> url_request_delegate_; |
419 std::unique_ptr<net::URLRequest> request_; | 355 std::unique_ptr<net::URLRequest> request_; |
420 std::unique_ptr<MojoAsyncResourceHandlerWithCustomDataPipeOperations> | 356 std::unique_ptr<MojoAsyncResourceHandlerWithCustomDataPipeOperations> |
421 handler_; | 357 handler_; |
| 358 std::unique_ptr<TestResourceHandlerWrapper> handler_wrapper_; |
422 | 359 |
423 DISALLOW_COPY_AND_ASSIGN(MojoAsyncResourceHandlerTestBase); | 360 DISALLOW_COPY_AND_ASSIGN(MojoAsyncResourceHandlerTestBase); |
424 }; | 361 }; |
425 | 362 |
426 class MojoAsyncResourceHandlerTest : public MojoAsyncResourceHandlerTestBase, | 363 class MojoAsyncResourceHandlerTest : public MojoAsyncResourceHandlerTestBase, |
427 public ::testing::Test {}; | 364 public ::testing::Test {}; |
428 | 365 |
429 // This test class is parameterized with MojoAsyncResourceHandler's allocation | 366 // This test class is parameterized with MojoAsyncResourceHandler's allocation |
430 // size. | 367 // size. |
431 class MojoAsyncResourceHandlerWithAllocationSizeTest | 368 class MojoAsyncResourceHandlerWithAllocationSizeTest |
432 : public MojoAsyncResourceHandlerTestBase, | 369 : public MojoAsyncResourceHandlerTestBase, |
433 public ::testing::TestWithParam<size_t> { | 370 public ::testing::TestWithParam<size_t> { |
434 protected: | 371 protected: |
435 MojoAsyncResourceHandlerWithAllocationSizeTest() { | 372 MojoAsyncResourceHandlerWithAllocationSizeTest() { |
436 MojoAsyncResourceHandler::SetAllocationSizeForTesting(GetParam()); | 373 MojoAsyncResourceHandler::SetAllocationSizeForTesting(GetParam()); |
437 } | 374 } |
438 }; | 375 }; |
439 | 376 |
440 TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) { | 377 TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) { |
441 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 378 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
442 handler_ = nullptr; | 379 handler_ = nullptr; |
443 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 380 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
444 } | 381 } |
445 | 382 |
446 TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) { | 383 TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) { |
447 bool defer = false; | 384 EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
448 EXPECT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 385 handler_wrapper_->OnWillStart(request_->url())); |
449 EXPECT_FALSE(defer); | |
450 } | 386 } |
451 | 387 |
452 TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { | 388 TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { |
453 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 389 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
454 ASSERT_TRUE(CallOnWillStart()); | 390 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 391 handler_wrapper_->OnWillStart(request_->url())); |
455 | 392 |
456 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 393 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
457 response->head.content_length = 99; | 394 response->head.content_length = 99; |
458 response->head.request_start = | 395 response->head.request_start = |
459 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(14); | 396 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(14); |
460 response->head.response_start = | 397 response->head.response_start = |
461 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(28); | 398 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(28); |
462 | 399 |
463 bool defer = false; | |
464 | |
465 EXPECT_EQ(0, rdh_delegate_.num_on_response_started_calls()); | 400 EXPECT_EQ(0, rdh_delegate_.num_on_response_started_calls()); |
466 base::TimeTicks now1 = base::TimeTicks::Now(); | 401 base::TimeTicks now1 = base::TimeTicks::Now(); |
467 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 402 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 403 handler_wrapper_->OnResponseStarted(response.get())); |
468 base::TimeTicks now2 = base::TimeTicks::Now(); | 404 base::TimeTicks now2 = base::TimeTicks::Now(); |
469 | 405 |
470 EXPECT_FALSE(defer); | |
471 EXPECT_EQ(request_->creation_time(), response->head.request_start); | 406 EXPECT_EQ(request_->creation_time(), response->head.request_start); |
472 EXPECT_LE(now1, response->head.response_start); | 407 EXPECT_LE(now1, response->head.response_start); |
473 EXPECT_LE(response->head.response_start, now2); | 408 EXPECT_LE(response->head.response_start, now2); |
474 EXPECT_EQ(1, rdh_delegate_.num_on_response_started_calls()); | 409 EXPECT_EQ(1, rdh_delegate_.num_on_response_started_calls()); |
475 | 410 |
476 url_loader_client_.RunUntilResponseReceived(); | 411 url_loader_client_.RunUntilResponseReceived(); |
477 EXPECT_EQ(response->head.request_start, | 412 EXPECT_EQ(response->head.request_start, |
478 url_loader_client_.response_head().request_start); | 413 url_loader_client_.response_head().request_start); |
479 EXPECT_EQ(response->head.response_start, | 414 EXPECT_EQ(response->head.response_start, |
480 url_loader_client_.response_head().response_start); | 415 url_loader_client_.response_head().response_start); |
(...skipping 14 matching lines...) Expand all Loading... |
495 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { | 430 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { |
496 rdh_.set_max_num_in_flight_requests_per_process(0); | 431 rdh_.set_max_num_in_flight_requests_per_process(0); |
497 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 432 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
498 | 433 |
499 scoped_refptr<net::IOBuffer> io_buffer; | 434 scoped_refptr<net::IOBuffer> io_buffer; |
500 int io_buffer_size = 0; | 435 int io_buffer_size = 0; |
501 EXPECT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 436 EXPECT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
502 EXPECT_FALSE(io_buffer); | 437 EXPECT_FALSE(io_buffer); |
503 EXPECT_EQ(0, io_buffer_size); | 438 EXPECT_EQ(0, io_buffer_size); |
504 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); | 439 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); |
505 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); | 440 // TODO(mmenke): Should make sure the class is cancelling with |
506 EXPECT_EQ(net::ERR_INSUFFICIENT_RESOURCES, resource_controller_.error()); | 441 // ERR_INSUFFICIENT_RESOURCES here (Which it isn't currently doing). |
507 handler_ = nullptr; | 442 handler_ = nullptr; |
508 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 443 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
509 } | 444 } |
510 | 445 |
511 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { | 446 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { |
512 bool defer = false; | |
513 scoped_refptr<net::IOBuffer> io_buffer; | 447 scoped_refptr<net::IOBuffer> io_buffer; |
514 int io_buffer_size = 0; | 448 int io_buffer_size = 0; |
515 | 449 |
516 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 450 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
517 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 451 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
518 ASSERT_TRUE(io_buffer); | 452 ASSERT_TRUE(io_buffer); |
519 // The buffer size that the mime sniffer requires implicitly. | 453 // The buffer size that the mime sniffer requires implicitly. |
520 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 454 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
521 | 455 |
522 url_loader_client_.RunUntilResponseBodyArrived(); | 456 url_loader_client_.RunUntilResponseBodyArrived(); |
523 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 457 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
524 | 458 |
525 io_buffer->data()[0] = 'A'; | 459 io_buffer->data()[0] = 'A'; |
526 io_buffer->data()[1] = 'B'; | 460 io_buffer->data()[1] = 'B'; |
527 ASSERT_TRUE(handler_->OnReadCompleted(2, &defer)); | 461 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
528 EXPECT_FALSE(defer); | 462 handler_wrapper_->OnReadCompleted(2)); |
529 | 463 |
530 std::string contents; | 464 std::string contents; |
531 while (contents.size() < 2) { | 465 while (contents.size() < 2) { |
532 char buffer[16]; | 466 char buffer[16]; |
533 uint32_t read_size = sizeof(buffer); | 467 uint32_t read_size = sizeof(buffer); |
534 MojoResult result = | 468 MojoResult result = |
535 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 469 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
536 &read_size, MOJO_READ_DATA_FLAG_NONE); | 470 &read_size, MOJO_READ_DATA_FLAG_NONE); |
537 if (result == MOJO_RESULT_SHOULD_WAIT) { | 471 if (result == MOJO_RESULT_SHOULD_WAIT) { |
538 base::RunLoop().RunUntilIdle(); | 472 base::RunLoop().RunUntilIdle(); |
539 continue; | 473 continue; |
540 } | 474 } |
541 contents.append(buffer, read_size); | 475 contents.append(buffer, read_size); |
542 } | 476 } |
543 EXPECT_EQ("AB", contents); | 477 EXPECT_EQ("AB", contents); |
544 } | 478 } |
545 | 479 |
546 TEST_F(MojoAsyncResourceHandlerTest, | 480 TEST_F(MojoAsyncResourceHandlerTest, |
547 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { | 481 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { |
548 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 482 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
549 | 483 |
550 bool defer = false; | |
551 scoped_refptr<net::IOBuffer> io_buffer; | 484 scoped_refptr<net::IOBuffer> io_buffer; |
552 int io_buffer_size = 0; | 485 int io_buffer_size = 0; |
553 | 486 |
554 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 487 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
555 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 488 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
556 ASSERT_TRUE(io_buffer); | 489 ASSERT_TRUE(io_buffer); |
557 // The buffer size that the mime sniffer requires implicitly. | 490 // The buffer size that the mime sniffer requires implicitly. |
558 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 491 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
559 | 492 |
560 url_loader_client_.RunUntilResponseBodyArrived(); | 493 url_loader_client_.RunUntilResponseBodyArrived(); |
561 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 494 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
562 | 495 |
563 const std::string data("abcdefgh"); | 496 const std::string data("abcdefgh"); |
564 strcpy(io_buffer->data(), data.c_str()); | 497 strcpy(io_buffer->data(), data.c_str()); |
565 ASSERT_TRUE(handler_->OnReadCompleted(data.size(), &defer)); | 498 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
566 EXPECT_TRUE(defer); | 499 handler_wrapper_->OnReadCompleted(data.size())); |
567 | 500 |
568 std::string contents; | 501 std::string contents; |
569 while (contents.size() < data.size()) { | 502 while (contents.size() < data.size()) { |
570 // This is needed for Resume to be called. | 503 // This is needed for Resume to be called. |
571 base::RunLoop().RunUntilIdle(); | 504 base::RunLoop().RunUntilIdle(); |
572 char buffer[16]; | 505 char buffer[16]; |
573 uint32_t read_size = sizeof(buffer); | 506 uint32_t read_size = sizeof(buffer); |
574 MojoResult result = | 507 MojoResult result = |
575 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 508 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
576 &read_size, MOJO_READ_DATA_FLAG_NONE); | 509 &read_size, MOJO_READ_DATA_FLAG_NONE); |
577 if (result == MOJO_RESULT_SHOULD_WAIT) | 510 if (result == MOJO_RESULT_SHOULD_WAIT) |
578 continue; | 511 continue; |
579 ASSERT_EQ(MOJO_RESULT_OK, result); | 512 ASSERT_EQ(MOJO_RESULT_OK, result); |
580 contents.append(buffer, read_size); | 513 contents.append(buffer, read_size); |
581 } | 514 } |
582 EXPECT_EQ(data, contents); | 515 EXPECT_EQ(data, contents); |
583 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | 516 EXPECT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 517 handler_wrapper_->last_result()); |
584 } | 518 } |
585 | 519 |
586 TEST_F(MojoAsyncResourceHandlerTest, | 520 TEST_F(MojoAsyncResourceHandlerTest, |
587 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { | 521 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { |
588 scoped_refptr<net::IOBuffer> io_buffer; | 522 scoped_refptr<net::IOBuffer> io_buffer; |
589 int io_buffer_size = 0; | 523 int io_buffer_size = 0; |
590 | 524 |
591 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 525 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
592 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 526 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
593 ASSERT_TRUE(io_buffer); | 527 ASSERT_TRUE(io_buffer); |
594 // The io_buffer size that the mime sniffer requires implicitly. | 528 // The io_buffer size that the mime sniffer requires implicitly. |
595 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 529 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
596 | 530 |
597 handler_ = nullptr; | 531 handler_ = nullptr; |
598 url_loader_client_.Unbind(); | 532 url_loader_client_.Unbind(); |
599 base::RunLoop().RunUntilIdle(); | 533 base::RunLoop().RunUntilIdle(); |
600 | 534 |
601 // Hopefully ASAN checks this operation's validity. | 535 // Hopefully ASAN checks this operation's validity. |
602 io_buffer->data()[0] = 'A'; | 536 io_buffer->data()[0] = 'A'; |
603 } | 537 } |
604 | 538 |
605 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { | 539 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { |
606 bool defer = false; | |
607 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 540 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
608 | 541 |
609 ResourceRequestInfoImpl::ForRequest(request_.get()) | 542 ResourceRequestInfoImpl::ForRequest(request_.get()) |
610 ->set_was_ignored_by_handler(false); | 543 ->set_was_ignored_by_handler(false); |
611 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 544 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
612 | 545 |
613 base::TimeTicks now1 = base::TimeTicks::Now(); | 546 base::TimeTicks now1 = base::TimeTicks::Now(); |
614 handler_->OnResponseCompleted(status, &defer); | 547 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 548 handler_wrapper_->OnResponseCompleted(status)); |
615 base::TimeTicks now2 = base::TimeTicks::Now(); | 549 base::TimeTicks now2 = base::TimeTicks::Now(); |
616 EXPECT_FALSE(defer); | |
617 | 550 |
618 url_loader_client_.RunUntilComplete(); | 551 url_loader_client_.RunUntilComplete(); |
619 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 552 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
620 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 553 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
621 EXPECT_FALSE(url_loader_client_.completion_status().was_ignored_by_handler); | 554 EXPECT_FALSE(url_loader_client_.completion_status().was_ignored_by_handler); |
622 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); | 555 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); |
623 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); | 556 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); |
624 EXPECT_EQ(request_->GetTotalReceivedBytes(), | 557 EXPECT_EQ(request_->GetTotalReceivedBytes(), |
625 url_loader_client_.completion_status().encoded_data_length); | 558 url_loader_client_.completion_status().encoded_data_length); |
626 } | 559 } |
627 | 560 |
628 // This test case sets different status values from OnResponseCompleted. | 561 // This test case sets different status values from OnResponseCompleted. |
629 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { | 562 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { |
630 rdh_.SetDelegate(nullptr); | 563 rdh_.SetDelegate(nullptr); |
631 bool defer = false; | |
632 // Don't use CallOnWillStartAndOnResponseStarted as this test case manually | 564 // Don't use CallOnWillStartAndOnResponseStarted as this test case manually |
633 // sets the null delegate. | 565 // sets the null delegate. |
634 ASSERT_TRUE(CallOnWillStart()); | 566 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 567 handler_wrapper_->OnWillStart(request_->url())); |
635 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 568 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
636 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 569 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
637 ASSERT_FALSE(defer); | 570 handler_wrapper_->OnResponseStarted(response.get())); |
638 ASSERT_FALSE(url_loader_client_.has_received_response()); | 571 ASSERT_FALSE(url_loader_client_.has_received_response()); |
639 url_loader_client_.RunUntilResponseReceived(); | 572 url_loader_client_.RunUntilResponseReceived(); |
640 | 573 |
641 ResourceRequestInfoImpl::ForRequest(request_.get()) | 574 ResourceRequestInfoImpl::ForRequest(request_.get()) |
642 ->set_was_ignored_by_handler(true); | 575 ->set_was_ignored_by_handler(true); |
643 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 576 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
644 net::ERR_ABORTED); | 577 net::ERR_ABORTED); |
645 | 578 |
646 base::TimeTicks now1 = base::TimeTicks::Now(); | 579 base::TimeTicks now1 = base::TimeTicks::Now(); |
647 handler_->OnResponseCompleted(status, &defer); | 580 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 581 handler_wrapper_->OnResponseCompleted(status)); |
648 base::TimeTicks now2 = base::TimeTicks::Now(); | 582 base::TimeTicks now2 = base::TimeTicks::Now(); |
649 EXPECT_FALSE(defer); | |
650 | 583 |
651 url_loader_client_.RunUntilComplete(); | 584 url_loader_client_.RunUntilComplete(); |
652 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 585 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
653 EXPECT_EQ(net::ERR_ABORTED, | 586 EXPECT_EQ(net::ERR_ABORTED, |
654 url_loader_client_.completion_status().error_code); | 587 url_loader_client_.completion_status().error_code); |
655 EXPECT_TRUE(url_loader_client_.completion_status().was_ignored_by_handler); | 588 EXPECT_TRUE(url_loader_client_.completion_status().was_ignored_by_handler); |
656 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); | 589 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); |
657 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); | 590 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); |
658 EXPECT_EQ(request_->GetTotalReceivedBytes(), | 591 EXPECT_EQ(request_->GetTotalReceivedBytes(), |
659 url_loader_client_.completion_status().encoded_data_length); | 592 url_loader_client_.completion_status().encoded_data_length); |
660 } | 593 } |
661 | 594 |
662 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { | 595 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { |
663 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 596 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
664 net::ERR_TIMED_OUT); | 597 net::ERR_TIMED_OUT); |
665 bool defer = false; | |
666 | 598 |
667 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 599 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
668 handler_->OnResponseCompleted(status, &defer); | 600 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
669 EXPECT_FALSE(defer); | 601 handler_wrapper_->OnResponseCompleted(status)); |
670 | 602 |
671 url_loader_client_.RunUntilComplete(); | 603 url_loader_client_.RunUntilComplete(); |
672 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 604 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
673 EXPECT_EQ(net::ERR_TIMED_OUT, | 605 EXPECT_EQ(net::ERR_TIMED_OUT, |
674 url_loader_client_.completion_status().error_code); | 606 url_loader_client_.completion_status().error_code); |
675 } | 607 } |
676 | 608 |
677 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { | 609 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { |
678 net::URLRequestStatus status(net::URLRequestStatus::FAILED, | 610 net::URLRequestStatus status(net::URLRequestStatus::FAILED, |
679 net::ERR_TIMED_OUT); | 611 net::ERR_TIMED_OUT); |
680 bool defer = false; | |
681 | 612 |
682 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 613 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
683 handler_->OnResponseCompleted(status, &defer); | 614 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
684 EXPECT_FALSE(defer); | 615 handler_wrapper_->OnResponseCompleted(status)); |
685 | 616 |
686 url_loader_client_.RunUntilComplete(); | 617 url_loader_client_.RunUntilComplete(); |
687 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 618 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
688 EXPECT_EQ(net::ERR_TIMED_OUT, | 619 EXPECT_EQ(net::ERR_TIMED_OUT, |
689 url_loader_client_.completion_status().error_code); | 620 url_loader_client_.completion_status().error_code); |
690 } | 621 } |
691 | 622 |
692 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { | 623 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { |
693 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 624 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
694 | 625 |
695 scoped_refptr<net::IOBuffer> io_buffer; | 626 scoped_refptr<net::IOBuffer> io_buffer; |
696 int io_buffer_size = 0; | 627 int io_buffer_size = 0; |
697 bool defer = false; | |
698 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 628 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
699 url_loader_client_.RunUntilResponseBodyArrived(); | 629 url_loader_client_.RunUntilResponseBodyArrived(); |
700 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 630 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
701 ASSERT_TRUE(handler_->OnReadCompleted(0, &defer)); | 631 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
702 EXPECT_FALSE(defer); | 632 handler_wrapper_->OnReadCompleted(0)); |
703 | 633 |
704 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 634 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
705 handler_->OnResponseCompleted(status, &defer); | 635 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
706 EXPECT_FALSE(defer); | 636 handler_wrapper_->OnResponseCompleted(status)); |
707 | 637 |
708 url_loader_client_.RunUntilComplete(); | 638 url_loader_client_.RunUntilComplete(); |
709 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 639 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
710 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 640 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
711 | 641 |
712 // This is needed because |*io_buffer| may keep the data producer alive. | 642 // This is needed because |*io_buffer| may keep the data producer alive. |
713 io_buffer = nullptr; | 643 io_buffer = nullptr; |
714 | 644 |
715 while (true) { | 645 while (true) { |
716 char buffer[16]; | 646 char buffer[16]; |
(...skipping 10 matching lines...) Expand all Loading... |
727 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission) { | 657 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission) { |
728 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 658 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
729 | 659 |
730 scoped_refptr<net::IOBuffer> io_buffer; | 660 scoped_refptr<net::IOBuffer> io_buffer; |
731 int io_buffer_size = 0; | 661 int io_buffer_size = 0; |
732 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 662 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
733 url_loader_client_.RunUntilResponseBodyArrived(); | 663 url_loader_client_.RunUntilResponseBodyArrived(); |
734 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 664 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
735 ASSERT_GT(io_buffer_size, 0); | 665 ASSERT_GT(io_buffer_size, 0); |
736 memset(io_buffer->data(), 'a', io_buffer_size); | 666 memset(io_buffer->data(), 'a', io_buffer_size); |
737 bool defer = false; | 667 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
738 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 668 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
739 // We don't care |defer|'s value here. | |
740 | 669 |
741 defer = false; | 670 // Out of band cancel. |
742 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 671 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
743 handler_->OnResponseCompleted(status, &defer); | 672 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
744 EXPECT_FALSE(defer); | 673 handler_wrapper_->OnResponseCompletedForOutOfBandCancel(status)); |
745 | 674 |
746 url_loader_client_.RunUntilComplete(); | 675 url_loader_client_.RunUntilComplete(); |
747 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 676 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
748 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); | 677 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); |
749 | 678 |
750 // This is needed because |*io_buffer| may keep the data producer alive. | 679 // This is needed because |*io_buffer| may keep the data producer alive. |
751 io_buffer = nullptr; | 680 io_buffer = nullptr; |
752 | 681 |
753 std::string actual; | 682 std::string actual; |
754 while (true) { | 683 while (true) { |
(...skipping 16 matching lines...) Expand all Loading... |
771 | 700 |
772 // In this case, an error is notified after OnWillRead, before OnReadCompleted. | 701 // In this case, an error is notified after OnWillRead, before OnReadCompleted. |
773 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { | 702 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { |
774 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 703 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
775 | 704 |
776 scoped_refptr<net::IOBuffer> io_buffer; | 705 scoped_refptr<net::IOBuffer> io_buffer; |
777 int io_buffer_size = 0; | 706 int io_buffer_size = 0; |
778 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 707 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
779 url_loader_client_.RunUntilResponseBodyArrived(); | 708 url_loader_client_.RunUntilResponseBodyArrived(); |
780 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 709 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
781 bool defer = false; | |
782 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 710 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
783 handler_->OnResponseCompleted(status, &defer); | 711 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
784 EXPECT_FALSE(defer); | 712 handler_wrapper_->OnResponseCompleted(status)); |
785 | 713 |
786 url_loader_client_.RunUntilComplete(); | 714 url_loader_client_.RunUntilComplete(); |
787 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 715 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
788 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); | 716 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); |
789 | 717 |
790 // This is needed because |*io_buffer| may keep the data producer alive. | 718 // This is needed because |*io_buffer| may keep the data producer alive. |
791 io_buffer = nullptr; | 719 io_buffer = nullptr; |
792 | 720 |
793 while (true) { | 721 while (true) { |
794 char buf[16]; | 722 char buf[16]; |
795 uint32_t read_size = sizeof(buf); | 723 uint32_t read_size = sizeof(buf); |
796 MojoResult result = | 724 MojoResult result = |
797 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 725 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
798 MOJO_READ_DATA_FLAG_NONE); | 726 MOJO_READ_DATA_FLAG_NONE); |
799 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 727 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
800 break; | 728 break; |
801 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, result); | 729 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, result); |
802 base::RunLoop().RunUntilIdle(); | 730 base::RunLoop().RunUntilIdle(); |
803 } | 731 } |
804 } | 732 } |
805 | 733 |
806 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { | 734 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { |
807 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 735 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
808 scoped_refptr<net::IOBuffer> io_buffer; | 736 scoped_refptr<net::IOBuffer> io_buffer; |
809 int io_buffer_size = 0; | 737 int io_buffer_size = 0; |
810 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 738 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
811 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 739 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
812 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); | |
813 } | 740 } |
814 | 741 |
815 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { | 742 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { |
816 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 743 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
817 scoped_refptr<net::IOBuffer> io_buffer; | 744 scoped_refptr<net::IOBuffer> io_buffer; |
818 int io_buffer_size = 0; | 745 int io_buffer_size = 0; |
819 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 746 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
820 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 747 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
821 EXPECT_TRUE(io_buffer); | 748 EXPECT_TRUE(io_buffer); |
822 EXPECT_GT(io_buffer_size, 0); | 749 EXPECT_GT(io_buffer_size, 0); |
823 } | 750 } |
824 | 751 |
825 TEST_F(MojoAsyncResourceHandlerTest, | 752 TEST_F(MojoAsyncResourceHandlerTest, |
826 BeginWriteReturnsShouldWaitOnWillReadAndThenReturnsOK) { | 753 BeginWriteReturnsShouldWaitOnWillReadAndThenReturnsOK) { |
827 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 754 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
828 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 755 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
829 size_t written = 0; | 756 size_t written = 0; |
830 while (true) { | 757 while (true) { |
831 scoped_refptr<net::IOBuffer> io_buffer; | 758 scoped_refptr<net::IOBuffer> io_buffer; |
832 int io_buffer_size = 0; | 759 int io_buffer_size = 0; |
833 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 760 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
834 EXPECT_TRUE(io_buffer); | 761 EXPECT_TRUE(io_buffer); |
835 EXPECT_GT(io_buffer_size, 0); | 762 EXPECT_GT(io_buffer_size, 0); |
836 memset(io_buffer->data(), 'X', io_buffer_size); | 763 memset(io_buffer->data(), 'X', io_buffer_size); |
837 written += io_buffer_size; | 764 written += io_buffer_size; |
838 bool defer = false; | 765 TestResourceHandlerWrapper::Result result = |
839 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 766 handler_wrapper_->OnReadCompleted(io_buffer_size); |
840 if (defer) | 767 if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING) |
841 break; | 768 break; |
| 769 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
842 } | 770 } |
843 | 771 |
844 url_loader_client_.RunUntilResponseBodyArrived(); | 772 url_loader_client_.RunUntilResponseBodyArrived(); |
845 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 773 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
846 handler_->ResetBeginWriteExpectation(); | 774 handler_->ResetBeginWriteExpectation(); |
847 handler_->OnWritableForTesting(); | 775 handler_->OnWritableForTesting(); |
848 | 776 |
849 std::string actual; | 777 std::string actual; |
850 while (actual.size() < written) { | 778 while (actual.size() < written) { |
851 char buf[16]; | 779 char buf[16]; |
852 uint32_t read_size = sizeof(buf); | 780 uint32_t read_size = sizeof(buf); |
853 MojoResult result = | 781 MojoResult result = |
854 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 782 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
855 MOJO_READ_DATA_FLAG_NONE); | 783 MOJO_READ_DATA_FLAG_NONE); |
856 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); | 784 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); |
857 if (result == MOJO_RESULT_OK) | 785 if (result == MOJO_RESULT_OK) |
858 actual.append(buf, read_size); | 786 actual.append(buf, read_size); |
859 base::RunLoop().RunUntilIdle(); | 787 base::RunLoop().RunUntilIdle(); |
860 } | 788 } |
861 | 789 |
862 EXPECT_EQ(std::string(written, 'X'), actual); | 790 EXPECT_EQ(std::string(written, 'X'), actual); |
863 EXPECT_EQ(1, resource_controller_.num_resume_calls()); | 791 EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 792 handler_wrapper_->last_result()); |
864 } | 793 } |
865 | 794 |
866 TEST_F(MojoAsyncResourceHandlerTest, | 795 TEST_F(MojoAsyncResourceHandlerTest, |
867 EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { | 796 EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { |
868 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 797 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
869 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 798 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
870 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); | 799 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); |
871 scoped_refptr<net::IOBuffer> io_buffer; | 800 scoped_refptr<net::IOBuffer> io_buffer; |
872 int io_buffer_size = 0; | 801 int io_buffer_size = 0; |
873 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 802 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
874 } | 803 } |
875 | 804 |
876 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { | 805 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { |
877 scoped_refptr<net::IOBuffer> io_buffer; | 806 scoped_refptr<net::IOBuffer> io_buffer; |
878 int io_buffer_size = 0; | 807 int io_buffer_size = 0; |
879 bool defer = false; | |
880 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 808 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
881 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 809 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
882 | 810 |
883 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 811 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
884 ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 812 ASSERT_EQ(TestResourceHandlerWrapper::Result::CANCEL, |
| 813 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
885 } | 814 } |
886 | 815 |
887 TEST_F(MojoAsyncResourceHandlerTest, | 816 TEST_F(MojoAsyncResourceHandlerTest, |
888 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { | 817 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { |
889 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 818 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
890 scoped_refptr<net::IOBuffer> io_buffer; | 819 scoped_refptr<net::IOBuffer> io_buffer; |
891 int io_buffer_size = 0; | 820 int io_buffer_size = 0; |
892 bool defer = false; | |
893 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 821 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
894 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 822 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
895 | 823 |
896 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 824 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
897 ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 825 ASSERT_EQ(TestResourceHandlerWrapper::Result::CANCEL, |
| 826 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
898 } | 827 } |
899 | 828 |
900 TEST_F(MojoAsyncResourceHandlerTest, | 829 TEST_F(MojoAsyncResourceHandlerTest, |
901 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { | 830 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { |
902 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); | 831 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); |
903 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 832 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
904 scoped_refptr<net::IOBuffer> io_buffer; | 833 scoped_refptr<net::IOBuffer> io_buffer; |
905 int io_buffer_size = 0; | 834 int io_buffer_size = 0; |
906 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 835 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
907 url_loader_client_.RunUntilResponseBodyArrived(); | 836 url_loader_client_.RunUntilResponseBodyArrived(); |
908 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 837 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
909 | 838 |
910 while (true) { | 839 while (true) { |
911 bool defer = false; | |
912 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | |
913 ASSERT_GE(io_buffer_size, 0); | 840 ASSERT_GE(io_buffer_size, 0); |
914 if (defer) | 841 TestResourceHandlerWrapper::Result result = |
| 842 handler_wrapper_->OnReadCompleted(io_buffer_size); |
| 843 if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING) |
915 break; | 844 break; |
| 845 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
| 846 |
916 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 847 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
917 } | 848 } |
918 | 849 |
919 while (true) { | 850 while (true) { |
920 char buf[16]; | 851 char buf[16]; |
921 uint32_t read_size = sizeof(buf); | 852 uint32_t read_size = sizeof(buf); |
922 MojoResult result = | 853 MojoResult result = |
923 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 854 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
924 MOJO_READ_DATA_FLAG_NONE); | 855 MOJO_READ_DATA_FLAG_NONE); |
925 if (result == MOJO_RESULT_SHOULD_WAIT) | 856 if (result == MOJO_RESULT_SHOULD_WAIT) |
926 break; | 857 break; |
927 ASSERT_EQ(MOJO_RESULT_OK, result); | 858 ASSERT_EQ(MOJO_RESULT_OK, result); |
928 } | 859 } |
929 | 860 |
930 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 861 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
931 resource_controller_.RunUntilCancelWithErrorCalled(); | 862 handler_wrapper_->RunUntilCanceled(); |
932 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 863 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
933 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); | 864 EXPECT_EQ(TestResourceHandlerWrapper::Result::CANCEL, |
934 EXPECT_EQ(net::ERR_FAILED, resource_controller_.error()); | 865 handler_wrapper_->last_result()); |
| 866 EXPECT_EQ(net::ERR_FAILED, handler_wrapper_->net_error()); |
935 } | 867 } |
936 | 868 |
937 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 869 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
938 OnWillReadWithLongContents) { | 870 OnWillReadWithLongContents) { |
939 bool defer = false; | |
940 scoped_refptr<net::IOBuffer> io_buffer; | 871 scoped_refptr<net::IOBuffer> io_buffer; |
941 int io_buffer_size = 0; | 872 int io_buffer_size = 0; |
942 | 873 |
943 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 874 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
944 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 875 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
945 ASSERT_TRUE(io_buffer); | 876 ASSERT_TRUE(io_buffer); |
946 // The io_buffer size that the mime sniffer requires implicitly. | 877 // The io_buffer size that the mime sniffer requires implicitly. |
947 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 878 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
948 std::string expected; | 879 std::string expected; |
949 for (int i = 0; i < 3 * io_buffer_size + 2; ++i) | 880 for (int i = 0; i < 3 * io_buffer_size + 2; ++i) |
950 expected += ('A' + i % 26); | 881 expected += ('A' + i % 26); |
951 | 882 |
952 ASSERT_TRUE(handler_->OnReadCompleted(0, &defer)); | 883 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
953 ASSERT_FALSE(defer); | 884 handler_wrapper_->OnReadCompleted(0)); |
954 | 885 |
955 url_loader_client_.RunUntilResponseBodyArrived(); | 886 url_loader_client_.RunUntilResponseBodyArrived(); |
956 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 887 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
957 | 888 |
958 size_t written = 0; | 889 size_t written = 0; |
959 std::string actual; | 890 std::string actual; |
960 while (actual.size() < expected.size()) { | 891 while (actual.size() < expected.size()) { |
961 while (written < expected.size() && !defer) { | 892 while (written < expected.size() && |
| 893 handler_wrapper_->last_result() == |
| 894 TestResourceHandlerWrapper::Result::RESUME) { |
962 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 895 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
963 const size_t to_be_written = std::min(static_cast<size_t>(io_buffer_size), | 896 const size_t to_be_written = std::min(static_cast<size_t>(io_buffer_size), |
964 expected.size() - written); | 897 expected.size() - written); |
965 memcpy(io_buffer->data(), &expected[written], to_be_written); | 898 memcpy(io_buffer->data(), &expected[written], to_be_written); |
966 ASSERT_TRUE(handler_->OnReadCompleted(to_be_written, &defer)); | 899 |
| 900 // Request should be resumed or paused. |
| 901 ASSERT_NE(TestResourceHandlerWrapper::Result::CANCEL, |
| 902 handler_wrapper_->OnReadCompleted(to_be_written)); |
| 903 |
967 written += to_be_written; | 904 written += to_be_written; |
968 } | 905 } |
969 | 906 |
970 char buf[16]; | 907 char buf[16]; |
971 uint32_t read_size = sizeof(buf); | 908 uint32_t read_size = sizeof(buf); |
972 MojoResult result = | 909 MojoResult result = |
973 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 910 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
974 MOJO_READ_DATA_FLAG_NONE); | 911 MOJO_READ_DATA_FLAG_NONE); |
975 if (result != MOJO_RESULT_SHOULD_WAIT) { | 912 if (result != MOJO_RESULT_SHOULD_WAIT) { |
976 ASSERT_EQ(MOJO_RESULT_OK, result); | 913 ASSERT_EQ(MOJO_RESULT_OK, result); |
977 actual.append(buf, read_size); | 914 actual.append(buf, read_size); |
978 } | 915 } |
979 int resume_count = resource_controller_.num_resume_calls(); | 916 |
| 917 // Give mojo a chance pass data back and forth, and to request more data |
| 918 // from the handler. |
980 base::RunLoop().RunUntilIdle(); | 919 base::RunLoop().RunUntilIdle(); |
981 // Continue writing if controller->Resume() is called. | |
982 defer = (resume_count == resource_controller_.num_resume_calls()); | |
983 } | 920 } |
984 EXPECT_EQ(expected, actual); | 921 EXPECT_EQ(expected, actual); |
985 } | 922 } |
986 | 923 |
987 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 924 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
988 BeginWriteFailsOnReadCompleted) { | 925 BeginWriteFailsOnReadCompleted) { |
989 scoped_refptr<net::IOBuffer> io_buffer; | 926 scoped_refptr<net::IOBuffer> io_buffer; |
990 int io_buffer_size = 0; | 927 int io_buffer_size = 0; |
991 bool defer = false; | |
992 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 928 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
993 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 929 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
994 | 930 |
995 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 931 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
996 ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 932 ASSERT_EQ(TestResourceHandlerWrapper::Result::CANCEL, |
| 933 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
997 } | 934 } |
998 | 935 |
999 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 936 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
1000 BeginWriteReturnsShouldWaitOnReadCompleted) { | 937 BeginWriteReturnsShouldWaitOnReadCompleted) { |
1001 scoped_refptr<net::IOBuffer> io_buffer; | 938 scoped_refptr<net::IOBuffer> io_buffer; |
1002 int io_buffer_size = 0; | 939 int io_buffer_size = 0; |
1003 bool defer = false; | |
1004 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 940 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
1005 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 941 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
1006 | 942 |
1007 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 943 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
1008 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 944 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
1009 EXPECT_TRUE(defer); | 945 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
1010 } | 946 } |
1011 | 947 |
1012 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 948 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
1013 BeginWriteFailsOnResume) { | 949 BeginWriteFailsOnResume) { |
1014 bool defer = false; | |
1015 int io_buffer_size = 0; | 950 int io_buffer_size = 0; |
1016 scoped_refptr<net::IOBuffer> io_buffer; | 951 scoped_refptr<net::IOBuffer> io_buffer; |
1017 | 952 |
1018 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 953 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
1019 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 954 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
1020 ASSERT_TRUE(handler_->OnReadCompleted(0, &defer)); | 955 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1021 ASSERT_FALSE(defer); | 956 handler_wrapper_->OnReadCompleted(0)); |
1022 url_loader_client_.RunUntilResponseBodyArrived(); | 957 url_loader_client_.RunUntilResponseBodyArrived(); |
1023 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 958 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
1024 | 959 |
1025 while (!defer) { | 960 while (true) { |
1026 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 961 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
1027 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 962 TestResourceHandlerWrapper::Result result = |
| 963 handler_wrapper_->OnReadCompleted(io_buffer_size); |
| 964 if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING) |
| 965 break; |
| 966 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
1028 } | 967 } |
1029 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 968 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
1030 | 969 |
1031 while (!resource_controller_.is_cancel_with_error_called()) { | 970 while (handler_wrapper_->last_result() != |
| 971 TestResourceHandlerWrapper::Result::CANCEL) { |
1032 char buf[256]; | 972 char buf[256]; |
1033 uint32_t read_size = sizeof(buf); | 973 uint32_t read_size = sizeof(buf); |
1034 MojoResult result = | 974 MojoResult result = |
1035 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 975 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
1036 MOJO_READ_DATA_FLAG_NONE); | 976 MOJO_READ_DATA_FLAG_NONE); |
1037 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); | 977 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); |
1038 base::RunLoop().RunUntilIdle(); | 978 base::RunLoop().RunUntilIdle(); |
1039 } | 979 } |
1040 | 980 |
1041 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 981 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
1042 EXPECT_EQ(net::ERR_FAILED, resource_controller_.error()); | 982 EXPECT_EQ(net::ERR_FAILED, handler_wrapper_->net_error()); |
1043 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | |
1044 } | 983 } |
1045 | 984 |
1046 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { | 985 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { |
1047 bool defer = false; | |
1048 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 986 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
1049 | 987 |
1050 while (!defer) { | 988 while (true) { |
1051 scoped_refptr<net::IOBuffer> io_buffer; | 989 scoped_refptr<net::IOBuffer> io_buffer; |
1052 int io_buffer_size = 0; | 990 int io_buffer_size = 0; |
1053 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 991 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
1054 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 992 TestResourceHandlerWrapper::Result result = |
| 993 handler_wrapper_->OnReadCompleted(io_buffer_size); |
| 994 if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING) |
| 995 break; |
| 996 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
1055 } | 997 } |
1056 | 998 |
1057 url_loader_client_.RunUntilResponseBodyArrived(); | 999 url_loader_client_.RunUntilResponseBodyArrived(); |
1058 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1000 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
1059 | 1001 |
1060 defer = false; | |
1061 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 1002 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
1062 net::ERR_ABORTED); | 1003 net::ERR_ABORTED); |
1063 handler_->OnResponseCompleted(status, &defer); | 1004 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1005 handler_wrapper_->OnResponseCompletedForOutOfBandCancel(status)); |
1064 | 1006 |
1065 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1007 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
1066 url_loader_client_.RunUntilComplete(); | 1008 url_loader_client_.RunUntilComplete(); |
1067 EXPECT_EQ(net::ERR_ABORTED, | 1009 EXPECT_EQ(net::ERR_ABORTED, |
1068 url_loader_client_.completion_status().error_code); | 1010 url_loader_client_.completion_status().error_code); |
1069 | 1011 |
1070 while (true) { | 1012 while (true) { |
1071 char buffer[16]; | 1013 char buffer[16]; |
1072 uint32_t read_size = sizeof(buffer); | 1014 uint32_t read_size = sizeof(buffer); |
1073 MojoResult result = | 1015 MojoResult result = |
1074 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 1016 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
1075 &read_size, MOJO_READ_DATA_FLAG_NONE); | 1017 &read_size, MOJO_READ_DATA_FLAG_NONE); |
1076 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 1018 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
1077 break; | 1019 break; |
1078 base::RunLoop().RunUntilIdle(); | 1020 base::RunLoop().RunUntilIdle(); |
1079 DCHECK(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); | 1021 DCHECK(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); |
1080 } | 1022 } |
1081 | 1023 |
1082 base::RunLoop().RunUntilIdle(); | 1024 base::RunLoop().RunUntilIdle(); |
1083 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | |
1084 } | 1025 } |
1085 | 1026 |
1086 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { | 1027 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { |
1087 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1028 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
1088 bool defer = false; | |
1089 | 1029 |
1090 ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 1030 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1091 ASSERT_FALSE(defer); | 1031 handler_wrapper_->OnWillStart(request_->url())); |
| 1032 |
1092 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 1033 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
1093 net::RedirectInfo redirect_info; | 1034 net::RedirectInfo redirect_info; |
1094 redirect_info.status_code = 301; | 1035 redirect_info.status_code = 301; |
1095 ASSERT_TRUE( | 1036 ASSERT_EQ( |
1096 handler_->OnRequestRedirected(redirect_info, response.get(), &defer)); | 1037 TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
1097 ASSERT_TRUE(defer); | 1038 handler_wrapper_->OnRequestRedirected(redirect_info, response.get())); |
1098 | 1039 |
1099 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1040 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1100 ASSERT_FALSE(url_loader_client_.has_received_redirect()); | 1041 ASSERT_FALSE(url_loader_client_.has_received_redirect()); |
1101 url_loader_client_.RunUntilRedirectReceived(); | 1042 url_loader_client_.RunUntilRedirectReceived(); |
1102 | 1043 |
1103 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1044 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1104 ASSERT_TRUE(url_loader_client_.has_received_redirect()); | 1045 ASSERT_TRUE(url_loader_client_.has_received_redirect()); |
1105 EXPECT_EQ(301, url_loader_client_.redirect_info().status_code); | 1046 EXPECT_EQ(301, url_loader_client_.redirect_info().status_code); |
1106 | 1047 |
1107 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | 1048 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 1049 handler_wrapper_->last_result()); |
1108 handler_->FollowRedirect(); | 1050 handler_->FollowRedirect(); |
1109 EXPECT_EQ(1, resource_controller_.num_resume_calls()); | 1051 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1052 handler_wrapper_->last_result()); |
1110 | 1053 |
1111 url_loader_client_.ClearHasReceivedRedirect(); | 1054 url_loader_client_.ClearHasReceivedRedirect(); |
1112 // Redirect once more. | 1055 // Redirect once more. |
1113 defer = false; | |
1114 redirect_info.status_code = 302; | 1056 redirect_info.status_code = 302; |
1115 ASSERT_TRUE( | 1057 ASSERT_EQ( |
1116 handler_->OnRequestRedirected(redirect_info, response.get(), &defer)); | 1058 TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
1117 ASSERT_TRUE(defer); | 1059 handler_wrapper_->OnRequestRedirected(redirect_info, response.get())); |
1118 | 1060 |
1119 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1061 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1120 ASSERT_FALSE(url_loader_client_.has_received_redirect()); | 1062 ASSERT_FALSE(url_loader_client_.has_received_redirect()); |
1121 url_loader_client_.RunUntilRedirectReceived(); | 1063 url_loader_client_.RunUntilRedirectReceived(); |
1122 | 1064 |
1123 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1065 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1124 ASSERT_TRUE(url_loader_client_.has_received_redirect()); | 1066 ASSERT_TRUE(url_loader_client_.has_received_redirect()); |
1125 EXPECT_EQ(302, url_loader_client_.redirect_info().status_code); | 1067 EXPECT_EQ(302, url_loader_client_.redirect_info().status_code); |
1126 | 1068 |
1127 EXPECT_EQ(1, resource_controller_.num_resume_calls()); | 1069 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 1070 handler_wrapper_->last_result()); |
1128 handler_->FollowRedirect(); | 1071 handler_->FollowRedirect(); |
1129 EXPECT_EQ(2, resource_controller_.num_resume_calls()); | 1072 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1073 handler_wrapper_->last_result()); |
1130 | 1074 |
1131 // Give the final response. | 1075 // Give the final response. |
1132 defer = false; | 1076 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1133 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 1077 handler_wrapper_->OnResponseStarted(response.get())); |
1134 ASSERT_FALSE(defer); | |
1135 | 1078 |
1136 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1079 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
1137 handler_->OnResponseCompleted(status, &defer); | 1080 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1138 ASSERT_FALSE(defer); | 1081 handler_wrapper_->OnResponseCompleted(status)); |
1139 | 1082 |
1140 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1083 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
1141 url_loader_client_.RunUntilComplete(); | 1084 url_loader_client_.RunUntilComplete(); |
1142 | 1085 |
1143 ASSERT_TRUE(url_loader_client_.has_received_response()); | 1086 ASSERT_TRUE(url_loader_client_.has_received_response()); |
1144 ASSERT_TRUE(url_loader_client_.has_received_completion()); | 1087 ASSERT_TRUE(url_loader_client_.has_received_completion()); |
1145 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1088 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
1146 } | 1089 } |
1147 | 1090 |
| 1091 // Test the case where th other process tells the ResourceHandler to follow a |
| 1092 // redirect, despite the fact that no redirect has been received yet. |
1148 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1093 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
1149 MalformedFollowRedirectRequest) { | 1094 MalformedFollowRedirectRequest) { |
1150 handler_->FollowRedirect(); | 1095 handler_->FollowRedirect(); |
1151 | 1096 |
1152 EXPECT_TRUE(handler_->has_received_bad_message()); | 1097 EXPECT_TRUE(handler_->has_received_bad_message()); |
1153 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | |
1154 } | 1098 } |
1155 | 1099 |
1156 // Typically ResourceHandler methods are called in this order. | 1100 // Typically ResourceHandler methods are called in this order. |
1157 TEST_P( | 1101 TEST_P( |
1158 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1102 MojoAsyncResourceHandlerWithAllocationSizeTest, |
1159 OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnRespo
nseCompleted) { | 1103 OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnRespo
nseCompleted) { |
1160 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1104 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
1161 bool defer = false; | |
1162 | 1105 |
1163 ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 1106 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1164 ASSERT_FALSE(defer); | 1107 handler_wrapper_->OnWillStart(request_->url())); |
1165 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 1108 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
1166 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 1109 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1167 ASSERT_FALSE(defer); | 1110 handler_wrapper_->OnResponseStarted(response.get())); |
1168 | 1111 |
1169 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1112 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1170 url_loader_client_.RunUntilResponseReceived(); | 1113 url_loader_client_.RunUntilResponseReceived(); |
1171 | 1114 |
1172 int io_buffer_size = 0; | 1115 int io_buffer_size = 0; |
1173 scoped_refptr<net::IOBuffer> io_buffer; | 1116 scoped_refptr<net::IOBuffer> io_buffer; |
1174 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1117 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
1175 ASSERT_TRUE(io_buffer); | 1118 ASSERT_TRUE(io_buffer); |
1176 ASSERT_GT(io_buffer_size, 0); | 1119 ASSERT_GT(io_buffer_size, 0); |
1177 io_buffer->data()[0] = 'A'; | 1120 io_buffer->data()[0] = 'A'; |
1178 | 1121 |
1179 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | 1122 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
1180 url_loader_client_.RunUntilResponseBodyArrived(); | 1123 url_loader_client_.RunUntilResponseBodyArrived(); |
1181 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1124 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
1182 | 1125 |
1183 ASSERT_TRUE(handler_->OnReadCompleted(1, &defer)); | 1126 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1184 ASSERT_FALSE(defer); | 1127 handler_wrapper_->OnReadCompleted(1)); |
1185 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1128 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
1186 handler_->OnResponseCompleted(status, &defer); | 1129 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1187 ASSERT_FALSE(defer); | 1130 handler_wrapper_->OnResponseCompleted(status)); |
1188 | 1131 |
1189 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1132 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
1190 url_loader_client_.RunUntilComplete(); | 1133 url_loader_client_.RunUntilComplete(); |
1191 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1134 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
1192 | 1135 |
1193 // This is needed because |*io_buffer| may keep the data producer alive. | 1136 // This is needed because |*io_buffer| may keep the data producer alive. |
1194 io_buffer = nullptr; | 1137 io_buffer = nullptr; |
1195 | 1138 |
1196 std::string body; | 1139 std::string body; |
1197 while (true) { | 1140 while (true) { |
(...skipping 12 matching lines...) Expand all Loading... |
1210 } | 1153 } |
1211 } | 1154 } |
1212 EXPECT_EQ("A", body); | 1155 EXPECT_EQ("A", body); |
1213 } | 1156 } |
1214 | 1157 |
1215 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. | 1158 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. |
1216 TEST_P( | 1159 TEST_P( |
1217 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1160 MojoAsyncResourceHandlerWithAllocationSizeTest, |
1218 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { | 1161 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { |
1219 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1162 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
1220 bool defer = false; | |
1221 | 1163 |
1222 ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 1164 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1223 ASSERT_FALSE(defer); | 1165 handler_wrapper_->OnWillStart(request_->url())); |
1224 | 1166 |
1225 int io_buffer_size = 0; | 1167 int io_buffer_size = 0; |
1226 scoped_refptr<net::IOBuffer> io_buffer; | 1168 scoped_refptr<net::IOBuffer> io_buffer; |
1227 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1169 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
1228 ASSERT_TRUE(io_buffer); | 1170 ASSERT_TRUE(io_buffer); |
1229 ASSERT_GT(io_buffer_size, 0); | 1171 ASSERT_GT(io_buffer_size, 0); |
1230 io_buffer->data()[0] = 'B'; | 1172 io_buffer->data()[0] = 'B'; |
1231 | 1173 |
1232 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | 1174 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
1233 url_loader_client_.RunUntilResponseBodyArrived(); | 1175 url_loader_client_.RunUntilResponseBodyArrived(); |
1234 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1176 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
1235 | 1177 |
1236 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 1178 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
1237 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 1179 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1238 ASSERT_FALSE(defer); | 1180 handler_wrapper_->OnResponseStarted(response.get())); |
1239 | 1181 |
1240 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1182 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1241 url_loader_client_.RunUntilResponseReceived(); | 1183 url_loader_client_.RunUntilResponseReceived(); |
1242 | 1184 |
1243 ASSERT_TRUE(handler_->OnReadCompleted(1, &defer)); | 1185 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1244 ASSERT_FALSE(defer); | 1186 handler_wrapper_->OnReadCompleted(1)); |
1245 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1187 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
1246 handler_->OnResponseCompleted(status, &defer); | 1188 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
1247 ASSERT_FALSE(defer); | 1189 handler_wrapper_->OnResponseCompleted(status)); |
1248 | 1190 |
1249 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1191 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
1250 url_loader_client_.RunUntilComplete(); | 1192 url_loader_client_.RunUntilComplete(); |
1251 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1193 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
1252 | 1194 |
1253 // This is needed because |*io_buffer| may keep the data producer alive. | 1195 // This is needed because |*io_buffer| may keep the data producer alive. |
1254 io_buffer = nullptr; | 1196 io_buffer = nullptr; |
1255 | 1197 |
1256 std::string body; | 1198 std::string body; |
1257 while (true) { | 1199 while (true) { |
(...skipping 12 matching lines...) Expand all Loading... |
1270 } | 1212 } |
1271 } | 1213 } |
1272 EXPECT_EQ("B", body); | 1214 EXPECT_EQ("B", body); |
1273 } | 1215 } |
1274 | 1216 |
1275 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1217 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
1276 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1218 MojoAsyncResourceHandlerWithAllocationSizeTest, |
1277 ::testing::Values(8, 32 * 2014)); | 1219 ::testing::Values(8, 32 * 2014)); |
1278 } // namespace | 1220 } // namespace |
1279 } // namespace content | 1221 } // namespace content |
OLD | NEW |