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

Unified Diff: content/browser/service_worker/service_worker_storage.cc

Issue 1146913004: Service Worker: Add ServiceWorkerContainer.getRegistrations() method. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make GetRegistrationsForOrigin() handle nullptr for resource param. 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_storage.cc
diff --git a/content/browser/service_worker/service_worker_storage.cc b/content/browser/service_worker/service_worker_storage.cc
index c8a11c39fb3e805332083e5430795a8724fa698e..06fb9aa93ba7e74e59913d7acab0e365a56eb8be 100644
--- a/content/browser/service_worker/service_worker_storage.cc
+++ b/content/browser/service_worker/service_worker_storage.cc
@@ -460,38 +460,38 @@ void ServiceWorkerStorage::FindRegistrationForIdOnly(
}
void ServiceWorkerStorage::GetRegistrationsForOrigin(
- const GURL& origin, const GetRegistrationsInfosCallback& callback) {
+ const GURL& origin,
+ const GetRegistrationsCallback& callback) {
if (!LazyInitialize(base::Bind(
&ServiceWorkerStorage::GetRegistrationsForOrigin,
weak_factory_.GetWeakPtr(), origin, callback))) {
if (state_ != INITIALIZING || !context_) {
- RunSoon(FROM_HERE, base::Bind(
- callback, std::vector<ServiceWorkerRegistrationInfo>()));
+ RunSoon(FROM_HERE,
+ base::Bind(callback, std::vector<ServiceWorkerRegistration*>()));
}
return;
}
DCHECK_EQ(INITIALIZED, state_);
RegistrationList* registrations = new RegistrationList;
+ std::vector<ResourceList>* resource_lists = new std::vector<ResourceList>;
PostTaskAndReplyWithResult(
- database_task_manager_->GetTaskRunner(),
- FROM_HERE,
+ database_task_manager_->GetTaskRunner(), FROM_HERE,
base::Bind(&ServiceWorkerDatabase::GetRegistrationsForOrigin,
- base::Unretained(database_.get()),
- origin,
- base::Unretained(registrations)),
+ base::Unretained(database_.get()), origin,
+ base::Unretained(registrations),
+ base::Unretained(resource_lists)),
base::Bind(&ServiceWorkerStorage::DidGetRegistrations,
- weak_factory_.GetWeakPtr(),
- callback,
- base::Owned(registrations),
+ weak_factory_.GetWeakPtr(), callback,
+ base::Owned(registrations), base::Owned(resource_lists),
origin));
}
-void ServiceWorkerStorage::GetAllRegistrations(
+void ServiceWorkerStorage::GetAllRegistrationsInfos(
const GetRegistrationsInfosCallback& callback) {
- if (!LazyInitialize(base::Bind(
- &ServiceWorkerStorage::GetAllRegistrations,
- weak_factory_.GetWeakPtr(), callback))) {
+ if (!LazyInitialize(
+ base::Bind(&ServiceWorkerStorage::GetAllRegistrationsInfos,
+ weak_factory_.GetWeakPtr(), callback))) {
if (state_ != INITIALIZING || !context_) {
RunSoon(FROM_HERE, base::Bind(
callback, std::vector<ServiceWorkerRegistrationInfo>()));
@@ -502,16 +502,13 @@ void ServiceWorkerStorage::GetAllRegistrations(
RegistrationList* registrations = new RegistrationList;
PostTaskAndReplyWithResult(
- database_task_manager_->GetTaskRunner(),
- FROM_HERE,
+ database_task_manager_->GetTaskRunner(), FROM_HERE,
base::Bind(&ServiceWorkerDatabase::GetAllRegistrations,
base::Unretained(database_.get()),
base::Unretained(registrations)),
- base::Bind(&ServiceWorkerStorage::DidGetRegistrations,
- weak_factory_.GetWeakPtr(),
- callback,
- base::Owned(registrations),
- GURL()));
+ base::Bind(&ServiceWorkerStorage::DidGetRegistrationsInfos,
+ weak_factory_.GetWeakPtr(), callback,
+ base::Owned(registrations), GURL()));
}
void ServiceWorkerStorage::StoreRegistration(
@@ -1100,6 +1097,52 @@ void ServiceWorkerStorage::ReturnFoundRegistration(
}
void ServiceWorkerStorage::DidGetRegistrations(
+ const GetRegistrationsCallback& callback,
+ RegistrationList* registration_data,
+ std::vector<ResourceList>* resource_lists,
+ const GURL& origin_filter,
+ ServiceWorkerDatabase::Status status) {
+ DCHECK(registration_data);
+ DCHECK(resource_lists);
+
+ if (status != ServiceWorkerDatabase::STATUS_OK &&
+ status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
+ ScheduleDeleteAndStartOver();
+ callback.Run(std::vector<ServiceWorkerRegistration*>());
+ return;
+ }
+
+ // Add all stored registrations.
+ std::set<int64> registration_ids;
+ std::vector<ServiceWorkerRegistration*> registrations;
michaeln 2015/06/05 21:50:41 This needs to be a vector of scoped_refptrs, other
jungkees 2015/06/06 13:55:12 I had to be more careful about this indeed. Addres
+ size_t index = 0;
+ for (auto it = (*registration_data).begin(); it != (*registration_data).end();
michaeln 2015/06/05 21:50:42 This loop probably could be easier to read and mat
jungkees 2015/06/06 13:55:12 Neat! Addressed. Thanks.
+ ++it, ++index) {
+ const bool inserted = registration_ids.insert((*it).registration_id).second;
+ DCHECK(inserted);
+
+ scoped_refptr<ServiceWorkerRegistration> registration =
+ GetOrCreateRegistration(*it, (*resource_lists)[index]);
+ if (registration.get()) {
michaeln 2015/06/05 21:50:42 no need for the null check, it's either gotten or
jungkees 2015/06/06 13:55:12 Right. This condition has been removed by replacin
+ registrations.push_back(registration.get());
+ }
+ }
+
+ // Add unstored registrations that are being installed.
+ for (RegistrationRefsById::const_iterator it =
+ installing_registrations_.begin();
+ it != installing_registrations_.end(); ++it) {
+ if ((!origin_filter.is_valid() ||
+ it->second->pattern().GetOrigin() == origin_filter) &&
+ registration_ids.insert(it->first).second) {
+ registrations.push_back((it->second).get());
+ }
+ }
+
+ callback.Run(registrations);
+}
+
+void ServiceWorkerStorage::DidGetRegistrationsInfos(
const GetRegistrationsInfosCallback& callback,
RegistrationList* registrations,
const GURL& origin_filter,
@@ -1570,8 +1613,8 @@ void ServiceWorkerStorage::DeleteRegistrationFromDB(
// TODO(nhiroki): Add convenient method to ServiceWorkerDatabase to check the
// unique origin list.
- std::vector<ServiceWorkerDatabase::RegistrationData> registrations;
- status = database->GetRegistrationsForOrigin(origin, &registrations);
+ RegistrationList registrations;
+ status = database->GetRegistrationsForOrigin(origin, &registrations, nullptr);
if (status != ServiceWorkerDatabase::STATUS_OK) {
original_task_runner->PostTask(
FROM_HERE,
@@ -1616,7 +1659,7 @@ void ServiceWorkerStorage::FindForDocumentInDB(
GURL origin = document_url.GetOrigin();
RegistrationList registrations;
ServiceWorkerDatabase::Status status =
- database->GetRegistrationsForOrigin(origin, &registrations);
+ database->GetRegistrationsForOrigin(origin, &registrations, nullptr);
if (status != ServiceWorkerDatabase::STATUS_OK) {
original_task_runner->PostTask(
FROM_HERE,
@@ -1653,9 +1696,9 @@ void ServiceWorkerStorage::FindForPatternInDB(
const GURL& scope,
const FindInDBCallback& callback) {
GURL origin = scope.GetOrigin();
- std::vector<ServiceWorkerDatabase::RegistrationData> registrations;
+ RegistrationList registrations;
ServiceWorkerDatabase::Status status =
- database->GetRegistrationsForOrigin(origin, &registrations);
+ database->GetRegistrationsForOrigin(origin, &registrations, nullptr);
if (status != ServiceWorkerDatabase::STATUS_OK) {
original_task_runner->PostTask(
FROM_HERE,

Powered by Google App Engine
This is Rietveld 408576698