blob: 9a69bcd0813c41bf0b9c8e7b5ef81f65620f5064 [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"
Dmitry Gozman6adf95b2018-10-10 22:12:1913#include "mojo/public/cpp/bindings/associated_binding.h"
14#include "mojo/public/cpp/bindings/binding.h"
Hiroki Nakagawa7c0a7e72018-12-10 04:31:2915#include "third_party/blink/public/mojom/devtools/devtools_agent.mojom.h"
Dmitry Gozmanb27efd1e2018-10-01 22:08:1116
17namespace gfx {
18class Point;
19}
20
21namespace content {
22
23class DevToolsAgentHostImpl;
24class DevToolsSession;
25class RenderFrameHostImpl;
Andrey Lushnikovdb286942018-11-21 01:43:3626class WorkerDevToolsAgentHost;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1127
Dmitry Gozmanbe2073b2018-10-29 22:15:4628namespace protocol {
29class TargetAutoAttacher;
30}
31
Dmitry Gozmanb27efd1e2018-10-01 22:08:1132// This class encapsulates a connection to blink::mojom::DevToolsAgent
Dmitry Gozmanbe2073b2018-10-29 22:15:4633// in the renderer (either RenderFrame or some kind of worker).
34// When the renderer changes (e.g. worker restarts or a new RenderFrame
35// is used for the frame), different DevToolsAgentHostImpl subclasses
Dmitry Gozmanb27efd1e2018-10-01 22:08:1136// retrieve a new blink::mojom::DevToolsAgent pointer, and this channel
37// starts using it for all existing and future sessions.
Dmitry Gozman6adf95b2018-10-10 22:12:1938class CONTENT_EXPORT DevToolsRendererChannel
39 : public blink::mojom::DevToolsAgentHost {
Dmitry Gozmanb27efd1e2018-10-01 22:08:1140 public:
41 explicit DevToolsRendererChannel(DevToolsAgentHostImpl* owner);
Dmitry Gozman6adf95b2018-10-10 22:12:1942 ~DevToolsRendererChannel() override;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1143
Dmitry Gozmanbe2073b2018-10-29 22:15:4644 // Dedicated workers use non-associated version,
45 // while frames and other workers use DevToolsAgent associated
46 // with respective control interfraces. See mojom for details.
47 void SetRenderer(blink::mojom::DevToolsAgentPtr agent_ptr,
48 blink::mojom::DevToolsAgentHostRequest host_request,
49 int process_id,
50 RenderFrameHostImpl* frame_host);
51 void SetRendererAssociated(
Dmitry Gozman6adf95b2018-10-10 22:12:1952 blink::mojom::DevToolsAgentAssociatedPtr agent_ptr,
53 blink::mojom::DevToolsAgentHostAssociatedRequest host_request,
54 int process_id,
55 RenderFrameHostImpl* frame_host);
Dmitry Gozmanb27efd1e2018-10-01 22:08:1156 void AttachSession(DevToolsSession* session);
57 void InspectElement(const gfx::Point& point);
Andrey Lushnikov6deca112019-01-16 02:06:1258 void ForceDetachWorkerSessions();
Dmitry Gozmanb27efd1e2018-10-01 22:08:1159
Dmitry Gozmanbe2073b2018-10-29 22:15:4660 void SetReportChildWorkers(protocol::TargetAutoAttacher* attacher,
61 bool report,
Dmitry Gozmane3ceda742018-12-05 22:06:0162 bool wait_for_debugger,
63 base::OnceClosure callback);
Dmitry Gozmanbe2073b2018-10-29 22:15:4664
Dmitry Gozmanb27efd1e2018-10-01 22:08:1165 private:
Dmitry Gozmanbe2073b2018-10-29 22:15:4666 // blink::mojom::DevToolsAgentHost implementation.
67 void ChildWorkerCreated(blink::mojom::DevToolsAgentPtr worker_devtools_agent,
68 blink::mojom::DevToolsAgentHostRequest host_request,
69 const GURL& url,
70 const base::UnguessableToken& devtools_worker_token,
71 bool waiting_for_debugger) override;
72 void ChildWorkerDestroyed(DevToolsAgentHostImpl*);
73
74 void CleanupConnection();
75 void SetRendererInternal(blink::mojom::DevToolsAgent* agent,
76 int process_id,
77 RenderFrameHostImpl* frame_host);
Dmitry Gozmane3ceda742018-12-05 22:06:0178 void ReportChildWorkersCallback();
Dmitry Gozmanbe2073b2018-10-29 22:15:4679
Dmitry Gozmanb27efd1e2018-10-01 22:08:1180 DevToolsAgentHostImpl* owner_;
Dmitry Gozmanbe2073b2018-10-29 22:15:4681 mojo::Binding<blink::mojom::DevToolsAgentHost> binding_;
82 mojo::AssociatedBinding<blink::mojom::DevToolsAgentHost> associated_binding_;
83 blink::mojom::DevToolsAgentPtr agent_ptr_;
84 blink::mojom::DevToolsAgentAssociatedPtr associated_agent_ptr_;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1185 int process_id_;
86 RenderFrameHostImpl* frame_host_ = nullptr;
Dmitry Gozmanbe2073b2018-10-29 22:15:4687 base::flat_set<protocol::TargetAutoAttacher*> report_attachers_;
88 base::flat_set<protocol::TargetAutoAttacher*> wait_for_debugger_attachers_;
Andrey Lushnikovdb286942018-11-21 01:43:3689 base::flat_set<WorkerDevToolsAgentHost*> child_workers_;
Dmitry Gozmane3ceda742018-12-05 22:06:0190 base::OnceClosure set_report_callback_;
Dmitry Gozmanbe2073b2018-10-29 22:15:4691 base::WeakPtrFactory<DevToolsRendererChannel> weak_factory_;
Dmitry Gozmanb27efd1e2018-10-01 22:08:1192
93 DISALLOW_COPY_AND_ASSIGN(DevToolsRendererChannel);
94};
95
96} // namespace content
97
98#endif // CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_RENDERER_CHANNEL_H_