Chromium Code Reviews| Index: content/browser/service_worker/service_worker_storage.h |
| diff --git a/content/browser/service_worker/service_worker_storage.h b/content/browser/service_worker/service_worker_storage.h |
| index 1bfa737d83679f42b96dda6b49c652117d56a3c3..09989389e5fca5e547027a91a0e3da470b9688c9 100644 |
| --- a/content/browser/service_worker/service_worker_storage.h |
| +++ b/content/browser/service_worker/service_worker_storage.h |
| @@ -18,6 +18,7 @@ |
| #include "base/memory/weak_ptr.h" |
| #include "content/browser/service_worker/service_worker_database.h" |
| #include "content/browser/service_worker/service_worker_database_task_manager.h" |
| +#include "content/browser/service_worker/service_worker_metrics.h" |
| #include "content/browser/service_worker/service_worker_version.h" |
| #include "content/common/content_export.h" |
| #include "content/common/service_worker/service_worker_status_code.h" |
| @@ -37,6 +38,7 @@ namespace content { |
| class ServiceWorkerContextCore; |
| class ServiceWorkerDiskCache; |
| +class ServiceWorkerDiskCacheMigrator; |
| class ServiceWorkerRegistration; |
| class ServiceWorkerResponseMetadataWriter; |
| class ServiceWorkerResponseReader; |
| @@ -212,11 +214,16 @@ class CONTENT_EXPORT ServiceWorkerStorage |
| friend class ServiceWorkerResourceStorageTest; |
| friend class ServiceWorkerControlleeRequestHandlerTest; |
| friend class ServiceWorkerContextRequestHandlerTest; |
| + friend class ServiceWorkerDiskCacheMigratorTest; |
| friend class ServiceWorkerRequestHandlerTest; |
| friend class ServiceWorkerURLRequestJobTest; |
| friend class ServiceWorkerVersionBrowserTest; |
| friend class ServiceWorkerVersionTest; |
| friend class ServiceWorkerWriteToCacheJobTest; |
| + FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDiskCacheMigratorTest, |
| + MigrateOnDiskCacheAccess); |
| + FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDiskCacheMigratorTest, |
| + NotMigrateOnDatabaseAccess); |
| FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDispatcherHostTest, |
| CleanupOnRendererCrash); |
| FRIEND_TEST_ALL_PREFIXES(ServiceWorkerResourceStorageTest, |
| @@ -255,9 +262,10 @@ class CONTENT_EXPORT ServiceWorkerStorage |
| typedef std::vector<ServiceWorkerDatabase::RegistrationData> RegistrationList; |
| typedef std::map<int64, scoped_refptr<ServiceWorkerRegistration> > |
| RegistrationRefsById; |
| - typedef base::Callback<void( |
| - InitialData* data, |
| - ServiceWorkerDatabase::Status status)> InitializeCallback; |
| + typedef base::Callback<void(InitialData* data, |
| + bool needs_disk_cache_migration, |
| + ServiceWorkerDatabase::Status status)> |
| + InitializeCallback; |
| typedef base::Callback<void( |
| const GURL& origin, |
| const ServiceWorkerDatabase::RegistrationData& deleted_version_data, |
| @@ -294,13 +302,17 @@ class CONTENT_EXPORT ServiceWorkerStorage |
| base::FilePath GetDatabasePath(); |
| base::FilePath GetDiskCachePath(); |
| - // Loads the registration data from backend storage. This must be called |
| - // before any method that requires registration data. |
| + // Returns a path to an old diskcache backed with BlockFile. This is used for |
| + // the diskcache migration (see service_worker_disk_cache_migrator.h). |
| + // TODO(nhiroki): Remove this after several milestones pass |
| + // (http://crbug.com/487482) |
| + base::FilePath GetOldDiskCachePath(); |
| + |
| bool LazyInitialize( |
| const base::Closure& callback); |
| - void DidReadInitialData( |
| - InitialData* data, |
| - ServiceWorkerDatabase::Status status); |
| + void DidReadInitialData(InitialData* data, |
| + bool needs_disk_cache_migration, |
| + ServiceWorkerDatabase::Status status); |
| void DidFindRegistrationForDocument( |
| const GURL& document_url, |
| const FindRegistrationCallback& callback, |
| @@ -371,6 +383,22 @@ class CONTENT_EXPORT ServiceWorkerStorage |
| // Lazy disk_cache getter. |
| ServiceWorkerDiskCache* disk_cache(); |
| + void PrepareDiskCacheForMigration(); |
| + void DidInitializeDiskCacheForMigration(bool* is_failed, |
|
michaeln
2015/06/08 21:36:33
Since the storage class is pretty big, it might be
nhiroki
2015/06/09 15:41:57
Moved the initialization code from storage to migr
|
| + const base::Closure& barrier_closure, |
| + int result); |
| + void DidPrepareDiskCacheForMigration( |
| + scoped_ptr<ServiceWorkerDiskCache> src_disk_cache, |
| + scoped_ptr<ServiceWorkerDiskCache> dest_disk_cache, |
| + bool* is_failed); |
| + void DidMigrateDiskCache(scoped_ptr<ServiceWorkerDiskCacheMigrator> migrator, |
| + scoped_ptr<ServiceWorkerDiskCache> src_disk_cache, |
| + scoped_ptr<ServiceWorkerDiskCache> dest_disk_cache, |
| + ServiceWorkerStatusCode status); |
| + void DidDeleteOldDiskCache(bool deleted); |
| + void AbortDiskCacheMigration( |
| + ServiceWorkerMetrics::DiskCacheMigrationResult result); |
| + void InitializeDiskCache(); |
| void OnDiskCacheInitialized(int rv); |
| void StartPurgingResources(const std::vector<int64>& ids); |
| @@ -396,6 +424,7 @@ class CONTENT_EXPORT ServiceWorkerStorage |
| static void ReadInitialDataFromDB( |
| ServiceWorkerDatabase* database, |
| scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
| + const base::FilePath& old_disk_cache_path, |
| const InitializeCallback& callback); |
| static void DeleteRegistrationFromDB( |
| ServiceWorkerDatabase* database, |
| @@ -485,7 +514,10 @@ class CONTENT_EXPORT ServiceWorkerStorage |
| scoped_refptr<base::SingleThreadTaskRunner> disk_cache_thread_; |
| scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy_; |
| scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy_; |
| + |
| scoped_ptr<ServiceWorkerDiskCache> disk_cache_; |
| + bool needs_disk_cache_migration_; |
| + |
| std::deque<int64> purgeable_resource_ids_; |
| bool is_purge_pending_; |
| bool has_checked_for_stale_resources_; |