|  | // 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; | 
|  | }) -> (); | 
|  | }; |