OLD | NEW |
---|---|
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"; |
11 | 11 |
12 // Memory ------------------------------------------------------------------- | 12 // Memory ------------------------------------------------------------------- |
13 | 13 |
14 var kAlignment = 8; | 14 var kAlignment = 8; |
15 | 15 |
16 function align(size) { | 16 function align(size) { |
17 return size + (kAlignment - (size % kAlignment)) % kAlignment; | 17 return size + (kAlignment - (size % kAlignment)) % kAlignment; |
18 } | 18 } |
19 | 19 |
20 function isAligned(offset) { | |
21 return offset >= 0 && (offset % kAlignment) == 0; | |
Tom Sepez
2014/07/29 16:32:54
nit: purists might insist on === througout.
hansmuller
2014/07/29 19:06:22
Done.
| |
22 } | |
23 | |
20 // Constants ---------------------------------------------------------------- | 24 // Constants ---------------------------------------------------------------- |
21 | 25 |
22 var kArrayHeaderSize = 8; | 26 var kArrayHeaderSize = 8; |
23 var kStructHeaderSize = 8; | 27 var kStructHeaderSize = 8; |
24 var kMessageHeaderSize = 16; | 28 var kMessageHeaderSize = 16; |
25 var kMessageWithRequestIDHeaderSize = 24; | 29 var kMessageWithRequestIDHeaderSize = 24; |
26 | 30 |
27 // Decoder ------------------------------------------------------------------ | 31 // Decoder ------------------------------------------------------------------ |
28 | 32 |
29 function Decoder(buffer, handles, base) { | 33 function Decoder(buffer, handles, base) { |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
348 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val); | 352 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val); |
349 var encoder = this.createAndEncodeEncoder(encodedSize); | 353 var encoder = this.createAndEncodeEncoder(encodedSize); |
350 encoder.encodeString(val); | 354 encoder.encodeString(val); |
351 }; | 355 }; |
352 | 356 |
353 // Message ------------------------------------------------------------------ | 357 // Message ------------------------------------------------------------------ |
354 | 358 |
355 var kMessageExpectsResponse = 1 << 0; | 359 var kMessageExpectsResponse = 1 << 0; |
356 var kMessageIsResponse = 1 << 1; | 360 var kMessageIsResponse = 1 << 1; |
357 | 361 |
362 // Message header is a struct, begins with a struct header. | |
363 var kNumBytesOffset = 0; | |
yzshen1
2014/07/29 05:59:53
Maybe we could consider define these in the "const
hansmuller
2014/07/29 19:06:22
Done.
| |
364 var kNumFieldsOffset = 4; | |
365 | |
358 // Skip over num_bytes, num_fields, and message_name. | 366 // Skip over num_bytes, num_fields, and message_name. |
359 var kFlagsOffset = 4 + 4 + 4; | 367 var kFlagsOffset = 4 + 4 + 4; |
yzshen1
2014/07/29 05:59:53
Some of those 4's (or all of them) could be replac
hansmuller
2014/07/29 19:06:22
Done.
| |
360 | 368 |
361 // Skip over num_bytes, num_fields, message_name, and flags. | 369 // Skip over num_bytes, num_fields, message_name, and flags. |
362 var kRequestIDOffset = 4 + 4 + 4 + 4; | 370 var kRequestIDOffset = 4 + 4 + 4 + 4; |
yzshen1
2014/07/29 05:59:53
ditto.
hansmuller
2014/07/29 19:06:22
Done.
| |
363 | 371 |
364 function Message(buffer, handles) { | 372 function Message(buffer, handles) { |
365 this.buffer = buffer; | 373 this.buffer = buffer; |
366 this.handles = handles; | 374 this.handles = handles; |
367 } | 375 } |
368 | 376 |
377 Message.prototype.getHeaderNumBytes = function() { | |
378 return this.buffer.getUint32(kNumBytesOffset); | |
379 }; | |
380 | |
381 Message.prototype.getHeaderNumFields = function() { | |
382 return this.buffer.getUint32(kNumFieldsOffset); | |
383 }; | |
384 | |
385 Message.prototype.getFlags = function() { | |
386 return this.buffer.getUint32(kFlagsOffset); | |
387 }; | |
388 | |
389 Message.prototype.isResponse = function() { | |
390 return (this.getFlags() & kMessageIsResponse) != 0; | |
391 }; | |
392 | |
393 Message.prototype.expectsResponse = function() { | |
394 return (this.getFlags() & kMessageExpectsResponse) != 0; | |
395 }; | |
396 | |
369 Message.prototype.setRequestID = function(requestID) { | 397 Message.prototype.setRequestID = function(requestID) { |
370 // TODO(darin): Verify that space was reserved for this field! | 398 // TODO(darin): Verify that space was reserved for this field! |
371 this.buffer.setUint64(kRequestIDOffset, requestID); | 399 this.buffer.setUint64(kRequestIDOffset, requestID); |
372 }; | 400 }; |
373 | 401 |
374 Message.prototype.getFlags = function() { | |
375 return this.buffer.getUint32(kFlagsOffset); | |
376 }; | |
377 | 402 |
378 // MessageBuilder ----------------------------------------------------------- | 403 // MessageBuilder ----------------------------------------------------------- |
379 | 404 |
380 function MessageBuilder(messageName, payloadSize) { | 405 function MessageBuilder(messageName, payloadSize) { |
381 // Currently, we don't compute the payload size correctly ahead of time. | 406 // Currently, we don't compute the payload size correctly ahead of time. |
382 // Instead, we resize the buffer at the end. | 407 // Instead, we resize the buffer at the end. |
383 var numberOfBytes = kMessageHeaderSize + payloadSize; | 408 var numberOfBytes = kMessageHeaderSize + payloadSize; |
384 this.buffer = new buffer.Buffer(numberOfBytes); | 409 this.buffer = new buffer.Buffer(numberOfBytes); |
385 this.handles = []; | 410 this.handles = []; |
386 var encoder = this.createEncoder(kMessageHeaderSize); | 411 var encoder = this.createEncoder(kMessageHeaderSize); |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
659 Handle.decode = function(decoder) { | 684 Handle.decode = function(decoder) { |
660 return decoder.decodeHandle(); | 685 return decoder.decodeHandle(); |
661 }; | 686 }; |
662 | 687 |
663 Handle.encode = function(encoder, val) { | 688 Handle.encode = function(encoder, val) { |
664 encoder.encodeHandle(val); | 689 encoder.encodeHandle(val); |
665 }; | 690 }; |
666 | 691 |
667 var exports = {}; | 692 var exports = {}; |
668 exports.align = align; | 693 exports.align = align; |
694 exports.isAligned = isAligned; | |
669 exports.Message = Message; | 695 exports.Message = Message; |
670 exports.MessageBuilder = MessageBuilder; | 696 exports.MessageBuilder = MessageBuilder; |
671 exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder; | 697 exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder; |
672 exports.MessageReader = MessageReader; | 698 exports.MessageReader = MessageReader; |
673 exports.kArrayHeaderSize = kArrayHeaderSize; | 699 exports.kArrayHeaderSize = kArrayHeaderSize; |
674 exports.kStructHeaderSize = kStructHeaderSize; | 700 exports.kStructHeaderSize = kStructHeaderSize; |
675 exports.kMessageHeaderSize = kMessageHeaderSize; | 701 exports.kMessageHeaderSize = kMessageHeaderSize; |
702 exports.kMessageWithRequestIDHeaderSize = kMessageWithRequestIDHeaderSize; | |
676 exports.kMessageExpectsResponse = kMessageExpectsResponse; | 703 exports.kMessageExpectsResponse = kMessageExpectsResponse; |
677 exports.kMessageIsResponse = kMessageIsResponse; | 704 exports.kMessageIsResponse = kMessageIsResponse; |
678 exports.Int8 = Int8; | 705 exports.Int8 = Int8; |
679 exports.Uint8 = Uint8; | 706 exports.Uint8 = Uint8; |
680 exports.Int16 = Int16; | 707 exports.Int16 = Int16; |
681 exports.Uint16 = Uint16; | 708 exports.Uint16 = Uint16; |
682 exports.Int32 = Int32; | 709 exports.Int32 = Int32; |
683 exports.Uint32 = Uint32; | 710 exports.Uint32 = Uint32; |
684 exports.Int64 = Int64; | 711 exports.Int64 = Int64; |
685 exports.Uint64 = Uint64; | 712 exports.Uint64 = Uint64; |
686 exports.Float = Float; | 713 exports.Float = Float; |
687 exports.Double = Double; | 714 exports.Double = Double; |
688 exports.String = String; | 715 exports.String = String; |
689 exports.PointerTo = PointerTo; | 716 exports.PointerTo = PointerTo; |
690 exports.ArrayOf = ArrayOf; | 717 exports.ArrayOf = ArrayOf; |
691 exports.ArrayOfBoolArrayPointers = ArrayOfBoolArrayPointers; | 718 exports.ArrayOfBoolArrayPointers = ArrayOfBoolArrayPointers; |
692 exports.Handle = Handle; | 719 exports.Handle = Handle; |
693 return exports; | 720 return exports; |
694 }); | 721 }); |
OLD | NEW |