| 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 0b4e96310c73a5490466769b1b4acb8f40463d7a..87788e83d853acf2ae2d1dfc7a4586f7ae5b576e 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; | 
| @@ -213,11 +215,18 @@ 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(ServiceWorkerDiskCacheMigratorTest, | 
| +                           NotMigrateForEmptyDatabase); | 
| FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDispatcherHostTest, | 
| CleanupOnRendererCrash); | 
| FRIEND_TEST_ALL_PREFIXES(ServiceWorkerResourceStorageTest, | 
| @@ -238,6 +247,8 @@ class CONTENT_EXPORT ServiceWorkerStorage | 
| int64 next_version_id; | 
| int64 next_resource_id; | 
| std::set<GURL> origins; | 
| +    bool disk_cache_migration_needed; | 
| +    bool old_disk_cache_deletion_needed; | 
|  | 
| InitialData(); | 
| ~InitialData(); | 
| @@ -256,9 +267,11 @@ 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, | 
| +                              ServiceWorkerDatabase::Status status)> | 
| +      InitializeCallback; | 
| +  typedef base::Callback<void(ServiceWorkerDatabase::Status status)> | 
| +      DatabaseStatusCallback; | 
| typedef base::Callback<void( | 
| const GURL& origin, | 
| const ServiceWorkerDatabase::RegistrationData& deleted_version_data, | 
| @@ -295,13 +308,16 @@ 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, | 
| +                          ServiceWorkerDatabase::Status status); | 
| void DidFindRegistrationForDocument( | 
| const GURL& document_url, | 
| const FindRegistrationCallback& callback, | 
| @@ -376,6 +392,11 @@ class CONTENT_EXPORT ServiceWorkerStorage | 
|  | 
| // Lazy disk_cache getter. | 
| ServiceWorkerDiskCache* disk_cache(); | 
| +  void MigrateDiskCache(); | 
| +  void DidMigrateDiskCache(ServiceWorkerStatusCode status); | 
| +  void DidSetDiskCacheMigrationNotNeeded(ServiceWorkerDatabase::Status status); | 
| +  void OnDiskCacheMigrationFailed(); | 
| +  void InitializeDiskCache(); | 
| void OnDiskCacheInitialized(int rv); | 
|  | 
| void StartPurgingResources(const std::vector<int64>& ids); | 
| @@ -402,6 +423,8 @@ class CONTENT_EXPORT ServiceWorkerStorage | 
| ServiceWorkerDatabase* database, | 
| scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 
| const InitializeCallback& callback); | 
| +  static void DeleteOldDiskCacheInDB(ServiceWorkerDatabase* database, | 
| +                                     const base::FilePath& disk_cache_path); | 
| static void DeleteRegistrationFromDB( | 
| ServiceWorkerDatabase* database, | 
| scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 
| @@ -490,7 +513,12 @@ 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_; | 
| +  scoped_ptr<ServiceWorkerDiskCacheMigrator> disk_cache_migrator_; | 
| +  bool disk_cache_migration_needed_; | 
| +  bool old_disk_cache_deletion_needed_; | 
| + | 
| std::deque<int64> purgeable_resource_ids_; | 
| bool is_purge_pending_; | 
| bool has_checked_for_stale_resources_; | 
|  |