| 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 20 matching lines...) Expand all Loading... |
| 31 #include "net/base/completion_callback.h" | 31 #include "net/base/completion_callback.h" |
| 32 #include "net/base/io_buffer.h" | 32 #include "net/base/io_buffer.h" |
| 33 #include "net/base/net_errors.h" | 33 #include "net/base/net_errors.h" |
| 34 #include "net/disk_cache/disk_cache.h" | 34 #include "net/disk_cache/disk_cache.h" |
| 35 #include "net/url_request/url_request_context_getter.h" | 35 #include "net/url_request/url_request_context_getter.h" |
| 36 #include "storage/browser/blob/blob_data_builder.h" | 36 #include "storage/browser/blob/blob_data_builder.h" |
| 37 #include "storage/browser/blob/blob_data_handle.h" | 37 #include "storage/browser/blob/blob_data_handle.h" |
| 38 #include "storage/browser/blob/blob_storage_context.h" | 38 #include "storage/browser/blob/blob_storage_context.h" |
| 39 #include "storage/browser/blob/blob_url_request_job_factory.h" | 39 #include "storage/browser/blob/blob_url_request_job_factory.h" |
| 40 #include "storage/browser/quota/quota_manager_proxy.h" | 40 #include "storage/browser/quota/quota_manager_proxy.h" |
| 41 #include "storage/common/storage_histograms.h" |
| 41 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerResponseType.h" | 42 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerResponseType.h" |
| 42 | 43 |
| 43 namespace content { | 44 namespace content { |
| 44 | 45 |
| 45 namespace { | 46 namespace { |
| 46 | 47 |
| 47 const size_t kMaxQueryCacheResultBytes = | 48 const size_t kMaxQueryCacheResultBytes = |
| 48 1024 * 1024 * 10; // 10MB query cache limit | 49 1024 * 1024 * 10; // 10MB query cache limit |
| 49 | 50 |
| 51 const char kRecordBytesLabel[] = "DiskCache.CacheStorage"; |
| 52 |
| 50 // This class ensures that the cache and the entry have a lifetime as long as | 53 // This class ensures that the cache and the entry have a lifetime as long as |
| 51 // the blob that is created to contain them. | 54 // the blob that is created to contain them. |
| 52 class CacheStorageCacheDataHandle | 55 class CacheStorageCacheDataHandle |
| 53 : public storage::BlobDataBuilder::DataHandle { | 56 : public storage::BlobDataBuilder::DataHandle { |
| 54 public: | 57 public: |
| 55 CacheStorageCacheDataHandle( | 58 CacheStorageCacheDataHandle( |
| 56 std::unique_ptr<CacheStorageCacheHandle> cache_handle, | 59 std::unique_ptr<CacheStorageCacheHandle> cache_handle, |
| 57 disk_cache::ScopedEntryPtr entry) | 60 disk_cache::ScopedEntryPtr entry) |
| 58 : cache_handle_(std::move(cache_handle)), entry_(std::move(entry)) {} | 61 : cache_handle_(std::move(cache_handle)), entry_(std::move(entry)) {} |
| 59 | 62 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 | 181 |
| 179 void ReadMetadataDidReadMetadata(disk_cache::Entry* entry, | 182 void ReadMetadataDidReadMetadata(disk_cache::Entry* entry, |
| 180 const MetadataCallback& callback, | 183 const MetadataCallback& callback, |
| 181 scoped_refptr<net::IOBufferWithSize> buffer, | 184 scoped_refptr<net::IOBufferWithSize> buffer, |
| 182 int rv) { | 185 int rv) { |
| 183 if (rv != buffer->size()) { | 186 if (rv != buffer->size()) { |
| 184 callback.Run(std::unique_ptr<proto::CacheMetadata>()); | 187 callback.Run(std::unique_ptr<proto::CacheMetadata>()); |
| 185 return; | 188 return; |
| 186 } | 189 } |
| 187 | 190 |
| 191 if (rv > 0) |
| 192 storage::RecordBytesRead(kRecordBytesLabel, rv); |
| 193 |
| 188 std::unique_ptr<proto::CacheMetadata> metadata(new proto::CacheMetadata()); | 194 std::unique_ptr<proto::CacheMetadata> metadata(new proto::CacheMetadata()); |
| 189 | 195 |
| 190 if (!metadata->ParseFromArray(buffer->data(), buffer->size())) { | 196 if (!metadata->ParseFromArray(buffer->data(), buffer->size())) { |
| 191 callback.Run(std::unique_ptr<proto::CacheMetadata>()); | 197 callback.Run(std::unique_ptr<proto::CacheMetadata>()); |
| 192 return; | 198 return; |
| 193 } | 199 } |
| 194 | 200 |
| 195 callback.Run(std::move(metadata)); | 201 callback.Run(std::move(metadata)); |
| 196 } | 202 } |
| 197 | 203 |
| (...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 995 void CacheStorageCache::WriteSideDataDidWrite(const ErrorCallback& callback, | 1001 void CacheStorageCache::WriteSideDataDidWrite(const ErrorCallback& callback, |
| 996 disk_cache::ScopedEntryPtr entry, | 1002 disk_cache::ScopedEntryPtr entry, |
| 997 int expected_bytes, | 1003 int expected_bytes, |
| 998 int rv) { | 1004 int rv) { |
| 999 if (rv != expected_bytes) { | 1005 if (rv != expected_bytes) { |
| 1000 entry->Doom(); | 1006 entry->Doom(); |
| 1001 UpdateCacheSize(base::Bind(callback, CACHE_STORAGE_ERROR_NOT_FOUND)); | 1007 UpdateCacheSize(base::Bind(callback, CACHE_STORAGE_ERROR_NOT_FOUND)); |
| 1002 return; | 1008 return; |
| 1003 } | 1009 } |
| 1004 | 1010 |
| 1011 if (rv > 0) |
| 1012 storage::RecordBytesWritten(kRecordBytesLabel, rv); |
| 1013 |
| 1005 UpdateCacheSize(base::Bind(callback, CACHE_STORAGE_OK)); | 1014 UpdateCacheSize(base::Bind(callback, CACHE_STORAGE_OK)); |
| 1006 } | 1015 } |
| 1007 | 1016 |
| 1008 void CacheStorageCache::Put(const CacheStorageBatchOperation& operation, | 1017 void CacheStorageCache::Put(const CacheStorageBatchOperation& operation, |
| 1009 const ErrorCallback& callback) { | 1018 const ErrorCallback& callback) { |
| 1010 DCHECK(BACKEND_OPEN == backend_state_ || initializing_); | 1019 DCHECK(BACKEND_OPEN == backend_state_ || initializing_); |
| 1011 DCHECK_EQ(CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT, operation.operation_type); | 1020 DCHECK_EQ(CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT, operation.operation_type); |
| 1012 | 1021 |
| 1013 std::unique_ptr<ServiceWorkerFetchRequest> request( | 1022 std::unique_ptr<ServiceWorkerFetchRequest> request( |
| 1014 new ServiceWorkerFetchRequest( | 1023 new ServiceWorkerFetchRequest( |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 void CacheStorageCache::PutDidWriteHeaders( | 1175 void CacheStorageCache::PutDidWriteHeaders( |
| 1167 std::unique_ptr<PutContext> put_context, | 1176 std::unique_ptr<PutContext> put_context, |
| 1168 int expected_bytes, | 1177 int expected_bytes, |
| 1169 int rv) { | 1178 int rv) { |
| 1170 if (rv != expected_bytes) { | 1179 if (rv != expected_bytes) { |
| 1171 put_context->cache_entry->Doom(); | 1180 put_context->cache_entry->Doom(); |
| 1172 put_context->callback.Run(CACHE_STORAGE_ERROR_STORAGE); | 1181 put_context->callback.Run(CACHE_STORAGE_ERROR_STORAGE); |
| 1173 return; | 1182 return; |
| 1174 } | 1183 } |
| 1175 | 1184 |
| 1185 if (rv > 0) |
| 1186 storage::RecordBytesWritten(kRecordBytesLabel, rv); |
| 1187 |
| 1176 // The metadata is written, now for the response content. The data is streamed | 1188 // The metadata is written, now for the response content. The data is streamed |
| 1177 // from the blob into the cache entry. | 1189 // from the blob into the cache entry. |
| 1178 | 1190 |
| 1179 if (put_context->response->blob_uuid.empty()) { | 1191 if (put_context->response->blob_uuid.empty()) { |
| 1180 UpdateCacheSize(base::Bind(put_context->callback, CACHE_STORAGE_OK)); | 1192 UpdateCacheSize(base::Bind(put_context->callback, CACHE_STORAGE_OK)); |
| 1181 return; | 1193 return; |
| 1182 } | 1194 } |
| 1183 | 1195 |
| 1184 DCHECK(put_context->blob_data_handle); | 1196 DCHECK(put_context->blob_data_handle); |
| 1185 | 1197 |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1483 temp_entry, INDEX_RESPONSE_BODY, INDEX_SIDE_DATA); | 1495 temp_entry, INDEX_RESPONSE_BODY, INDEX_SIDE_DATA); |
| 1484 return blob_storage_context_->AddFinishedBlob(&blob_data); | 1496 return blob_storage_context_->AddFinishedBlob(&blob_data); |
| 1485 } | 1497 } |
| 1486 | 1498 |
| 1487 std::unique_ptr<CacheStorageCacheHandle> | 1499 std::unique_ptr<CacheStorageCacheHandle> |
| 1488 CacheStorageCache::CreateCacheHandle() { | 1500 CacheStorageCache::CreateCacheHandle() { |
| 1489 return cache_storage_->CreateCacheHandle(this); | 1501 return cache_storage_->CreateCacheHandle(this); |
| 1490 } | 1502 } |
| 1491 | 1503 |
| 1492 } // namespace content | 1504 } // namespace content |
| OLD | NEW |