| 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 (function() { | 5 define("mojo/public/js/codec", [ |
| 6 var internal = mojoBindings.internal; | 6 "mojo/public/js/buffer", |
| 7 "mojo/public/js/interface_types", |
| 8 "mojo/public/js/unicode", |
| 9 ], function(buffer, types, unicode) { |
| 7 | 10 |
| 8 var kErrorUnsigned = "Passing negative value to unsigned"; | 11 var kErrorUnsigned = "Passing negative value to unsigned"; |
| 9 var kErrorArray = "Passing non Array for array type"; | 12 var kErrorArray = "Passing non Array for array type"; |
| 10 var kErrorString = "Passing non String for string type"; | 13 var kErrorString = "Passing non String for string type"; |
| 11 var kErrorMap = "Passing non Map for map type"; | 14 var kErrorMap = "Passing non Map for map type"; |
| 12 | 15 |
| 13 // Memory ------------------------------------------------------------------- | 16 // Memory ------------------------------------------------------------------- |
| 14 | 17 |
| 15 var kAlignment = 8; | 18 var kAlignment = 8; |
| 16 | 19 |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 | 131 |
| 129 Decoder.prototype.decodeHandle = function() { | 132 Decoder.prototype.decodeHandle = function() { |
| 130 return this.handles[this.readUint32()] || null; | 133 return this.handles[this.readUint32()] || null; |
| 131 }; | 134 }; |
| 132 | 135 |
| 133 Decoder.prototype.decodeString = function() { | 136 Decoder.prototype.decodeString = function() { |
| 134 var numberOfBytes = this.readUint32(); | 137 var numberOfBytes = this.readUint32(); |
| 135 var numberOfElements = this.readUint32(); | 138 var numberOfElements = this.readUint32(); |
| 136 var base = this.next; | 139 var base = this.next; |
| 137 this.next += numberOfElements; | 140 this.next += numberOfElements; |
| 138 return internal.decodeUtf8String( | 141 return unicode.decodeUtf8String( |
| 139 new Uint8Array(this.buffer.arrayBuffer, base, numberOfElements)); | 142 new Uint8Array(this.buffer.arrayBuffer, base, numberOfElements)); |
| 140 }; | 143 }; |
| 141 | 144 |
| 142 Decoder.prototype.decodeArray = function(cls) { | 145 Decoder.prototype.decodeArray = function(cls) { |
| 143 var numberOfBytes = this.readUint32(); | 146 var numberOfBytes = this.readUint32(); |
| 144 var numberOfElements = this.readUint32(); | 147 var numberOfElements = this.readUint32(); |
| 145 var val = new Array(numberOfElements); | 148 var val = new Array(numberOfElements); |
| 146 if (cls === PackedBool) { | 149 if (cls === PackedBool) { |
| 147 var byte; | 150 var byte; |
| 148 for (var i = 0; i < numberOfElements; ++i) { | 151 for (var i = 0; i < numberOfElements; ++i) { |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 if (handle) { | 307 if (handle) { |
| 305 this.handles.push(handle); | 308 this.handles.push(handle); |
| 306 this.writeUint32(this.handles.length - 1); | 309 this.writeUint32(this.handles.length - 1); |
| 307 } else { | 310 } else { |
| 308 this.writeUint32(kEncodedInvalidHandleValue); | 311 this.writeUint32(kEncodedInvalidHandleValue); |
| 309 } | 312 } |
| 310 }; | 313 }; |
| 311 | 314 |
| 312 Encoder.prototype.encodeString = function(val) { | 315 Encoder.prototype.encodeString = function(val) { |
| 313 var base = this.next + kArrayHeaderSize; | 316 var base = this.next + kArrayHeaderSize; |
| 314 var numberOfElements = internal.encodeUtf8String( | 317 var numberOfElements = unicode.encodeUtf8String( |
| 315 val, new Uint8Array(this.buffer.arrayBuffer, base)); | 318 val, new Uint8Array(this.buffer.arrayBuffer, base)); |
| 316 var numberOfBytes = kArrayHeaderSize + numberOfElements; | 319 var numberOfBytes = kArrayHeaderSize + numberOfElements; |
| 317 this.writeUint32(numberOfBytes); | 320 this.writeUint32(numberOfBytes); |
| 318 this.writeUint32(numberOfElements); | 321 this.writeUint32(numberOfElements); |
| 319 this.next += numberOfElements; | 322 this.next += numberOfElements; |
| 320 }; | 323 }; |
| 321 | 324 |
| 322 Encoder.prototype.encodeArray = | 325 Encoder.prototype.encodeArray = |
| 323 function(cls, val, numberOfElements, encodedSize) { | 326 function(cls, val, numberOfElements, encodedSize) { |
| 324 if (numberOfElements === undefined) | 327 if (numberOfElements === undefined) |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 Encoder.prototype.encodeStringPointer = function(val) { | 382 Encoder.prototype.encodeStringPointer = function(val) { |
| 380 if (val == null) { | 383 if (val == null) { |
| 381 // Also handles undefined, since undefined == null. | 384 // Also handles undefined, since undefined == null. |
| 382 this.encodePointer(val); | 385 this.encodePointer(val); |
| 383 return; | 386 return; |
| 384 } | 387 } |
| 385 // Only accepts string primivites, not String Objects like new String("foo") | 388 // Only accepts string primivites, not String Objects like new String("foo") |
| 386 if (typeof(val) !== "string") { | 389 if (typeof(val) !== "string") { |
| 387 throw new Error(kErrorString); | 390 throw new Error(kErrorString); |
| 388 } | 391 } |
| 389 var encodedSize = kArrayHeaderSize + internal.utf8Length(val); | 392 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val); |
| 390 var encoder = this.createAndEncodeEncoder(encodedSize); | 393 var encoder = this.createAndEncodeEncoder(encodedSize); |
| 391 encoder.encodeString(val); | 394 encoder.encodeString(val); |
| 392 }; | 395 }; |
| 393 | 396 |
| 394 Encoder.prototype.encodeMap = function(keyClass, valueClass, val) { | 397 Encoder.prototype.encodeMap = function(keyClass, valueClass, val) { |
| 395 var keys = new Array(val.size); | 398 var keys = new Array(val.size); |
| 396 var values = new Array(val.size); | 399 var values = new Array(val.size); |
| 397 var i = 0; | 400 var i = 0; |
| 398 val.forEach(function(value, key) { | 401 val.forEach(function(value, key) { |
| 399 values[i] = value; | 402 values[i] = value; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 this.buffer.setUint64(kMessageRequestIDOffset, requestID); | 466 this.buffer.setUint64(kMessageRequestIDOffset, requestID); |
| 464 }; | 467 }; |
| 465 | 468 |
| 466 | 469 |
| 467 // MessageBuilder ----------------------------------------------------------- | 470 // MessageBuilder ----------------------------------------------------------- |
| 468 | 471 |
| 469 function MessageBuilder(messageName, payloadSize) { | 472 function MessageBuilder(messageName, payloadSize) { |
| 470 // Currently, we don't compute the payload size correctly ahead of time. | 473 // Currently, we don't compute the payload size correctly ahead of time. |
| 471 // Instead, we resize the buffer at the end. | 474 // Instead, we resize the buffer at the end. |
| 472 var numberOfBytes = kMessageHeaderSize + payloadSize; | 475 var numberOfBytes = kMessageHeaderSize + payloadSize; |
| 473 this.buffer = new internal.Buffer(numberOfBytes); | 476 this.buffer = new buffer.Buffer(numberOfBytes); |
| 474 this.handles = []; | 477 this.handles = []; |
| 475 var encoder = this.createEncoder(kMessageHeaderSize); | 478 var encoder = this.createEncoder(kMessageHeaderSize); |
| 476 encoder.writeUint32(kMessageHeaderSize); | 479 encoder.writeUint32(kMessageHeaderSize); |
| 477 encoder.writeUint32(0); // version. | 480 encoder.writeUint32(0); // version. |
| 478 encoder.writeUint32(0); // interface ID. | 481 encoder.writeUint32(0); // interface ID. |
| 479 encoder.writeUint32(messageName); | 482 encoder.writeUint32(messageName); |
| 480 encoder.writeUint32(0); // flags. | 483 encoder.writeUint32(0); // flags. |
| 481 encoder.writeUint32(0); // padding. | 484 encoder.writeUint32(0); // padding. |
| 482 } | 485 } |
| 483 | 486 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 501 return message; | 504 return message; |
| 502 }; | 505 }; |
| 503 | 506 |
| 504 // MessageWithRequestIDBuilder ----------------------------------------------- | 507 // MessageWithRequestIDBuilder ----------------------------------------------- |
| 505 | 508 |
| 506 function MessageWithRequestIDBuilder(messageName, payloadSize, flags, | 509 function MessageWithRequestIDBuilder(messageName, payloadSize, flags, |
| 507 requestID) { | 510 requestID) { |
| 508 // Currently, we don't compute the payload size correctly ahead of time. | 511 // Currently, we don't compute the payload size correctly ahead of time. |
| 509 // Instead, we resize the buffer at the end. | 512 // Instead, we resize the buffer at the end. |
| 510 var numberOfBytes = kMessageWithRequestIDHeaderSize + payloadSize; | 513 var numberOfBytes = kMessageWithRequestIDHeaderSize + payloadSize; |
| 511 this.buffer = new internal.Buffer(numberOfBytes); | 514 this.buffer = new buffer.Buffer(numberOfBytes); |
| 512 this.handles = []; | 515 this.handles = []; |
| 513 var encoder = this.createEncoder(kMessageWithRequestIDHeaderSize); | 516 var encoder = this.createEncoder(kMessageWithRequestIDHeaderSize); |
| 514 encoder.writeUint32(kMessageWithRequestIDHeaderSize); | 517 encoder.writeUint32(kMessageWithRequestIDHeaderSize); |
| 515 encoder.writeUint32(1); // version. | 518 encoder.writeUint32(1); // version. |
| 516 encoder.writeUint32(0); // interface ID. | 519 encoder.writeUint32(0); // interface ID. |
| 517 encoder.writeUint32(messageName); | 520 encoder.writeUint32(messageName); |
| 518 encoder.writeUint32(flags); | 521 encoder.writeUint32(flags); |
| 519 encoder.writeUint32(0); // padding. | 522 encoder.writeUint32(0); // padding. |
| 520 encoder.writeUint64(requestID); | 523 encoder.writeUint64(requestID); |
| 521 } | 524 } |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 804 | 807 |
| 805 NullableHandle.encode = Handle.encode; | 808 NullableHandle.encode = Handle.encode; |
| 806 | 809 |
| 807 function Interface(cls) { | 810 function Interface(cls) { |
| 808 this.cls = cls; | 811 this.cls = cls; |
| 809 } | 812 } |
| 810 | 813 |
| 811 Interface.prototype.encodedSize = 8; | 814 Interface.prototype.encodedSize = 8; |
| 812 | 815 |
| 813 Interface.prototype.decode = function(decoder) { | 816 Interface.prototype.decode = function(decoder) { |
| 814 var interfacePtrInfo = new mojoBindings.InterfacePtrInfo( | 817 var interfacePtrInfo = new types.InterfacePtrInfo( |
| 815 decoder.decodeHandle(), decoder.readUint32()); | 818 decoder.decodeHandle(), decoder.readUint32()); |
| 816 var interfacePtr = new this.cls(); | 819 var interfacePtr = new this.cls(); |
| 817 interfacePtr.ptr.bind(interfacePtrInfo); | 820 interfacePtr.ptr.bind(interfacePtrInfo); |
| 818 return interfacePtr; | 821 return interfacePtr; |
| 819 }; | 822 }; |
| 820 | 823 |
| 821 Interface.prototype.encode = function(encoder, val) { | 824 Interface.prototype.encode = function(encoder, val) { |
| 822 var interfacePtrInfo = | 825 var interfacePtrInfo = |
| 823 val ? val.ptr.passInterface() : | 826 val ? val.ptr.passInterface() : new types.InterfacePtrInfo(null, 0); |
| 824 new mojoBindings.InterfacePtrInfo(null, 0); | |
| 825 encoder.encodeHandle(interfacePtrInfo.handle); | 827 encoder.encodeHandle(interfacePtrInfo.handle); |
| 826 encoder.writeUint32(interfacePtrInfo.version); | 828 encoder.writeUint32(interfacePtrInfo.version); |
| 827 }; | 829 }; |
| 828 | 830 |
| 829 function NullableInterface(cls) { | 831 function NullableInterface(cls) { |
| 830 Interface.call(this, cls); | 832 Interface.call(this, cls); |
| 831 } | 833 } |
| 832 | 834 |
| 833 NullableInterface.prototype = Object.create(Interface.prototype); | 835 NullableInterface.prototype = Object.create(Interface.prototype); |
| 834 | 836 |
| 835 function InterfaceRequest() { | 837 function InterfaceRequest() { |
| 836 } | 838 } |
| 837 | 839 |
| 838 InterfaceRequest.encodedSize = 4; | 840 InterfaceRequest.encodedSize = 4; |
| 839 | 841 |
| 840 InterfaceRequest.decode = function(decoder) { | 842 InterfaceRequest.decode = function(decoder) { |
| 841 return new mojoBindings.InterfaceRequest(decoder.decodeHandle()); | 843 return new types.InterfaceRequest(decoder.decodeHandle()); |
| 842 }; | 844 }; |
| 843 | 845 |
| 844 InterfaceRequest.encode = function(encoder, val) { | 846 InterfaceRequest.encode = function(encoder, val) { |
| 845 encoder.encodeHandle(val ? val.handle : null); | 847 encoder.encodeHandle(val ? val.handle : null); |
| 846 }; | 848 }; |
| 847 | 849 |
| 848 function NullableInterfaceRequest() { | 850 function NullableInterfaceRequest() { |
| 849 } | 851 } |
| 850 | 852 |
| 851 NullableInterfaceRequest.encodedSize = InterfaceRequest.encodedSize; | 853 NullableInterfaceRequest.encodedSize = InterfaceRequest.encodedSize; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 868 MapOf.prototype.encode = function(encoder, val) { | 870 MapOf.prototype.encode = function(encoder, val) { |
| 869 encoder.encodeMapPointer(this.keyClass, this.valueClass, val); | 871 encoder.encodeMapPointer(this.keyClass, this.valueClass, val); |
| 870 }; | 872 }; |
| 871 | 873 |
| 872 function NullableMapOf(keyClass, valueClass) { | 874 function NullableMapOf(keyClass, valueClass) { |
| 873 MapOf.call(this, keyClass, valueClass); | 875 MapOf.call(this, keyClass, valueClass); |
| 874 } | 876 } |
| 875 | 877 |
| 876 NullableMapOf.prototype = Object.create(MapOf.prototype); | 878 NullableMapOf.prototype = Object.create(MapOf.prototype); |
| 877 | 879 |
| 878 internal.align = align; | 880 var exports = {}; |
| 879 internal.isAligned = isAligned; | 881 exports.align = align; |
| 880 internal.Message = Message; | 882 exports.isAligned = isAligned; |
| 881 internal.MessageBuilder = MessageBuilder; | 883 exports.Message = Message; |
| 882 internal.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder; | 884 exports.MessageBuilder = MessageBuilder; |
| 883 internal.MessageReader = MessageReader; | 885 exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder; |
| 884 internal.kArrayHeaderSize = kArrayHeaderSize; | 886 exports.MessageReader = MessageReader; |
| 885 internal.kMapStructPayloadSize = kMapStructPayloadSize; | 887 exports.kArrayHeaderSize = kArrayHeaderSize; |
| 886 internal.kStructHeaderSize = kStructHeaderSize; | 888 exports.kMapStructPayloadSize = kMapStructPayloadSize; |
| 887 internal.kEncodedInvalidHandleValue = kEncodedInvalidHandleValue; | 889 exports.kStructHeaderSize = kStructHeaderSize; |
| 888 internal.kMessageHeaderSize = kMessageHeaderSize; | 890 exports.kEncodedInvalidHandleValue = kEncodedInvalidHandleValue; |
| 889 internal.kMessageWithRequestIDHeaderSize = kMessageWithRequestIDHeaderSize; | 891 exports.kMessageHeaderSize = kMessageHeaderSize; |
| 890 internal.kMessageExpectsResponse = kMessageExpectsResponse; | 892 exports.kMessageWithRequestIDHeaderSize = kMessageWithRequestIDHeaderSize; |
| 891 internal.kMessageIsResponse = kMessageIsResponse; | 893 exports.kMessageExpectsResponse = kMessageExpectsResponse; |
| 892 internal.Int8 = Int8; | 894 exports.kMessageIsResponse = kMessageIsResponse; |
| 893 internal.Uint8 = Uint8; | 895 exports.Int8 = Int8; |
| 894 internal.Int16 = Int16; | 896 exports.Uint8 = Uint8; |
| 895 internal.Uint16 = Uint16; | 897 exports.Int16 = Int16; |
| 896 internal.Int32 = Int32; | 898 exports.Uint16 = Uint16; |
| 897 internal.Uint32 = Uint32; | 899 exports.Int32 = Int32; |
| 898 internal.Int64 = Int64; | 900 exports.Uint32 = Uint32; |
| 899 internal.Uint64 = Uint64; | 901 exports.Int64 = Int64; |
| 900 internal.Float = Float; | 902 exports.Uint64 = Uint64; |
| 901 internal.Double = Double; | 903 exports.Float = Float; |
| 902 internal.String = String; | 904 exports.Double = Double; |
| 903 internal.Enum = Enum; | 905 exports.String = String; |
| 904 internal.NullableString = NullableString; | 906 exports.Enum = Enum; |
| 905 internal.PointerTo = PointerTo; | 907 exports.NullableString = NullableString; |
| 906 internal.NullablePointerTo = NullablePointerTo; | 908 exports.PointerTo = PointerTo; |
| 907 internal.ArrayOf = ArrayOf; | 909 exports.NullablePointerTo = NullablePointerTo; |
| 908 internal.NullableArrayOf = NullableArrayOf; | 910 exports.ArrayOf = ArrayOf; |
| 909 internal.PackedBool = PackedBool; | 911 exports.NullableArrayOf = NullableArrayOf; |
| 910 internal.Handle = Handle; | 912 exports.PackedBool = PackedBool; |
| 911 internal.NullableHandle = NullableHandle; | 913 exports.Handle = Handle; |
| 912 internal.Interface = Interface; | 914 exports.NullableHandle = NullableHandle; |
| 913 internal.NullableInterface = NullableInterface; | 915 exports.Interface = Interface; |
| 914 internal.InterfaceRequest = InterfaceRequest; | 916 exports.NullableInterface = NullableInterface; |
| 915 internal.NullableInterfaceRequest = NullableInterfaceRequest; | 917 exports.InterfaceRequest = InterfaceRequest; |
| 916 internal.MapOf = MapOf; | 918 exports.NullableInterfaceRequest = NullableInterfaceRequest; |
| 917 internal.NullableMapOf = NullableMapOf; | 919 exports.MapOf = MapOf; |
| 918 })(); | 920 exports.NullableMapOf = NullableMapOf; |
| 921 return exports; |
| 922 }); |
| OLD | NEW |