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

Unified 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, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/appcache/appcache_url_request_job.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/appcache/appcache_url_request_job_unittest.cc
===================================================================
--- webkit/appcache/appcache_url_request_job_unittest.cc (revision 51565)
+++ webkit/appcache/appcache_url_request_job_unittest.cc (working copy)
@@ -617,6 +617,69 @@
TestFinished();
}
+ // DeliverPartialResponse --------------------------------------
+
+ void DeliverPartialResponse() {
+ // This test has several async steps.
+ // 1. Write a small response to response storage.
+ // 2. Use URLRequest to retrieve it a subset using a range request
+ // 3. Verify we received what we expected to receive.
+ PushNextTask(NewRunnableMethod(
+ this, &AppCacheURLRequestJobTest::VerifyDeliverPartialResponse));
+ PushNextTask(NewRunnableMethod(
+ this, &AppCacheURLRequestJobTest::MakeRangeRequest));
+ writer_.reset(service_->storage()->CreateResponseWriter(GURL()));
+ written_response_id_ = writer_->response_id();
+ WriteBasicResponse();
+ // Continues async
+ }
+
+ void MakeRangeRequest() {
+ AppCacheStorage* storage = service_->storage();
+ request_.reset(
+ new URLRequest(GURL("http://blah/"), url_request_delegate_.get()));
+
+ // Request a range, the 3 middle chars out of 'Hello'
+ net::HttpRequestHeaders extra_headers;
+ extra_headers.SetHeader("Range", "bytes= 1-3");
+ request_->SetExtraRequestHeaders(extra_headers);
+
+ // Create job with orders to deliver an appcached entry.
+ scoped_refptr<AppCacheURLRequestJob> job(
+ new AppCacheURLRequestJob(request_.get(), storage));
+ job->DeliverAppCachedResponse(
+ GURL(), 111,
+ AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_));
+ EXPECT_TRUE(job->is_delivering_appcache_response());
+
+ // Start the request.
+ EXPECT_FALSE(job->has_been_started());
+ mock_factory_job_ = job;
+ request_->Start();
+ EXPECT_FALSE(mock_factory_job_);
+ EXPECT_TRUE(job->has_been_started());
+ // Completion is async.
+ }
+
+ void VerifyDeliverPartialResponse() {
+ EXPECT_TRUE(request_->status().is_success());
+ EXPECT_EQ(3, url_request_delegate_->amount_received_);
+ EXPECT_EQ(0, memcmp(kHttpBasicBody + 1,
+ url_request_delegate_->received_data_->data(),
+ 3));
+ net::HttpResponseHeaders* headers =
+ url_request_delegate_->received_info_.headers.get();
+ EXPECT_EQ(206, headers->response_code());
+ EXPECT_EQ(3, headers->GetContentLength());
+ int64 range_start, range_end, object_size;
+ EXPECT_TRUE(
+ headers->GetContentRange(&range_start, &range_end, &object_size));
+ EXPECT_EQ(1, range_start);
+ EXPECT_EQ(3, range_end);
+ EXPECT_EQ(5, object_size);
+ TestFinished();
+ }
+
// CancelRequest --------------------------------------
void CancelRequest() {
@@ -732,6 +795,10 @@
RunTestOnIOThread(&AppCacheURLRequestJobTest::DeliverLargeAppCachedResponse);
}
+TEST_F(AppCacheURLRequestJobTest, DeliverPartialResponse) {
+ RunTestOnIOThread(&AppCacheURLRequestJobTest::DeliverPartialResponse);
+}
+
TEST_F(AppCacheURLRequestJobTest, CancelRequest) {
RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequest);
}
« 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