[go: nahoru, domu]

blob: 9f58e1eb83aceacc470e6e3c3a92bcc78c699fae [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.services.service_manager;
import org.chromium.mojo.bindings.ConnectionErrorHandler;
import org.chromium.mojo.bindings.Interface;
import org.chromium.mojo.bindings.InterfaceRequest;
import org.chromium.mojo.system.Core;
import org.chromium.mojo.system.MessagePipeHandle;
import org.chromium.mojo.system.MojoException;
import org.chromium.mojo.system.Pair;
/**
* Provides access to interfaces exposed by an InterfaceProvider mojo interface.
*/
public class InterfaceProvider implements ConnectionErrorHandler {
private Core mCore;
private org.chromium.service_manager.mojom.InterfaceProvider.Proxy mInterfaceProvider;
public InterfaceProvider(MessagePipeHandle pipe) {
mCore = pipe.getCore();
mInterfaceProvider =
org.chromium.service_manager.mojom.InterfaceProvider.MANAGER.attachProxy(pipe, 0);
mInterfaceProvider.getProxyHandler().setErrorHandler(this);
}
/**
* Binds |request| to an implementation of I in the remote application.
*
* @param manager The Manager for interface I.
* @param request The request for the interface I.
*/
public <I extends Interface> void getInterface(
Interface.Manager<I, ? extends Interface.Proxy> manager, InterfaceRequest<I> request) {
mInterfaceProvider.getInterface(manager.getName(), request.passHandle());
}
/**
* Binds and returns a proxy to an implementation of I in the remote application.
*
* @param manager The Manager for interface I.
* @return A bound Proxy for interface I.
*/
public <I extends Interface, P extends Interface.Proxy> P getInterface(
Interface.Manager<I, P> manager) {
Pair<P, InterfaceRequest<I>> result = manager.getInterfaceRequest(mCore);
getInterface(manager, result.second);
return result.first;
}
@Override
public void onConnectionError(MojoException e) {
mInterfaceProvider.close();
}
}