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

Side by Side Diff: webkit/appcache/appcache_url_request_job_unittest.cc

Issue 2876040: Fix a regression with satisfying range requests out of the appcache and add a... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/appcache/appcache_url_request_job.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "base/compiler_specific.h" 5 #include "base/compiler_specific.h"
6 #include "base/pickle.h" 6 #include "base/pickle.h"
7 #include "base/thread.h" 7 #include "base/thread.h"
8 #include "base/waitable_event.h" 8 #include "base/waitable_event.h"
9 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
10 #include "net/url_request/url_request.h" 10 #include "net/url_request/url_request.h"
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 EXPECT_TRUE(CompareHttpResponseInfos( 610 EXPECT_TRUE(CompareHttpResponseInfos(
611 write_info_buffer_->http_info.get(), 611 write_info_buffer_->http_info.get(),
612 &url_request_delegate_->received_info_)); 612 &url_request_delegate_->received_info_));
613 EXPECT_EQ(3072, url_request_delegate_->amount_received_); 613 EXPECT_EQ(3072, url_request_delegate_->amount_received_);
614 char* p = url_request_delegate_->received_data_->data(); 614 char* p = url_request_delegate_->received_data_->data();
615 for (int i = 0; i < 3; ++i, p += kBlockSize) 615 for (int i = 0; i < 3; ++i, p += kBlockSize)
616 EXPECT_TRUE(CheckData(i + 1, p, kBlockSize)); 616 EXPECT_TRUE(CheckData(i + 1, p, kBlockSize));
617 TestFinished(); 617 TestFinished();
618 } 618 }
619 619
620 // DeliverPartialResponse --------------------------------------
621
622 void DeliverPartialResponse() {
623 // This test has several async steps.
624 // 1. Write a small response to response storage.
625 // 2. Use URLRequest to retrieve it a subset using a range request
626 // 3. Verify we received what we expected to receive.
627 PushNextTask(NewRunnableMethod(
628 this, &AppCacheURLRequestJobTest::VerifyDeliverPartialResponse));
629 PushNextTask(NewRunnableMethod(
630 this, &AppCacheURLRequestJobTest::MakeRangeRequest));
631 writer_.reset(service_->storage()->CreateResponseWriter(GURL()));
632 written_response_id_ = writer_->response_id();
633 WriteBasicResponse();
634 // Continues async
635 }
636
637 void MakeRangeRequest() {
638 AppCacheStorage* storage = service_->storage();
639 request_.reset(
640 new URLRequest(GURL("http://blah/"), url_request_delegate_.get()));
641
642 // Request a range, the 3 middle chars out of 'Hello'
643 net::HttpRequestHeaders extra_headers;
644 extra_headers.SetHeader("Range", "bytes= 1-3");
645 request_->SetExtraRequestHeaders(extra_headers);
646
647 // Create job with orders to deliver an appcached entry.
648 scoped_refptr<AppCacheURLRequestJob> job(
649 new AppCacheURLRequestJob(request_.get(), storage));
650 job->DeliverAppCachedResponse(
651 GURL(), 111,
652 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_));
653 EXPECT_TRUE(job->is_delivering_appcache_response());
654
655 // Start the request.
656 EXPECT_FALSE(job->has_been_started());
657 mock_factory_job_ = job;
658 request_->Start();
659 EXPECT_FALSE(mock_factory_job_);
660 EXPECT_TRUE(job->has_been_started());
661 // Completion is async.
662 }
663
664 void VerifyDeliverPartialResponse() {
665 EXPECT_TRUE(request_->status().is_success());
666 EXPECT_EQ(3, url_request_delegate_->amount_received_);
667 EXPECT_EQ(0, memcmp(kHttpBasicBody + 1,
668 url_request_delegate_->received_data_->data(),
669 3));
670 net::HttpResponseHeaders* headers =
671 url_request_delegate_->received_info_.headers.get();
672 EXPECT_EQ(206, headers->response_code());
673 EXPECT_EQ(3, headers->GetContentLength());
674 int64 range_start, range_end, object_size;
675 EXPECT_TRUE(
676 headers->GetContentRange(&range_start, &range_end, &object_size));
677 EXPECT_EQ(1, range_start);
678 EXPECT_EQ(3, range_end);
679 EXPECT_EQ(5, object_size);
680 TestFinished();
681 }
682
620 // CancelRequest -------------------------------------- 683 // CancelRequest --------------------------------------
621 684
622 void CancelRequest() { 685 void CancelRequest() {
623 // This test has several async steps. 686 // This test has several async steps.
624 // 1. Write a large response to response storage. 687 // 1. Write a large response to response storage.
625 // 2. Use URLRequest to retrieve it. 688 // 2. Use URLRequest to retrieve it.
626 // 3. Cancel the request after data starts coming in. 689 // 3. Cancel the request after data starts coming in.
627 690
628 PushNextTask(NewRunnableMethod( 691 PushNextTask(NewRunnableMethod(
629 this, &AppCacheURLRequestJobTest::VerifyCancel)); 692 this, &AppCacheURLRequestJobTest::VerifyCancel));
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 } 788 }
726 789
727 TEST_F(AppCacheURLRequestJobTest, DeliverSmallAppCachedResponse) { 790 TEST_F(AppCacheURLRequestJobTest, DeliverSmallAppCachedResponse) {
728 RunTestOnIOThread(&AppCacheURLRequestJobTest::DeliverSmallAppCachedResponse); 791 RunTestOnIOThread(&AppCacheURLRequestJobTest::DeliverSmallAppCachedResponse);
729 } 792 }
730 793
731 TEST_F(AppCacheURLRequestJobTest, DeliverLargeAppCachedResponse) { 794 TEST_F(AppCacheURLRequestJobTest, DeliverLargeAppCachedResponse) {
732 RunTestOnIOThread(&AppCacheURLRequestJobTest::DeliverLargeAppCachedResponse); 795 RunTestOnIOThread(&AppCacheURLRequestJobTest::DeliverLargeAppCachedResponse);
733 } 796 }
734 797
798 TEST_F(AppCacheURLRequestJobTest, DeliverPartialResponse) {
799 RunTestOnIOThread(&AppCacheURLRequestJobTest::DeliverPartialResponse);
800 }
801
735 TEST_F(AppCacheURLRequestJobTest, CancelRequest) { 802 TEST_F(AppCacheURLRequestJobTest, CancelRequest) {
736 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequest); 803 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequest);
737 } 804 }
738 805
739 TEST_F(AppCacheURLRequestJobTest, CancelRequestWithIOPending) { 806 TEST_F(AppCacheURLRequestJobTest, CancelRequestWithIOPending) {
740 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequestWithIOPending); 807 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequestWithIOPending);
741 } 808 }
742 809
743 } // namespace appcache 810 } // namespace appcache
744 811
745 // AppCacheURLRequestJobTest is expected to always live longer than the 812 // AppCacheURLRequestJobTest is expected to always live longer than the
746 // runnable methods. This lets us call NewRunnableMethod on its instances. 813 // runnable methods. This lets us call NewRunnableMethod on its instances.
747 DISABLE_RUNNABLE_METHOD_REFCOUNT(appcache::AppCacheURLRequestJobTest); 814 DISABLE_RUNNABLE_METHOD_REFCOUNT(appcache::AppCacheURLRequestJobTest);
OLDNEW
« no previous file with comments | « webkit/appcache/appcache_url_request_job.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698