Index: third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/InterfaceControlMessagesHelper.java |
diff --git a/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/InterfaceControlMessagesHelper.java b/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/InterfaceControlMessagesHelper.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..939fb93988a2df36618aa4a4de62e7ac8b6f6319 |
--- /dev/null |
+++ b/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/InterfaceControlMessagesHelper.java |
@@ -0,0 +1,89 @@ |
+// 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.bindings; |
+ |
+import org.chromium.mojo.bindings.Callbacks.Callback1; |
+import org.chromium.mojo.bindings.Interface.Manager; |
+import org.chromium.mojo.bindings.Interface.Proxy; |
+import org.chromium.mojo.system.Core; |
+ |
+/** |
+ * Helper class to handle interface control messages. See |
+ * mojo/public/interfaces/bindings/interface_control_messages.mojom. |
+ */ |
+public class InterfaceControlMessagesHelper { |
+ /** |
+ * MessageReceiver that forwards a message containing a {@link RunResponseMessageParams} to a |
+ * callback. |
+ */ |
+ private static class RunResponseForwardToCallback |
+ extends SideEffectFreeCloseable implements MessageReceiver { |
+ private final Callback1<RunResponseMessageParams> mCallback; |
+ |
+ RunResponseForwardToCallback(Callback1<RunResponseMessageParams> callback) { |
+ mCallback = callback; |
+ } |
+ |
+ /** |
+ * @see MessageReceiver#accept(Message) |
+ */ |
+ @Override |
+ public boolean accept(Message message) { |
+ RunResponseMessageParams response = |
+ RunResponseMessageParams.deserialize(message.asServiceMessage().getPayload()); |
+ mCallback.call(response); |
+ return true; |
+ } |
+ } |
+ |
+ /** |
+ * Sends the given run message through the receiver, registering the callback. |
+ */ |
+ public static void sendRunMessage(Core core, MessageReceiverWithResponder receiver, |
+ RunMessageParams params, Callback1<RunResponseMessageParams> callback) { |
+ Message message = params.serializeWithHeader( |
+ core, new MessageHeader(InterfaceControlMessagesConstants.RUN_MESSAGE_ID, |
+ MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG, 0)); |
+ receiver.acceptWithResponder(message, new RunResponseForwardToCallback(callback)); |
+ } |
+ |
+ /** |
+ * Sends the given run or close pipe message through the receiver. |
+ */ |
+ public static void sendRunOrClosePipeMessage( |
+ Core core, MessageReceiverWithResponder receiver, RunOrClosePipeMessageParams params) { |
+ Message message = params.serializeWithHeader(core, |
+ new MessageHeader(InterfaceControlMessagesConstants.RUN_OR_CLOSE_PIPE_MESSAGE_ID)); |
+ receiver.accept(message); |
+ } |
+ |
+ /** |
+ * Handles a received run message. |
+ */ |
+ public static <I extends Interface, P extends Proxy> boolean handleRun( |
+ Core core, Manager<I, P> manager, ServiceMessage message, MessageReceiver responder) { |
+ RunResponseMessageParams response = new RunResponseMessageParams(); |
+ response.reserved0 = 16; |
+ response.reserved1 = 0; |
+ response.queryVersionResult = new QueryVersionResult(); |
+ response.queryVersionResult.version = manager.getVersion(); |
+ |
+ return responder.accept(response.serializeWithHeader( |
+ core, new MessageHeader(InterfaceControlMessagesConstants.RUN_MESSAGE_ID, |
+ MessageHeader.MESSAGE_IS_RESPONSE_FLAG, |
+ message.getHeader().getRequestId()))); |
+ } |
+ |
+ /** |
+ * Handles a received run or close pipe message. Closing the pipe is handled by returning |
+ * |false|. |
+ */ |
+ public static <I extends Interface, P extends Proxy> boolean handleRunOrClosePipe( |
+ Manager<I, P> manager, ServiceMessage message) { |
+ Message payload = message.getPayload(); |
+ RunOrClosePipeMessageParams query = RunOrClosePipeMessageParams.deserialize(payload); |
+ return query.requireVersion.version <= manager.getVersion(); |
+ } |
+} |