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_PUBLIC_BROWSER_DEVTOOLS_FRONTEND_HOST_H_
6#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_FRONTEND_HOST_H_
7
8#include <string>
9
10#include "content/common/content_export.h"
11
12namespace content {
13
14class RenderViewHost;
15
16// This class dispatches messages between DevTools frontend and Delegate
17// which is implemented by the embedder.
18// This allows us to avoid exposing DevTools frontend messages through
19// the content public API.
20class DevToolsFrontendHost {
21 public:
22  // Delegate actually handles messages from frontend.
23  class Delegate {
24   public:
25    virtual ~Delegate() {}
26
27    // Message is coming from frontend to the embedder.
28    virtual void HandleMessageFromDevToolsFrontend(
29        const std::string& message) = 0;
30
31    // Message is coming from frontend to the backend.
32    // TODO(dgozman): remove this by making one of the possible messages
33    // passed via the method above.
34    virtual void HandleMessageFromDevToolsFrontendToBackend(
35        const std::string& message) = 0;
36  };
37
38  // Creates a new DevToolsFrontendHost for RenderViewHost where DevTools
39  // frontend is loaded.
40  CONTENT_EXPORT static DevToolsFrontendHost* Create(
41      RenderViewHost* frontend_rvh, Delegate* delegate);
42
43  CONTENT_EXPORT virtual ~DevToolsFrontendHost() {}
44};
45
46}  // namespace content
47
48#endif  // CONTENT_PUBLIC_BROWSER_DEVTOOLS_FRONTEND_HOST_H_
49