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, ®istrations); |
+ status = database->GetRegistrationsForOrigin(origin, ®istrations); |
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) { |