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

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

Issue 2638313002: Manage ServiceWorkerDispatcherHost in ServiceWorkerContextCore (Closed)
Patch Set: Fix an include guard Created 3 years, 10 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_context_core.cc
diff --git a/content/browser/service_worker/service_worker_context_core.cc b/content/browser/service_worker/service_worker_context_core.cc
index 55d93d46e84a4443032afb878b5ebf51234c05c7..773d65b38ac38579cfb316b8dbe9b7cc8f6d6968 100644
--- a/content/browser/service_worker/service_worker_context_core.cc
+++ b/content/browser/service_worker/service_worker_context_core.cc
@@ -24,6 +24,7 @@
#include "content/browser/service_worker/service_worker_context_observer.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/service_worker/service_worker_database_task_manager.h"
+#include "content/browser/service_worker/service_worker_dispatcher_host.h"
#include "content/browser/service_worker/service_worker_info.h"
#include "content/browser/service_worker/service_worker_job_coordinator.h"
#include "content/browser/service_worker/service_worker_process_manager.h"
@@ -220,8 +221,10 @@ ServiceWorkerContextCore::ServiceWorkerContextCore(
base::ObserverListThreadSafe<ServiceWorkerContextObserver>* observer_list,
ServiceWorkerContextWrapper* wrapper)
: wrapper_(wrapper),
- providers_(new ProcessToProviderMap),
- provider_by_uuid_(new ProviderByClientUUIDMap),
+ dispatcher_hosts_(
+ base::MakeUnique<IDMap<ServiceWorkerDispatcherHost*>>()),
+ providers_(base::MakeUnique<ProcessToProviderMap>()),
+ provider_by_uuid_(base::MakeUnique<ProviderByClientUUIDMap>()),
force_update_on_page_load_(false),
next_handle_id_(0),
next_registration_handle_id_(0),
@@ -241,6 +244,7 @@ ServiceWorkerContextCore::ServiceWorkerContextCore(
ServiceWorkerContextCore* old_context,
ServiceWorkerContextWrapper* wrapper)
: wrapper_(wrapper),
+ dispatcher_hosts_(old_context->dispatcher_hosts_.release()),
dcheng 2017/02/14 08:47:46 Nit: std::move instead of release()
shimazu 2017/02/15 02:24:18 Done.
providers_(old_context->providers_.release()),
provider_by_uuid_(old_context->provider_by_uuid_.release()),
next_handle_id_(old_context->next_handle_id_),
@@ -268,12 +272,23 @@ ServiceWorkerContextCore::~ServiceWorkerContextCore() {
weak_factory_.InvalidateWeakPtrs();
}
-ServiceWorkerProviderHost* ServiceWorkerContextCore::GetProviderHost(
- int process_id, int provider_id) {
- ProviderMap* map = GetProviderMapForProcess(process_id);
- if (!map)
- return NULL;
- return map->Lookup(provider_id);
+void ServiceWorkerContextCore::AddDispatcherHost(
+ int process_id,
+ content::ServiceWorkerDispatcherHost* dispatcher_host) {
+ DCHECK(!dispatcher_hosts_->Lookup(process_id));
+ dispatcher_hosts_->AddWithID(dispatcher_host, process_id);
dcheng 2017/02/14 08:47:46 I wonder: do we need to use IDMap if we always hav
shimazu 2017/02/15 02:24:18 I assume it's just historical thing. Updated. I'll
+}
+
+ServiceWorkerDispatcherHost* ServiceWorkerContextCore::GetDispatcherHost(
+ int process_id) {
+ return dispatcher_hosts_->Lookup(process_id);
+}
+
+void ServiceWorkerContextCore::RemoveDispatcherHost(int process_id) {
+ DCHECK(dispatcher_hosts_->Lookup(process_id));
+ RemoveAllProviderHostsForProcess(process_id);
+ embedded_worker_registry_->RemoveProcess(process_id);
+ dispatcher_hosts_->Remove(process_id);
}
void ServiceWorkerContextCore::AddProviderHost(
@@ -288,6 +303,15 @@ void ServiceWorkerContextCore::AddProviderHost(
map->AddWithID(std::move(host), provider_id);
}
+ServiceWorkerProviderHost* ServiceWorkerContextCore::GetProviderHost(
+ int process_id,
+ int provider_id) {
+ ProviderMap* map = GetProviderMapForProcess(process_id);
+ if (!map)
+ return nullptr;
+ return map->Lookup(provider_id);
+}
+
void ServiceWorkerContextCore::RemoveProviderHost(
int process_id, int provider_id) {
ProviderMap* map = GetProviderMapForProcess(process_id);
@@ -505,7 +529,7 @@ void ServiceWorkerContextCore::UnregistrationComplete(
ServiceWorkerRegistration* ServiceWorkerContextCore::GetLiveRegistration(
int64_t id) {
RegistrationsMap::iterator it = live_registrations_.find(id);
- return (it != live_registrations_.end()) ? it->second : NULL;
+ return (it != live_registrations_.end()) ? it->second : nullptr;
}
void ServiceWorkerContextCore::AddLiveRegistration(
@@ -527,7 +551,7 @@ void ServiceWorkerContextCore::RemoveLiveRegistration(int64_t id) {
ServiceWorkerVersion* ServiceWorkerContextCore::GetLiveVersion(int64_t id) {
VersionMap::iterator it = live_versions_.find(id);
- return (it != live_versions_.end()) ? it->second : NULL;
+ return (it != live_versions_.end()) ? it->second : nullptr;
}
// PlzNavigate
@@ -636,14 +660,7 @@ ServiceWorkerContextCore::TransferProviderHostOut(int process_id,
ProviderMap* map = GetProviderMapForProcess(process_id);
ServiceWorkerProviderHost* transferee = map->Lookup(provider_id);
std::unique_ptr<ServiceWorkerProviderHost> replacement =
- base::MakeUnique<ServiceWorkerProviderHost>(
- process_id, transferee->frame_id(), provider_id,
- transferee->provider_type(),
- transferee->is_parent_frame_secure()
- ? ServiceWorkerProviderHost::FrameSecurityLevel::SECURE
- : ServiceWorkerProviderHost::FrameSecurityLevel::INSECURE,
- AsWeakPtr(), transferee->dispatcher_host());
- transferee->PrepareForCrossSiteTransfer();
+ transferee->PrepareForCrossSiteTransfer();
return map->Replace(provider_id, std::move(replacement));
}

Powered by Google App Engine
This is Rietveld 408576698