| 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_cache.h" | 5 #include "content/browser/cache_storage/cache_storage_cache.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 931 if (rv != net::ERR_IO_PENDING) | 931 if (rv != net::ERR_IO_PENDING) |
| 932 write_side_data_callback.Run(rv); | 932 write_side_data_callback.Run(rv); |
| 933 } | 933 } |
| 934 | 934 |
| 935 void CacheStorageCache::WriteSideDataDidWrite(const ErrorCallback& callback, | 935 void CacheStorageCache::WriteSideDataDidWrite(const ErrorCallback& callback, |
| 936 disk_cache::ScopedEntryPtr entry, | 936 disk_cache::ScopedEntryPtr entry, |
| 937 int expected_bytes, | 937 int expected_bytes, |
| 938 int rv) { | 938 int rv) { |
| 939 if (rv != expected_bytes) { | 939 if (rv != expected_bytes) { |
| 940 entry->Doom(); | 940 entry->Doom(); |
| 941 UpdateCacheSize(); | 941 UpdateCacheSize(base::Bind(callback, CACHE_STORAGE_ERROR_NOT_FOUND)); |
| 942 callback.Run(CACHE_STORAGE_ERROR_NOT_FOUND); | |
| 943 return; | 942 return; |
| 944 } | 943 } |
| 945 | 944 |
| 946 UpdateCacheSize(); | 945 UpdateCacheSize(base::Bind(callback, CACHE_STORAGE_OK)); |
| 947 callback.Run(CACHE_STORAGE_OK); | |
| 948 } | 946 } |
| 949 | 947 |
| 950 void CacheStorageCache::Put(const CacheStorageBatchOperation& operation, | 948 void CacheStorageCache::Put(const CacheStorageBatchOperation& operation, |
| 951 const ErrorCallback& callback) { | 949 const ErrorCallback& callback) { |
| 952 DCHECK(BACKEND_OPEN == backend_state_ || initializing_); | 950 DCHECK(BACKEND_OPEN == backend_state_ || initializing_); |
| 953 DCHECK_EQ(CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT, operation.operation_type); | 951 DCHECK_EQ(CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT, operation.operation_type); |
| 954 | 952 |
| 955 std::unique_ptr<ServiceWorkerFetchRequest> request( | 953 std::unique_ptr<ServiceWorkerFetchRequest> request( |
| 956 new ServiceWorkerFetchRequest( | 954 new ServiceWorkerFetchRequest( |
| 957 operation.request.url, operation.request.method, | 955 operation.request.url, operation.request.method, |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1119 if (rv != expected_bytes) { | 1117 if (rv != expected_bytes) { |
| 1120 put_context->cache_entry->Doom(); | 1118 put_context->cache_entry->Doom(); |
| 1121 put_context->callback.Run(CACHE_STORAGE_ERROR_STORAGE); | 1119 put_context->callback.Run(CACHE_STORAGE_ERROR_STORAGE); |
| 1122 return; | 1120 return; |
| 1123 } | 1121 } |
| 1124 | 1122 |
| 1125 // The metadata is written, now for the response content. The data is streamed | 1123 // The metadata is written, now for the response content. The data is streamed |
| 1126 // from the blob into the cache entry. | 1124 // from the blob into the cache entry. |
| 1127 | 1125 |
| 1128 if (put_context->response->blob_uuid.empty()) { | 1126 if (put_context->response->blob_uuid.empty()) { |
| 1129 UpdateCacheSize(); | 1127 UpdateCacheSize(base::Bind(put_context->callback, CACHE_STORAGE_OK)); |
| 1130 put_context->callback.Run(CACHE_STORAGE_OK); | |
| 1131 return; | 1128 return; |
| 1132 } | 1129 } |
| 1133 | 1130 |
| 1134 DCHECK(put_context->blob_data_handle); | 1131 DCHECK(put_context->blob_data_handle); |
| 1135 | 1132 |
| 1136 disk_cache::ScopedEntryPtr entry(std::move(put_context->cache_entry)); | 1133 disk_cache::ScopedEntryPtr entry(std::move(put_context->cache_entry)); |
| 1137 put_context->cache_entry = NULL; | 1134 put_context->cache_entry = NULL; |
| 1138 | 1135 |
| 1139 auto blob_to_cache = base::MakeUnique<CacheStorageBlobToDiskCache>(); | 1136 auto blob_to_cache = base::MakeUnique<CacheStorageBlobToDiskCache>(); |
| 1140 CacheStorageBlobToDiskCache* blob_to_cache_raw = blob_to_cache.get(); | 1137 CacheStorageBlobToDiskCache* blob_to_cache_raw = blob_to_cache.get(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1161 put_context->cache_entry = std::move(entry); | 1158 put_context->cache_entry = std::move(entry); |
| 1162 | 1159 |
| 1163 active_blob_to_disk_cache_writers_.Remove(blob_to_cache_key); | 1160 active_blob_to_disk_cache_writers_.Remove(blob_to_cache_key); |
| 1164 | 1161 |
| 1165 if (!success) { | 1162 if (!success) { |
| 1166 put_context->cache_entry->Doom(); | 1163 put_context->cache_entry->Doom(); |
| 1167 put_context->callback.Run(CACHE_STORAGE_ERROR_STORAGE); | 1164 put_context->callback.Run(CACHE_STORAGE_ERROR_STORAGE); |
| 1168 return; | 1165 return; |
| 1169 } | 1166 } |
| 1170 | 1167 |
| 1171 UpdateCacheSize(); | 1168 UpdateCacheSize(base::Bind(put_context->callback, CACHE_STORAGE_OK)); |
| 1172 put_context->callback.Run(CACHE_STORAGE_OK); | |
| 1173 } | 1169 } |
| 1174 | 1170 |
| 1175 void CacheStorageCache::UpdateCacheSize() { | 1171 void CacheStorageCache::UpdateCacheSize(const base::Closure& callback) { |
| 1176 if (backend_state_ != BACKEND_OPEN) | 1172 if (backend_state_ != BACKEND_OPEN) |
| 1177 return; | 1173 return; |
| 1178 | 1174 |
| 1179 // Note that the callback holds a cache handle to keep the cache alive during | 1175 // Note that the callback holds a cache handle to keep the cache alive during |
| 1180 // the operation since this UpdateCacheSize is often run after an operation | 1176 // the operation since this UpdateCacheSize is often run after an operation |
| 1181 // completes and runs its callback. | 1177 // completes and runs its callback. |
| 1182 int rv = backend_->CalculateSizeOfAllEntries(base::Bind( | 1178 int rv = backend_->CalculateSizeOfAllEntries( |
| 1183 &CacheStorageCache::UpdateCacheSizeGotSize, | 1179 base::Bind(&CacheStorageCache::UpdateCacheSizeGotSize, |
| 1184 weak_ptr_factory_.GetWeakPtr(), base::Passed(CreateCacheHandle()))); | 1180 weak_ptr_factory_.GetWeakPtr(), |
| 1181 base::Passed(CreateCacheHandle()), callback)); |
| 1185 | 1182 |
| 1186 if (rv != net::ERR_IO_PENDING) | 1183 if (rv != net::ERR_IO_PENDING) |
| 1187 UpdateCacheSizeGotSize(CreateCacheHandle(), rv); | 1184 UpdateCacheSizeGotSize(CreateCacheHandle(), callback, rv); |
| 1188 } | 1185 } |
| 1189 | 1186 |
| 1190 void CacheStorageCache::UpdateCacheSizeGotSize( | 1187 void CacheStorageCache::UpdateCacheSizeGotSize( |
| 1191 std::unique_ptr<CacheStorageCacheHandle> cache_handle, | 1188 std::unique_ptr<CacheStorageCacheHandle> cache_handle, |
| 1189 const base::Closure& callback, |
| 1192 int current_cache_size) { | 1190 int current_cache_size) { |
| 1193 DCHECK_NE(current_cache_size, CacheStorage::kSizeUnknown); | 1191 DCHECK_NE(current_cache_size, CacheStorage::kSizeUnknown); |
| 1194 int64_t old_cache_size = cache_size_; | 1192 int64_t old_cache_size = cache_size_; |
| 1195 cache_size_ = current_cache_size; | 1193 cache_size_ = current_cache_size; |
| 1196 | 1194 |
| 1197 int64_t size_delta = current_cache_size - old_cache_size; | 1195 int64_t size_delta = current_cache_size - old_cache_size; |
| 1198 | 1196 |
| 1199 quota_manager_proxy_->NotifyStorageModified( | 1197 quota_manager_proxy_->NotifyStorageModified( |
| 1200 storage::QuotaClient::kServiceWorkerCache, origin_, | 1198 storage::QuotaClient::kServiceWorkerCache, origin_, |
| 1201 storage::kStorageTypeTemporary, size_delta); | 1199 storage::kStorageTypeTemporary, size_delta); |
| 1202 | 1200 |
| 1203 if (cache_observer_) | 1201 if (cache_observer_) |
| 1204 cache_observer_->CacheSizeUpdated(this, current_cache_size); | 1202 cache_observer_->CacheSizeUpdated(this, current_cache_size); |
| 1203 |
| 1204 callback.Run(); |
| 1205 } | 1205 } |
| 1206 | 1206 |
| 1207 void CacheStorageCache::Delete(const CacheStorageBatchOperation& operation, | 1207 void CacheStorageCache::Delete(const CacheStorageBatchOperation& operation, |
| 1208 const ErrorCallback& callback) { | 1208 const ErrorCallback& callback) { |
| 1209 DCHECK(BACKEND_OPEN == backend_state_ || initializing_); | 1209 DCHECK(BACKEND_OPEN == backend_state_ || initializing_); |
| 1210 DCHECK_EQ(CACHE_STORAGE_CACHE_OPERATION_TYPE_DELETE, | 1210 DCHECK_EQ(CACHE_STORAGE_CACHE_OPERATION_TYPE_DELETE, |
| 1211 operation.operation_type); | 1211 operation.operation_type); |
| 1212 | 1212 |
| 1213 std::unique_ptr<ServiceWorkerFetchRequest> request( | 1213 std::unique_ptr<ServiceWorkerFetchRequest> request( |
| 1214 new ServiceWorkerFetchRequest( | 1214 new ServiceWorkerFetchRequest( |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1249 if (query_cache_results->empty()) { | 1249 if (query_cache_results->empty()) { |
| 1250 callback.Run(CACHE_STORAGE_ERROR_NOT_FOUND); | 1250 callback.Run(CACHE_STORAGE_ERROR_NOT_FOUND); |
| 1251 return; | 1251 return; |
| 1252 } | 1252 } |
| 1253 | 1253 |
| 1254 for (auto& result : *query_cache_results) { | 1254 for (auto& result : *query_cache_results) { |
| 1255 disk_cache::ScopedEntryPtr entry = std::move(result.entry); | 1255 disk_cache::ScopedEntryPtr entry = std::move(result.entry); |
| 1256 entry->Doom(); | 1256 entry->Doom(); |
| 1257 } | 1257 } |
| 1258 | 1258 |
| 1259 UpdateCacheSize(); | 1259 UpdateCacheSize(base::Bind(callback, CACHE_STORAGE_OK)); |
| 1260 callback.Run(CACHE_STORAGE_OK); | |
| 1261 } | 1260 } |
| 1262 | 1261 |
| 1263 void CacheStorageCache::KeysImpl( | 1262 void CacheStorageCache::KeysImpl( |
| 1264 std::unique_ptr<ServiceWorkerFetchRequest> request, | 1263 std::unique_ptr<ServiceWorkerFetchRequest> request, |
| 1265 const CacheStorageCacheQueryParams& options, | 1264 const CacheStorageCacheQueryParams& options, |
| 1266 const RequestsCallback& callback) { | 1265 const RequestsCallback& callback) { |
| 1267 DCHECK_NE(BACKEND_UNINITIALIZED, backend_state_); | 1266 DCHECK_NE(BACKEND_UNINITIALIZED, backend_state_); |
| 1268 if (backend_state_ != BACKEND_OPEN) { | 1267 if (backend_state_ != BACKEND_OPEN) { |
| 1269 callback.Run(CACHE_STORAGE_ERROR_STORAGE, std::unique_ptr<Requests>()); | 1268 callback.Run(CACHE_STORAGE_ERROR_STORAGE, std::unique_ptr<Requests>()); |
| 1270 return; | 1269 return; |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1481 temp_entry, INDEX_RESPONSE_BODY, INDEX_SIDE_DATA); | 1480 temp_entry, INDEX_RESPONSE_BODY, INDEX_SIDE_DATA); |
| 1482 return blob_storage_context_->AddFinishedBlob(&blob_data); | 1481 return blob_storage_context_->AddFinishedBlob(&blob_data); |
| 1483 } | 1482 } |
| 1484 | 1483 |
| 1485 std::unique_ptr<CacheStorageCacheHandle> | 1484 std::unique_ptr<CacheStorageCacheHandle> |
| 1486 CacheStorageCache::CreateCacheHandle() { | 1485 CacheStorageCache::CreateCacheHandle() { |
| 1487 return cache_storage_->CreateCacheHandle(this); | 1486 return cache_storage_->CreateCacheHandle(this); |
| 1488 } | 1487 } |
| 1489 | 1488 |
| 1490 } // namespace content | 1489 } // namespace content |
| OLD | NEW |