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 e057c99467bb07bf142839fd480324959350c878..6fba23431e87d7f67802bddacd9d4833542b0ab6 100644 |
--- a/content/browser/service_worker/service_worker_database.cc |
+++ b/content/browser/service_worker/service_worker_database.cc |
@@ -803,12 +803,12 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteRegistration( |
ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadUserData( |
int64_t registration_id, |
- const std::string& user_data_name, |
- std::string* user_data) { |
+ const std::vector<std::string>& user_data_names, |
+ std::vector<std::string>* user_data_values) { |
DCHECK(sequence_checker_.CalledOnValidSequencedThread()); |
DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
- DCHECK(!user_data_name.empty()); |
- DCHECK(user_data); |
+ DCHECK(!user_data_names.empty()); |
+ DCHECK(user_data_values); |
Status status = LazyOpen(false); |
if (IsNewOrNonexistentDatabase(status)) |
@@ -816,9 +816,17 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadUserData( |
if (status != STATUS_OK) |
return status; |
- const std::string key = CreateUserDataKey(registration_id, user_data_name); |
- status = LevelDBStatusToStatus( |
- db_->Get(leveldb::ReadOptions(), key, user_data)); |
+ user_data_values->resize(user_data_names.size()); |
+ for (size_t i = 0; i < user_data_names.size(); i++) { |
+ const std::string key = |
+ CreateUserDataKey(registration_id, user_data_names[i]); |
+ status = LevelDBStatusToStatus( |
+ db_->Get(leveldb::ReadOptions(), key, &(*user_data_values)[i])); |
+ if (status != STATUS_OK) { |
+ user_data_values->clear(); |
+ break; |
+ } |
+ } |
HandleReadResult(FROM_HERE, |
status == STATUS_ERROR_NOT_FOUND ? STATUS_OK : status); |
return status; |
@@ -827,11 +835,10 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadUserData( |
ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteUserData( |
int64_t registration_id, |
const GURL& origin, |
- const std::string& user_data_name, |
- const std::string& user_data) { |
+ const std::vector<std::pair<std::string, std::string>>& name_value_pairs) { |
DCHECK(sequence_checker_.CalledOnValidSequencedThread()); |
DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
- DCHECK(!user_data_name.empty()); |
+ DCHECK(!name_value_pairs.empty()); |
Status status = LazyOpen(false); |
if (IsNewOrNonexistentDatabase(status)) |
@@ -846,17 +853,20 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteUserData( |
return status; |
leveldb::WriteBatch batch; |
- batch.Put(CreateUserDataKey(registration_id, user_data_name), user_data); |
- batch.Put(CreateHasUserDataKey(registration_id, user_data_name), ""); |
+ for (const auto& pair : name_value_pairs) { |
+ DCHECK(!pair.first.empty()); |
+ batch.Put(CreateUserDataKey(registration_id, pair.first), pair.second); |
+ batch.Put(CreateHasUserDataKey(registration_id, pair.first), ""); |
+ } |
return WriteBatch(&batch); |
} |
ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteUserData( |
int64_t registration_id, |
- const std::string& user_data_name) { |
+ const std::vector<std::string>& user_data_names) { |
DCHECK(sequence_checker_.CalledOnValidSequencedThread()); |
DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); |
- DCHECK(!user_data_name.empty()); |
+ DCHECK(!user_data_names.empty()); |
Status status = LazyOpen(false); |
if (IsNewOrNonexistentDatabase(status)) |
@@ -865,8 +875,11 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteUserData( |
return status; |
leveldb::WriteBatch batch; |
- batch.Delete(CreateUserDataKey(registration_id, user_data_name)); |
- batch.Delete(CreateHasUserDataKey(registration_id, user_data_name)); |
+ for (const std::string& name : user_data_names) { |
+ DCHECK(!name.empty()); |
+ batch.Delete(CreateUserDataKey(registration_id, name)); |
+ batch.Delete(CreateHasUserDataKey(registration_id, name)); |
+ } |
return WriteBatch(&batch); |
} |