blob: 0e84f0d3b0a014e342b95e40636fec57952a6aea [file] [log] [blame]
// 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;
}) -> ();
};