blob: 0ab7b2c975762424a2b159b89baf2e7dd9fc568a [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 Gozmane3ceda742018-12-05 22:06:018#include "base/callback.h"
Dmitry Gozmanbe2073b2018-10-29 22:15:469#include "base/containers/flat_set.h"
Dmitry Gozmanb27efd1e2018-10-01 22:08:1110#include "base/macros.h"
Dmitry Gozmanbe2073b2018-10-29 22:15:4611#include "base/memory/weak_ptr.h"
Dmitry Gozmanb27efd1e2018-10-01 22:08:1112#include "content/common/content_export.h"
Julie Jeongeun Kime1b546e2019-08-13 09:39:3813#include "mojo/public/cpp/bindings/associated_receiver.h"
14#include "mojo/public/cpp/bindings/associated_remote.h"
15#include "mojo/public/cpp/bindings/receiver.h"
16#include "mojo/public/cpp/bindings/remote.h"
Hiroki Nakagawa7c0a7e72018-12-10 04:31:2917#include "third_party/blink/public/mojom/devtools/devtools_agent.mojom.h"
Dmitry Gozmanb27efd1e2018-10-01 22:08:1118
19namespace gfx {
20class Point;
21}
22
23namespace content {
24
25class DevToolsAgentHostImpl;
26class DevToolsSession;
27class RenderFrameHostImpl;
Andrey Lushnikovdb286942018-11-21 01:43:3628class WorkerDevToolsAgentHost;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1129
Dmitry Gozmanbe2073b2018-10-29 22:15:4630namespace protocol {
31class TargetAutoAttacher;
32}
33
Dmitry Gozmanb27efd1e2018-10-01 22:08:1134// This class encapsulates a connection to blink::mojom::DevToolsAgent
Dmitry Gozmanbe2073b2018-10-29 22:15:4635// in the renderer (either RenderFrame or some kind of worker).
36// When the renderer changes (e.g. worker restarts or a new RenderFrame
37// is used for the frame), different DevToolsAgentHostImpl subclasses
Dmitry Gozmanb27efd1e2018-10-01 22:08:1138// retrieve a new blink::mojom::DevToolsAgent pointer, and this channel
39// starts using it for all existing and future sessions.
Dmitry Gozman6adf95b2018-10-10 22:12:1940class CONTENT_EXPORT DevToolsRendererChannel
41 : public blink::mojom::DevToolsAgentHost {
Dmitry Gozmanb27efd1e2018-10-01 22:08:1142 public:
43 explicit DevToolsRendererChannel(DevToolsAgentHostImpl* owner);
Dmitry Gozman6adf95b2018-10-10 22:12:1944 ~DevToolsRendererChannel() override;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1145
Dmitry Gozmanbe2073b2018-10-29 22:15:4646 // Dedicated workers use non-associated version,
47 // while frames and other workers use DevToolsAgent associated
48 // with respective control interfraces. See mojom for details.
Julie Jeongeun Kime1b546e2019-08-13 09:39:3849 void SetRenderer(
50 mojo::PendingRemote<blink::mojom::DevToolsAgent> agent_remote,
51 mojo::PendingReceiver<blink::mojom::DevToolsAgentHost> host_receiver,
52 int process_id,
Julie Jeongeun Kime1b546e2019-08-13 09:39:3853 base::OnceClosure connection_error = base::NullCallback());
Dmitry Gozmanbe2073b2018-10-29 22:15:4654 void SetRendererAssociated(
Julie Jeongeun Kime1b546e2019-08-13 09:39:3855 mojo::PendingAssociatedRemote<blink::mojom::DevToolsAgent> agent_remote,
56 mojo::PendingAssociatedReceiver<blink::mojom::DevToolsAgentHost>
57 host_receiver,
Dmitry Gozman6adf95b2018-10-10 22:12:1958 int process_id,
59 RenderFrameHostImpl* frame_host);
Dmitry Gozmanb27efd1e2018-10-01 22:08:1160 void AttachSession(DevToolsSession* session);
61 void InspectElement(const gfx::Point& point);
Andrey Lushnikov6deca112019-01-16 02:06:1262 void ForceDetachWorkerSessions();
Dmitry Gozmanb27efd1e2018-10-01 22:08:1163
Dmitry Gozmanbe2073b2018-10-29 22:15:4664 void SetReportChildWorkers(protocol::TargetAutoAttacher* attacher,
65 bool report,
Dmitry Gozmane3ceda742018-12-05 22:06:0166 bool wait_for_debugger,
67 base::OnceClosure callback);
Dmitry Gozmanbe2073b2018-10-29 22:15:4668
Dmitry Gozmanb27efd1e2018-10-01 22:08:1169 private:
Dmitry Gozmanbe2073b2018-10-29 22:15:4670 // blink::mojom::DevToolsAgentHost implementation.
Julie Jeongeun Kime1b546e2019-08-13 09:39:3871 void ChildWorkerCreated(
72 mojo::PendingRemote<blink::mojom::DevToolsAgent> worker_devtools_agent,
73 mojo::PendingReceiver<blink::mojom::DevToolsAgentHost> host_receiver,
74 const GURL& url,
75 const std::string& name,
76 const base::UnguessableToken& devtools_worker_token,
77 bool waiting_for_debugger) override;
Dmitry Gozmanbe2073b2018-10-29 22:15:4678 void ChildWorkerDestroyed(DevToolsAgentHostImpl*);
79
80 void CleanupConnection();
81 void SetRendererInternal(blink::mojom::DevToolsAgent* agent,
82 int process_id,
83 RenderFrameHostImpl* frame_host);
Dmitry Gozmane3ceda742018-12-05 22:06:0184 void ReportChildWorkersCallback();
Dmitry Gozmanbe2073b2018-10-29 22:15:4685
Dmitry Gozmanb27efd1e2018-10-01 22:08:1186 DevToolsAgentHostImpl* owner_;
Julie Jeongeun Kime1b546e2019-08-13 09:39:3887 mojo::Receiver<blink::mojom::DevToolsAgentHost> receiver_{this};
88 mojo::AssociatedReceiver<blink::mojom::DevToolsAgentHost>
89 associated_receiver_{this};
90 mojo::Remote<blink::mojom::DevToolsAgent> agent_remote_;
91 mojo::AssociatedRemote<blink::mojom::DevToolsAgent> associated_agent_remote_;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1192 int process_id_;
93 RenderFrameHostImpl* frame_host_ = nullptr;
Dmitry Gozmanbe2073b2018-10-29 22:15:4694 base::flat_set<protocol::TargetAutoAttacher*> report_attachers_;
95 base::flat_set<protocol::TargetAutoAttacher*> wait_for_debugger_attachers_;
Andrey Lushnikovdb286942018-11-21 01:43:3696 base::flat_set<WorkerDevToolsAgentHost*> child_workers_;
Dmitry Gozmane3ceda742018-12-05 22:06:0197 base::OnceClosure set_report_callback_;
Jeremy Roman3bca4bf2019-07-11 03:41:2598 base::WeakPtrFactory<DevToolsRendererChannel> weak_factory_{this};
Dmitry Gozmanb27efd1e2018-10-01 22:08:1199
100 DISALLOW_COPY_AND_ASSIGN(DevToolsRendererChannel);
101};
102
103} // namespace content
104
105#endif // CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_RENDERER_CHANNEL_H_