| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/appcache/appcache_url_request_job.h" | 5 #include "content/browser/appcache/appcache_url_request_job.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 base::Bind(&ExpectNotRestarted))); | 495 base::Bind(&ExpectNotRestarted))); |
| 496 job->DeliverNetworkResponse(); | 496 job->DeliverNetworkResponse(); |
| 497 EXPECT_TRUE(job->is_delivering_network_response()); | 497 EXPECT_TRUE(job->is_delivering_network_response()); |
| 498 EXPECT_FALSE(job->has_been_started()); | 498 EXPECT_FALSE(job->has_been_started()); |
| 499 | 499 |
| 500 job.reset(new AppCacheURLRequestJob(request.get(), nullptr, storage, | 500 job.reset(new AppCacheURLRequestJob(request.get(), nullptr, storage, |
| 501 nullptr, false, | 501 nullptr, false, |
| 502 base::Bind(&ExpectNotRestarted))); | 502 base::Bind(&ExpectNotRestarted))); |
| 503 const GURL kManifestUrl("http://blah/"); | 503 const GURL kManifestUrl("http://blah/"); |
| 504 const int64_t kCacheId(1); | 504 const int64_t kCacheId(1); |
| 505 const int64_t kGroupId(1); | |
| 506 const AppCacheEntry kEntry(AppCacheEntry::EXPLICIT, 1); | 505 const AppCacheEntry kEntry(AppCacheEntry::EXPLICIT, 1); |
| 507 job->DeliverAppCachedResponse(kManifestUrl, kCacheId, kGroupId, | 506 job->DeliverAppCachedResponse(kManifestUrl, kCacheId, kEntry, false); |
| 508 kEntry, false); | |
| 509 EXPECT_FALSE(job->is_waiting()); | 507 EXPECT_FALSE(job->is_waiting()); |
| 510 EXPECT_TRUE(job->is_delivering_appcache_response()); | 508 EXPECT_TRUE(job->is_delivering_appcache_response()); |
| 511 EXPECT_FALSE(job->has_been_started()); | 509 EXPECT_FALSE(job->has_been_started()); |
| 512 EXPECT_EQ(kManifestUrl, job->manifest_url()); | 510 EXPECT_EQ(kManifestUrl, job->manifest_url()); |
| 513 EXPECT_EQ(kCacheId, job->cache_id()); | 511 EXPECT_EQ(kCacheId, job->cache_id()); |
| 514 EXPECT_EQ(kGroupId, job->group_id()); | |
| 515 EXPECT_EQ(kEntry.types(), job->entry().types()); | 512 EXPECT_EQ(kEntry.types(), job->entry().types()); |
| 516 EXPECT_EQ(kEntry.response_id(), job->entry().response_id()); | 513 EXPECT_EQ(kEntry.response_id(), job->entry().response_id()); |
| 517 | 514 |
| 518 TestFinished(); | 515 TestFinished(); |
| 519 } | 516 } |
| 520 | 517 |
| 521 // DeliverNetworkResponse -------------------------------------------------- | 518 // DeliverNetworkResponse -------------------------------------------------- |
| 522 | 519 |
| 523 void DeliverNetworkResponse() { | 520 void DeliverNetworkResponse() { |
| 524 // This test has async steps. | 521 // This test has async steps. |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 // 2. Use net::URLRequest to retrieve it. | 599 // 2. Use net::URLRequest to retrieve it. |
| 603 // 3. Verify we received what we expected to receive. | 600 // 3. Verify we received what we expected to receive. |
| 604 | 601 |
| 605 PushNextTask(base::Bind( | 602 PushNextTask(base::Bind( |
| 606 &AppCacheURLRequestJobTest::VerifyDeliverSmallAppCachedResponse, | 603 &AppCacheURLRequestJobTest::VerifyDeliverSmallAppCachedResponse, |
| 607 base::Unretained(this))); | 604 base::Unretained(this))); |
| 608 PushNextTask( | 605 PushNextTask( |
| 609 base::Bind(&AppCacheURLRequestJobTest::RequestAppCachedResource, | 606 base::Bind(&AppCacheURLRequestJobTest::RequestAppCachedResource, |
| 610 base::Unretained(this), false)); | 607 base::Unretained(this), false)); |
| 611 | 608 |
| 612 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 609 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 613 written_response_id_ = writer_->response_id(); | 610 written_response_id_ = writer_->response_id(); |
| 614 WriteBasicResponse(); | 611 WriteBasicResponse(); |
| 615 // Continues async | 612 // Continues async |
| 616 } | 613 } |
| 617 | 614 |
| 618 void RequestAppCachedResource(bool start_after_delivery_orders) { | 615 void RequestAppCachedResource(bool start_after_delivery_orders) { |
| 619 AppCacheStorage* storage = service_->storage(); | 616 AppCacheStorage* storage = service_->storage(); |
| 620 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 617 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
| 621 net::DEFAULT_PRIORITY, | 618 net::DEFAULT_PRIORITY, |
| 622 url_request_delegate_.get()); | 619 url_request_delegate_.get()); |
| 623 | 620 |
| 624 // Setup to create an AppCacheURLRequestJob with orders to deliver | 621 // Setup to create an AppCacheURLRequestJob with orders to deliver |
| 625 // a network response. | 622 // a network response. |
| 626 std::unique_ptr<AppCacheURLRequestJob> job( | 623 std::unique_ptr<AppCacheURLRequestJob> job( |
| 627 new AppCacheURLRequestJob(request_.get(), NULL, storage, NULL, false, | 624 new AppCacheURLRequestJob(request_.get(), NULL, storage, NULL, false, |
| 628 base::Bind(&ExpectNotRestarted))); | 625 base::Bind(&ExpectNotRestarted))); |
| 629 | 626 |
| 630 if (start_after_delivery_orders) { | 627 if (start_after_delivery_orders) { |
| 631 job->DeliverAppCachedResponse( | 628 job->DeliverAppCachedResponse( |
| 632 GURL(), 0, 111, | 629 GURL(), 111, |
| 633 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), | 630 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), false); |
| 634 false); | |
| 635 EXPECT_TRUE(job->is_delivering_appcache_response()); | 631 EXPECT_TRUE(job->is_delivering_appcache_response()); |
| 636 } | 632 } |
| 637 | 633 |
| 638 // Start the request. | 634 // Start the request. |
| 639 EXPECT_FALSE(job->has_been_started()); | 635 EXPECT_FALSE(job->has_been_started()); |
| 640 base::WeakPtr<AppCacheURLRequestJob> weak_job = job->GetWeakPtr(); | 636 base::WeakPtr<AppCacheURLRequestJob> weak_job = job->GetWeakPtr(); |
| 641 job_factory_->SetJob(std::move(job)); | 637 job_factory_->SetJob(std::move(job)); |
| 642 request_->Start(); | 638 request_->Start(); |
| 643 EXPECT_FALSE(job_factory_->has_job()); | 639 EXPECT_FALSE(job_factory_->has_job()); |
| 644 ASSERT_TRUE(weak_job); | 640 ASSERT_TRUE(weak_job); |
| 645 EXPECT_TRUE(weak_job->has_been_started()); | 641 EXPECT_TRUE(weak_job->has_been_started()); |
| 646 | 642 |
| 647 if (!start_after_delivery_orders) { | 643 if (!start_after_delivery_orders) { |
| 648 weak_job->DeliverAppCachedResponse( | 644 weak_job->DeliverAppCachedResponse( |
| 649 GURL(), 0, 111, | 645 GURL(), 111, |
| 650 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), false); | 646 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), false); |
| 651 ASSERT_TRUE(weak_job); | 647 ASSERT_TRUE(weak_job); |
| 652 EXPECT_TRUE(weak_job->is_delivering_appcache_response()); | 648 EXPECT_TRUE(weak_job->is_delivering_appcache_response()); |
| 653 } | 649 } |
| 654 | 650 |
| 655 // Completion is async. | 651 // Completion is async. |
| 656 } | 652 } |
| 657 | 653 |
| 658 void VerifyDeliverSmallAppCachedResponse() { | 654 void VerifyDeliverSmallAppCachedResponse() { |
| 659 EXPECT_TRUE(request_->status().is_success()); | 655 EXPECT_TRUE(request_->status().is_success()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 676 // 2. Use net::URLRequest to retrieve it. | 672 // 2. Use net::URLRequest to retrieve it. |
| 677 // 3. Verify we received what we expected to receive. | 673 // 3. Verify we received what we expected to receive. |
| 678 | 674 |
| 679 PushNextTask(base::Bind( | 675 PushNextTask(base::Bind( |
| 680 &AppCacheURLRequestJobTest::VerifyDeliverLargeAppCachedResponse, | 676 &AppCacheURLRequestJobTest::VerifyDeliverLargeAppCachedResponse, |
| 681 base::Unretained(this))); | 677 base::Unretained(this))); |
| 682 PushNextTask(base::Bind( | 678 PushNextTask(base::Bind( |
| 683 &AppCacheURLRequestJobTest::RequestAppCachedResource, | 679 &AppCacheURLRequestJobTest::RequestAppCachedResource, |
| 684 base::Unretained(this), true)); | 680 base::Unretained(this), true)); |
| 685 | 681 |
| 686 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 682 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 687 written_response_id_ = writer_->response_id(); | 683 written_response_id_ = writer_->response_id(); |
| 688 WriteLargeResponse(); | 684 WriteLargeResponse(); |
| 689 // Continues async | 685 // Continues async |
| 690 } | 686 } |
| 691 | 687 |
| 692 void WriteLargeResponse() { | 688 void WriteLargeResponse() { |
| 693 // 3, 1k blocks | 689 // 3, 1k blocks |
| 694 static const char kHttpHeaders[] = | 690 static const char kHttpHeaders[] = |
| 695 "HTTP/1.0 200 OK\0Content-Length: 3072\0\0"; | 691 "HTTP/1.0 200 OK\0Content-Length: 3072\0\0"; |
| 696 scoped_refptr<IOBuffer> body(new IOBuffer(kBlockSize * 3)); | 692 scoped_refptr<IOBuffer> body(new IOBuffer(kBlockSize * 3)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 719 void DeliverPartialResponse() { | 715 void DeliverPartialResponse() { |
| 720 // This test has several async steps. | 716 // This test has several async steps. |
| 721 // 1. Write a small response to response storage. | 717 // 1. Write a small response to response storage. |
| 722 // 2. Use net::URLRequest to retrieve it a subset using a range request | 718 // 2. Use net::URLRequest to retrieve it a subset using a range request |
| 723 // 3. Verify we received what we expected to receive. | 719 // 3. Verify we received what we expected to receive. |
| 724 PushNextTask(base::Bind( | 720 PushNextTask(base::Bind( |
| 725 &AppCacheURLRequestJobTest::VerifyDeliverPartialResponse, | 721 &AppCacheURLRequestJobTest::VerifyDeliverPartialResponse, |
| 726 base::Unretained(this))); | 722 base::Unretained(this))); |
| 727 PushNextTask(base::Bind( | 723 PushNextTask(base::Bind( |
| 728 &AppCacheURLRequestJobTest::MakeRangeRequest, base::Unretained(this))); | 724 &AppCacheURLRequestJobTest::MakeRangeRequest, base::Unretained(this))); |
| 729 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 725 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 730 written_response_id_ = writer_->response_id(); | 726 written_response_id_ = writer_->response_id(); |
| 731 WriteBasicResponse(); | 727 WriteBasicResponse(); |
| 732 // Continues async | 728 // Continues async |
| 733 } | 729 } |
| 734 | 730 |
| 735 void MakeRangeRequest() { | 731 void MakeRangeRequest() { |
| 736 AppCacheStorage* storage = service_->storage(); | 732 AppCacheStorage* storage = service_->storage(); |
| 737 request_ = empty_context_->CreateRequest(GURL("http://blah/"), | 733 request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
| 738 net::DEFAULT_PRIORITY, | 734 net::DEFAULT_PRIORITY, |
| 739 url_request_delegate_.get()); | 735 url_request_delegate_.get()); |
| 740 | 736 |
| 741 // Request a range, the 3 middle chars out of 'Hello' | 737 // Request a range, the 3 middle chars out of 'Hello' |
| 742 net::HttpRequestHeaders extra_headers; | 738 net::HttpRequestHeaders extra_headers; |
| 743 extra_headers.SetHeader("Range", "bytes= 1-3"); | 739 extra_headers.SetHeader("Range", "bytes= 1-3"); |
| 744 request_->SetExtraRequestHeaders(extra_headers); | 740 request_->SetExtraRequestHeaders(extra_headers); |
| 745 | 741 |
| 746 // Create job with orders to deliver an appcached entry. | 742 // Create job with orders to deliver an appcached entry. |
| 747 std::unique_ptr<AppCacheURLRequestJob> job( | 743 std::unique_ptr<AppCacheURLRequestJob> job( |
| 748 new AppCacheURLRequestJob(request_.get(), NULL, storage, NULL, false, | 744 new AppCacheURLRequestJob(request_.get(), NULL, storage, NULL, false, |
| 749 base::Bind(&ExpectNotRestarted))); | 745 base::Bind(&ExpectNotRestarted))); |
| 750 job->DeliverAppCachedResponse( | 746 job->DeliverAppCachedResponse( |
| 751 GURL(), 0, 111, | 747 GURL(), 111, |
| 752 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), | 748 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), false); |
| 753 false); | |
| 754 EXPECT_TRUE(job->is_delivering_appcache_response()); | 749 EXPECT_TRUE(job->is_delivering_appcache_response()); |
| 755 | 750 |
| 756 // Start the request. | 751 // Start the request. |
| 757 EXPECT_FALSE(job->has_been_started()); | 752 EXPECT_FALSE(job->has_been_started()); |
| 758 job_factory_->SetJob(std::move(job)); | 753 job_factory_->SetJob(std::move(job)); |
| 759 request_->Start(); | 754 request_->Start(); |
| 760 EXPECT_FALSE(job_factory_->has_job()); | 755 EXPECT_FALSE(job_factory_->has_job()); |
| 761 // Completion is async. | 756 // Completion is async. |
| 762 } | 757 } |
| 763 | 758 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 787 // 1. Write a large response to response storage. | 782 // 1. Write a large response to response storage. |
| 788 // 2. Use net::URLRequest to retrieve it. | 783 // 2. Use net::URLRequest to retrieve it. |
| 789 // 3. Cancel the request after data starts coming in. | 784 // 3. Cancel the request after data starts coming in. |
| 790 | 785 |
| 791 PushNextTask(base::Bind( | 786 PushNextTask(base::Bind( |
| 792 &AppCacheURLRequestJobTest::VerifyCancel, base::Unretained(this))); | 787 &AppCacheURLRequestJobTest::VerifyCancel, base::Unretained(this))); |
| 793 PushNextTask(base::Bind( | 788 PushNextTask(base::Bind( |
| 794 &AppCacheURLRequestJobTest::RequestAppCachedResource, | 789 &AppCacheURLRequestJobTest::RequestAppCachedResource, |
| 795 base::Unretained(this), true)); | 790 base::Unretained(this), true)); |
| 796 | 791 |
| 797 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 792 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 798 written_response_id_ = writer_->response_id(); | 793 written_response_id_ = writer_->response_id(); |
| 799 WriteLargeResponse(); | 794 WriteLargeResponse(); |
| 800 | 795 |
| 801 url_request_delegate_->kill_after_amount_received_ = kBlockSize; | 796 url_request_delegate_->kill_after_amount_received_ = kBlockSize; |
| 802 url_request_delegate_->kill_with_io_pending_ = false; | 797 url_request_delegate_->kill_with_io_pending_ = false; |
| 803 // Continues async | 798 // Continues async |
| 804 } | 799 } |
| 805 | 800 |
| 806 void VerifyCancel() { | 801 void VerifyCancel() { |
| 807 EXPECT_EQ(net::URLRequestStatus::CANCELED, | 802 EXPECT_EQ(net::URLRequestStatus::CANCELED, |
| 808 request_->status().status()); | 803 request_->status().status()); |
| 809 TestFinished(); | 804 TestFinished(); |
| 810 } | 805 } |
| 811 | 806 |
| 812 // CancelRequestWithIOPending -------------------------------------- | 807 // CancelRequestWithIOPending -------------------------------------- |
| 813 | 808 |
| 814 void CancelRequestWithIOPending() { | 809 void CancelRequestWithIOPending() { |
| 815 // This test has several async steps. | 810 // This test has several async steps. |
| 816 // 1. Write a large response to response storage. | 811 // 1. Write a large response to response storage. |
| 817 // 2. Use net::URLRequest to retrieve it. | 812 // 2. Use net::URLRequest to retrieve it. |
| 818 // 3. Cancel the request after data starts coming in. | 813 // 3. Cancel the request after data starts coming in. |
| 819 | 814 |
| 820 PushNextTask(base::Bind( | 815 PushNextTask(base::Bind( |
| 821 &AppCacheURLRequestJobTest::VerifyCancel, base::Unretained(this))); | 816 &AppCacheURLRequestJobTest::VerifyCancel, base::Unretained(this))); |
| 822 PushNextTask(base::Bind( | 817 PushNextTask(base::Bind( |
| 823 &AppCacheURLRequestJobTest::RequestAppCachedResource, | 818 &AppCacheURLRequestJobTest::RequestAppCachedResource, |
| 824 base::Unretained(this), true)); | 819 base::Unretained(this), true)); |
| 825 | 820 |
| 826 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 821 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 827 written_response_id_ = writer_->response_id(); | 822 written_response_id_ = writer_->response_id(); |
| 828 WriteLargeResponse(); | 823 WriteLargeResponse(); |
| 829 | 824 |
| 830 url_request_delegate_->kill_after_amount_received_ = kBlockSize; | 825 url_request_delegate_->kill_after_amount_received_ = kBlockSize; |
| 831 url_request_delegate_->kill_with_io_pending_ = true; | 826 url_request_delegate_->kill_with_io_pending_ = true; |
| 832 // Continues async | 827 // Continues async |
| 833 } | 828 } |
| 834 | 829 |
| 835 | 830 |
| 836 // Data members -------------------------------------------------------- | 831 // Data members -------------------------------------------------------- |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 896 | 891 |
| 897 TEST_F(AppCacheURLRequestJobTest, CancelRequest) { | 892 TEST_F(AppCacheURLRequestJobTest, CancelRequest) { |
| 898 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequest); | 893 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequest); |
| 899 } | 894 } |
| 900 | 895 |
| 901 TEST_F(AppCacheURLRequestJobTest, CancelRequestWithIOPending) { | 896 TEST_F(AppCacheURLRequestJobTest, CancelRequestWithIOPending) { |
| 902 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequestWithIOPending); | 897 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequestWithIOPending); |
| 903 } | 898 } |
| 904 | 899 |
| 905 } // namespace content | 900 } // namespace content |
| OLD | NEW |