1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_RENDERER_SERVICE_WORKER_EMBEDDED_WORKER_DISPATCHER_H_
6#define CONTENT_RENDERER_SERVICE_WORKER_EMBEDDED_WORKER_DISPATCHER_H_
7
8#include "base/basictypes.h"
9#include "base/id_map.h"
10#include "base/memory/weak_ptr.h"
11#include "ipc/ipc_listener.h"
12
13struct EmbeddedWorkerMsg_StartWorker_Params;
14class GURL;
15
16namespace WebKit {
17class WebEmbeddedWorker;
18}
19
20namespace content {
21
22// A tiny dispatcher which handles embedded worker start/stop messages.
23class EmbeddedWorkerDispatcher : public IPC::Listener {
24 public:
25  EmbeddedWorkerDispatcher();
26  virtual ~EmbeddedWorkerDispatcher();
27
28  // IPC::Listener overrides.
29  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
30
31  void WorkerContextDestroyed(int embedded_worker_id);
32
33 private:
34  class WorkerWrapper;
35
36  void OnStartWorker(const EmbeddedWorkerMsg_StartWorker_Params& params);
37  void OnStopWorker(int embedded_worker_id);
38  void OnResumeAfterDownload(int embedded_worker_id);
39
40  IDMap<WorkerWrapper, IDMapOwnPointer> workers_;
41  base::WeakPtrFactory<EmbeddedWorkerDispatcher> weak_factory_;
42
43  DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerDispatcher);
44};
45
46}  // namespace content
47
48#endif  // CONTENT_RENDERER_SERVICE_WORKER_EMBEDDED_WORKER_DISPATCHER_H_
49