summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/public/mojom/devtools/devtools_agent.mojom
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/public/mojom/devtools/devtools_agent.mojom')
-rw-r--r--chromium/third_party/blink/public/mojom/devtools/devtools_agent.mojom143
1 files changed, 143 insertions, 0 deletions
diff --git a/chromium/third_party/blink/public/mojom/devtools/devtools_agent.mojom b/chromium/third_party/blink/public/mojom/devtools/devtools_agent.mojom
new file mode 100644
index 00000000000..69aae52a42c
--- /dev/null
+++ b/chromium/third_party/blink/public/mojom/devtools/devtools_agent.mojom
@@ -0,0 +1,143 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module blink.mojom;
+
+import "mojo/public/mojom/base/big_string.mojom";
+import "mojo/public/mojom/base/unguessable_token.mojom";
+import "ui/gfx/geometry/mojo/geometry.mojom";
+import "url/mojom/url.mojom";
+
+// Debugging interactions are defined in Remote Debugging Protocol.
+// See https://chromedevtools.github.io/devtools-protocol/ for more
+// information on the protocol itself.
+//
+// All interfaces defined here serve as a transport level for the
+// remote debugging protocol, passing messages opaquely between debugging
+// client (like DevTools frontend) and debugging agent (like core/inspector).
+
+// Implemented by debugging targets which expose remote debugging protocol.
+// Examples are local frame roots and service workers.
+//
+// Note that frame instances of this interface must be associated with
+// navigation-related interface, since we should reattach sessions before
+// the navigation commits in the frame.
+//
+// This interface is implemented in renderer hosting entity under debug.
+// Note that this interface just provides a mean to start a debugging session,
+// so the presence of it does not mean the entity is under debug just yet.
+interface DevToolsAgent {
+ // Attaches a new debugging session. This session speaks remote debugging
+ // protocol and restores all the changes to original state once destroyed.
+ //
+ // Associated |session| receives messages on UI thread and guarantees
+ // relative ordering with e.g. navigations.
+ //
+ // Non-associated |io_session| receives messages on IO thread and may
+ // interrupt long running JavaScript on the main thread. It should be used
+ // for debugging messages which are intended to interrupt execution,
+ // e.g. requesting a pause. There is no ordering guarantee relative to
+ // regular |session|.
+ //
+ // If |reattach_session_state| is present, restores the state of the session
+ // to previously saved one (see DevToolsSessionHost). This is useful when
+ // transferring a session from one agent to another while preserving the
+ // state. For example, cross-process navigation in a frame creates a new
+ // DevToolsAgent (in a different process), but we can preserve the state of
+ // debugging session by copying it from one agent to another.
+ //
+ // ------ Why separate sessions? ------
+ //
+ // To guarantee ordering with legacy IPC channel, we must bind session
+ // synchronously on the UI thread. Otherwise there is a time window
+ // when the request is not yet bound, but the messages may already come.
+ // In this case, messages will be sent to UI hoping that interface
+ // is bound there, and get incorrectly dispatched.
+ //
+ // On the other hand, we need to handle some of the messages on IO without
+ // going to UI first (as described above). This means an interface bound
+ // on IO thread. Thus a session per thread.
+ //
+ // Note that |io_session| is not associated with DevToolsAgent, and so
+ // there is no ordering guarantee for commands send to |io_session|
+ // relative to anything coming over regular |session|.
+ // For example, |session| may be already detached (interface unbound),
+ // while commands are still coming to |io_session|, and vice versa.
+ AttachDevToolsSession(associated DevToolsSessionHost host,
+ associated DevToolsSession& session,
+ DevToolsSession& io_session,
+ DevToolsSessionState? reattach_session_state);
+
+ // Requests an element at specific position to be inspected in every
+ // attached session (or the next attached one if none yet).
+ //
+ // Note that inspecting element does not start/stop any debugging sessions
+ // by itself, and has no effect unless a debugging session is
+ // or will be attached.
+ InspectElement(gfx.mojom.Point point);
+
+ // Instructs agent to start/stop reporting child workers to the host.
+ // |wait_for_debugger| controls whether the worker should be paused
+ // on start waiting for debugger to connect.
+ // See ChildWorkerCreated in DevToolsAgentHost for details.
+ ReportChildWorkers(bool report, bool wait_for_debugger) => ();
+};
+
+// This interface is implemented in browser and is notified by DevToolsAgent
+// when new child worker is available for future debugging.
+interface DevToolsAgentHost {
+ // Informs the host about new child worker and gives its DevToolsAgent
+ // for debugging.
+ // |devtools_worker_token| is a unique token identifying this worker.
+ // |waiting_for_debugger| is true if worker was paused on startup and
+ // should be resumed by debugger to actually start.
+ ChildWorkerCreated(
+ DevToolsAgent worker_devtools_agent,
+ DevToolsAgentHost& worker_devtools_agent_host,
+ url.mojom.Url url,
+ mojo_base.mojom.UnguessableToken devtools_worker_token,
+ bool waiting_for_debugger);
+};
+
+// Represents an attached session which exposes remote debugging protocol.
+// This interface is implemented in renderer hosting entity under debug.
+//
+// Lifetime of the session exactly matches the debugging time span. In other
+// words, the entity is under debug if and only if there is at least one
+// session.
+interface DevToolsSession {
+ // Dispatches protocol command from a client to a debugging target.
+ // |method| is a method name as defined in protocol (e.g. "Runtime.evaluate").
+ // |call_id| is a command id as defined in protocol, and is going to be
+ // reported back to host in a response message (see DevToolsSessionHost).
+ DispatchProtocolCommand(int32 call_id, string method, string message);
+};
+
+// A peer of DevToolsSession representing a remote debugging client
+// which receives notifications and responses from a session.
+// This interface is implemented in browser.
+interface DevToolsSessionHost {
+ // Dispatches protocol command response to a remote debugging client.
+ // |call_id| is a command id as defined in protocol.
+ // |updates| are the session state deltas for future reattach (see
+ // DevToolsAgent), may be missing if the state did not change since
+ // last time.
+ DispatchProtocolResponse(mojo_base.mojom.BigString message,
+ int32 call_id,
+ DevToolsSessionState? updates);
+
+ // Dispatches protocol notification to a remote debugging client.
+ DispatchProtocolNotification(mojo_base.mojom.BigString message,
+ DevToolsSessionState? updates);
+};
+
+// The session state is a mapping from keys to either values or missing
+// values. Missing values are only used when updates are sent; that's
+// in DispatchProtocolResponse and DispatchProtocolNotification. The
+// DevToolsSession will then interpret these missing values by deleting
+// the respective key when its applying the updates in
+// DevToolsSession::ApplySessionStateUpdates.
+struct DevToolsSessionState {
+ map<string, string?> entries;
+};