| Index: content/browser/service_worker/embedded_worker_registry.cc
|
| diff --git a/content/browser/service_worker/embedded_worker_registry.cc b/content/browser/service_worker/embedded_worker_registry.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..35f41f7b06b468b340aae401ddb737cf03cd7629
|
| --- /dev/null
|
| +++ b/content/browser/service_worker/embedded_worker_registry.cc
|
| @@ -0,0 +1,68 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/browser/service_worker/embedded_worker_registry.h"
|
| +
|
| +#include "base/stl_util.h"
|
| +#include "content/browser/service_worker/embedded_worker_instance.h"
|
| +#include "content/browser/service_worker/service_worker_context_core.h"
|
| +#include "content/common/service_worker_messages.h"
|
| +#include "ipc/ipc_message.h"
|
| +#include "ipc/ipc_sender.h"
|
| +
|
| +namespace content {
|
| +
|
| +EmbeddedWorkerRegistry::EmbeddedWorkerRegistry(
|
| + base::WeakPtr<ServiceWorkerContextCore> context)
|
| + : context_(context),
|
| + next_embedded_worker_id_(0) {}
|
| +
|
| +scoped_ptr<EmbeddedWorkerInstance> EmbeddedWorkerRegistry::CreateWorker() {
|
| + return scoped_ptr<EmbeddedWorkerInstance>(
|
| + new EmbeddedWorkerInstance(this, next_embedded_worker_id_++));
|
| +}
|
| +
|
| +void EmbeddedWorkerRegistry::RemoveWorker(int embedded_worker_id) {
|
| + DCHECK(ContainsKey(worker_map_, embedded_worker_id));
|
| + worker_map_.erase(embedded_worker_id);
|
| +}
|
| +
|
| +bool EmbeddedWorkerRegistry::StartWorker(
|
| + int process_id,
|
| + int embedded_worker_id,
|
| + int64 service_worker_version_id,
|
| + const GURL& script_url) {
|
| + return Send(process_id,
|
| + new ServiceWorkerMsg_StartWorker(embedded_worker_id,
|
| + service_worker_version_id,
|
| + script_url));
|
| +}
|
| +
|
| +bool EmbeddedWorkerRegistry::StopWorker(int process_id,
|
| + int embedded_worker_id) {
|
| + return Send(process_id,
|
| + new ServiceWorkerMsg_TerminateWorker(embedded_worker_id));
|
| +}
|
| +
|
| +void EmbeddedWorkerRegistry::AddChildProcessSender(
|
| + int process_id, IPC::Sender* sender) {
|
| + process_sender_map_[process_id] = sender;
|
| +}
|
| +
|
| +void EmbeddedWorkerRegistry::RemoveChildProcessSender(int process_id) {
|
| + process_sender_map_.erase(process_id);
|
| +}
|
| +
|
| +EmbeddedWorkerRegistry::~EmbeddedWorkerRegistry() {}
|
| +
|
| +bool EmbeddedWorkerRegistry::Send(int process_id, IPC::Message* message) {
|
| + if (!context_)
|
| + return false;
|
| + ProcessToSenderMap::iterator found = process_sender_map_.find(process_id);
|
| + if (found == process_sender_map_.end())
|
| + return false;
|
| + return found->second->Send(message);
|
| +}
|
| +
|
| +} // namespace content
|
|
|