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

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

Issue 1152543002: ServiceWorker: Migrate the script cache backend from BlockFile to Simple (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use PostAfterStartupTask Created 5 years, 6 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_storage.h" 5 #include "content/browser/service_worker/service_worker_storage.h"
6 6
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/files/file_util.h" 8 #include "base/files/file_util.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/sequenced_task_runner.h" 10 #include "base/sequenced_task_runner.h"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "base/task_runner_util.h" 12 #include "base/task_runner_util.h"
13 #include "base/thread_task_runner_handle.h" 13 #include "base/thread_task_runner_handle.h"
14 #include "base/trace_event/trace_event.h" 14 #include "base/trace_event/trace_event.h"
15 #include "content/browser/service_worker/service_worker_context_core.h" 15 #include "content/browser/service_worker/service_worker_context_core.h"
16 #include "content/browser/service_worker/service_worker_disk_cache.h" 16 #include "content/browser/service_worker/service_worker_disk_cache.h"
17 #include "content/browser/service_worker/service_worker_disk_cache_migrator.h"
17 #include "content/browser/service_worker/service_worker_info.h" 18 #include "content/browser/service_worker/service_worker_info.h"
18 #include "content/browser/service_worker/service_worker_metrics.h"
19 #include "content/browser/service_worker/service_worker_registration.h" 19 #include "content/browser/service_worker/service_worker_registration.h"
20 #include "content/browser/service_worker/service_worker_utils.h" 20 #include "content/browser/service_worker/service_worker_utils.h"
21 #include "content/browser/service_worker/service_worker_version.h" 21 #include "content/browser/service_worker/service_worker_version.h"
22 #include "content/common/service_worker/service_worker_types.h" 22 #include "content/common/service_worker/service_worker_types.h"
23 #include "content/public/browser/browser_thread.h" 23 #include "content/public/browser/browser_thread.h"
24 #include "net/base/completion_callback.h" 24 #include "net/base/completion_callback.h"
25 #include "net/base/io_buffer.h" 25 #include "net/base/io_buffer.h"
26 #include "net/base/net_errors.h" 26 #include "net/base/net_errors.h"
27 #include "storage/browser/quota/quota_manager_proxy.h" 27 #include "storage/browser/quota/quota_manager_proxy.h"
28 #include "storage/browser/quota/special_storage_policy.h" 28 #include "storage/browser/quota/special_storage_policy.h"
(...skipping 24 matching lines...) Expand all
53 const scoped_refptr<ServiceWorkerRegistration>& registration, 53 const scoped_refptr<ServiceWorkerRegistration>& registration,
54 ServiceWorkerStatusCode status, 54 ServiceWorkerStatusCode status,
55 const ServiceWorkerStorage::FindRegistrationCallback& callback) { 55 const ServiceWorkerStorage::FindRegistrationCallback& callback) {
56 RunSoon(from_here, 56 RunSoon(from_here,
57 base::Bind(&CompleteFindNow, registration, status, callback)); 57 base::Bind(&CompleteFindNow, registration, status, callback));
58 } 58 }
59 59
60 const base::FilePath::CharType kDatabaseName[] = 60 const base::FilePath::CharType kDatabaseName[] =
61 FILE_PATH_LITERAL("Database"); 61 FILE_PATH_LITERAL("Database");
62 const base::FilePath::CharType kDiskCacheName[] = 62 const base::FilePath::CharType kDiskCacheName[] =
63 FILE_PATH_LITERAL("Cache"); 63 FILE_PATH_LITERAL("ScriptCache");
64 const base::FilePath::CharType kOldDiskCacheName[] = FILE_PATH_LITERAL("Cache");
64 65
65 const int kMaxMemDiskCacheSize = 10 * 1024 * 1024; 66 const int kMaxMemDiskCacheSize = 10 * 1024 * 1024;
66 const int kMaxDiskCacheSize = 250 * 1024 * 1024; 67 const int kMaxDiskCacheSize = 250 * 1024 * 1024;
67 68
68 ServiceWorkerStatusCode DatabaseStatusToStatusCode( 69 ServiceWorkerStatusCode DatabaseStatusToStatusCode(
69 ServiceWorkerDatabase::Status status) { 70 ServiceWorkerDatabase::Status status) {
70 switch (status) { 71 switch (status) {
71 case ServiceWorkerDatabase::STATUS_OK: 72 case ServiceWorkerDatabase::STATUS_OK:
72 return SERVICE_WORKER_OK; 73 return SERVICE_WORKER_OK;
73 case ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND: 74 case ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND:
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 } 201 }
201 202
202 ReadSomeData(); 203 ReadSomeData();
203 } 204 }
204 205
205 } // namespace 206 } // namespace
206 207
207 ServiceWorkerStorage::InitialData::InitialData() 208 ServiceWorkerStorage::InitialData::InitialData()
208 : next_registration_id(kInvalidServiceWorkerRegistrationId), 209 : next_registration_id(kInvalidServiceWorkerRegistrationId),
209 next_version_id(kInvalidServiceWorkerVersionId), 210 next_version_id(kInvalidServiceWorkerVersionId),
210 next_resource_id(kInvalidServiceWorkerResourceId) { 211 next_resource_id(kInvalidServiceWorkerResourceId),
212 migration_state(ServiceWorkerDatabase::DISKCACHE_UNKNOWN_STATE) {
211 } 213 }
212 214
213 ServiceWorkerStorage::InitialData::~InitialData() { 215 ServiceWorkerStorage::InitialData::~InitialData() {
214 } 216 }
215 217
216 ServiceWorkerStorage:: 218 ServiceWorkerStorage::
217 DidDeleteRegistrationParams::DidDeleteRegistrationParams() 219 DidDeleteRegistrationParams::DidDeleteRegistrationParams()
218 : registration_id(kInvalidServiceWorkerRegistrationId) { 220 : registration_id(kInvalidServiceWorkerRegistrationId) {
219 } 221 }
220 222
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 : next_registration_id_(kInvalidServiceWorkerRegistrationId), 923 : next_registration_id_(kInvalidServiceWorkerRegistrationId),
922 next_version_id_(kInvalidServiceWorkerVersionId), 924 next_version_id_(kInvalidServiceWorkerVersionId),
923 next_resource_id_(kInvalidServiceWorkerResourceId), 925 next_resource_id_(kInvalidServiceWorkerResourceId),
924 state_(UNINITIALIZED), 926 state_(UNINITIALIZED),
925 path_(path), 927 path_(path),
926 context_(context), 928 context_(context),
927 database_task_manager_(database_task_manager.Pass()), 929 database_task_manager_(database_task_manager.Pass()),
928 disk_cache_thread_(disk_cache_thread), 930 disk_cache_thread_(disk_cache_thread),
929 quota_manager_proxy_(quota_manager_proxy), 931 quota_manager_proxy_(quota_manager_proxy),
930 special_storage_policy_(special_storage_policy), 932 special_storage_policy_(special_storage_policy),
933 disk_cache_migration_state_(
934 ServiceWorkerDatabase::DISKCACHE_UNKNOWN_STATE),
931 is_purge_pending_(false), 935 is_purge_pending_(false),
932 has_checked_for_stale_resources_(false), 936 has_checked_for_stale_resources_(false),
933 weak_factory_(this) { 937 weak_factory_(this) {
934 database_.reset(new ServiceWorkerDatabase(GetDatabasePath())); 938 database_.reset(new ServiceWorkerDatabase(GetDatabasePath()));
935 } 939 }
936 940
937 base::FilePath ServiceWorkerStorage::GetDatabasePath() { 941 base::FilePath ServiceWorkerStorage::GetDatabasePath() {
938 if (path_.empty()) 942 if (path_.empty())
939 return base::FilePath(); 943 return base::FilePath();
940 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory) 944 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory)
941 .Append(kDatabaseName); 945 .Append(kDatabaseName);
942 } 946 }
943 947
944 base::FilePath ServiceWorkerStorage::GetDiskCachePath() { 948 base::FilePath ServiceWorkerStorage::GetDiskCachePath() {
945 if (path_.empty()) 949 if (path_.empty())
946 return base::FilePath(); 950 return base::FilePath();
947 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory) 951 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory)
948 .Append(kDiskCacheName); 952 .Append(kDiskCacheName);
949 } 953 }
950 954
955 base::FilePath ServiceWorkerStorage::GetOldDiskCachePath() {
956 if (path_.empty())
957 return base::FilePath();
958 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory)
959 .Append(kOldDiskCacheName);
960 }
961
951 bool ServiceWorkerStorage::LazyInitialize(const base::Closure& callback) { 962 bool ServiceWorkerStorage::LazyInitialize(const base::Closure& callback) {
952 if (!context_) 963 if (!context_)
953 return false; 964 return false;
954 965
955 switch (state_) { 966 switch (state_) {
956 case INITIALIZED: 967 case INITIALIZED:
957 return true; 968 return true;
958 case DISABLED: 969 case DISABLED:
959 return false; 970 return false;
960 case INITIALIZING: 971 case INITIALIZING:
(...skipping 19 matching lines...) Expand all
980 InitialData* data, 991 InitialData* data,
981 ServiceWorkerDatabase::Status status) { 992 ServiceWorkerDatabase::Status status) {
982 DCHECK(data); 993 DCHECK(data);
983 DCHECK_EQ(INITIALIZING, state_); 994 DCHECK_EQ(INITIALIZING, state_);
984 995
985 if (status == ServiceWorkerDatabase::STATUS_OK) { 996 if (status == ServiceWorkerDatabase::STATUS_OK) {
986 next_registration_id_ = data->next_registration_id; 997 next_registration_id_ = data->next_registration_id;
987 next_version_id_ = data->next_version_id; 998 next_version_id_ = data->next_version_id;
988 next_resource_id_ = data->next_resource_id; 999 next_resource_id_ = data->next_resource_id;
989 registered_origins_.swap(data->origins); 1000 registered_origins_.swap(data->origins);
1001 disk_cache_migration_state_ = data->migration_state;
990 state_ = INITIALIZED; 1002 state_ = INITIALIZED;
991 } else { 1003 } else {
992 DVLOG(2) << "Failed to initialize: " 1004 DVLOG(2) << "Failed to initialize: "
993 << ServiceWorkerDatabase::StatusToString(status); 1005 << ServiceWorkerDatabase::StatusToString(status);
994 ScheduleDeleteAndStartOver(); 1006 ScheduleDeleteAndStartOver();
995 } 1007 }
996 1008
997 for (std::vector<base::Closure>::const_iterator it = pending_tasks_.begin(); 1009 for (std::vector<base::Closure>::const_iterator it = pending_tasks_.begin();
998 it != pending_tasks_.end(); ++it) { 1010 it != pending_tasks_.end(); ++it) {
999 RunSoon(FROM_HERE, *it); 1011 RunSoon(FROM_HERE, *it);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1097 void ServiceWorkerStorage::ReturnFoundRegistration( 1109 void ServiceWorkerStorage::ReturnFoundRegistration(
1098 const FindRegistrationCallback& callback, 1110 const FindRegistrationCallback& callback,
1099 const ServiceWorkerDatabase::RegistrationData& data, 1111 const ServiceWorkerDatabase::RegistrationData& data,
1100 const ResourceList& resources) { 1112 const ResourceList& resources) {
1101 DCHECK(!resources.empty()); 1113 DCHECK(!resources.empty());
1102 scoped_refptr<ServiceWorkerRegistration> registration = 1114 scoped_refptr<ServiceWorkerRegistration> registration =
1103 GetOrCreateRegistration(data, resources); 1115 GetOrCreateRegistration(data, resources);
1104 CompleteFindNow(registration, SERVICE_WORKER_OK, callback); 1116 CompleteFindNow(registration, SERVICE_WORKER_OK, callback);
1105 } 1117 }
1106 1118
1119 void ServiceWorkerStorage::DidWriteDatabase(
1120 const base::Closure& continuation,
1121 ServiceWorkerDatabase::Status status) {
1122 if (status != ServiceWorkerDatabase::STATUS_OK) {
1123 ScheduleDeleteAndStartOver();
1124 return;
1125 }
1126 continuation.Run();
1127 }
1128
1107 void ServiceWorkerStorage::DidGetRegistrations( 1129 void ServiceWorkerStorage::DidGetRegistrations(
1108 const GetRegistrationsCallback& callback, 1130 const GetRegistrationsCallback& callback,
1109 RegistrationList* registration_data_list, 1131 RegistrationList* registration_data_list,
1110 std::vector<ResourceList>* resources_list, 1132 std::vector<ResourceList>* resources_list,
1111 const GURL& origin_filter, 1133 const GURL& origin_filter,
1112 ServiceWorkerDatabase::Status status) { 1134 ServiceWorkerDatabase::Status status) {
1113 DCHECK(registration_data_list); 1135 DCHECK(registration_data_list);
1114 DCHECK(resources_list); 1136 DCHECK(resources_list);
1115 1137
1116 if (status != ServiceWorkerDatabase::STATUS_OK && 1138 if (status != ServiceWorkerDatabase::STATUS_OK &&
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 ServiceWorkerStorage::FindInstallingRegistrationForId( 1422 ServiceWorkerStorage::FindInstallingRegistrationForId(
1401 int64 registration_id) { 1423 int64 registration_id) {
1402 RegistrationRefsById::const_iterator found = 1424 RegistrationRefsById::const_iterator found =
1403 installing_registrations_.find(registration_id); 1425 installing_registrations_.find(registration_id);
1404 if (found == installing_registrations_.end()) 1426 if (found == installing_registrations_.end())
1405 return NULL; 1427 return NULL;
1406 return found->second.get(); 1428 return found->second.get();
1407 } 1429 }
1408 1430
1409 ServiceWorkerDiskCache* ServiceWorkerStorage::disk_cache() { 1431 ServiceWorkerDiskCache* ServiceWorkerStorage::disk_cache() {
1432 DCHECK_EQ(INITIALIZED, state_);
1410 if (disk_cache_) 1433 if (disk_cache_)
1411 return disk_cache_.get(); 1434 return disk_cache_.get();
1412 1435
1413 disk_cache_ = ServiceWorkerDiskCache::CreateWithBlockFileBackend(); 1436 disk_cache_ = ServiceWorkerDiskCache::CreateWithSimpleBackend();
1414 1437
1415 base::FilePath path = GetDiskCachePath(); 1438 base::FilePath path = GetDiskCachePath();
1416 if (path.empty()) { 1439 if (path.empty()) {
1417 int rv = disk_cache_->InitWithMemBackend(kMaxMemDiskCacheSize, 1440 int rv = disk_cache_->InitWithMemBackend(kMaxMemDiskCacheSize,
1418 net::CompletionCallback()); 1441 net::CompletionCallback());
1419 DCHECK_EQ(net::OK, rv); 1442 DCHECK_EQ(net::OK, rv);
1420 return disk_cache_.get(); 1443 return disk_cache_.get();
1421 } 1444 }
1422 1445
1446 switch (disk_cache_migration_state_) {
michaeln 2015/06/12 20:47:58 if (migration_needed_) start it; // when its do
nhiroki 2015/06/15 16:43:27 Done.
1447 case ServiceWorkerDatabase::DISKCACHE_NOT_USED: {
1448 // Defer the start of initialization until a migration state is updated.
1449 disk_cache_->set_is_waiting_to_initialize(true);
1450 base::Closure continuation =
1451 base::Bind(&ServiceWorkerStorage::InitializeDiskCache,
1452 weak_factory_.GetWeakPtr());
1453 PostTaskAndReplyWithResult(
1454 database_task_manager_->GetTaskRunner(), FROM_HERE,
1455 base::Bind(&ServiceWorkerDatabase::WriteDiskCacheMigrationState,
1456 base::Unretained(database_.get()),
1457 ServiceWorkerDatabase::DISKCACHE_MIGRATED),
1458 base::Bind(&ServiceWorkerStorage::DidWriteDatabase,
1459 weak_factory_.GetWeakPtr(), continuation));
1460 ServiceWorkerMetrics::RecordDiskCacheMigrationResult(
1461 ServiceWorkerMetrics::MIGRATION_NOT_NECESSARY);
1462 break;
1463 }
1464 case ServiceWorkerDatabase::DISKCACHE_NEEDS_TO_MIGRATE: {
1465 // Defer the start of initialization until a migration is complete.
1466 disk_cache_->set_is_waiting_to_initialize(true);
1467 DCHECK(!disk_cache_migrator_);
1468 disk_cache_migrator_.reset(new ServiceWorkerDiskCacheMigrator(
1469 GetOldDiskCachePath(), GetDiskCachePath(), kMaxDiskCacheSize,
1470 disk_cache_thread_));
1471 disk_cache_migrator_->Start(
1472 base::Bind(&ServiceWorkerStorage::DidMigrateDiskCache,
1473 weak_factory_.GetWeakPtr()));
1474 break;
1475 }
1476 case ServiceWorkerDatabase::DISKCACHE_NEEDS_TO_DELETE_OLD: {
1477 // A migration was complete, but an old diskcache still exists.
1478 base::Closure continuation = base::Bind(&base::DoNothing);
1479 BrowserThread::PostAfterStartupTask(
1480 FROM_HERE, database_task_manager_->GetTaskRunner(),
1481 base::Bind(&DeleteOldDiskCacheInDB, database_.get(),
1482 base::ThreadTaskRunnerHandle::Get(), GetOldDiskCachePath(),
1483 base::Bind(&ServiceWorkerStorage::DidWriteDatabase,
1484 weak_factory_.GetWeakPtr(), continuation)));
1485
1486 // Don't have to wait for the completion of deleting the old diskcache.
1487 // Immediately continue to initialize.
1488 ServiceWorkerMetrics::RecordDiskCacheMigrationResult(
1489 ServiceWorkerMetrics::MIGRATION_NOT_NECESSARY);
1490 InitializeDiskCache();
1491 break;
1492 }
1493 case ServiceWorkerDatabase::DISKCACHE_MIGRATED: {
1494 ServiceWorkerMetrics::RecordDiskCacheMigrationResult(
1495 ServiceWorkerMetrics::MIGRATION_NOT_NECESSARY);
1496 InitializeDiskCache();
1497 break;
1498 }
1499 case ServiceWorkerDatabase::DISKCACHE_UNKNOWN_STATE: {
1500 NOTREACHED();
1501 break;
1502 }
1503 }
1504
1505 return disk_cache_.get();
1506 }
1507
1508 void ServiceWorkerStorage::DidMigrateDiskCache(ServiceWorkerStatusCode status) {
1509 disk_cache_migrator_.reset();
1510
1511 if (status != SERVICE_WORKER_OK) {
1512 LOG(ERROR) << "Failed to migrate the diskcache: "
1513 << ServiceWorkerStatusToString(status);
1514 ServiceWorkerMetrics::RecordDiskCacheMigrationResult(
1515 ServiceWorkerMetrics::MIGRATION_ERROR_FAILED);
1516
1517 // Give up a migration and recreate the whole storage.
1518 ScheduleDeleteAndStartOver();
1519
1520 // Delete the old diskcache.
1521 disk_cache_thread_->PostTask(
1522 FROM_HERE, base::Bind(base::IgnoreResult(&base::DeleteFile),
1523 GetOldDiskCachePath(), true));
1524 return;
1525 }
1526
1527 // The migration was complete, but an old diskcache still exists.
1528 base::Closure continuation = base::Bind(&base::DoNothing);
1529 BrowserThread::PostAfterStartupTask(
1530 FROM_HERE, database_task_manager_->GetTaskRunner(),
1531 base::Bind(&DeleteOldDiskCacheInDB, database_.get(),
1532 base::ThreadTaskRunnerHandle::Get(), GetOldDiskCachePath(),
1533 base::Bind(&ServiceWorkerStorage::DidWriteDatabase,
1534 weak_factory_.GetWeakPtr(), continuation)));
1535
1536 // Don't have to wait for the completion of deleting the old diskcache.
1537 // Immediately continue to initialize.
1538 ServiceWorkerMetrics::RecordDiskCacheMigrationResult(
1539 ServiceWorkerMetrics::MIGRATION_OK);
1540 InitializeDiskCache();
1541 }
1542
1543 void ServiceWorkerStorage::InitializeDiskCache() {
1544 disk_cache_->set_is_waiting_to_initialize(false);
1423 int rv = disk_cache_->InitWithDiskBackend( 1545 int rv = disk_cache_->InitWithDiskBackend(
1424 path, 1546 GetDiskCachePath(), kMaxDiskCacheSize, false, disk_cache_thread_,
1425 kMaxDiskCacheSize,
1426 false,
1427 disk_cache_thread_,
1428 base::Bind(&ServiceWorkerStorage::OnDiskCacheInitialized, 1547 base::Bind(&ServiceWorkerStorage::OnDiskCacheInitialized,
1429 weak_factory_.GetWeakPtr())); 1548 weak_factory_.GetWeakPtr()));
1430 if (rv != net::ERR_IO_PENDING) 1549 if (rv != net::ERR_IO_PENDING)
1431 OnDiskCacheInitialized(rv); 1550 OnDiskCacheInitialized(rv);
1432
1433 return disk_cache_.get();
1434 } 1551 }
1435 1552
1436 void ServiceWorkerStorage::OnDiskCacheInitialized(int rv) { 1553 void ServiceWorkerStorage::OnDiskCacheInitialized(int rv) {
1437 if (rv != net::OK) { 1554 if (rv != net::OK) {
1438 LOG(ERROR) << "Failed to open the serviceworker diskcache: " 1555 LOG(ERROR) << "Failed to open the serviceworker diskcache: "
1439 << net::ErrorToString(rv); 1556 << net::ErrorToString(rv);
1440 ScheduleDeleteAndStartOver(); 1557 ScheduleDeleteAndStartOver();
1441 } 1558 }
1442 ServiceWorkerMetrics::CountInitDiskCacheResult(rv == net::OK); 1559 ServiceWorkerMetrics::CountInitDiskCacheResult(rv == net::OK);
1443 } 1560 }
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1581 ServiceWorkerDatabase::Status status = 1698 ServiceWorkerDatabase::Status status =
1582 database->GetNextAvailableIds(&data->next_registration_id, 1699 database->GetNextAvailableIds(&data->next_registration_id,
1583 &data->next_version_id, 1700 &data->next_version_id,
1584 &data->next_resource_id); 1701 &data->next_resource_id);
1585 if (status != ServiceWorkerDatabase::STATUS_OK) { 1702 if (status != ServiceWorkerDatabase::STATUS_OK) {
1586 original_task_runner->PostTask( 1703 original_task_runner->PostTask(
1587 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); 1704 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status));
1588 return; 1705 return;
1589 } 1706 }
1590 1707
1708 status = database->ReadDiskCacheMigrationState(&data->migration_state);
1709 if (status != ServiceWorkerDatabase::STATUS_OK) {
1710 original_task_runner->PostTask(
1711 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status));
1712 return;
1713 }
1714
1591 status = database->GetOriginsWithRegistrations(&data->origins); 1715 status = database->GetOriginsWithRegistrations(&data->origins);
1592 original_task_runner->PostTask( 1716 original_task_runner->PostTask(
1593 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); 1717 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status));
1594 } 1718 }
1595 1719
1720 void ServiceWorkerStorage::DeleteOldDiskCacheInDB(
1721 ServiceWorkerDatabase* database,
1722 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
1723 const base::FilePath& disk_cache_path,
1724 const DatabaseStatusCallback& callback) {
1725 DCHECK(database);
1726 ServiceWorkerDatabase::Status status = database->WriteDiskCacheMigrationState(
1727 ServiceWorkerDatabase::DISKCACHE_NEEDS_TO_DELETE_OLD);
1728 if (status != ServiceWorkerDatabase::STATUS_OK) {
1729 original_task_runner->PostTask(FROM_HERE, base::Bind(callback, status));
1730 return;
1731 }
1732
1733 if (!base::DeleteFile(disk_cache_path, true)) {
michaeln 2015/06/12 20:47:58 it would be good to defer this part till 'aftersta
nhiroki 2015/06/15 16:43:27 Done.
1734 // Ignore a failure. A migration state has already been recorded in the
1735 // database and a retry happens on the next diskcache initialization.
1736 original_task_runner->PostTask(
1737 FROM_HERE, base::Bind(callback, ServiceWorkerDatabase::STATUS_OK));
1738 return;
1739 }
1740
1741 status = database->WriteDiskCacheMigrationState(
1742 ServiceWorkerDatabase::DISKCACHE_MIGRATED);
1743 original_task_runner->PostTask(FROM_HERE, base::Bind(callback, status));
1744 }
1745
1596 void ServiceWorkerStorage::DeleteRegistrationFromDB( 1746 void ServiceWorkerStorage::DeleteRegistrationFromDB(
1597 ServiceWorkerDatabase* database, 1747 ServiceWorkerDatabase* database,
1598 scoped_refptr<base::SequencedTaskRunner> original_task_runner, 1748 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
1599 int64 registration_id, 1749 int64 registration_id,
1600 const GURL& origin, 1750 const GURL& origin,
1601 const DeleteRegistrationCallback& callback) { 1751 const DeleteRegistrationCallback& callback) {
1602 DCHECK(database); 1752 DCHECK(database);
1603 1753
1604 ServiceWorkerDatabase::RegistrationData deleted_version; 1754 ServiceWorkerDatabase::RegistrationData deleted_version;
1605 std::vector<int64> newly_purgeable_resources; 1755 std::vector<int64> newly_purgeable_resources;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1850 callback.Run(SERVICE_WORKER_ERROR_FAILED); 2000 callback.Run(SERVICE_WORKER_ERROR_FAILED);
1851 return; 2001 return;
1852 } 2002 }
1853 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; 2003 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully.";
1854 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( 2004 ServiceWorkerMetrics::RecordDeleteAndStartOverResult(
1855 ServiceWorkerMetrics::DELETE_OK); 2005 ServiceWorkerMetrics::DELETE_OK);
1856 callback.Run(SERVICE_WORKER_OK); 2006 callback.Run(SERVICE_WORKER_OK);
1857 } 2007 }
1858 2008
1859 } // namespace content 2009 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698