Commit a1da5678 authored by Kenichi Ishibashi's avatar Kenichi Ishibashi Committed by Commit Bot

service worker: Add wrapper method of GetUserKeysAndDataByKeyPrefix()

This is similar to crrev.com/c/2018625 but for
GetUserKeysAndDataByKeyPrefix().

Bug: 1039200
Change-Id: Idb4d36a9582860a9bbd8f30bad21ba56ae587849
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2022364
Commit-Queue: Kenichi Ishibashi <bashi@chromium.org>
Reviewed-by: default avatarHiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#735743}
parent 46b47a6c
...@@ -1193,7 +1193,7 @@ void ServiceWorkerContextWrapper:: ...@@ -1193,7 +1193,7 @@ void ServiceWorkerContextWrapper::
blink::ServiceWorkerStatusCode::kErrorAbort); blink::ServiceWorkerStatusCode::kErrorAbort);
return; return;
} }
context_core_->storage()->GetUserKeysAndDataByKeyPrefix( context_core_->registry()->GetUserKeysAndDataByKeyPrefix(
registration_id, key_prefix, std::move(callback)); registration_id, key_prefix, std::move(callback));
} }
......
...@@ -73,7 +73,7 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper ...@@ -73,7 +73,7 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
ServiceWorkerRegistry::GetRegistrationsInfosCallback; ServiceWorkerRegistry::GetRegistrationsInfosCallback;
using GetUserDataCallback = ServiceWorkerRegistry::GetUserDataCallback; using GetUserDataCallback = ServiceWorkerRegistry::GetUserDataCallback;
using GetUserKeysAndDataCallback = using GetUserKeysAndDataCallback =
ServiceWorkerStorage::GetUserKeysAndDataCallback; ServiceWorkerRegistry::GetUserKeysAndDataCallback;
using GetUserDataForAllRegistrationsCallback = using GetUserDataForAllRegistrationsCallback =
ServiceWorkerStorage::GetUserDataForAllRegistrationsCallback; ServiceWorkerStorage::GetUserDataForAllRegistrationsCallback;
......
...@@ -292,22 +292,36 @@ void ServiceWorkerRegistry::GetUserDataByKeyPrefix( ...@@ -292,22 +292,36 @@ void ServiceWorkerRegistry::GetUserDataByKeyPrefix(
int64_t registration_id, int64_t registration_id,
const std::string& key_prefix, const std::string& key_prefix,
GetUserDataCallback callback) { GetUserDataCallback callback) {
if (registration_id == blink::mojom::kInvalidServiceWorkerRegistrationId) { if (registration_id == blink::mojom::kInvalidServiceWorkerRegistrationId ||
key_prefix.empty()) {
RunSoon(FROM_HERE, RunSoon(FROM_HERE,
base::BindOnce(std::move(callback), std::vector<std::string>(), base::BindOnce(std::move(callback), std::vector<std::string>(),
blink::ServiceWorkerStatusCode::kErrorFailed)); blink::ServiceWorkerStatusCode::kErrorFailed));
return; return;
} }
if (key_prefix.empty()) {
storage()->GetUserDataByKeyPrefix(
registration_id, key_prefix,
base::BindOnce(&ServiceWorkerRegistry::DidGetUserData,
weak_factory_.GetWeakPtr(), std::move(callback)));
}
void ServiceWorkerRegistry::GetUserKeysAndDataByKeyPrefix(
int64_t registration_id,
const std::string& key_prefix,
GetUserKeysAndDataCallback callback) {
if (registration_id == blink::mojom::kInvalidServiceWorkerRegistrationId ||
key_prefix.empty()) {
RunSoon(FROM_HERE, RunSoon(FROM_HERE,
base::BindOnce(std::move(callback), std::vector<std::string>(), base::BindOnce(std::move(callback),
base::flat_map<std::string, std::string>(),
blink::ServiceWorkerStatusCode::kErrorFailed)); blink::ServiceWorkerStatusCode::kErrorFailed));
return; return;
} }
storage()->GetUserDataByKeyPrefix( storage()->GetUserKeysAndDataByKeyPrefix(
registration_id, key_prefix, registration_id, key_prefix,
base::BindOnce(&ServiceWorkerRegistry::DidGetUserData, base::BindOnce(&ServiceWorkerRegistry::DidGetUserKeysAndData,
weak_factory_.GetWeakPtr(), std::move(callback))); weak_factory_.GetWeakPtr(), std::move(callback)));
} }
...@@ -657,6 +671,18 @@ void ServiceWorkerRegistry::DidGetUserData( ...@@ -657,6 +671,18 @@ void ServiceWorkerRegistry::DidGetUserData(
data, ServiceWorkerStorage::DatabaseStatusToStatusCode(status)); data, ServiceWorkerStorage::DatabaseStatusToStatusCode(status));
} }
void ServiceWorkerRegistry::DidGetUserKeysAndData(
GetUserKeysAndDataCallback callback,
const base::flat_map<std::string, std::string>& data_map,
ServiceWorkerDatabase::Status status) {
if (status != ServiceWorkerDatabase::STATUS_OK &&
status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
ScheduleDeleteAndStartOver();
}
std::move(callback).Run(
data_map, ServiceWorkerStorage::DatabaseStatusToStatusCode(status));
}
void ServiceWorkerRegistry::ScheduleDeleteAndStartOver() { void ServiceWorkerRegistry::ScheduleDeleteAndStartOver() {
if (storage()->IsDisabled()) { if (storage()->IsDisabled()) {
// Recovery process has already been scheduled. // Recovery process has already been scheduled.
......
...@@ -53,6 +53,9 @@ class CONTENT_EXPORT ServiceWorkerRegistry { ...@@ -53,6 +53,9 @@ class CONTENT_EXPORT ServiceWorkerRegistry {
using GetUserDataCallback = using GetUserDataCallback =
base::OnceCallback<void(const std::vector<std::string>& data, base::OnceCallback<void(const std::vector<std::string>& data,
blink::ServiceWorkerStatusCode status)>; blink::ServiceWorkerStatusCode status)>;
using GetUserKeysAndDataCallback = base::OnceCallback<void(
const base::flat_map<std::string, std::string>& data_map,
blink::ServiceWorkerStatusCode status)>;
using StatusCallback = ServiceWorkerStorage::StatusCallback; using StatusCallback = ServiceWorkerStorage::StatusCallback;
ServiceWorkerRegistry( ServiceWorkerRegistry(
...@@ -138,6 +141,9 @@ class CONTENT_EXPORT ServiceWorkerRegistry { ...@@ -138,6 +141,9 @@ class CONTENT_EXPORT ServiceWorkerRegistry {
void GetUserDataByKeyPrefix(int64_t registration_id, void GetUserDataByKeyPrefix(int64_t registration_id,
const std::string& key_prefix, const std::string& key_prefix,
GetUserDataCallback callback); GetUserDataCallback callback);
void GetUserKeysAndDataByKeyPrefix(int64_t registration_id,
const std::string& key_prefix,
GetUserKeysAndDataCallback callback);
// TODO(crbug.com/1039200): Make this private once methods/fields related to // TODO(crbug.com/1039200): Make this private once methods/fields related to
// ServiceWorkerRegistration in ServiceWorkerStorage are moved into this // ServiceWorkerRegistration in ServiceWorkerStorage are moved into this
...@@ -197,6 +203,10 @@ class CONTENT_EXPORT ServiceWorkerRegistry { ...@@ -197,6 +203,10 @@ class CONTENT_EXPORT ServiceWorkerRegistry {
void DidGetUserData(GetUserDataCallback callback, void DidGetUserData(GetUserDataCallback callback,
const std::vector<std::string>& data, const std::vector<std::string>& data,
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
void DidGetUserKeysAndData(
GetUserKeysAndDataCallback callback,
const base::flat_map<std::string, std::string>& data_map,
ServiceWorkerDatabase::Status status);
void ScheduleDeleteAndStartOver(); void ScheduleDeleteAndStartOver();
......
...@@ -691,13 +691,13 @@ void ServiceWorkerStorage::GetUserDataByKeyPrefix( ...@@ -691,13 +691,13 @@ void ServiceWorkerStorage::GetUserDataByKeyPrefix(
void ServiceWorkerStorage::GetUserKeysAndDataByKeyPrefix( void ServiceWorkerStorage::GetUserKeysAndDataByKeyPrefix(
int64_t registration_id, int64_t registration_id,
const std::string& key_prefix, const std::string& key_prefix,
GetUserKeysAndDataCallback callback) { GetUserKeysAndDataInDBCallback callback) {
switch (state_) { switch (state_) {
case STORAGE_STATE_DISABLED: case STORAGE_STATE_DISABLED:
RunSoon(FROM_HERE, RunSoon(FROM_HERE,
base::BindOnce(std::move(callback), base::BindOnce(std::move(callback),
base::flat_map<std::string, std::string>(), base::flat_map<std::string, std::string>(),
blink::ServiceWorkerStatusCode::kErrorAbort)); ServiceWorkerDatabase::STATUS_ERROR_DISABLED));
return; return;
case STORAGE_STATE_INITIALIZING: // Fall-through. case STORAGE_STATE_INITIALIZING: // Fall-through.
case STORAGE_STATE_UNINITIALIZED: case STORAGE_STATE_UNINITIALIZED:
...@@ -710,23 +710,16 @@ void ServiceWorkerStorage::GetUserKeysAndDataByKeyPrefix( ...@@ -710,23 +710,16 @@ void ServiceWorkerStorage::GetUserKeysAndDataByKeyPrefix(
break; break;
} }
if (registration_id == blink::mojom::kInvalidServiceWorkerRegistrationId || // TODO(bashi): Consider replacing these DCHECKs with returning errors once
key_prefix.empty()) { // this class is moved to the Storage Service.
RunSoon(FROM_HERE, DCHECK_NE(registration_id, blink::mojom::kInvalidServiceWorkerRegistrationId);
base::BindOnce(std::move(callback), DCHECK(!key_prefix.empty());
base::flat_map<std::string, std::string>(),
blink::ServiceWorkerStatusCode::kErrorFailed));
return;
}
database_task_runner_->PostTask( database_task_runner_->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce( base::BindOnce(&ServiceWorkerStorage::GetUserKeysAndDataByKeyPrefixInDB,
&ServiceWorkerStorage::GetUserKeysAndDataByKeyPrefixInDB, database_.get(), base::ThreadTaskRunnerHandle::Get(),
database_.get(), base::ThreadTaskRunnerHandle::Get(), registration_id, registration_id, key_prefix, std::move(callback)));
key_prefix,
base::BindOnce(&ServiceWorkerStorage::DidGetUserKeysAndData,
weak_factory_.GetWeakPtr(), std::move(callback))));
} }
void ServiceWorkerStorage::ClearUserData(int64_t registration_id, void ServiceWorkerStorage::ClearUserData(int64_t registration_id,
...@@ -1251,17 +1244,6 @@ void ServiceWorkerStorage::DidStoreUserData( ...@@ -1251,17 +1244,6 @@ void ServiceWorkerStorage::DidStoreUserData(
std::move(callback).Run(DatabaseStatusToStatusCode(status)); std::move(callback).Run(DatabaseStatusToStatusCode(status));
} }
void ServiceWorkerStorage::DidGetUserKeysAndData(
GetUserKeysAndDataCallback callback,
const base::flat_map<std::string, std::string>& data_map,
ServiceWorkerDatabase::Status status) {
if (status != ServiceWorkerDatabase::STATUS_OK &&
status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
ScheduleDeleteAndStartOver();
}
std::move(callback).Run(data_map, DatabaseStatusToStatusCode(status));
}
void ServiceWorkerStorage::DidDeleteUserData( void ServiceWorkerStorage::DidDeleteUserData(
StatusCallback callback, StatusCallback callback,
ServiceWorkerDatabase::Status status) { ServiceWorkerDatabase::Status status) {
......
...@@ -89,9 +89,6 @@ class CONTENT_EXPORT ServiceWorkerStorage { ...@@ -89,9 +89,6 @@ class CONTENT_EXPORT ServiceWorkerStorage {
blink::ServiceWorkerStatusCode status, blink::ServiceWorkerStatusCode status,
int64_t deleted_version_id, int64_t deleted_version_id,
const std::vector<int64_t>& newly_purgeable_resources)>; const std::vector<int64_t>& newly_purgeable_resources)>;
using GetUserKeysAndDataCallback = base::OnceCallback<void(
const base::flat_map<std::string, std::string>& data_map,
blink::ServiceWorkerStatusCode status)>;
using GetUserDataForAllRegistrationsCallback = base::OnceCallback<void( using GetUserDataForAllRegistrationsCallback = base::OnceCallback<void(
const std::vector<std::pair<int64_t, std::string>>& user_data, const std::vector<std::pair<int64_t, std::string>>& user_data,
blink::ServiceWorkerStatusCode status)>; blink::ServiceWorkerStatusCode status)>;
...@@ -99,6 +96,9 @@ class CONTENT_EXPORT ServiceWorkerStorage { ...@@ -99,6 +96,9 @@ class CONTENT_EXPORT ServiceWorkerStorage {
using GetUserDataInDBCallback = using GetUserDataInDBCallback =
base::OnceCallback<void(const std::vector<std::string>& data, base::OnceCallback<void(const std::vector<std::string>& data,
ServiceWorkerDatabase::Status)>; ServiceWorkerDatabase::Status)>;
using GetUserKeysAndDataInDBCallback = base::OnceCallback<void(
const base::flat_map<std::string, std::string>& data_map,
ServiceWorkerDatabase::Status)>;
~ServiceWorkerStorage(); ~ServiceWorkerStorage();
...@@ -233,7 +233,7 @@ class CONTENT_EXPORT ServiceWorkerStorage { ...@@ -233,7 +233,7 @@ class CONTENT_EXPORT ServiceWorkerStorage {
// The map keys have |key_prefix| stripped from them. // The map keys have |key_prefix| stripped from them.
void GetUserKeysAndDataByKeyPrefix(int64_t registration_id, void GetUserKeysAndDataByKeyPrefix(int64_t registration_id,
const std::string& key_prefix, const std::string& key_prefix,
GetUserKeysAndDataCallback callback); GetUserKeysAndDataInDBCallback callback);
// Stored data is deleted when the associated registraton is deleted. // Stored data is deleted when the associated registraton is deleted.
void StoreUserData( void StoreUserData(
...@@ -361,9 +361,6 @@ class CONTENT_EXPORT ServiceWorkerStorage { ...@@ -361,9 +361,6 @@ class CONTENT_EXPORT ServiceWorkerStorage {
const ServiceWorkerDatabase::RegistrationData& data, const ServiceWorkerDatabase::RegistrationData& data,
const ResourceList& resources, const ResourceList& resources,
ServiceWorkerDatabase::Status status)>; ServiceWorkerDatabase::Status status)>;
using GetUserKeysAndDataInDBCallback = base::OnceCallback<void(
const base::flat_map<std::string, std::string>& data_map,
ServiceWorkerDatabase::Status)>;
using GetUserDataForAllRegistrationsInDBCallback = base::OnceCallback<void( using GetUserDataForAllRegistrationsInDBCallback = base::OnceCallback<void(
const std::vector<std::pair<int64_t, std::string>>& user_data, const std::vector<std::pair<int64_t, std::string>>& user_data,
ServiceWorkerDatabase::Status)>; ServiceWorkerDatabase::Status)>;
...@@ -418,10 +415,6 @@ class CONTENT_EXPORT ServiceWorkerStorage { ...@@ -418,10 +415,6 @@ class CONTENT_EXPORT ServiceWorkerStorage {
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
void DidStoreUserData(StatusCallback callback, void DidStoreUserData(StatusCallback callback,
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
void DidGetUserKeysAndData(
GetUserKeysAndDataCallback callback,
const base::flat_map<std::string, std::string>& map,
ServiceWorkerDatabase::Status status);
void DidDeleteUserData(StatusCallback callback, void DidDeleteUserData(StatusCallback callback,
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
void DidGetUserDataForAllRegistrations( void DidGetUserDataForAllRegistrations(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment