// Copyright 2022 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.ui.observation.scope;

using fuchsia.ui.observation.geometry;
using zx;

/// *** ONLY FOR USE IN PLATFORM COMPONENTS ***
/// This is a sensitive protocol. It provides unlimited visibility into any
/// view tree, if handed the tree root's view ref KOID. Hand it out ONLY to
/// platform components, such as Accessibility Manager or UI Test Manager.
///
/// Regular UI clients uses should obtain observation protocols through a
/// graphics factory function (see |fuchsia.ui.composition.ViewBoundProtocols|),
/// which securely ties observation protocols to a specific view client.
@discoverable
closed protocol Registry {
    /// Sets up a geometry `ViewTreeWatcher` channel which reports the view tree
    /// geometry for a specific view, identified by `context_view`. The data
    /// received describes the `context_view` and its descendant views.
    ///
    /// This method may be called multiple times to obtain multiple geometry
    /// `ViewTreeWatcher`s. Typical usage is to obtain just one geometry
    /// `ViewTreeWatcher`.
    ///
    /// Client can freely disconnect this `Registry` endpoint after this method
    /// returns and the `ViewTreeWatcher` endpoint will remain active.
    ///
    /// Flow control. The caller is allowed at most one in-flight call at a
    /// time. Subsequent calls must wait until the acknowledgment returns.
    /// Non-compliance results in channel closure.
    ///
    /// Client synchronization. The method response signifies that the server
    /// has processed the channel endpoint. A client can synchronize its next
    /// actions based on this guarantee (for example, trigger a change in view
    /// geometry without the change "getting lost").
    ///
    /// View lifecycle. The view represented by `context_view` must first be
    /// created. Otherwise, `geometry` channel's server endpoint is closed.
    ///
    /// + request `context_view` a view's identity, which serves as the root of
    ///   a view tree
    /// + request `geometry` a channel to observe `context_view`'s view tree
    /// - response acknowledgement that `geometry` is connected to the server
    strict RegisterScopedViewTreeWatcher(resource struct {
        context_view zx.Koid;
        watcher server_end:fuchsia.ui.observation.geometry.ViewTreeWatcher;
    }) -> ();
};
