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 |