| 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);
|
| }
|
|
|
|
|