blob: 93194a9ceee1fee983d7cad88d8c3fcf37bbf34d [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
[DartPackage="mojo",
JavaPackage="org.chromium.mojo.bindings"]
// TODO(rudominer) Move this file into the module mojo.bindings when
// https://github.com/domokit/mojo/issues/435 is fixed.
module mojo.bindings.types;
import "mojom_types.mojom";
// This is a companion interface to ServiceProvider. An implementation of
// ServiceProvider may optionally offer descriptions of the services it
// provides by making this interface available. A client obtains access
// to a ServiceDescriber service by invoking
// ServiceProvider.ConnectToService(SERVICE_DESCRIBER_INTERFACE_NAME, pipe).
[ServiceName="mojo::bindings::types::ServiceDescriber"]
interface ServiceDescriber {
// Requests access to a ServiceDescription for the service with the
// given name. The |interface_name| is the same string that would be passed
// to ServiceProvider.ConnectToService() in order to request the service
// with the given name. If the host is not willing or able to describe the
// service with the given name it will close the |description_request| pipe.
DescribeService(string interface_name,
ServiceDescription& description_request);
};
// A ServiceDescription allows a client to request information about the Mojom
// types used to implement a particular Mojo service.
//
// A Mojo service has a *top-level* interface: the interface that is bound to
// the message pipe |pipe| as a result of calling
// ServiceProvider.ConnectToService().
//
// The *complete type set* of a Mojo service is the closure of this top-level
// interface under type reference. That is, the complete type set includes all
// of the types referenced directly in the definition of the top-level interface
// and the types referenced by those types etc. The complete type set of a Mojo
// service may include other interfaces besides the top-level interface.
//
// An implementation of ServiceDescription contains information about all
// of the types in the complete type set of the service.
interface ServiceDescription {
// Returns a MojomInterface for the top-level interface of this service.
GetTopLevelInterface() => (MojomInterface mojomInterface);
// Returns the |UserDefinedType| for the given |type_key|. Valid keys are
// those that are embedded in the structures returned from earlier queries
// of this ServiceDescription. If the key is invalid then |type| will be null.
GetTypeDefinition(string type_key)
=> (mojo.bindings.types.UserDefinedType? type);
// Returns all the data queryable via GetTypeDefinition in a single
// structure, or null if the implementation is not willing or not able to
// provide all of the data at once.
GetAllTypeDefinitions() => (map<string, UserDefinedType>? definitions);
};