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

Side by Side Diff: mojo/public/js/bindings/codec.js

Issue 468713002: JavaScript bindings for Mojo message validation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Skip unexpected null tests" Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | mojo/public/js/bindings/router.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 define("mojo/public/js/bindings/codec", [ 5 define("mojo/public/js/bindings/codec", [
6 "mojo/public/js/bindings/unicode", 6 "mojo/public/js/bindings/unicode",
7 "mojo/public/js/bindings/buffer" 7 "mojo/public/js/bindings/buffer"
8 ], function(unicode, buffer) { 8 ], function(unicode, buffer) {
9 9
10 var kErrorUnsigned = "Passing negative value to unsigned"; 10 var kErrorUnsigned = "Passing negative value to unsigned";
(...skipping 13 matching lines...) Expand all
24 // Constants ---------------------------------------------------------------- 24 // Constants ----------------------------------------------------------------
25 25
26 var kArrayHeaderSize = 8; 26 var kArrayHeaderSize = 8;
27 var kStructHeaderSize = 8; 27 var kStructHeaderSize = 8;
28 var kMessageHeaderSize = 16; 28 var kMessageHeaderSize = 16;
29 var kMessageWithRequestIDHeaderSize = 24; 29 var kMessageWithRequestIDHeaderSize = 24;
30 30
31 var kStructHeaderNumBytesOffset = 0; 31 var kStructHeaderNumBytesOffset = 0;
32 var kStructHeaderNumFieldsOffset = 4; 32 var kStructHeaderNumFieldsOffset = 4;
33 33
34 var kEncodedInvalidHandleValue = 0xFFFFFFFF;
35
34 // Decoder ------------------------------------------------------------------ 36 // Decoder ------------------------------------------------------------------
35 37
36 function Decoder(buffer, handles, base) { 38 function Decoder(buffer, handles, base) {
37 this.buffer = buffer; 39 this.buffer = buffer;
38 this.handles = handles; 40 this.handles = handles;
39 this.base = base; 41 this.base = base;
40 this.next = base; 42 this.next = base;
41 } 43 }
42 44
43 Decoder.prototype.skip = function(offset) { 45 Decoder.prototype.skip = function(offset) {
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 var base = this.next; 130 var base = this.next;
129 this.next += numberOfElements; 131 this.next += numberOfElements;
130 return unicode.decodeUtf8String( 132 return unicode.decodeUtf8String(
131 new Uint8Array(this.buffer.arrayBuffer, base, numberOfElements)); 133 new Uint8Array(this.buffer.arrayBuffer, base, numberOfElements));
132 }; 134 };
133 135
134 Decoder.prototype.decodeArray = function(cls) { 136 Decoder.prototype.decodeArray = function(cls) {
135 var numberOfBytes = this.readUint32(); 137 var numberOfBytes = this.readUint32();
136 var numberOfElements = this.readUint32(); 138 var numberOfElements = this.readUint32();
137 var val = new Array(numberOfElements); 139 var val = new Array(numberOfElements);
138 if (cls.cls === PackedBool) { 140 if (cls === PackedBool) {
139 var byte; 141 var byte;
140 for (var i = 0; i < numberOfElements; ++i) { 142 for (var i = 0; i < numberOfElements; ++i) {
141 if (i % 8 === 0) 143 if (i % 8 === 0)
142 byte = this.readUint8(); 144 byte = this.readUint8();
143 val[i] = (byte & (1 << i % 8)) ? true : false; 145 val[i] = (byte & (1 << i % 8)) ? true : false;
144 } 146 }
145 } else { 147 } else {
146 for (var i = 0; i < numberOfElements; ++i) { 148 for (var i = 0; i < numberOfElements; ++i) {
147 val[i] = cls.decode(this); 149 val[i] = cls.decode(this);
148 } 150 }
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 Encoder.prototype.encodeArray = 288 Encoder.prototype.encodeArray =
287 function(cls, val, numberOfElements, encodedSize) { 289 function(cls, val, numberOfElements, encodedSize) {
288 if (numberOfElements === undefined) 290 if (numberOfElements === undefined)
289 numberOfElements = val.length; 291 numberOfElements = val.length;
290 if (encodedSize === undefined) 292 if (encodedSize === undefined)
291 encodedSize = kArrayHeaderSize + cls.encodedSize * numberOfElements; 293 encodedSize = kArrayHeaderSize + cls.encodedSize * numberOfElements;
292 294
293 this.writeUint32(encodedSize); 295 this.writeUint32(encodedSize);
294 this.writeUint32(numberOfElements); 296 this.writeUint32(numberOfElements);
295 297
296 if (cls.cls === PackedBool) { 298 if (cls === PackedBool) {
297 var byte = 0; 299 var byte = 0;
298 for (i = 0; i < numberOfElements; ++i) { 300 for (i = 0; i < numberOfElements; ++i) {
299 if (val[i]) 301 if (val[i])
300 byte |= (1 << i % 8); 302 byte |= (1 << i % 8);
301 if (i % 8 === 7 || i == numberOfElements - 1) { 303 if (i % 8 === 7 || i == numberOfElements - 1) {
302 Uint8.encode(this, byte); 304 Uint8.encode(this, byte);
303 byte = 0; 305 byte = 0;
304 } 306 }
305 } 307 }
306 } else { 308 } else {
(...skipping 14 matching lines...) Expand all
321 var encoder = this.createAndEncodeEncoder(cls.encodedSize); 323 var encoder = this.createAndEncodeEncoder(cls.encodedSize);
322 cls.encode(encoder, val); 324 cls.encode(encoder, val);
323 }; 325 };
324 326
325 Encoder.prototype.encodeArrayPointer = function(cls, val) { 327 Encoder.prototype.encodeArrayPointer = function(cls, val) {
326 if (!val) { 328 if (!val) {
327 this.encodePointer(val); 329 this.encodePointer(val);
328 return; 330 return;
329 } 331 }
330 var numberOfElements = val.length; 332 var numberOfElements = val.length;
331 var encodedSize = kArrayHeaderSize + ((cls.cls === PackedBool) ? 333 var encodedSize = kArrayHeaderSize + ((cls === PackedBool) ?
332 Math.ceil(numberOfElements / 8) : cls.encodedSize * numberOfElements); 334 Math.ceil(numberOfElements / 8) : cls.encodedSize * numberOfElements);
333 var encoder = this.createAndEncodeEncoder(encodedSize); 335 var encoder = this.createAndEncodeEncoder(encodedSize);
334 encoder.encodeArray(cls, val, numberOfElements, encodedSize); 336 encoder.encodeArray(cls, val, numberOfElements, encodedSize);
335 }; 337 };
336 338
337 Encoder.prototype.encodeStringPointer = function(val) { 339 Encoder.prototype.encodeStringPointer = function(val) {
338 if (!val) { 340 if (!val) {
339 this.encodePointer(val); 341 this.encodePointer(val);
340 return; 342 return;
341 } 343 }
(...skipping 17 matching lines...) Expand all
359 } 361 }
360 362
361 Message.prototype.getHeaderNumBytes = function() { 363 Message.prototype.getHeaderNumBytes = function() {
362 return this.buffer.getUint32(kStructHeaderNumBytesOffset); 364 return this.buffer.getUint32(kStructHeaderNumBytesOffset);
363 }; 365 };
364 366
365 Message.prototype.getHeaderNumFields = function() { 367 Message.prototype.getHeaderNumFields = function() {
366 return this.buffer.getUint32(kStructHeaderNumFieldsOffset); 368 return this.buffer.getUint32(kStructHeaderNumFieldsOffset);
367 }; 369 };
368 370
371 Message.prototype.getName = function() {
372 return this.buffer.getUint32(kMessageNameOffset);
373 };
374
369 Message.prototype.getFlags = function() { 375 Message.prototype.getFlags = function() {
370 return this.buffer.getUint32(kMessageFlagsOffset); 376 return this.buffer.getUint32(kMessageFlagsOffset);
371 }; 377 };
372 378
373 Message.prototype.isResponse = function() { 379 Message.prototype.isResponse = function() {
374 return (this.getFlags() & kMessageIsResponse) != 0; 380 return (this.getFlags() & kMessageIsResponse) != 0;
375 }; 381 };
376 382
377 Message.prototype.expectsResponse = function() { 383 Message.prototype.expectsResponse = function() {
378 return (this.getFlags() & kMessageExpectsResponse) != 0; 384 return (this.getFlags() & kMessageExpectsResponse) != 0;
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 672
667 var exports = {}; 673 var exports = {};
668 exports.align = align; 674 exports.align = align;
669 exports.isAligned = isAligned; 675 exports.isAligned = isAligned;
670 exports.Message = Message; 676 exports.Message = Message;
671 exports.MessageBuilder = MessageBuilder; 677 exports.MessageBuilder = MessageBuilder;
672 exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder; 678 exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder;
673 exports.MessageReader = MessageReader; 679 exports.MessageReader = MessageReader;
674 exports.kArrayHeaderSize = kArrayHeaderSize; 680 exports.kArrayHeaderSize = kArrayHeaderSize;
675 exports.kStructHeaderSize = kStructHeaderSize; 681 exports.kStructHeaderSize = kStructHeaderSize;
682 exports.kEncodedInvalidHandleValue = kEncodedInvalidHandleValue;
676 exports.kMessageHeaderSize = kMessageHeaderSize; 683 exports.kMessageHeaderSize = kMessageHeaderSize;
677 exports.kMessageWithRequestIDHeaderSize = kMessageWithRequestIDHeaderSize; 684 exports.kMessageWithRequestIDHeaderSize = kMessageWithRequestIDHeaderSize;
678 exports.kMessageExpectsResponse = kMessageExpectsResponse; 685 exports.kMessageExpectsResponse = kMessageExpectsResponse;
679 exports.kMessageIsResponse = kMessageIsResponse; 686 exports.kMessageIsResponse = kMessageIsResponse;
680 exports.Int8 = Int8; 687 exports.Int8 = Int8;
681 exports.Uint8 = Uint8; 688 exports.Uint8 = Uint8;
682 exports.Int16 = Int16; 689 exports.Int16 = Int16;
683 exports.Uint16 = Uint16; 690 exports.Uint16 = Uint16;
684 exports.Int32 = Int32; 691 exports.Int32 = Int32;
685 exports.Uint32 = Uint32; 692 exports.Uint32 = Uint32;
686 exports.Int64 = Int64; 693 exports.Int64 = Int64;
687 exports.Uint64 = Uint64; 694 exports.Uint64 = Uint64;
688 exports.Float = Float; 695 exports.Float = Float;
689 exports.Double = Double; 696 exports.Double = Double;
690 exports.String = String; 697 exports.String = String;
691 exports.PointerTo = PointerTo; 698 exports.PointerTo = PointerTo;
692 exports.ArrayOf = ArrayOf; 699 exports.ArrayOf = ArrayOf;
693 exports.PackedBool = PackedBool; 700 exports.PackedBool = PackedBool;
694 exports.Handle = Handle; 701 exports.Handle = Handle;
695 return exports; 702 return exports;
696 }); 703 });
OLDNEW
« no previous file with comments | « no previous file | mojo/public/js/bindings/router.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698