| // Copyright 2020 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.views; | 
 |  | 
 | /// A collection of error codes related to |ViewRefInstalled|. | 
 | type ViewRefInstalledError = strict enum { | 
 |     /// The ViewRef being watched is invalid, or has become invalid. | 
 |     INVALID_VIEW_REF = 1; | 
 | }; | 
 |  | 
 | /// A method of enabling ViewRef holders to determine if a ViewRef has been | 
 | /// "installed" in the view tree: the time it is first connected, transitively, | 
 | /// to the root view.  Typically, after installation, view focus may be | 
 | /// transferred to that ViewRef. | 
 | /// | 
 | /// Note: It's important to distinguish between a ViewRef's installed status and | 
 | ///       current connected-to-view-tree status.  The former undergoes a state | 
 | ///       change once, from "no" to "yes".  The latter may change continuously, | 
 | ///       depending on view tree topology.  As such, "installed" cannot imply | 
 | ///       "currently connected to view tree"; even a hypothetical | 
 | ///       "ViewRefConnected" protocol is fundamentally racy. | 
 | @discoverable | 
 | protocol ViewRefInstalled { | 
 |     /// Sets up a callback to fire when the requested |view_ref| is installed. | 
 |     /// - If |view_ref| has not already been installed, the |Watch| response | 
 |     ///   will fire when it is. | 
 |     /// - If |view_ref| has already been installed, the |Watch| response will | 
 |     ///   fire immediately. | 
 |     /// - If |view_ref| is invalid, or becomes invalid (perhaps because the view | 
 |     ///   was destroyed), the |Watch| call returns with an error.  The error is | 
 |     ///   not guaranteed to be immediate, but a ViewRef holder can itself | 
 |     ///   determine ViewRef validity by listening for ZX_EVENTPAIR_PEER_CLOSED. | 
 |     /// | 
 |     /// Flow control: The caller is allowed multiple |Watch| calls on multiple | 
 |     /// ViewRefs. There is at most one response per call back to the client. | 
 |     /// | 
 |     /// Note: Prior to installation, this |Watch| call is kept alive as long as | 
 |     ///       the ViewRef is valid. | 
 |     Watch(resource struct { | 
 |         view_ref ViewRef; | 
 |     }) -> (struct {}) error ViewRefInstalledError; | 
 | }; |