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

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

Issue 545533002: Move ServiceWorkerCache backend creation to a lazy init function. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@no_pointers_keys
Patch Set: Rebase Created 6 years, 3 months 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_storage.h" 5 #include "content/browser/service_worker/service_worker_cache_storage.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/files/memory_mapped_file.h" 10 #include "base/files/memory_mapped_file.h"
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 callback)); 430 callback));
431 return; 431 return;
432 } 432 }
433 433
434 CacheContext* cache_context = GetLoadedCache(cache_name); 434 CacheContext* cache_context = GetLoadedCache(cache_name);
435 if (!cache_context) { 435 if (!cache_context) {
436 callback.Run(kInvalidCacheID, CACHE_STORAGE_ERROR_NOT_FOUND); 436 callback.Run(kInvalidCacheID, CACHE_STORAGE_ERROR_NOT_FOUND);
437 return; 437 return;
438 } 438 }
439 439
440 ServiceWorkerCache* cache = cache_context->cache.get(); 440 callback.Run(cache_context->id, CACHE_STORAGE_ERROR_NO_ERROR);
441
442 if (cache->HasCreatedBackend())
443 return callback.Run(cache_context->id, CACHE_STORAGE_ERROR_NO_ERROR);
444
445 cache->CreateBackend(base::Bind(&ServiceWorkerCacheStorage::DidCreateBackend,
446 weak_factory_.GetWeakPtr(),
447 cache->AsWeakPtr(),
448 cache_context->id,
449 callback));
450 } 441 }
451 442
452 void ServiceWorkerCacheStorage::HasCache(const std::string& cache_name, 443 void ServiceWorkerCacheStorage::HasCache(const std::string& cache_name,
453 const BoolAndErrorCallback& callback) { 444 const BoolAndErrorCallback& callback) {
454 DCHECK_CURRENTLY_ON(BrowserThread::IO); 445 DCHECK_CURRENTLY_ON(BrowserThread::IO);
455 446
456 if (!initialized_) { 447 if (!initialized_) {
457 LazyInit(base::Bind(&ServiceWorkerCacheStorage::HasCache, 448 LazyInit(base::Bind(&ServiceWorkerCacheStorage::HasCache,
458 weak_factory_.GetWeakPtr(), 449 weak_factory_.GetWeakPtr(),
459 cache_name, 450 cache_name,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 502
512 std::vector<std::string> names; 503 std::vector<std::string> names;
513 for (NameMap::const_iterator it = name_map_.begin(); it != name_map_.end(); 504 for (NameMap::const_iterator it = name_map_.begin(); it != name_map_.end();
514 ++it) { 505 ++it) {
515 names.push_back(it->first); 506 names.push_back(it->first);
516 } 507 }
517 508
518 callback.Run(names, CACHE_STORAGE_ERROR_NO_ERROR); 509 callback.Run(names, CACHE_STORAGE_ERROR_NO_ERROR);
519 } 510 }
520 511
521 void ServiceWorkerCacheStorage::DidCreateBackend(
522 base::WeakPtr<ServiceWorkerCache> cache,
523 CacheID cache_id,
524 const CacheAndErrorCallback& callback,
525 ServiceWorkerCache::ErrorType error) {
526 DCHECK_CURRENTLY_ON(BrowserThread::IO);
527
528 if (error != ServiceWorkerCache::ErrorTypeOK || !cache) {
529 // TODO(jkarlin): This should delete the directory and try again in case
530 // the cache is simply corrupt.
531 callback.Run(kInvalidCacheID, CACHE_STORAGE_ERROR_STORAGE);
532 return;
533 }
534
535 callback.Run(cache_id, CACHE_STORAGE_ERROR_NO_ERROR);
536 }
537
538 // Init is run lazily so that it is called on the proper MessageLoop. 512 // Init is run lazily so that it is called on the proper MessageLoop.
539 void ServiceWorkerCacheStorage::LazyInit(const base::Closure& callback) { 513 void ServiceWorkerCacheStorage::LazyInit(const base::Closure& callback) {
540 DCHECK_CURRENTLY_ON(BrowserThread::IO); 514 DCHECK_CURRENTLY_ON(BrowserThread::IO);
541 DCHECK(!initialized_); 515 DCHECK(!initialized_);
542 516
543 init_callbacks_.push_back(callback); 517 init_callbacks_.push_back(callback);
544 518
545 // If this isn't the first call to LazyInit then return as the initialization 519 // If this isn't the first call to LazyInit then return as the initialization
546 // has already started. 520 // has already started.
547 if (init_callbacks_.size() > 1u) 521 if (init_callbacks_.size() > 1u)
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 cache_context->id)); 631 cache_context->id));
658 } 632 }
659 633
660 void ServiceWorkerCacheStorage::CreateCacheDidWriteIndex( 634 void ServiceWorkerCacheStorage::CreateCacheDidWriteIndex(
661 const CacheAndErrorCallback& callback, 635 const CacheAndErrorCallback& callback,
662 base::WeakPtr<ServiceWorkerCache> cache, 636 base::WeakPtr<ServiceWorkerCache> cache,
663 CacheID id, 637 CacheID id,
664 bool success) { 638 bool success) {
665 DCHECK_CURRENTLY_ON(BrowserThread::IO); 639 DCHECK_CURRENTLY_ON(BrowserThread::IO);
666 if (!cache) { 640 if (!cache) {
667 callback.Run(false, CACHE_STORAGE_ERROR_CLOSING); 641 callback.Run(kInvalidCacheID, CACHE_STORAGE_ERROR_CLOSING);
668 return; 642 return;
669 } 643 }
670 644
671 cache->CreateBackend(base::Bind(&ServiceWorkerCacheStorage::DidCreateBackend, 645 callback.Run(id, CACHE_STORAGE_ERROR_NO_ERROR);
672 weak_factory_.GetWeakPtr(),
673 cache,
674 id,
675 callback));
676 } 646 }
677 647
678 void ServiceWorkerCacheStorage::DeleteCacheDidWriteIndex( 648 void ServiceWorkerCacheStorage::DeleteCacheDidWriteIndex(
679 const std::string& cache_name, 649 const std::string& cache_name,
680 const BoolAndErrorCallback& callback, 650 const BoolAndErrorCallback& callback,
681 bool success) { 651 bool success) {
682 DCHECK_CURRENTLY_ON(BrowserThread::IO); 652 DCHECK_CURRENTLY_ON(BrowserThread::IO);
683 653
684 cache_loader_->CleanUpDeletedCache( 654 cache_loader_->CleanUpDeletedCache(
685 cache_name, 655 cache_name,
(...skipping 18 matching lines...) Expand all
704 NameMap::const_iterator name_iter = name_map_.find(cache_name); 674 NameMap::const_iterator name_iter = name_map_.find(cache_name);
705 if (name_iter == name_map_.end()) 675 if (name_iter == name_map_.end())
706 return NULL; 676 return NULL;
707 677
708 CacheMap::const_iterator map_iter = cache_map_.find(name_iter->second); 678 CacheMap::const_iterator map_iter = cache_map_.find(name_iter->second);
709 DCHECK(map_iter != cache_map_.end()); 679 DCHECK(map_iter != cache_map_.end());
710 return map_iter->second; 680 return map_iter->second;
711 } 681 }
712 682
713 } // namespace content 683 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698