Commit 76be97d8 authored by Nidhi Jaju's avatar Nidhi Jaju Committed by Commit Bot

Expose GetInstalledRegistrationOrigins()

The purpose of exposing this method is to remove GetAllOriginsInfo()
call from //components/browsing_data. GetAllOriginsInfo() does not
work well when there are many registrations (see [1] for details).

//components/browsing_data only needs a list of origins that have
service worker registrations (doesn't need storage usage).
GetInstalledRegistrationOrigins() can be used to get these origins.

ServiceWorkerContextWrapper implements GetInstalledRegistrationOrigins()
without disk access and it's much faster than GetAllOriginsInfo().

[1]
https://docs.google.com/document/d/1iaQGQzovFVL3LxDiyIvVgEUFWMhzrXpdf_6TmuwIICA

Bug: 1099570
Change-Id: I9f206c7eb7de216b410d1e318309db61f60e5d21
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2278795Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Reviewed-by: default avatarKenichi Ishibashi <bashi@chromium.org>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Commit-Queue: Nidhi Jaju <nidhijaju@google.com>
Cr-Commit-Position: refs/heads/master@{#785245}
parent b46b4230
...@@ -122,6 +122,12 @@ bool ServiceWorkerContextAdapter::MaybeHasRegistrationForOrigin( ...@@ -122,6 +122,12 @@ bool ServiceWorkerContextAdapter::MaybeHasRegistrationForOrigin(
return false; return false;
} }
void ServiceWorkerContextAdapter::GetInstalledRegistrationOrigins(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback) {
NOTIMPLEMENTED();
}
void ServiceWorkerContextAdapter::GetAllOriginsInfo( void ServiceWorkerContextAdapter::GetAllOriginsInfo(
GetUsageInfoCallback callback) { GetUsageInfoCallback callback) {
NOTIMPLEMENTED(); NOTIMPLEMENTED();
......
...@@ -62,6 +62,9 @@ class ServiceWorkerContextAdapter ...@@ -62,6 +62,9 @@ class ServiceWorkerContextAdapter
const GURL& origin, const GURL& origin,
CountExternalRequestsCallback callback) override; CountExternalRequestsCallback callback) override;
bool MaybeHasRegistrationForOrigin(const url::Origin& origin) override; bool MaybeHasRegistrationForOrigin(const url::Origin& origin) override;
void GetInstalledRegistrationOrigins(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback) override;
void GetAllOriginsInfo(GetUsageInfoCallback callback) override; void GetAllOriginsInfo(GetUsageInfoCallback callback) override;
void DeleteForOrigin(const GURL& origin_url, void DeleteForOrigin(const GURL& origin_url,
ResultCallback callback) override; ResultCallback callback) override;
......
...@@ -579,6 +579,28 @@ bool ServiceWorkerContextWrapper::MaybeHasRegistrationForOrigin( ...@@ -579,6 +579,28 @@ bool ServiceWorkerContextWrapper::MaybeHasRegistrationForOrigin(
return false; return false;
} }
void ServiceWorkerContextWrapper::GetInstalledRegistrationOrigins(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback) {
RunOrPostTaskOnCoreThread(
FROM_HERE, base::BindOnce(&ServiceWorkerContextWrapper::
GetInstalledRegistrationOriginsOnCoreThread,
this, host_filter, std::move(callback),
base::ThreadTaskRunnerHandle::Get()));
}
void ServiceWorkerContextWrapper::GetInstalledRegistrationOriginsOnCoreThread(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback,
scoped_refptr<base::SingleThreadTaskRunner> task_runner_for_callback) {
DCHECK_CURRENTLY_ON(GetCoreThreadId());
context()->registry()->storage()->GetRegisteredOrigins(base::BindOnce(
&ServiceWorkerContextWrapper::
DidGetRegisteredOriginsForGetInstalledRegistrationOrigins,
host_filter, std::move(callback), task_runner_for_callback));
}
void ServiceWorkerContextWrapper::GetAllOriginsInfo( void ServiceWorkerContextWrapper::GetAllOriginsInfo(
GetUsageInfoCallback callback) { GetUsageInfoCallback callback) {
RunOrPostTaskOnCoreThread( RunOrPostTaskOnCoreThread(
...@@ -1115,28 +1137,6 @@ void ServiceWorkerContextWrapper::GetAllRegistrationsOnCoreThread( ...@@ -1115,28 +1137,6 @@ void ServiceWorkerContextWrapper::GetAllRegistrationsOnCoreThread(
context_core_->registry()->GetAllRegistrationsInfos(std::move(callback)); context_core_->registry()->GetAllRegistrationsInfos(std::move(callback));
} }
void ServiceWorkerContextWrapper::GetInstalledRegistrationOrigins(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback) {
RunOrPostTaskOnCoreThread(
FROM_HERE, base::BindOnce(&ServiceWorkerContextWrapper::
GetInstalledRegistrationOriginsOnCoreThread,
this, host_filter, std::move(callback),
base::ThreadTaskRunnerHandle::Get()));
}
void ServiceWorkerContextWrapper::GetInstalledRegistrationOriginsOnCoreThread(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback,
scoped_refptr<base::SingleThreadTaskRunner> task_runner_for_callback) {
DCHECK_CURRENTLY_ON(GetCoreThreadId());
context()->registry()->storage()->GetRegisteredOrigins(base::BindOnce(
&ServiceWorkerContextWrapper::
DidGetRegisteredOriginsForGetInstalledRegistrationOrigins,
host_filter, std::move(callback), task_runner_for_callback));
}
void ServiceWorkerContextWrapper::GetStorageUsageForOrigin( void ServiceWorkerContextWrapper::GetStorageUsageForOrigin(
const url::Origin& origin, const url::Origin& origin,
GetStorageUsageForOriginCallback callback) { GetStorageUsageForOriginCallback callback) {
......
...@@ -168,6 +168,9 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper ...@@ -168,6 +168,9 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
const GURL& url, const GURL& url,
CountExternalRequestsCallback callback) override; CountExternalRequestsCallback callback) override;
bool MaybeHasRegistrationForOrigin(const url::Origin& origin) override; bool MaybeHasRegistrationForOrigin(const url::Origin& origin) override;
void GetInstalledRegistrationOrigins(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback) override;
void GetAllOriginsInfo(GetUsageInfoCallback callback) override; void GetAllOriginsInfo(GetUsageInfoCallback callback) override;
void DeleteForOrigin(const GURL& origin, ResultCallback callback) override; void DeleteForOrigin(const GURL& origin, ResultCallback callback) override;
void PerformStorageCleanup(base::OnceClosure callback) override; void PerformStorageCleanup(base::OnceClosure callback) override;
...@@ -309,16 +312,6 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper ...@@ -309,16 +312,6 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
const std::string& key_prefix, const std::string& key_prefix,
StatusCallback callback); StatusCallback callback);
// Returns a set of origins which have at least one stored registration.
// The set doesn't include installing/uninstalling/uninstalled registrations.
// When |host_filter| is specified the set only includes origins whose host
// matches |host_filter|.
// This function can be called from any thread and the callback is called on
// that thread.
void GetInstalledRegistrationOrigins(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback);
// Returns total resource size stored in the storage for |origin|. // Returns total resource size stored in the storage for |origin|.
// This can be called from any thread and the callback is called on that // This can be called from any thread and the callback is called on that
// thread. // thread.
......
...@@ -67,6 +67,9 @@ class CONTENT_EXPORT ServiceWorkerContext { ...@@ -67,6 +67,9 @@ class CONTENT_EXPORT ServiceWorkerContext {
public: public:
using ResultCallback = base::OnceCallback<void(bool success)>; using ResultCallback = base::OnceCallback<void(bool success)>;
using GetInstalledRegistrationOriginsCallback =
base::OnceCallback<void(const std::set<url::Origin>& origins)>;
using GetUsageInfoCallback = using GetUsageInfoCallback =
base::OnceCallback<void(const std::vector<StorageUsageInfo>& usage_info)>; base::OnceCallback<void(const std::vector<StorageUsageInfo>& usage_info)>;
...@@ -165,6 +168,16 @@ class CONTENT_EXPORT ServiceWorkerContext { ...@@ -165,6 +168,16 @@ class CONTENT_EXPORT ServiceWorkerContext {
// Must be called on the UI thread. // Must be called on the UI thread.
virtual bool MaybeHasRegistrationForOrigin(const url::Origin& origin) = 0; virtual bool MaybeHasRegistrationForOrigin(const url::Origin& origin) = 0;
// Returns a set of origins which have at least one stored registration.
// The set doesn't include installing/uninstalling/uninstalled registrations.
// When |host_filter| is specified the set only includes origins whose host
// matches |host_filter|.
// This function can be called from any thread and the callback is called on
// that thread.
virtual void GetInstalledRegistrationOrigins(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback) = 0;
// May be called from any thread, and the callback is called on that thread. // May be called from any thread, and the callback is called on that thread.
virtual void GetAllOriginsInfo(GetUsageInfoCallback callback) = 0; virtual void GetAllOriginsInfo(GetUsageInfoCallback callback) = 0;
......
...@@ -59,6 +59,11 @@ bool FakeServiceWorkerContext::MaybeHasRegistrationForOrigin( ...@@ -59,6 +59,11 @@ bool FakeServiceWorkerContext::MaybeHasRegistrationForOrigin(
const url::Origin& origin) { const url::Origin& origin) {
return registered_origins_.find(origin) != registered_origins_.end(); return registered_origins_.find(origin) != registered_origins_.end();
} }
void FakeServiceWorkerContext::GetInstalledRegistrationOrigins(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback) {
NOTREACHED();
}
void FakeServiceWorkerContext::GetAllOriginsInfo( void FakeServiceWorkerContext::GetAllOriginsInfo(
GetUsageInfoCallback callback) { GetUsageInfoCallback callback) {
NOTREACHED(); NOTREACHED();
......
...@@ -49,6 +49,9 @@ class FakeServiceWorkerContext : public ServiceWorkerContext { ...@@ -49,6 +49,9 @@ class FakeServiceWorkerContext : public ServiceWorkerContext {
const GURL& url, const GURL& url,
CountExternalRequestsCallback callback) override; CountExternalRequestsCallback callback) override;
bool MaybeHasRegistrationForOrigin(const url::Origin& origin) override; bool MaybeHasRegistrationForOrigin(const url::Origin& origin) override;
void GetInstalledRegistrationOrigins(
base::Optional<std::string> host_filter,
GetInstalledRegistrationOriginsCallback callback) override;
void GetAllOriginsInfo(GetUsageInfoCallback callback) override; void GetAllOriginsInfo(GetUsageInfoCallback callback) override;
void DeleteForOrigin(const GURL& origin, ResultCallback callback) override; void DeleteForOrigin(const GURL& origin, ResultCallback callback) override;
void PerformStorageCleanup(base::OnceClosure callback) override; void PerformStorageCleanup(base::OnceClosure callback) override;
......
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