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_SHELL_BROWSER_SHELL_DEVTOOLS_FRONTEND_H_
6#define CONTENT_SHELL_BROWSER_SHELL_DEVTOOLS_FRONTEND_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "base/memory/ref_counted.h"
11#include "base/memory/scoped_ptr.h"
12#include "content/public/browser/devtools_agent_host.h"
13#include "content/public/browser/devtools_frontend_host.h"
14#include "content/public/browser/web_contents_observer.h"
15
16namespace content {
17
18GURL GetDevToolsPathAsURL(const std::string& settings,
19                          const std::string& frontend_url);
20
21class RenderViewHost;
22class Shell;
23class WebContents;
24
25class ShellDevToolsFrontend : public WebContentsObserver,
26                              public DevToolsFrontendHost::Delegate,
27                              public DevToolsAgentHostClient {
28 public:
29  static ShellDevToolsFrontend* Show(WebContents* inspected_contents);
30  static ShellDevToolsFrontend* Show(WebContents* inspected_contents,
31                                     const std::string& settings,
32                                     const std::string& frontend_url);
33  void Activate();
34  void Focus();
35  void InspectElementAt(int x, int y);
36  void Close();
37
38  Shell* frontend_shell() const { return frontend_shell_; }
39
40 private:
41  ShellDevToolsFrontend(Shell* frontend_shell, DevToolsAgentHost* agent_host);
42  virtual ~ShellDevToolsFrontend();
43
44  // WebContentsObserver overrides
45  virtual void RenderViewCreated(RenderViewHost* render_view_host) OVERRIDE;
46  virtual void DocumentOnLoadCompletedInMainFrame() OVERRIDE;
47  virtual void WebContentsDestroyed() OVERRIDE;
48  virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
49
50  // content::DevToolsFrontendHost::Delegate implementation.
51  virtual void HandleMessageFromDevToolsFrontend(
52      const std::string& message) OVERRIDE;
53  virtual void HandleMessageFromDevToolsFrontendToBackend(
54      const std::string& message) OVERRIDE;
55
56  // content::DevToolsAgentHostClient implementation.
57  virtual void DispatchProtocolMessage(
58      DevToolsAgentHost* agent_host, const std::string& message) OVERRIDE;
59  virtual void AgentHostClosed(
60      DevToolsAgentHost* agent_host, bool replaced) OVERRIDE;
61
62  Shell* frontend_shell_;
63  scoped_refptr<DevToolsAgentHost> agent_host_;
64  scoped_ptr<DevToolsFrontendHost> frontend_host_;
65
66  DISALLOW_COPY_AND_ASSIGN(ShellDevToolsFrontend);
67};
68
69}  // namespace content
70
71#endif  // CONTENT_SHELL_BROWSER_SHELL_DEVTOOLS_FRONTEND_H_
72