Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/cache_storage/cache_storage_manager.h" | 5 #include "content/browser/cache_storage/cache_storage_manager.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 198 cache_manager_->EnumerateCaches( | 198 cache_manager_->EnumerateCaches( |
| 199 origin, base::Bind(&CacheStorageManagerTest::StringsAndErrorCallback, | 199 origin, base::Bind(&CacheStorageManagerTest::StringsAndErrorCallback, |
| 200 base::Unretained(this), base::Unretained(&loop))); | 200 base::Unretained(this), base::Unretained(&loop))); |
| 201 loop.Run(); | 201 loop.Run(); |
| 202 | 202 |
| 203 return callback_error_ == CACHE_STORAGE_OK; | 203 return callback_error_ == CACHE_STORAGE_OK; |
| 204 } | 204 } |
| 205 | 205 |
| 206 bool StorageMatch(const GURL& origin, | 206 bool StorageMatch(const GURL& origin, |
| 207 const std::string& cache_name, | 207 const std::string& cache_name, |
| 208 const GURL& url) { | 208 const GURL& url, |
| 209 std::unique_ptr<ServiceWorkerFetchRequest> request( | 209 const CacheStorageCacheQueryParams& match_params = |
| 210 new ServiceWorkerFetchRequest()); | 210 CacheStorageCacheQueryParams()) { |
| 211 request->url = url; | 211 ServiceWorkerFetchRequest request; |
| 212 request.url = url; | |
| 213 return StorageMatchWithRequest(origin, cache_name, request, match_params); | |
| 214 } | |
| 215 | |
| 216 bool StorageMatchWithRequest( | |
| 217 const GURL& origin, | |
| 218 const std::string& cache_name, | |
| 219 const ServiceWorkerFetchRequest& request, | |
| 220 const CacheStorageCacheQueryParams& match_params = | |
| 221 CacheStorageCacheQueryParams()) { | |
| 222 std::unique_ptr<ServiceWorkerFetchRequest> unique_request = | |
| 223 base::MakeUnique<ServiceWorkerFetchRequest>(request); | |
| 224 | |
| 212 base::RunLoop loop; | 225 base::RunLoop loop; |
| 213 cache_manager_->MatchCache( | 226 cache_manager_->MatchCache( |
| 214 origin, cache_name, std::move(request), | 227 origin, cache_name, std::move(unique_request), match_params, |
| 215 base::Bind(&CacheStorageManagerTest::CacheMatchCallback, | 228 base::Bind(&CacheStorageManagerTest::CacheMatchCallback, |
| 216 base::Unretained(this), base::Unretained(&loop))); | 229 base::Unretained(this), base::Unretained(&loop))); |
| 217 loop.Run(); | 230 loop.Run(); |
| 218 | 231 |
| 219 return callback_error_ == CACHE_STORAGE_OK; | 232 return callback_error_ == CACHE_STORAGE_OK; |
| 220 } | 233 } |
| 221 | 234 |
| 222 bool StorageMatchAll(const GURL& origin, const GURL& url) { | 235 bool StorageMatchAll(const GURL& origin, |
| 223 std::unique_ptr<ServiceWorkerFetchRequest> request( | 236 const GURL& url, |
| 224 new ServiceWorkerFetchRequest()); | 237 const CacheStorageCacheQueryParams& match_params = |
| 225 request->url = url; | 238 CacheStorageCacheQueryParams()) { |
| 239 ServiceWorkerFetchRequest request; | |
| 240 request.url = url; | |
| 241 return StorageMatchAllWithRequest(origin, request, match_params); | |
| 242 } | |
| 243 | |
| 244 bool StorageMatchAllWithRequest( | |
| 245 const GURL& origin, | |
| 246 const ServiceWorkerFetchRequest& request, | |
| 247 const CacheStorageCacheQueryParams& match_params = | |
| 248 CacheStorageCacheQueryParams()) { | |
| 249 std::unique_ptr<ServiceWorkerFetchRequest> unique_request = | |
| 250 base::MakeUnique<ServiceWorkerFetchRequest>(request); | |
| 226 base::RunLoop loop; | 251 base::RunLoop loop; |
| 227 cache_manager_->MatchAllCaches( | 252 cache_manager_->MatchAllCaches( |
| 228 origin, std::move(request), | 253 origin, std::move(unique_request), match_params, |
| 229 base::Bind(&CacheStorageManagerTest::CacheMatchCallback, | 254 base::Bind(&CacheStorageManagerTest::CacheMatchCallback, |
| 230 base::Unretained(this), base::Unretained(&loop))); | 255 base::Unretained(this), base::Unretained(&loop))); |
| 231 loop.Run(); | 256 loop.Run(); |
| 232 | 257 |
| 233 return callback_error_ == CACHE_STORAGE_OK; | 258 return callback_error_ == CACHE_STORAGE_OK; |
| 259 | |
|
nhiroki
2016/08/18 00:05:43
blank line
jkarlin
2016/08/18 14:08:23
Done.
| |
| 234 } | 260 } |
| 235 | 261 |
| 236 bool CachePut(CacheStorageCache* cache, const GURL& url) { | 262 bool CachePut(CacheStorageCache* cache, const GURL& url) { |
| 237 return CachePutWithStatusCode(cache, url, 200); | 263 ServiceWorkerFetchRequest request; |
| 264 request.url = url; | |
| 265 | |
| 266 return CachePutWithStatusCode(cache, request, 200); | |
| 267 } | |
| 268 | |
| 269 bool CachePutWithRequestAndHeaders( | |
| 270 CacheStorageCache* cache, | |
| 271 const ServiceWorkerFetchRequest& request, | |
| 272 const ServiceWorkerHeaderMap& response_headers) { | |
| 273 return CachePutWithStatusCode(cache, request, 200, response_headers); | |
| 238 } | 274 } |
| 239 | 275 |
| 240 bool CachePutWithStatusCode(CacheStorageCache* cache, | 276 bool CachePutWithStatusCode(CacheStorageCache* cache, |
| 241 const GURL& url, | 277 const ServiceWorkerFetchRequest& request, |
| 242 int status_code) { | 278 int status_code, |
| 243 ServiceWorkerFetchRequest request; | 279 const ServiceWorkerHeaderMap& response_headers = |
| 244 request.url = url; | 280 ServiceWorkerHeaderMap()) { |
| 245 | |
| 246 std::unique_ptr<storage::BlobDataBuilder> blob_data( | 281 std::unique_ptr<storage::BlobDataBuilder> blob_data( |
| 247 new storage::BlobDataBuilder(base::GenerateGUID())); | 282 new storage::BlobDataBuilder(base::GenerateGUID())); |
| 248 blob_data->AppendData(url.spec()); | 283 blob_data->AppendData(request.url.spec()); |
| 249 | 284 |
| 250 std::unique_ptr<storage::BlobDataHandle> blob_handle = | 285 std::unique_ptr<storage::BlobDataHandle> blob_handle = |
| 251 blob_storage_context_->AddFinishedBlob(blob_data.get()); | 286 blob_storage_context_->AddFinishedBlob(blob_data.get()); |
| 252 ServiceWorkerResponse response( | 287 ServiceWorkerResponse response( |
| 253 url, status_code, "OK", blink::WebServiceWorkerResponseTypeDefault, | 288 request.url, status_code, "OK", |
| 254 ServiceWorkerHeaderMap(), blob_handle->uuid(), url.spec().size(), | 289 blink::WebServiceWorkerResponseTypeDefault, response_headers, |
| 255 GURL(), blink::WebServiceWorkerResponseErrorUnknown, base::Time(), | 290 blob_handle->uuid(), request.url.spec().size(), GURL(), |
| 291 blink::WebServiceWorkerResponseErrorUnknown, base::Time(), | |
| 256 false /* is_in_cache_storage */, | 292 false /* is_in_cache_storage */, |
| 257 std::string() /* cache_storage_cache_name */, | 293 std::string() /* cache_storage_cache_name */, |
| 258 ServiceWorkerHeaderList() /* cors_exposed_header_names */); | 294 ServiceWorkerHeaderList() /* cors_exposed_header_names */); |
| 259 | 295 |
| 260 CacheStorageBatchOperation operation; | 296 CacheStorageBatchOperation operation; |
| 261 operation.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT; | 297 operation.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT; |
| 262 operation.request = request; | 298 operation.request = request; |
| 263 operation.response = response; | 299 operation.response = response; |
| 264 | 300 |
| 265 base::RunLoop loop; | 301 base::RunLoop loop; |
| 266 cache->BatchOperation( | 302 cache->BatchOperation( |
| 267 std::vector<CacheStorageBatchOperation>(1, operation), | 303 std::vector<CacheStorageBatchOperation>(1, operation), |
| 268 base::Bind(&CacheStorageManagerTest::CachePutCallback, | 304 base::Bind(&CacheStorageManagerTest::CachePutCallback, |
| 269 base::Unretained(this), base::Unretained(&loop))); | 305 base::Unretained(this), base::Unretained(&loop))); |
| 270 loop.Run(); | 306 loop.Run(); |
| 271 | 307 |
| 272 return callback_error_ == CACHE_STORAGE_OK; | 308 return callback_error_ == CACHE_STORAGE_OK; |
| 273 } | 309 } |
| 274 | 310 |
| 275 bool CacheMatch(CacheStorageCache* cache, const GURL& url) { | 311 bool CacheMatch(CacheStorageCache* cache, const GURL& url) { |
| 276 std::unique_ptr<ServiceWorkerFetchRequest> request( | 312 std::unique_ptr<ServiceWorkerFetchRequest> request( |
| 277 new ServiceWorkerFetchRequest()); | 313 new ServiceWorkerFetchRequest()); |
| 278 request->url = url; | 314 request->url = url; |
| 279 base::RunLoop loop; | 315 base::RunLoop loop; |
| 280 cache->Match(std::move(request), | 316 cache->Match(std::move(request), CacheStorageCacheQueryParams(), |
| 281 base::Bind(&CacheStorageManagerTest::CacheMatchCallback, | 317 base::Bind(&CacheStorageManagerTest::CacheMatchCallback, |
| 282 base::Unretained(this), base::Unretained(&loop))); | 318 base::Unretained(this), base::Unretained(&loop))); |
| 283 loop.Run(); | 319 loop.Run(); |
| 284 | 320 |
| 285 return callback_error_ == CACHE_STORAGE_OK; | 321 return callback_error_ == CACHE_STORAGE_OK; |
| 286 } | 322 } |
| 287 | 323 |
| 288 CacheStorage* CacheStorageForOrigin(const GURL& origin) { | 324 CacheStorage* CacheStorageForOrigin(const GURL& origin) { |
| 289 return cache_manager_->FindOrCreateCacheStorage(origin); | 325 return cache_manager_->FindOrCreateCacheStorage(origin); |
| 290 } | 326 } |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 592 | 628 |
| 593 // Do some busy work on a different cache to move the cache pool threads | 629 // Do some busy work on a different cache to move the cache pool threads |
| 594 // along and trigger the bug. | 630 // along and trigger the bug. |
| 595 EXPECT_TRUE(Open(origin1_, "bar")); | 631 EXPECT_TRUE(Open(origin1_, "bar")); |
| 596 EXPECT_TRUE(CachePut(callback_cache_handle_->value(), kTestURL)); | 632 EXPECT_TRUE(CachePut(callback_cache_handle_->value(), kTestURL)); |
| 597 EXPECT_TRUE(CacheMatch(callback_cache_handle_->value(), kTestURL)); | 633 EXPECT_TRUE(CacheMatch(callback_cache_handle_->value(), kTestURL)); |
| 598 } | 634 } |
| 599 | 635 |
| 600 TEST_P(CacheStorageManagerTestP, StorageMatchAllEntryExistsTwice) { | 636 TEST_P(CacheStorageManagerTestP, StorageMatchAllEntryExistsTwice) { |
| 601 EXPECT_TRUE(Open(origin1_, "foo")); | 637 EXPECT_TRUE(Open(origin1_, "foo")); |
| 602 EXPECT_TRUE(CachePutWithStatusCode(callback_cache_handle_->value(), | 638 ServiceWorkerFetchRequest request; |
| 603 GURL("http://example.com/foo"), 200)); | 639 request.url = GURL("http://example.com/foo"); |
| 640 EXPECT_TRUE( | |
| 641 CachePutWithStatusCode(callback_cache_handle_->value(), request, 200)); | |
| 604 EXPECT_TRUE(Open(origin1_, "bar")); | 642 EXPECT_TRUE(Open(origin1_, "bar")); |
| 605 EXPECT_TRUE(CachePutWithStatusCode(callback_cache_handle_->value(), | 643 EXPECT_TRUE( |
| 606 GURL("http://example.com/foo"), 201)); | 644 CachePutWithStatusCode(callback_cache_handle_->value(), request, 201)); |
| 607 | 645 |
| 608 EXPECT_TRUE(StorageMatchAll(origin1_, GURL("http://example.com/foo"))); | 646 EXPECT_TRUE(StorageMatchAll(origin1_, GURL("http://example.com/foo"))); |
| 609 | 647 |
| 610 // The caches need to be searched in order of creation, so verify that the | 648 // The caches need to be searched in order of creation, so verify that the |
| 611 // response came from the first cache. | 649 // response came from the first cache. |
| 612 EXPECT_EQ(200, callback_cache_handle_response_->status_code); | 650 EXPECT_EQ(200, callback_cache_handle_response_->status_code); |
| 613 } | 651 } |
| 614 | 652 |
| 615 TEST_P(CacheStorageManagerTestP, StorageMatchInOneOfMany) { | 653 TEST_P(CacheStorageManagerTestP, StorageMatchInOneOfMany) { |
| 616 EXPECT_TRUE(Open(origin1_, "foo")); | 654 EXPECT_TRUE(Open(origin1_, "foo")); |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 922 EXPECT_EQ(0, quota_manager_proxy_->notify_storage_accessed_count()); | 960 EXPECT_EQ(0, quota_manager_proxy_->notify_storage_accessed_count()); |
| 923 } | 961 } |
| 924 | 962 |
| 925 TEST_P(CacheStorageManagerTestP, SizeThenCloseStorageAccessed) { | 963 TEST_P(CacheStorageManagerTestP, SizeThenCloseStorageAccessed) { |
| 926 EXPECT_EQ(0, GetSizeThenCloseAllCaches(origin1_)); | 964 EXPECT_EQ(0, GetSizeThenCloseAllCaches(origin1_)); |
| 927 // GetSizeThenCloseAllCaches is not part of the web API and should not notify | 965 // GetSizeThenCloseAllCaches is not part of the web API and should not notify |
| 928 // the quota manager of an access. | 966 // the quota manager of an access. |
| 929 EXPECT_EQ(0, quota_manager_proxy_->notify_storage_accessed_count()); | 967 EXPECT_EQ(0, quota_manager_proxy_->notify_storage_accessed_count()); |
| 930 } | 968 } |
| 931 | 969 |
| 970 TEST_P(CacheStorageManagerTestP, StorageMatch_IgnoreSearch) { | |
| 971 EXPECT_TRUE(Open(origin1_, "foo")); | |
| 972 EXPECT_TRUE(CachePut(callback_cache_handle_->value(), | |
| 973 GURL("http://example.com/foo?bar"))); | |
| 974 | |
| 975 EXPECT_FALSE(StorageMatch(origin1_, "foo", GURL("http://example.com/foo"))); | |
| 976 | |
| 977 CacheStorageCacheQueryParams match_params; | |
| 978 match_params.ignore_search = true; | |
| 979 EXPECT_TRUE(StorageMatch(origin1_, "foo", GURL("http://example.com/foo"), | |
| 980 match_params)); | |
| 981 } | |
| 982 | |
| 983 TEST_P(CacheStorageManagerTestP, StorageMatch_IgnoreMethod) { | |
| 984 GURL url = GURL("http://example.com/foo"); | |
| 985 EXPECT_TRUE(Open(origin1_, "foo")); | |
| 986 EXPECT_TRUE(CachePut(callback_cache_handle_->value(), url)); | |
| 987 | |
| 988 ServiceWorkerFetchRequest post_request; | |
| 989 post_request.url = url; | |
| 990 post_request.method = "POST"; | |
| 991 EXPECT_FALSE(StorageMatchWithRequest(origin1_, "foo", post_request)); | |
| 992 | |
| 993 CacheStorageCacheQueryParams match_params; | |
| 994 match_params.ignore_method = true; | |
| 995 EXPECT_TRUE( | |
| 996 StorageMatchWithRequest(origin1_, "foo", post_request, match_params)); | |
| 997 } | |
| 998 | |
| 999 TEST_P(CacheStorageManagerTestP, StorageMatch_IgnoreVary) { | |
| 1000 GURL url = GURL("http://example.com/foo"); | |
| 1001 EXPECT_TRUE(Open(origin1_, "foo")); | |
| 1002 | |
| 1003 ServiceWorkerFetchRequest request; | |
| 1004 request.url = url; | |
| 1005 request.headers["vary_foo"] = "foo"; | |
| 1006 | |
| 1007 ServiceWorkerHeaderMap response_headers; | |
| 1008 response_headers["vary"] = "vary_foo"; | |
| 1009 | |
| 1010 EXPECT_TRUE(CachePutWithRequestAndHeaders(callback_cache_handle_->value(), | |
| 1011 request, response_headers)); | |
| 1012 EXPECT_TRUE(StorageMatchWithRequest(origin1_, "foo", request)); | |
| 1013 | |
| 1014 request.headers["vary_foo"] = "bar"; | |
| 1015 EXPECT_FALSE(StorageMatchWithRequest(origin1_, "foo", request)); | |
| 1016 | |
| 1017 CacheStorageCacheQueryParams match_params; | |
| 1018 match_params.ignore_vary = true; | |
| 1019 EXPECT_TRUE(StorageMatchWithRequest(origin1_, "foo", request, match_params)); | |
| 1020 } | |
| 1021 | |
| 1022 TEST_P(CacheStorageManagerTestP, StorageMatchAll_IgnoreSearch) { | |
| 1023 EXPECT_TRUE(Open(origin1_, "foo")); | |
| 1024 EXPECT_TRUE(CachePut(callback_cache_handle_->value(), | |
| 1025 GURL("http://example.com/foo?bar"))); | |
| 1026 | |
| 1027 EXPECT_FALSE(StorageMatchAll(origin1_, GURL("http://example.com/foo"))); | |
| 1028 | |
| 1029 CacheStorageCacheQueryParams match_params; | |
| 1030 match_params.ignore_search = true; | |
| 1031 EXPECT_TRUE( | |
| 1032 StorageMatchAll(origin1_, GURL("http://example.com/foo"), match_params)); | |
| 1033 } | |
| 1034 | |
| 1035 TEST_P(CacheStorageManagerTestP, StorageMatchAll_IgnoreMethod) { | |
| 1036 GURL url = GURL("http://example.com/foo"); | |
| 1037 EXPECT_TRUE(Open(origin1_, "foo")); | |
| 1038 EXPECT_TRUE(CachePut(callback_cache_handle_->value(), url)); | |
| 1039 | |
| 1040 ServiceWorkerFetchRequest post_request; | |
| 1041 post_request.url = url; | |
| 1042 post_request.method = "POST"; | |
| 1043 EXPECT_FALSE(StorageMatchAllWithRequest(origin1_, post_request)); | |
| 1044 | |
| 1045 CacheStorageCacheQueryParams match_params; | |
| 1046 match_params.ignore_method = true; | |
| 1047 EXPECT_TRUE(StorageMatchAllWithRequest(origin1_, post_request, match_params)); | |
| 1048 } | |
| 1049 | |
| 1050 TEST_P(CacheStorageManagerTestP, StorageMatchAll_IgnoreVary) { | |
| 1051 GURL url = GURL("http://example.com/foo"); | |
| 1052 EXPECT_TRUE(Open(origin1_, "foo")); | |
| 1053 | |
| 1054 ServiceWorkerFetchRequest request; | |
| 1055 request.url = url; | |
| 1056 request.headers["vary_foo"] = "foo"; | |
| 1057 | |
| 1058 ServiceWorkerHeaderMap response_headers; | |
| 1059 response_headers["vary"] = "vary_foo"; | |
| 1060 | |
| 1061 EXPECT_TRUE(CachePutWithRequestAndHeaders(callback_cache_handle_->value(), | |
| 1062 request, response_headers)); | |
| 1063 EXPECT_TRUE(StorageMatchAllWithRequest(origin1_, request)); | |
| 1064 | |
| 1065 request.headers["vary_foo"] = "bar"; | |
| 1066 EXPECT_FALSE(StorageMatchAllWithRequest(origin1_, request)); | |
| 1067 | |
| 1068 CacheStorageCacheQueryParams match_params; | |
| 1069 match_params.ignore_vary = true; | |
| 1070 EXPECT_TRUE(StorageMatchAllWithRequest(origin1_, request, match_params)); | |
| 1071 } | |
| 1072 | |
| 932 class CacheStorageMigrationTest : public CacheStorageManagerTest { | 1073 class CacheStorageMigrationTest : public CacheStorageManagerTest { |
| 933 protected: | 1074 protected: |
| 934 CacheStorageMigrationTest() : cache1_("foo"), cache2_("bar") {} | 1075 CacheStorageMigrationTest() : cache1_("foo"), cache2_("bar") {} |
| 935 | 1076 |
| 936 void SetUp() override { | 1077 void SetUp() override { |
| 937 CacheStorageManagerTest::SetUp(); | 1078 CacheStorageManagerTest::SetUp(); |
| 938 | 1079 |
| 939 // Populate a cache, then move it to the "legacy" location | 1080 // Populate a cache, then move it to the "legacy" location |
| 940 // so that tests can verify the results of migration. | 1081 // so that tests can verify the results of migration. |
| 941 legacy_path_ = CacheStorageManager::ConstructLegacyOriginPath( | 1082 legacy_path_ = CacheStorageManager::ConstructLegacyOriginPath( |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1299 | 1440 |
| 1300 INSTANTIATE_TEST_CASE_P(CacheStorageManagerTests, | 1441 INSTANTIATE_TEST_CASE_P(CacheStorageManagerTests, |
| 1301 CacheStorageManagerTestP, | 1442 CacheStorageManagerTestP, |
| 1302 ::testing::Values(false, true)); | 1443 ::testing::Values(false, true)); |
| 1303 | 1444 |
| 1304 INSTANTIATE_TEST_CASE_P(CacheStorageQuotaClientTests, | 1445 INSTANTIATE_TEST_CASE_P(CacheStorageQuotaClientTests, |
| 1305 CacheStorageQuotaClientTestP, | 1446 CacheStorageQuotaClientTestP, |
| 1306 ::testing::Values(false, true)); | 1447 ::testing::Values(false, true)); |
| 1307 | 1448 |
| 1308 } // namespace content | 1449 } // namespace content |
| OLD | NEW |