| // 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.test.scene; |
| |
| using fuchsia.ui.app; |
| using fuchsia.ui.observation.geometry; |
| using fuchsia.ui.views; |
| using zx; |
| |
| /// Controls a UI test scene. Allows a test to attach test Views to the scene |
| /// and add View-related instrumentation. |
| @discoverable |
| closed protocol Controller { |
| /// *** NOTE: `ViewProvider` is no longer the preferred way for a parent |
| /// and child view to agree on a ViewportCreationToken / ViewCreationToken |
| /// pair. Flatland-based clients are encouraged to use `PresentView` (below) |
| /// instead of `AttachClientView`. |
| /// |
| /// Elicits the server to request a view using the |
| /// `fuchsia.ui.app.ViewProvider` handle provided, and attach it to the |
| /// scene. |
| /// |
| /// RETURN VALUE |
| /// |
| /// This method returns the KOID for the client view's `ViewRef`. |
| /// |
| /// SYNCHRONIZATION |
| /// |
| /// This call returns as soon as the client `ViewRef` is available. Note |
| /// that this signal does NOT necessarily indicate that the view has been |
| /// attached to the scene. |
| /// |
| /// LIFE CYCLE |
| /// |
| /// Clients may drop the `Controller` connection once `AttachClientView` has |
| /// returned. |
| strict AttachClientView(resource table { |
| 1: view_provider client_end:fuchsia.ui.app.ViewProvider; |
| }) -> (struct { |
| view_ref_koid zx.Koid; |
| }); |
| |
| /// Elicits the server to create a viewport using `viewport_creation_token`. |
| /// |
| /// LIFE CYCLE |
| /// |
| /// Clients may drop the `Controller` connection once `PresentClientView` has |
| /// returned. |
| @available(added=10) |
| strict PresentClientView(resource table { |
| @available(added=10) |
| 1: viewport_creation_token fuchsia.ui.views.ViewportCreationToken; |
| }); |
| |
| /// Registers a `ViewTreeWatcher` on the client's behalf. |
| /// |
| /// The `ViewTreeWatcher` registered on behalf of the client will currently |
| /// be scoped globally; we intend to restrict the scope to the client view's |
| /// subtree as soon as it's feasible to do so. |
| /// |
| /// For more information on geometry observation, see the documentation |
| /// in //sdk/fidl/fuchsia.ui.observation.geometry/watcher.fidl. |
| strict RegisterViewTreeWatcher(resource struct { |
| watcher server_end:fuchsia.ui.observation.geometry.ViewTreeWatcher; |
| }) -> (); |
| |
| /// A hanging get to watch for updates to view presentation. |
| /// |
| /// Callers can use this method to wait until a `ClientView` has |
| /// `Present()`-ed through any of the following view presentation methods: |
| /// * `fuchsia.ui.test.scene.Controller/AttachClientView()` |
| /// * `fuchsia.ui.test.scene.Controller/PresentClientView()` |
| /// * `fuchsia.element.GraphicalPresenter/PresentView()` |
| /// |
| /// Callers should expect to call this method once for each view they |
| /// expect to wait for. |
| /// |
| /// Note that callers must take care when interleaving calls, since |
| /// this method has no way to |
| /// a) associate a `Present()` with a specific `ClientView`, or |
| /// b) associate a `Present()` with an `AttachClientView()` call, rather |
| /// than a `PresentClientView()` or `PresentView` call. |
| /// |
| /// It is invalid to call `WatchViewPresentation` while a previous call is |
| /// still pending; subsequent requests will be ignored. |
| @available(added=19) |
| strict WatchViewPresentation() -> (); |
| }; |