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

Unified Diff: mojo/public/js/lib/control_message_proxy.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 side-by-side diff with in-line comments
Download patch
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..1dd461482c6feaf86382d57e8bf6600733dc50f6
--- /dev/null
+++ b/mojo/public/js/lib/control_message_proxy.js
@@ -0,0 +1,97 @@
+// 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",
yzshen1 2017/02/11 01:11:29 Alphabetically, please.
wangjimmy 2017/02/13 20:43:07 Done.
+ "mojo/public/js/codec",
+], function(interfaceCtrlMsgs, validator, codec) {
yzshen1 2017/02/11 01:11:29 interfaceCtrlMsgs -> controlMessages?
wangjimmy 2017/02/13 20:43:07 Done.
+
+ var Validator = validator.Validator;
+
+ 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 messageValidator = new Validator(message);
+ var error = messageValidator.validateMessageIsResponse();
+ if (error != validator.validationError.NONE) {
+ throw error;
+ }
+
+ if (!message.getName() &&
yzshen1 2017/02/11 01:11:29 Do we need this check at all?
wangjimmy 2017/02/13 20:43:07 Done.
+ message.getName() != interfaceCtrlMsgs.kRunMessageId) {
+ throw new Error('Control message name is not kRunMessageId');
yzshen1 2017/02/11 01:11:29 Please consider using double quotes. And we need
wangjimmy 2017/02/13 20:43:07 Done.
+ }
+ }
+
+ function accept(message) {
yzshen1 2017/02/11 01:11:29 Could we give it a more descriptive name? We have
wangjimmy 2017/02/13 20:43:07 Done.
+ 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.
+ * Accept the response message from the receiver and decode
+ * the message struct to RunResponseMessageParams.
+ * .
+ * @param {Router} receiver.
+ * @param {RunMessageParams} runMessageParams to be sent via a message.
+ * @return {Promise} that resolves to a RunResponseMessageParams.
+ */
+ function sendRunMessage(receiver, runMsgParams) {
+ var messageName = interfaceCtrlMsgs.kRunMessageId;
+ var payloadSize = interfaceCtrlMsgs.RunMessageParams.encodedSize;
+ // requestID is set to 0, but is later
yzshen1 2017/02/11 01:11:29 Please fill this line to as close to 80 chars as p
wangjimmy 2017/02/13 20:43:07 Done.
+ // properly set by Router's acceptAndExpectResponse
yzshen1 2017/02/11 01:11:29 Usually in comments, we use xxx() to indicate func
wangjimmy 2017/02/13 20:43:07 Done.
+ var builder = new codec.MessageWithRequestIDBuilder(messageName,
+ payloadSize, codec.kMessageExpectsResponse, 0);
+ builder.encodeStruct(interfaceCtrlMsgs.RunMessageParams, runMsgParams);
+ var message = builder.finish();
+
+ return receiver.acceptAndExpectResponse(message).then(accept);
+ }
+
+ function ControlMessageProxy() {
+ this.receiver = null;
+ }
+
+ ControlMessageProxy.prototype.queryVersion = function() {
+ var runMsgParams = new interfaceCtrlMsgs.RunMessageParams();
+ runMsgParams.input = new interfaceCtrlMsgs.RunInput();
+ runMsgParams.input.query_version = new interfaceCtrlMsgs.QueryVersion();
+
+ return sendRunMessage(this.receiver, runMsgParams).then(function(
+ runResponseMsgParams) {
yzshen1 2017/02/11 01:11:29 4 spaces.
wangjimmy 2017/02/13 20:43:07 Done.
+ return runResponseMsgParams.output.query_version_result.version;
+ });
+ };
+
+ ControlMessageProxy.prototype.requireVersion = function(version) {
+ var runOrClosePipeMsgParams = new
+ interfaceCtrlMsgs.RunOrClosePipeMessageParams();
yzshen1 2017/02/11 01:11:29 4 spaces.
wangjimmy 2017/02/13 20:43:07 Done.
+ runOrClosePipeMsgParams.input = new interfaceCtrlMsgs.RunOrClosePipeInput();
+ runOrClosePipeMsgParams.input.require_version = new
+ interfaceCtrlMsgs.RequireVersion({'version': version});
yzshen1 2017/02/11 01:11:29 4 spaces.
wangjimmy 2017/02/13 20:43:07 Done.
+ sendRunOrClosePipeMessage(this.receiver, runOrClosePipeMsgParams);
+ };
+
+ var exports = {};
+ exports.ControlMessageProxy = ControlMessageProxy;
+
+ return exports;
+});

Powered by Google App Engine
This is Rietveld 408576698