| Index: content/browser/service_worker/service_worker_database.cc
|
| diff --git a/content/browser/service_worker/service_worker_database.cc b/content/browser/service_worker/service_worker_database.cc
|
| index 37558b2b3d1fa8951934aa9aea8d4d43a0427387..db8f735d792b7bb88360678fcf1d7780c8931ed8 100644
|
| --- a/content/browser/service_worker/service_worker_database.cc
|
| +++ b/content/browser/service_worker/service_worker_database.cc
|
| @@ -211,6 +211,18 @@ bool ParseResourceRecord(const std::string& serialized,
|
| return true;
|
| }
|
|
|
| +ServiceWorkerStatusCode LevelDBStatusToServiceWorkerStatusCode(
|
| + const leveldb::Status& status) {
|
| + if (status.ok())
|
| + return SERVICE_WORKER_OK;
|
| + else if (status.IsNotFound())
|
| + return SERVICE_WORKER_ERROR_NOT_FOUND;
|
| + else if (status.IsCorruption())
|
| + return SERVICE_WORKER_ERROR_DB_CORRUPTED;
|
| + else
|
| + return SERVICE_WORKER_ERROR_FAILED;
|
| +}
|
| +
|
| } // namespace
|
|
|
| ServiceWorkerDatabase::RegistrationData::RegistrationData()
|
| @@ -239,7 +251,7 @@ ServiceWorkerDatabase::~ServiceWorkerDatabase() {
|
| db_.reset();
|
| }
|
|
|
| -bool ServiceWorkerDatabase::GetNextAvailableIds(
|
| +ServiceWorkerStatusCode ServiceWorkerDatabase::GetNextAvailableIds(
|
| int64* next_avail_registration_id,
|
| int64* next_avail_version_id,
|
| int64* next_avail_resource_id) {
|
| @@ -250,37 +262,42 @@ bool ServiceWorkerDatabase::GetNextAvailableIds(
|
|
|
| if (!LazyOpen(false)) {
|
| if (is_disabled_)
|
| - return false;
|
| + return SERVICE_WORKER_ERROR_FAILED;
|
| // Database has never been used.
|
| *next_avail_registration_id = 0;
|
| *next_avail_version_id = 0;
|
| *next_avail_resource_id = 0;
|
| - return true;
|
| + return SERVICE_WORKER_OK;
|
| }
|
|
|
| - if (!ReadNextAvailableId(kNextRegIdKey, &next_avail_registration_id_) ||
|
| - !ReadNextAvailableId(kNextVerIdKey, &next_avail_version_id_) ||
|
| - !ReadNextAvailableId(kNextResIdKey, &next_avail_resource_id_)) {
|
| - return false;
|
| - }
|
| + ServiceWorkerStatusCode status =
|
| + ReadNextAvailableId(kNextRegIdKey, &next_avail_registration_id_);
|
| + if (status != SERVICE_WORKER_OK)
|
| + return status;
|
| + status = ReadNextAvailableId(kNextVerIdKey, &next_avail_version_id_);
|
| + if (status != SERVICE_WORKER_OK)
|
| + return status;
|
| + status = ReadNextAvailableId(kNextResIdKey, &next_avail_resource_id_);
|
| + if (status != SERVICE_WORKER_OK)
|
| + return status;
|
|
|
| *next_avail_registration_id = next_avail_registration_id_;
|
| *next_avail_version_id = next_avail_version_id_;
|
| *next_avail_resource_id = next_avail_resource_id_;
|
| - return true;
|
| + return SERVICE_WORKER_OK;
|
| }
|
|
|
| -bool ServiceWorkerDatabase::GetOriginsWithRegistrations(
|
| +ServiceWorkerStatusCode ServiceWorkerDatabase::GetOriginsWithRegistrations(
|
| std::set<GURL>* origins) {
|
| DCHECK(sequence_checker_.CalledOnValidSequencedThread());
|
| DCHECK(origins);
|
|
|
| if (!LazyOpen(false)) {
|
| if (is_disabled_)
|
| - return false;
|
| + return SERVICE_WORKER_ERROR_FAILED;
|
| // Database has never been used.
|
| origins->clear();
|
| - return true;
|
| + return SERVICE_WORKER_OK;
|
| }
|
|
|
| scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| @@ -288,7 +305,7 @@ bool ServiceWorkerDatabase::GetOriginsWithRegistrations(
|
| if (!itr->status().ok()) {
|
| HandleError(FROM_HERE, itr->status());
|
| origins->clear();
|
| - return false;
|
| + return LevelDBStatusToServiceWorkerStatusCode(itr->status());
|
| }
|
|
|
| std::string origin;
|
| @@ -296,7 +313,7 @@ bool ServiceWorkerDatabase::GetOriginsWithRegistrations(
|
| break;
|
| origins->insert(GURL(origin));
|
| }
|
| - return true;
|
| + return SERVICE_WORKER_OK;
|
| }
|
|
|
| bool ServiceWorkerDatabase::GetRegistrationsForOrigin(
|
| @@ -624,8 +641,9 @@ bool ServiceWorkerDatabase::LazyOpen(bool create_if_needed) {
|
| return true;
|
| }
|
|
|
| -bool ServiceWorkerDatabase::ReadNextAvailableId(
|
| - const char* id_key, int64* next_avail_id) {
|
| +ServiceWorkerStatusCode ServiceWorkerDatabase::ReadNextAvailableId(
|
| + const char* id_key,
|
| + int64* next_avail_id) {
|
| DCHECK(id_key);
|
| DCHECK(next_avail_id);
|
|
|
| @@ -634,22 +652,22 @@ bool ServiceWorkerDatabase::ReadNextAvailableId(
|
| if (status.IsNotFound()) {
|
| // Nobody has gotten the next resource id for |id_key|.
|
| *next_avail_id = 0;
|
| - return true;
|
| + return SERVICE_WORKER_OK;
|
| }
|
|
|
| if (!status.ok()) {
|
| HandleError(FROM_HERE, status);
|
| - return false;
|
| + return LevelDBStatusToServiceWorkerStatusCode(status);
|
| }
|
|
|
| int64 parsed;
|
| if (!base::StringToInt64(value, &parsed)) {
|
| HandleError(FROM_HERE, leveldb::Status::Corruption("failed to parse"));
|
| - return false;
|
| + return SERVICE_WORKER_ERROR_DB_CORRUPTED;
|
| }
|
|
|
| *next_avail_id = parsed;
|
| - return true;
|
| + return SERVICE_WORKER_OK;
|
| }
|
|
|
| bool ServiceWorkerDatabase::ReadRegistrationData(
|
|
|