Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(253)

Side by Side Diff: mojo/public/js/lib/control_message_handler.js

Issue 2676443005: Add interface versioning. Methods queryVersion and requireVersion. (Closed)
Patch Set: Expect the result inside the error handler for test. Code formatting and address codereview comment… Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/public/js/constants.cc ('k') | mojo/public/js/lib/control_message_proxy.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 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 define("mojo/public/js/lib/control_message_handler", [
6 "mojo/public/js/codec",
7 "mojo/public/interfaces/bindings/interface_control_messages.mojom",
8 "mojo/public/js/validator",
9 ], function(codec, controlMessages, validator) {
10
11 var Validator = validator.Validator;
12
13 function validateControlRequestWithResponse(message) {
14 var messageValidator = new Validator(message);
15 var error = messageValidator.validateMessageIsRequestExpectingResponse();
16 if (error !== validator.validationError.NONE) {
17 throw error;
18 }
19
20 if (message.getName() != controlMessages.kRunMessageId) {
21 throw new Error("Control message name is not kRunMessageId");
22 }
23
24 // Validate payload.
25 error = controlMessages.RunMessageParams.validate(messageValidator,
26 message.getHeaderNumBytes());
27 if (error != validator.validationError.NONE) {
28 throw error;
29 }
30 }
31
32 function validateControlRequestWithoutResponse(message) {
33 var messageValidator = new Validator(message);
34 var error = messageValidator.validateMessageIsRequestWithoutResponse();
35 if (error != validator.validationError.NONE) {
36 throw error;
37 }
38
39 if (message.getName() != controlMessages.kRunOrClosePipeMessageId) {
40 throw new Error("Control message name is not kRunOrClosePipeMessageId");
41 }
42
43 // Validate payload.
44 error = controlMessages.RunOrClosePipeMessageParams.validate(
45 messageValidator, message.getHeaderNumBytes());
46 if (error != validator.validationError.NONE) {
47 throw error;
48 }
49 }
50
51 function runOrClosePipe(message, interface_version) {
52 var reader = new codec.MessageReader(message);
53 var runOrClosePipeMessageParams = reader.decodeStruct(
54 controlMessages.RunOrClosePipeMessageParams);
55 return interface_version >=
56 runOrClosePipeMessageParams.input.require_version.version;
57 }
58
59 function run(message, responder, interface_version) {
60 var reader = new codec.MessageReader(message);
61 var runMessageParams =
62 reader.decodeStruct(controlMessages.RunMessageParams);
63 var runOutput = null;
64
65 if (runMessageParams.input.query_version) {
66 runOutput = new controlMessages.RunOutput();
67 runOutput.query_version_result = new
68 controlMessages.QueryVersionResult({'version': interface_version});
69 }
70
71 var runResponseMessageParams = new
72 controlMessages.RunResponseMessageParams();
73 runResponseMessageParams.output = runOutput;
74
75 var messageName = controlMessages.kRunMessageId;
76 var payloadSize = controlMessages.RunResponseMessageParams.encodedSize;
77 var requestID = reader.requestID;
78 var builder = new codec.MessageWithRequestIDBuilder(messageName,
79 payloadSize, codec.kMessageIsResponse, requestID);
80 builder.encodeStruct(controlMessages.RunResponseMessageParams,
81 runResponseMessageParams);
82 responder.accept(builder.finish());
83 return true;
84 }
85
86 function isControlMessage(message) {
87 return message.getName() == controlMessages.kRunMessageId ||
88 message.getName() == controlMessages.kRunOrClosePipeMessageId;
89 }
90
91 function ControlMessageHandler(interface_version) {
92 this.interface_version = interface_version;
93 }
94
95 ControlMessageHandler.prototype.accept = function(message) {
96 validateControlRequestWithoutResponse(message);
97 return runOrClosePipe(message, this.interface_version);
98 };
99
100 ControlMessageHandler.prototype.acceptWithResponder = function(message,
101 responder) {
102 validateControlRequestWithResponse(message);
103 return run(message, responder, this.interface_version);
104 };
105
106 var exports = {};
107 exports.ControlMessageHandler = ControlMessageHandler;
108 exports.isControlMessage = isControlMessage;
109
110 return exports;
111 });
OLDNEW
« no previous file with comments | « mojo/public/js/constants.cc ('k') | mojo/public/js/lib/control_message_proxy.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698