Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1358)

Unified Diff: mojo/bindings/java/src/org/chromium/mojo/bindings/InterfaceWithClient.java

Issue 364063006: JAVA BINDINGS WIP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/bindings/java/src/org/chromium/mojo/bindings/InterfaceWithClient.java
diff --git a/mojo/bindings/java/src/org/chromium/mojo/bindings/InterfaceWithClient.java b/mojo/bindings/java/src/org/chromium/mojo/bindings/InterfaceWithClient.java
index 69fe6edcb3b5c217c1da54db65d2916e0b15dc2b..60ca8935e63734a65c834e0b642942adf8f84739 100644
--- a/mojo/bindings/java/src/org/chromium/mojo/bindings/InterfaceWithClient.java
+++ b/mojo/bindings/java/src/org/chromium/mojo/bindings/InterfaceWithClient.java
@@ -4,6 +4,9 @@
package org.chromium.mojo.bindings;
+import org.chromium.mojo.system.Core;
+import org.chromium.mojo.system.MessagePipeHandle;
+
/**
* Base class for mojo generated interfaces that have a client.
*
@@ -12,8 +15,96 @@ package org.chromium.mojo.bindings;
public interface InterfaceWithClient<C extends Interface> extends Interface {
/**
- * Set the client associated with this interface.
+ * TODO(qsr): Insert description here.
+ *
+ * @param <C>
*/
- public void setClient(C client);
+ abstract class Proxy<C extends Interface> extends
+ Interface.Proxy implements InterfaceWithClient<C> {
+ /**
+ * TODO(qsr):
+ *
+ * @param messageReceiver
+ */
+ public Proxy(Core core, MessageReceiverWithResponder messageReceiver) {
+ super(core, messageReceiver);
+ }
+
+ /**
+ * @see InterfaceWithClient#setClient(Interface)
+ */
+ @Override
+ public void setClient(C client) {
+ throw new UnsupportedOperationException(
+ "Setting the client on a proxy is not supported");
+ }
+ }
+
+ /**
+ * TODO(qsr): Insert description here.
+ *
+ * @param <I>
+ */
+ abstract class Builder<C extends Interface, I extends InterfaceWithClient<C>,
+ P extends Proxy<C>> extends Interface.Builder<I, P> {
+
+ private final Interface.Builder<C, ?> mClientBuilder;
+ /**
+ * TODO(qsr):
+ *
+ * @param clientBuilder
+ */
+ protected Builder(Interface.Builder<C, ?> clientBuilder) {
+ if (clientBuilder == null) {
+ // Passing null to this method is a conventional value used to handle an interface
+ // that is its own client.
+ @SuppressWarnings("unchecked")
+ Interface.Builder<C, P> thisAsClientBuilder = (Interface.Builder<C, P>) this;
+ this.mClientBuilder = thisAsClientBuilder;
+ } else {
+ this.mClientBuilder = clientBuilder;
+ }
+ }
+
+ /**
+ * @see Interface.Builder#bind(org.chromium.mojo.system.MessagePipeHandle, Interface)
+ */
+ @Override
+ public void bind(MessagePipeHandle handle, I impl) {
+ Router router = new RouterImpl(handle);
+ super.bind(handle.getCore(), router, impl);
+ @SuppressWarnings("unchecked")
+ C client = (C) mClientBuilder.connect(handle.getCore(), router);
+ impl.setClient(client);
+ router.setErrorHandler(impl);
+ router.start();
+ }
+
+ /**
+ * TODO(qsr):
+ *
+ * @param handle
+ * @param client
+ * @return
+ */
+ public P connect(MessagePipeHandle handle, C client) {
+ Router router = new RouterImpl(handle);
+ mClientBuilder.bind(handle.getCore(), router, client);
+ P proxy = super.connect(handle.getCore(), router);
+ DelegatingConnectionErrorHandler handlers = new DelegatingConnectionErrorHandler();
+ handlers.addConnectionErrorHandler(client);
+ handlers.addConnectionErrorHandler(proxy);
+ router.setErrorHandler(handlers);
+ router.start();
+ return proxy;
+ }
+ }
+
+ /**
+ * TODO(qsr):
+ *
+ * @param client
+ */
+ public void setClient(C client);
}

Powered by Google App Engine
This is Rietveld 408576698