| Index: content/browser/service_worker/service_worker_register_job.cc
|
| diff --git a/content/browser/service_worker/service_worker_register_job.cc b/content/browser/service_worker/service_worker_register_job.cc
|
| index 05e62bb48b35bd4e7fcbae95aba1ec5fe1abf118..0903cdb8f15ff818a3622e8e5dfdc70d6fae1236 100644
|
| --- a/content/browser/service_worker/service_worker_register_job.cc
|
| +++ b/content/browser/service_worker/service_worker_register_job.cc
|
| @@ -344,7 +344,9 @@ void ServiceWorkerRegisterJob::ActivateAndContinue() {
|
|
|
| // "5. Set serviceWorkerRegistration.activeWorker to activatingWorker."
|
| // "6. Set serviceWorkerRegistration.waitingWorker to null."
|
| + DisassociateVersionFromDocuments(context_, new_version());
|
| registration()->SetActiveVersion(new_version());
|
| + AssociateActiveVersionToDocuments(context_, new_version());
|
|
|
| // "7. Run the [[UpdateState]] algorithm passing registration.activeWorker and
|
| // "activating" as arguments."
|
| @@ -483,6 +485,26 @@ void ServiceWorkerRegisterJob::AssociateWaitingVersionToDocuments(
|
| }
|
|
|
| // static
|
| +void ServiceWorkerRegisterJob::AssociateActiveVersionToDocuments(
|
| + base::WeakPtr<ServiceWorkerContextCore> context,
|
| + ServiceWorkerVersion* version) {
|
| + DCHECK(context);
|
| + DCHECK(version);
|
| +
|
| + for (scoped_ptr<ServiceWorkerContextCore::ProviderHostIterator> it =
|
| + context->GetProviderHostIterator();
|
| + !it->IsAtEnd(); it->Advance()) {
|
| + ServiceWorkerProviderHost* host = it->GetProviderHost();
|
| + if (ServiceWorkerUtils::ScopeMatches(version->scope(),
|
| + host->document_url())) {
|
| + if (!host->CanAssociateVersion(version))
|
| + continue;
|
| + host->SetActiveVersion(version);
|
| + }
|
| + }
|
| +}
|
| +
|
| +// static
|
| void ServiceWorkerRegisterJob::DisassociateVersionFromDocuments(
|
| base::WeakPtr<ServiceWorkerContextCore> context,
|
| ServiceWorkerVersion* version) {
|
|
|