Chromium Code Reviews| Index: content/browser/service_worker/service_worker_registration.cc |
| diff --git a/content/browser/service_worker/service_worker_registration.cc b/content/browser/service_worker/service_worker_registration.cc |
| index a4fac5c65873a9c9afe96c3b0e8b6fa92fe493b0..4301c85151ad223b8d17e43bfdad8ea3329b54ab 100644 |
| --- a/content/browser/service_worker/service_worker_registration.cc |
| +++ b/content/browser/service_worker/service_worker_registration.cc |
| @@ -161,6 +161,40 @@ void ServiceWorkerRegistration::ActivateWaitingVersionWhenReady() { |
| ActivateWaitingVersion(); |
| } |
| +void ServiceWorkerRegistration::ClaimClients() { |
| + DCHECK(context_); |
| + DCHECK(active_version()); |
| + std::vector<ServiceWorkerRegistrationInfo> registration_infos = |
| + context_->GetAllLiveRegistrationInfo(); |
| + for (scoped_ptr<ServiceWorkerContextCore::ProviderHostIterator> it = |
| + context_->GetProviderHostIterator(); |
| + !it->IsAtEnd(); it->Advance()) { |
| + ServiceWorkerProviderHost* host = it->GetProviderHost(); |
| + if (host->document_url().GetOrigin() != pattern_.GetOrigin()) |
| + continue; |
| + |
| + LongestScopeMatcher matcher(host->document_url()); |
| + int64 match = kInvalidServiceWorkerRegistrationId; |
| + for (std::vector<ServiceWorkerRegistrationInfo>::iterator it = |
|
michaeln
2015/01/28 00:55:13
This inner loop is not so nice. I think we can avo
xiang
2015/01/28 05:38:35
Yes, move out the inner loop is more cleaner.
How
falken
2015/01/28 08:59:49
I think you're right, "/foob" shouldn't claim the
michaeln
2015/01/28 21:11:14
Thats too bad because it adds code complexity and
xiang
2015/01/29 02:58:37
I thought about FindRegistrationForDocument() when
falken
2015/01/29 03:28:50
I suspected this might be the case too. Michael, w
|
| + registration_infos.begin(); |
| + it != registration_infos.end(); ++it) { |
| + ServiceWorkerRegistration* registration = |
| + context_->GetLiveRegistration(it->registration_id); |
| + DCHECK(registration); |
| + if (registration->is_uninstalled()) |
| + continue; |
| + if (matcher.MatchLongest(it->pattern)) |
| + match = it->registration_id; |
| + } |
| + if (match != registration_id_) |
| + continue; |
| + if (host->controlling_version() == active_version()) |
| + continue; |
| + |
| + host->SetController(this); |
| + } |
| +} |
| + |
| void ServiceWorkerRegistration::ClearWhenReady() { |
| DCHECK(context_); |
| if (is_uninstalling_) |