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..9102f90794e7e0f6750d7ce58f05862002d23d54 |
| --- /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/js/codec", |
|
yzshen1
2017/02/13 23:44:23
alphabetically, please.
wangjimmy
2017/02/14 00:06:06
Done.
|
| + "mojo/public/interfaces/bindings/interface_control_messages.mojom", |
| + "mojo/public/js/validator", |
| +], function(codec, controlMessages, validator) { |
| + |
| + var Validator = validator.Validator; |
| + |
| + function sendRunOrClosePipeMessage(receiver, runOrClosePipeMessageParams) { |
| + var messageName = controlMessages.kRunOrClosePipeMessageId; |
| + var payloadSize = controlMessages.RunOrClosePipeMessageParams.encodedSize; |
| + var builder = new codec.MessageBuilder(messageName, payloadSize); |
| + builder.encodeStruct(controlMessages.RunOrClosePipeMessageParams, |
| + runOrClosePipeMessageParams); |
| + var message = builder.finish(); |
| + receiver.accept(message); |
| + } |
| + |
| + function validateControlResponse(message) { |
| + var messageValidator = new Validator(message); |
| + var error = messageValidator.validateMessageIsResponse(); |
| + if (error != validator.validationError.NONE) { |
| + throw error; |
| + } |
| + |
| + if (message.getName() != controlMessages.kRunMessageId) { |
| + throw new Error("Control message name is not kRunMessageId"); |
| + } |
| + |
| + // Validate payload. |
| + error = controlMessages.RunResponseMessageParams.validate( |
| + messageValidator, message.getHeaderNumBytes()); |
| + if (error != validator.validationError.NONE) { |
| + throw error; |
| + } |
| + } |
| + |
| + function acceptRunResponse(message) { |
| + validateControlResponse(message); |
| + |
| + var reader = new codec.MessageReader(message); |
| + var runResponseMessageParams = reader.decodeStruct( |
| + controlMessages.RunResponseMessageParams); |
| + |
| + return Promise.resolve(runResponseMessageParams); |
| + } |
| + |
| + /** |
| + * Sends the given run message through the receiver. |
| + * Accept the response message from the receiver and decode. |
|
yzshen1
2017/02/13 23:44:23
Accept -> Accepts; decode -> decodes.
Because the
wangjimmy
2017/02/14 00:06:06
Done.
|
| + * the message struct to RunResponseMessageParams. |
|
yzshen1
2017/02/13 23:44:23
I guess this is part of the sentence of the previo
wangjimmy
2017/02/14 00:06:06
Done.
|
| + * . |
|
yzshen1
2017/02/13 23:44:23
Please remove "."
wangjimmy
2017/02/14 00:06:06
Done.
|
| + * @param {Router} receiver. |
| + * @param {RunMessageParams} runMessageParams to be sent via a message. |
| + * @return {Promise} that resolves to a RunResponseMessageParams. |
| + */ |
| + function sendRunMessage(receiver, runMessageParams) { |
| + var messageName = controlMessages.kRunMessageId; |
| + var payloadSize = controlMessages.RunMessageParams.encodedSize; |
| + // |requestID| is set to 0, but is later properly set by Router. |
| + var builder = new codec.MessageWithRequestIDBuilder(messageName, |
| + payloadSize, codec.kMessageExpectsResponse, 0); |
| + builder.encodeStruct(controlMessages.RunMessageParams, runMessageParams); |
| + var message = builder.finish(); |
| + |
| + return receiver.acceptAndExpectResponse(message).then(acceptRunResponse); |
| + } |
| + |
| + function ControlMessageProxy(receiver) { |
| + this.receiver = receiver; |
| + } |
| + |
| + ControlMessageProxy.prototype.queryVersion = function() { |
| + var runMessageParams = new controlMessages.RunMessageParams(); |
| + runMessageParams.input = new controlMessages.RunInput(); |
| + runMessageParams.input.query_version = new controlMessages.QueryVersion(); |
| + |
| + return sendRunMessage(this.receiver, runMessageParams).then(function( |
| + runResponseMessageParams) { |
| + return runResponseMessageParams.output.query_version_result.version; |
| + }); |
| + }; |
| + |
| + ControlMessageProxy.prototype.requireVersion = function(version) { |
| + var runOrClosePipeMessageParams = new |
| + controlMessages.RunOrClosePipeMessageParams(); |
| + runOrClosePipeMessageParams.input = new |
| + controlMessages.RunOrClosePipeInput(); |
| + runOrClosePipeMessageParams.input.require_version = new |
| + controlMessages.RequireVersion({'version': version}); |
| + sendRunOrClosePipeMessage(this.receiver, runOrClosePipeMessageParams); |
| + }; |
| + |
| + var exports = {}; |
| + exports.ControlMessageProxy = ControlMessageProxy; |
| + |
| + return exports; |
| +}); |