| 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"; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 }); |
| OLD | NEW |