blob: 6da3813511921929389ad476ed2b298a851b3b26 [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.
package org.chromium.mojo.application;
import org.chromium.mojo.bindings.Interface;
import org.chromium.mojo.bindings.InterfaceRequest;
import org.chromium.mojo.system.MessagePipeHandle;
import org.chromium.mojo.system.MojoException;
import org.chromium.mojom.mojo.ServiceProvider;
import java.io.Closeable;
import java.util.HashMap;
import java.util.Map;
/**
* Represents a connection to another application.
*/
public class ApplicationConnection implements Closeable {
private final String mConnectionUrl;
private final String mRequestorUrl;
private final ServiceProviderImpl mServiceProviderImpl;
/**
* @param requestorUrl URL of the application requesting this connection.
*/
public ApplicationConnection(String requestorUrl, String connectionUrl) {
mRequestorUrl = requestorUrl;
mConnectionUrl = connectionUrl;
mServiceProviderImpl = new ServiceProviderImpl();
}
/**
* @return URL of the application requesting this connection.
*/
public String getRequestorUrl() {
return mRequestorUrl;
}
/**
* @return URL that was used by the source application to establish this connection.
*/
public String connectionUrl() {
return mConnectionUrl;
}
/**
* Add a new service for this application.
*
* @param binder Handle to a ServiceFactoryBinder which contains a service implementation.
*/
public void addService(ServiceFactoryBinder<? extends Interface> binder) {
mServiceProviderImpl.addService(binder);
}
/**
* @return ServiceProvider for this application.
*/
public ServiceProvider getLocalServiceProvider() {
return mServiceProviderImpl;
}
@Override
public void close() {
mServiceProviderImpl.close();
}
}
class ServiceProviderImpl implements ServiceProvider {
private final Map<String, ServiceFactoryBinder<? extends Interface>> mNameToServiceMap =
new HashMap<String, ServiceFactoryBinder<? extends Interface>>();
ServiceProviderImpl() {}
public void addService(ServiceFactoryBinder<? extends Interface> binder) {
mNameToServiceMap.put(binder.getInterfaceName(), binder);
}
@SuppressWarnings("unchecked")
@Override
public void connectToService(String interfaceName, MessagePipeHandle pipe) {
if (mNameToServiceMap.containsKey(interfaceName)) {
mNameToServiceMap.get(interfaceName)
.bind(InterfaceRequest.asInterfaceRequestUnsafe(pipe));
} else {
pipe.close();
}
}
@Override
public void close() {}
@Override
public void onConnectionError(MojoException e) {}
}