• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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_PUBLIC_BROWSER_DEVTOOLS_AGENT_HOST_H_
6 #define CONTENT_PUBLIC_BROWSER_DEVTOOLS_AGENT_HOST_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/basictypes.h"
12 #include "base/callback.h"
13 #include "base/memory/ref_counted.h"
14 #include "content/common/content_export.h"
15 #include "content/public/browser/devtools_agent_host_client.h"
16 #include "url/gurl.h"
17 
18 namespace content {
19 
20 class DevToolsExternalAgentProxyDelegate;
21 class WebContents;
22 
23 // Describes interface for managing devtools agents from browser process.
24 class CONTENT_EXPORT DevToolsAgentHost
25     : public base::RefCounted<DevToolsAgentHost> {
26  public:
27   enum Type {
28     // Agent host associated with WebContents.
29     TYPE_WEB_CONTENTS,
30 
31     // Agent host associated with shared worker.
32     TYPE_SHARED_WORKER,
33 
34     // Agent host associated with service worker.
35     TYPE_SERVICE_WORKER,
36 
37     // Agent host associated with DevToolsExternalAgentProxyDelegate.
38     TYPE_EXTERNAL,
39   };
40 
41   // Returns DevToolsAgentHost with a given |id| or NULL of it does not exist.
42   static scoped_refptr<DevToolsAgentHost> GetForId(const std::string& id);
43 
44   // Returns DevToolsAgentHost that can be used for inspecting |web_contents|.
45   // New DevToolsAgentHost will be created if it does not exist.
46   static scoped_refptr<DevToolsAgentHost> GetOrCreateFor(
47       WebContents* web_contents);
48 
49   // Returns true iff an instance of DevToolsAgentHost for the |web_contents|
50   // does exist.
51   static bool HasFor(WebContents* web_contents);
52 
53   // Returns DevToolsAgentHost that can be used for inspecting shared worker
54   // with given worker process host id and routing id.
55   static scoped_refptr<DevToolsAgentHost> GetForWorker(int worker_process_id,
56                                                        int worker_route_id);
57 
58   // Creates DevToolsAgentHost that communicates to the target by means of
59   // provided |delegate|. |delegate| ownership is passed to the created agent
60   // host.
61   static scoped_refptr<DevToolsAgentHost> Create(
62       DevToolsExternalAgentProxyDelegate* delegate);
63 
64   static bool IsDebuggerAttached(WebContents* web_contents);
65 
66   typedef std::vector<scoped_refptr<DevToolsAgentHost> > List;
67 
68   // Returns all possible DevToolsAgentHosts.
69   static List GetOrCreateAll();
70 
71   // Client attaches to this agent host to start debugging it.
72   virtual void AttachClient(DevToolsAgentHostClient* client) = 0;
73 
74   // Already attached client detaches from this agent host to stop debugging it.
75   virtual void DetachClient() = 0;
76 
77   // Returns true if there is a client attached.
78   virtual bool IsAttached() = 0;
79 
80   // Sends a message to the agent.
81   virtual void DispatchProtocolMessage(const std::string& message) = 0;
82 
83   // Starts inspecting element at position (|x|, |y|) in the specified page.
84   virtual void InspectElement(int x, int y) = 0;
85 
86   // Returns the unique id of the agent.
87   virtual std::string GetId() = 0;
88 
89   // Returns web contents instance for this host if any.
90   virtual WebContents* GetWebContents() = 0;
91 
92   // Temporarily detaches render view host from this host. Must be followed by
93   // a call to ConnectWebContents (may leak the host instance otherwise).
94   virtual void DisconnectWebContents() = 0;
95 
96   // Attaches render view host to this host.
97   virtual void ConnectWebContents(WebContents* web_contents) = 0;
98 
99   // Returns true if DevToolsAgentHost is for worker.
100   virtual bool IsWorker() const = 0;
101 
102   // Returns agent host type.
103   virtual Type GetType() = 0;
104 
105   // Returns agent host title.
106   virtual std::string GetTitle() = 0;
107 
108   // Returns url associated with agent host.
109   virtual GURL GetURL() = 0;
110 
111   // Activates agent host. Returns false if the operation failed.
112   virtual bool Activate() = 0;
113 
114   // Closes agent host. Returns false if the operation failed.
115   virtual bool Close() = 0;
116 
117   // Terminates all debugging sessions and detaches all clients.
118   static void DetachAllClients();
119 
120   typedef base::Callback<void(DevToolsAgentHost*, bool attached)>
121       AgentStateCallback;
122 
123   static void AddAgentStateCallback(const AgentStateCallback& callback);
124   static void RemoveAgentStateCallback(const AgentStateCallback& callback);
125 
126  protected:
127   friend class base::RefCounted<DevToolsAgentHost>;
~DevToolsAgentHost()128   virtual ~DevToolsAgentHost() {}
129 };
130 
131 }  // namespace content
132 
133 #endif  // CONTENT_PUBLIC_BROWSER_DEVTOOLS_AGENT_HOST_H_
134