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_; |