| 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();
|
| + }
|
| +}
|
|
|