| Index: mojo/public/js/lib/control_message_handler.js
|
| diff --git a/mojo/public/js/lib/control_message_handler.js b/mojo/public/js/lib/control_message_handler.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..81d9002e0bba86a3022ef3c1cc1c5f85256aa7b1
|
| --- /dev/null
|
| +++ b/mojo/public/js/lib/control_message_handler.js
|
| @@ -0,0 +1,111 @@
|
| +// 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_handler", [
|
| + "mojo/public/js/codec",
|
| + "mojo/public/interfaces/bindings/interface_control_messages.mojom",
|
| + "mojo/public/js/validator",
|
| +], function(codec, controlMessages, validator) {
|
| +
|
| + var Validator = validator.Validator;
|
| +
|
| + function validateControlRequestWithResponse(message) {
|
| + var messageValidator = new Validator(message);
|
| + var error = messageValidator.validateMessageIsRequestExpectingResponse();
|
| + 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.RunMessageParams.validate(messageValidator,
|
| + message.getHeaderNumBytes());
|
| + if (error != validator.validationError.NONE) {
|
| + throw error;
|
| + }
|
| + }
|
| +
|
| + function validateControlRequestWithoutResponse(message) {
|
| + var messageValidator = new Validator(message);
|
| + var error = messageValidator.validateMessageIsRequestWithoutResponse();
|
| + if (error != validator.validationError.NONE) {
|
| + throw error;
|
| + }
|
| +
|
| + if (message.getName() != controlMessages.kRunOrClosePipeMessageId) {
|
| + throw new Error("Control message name is not kRunOrClosePipeMessageId");
|
| + }
|
| +
|
| + // Validate payload.
|
| + error = controlMessages.RunOrClosePipeMessageParams.validate(
|
| + messageValidator, message.getHeaderNumBytes());
|
| + if (error != validator.validationError.NONE) {
|
| + throw error;
|
| + }
|
| + }
|
| +
|
| + function runOrClosePipe(message, interface_version) {
|
| + var reader = new codec.MessageReader(message);
|
| + var runOrClosePipeMessageParams = reader.decodeStruct(
|
| + controlMessages.RunOrClosePipeMessageParams);
|
| + return interface_version >=
|
| + runOrClosePipeMessageParams.input.require_version.version;
|
| + }
|
| +
|
| + function run(message, responder, interface_version) {
|
| + var reader = new codec.MessageReader(message);
|
| + var runMessageParams =
|
| + reader.decodeStruct(controlMessages.RunMessageParams);
|
| + var runOutput = null;
|
| +
|
| + if (runMessageParams.input.query_version) {
|
| + runOutput = new controlMessages.RunOutput();
|
| + runOutput.query_version_result = new
|
| + controlMessages.QueryVersionResult({'version': interface_version});
|
| + }
|
| +
|
| + var runResponseMessageParams = new
|
| + controlMessages.RunResponseMessageParams();
|
| + runResponseMessageParams.output = runOutput;
|
| +
|
| + var messageName = controlMessages.kRunMessageId;
|
| + var payloadSize = controlMessages.RunResponseMessageParams.encodedSize;
|
| + var requestID = reader.requestID;
|
| + var builder = new codec.MessageWithRequestIDBuilder(messageName,
|
| + payloadSize, codec.kMessageIsResponse, requestID);
|
| + builder.encodeStruct(controlMessages.RunResponseMessageParams,
|
| + runResponseMessageParams);
|
| + responder.accept(builder.finish());
|
| + return true;
|
| + }
|
| +
|
| + function isControlMessage(message) {
|
| + return message.getName() == controlMessages.kRunMessageId ||
|
| + message.getName() == controlMessages.kRunOrClosePipeMessageId;
|
| + }
|
| +
|
| + function ControlMessageHandler(interface_version) {
|
| + this.interface_version = interface_version;
|
| + }
|
| +
|
| + ControlMessageHandler.prototype.accept = function(message) {
|
| + validateControlRequestWithoutResponse(message);
|
| + return runOrClosePipe(message, this.interface_version);
|
| + };
|
| +
|
| + ControlMessageHandler.prototype.acceptWithResponder = function(message,
|
| + responder) {
|
| + validateControlRequestWithResponse(message);
|
| + return run(message, responder, this.interface_version);
|
| + };
|
| +
|
| + var exports = {};
|
| + exports.ControlMessageHandler = ControlMessageHandler;
|
| + exports.isControlMessage = isControlMessage;
|
| +
|
| + return exports;
|
| +});
|
|
|