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

Side by Side Diff: net/http/http_cache_unittest.cc

Issue 839143002: Roll Chrome into Mojo. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/http/http_cache_transaction.cc ('k') | net/http/http_network_session.h » ('j') | 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/http/http_cache.h" 5 #include "net/http/http_cache.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 net::LoadTimingInfo* load_timing_info) { 178 net::LoadTimingInfo* load_timing_info) {
179 RunTransactionTestBase(cache, trans_info, MockHttpRequest(trans_info), 179 RunTransactionTestBase(cache, trans_info, MockHttpRequest(trans_info),
180 NULL, log, load_timing_info, NULL); 180 NULL, log, load_timing_info, NULL);
181 } 181 }
182 182
183 void RunTransactionTest(net::HttpCache* cache, 183 void RunTransactionTest(net::HttpCache* cache,
184 const MockTransaction& trans_info) { 184 const MockTransaction& trans_info) {
185 RunTransactionTestAndGetTiming(cache, trans_info, net::BoundNetLog(), NULL); 185 RunTransactionTestAndGetTiming(cache, trans_info, net::BoundNetLog(), NULL);
186 } 186 }
187 187
188 void RunTransactionTestWithLog(net::HttpCache* cache,
189 const MockTransaction& trans_info,
190 const net::BoundNetLog& log) {
191 RunTransactionTestAndGetTiming(cache, trans_info, log, NULL);
192 }
193
188 void RunTransactionTestWithResponseInfo(net::HttpCache* cache, 194 void RunTransactionTestWithResponseInfo(net::HttpCache* cache,
189 const MockTransaction& trans_info, 195 const MockTransaction& trans_info,
190 net::HttpResponseInfo* response) { 196 net::HttpResponseInfo* response) {
191 RunTransactionTestWithRequest(cache, trans_info, MockHttpRequest(trans_info), 197 RunTransactionTestWithRequest(cache, trans_info, MockHttpRequest(trans_info),
192 response); 198 response);
193 } 199 }
194 200
195 void RunTransactionTestWithResponseInfoAndGetTiming( 201 void RunTransactionTestWithResponseInfoAndGetTiming(
196 net::HttpCache* cache, 202 net::HttpCache* cache,
197 const MockTransaction& trans_info, 203 const MockTransaction& trans_info,
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 286
281 // Returns only 416 or 304 when set. 287 // Returns only 416 or 304 when set.
282 void set_not_modified(bool value) { not_modified_ = value; } 288 void set_not_modified(bool value) { not_modified_ = value; }
283 289
284 // Returns 206 when revalidating a range (instead of 304). 290 // Returns 206 when revalidating a range (instead of 304).
285 void set_modified(bool value) { modified_ = value; } 291 void set_modified(bool value) { modified_ = value; }
286 292
287 // Returns 200 instead of 206 (a malformed response overall). 293 // Returns 200 instead of 206 (a malformed response overall).
288 void set_bad_200(bool value) { bad_200_ = value; } 294 void set_bad_200(bool value) { bad_200_ = value; }
289 295
296 // Other than regular range related behavior (and the flags mentioned above),
297 // the server reacts to requests headers like so:
298 // X-Require-Mock-Auth -> return 401.
299 // X-Return-Default-Range -> assume 40-49 was requested.
290 static void RangeHandler(const net::HttpRequestInfo* request, 300 static void RangeHandler(const net::HttpRequestInfo* request,
291 std::string* response_status, 301 std::string* response_status,
292 std::string* response_headers, 302 std::string* response_headers,
293 std::string* response_data); 303 std::string* response_data);
294 304
295 private: 305 private:
296 static bool not_modified_; 306 static bool not_modified_;
297 static bool modified_; 307 static bool modified_;
298 static bool bad_200_; 308 static bool bad_200_;
299 DISALLOW_COPY_AND_ASSIGN(RangeTransactionServer); 309 DISALLOW_COPY_AND_ASSIGN(RangeTransactionServer);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 ranges.size() != 1) { 359 ranges.size() != 1) {
350 // This is not a byte range request. We return 200. 360 // This is not a byte range request. We return 200.
351 response_status->assign("HTTP/1.1 200 OK"); 361 response_status->assign("HTTP/1.1 200 OK");
352 response_headers->assign("Date: Wed, 28 Nov 2007 09:40:09 GMT"); 362 response_headers->assign("Date: Wed, 28 Nov 2007 09:40:09 GMT");
353 response_data->assign("Not a range"); 363 response_data->assign("Not a range");
354 return; 364 return;
355 } 365 }
356 366
357 // We can handle this range request. 367 // We can handle this range request.
358 net::HttpByteRange byte_range = ranges[0]; 368 net::HttpByteRange byte_range = ranges[0];
369
370 if (request->extra_headers.HasHeader("X-Return-Default-Range")) {
371 byte_range.set_first_byte_position(40);
372 byte_range.set_last_byte_position(49);
373 }
374
359 if (byte_range.first_byte_position() > 79) { 375 if (byte_range.first_byte_position() > 79) {
360 response_status->assign("HTTP/1.1 416 Requested Range Not Satisfiable"); 376 response_status->assign("HTTP/1.1 416 Requested Range Not Satisfiable");
361 response_data->clear(); 377 response_data->clear();
362 return; 378 return;
363 } 379 }
364 380
365 EXPECT_TRUE(byte_range.ComputeBounds(80)); 381 EXPECT_TRUE(byte_range.ComputeBounds(80));
366 int start = static_cast<int>(byte_range.first_byte_position()); 382 int start = static_cast<int>(byte_range.first_byte_position());
367 int end = static_cast<int>(byte_range.last_byte_position()); 383 int end = static_cast<int>(byte_range.last_byte_position());
368 384
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 "Accept-Ranges: bytes\n" 429 "Accept-Ranges: bytes\n"
414 "Content-Length: 10\n", 430 "Content-Length: 10\n",
415 base::Time(), 431 base::Time(),
416 "rg: 40-49 ", 432 "rg: 40-49 ",
417 TEST_MODE_NORMAL, 433 TEST_MODE_NORMAL,
418 &RangeTransactionServer::RangeHandler, 434 &RangeTransactionServer::RangeHandler,
419 0, 435 0,
420 net::OK 436 net::OK
421 }; 437 };
422 438
439 const char kFullRangeData[] =
440 "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 "
441 "rg: 40-49 rg: 50-59 rg: 60-69 rg: 70-79 ";
442
423 // Verifies the response headers (|response|) match a partial content 443 // Verifies the response headers (|response|) match a partial content
424 // response for the range starting at |start| and ending at |end|. 444 // response for the range starting at |start| and ending at |end|.
425 void Verify206Response(std::string response, int start, int end) { 445 void Verify206Response(std::string response, int start, int end) {
426 std::string raw_headers(net::HttpUtil::AssembleRawHeaders(response.data(), 446 std::string raw_headers(net::HttpUtil::AssembleRawHeaders(response.data(),
427 response.size())); 447 response.size()));
428 scoped_refptr<net::HttpResponseHeaders> headers( 448 scoped_refptr<net::HttpResponseHeaders> headers(
429 new net::HttpResponseHeaders(raw_headers)); 449 new net::HttpResponseHeaders(raw_headers));
430 450
431 ASSERT_EQ(206, headers->response_code()); 451 ASSERT_EQ(206, headers->response_code());
432 452
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 } 547 }
528 548
529 // Modifies |entries| to only include log entries created by the cache layer and 549 // Modifies |entries| to only include log entries created by the cache layer and
530 // asserted on in these tests. 550 // asserted on in these tests.
531 void FilterLogEntries(net::CapturingNetLog::CapturedEntryList* entries) { 551 void FilterLogEntries(net::CapturingNetLog::CapturedEntryList* entries) {
532 entries->erase(std::remove_if(entries->begin(), entries->end(), 552 entries->erase(std::remove_if(entries->begin(), entries->end(),
533 &ShouldIgnoreLogEntry), 553 &ShouldIgnoreLogEntry),
534 entries->end()); 554 entries->end());
535 } 555 }
536 556
557 bool LogContainsEventType(const net::CapturingBoundNetLog& log,
558 net::NetLog::EventType expected) {
559 net::CapturingNetLog::CapturedEntryList entries;
560 log.GetEntries(&entries);
561 for (size_t i = 0; i < entries.size(); i++) {
562 if (entries[i].type == expected)
563 return true;
564 }
565 return false;
566 }
567
537 } // namespace 568 } // namespace
538 569
539 570
540 //----------------------------------------------------------------------------- 571 //-----------------------------------------------------------------------------
541 // Tests. 572 // Tests.
542 573
543 TEST(HttpCache, CreateThenDestroy) { 574 TEST(HttpCache, CreateThenDestroy) {
544 MockHttpCache cache; 575 MockHttpCache cache;
545 576
546 scoped_ptr<net::HttpTransaction> trans; 577 scoped_ptr<net::HttpTransaction> trans;
(...skipping 3073 matching lines...) Expand 10 before | Expand all | Expand 10 after
3620 transaction.request_headers = "If-Range: bla\r\n" 3651 transaction.request_headers = "If-Range: bla\r\n"
3621 EXTRA_HEADER 3652 EXTRA_HEADER
3622 "Range: bytes = 40-49\r\n"; 3653 "Range: bytes = 40-49\r\n";
3623 RunTransactionTest(cache.http_cache(), transaction); 3654 RunTransactionTest(cache.http_cache(), transaction);
3624 3655
3625 EXPECT_EQ(3, cache.network_layer()->transaction_count()); 3656 EXPECT_EQ(3, cache.network_layer()->transaction_count());
3626 EXPECT_EQ(0, cache.disk_cache()->open_count()); 3657 EXPECT_EQ(0, cache.disk_cache()->open_count());
3627 EXPECT_EQ(0, cache.disk_cache()->create_count()); 3658 EXPECT_EQ(0, cache.disk_cache()->create_count());
3628 } 3659 }
3629 3660
3661 TEST(HttpCache, SimpleGET_DoesntLogHeaders) {
3662 MockHttpCache cache;
3663
3664 net::CapturingBoundNetLog log;
3665 RunTransactionTestWithLog(cache.http_cache(), kSimpleGET_Transaction,
3666 log.bound());
3667
3668 EXPECT_FALSE(LogContainsEventType(
3669 log, net::NetLog::TYPE_HTTP_CACHE_CALLER_REQUEST_HEADERS));
3670 }
3671
3672 TEST(HttpCache, RangeGET_LogsHeaders) {
3673 MockHttpCache cache;
3674
3675 net::CapturingBoundNetLog log;
3676 RunTransactionTestWithLog(cache.http_cache(), kRangeGET_Transaction,
3677 log.bound());
3678
3679 EXPECT_TRUE(LogContainsEventType(
3680 log, net::NetLog::TYPE_HTTP_CACHE_CALLER_REQUEST_HEADERS));
3681 }
3682
3683 TEST(HttpCache, ExternalValidation_LogsHeaders) {
3684 MockHttpCache cache;
3685
3686 net::CapturingBoundNetLog log;
3687 MockTransaction transaction(kSimpleGET_Transaction);
3688 transaction.request_headers = "If-None-Match: foo\r\n" EXTRA_HEADER;
3689 RunTransactionTestWithLog(cache.http_cache(), transaction, log.bound());
3690
3691 EXPECT_TRUE(LogContainsEventType(
3692 log, net::NetLog::TYPE_HTTP_CACHE_CALLER_REQUEST_HEADERS));
3693 }
3694
3695 TEST(HttpCache, SpecialHeaders_LogsHeaders) {
3696 MockHttpCache cache;
3697
3698 net::CapturingBoundNetLog log;
3699 MockTransaction transaction(kSimpleGET_Transaction);
3700 transaction.request_headers = "cache-control: no-cache\r\n" EXTRA_HEADER;
3701 RunTransactionTestWithLog(cache.http_cache(), transaction, log.bound());
3702
3703 EXPECT_TRUE(LogContainsEventType(
3704 log, net::NetLog::TYPE_HTTP_CACHE_CALLER_REQUEST_HEADERS));
3705 }
3706
3630 // Tests that receiving 206 for a regular request is handled correctly. 3707 // Tests that receiving 206 for a regular request is handled correctly.
3631 TEST(HttpCache, GET_Crazy206) { 3708 TEST(HttpCache, GET_Crazy206) {
3632 MockHttpCache cache; 3709 MockHttpCache cache;
3633 3710
3634 // Write to the cache. 3711 // Write to the cache.
3635 MockTransaction transaction(kRangeGET_TransactionOK); 3712 MockTransaction transaction(kRangeGET_TransactionOK);
3636 AddMockTransaction(&transaction); 3713 AddMockTransaction(&transaction);
3637 transaction.request_headers = EXTRA_HEADER; 3714 transaction.request_headers = EXTRA_HEADER;
3638 transaction.handler = NULL; 3715 transaction.handler = NULL;
3639 RunTransactionTest(cache.http_cache(), transaction); 3716 RunTransactionTest(cache.http_cache(), transaction);
(...skipping 21 matching lines...) Expand all
3661 transaction.status = "HTTP/1.1 416 Requested Range Not Satisfiable"; 3738 transaction.status = "HTTP/1.1 416 Requested Range Not Satisfiable";
3662 RunTransactionTest(cache.http_cache(), transaction); 3739 RunTransactionTest(cache.http_cache(), transaction);
3663 3740
3664 EXPECT_EQ(1, cache.network_layer()->transaction_count()); 3741 EXPECT_EQ(1, cache.network_layer()->transaction_count());
3665 EXPECT_EQ(0, cache.disk_cache()->open_count()); 3742 EXPECT_EQ(0, cache.disk_cache()->open_count());
3666 EXPECT_EQ(1, cache.disk_cache()->create_count()); 3743 EXPECT_EQ(1, cache.disk_cache()->create_count());
3667 3744
3668 RemoveMockTransaction(&transaction); 3745 RemoveMockTransaction(&transaction);
3669 } 3746 }
3670 3747
3671 // Tests that we store partial responses that can't be validated, as they can 3748 // Tests that we don't store partial responses that can't be validated.
3672 // be used for requests that don't require revalidation.
3673 TEST(HttpCache, RangeGET_NoStrongValidators) { 3749 TEST(HttpCache, RangeGET_NoStrongValidators) {
3674 MockHttpCache cache; 3750 MockHttpCache cache;
3675 std::string headers; 3751 std::string headers;
3676 3752
3677 // Write to the cache (40-49). 3753 // Attempt to write to the cache (40-49).
3678 MockTransaction transaction(kRangeGET_TransactionOK); 3754 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
3679 AddMockTransaction(&transaction);
3680 transaction.response_headers = "Content-Length: 10\n" 3755 transaction.response_headers = "Content-Length: 10\n"
3681 "Cache-Control: max-age=3600\n" 3756 "Cache-Control: max-age=3600\n"
3682 "ETag: w/\"foo\"\n"; 3757 "ETag: w/\"foo\"\n";
3683 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers); 3758 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
3684 3759
3685 Verify206Response(headers, 40, 49); 3760 Verify206Response(headers, 40, 49);
3686 EXPECT_EQ(1, cache.network_layer()->transaction_count()); 3761 EXPECT_EQ(1, cache.network_layer()->transaction_count());
3687 EXPECT_EQ(0, cache.disk_cache()->open_count()); 3762 EXPECT_EQ(0, cache.disk_cache()->open_count());
3688 EXPECT_EQ(1, cache.disk_cache()->create_count()); 3763 EXPECT_EQ(1, cache.disk_cache()->create_count());
3689 3764
3690 // Now verify that there's cached data. 3765 // Now verify that there's no cached data.
3691 RunTransactionTestWithResponse(cache.http_cache(), kRangeGET_TransactionOK, 3766 RunTransactionTestWithResponse(cache.http_cache(), kRangeGET_TransactionOK,
3692 &headers); 3767 &headers);
3693 3768
3694 Verify206Response(headers, 40, 49); 3769 Verify206Response(headers, 40, 49);
3695 EXPECT_EQ(1, cache.network_layer()->transaction_count()); 3770 EXPECT_EQ(2, cache.network_layer()->transaction_count());
3696 EXPECT_EQ(1, cache.disk_cache()->open_count()); 3771 EXPECT_EQ(0, cache.disk_cache()->open_count());
3697 EXPECT_EQ(1, cache.disk_cache()->create_count()); 3772 EXPECT_EQ(2, cache.disk_cache()->create_count());
3698
3699 RemoveMockTransaction(&transaction);
3700 } 3773 }
3701 3774
3702 // Tests failures to validate cache partial responses that lack strong 3775 // Tests failures to conditionalize byte range requests.
3703 // validators. 3776 TEST(HttpCache, RangeGET_NoConditionalization) {
3704 TEST(HttpCache, RangeGET_NoValidation) {
3705 MockHttpCache cache; 3777 MockHttpCache cache;
3778 cache.FailConditionalizations();
3706 std::string headers; 3779 std::string headers;
3707 3780
3708 // Write to the cache (40-49). 3781 // Write to the cache (40-49).
3709 MockTransaction transaction(kRangeGET_TransactionOK); 3782 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
3710 AddMockTransaction(&transaction);
3711 transaction.response_headers = "Content-Length: 10\n" 3783 transaction.response_headers = "Content-Length: 10\n"
3712 "ETag: w/\"foo\"\n"; 3784 "ETag: \"foo\"\n";
3713 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers); 3785 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
3714 3786
3715 Verify206Response(headers, 40, 49); 3787 Verify206Response(headers, 40, 49);
3788 EXPECT_EQ(1, cache.network_layer()->transaction_count());
3789 EXPECT_EQ(0, cache.disk_cache()->open_count());
3790 EXPECT_EQ(1, cache.disk_cache()->create_count());
3791
3792 // Now verify that the cached data is not used.
3793 RunTransactionTestWithResponse(cache.http_cache(), kRangeGET_TransactionOK,
3794 &headers);
3795
3796 Verify206Response(headers, 40, 49);
3797 EXPECT_EQ(2, cache.network_layer()->transaction_count());
3798 EXPECT_EQ(1, cache.disk_cache()->open_count());
3799 EXPECT_EQ(2, cache.disk_cache()->create_count());
3800 }
3801
3802 // Tests that restarting a partial request when the cached data cannot be
3803 // revalidated logs an event.
3804 TEST(HttpCache, RangeGET_NoValidation_LogsRestart) {
3805 MockHttpCache cache;
3806 cache.FailConditionalizations();
3807
3808 // Write to the cache (40-49).
3809 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
3810 transaction.response_headers = "Content-Length: 10\n"
3811 "ETag: \"foo\"\n";
3812 RunTransactionTest(cache.http_cache(), transaction);
3813
3814 // Now verify that the cached data is not used.
3815 net::CapturingBoundNetLog log;
3816 RunTransactionTestWithLog(cache.http_cache(), kRangeGET_TransactionOK,
3817 log.bound());
3818
3819 EXPECT_TRUE(LogContainsEventType(
3820 log, net::NetLog::TYPE_HTTP_CACHE_RESTART_PARTIAL_REQUEST));
3821 }
3822
3823 // Tests that a failure to conditionalize a regular request (no range) with a
3824 // sparse entry results in a full response.
3825 TEST(HttpCache, GET_NoConditionalization) {
3826 MockHttpCache cache;
3827 cache.FailConditionalizations();
3828 std::string headers;
3829
3830 // Write to the cache (40-49).
3831 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
3832 transaction.response_headers = "Content-Length: 10\n"
3833 "ETag: \"foo\"\n";
3834 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
3835
3836 Verify206Response(headers, 40, 49);
3716 EXPECT_EQ(1, cache.network_layer()->transaction_count()); 3837 EXPECT_EQ(1, cache.network_layer()->transaction_count());
3717 EXPECT_EQ(0, cache.disk_cache()->open_count()); 3838 EXPECT_EQ(0, cache.disk_cache()->open_count());
3718 EXPECT_EQ(1, cache.disk_cache()->create_count()); 3839 EXPECT_EQ(1, cache.disk_cache()->create_count());
3719 3840
3720 // Now verify that the cached data is not used. 3841 // Now verify that the cached data is not used.
3721 RunTransactionTestWithResponse(cache.http_cache(), kRangeGET_TransactionOK, 3842 // Don't ask for a range. The cache will attempt to use the cached data but
3722 &headers); 3843 // should discard it as it cannot be validated. A regular request should go
3844 // to the server and a new entry should be created.
3845 transaction.request_headers = EXTRA_HEADER;
3846 transaction.data = "Not a range";
3847 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
3723 3848
3724 Verify206Response(headers, 40, 49); 3849 EXPECT_EQ(0U, headers.find("HTTP/1.1 200 OK\n"));
3725 EXPECT_EQ(2, cache.network_layer()->transaction_count()); 3850 EXPECT_EQ(2, cache.network_layer()->transaction_count());
3726 EXPECT_EQ(1, cache.disk_cache()->open_count()); 3851 EXPECT_EQ(1, cache.disk_cache()->open_count());
3727 EXPECT_EQ(2, cache.disk_cache()->create_count()); 3852 EXPECT_EQ(2, cache.disk_cache()->create_count());
3728 3853
3729 RemoveMockTransaction(&transaction); 3854 // The last response was saved.
3855 RunTransactionTest(cache.http_cache(), transaction);
3856 EXPECT_EQ(3, cache.network_layer()->transaction_count());
3857 EXPECT_EQ(2, cache.disk_cache()->open_count());
3858 EXPECT_EQ(2, cache.disk_cache()->create_count());
3859 }
3860
3861 // Verifies that conditionalization failures when asking for a range that would
3862 // require the cache to modify the range to ask, result in a network request
3863 // that matches the user's one.
3864 TEST(HttpCache, RangeGET_NoConditionalization2) {
3865 MockHttpCache cache;
3866 cache.FailConditionalizations();
3867 std::string headers;
3868
3869 // Write to the cache (40-49).
3870 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
3871 transaction.response_headers = "Content-Length: 10\n"
3872 "ETag: \"foo\"\n";
3873 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
3874
3875 Verify206Response(headers, 40, 49);
3876 EXPECT_EQ(1, cache.network_layer()->transaction_count());
3877 EXPECT_EQ(0, cache.disk_cache()->open_count());
3878 EXPECT_EQ(1, cache.disk_cache()->create_count());
3879
3880 // Now verify that the cached data is not used.
3881 // Ask for a range that extends before and after the cached data so that the
3882 // cache would normally mix data from three sources. After deleting the entry,
3883 // the response will come from a single network request.
3884 transaction.request_headers = "Range: bytes = 20-59\r\n" EXTRA_HEADER;
3885 transaction.data = "rg: 20-29 rg: 30-39 rg: 40-49 rg: 50-59 ";
3886 transaction.response_headers = kRangeGET_TransactionOK.response_headers;
3887 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
3888
3889 Verify206Response(headers, 20, 59);
3890 EXPECT_EQ(2, cache.network_layer()->transaction_count());
3891 EXPECT_EQ(1, cache.disk_cache()->open_count());
3892 EXPECT_EQ(2, cache.disk_cache()->create_count());
3893
3894 // The last response was saved.
3895 RunTransactionTest(cache.http_cache(), transaction);
3896 EXPECT_EQ(2, cache.network_layer()->transaction_count());
3897 EXPECT_EQ(2, cache.disk_cache()->open_count());
3898 EXPECT_EQ(2, cache.disk_cache()->create_count());
3730 } 3899 }
3731 3900
3732 // Tests that we cache partial responses that lack content-length. 3901 // Tests that we cache partial responses that lack content-length.
3733 TEST(HttpCache, RangeGET_NoContentLength) { 3902 TEST(HttpCache, RangeGET_NoContentLength) {
3734 MockHttpCache cache; 3903 MockHttpCache cache;
3735 std::string headers; 3904 std::string headers;
3736 3905
3737 // Attempt to write to the cache (40-49). 3906 // Attempt to write to the cache (40-49).
3738 MockTransaction transaction(kRangeGET_TransactionOK); 3907 MockTransaction transaction(kRangeGET_TransactionOK);
3739 AddMockTransaction(&transaction); 3908 AddMockTransaction(&transaction);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
3813 3982
3814 Verify206Response(headers, 20, 59); 3983 Verify206Response(headers, 20, 59);
3815 EXPECT_EQ(4, cache.network_layer()->transaction_count()); 3984 EXPECT_EQ(4, cache.network_layer()->transaction_count());
3816 EXPECT_EQ(3, cache.disk_cache()->open_count()); 3985 EXPECT_EQ(3, cache.disk_cache()->open_count());
3817 EXPECT_EQ(1, cache.disk_cache()->create_count()); 3986 EXPECT_EQ(1, cache.disk_cache()->create_count());
3818 TestLoadTimingNetworkRequest(load_timing_info); 3987 TestLoadTimingNetworkRequest(load_timing_info);
3819 3988
3820 RemoveMockTransaction(&kRangeGET_TransactionOK); 3989 RemoveMockTransaction(&kRangeGET_TransactionOK);
3821 } 3990 }
3822 3991
3823 // Checks that with a cache backend having Sparse IO unimplementes the cache
3824 // entry would be doomed after a range request.
3825 // TODO(pasko): remove when the SimpleBackendImpl implements Sparse IO.
3826 TEST(HttpCache, RangeGET_SparseNotImplemented) {
3827 MockHttpCache cache;
3828 cache.disk_cache()->set_fail_sparse_requests();
3829
3830 // Run a cacheable request to prime the cache.
3831 MockTransaction transaction(kTypicalGET_Transaction);
3832 transaction.url = kRangeGET_TransactionOK.url;
3833 AddMockTransaction(&transaction);
3834 RunTransactionTest(cache.http_cache(), transaction);
3835 EXPECT_EQ(1, cache.network_layer()->transaction_count());
3836 EXPECT_EQ(0, cache.disk_cache()->open_count());
3837 EXPECT_EQ(1, cache.disk_cache()->create_count());
3838
3839 // Verify that we added the entry.
3840 disk_cache::Entry* entry;
3841 net::TestCompletionCallback cb;
3842 int rv = cache.disk_cache()->OpenEntry(transaction.url,
3843 &entry,
3844 cb.callback());
3845 ASSERT_EQ(net::OK, cb.GetResult(rv));
3846 EXPECT_EQ(1, cache.disk_cache()->open_count());
3847 entry->Close();
3848 RemoveMockTransaction(&transaction);
3849
3850 // Request the range with the backend that does not support it.
3851 MockTransaction transaction2(kRangeGET_TransactionOK);
3852 std::string headers;
3853 AddMockTransaction(&transaction2);
3854 RunTransactionTestWithResponse(cache.http_cache(), transaction2, &headers);
3855 EXPECT_EQ(2, cache.network_layer()->transaction_count());
3856 EXPECT_EQ(2, cache.disk_cache()->open_count());
3857 EXPECT_EQ(2, cache.disk_cache()->create_count());
3858
3859 // Mock cache would return net::ERR_CACHE_OPEN_FAILURE on a doomed entry, even
3860 // if it was re-created later, so this effectively checks that the old data is
3861 // gone.
3862 disk_cache::Entry* entry2;
3863 rv = cache.disk_cache()->OpenEntry(transaction2.url,
3864 &entry2,
3865 cb.callback());
3866 ASSERT_EQ(net::ERR_CACHE_OPEN_FAILURE, cb.GetResult(rv));
3867 RemoveMockTransaction(&transaction2);
3868 }
3869
3870 TEST(HttpCache, RangeGET_SparseNotImplementedOnEmptyCache) {
3871 MockHttpCache cache;
3872 cache.disk_cache()->set_fail_sparse_requests();
3873
3874 // Request the range with the backend that does not support it.
3875 MockTransaction transaction(kRangeGET_TransactionOK);
3876 std::string headers;
3877 AddMockTransaction(&transaction);
3878 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
3879 EXPECT_EQ(1, cache.network_layer()->transaction_count());
3880 EXPECT_EQ(0, cache.disk_cache()->open_count());
3881 EXPECT_EQ(1, cache.disk_cache()->create_count());
3882
3883 // Mock cache would return net::ERR_CACHE_OPEN_FAILURE on a doomed entry, even
3884 // if it was re-created later, so this effectively checks that the old data is
3885 // gone as a result of a failed range write.
3886 disk_cache::Entry* entry;
3887 net::TestCompletionCallback cb;
3888 int rv = cache.disk_cache()->OpenEntry(transaction.url,
3889 &entry,
3890 cb.callback());
3891 ASSERT_EQ(net::ERR_CACHE_OPEN_FAILURE, cb.GetResult(rv));
3892 RemoveMockTransaction(&transaction);
3893 }
3894
3895 // Tests that we can cache range requests and fetch random blocks from the 3992 // Tests that we can cache range requests and fetch random blocks from the
3896 // cache and the network, with synchronous responses. 3993 // cache and the network, with synchronous responses.
3897 TEST(HttpCache, RangeGET_SyncOK) { 3994 TEST(HttpCache, RangeGET_SyncOK) {
3898 MockHttpCache cache; 3995 MockHttpCache cache;
3899 3996
3900 MockTransaction transaction(kRangeGET_TransactionOK); 3997 MockTransaction transaction(kRangeGET_TransactionOK);
3901 transaction.test_mode = TEST_MODE_SYNC_ALL; 3998 transaction.test_mode = TEST_MODE_SYNC_ALL;
3902 AddMockTransaction(&transaction); 3999 AddMockTransaction(&transaction);
3903 4000
3904 // Write to the cache (40-49). 4001 // Write to the cache (40-49).
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
4092 4189
4093 // And the entry should be gone. 4190 // And the entry should be gone.
4094 RunTransactionTest(cache.http_cache(), kRangeGET_TransactionOK); 4191 RunTransactionTest(cache.http_cache(), kRangeGET_TransactionOK);
4095 EXPECT_EQ(3, cache.network_layer()->transaction_count()); 4192 EXPECT_EQ(3, cache.network_layer()->transaction_count());
4096 EXPECT_EQ(1, cache.disk_cache()->open_count()); 4193 EXPECT_EQ(1, cache.disk_cache()->open_count());
4097 EXPECT_EQ(2, cache.disk_cache()->create_count()); 4194 EXPECT_EQ(2, cache.disk_cache()->create_count());
4098 4195
4099 RemoveMockTransaction(&kRangeGET_TransactionOK); 4196 RemoveMockTransaction(&kRangeGET_TransactionOK);
4100 } 4197 }
4101 4198
4199 // Tests that when a server returns 206 with a sub-range of the requested range,
4200 // and there is nothing stored in the cache, the returned response is passed to
4201 // the caller as is. In this context, a subrange means a response that starts
4202 // with the same byte that was requested, but that is not the whole range that
4203 // was requested.
4204 TEST(HttpCache, RangeGET_206ReturnsSubrangeRange_NoCachedContent) {
4205 MockHttpCache cache;
4206 std::string headers;
4207
4208 // Request a large range (40-59). The server sends 40-49.
4209 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4210 transaction.request_headers = "Range: bytes = 40-59\r\n" EXTRA_HEADER;
4211 transaction.response_headers =
4212 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
4213 "ETag: \"foo\"\n"
4214 "Accept-Ranges: bytes\n"
4215 "Content-Length: 10\n"
4216 "Content-Range: bytes 40-49/80\n";
4217 transaction.handler = nullptr;
4218 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4219
4220 Verify206Response(headers, 40, 49);
4221 EXPECT_EQ(1, cache.network_layer()->transaction_count());
4222 EXPECT_EQ(0, cache.disk_cache()->open_count());
4223 EXPECT_EQ(1, cache.disk_cache()->create_count());
4224 }
4225
4226 // Tests that when a server returns 206 with a sub-range of the requested range,
4227 // and there was an entry stored in the cache, the cache gets out of the way.
4228 TEST(HttpCache, RangeGET_206ReturnsSubrangeRange_CachedContent) {
4229 MockHttpCache cache;
4230 std::string headers;
4231
4232 // Write to the cache (70-79).
4233 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4234 transaction.request_headers = "Range: bytes = 70-79\r\n" EXTRA_HEADER;
4235 transaction.data = "rg: 70-79 ";
4236 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4237 Verify206Response(headers, 70, 79);
4238
4239 // Request a large range (40-79). The cache will ask the server for 40-59.
4240 // The server returns 40-49. The cache should consider the server confused and
4241 // abort caching, restarting the request without caching.
4242 transaction.request_headers = "Range: bytes = 40-79\r\n" EXTRA_HEADER;
4243 transaction.response_headers =
4244 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
4245 "ETag: \"foo\"\n"
4246 "Accept-Ranges: bytes\n"
4247 "Content-Length: 10\n"
4248 "Content-Range: bytes 40-49/80\n";
4249 transaction.handler = nullptr;
4250 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4251
4252 // Two new network requests were issued, one from the cache and another after
4253 // deleting the entry.
4254 Verify206Response(headers, 40, 49);
4255 EXPECT_EQ(3, cache.network_layer()->transaction_count());
4256 EXPECT_EQ(1, cache.disk_cache()->open_count());
4257 EXPECT_EQ(1, cache.disk_cache()->create_count());
4258
4259 // The entry was deleted.
4260 RunTransactionTest(cache.http_cache(), transaction);
4261 EXPECT_EQ(4, cache.network_layer()->transaction_count());
4262 EXPECT_EQ(1, cache.disk_cache()->open_count());
4263 EXPECT_EQ(2, cache.disk_cache()->create_count());
4264 }
4265
4266 // Tests that when a server returns 206 with a sub-range of the requested range,
4267 // and there was an entry stored in the cache, the cache gets out of the way,
4268 // when the caller is not using ranges.
4269 TEST(HttpCache, GET_206ReturnsSubrangeRange_CachedContent) {
4270 MockHttpCache cache;
4271 std::string headers;
4272
4273 // Write to the cache (70-79).
4274 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4275 transaction.request_headers = "Range: bytes = 70-79\r\n" EXTRA_HEADER;
4276 transaction.data = "rg: 70-79 ";
4277 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4278 Verify206Response(headers, 70, 79);
4279
4280 // Don't ask for a range. The cache will ask the server for 0-69.
4281 // The server returns 40-49. The cache should consider the server confused and
4282 // abort caching, restarting the request.
4283 // The second network request should not be a byte range request so the server
4284 // should return 200 + "Not a range"
4285 transaction.request_headers = "X-Return-Default-Range:\r\n" EXTRA_HEADER;
4286 transaction.data = "Not a range";
4287 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4288
4289 EXPECT_EQ(0U, headers.find("HTTP/1.1 200 OK\n"));
4290 EXPECT_EQ(3, cache.network_layer()->transaction_count());
4291 EXPECT_EQ(1, cache.disk_cache()->open_count());
4292 EXPECT_EQ(1, cache.disk_cache()->create_count());
4293
4294 // The entry was deleted.
4295 RunTransactionTest(cache.http_cache(), transaction);
4296 EXPECT_EQ(4, cache.network_layer()->transaction_count());
4297 EXPECT_EQ(1, cache.disk_cache()->open_count());
4298 EXPECT_EQ(2, cache.disk_cache()->create_count());
4299 }
4300
4301 // Tests that when a server returns 206 with a random range and there is
4302 // nothing stored in the cache, the returned response is passed to the caller
4303 // as is. In this context, a WrongRange means that the returned range may or may
4304 // not have any relationship with the requested range (may or may not be
4305 // contained). The important part is that the first byte doesn't match the first
4306 // requested byte.
4307 TEST(HttpCache, RangeGET_206ReturnsWrongRange_NoCachedContent) {
4308 MockHttpCache cache;
4309 std::string headers;
4310
4311 // Request a large range (30-59). The server sends (40-49).
4312 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4313 transaction.request_headers = "Range: bytes = 30-59\r\n" EXTRA_HEADER;
4314 transaction.response_headers =
4315 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
4316 "ETag: \"foo\"\n"
4317 "Accept-Ranges: bytes\n"
4318 "Content-Length: 10\n"
4319 "Content-Range: bytes 40-49/80\n";
4320 transaction.handler = nullptr;
4321 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4322
4323 Verify206Response(headers, 40, 49);
4324 EXPECT_EQ(1, cache.network_layer()->transaction_count());
4325 EXPECT_EQ(0, cache.disk_cache()->open_count());
4326 EXPECT_EQ(1, cache.disk_cache()->create_count());
4327
4328 // The entry was deleted.
4329 RunTransactionTest(cache.http_cache(), transaction);
4330 EXPECT_EQ(2, cache.network_layer()->transaction_count());
4331 EXPECT_EQ(0, cache.disk_cache()->open_count());
4332 EXPECT_EQ(2, cache.disk_cache()->create_count());
4333 }
4334
4335 // Tests that when a server returns 206 with a random range and there is
4336 // an entry stored in the cache, the cache gets out of the way.
4337 TEST(HttpCache, RangeGET_206ReturnsWrongRange_CachedContent) {
4338 MockHttpCache cache;
4339 std::string headers;
4340
4341 // Write to the cache (70-79).
4342 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4343 transaction.request_headers = "Range: bytes = 70-79\r\n" EXTRA_HEADER;
4344 transaction.data = "rg: 70-79 ";
4345 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4346 Verify206Response(headers, 70, 79);
4347
4348 // Request a large range (30-79). The cache will ask the server for 30-69.
4349 // The server returns 40-49. The cache should consider the server confused and
4350 // abort caching, returning the weird range to the caller.
4351 transaction.request_headers = "Range: bytes = 30-79\r\n" EXTRA_HEADER;
4352 transaction.response_headers =
4353 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
4354 "ETag: \"foo\"\n"
4355 "Accept-Ranges: bytes\n"
4356 "Content-Length: 10\n"
4357 "Content-Range: bytes 40-49/80\n";
4358 transaction.handler = nullptr;
4359 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4360
4361 Verify206Response(headers, 40, 49);
4362 EXPECT_EQ(3, cache.network_layer()->transaction_count());
4363 EXPECT_EQ(1, cache.disk_cache()->open_count());
4364 EXPECT_EQ(1, cache.disk_cache()->create_count());
4365
4366 // The entry was deleted.
4367 RunTransactionTest(cache.http_cache(), transaction);
4368 EXPECT_EQ(4, cache.network_layer()->transaction_count());
4369 EXPECT_EQ(1, cache.disk_cache()->open_count());
4370 EXPECT_EQ(2, cache.disk_cache()->create_count());
4371 }
4372
4373 // Tests that when a caller asks for a range beyond EOF, with an empty cache,
4374 // the response matches the one provided by the server.
4375 TEST(HttpCache, RangeGET_206ReturnsSmallerFile_NoCachedContent) {
4376 MockHttpCache cache;
4377 std::string headers;
4378
4379 // Request a large range (70-99). The server sends 70-79.
4380 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4381 transaction.request_headers = "Range: bytes = 70-99\r\n" EXTRA_HEADER;
4382 transaction.data = "rg: 70-79 ";
4383 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4384
4385 Verify206Response(headers, 70, 79);
4386 EXPECT_EQ(1, cache.network_layer()->transaction_count());
4387 EXPECT_EQ(0, cache.disk_cache()->open_count());
4388 EXPECT_EQ(1, cache.disk_cache()->create_count());
4389
4390 RunTransactionTest(cache.http_cache(), kRangeGET_TransactionOK);
4391 EXPECT_EQ(1, cache.disk_cache()->open_count());
4392 }
4393
4394 // Tests that when a caller asks for a range beyond EOF, with a cached entry,
4395 // the cache automatically fixes the request.
4396 TEST(HttpCache, RangeGET_206ReturnsSmallerFile_CachedContent) {
4397 MockHttpCache cache;
4398 std::string headers;
4399
4400 // Write to the cache (40-49).
4401 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4402 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4403
4404 // Request a large range (70-99). The server sends 70-79.
4405 transaction.request_headers = "Range: bytes = 70-99\r\n" EXTRA_HEADER;
4406 transaction.data = "rg: 70-79 ";
4407 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4408
4409 Verify206Response(headers, 70, 79);
4410 EXPECT_EQ(2, cache.network_layer()->transaction_count());
4411 EXPECT_EQ(1, cache.disk_cache()->open_count());
4412 EXPECT_EQ(1, cache.disk_cache()->create_count());
4413
4414 // The entry was not deleted (the range was automatically fixed).
4415 RunTransactionTest(cache.http_cache(), transaction);
4416 EXPECT_EQ(2, cache.network_layer()->transaction_count());
4417 EXPECT_EQ(2, cache.disk_cache()->open_count());
4418 EXPECT_EQ(1, cache.disk_cache()->create_count());
4419 }
4420
4421 // Tests that when a caller asks for a not-satisfiable range, the server's
4422 // response is forwarded to the caller.
4423 TEST(HttpCache, RangeGET_416_NoCachedContent) {
4424 MockHttpCache cache;
4425 std::string headers;
4426
4427 // Request a range beyond EOF (80-99).
4428 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4429 transaction.request_headers = "Range: bytes = 80-99\r\n" EXTRA_HEADER;
4430 transaction.data = "";
4431 transaction.status = "HTTP/1.1 416 Requested Range Not Satisfiable";
4432 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
4433
4434 EXPECT_EQ(0U, headers.find(transaction.status));
4435 EXPECT_EQ(1, cache.network_layer()->transaction_count());
4436 EXPECT_EQ(0, cache.disk_cache()->open_count());
4437 EXPECT_EQ(1, cache.disk_cache()->create_count());
4438
4439 // The entry was deleted.
4440 RunTransactionTest(cache.http_cache(), kRangeGET_TransactionOK);
4441 EXPECT_EQ(2, cache.disk_cache()->create_count());
4442 }
4443
4102 // Tests that we cache 301s for range requests. 4444 // Tests that we cache 301s for range requests.
4103 TEST(HttpCache, RangeGET_301) { 4445 TEST(HttpCache, RangeGET_301) {
4104 MockHttpCache cache; 4446 MockHttpCache cache;
4105 ScopedMockTransaction transaction(kRangeGET_TransactionOK); 4447 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4106 transaction.status = "HTTP/1.1 301 Moved Permanently"; 4448 transaction.status = "HTTP/1.1 301 Moved Permanently";
4107 transaction.response_headers = "Location: http://www.bar.com/\n"; 4449 transaction.response_headers = "Location: http://www.bar.com/\n";
4108 transaction.data = ""; 4450 transaction.data = "";
4109 transaction.handler = NULL; 4451 transaction.handler = NULL;
4110 AddMockTransaction(&transaction);
4111 4452
4112 // Write to the cache. 4453 // Write to the cache.
4113 RunTransactionTest(cache.http_cache(), transaction); 4454 RunTransactionTest(cache.http_cache(), transaction);
4114 EXPECT_EQ(1, cache.network_layer()->transaction_count()); 4455 EXPECT_EQ(1, cache.network_layer()->transaction_count());
4115 EXPECT_EQ(0, cache.disk_cache()->open_count()); 4456 EXPECT_EQ(0, cache.disk_cache()->open_count());
4116 EXPECT_EQ(1, cache.disk_cache()->create_count()); 4457 EXPECT_EQ(1, cache.disk_cache()->create_count());
4117 4458
4118 // Read from the cache. 4459 // Read from the cache.
4119 RunTransactionTest(cache.http_cache(), transaction); 4460 RunTransactionTest(cache.http_cache(), transaction);
4120 EXPECT_EQ(1, cache.network_layer()->transaction_count()); 4461 EXPECT_EQ(1, cache.network_layer()->transaction_count());
4121 EXPECT_EQ(1, cache.disk_cache()->open_count()); 4462 EXPECT_EQ(1, cache.disk_cache()->open_count());
4122 EXPECT_EQ(1, cache.disk_cache()->create_count()); 4463 EXPECT_EQ(1, cache.disk_cache()->create_count());
4123
4124 RemoveMockTransaction(&transaction);
4125 } 4464 }
4126 4465
4127 // Tests that we can cache range requests when the start or end is unknown. 4466 // Tests that we can cache range requests when the start or end is unknown.
4128 // We start with one suffix request, followed by a request from a given point. 4467 // We start with one suffix request, followed by a request from a given point.
4129 TEST(HttpCache, UnknownRangeGET_1) { 4468 TEST(HttpCache, UnknownRangeGET_1) {
4130 MockHttpCache cache; 4469 MockHttpCache cache;
4131 AddMockTransaction(&kRangeGET_TransactionOK); 4470 AddMockTransaction(&kRangeGET_TransactionOK);
4132 std::string headers; 4471 std::string headers;
4133 4472
4134 // Write to the cache (70-79). 4473 // Write to the cache (70-79).
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
4241 4580
4242 Verify206Response(headers, 40, 49); 4581 Verify206Response(headers, 40, 49);
4243 EXPECT_EQ(1, cache.network_layer()->transaction_count()); 4582 EXPECT_EQ(1, cache.network_layer()->transaction_count());
4244 EXPECT_EQ(0, cache.disk_cache()->open_count()); 4583 EXPECT_EQ(0, cache.disk_cache()->open_count());
4245 EXPECT_EQ(1, cache.disk_cache()->create_count()); 4584 EXPECT_EQ(1, cache.disk_cache()->create_count());
4246 TestLoadTimingNetworkRequest(load_timing_info); 4585 TestLoadTimingNetworkRequest(load_timing_info);
4247 4586
4248 // Write and read from the cache (0-79), when not asked for a range. 4587 // Write and read from the cache (0-79), when not asked for a range.
4249 MockTransaction transaction(kRangeGET_TransactionOK); 4588 MockTransaction transaction(kRangeGET_TransactionOK);
4250 transaction.request_headers = EXTRA_HEADER; 4589 transaction.request_headers = EXTRA_HEADER;
4251 transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " 4590 transaction.data = kFullRangeData;
4252 "rg: 50-59 rg: 60-69 rg: 70-79 ";
4253 RunTransactionTestWithResponseAndGetTiming( 4591 RunTransactionTestWithResponseAndGetTiming(
4254 cache.http_cache(), transaction, &headers, log.bound(), 4592 cache.http_cache(), transaction, &headers, log.bound(),
4255 &load_timing_info); 4593 &load_timing_info);
4256 4594
4257 EXPECT_EQ(0U, headers.find("HTTP/1.1 200 OK\n")); 4595 EXPECT_EQ(0U, headers.find("HTTP/1.1 200 OK\n"));
4258 EXPECT_EQ(3, cache.network_layer()->transaction_count()); 4596 EXPECT_EQ(3, cache.network_layer()->transaction_count());
4259 EXPECT_EQ(1, cache.disk_cache()->open_count()); 4597 EXPECT_EQ(1, cache.disk_cache()->open_count());
4260 EXPECT_EQ(1, cache.disk_cache()->create_count()); 4598 EXPECT_EQ(1, cache.disk_cache()->create_count());
4261 TestLoadTimingNetworkRequest(load_timing_info); 4599 TestLoadTimingNetworkRequest(load_timing_info);
4262 4600
(...skipping 29 matching lines...) Expand all
4292 Verify206Response(headers, 70, 79); 4630 Verify206Response(headers, 70, 79);
4293 4631
4294 EXPECT_EQ(2, cache.network_layer()->transaction_count()); 4632 EXPECT_EQ(2, cache.network_layer()->transaction_count());
4295 EXPECT_EQ(1, cache.disk_cache()->open_count()); 4633 EXPECT_EQ(1, cache.disk_cache()->open_count());
4296 EXPECT_EQ(1, cache.disk_cache()->create_count()); 4634 EXPECT_EQ(1, cache.disk_cache()->create_count());
4297 TestLoadTimingNetworkRequest(load_timing_info); 4635 TestLoadTimingNetworkRequest(load_timing_info);
4298 4636
4299 // Read from the cache (0-9), write and read from cache (10 - 79). 4637 // Read from the cache (0-9), write and read from cache (10 - 79).
4300 transaction.load_flags |= net::LOAD_VALIDATE_CACHE; 4638 transaction.load_flags |= net::LOAD_VALIDATE_CACHE;
4301 transaction.request_headers = "Foo: bar\r\n" EXTRA_HEADER; 4639 transaction.request_headers = "Foo: bar\r\n" EXTRA_HEADER;
4302 transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " 4640 transaction.data = kFullRangeData;
4303 "rg: 50-59 rg: 60-69 rg: 70-79 ";
4304 RunTransactionTestWithResponseAndGetTiming( 4641 RunTransactionTestWithResponseAndGetTiming(
4305 cache.http_cache(), transaction, &headers, log.bound(), 4642 cache.http_cache(), transaction, &headers, log.bound(),
4306 &load_timing_info); 4643 &load_timing_info);
4307 4644
4308 EXPECT_EQ(0U, headers.find("HTTP/1.1 200 OK\n")); 4645 EXPECT_EQ(0U, headers.find("HTTP/1.1 200 OK\n"));
4309 EXPECT_EQ(4, cache.network_layer()->transaction_count()); 4646 EXPECT_EQ(4, cache.network_layer()->transaction_count());
4310 EXPECT_EQ(2, cache.disk_cache()->open_count()); 4647 EXPECT_EQ(2, cache.disk_cache()->open_count());
4311 EXPECT_EQ(1, cache.disk_cache()->create_count()); 4648 EXPECT_EQ(1, cache.disk_cache()->create_count());
4312 TestLoadTimingNetworkRequest(load_timing_info); 4649 TestLoadTimingNetworkRequest(load_timing_info);
4313 4650
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
4493 EXPECT_EQ(2, cache.disk_cache()->create_count()); 4830 EXPECT_EQ(2, cache.disk_cache()->create_count());
4494 } 4831 }
4495 4832
4496 // Tests that we can handle range requests with cached 200 responses. 4833 // Tests that we can handle range requests with cached 200 responses.
4497 TEST(HttpCache, RangeGET_Previous200) { 4834 TEST(HttpCache, RangeGET_Previous200) {
4498 MockHttpCache cache; 4835 MockHttpCache cache;
4499 4836
4500 // Store the whole thing with status 200. 4837 // Store the whole thing with status 200.
4501 MockTransaction transaction(kTypicalGET_Transaction); 4838 MockTransaction transaction(kTypicalGET_Transaction);
4502 transaction.url = kRangeGET_TransactionOK.url; 4839 transaction.url = kRangeGET_TransactionOK.url;
4503 transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " 4840 transaction.data = kFullRangeData;
4504 "rg: 50-59 rg: 60-69 rg: 70-79 ";
4505 AddMockTransaction(&transaction); 4841 AddMockTransaction(&transaction);
4506 RunTransactionTest(cache.http_cache(), transaction); 4842 RunTransactionTest(cache.http_cache(), transaction);
4507 EXPECT_EQ(1, cache.network_layer()->transaction_count()); 4843 EXPECT_EQ(1, cache.network_layer()->transaction_count());
4508 EXPECT_EQ(0, cache.disk_cache()->open_count()); 4844 EXPECT_EQ(0, cache.disk_cache()->open_count());
4509 EXPECT_EQ(1, cache.disk_cache()->create_count()); 4845 EXPECT_EQ(1, cache.disk_cache()->create_count());
4510 4846
4511 RemoveMockTransaction(&transaction); 4847 RemoveMockTransaction(&transaction);
4512 AddMockTransaction(&kRangeGET_TransactionOK); 4848 AddMockTransaction(&kRangeGET_TransactionOK);
4513 4849
4514 // Now see that we use the stored entry. 4850 // Now see that we use the stored entry.
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
4827 EXPECT_EQ(1, cache.disk_cache()->create_count()); 5163 EXPECT_EQ(1, cache.disk_cache()->create_count());
4828 5164
4829 // Verify that we don't have a cached entry. 5165 // Verify that we don't have a cached entry.
4830 disk_cache::Entry* entry; 5166 disk_cache::Entry* entry;
4831 EXPECT_FALSE(cache.OpenBackendEntry(kRangeGET_TransactionOK.url, &entry)); 5167 EXPECT_FALSE(cache.OpenBackendEntry(kRangeGET_TransactionOK.url, &entry));
4832 5168
4833 RemoveMockTransaction(&kRangeGET_TransactionOK); 5169 RemoveMockTransaction(&kRangeGET_TransactionOK);
4834 } 5170 }
4835 5171
4836 // Tests that if a server tells us conflicting information about a resource we 5172 // Tests that if a server tells us conflicting information about a resource we
4837 // ignore the response. 5173 // drop the entry.
4838 TEST(HttpCache, RangeGET_InvalidResponse3) { 5174 TEST(HttpCache, RangeGET_InvalidResponse3) {
4839 MockHttpCache cache; 5175 MockHttpCache cache;
4840 std::string headers; 5176 std::string headers;
4841 5177
4842 MockTransaction transaction(kRangeGET_TransactionOK); 5178 MockTransaction transaction(kRangeGET_TransactionOK);
4843 transaction.handler = NULL; 5179 transaction.handler = NULL;
4844 transaction.request_headers = "Range: bytes = 50-59\r\n" EXTRA_HEADER; 5180 transaction.request_headers = "Range: bytes = 50-59\r\n" EXTRA_HEADER;
4845 std::string response_headers(transaction.response_headers); 5181 std::string response_headers(transaction.response_headers);
4846 response_headers.append("Content-Range: bytes 50-59/160\n"); 5182 response_headers.append("Content-Range: bytes 50-59/160\n");
4847 transaction.response_headers = response_headers.c_str(); 5183 transaction.response_headers = response_headers.c_str();
(...skipping 11 matching lines...) Expand all
4859 // This transaction will report a resource size of 80 bytes, and we think it's 5195 // This transaction will report a resource size of 80 bytes, and we think it's
4860 // 160 so we should ignore the response. 5196 // 160 so we should ignore the response.
4861 RunTransactionTestWithResponse(cache.http_cache(), kRangeGET_TransactionOK, 5197 RunTransactionTestWithResponse(cache.http_cache(), kRangeGET_TransactionOK,
4862 &headers); 5198 &headers);
4863 5199
4864 Verify206Response(headers, 40, 49); 5200 Verify206Response(headers, 40, 49);
4865 EXPECT_EQ(2, cache.network_layer()->transaction_count()); 5201 EXPECT_EQ(2, cache.network_layer()->transaction_count());
4866 EXPECT_EQ(1, cache.disk_cache()->open_count()); 5202 EXPECT_EQ(1, cache.disk_cache()->open_count());
4867 EXPECT_EQ(1, cache.disk_cache()->create_count()); 5203 EXPECT_EQ(1, cache.disk_cache()->create_count());
4868 5204
4869 // Verify that we cached the first response but not the second one. 5205 // Verify that the entry is gone.
4870 disk_cache::Entry* en; 5206 RunTransactionTest(cache.http_cache(), kRangeGET_TransactionOK);
4871 ASSERT_TRUE(cache.OpenBackendEntry(kRangeGET_TransactionOK.url, &en)); 5207 EXPECT_EQ(1, cache.disk_cache()->open_count());
4872 5208 EXPECT_EQ(2, cache.disk_cache()->create_count());
4873 int64 cached_start = 0;
4874 net::TestCompletionCallback cb;
4875 int rv = en->GetAvailableRange(40, 20, &cached_start, cb.callback());
4876 EXPECT_EQ(10, cb.GetResult(rv));
4877 EXPECT_EQ(50, cached_start);
4878 en->Close();
4879
4880 RemoveMockTransaction(&kRangeGET_TransactionOK); 5209 RemoveMockTransaction(&kRangeGET_TransactionOK);
4881 } 5210 }
4882 5211
4883 // Tests that we handle large range values properly. 5212 // Tests that we handle large range values properly.
4884 TEST(HttpCache, RangeGET_LargeValues) { 5213 TEST(HttpCache, RangeGET_LargeValues) {
4885 // We need a real sparse cache for this test. 5214 // We need a real sparse cache for this test.
4886 MockHttpCache cache(net::HttpCache::DefaultBackend::InMemory(1024 * 1024)); 5215 MockHttpCache cache(net::HttpCache::DefaultBackend::InMemory(1024 * 1024));
4887 std::string headers; 5216 std::string headers;
4888 5217
4889 MockTransaction transaction(kRangeGET_TransactionOK); 5218 MockTransaction transaction(kRangeGET_TransactionOK);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
4947 EXPECT_EQ(0, cache.disk_cache()->create_count()); 5276 EXPECT_EQ(0, cache.disk_cache()->create_count());
4948 5277
4949 RemoveMockTransaction(&kRangeGET_TransactionOK); 5278 RemoveMockTransaction(&kRangeGET_TransactionOK);
4950 } 5279 }
4951 5280
4952 // Tests that we don't crash when after reading from the cache we issue a 5281 // Tests that we don't crash when after reading from the cache we issue a
4953 // request for the next range and the server gives us a 200 synchronously. 5282 // request for the next range and the server gives us a 200 synchronously.
4954 TEST(HttpCache, RangeGET_FastFlakyServer) { 5283 TEST(HttpCache, RangeGET_FastFlakyServer) {
4955 MockHttpCache cache; 5284 MockHttpCache cache;
4956 5285
4957 MockTransaction transaction(kRangeGET_TransactionOK); 5286 ScopedMockTransaction transaction(kRangeGET_TransactionOK);
4958 transaction.request_headers = "Range: bytes = 40-\r\n" EXTRA_HEADER; 5287 transaction.request_headers = "Range: bytes = 40-\r\n" EXTRA_HEADER;
4959 transaction.test_mode = TEST_MODE_SYNC_NET_START; 5288 transaction.test_mode = TEST_MODE_SYNC_NET_START;
4960 transaction.load_flags |= net::LOAD_VALIDATE_CACHE; 5289 transaction.load_flags |= net::LOAD_VALIDATE_CACHE;
4961 AddMockTransaction(&transaction);
4962 5290
4963 // Write to the cache. 5291 // Write to the cache.
4964 RunTransactionTest(cache.http_cache(), kRangeGET_TransactionOK); 5292 RunTransactionTest(cache.http_cache(), kRangeGET_TransactionOK);
4965 5293
4966 // And now read from the cache and the network. 5294 // And now read from the cache and the network.
4967 RangeTransactionServer handler; 5295 RangeTransactionServer handler;
4968 handler.set_bad_200(true); 5296 handler.set_bad_200(true);
4969 transaction.data = "Not a range"; 5297 transaction.data = "Not a range";
4970 RunTransactionTest(cache.http_cache(), transaction); 5298 net::CapturingBoundNetLog log;
5299 RunTransactionTestWithLog(cache.http_cache(), transaction, log.bound());
4971 5300
4972 EXPECT_EQ(3, cache.network_layer()->transaction_count()); 5301 EXPECT_EQ(3, cache.network_layer()->transaction_count());
4973 EXPECT_EQ(1, cache.disk_cache()->open_count()); 5302 EXPECT_EQ(1, cache.disk_cache()->open_count());
4974 EXPECT_EQ(1, cache.disk_cache()->create_count()); 5303 EXPECT_EQ(1, cache.disk_cache()->create_count());
4975 5304 EXPECT_TRUE(LogContainsEventType(
4976 RemoveMockTransaction(&transaction); 5305 log, net::NetLog::TYPE_HTTP_CACHE_RE_SEND_PARTIAL_REQUEST));
4977 } 5306 }
4978 5307
4979 // Tests that when the server gives us less data than expected, we don't keep 5308 // Tests that when the server gives us less data than expected, we don't keep
4980 // asking for more data. 5309 // asking for more data.
4981 TEST(HttpCache, RangeGET_FastFlakyServer2) { 5310 TEST(HttpCache, RangeGET_FastFlakyServer2) {
4982 MockHttpCache cache; 5311 MockHttpCache cache;
4983 5312
4984 // First, check with an empty cache (WRITE mode). 5313 // First, check with an empty cache (WRITE mode).
4985 MockTransaction transaction(kRangeGET_TransactionOK); 5314 MockTransaction transaction(kRangeGET_TransactionOK);
4986 transaction.request_headers = "Range: bytes = 40-49\r\n" EXTRA_HEADER; 5315 transaction.request_headers = "Range: bytes = 40-49\r\n" EXTRA_HEADER;
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
5327 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" 5656 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
5328 "ETag: \"foo\"\n" 5657 "ETag: \"foo\"\n"
5329 "Accept-Ranges: bytes\n" 5658 "Accept-Ranges: bytes\n"
5330 "Content-Length: 80\n"); 5659 "Content-Length: 80\n");
5331 CreateTruncatedEntry(raw_headers, &cache); 5660 CreateTruncatedEntry(raw_headers, &cache);
5332 5661
5333 // Now make a regular request. 5662 // Now make a regular request.
5334 std::string headers; 5663 std::string headers;
5335 MockTransaction transaction(kRangeGET_TransactionOK); 5664 MockTransaction transaction(kRangeGET_TransactionOK);
5336 transaction.request_headers = EXTRA_HEADER; 5665 transaction.request_headers = EXTRA_HEADER;
5337 transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " 5666 transaction.data = kFullRangeData;
5338 "rg: 50-59 rg: 60-69 rg: 70-79 ";
5339 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers); 5667 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
5340 5668
5341 // We update the headers with the ones received while revalidating. 5669 // We update the headers with the ones received while revalidating.
5342 std::string expected_headers( 5670 std::string expected_headers(
5343 "HTTP/1.1 200 OK\n" 5671 "HTTP/1.1 200 OK\n"
5344 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" 5672 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
5345 "Accept-Ranges: bytes\n" 5673 "Accept-Ranges: bytes\n"
5346 "ETag: \"foo\"\n" 5674 "ETag: \"foo\"\n"
5347 "Content-Length: 80\n"); 5675 "Content-Length: 80\n");
5348 5676
(...skipping 27 matching lines...) Expand all
5376 "Content-Length: 80\n"); 5704 "Content-Length: 80\n");
5377 CreateTruncatedEntry(raw_headers, &cache); 5705 CreateTruncatedEntry(raw_headers, &cache);
5378 RemoveMockTransaction(&kRangeGET_TransactionOK); 5706 RemoveMockTransaction(&kRangeGET_TransactionOK);
5379 5707
5380 // Now make a regular request. 5708 // Now make a regular request.
5381 MockTransaction transaction(kRangeGET_TransactionOK); 5709 MockTransaction transaction(kRangeGET_TransactionOK);
5382 transaction.request_headers = EXTRA_HEADER; 5710 transaction.request_headers = EXTRA_HEADER;
5383 std::string response_headers(transaction.response_headers); 5711 std::string response_headers(transaction.response_headers);
5384 response_headers += ("Cache-Control: no-store\n"); 5712 response_headers += ("Cache-Control: no-store\n");
5385 transaction.response_headers = response_headers.c_str(); 5713 transaction.response_headers = response_headers.c_str();
5386 transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " 5714 transaction.data = kFullRangeData;
5387 "rg: 50-59 rg: 60-69 rg: 70-79 ";
5388 AddMockTransaction(&transaction); 5715 AddMockTransaction(&transaction);
5389 5716
5390 std::string headers; 5717 std::string headers;
5391 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers); 5718 RunTransactionTestWithResponse(cache.http_cache(), transaction, &headers);
5392 5719
5393 // We update the headers with the ones received while revalidating. 5720 // We update the headers with the ones received while revalidating.
5394 std::string expected_headers( 5721 std::string expected_headers(
5395 "HTTP/1.1 200 OK\n" 5722 "HTTP/1.1 200 OK\n"
5396 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" 5723 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
5397 "Accept-Ranges: bytes\n" 5724 "Accept-Ranges: bytes\n"
(...skipping 24 matching lines...) Expand all
5422 "Content-Length: 80\n"); 5749 "Content-Length: 80\n");
5423 CreateTruncatedEntry(raw_headers, &cache); 5750 CreateTruncatedEntry(raw_headers, &cache);
5424 RemoveMockTransaction(&kRangeGET_TransactionOK); 5751 RemoveMockTransaction(&kRangeGET_TransactionOK);
5425 5752
5426 // Now make a regular request. 5753 // Now make a regular request.
5427 MockTransaction transaction(kRangeGET_TransactionOK); 5754 MockTransaction transaction(kRangeGET_TransactionOK);
5428 transaction.request_headers = EXTRA_HEADER; 5755 transaction.request_headers = EXTRA_HEADER;
5429 std::string response_headers(transaction.response_headers); 5756 std::string response_headers(transaction.response_headers);
5430 response_headers += ("Cache-Control: no-store\n"); 5757 response_headers += ("Cache-Control: no-store\n");
5431 transaction.response_headers = response_headers.c_str(); 5758 transaction.response_headers = response_headers.c_str();
5432 transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " 5759 transaction.data = kFullRangeData;
5433 "rg: 50-59 rg: 60-69 rg: 70-79 ";
5434 AddMockTransaction(&transaction); 5760 AddMockTransaction(&transaction);
5435 5761
5436 MockHttpRequest request(transaction); 5762 MockHttpRequest request(transaction);
5437 Context* c = new Context(); 5763 Context* c = new Context();
5438 5764
5439 int rv = cache.CreateTransaction(&c->trans); 5765 int rv = cache.CreateTransaction(&c->trans);
5440 ASSERT_EQ(net::OK, rv); 5766 ASSERT_EQ(net::OK, rv);
5441 5767
5442 // Queue another request to this transaction. We have to start this request 5768 // Queue another request to this transaction. We have to start this request
5443 // before the first one gets the response from the server and dooms the entry, 5769 // before the first one gets the response from the server and dooms the entry,
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
5517 "ETag: \"foo\"\n" 5843 "ETag: \"foo\"\n"
5518 "Cache-Control: max-age= 36000\n" 5844 "Cache-Control: max-age= 36000\n"
5519 "Accept-Ranges: bytes\n" 5845 "Accept-Ranges: bytes\n"
5520 "Content-Length: 80\n"); 5846 "Content-Length: 80\n");
5521 CreateTruncatedEntry(raw_headers, &cache); 5847 CreateTruncatedEntry(raw_headers, &cache);
5522 5848
5523 // Now make a regular request. 5849 // Now make a regular request.
5524 std::string headers; 5850 std::string headers;
5525 MockTransaction transaction(kRangeGET_TransactionOK); 5851 MockTransaction transaction(kRangeGET_TransactionOK);
5526 transaction.request_headers = EXTRA_HEADER; 5852 transaction.request_headers = EXTRA_HEADER;
5527 transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " 5853 transaction.data = kFullRangeData;
5528 "rg: 50-59 rg: 60-69 rg: 70-79 ";
5529 5854
5530 scoped_ptr<Context> c(new Context); 5855 scoped_ptr<Context> c(new Context);
5531 int rv = cache.CreateTransaction(&c->trans); 5856 int rv = cache.CreateTransaction(&c->trans);
5532 ASSERT_EQ(net::OK, rv); 5857 ASSERT_EQ(net::OK, rv);
5533 5858
5534 MockHttpRequest request(transaction); 5859 MockHttpRequest request(transaction);
5535 rv = c->trans->Start(&request, c->callback.callback(), net::BoundNetLog()); 5860 rv = c->trans->Start(&request, c->callback.callback(), net::BoundNetLog());
5536 EXPECT_EQ(net::OK, c->callback.GetResult(rv)); 5861 EXPECT_EQ(net::OK, c->callback.GetResult(rv));
5537 5862
5538 // We should have checked with the server before finishing Start(). 5863 // We should have checked with the server before finishing Start().
(...skipping 13 matching lines...) Expand all
5552 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" 5877 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
5553 "ETag: \"foo\"\n" 5878 "ETag: \"foo\"\n"
5554 "Accept-Ranges: bytes\n" 5879 "Accept-Ranges: bytes\n"
5555 "Content-Length: 80\n"); 5880 "Content-Length: 80\n");
5556 CreateTruncatedEntry(raw_headers, &cache); 5881 CreateTruncatedEntry(raw_headers, &cache);
5557 5882
5558 // Now make a regular request. 5883 // Now make a regular request.
5559 MockTransaction transaction(kRangeGET_TransactionOK); 5884 MockTransaction transaction(kRangeGET_TransactionOK);
5560 transaction.request_headers = "X-Require-Mock-Auth: dummy\r\n" 5885 transaction.request_headers = "X-Require-Mock-Auth: dummy\r\n"
5561 EXTRA_HEADER; 5886 EXTRA_HEADER;
5562 transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " 5887 transaction.data = kFullRangeData;
5563 "rg: 50-59 rg: 60-69 rg: 70-79 ";
5564 RangeTransactionServer handler; 5888 RangeTransactionServer handler;
5565 5889
5566 scoped_ptr<Context> c(new Context); 5890 scoped_ptr<Context> c(new Context);
5567 int rv = cache.CreateTransaction(&c->trans); 5891 int rv = cache.CreateTransaction(&c->trans);
5568 ASSERT_EQ(net::OK, rv); 5892 ASSERT_EQ(net::OK, rv);
5569 5893
5570 MockHttpRequest request(transaction); 5894 MockHttpRequest request(transaction);
5571 rv = c->trans->Start(&request, c->callback.callback(), net::BoundNetLog()); 5895 rv = c->trans->Start(&request, c->callback.callback(), net::BoundNetLog());
5572 EXPECT_EQ(net::OK, c->callback.GetResult(rv)); 5896 EXPECT_EQ(net::OK, c->callback.GetResult(rv));
5573 5897
(...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after
6643 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" 6967 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
6644 "ETag: \"foo\"\n" 6968 "ETag: \"foo\"\n"
6645 "Accept-Ranges: bytes\n" 6969 "Accept-Ranges: bytes\n"
6646 "Content-Length: 80\n"); 6970 "Content-Length: 80\n");
6647 CreateTruncatedEntry(raw_headers, &cache); 6971 CreateTruncatedEntry(raw_headers, &cache);
6648 6972
6649 // Now make a regular request. 6973 // Now make a regular request.
6650 std::string headers; 6974 std::string headers;
6651 MockTransaction transaction(kRangeGET_TransactionOK); 6975 MockTransaction transaction(kRangeGET_TransactionOK);
6652 transaction.request_headers = EXTRA_HEADER; 6976 transaction.request_headers = EXTRA_HEADER;
6653 transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " 6977 transaction.data = kFullRangeData;
6654 "rg: 50-59 rg: 60-69 rg: 70-79 ";
6655 6978
6656 scoped_ptr<net::HttpTransaction> trans; 6979 scoped_ptr<net::HttpTransaction> trans;
6657 ASSERT_EQ(net::OK, 6980 ASSERT_EQ(net::OK,
6658 cache.http_cache()->CreateTransaction(net::MEDIUM, &trans)); 6981 cache.http_cache()->CreateTransaction(net::MEDIUM, &trans));
6659 EXPECT_EQ(net::DEFAULT_PRIORITY, 6982 EXPECT_EQ(net::DEFAULT_PRIORITY,
6660 cache.network_layer()->last_create_transaction_priority()); 6983 cache.network_layer()->last_create_transaction_priority());
6661 6984
6662 MockHttpRequest info(transaction); 6985 MockHttpRequest info(transaction);
6663 net::TestCompletionCallback callback; 6986 net::TestCompletionCallback callback;
6664 EXPECT_EQ(net::ERR_IO_PENDING, 6987 EXPECT_EQ(net::ERR_IO_PENDING,
(...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after
7341 7664
7342 // Here the second transaction proceeds without reading the first body. 7665 // Here the second transaction proceeds without reading the first body.
7343 EXPECT_EQ(net::LOAD_STATE_WAITING_FOR_CACHE, second->trans->GetLoadState()); 7666 EXPECT_EQ(net::LOAD_STATE_WAITING_FOR_CACHE, second->trans->GetLoadState());
7344 base::MessageLoop::current()->RunUntilIdle(); 7667 base::MessageLoop::current()->RunUntilIdle();
7345 EXPECT_EQ(net::LOAD_STATE_IDLE, second->trans->GetLoadState()); 7668 EXPECT_EQ(net::LOAD_STATE_IDLE, second->trans->GetLoadState());
7346 ASSERT_TRUE(second->trans->GetResponseInfo()); 7669 ASSERT_TRUE(second->trans->GetResponseInfo());
7347 EXPECT_TRUE(second->trans->GetResponseInfo()->headers->HasHeaderValue( 7670 EXPECT_TRUE(second->trans->GetResponseInfo()->headers->HasHeaderValue(
7348 "Cache-Control", "no-store")); 7671 "Cache-Control", "no-store"));
7349 ReadAndVerifyTransaction(second->trans.get(), kSimpleGET_Transaction); 7672 ReadAndVerifyTransaction(second->trans.get(), kSimpleGET_Transaction);
7350 } 7673 }
OLDNEW
« no previous file with comments | « net/http/http_cache_transaction.cc ('k') | net/http/http_network_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698