Chromium Code Reviews| Index: content/browser/service_worker/service_worker_provider_host.cc |
| diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc |
| index 85ea2cae79391c90355ff0bb6b2fe5dfe5b4680a..4c1ee0fe2017652f0e9f8b4fb711100851c0751b 100644 |
| --- a/content/browser/service_worker/service_worker_provider_host.cc |
| +++ b/content/browser/service_worker/service_worker_provider_host.cc |
| @@ -41,6 +41,27 @@ ServiceWorkerProviderHost::~ServiceWorkerProviderHost() { |
| waiting_version_->RemovePotentialControllee(this); |
| if (installing_version_) |
| installing_version_->RemovePotentialControllee(this); |
| + if (associated_registration_) |
| + associated_registration_->RemoveListener(this); |
| +} |
| + |
| +void ServiceWorkerProviderHost::OnVersionAttributesChanged( |
| + ServiceWorkerRegistration* registration, |
| + ChangedVersionAttributesMask changed_mask, |
| + const ServiceWorkerRegistrationInfo& info) { |
| + if (changed_mask.installing_changed()) |
| + SetInstallingVersion(registration->installing_version()); |
| + if (changed_mask.waiting_changed()) |
| + SetWaitingVersion(registration->waiting_version()); |
| + if (changed_mask.active_changed()) |
| + SetActiveVersion(registration->active_version()); |
| +} |
| + |
| +void ServiceWorkerProviderHost::OnRegistrationFailed( |
| + ServiceWorkerRegistration* registration) { |
| + DCHECK(associated_registration_); |
| + DCHECK_EQ(registration->id(), associated_registration_->id()); |
| + UnassociateRegistration(); |
| } |
| void ServiceWorkerProviderHost::SetDocumentUrl(const GURL& url) { |
| @@ -159,6 +180,30 @@ bool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) { |
| return true; |
| } |
| +void ServiceWorkerProviderHost::AssociateRegistration( |
| + ServiceWorkerRegistration* registration) { |
| + DCHECK(CanAssociateRegistration(registration)); |
| + if (associated_registration_) |
|
falken
2014/08/07 03:59:26
Now this can't happen, CanAssociateRegistration wo
nhiroki
2014/08/07 04:10:42
Done. Thanks!
|
| + associated_registration_->RemoveListener(this); |
| + associated_registration_ = registration; |
| + |
| + registration->AddListener(this); |
| + SetActiveVersion(registration->active_version()); |
| + SetInstallingVersion(registration->installing_version()); |
| + SetWaitingVersion(registration->waiting_version()); |
| +} |
| + |
| +void ServiceWorkerProviderHost::UnassociateRegistration() { |
| + if (!associated_registration_) |
| + return; |
| + associated_registration_->RemoveListener(this); |
| + associated_registration_ = NULL; |
| + |
| + SetActiveVersion(NULL); |
| + SetInstallingVersion(NULL); |
| + SetWaitingVersion(NULL); |
| +} |
| + |
| scoped_ptr<ServiceWorkerRequestHandler> |
| ServiceWorkerProviderHost::CreateRequestHandler( |
| ResourceType resource_type, |
| @@ -201,6 +246,17 @@ bool ServiceWorkerProviderHost::CanAssociateVersion( |
| version->registration_id(); |
| } |
| +bool ServiceWorkerProviderHost::CanAssociateRegistration( |
| + ServiceWorkerRegistration* registration) { |
| + if (!context_) |
| + return false; |
| + if (running_hosted_version_) |
| + return false; |
| + if (!registration || associated_registration_) |
| + return false; |
| + return true; |
| +} |
| + |
| void ServiceWorkerProviderHost::PostMessage( |
| const base::string16& message, |
| const std::vector<int>& sent_message_port_ids) { |