| OLD | NEW |
| 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 "net/http/http_cache.h" | 5 #include "net/http/http_cache.h" |
| 6 | 6 |
| 7 #include "base/hash_tables.h" | 7 #include "base/hash_tables.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/scoped_vector.h" | 9 #include "base/scoped_vector.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 | 529 |
| 530 EntryMap entries_; | 530 EntryMap entries_; |
| 531 int open_count_; | 531 int open_count_; |
| 532 int create_count_; | 532 int create_count_; |
| 533 bool fail_requests_; | 533 bool fail_requests_; |
| 534 bool soft_failures_; | 534 bool soft_failures_; |
| 535 }; | 535 }; |
| 536 | 536 |
| 537 class MockBackendFactory : public net::HttpCache::BackendFactory { | 537 class MockBackendFactory : public net::HttpCache::BackendFactory { |
| 538 public: | 538 public: |
| 539 virtual int CreateBackend(disk_cache::Backend** backend, | 539 virtual int CreateBackend(net::NetLog* /* net_log */, |
| 540 disk_cache::Backend** backend, |
| 540 net::CompletionCallback* callback) { | 541 net::CompletionCallback* callback) { |
| 541 *backend = new MockDiskCache(); | 542 *backend = new MockDiskCache(); |
| 542 return net::OK; | 543 return net::OK; |
| 543 } | 544 } |
| 544 }; | 545 }; |
| 545 | 546 |
| 546 class MockHttpCache { | 547 class MockHttpCache { |
| 547 public: | 548 public: |
| 548 MockHttpCache() | 549 MockHttpCache() |
| 549 : http_cache_(new MockNetworkLayer(), new MockBackendFactory()) { | 550 : http_cache_(new MockNetworkLayer(), NULL, new MockBackendFactory()) { |
| 550 } | 551 } |
| 551 | 552 |
| 552 explicit MockHttpCache(net::HttpCache::BackendFactory* disk_cache_factory) | 553 explicit MockHttpCache(net::HttpCache::BackendFactory* disk_cache_factory) |
| 553 : http_cache_(new MockNetworkLayer(), disk_cache_factory) { | 554 : http_cache_(new MockNetworkLayer(), NULL, disk_cache_factory) { |
| 554 } | 555 } |
| 555 | 556 |
| 556 net::HttpCache* http_cache() { return &http_cache_; } | 557 net::HttpCache* http_cache() { return &http_cache_; } |
| 557 | 558 |
| 558 MockNetworkLayer* network_layer() { | 559 MockNetworkLayer* network_layer() { |
| 559 return static_cast<MockNetworkLayer*>(http_cache_.network_layer()); | 560 return static_cast<MockNetworkLayer*>(http_cache_.network_layer()); |
| 560 } | 561 } |
| 561 MockDiskCache* disk_cache() { | 562 MockDiskCache* disk_cache() { |
| 562 TestCompletionCallback cb; | 563 TestCompletionCallback cb; |
| 563 disk_cache::Backend* backend; | 564 disk_cache::Backend* backend; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 } | 604 } |
| 604 | 605 |
| 605 // Helper function to synchronously open a backend entry. | 606 // Helper function to synchronously open a backend entry. |
| 606 bool OpenBackendEntry(const std::string& key, disk_cache::Entry** entry) { | 607 bool OpenBackendEntry(const std::string& key, disk_cache::Entry** entry) { |
| 607 TestCompletionCallback cb; | 608 TestCompletionCallback cb; |
| 608 int rv = disk_cache()->OpenEntry(key, entry, &cb); | 609 int rv = disk_cache()->OpenEntry(key, entry, &cb); |
| 609 return (cb.GetResult(rv) == net::OK); | 610 return (cb.GetResult(rv) == net::OK); |
| 610 } | 611 } |
| 611 | 612 |
| 612 // Helper function to synchronously create a backend entry. | 613 // Helper function to synchronously create a backend entry. |
| 613 bool CreateBackendEntry(const std::string& key, disk_cache::Entry** entry) { | 614 bool CreateBackendEntry(const std::string& key, disk_cache::Entry** entry, |
| 615 net::NetLog* /* net_log */) { |
| 614 TestCompletionCallback cb; | 616 TestCompletionCallback cb; |
| 615 int rv = disk_cache()->CreateEntry(key, entry, &cb); | 617 int rv = disk_cache()->CreateEntry(key, entry, &cb); |
| 616 return (cb.GetResult(rv) == net::OK); | 618 return (cb.GetResult(rv) == net::OK); |
| 617 } | 619 } |
| 618 | 620 |
| 619 private: | 621 private: |
| 620 net::HttpCache http_cache_; | 622 net::HttpCache http_cache_; |
| 621 }; | 623 }; |
| 622 | 624 |
| 623 // This version of the disk cache doesn't invoke CreateEntry callbacks. | 625 // This version of the disk cache doesn't invoke CreateEntry callbacks. |
| 624 class MockDiskCacheNoCB : public MockDiskCache { | 626 class MockDiskCacheNoCB : public MockDiskCache { |
| 625 virtual int CreateEntry(const std::string& key, disk_cache::Entry** entry, | 627 virtual int CreateEntry(const std::string& key, disk_cache::Entry** entry, |
| 626 net::CompletionCallback* callback) { | 628 net::CompletionCallback* callback) { |
| 627 return net::ERR_IO_PENDING; | 629 return net::ERR_IO_PENDING; |
| 628 } | 630 } |
| 629 }; | 631 }; |
| 630 | 632 |
| 631 class MockBackendNoCbFactory : public net::HttpCache::BackendFactory { | 633 class MockBackendNoCbFactory : public net::HttpCache::BackendFactory { |
| 632 public: | 634 public: |
| 633 virtual int CreateBackend(disk_cache::Backend** backend, | 635 virtual int CreateBackend(net::NetLog* /* net_log */, |
| 636 disk_cache::Backend** backend, |
| 634 net::CompletionCallback* callback) { | 637 net::CompletionCallback* callback) { |
| 635 *backend = new MockDiskCacheNoCB(); | 638 *backend = new MockDiskCacheNoCB(); |
| 636 return net::OK; | 639 return net::OK; |
| 637 } | 640 } |
| 638 }; | 641 }; |
| 639 | 642 |
| 640 // This backend factory allows us to control the backend instantiation. | 643 // This backend factory allows us to control the backend instantiation. |
| 641 class MockBlockingBackendFactory : public net::HttpCache::BackendFactory { | 644 class MockBlockingBackendFactory : public net::HttpCache::BackendFactory { |
| 642 public: | 645 public: |
| 643 MockBlockingBackendFactory() | 646 MockBlockingBackendFactory() |
| 644 : backend_(NULL), callback_(NULL), block_(true), fail_(false) {} | 647 : backend_(NULL), callback_(NULL), block_(true), fail_(false) {} |
| 645 | 648 |
| 646 virtual int CreateBackend(disk_cache::Backend** backend, | 649 virtual int CreateBackend(net::NetLog* /* net_log */, |
| 650 disk_cache::Backend** backend, |
| 647 net::CompletionCallback* callback) { | 651 net::CompletionCallback* callback) { |
| 648 if (!block_) { | 652 if (!block_) { |
| 649 if (!fail_) | 653 if (!fail_) |
| 650 *backend = new MockDiskCache(); | 654 *backend = new MockDiskCache(); |
| 651 return Result(); | 655 return Result(); |
| 652 } | 656 } |
| 653 | 657 |
| 654 backend_ = backend; | 658 backend_ = backend; |
| 655 callback_ = callback; | 659 callback_ = callback; |
| 656 return net::ERR_IO_PENDING; | 660 return net::ERR_IO_PENDING; |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1030 EXPECT_EQ(0, cache.disk_cache()->open_count()); | 1034 EXPECT_EQ(0, cache.disk_cache()->open_count()); |
| 1031 EXPECT_EQ(1, cache.disk_cache()->create_count()); | 1035 EXPECT_EQ(1, cache.disk_cache()->create_count()); |
| 1032 } | 1036 } |
| 1033 | 1037 |
| 1034 TEST(HttpCache, SimpleGETNoDiskCache) { | 1038 TEST(HttpCache, SimpleGETNoDiskCache) { |
| 1035 MockHttpCache cache; | 1039 MockHttpCache cache; |
| 1036 | 1040 |
| 1037 cache.disk_cache()->set_fail_requests(); | 1041 cache.disk_cache()->set_fail_requests(); |
| 1038 | 1042 |
| 1039 net::CapturingBoundNetLog log(net::CapturingNetLog::kUnbounded); | 1043 net::CapturingBoundNetLog log(net::CapturingNetLog::kUnbounded); |
| 1044 log.SetLogLevel(net::NetLog::LOG_BASIC); |
| 1040 | 1045 |
| 1041 // Read from the network, and don't use the cache. | 1046 // Read from the network, and don't use the cache. |
| 1042 RunTransactionTestWithLog(cache.http_cache(), kSimpleGET_Transaction, | 1047 RunTransactionTestWithLog(cache.http_cache(), kSimpleGET_Transaction, |
| 1043 log.bound()); | 1048 log.bound()); |
| 1044 | 1049 |
| 1045 // Check that the NetLog was filled as expected. | 1050 // Check that the NetLog was filled as expected. |
| 1046 // (We attempted to both Open and Create entries, but both failed). | 1051 // (We attempted to both Open and Create entries, but both failed). |
| 1047 net::CapturingNetLog::EntryList entries; | 1052 net::CapturingNetLog::EntryList entries; |
| 1048 log.GetEntries(&entries); | 1053 log.GetEntries(&entries); |
| 1049 | 1054 |
| 1050 EXPECT_EQ(6u, entries.size()); | 1055 EXPECT_EQ(6u, entries.size()); |
| 1051 EXPECT_TRUE(net::LogContainsBeginEvent( | 1056 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1052 entries, 0, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1057 entries, 0, net::NetLog::TYPE_HTTP_CACHE_GET_BACKEND)); |
| 1053 EXPECT_TRUE(net::LogContainsEndEvent( | 1058 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1054 entries, 1, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1059 entries, 1, net::NetLog::TYPE_HTTP_CACHE_GET_BACKEND)); |
| 1055 EXPECT_TRUE(net::LogContainsBeginEvent( | 1060 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1056 entries, 2, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); | 1061 entries, 2, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); |
| 1057 EXPECT_TRUE(net::LogContainsEndEvent( | 1062 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1058 entries, 3, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); | 1063 entries, 3, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); |
| 1059 EXPECT_TRUE(net::LogContainsBeginEvent( | 1064 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1060 entries, 4, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); | 1065 entries, 4, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); |
| 1061 EXPECT_TRUE(net::LogContainsEndEvent( | 1066 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1062 entries, 5, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); | 1067 entries, 5, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); |
| 1063 | 1068 |
| 1064 EXPECT_EQ(1, cache.network_layer()->transaction_count()); | 1069 EXPECT_EQ(1, cache.network_layer()->transaction_count()); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1136 EXPECT_EQ(2, cache.network_layer()->transaction_count()); | 1141 EXPECT_EQ(2, cache.network_layer()->transaction_count()); |
| 1137 EXPECT_EQ(1, cache.disk_cache()->open_count()); | 1142 EXPECT_EQ(1, cache.disk_cache()->open_count()); |
| 1138 EXPECT_EQ(2, cache.disk_cache()->create_count()); | 1143 EXPECT_EQ(2, cache.disk_cache()->create_count()); |
| 1139 } | 1144 } |
| 1140 | 1145 |
| 1141 TEST(HttpCache, SimpleGET_LoadOnlyFromCache_Hit) { | 1146 TEST(HttpCache, SimpleGET_LoadOnlyFromCache_Hit) { |
| 1142 MockHttpCache cache; | 1147 MockHttpCache cache; |
| 1143 | 1148 |
| 1144 net::CapturingBoundNetLog log(net::CapturingNetLog::kUnbounded); | 1149 net::CapturingBoundNetLog log(net::CapturingNetLog::kUnbounded); |
| 1145 | 1150 |
| 1151 // This prevents a number of write events from being logged. |
| 1152 log.SetLogLevel(net::NetLog::LOG_BASIC); |
| 1153 |
| 1146 // write to the cache | 1154 // write to the cache |
| 1147 RunTransactionTestWithLog(cache.http_cache(), kSimpleGET_Transaction, | 1155 RunTransactionTestWithLog(cache.http_cache(), kSimpleGET_Transaction, |
| 1148 log.bound()); | 1156 log.bound()); |
| 1149 | 1157 |
| 1150 // Check that the NetLog was filled as expected. | 1158 // Check that the NetLog was filled as expected. |
| 1151 net::CapturingNetLog::EntryList entries; | 1159 net::CapturingNetLog::EntryList entries; |
| 1152 log.GetEntries(&entries); | 1160 log.GetEntries(&entries); |
| 1153 | 1161 |
| 1154 EXPECT_EQ(8u, entries.size()); | 1162 EXPECT_EQ(8u, entries.size()); |
| 1155 EXPECT_TRUE(net::LogContainsBeginEvent( | 1163 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1156 entries, 0, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1164 entries, 0, net::NetLog::TYPE_HTTP_CACHE_GET_BACKEND)); |
| 1157 EXPECT_TRUE(net::LogContainsEndEvent( | 1165 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1158 entries, 1, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1166 entries, 1, net::NetLog::TYPE_HTTP_CACHE_GET_BACKEND)); |
| 1159 EXPECT_TRUE(net::LogContainsBeginEvent( | 1167 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1160 entries, 2, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); | 1168 entries, 2, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); |
| 1161 EXPECT_TRUE(net::LogContainsEndEvent( | 1169 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1162 entries, 3, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); | 1170 entries, 3, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); |
| 1163 EXPECT_TRUE(net::LogContainsBeginEvent( | 1171 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1164 entries, 4, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); | 1172 entries, 4, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); |
| 1165 EXPECT_TRUE(net::LogContainsEndEvent( | 1173 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1166 entries, 5, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); | 1174 entries, 5, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); |
| 1167 EXPECT_TRUE(net::LogContainsBeginEvent( | 1175 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1168 entries, 6, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1176 entries, 6, net::NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY)); |
| 1169 EXPECT_TRUE(net::LogContainsEndEvent( | 1177 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1170 entries, 7, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1178 entries, 7, net::NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY)); |
| 1171 | 1179 |
| 1172 // force this transaction to read from the cache | 1180 // force this transaction to read from the cache |
| 1173 MockTransaction transaction(kSimpleGET_Transaction); | 1181 MockTransaction transaction(kSimpleGET_Transaction); |
| 1174 transaction.load_flags |= net::LOAD_ONLY_FROM_CACHE; | 1182 transaction.load_flags |= net::LOAD_ONLY_FROM_CACHE; |
| 1175 | 1183 |
| 1176 log.Clear(); | 1184 log.Clear(); |
| 1177 | 1185 |
| 1178 RunTransactionTestWithLog(cache.http_cache(), transaction, log.bound()); | 1186 RunTransactionTestWithLog(cache.http_cache(), transaction, log.bound()); |
| 1179 | 1187 |
| 1180 // Check that the NetLog was filled as expected. | 1188 // Check that the NetLog was filled as expected. |
| 1181 log.GetEntries(&entries); | 1189 log.GetEntries(&entries); |
| 1182 | 1190 |
| 1183 EXPECT_EQ(8u, entries.size()); | 1191 EXPECT_EQ(8u, entries.size()); |
| 1184 EXPECT_TRUE(net::LogContainsBeginEvent( | 1192 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1185 entries, 0, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1193 entries, 0, net::NetLog::TYPE_HTTP_CACHE_GET_BACKEND)); |
| 1186 EXPECT_TRUE(net::LogContainsEndEvent( | 1194 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1187 entries, 1, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1195 entries, 1, net::NetLog::TYPE_HTTP_CACHE_GET_BACKEND)); |
| 1188 EXPECT_TRUE(net::LogContainsBeginEvent( | 1196 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1189 entries, 2, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); | 1197 entries, 2, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); |
| 1190 EXPECT_TRUE(net::LogContainsEndEvent( | 1198 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1191 entries, 3, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); | 1199 entries, 3, net::NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY)); |
| 1192 EXPECT_TRUE(net::LogContainsBeginEvent( | 1200 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1193 entries, 4, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1201 entries, 4, net::NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY)); |
| 1194 EXPECT_TRUE(net::LogContainsEndEvent( | 1202 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1195 entries, 5, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1203 entries, 5, net::NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY)); |
| 1196 EXPECT_TRUE(net::LogContainsBeginEvent( | 1204 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1197 entries, 6, net::NetLog::TYPE_HTTP_CACHE_READ_INFO)); | 1205 entries, 6, net::NetLog::TYPE_HTTP_CACHE_READ_INFO)); |
| 1198 EXPECT_TRUE(net::LogContainsEndEvent( | 1206 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1199 entries, 7, net::NetLog::TYPE_HTTP_CACHE_READ_INFO)); | 1207 entries, 7, net::NetLog::TYPE_HTTP_CACHE_READ_INFO)); |
| 1200 | 1208 |
| 1201 EXPECT_EQ(1, cache.network_layer()->transaction_count()); | 1209 EXPECT_EQ(1, cache.network_layer()->transaction_count()); |
| 1202 EXPECT_EQ(1, cache.disk_cache()->open_count()); | 1210 EXPECT_EQ(1, cache.disk_cache()->open_count()); |
| 1203 EXPECT_EQ(1, cache.disk_cache()->create_count()); | 1211 EXPECT_EQ(1, cache.disk_cache()->create_count()); |
| 1204 } | 1212 } |
| 1205 | 1213 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1266 | 1274 |
| 1267 // Write to the cache. | 1275 // Write to the cache. |
| 1268 RunTransactionTest(cache.http_cache(), kSimpleGET_Transaction); | 1276 RunTransactionTest(cache.http_cache(), kSimpleGET_Transaction); |
| 1269 | 1277 |
| 1270 // Force this transaction to write to the cache again. | 1278 // Force this transaction to write to the cache again. |
| 1271 MockTransaction transaction(kSimpleGET_Transaction); | 1279 MockTransaction transaction(kSimpleGET_Transaction); |
| 1272 transaction.load_flags |= net::LOAD_BYPASS_CACHE; | 1280 transaction.load_flags |= net::LOAD_BYPASS_CACHE; |
| 1273 | 1281 |
| 1274 net::CapturingBoundNetLog log(net::CapturingNetLog::kUnbounded); | 1282 net::CapturingBoundNetLog log(net::CapturingNetLog::kUnbounded); |
| 1275 | 1283 |
| 1284 // This prevents a number of write events from being logged. |
| 1285 log.SetLogLevel(net::NetLog::LOG_BASIC); |
| 1286 |
| 1276 RunTransactionTestWithLog(cache.http_cache(), transaction, log.bound()); | 1287 RunTransactionTestWithLog(cache.http_cache(), transaction, log.bound()); |
| 1277 | 1288 |
| 1278 // Check that the NetLog was filled as expected. | 1289 // Check that the NetLog was filled as expected. |
| 1279 net::CapturingNetLog::EntryList entries; | 1290 net::CapturingNetLog::EntryList entries; |
| 1280 log.GetEntries(&entries); | 1291 log.GetEntries(&entries); |
| 1281 | 1292 |
| 1282 EXPECT_EQ(8u, entries.size()); | 1293 EXPECT_EQ(8u, entries.size()); |
| 1283 EXPECT_TRUE(net::LogContainsBeginEvent( | 1294 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1284 entries, 0, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1295 entries, 0, net::NetLog::TYPE_HTTP_CACHE_GET_BACKEND)); |
| 1285 EXPECT_TRUE(net::LogContainsEndEvent( | 1296 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1286 entries, 1, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1297 entries, 1, net::NetLog::TYPE_HTTP_CACHE_GET_BACKEND)); |
| 1287 EXPECT_TRUE(net::LogContainsBeginEvent( | 1298 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1288 entries, 2, net::NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY)); | 1299 entries, 2, net::NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY)); |
| 1289 EXPECT_TRUE(net::LogContainsEndEvent( | 1300 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1290 entries, 3, net::NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY)); | 1301 entries, 3, net::NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY)); |
| 1291 EXPECT_TRUE(net::LogContainsBeginEvent( | 1302 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1292 entries, 4, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); | 1303 entries, 4, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); |
| 1293 EXPECT_TRUE(net::LogContainsEndEvent( | 1304 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1294 entries, 5, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); | 1305 entries, 5, net::NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY)); |
| 1295 EXPECT_TRUE(net::LogContainsBeginEvent( | 1306 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 1296 entries, 6, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1307 entries, 6, net::NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY)); |
| 1297 EXPECT_TRUE(net::LogContainsEndEvent( | 1308 EXPECT_TRUE(net::LogContainsEndEvent( |
| 1298 entries, 7, net::NetLog::TYPE_HTTP_CACHE_WAITING)); | 1309 entries, 7, net::NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY)); |
| 1299 | 1310 |
| 1300 EXPECT_EQ(2, cache.network_layer()->transaction_count()); | 1311 EXPECT_EQ(2, cache.network_layer()->transaction_count()); |
| 1301 EXPECT_EQ(0, cache.disk_cache()->open_count()); | 1312 EXPECT_EQ(0, cache.disk_cache()->open_count()); |
| 1302 EXPECT_EQ(2, cache.disk_cache()->create_count()); | 1313 EXPECT_EQ(2, cache.disk_cache()->create_count()); |
| 1303 } | 1314 } |
| 1304 | 1315 |
| 1305 TEST(HttpCache, SimpleGET_LoadBypassCache_Implicit) { | 1316 TEST(HttpCache, SimpleGET_LoadBypassCache_Implicit) { |
| 1306 MockHttpCache cache; | 1317 MockHttpCache cache; |
| 1307 | 1318 |
| 1308 // write to the cache | 1319 // write to the cache |
| (...skipping 1986 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3295 | 3306 |
| 3296 RemoveMockTransaction(&transaction); | 3307 RemoveMockTransaction(&transaction); |
| 3297 } | 3308 } |
| 3298 | 3309 |
| 3299 // Tests that we can handle cached 206 responses that are not sparse. | 3310 // Tests that we can handle cached 206 responses that are not sparse. |
| 3300 TEST(HttpCache, GET_Previous206_NotSparse) { | 3311 TEST(HttpCache, GET_Previous206_NotSparse) { |
| 3301 MockHttpCache cache; | 3312 MockHttpCache cache; |
| 3302 | 3313 |
| 3303 // Create a disk cache entry that stores 206 headers while not being sparse. | 3314 // Create a disk cache entry that stores 206 headers while not being sparse. |
| 3304 disk_cache::Entry* entry; | 3315 disk_cache::Entry* entry; |
| 3305 ASSERT_TRUE(cache.CreateBackendEntry(kSimpleGET_Transaction.url, &entry)); | 3316 ASSERT_TRUE(cache.CreateBackendEntry(kSimpleGET_Transaction.url, &entry, |
| 3317 NULL)); |
| 3306 | 3318 |
| 3307 std::string raw_headers(kRangeGET_TransactionOK.status); | 3319 std::string raw_headers(kRangeGET_TransactionOK.status); |
| 3308 raw_headers.append("\n"); | 3320 raw_headers.append("\n"); |
| 3309 raw_headers.append(kRangeGET_TransactionOK.response_headers); | 3321 raw_headers.append(kRangeGET_TransactionOK.response_headers); |
| 3310 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), | 3322 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), |
| 3311 raw_headers.size()); | 3323 raw_headers.size()); |
| 3312 | 3324 |
| 3313 net::HttpResponseInfo response; | 3325 net::HttpResponseInfo response; |
| 3314 response.headers = new net::HttpResponseHeaders(raw_headers); | 3326 response.headers = new net::HttpResponseHeaders(raw_headers); |
| 3315 EXPECT_TRUE(MockHttpCache::WriteResponseInfo(entry, &response, true, false)); | 3327 EXPECT_TRUE(MockHttpCache::WriteResponseInfo(entry, &response, true, false)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 3338 } | 3350 } |
| 3339 | 3351 |
| 3340 // Tests that we can handle cached 206 responses that are not sparse. This time | 3352 // Tests that we can handle cached 206 responses that are not sparse. This time |
| 3341 // we issue a range request and expect to receive a range. | 3353 // we issue a range request and expect to receive a range. |
| 3342 TEST(HttpCache, RangeGET_Previous206_NotSparse_2) { | 3354 TEST(HttpCache, RangeGET_Previous206_NotSparse_2) { |
| 3343 MockHttpCache cache; | 3355 MockHttpCache cache; |
| 3344 AddMockTransaction(&kRangeGET_TransactionOK); | 3356 AddMockTransaction(&kRangeGET_TransactionOK); |
| 3345 | 3357 |
| 3346 // Create a disk cache entry that stores 206 headers while not being sparse. | 3358 // Create a disk cache entry that stores 206 headers while not being sparse. |
| 3347 disk_cache::Entry* entry; | 3359 disk_cache::Entry* entry; |
| 3348 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry)); | 3360 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry, |
| 3361 NULL)); |
| 3349 | 3362 |
| 3350 std::string raw_headers(kRangeGET_TransactionOK.status); | 3363 std::string raw_headers(kRangeGET_TransactionOK.status); |
| 3351 raw_headers.append("\n"); | 3364 raw_headers.append("\n"); |
| 3352 raw_headers.append(kRangeGET_TransactionOK.response_headers); | 3365 raw_headers.append(kRangeGET_TransactionOK.response_headers); |
| 3353 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), | 3366 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), |
| 3354 raw_headers.size()); | 3367 raw_headers.size()); |
| 3355 | 3368 |
| 3356 net::HttpResponseInfo response; | 3369 net::HttpResponseInfo response; |
| 3357 response.headers = new net::HttpResponseHeaders(raw_headers); | 3370 response.headers = new net::HttpResponseHeaders(raw_headers); |
| 3358 EXPECT_TRUE(MockHttpCache::WriteResponseInfo(entry, &response, true, false)); | 3371 EXPECT_TRUE(MockHttpCache::WriteResponseInfo(entry, &response, true, false)); |
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3936 EXPECT_EQ(1, cache.disk_cache()->create_count()); | 3949 EXPECT_EQ(1, cache.disk_cache()->create_count()); |
| 3937 | 3950 |
| 3938 RemoveMockTransaction(&kRangeGET_TransactionOK); | 3951 RemoveMockTransaction(&kRangeGET_TransactionOK); |
| 3939 } | 3952 } |
| 3940 #endif | 3953 #endif |
| 3941 | 3954 |
| 3942 // Tests the handling of the "truncation" flag. | 3955 // Tests the handling of the "truncation" flag. |
| 3943 TEST(HttpCache, WriteResponseInfo_Truncated) { | 3956 TEST(HttpCache, WriteResponseInfo_Truncated) { |
| 3944 MockHttpCache cache; | 3957 MockHttpCache cache; |
| 3945 disk_cache::Entry* entry; | 3958 disk_cache::Entry* entry; |
| 3946 ASSERT_TRUE(cache.CreateBackendEntry("http://www.google.com", &entry)); | 3959 ASSERT_TRUE(cache.CreateBackendEntry("http://www.google.com", &entry, |
| 3960 NULL)); |
| 3947 | 3961 |
| 3948 std::string headers("HTTP/1.1 200 OK"); | 3962 std::string headers("HTTP/1.1 200 OK"); |
| 3949 headers = net::HttpUtil::AssembleRawHeaders(headers.data(), headers.size()); | 3963 headers = net::HttpUtil::AssembleRawHeaders(headers.data(), headers.size()); |
| 3950 net::HttpResponseInfo response; | 3964 net::HttpResponseInfo response; |
| 3951 response.headers = new net::HttpResponseHeaders(headers); | 3965 response.headers = new net::HttpResponseHeaders(headers); |
| 3952 | 3966 |
| 3953 // Set the last argument for this to be an incomplete request. | 3967 // Set the last argument for this to be an incomplete request. |
| 3954 EXPECT_TRUE(MockHttpCache::WriteResponseInfo(entry, &response, true, true)); | 3968 EXPECT_TRUE(MockHttpCache::WriteResponseInfo(entry, &response, true, true)); |
| 3955 bool truncated = false; | 3969 bool truncated = false; |
| 3956 EXPECT_TRUE(MockHttpCache::ReadResponseInfo(entry, &response, &truncated)); | 3970 EXPECT_TRUE(MockHttpCache::ReadResponseInfo(entry, &response, &truncated)); |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4135 RemoveMockTransaction(&transaction); | 4149 RemoveMockTransaction(&transaction); |
| 4136 } | 4150 } |
| 4137 | 4151 |
| 4138 // Tests that we can continue with a request that was interrupted. | 4152 // Tests that we can continue with a request that was interrupted. |
| 4139 TEST(HttpCache, GET_IncompleteResource) { | 4153 TEST(HttpCache, GET_IncompleteResource) { |
| 4140 MockHttpCache cache; | 4154 MockHttpCache cache; |
| 4141 AddMockTransaction(&kRangeGET_TransactionOK); | 4155 AddMockTransaction(&kRangeGET_TransactionOK); |
| 4142 | 4156 |
| 4143 // Create a disk cache entry that stores an incomplete resource. | 4157 // Create a disk cache entry that stores an incomplete resource. |
| 4144 disk_cache::Entry* entry; | 4158 disk_cache::Entry* entry; |
| 4145 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry)); | 4159 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry, |
| 4160 NULL)); |
| 4146 | 4161 |
| 4147 std::string raw_headers("HTTP/1.1 200 OK\n" | 4162 std::string raw_headers("HTTP/1.1 200 OK\n" |
| 4148 "Last-Modified: Sat, 18 Apr 2009 01:10:43 GMT\n" | 4163 "Last-Modified: Sat, 18 Apr 2009 01:10:43 GMT\n" |
| 4149 "ETag: \"foo\"\n" | 4164 "ETag: \"foo\"\n" |
| 4150 "Accept-Ranges: bytes\n" | 4165 "Accept-Ranges: bytes\n" |
| 4151 "Content-Length: 80\n"); | 4166 "Content-Length: 80\n"); |
| 4152 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), | 4167 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), |
| 4153 raw_headers.size()); | 4168 raw_headers.size()); |
| 4154 | 4169 |
| 4155 net::HttpResponseInfo response; | 4170 net::HttpResponseInfo response; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4195 entry->Close(); | 4210 entry->Close(); |
| 4196 } | 4211 } |
| 4197 | 4212 |
| 4198 // Tests that we delete truncated entries if the server changes its mind midway. | 4213 // Tests that we delete truncated entries if the server changes its mind midway. |
| 4199 TEST(HttpCache, GET_IncompleteResource2) { | 4214 TEST(HttpCache, GET_IncompleteResource2) { |
| 4200 MockHttpCache cache; | 4215 MockHttpCache cache; |
| 4201 AddMockTransaction(&kRangeGET_TransactionOK); | 4216 AddMockTransaction(&kRangeGET_TransactionOK); |
| 4202 | 4217 |
| 4203 // Create a disk cache entry that stores an incomplete resource. | 4218 // Create a disk cache entry that stores an incomplete resource. |
| 4204 disk_cache::Entry* entry; | 4219 disk_cache::Entry* entry; |
| 4205 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry)); | 4220 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry, |
| 4221 NULL)); |
| 4206 | 4222 |
| 4207 | 4223 |
| 4208 // Content-length will be intentionally bad. | 4224 // Content-length will be intentionally bad. |
| 4209 std::string raw_headers("HTTP/1.1 200 OK\n" | 4225 std::string raw_headers("HTTP/1.1 200 OK\n" |
| 4210 "Last-Modified: Sat, 18 Apr 2009 01:10:43 GMT\n" | 4226 "Last-Modified: Sat, 18 Apr 2009 01:10:43 GMT\n" |
| 4211 "ETag: \"foo\"\n" | 4227 "ETag: \"foo\"\n" |
| 4212 "Accept-Ranges: bytes\n" | 4228 "Accept-Ranges: bytes\n" |
| 4213 "Content-Length: 50\n"); | 4229 "Content-Length: 50\n"); |
| 4214 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), | 4230 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), |
| 4215 raw_headers.size()); | 4231 raw_headers.size()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4254 } | 4270 } |
| 4255 | 4271 |
| 4256 // Tests that when we cancel a request that was interrupted, we mark it again | 4272 // Tests that when we cancel a request that was interrupted, we mark it again |
| 4257 // as truncated. | 4273 // as truncated. |
| 4258 TEST(HttpCache, GET_CancelIncompleteResource) { | 4274 TEST(HttpCache, GET_CancelIncompleteResource) { |
| 4259 MockHttpCache cache; | 4275 MockHttpCache cache; |
| 4260 AddMockTransaction(&kRangeGET_TransactionOK); | 4276 AddMockTransaction(&kRangeGET_TransactionOK); |
| 4261 | 4277 |
| 4262 // Create a disk cache entry that stores an incomplete resource. | 4278 // Create a disk cache entry that stores an incomplete resource. |
| 4263 disk_cache::Entry* entry; | 4279 disk_cache::Entry* entry; |
| 4264 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry)); | 4280 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry, |
| 4281 NULL)); |
| 4265 | 4282 |
| 4266 std::string raw_headers("HTTP/1.1 200 OK\n" | 4283 std::string raw_headers("HTTP/1.1 200 OK\n" |
| 4267 "Last-Modified: Sat, 18 Apr 2009 01:10:43 GMT\n" | 4284 "Last-Modified: Sat, 18 Apr 2009 01:10:43 GMT\n" |
| 4268 "ETag: \"foo\"\n" | 4285 "ETag: \"foo\"\n" |
| 4269 "Accept-Ranges: bytes\n" | 4286 "Accept-Ranges: bytes\n" |
| 4270 "Content-Length: 80\n"); | 4287 "Content-Length: 80\n"); |
| 4271 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), | 4288 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), |
| 4272 raw_headers.size()); | 4289 raw_headers.size()); |
| 4273 | 4290 |
| 4274 net::HttpResponseInfo response; | 4291 net::HttpResponseInfo response; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4319 entry->Close(); | 4336 entry->Close(); |
| 4320 } | 4337 } |
| 4321 | 4338 |
| 4322 // Tests that we can handle range requests when we have a truncated entry. | 4339 // Tests that we can handle range requests when we have a truncated entry. |
| 4323 TEST(HttpCache, RangeGET_IncompleteResource) { | 4340 TEST(HttpCache, RangeGET_IncompleteResource) { |
| 4324 MockHttpCache cache; | 4341 MockHttpCache cache; |
| 4325 AddMockTransaction(&kRangeGET_TransactionOK); | 4342 AddMockTransaction(&kRangeGET_TransactionOK); |
| 4326 | 4343 |
| 4327 // Create a disk cache entry that stores an incomplete resource. | 4344 // Create a disk cache entry that stores an incomplete resource. |
| 4328 disk_cache::Entry* entry; | 4345 disk_cache::Entry* entry; |
| 4329 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry)); | 4346 ASSERT_TRUE(cache.CreateBackendEntry(kRangeGET_TransactionOK.url, &entry, |
| 4347 NULL)); |
| 4330 | 4348 |
| 4331 // Content-length will be intentionally bogus. | 4349 // Content-length will be intentionally bogus. |
| 4332 std::string raw_headers("HTTP/1.1 200 OK\n" | 4350 std::string raw_headers("HTTP/1.1 200 OK\n" |
| 4333 "Last-Modified: something\n" | 4351 "Last-Modified: something\n" |
| 4334 "ETag: \"foo\"\n" | 4352 "ETag: \"foo\"\n" |
| 4335 "Accept-Ranges: bytes\n" | 4353 "Accept-Ranges: bytes\n" |
| 4336 "Content-Length: 10\n"); | 4354 "Content-Length: 10\n"); |
| 4337 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), | 4355 raw_headers = net::HttpUtil::AssembleRawHeaders(raw_headers.data(), |
| 4338 raw_headers.size()); | 4356 raw_headers.size()); |
| 4339 | 4357 |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4822 // Now return 200 when validating the entry so the metadata will be lost. | 4840 // Now return 200 when validating the entry so the metadata will be lost. |
| 4823 MockTransaction trans2(kTypicalGET_Transaction); | 4841 MockTransaction trans2(kTypicalGET_Transaction); |
| 4824 trans2.load_flags = net::LOAD_VALIDATE_CACHE; | 4842 trans2.load_flags = net::LOAD_VALIDATE_CACHE; |
| 4825 RunTransactionTestWithResponseInfo(cache.http_cache(), trans2, &response); | 4843 RunTransactionTestWithResponseInfo(cache.http_cache(), trans2, &response); |
| 4826 EXPECT_TRUE(response.metadata.get() == NULL); | 4844 EXPECT_TRUE(response.metadata.get() == NULL); |
| 4827 | 4845 |
| 4828 EXPECT_EQ(3, cache.network_layer()->transaction_count()); | 4846 EXPECT_EQ(3, cache.network_layer()->transaction_count()); |
| 4829 EXPECT_EQ(4, cache.disk_cache()->open_count()); | 4847 EXPECT_EQ(4, cache.disk_cache()->open_count()); |
| 4830 EXPECT_EQ(1, cache.disk_cache()->create_count()); | 4848 EXPECT_EQ(1, cache.disk_cache()->create_count()); |
| 4831 } | 4849 } |
| OLD | NEW |