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

Unified Diff: mojo/public/js/bindings/codec.js

Issue 424463003: Basic Mojo message header validation for JavaScript. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created a Validator class Created 6 years, 5 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/bindings/codec.js
diff --git a/mojo/public/js/bindings/codec.js b/mojo/public/js/bindings/codec.js
index dca6009071d01a724845d27d8f2dfa9b3f969bc5..45feef2bb1b0ad7fc86f382a9da0be58a21a4974 100644
--- a/mojo/public/js/bindings/codec.js
+++ b/mojo/public/js/bindings/codec.js
@@ -17,6 +17,10 @@ define("mojo/public/js/bindings/codec", [
return size + (kAlignment - (size % kAlignment)) % kAlignment;
}
+ function isAligned(offset) {
+ return offset >= 0 && (offset % kAlignment) == 0;
+ }
+
// Constants ----------------------------------------------------------------
var kArrayHeaderSize = 8;
@@ -355,6 +359,10 @@ define("mojo/public/js/bindings/codec", [
var kMessageExpectsResponse = 1 << 0;
var kMessageIsResponse = 1 << 1;
+ // Message header is a struct, begins with a struct header.
+ var kNumBytesOffset = 0;
+ var kNumFieldsOffset = 4;
+
// Skip over num_bytes, num_fields, and message_name.
var kFlagsOffset = 4 + 4 + 4;
@@ -366,15 +374,32 @@ define("mojo/public/js/bindings/codec", [
this.handles = handles;
}
- Message.prototype.setRequestID = function(requestID) {
- // TODO(darin): Verify that space was reserved for this field!
- this.buffer.setUint64(kRequestIDOffset, requestID);
+ Message.prototype.getHeaderNumBytes = function() {
+ return this.buffer.getUint32(kNumBytesOffset);
+ };
+
+ Message.prototype.getHeaderNumFields = function() {
+ return this.buffer.getUint32(kNumFieldsOffset);
};
Message.prototype.getFlags = function() {
return this.buffer.getUint32(kFlagsOffset);
};
+ Message.prototype.isResponse = function() {
+ return (this.getFlags() & kMessageIsResponse) != 0;
+ };
+
+ Message.prototype.expectsResponse = function() {
+ return (this.getFlags() & kMessageExpectsResponse) != 0;
+ };
+
+ Message.prototype.setRequestID = function(requestID) {
+ // TODO(darin): Verify that space was reserved for this field!
+ this.buffer.setUint64(kRequestIDOffset, requestID);
+ };
+
+
// MessageBuilder -----------------------------------------------------------
function MessageBuilder(messageName, payloadSize) {
@@ -666,6 +691,7 @@ define("mojo/public/js/bindings/codec", [
var exports = {};
exports.align = align;
+ exports.isAligned = isAligned;
exports.Message = Message;
exports.MessageBuilder = MessageBuilder;
exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder;
@@ -673,6 +699,7 @@ define("mojo/public/js/bindings/codec", [
exports.kArrayHeaderSize = kArrayHeaderSize;
exports.kStructHeaderSize = kStructHeaderSize;
exports.kMessageHeaderSize = kMessageHeaderSize;
+ exports.kMessageWithRequestIDHeaderSize = kMessageWithRequestIDHeaderSize;
exports.kMessageExpectsResponse = kMessageExpectsResponse;
exports.kMessageIsResponse = kMessageIsResponse;
exports.Int8 = Int8;

Powered by Google App Engine
This is Rietveld 408576698