1// Copyright 2014 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_BROWSER_DEVTOOLS_EMBEDDED_WORKER_DEVTOOLS_AGENT_HOST_H_
6#define CONTENT_BROWSER_DEVTOOLS_EMBEDDED_WORKER_DEVTOOLS_AGENT_HOST_H_
7
8#include "content/browser/devtools/embedded_worker_devtools_manager.h"
9#include "content/browser/devtools/ipc_devtools_agent_host.h"
10#include "ipc/ipc_listener.h"
11
12namespace content {
13
14class SharedWorkerInstance;
15
16class EmbeddedWorkerDevToolsAgentHost : public IPCDevToolsAgentHost,
17                                        public IPC::Listener {
18 public:
19  typedef EmbeddedWorkerDevToolsManager::WorkerId WorkerId;
20  typedef EmbeddedWorkerDevToolsManager::ServiceWorkerIdentifier
21      ServiceWorkerIdentifier;
22
23  EmbeddedWorkerDevToolsAgentHost(WorkerId worker_id,
24                                  const SharedWorkerInstance& shared_worker);
25
26  EmbeddedWorkerDevToolsAgentHost(WorkerId worker_id,
27                                  const ServiceWorkerIdentifier& service_worker,
28                                  bool debug_service_worker_on_start);
29
30  // DevToolsAgentHost override.
31  virtual bool IsWorker() const OVERRIDE;
32  virtual Type GetType() OVERRIDE;
33  virtual std::string GetTitle() OVERRIDE;
34  virtual GURL GetURL() OVERRIDE;
35  virtual bool Activate() OVERRIDE;
36  virtual bool Close() OVERRIDE;
37
38  // IPCDevToolsAgentHost implementation.
39  virtual void SendMessageToAgent(IPC::Message* message) OVERRIDE;
40  virtual void Attach() OVERRIDE;
41  virtual void OnClientAttached() OVERRIDE {}
42  virtual void OnClientDetached() OVERRIDE;
43
44  // IPC::Listener implementation.
45  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
46
47  void WorkerReadyForInspection();
48  void WorkerContextStarted();
49  void WorkerRestarted(WorkerId worker_id);
50  void WorkerDestroyed();
51  bool Matches(const SharedWorkerInstance& other);
52  bool Matches(const ServiceWorkerIdentifier& other);
53  bool IsTerminated();
54
55 private:
56  friend class EmbeddedWorkerDevToolsManagerTest;
57
58  virtual ~EmbeddedWorkerDevToolsAgentHost();
59
60  enum WorkerState {
61    WORKER_UNINSPECTED,
62    WORKER_INSPECTED,
63    WORKER_TERMINATED,
64    WORKER_PAUSED_FOR_DEBUG_ON_START,
65    WORKER_PAUSED_FOR_REATTACH,
66  };
67
68  void AttachToWorker();
69  void DetachFromWorker();
70  void WorkerCreated();
71  void OnDispatchOnInspectorFrontend(const std::string& message);
72  void OnSaveAgentRuntimeState(const std::string& state);
73
74  scoped_ptr<SharedWorkerInstance> shared_worker_;
75  scoped_ptr<ServiceWorkerIdentifier> service_worker_;
76  WorkerState state_;
77  WorkerId worker_id_;
78  std::string saved_agent_state_;
79  DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerDevToolsAgentHost);
80};
81
82}  // namespace content
83
84#endif  // CONTENT_BROWSER_DEVTOOLS_EMBEDDED_WORKER_DEVTOOLS_AGENT_HOST_H_
85