// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.web;

/// The debug service which allows to enable the DevTools service on Contexts.
[Discoverable]
protocol Debug {
    /// Enables the DevTools service on every subsequent [`Context`] creation and delivers
    /// subsequent DevTools events to the supplied `listener`. The callback indicates when the
    /// WebEngine is in a debuggable state. Events will be sent to every `listener` registered with
    /// this method.
    EnableDevTools(DevToolsListener listener) -> ();
};

/// Interface used to observe DevTools service availability events.
protocol DevToolsListener {
    /// Called when the DevTools service is available on a new [`Context`].
    ///
    /// - `listener`: Channel over which DevTools events for the new [`Context`] will
    ///   be delivered. This channel will disconnect when the [`Context`] is destroyed.
    OnContextDevToolsAvailable(request<DevToolsPerContextListener> listener);
};

/// Interface supplied by the debugging component to observe the DevTools service opening event.
protocol DevToolsPerContextListener {
    /// Called when the DevTools service starts accepting TCP connections on `port`. `port` will
    /// remain open until the [`Context`] is destroyed.
    ///
    /// - `port`: The port used by the service.
    OnHttpPortOpen(uint16 port);
};
