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

Side by Side Diff: content/browser/service_worker/service_worker_cache.cc

Issue 672943002: [ServiceWorkerCache] Return the real size of the cache in GetOriginUsage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@quota_modified
Patch Set: Address comments from PS5 Created 6 years, 1 month 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
OLDNEW
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/service_worker/service_worker_cache.h" 5 #include "content/browser/service_worker/service_worker_cache.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/guid.h" 10 #include "base/guid.h"
(...skipping 24 matching lines...) Expand all
35 35
36 enum EntryIndex { INDEX_HEADERS = 0, INDEX_RESPONSE_BODY }; 36 enum EntryIndex { INDEX_HEADERS = 0, INDEX_RESPONSE_BODY };
37 37
38 // The maximum size of an individual cache. Ultimately cache size is controlled 38 // The maximum size of an individual cache. Ultimately cache size is controlled
39 // per-origin. 39 // per-origin.
40 const int kMaxCacheBytes = 512 * 1024 * 1024; 40 const int kMaxCacheBytes = 512 * 1024 * 1024;
41 41
42 // Buffer size for cache and blob reading/writing. 42 // Buffer size for cache and blob reading/writing.
43 const int kBufferSize = 1024 * 512; 43 const int kBufferSize = 1024 * 512;
44 44
45 void NotReachedCompletionCallback(int rv) {
46 NOTREACHED();
47 }
48
45 blink::WebServiceWorkerResponseType ProtoResponseTypeToWebResponseType( 49 blink::WebServiceWorkerResponseType ProtoResponseTypeToWebResponseType(
46 ServiceWorkerRequestResponseHeaders_ResponseType response_type) { 50 ServiceWorkerRequestResponseHeaders_ResponseType response_type) {
47 switch (response_type) { 51 switch (response_type) {
48 case ServiceWorkerRequestResponseHeaders_ResponseType_BASIC_TYPE: 52 case ServiceWorkerRequestResponseHeaders_ResponseType_BASIC_TYPE:
49 return blink::WebServiceWorkerResponseTypeBasic; 53 return blink::WebServiceWorkerResponseTypeBasic;
50 case ServiceWorkerRequestResponseHeaders_ResponseType_CORS_TYPE: 54 case ServiceWorkerRequestResponseHeaders_ResponseType_CORS_TYPE:
51 return blink::WebServiceWorkerResponseTypeCORS; 55 return blink::WebServiceWorkerResponseTypeCORS;
52 case ServiceWorkerRequestResponseHeaders_ResponseType_DEFAULT_TYPE: 56 case ServiceWorkerRequestResponseHeaders_ResponseType_DEFAULT_TYPE:
53 return blink::WebServiceWorkerResponseTypeDefault; 57 return blink::WebServiceWorkerResponseTypeDefault;
54 case ServiceWorkerRequestResponseHeaders_ResponseType_ERROR_TYPE: 58 case ServiceWorkerRequestResponseHeaders_ResponseType_ERROR_TYPE:
(...skipping 904 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 int rv = iterator.OpenNextEntry(enumerated_entry, open_entry_callback); 963 int rv = iterator.OpenNextEntry(enumerated_entry, open_entry_callback);
960 964
961 if (rv != net::ERR_IO_PENDING) 965 if (rv != net::ERR_IO_PENDING)
962 open_entry_callback.Run(rv); 966 open_entry_callback.Run(rv);
963 } 967 }
964 968
965 void ServiceWorkerCache::Close() { 969 void ServiceWorkerCache::Close() {
966 backend_.reset(); 970 backend_.reset();
967 } 971 }
968 972
973 int64 ServiceWorkerCache::MemoryBackedSize() const {
974 if (!backend_ || !memory_only_)
975 return 0;
976
977 scoped_ptr<disk_cache::Backend::Iterator> backend_iter =
978 backend_->CreateIterator();
979 disk_cache::Entry* entry = nullptr;
980
981 int64 sum = 0;
982
983 std::vector<disk_cache::Entry*> entries;
984 int rv = net::OK;
985 while ((rv = backend_iter->OpenNextEntry(
986 &entry, base::Bind(NotReachedCompletionCallback))) == net::OK) {
987 entries.push_back(entry); // Open the entries without mutating them.
988 }
989 DCHECK(rv !=
990 net::ERR_IO_PENDING); // Expect all memory ops to be synchronous.
991
992 for (disk_cache::Entry* entry : entries) {
993 sum += entry->GetDataSize(INDEX_HEADERS) +
994 entry->GetDataSize(INDEX_RESPONSE_BODY);
995 entry->Close();
996 }
997
998 return sum;
999 }
1000
969 ServiceWorkerCache::ServiceWorkerCache( 1001 ServiceWorkerCache::ServiceWorkerCache(
970 const GURL& origin, 1002 const GURL& origin,
971 const base::FilePath& path, 1003 const base::FilePath& path,
972 net::URLRequestContext* request_context, 1004 net::URLRequestContext* request_context,
973 const scoped_refptr<storage::QuotaManagerProxy>& quota_manager_proxy, 1005 const scoped_refptr<storage::QuotaManagerProxy>& quota_manager_proxy,
974 base::WeakPtr<storage::BlobStorageContext> blob_context) 1006 base::WeakPtr<storage::BlobStorageContext> blob_context)
975 : origin_(origin), 1007 : origin_(origin),
976 path_(path), 1008 path_(path),
977 request_context_(request_context), 1009 request_context_(request_context),
978 quota_manager_proxy_(quota_manager_proxy), 1010 quota_manager_proxy_(quota_manager_proxy),
979 blob_storage_context_(blob_context), 1011 blob_storage_context_(blob_context),
980 initialized_(false), 1012 initialized_(false),
1013 memory_only_(path.empty()),
981 weak_ptr_factory_(this) { 1014 weak_ptr_factory_(this) {
982 } 1015 }
983 1016
984 void ServiceWorkerCache::PutImpl( 1017 void ServiceWorkerCache::PutImpl(
985 scoped_ptr<ServiceWorkerFetchRequest> request, 1018 scoped_ptr<ServiceWorkerFetchRequest> request,
986 scoped_ptr<ServiceWorkerResponse> response, 1019 scoped_ptr<ServiceWorkerResponse> response,
987 scoped_ptr<storage::BlobDataHandle> blob_data_handle, 1020 scoped_ptr<storage::BlobDataHandle> blob_data_handle,
988 const ResponseCallback& callback) { 1021 const ResponseCallback& callback) {
989 if (!backend_) { 1022 if (!backend_) {
990 callback.Run(ErrorTypeStorage, 1023 callback.Run(ErrorTypeStorage,
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 entry->Doom(); 1138 entry->Doom();
1106 } 1139 }
1107 1140
1108 KeysProcessNextEntry(keys_context.Pass(), iter + 1); 1141 KeysProcessNextEntry(keys_context.Pass(), iter + 1);
1109 } 1142 }
1110 1143
1111 void ServiceWorkerCache::CreateBackend(const ErrorCallback& callback) { 1144 void ServiceWorkerCache::CreateBackend(const ErrorCallback& callback) {
1112 DCHECK(!backend_); 1145 DCHECK(!backend_);
1113 1146
1114 // Use APP_CACHE as opposed to DISK_CACHE to prevent cache eviction. 1147 // Use APP_CACHE as opposed to DISK_CACHE to prevent cache eviction.
1115 net::CacheType cache_type = 1148 net::CacheType cache_type = memory_only_ ? net::MEMORY_CACHE : net::APP_CACHE;
1116 path_.empty() ? net::MEMORY_CACHE : net::APP_CACHE;
1117 1149
1118 scoped_ptr<ScopedBackendPtr> backend_ptr(new ScopedBackendPtr()); 1150 scoped_ptr<ScopedBackendPtr> backend_ptr(new ScopedBackendPtr());
1119 1151
1120 // Temporary pointer so that backend_ptr can be Pass()'d in Bind below. 1152 // Temporary pointer so that backend_ptr can be Pass()'d in Bind below.
1121 ScopedBackendPtr* backend = backend_ptr.get(); 1153 ScopedBackendPtr* backend = backend_ptr.get();
1122 1154
1123 net::CompletionCallback create_cache_callback = 1155 net::CompletionCallback create_cache_callback =
1124 base::Bind(CreateBackendDidCreate, 1156 base::Bind(CreateBackendDidCreate,
1125 callback, 1157 callback,
1126 base::Passed(backend_ptr.Pass()), 1158 base::Passed(backend_ptr.Pass()),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1158 initialized_ = true; 1190 initialized_ = true;
1159 for (std::vector<base::Closure>::iterator it = init_callbacks_.begin(); 1191 for (std::vector<base::Closure>::iterator it = init_callbacks_.begin();
1160 it != init_callbacks_.end(); 1192 it != init_callbacks_.end();
1161 ++it) { 1193 ++it) {
1162 it->Run(); 1194 it->Run();
1163 } 1195 }
1164 init_callbacks_.clear(); 1196 init_callbacks_.clear();
1165 } 1197 }
1166 1198
1167 } // namespace content 1199 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_cache.h ('k') | content/browser/service_worker/service_worker_cache_storage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698