Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1225)

Unified Diff: content/browser/service_worker/service_worker_provider_host.cc

Issue 417043006: ServiceWorker: Make SWProviderHost listen to SWRegistration (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: clean up Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..34cadc99ea5551ad2dd9ac7bda9287b847e91332 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,28 @@ bool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) {
return true;
}
+void ServiceWorkerProviderHost::AssociateRegistration(
+ ServiceWorkerRegistration* registration) {
+ DCHECK(CanAssociateRegistration(registration));
+ 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);
michaeln 2014/08/07 20:33:07 i think we should clear the controllingVersion her
nhiroki 2014/08/08 06:31:45 Done.
+}
+
scoped_ptr<ServiceWorkerRequestHandler>
ServiceWorkerProviderHost::CreateRequestHandler(
ResourceType resource_type,
@@ -201,6 +244,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) {

Powered by Google App Engine
This is Rietveld 408576698