| 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 83f4325df541354dd4efbf30d356c8f4b04d5098..c4c3a8b952bb88d0a631fb9c470487d26651a35e 100644
|
| --- a/content/browser/service_worker/service_worker_database.cc
|
| +++ b/content/browser/service_worker/service_worker_database.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "content/browser/service_worker/service_worker_database.h"
|
|
|
| +#include <utility>
|
| +
|
| #include "base/files/file_util.h"
|
| #include "base/lazy_instance.h"
|
| #include "base/location.h"
|
| @@ -344,28 +346,28 @@ ServiceWorkerDatabase::GetOriginsWithRegistrations(std::set<GURL>* origins) {
|
| if (status != STATUS_OK)
|
| return status;
|
|
|
| - scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| - for (itr->Seek(kUniqueOriginKey); itr->Valid(); itr->Next()) {
|
| - status = LevelDBStatusToStatus(itr->status());
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - origins->clear();
|
| - return status;
|
| - }
|
| + {
|
| + scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| + for (itr->Seek(kUniqueOriginKey); itr->Valid(); itr->Next()) {
|
| + status = LevelDBStatusToStatus(itr->status());
|
| + if (status != STATUS_OK) {
|
| + origins->clear();
|
| + break;
|
| + }
|
|
|
| - std::string origin_str;
|
| - if (!RemovePrefix(itr->key().ToString(), kUniqueOriginKey, &origin_str))
|
| - break;
|
| + std::string origin_str;
|
| + if (!RemovePrefix(itr->key().ToString(), kUniqueOriginKey, &origin_str))
|
| + break;
|
|
|
| - GURL origin(origin_str);
|
| - if (!origin.is_valid()) {
|
| - status = STATUS_ERROR_CORRUPTED;
|
| - HandleReadResult(FROM_HERE, status);
|
| - origins->clear();
|
| - return status;
|
| - }
|
| + GURL origin(origin_str);
|
| + if (!origin.is_valid()) {
|
| + status = STATUS_ERROR_CORRUPTED;
|
| + origins->clear();
|
| + break;
|
| + }
|
|
|
| - origins->insert(origin);
|
| + origins->insert(origin);
|
| + }
|
| }
|
|
|
| HandleReadResult(FROM_HERE, status);
|
| @@ -384,29 +386,29 @@ ServiceWorkerDatabase::GetOriginsWithForeignFetchRegistrations(
|
| if (status != STATUS_OK)
|
| return status;
|
|
|
| - scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| - for (itr->Seek(kForeignFetchOriginKey); itr->Valid(); itr->Next()) {
|
| - status = LevelDBStatusToStatus(itr->status());
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - origins->clear();
|
| - return status;
|
| - }
|
| + {
|
| + scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| + for (itr->Seek(kForeignFetchOriginKey); itr->Valid(); itr->Next()) {
|
| + status = LevelDBStatusToStatus(itr->status());
|
| + if (status != STATUS_OK) {
|
| + origins->clear();
|
| + break;
|
| + }
|
|
|
| - std::string origin_str;
|
| - if (!RemovePrefix(itr->key().ToString(), kForeignFetchOriginKey,
|
| - &origin_str))
|
| - break;
|
| + std::string origin_str;
|
| + if (!RemovePrefix(itr->key().ToString(), kForeignFetchOriginKey,
|
| + &origin_str))
|
| + break;
|
|
|
| - GURL origin(origin_str);
|
| - if (!origin.is_valid()) {
|
| - status = STATUS_ERROR_CORRUPTED;
|
| - HandleReadResult(FROM_HERE, status);
|
| - origins->clear();
|
| - return status;
|
| - }
|
| + GURL origin(origin_str);
|
| + if (!origin.is_valid()) {
|
| + status = STATUS_ERROR_CORRUPTED;
|
| + origins->clear();
|
| + break;
|
| + }
|
|
|
| - origins->insert(origin);
|
| + origins->insert(origin);
|
| + }
|
| }
|
|
|
| HandleReadResult(FROM_HERE, status);
|
| @@ -427,41 +429,40 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::GetRegistrationsForOrigin(
|
| return status;
|
|
|
| std::string prefix = CreateRegistrationKeyPrefix(origin);
|
| - scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| - for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
|
| - status = LevelDBStatusToStatus(itr->status());
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - registrations->clear();
|
| - if (opt_resources_list)
|
| - opt_resources_list->clear();
|
| - return status;
|
| - }
|
| -
|
| - if (!RemovePrefix(itr->key().ToString(), prefix, NULL))
|
| - break;
|
| + {
|
| + scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| + for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
|
| + status = LevelDBStatusToStatus(itr->status());
|
| + if (status != STATUS_OK) {
|
| + registrations->clear();
|
| + if (opt_resources_list)
|
| + opt_resources_list->clear();
|
| + break;
|
| + }
|
|
|
| - RegistrationData registration;
|
| - status = ParseRegistrationData(itr->value().ToString(), ®istration);
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - registrations->clear();
|
| - if (opt_resources_list)
|
| - opt_resources_list->clear();
|
| - return status;
|
| - }
|
| - registrations->push_back(registration);
|
| + if (!RemovePrefix(itr->key().ToString(), prefix, NULL))
|
| + break;
|
|
|
| - if (opt_resources_list) {
|
| - std::vector<ResourceRecord> resources;
|
| - status = ReadResourceRecords(registration.version_id, &resources);
|
| + RegistrationData registration;
|
| + status = ParseRegistrationData(itr->value().ToString(), ®istration);
|
| if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| registrations->clear();
|
| - opt_resources_list->clear();
|
| - return status;
|
| + if (opt_resources_list)
|
| + opt_resources_list->clear();
|
| + break;
|
| + }
|
| + registrations->push_back(registration);
|
| +
|
| + if (opt_resources_list) {
|
| + std::vector<ResourceRecord> resources;
|
| + status = ReadResourceRecords(registration.version_id, &resources);
|
| + if (status != STATUS_OK) {
|
| + registrations->clear();
|
| + opt_resources_list->clear();
|
| + break;
|
| + }
|
| + opt_resources_list->push_back(resources);
|
| }
|
| - opt_resources_list->push_back(resources);
|
| }
|
| }
|
|
|
| @@ -480,26 +481,26 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::GetAllRegistrations(
|
| if (status != STATUS_OK)
|
| return status;
|
|
|
| - scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| - for (itr->Seek(kRegKeyPrefix); itr->Valid(); itr->Next()) {
|
| - status = LevelDBStatusToStatus(itr->status());
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - registrations->clear();
|
| - return status;
|
| - }
|
| + {
|
| + scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| + for (itr->Seek(kRegKeyPrefix); itr->Valid(); itr->Next()) {
|
| + status = LevelDBStatusToStatus(itr->status());
|
| + if (status != STATUS_OK) {
|
| + registrations->clear();
|
| + break;
|
| + }
|
|
|
| - if (!RemovePrefix(itr->key().ToString(), kRegKeyPrefix, NULL))
|
| - break;
|
| + if (!RemovePrefix(itr->key().ToString(), kRegKeyPrefix, NULL))
|
| + break;
|
|
|
| - RegistrationData registration;
|
| - status = ParseRegistrationData(itr->value().ToString(), ®istration);
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - registrations->clear();
|
| - return status;
|
| + RegistrationData registration;
|
| + status = ParseRegistrationData(itr->value().ToString(), ®istration);
|
| + if (status != STATUS_OK) {
|
| + registrations->clear();
|
| + break;
|
| + }
|
| + registrations->push_back(registration);
|
| }
|
| - registrations->push_back(registration);
|
| }
|
|
|
| HandleReadResult(FROM_HERE, status);
|
| @@ -875,39 +876,38 @@ ServiceWorkerDatabase::ReadUserDataForAllRegistrations(
|
| return status;
|
|
|
| std::string key_prefix = CreateHasUserDataKeyPrefix(user_data_name);
|
| - scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| - for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) {
|
| - status = LevelDBStatusToStatus(itr->status());
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - user_data->clear();
|
| - return status;
|
| - }
|
| + {
|
| + scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| + for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) {
|
| + status = LevelDBStatusToStatus(itr->status());
|
| + if (status != STATUS_OK) {
|
| + user_data->clear();
|
| + break;
|
| + }
|
|
|
| - std::string registration_id_string;
|
| - if (!RemovePrefix(itr->key().ToString(), key_prefix,
|
| - ®istration_id_string)) {
|
| - break;
|
| - }
|
| + std::string registration_id_string;
|
| + if (!RemovePrefix(itr->key().ToString(), key_prefix,
|
| + ®istration_id_string)) {
|
| + break;
|
| + }
|
|
|
| - int64_t registration_id;
|
| - status = ParseId(registration_id_string, ®istration_id);
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - user_data->clear();
|
| - return status;
|
| - }
|
| + int64_t registration_id;
|
| + status = ParseId(registration_id_string, ®istration_id);
|
| + if (status != STATUS_OK) {
|
| + user_data->clear();
|
| + break;
|
| + }
|
|
|
| - std::string value;
|
| - status = LevelDBStatusToStatus(
|
| - db_->Get(leveldb::ReadOptions(),
|
| - CreateUserDataKey(registration_id, user_data_name), &value));
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - user_data->clear();
|
| - return status;
|
| + std::string value;
|
| + status = LevelDBStatusToStatus(
|
| + db_->Get(leveldb::ReadOptions(),
|
| + CreateUserDataKey(registration_id, user_data_name), &value));
|
| + if (status != STATUS_OK) {
|
| + user_data->clear();
|
| + break;
|
| + }
|
| + user_data->push_back(std::make_pair(registration_id, value));
|
| }
|
| - user_data->push_back(std::make_pair(registration_id, value));
|
| }
|
|
|
| HandleReadResult(FROM_HERE, status);
|
| @@ -1240,26 +1240,26 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadResourceRecords(
|
| Status status = STATUS_OK;
|
| const std::string prefix = CreateResourceRecordKeyPrefix(version_id);
|
|
|
| - scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| - for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
|
| - Status status = LevelDBStatusToStatus(itr->status());
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - resources->clear();
|
| - return status;
|
| - }
|
| + {
|
| + scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| + for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
|
| + Status status = LevelDBStatusToStatus(itr->status());
|
| + if (status != STATUS_OK) {
|
| + resources->clear();
|
| + break;
|
| + }
|
|
|
| - if (!RemovePrefix(itr->key().ToString(), prefix, NULL))
|
| - break;
|
| + if (!RemovePrefix(itr->key().ToString(), prefix, NULL))
|
| + break;
|
|
|
| - ResourceRecord resource;
|
| - status = ParseResourceRecord(itr->value().ToString(), &resource);
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - resources->clear();
|
| - return status;
|
| + ResourceRecord resource;
|
| + status = ParseResourceRecord(itr->value().ToString(), &resource);
|
| + if (status != STATUS_OK) {
|
| + resources->clear();
|
| + break;
|
| + }
|
| + resources->push_back(resource);
|
| }
|
| - resources->push_back(resource);
|
| }
|
|
|
| HandleReadResult(FROM_HERE, status);
|
| @@ -1328,33 +1328,31 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteResourceRecords(
|
| Status status = STATUS_OK;
|
| const std::string prefix = CreateResourceRecordKeyPrefix(version_id);
|
|
|
| - scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| - for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
|
| - status = LevelDBStatusToStatus(itr->status());
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - return status;
|
| - }
|
| + {
|
| + scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| + for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
|
| + status = LevelDBStatusToStatus(itr->status());
|
| + if (status != STATUS_OK)
|
| + break;
|
|
|
| - const std::string key = itr->key().ToString();
|
| - std::string unprefixed;
|
| - if (!RemovePrefix(key, prefix, &unprefixed))
|
| - break;
|
| + const std::string key = itr->key().ToString();
|
| + std::string unprefixed;
|
| + if (!RemovePrefix(key, prefix, &unprefixed))
|
| + break;
|
|
|
| - int64_t resource_id;
|
| - status = ParseId(unprefixed, &resource_id);
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - return status;
|
| - }
|
| + int64_t resource_id;
|
| + status = ParseId(unprefixed, &resource_id);
|
| + if (status != STATUS_OK)
|
| + break;
|
|
|
| - // Remove a resource record.
|
| - batch->Delete(key);
|
| + // Remove a resource record.
|
| + batch->Delete(key);
|
|
|
| - // Currently resource sharing across versions and registrations is not
|
| - // supported, so we can purge this without caring about it.
|
| - PutPurgeableResourceIdToBatch(resource_id, batch);
|
| - newly_purgeable_resources->push_back(resource_id);
|
| + // Currently resource sharing across versions and registrations is not
|
| + // supported, so we can purge this without caring about it.
|
| + PutPurgeableResourceIdToBatch(resource_id, batch);
|
| + newly_purgeable_resources->push_back(resource_id);
|
| + }
|
| }
|
|
|
| HandleReadResult(FROM_HERE, status);
|
| @@ -1374,27 +1372,27 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadResourceIds(
|
| if (status != STATUS_OK)
|
| return status;
|
|
|
| - scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| - for (itr->Seek(id_key_prefix); itr->Valid(); itr->Next()) {
|
| - status = LevelDBStatusToStatus(itr->status());
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - ids->clear();
|
| - return status;
|
| - }
|
| + {
|
| + scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| + for (itr->Seek(id_key_prefix); itr->Valid(); itr->Next()) {
|
| + status = LevelDBStatusToStatus(itr->status());
|
| + if (status != STATUS_OK) {
|
| + ids->clear();
|
| + break;
|
| + }
|
|
|
| - std::string unprefixed;
|
| - if (!RemovePrefix(itr->key().ToString(), id_key_prefix, &unprefixed))
|
| - break;
|
| + std::string unprefixed;
|
| + if (!RemovePrefix(itr->key().ToString(), id_key_prefix, &unprefixed))
|
| + break;
|
|
|
| - int64_t resource_id;
|
| - status = ParseId(unprefixed, &resource_id);
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - ids->clear();
|
| - return status;
|
| + int64_t resource_id;
|
| + status = ParseId(unprefixed, &resource_id);
|
| + if (status != STATUS_OK) {
|
| + ids->clear();
|
| + break;
|
| + }
|
| + ids->insert(resource_id);
|
| }
|
| - ids->insert(resource_id);
|
| }
|
|
|
| HandleReadResult(FROM_HERE, status);
|
| @@ -1452,21 +1450,23 @@ ServiceWorkerDatabase::DeleteUserDataForRegistration(
|
| Status status = STATUS_OK;
|
| const std::string prefix = CreateUserDataKeyPrefix(registration_id);
|
|
|
| - scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| - for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
|
| - status = LevelDBStatusToStatus(itr->status());
|
| - if (status != STATUS_OK) {
|
| - HandleReadResult(FROM_HERE, status);
|
| - return status;
|
| + {
|
| + scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
|
| + for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
|
| + status = LevelDBStatusToStatus(itr->status());
|
| + if (status != STATUS_OK)
|
| + break;
|
| +
|
| + const std::string key = itr->key().ToString();
|
| + std::string user_data_name;
|
| + if (!RemovePrefix(key, prefix, &user_data_name))
|
| + break;
|
| + batch->Delete(key);
|
| + batch->Delete(CreateHasUserDataKey(registration_id, user_data_name));
|
| }
|
| -
|
| - const std::string key = itr->key().ToString();
|
| - std::string user_data_name;
|
| - if (!RemovePrefix(key, prefix, &user_data_name))
|
| - break;
|
| - batch->Delete(key);
|
| - batch->Delete(CreateHasUserDataKey(registration_id, user_data_name));
|
| }
|
| +
|
| + HandleReadResult(FROM_HERE, status);
|
| return status;
|
| }
|
|
|
|
|