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

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

Issue 284123003: ServiceWorker: DB functions should return status code instead of boolean (3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 efcdea4c22085a41ef5ef3b947486c356580d6df..929a3a9612005e92bdaff4296e2163424ac23e5a 100644
--- a/content/browser/service_worker/service_worker_storage.cc
+++ b/content/browser/service_worker/service_worker_storage.cc
@@ -88,27 +88,6 @@ void ReadInitialDataFromDB(
FROM_HERE, base::Bind(callback, base::Owned(data.release()), status));
}
-void ReadRegistrationFromDB(
- ServiceWorkerDatabase* database,
- scoped_refptr<base::SequencedTaskRunner> original_task_runner,
- int64 registration_id,
- const GURL& origin,
- const ReadRegistrationCallback& callback) {
- DCHECK(database);
- ServiceWorkerDatabase::RegistrationData data;
- std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
-
- // TODO(nhiroki): The database should return more detailed status like
- // ServiceWorkerStatusCode instead of bool value.
- ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
- if (!database->ReadRegistration(registration_id, origin, &data, &resources)) {
- status = database->is_disabled() ? SERVICE_WORKER_ERROR_FAILED
- : SERVICE_WORKER_ERROR_NOT_FOUND;
- }
- original_task_runner->PostTask(
- FROM_HERE, base::Bind(callback, data, resources, status));
-}
-
void DeleteRegistrationFromDB(
ServiceWorkerDatabase* database,
scoped_refptr<base::SequencedTaskRunner> original_task_runner,
@@ -116,7 +95,9 @@ void DeleteRegistrationFromDB(
const GURL& origin,
const DeleteRegistrationCallback& callback) {
DCHECK(database);
- if (!database->DeleteRegistration(registration_id, origin)) {
+ ServiceWorkerStatusCode status =
+ database->DeleteRegistration(registration_id, origin);
+ if (status != SERVICE_WORKER_OK) {
original_task_runner->PostTask(
FROM_HERE, base::Bind(callback, false, SERVICE_WORKER_ERROR_FAILED));
return;
@@ -125,8 +106,7 @@ void DeleteRegistrationFromDB(
// TODO(nhiroki): Add convenient method to ServiceWorkerDatabase to check the
// unique origin list.
std::vector<ServiceWorkerDatabase::RegistrationData> registrations;
- ServiceWorkerStatusCode status =
- database->GetRegistrationsForOrigin(origin, &registrations);
+ status = database->GetRegistrationsForOrigin(origin, &registrations);
if (status != SERVICE_WORKER_OK) {
original_task_runner->PostTask(
FROM_HERE, base::Bind(callback, false, status));
@@ -138,24 +118,6 @@ void DeleteRegistrationFromDB(
FROM_HERE, base::Bind(callback, deletable, SERVICE_WORKER_OK));
}
-void UpdateToActiveStateInDB(
- ServiceWorkerDatabase* database,
- scoped_refptr<base::SequencedTaskRunner> original_task_runner,
- int64 registration_id,
- const GURL& origin,
- const ServiceWorkerStorage::StatusCallback& callback) {
- DCHECK(database);
-
- // TODO(nhiroki): The database should return more detailed status like
- // ServiceWorkerStatusCode instead of bool value.
- ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
- if (!database->UpdateVersionToActive(registration_id, origin)) {
- status = database->is_disabled() ? SERVICE_WORKER_ERROR_FAILED
- : SERVICE_WORKER_ERROR_NOT_FOUND;
- }
- original_task_runner->PostTask(FROM_HERE, base::Bind(callback, status));
-}
-
} // namespace
ServiceWorkerStorage::InitialData::InitialData()
@@ -312,14 +274,20 @@ void ServiceWorkerStorage::FindRegistrationForId(
return;
}
- database_task_runner_->PostTask(
+ ServiceWorkerDatabase::RegistrationData* data =
+ new ServiceWorkerDatabase::RegistrationData;
+ ResourceList* resources = new ResourceList;
+ PostTaskAndReplyWithResult(
+ database_task_runner_,
FROM_HERE,
- base::Bind(&ReadRegistrationFromDB,
- database_.get(),
- base::MessageLoopProxy::current(),
+ base::Bind(&ServiceWorkerDatabase::ReadRegistration,
+ base::Unretained(database_.get()),
registration_id, origin,
- base::Bind(&ServiceWorkerStorage::DidReadRegistrationForId,
- weak_factory_.GetWeakPtr(), callback)));
+ base::Unretained(data),
+ base::Unretained(resources)),
+ base::Bind(&ServiceWorkerStorage::DidReadRegistrationForId,
+ weak_factory_.GetWeakPtr(),
+ callback, base::Owned(data), base::Owned(resources)));
}
void ServiceWorkerStorage::GetAllRegistrations(
@@ -393,13 +361,15 @@ void ServiceWorkerStorage::UpdateToActiveState(
return;
}
- database_task_runner_->PostTask(
+ PostTaskAndReplyWithResult(
+ database_task_runner_,
FROM_HERE,
- base::Bind(&UpdateToActiveStateInDB,
- database_.get(),
- base::MessageLoopProxy::current(),
+ base::Bind(&ServiceWorkerDatabase::UpdateVersionToActive,
+ base::Unretained(database_.get()),
registration->id(),
- registration->script_url().GetOrigin(),
+ registration->script_url().GetOrigin()),
+ base::Bind(&ServiceWorkerStorage::DidDatabaseOperation,
+ weak_factory_.GetWeakPtr(),
callback));
}
@@ -610,18 +580,20 @@ void ServiceWorkerStorage::DidGetRegistrationsForDocument(
void ServiceWorkerStorage::DidReadRegistrationForId(
const FindRegistrationCallback& callback,
- const ServiceWorkerDatabase::RegistrationData& registration,
- const ResourceList& resources,
+ ServiceWorkerDatabase::RegistrationData* registration,
+ ResourceList* resources,
ServiceWorkerStatusCode status) {
+ DCHECK(registration);
+ DCHECK(resources);
if (status == SERVICE_WORKER_OK) {
- callback.Run(status, CreateRegistration(registration));
+ callback.Run(status, CreateRegistration(*registration));
return;
}
if (status == SERVICE_WORKER_ERROR_NOT_FOUND) {
// Look for somthing currently being installed.
scoped_refptr<ServiceWorkerRegistration> installing_registration =
- FindInstallingRegistrationForId(registration.registration_id);
+ FindInstallingRegistrationForId(registration->registration_id);
if (installing_registration) {
callback.Run(SERVICE_WORKER_OK, installing_registration);
return;
@@ -631,6 +603,7 @@ void ServiceWorkerStorage::DidReadRegistrationForId(
return;
}
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
callback.Run(status, scoped_refptr<ServiceWorkerRegistration>());
return;
}
@@ -684,13 +657,14 @@ void ServiceWorkerStorage::DidGetAllRegistrations(
void ServiceWorkerStorage::DidStoreRegistration(
const GURL& origin,
const StatusCallback& callback,
- bool success) {
- if (!success) {
+ ServiceWorkerStatusCode status) {
+ if (status != SERVICE_WORKER_OK) {
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
callback.Run(SERVICE_WORKER_ERROR_FAILED);
return;
}
registered_origins_.insert(origin);
- callback.Run(SERVICE_WORKER_OK);
+ callback.Run(status);
}
void ServiceWorkerStorage::DidDeleteRegistration(
@@ -698,11 +672,27 @@ void ServiceWorkerStorage::DidDeleteRegistration(
const StatusCallback& callback,
bool origin_is_deletable,
ServiceWorkerStatusCode status) {
+ if (status != SERVICE_WORKER_OK) {
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
+ callback.Run(SERVICE_WORKER_ERROR_FAILED);
+ return;
+ }
if (origin_is_deletable)
registered_origins_.erase(origin);
callback.Run(status);
}
+void ServiceWorkerStorage::DidDatabaseOperation(
+ const StatusCallback& callback,
+ ServiceWorkerStatusCode status) {
+ if (status != SERVICE_WORKER_OK && status != SERVICE_WORKER_ERROR_NOT_FOUND) {
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
+ callback.Run(SERVICE_WORKER_ERROR_FAILED);
+ return;
+ }
+ callback.Run(status);
+}
+
scoped_refptr<ServiceWorkerRegistration>
ServiceWorkerStorage::CreateRegistration(
const ServiceWorkerDatabase::RegistrationData& data) {

Powered by Google App Engine
This is Rietveld 408576698