| 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 d013065fcba3b6678adbe19d4fa81151e8478e84..942214179893fa855970349282cb0b5b8b7d8ac9 100644
|
| --- a/content/browser/service_worker/service_worker_storage.cc
|
| +++ b/content/browser/service_worker/service_worker_storage.cc
|
| @@ -27,7 +27,7 @@ namespace {
|
|
|
| typedef base::Callback<void(
|
| ServiceWorkerStorage::InitialData* data,
|
| - bool success)> InitializeCallback;
|
| + ServiceWorkerStatusCode status)> InitializeCallback;
|
| typedef base::Callback<void(
|
| const ServiceWorkerDatabase::RegistrationData& data,
|
| const std::vector<ServiceWorkerDatabase::ResourceRecord>& resources,
|
| @@ -70,15 +70,22 @@ void ReadInitialDataFromDB(
|
| scoped_refptr<base::SequencedTaskRunner> original_task_runner,
|
| const InitializeCallback& callback) {
|
| DCHECK(database);
|
| - ServiceWorkerStorage::InitialData* data =
|
| - new ServiceWorkerStorage::InitialData();
|
| - bool success =
|
| + scoped_ptr<ServiceWorkerStorage::InitialData> data(
|
| + new ServiceWorkerStorage::InitialData());
|
| +
|
| + ServiceWorkerStatusCode status =
|
| database->GetNextAvailableIds(&data->next_registration_id,
|
| &data->next_version_id,
|
| - &data->next_resource_id) &&
|
| - database->GetOriginsWithRegistrations(&data->origins);
|
| + &data->next_resource_id);
|
| + if (status != SERVICE_WORKER_OK) {
|
| + original_task_runner->PostTask(
|
| + FROM_HERE, base::Bind(callback, base::Owned(data.release()), status));
|
| + return;
|
| + }
|
| +
|
| + status = database->GetOriginsWithRegistrations(&data->origins);
|
| original_task_runner->PostTask(
|
| - FROM_HERE, base::Bind(callback, base::Owned(data), success));
|
| + FROM_HERE, base::Bind(callback, base::Owned(data.release()), status));
|
| }
|
|
|
| void ReadRegistrationFromDB(
|
| @@ -492,18 +499,21 @@ bool ServiceWorkerStorage::LazyInitialize(const base::Closure& callback) {
|
|
|
| void ServiceWorkerStorage::DidReadInitialData(
|
| InitialData* data,
|
| - bool success) {
|
| + ServiceWorkerStatusCode status) {
|
| DCHECK(data);
|
| DCHECK_EQ(INITIALIZING, state_);
|
|
|
| - if (success) {
|
| + if (status == SERVICE_WORKER_OK) {
|
| next_registration_id_ = data->next_registration_id;
|
| next_version_id_ = data->next_version_id;
|
| next_resource_id_ = data->next_resource_id;
|
| registered_origins_.swap(data->origins);
|
| state_ = INITIALIZED;
|
| } else {
|
| - DLOG(WARNING) << "Failed to initialize.";
|
| + // TODO(nhiroki): If status==SERVICE_WORKER_ERROR_DB_CORRUPTED, do
|
| + // corruption recovery (http://crbug.com/371675).
|
| + DLOG(WARNING) << "Failed to initialize: "
|
| + << ServiceWorkerStatusToString(status);
|
| state_ = DISABLED;
|
| }
|
|
|
|
|