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