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

Unified Diff: mojo/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java

Issue 522353003: mojo: Run validation tests on java (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding conformance tests. Created 6 years, 3 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/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java
diff --git a/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java b/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java
index cc9f12ceb8d75134af4af02533ef5b8c735d7792..84cc7de196deee3878dadbbcaa51e20218045a26 100644
--- a/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java
+++ b/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Connector.java
@@ -7,9 +7,12 @@ package org.chromium.mojo.bindings;
import org.chromium.mojo.system.AsyncWaiter;
import org.chromium.mojo.system.Core;
import org.chromium.mojo.system.MessagePipeHandle;
+import org.chromium.mojo.system.MessagePipeHandle.ReadMessageResult;
import org.chromium.mojo.system.MojoException;
import org.chromium.mojo.system.MojoResult;
+import java.nio.ByteBuffer;
+
/**
* A {@link Connector} owns a {@link MessagePipeHandle} and will send any received messages to the
* registered {@link MessageReceiver}. It also acts as a {@link MessageReceiver} and will send any
@@ -92,13 +95,13 @@ public class Connector implements MessageReceiver, HandleOwner<MessagePipeHandle
}
/**
- * @see MessageReceiver#accept(MessageWithHeader)
+ * @see MessageReceiver#accept(Message)
*/
@Override
- public boolean accept(MessageWithHeader message) {
+ public boolean accept(Message message) {
try {
- mMessagePipeHandle.writeMessage(message.getMessage().buffer,
- message.getMessage().handles, MessagePipeHandle.WriteFlags.NONE);
+ mMessagePipeHandle.writeMessage(message.getData(),
+ message.getHandles(), MessagePipeHandle.WriteFlags.NONE);
return true;
} catch (MojoException e) {
onError(e);
@@ -194,8 +197,7 @@ public class Connector implements MessageReceiver, HandleOwner<MessagePipeHandle
int result;
do {
try {
- result = MessageWithHeader.readAndDispatchMessage(mMessagePipeHandle,
- mIncomingMessageReceiver);
+ result = readAndDispatchMessage(mMessagePipeHandle, mIncomingMessageReceiver);
} catch (MojoException e) {
onError(e);
return;
@@ -214,4 +216,26 @@ public class Connector implements MessageReceiver, HandleOwner<MessagePipeHandle
mCancellable = null;
}
}
+
+ /**
+ * Read a message, and pass it to the given |MessageReceiver| if not null. If the
+ * |MessageReceiver| is null, the message is lost.
+ *
+ * @param receiver The {@link MessageReceiver} that will receive the read {@link Message}. Can
+ * be <code>null</code>, in which case the message is discarded.
+ */
+ static int readAndDispatchMessage(MessagePipeHandle handle, MessageReceiver receiver) {
+ // TODO(qsr) Allow usage of a pool of pre-allocated buffer for performance.
+ ReadMessageResult result = handle.readMessage(null, 0, MessagePipeHandle.ReadFlags.NONE);
+ if (result.getMojoResult() != MojoResult.RESOURCE_EXHAUSTED) {
+ return result.getMojoResult();
+ }
+ ByteBuffer buffer = ByteBuffer.allocateDirect(result.getMessageSize());
+ result = handle.readMessage(buffer, result.getHandlesCount(),
+ MessagePipeHandle.ReadFlags.NONE);
+ if (receiver != null && result.getMojoResult() == MojoResult.OK) {
+ receiver.accept(new SimpleMessage(buffer, result.getHandles()));
+ }
+ return result.getMojoResult();
+ }
}

Powered by Google App Engine
This is Rietveld 408576698