// Copyright 2015 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.viewsv1;

using fuchsia.sys;
using fuchsia.ui.viewsv1token;

// Provides a View upon request.
//
// Applications should implement and expose this service so that they can
// expose views to be embedded into other applications.
[Discoverable]
interface ViewProvider {
  // Creates and registers a view with the view manager and returns its
  // view owner which may subsequently be passed to |View.AddChild()|
  // to attach the view to a view hierarchy.
  //
  // Implementors of this interface are responsible for creating the view
  // and forwarding the |view_owner| interface request to
  // |ViewManager.CreateView()|.
  //
  // The caller may request services from the created view via the |services|
  // service provider.
  1: CreateView(request<fuchsia.ui.viewsv1token.ViewOwner> view_owner,
               request<fuchsia.sys.ServiceProvider>? services);
};
