blob: c25a8b3545d5409e1f387bc8e16169ebbceec057 [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.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() -> ();
};