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

Side by Side Diff: content/browser/cache_storage/cache_storage.cc

Issue 2167483002: [CacheStorage] Simpler way to wrap callbacks to run pending operation completions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comment clarification Created 4 years, 5 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/cache_storage/cache_storage.h" 5 #include "content/browser/cache_storage/cache_storage.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 const CacheAndErrorCallback& callback) { 514 const CacheAndErrorCallback& callback) {
515 DCHECK_CURRENTLY_ON(BrowserThread::IO); 515 DCHECK_CURRENTLY_ON(BrowserThread::IO);
516 516
517 if (!initialized_) 517 if (!initialized_)
518 LazyInit(); 518 LazyInit();
519 519
520 quota_manager_proxy_->NotifyStorageAccessed( 520 quota_manager_proxy_->NotifyStorageAccessed(
521 storage::QuotaClient::kServiceWorkerCache, origin_, 521 storage::QuotaClient::kServiceWorkerCache, origin_,
522 storage::kStorageTypeTemporary); 522 storage::kStorageTypeTemporary);
523 523
524 CacheAndErrorCallback pending_callback = 524 scheduler_->ScheduleOperation(
525 base::Bind(&CacheStorage::PendingCacheAndErrorCallback, 525 base::Bind(&CacheStorage::OpenCacheImpl, weak_factory_.GetWeakPtr(),
526 weak_factory_.GetWeakPtr(), callback); 526 cache_name, scheduler_->WrapCallbackToRunNext(callback)));
527 scheduler_->ScheduleOperation(base::Bind(&CacheStorage::OpenCacheImpl,
528 weak_factory_.GetWeakPtr(),
529 cache_name, pending_callback));
530 } 527 }
531 528
532 void CacheStorage::HasCache(const std::string& cache_name, 529 void CacheStorage::HasCache(const std::string& cache_name,
533 const BoolAndErrorCallback& callback) { 530 const BoolAndErrorCallback& callback) {
534 DCHECK_CURRENTLY_ON(BrowserThread::IO); 531 DCHECK_CURRENTLY_ON(BrowserThread::IO);
535 532
536 if (!initialized_) 533 if (!initialized_)
537 LazyInit(); 534 LazyInit();
538 535
539 quota_manager_proxy_->NotifyStorageAccessed( 536 quota_manager_proxy_->NotifyStorageAccessed(
540 storage::QuotaClient::kServiceWorkerCache, origin_, 537 storage::QuotaClient::kServiceWorkerCache, origin_,
541 storage::kStorageTypeTemporary); 538 storage::kStorageTypeTemporary);
542 539
543 BoolAndErrorCallback pending_callback = 540 scheduler_->ScheduleOperation(
544 base::Bind(&CacheStorage::PendingBoolAndErrorCallback, 541 base::Bind(&CacheStorage::HasCacheImpl, weak_factory_.GetWeakPtr(),
545 weak_factory_.GetWeakPtr(), callback); 542 cache_name, scheduler_->WrapCallbackToRunNext(callback)));
546 scheduler_->ScheduleOperation(base::Bind(&CacheStorage::HasCacheImpl,
547 weak_factory_.GetWeakPtr(),
548 cache_name, pending_callback));
549 } 543 }
550 544
551 void CacheStorage::DeleteCache(const std::string& cache_name, 545 void CacheStorage::DeleteCache(const std::string& cache_name,
552 const BoolAndErrorCallback& callback) { 546 const BoolAndErrorCallback& callback) {
553 DCHECK_CURRENTLY_ON(BrowserThread::IO); 547 DCHECK_CURRENTLY_ON(BrowserThread::IO);
554 548
555 if (!initialized_) 549 if (!initialized_)
556 LazyInit(); 550 LazyInit();
557 551
558 quota_manager_proxy_->NotifyStorageAccessed( 552 quota_manager_proxy_->NotifyStorageAccessed(
559 storage::QuotaClient::kServiceWorkerCache, origin_, 553 storage::QuotaClient::kServiceWorkerCache, origin_,
560 storage::kStorageTypeTemporary); 554 storage::kStorageTypeTemporary);
561 555
562 BoolAndErrorCallback pending_callback = 556 scheduler_->ScheduleOperation(
563 base::Bind(&CacheStorage::PendingBoolAndErrorCallback, 557 base::Bind(&CacheStorage::DeleteCacheImpl, weak_factory_.GetWeakPtr(),
564 weak_factory_.GetWeakPtr(), callback); 558 cache_name, scheduler_->WrapCallbackToRunNext(callback)));
565 scheduler_->ScheduleOperation(base::Bind(&CacheStorage::DeleteCacheImpl,
566 weak_factory_.GetWeakPtr(),
567 cache_name, pending_callback));
568 } 559 }
569 560
570 void CacheStorage::EnumerateCaches(const StringsAndErrorCallback& callback) { 561 void CacheStorage::EnumerateCaches(const StringsAndErrorCallback& callback) {
571 DCHECK_CURRENTLY_ON(BrowserThread::IO); 562 DCHECK_CURRENTLY_ON(BrowserThread::IO);
572 563
573 if (!initialized_) 564 if (!initialized_)
574 LazyInit(); 565 LazyInit();
575 566
576 quota_manager_proxy_->NotifyStorageAccessed( 567 quota_manager_proxy_->NotifyStorageAccessed(
577 storage::QuotaClient::kServiceWorkerCache, origin_, 568 storage::QuotaClient::kServiceWorkerCache, origin_,
578 storage::kStorageTypeTemporary); 569 storage::kStorageTypeTemporary);
579 570
580 StringsAndErrorCallback pending_callback = 571 scheduler_->ScheduleOperation(
581 base::Bind(&CacheStorage::PendingStringsAndErrorCallback, 572 base::Bind(&CacheStorage::EnumerateCachesImpl, weak_factory_.GetWeakPtr(),
582 weak_factory_.GetWeakPtr(), callback); 573 scheduler_->WrapCallbackToRunNext(callback)));
583 scheduler_->ScheduleOperation(base::Bind(&CacheStorage::EnumerateCachesImpl,
584 weak_factory_.GetWeakPtr(),
585 pending_callback));
586 } 574 }
587 575
588 void CacheStorage::MatchCache( 576 void CacheStorage::MatchCache(
589 const std::string& cache_name, 577 const std::string& cache_name,
590 std::unique_ptr<ServiceWorkerFetchRequest> request, 578 std::unique_ptr<ServiceWorkerFetchRequest> request,
591 const CacheStorageCache::ResponseCallback& callback) { 579 const CacheStorageCache::ResponseCallback& callback) {
592 DCHECK_CURRENTLY_ON(BrowserThread::IO); 580 DCHECK_CURRENTLY_ON(BrowserThread::IO);
593 581
594 if (!initialized_) 582 if (!initialized_)
595 LazyInit(); 583 LazyInit();
596 584
597 quota_manager_proxy_->NotifyStorageAccessed( 585 quota_manager_proxy_->NotifyStorageAccessed(
598 storage::QuotaClient::kServiceWorkerCache, origin_, 586 storage::QuotaClient::kServiceWorkerCache, origin_,
599 storage::kStorageTypeTemporary); 587 storage::kStorageTypeTemporary);
600 588
601 CacheStorageCache::ResponseCallback pending_callback = 589 scheduler_->ScheduleOperation(
602 base::Bind(&CacheStorage::PendingResponseCallback, 590 base::Bind(&CacheStorage::MatchCacheImpl, weak_factory_.GetWeakPtr(),
603 weak_factory_.GetWeakPtr(), callback); 591 cache_name, base::Passed(std::move(request)),
604 scheduler_->ScheduleOperation(base::Bind( 592 scheduler_->WrapCallbackToRunNext(callback)));
605 &CacheStorage::MatchCacheImpl, weak_factory_.GetWeakPtr(), cache_name,
606 base::Passed(std::move(request)), pending_callback));
607 } 593 }
608 594
609 void CacheStorage::MatchAllCaches( 595 void CacheStorage::MatchAllCaches(
610 std::unique_ptr<ServiceWorkerFetchRequest> request, 596 std::unique_ptr<ServiceWorkerFetchRequest> request,
611 const CacheStorageCache::ResponseCallback& callback) { 597 const CacheStorageCache::ResponseCallback& callback) {
612 DCHECK_CURRENTLY_ON(BrowserThread::IO); 598 DCHECK_CURRENTLY_ON(BrowserThread::IO);
613 599
614 if (!initialized_) 600 if (!initialized_)
615 LazyInit(); 601 LazyInit();
616 602
617 quota_manager_proxy_->NotifyStorageAccessed( 603 quota_manager_proxy_->NotifyStorageAccessed(
618 storage::QuotaClient::kServiceWorkerCache, origin_, 604 storage::QuotaClient::kServiceWorkerCache, origin_,
619 storage::kStorageTypeTemporary); 605 storage::kStorageTypeTemporary);
620 606
621 CacheStorageCache::ResponseCallback pending_callback =
622 base::Bind(&CacheStorage::PendingResponseCallback,
623 weak_factory_.GetWeakPtr(), callback);
624 scheduler_->ScheduleOperation( 607 scheduler_->ScheduleOperation(
625 base::Bind(&CacheStorage::MatchAllCachesImpl, weak_factory_.GetWeakPtr(), 608 base::Bind(&CacheStorage::MatchAllCachesImpl, weak_factory_.GetWeakPtr(),
626 base::Passed(std::move(request)), pending_callback)); 609 base::Passed(std::move(request)),
610 scheduler_->WrapCallbackToRunNext(callback)));
627 } 611 }
628 612
629 void CacheStorage::GetSizeThenCloseAllCaches(const SizeCallback& callback) { 613 void CacheStorage::GetSizeThenCloseAllCaches(const SizeCallback& callback) {
630 DCHECK_CURRENTLY_ON(BrowserThread::IO); 614 DCHECK_CURRENTLY_ON(BrowserThread::IO);
631 615
632 if (!initialized_) 616 if (!initialized_)
633 LazyInit(); 617 LazyInit();
634 618
635 CacheStorageCache::SizeCallback pending_callback = base::Bind( 619 scheduler_->ScheduleOperation(base::Bind(
636 &CacheStorage::PendingSizeCallback, weak_factory_.GetWeakPtr(), callback); 620 &CacheStorage::GetSizeThenCloseAllCachesImpl, weak_factory_.GetWeakPtr(),
637 621 scheduler_->WrapCallbackToRunNext(callback)));
638 scheduler_->ScheduleOperation(
639 base::Bind(&CacheStorage::GetSizeThenCloseAllCachesImpl,
640 weak_factory_.GetWeakPtr(), pending_callback));
641 } 622 }
642 623
643 void CacheStorage::Size(const CacheStorage::SizeCallback& callback) { 624 void CacheStorage::Size(const CacheStorage::SizeCallback& callback) {
644 DCHECK_CURRENTLY_ON(BrowserThread::IO); 625 DCHECK_CURRENTLY_ON(BrowserThread::IO);
645 626
646 if (!initialized_) 627 if (!initialized_)
647 LazyInit(); 628 LazyInit();
648 629
649 CacheStorageCache::SizeCallback pending_callback = base::Bind( 630 scheduler_->ScheduleOperation(
650 &CacheStorage::PendingSizeCallback, weak_factory_.GetWeakPtr(), callback); 631 base::Bind(&CacheStorage::SizeImpl, weak_factory_.GetWeakPtr(),
651 632 scheduler_->WrapCallbackToRunNext(callback)));
652 scheduler_->ScheduleOperation(base::Bind(
653 &CacheStorage::SizeImpl, weak_factory_.GetWeakPtr(), pending_callback));
654 } 633 }
655 634
656 void CacheStorage::StartAsyncOperationForTesting() { 635 void CacheStorage::StartAsyncOperationForTesting() {
657 scheduler_->ScheduleOperation(base::Bind(&base::DoNothing)); 636 scheduler_->ScheduleOperation(base::Bind(&base::DoNothing));
658 } 637 }
659 638
660 void CacheStorage::CompleteAsyncOperationForTesting() { 639 void CacheStorage::CompleteAsyncOperationForTesting() {
661 scheduler_->CompleteOperationAndRunNext(); 640 scheduler_->CompleteOperationAndRunNext();
662 } 641 }
663 642
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 for (const std::string& cache_name : ordered_cache_names_) { 1015 for (const std::string& cache_name : ordered_cache_names_) {
1037 std::unique_ptr<CacheStorageCacheHandle> cache_handle = 1016 std::unique_ptr<CacheStorageCacheHandle> cache_handle =
1038 GetLoadedCache(cache_name); 1017 GetLoadedCache(cache_name);
1039 CacheStorageCache* cache = cache_handle->value(); 1018 CacheStorageCache* cache = cache_handle->value();
1040 cache->Size(base::Bind(&SizeRetrievedFromCache, 1019 cache->Size(base::Bind(&SizeRetrievedFromCache,
1041 base::Passed(std::move(cache_handle)), 1020 base::Passed(std::move(cache_handle)),
1042 barrier_closure, accumulator_ptr)); 1021 barrier_closure, accumulator_ptr));
1043 } 1022 }
1044 } 1023 }
1045 1024
1046 void CacheStorage::PendingClosure(const base::Closure& callback) {
1047 base::WeakPtr<CacheStorage> cache_storage = weak_factory_.GetWeakPtr();
1048
1049 callback.Run();
1050 if (cache_storage)
1051 scheduler_->CompleteOperationAndRunNext();
1052 }
1053
1054 void CacheStorage::PendingBoolAndErrorCallback(
1055 const BoolAndErrorCallback& callback,
1056 bool found,
1057 CacheStorageError error) {
1058 base::WeakPtr<CacheStorage> cache_storage = weak_factory_.GetWeakPtr();
1059
1060 callback.Run(found, error);
1061 if (cache_storage)
1062 scheduler_->CompleteOperationAndRunNext();
1063 }
1064
1065 void CacheStorage::PendingCacheAndErrorCallback(
1066 const CacheAndErrorCallback& callback,
1067 std::unique_ptr<CacheStorageCacheHandle> cache_handle,
1068 CacheStorageError error) {
1069 base::WeakPtr<CacheStorage> cache_storage = weak_factory_.GetWeakPtr();
1070
1071 callback.Run(std::move(cache_handle), error);
1072 if (cache_storage)
1073 scheduler_->CompleteOperationAndRunNext();
1074 }
1075
1076 void CacheStorage::PendingStringsAndErrorCallback(
1077 const StringsAndErrorCallback& callback,
1078 const StringVector& strings,
1079 CacheStorageError error) {
1080 base::WeakPtr<CacheStorage> cache_storage = weak_factory_.GetWeakPtr();
1081
1082 callback.Run(strings, error);
1083 if (cache_storage)
1084 scheduler_->CompleteOperationAndRunNext();
1085 }
1086
1087 void CacheStorage::PendingResponseCallback(
1088 const CacheStorageCache::ResponseCallback& callback,
1089 CacheStorageError error,
1090 std::unique_ptr<ServiceWorkerResponse> response,
1091 std::unique_ptr<storage::BlobDataHandle> blob_data_handle) {
1092 base::WeakPtr<CacheStorage> cache_storage = weak_factory_.GetWeakPtr();
1093
1094 callback.Run(error, std::move(response), std::move(blob_data_handle));
1095 if (cache_storage)
1096 scheduler_->CompleteOperationAndRunNext();
1097 }
1098
1099 void CacheStorage::PendingSizeCallback(const SizeCallback& callback,
1100 int64_t size) {
1101 base::WeakPtr<CacheStorage> cache_storage = weak_factory_.GetWeakPtr();
1102
1103 callback.Run(size);
1104 if (cache_storage)
1105 scheduler_->CompleteOperationAndRunNext();
1106 }
1107
1108 } // namespace content 1025 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/cache_storage/cache_storage.h ('k') | content/browser/cache_storage/cache_storage_cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698