OLD | NEW |
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 Loading... |
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 Loading... |
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 disk_cache_migration_needed(false), |
| 213 old_disk_cache_deletion_needed(false) { |
211 } | 214 } |
212 | 215 |
213 ServiceWorkerStorage::InitialData::~InitialData() { | 216 ServiceWorkerStorage::InitialData::~InitialData() { |
214 } | 217 } |
215 | 218 |
216 ServiceWorkerStorage:: | 219 ServiceWorkerStorage:: |
217 DidDeleteRegistrationParams::DidDeleteRegistrationParams() | 220 DidDeleteRegistrationParams::DidDeleteRegistrationParams() |
218 : registration_id(kInvalidServiceWorkerRegistrationId) { | 221 : registration_id(kInvalidServiceWorkerRegistrationId) { |
219 } | 222 } |
220 | 223 |
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
921 : next_registration_id_(kInvalidServiceWorkerRegistrationId), | 924 : next_registration_id_(kInvalidServiceWorkerRegistrationId), |
922 next_version_id_(kInvalidServiceWorkerVersionId), | 925 next_version_id_(kInvalidServiceWorkerVersionId), |
923 next_resource_id_(kInvalidServiceWorkerResourceId), | 926 next_resource_id_(kInvalidServiceWorkerResourceId), |
924 state_(UNINITIALIZED), | 927 state_(UNINITIALIZED), |
925 path_(path), | 928 path_(path), |
926 context_(context), | 929 context_(context), |
927 database_task_manager_(database_task_manager.Pass()), | 930 database_task_manager_(database_task_manager.Pass()), |
928 disk_cache_thread_(disk_cache_thread), | 931 disk_cache_thread_(disk_cache_thread), |
929 quota_manager_proxy_(quota_manager_proxy), | 932 quota_manager_proxy_(quota_manager_proxy), |
930 special_storage_policy_(special_storage_policy), | 933 special_storage_policy_(special_storage_policy), |
| 934 disk_cache_migration_needed_(false), |
| 935 old_disk_cache_deletion_needed_(false), |
931 is_purge_pending_(false), | 936 is_purge_pending_(false), |
932 has_checked_for_stale_resources_(false), | 937 has_checked_for_stale_resources_(false), |
933 weak_factory_(this) { | 938 weak_factory_(this) { |
934 database_.reset(new ServiceWorkerDatabase(GetDatabasePath())); | 939 database_.reset(new ServiceWorkerDatabase(GetDatabasePath())); |
935 } | 940 } |
936 | 941 |
937 base::FilePath ServiceWorkerStorage::GetDatabasePath() { | 942 base::FilePath ServiceWorkerStorage::GetDatabasePath() { |
938 if (path_.empty()) | 943 if (path_.empty()) |
939 return base::FilePath(); | 944 return base::FilePath(); |
940 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory) | 945 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory) |
941 .Append(kDatabaseName); | 946 .Append(kDatabaseName); |
942 } | 947 } |
943 | 948 |
944 base::FilePath ServiceWorkerStorage::GetDiskCachePath() { | 949 base::FilePath ServiceWorkerStorage::GetDiskCachePath() { |
945 if (path_.empty()) | 950 if (path_.empty()) |
946 return base::FilePath(); | 951 return base::FilePath(); |
947 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory) | 952 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory) |
948 .Append(kDiskCacheName); | 953 .Append(kDiskCacheName); |
949 } | 954 } |
950 | 955 |
| 956 base::FilePath ServiceWorkerStorage::GetOldDiskCachePath() { |
| 957 if (path_.empty()) |
| 958 return base::FilePath(); |
| 959 return path_.Append(ServiceWorkerContextCore::kServiceWorkerDirectory) |
| 960 .Append(kOldDiskCacheName); |
| 961 } |
| 962 |
951 bool ServiceWorkerStorage::LazyInitialize(const base::Closure& callback) { | 963 bool ServiceWorkerStorage::LazyInitialize(const base::Closure& callback) { |
952 if (!context_) | 964 if (!context_) |
953 return false; | 965 return false; |
954 | 966 |
955 switch (state_) { | 967 switch (state_) { |
956 case INITIALIZED: | 968 case INITIALIZED: |
957 return true; | 969 return true; |
958 case DISABLED: | 970 case DISABLED: |
959 return false; | 971 return false; |
960 case INITIALIZING: | 972 case INITIALIZING: |
(...skipping 19 matching lines...) Expand all Loading... |
980 InitialData* data, | 992 InitialData* data, |
981 ServiceWorkerDatabase::Status status) { | 993 ServiceWorkerDatabase::Status status) { |
982 DCHECK(data); | 994 DCHECK(data); |
983 DCHECK_EQ(INITIALIZING, state_); | 995 DCHECK_EQ(INITIALIZING, state_); |
984 | 996 |
985 if (status == ServiceWorkerDatabase::STATUS_OK) { | 997 if (status == ServiceWorkerDatabase::STATUS_OK) { |
986 next_registration_id_ = data->next_registration_id; | 998 next_registration_id_ = data->next_registration_id; |
987 next_version_id_ = data->next_version_id; | 999 next_version_id_ = data->next_version_id; |
988 next_resource_id_ = data->next_resource_id; | 1000 next_resource_id_ = data->next_resource_id; |
989 registered_origins_.swap(data->origins); | 1001 registered_origins_.swap(data->origins); |
| 1002 disk_cache_migration_needed_ = data->disk_cache_migration_needed; |
| 1003 old_disk_cache_deletion_needed_ = data->old_disk_cache_deletion_needed; |
990 state_ = INITIALIZED; | 1004 state_ = INITIALIZED; |
991 } else { | 1005 } else { |
992 DVLOG(2) << "Failed to initialize: " | 1006 DVLOG(2) << "Failed to initialize: " |
993 << ServiceWorkerDatabase::StatusToString(status); | 1007 << ServiceWorkerDatabase::StatusToString(status); |
994 ScheduleDeleteAndStartOver(); | 1008 ScheduleDeleteAndStartOver(); |
995 } | 1009 } |
996 | 1010 |
997 for (std::vector<base::Closure>::const_iterator it = pending_tasks_.begin(); | 1011 for (std::vector<base::Closure>::const_iterator it = pending_tasks_.begin(); |
998 it != pending_tasks_.end(); ++it) { | 1012 it != pending_tasks_.end(); ++it) { |
999 RunSoon(FROM_HERE, *it); | 1013 RunSoon(FROM_HERE, *it); |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1400 ServiceWorkerStorage::FindInstallingRegistrationForId( | 1414 ServiceWorkerStorage::FindInstallingRegistrationForId( |
1401 int64 registration_id) { | 1415 int64 registration_id) { |
1402 RegistrationRefsById::const_iterator found = | 1416 RegistrationRefsById::const_iterator found = |
1403 installing_registrations_.find(registration_id); | 1417 installing_registrations_.find(registration_id); |
1404 if (found == installing_registrations_.end()) | 1418 if (found == installing_registrations_.end()) |
1405 return NULL; | 1419 return NULL; |
1406 return found->second.get(); | 1420 return found->second.get(); |
1407 } | 1421 } |
1408 | 1422 |
1409 ServiceWorkerDiskCache* ServiceWorkerStorage::disk_cache() { | 1423 ServiceWorkerDiskCache* ServiceWorkerStorage::disk_cache() { |
| 1424 DCHECK_EQ(INITIALIZED, state_); |
1410 if (disk_cache_) | 1425 if (disk_cache_) |
1411 return disk_cache_.get(); | 1426 return disk_cache_.get(); |
1412 | 1427 |
1413 disk_cache_ = ServiceWorkerDiskCache::CreateWithBlockFileBackend(); | 1428 disk_cache_ = ServiceWorkerDiskCache::CreateWithSimpleBackend(); |
1414 | 1429 |
1415 base::FilePath path = GetDiskCachePath(); | 1430 base::FilePath path = GetDiskCachePath(); |
1416 if (path.empty()) { | 1431 if (path.empty()) { |
1417 int rv = disk_cache_->InitWithMemBackend(kMaxMemDiskCacheSize, | 1432 int rv = disk_cache_->InitWithMemBackend(kMaxMemDiskCacheSize, |
1418 net::CompletionCallback()); | 1433 net::CompletionCallback()); |
1419 DCHECK_EQ(net::OK, rv); | 1434 DCHECK_EQ(net::OK, rv); |
1420 return disk_cache_.get(); | 1435 return disk_cache_.get(); |
1421 } | 1436 } |
1422 | 1437 |
| 1438 if (disk_cache_migration_needed_) { |
| 1439 // Defer the start of initialization until a migration is complete. |
| 1440 disk_cache_->set_is_waiting_to_initialize(true); |
| 1441 DCHECK(!disk_cache_migrator_); |
| 1442 disk_cache_migrator_.reset(new ServiceWorkerDiskCacheMigrator( |
| 1443 GetOldDiskCachePath(), GetDiskCachePath(), kMaxDiskCacheSize, |
| 1444 disk_cache_thread_)); |
| 1445 disk_cache_migrator_->Start( |
| 1446 base::Bind(&ServiceWorkerStorage::DidMigrateDiskCache, |
| 1447 weak_factory_.GetWeakPtr())); |
| 1448 return disk_cache_.get(); |
| 1449 } |
| 1450 |
| 1451 if (old_disk_cache_deletion_needed_) { |
| 1452 // Lazily delete the old diskcache. |
| 1453 BrowserThread::PostAfterStartupTask( |
| 1454 FROM_HERE, database_task_manager_->GetTaskRunner(), |
| 1455 base::Bind(&DeleteOldDiskCacheInDB, database_.get(), |
| 1456 GetOldDiskCachePath())); |
| 1457 } |
| 1458 |
| 1459 ServiceWorkerMetrics::RecordDiskCacheMigrationResult( |
| 1460 ServiceWorkerMetrics::MIGRATION_NOT_NECESSARY); |
| 1461 |
| 1462 InitializeDiskCache(); |
| 1463 return disk_cache_.get(); |
| 1464 } |
| 1465 |
| 1466 void ServiceWorkerStorage::DidMigrateDiskCache(ServiceWorkerStatusCode status) { |
| 1467 disk_cache_migrator_.reset(); |
| 1468 if (status != SERVICE_WORKER_OK) { |
| 1469 OnDiskCacheMigrationFailed(); |
| 1470 return; |
| 1471 } |
| 1472 |
| 1473 PostTaskAndReplyWithResult( |
| 1474 database_task_manager_->GetTaskRunner(), FROM_HERE, |
| 1475 base::Bind(&ServiceWorkerDatabase::SetDiskCacheMigrationNotNeeded, |
| 1476 base::Unretained(database_.get())), |
| 1477 base::Bind(&ServiceWorkerStorage::DidSetDiskCacheMigrationNotNeeded, |
| 1478 weak_factory_.GetWeakPtr())); |
| 1479 } |
| 1480 |
| 1481 void ServiceWorkerStorage::DidSetDiskCacheMigrationNotNeeded( |
| 1482 ServiceWorkerDatabase::Status status) { |
| 1483 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 1484 OnDiskCacheMigrationFailed(); |
| 1485 return; |
| 1486 } |
| 1487 |
| 1488 // Lazily delete the old diskcache and update the database. |
| 1489 BrowserThread::PostAfterStartupTask( |
| 1490 FROM_HERE, database_task_manager_->GetTaskRunner(), |
| 1491 base::Bind(&DeleteOldDiskCacheInDB, database_.get(), |
| 1492 GetOldDiskCachePath())); |
| 1493 |
| 1494 ServiceWorkerMetrics::RecordDiskCacheMigrationResult( |
| 1495 ServiceWorkerMetrics::MIGRATION_OK); |
| 1496 InitializeDiskCache(); |
| 1497 } |
| 1498 |
| 1499 void ServiceWorkerStorage::OnDiskCacheMigrationFailed() { |
| 1500 ServiceWorkerMetrics::RecordDiskCacheMigrationResult( |
| 1501 ServiceWorkerMetrics::MIGRATION_ERROR_FAILED); |
| 1502 |
| 1503 // Give up migration and recreate the whole storage. |
| 1504 ScheduleDeleteAndStartOver(); |
| 1505 |
| 1506 // Lazily delete the old diskcache. Don't have to update the database |
| 1507 // because it will be deleted by DeleteAndStartOver. |
| 1508 BrowserThread::PostAfterStartupTask( |
| 1509 FROM_HERE, disk_cache_thread_.get(), |
| 1510 base::Bind(base::IgnoreResult(&base::DeleteFile), GetOldDiskCachePath(), |
| 1511 true)); |
| 1512 } |
| 1513 |
| 1514 void ServiceWorkerStorage::InitializeDiskCache() { |
| 1515 disk_cache_->set_is_waiting_to_initialize(false); |
1423 int rv = disk_cache_->InitWithDiskBackend( | 1516 int rv = disk_cache_->InitWithDiskBackend( |
1424 path, | 1517 GetDiskCachePath(), kMaxDiskCacheSize, false, disk_cache_thread_, |
1425 kMaxDiskCacheSize, | |
1426 false, | |
1427 disk_cache_thread_, | |
1428 base::Bind(&ServiceWorkerStorage::OnDiskCacheInitialized, | 1518 base::Bind(&ServiceWorkerStorage::OnDiskCacheInitialized, |
1429 weak_factory_.GetWeakPtr())); | 1519 weak_factory_.GetWeakPtr())); |
1430 if (rv != net::ERR_IO_PENDING) | 1520 if (rv != net::ERR_IO_PENDING) |
1431 OnDiskCacheInitialized(rv); | 1521 OnDiskCacheInitialized(rv); |
1432 | |
1433 return disk_cache_.get(); | |
1434 } | 1522 } |
1435 | 1523 |
1436 void ServiceWorkerStorage::OnDiskCacheInitialized(int rv) { | 1524 void ServiceWorkerStorage::OnDiskCacheInitialized(int rv) { |
1437 if (rv != net::OK) { | 1525 if (rv != net::OK) { |
1438 LOG(ERROR) << "Failed to open the serviceworker diskcache: " | 1526 LOG(ERROR) << "Failed to open the serviceworker diskcache: " |
1439 << net::ErrorToString(rv); | 1527 << net::ErrorToString(rv); |
1440 ScheduleDeleteAndStartOver(); | 1528 ScheduleDeleteAndStartOver(); |
1441 } | 1529 } |
1442 ServiceWorkerMetrics::CountInitDiskCacheResult(rv == net::OK); | 1530 ServiceWorkerMetrics::CountInitDiskCacheResult(rv == net::OK); |
1443 } | 1531 } |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1581 ServiceWorkerDatabase::Status status = | 1669 ServiceWorkerDatabase::Status status = |
1582 database->GetNextAvailableIds(&data->next_registration_id, | 1670 database->GetNextAvailableIds(&data->next_registration_id, |
1583 &data->next_version_id, | 1671 &data->next_version_id, |
1584 &data->next_resource_id); | 1672 &data->next_resource_id); |
1585 if (status != ServiceWorkerDatabase::STATUS_OK) { | 1673 if (status != ServiceWorkerDatabase::STATUS_OK) { |
1586 original_task_runner->PostTask( | 1674 original_task_runner->PostTask( |
1587 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); | 1675 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); |
1588 return; | 1676 return; |
1589 } | 1677 } |
1590 | 1678 |
| 1679 status = |
| 1680 database->IsDiskCacheMigrationNeeded(&data->disk_cache_migration_needed); |
| 1681 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 1682 original_task_runner->PostTask( |
| 1683 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); |
| 1684 return; |
| 1685 } |
| 1686 |
| 1687 status = database->IsOldDiskCacheDeletionNeeded( |
| 1688 &data->old_disk_cache_deletion_needed); |
| 1689 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 1690 original_task_runner->PostTask( |
| 1691 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); |
| 1692 return; |
| 1693 } |
| 1694 |
1591 status = database->GetOriginsWithRegistrations(&data->origins); | 1695 status = database->GetOriginsWithRegistrations(&data->origins); |
1592 original_task_runner->PostTask( | 1696 original_task_runner->PostTask( |
1593 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); | 1697 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); |
1594 } | 1698 } |
1595 | 1699 |
| 1700 void ServiceWorkerStorage::DeleteOldDiskCacheInDB( |
| 1701 ServiceWorkerDatabase* database, |
| 1702 const base::FilePath& disk_cache_path) { |
| 1703 // Ignore a failure. A retry will happen on the next initialization. |
| 1704 if (!base::DeleteFile(disk_cache_path, true)) |
| 1705 return; |
| 1706 database->SetOldDiskCacheDeletionNotNeeded(); |
| 1707 } |
| 1708 |
1596 void ServiceWorkerStorage::DeleteRegistrationFromDB( | 1709 void ServiceWorkerStorage::DeleteRegistrationFromDB( |
1597 ServiceWorkerDatabase* database, | 1710 ServiceWorkerDatabase* database, |
1598 scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 1711 scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
1599 int64 registration_id, | 1712 int64 registration_id, |
1600 const GURL& origin, | 1713 const GURL& origin, |
1601 const DeleteRegistrationCallback& callback) { | 1714 const DeleteRegistrationCallback& callback) { |
1602 DCHECK(database); | 1715 DCHECK(database); |
1603 | 1716 |
1604 ServiceWorkerDatabase::RegistrationData deleted_version; | 1717 ServiceWorkerDatabase::RegistrationData deleted_version; |
1605 std::vector<int64> newly_purgeable_resources; | 1718 std::vector<int64> newly_purgeable_resources; |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1850 callback.Run(SERVICE_WORKER_ERROR_FAILED); | 1963 callback.Run(SERVICE_WORKER_ERROR_FAILED); |
1851 return; | 1964 return; |
1852 } | 1965 } |
1853 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; | 1966 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; |
1854 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( | 1967 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( |
1855 ServiceWorkerMetrics::DELETE_OK); | 1968 ServiceWorkerMetrics::DELETE_OK); |
1856 callback.Run(SERVICE_WORKER_OK); | 1969 callback.Run(SERVICE_WORKER_OK); |
1857 } | 1970 } |
1858 | 1971 |
1859 } // namespace content | 1972 } // namespace content |
OLD | NEW |