blob: 10ec64a83526eecb4113ce82af4e8eb57b484488 [file] [log] [blame]
Dmitry Gozmanb27efd1e2018-10-01 22:08:111// Copyright 2018 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_DEVTOOLS_RENDERER_CHANNEL_H_
6#define CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_RENDERER_CHANNEL_H_
7
Dmitry Gozmanbe2073b2018-10-29 22:15:468#include "base/containers/flat_set.h"
Dmitry Gozmanb27efd1e2018-10-01 22:08:119#include "base/macros.h"
Dmitry Gozmanbe2073b2018-10-29 22:15:4610#include "base/memory/weak_ptr.h"
Dmitry Gozmanb27efd1e2018-10-01 22:08:1111#include "content/common/content_export.h"
Dmitry Gozman6adf95b2018-10-10 22:12:1912#include "mojo/public/cpp/bindings/associated_binding.h"
13#include "mojo/public/cpp/bindings/binding.h"
Dmitry Gozmanb27efd1e2018-10-01 22:08:1114#include "third_party/blink/public/web/devtools_agent.mojom.h"
15
16namespace gfx {
17class Point;
18}
19
20namespace content {
21
22class DevToolsAgentHostImpl;
23class DevToolsSession;
24class RenderFrameHostImpl;
25
Dmitry Gozmanbe2073b2018-10-29 22:15:4626namespace protocol {
27class TargetAutoAttacher;
28}
29
Dmitry Gozmanb27efd1e2018-10-01 22:08:1130// This class encapsulates a connection to blink::mojom::DevToolsAgent
Dmitry Gozmanbe2073b2018-10-29 22:15:4631// in the renderer (either RenderFrame or some kind of worker).
32// When the renderer changes (e.g. worker restarts or a new RenderFrame
33// is used for the frame), different DevToolsAgentHostImpl subclasses
Dmitry Gozmanb27efd1e2018-10-01 22:08:1134// retrieve a new blink::mojom::DevToolsAgent pointer, and this channel
35// starts using it for all existing and future sessions.
Dmitry Gozman6adf95b2018-10-10 22:12:1936class CONTENT_EXPORT DevToolsRendererChannel
37 : public blink::mojom::DevToolsAgentHost {
Dmitry Gozmanb27efd1e2018-10-01 22:08:1138 public:
39 explicit DevToolsRendererChannel(DevToolsAgentHostImpl* owner);
Dmitry Gozman6adf95b2018-10-10 22:12:1940 ~DevToolsRendererChannel() override;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1141
Dmitry Gozmanbe2073b2018-10-29 22:15:4642 // Dedicated workers use non-associated version,
43 // while frames and other workers use DevToolsAgent associated
44 // with respective control interfraces. See mojom for details.
45 void SetRenderer(blink::mojom::DevToolsAgentPtr agent_ptr,
46 blink::mojom::DevToolsAgentHostRequest host_request,
47 int process_id,
48 RenderFrameHostImpl* frame_host);
49 void SetRendererAssociated(
Dmitry Gozman6adf95b2018-10-10 22:12:1950 blink::mojom::DevToolsAgentAssociatedPtr agent_ptr,
51 blink::mojom::DevToolsAgentHostAssociatedRequest host_request,
52 int process_id,
53 RenderFrameHostImpl* frame_host);
Dmitry Gozmanb27efd1e2018-10-01 22:08:1154 void AttachSession(DevToolsSession* session);
55 void InspectElement(const gfx::Point& point);
56
Dmitry Gozmanbe2073b2018-10-29 22:15:4657 void SetReportChildWorkers(protocol::TargetAutoAttacher* attacher,
58 bool report,
59 bool wait_for_debugger);
60
Dmitry Gozmanb27efd1e2018-10-01 22:08:1161 private:
Dmitry Gozmanbe2073b2018-10-29 22:15:4662 // blink::mojom::DevToolsAgentHost implementation.
63 void ChildWorkerCreated(blink::mojom::DevToolsAgentPtr worker_devtools_agent,
64 blink::mojom::DevToolsAgentHostRequest host_request,
65 const GURL& url,
66 const base::UnguessableToken& devtools_worker_token,
67 bool waiting_for_debugger) override;
68 void ChildWorkerDestroyed(DevToolsAgentHostImpl*);
69
70 void CleanupConnection();
71 void SetRendererInternal(blink::mojom::DevToolsAgent* agent,
72 int process_id,
73 RenderFrameHostImpl* frame_host);
74
Dmitry Gozmanb27efd1e2018-10-01 22:08:1175 DevToolsAgentHostImpl* owner_;
Dmitry Gozmanbe2073b2018-10-29 22:15:4676 mojo::Binding<blink::mojom::DevToolsAgentHost> binding_;
77 mojo::AssociatedBinding<blink::mojom::DevToolsAgentHost> associated_binding_;
78 blink::mojom::DevToolsAgentPtr agent_ptr_;
79 blink::mojom::DevToolsAgentAssociatedPtr associated_agent_ptr_;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1180 int process_id_;
81 RenderFrameHostImpl* frame_host_ = nullptr;
Dmitry Gozmanbe2073b2018-10-29 22:15:4682 base::flat_set<protocol::TargetAutoAttacher*> report_attachers_;
83 base::flat_set<protocol::TargetAutoAttacher*> wait_for_debugger_attachers_;
84 base::flat_set<DevToolsAgentHostImpl*> child_workers_;
85 base::WeakPtrFactory<DevToolsRendererChannel> weak_factory_;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1186
87 DISALLOW_COPY_AND_ASSIGN(DevToolsRendererChannel);
88};
89
90} // namespace content
91
92#endif // CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_RENDERER_CHANNEL_H_