Commit 141f747d authored by Kenichi Ishibashi's avatar Kenichi Ishibashi Committed by Commit Bot

service worker: Check installing registrations in ServiceWorkerRegistry (2 of 3)

This is similar to crrev.com/c/1999974 but for
FindRegistrationForScope().

DidFindRegistrationForClientUrl() and
DidFindRegistrationForScope() in ServiceWorkerStorage are merged
into a single method because these became identical.

Bug: 1039200
Change-Id: I7eead23192734fa7a5cf743801474975fd47a17b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2003163
Commit-Queue: Kenichi Ishibashi <bashi@chromium.org>
Reviewed-by: default avatarHiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#732334}
parent 035209ff
...@@ -78,7 +78,10 @@ void ServiceWorkerRegistry::FindRegistrationForClientUrl( ...@@ -78,7 +78,10 @@ void ServiceWorkerRegistry::FindRegistrationForClientUrl(
void ServiceWorkerRegistry::FindRegistrationForScope( void ServiceWorkerRegistry::FindRegistrationForScope(
const GURL& scope, const GURL& scope,
FindRegistrationCallback callback) { FindRegistrationCallback callback) {
storage()->FindRegistrationForScope(scope, std::move(callback)); storage()->FindRegistrationForScope(
scope,
base::BindOnce(&ServiceWorkerRegistry::DidFindRegistrationForScope,
weak_factory_.GetWeakPtr(), scope, std::move(callback)));
} }
void ServiceWorkerRegistry::FindRegistrationForId( void ServiceWorkerRegistry::FindRegistrationForId(
...@@ -255,7 +258,26 @@ void ServiceWorkerRegistry::DidFindRegistrationForClientUrl( ...@@ -255,7 +258,26 @@ void ServiceWorkerRegistry::DidFindRegistrationForClientUrl(
TRACE_EVENT_ASYNC_END1( TRACE_EVENT_ASYNC_END1(
"ServiceWorker", "ServiceWorkerRegistry::FindRegistrationForClientUrl", "ServiceWorker", "ServiceWorkerRegistry::FindRegistrationForClientUrl",
trace_event_id, "Status", blink::ServiceWorkerStatusToString(status)); trace_event_id, "Status", blink::ServiceWorkerStatusToString(status));
std::move(callback).Run(status, std::move(registration)); CompleteFindNow(std::move(registration), status, std::move(callback));
}
void ServiceWorkerRegistry::DidFindRegistrationForScope(
const GURL& scope,
FindRegistrationCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration) {
if (status == blink::ServiceWorkerStatusCode::kErrorNotFound) {
// Look for something currently being installed.
scoped_refptr<ServiceWorkerRegistration> installing_registration =
FindInstallingRegistrationForScope(scope);
if (installing_registration) {
CompleteFindNow(std::move(installing_registration),
blink::ServiceWorkerStatusCode::kOk, std::move(callback));
return;
}
}
CompleteFindNow(std::move(registration), status, std::move(callback));
} }
} // namespace content } // namespace content
...@@ -119,6 +119,11 @@ class CONTENT_EXPORT ServiceWorkerRegistry { ...@@ -119,6 +119,11 @@ class CONTENT_EXPORT ServiceWorkerRegistry {
FindRegistrationCallback callback, FindRegistrationCallback callback,
blink::ServiceWorkerStatusCode status, blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration); scoped_refptr<ServiceWorkerRegistration> registration);
void DidFindRegistrationForScope(
const GURL& scope,
FindRegistrationCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration);
// The ServiceWorkerContextCore object must outlive this. // The ServiceWorkerContextCore object must outlive this.
ServiceWorkerContextCore* const context_; ServiceWorkerContextCore* const context_;
......
...@@ -57,14 +57,6 @@ void CompleteFindNow(scoped_refptr<ServiceWorkerRegistration> registration, ...@@ -57,14 +57,6 @@ void CompleteFindNow(scoped_refptr<ServiceWorkerRegistration> registration,
std::move(callback).Run(status, std::move(registration)); std::move(callback).Run(status, std::move(registration));
} }
void CompleteFindSoon(const base::Location& from_here,
scoped_refptr<ServiceWorkerRegistration> registration,
blink::ServiceWorkerStatusCode status,
ServiceWorkerStorage::FindRegistrationCallback callback) {
RunSoon(from_here, base::BindOnce(&CompleteFindNow, std::move(registration),
status, std::move(callback)));
}
const base::FilePath::CharType kDatabaseName[] = const base::FilePath::CharType kDatabaseName[] =
FILE_PATH_LITERAL("Database"); FILE_PATH_LITERAL("Database");
const base::FilePath::CharType kDiskCacheName[] = const base::FilePath::CharType kDiskCacheName[] =
...@@ -178,7 +170,7 @@ void ServiceWorkerStorage::FindRegistrationForClientUrl( ...@@ -178,7 +170,7 @@ void ServiceWorkerStorage::FindRegistrationForClientUrl(
base::BindOnce( base::BindOnce(
&FindForClientUrlInDB, database_.get(), &FindForClientUrlInDB, database_.get(),
base::ThreadTaskRunnerHandle::Get(), client_url, base::ThreadTaskRunnerHandle::Get(), client_url,
base::BindOnce(&ServiceWorkerStorage::DidFindRegistrationForClientUrl, base::BindOnce(&ServiceWorkerStorage::DidFindRegistration,
weak_factory_.GetWeakPtr(), std::move(callback)))); weak_factory_.GetWeakPtr(), std::move(callback))));
} }
...@@ -187,9 +179,10 @@ void ServiceWorkerStorage::FindRegistrationForScope( ...@@ -187,9 +179,10 @@ void ServiceWorkerStorage::FindRegistrationForScope(
FindRegistrationCallback callback) { FindRegistrationCallback callback) {
switch (state_) { switch (state_) {
case STORAGE_STATE_DISABLED: case STORAGE_STATE_DISABLED:
CompleteFindSoon(FROM_HERE, scoped_refptr<ServiceWorkerRegistration>(), RunSoon(
blink::ServiceWorkerStatusCode::kErrorAbort, FROM_HERE,
std::move(callback)); base::BindOnce(std::move(callback),
blink::ServiceWorkerStatusCode::kErrorAbort, nullptr));
return; return;
case STORAGE_STATE_INITIALIZING: // Fall-through. case STORAGE_STATE_INITIALIZING: // Fall-through.
case STORAGE_STATE_UNINITIALIZED: case STORAGE_STATE_UNINITIALIZED:
...@@ -201,17 +194,12 @@ void ServiceWorkerStorage::FindRegistrationForScope( ...@@ -201,17 +194,12 @@ void ServiceWorkerStorage::FindRegistrationForScope(
break; break;
} }
// See if there are any stored registrations for the origin. // Bypass database lookup when there is no stored registration.
if (!base::Contains(registered_origins_, scope.GetOrigin())) { if (!base::Contains(registered_origins_, scope.GetOrigin())) {
// Look for something currently being installed. RunSoon(FROM_HERE,
scoped_refptr<ServiceWorkerRegistration> installing_registration = base::BindOnce(std::move(callback),
registry_->FindInstallingRegistrationForScope(scope); blink::ServiceWorkerStatusCode::kErrorNotFound,
blink::ServiceWorkerStatusCode installing_status = nullptr));
installing_registration
? blink::ServiceWorkerStatusCode::kOk
: blink::ServiceWorkerStatusCode::kErrorNotFound;
CompleteFindSoon(FROM_HERE, std::move(installing_registration),
installing_status, std::move(callback));
return; return;
} }
...@@ -220,9 +208,8 @@ void ServiceWorkerStorage::FindRegistrationForScope( ...@@ -220,9 +208,8 @@ void ServiceWorkerStorage::FindRegistrationForScope(
base::BindOnce( base::BindOnce(
&FindForScopeInDB, database_.get(), &FindForScopeInDB, database_.get(),
base::ThreadTaskRunnerHandle::Get(), scope, base::ThreadTaskRunnerHandle::Get(), scope,
base::BindOnce(&ServiceWorkerStorage::DidFindRegistrationForScope, base::BindOnce(&ServiceWorkerStorage::DidFindRegistration,
weak_factory_.GetWeakPtr(), scope, weak_factory_.GetWeakPtr(), std::move(callback))));
std::move(callback))));
} }
void ServiceWorkerStorage::FindRegistrationForId( void ServiceWorkerStorage::FindRegistrationForId(
...@@ -1185,7 +1172,7 @@ void ServiceWorkerStorage::DidReadInitialData( ...@@ -1185,7 +1172,7 @@ void ServiceWorkerStorage::DidReadInitialData(
pending_tasks_.clear(); pending_tasks_.clear();
} }
void ServiceWorkerStorage::DidFindRegistrationForClientUrl( void ServiceWorkerStorage::DidFindRegistration(
FindRegistrationCallback callback, FindRegistrationCallback callback,
const ServiceWorkerDatabase::RegistrationData& data, const ServiceWorkerDatabase::RegistrationData& data,
const ResourceList& resources, const ResourceList& resources,
...@@ -1202,34 +1189,6 @@ void ServiceWorkerStorage::DidFindRegistrationForClientUrl( ...@@ -1202,34 +1189,6 @@ void ServiceWorkerStorage::DidFindRegistrationForClientUrl(
scoped_refptr<ServiceWorkerRegistration>()); scoped_refptr<ServiceWorkerRegistration>());
} }
void ServiceWorkerStorage::DidFindRegistrationForScope(
const GURL& scope,
FindRegistrationCallback callback,
const ServiceWorkerDatabase::RegistrationData& data,
const ResourceList& resources,
ServiceWorkerDatabase::Status status) {
if (status == ServiceWorkerDatabase::STATUS_OK) {
ReturnFoundRegistration(std::move(callback), data, resources);
return;
}
if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
scoped_refptr<ServiceWorkerRegistration> installing_registration =
registry_->FindInstallingRegistrationForScope(scope);
blink::ServiceWorkerStatusCode installing_status =
installing_registration
? blink::ServiceWorkerStatusCode::kOk
: blink::ServiceWorkerStatusCode::kErrorNotFound;
std::move(callback).Run(installing_status,
std::move(installing_registration));
return;
}
ScheduleDeleteAndStartOver();
std::move(callback).Run(DatabaseStatusToStatusCode(status),
scoped_refptr<ServiceWorkerRegistration>());
}
void ServiceWorkerStorage::DidFindRegistrationForId( void ServiceWorkerStorage::DidFindRegistrationForId(
FindRegistrationCallback callback, FindRegistrationCallback callback,
const ServiceWorkerDatabase::RegistrationData& data, const ServiceWorkerDatabase::RegistrationData& data,
......
...@@ -385,14 +385,7 @@ class CONTENT_EXPORT ServiceWorkerStorage { ...@@ -385,14 +385,7 @@ class CONTENT_EXPORT ServiceWorkerStorage {
void LazyInitialize(base::OnceClosure callback); void LazyInitialize(base::OnceClosure callback);
void DidReadInitialData(std::unique_ptr<InitialData> data, void DidReadInitialData(std::unique_ptr<InitialData> data,
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
void DidFindRegistrationForClientUrl( void DidFindRegistration(FindRegistrationCallback callback,
FindRegistrationCallback callback,
const ServiceWorkerDatabase::RegistrationData& data,
const ResourceList& resources,
ServiceWorkerDatabase::Status status);
void DidFindRegistrationForScope(
const GURL& scope,
FindRegistrationCallback callback,
const ServiceWorkerDatabase::RegistrationData& data, const ServiceWorkerDatabase::RegistrationData& data,
const ResourceList& resources, const ResourceList& resources,
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
......
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