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

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

Issue 2676443005: Add interface versioning. Methods queryVersion and requireVersion. (Closed)
Patch Set: Add interface_control_messages.mojom.js to build resources 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
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/interfaces/bindings/interface_control_messages.mojom",
7 "mojo/public/js/validator",
yzshen1 2017/02/11 01:11:29 order the list alphabetically, please.
wangjimmy 2017/02/13 20:43:06 Done.
8 "mojo/public/js/codec",
9 ], function(interfaceCtrlMsgs, validator, codec) {
yzshen1 2017/02/11 01:11:29 interfaceCtrlMsgs -> controlMessages ?
wangjimmy 2017/02/13 20:43:06 Done.
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() &&
yzshen1 2017/02/11 01:11:29 !message.getName() seems wrong, I guess you mean m
wangjimmy 2017/02/13 20:43:07 Done.
21 message.getName() != interfaceCtrlMsgs.kRunMessageId) {
22 throw new Error('Control message name is not kRunMessageId');
yzshen1 2017/02/11 01:11:29 We should probably use double quotes here (and bel
yzshen1 2017/02/11 01:11:29 We also need to validate the payload of the messag
wangjimmy 2017/02/13 20:43:06 Done.
wangjimmy 2017/02/13 20:43:06 Done.
23 }
24 }
25
26 function validateControlRequestWithoutResponse(message) {
27 var messageValidator = new Validator(message);
28 var error = messageValidator.validateMessageIsRequestWithoutResponse();
29 if (error != validator.validationError.NONE) {
30 throw error;
31 }
32
33 if (!message.getName() &&
yzshen1 2017/02/11 01:11:29 see comment above.
wangjimmy 2017/02/13 20:43:06 Done.
34 message.getName() != interfaceCtrlMsgs.kRunOrClosePipeMessageId) {
35 throw new Error('Control message name is not kRunOrClosePipeMessageId');
yzshen1 2017/02/11 01:11:28 We also need to validate the payload.
wangjimmy 2017/02/13 20:43:06 Done.
36 }
37 }
38
39 function runOrClosePipe(message, interface_version) {
40 var reader = new codec.MessageReader(message);
41 var runOrClosePipeMsgParams = reader.decodeStruct(
42 interfaceCtrlMsgs.RunOrClosePipeMessageParams);
43 return interface_version >= runOrClosePipeMsgParams.input
yzshen1 2017/02/11 01:11:29 Formatting: return interface_version >= runOr
wangjimmy 2017/02/13 20:43:06 Done.
44 .require_version
45 .version;
46 }
47
48 function run(message, responder, interface_version) {
49 var reader = new codec.MessageReader(message);
50 var runMsgParams = reader.decodeStruct(interfaceCtrlMsgs.RunMessageParams);
51 var runOutput = null;
52
53 if (runMsgParams.input.query_version) {
54 runOutput = new interfaceCtrlMsgs.RunOutput();
55 runOutput.query_version_result = new
56 interfaceCtrlMsgs.QueryVersionResult({'version': interface_version});
yzshen1 2017/02/11 01:11:28 4 spaces.
wangjimmy 2017/02/13 20:43:06 Done.
57 }
58
59 var runResponseMsgParams = new interfaceCtrlMsgs.RunResponseMessageParams();
60 runResponseMsgParams.output = runOutput;
61
62 var messageName = interfaceCtrlMsgs.kRunMessageId;
63 var payloadSize = interfaceCtrlMsgs.RunResponseMessageParams.encodedSize;
64 var requestID = reader.requestID;
65 var builder = new codec.MessageWithRequestIDBuilder(messageName,
66 payloadSize, codec.kMessageIsResponse, requestID);
yzshen1 2017/02/11 01:11:29 4 spaces
wangjimmy 2017/02/13 20:43:06 Done.
67 builder.encodeStruct(interfaceCtrlMsgs.RunResponseMessageParams,
68 runResponseMsgParams);
69 responder.accept(builder.finish());
70 return true;
71 }
72
73 function isControlMessage(message) {
74 return message.getName() == interfaceCtrlMsgs.kRunMessageId ||
75 message.getName() == interfaceCtrlMsgs.kRunOrClosePipeMessageId;
76 }
77
78 function ControlMessageHandler(responder, interface_version) {
yzshen1 2017/02/11 01:11:28 Maybe we should remove responder from the construc
wangjimmy 2017/02/13 20:43:07 Done.
79 this.responder = responder;
80 this.interface_version = interface_version;
81 }
82
83 ControlMessageHandler.prototype.accept = function(message) {
84 validateControlRequestWithoutResponse(message);
85 return runOrClosePipe(message, this.interface_version);
86 };
87
88 ControlMessageHandler.prototype.acceptWithResponder = function(message) {
yzshen1 2017/02/11 01:11:28 The calling code pass a responder to this method,
wangjimmy 2017/02/13 20:43:06 Done.
89 validateControlRequestWithResponse(message);
90 return run(message, this.responder, this.interface_version);
91 };
92
93 var exports = {};
94 exports.ControlMessageHandler = ControlMessageHandler;
95 exports.isControlMessage = isControlMessage;
96
97 return exports;
98 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698