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 <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 41 bool DeleteDir(const base::FilePath& path) { | 41 bool DeleteDir(const base::FilePath& path) { |
| 42 return base::DeleteFile(path, true /* recursive */); | 42 return base::DeleteFile(path, true /* recursive */); |
| 43 } | 43 } |
| 44 | 44 |
| 45 void DeleteOriginDidDeleteDir( | 45 void DeleteOriginDidDeleteDir( |
| 46 const storage::QuotaClient::DeletionCallback& callback, | 46 const storage::QuotaClient::DeletionCallback& callback, |
| 47 bool rv) { | 47 bool rv) { |
| 48 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 48 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 49 | 49 |
| 50 base::ThreadTaskRunnerHandle::Get()->PostTask( | 50 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 51 FROM_HERE, base::Bind(callback, rv ? storage::kQuotaStatusOk | 51 FROM_HERE, base::BindOnce(callback, rv ? storage::kQuotaStatusOk |
| 52 : storage::kQuotaErrorAbort)); | 52 : storage::kQuotaErrorAbort)); |
| 53 } | 53 } |
| 54 | 54 |
| 55 // Calculate the sum of all cache sizes in this store, but only if all sizes are | 55 // Calculate the sum of all cache sizes in this store, but only if all sizes are |
| 56 // known. If one or more sizes are not known then return kSizeUnknown. | 56 // known. If one or more sizes are not known then return kSizeUnknown. |
| 57 int64_t GetCacheStorageSize(const proto::CacheStorageIndex& index) { | 57 int64_t GetCacheStorageSize(const proto::CacheStorageIndex& index) { |
| 58 int64_t storage_size = 0; | 58 int64_t storage_size = 0; |
| 59 for (int i = 0, max = index.cache_size(); i < max; ++i) { | 59 for (int i = 0, max = index.cache_size(); i < max; ++i) { |
| 60 const proto::CacheStorageIndex::Cache& cache = index.cache(i); | 60 const proto::CacheStorageIndex::Cache& cache = index.cache(i); |
| 61 if (!cache.has_size() || cache.size() == CacheStorage::kSizeUnknown) | 61 if (!cache.has_size() || cache.size() == CacheStorage::kSizeUnknown) |
| 62 return CacheStorage::kSizeUnknown; | 62 return CacheStorage::kSizeUnknown; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 112 void GetOriginsForHostDidListOrigins( | 112 void GetOriginsForHostDidListOrigins( |
| 113 const std::string& host, | 113 const std::string& host, |
| 114 const storage::QuotaClient::GetOriginsCallback& callback, | 114 const storage::QuotaClient::GetOriginsCallback& callback, |
| 115 const std::set<GURL>& origins) { | 115 const std::set<GURL>& origins) { |
| 116 std::set<GURL> out_origins; | 116 std::set<GURL> out_origins; |
| 117 for (const GURL& origin : origins) { | 117 for (const GURL& origin : origins) { |
| 118 if (host == net::GetHostOrSpecFromURL(origin)) | 118 if (host == net::GetHostOrSpecFromURL(origin)) |
| 119 out_origins.insert(origin); | 119 out_origins.insert(origin); |
| 120 } | 120 } |
| 121 base::ThreadTaskRunnerHandle::Get()->PostTask( | 121 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 122 FROM_HERE, base::Bind(callback, out_origins)); | 122 FROM_HERE, base::BindOnce(callback, out_origins)); |
| 123 } | 123 } |
| 124 | 124 |
| 125 void EmptyQuotaStatusCallback(storage::QuotaStatusCode code) {} | 125 void EmptyQuotaStatusCallback(storage::QuotaStatusCode code) {} |
| 126 | 126 |
| 127 void AllOriginSizesReported( | 127 void AllOriginSizesReported( |
| 128 std::unique_ptr<std::vector<CacheStorageUsageInfo>> usages, | 128 std::unique_ptr<std::vector<CacheStorageUsageInfo>> usages, |
| 129 const CacheStorageContext::GetUsageInfoCallback& callback) { | 129 const CacheStorageContext::GetUsageInfoCallback& callback) { |
| 130 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 130 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 131 | 131 |
| 132 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 132 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 133 base::Bind(callback, *usages)); | 133 FROM_HERE, base::BindOnce(callback, *usages)); |
| 134 } | 134 } |
| 135 | 135 |
| 136 void OneOriginSizeReported(const base::Closure& callback, | 136 void OneOriginSizeReported(base::OnceClosure callback, |
| 137 CacheStorageUsageInfo* usage, | 137 CacheStorageUsageInfo* usage, |
| 138 int64_t size) { | 138 int64_t size) { |
| 139 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 139 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 140 | 140 |
| 141 DCHECK_NE(size, CacheStorage::kSizeUnknown); | 141 DCHECK_NE(size, CacheStorage::kSizeUnknown); |
| 142 usage->total_size_bytes = size; | 142 usage->total_size_bytes = size; |
| 143 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); | 143 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, std::move(callback)); |
| 144 } | 144 } |
| 145 | 145 |
| 146 } // namespace | 146 } // namespace |
| 147 | 147 |
| 148 // static | 148 // static |
| 149 std::unique_ptr<CacheStorageManager> CacheStorageManager::Create( | 149 std::unique_ptr<CacheStorageManager> CacheStorageManager::Create( |
| 150 const base::FilePath& path, | 150 const base::FilePath& path, |
| 151 scoped_refptr<base::SequencedTaskRunner> cache_task_runner, | 151 scoped_refptr<base::SequencedTaskRunner> cache_task_runner, |
| 152 scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy) { | 152 scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy) { |
| 153 base::FilePath root_path = path; | 153 base::FilePath root_path = path; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 171 manager->SetBlobParametersForCache(old_manager->url_request_context_getter(), | 171 manager->SetBlobParametersForCache(old_manager->url_request_context_getter(), |
| 172 old_manager->blob_storage_context()); | 172 old_manager->blob_storage_context()); |
| 173 return manager; | 173 return manager; |
| 174 } | 174 } |
| 175 | 175 |
| 176 CacheStorageManager::~CacheStorageManager() = default; | 176 CacheStorageManager::~CacheStorageManager() = default; |
| 177 | 177 |
| 178 void CacheStorageManager::OpenCache( | 178 void CacheStorageManager::OpenCache( |
| 179 const GURL& origin, | 179 const GURL& origin, |
| 180 const std::string& cache_name, | 180 const std::string& cache_name, |
| 181 const CacheStorage::CacheAndErrorCallback& callback) { | 181 CacheStorage::CacheAndErrorCallback callback) { |
| 182 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 182 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 183 | 183 |
| 184 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); | 184 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); |
| 185 | 185 |
| 186 cache_storage->OpenCache(cache_name, callback); | 186 cache_storage->OpenCache(cache_name, std::move(callback)); |
| 187 } | 187 } |
| 188 | 188 |
| 189 void CacheStorageManager::HasCache( | 189 void CacheStorageManager::HasCache( |
| 190 const GURL& origin, | 190 const GURL& origin, |
| 191 const std::string& cache_name, | 191 const std::string& cache_name, |
| 192 const CacheStorage::BoolAndErrorCallback& callback) { | 192 CacheStorage::BoolAndErrorCallback callback) { |
| 193 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 193 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 194 | 194 |
| 195 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); | 195 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); |
| 196 cache_storage->HasCache(cache_name, callback); | 196 cache_storage->HasCache(cache_name, std::move(callback)); |
| 197 } | 197 } |
| 198 | 198 |
| 199 void CacheStorageManager::DeleteCache( | 199 void CacheStorageManager::DeleteCache( |
| 200 const GURL& origin, | 200 const GURL& origin, |
| 201 const std::string& cache_name, | 201 const std::string& cache_name, |
| 202 const CacheStorage::BoolAndErrorCallback& callback) { | 202 CacheStorage::BoolAndErrorCallback callback) { |
| 203 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 203 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 204 | 204 |
| 205 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); | 205 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); |
| 206 cache_storage->DeleteCache(cache_name, callback); | 206 cache_storage->DeleteCache(cache_name, std::move(callback)); |
| 207 } | 207 } |
| 208 | 208 |
| 209 void CacheStorageManager::EnumerateCaches( | 209 void CacheStorageManager::EnumerateCaches( |
| 210 const GURL& origin, | 210 const GURL& origin, |
| 211 const CacheStorage::IndexCallback& callback) { | 211 CacheStorage::IndexCallback callback) { |
| 212 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 212 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 213 | 213 |
| 214 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); | 214 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); |
| 215 | 215 |
| 216 cache_storage->EnumerateCaches(callback); | 216 cache_storage->EnumerateCaches(std::move(callback)); |
| 217 } | 217 } |
| 218 | 218 |
| 219 void CacheStorageManager::MatchCache( | 219 void CacheStorageManager::MatchCache( |
| 220 const GURL& origin, | 220 const GURL& origin, |
| 221 const std::string& cache_name, | 221 const std::string& cache_name, |
| 222 std::unique_ptr<ServiceWorkerFetchRequest> request, | 222 std::unique_ptr<ServiceWorkerFetchRequest> request, |
| 223 const CacheStorageCacheQueryParams& match_params, | 223 const CacheStorageCacheQueryParams& match_params, |
| 224 const CacheStorageCache::ResponseCallback& callback) { | 224 CacheStorageCache::ResponseCallback callback) { |
| 225 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); | 225 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); |
| 226 | 226 |
| 227 cache_storage->MatchCache(cache_name, std::move(request), match_params, | 227 cache_storage->MatchCache(cache_name, std::move(request), match_params, |
| 228 callback); | 228 std::move(callback)); |
| 229 } | 229 } |
| 230 | 230 |
| 231 void CacheStorageManager::MatchAllCaches( | 231 void CacheStorageManager::MatchAllCaches( |
| 232 const GURL& origin, | 232 const GURL& origin, |
| 233 std::unique_ptr<ServiceWorkerFetchRequest> request, | 233 std::unique_ptr<ServiceWorkerFetchRequest> request, |
| 234 const CacheStorageCacheQueryParams& match_params, | 234 const CacheStorageCacheQueryParams& match_params, |
| 235 const CacheStorageCache::ResponseCallback& callback) { | 235 CacheStorageCache::ResponseCallback callback) { |
| 236 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); | 236 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin); |
| 237 | 237 |
| 238 cache_storage->MatchAllCaches(std::move(request), match_params, callback); | 238 cache_storage->MatchAllCaches(std::move(request), match_params, |
| 239 std::move(callback)); | |
| 239 } | 240 } |
| 240 | 241 |
| 241 void CacheStorageManager::SetBlobParametersForCache( | 242 void CacheStorageManager::SetBlobParametersForCache( |
| 242 scoped_refptr<net::URLRequestContextGetter> request_context_getter, | 243 scoped_refptr<net::URLRequestContextGetter> request_context_getter, |
| 243 base::WeakPtr<storage::BlobStorageContext> blob_storage_context) { | 244 base::WeakPtr<storage::BlobStorageContext> blob_storage_context) { |
| 244 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 245 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 245 DCHECK(cache_storage_map_.empty()); | 246 DCHECK(cache_storage_map_.empty()); |
| 246 DCHECK(!request_context_getter_ || | 247 DCHECK(!request_context_getter_ || |
| 247 request_context_getter_.get() == request_context_getter.get()); | 248 request_context_getter_.get() == request_context_getter.get()); |
| 248 DCHECK(!blob_context_ || blob_context_.get() == blob_storage_context.get()); | 249 DCHECK(!blob_context_ || blob_context_.get() == blob_storage_context.get()); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 262 usages->push_back( | 263 usages->push_back( |
| 263 CacheStorageUsageInfo(origin_details.first, 0 /* size */, | 264 CacheStorageUsageInfo(origin_details.first, 0 /* size */, |
| 264 base::Time() /* last modified */)); | 265 base::Time() /* last modified */)); |
| 265 } | 266 } |
| 266 GetAllOriginsUsageGetSizes(std::move(usages), callback); | 267 GetAllOriginsUsageGetSizes(std::move(usages), callback); |
| 267 return; | 268 return; |
| 268 } | 269 } |
| 269 | 270 |
| 270 std::vector<CacheStorageUsageInfo>* usages_ptr = usages.get(); | 271 std::vector<CacheStorageUsageInfo>* usages_ptr = usages.get(); |
| 271 cache_task_runner_->PostTaskAndReply( | 272 cache_task_runner_->PostTaskAndReply( |
| 272 FROM_HERE, base::Bind(&ListOriginsAndLastModifiedOnTaskRunner, usages_ptr, | 273 FROM_HERE, |
| 273 root_path_), | 274 base::BindOnce(&ListOriginsAndLastModifiedOnTaskRunner, usages_ptr, |
| 274 base::Bind(&CacheStorageManager::GetAllOriginsUsageGetSizes, | 275 root_path_), |
| 275 weak_ptr_factory_.GetWeakPtr(), | 276 base::BindOnce(&CacheStorageManager::GetAllOriginsUsageGetSizes, |
| 276 base::Passed(std::move(usages)), callback)); | 277 weak_ptr_factory_.GetWeakPtr(), |
| 278 base::Passed(std::move(usages)), callback)); | |
| 277 } | 279 } |
| 278 | 280 |
| 279 void CacheStorageManager::GetAllOriginsUsageGetSizes( | 281 void CacheStorageManager::GetAllOriginsUsageGetSizes( |
| 280 std::unique_ptr<std::vector<CacheStorageUsageInfo>> usages, | 282 std::unique_ptr<std::vector<CacheStorageUsageInfo>> usages, |
| 281 const CacheStorageContext::GetUsageInfoCallback& callback) { | 283 const CacheStorageContext::GetUsageInfoCallback& callback) { |
| 282 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 284 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 283 DCHECK(usages); | 285 DCHECK(usages); |
| 284 | 286 |
| 285 // The origin GURL and last modified times are set in |usages| but not the | 287 // The origin GURL and last modified times are set in |usages| but not the |
| 286 // size in bytes. Call each CacheStorage's Size() function to fill that out. | 288 // size in bytes. Call each CacheStorage's Size() function to fill that out. |
| 287 std::vector<CacheStorageUsageInfo>* usages_ptr = usages.get(); | 289 std::vector<CacheStorageUsageInfo>* usages_ptr = usages.get(); |
| 288 | 290 |
| 289 if (usages->empty()) { | 291 if (usages->empty()) { |
| 290 base::ThreadTaskRunnerHandle::Get()->PostTask( | 292 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 291 FROM_HERE, base::Bind(callback, *usages)); | 293 FROM_HERE, base::BindOnce(callback, *usages)); |
| 292 return; | 294 return; |
| 293 } | 295 } |
| 294 | 296 |
| 295 base::Closure barrier_closure = base::BarrierClosure( | 297 base::RepeatingClosure barrier_closure = base::BarrierClosure( |
| 296 usages_ptr->size(), | 298 usages_ptr->size(), |
| 297 base::Bind(&AllOriginSizesReported, base::Passed(std::move(usages)), | 299 base::BindOnce(&AllOriginSizesReported, base::Passed(std::move(usages)), |
| 298 callback)); | 300 callback)); |
| 299 | 301 |
| 300 for (CacheStorageUsageInfo& usage : *usages_ptr) { | 302 for (CacheStorageUsageInfo& usage : *usages_ptr) { |
| 301 if (usage.total_size_bytes != CacheStorage::kSizeUnknown) { | 303 if (usage.total_size_bytes != CacheStorage::kSizeUnknown) { |
| 302 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, barrier_closure); | 304 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, barrier_closure); |
| 303 continue; | 305 continue; |
| 304 } | 306 } |
| 305 CacheStorage* cache_storage = FindOrCreateCacheStorage(usage.origin); | 307 CacheStorage* cache_storage = FindOrCreateCacheStorage(usage.origin); |
| 306 cache_storage->Size( | 308 cache_storage->Size( |
| 307 base::Bind(&OneOriginSizeReported, barrier_closure, &usage)); | 309 base::BindOnce(&OneOriginSizeReported, barrier_closure, &usage)); |
| 308 } | 310 } |
| 309 } | 311 } |
| 310 | 312 |
| 311 void CacheStorageManager::GetOriginUsage( | 313 void CacheStorageManager::GetOriginUsage( |
| 312 const GURL& origin_url, | 314 const GURL& origin_url, |
| 313 const storage::QuotaClient::GetUsageCallback& callback) { | 315 const storage::QuotaClient::GetUsageCallback& callback) { |
| 314 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 316 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 315 | 317 |
| 316 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin_url); | 318 CacheStorage* cache_storage = FindOrCreateCacheStorage(origin_url); |
| 317 | 319 |
| 318 cache_storage->Size(callback); | 320 cache_storage->Size(callback); |
| 319 } | 321 } |
| 320 | 322 |
| 321 void CacheStorageManager::GetOrigins( | 323 void CacheStorageManager::GetOrigins( |
| 322 const storage::QuotaClient::GetOriginsCallback& callback) { | 324 const storage::QuotaClient::GetOriginsCallback& callback) { |
| 323 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 325 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 324 | 326 |
| 325 if (IsMemoryBacked()) { | 327 if (IsMemoryBacked()) { |
| 326 std::set<GURL> origins; | 328 std::set<GURL> origins; |
| 327 for (const auto& key_value : cache_storage_map_) | 329 for (const auto& key_value : cache_storage_map_) |
| 328 origins.insert(key_value.first); | 330 origins.insert(key_value.first); |
| 329 | 331 |
| 330 base::ThreadTaskRunnerHandle::Get()->PostTask( | 332 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 331 FROM_HERE, base::Bind(callback, origins)); | 333 FROM_HERE, base::BindOnce(callback, origins)); |
| 332 return; | 334 return; |
| 333 } | 335 } |
| 334 | 336 |
| 335 PostTaskAndReplyWithResult(cache_task_runner_.get(), FROM_HERE, | 337 PostTaskAndReplyWithResult(cache_task_runner_.get(), FROM_HERE, |
| 336 base::Bind(&ListOriginsOnTaskRunner, root_path_), | 338 base::Bind(&ListOriginsOnTaskRunner, root_path_), |
|
jsbell
2017/06/19 23:51:16
If you convert this to base::BindOnce() it fails t
| |
| 337 callback); | 339 callback); |
| 338 } | 340 } |
| 339 | 341 |
| 340 void CacheStorageManager::GetOriginsForHost( | 342 void CacheStorageManager::GetOriginsForHost( |
| 341 const std::string& host, | 343 const std::string& host, |
| 342 const storage::QuotaClient::GetOriginsCallback& callback) { | 344 const storage::QuotaClient::GetOriginsCallback& callback) { |
| 343 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 345 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 344 | 346 |
| 345 if (IsMemoryBacked()) { | 347 if (IsMemoryBacked()) { |
| 346 std::set<GURL> origins; | 348 std::set<GURL> origins; |
| 347 for (const auto& key_value : cache_storage_map_) { | 349 for (const auto& key_value : cache_storage_map_) { |
| 348 if (host == net::GetHostOrSpecFromURL(key_value.first)) | 350 if (host == net::GetHostOrSpecFromURL(key_value.first)) |
| 349 origins.insert(key_value.first); | 351 origins.insert(key_value.first); |
| 350 } | 352 } |
| 351 base::ThreadTaskRunnerHandle::Get()->PostTask( | 353 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 352 FROM_HERE, base::Bind(callback, origins)); | 354 FROM_HERE, base::BindOnce(callback, origins)); |
| 353 return; | 355 return; |
| 354 } | 356 } |
| 355 | 357 |
| 356 PostTaskAndReplyWithResult( | 358 PostTaskAndReplyWithResult( |
| 357 cache_task_runner_.get(), FROM_HERE, | 359 cache_task_runner_.get(), FROM_HERE, |
| 358 base::Bind(&ListOriginsOnTaskRunner, root_path_), | 360 base::BindOnce(&ListOriginsOnTaskRunner, root_path_), |
| 359 base::Bind(&GetOriginsForHostDidListOrigins, host, callback)); | 361 base::BindOnce(&GetOriginsForHostDidListOrigins, host, callback)); |
| 360 } | 362 } |
| 361 | 363 |
| 362 void CacheStorageManager::DeleteOriginData( | 364 void CacheStorageManager::DeleteOriginData( |
| 363 const GURL& origin, | 365 const GURL& origin, |
| 364 const storage::QuotaClient::DeletionCallback& callback) { | 366 const storage::QuotaClient::DeletionCallback& callback) { |
| 365 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 367 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 366 | 368 |
| 367 // Create the CacheStorage for the origin if it hasn't been loaded yet. | 369 // Create the CacheStorage for the origin if it hasn't been loaded yet. |
| 368 FindOrCreateCacheStorage(origin); | 370 FindOrCreateCacheStorage(origin); |
| 369 | 371 |
| 370 CacheStorageMap::iterator it = cache_storage_map_.find(origin); | 372 CacheStorageMap::iterator it = cache_storage_map_.find(origin); |
| 371 DCHECK(it != cache_storage_map_.end()); | 373 DCHECK(it != cache_storage_map_.end()); |
| 372 | 374 |
| 373 CacheStorage* cache_storage = it->second.release(); | 375 CacheStorage* cache_storage = it->second.release(); |
| 374 cache_storage_map_.erase(origin); | 376 cache_storage_map_.erase(origin); |
| 375 cache_storage->GetSizeThenCloseAllCaches( | 377 cache_storage->GetSizeThenCloseAllCaches( |
| 376 base::Bind(&CacheStorageManager::DeleteOriginDidClose, | 378 base::BindOnce(&CacheStorageManager::DeleteOriginDidClose, |
| 377 weak_ptr_factory_.GetWeakPtr(), origin, callback, | 379 weak_ptr_factory_.GetWeakPtr(), origin, callback, |
| 378 base::Passed(base::WrapUnique(cache_storage)))); | 380 base::Passed(base::WrapUnique(cache_storage)))); |
| 379 } | 381 } |
| 380 | 382 |
| 381 void CacheStorageManager::DeleteOriginData(const GURL& origin) { | 383 void CacheStorageManager::DeleteOriginData(const GURL& origin) { |
| 382 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 384 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 383 DeleteOriginData(origin, base::Bind(&EmptyQuotaStatusCallback)); | 385 DeleteOriginData(origin, base::Bind(&EmptyQuotaStatusCallback)); |
| 384 } | 386 } |
| 385 | 387 |
| 386 void CacheStorageManager::DeleteOriginDidClose( | 388 void CacheStorageManager::DeleteOriginDidClose( |
| 387 const GURL& origin, | 389 const GURL& origin, |
| 388 const storage::QuotaClient::DeletionCallback& callback, | 390 const storage::QuotaClient::DeletionCallback& callback, |
| 389 std::unique_ptr<CacheStorage> cache_storage, | 391 std::unique_ptr<CacheStorage> cache_storage, |
| 390 int64_t origin_size) { | 392 int64_t origin_size) { |
| 391 // TODO(jkarlin): Deleting the storage leaves any unfinished operations | 393 // TODO(jkarlin): Deleting the storage leaves any unfinished operations |
| 392 // hanging, resulting in unresolved promises. Fix this by returning early from | 394 // hanging, resulting in unresolved promises. Fix this by returning early from |
| 393 // CacheStorage operations posted after GetSizeThenCloseAllCaches is called. | 395 // CacheStorage operations posted after GetSizeThenCloseAllCaches is called. |
| 394 cache_storage.reset(); | 396 cache_storage.reset(); |
| 395 | 397 |
| 396 quota_manager_proxy_->NotifyStorageModified( | 398 quota_manager_proxy_->NotifyStorageModified( |
| 397 storage::QuotaClient::kServiceWorkerCache, origin, | 399 storage::QuotaClient::kServiceWorkerCache, origin, |
| 398 storage::kStorageTypeTemporary, -1 * origin_size); | 400 storage::kStorageTypeTemporary, -1 * origin_size); |
| 399 | 401 |
| 400 if (IsMemoryBacked()) { | 402 if (IsMemoryBacked()) { |
| 401 base::ThreadTaskRunnerHandle::Get()->PostTask( | 403 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 402 FROM_HERE, base::Bind(callback, storage::kQuotaStatusOk)); | 404 FROM_HERE, base::BindOnce(callback, storage::kQuotaStatusOk)); |
| 403 return; | 405 return; |
| 404 } | 406 } |
| 405 | 407 |
| 406 PostTaskAndReplyWithResult( | 408 PostTaskAndReplyWithResult( |
| 407 cache_task_runner_.get(), FROM_HERE, | 409 cache_task_runner_.get(), FROM_HERE, |
| 408 base::Bind(&DeleteDir, ConstructOriginPath(root_path_, origin)), | 410 base::BindOnce(&DeleteDir, ConstructOriginPath(root_path_, origin)), |
| 409 base::Bind(&DeleteOriginDidDeleteDir, callback)); | 411 base::BindOnce(&DeleteOriginDidDeleteDir, callback)); |
| 410 } | 412 } |
| 411 | 413 |
| 412 CacheStorageManager::CacheStorageManager( | 414 CacheStorageManager::CacheStorageManager( |
| 413 const base::FilePath& path, | 415 const base::FilePath& path, |
| 414 scoped_refptr<base::SequencedTaskRunner> cache_task_runner, | 416 scoped_refptr<base::SequencedTaskRunner> cache_task_runner, |
| 415 scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy) | 417 scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy) |
| 416 : root_path_(path), | 418 : root_path_(path), |
| 417 cache_task_runner_(std::move(cache_task_runner)), | 419 cache_task_runner_(std::move(cache_task_runner)), |
| 418 quota_manager_proxy_(std::move(quota_manager_proxy)), | 420 quota_manager_proxy_(std::move(quota_manager_proxy)), |
| 419 weak_ptr_factory_(this) { | 421 weak_ptr_factory_(this) { |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 445 const base::FilePath& root_path, | 447 const base::FilePath& root_path, |
| 446 const GURL& origin) { | 448 const GURL& origin) { |
| 447 const std::string identifier = storage::GetIdentifierFromOrigin(origin); | 449 const std::string identifier = storage::GetIdentifierFromOrigin(origin); |
| 448 const std::string origin_hash = base::SHA1HashString(identifier); | 450 const std::string origin_hash = base::SHA1HashString(identifier); |
| 449 const std::string origin_hash_hex = base::ToLowerASCII( | 451 const std::string origin_hash_hex = base::ToLowerASCII( |
| 450 base::HexEncode(origin_hash.c_str(), origin_hash.length())); | 452 base::HexEncode(origin_hash.c_str(), origin_hash.length())); |
| 451 return root_path.AppendASCII(origin_hash_hex); | 453 return root_path.AppendASCII(origin_hash_hex); |
| 452 } | 454 } |
| 453 | 455 |
| 454 } // namespace content | 456 } // namespace content |
| OLD | NEW |