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

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

Issue 443593002: ServiceWorker: Move worker candidate process knowledge to ServiceWorkerProcessManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 bd0c5ea3197e310de114dc2618f42abc0db0618d..4cc054a7f021f2b7d42d0c12ac323b71a61fd55a 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -37,14 +37,14 @@ ServiceWorkerProviderHost::~ServiceWorkerProviderHost() {
document_url_ = GURL();
if (controlling_version_.get())
controlling_version_->RemoveControllee(this);
- if (active_version_.get())
- active_version_->RemovePotentialControllee(this);
- if (waiting_version_.get())
- waiting_version_->RemovePotentialControllee(this);
- if (installing_version_.get())
- installing_version_->RemovePotentialControllee(this);
- if (associated_registration_.get())
+ if (associated_registration_.get()) {
+ DecreaseProcessReference(associated_registration_->pattern());
associated_registration_->RemoveListener(this);
+ }
+ for (std::vector<GURL>::iterator it = associated_patterns_.begin();
+ it != associated_patterns_.end(); ++it) {
+ DecreaseProcessReference(*it);
+ }
}
void ServiceWorkerProviderHost::OnVersionAttributesChanged(
@@ -52,9 +52,9 @@ void ServiceWorkerProviderHost::OnVersionAttributesChanged(
ChangedVersionAttributesMask changed_mask,
const ServiceWorkerRegistrationInfo& info) {
DCHECK_EQ(associated_registration_.get(), registration);
- UpdatePotentialControllees(registration->installing_version(),
- registration->waiting_version(),
- registration->active_version());
+ installing_version_ = registration->installing_version();
+ waiting_version_ = registration->waiting_version();
+ active_version_ = registration->active_version();
}
void ServiceWorkerProviderHost::OnRegistrationFailed(
@@ -68,38 +68,6 @@ void ServiceWorkerProviderHost::SetDocumentUrl(const GURL& url) {
document_url_ = url;
}
-void ServiceWorkerProviderHost::UpdatePotentialControllees(
- ServiceWorkerVersion* installing_version,
- ServiceWorkerVersion* waiting_version,
- ServiceWorkerVersion* active_version) {
- if (installing_version != installing_version_.get()) {
- scoped_refptr<ServiceWorkerVersion> previous_version = installing_version_;
- if (previous_version.get())
- previous_version->RemovePotentialControllee(this);
- if (installing_version)
- installing_version->AddPotentialControllee(this);
- installing_version_ = installing_version;
- }
-
- if (waiting_version != waiting_version_.get()) {
- scoped_refptr<ServiceWorkerVersion> previous_version = waiting_version_;
- if (previous_version.get())
- previous_version->RemovePotentialControllee(this);
- if (waiting_version)
- waiting_version->AddPotentialControllee(this);
- waiting_version_ = waiting_version;
- }
-
- if (active_version != active_version_.get()) {
- scoped_refptr<ServiceWorkerVersion> previous_version = active_version_;
- if (previous_version.get())
- previous_version->RemovePotentialControllee(this);
- if (active_version)
- active_version->AddPotentialControllee(this);
- active_version_ = active_version;
- }
-}
-
void ServiceWorkerProviderHost::SetControllerVersionAttribute(
ServiceWorkerVersion* version) {
if (version == controlling_version_.get())
@@ -144,20 +112,27 @@ bool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) {
void ServiceWorkerProviderHost::AssociateRegistration(
ServiceWorkerRegistration* registration) {
DCHECK(CanAssociateRegistration(registration));
+ if (associated_registration_.get())
+ DecreaseProcessReference(associated_registration_->pattern());
+ IncreaseProcessReference(registration->pattern());
+
associated_registration_ = registration;
registration->AddListener(this);
- UpdatePotentialControllees(registration->installing_version(),
- registration->waiting_version(),
- registration->active_version());
+ installing_version_ = registration->installing_version();
+ waiting_version_ = registration->waiting_version();
+ active_version_ = registration->active_version();
SetControllerVersionAttribute(registration->active_version());
}
void ServiceWorkerProviderHost::UnassociateRegistration() {
if (!associated_registration_.get())
return;
+ DecreaseProcessReference(associated_registration_->pattern());
associated_registration_->RemoveListener(this);
associated_registration_ = NULL;
- UpdatePotentialControllees(NULL, NULL, NULL);
+ installing_version_ = NULL;
+ waiting_version_ = NULL;
+ active_version_ = NULL;
SetControllerVersionAttribute(NULL);
}
@@ -210,6 +185,12 @@ void ServiceWorkerProviderHost::PostMessage(
new_routing_ids));
}
+void ServiceWorkerProviderHost::AddScopedProcessReferenceToPattern(
+ const GURL& pattern) {
+ associated_patterns_.push_back(pattern);
+ IncreaseProcessReference(pattern);
+}
+
ServiceWorkerObjectInfo ServiceWorkerProviderHost::CreateHandleAndPass(
ServiceWorkerVersion* version) {
ServiceWorkerObjectInfo info;
@@ -226,6 +207,22 @@ ServiceWorkerObjectInfo ServiceWorkerProviderHost::CreateHandleAndPass(
return info;
}
+void ServiceWorkerProviderHost::IncreaseProcessReference(
+ const GURL& pattern) {
+ if (context_ && context_->process_manager()) {
+ context_->process_manager()->AddProcessReferenceToPattern(
+ pattern, process_id_);
+ }
+}
+
+void ServiceWorkerProviderHost::DecreaseProcessReference(
+ const GURL& pattern) {
+ if (context_ && context_->process_manager()) {
+ context_->process_manager()->RemoveProcessReferenceFromPattern(
+ pattern, process_id_);
+ }
+}
+
bool ServiceWorkerProviderHost::IsContextAlive() {
return context_ != NULL;
}

Powered by Google App Engine
This is Rietveld 408576698