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" |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForPattern, | 360 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForPattern, |
361 weak_factory_.GetWeakPtr(), | 361 weak_factory_.GetWeakPtr(), |
362 scope, | 362 scope, |
363 callback))); | 363 callback))); |
364 } | 364 } |
365 | 365 |
366 ServiceWorkerRegistration* ServiceWorkerStorage::GetUninstallingRegistration( | 366 ServiceWorkerRegistration* ServiceWorkerStorage::GetUninstallingRegistration( |
367 const GURL& scope) { | 367 const GURL& scope) { |
368 if (state_ != INITIALIZED || !context_) | 368 if (state_ != INITIALIZED || !context_) |
369 return NULL; | 369 return NULL; |
370 for (RegistrationRefsById::const_iterator it = | 370 for (const auto& registration : uninstalling_registrations_) { |
371 uninstalling_registrations_.begin(); | 371 if (registration.second->pattern() == scope) { |
372 it != uninstalling_registrations_.end(); | 372 DCHECK(registration.second->is_uninstalling()); |
373 ++it) { | 373 return registration.second.get(); |
374 if (it->second->pattern() == scope) { | |
375 DCHECK(it->second->is_uninstalling()); | |
376 return it->second.get(); | |
377 } | 374 } |
378 } | 375 } |
379 return NULL; | 376 return NULL; |
380 } | 377 } |
381 | 378 |
382 void ServiceWorkerStorage::FindRegistrationForId( | 379 void ServiceWorkerStorage::FindRegistrationForId( |
383 int64 registration_id, | 380 int64 registration_id, |
384 const GURL& origin, | 381 const GURL& origin, |
385 const FindRegistrationCallback& callback) { | 382 const FindRegistrationCallback& callback) { |
386 if (!LazyInitialize(base::Bind( | 383 if (!LazyInitialize(base::Bind( |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
867 void ServiceWorkerStorage::NotifyDoneInstallingRegistration( | 864 void ServiceWorkerStorage::NotifyDoneInstallingRegistration( |
868 ServiceWorkerRegistration* registration, | 865 ServiceWorkerRegistration* registration, |
869 ServiceWorkerVersion* version, | 866 ServiceWorkerVersion* version, |
870 ServiceWorkerStatusCode status) { | 867 ServiceWorkerStatusCode status) { |
871 installing_registrations_.erase(registration->id()); | 868 installing_registrations_.erase(registration->id()); |
872 if (status != SERVICE_WORKER_OK && version) { | 869 if (status != SERVICE_WORKER_OK && version) { |
873 ResourceList resources; | 870 ResourceList resources; |
874 version->script_cache_map()->GetResources(&resources); | 871 version->script_cache_map()->GetResources(&resources); |
875 | 872 |
876 std::set<int64> ids; | 873 std::set<int64> ids; |
877 for (size_t i = 0; i < resources.size(); ++i) | 874 for (const auto& resource : resources) |
878 ids.insert(resources[i].resource_id); | 875 ids.insert(resource.resource_id); |
879 | 876 |
880 database_task_manager_->GetTaskRunner()->PostTask( | 877 database_task_manager_->GetTaskRunner()->PostTask( |
881 FROM_HERE, | 878 FROM_HERE, |
882 base::Bind(base::IgnoreResult( | 879 base::Bind(base::IgnoreResult( |
883 &ServiceWorkerDatabase::PurgeUncommittedResourceIds), | 880 &ServiceWorkerDatabase::PurgeUncommittedResourceIds), |
884 base::Unretained(database_.get()), | 881 base::Unretained(database_.get()), |
885 ids)); | 882 ids)); |
886 } | 883 } |
887 } | 884 } |
888 | 885 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1001 registered_origins_.swap(data->origins); | 998 registered_origins_.swap(data->origins); |
1002 disk_cache_migration_needed_ = data->disk_cache_migration_needed; | 999 disk_cache_migration_needed_ = data->disk_cache_migration_needed; |
1003 old_disk_cache_deletion_needed_ = data->old_disk_cache_deletion_needed; | 1000 old_disk_cache_deletion_needed_ = data->old_disk_cache_deletion_needed; |
1004 state_ = INITIALIZED; | 1001 state_ = INITIALIZED; |
1005 } else { | 1002 } else { |
1006 DVLOG(2) << "Failed to initialize: " | 1003 DVLOG(2) << "Failed to initialize: " |
1007 << ServiceWorkerDatabase::StatusToString(status); | 1004 << ServiceWorkerDatabase::StatusToString(status); |
1008 ScheduleDeleteAndStartOver(); | 1005 ScheduleDeleteAndStartOver(); |
1009 } | 1006 } |
1010 | 1007 |
1011 for (std::vector<base::Closure>::const_iterator it = pending_tasks_.begin(); | 1008 for (const auto& task : pending_tasks_) |
1012 it != pending_tasks_.end(); ++it) { | 1009 RunSoon(FROM_HERE, task); |
1013 RunSoon(FROM_HERE, *it); | |
1014 } | |
1015 pending_tasks_.clear(); | 1010 pending_tasks_.clear(); |
1016 } | 1011 } |
1017 | 1012 |
1018 void ServiceWorkerStorage::DidFindRegistrationForDocument( | 1013 void ServiceWorkerStorage::DidFindRegistrationForDocument( |
1019 const GURL& document_url, | 1014 const GURL& document_url, |
1020 const FindRegistrationCallback& callback, | 1015 const FindRegistrationCallback& callback, |
1021 int64 callback_id, | 1016 int64 callback_id, |
1022 const ServiceWorkerDatabase::RegistrationData& data, | 1017 const ServiceWorkerDatabase::RegistrationData& data, |
1023 const ResourceList& resources, | 1018 const ResourceList& resources, |
1024 ServiceWorkerDatabase::Status status) { | 1019 ServiceWorkerDatabase::Status status) { |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1138 std::set<int64> registration_ids; | 1133 std::set<int64> registration_ids; |
1139 std::vector<scoped_refptr<ServiceWorkerRegistration>> registrations; | 1134 std::vector<scoped_refptr<ServiceWorkerRegistration>> registrations; |
1140 size_t index = 0; | 1135 size_t index = 0; |
1141 for (const auto& registration_data : *registration_data_list) { | 1136 for (const auto& registration_data : *registration_data_list) { |
1142 registration_ids.insert(registration_data.registration_id); | 1137 registration_ids.insert(registration_data.registration_id); |
1143 registrations.push_back(GetOrCreateRegistration( | 1138 registrations.push_back(GetOrCreateRegistration( |
1144 registration_data, resources_list->at(index++))); | 1139 registration_data, resources_list->at(index++))); |
1145 } | 1140 } |
1146 | 1141 |
1147 // Add unstored registrations that are being installed. | 1142 // Add unstored registrations that are being installed. |
1148 for (RegistrationRefsById::const_iterator it = | 1143 for (const auto& registration : installing_registrations_) { |
1149 installing_registrations_.begin(); | |
1150 it != installing_registrations_.end(); ++it) { | |
1151 if ((!origin_filter.is_valid() || | 1144 if ((!origin_filter.is_valid() || |
1152 it->second->pattern().GetOrigin() == origin_filter) && | 1145 registration.second->pattern().GetOrigin() == origin_filter) && |
1153 registration_ids.insert(it->first).second) { | 1146 registration_ids.insert(registration.first).second) { |
1154 registrations.push_back((it->second).get()); | 1147 registrations.push_back(registration.second); |
1155 } | 1148 } |
1156 } | 1149 } |
1157 | 1150 |
1158 callback.Run(registrations); | 1151 callback.Run(registrations); |
1159 } | 1152 } |
1160 | 1153 |
1161 void ServiceWorkerStorage::DidGetRegistrationsInfos( | 1154 void ServiceWorkerStorage::DidGetRegistrationsInfos( |
1162 const GetRegistrationsInfosCallback& callback, | 1155 const GetRegistrationsInfosCallback& callback, |
1163 RegistrationList* registration_data_list, | 1156 RegistrationList* registration_data_list, |
1164 const GURL& origin_filter, | 1157 const GURL& origin_filter, |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1209 } else { | 1202 } else { |
1210 info.waiting_version.status = ServiceWorkerVersion::INSTALLED; | 1203 info.waiting_version.status = ServiceWorkerVersion::INSTALLED; |
1211 info.waiting_version.script_url = registration_data.script; | 1204 info.waiting_version.script_url = registration_data.script; |
1212 info.waiting_version.version_id = registration_data.version_id; | 1205 info.waiting_version.version_id = registration_data.version_id; |
1213 info.waiting_version.registration_id = registration_data.registration_id; | 1206 info.waiting_version.registration_id = registration_data.registration_id; |
1214 } | 1207 } |
1215 infos.push_back(info); | 1208 infos.push_back(info); |
1216 } | 1209 } |
1217 | 1210 |
1218 // Add unstored registrations that are being installed. | 1211 // Add unstored registrations that are being installed. |
1219 for (RegistrationRefsById::const_iterator it = | 1212 for (const auto& registration : installing_registrations_) { |
1220 installing_registrations_.begin(); | |
1221 it != installing_registrations_.end(); ++it) { | |
1222 if ((!origin_filter.is_valid() || | 1213 if ((!origin_filter.is_valid() || |
1223 it->second->pattern().GetOrigin() == origin_filter) && | 1214 registration.second->pattern().GetOrigin() == origin_filter) && |
1224 pushed_registrations.insert(it->first).second) { | 1215 pushed_registrations.insert(registration.first).second) { |
1225 infos.push_back(it->second->GetInfo()); | 1216 infos.push_back(registration.second->GetInfo()); |
1226 } | 1217 } |
1227 } | 1218 } |
1228 | 1219 |
1229 callback.Run(infos); | 1220 callback.Run(infos); |
1230 } | 1221 } |
1231 | 1222 |
1232 void ServiceWorkerStorage::DidStoreRegistration( | 1223 void ServiceWorkerStorage::DidStoreRegistration( |
1233 const StatusCallback& callback, | 1224 const StatusCallback& callback, |
1234 const ServiceWorkerDatabase::RegistrationData& new_version, | 1225 const ServiceWorkerDatabase::RegistrationData& new_version, |
1235 const GURL& origin, | 1226 const GURL& origin, |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1382 ServiceWorkerRegistration* | 1373 ServiceWorkerRegistration* |
1383 ServiceWorkerStorage::FindInstallingRegistrationForDocument( | 1374 ServiceWorkerStorage::FindInstallingRegistrationForDocument( |
1384 const GURL& document_url) { | 1375 const GURL& document_url) { |
1385 DCHECK(!document_url.has_ref()); | 1376 DCHECK(!document_url.has_ref()); |
1386 | 1377 |
1387 LongestScopeMatcher matcher(document_url); | 1378 LongestScopeMatcher matcher(document_url); |
1388 ServiceWorkerRegistration* match = NULL; | 1379 ServiceWorkerRegistration* match = NULL; |
1389 | 1380 |
1390 // TODO(nhiroki): This searches over installing registrations linearly and it | 1381 // TODO(nhiroki): This searches over installing registrations linearly and it |
1391 // couldn't be scalable. Maybe the regs should be partitioned by origin. | 1382 // couldn't be scalable. Maybe the regs should be partitioned by origin. |
1392 for (RegistrationRefsById::const_iterator it = | 1383 for (const auto& registration : installing_registrations_) |
1393 installing_registrations_.begin(); | 1384 if (matcher.MatchLongest(registration.second->pattern())) |
1394 it != installing_registrations_.end(); ++it) { | 1385 match = registration.second.get(); |
1395 if (matcher.MatchLongest(it->second->pattern())) | |
1396 match = it->second.get(); | |
1397 } | |
1398 return match; | 1386 return match; |
1399 } | 1387 } |
1400 | 1388 |
1401 ServiceWorkerRegistration* | 1389 ServiceWorkerRegistration* |
1402 ServiceWorkerStorage::FindInstallingRegistrationForPattern( | 1390 ServiceWorkerStorage::FindInstallingRegistrationForPattern( |
1403 const GURL& scope) { | 1391 const GURL& scope) { |
1404 for (RegistrationRefsById::const_iterator it = | 1392 for (const auto& registration : installing_registrations_) |
1405 installing_registrations_.begin(); | 1393 if (registration.second->pattern() == scope) |
1406 it != installing_registrations_.end(); ++it) { | 1394 return registration.second.get(); |
1407 if (it->second->pattern() == scope) | |
1408 return it->second.get(); | |
1409 } | |
1410 return NULL; | 1395 return NULL; |
1411 } | 1396 } |
1412 | 1397 |
1413 ServiceWorkerRegistration* | 1398 ServiceWorkerRegistration* |
1414 ServiceWorkerStorage::FindInstallingRegistrationForId( | 1399 ServiceWorkerStorage::FindInstallingRegistrationForId( |
1415 int64 registration_id) { | 1400 int64 registration_id) { |
1416 RegistrationRefsById::const_iterator found = | 1401 RegistrationRefsById::const_iterator found = |
1417 installing_registrations_.find(registration_id); | 1402 installing_registrations_.find(registration_id); |
1418 if (found == installing_registrations_.end()) | 1403 if (found == installing_registrations_.end()) |
1419 return NULL; | 1404 return NULL; |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1526 LOG(ERROR) << "Failed to open the serviceworker diskcache: " | 1511 LOG(ERROR) << "Failed to open the serviceworker diskcache: " |
1527 << net::ErrorToString(rv); | 1512 << net::ErrorToString(rv); |
1528 ScheduleDeleteAndStartOver(); | 1513 ScheduleDeleteAndStartOver(); |
1529 } | 1514 } |
1530 ServiceWorkerMetrics::CountInitDiskCacheResult(rv == net::OK); | 1515 ServiceWorkerMetrics::CountInitDiskCacheResult(rv == net::OK); |
1531 } | 1516 } |
1532 | 1517 |
1533 void ServiceWorkerStorage::StartPurgingResources( | 1518 void ServiceWorkerStorage::StartPurgingResources( |
1534 const std::vector<int64>& ids) { | 1519 const std::vector<int64>& ids) { |
1535 DCHECK(has_checked_for_stale_resources_); | 1520 DCHECK(has_checked_for_stale_resources_); |
1536 for (size_t i = 0; i < ids.size(); ++i) | 1521 for (const auto& id : ids) |
1537 purgeable_resource_ids_.push_back(ids[i]); | 1522 purgeable_resource_ids_.push_back(id); |
1538 ContinuePurgingResources(); | 1523 ContinuePurgingResources(); |
1539 } | 1524 } |
1540 | 1525 |
1541 void ServiceWorkerStorage::StartPurgingResources( | 1526 void ServiceWorkerStorage::StartPurgingResources( |
1542 const ResourceList& resources) { | 1527 const ResourceList& resources) { |
1543 DCHECK(has_checked_for_stale_resources_); | 1528 DCHECK(has_checked_for_stale_resources_); |
1544 for (size_t i = 0; i < resources.size(); ++i) | 1529 for (const auto& resource : resources) |
1545 purgeable_resource_ids_.push_back(resources[i].resource_id); | 1530 purgeable_resource_ids_.push_back(resource.resource_id); |
1546 ContinuePurgingResources(); | 1531 ContinuePurgingResources(); |
1547 } | 1532 } |
1548 | 1533 |
1549 void ServiceWorkerStorage::ContinuePurgingResources() { | 1534 void ServiceWorkerStorage::ContinuePurgingResources() { |
1550 if (purgeable_resource_ids_.empty() || is_purge_pending_) | 1535 if (purgeable_resource_ids_.empty() || is_purge_pending_) |
1551 return; | 1536 return; |
1552 | 1537 |
1553 // Do one at a time until we're done, use RunSoon to avoid recursion when | 1538 // Do one at a time until we're done, use RunSoon to avoid recursion when |
1554 // DoomEntry returns immediately. | 1539 // DoomEntry returns immediately. |
1555 is_purge_pending_ = true; | 1540 is_purge_pending_ = true; |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1765 newly_purgeable_resources, | 1750 newly_purgeable_resources, |
1766 status)); | 1751 status)); |
1767 } | 1752 } |
1768 | 1753 |
1769 void ServiceWorkerStorage::FindForDocumentInDB( | 1754 void ServiceWorkerStorage::FindForDocumentInDB( |
1770 ServiceWorkerDatabase* database, | 1755 ServiceWorkerDatabase* database, |
1771 scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 1756 scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
1772 const GURL& document_url, | 1757 const GURL& document_url, |
1773 const FindInDBCallback& callback) { | 1758 const FindInDBCallback& callback) { |
1774 GURL origin = document_url.GetOrigin(); | 1759 GURL origin = document_url.GetOrigin(); |
1775 RegistrationList registrations; | 1760 RegistrationList registration_data_list; |
1776 ServiceWorkerDatabase::Status status = | 1761 ServiceWorkerDatabase::Status status = database->GetRegistrationsForOrigin( |
1777 database->GetRegistrationsForOrigin(origin, ®istrations, nullptr); | 1762 origin, ®istration_data_list, nullptr); |
1778 if (status != ServiceWorkerDatabase::STATUS_OK) { | 1763 if (status != ServiceWorkerDatabase::STATUS_OK) { |
1779 original_task_runner->PostTask( | 1764 original_task_runner->PostTask( |
1780 FROM_HERE, | 1765 FROM_HERE, |
1781 base::Bind(callback, | 1766 base::Bind(callback, |
1782 ServiceWorkerDatabase::RegistrationData(), | 1767 ServiceWorkerDatabase::RegistrationData(), |
1783 ResourceList(), | 1768 ResourceList(), |
1784 status)); | 1769 status)); |
1785 return; | 1770 return; |
1786 } | 1771 } |
1787 | 1772 |
1788 ServiceWorkerDatabase::RegistrationData data; | 1773 ServiceWorkerDatabase::RegistrationData data; |
1789 ResourceList resources; | 1774 ResourceList resources; |
1790 status = ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND; | 1775 status = ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND; |
1791 | 1776 |
1792 // Find one with a pattern match. | 1777 // Find one with a pattern match. |
1793 LongestScopeMatcher matcher(document_url); | 1778 LongestScopeMatcher matcher(document_url); |
1794 int64 match = kInvalidServiceWorkerRegistrationId; | 1779 int64 match = kInvalidServiceWorkerRegistrationId; |
1795 for (size_t i = 0; i < registrations.size(); ++i) { | 1780 for (const auto& registration_data : registration_data_list) |
1796 if (matcher.MatchLongest(registrations[i].scope)) | 1781 if (matcher.MatchLongest(registration_data.scope)) |
1797 match = registrations[i].registration_id; | 1782 match = registration_data.registration_id; |
1798 } | |
1799 | |
1800 if (match != kInvalidServiceWorkerRegistrationId) | 1783 if (match != kInvalidServiceWorkerRegistrationId) |
1801 status = database->ReadRegistration(match, origin, &data, &resources); | 1784 status = database->ReadRegistration(match, origin, &data, &resources); |
1802 | 1785 |
1803 original_task_runner->PostTask( | 1786 original_task_runner->PostTask( |
1804 FROM_HERE, | 1787 FROM_HERE, |
1805 base::Bind(callback, data, resources, status)); | 1788 base::Bind(callback, data, resources, status)); |
1806 } | 1789 } |
1807 | 1790 |
1808 void ServiceWorkerStorage::FindForPatternInDB( | 1791 void ServiceWorkerStorage::FindForPatternInDB( |
1809 ServiceWorkerDatabase* database, | 1792 ServiceWorkerDatabase* database, |
1810 scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 1793 scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
1811 const GURL& scope, | 1794 const GURL& scope, |
1812 const FindInDBCallback& callback) { | 1795 const FindInDBCallback& callback) { |
1813 GURL origin = scope.GetOrigin(); | 1796 GURL origin = scope.GetOrigin(); |
1814 RegistrationList registrations; | 1797 RegistrationList registration_data_list; |
1815 ServiceWorkerDatabase::Status status = | 1798 ServiceWorkerDatabase::Status status = database->GetRegistrationsForOrigin( |
1816 database->GetRegistrationsForOrigin(origin, ®istrations, nullptr); | 1799 origin, ®istration_data_list, nullptr); |
1817 if (status != ServiceWorkerDatabase::STATUS_OK) { | 1800 if (status != ServiceWorkerDatabase::STATUS_OK) { |
1818 original_task_runner->PostTask( | 1801 original_task_runner->PostTask( |
1819 FROM_HERE, | 1802 FROM_HERE, |
1820 base::Bind(callback, | 1803 base::Bind(callback, |
1821 ServiceWorkerDatabase::RegistrationData(), | 1804 ServiceWorkerDatabase::RegistrationData(), |
1822 ResourceList(), | 1805 ResourceList(), |
1823 status)); | 1806 status)); |
1824 return; | 1807 return; |
1825 } | 1808 } |
1826 | 1809 |
1827 // Find one with an exact matching scope. | 1810 // Find one with an exact matching scope. |
1828 ServiceWorkerDatabase::RegistrationData data; | 1811 ServiceWorkerDatabase::RegistrationData data; |
1829 ResourceList resources; | 1812 ResourceList resources; |
1830 status = ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND; | 1813 status = ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND; |
1831 for (RegistrationList::const_iterator it = registrations.begin(); | 1814 for (const auto& registration_data : registration_data_list) { |
1832 it != registrations.end(); ++it) { | 1815 if (scope != registration_data.scope) |
1833 if (scope != it->scope) | |
1834 continue; | 1816 continue; |
1835 status = database->ReadRegistration(it->registration_id, origin, | 1817 status = database->ReadRegistration(registration_data.registration_id, |
1836 &data, &resources); | 1818 origin, &data, &resources); |
1837 break; // We're done looping. | 1819 break; // We're done looping. |
1838 } | 1820 } |
1839 | 1821 |
1840 original_task_runner->PostTask( | 1822 original_task_runner->PostTask( |
1841 FROM_HERE, | 1823 FROM_HERE, |
1842 base::Bind(callback, data, resources, status)); | 1824 base::Bind(callback, data, resources, status)); |
1843 } | 1825 } |
1844 | 1826 |
1845 void ServiceWorkerStorage::FindForIdInDB( | 1827 void ServiceWorkerStorage::FindForIdInDB( |
1846 ServiceWorkerDatabase* database, | 1828 ServiceWorkerDatabase* database, |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1963 callback.Run(SERVICE_WORKER_ERROR_FAILED); | 1945 callback.Run(SERVICE_WORKER_ERROR_FAILED); |
1964 return; | 1946 return; |
1965 } | 1947 } |
1966 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; | 1948 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; |
1967 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( | 1949 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( |
1968 ServiceWorkerMetrics::DELETE_OK); | 1950 ServiceWorkerMetrics::DELETE_OK); |
1969 callback.Run(SERVICE_WORKER_OK); | 1951 callback.Run(SERVICE_WORKER_OK); |
1970 } | 1952 } |
1971 | 1953 |
1972 } // namespace content | 1954 } // namespace content |
OLD | NEW |