1/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2/* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 4 * You can obtain one at http://mozilla.org/MPL/2.0/. 5 */ 6 7typedef TestJSImplInterface AnotherNameForTestJSImplInterface; 8typedef TestJSImplInterface YetAnotherNameForTestJSImplInterface; 9typedef TestJSImplInterface? NullableTestJSImplInterface; 10 11callback MyTestCallback = void(); 12 13enum MyTestEnum { 14 "a", 15 "b" 16}; 17 18[Exposed=Window, JSImplementation="@mozilla.org/test-js-impl-interface;1"] 19interface TestJSImplInterface { 20 // We don't support multiple constructors (bug 869268) or named constructors 21 // for JS-implemented WebIDL. 22 [Throws] 23 constructor(DOMString str, unsigned long num, boolean? boolArg, 24 TestInterface? iface, long arg1, 25 DictForConstructor dict, any any1, 26 object obj1, 27 object? obj2, sequence<Dict> seq, optional any any2, 28 optional object obj3, 29 optional object? obj4, 30 Uint8Array typedArr, 31 ArrayBuffer arrayBuf); 32 33 // Integer types 34 // XXXbz add tests for throwing versions of all the integer stuff 35 readonly attribute byte readonlyByte; 36 attribute byte writableByte; 37 void passByte(byte arg); 38 byte receiveByte(); 39 void passOptionalByte(optional byte arg); 40 void passOptionalByteBeforeRequired(optional byte arg1, byte arg2); 41 void passOptionalByteWithDefault(optional byte arg = 0); 42 void passOptionalByteWithDefaultBeforeRequired(optional byte arg1 = 0, byte arg2); 43 void passNullableByte(byte? arg); 44 void passOptionalNullableByte(optional byte? arg); 45 void passVariadicByte(byte... arg); 46 // [Cached] is not supported in JS-implemented WebIDL. 47 //[Cached, Pure] 48 //readonly attribute byte cachedByte; 49 //[Cached, Constant] 50 //readonly attribute byte cachedConstantByte; 51 //[Cached, Pure] 52 //attribute byte cachedWritableByte; 53 [Affects=Nothing] 54 attribute byte sideEffectFreeByte; 55 [Affects=Nothing, DependsOn=DOMState] 56 attribute byte domDependentByte; 57 [Affects=Nothing, DependsOn=Nothing] 58 readonly attribute byte constantByte; 59 [DependsOn=DeviceState, Affects=Nothing] 60 readonly attribute byte deviceStateDependentByte; 61 [Affects=Nothing] 62 byte returnByteSideEffectFree(); 63 [Affects=Nothing, DependsOn=DOMState] 64 byte returnDOMDependentByte(); 65 [Affects=Nothing, DependsOn=Nothing] 66 byte returnConstantByte(); 67 [DependsOn=DeviceState, Affects=Nothing] 68 byte returnDeviceStateDependentByte(); 69 70 readonly attribute short readonlyShort; 71 attribute short writableShort; 72 void passShort(short arg); 73 short receiveShort(); 74 void passOptionalShort(optional short arg); 75 void passOptionalShortWithDefault(optional short arg = 5); 76 77 readonly attribute long readonlyLong; 78 attribute long writableLong; 79 void passLong(long arg); 80 long receiveLong(); 81 void passOptionalLong(optional long arg); 82 void passOptionalLongWithDefault(optional long arg = 7); 83 84 readonly attribute long long readonlyLongLong; 85 attribute long long writableLongLong; 86 void passLongLong(long long arg); 87 long long receiveLongLong(); 88 void passOptionalLongLong(optional long long arg); 89 void passOptionalLongLongWithDefault(optional long long arg = -12); 90 91 readonly attribute octet readonlyOctet; 92 attribute octet writableOctet; 93 void passOctet(octet arg); 94 octet receiveOctet(); 95 void passOptionalOctet(optional octet arg); 96 void passOptionalOctetWithDefault(optional octet arg = 19); 97 98 readonly attribute unsigned short readonlyUnsignedShort; 99 attribute unsigned short writableUnsignedShort; 100 void passUnsignedShort(unsigned short arg); 101 unsigned short receiveUnsignedShort(); 102 void passOptionalUnsignedShort(optional unsigned short arg); 103 void passOptionalUnsignedShortWithDefault(optional unsigned short arg = 2); 104 105 readonly attribute unsigned long readonlyUnsignedLong; 106 attribute unsigned long writableUnsignedLong; 107 void passUnsignedLong(unsigned long arg); 108 unsigned long receiveUnsignedLong(); 109 void passOptionalUnsignedLong(optional unsigned long arg); 110 void passOptionalUnsignedLongWithDefault(optional unsigned long arg = 6); 111 112 readonly attribute unsigned long long readonlyUnsignedLongLong; 113 attribute unsigned long long writableUnsignedLongLong; 114 void passUnsignedLongLong(unsigned long long arg); 115 unsigned long long receiveUnsignedLongLong(); 116 void passOptionalUnsignedLongLong(optional unsigned long long arg); 117 void passOptionalUnsignedLongLongWithDefault(optional unsigned long long arg = 17); 118 119 attribute float writableFloat; 120 attribute unrestricted float writableUnrestrictedFloat; 121 attribute float? writableNullableFloat; 122 attribute unrestricted float? writableNullableUnrestrictedFloat; 123 attribute double writableDouble; 124 attribute unrestricted double writableUnrestrictedDouble; 125 attribute double? writableNullableDouble; 126 attribute unrestricted double? writableNullableUnrestrictedDouble; 127 void passFloat(float arg1, unrestricted float arg2, 128 float? arg3, unrestricted float? arg4, 129 double arg5, unrestricted double arg6, 130 double? arg7, unrestricted double? arg8, 131 sequence<float> arg9, sequence<unrestricted float> arg10, 132 sequence<float?> arg11, sequence<unrestricted float?> arg12, 133 sequence<double> arg13, sequence<unrestricted double> arg14, 134 sequence<double?> arg15, sequence<unrestricted double?> arg16); 135 [LenientFloat] 136 void passLenientFloat(float arg1, unrestricted float arg2, 137 float? arg3, unrestricted float? arg4, 138 double arg5, unrestricted double arg6, 139 double? arg7, unrestricted double? arg8, 140 sequence<float> arg9, 141 sequence<unrestricted float> arg10, 142 sequence<float?> arg11, 143 sequence<unrestricted float?> arg12, 144 sequence<double> arg13, 145 sequence<unrestricted double> arg14, 146 sequence<double?> arg15, 147 sequence<unrestricted double?> arg16); 148 [LenientFloat] 149 attribute float lenientFloatAttr; 150 [LenientFloat] 151 attribute double lenientDoubleAttr; 152 153 // Castable interface types 154 // XXXbz add tests for throwing versions of all the castable interface stuff 155 TestJSImplInterface receiveSelf(); 156 TestJSImplInterface? receiveNullableSelf(); 157 158 TestJSImplInterface receiveWeakSelf(); 159 TestJSImplInterface? receiveWeakNullableSelf(); 160 161 // A version to test for casting to TestJSImplInterface& 162 void passSelf(TestJSImplInterface arg); 163 void passNullableSelf(TestJSImplInterface? arg); 164 attribute TestJSImplInterface nonNullSelf; 165 attribute TestJSImplInterface? nullableSelf; 166 // [Cached] is not supported in JS-implemented WebIDL. 167 //[Cached, Pure] 168 //readonly attribute TestJSImplInterface cachedSelf; 169 // Optional arguments 170 void passOptionalSelf(optional TestJSImplInterface? arg); 171 void passOptionalNonNullSelf(optional TestJSImplInterface arg); 172 void passOptionalSelfWithDefault(optional TestJSImplInterface? arg = null); 173 174 // Non-wrapper-cache interface types 175 [NewObject] 176 TestNonWrapperCacheInterface receiveNonWrapperCacheInterface(); 177 [NewObject] 178 TestNonWrapperCacheInterface? receiveNullableNonWrapperCacheInterface(); 179 180 [NewObject] 181 sequence<TestNonWrapperCacheInterface> receiveNonWrapperCacheInterfaceSequence(); 182 [NewObject] 183 sequence<TestNonWrapperCacheInterface?> receiveNullableNonWrapperCacheInterfaceSequence(); 184 [NewObject] 185 sequence<TestNonWrapperCacheInterface>? receiveNonWrapperCacheInterfaceNullableSequence(); 186 [NewObject] 187 sequence<TestNonWrapperCacheInterface?>? receiveNullableNonWrapperCacheInterfaceNullableSequence(); 188 189 // External interface types 190 TestExternalInterface receiveExternal(); 191 TestExternalInterface? receiveNullableExternal(); 192 TestExternalInterface receiveWeakExternal(); 193 TestExternalInterface? receiveWeakNullableExternal(); 194 void passExternal(TestExternalInterface arg); 195 void passNullableExternal(TestExternalInterface? arg); 196 attribute TestExternalInterface nonNullExternal; 197 attribute TestExternalInterface? nullableExternal; 198 // Optional arguments 199 void passOptionalExternal(optional TestExternalInterface? arg); 200 void passOptionalNonNullExternal(optional TestExternalInterface arg); 201 void passOptionalExternalWithDefault(optional TestExternalInterface? arg = null); 202 203 // Callback interface types 204 TestCallbackInterface receiveCallbackInterface(); 205 TestCallbackInterface? receiveNullableCallbackInterface(); 206 TestCallbackInterface receiveWeakCallbackInterface(); 207 TestCallbackInterface? receiveWeakNullableCallbackInterface(); 208 void passCallbackInterface(TestCallbackInterface arg); 209 void passNullableCallbackInterface(TestCallbackInterface? arg); 210 attribute TestCallbackInterface nonNullCallbackInterface; 211 attribute TestCallbackInterface? nullableCallbackInterface; 212 // Optional arguments 213 void passOptionalCallbackInterface(optional TestCallbackInterface? arg); 214 void passOptionalNonNullCallbackInterface(optional TestCallbackInterface arg); 215 void passOptionalCallbackInterfaceWithDefault(optional TestCallbackInterface? arg = null); 216 217 // Sequence types 218 // [Cached] is not supported in JS-implemented WebIDL. 219 //[Cached, Pure] 220 //readonly attribute sequence<long> readonlySequence; 221 //[Cached, Pure] 222 //readonly attribute sequence<Dict> readonlySequenceOfDictionaries; 223 //[Cached, Pure] 224 //readonly attribute sequence<Dict>? readonlyNullableSequenceOfDictionaries; 225 //[Cached, Pure, Frozen] 226 //readonly attribute sequence<long> readonlyFrozenSequence; 227 //[Cached, Pure, Frozen] 228 //readonly attribute sequence<long>? readonlyFrozenNullableSequence; 229 sequence<long> receiveSequence(); 230 sequence<long>? receiveNullableSequence(); 231 sequence<long?> receiveSequenceOfNullableInts(); 232 sequence<long?>? receiveNullableSequenceOfNullableInts(); 233 void passSequence(sequence<long> arg); 234 void passNullableSequence(sequence<long>? arg); 235 void passSequenceOfNullableInts(sequence<long?> arg); 236 void passOptionalSequenceOfNullableInts(optional sequence<long?> arg); 237 void passOptionalNullableSequenceOfNullableInts(optional sequence<long?>? arg); 238 sequence<TestJSImplInterface> receiveCastableObjectSequence(); 239 sequence<TestCallbackInterface> receiveCallbackObjectSequence(); 240 sequence<TestJSImplInterface?> receiveNullableCastableObjectSequence(); 241 sequence<TestCallbackInterface?> receiveNullableCallbackObjectSequence(); 242 sequence<TestJSImplInterface>? receiveCastableObjectNullableSequence(); 243 sequence<TestJSImplInterface?>? receiveNullableCastableObjectNullableSequence(); 244 sequence<TestJSImplInterface> receiveWeakCastableObjectSequence(); 245 sequence<TestJSImplInterface?> receiveWeakNullableCastableObjectSequence(); 246 sequence<TestJSImplInterface>? receiveWeakCastableObjectNullableSequence(); 247 sequence<TestJSImplInterface?>? receiveWeakNullableCastableObjectNullableSequence(); 248 void passCastableObjectSequence(sequence<TestJSImplInterface> arg); 249 void passNullableCastableObjectSequence(sequence<TestJSImplInterface?> arg); 250 void passCastableObjectNullableSequence(sequence<TestJSImplInterface>? arg); 251 void passNullableCastableObjectNullableSequence(sequence<TestJSImplInterface?>? arg); 252 void passOptionalSequence(optional sequence<long> arg); 253 void passOptionalSequenceWithDefaultValue(optional sequence<long> arg = []); 254 void passOptionalNullableSequence(optional sequence<long>? arg); 255 void passOptionalNullableSequenceWithDefaultValue(optional sequence<long>? arg = null); 256 void passOptionalNullableSequenceWithDefaultValue2(optional sequence<long>? arg = []); 257 void passOptionalObjectSequence(optional sequence<TestJSImplInterface> arg); 258 void passExternalInterfaceSequence(sequence<TestExternalInterface> arg); 259 void passNullableExternalInterfaceSequence(sequence<TestExternalInterface?> arg); 260 261 sequence<DOMString> receiveStringSequence(); 262 sequence<ByteString> receiveByteStringSequence(); 263 sequence<UTF8String> receiveUTF8StringSequence(); 264 // Callback interface problem. See bug 843261. 265 //void passStringSequence(sequence<DOMString> arg); 266 sequence<any> receiveAnySequence(); 267 sequence<any>? receiveNullableAnySequence(); 268 //XXXbz No support for sequence of sequence return values yet. 269 //sequence<sequence<any>> receiveAnySequenceSequence(); 270 271 sequence<object> receiveObjectSequence(); 272 sequence<object?> receiveNullableObjectSequence(); 273 274 void passSequenceOfSequences(sequence<sequence<long>> arg); 275 void passSequenceOfSequencesOfSequences(sequence<sequence<sequence<long>>> arg); 276 //XXXbz No support for sequence of sequence return values yet. 277 //sequence<sequence<long>> receiveSequenceOfSequences(); 278 279 // record types 280 void passRecord(record<DOMString, long> arg); 281 void passNullableRecord(record<DOMString, long>? arg); 282 void passRecordOfNullableInts(record<DOMString, long?> arg); 283 void passOptionalRecordOfNullableInts(optional record<DOMString, long?> arg); 284 void passOptionalNullableRecordOfNullableInts(optional record<DOMString, long?>? arg); 285 void passCastableObjectRecord(record<DOMString, TestInterface> arg); 286 void passNullableCastableObjectRecord(record<DOMString, TestInterface?> arg); 287 void passCastableObjectNullableRecord(record<DOMString, TestInterface>? arg); 288 void passNullableCastableObjectNullableRecord(record<DOMString, TestInterface?>? arg); 289 void passOptionalRecord(optional record<DOMString, long> arg); 290 void passOptionalNullableRecord(optional record<DOMString, long>? arg); 291 void passOptionalNullableRecordWithDefaultValue(optional record<DOMString, long>? arg = null); 292 void passOptionalObjectRecord(optional record<DOMString, TestInterface> arg); 293 void passExternalInterfaceRecord(record<DOMString, TestExternalInterface> arg); 294 void passNullableExternalInterfaceRecord(record<DOMString, TestExternalInterface?> arg); 295 void passStringRecord(record<DOMString, DOMString> arg); 296 void passByteStringRecord(record<DOMString, ByteString> arg); 297 void passUTF8StringRecord(record<DOMString, UTF8String> arg); 298 void passRecordOfRecords(record<DOMString, record<DOMString, long>> arg); 299 record<DOMString, long> receiveRecord(); 300 record<DOMString, long>? receiveNullableRecord(); 301 record<DOMString, long?> receiveRecordOfNullableInts(); 302 record<DOMString, long?>? receiveNullableRecordOfNullableInts(); 303 //XXXbz No support for record of records return values yet. 304 //record<DOMString, record<DOMString, long>> receiveRecordOfRecords(); 305 record<DOMString, any> receiveAnyRecord(); 306 307 // Typed array types 308 void passArrayBuffer(ArrayBuffer arg); 309 void passNullableArrayBuffer(ArrayBuffer? arg); 310 void passOptionalArrayBuffer(optional ArrayBuffer arg); 311 void passOptionalNullableArrayBuffer(optional ArrayBuffer? arg); 312 void passOptionalNullableArrayBufferWithDefaultValue(optional ArrayBuffer? arg= null); 313 void passArrayBufferView(ArrayBufferView arg); 314 void passInt8Array(Int8Array arg); 315 void passInt16Array(Int16Array arg); 316 void passInt32Array(Int32Array arg); 317 void passUint8Array(Uint8Array arg); 318 void passUint16Array(Uint16Array arg); 319 void passUint32Array(Uint32Array arg); 320 void passUint8ClampedArray(Uint8ClampedArray arg); 321 void passFloat32Array(Float32Array arg); 322 void passFloat64Array(Float64Array arg); 323 void passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg); 324 void passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg); 325 void passRecordOfArrayBuffers(record<DOMString, ArrayBuffer> arg); 326 void passRecordOfNullableArrayBuffers(record<DOMString, ArrayBuffer?> arg); 327 void passVariadicTypedArray(Float32Array... arg); 328 void passVariadicNullableTypedArray(Float32Array?... arg); 329 Uint8Array receiveUint8Array(); 330 attribute Uint8Array uint8ArrayAttr; 331 332 // DOMString types 333 void passString(DOMString arg); 334 void passNullableString(DOMString? arg); 335 void passOptionalString(optional DOMString arg); 336 void passOptionalStringWithDefaultValue(optional DOMString arg = "abc"); 337 void passOptionalNullableString(optional DOMString? arg); 338 void passOptionalNullableStringWithDefaultValue(optional DOMString? arg = null); 339 void passVariadicString(DOMString... arg); 340 341 // ByteString types 342 void passByteString(ByteString arg); 343 void passNullableByteString(ByteString? arg); 344 void passOptionalByteString(optional ByteString arg); 345 void passOptionalByteStringWithDefaultValue(optional ByteString arg = "abc"); 346 void passOptionalNullableByteString(optional ByteString? arg); 347 void passOptionalNullableByteStringWithDefaultValue(optional ByteString? arg = null); 348 void passVariadicByteString(ByteString... arg); 349 void passUnionByteString((ByteString or long) arg); 350 void passOptionalUnionByteString(optional (ByteString or long) arg); 351 void passOptionalUnionByteStringWithDefaultValue(optional (ByteString or long) arg = "abc"); 352 353 // UTF8String types 354 void passUTF8String(UTF8String arg); 355 void passNullableUTF8String(UTF8String? arg); 356 void passOptionalUTF8String(optional UTF8String arg); 357 void passOptionalUTF8StringWithDefaultValue(optional UTF8String arg = "abc"); 358 void passOptionalNullableUTF8String(optional UTF8String? arg); 359 void passOptionalNullableUTF8StringWithDefaultValue(optional UTF8String? arg = null); 360 void passVariadicUTF8String(UTF8String... arg); 361 void passUnionUTF8String((UTF8String or long) arg); 362 void passOptionalUnionUTF8String(optional (UTF8String or long) arg); 363 void passOptionalUnionUTF8StringWithDefaultValue(optional (UTF8String or long) arg = "abc"); 364 365 // USVString types 366 void passSVS(USVString arg); 367 void passNullableSVS(USVString? arg); 368 void passOptionalSVS(optional USVString arg); 369 void passOptionalSVSWithDefaultValue(optional USVString arg = "abc"); 370 void passOptionalNullableSVS(optional USVString? arg); 371 void passOptionalNullableSVSWithDefaultValue(optional USVString? arg = null); 372 void passVariadicSVS(USVString... arg); 373 USVString receiveSVS(); 374 375 // JSString types 376 void passJSString(JSString arg); 377 // void passNullableJSString(JSString? arg); // NOT SUPPORTED YET 378 // void passOptionalJSString(optional JSString arg); // NOT SUPPORTED YET 379 void passOptionalJSStringWithDefaultValue(optional JSString arg = "abc"); 380 // void passOptionalNullableJSString(optional JSString? arg); // NOT SUPPORTED YET 381 // void passOptionalNullableJSStringWithDefaultValue(optional JSString? arg = null); // NOT SUPPORTED YET 382 // void passVariadicJSString(JSString... arg); // NOT SUPPORTED YET 383 // void passRecordOfJSString(record<DOMString, JSString> arg); // NOT SUPPORTED YET 384 // void passSequenceOfJSString(sequence<JSString> arg); // NOT SUPPORTED YET 385 // void passUnionJSString((JSString or long) arg); // NOT SUPPORTED YET 386 JSString receiveJSString(); 387 // sequence<JSString> receiveJSStringSequence(); // NOT SUPPORTED YET 388 // (JSString or long) receiveJSStringUnion(); // NOT SUPPORTED YET 389 // record<DOMString, JSString> receiveJSStringRecord(); // NOT SUPPORTED YET 390 readonly attribute JSString readonlyJSStringAttr; 391 attribute JSString jsStringAttr; 392 393 // Enumerated types 394 void passEnum(MyTestEnum arg); 395 void passNullableEnum(MyTestEnum? arg); 396 void passOptionalEnum(optional MyTestEnum arg); 397 void passEnumWithDefault(optional MyTestEnum arg = "a"); 398 void passOptionalNullableEnum(optional MyTestEnum? arg); 399 void passOptionalNullableEnumWithDefaultValue(optional MyTestEnum? arg = null); 400 void passOptionalNullableEnumWithDefaultValue2(optional MyTestEnum? arg = "a"); 401 MyTestEnum receiveEnum(); 402 MyTestEnum? receiveNullableEnum(); 403 attribute MyTestEnum enumAttribute; 404 readonly attribute MyTestEnum readonlyEnumAttribute; 405 406 // Callback types 407 void passCallback(MyTestCallback arg); 408 void passNullableCallback(MyTestCallback? arg); 409 void passOptionalCallback(optional MyTestCallback arg); 410 void passOptionalNullableCallback(optional MyTestCallback? arg); 411 void passOptionalNullableCallbackWithDefaultValue(optional MyTestCallback? arg = null); 412 MyTestCallback receiveCallback(); 413 MyTestCallback? receiveNullableCallback(); 414 // Hmm. These two don't work, I think because I need a locally modified version of TestTreatAsNullCallback. 415 //void passNullableTreatAsNullCallback(TestTreatAsNullCallback? arg); 416 //void passOptionalNullableTreatAsNullCallback(optional TestTreatAsNullCallback? arg); 417 void passOptionalNullableTreatAsNullCallbackWithDefaultValue(optional TestTreatAsNullCallback? arg = null); 418 419 // Any types 420 void passAny(any arg); 421 void passVariadicAny(any... arg); 422 void passOptionalAny(optional any arg); 423 void passAnyDefaultNull(optional any arg = null); 424 void passSequenceOfAny(sequence<any> arg); 425 void passNullableSequenceOfAny(sequence<any>? arg); 426 void passOptionalSequenceOfAny(optional sequence<any> arg); 427 void passOptionalNullableSequenceOfAny(optional sequence<any>? arg); 428 void passOptionalSequenceOfAnyWithDefaultValue(optional sequence<any>? arg = null); 429 void passSequenceOfSequenceOfAny(sequence<sequence<any>> arg); 430 void passSequenceOfNullableSequenceOfAny(sequence<sequence<any>?> arg); 431 void passNullableSequenceOfNullableSequenceOfAny(sequence<sequence<any>?>? arg); 432 void passOptionalNullableSequenceOfNullableSequenceOfAny(optional sequence<sequence<any>?>? arg); 433 void passRecordOfAny(record<DOMString, any> arg); 434 void passNullableRecordOfAny(record<DOMString, any>? arg); 435 void passOptionalRecordOfAny(optional record<DOMString, any> arg); 436 void passOptionalNullableRecordOfAny(optional record<DOMString, any>? arg); 437 void passOptionalRecordOfAnyWithDefaultValue(optional record<DOMString, any>? arg = null); 438 void passRecordOfRecordOfAny(record<DOMString, record<DOMString, any>> arg); 439 void passRecordOfNullableRecordOfAny(record<DOMString, record<DOMString, any>?> arg); 440 void passNullableRecordOfNullableRecordOfAny(record<DOMString, record<DOMString, any>?>? arg); 441 void passOptionalNullableRecordOfNullableRecordOfAny(optional record<DOMString, record<DOMString, any>?>? arg); 442 void passOptionalNullableRecordOfNullableSequenceOfAny(optional record<DOMString, sequence<any>?>? arg); 443 void passOptionalNullableSequenceOfNullableRecordOfAny(optional sequence<record<DOMString, any>?>? arg); 444 any receiveAny(); 445 446 // object types 447 void passObject(object arg); 448 void passVariadicObject(object... arg); 449 void passNullableObject(object? arg); 450 void passVariadicNullableObject(object... arg); 451 void passOptionalObject(optional object arg); 452 void passOptionalNullableObject(optional object? arg); 453 void passOptionalNullableObjectWithDefaultValue(optional object? arg = null); 454 void passSequenceOfObject(sequence<object> arg); 455 void passSequenceOfNullableObject(sequence<object?> arg); 456 void passNullableSequenceOfObject(sequence<object>? arg); 457 void passOptionalNullableSequenceOfNullableSequenceOfObject(optional sequence<sequence<object>?>? arg); 458 void passOptionalNullableSequenceOfNullableSequenceOfNullableObject(optional sequence<sequence<object?>?>? arg); 459 void passRecordOfObject(record<DOMString, object> arg); 460 object receiveObject(); 461 object? receiveNullableObject(); 462 463 // Union types 464 void passUnion((object or long) arg); 465 // Some union tests are debug-only to avoid creating all those 466 // unused union types in opt builds. 467#ifdef DEBUG 468 void passUnion2((long or boolean) arg); 469 void passUnion3((object or long or boolean) arg); 470 void passUnion4((Node or long or boolean) arg); 471 void passUnion5((object or boolean) arg); 472 void passUnion6((object or DOMString) arg); 473 void passUnion7((object or DOMString or long) arg); 474 void passUnion8((object or DOMString or boolean) arg); 475 void passUnion9((object or DOMString or long or boolean) arg); 476 void passUnion10(optional (EventInit or long) arg = {}); 477 void passUnion11(optional (CustomEventInit or long) arg = {}); 478 void passUnion12(optional (EventInit or long) arg = 5); 479 void passUnion13(optional (object or long?) arg = null); 480 void passUnion14(optional (object or long?) arg = 5); 481 void passUnion15((sequence<long> or long) arg); 482 void passUnion16(optional (sequence<long> or long) arg); 483 void passUnion17(optional (sequence<long>? or long) arg = 5); 484 void passUnion18((sequence<object> or long) arg); 485 void passUnion19(optional (sequence<object> or long) arg); 486 void passUnion20(optional (sequence<object> or long) arg = []); 487 void passUnion21((record<DOMString, long> or long) arg); 488 void passUnion22((record<DOMString, object> or long) arg); 489 void passUnion23((sequence<ImageData> or long) arg); 490 void passUnion24((sequence<ImageData?> or long) arg); 491 void passUnion25((sequence<sequence<ImageData>> or long) arg); 492 void passUnion26((sequence<sequence<ImageData?>> or long) arg); 493 void passUnion27(optional (sequence<DOMString> or EventInit) arg = {}); 494 void passUnion28(optional (EventInit or sequence<DOMString>) arg = {}); 495 void passUnionWithCallback((EventHandler or long) arg); 496 void passUnionWithByteString((ByteString or long) arg); 497 void passUnionWithUTF8String((UTF8String or long) arg); 498 void passUnionWithRecord((record<DOMString, DOMString> or DOMString) arg); 499 void passUnionWithRecordAndSequence((record<DOMString, DOMString> or sequence<DOMString>) arg); 500 void passUnionWithSequenceAndRecord((sequence<DOMString> or record<DOMString, DOMString>) arg); 501 void passUnionWithSVS((USVString or long) arg); 502#endif 503 void passUnionWithNullable((object? or long) arg); 504 void passNullableUnion((object or long)? arg); 505 void passOptionalUnion(optional (object or long) arg); 506 void passOptionalNullableUnion(optional (object or long)? arg); 507 void passOptionalNullableUnionWithDefaultValue(optional (object or long)? arg = null); 508 //void passUnionWithInterfaces((TestJSImplInterface or TestExternalInterface) arg); 509 //void passUnionWithInterfacesAndNullable((TestJSImplInterface? or TestExternalInterface) arg); 510 //void passUnionWithSequence((sequence<object> or long) arg); 511 void passUnionWithArrayBuffer((ArrayBuffer or long) arg); 512 void passUnionWithString((DOMString or object) arg); 513 // Using an enum in a union. Note that we use some enum not declared in our 514 // binding file, because UnionTypes.h will need to include the binding header 515 // for this enum. Pick an enum from an interface that won't drag in too much 516 // stuff. 517 void passUnionWithEnum((SupportedType or object) arg); 518 519 // Trying to use a callback in a union won't include the test 520 // headers, unfortunately, so won't compile. 521 // void passUnionWithCallback((MyTestCallback or long) arg); 522 void passUnionWithObject((object or long) arg); 523 //void passUnionWithDict((Dict or long) arg); 524 525 void passUnionWithDefaultValue1(optional (double or DOMString) arg = ""); 526 void passUnionWithDefaultValue2(optional (double or DOMString) arg = 1); 527 void passUnionWithDefaultValue3(optional (double or DOMString) arg = 1.5); 528 void passUnionWithDefaultValue4(optional (float or DOMString) arg = ""); 529 void passUnionWithDefaultValue5(optional (float or DOMString) arg = 1); 530 void passUnionWithDefaultValue6(optional (float or DOMString) arg = 1.5); 531 void passUnionWithDefaultValue7(optional (unrestricted double or DOMString) arg = ""); 532 void passUnionWithDefaultValue8(optional (unrestricted double or DOMString) arg = 1); 533 void passUnionWithDefaultValue9(optional (unrestricted double or DOMString) arg = 1.5); 534 void passUnionWithDefaultValue10(optional (unrestricted double or DOMString) arg = Infinity); 535 void passUnionWithDefaultValue11(optional (unrestricted float or DOMString) arg = ""); 536 void passUnionWithDefaultValue12(optional (unrestricted float or DOMString) arg = 1); 537 void passUnionWithDefaultValue13(optional (unrestricted float or DOMString) arg = Infinity); 538 void passUnionWithDefaultValue14(optional (double or ByteString) arg = ""); 539 void passUnionWithDefaultValue15(optional (double or ByteString) arg = 1); 540 void passUnionWithDefaultValue16(optional (double or ByteString) arg = 1.5); 541 void passUnionWithDefaultValue17(optional (double or SupportedType) arg = "text/html"); 542 void passUnionWithDefaultValue18(optional (double or SupportedType) arg = 1); 543 void passUnionWithDefaultValue19(optional (double or SupportedType) arg = 1.5); 544 void passUnionWithDefaultValue20(optional (double or USVString) arg = "abc"); 545 void passUnionWithDefaultValue21(optional (double or USVString) arg = 1); 546 void passUnionWithDefaultValue22(optional (double or USVString) arg = 1.5); 547 void passUnionWithDefaultValue23(optional (double or UTF8String) arg = ""); 548 void passUnionWithDefaultValue24(optional (double or UTF8String) arg = 1); 549 void passUnionWithDefaultValue25(optional (double or UTF8String) arg = 1.5); 550 551 void passNullableUnionWithDefaultValue1(optional (double or DOMString)? arg = ""); 552 void passNullableUnionWithDefaultValue2(optional (double or DOMString)? arg = 1); 553 void passNullableUnionWithDefaultValue3(optional (double or DOMString)? arg = null); 554 void passNullableUnionWithDefaultValue4(optional (float or DOMString)? arg = ""); 555 void passNullableUnionWithDefaultValue5(optional (float or DOMString)? arg = 1); 556 void passNullableUnionWithDefaultValue6(optional (float or DOMString)? arg = null); 557 void passNullableUnionWithDefaultValue7(optional (unrestricted double or DOMString)? arg = ""); 558 void passNullableUnionWithDefaultValue8(optional (unrestricted double or DOMString)? arg = 1); 559 void passNullableUnionWithDefaultValue9(optional (unrestricted double or DOMString)? arg = null); 560 void passNullableUnionWithDefaultValue10(optional (unrestricted float or DOMString)? arg = ""); 561 void passNullableUnionWithDefaultValue11(optional (unrestricted float or DOMString)? arg = 1); 562 void passNullableUnionWithDefaultValue12(optional (unrestricted float or DOMString)? arg = null); 563 void passNullableUnionWithDefaultValue13(optional (double or ByteString)? arg = ""); 564 void passNullableUnionWithDefaultValue14(optional (double or ByteString)? arg = 1); 565 void passNullableUnionWithDefaultValue15(optional (double or ByteString)? arg = 1.5); 566 void passNullableUnionWithDefaultValue16(optional (double or ByteString)? arg = null); 567 void passNullableUnionWithDefaultValue17(optional (double or SupportedType)? arg = "text/html"); 568 void passNullableUnionWithDefaultValue18(optional (double or SupportedType)? arg = 1); 569 void passNullableUnionWithDefaultValue19(optional (double or SupportedType)? arg = 1.5); 570 void passNullableUnionWithDefaultValue20(optional (double or SupportedType)? arg = null); 571 void passNullableUnionWithDefaultValue21(optional (double or USVString)? arg = "abc"); 572 void passNullableUnionWithDefaultValue22(optional (double or USVString)? arg = 1); 573 void passNullableUnionWithDefaultValue23(optional (double or USVString)? arg = 1.5); 574 void passNullableUnionWithDefaultValue24(optional (double or USVString)? arg = null); 575 void passNullableUnionWithDefaultValue25(optional (double or UTF8String)? arg = ""); 576 void passNullableUnionWithDefaultValue26(optional (double or UTF8String)? arg = 1); 577 void passNullableUnionWithDefaultValue27(optional (double or UTF8String)? arg = 1.5); 578 void passNullableUnionWithDefaultValue28(optional (double or UTF8String)? arg = null); 579 580 void passSequenceOfUnions(sequence<(CanvasPattern or CanvasGradient)> arg); 581 void passSequenceOfUnions2(sequence<(object or long)> arg); 582 void passVariadicUnion((CanvasPattern or CanvasGradient)... arg); 583 584 void passSequenceOfNullableUnions(sequence<(CanvasPattern or CanvasGradient)?> arg); 585 void passVariadicNullableUnion((CanvasPattern or CanvasGradient)?... arg); 586 void passRecordOfUnions(record<DOMString, (CanvasPattern or CanvasGradient)> arg); 587 // XXXbz no move constructor on some unions 588 // void passRecordOfUnions2(record<DOMString, (object or long)> arg); 589 590 (CanvasPattern or CanvasGradient) receiveUnion(); 591 (object or long) receiveUnion2(); 592 (CanvasPattern? or CanvasGradient) receiveUnionContainingNull(); 593 (CanvasPattern or CanvasGradient)? receiveNullableUnion(); 594 (object or long)? receiveNullableUnion2(); 595 596 attribute (CanvasPattern or CanvasGradient) writableUnion; 597 attribute (CanvasPattern? or CanvasGradient) writableUnionContainingNull; 598 attribute (CanvasPattern or CanvasGradient)? writableNullableUnion; 599 600 // Promise types 601 void passPromise(Promise<any> arg); 602 void passOptionalPromise(optional Promise<any> arg); 603 void passPromiseSequence(sequence<Promise<any>> arg); 604 Promise<any> receivePromise(); 605 Promise<any> receiveAddrefedPromise(); 606 607 // binaryNames tests 608 [BinaryName="methodRenamedTo"] 609 void methodRenamedFrom(); 610 [BinaryName="methodRenamedTo"] 611 void methodRenamedFrom(byte argument); 612 [BinaryName="attributeGetterRenamedTo"] 613 readonly attribute byte attributeGetterRenamedFrom; 614 [BinaryName="attributeRenamedTo"] 615 attribute byte attributeRenamedFrom; 616 617 void passDictionary(optional Dict x = {}); 618 void passDictionary2(Dict x); 619 // [Cached] is not supported in JS-implemented WebIDL. 620 //[Cached, Pure] 621 //readonly attribute Dict readonlyDictionary; 622 //[Cached, Pure] 623 //readonly attribute Dict? readonlyNullableDictionary; 624 //[Cached, Pure] 625 //attribute Dict writableDictionary; 626 //[Cached, Pure, Frozen] 627 //readonly attribute Dict readonlyFrozenDictionary; 628 //[Cached, Pure, Frozen] 629 //readonly attribute Dict? readonlyFrozenNullableDictionary; 630 //[Cached, Pure, Frozen] 631 //attribute Dict writableFrozenDictionary; 632 Dict receiveDictionary(); 633 Dict? receiveNullableDictionary(); 634 void passOtherDictionary(optional GrandparentDict x = {}); 635 void passSequenceOfDictionaries(sequence<Dict> x); 636 void passRecordOfDictionaries(record<DOMString, GrandparentDict> x); 637 // No support for nullable dictionaries inside a sequence (nor should there be) 638 // void passSequenceOfNullableDictionaries(sequence<Dict?> x); 639 void passDictionaryOrLong(optional Dict x = {}); 640 void passDictionaryOrLong(long x); 641 642 void passDictContainingDict(optional DictContainingDict arg = {}); 643 void passDictContainingSequence(optional DictContainingSequence arg = {}); 644 DictContainingSequence receiveDictContainingSequence(); 645 void passVariadicDictionary(Dict... arg); 646 647 // EnforceRange/Clamp tests 648 void dontEnforceRangeOrClamp(byte arg); 649 void doEnforceRange([EnforceRange] byte arg); 650 void doEnforceRangeNullable([EnforceRange] byte? arg); 651 void doClamp([Clamp] byte arg); 652 void doClampNullable([Clamp] byte? arg); 653 attribute [EnforceRange] byte enforcedByte; 654 attribute [EnforceRange] byte? enforcedByteNullable; 655 attribute [Clamp] byte clampedByte; 656 attribute [Clamp] byte? clampedByteNullable; 657 658 // Typedefs 659 const myLong myLongConstant = 5; 660 void exerciseTypedefInterfaces1(AnotherNameForTestJSImplInterface arg); 661 AnotherNameForTestJSImplInterface exerciseTypedefInterfaces2(NullableTestJSImplInterface arg); 662 void exerciseTypedefInterfaces3(YetAnotherNameForTestJSImplInterface arg); 663 664 // Deprecated methods and attributes 665 [Deprecated="Components"] 666 attribute byte deprecatedAttribute; 667 [Deprecated="Components"] 668 byte deprecatedMethod(); 669 [Deprecated="Components"] 670 void deprecatedMethodWithContext(any arg); 671 672 // Static methods and attributes 673 // FIXME: Bug 863952 Static things are not supported yet 674 /* 675 static attribute boolean staticAttribute; 676 static void staticMethod(boolean arg); 677 static void staticMethodWithContext(any arg); 678 679 // Deprecated static methods and attributes 680 [Deprecated="Components"] 681 static attribute byte staticDeprecatedAttribute; 682 [Deprecated="Components"] 683 static byte staticDeprecatedMethod(); 684 [Deprecated="Components"] 685 static byte staticDeprecatedMethodWithContext(); 686 */ 687 688 // Overload resolution tests 689 //void overload1(DOMString... strs); 690 boolean overload1(TestJSImplInterface arg); 691 TestJSImplInterface overload1(DOMString strs, TestJSImplInterface arg); 692 void overload2(TestJSImplInterface arg); 693 void overload2(optional Dict arg = {}); 694 void overload2(boolean arg); 695 void overload2(DOMString arg); 696 void overload3(TestJSImplInterface arg); 697 void overload3(MyTestCallback arg); 698 void overload3(boolean arg); 699 void overload4(TestJSImplInterface arg); 700 void overload4(TestCallbackInterface arg); 701 void overload4(DOMString arg); 702 void overload5(long arg); 703 void overload5(MyTestEnum arg); 704 void overload6(long arg); 705 void overload6(boolean arg); 706 void overload7(long arg); 707 void overload7(boolean arg); 708 void overload7(ByteString arg); 709 void overload8(long arg); 710 void overload8(TestJSImplInterface arg); 711 void overload9(long? arg); 712 void overload9(DOMString arg); 713 void overload10(long? arg); 714 void overload10(object arg); 715 void overload11(long arg); 716 void overload11(DOMString? arg); 717 void overload12(long arg); 718 void overload12(boolean? arg); 719 void overload13(long? arg); 720 void overload13(boolean arg); 721 void overload14(optional long arg); 722 void overload14(TestInterface arg); 723 void overload15(long arg); 724 void overload15(optional TestInterface arg); 725 void overload16(long arg); 726 void overload16(optional TestInterface? arg); 727 void overload17(sequence<long> arg); 728 void overload17(record<DOMString, long> arg); 729 void overload18(record<DOMString, DOMString> arg); 730 void overload18(sequence<DOMString> arg); 731 void overload19(sequence<long> arg); 732 void overload19(optional Dict arg = {}); 733 void overload20(optional Dict arg = {}); 734 void overload20(sequence<long> arg); 735 736 // Variadic handling 737 void passVariadicThirdArg(DOMString arg1, long arg2, TestJSImplInterface... arg3); 738 739 // Conditionally exposed methods/attributes 740 [Pref="dom.webidl.test1"] 741 readonly attribute boolean prefable1; 742 [Pref="dom.webidl.test1"] 743 readonly attribute boolean prefable2; 744 [Pref="dom.webidl.test2"] 745 readonly attribute boolean prefable3; 746 [Pref="dom.webidl.test2"] 747 readonly attribute boolean prefable4; 748 [Pref="dom.webidl.test1"] 749 readonly attribute boolean prefable5; 750 [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"] 751 readonly attribute boolean prefable6; 752 [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"] 753 readonly attribute boolean prefable7; 754 [Pref="dom.webidl.test2", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"] 755 readonly attribute boolean prefable8; 756 [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"] 757 readonly attribute boolean prefable9; 758 [Pref="dom.webidl.test1"] 759 void prefable10(); 760 [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"] 761 void prefable11(); 762 [Pref="dom.webidl.test1", Func="TestFuncControlledMember"] 763 readonly attribute boolean prefable12; 764 [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"] 765 void prefable13(); 766 [Pref="dom.webidl.test1", Func="TestFuncControlledMember"] 767 readonly attribute boolean prefable14; 768 [Func="TestFuncControlledMember"] 769 readonly attribute boolean prefable15; 770 [Func="TestFuncControlledMember"] 771 readonly attribute boolean prefable16; 772 [Pref="dom.webidl.test1", Func="TestFuncControlledMember"] 773 void prefable17(); 774 [Func="TestFuncControlledMember"] 775 void prefable18(); 776 [Func="TestFuncControlledMember"] 777 void prefable19(); 778 [Pref="dom.webidl.test1", Func="TestFuncControlledMember", ChromeOnly] 779 void prefable20(); 780 781 // Conditionally exposed methods/attributes involving [SecureContext] 782 [SecureContext] 783 readonly attribute boolean conditionalOnSecureContext1; 784 [SecureContext, Pref="dom.webidl.test1"] 785 readonly attribute boolean conditionalOnSecureContext2; 786 [SecureContext, Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"] 787 readonly attribute boolean conditionalOnSecureContext3; 788 [SecureContext, Pref="dom.webidl.test1", Func="TestFuncControlledMember"] 789 readonly attribute boolean conditionalOnSecureContext4; 790 [SecureContext] 791 void conditionalOnSecureContext5(); 792 [SecureContext, Pref="dom.webidl.test1"] 793 void conditionalOnSecureContext6(); 794 [SecureContext, Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"] 795 void conditionalOnSecureContext7(); 796 [SecureContext, Pref="dom.webidl.test1", Func="TestFuncControlledMember"] 797 void conditionalOnSecureContext8(); 798 799 // Miscellania 800 [LegacyLenientThis] attribute long attrWithLenientThis; 801 // FIXME: Bug 863954 Unforgeable things get all confused when 802 // non-JS-implemented interfaces inherit from JS-implemented ones or vice 803 // versa. 804 // [Unforgeable] readonly attribute long unforgeableAttr; 805 // [Unforgeable, ChromeOnly] readonly attribute long unforgeableAttr2; 806 // [Unforgeable] long unforgeableMethod(); 807 // [Unforgeable, ChromeOnly] long unforgeableMethod2(); 808 // FIXME: Bug 863955 No stringifiers yet 809 // stringifier; 810 void passRenamedInterface(TestRenamedInterface arg); 811 [PutForwards=writableByte] readonly attribute TestJSImplInterface putForwardsAttr; 812 [PutForwards=writableByte, LegacyLenientThis] readonly attribute TestJSImplInterface putForwardsAttr2; 813 [PutForwards=writableByte, ChromeOnly] readonly attribute TestJSImplInterface putForwardsAttr3; 814 [Throws] void throwingMethod(); 815 [Throws] attribute boolean throwingAttr; 816 [GetterThrows] attribute boolean throwingGetterAttr; 817 [SetterThrows] attribute boolean throwingSetterAttr; 818 [CanOOM] void canOOMMethod(); 819 [CanOOM] attribute boolean canOOMAttr; 820 [GetterCanOOM] attribute boolean canOOMGetterAttr; 821 [SetterCanOOM] attribute boolean canOOMSetterAttr; 822 [CEReactions] void ceReactionsMethod(); 823 [CEReactions] void ceReactionsMethodOverload(); 824 [CEReactions] void ceReactionsMethodOverload(DOMString bar); 825 [CEReactions] attribute boolean ceReactionsAttr; 826 // NeedsSubjectPrincipal not supported on JS-implemented things for 827 // now, because we always pass in the caller principal anyway. 828 // [NeedsSubjectPrincipal] void needsSubjectPrincipalMethod(); 829 // [NeedsSubjectPrincipal] attribute boolean needsSubjectPrincipalAttr; 830 // legacycaller short(unsigned long arg1, TestInterface arg2); 831 void passArgsWithDefaults(optional long arg1, 832 optional TestInterface? arg2 = null, 833 optional Dict arg3 = {}, optional double arg4 = 5.0, 834 optional float arg5); 835 attribute any toJSONShouldSkipThis; 836 attribute TestParentInterface toJSONShouldSkipThis2; 837 attribute TestCallbackInterface toJSONShouldSkipThis3; 838 [Default] object toJSON(); 839 840 attribute byte dashed-attribute; 841 void dashed-method(); 842 843 // [NonEnumerable] tests 844 [NonEnumerable] 845 attribute boolean nonEnumerableAttr; 846 [NonEnumerable] 847 const boolean nonEnumerableConst = true; 848 [NonEnumerable] 849 void nonEnumerableMethod(); 850 851 // [AllowShared] tests 852 attribute [AllowShared] ArrayBufferViewTypedef allowSharedArrayBufferViewTypedef; 853 attribute [AllowShared] ArrayBufferView allowSharedArrayBufferView; 854 attribute [AllowShared] ArrayBufferView? allowSharedNullableArrayBufferView; 855 attribute [AllowShared] ArrayBuffer allowSharedArrayBuffer; 856 attribute [AllowShared] ArrayBuffer? allowSharedNullableArrayBuffer; 857 858 void passAllowSharedArrayBufferViewTypedef(AllowSharedArrayBufferViewTypedef foo); 859 void passAllowSharedArrayBufferView([AllowShared] ArrayBufferView foo); 860 void passAllowSharedNullableArrayBufferView([AllowShared] ArrayBufferView? foo); 861 void passAllowSharedArrayBuffer([AllowShared] ArrayBuffer foo); 862 void passAllowSharedNullableArrayBuffer([AllowShared] ArrayBuffer? foo); 863 void passUnionArrayBuffer((DOMString or ArrayBuffer) foo); 864 void passUnionAllowSharedArrayBuffer((DOMString or [AllowShared] ArrayBuffer) foo); 865 866 // If you add things here, add them to TestCodeGen as well 867}; 868 869[Exposed=Window] 870interface TestCImplementedInterface : TestJSImplInterface { 871}; 872 873[Exposed=Window] 874interface TestCImplementedInterface2 { 875}; 876 877[LegacyNoInterfaceObject, 878 JSImplementation="@mozilla.org/test-js-impl-interface;2", 879 Exposed=Window] 880interface TestJSImplNoInterfaceObject { 881 // [Cached] is not supported in JS-implemented WebIDL. 882 //[Cached, Pure] 883 //readonly attribute byte cachedByte; 884}; 885