| 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) {
|
|
|