Chromium Code Reviews| 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 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 453 base::Bind(&FindForIdOnlyInDB, | 453 base::Bind(&FindForIdOnlyInDB, |
| 454 database_.get(), | 454 database_.get(), |
| 455 base::ThreadTaskRunnerHandle::Get(), | 455 base::ThreadTaskRunnerHandle::Get(), |
| 456 registration_id, | 456 registration_id, |
| 457 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForId, | 457 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForId, |
| 458 weak_factory_.GetWeakPtr(), | 458 weak_factory_.GetWeakPtr(), |
| 459 callback))); | 459 callback))); |
| 460 } | 460 } |
| 461 | 461 |
| 462 void ServiceWorkerStorage::GetRegistrationsForOrigin( | 462 void ServiceWorkerStorage::GetRegistrationsForOrigin( |
| 463 const GURL& origin, const GetRegistrationsInfosCallback& callback) { | 463 const GURL& origin, |
| 464 const GetRegistrationsCallback& callback) { | |
| 464 if (!LazyInitialize(base::Bind( | 465 if (!LazyInitialize(base::Bind( |
| 465 &ServiceWorkerStorage::GetRegistrationsForOrigin, | 466 &ServiceWorkerStorage::GetRegistrationsForOrigin, |
| 466 weak_factory_.GetWeakPtr(), origin, callback))) { | 467 weak_factory_.GetWeakPtr(), origin, callback))) { |
| 467 if (state_ != INITIALIZING || !context_) { | 468 if (state_ != INITIALIZING || !context_) { |
| 468 RunSoon(FROM_HERE, base::Bind( | 469 RunSoon(FROM_HERE, |
| 469 callback, std::vector<ServiceWorkerRegistrationInfo>())); | 470 base::Bind(callback, std::vector<ServiceWorkerRegistration*>())); |
| 470 } | 471 } |
| 471 return; | 472 return; |
| 472 } | 473 } |
| 473 DCHECK_EQ(INITIALIZED, state_); | 474 DCHECK_EQ(INITIALIZED, state_); |
| 474 | 475 |
| 475 RegistrationList* registrations = new RegistrationList; | 476 RegistrationList* registrations = new RegistrationList; |
| 477 ResourceListList* resource_lists = new ResourceListList; | |
| 476 PostTaskAndReplyWithResult( | 478 PostTaskAndReplyWithResult( |
| 477 database_task_manager_->GetTaskRunner(), | 479 database_task_manager_->GetTaskRunner(), FROM_HERE, |
| 478 FROM_HERE, | |
| 479 base::Bind(&ServiceWorkerDatabase::GetRegistrationsForOrigin, | 480 base::Bind(&ServiceWorkerDatabase::GetRegistrationsForOrigin, |
| 480 base::Unretained(database_.get()), | 481 base::Unretained(database_.get()), origin, |
| 481 origin, | 482 base::Unretained(registrations), |
| 482 base::Unretained(registrations)), | 483 base::Unretained(resource_lists)), |
| 483 base::Bind(&ServiceWorkerStorage::DidGetRegistrations, | 484 base::Bind(&ServiceWorkerStorage::DidGetRegistrations, |
| 484 weak_factory_.GetWeakPtr(), | 485 weak_factory_.GetWeakPtr(), callback, |
| 485 callback, | 486 base::Owned(registrations), base::Owned(resource_lists), |
| 486 base::Owned(registrations), | |
| 487 origin)); | 487 origin)); |
| 488 } | 488 } |
| 489 | 489 |
| 490 void ServiceWorkerStorage::GetAllRegistrations( | 490 void ServiceWorkerStorage::GetAllRegistrationsInfos( |
| 491 const GetRegistrationsInfosCallback& callback) { | 491 const GetRegistrationsInfosCallback& callback) { |
| 492 if (!LazyInitialize(base::Bind( | 492 if (!LazyInitialize( |
| 493 &ServiceWorkerStorage::GetAllRegistrations, | 493 base::Bind(&ServiceWorkerStorage::GetAllRegistrationsInfos, |
| 494 weak_factory_.GetWeakPtr(), callback))) { | 494 weak_factory_.GetWeakPtr(), callback))) { |
| 495 if (state_ != INITIALIZING || !context_) { | 495 if (state_ != INITIALIZING || !context_) { |
| 496 RunSoon(FROM_HERE, base::Bind( | 496 RunSoon(FROM_HERE, base::Bind( |
| 497 callback, std::vector<ServiceWorkerRegistrationInfo>())); | 497 callback, std::vector<ServiceWorkerRegistrationInfo>())); |
| 498 } | 498 } |
| 499 return; | 499 return; |
| 500 } | 500 } |
| 501 DCHECK_EQ(INITIALIZED, state_); | 501 DCHECK_EQ(INITIALIZED, state_); |
| 502 | 502 |
| 503 RegistrationList* registrations = new RegistrationList; | 503 RegistrationList* registrations = new RegistrationList; |
| 504 PostTaskAndReplyWithResult( | 504 PostTaskAndReplyWithResult( |
| 505 database_task_manager_->GetTaskRunner(), | 505 database_task_manager_->GetTaskRunner(), FROM_HERE, |
| 506 FROM_HERE, | |
| 507 base::Bind(&ServiceWorkerDatabase::GetAllRegistrations, | 506 base::Bind(&ServiceWorkerDatabase::GetAllRegistrations, |
| 508 base::Unretained(database_.get()), | 507 base::Unretained(database_.get()), |
| 509 base::Unretained(registrations)), | 508 base::Unretained(registrations)), |
| 510 base::Bind(&ServiceWorkerStorage::DidGetRegistrations, | 509 base::Bind(&ServiceWorkerStorage::DidGetRegistrationsInfos, |
| 511 weak_factory_.GetWeakPtr(), | 510 weak_factory_.GetWeakPtr(), callback, |
| 512 callback, | 511 base::Owned(registrations), GURL())); |
| 513 base::Owned(registrations), | |
| 514 GURL())); | |
| 515 } | 512 } |
| 516 | 513 |
| 517 void ServiceWorkerStorage::StoreRegistration( | 514 void ServiceWorkerStorage::StoreRegistration( |
| 518 ServiceWorkerRegistration* registration, | 515 ServiceWorkerRegistration* registration, |
| 519 ServiceWorkerVersion* version, | 516 ServiceWorkerVersion* version, |
| 520 const StatusCallback& callback) { | 517 const StatusCallback& callback) { |
| 521 DCHECK(registration); | 518 DCHECK(registration); |
| 522 DCHECK(version); | 519 DCHECK(version); |
| 523 | 520 |
| 524 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; | 521 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; |
| (...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1093 void ServiceWorkerStorage::ReturnFoundRegistration( | 1090 void ServiceWorkerStorage::ReturnFoundRegistration( |
| 1094 const FindRegistrationCallback& callback, | 1091 const FindRegistrationCallback& callback, |
| 1095 const ServiceWorkerDatabase::RegistrationData& data, | 1092 const ServiceWorkerDatabase::RegistrationData& data, |
| 1096 const ResourceList& resources) { | 1093 const ResourceList& resources) { |
| 1097 scoped_refptr<ServiceWorkerRegistration> registration = | 1094 scoped_refptr<ServiceWorkerRegistration> registration = |
| 1098 GetOrCreateRegistration(data, resources); | 1095 GetOrCreateRegistration(data, resources); |
| 1099 CompleteFindNow(registration, SERVICE_WORKER_OK, callback); | 1096 CompleteFindNow(registration, SERVICE_WORKER_OK, callback); |
| 1100 } | 1097 } |
| 1101 | 1098 |
| 1102 void ServiceWorkerStorage::DidGetRegistrations( | 1099 void ServiceWorkerStorage::DidGetRegistrations( |
| 1100 const GetRegistrationsCallback& callback, | |
| 1101 RegistrationList* registrations, | |
| 1102 ResourceListList* resource_lists, | |
| 1103 const GURL& origin_filter, | |
| 1104 ServiceWorkerDatabase::Status status) { | |
| 1105 DCHECK(registrations); | |
| 1106 DCHECK(resource_lists); | |
| 1107 | |
| 1108 if (status != ServiceWorkerDatabase::STATUS_OK && | |
| 1109 status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { | |
| 1110 ScheduleDeleteAndStartOver(); | |
| 1111 callback.Run(std::vector<ServiceWorkerRegistration*>()); | |
| 1112 return; | |
| 1113 } | |
| 1114 | |
| 1115 // Add all stored registrations. | |
| 1116 std::set<int64> pushed_registrations; | |
| 1117 std::vector<ServiceWorkerRegistration*> regs; | |
|
falken
2015/06/05 02:58:22
I think some naming tweaks are in order here, it's
jungkees
2015/06/05 06:58:07
The proposed names look clear. Just renamed them a
| |
| 1118 size_t index = 0; | |
| 1119 for (auto it = (*registrations).begin(); it != (*registrations).end(); | |
| 1120 ++it, ++index) { | |
| 1121 const bool inserted = | |
| 1122 pushed_registrations.insert((*it).registration_id).second; | |
| 1123 DCHECK(inserted); | |
| 1124 | |
| 1125 scoped_refptr<ServiceWorkerRegistration> registration = | |
| 1126 GetOrCreateRegistration(*it, (*resource_lists)[index]); | |
| 1127 if (registration.get()) { | |
| 1128 regs.push_back(registration.get()); | |
| 1129 } | |
| 1130 } | |
| 1131 | |
| 1132 // Add unstored registrations that are being installed. | |
| 1133 for (RegistrationRefsById::const_iterator it = | |
| 1134 installing_registrations_.begin(); | |
| 1135 it != installing_registrations_.end(); ++it) { | |
| 1136 if ((!origin_filter.is_valid() || | |
| 1137 it->second->pattern().GetOrigin() == origin_filter) && | |
| 1138 pushed_registrations.insert(it->first).second) { | |
| 1139 regs.push_back((it->second).get()); | |
| 1140 } | |
| 1141 } | |
| 1142 | |
| 1143 callback.Run(regs); | |
| 1144 } | |
| 1145 | |
| 1146 void ServiceWorkerStorage::DidGetRegistrationsInfos( | |
| 1103 const GetRegistrationsInfosCallback& callback, | 1147 const GetRegistrationsInfosCallback& callback, |
| 1104 RegistrationList* registrations, | 1148 RegistrationList* registrations, |
| 1105 const GURL& origin_filter, | 1149 const GURL& origin_filter, |
| 1106 ServiceWorkerDatabase::Status status) { | 1150 ServiceWorkerDatabase::Status status) { |
| 1107 DCHECK(registrations); | 1151 DCHECK(registrations); |
| 1108 if (status != ServiceWorkerDatabase::STATUS_OK && | 1152 if (status != ServiceWorkerDatabase::STATUS_OK && |
| 1109 status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { | 1153 status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { |
| 1110 ScheduleDeleteAndStartOver(); | 1154 ScheduleDeleteAndStartOver(); |
| 1111 callback.Run(std::vector<ServiceWorkerRegistrationInfo>()); | 1155 callback.Run(std::vector<ServiceWorkerRegistrationInfo>()); |
| 1112 return; | 1156 return; |
| (...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1563 if (status != ServiceWorkerDatabase::STATUS_OK) { | 1607 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 1564 original_task_runner->PostTask( | 1608 original_task_runner->PostTask( |
| 1565 FROM_HERE, | 1609 FROM_HERE, |
| 1566 base::Bind( | 1610 base::Bind( |
| 1567 callback, false, deleted_version, std::vector<int64>(), status)); | 1611 callback, false, deleted_version, std::vector<int64>(), status)); |
| 1568 return; | 1612 return; |
| 1569 } | 1613 } |
| 1570 | 1614 |
| 1571 // TODO(nhiroki): Add convenient method to ServiceWorkerDatabase to check the | 1615 // TODO(nhiroki): Add convenient method to ServiceWorkerDatabase to check the |
| 1572 // unique origin list. | 1616 // unique origin list. |
| 1573 std::vector<ServiceWorkerDatabase::RegistrationData> registrations; | 1617 RegistrationList registrations; |
| 1574 status = database->GetRegistrationsForOrigin(origin, ®istrations); | 1618 std::vector<ResourceList> resource_lists; |
| 1619 status = database->GetRegistrationsForOrigin(origin, ®istrations, | |
| 1620 &resource_lists); | |
|
falken
2015/06/05 02:58:22
if resource_lists is not used, does it make sense
jungkees
2015/06/05 06:58:06
Yes, that's a better way. I'd mulled it over when
| |
| 1575 if (status != ServiceWorkerDatabase::STATUS_OK) { | 1621 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 1576 original_task_runner->PostTask( | 1622 original_task_runner->PostTask( |
| 1577 FROM_HERE, | 1623 FROM_HERE, |
| 1578 base::Bind( | 1624 base::Bind( |
| 1579 callback, false, deleted_version, std::vector<int64>(), status)); | 1625 callback, false, deleted_version, std::vector<int64>(), status)); |
| 1580 return; | 1626 return; |
| 1581 } | 1627 } |
| 1582 | 1628 |
| 1583 bool deletable = registrations.empty(); | 1629 bool deletable = registrations.empty(); |
| 1584 original_task_runner->PostTask(FROM_HERE, | 1630 original_task_runner->PostTask(FROM_HERE, |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 1608 status)); | 1654 status)); |
| 1609 } | 1655 } |
| 1610 | 1656 |
| 1611 void ServiceWorkerStorage::FindForDocumentInDB( | 1657 void ServiceWorkerStorage::FindForDocumentInDB( |
| 1612 ServiceWorkerDatabase* database, | 1658 ServiceWorkerDatabase* database, |
| 1613 scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 1659 scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
| 1614 const GURL& document_url, | 1660 const GURL& document_url, |
| 1615 const FindInDBCallback& callback) { | 1661 const FindInDBCallback& callback) { |
| 1616 GURL origin = document_url.GetOrigin(); | 1662 GURL origin = document_url.GetOrigin(); |
| 1617 RegistrationList registrations; | 1663 RegistrationList registrations; |
| 1618 ServiceWorkerDatabase::Status status = | 1664 std::vector<ResourceList> resource_lists; |
| 1619 database->GetRegistrationsForOrigin(origin, ®istrations); | 1665 ServiceWorkerDatabase::Status status = database->GetRegistrationsForOrigin( |
| 1666 origin, ®istrations, &resource_lists); | |
| 1620 if (status != ServiceWorkerDatabase::STATUS_OK) { | 1667 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 1621 original_task_runner->PostTask( | 1668 original_task_runner->PostTask( |
| 1622 FROM_HERE, | 1669 FROM_HERE, |
| 1623 base::Bind(callback, | 1670 base::Bind(callback, |
| 1624 ServiceWorkerDatabase::RegistrationData(), | 1671 ServiceWorkerDatabase::RegistrationData(), |
| 1625 ResourceList(), | 1672 ResourceList(), |
| 1626 status)); | 1673 status)); |
| 1627 return; | 1674 return; |
| 1628 } | 1675 } |
| 1629 | 1676 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 1646 FROM_HERE, | 1693 FROM_HERE, |
| 1647 base::Bind(callback, data, resources, status)); | 1694 base::Bind(callback, data, resources, status)); |
| 1648 } | 1695 } |
| 1649 | 1696 |
| 1650 void ServiceWorkerStorage::FindForPatternInDB( | 1697 void ServiceWorkerStorage::FindForPatternInDB( |
| 1651 ServiceWorkerDatabase* database, | 1698 ServiceWorkerDatabase* database, |
| 1652 scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 1699 scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
| 1653 const GURL& scope, | 1700 const GURL& scope, |
| 1654 const FindInDBCallback& callback) { | 1701 const FindInDBCallback& callback) { |
| 1655 GURL origin = scope.GetOrigin(); | 1702 GURL origin = scope.GetOrigin(); |
| 1656 std::vector<ServiceWorkerDatabase::RegistrationData> registrations; | 1703 RegistrationList registrations; |
| 1657 ServiceWorkerDatabase::Status status = | 1704 std::vector<ResourceList> resource_lists; |
| 1658 database->GetRegistrationsForOrigin(origin, ®istrations); | 1705 ServiceWorkerDatabase::Status status = database->GetRegistrationsForOrigin( |
| 1706 origin, ®istrations, &resource_lists); | |
|
falken
2015/06/05 02:58:22
same with all these
| |
| 1659 if (status != ServiceWorkerDatabase::STATUS_OK) { | 1707 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 1660 original_task_runner->PostTask( | 1708 original_task_runner->PostTask( |
| 1661 FROM_HERE, | 1709 FROM_HERE, |
| 1662 base::Bind(callback, | 1710 base::Bind(callback, |
| 1663 ServiceWorkerDatabase::RegistrationData(), | 1711 ServiceWorkerDatabase::RegistrationData(), |
| 1664 ResourceList(), | 1712 ResourceList(), |
| 1665 status)); | 1713 status)); |
| 1666 return; | 1714 return; |
| 1667 } | 1715 } |
| 1668 | 1716 |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1807 callback.Run(SERVICE_WORKER_ERROR_FAILED); | 1855 callback.Run(SERVICE_WORKER_ERROR_FAILED); |
| 1808 return; | 1856 return; |
| 1809 } | 1857 } |
| 1810 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; | 1858 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; |
| 1811 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( | 1859 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( |
| 1812 ServiceWorkerMetrics::DELETE_OK); | 1860 ServiceWorkerMetrics::DELETE_OK); |
| 1813 callback.Run(SERVICE_WORKER_OK); | 1861 callback.Run(SERVICE_WORKER_OK); |
| 1814 } | 1862 } |
| 1815 | 1863 |
| 1816 } // namespace content | 1864 } // namespace content |
| OLD | NEW |