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 a015f236092f94ae80492bcb21dbad35e7626e7d..75f456b9a0215eabbabf237072c646d7a861bae5 100644 |
--- a/content/browser/service_worker/service_worker_storage.cc |
+++ b/content/browser/service_worker/service_worker_storage.cc |
@@ -6,8 +6,6 @@ |
#include <stddef.h> |
-#include <utility> |
- |
#include "base/bind_helpers.h" |
#include "base/files/file_util.h" |
#include "base/memory/ptr_util.h" |
@@ -574,63 +572,71 @@ void ServiceWorkerStorage::DoomUncommittedResources( |
weak_factory_.GetWeakPtr(), resource_ids)); |
} |
-void ServiceWorkerStorage::StoreUserData(int64_t registration_id, |
- const GURL& origin, |
- const std::string& key, |
- const std::string& data, |
- const StatusCallback& callback) { |
+void ServiceWorkerStorage::StoreUserData( |
+ int64_t registration_id, |
+ const GURL& origin, |
+ const std::vector<std::pair<std::string, std::string>>& key_value_pairs, |
+ const StatusCallback& callback) { |
DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; |
if (IsDisabled()) { |
RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT)); |
return; |
} |
- if (registration_id == kInvalidServiceWorkerRegistrationId || key.empty()) { |
+ if (registration_id == kInvalidServiceWorkerRegistrationId || |
+ key_value_pairs.empty()) { |
RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); |
return; |
} |
+ for (const auto& kv : key_value_pairs) { |
+ if (kv.first.empty()) { |
+ RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); |
+ return; |
+ } |
+ } |
PostTaskAndReplyWithResult( |
- database_task_manager_->GetTaskRunner(), |
- FROM_HERE, |
+ database_task_manager_->GetTaskRunner(), FROM_HERE, |
base::Bind(&ServiceWorkerDatabase::WriteUserData, |
- base::Unretained(database_.get()), |
- registration_id, origin, key, data), |
+ base::Unretained(database_.get()), registration_id, origin, |
+ key_value_pairs), |
base::Bind(&ServiceWorkerStorage::DidStoreUserData, |
- weak_factory_.GetWeakPtr(), |
- callback)); |
+ weak_factory_.GetWeakPtr(), callback)); |
} |
void ServiceWorkerStorage::GetUserData(int64_t registration_id, |
- const std::string& key, |
+ const std::vector<std::string>& keys, |
const GetUserDataCallback& callback) { |
DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; |
if (IsDisabled()) { |
- RunSoon(FROM_HERE, |
- base::Bind(callback, std::string(), SERVICE_WORKER_ERROR_ABORT)); |
+ RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(), |
+ SERVICE_WORKER_ERROR_ABORT)); |
return; |
} |
- if (registration_id == kInvalidServiceWorkerRegistrationId || key.empty()) { |
- RunSoon(FROM_HERE, |
- base::Bind(callback, std::string(), SERVICE_WORKER_ERROR_FAILED)); |
+ if (registration_id == kInvalidServiceWorkerRegistrationId || keys.empty()) { |
+ RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(), |
+ SERVICE_WORKER_ERROR_FAILED)); |
return; |
} |
+ for (const std::string& key : keys) { |
+ if (key.empty()) { |
+ RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(), |
+ SERVICE_WORKER_ERROR_FAILED)); |
+ return; |
+ } |
+ } |
database_task_manager_->GetTaskRunner()->PostTask( |
FROM_HERE, |
- base::Bind(&ServiceWorkerStorage::GetUserDataInDB, |
- database_.get(), |
- base::ThreadTaskRunnerHandle::Get(), |
- registration_id, |
- key, |
+ base::Bind(&ServiceWorkerStorage::GetUserDataInDB, database_.get(), |
+ base::ThreadTaskRunnerHandle::Get(), registration_id, keys, |
base::Bind(&ServiceWorkerStorage::DidGetUserData, |
- weak_factory_.GetWeakPtr(), |
- callback))); |
+ weak_factory_.GetWeakPtr(), callback))); |
} |
void ServiceWorkerStorage::ClearUserData(int64_t registration_id, |
- const std::string& key, |
+ const std::vector<std::string>& keys, |
const StatusCallback& callback) { |
DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; |
if (IsDisabled()) { |
@@ -638,20 +644,23 @@ void ServiceWorkerStorage::ClearUserData(int64_t registration_id, |
return; |
} |
- if (registration_id == kInvalidServiceWorkerRegistrationId || key.empty()) { |
+ if (registration_id == kInvalidServiceWorkerRegistrationId || keys.empty()) { |
RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); |
return; |
} |
+ for (const std::string& key : keys) { |
+ if (key.empty()) { |
+ RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); |
+ return; |
+ } |
+ } |
PostTaskAndReplyWithResult( |
- database_task_manager_->GetTaskRunner(), |
- FROM_HERE, |
+ database_task_manager_->GetTaskRunner(), FROM_HERE, |
base::Bind(&ServiceWorkerDatabase::DeleteUserData, |
- base::Unretained(database_.get()), |
- registration_id, key), |
+ base::Unretained(database_.get()), registration_id, keys), |
base::Bind(&ServiceWorkerStorage::DidDeleteUserData, |
- weak_factory_.GetWeakPtr(), |
- callback)); |
+ weak_factory_.GetWeakPtr(), callback)); |
} |
void ServiceWorkerStorage::GetUserDataForAllRegistrations( |
@@ -1186,7 +1195,7 @@ void ServiceWorkerStorage::DidStoreUserData( |
void ServiceWorkerStorage::DidGetUserData( |
const GetUserDataCallback& callback, |
- const std::string& data, |
+ const std::vector<std::string>& data, |
ServiceWorkerDatabase::Status status) { |
if (status != ServiceWorkerDatabase::STATUS_OK && |
status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { |
@@ -1672,13 +1681,13 @@ void ServiceWorkerStorage::GetUserDataInDB( |
ServiceWorkerDatabase* database, |
scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
int64_t registration_id, |
- const std::string& key, |
+ const std::vector<std::string>& keys, |
const GetUserDataInDBCallback& callback) { |
- std::string data; |
+ std::vector<std::string> values; |
ServiceWorkerDatabase::Status status = |
- database->ReadUserData(registration_id, key, &data); |
- original_task_runner->PostTask( |
- FROM_HERE, base::Bind(callback, data, status)); |
+ database->ReadUserData(registration_id, keys, &values); |
+ original_task_runner->PostTask(FROM_HERE, |
+ base::Bind(callback, values, status)); |
} |
void ServiceWorkerStorage::GetUserDataForAllRegistrationsInDB( |