OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 package org.chromium.mojo.bindings; | |
6 | |
7 import org.chromium.mojo.bindings.Callbacks.Callback1; | |
8 import org.chromium.mojo.bindings.Interface.Manager; | |
9 import org.chromium.mojo.bindings.Interface.Proxy; | |
10 import org.chromium.mojo.system.Core; | |
11 | |
12 /** | |
13 * Helper class to handle interface control messages. See | |
14 * mojo/public/interfaces/bindings/interface_control_messages.mojom. | |
15 */ | |
16 public class InterfaceControlMessagesHelper { | |
17 /** | |
18 * MessageReceiver that forwards a message containing a {@link RunResponseMe
ssageParams} to a | |
19 * callback. | |
20 */ | |
21 private static class RunResponseForwardToCallback | |
22 extends SideEffectFreeCloseable implements MessageReceiver { | |
23 private final Callback1<RunResponseMessageParams> mCallback; | |
24 | |
25 RunResponseForwardToCallback(Callback1<RunResponseMessageParams> callbac
k) { | |
26 mCallback = callback; | |
27 } | |
28 | |
29 /** | |
30 * @see MessageReceiver#accept(Message) | |
31 */ | |
32 @Override | |
33 public boolean accept(Message message) { | |
34 RunResponseMessageParams response = | |
35 RunResponseMessageParams.deserialize(message.asServiceMessag
e().getPayload()); | |
36 mCallback.call(response); | |
37 return true; | |
38 } | |
39 } | |
40 | |
41 /** | |
42 * Sends the given run message through the receiver, registering the callbac
k. | |
43 */ | |
44 public static void sendRunMessage(Core core, MessageReceiverWithResponder re
ceiver, | |
45 RunMessageParams params, Callback1<RunResponseMessageParams> callbac
k) { | |
46 Message message = params.serializeWithHeader( | |
47 core, new MessageHeader(InterfaceControlMessagesConstants.RUN_ME
SSAGE_ID, | |
48 MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG, 0)); | |
49 receiver.acceptWithResponder(message, new RunResponseForwardToCallback(c
allback)); | |
50 } | |
51 | |
52 /** | |
53 * Sends the given run or close pipe message through the receiver. | |
54 */ | |
55 public static void sendRunOrClosePipeMessage( | |
56 Core core, MessageReceiverWithResponder receiver, RunOrClosePipeMess
ageParams params) { | |
57 Message message = params.serializeWithHeader(core, | |
58 new MessageHeader(InterfaceControlMessagesConstants.RUN_OR_CLOSE
_PIPE_MESSAGE_ID)); | |
59 receiver.accept(message); | |
60 } | |
61 | |
62 /** | |
63 * Handles a received run message. | |
64 */ | |
65 public static <I extends Interface, P extends Proxy> boolean handleRun( | |
66 Core core, Manager<I, P> manager, ServiceMessage message, MessageRec
eiver responder) { | |
67 RunResponseMessageParams response = new RunResponseMessageParams(); | |
68 response.reserved0 = 16; | |
69 response.reserved1 = 0; | |
70 response.queryVersionResult = new QueryVersionResult(); | |
71 response.queryVersionResult.version = manager.getVersion(); | |
72 | |
73 return responder.accept(response.serializeWithHeader( | |
74 core, new MessageHeader(InterfaceControlMessagesConstants.RUN_ME
SSAGE_ID, | |
75 MessageHeader.MESSAGE_IS_RESPONSE_FLAG, | |
76 message.getHeader().getRequestId()))); | |
77 } | |
78 | |
79 /** | |
80 * Handles a received run or close pipe message. Closing the pipe is handled
by returning | |
81 * |false|. | |
82 */ | |
83 public static <I extends Interface, P extends Proxy> boolean handleRunOrClos
ePipe( | |
84 Manager<I, P> manager, ServiceMessage message) { | |
85 Message payload = message.getPayload(); | |
86 RunOrClosePipeMessageParams query = RunOrClosePipeMessageParams.deserial
ize(payload); | |
87 return query.requireVersion.version <= manager.getVersion(); | |
88 } | |
89 } | |
OLD | NEW |