Chromium Code Reviews| Index: mojo/public/js/lib/control_message_proxy.js |
| diff --git a/mojo/public/js/lib/control_message_proxy.js b/mojo/public/js/lib/control_message_proxy.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..46ae1a6b5dde68b2a59d1652cde27be5fb909897 |
| --- /dev/null |
| +++ b/mojo/public/js/lib/control_message_proxy.js |
| @@ -0,0 +1,102 @@ |
| +// Copyright 2017 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. |
| + |
| +define("mojo/public/js/lib/control_message_proxy", [ |
| + "mojo/public/interfaces/bindings/interface_control_messages.mojom", |
| + "mojo/public/js/validator", |
| + "mojo/public/js/codec", |
| +], function(interfaceCtrlMsgs, validator, codec) { |
| + |
| + function sendRunOrClosePipeMessage(receiver, runOrClosePipeMsgParams) { |
| + var messageName = interfaceCtrlMsgs.kRunOrClosePipeMessageId; |
| + var payloadSize = interfaceCtrlMsgs.RunOrClosePipeMessageParams |
| + .encodedSize; |
| + var builder = new codec.MessageBuilder(messageName, payloadSize); |
| + builder.encodeStruct(interfaceCtrlMsgs.RunOrClosePipeMessageParams, |
| + runOrClosePipeMsgParams); |
| + var message = builder.finish(); |
| + receiver.accept(message); |
| + } |
| + |
| + function validateControlResponse(message){ |
| + var error = validator.validateMessageIsResponse(message); |
| + if (error != validator.validationError.None) { |
| + throw error; |
| + } |
| + |
| + if (!message.getName() && |
| + message.getName() != interfaceCtrlMsgs.kRunMessageId) { |
| + throw new Error(`Control message name is not |
| + interfaceCtrlMsgs.kRunMessageId`); |
| + } |
| + } |
| + |
| + function runResponseForwardAccept(message) { |
| + validateControlResponse(message); |
| + |
| + var reader = new codec.MessageReader(message); |
| + var runResponseMessageParams = reader.decodeStruct( |
| + interfaceCtrlMsgs.RunResponseMessageParams); |
| + |
| + return Promise.resolve(runResponseMessageParams); |
| + } |
| + |
| + /** |
| + * Sends the given run message through the receiver. |
| + * @param {Router} receiver. |
| + * @param {RunMessageParams} runMessageParams. |
| + * @return {Promise} |
| + */ |
| + function sendRunMessage(receiver, runMessageParams) { |
| + var messageName = interfaceCtrlMsgs.kRunMessageId; |
| + var payloadSize = interfaceCtrlMsgs.RunMessageParams.encodedSize; |
| + var builder = new codec.MessageBuilder(messageName, payloadSize); |
| + builder.encodeStruct(interfaceCtrlMsgs.RunMessageParams, |
| + runMessageParams); |
| + var message = builder.finish(); |
| + |
| + return receiver.acceptAndExpectResponse(message).then( |
|
wangjimmy
2017/02/04 01:32:42
Router.js 's acceptAndExpectResponse never resolve
|
| + runResponseForwardAccept); |
| + } |
| + |
| + function runVersion(runResponseMessageParams) { |
| + if (runResponseMessageParams.output && |
| + runResponseMessageParams.output.tag == |
| + interfaceCtrlMsgs.RunOutput.Tags.query_version_result) { |
| + var version = runResponseMessageParams.output |
| + .query_version_result |
| + .version; |
| + return version; |
| + } |
| + } |
| + |
| + function ControlMessageProxy() { |
| + this.receiver = null; |
| + } |
| + |
| + ControlMessageProxy.prototype.queryVersion = function queryVersion() { |
| + var runMessageParams = new interfaceCtrlMsgs.RunMessageParams(); |
| + runMessageParams.input = new interfaceCtrlMsgs.RunInput(); |
| + runMessageParams.input.query_version = new |
| + interfaceCtrlMsgs.QueryVersion(); |
| + |
| + return sendRunMessage(this.receiver, runMessageParams).then(runVersion); |
| + }; |
| + |
| + ControlMessageProxy.prototype.requireVersion = function |
| + requireVersion(version) { |
| + |
| + var runOrClosePipeMsgParams = new |
| + interfaceCtrlMsgs.RunOrClosePipeMessageParams(); |
| + runOrClosePipeMsgParams.input = new interfaceCtrlMsgs.RunOrClosePipeInput(); |
| + runOrClosePipeMsgParams.input.require_version = new |
| + interfaceCtrlMsgs.RequireVersion({'version': version}); |
| + sendRunOrClosePipeMessage(this.receiver, runOrClosePipeMsgParams); |
| + }; |
| + |
| + var exports = {}; |
| + exports.ControlMessageProxy = ControlMessageProxy; |
| + |
| + return exports; |
| +}); |