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

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

Issue 224733014: Introduce ServiceWorkerHandle for tracking WebServiceWorkerImpl reference (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sigh, rebased Created 6 years, 8 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 ed23da2e205619250f8654a737910d4c3206c90e..0102414347efa1bc5bdb53d7137494376659eb22 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -6,6 +6,8 @@
#include "base/stl_util.h"
#include "content/browser/service_worker/service_worker_context_core.h"
+#include "content/browser/service_worker/service_worker_dispatcher_host.h"
+#include "content/browser/service_worker/service_worker_handle.h"
#include "content/browser/service_worker/service_worker_utils.h"
#include "content/browser/service_worker/service_worker_version.h"
@@ -13,10 +15,12 @@ namespace content {
ServiceWorkerProviderHost::ServiceWorkerProviderHost(
int process_id, int provider_id,
- base::WeakPtr<ServiceWorkerContextCore> context)
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ ServiceWorkerDispatcherHost* dispatcher_host)
: process_id_(process_id),
provider_id_(provider_id),
- context_(context) {
+ context_(context),
+ dispatcher_host_(dispatcher_host) {
}
ServiceWorkerProviderHost::~ServiceWorkerProviderHost() {
@@ -36,10 +40,22 @@ void ServiceWorkerProviderHost::RemoveScriptClient(int thread_id) {
void ServiceWorkerProviderHost::AssociateVersion(
ServiceWorkerVersion* version) {
if (associated_version())
- associated_version_->RemoveProcessToWorker(process_id_);
+ associated_version_->RemoveProcessFromWorker(process_id_);
associated_version_ = version;
if (version)
version->AddProcessToWorker(process_id_);
+
+ if (!dispatcher_host_)
+ return; // Could be NULL in some tests.
+
+ for (std::set<int>::iterator it = script_client_thread_ids_.begin();
+ it != script_client_thread_ids_.end();
+ ++it) {
+ dispatcher_host_->RegisterServiceWorkerHandle(
+ ServiceWorkerHandle::Create(context_, dispatcher_host_, *it, version));
+ }
+ // TODO(kinuko): change this method into two for .active and .pending,
+ // and dispatch activechange/pendingchange event to the script clients here.
}
bool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) {

Powered by Google App Engine
This is Rietveld 408576698