| 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; |
| 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; |
| 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; |
| 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; |
| 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 |