|  | // 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.testing.sl4f; | 
|  |  | 
|  | using zx; | 
|  |  | 
|  | /// Implemented by a backend component hosting one or more facades. Used to acquire the list of | 
|  | /// facades hosted by a `FacadeProvider` instance. | 
|  | protocol FacadeIterator { | 
|  | GetNext() -> (vector<string:MAX>:MAX facades); | 
|  | }; | 
|  |  | 
|  | /// Implemented by a backend component hosting one or more facades. A facade must only be hosted by | 
|  | /// a signel `FacadeProvider` instance. | 
|  | /// NOTE: The current implementation uses ComponentsV1 and only supports a single `FacadeProvider` | 
|  | /// instance. This is intended to change and may result in changes to the protocol. | 
|  | [Discoverable] | 
|  | protocol FacadeProvider { | 
|  | /// Connect to a `FacadeIterator` to obtain the list of facades hosted by this `FacadeProvider`. | 
|  | GetFacades(request<FacadeIterator> iterator); | 
|  |  | 
|  | /// Executes ‘command’ on ‘facade’. Returns an optional result JSON blob and error string. | 
|  | Execute(string:MAX facade, string:MAX command, zx.handle:VMO params_blob) | 
|  | -> (zx.handle:VMO? result_blob, string:MAX? error); | 
|  |  | 
|  | /// Cleans up any resources and transient state associated with SL4F facades hosted by this | 
|  | /// `FacadeProvider`. Returns on completion. | 
|  | Cleanup() -> (); | 
|  |  | 
|  | /// Prints the state of all facades hosted by this `FacadeProvider`. Returns on completion. | 
|  | Print() -> (); | 
|  | }; |