tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestJSImplGen.webidl (46647B)


      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 
      7 typedef TestJSImplInterface AnotherNameForTestJSImplInterface;
      8 typedef TestJSImplInterface YetAnotherNameForTestJSImplInterface;
      9 typedef TestJSImplInterface? NullableTestJSImplInterface;
     10 
     11 callback MyTestCallback = undefined();
     12 
     13 enum MyTestEnum {
     14  "a",
     15  "b"
     16 };
     17 
     18 [Exposed=Window, JSImplementation="@mozilla.org/test-js-impl-interface;1"]
     19 interface TestJSImplInterface {
     20  // We don't support multiple constructors or legacy factory functions
     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  undefined passByte(byte arg);
     38  byte receiveByte();
     39  undefined passOptionalByte(optional byte arg);
     40  undefined passOptionalByteBeforeRequired(optional byte arg1, byte arg2);
     41  undefined passOptionalByteWithDefault(optional byte arg = 0);
     42  undefined passOptionalByteWithDefaultBeforeRequired(optional byte arg1 = 0, byte arg2);
     43  undefined passNullableByte(byte? arg);
     44  undefined passOptionalNullableByte(optional byte? arg);
     45  undefined 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  undefined passShort(short arg);
     73  short receiveShort();
     74  undefined passOptionalShort(optional short arg);
     75  undefined passOptionalShortWithDefault(optional short arg = 5);
     76 
     77  readonly attribute long readonlyLong;
     78  attribute long writableLong;
     79  undefined passLong(long arg);
     80  long receiveLong();
     81  undefined passOptionalLong(optional long arg);
     82  undefined passOptionalLongWithDefault(optional long arg = 7);
     83 
     84  readonly attribute long long readonlyLongLong;
     85  attribute long long writableLongLong;
     86  undefined passLongLong(long long arg);
     87  long long receiveLongLong();
     88  undefined passOptionalLongLong(optional long long arg);
     89  undefined passOptionalLongLongWithDefault(optional long long arg = -12);
     90 
     91  readonly attribute octet readonlyOctet;
     92  attribute octet writableOctet;
     93  undefined passOctet(octet arg);
     94  octet receiveOctet();
     95  undefined passOptionalOctet(optional octet arg);
     96  undefined passOptionalOctetWithDefault(optional octet arg = 19);
     97 
     98  readonly attribute unsigned short readonlyUnsignedShort;
     99  attribute unsigned short writableUnsignedShort;
    100  undefined passUnsignedShort(unsigned short arg);
    101  unsigned short receiveUnsignedShort();
    102  undefined passOptionalUnsignedShort(optional unsigned short arg);
    103  undefined passOptionalUnsignedShortWithDefault(optional unsigned short arg = 2);
    104 
    105  readonly attribute unsigned long readonlyUnsignedLong;
    106  attribute unsigned long writableUnsignedLong;
    107  undefined passUnsignedLong(unsigned long arg);
    108  unsigned long receiveUnsignedLong();
    109  undefined passOptionalUnsignedLong(optional unsigned long arg);
    110  undefined passOptionalUnsignedLongWithDefault(optional unsigned long arg = 6);
    111 
    112  readonly attribute unsigned long long readonlyUnsignedLongLong;
    113  attribute unsigned long long  writableUnsignedLongLong;
    114  undefined passUnsignedLongLong(unsigned long long arg);
    115  unsigned long long receiveUnsignedLongLong();
    116  undefined passOptionalUnsignedLongLong(optional unsigned long long arg);
    117  undefined 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  undefined 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  undefined 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  undefined passSelf(TestJSImplInterface arg);
    163  undefined 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  undefined passOptionalSelf(optional TestJSImplInterface? arg);
    171  undefined passOptionalNonNullSelf(optional TestJSImplInterface arg);
    172  undefined 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  undefined passExternal(TestExternalInterface arg);
    195  undefined passNullableExternal(TestExternalInterface? arg);
    196  attribute TestExternalInterface nonNullExternal;
    197  attribute TestExternalInterface? nullableExternal;
    198  // Optional arguments
    199  undefined passOptionalExternal(optional TestExternalInterface? arg);
    200  undefined passOptionalNonNullExternal(optional TestExternalInterface arg);
    201  undefined passOptionalExternalWithDefault(optional TestExternalInterface? arg = null);
    202 
    203  // Callback interface types
    204  TestCallbackInterface receiveCallbackInterface();
    205  TestCallbackInterface? receiveNullableCallbackInterface();
    206  TestCallbackInterface receiveWeakCallbackInterface();
    207  TestCallbackInterface? receiveWeakNullableCallbackInterface();
    208  undefined passCallbackInterface(TestCallbackInterface arg);
    209  undefined passNullableCallbackInterface(TestCallbackInterface? arg);
    210  attribute TestCallbackInterface nonNullCallbackInterface;
    211  attribute TestCallbackInterface? nullableCallbackInterface;
    212  // Optional arguments
    213  undefined passOptionalCallbackInterface(optional TestCallbackInterface? arg);
    214  undefined passOptionalNonNullCallbackInterface(optional TestCallbackInterface arg);
    215  undefined 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  undefined passSequence(sequence<long> arg);
    234  undefined passNullableSequence(sequence<long>? arg);
    235  undefined passSequenceOfNullableInts(sequence<long?> arg);
    236  undefined passOptionalSequenceOfNullableInts(optional sequence<long?> arg);
    237  undefined 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  undefined passCastableObjectSequence(sequence<TestJSImplInterface> arg);
    249  undefined passNullableCastableObjectSequence(sequence<TestJSImplInterface?> arg);
    250  undefined passCastableObjectNullableSequence(sequence<TestJSImplInterface>? arg);
    251  undefined passNullableCastableObjectNullableSequence(sequence<TestJSImplInterface?>? arg);
    252  undefined passOptionalSequence(optional sequence<long> arg);
    253  undefined passOptionalSequenceWithDefaultValue(optional sequence<long> arg = []);
    254  undefined passOptionalNullableSequence(optional sequence<long>? arg);
    255  undefined passOptionalNullableSequenceWithDefaultValue(optional sequence<long>? arg = null);
    256  undefined passOptionalNullableSequenceWithDefaultValue2(optional sequence<long>? arg = []);
    257  undefined passOptionalObjectSequence(optional sequence<TestJSImplInterface> arg);
    258  undefined passExternalInterfaceSequence(sequence<TestExternalInterface> arg);
    259  undefined 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  //undefined 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  undefined passSequenceOfSequences(sequence<sequence<long>> arg);
    275  undefined 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  undefined passRecord(record<DOMString, long> arg);
    281  undefined passNullableRecord(record<DOMString, long>? arg);
    282  undefined passRecordOfNullableInts(record<DOMString, long?> arg);
    283  undefined passOptionalRecordOfNullableInts(optional record<DOMString, long?> arg);
    284  undefined passOptionalNullableRecordOfNullableInts(optional record<DOMString, long?>? arg);
    285  undefined passCastableObjectRecord(record<DOMString, TestInterface> arg);
    286  undefined passNullableCastableObjectRecord(record<DOMString, TestInterface?> arg);
    287  undefined passCastableObjectNullableRecord(record<DOMString, TestInterface>? arg);
    288  undefined passNullableCastableObjectNullableRecord(record<DOMString, TestInterface?>? arg);
    289  undefined passOptionalRecord(optional record<DOMString, long> arg);
    290  undefined passOptionalNullableRecord(optional record<DOMString, long>? arg);
    291  undefined passOptionalNullableRecordWithDefaultValue(optional record<DOMString, long>? arg = null);
    292  undefined passOptionalObjectRecord(optional record<DOMString, TestInterface> arg);
    293  undefined passExternalInterfaceRecord(record<DOMString, TestExternalInterface> arg);
    294  undefined passNullableExternalInterfaceRecord(record<DOMString, TestExternalInterface?> arg);
    295  undefined passStringRecord(record<DOMString, DOMString> arg);
    296  undefined passByteStringRecord(record<DOMString, ByteString> arg);
    297  undefined passUTF8StringRecord(record<DOMString, UTF8String> arg);
    298  undefined 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  undefined passArrayBuffer(ArrayBuffer arg);
    309  undefined passNullableArrayBuffer(ArrayBuffer? arg);
    310  undefined passOptionalArrayBuffer(optional ArrayBuffer arg);
    311  undefined passOptionalNullableArrayBuffer(optional ArrayBuffer? arg);
    312  undefined passOptionalNullableArrayBufferWithDefaultValue(optional ArrayBuffer? arg= null);
    313  undefined passArrayBufferView(ArrayBufferView arg);
    314  undefined passInt8Array(Int8Array arg);
    315  undefined passInt16Array(Int16Array arg);
    316  undefined passInt32Array(Int32Array arg);
    317  undefined passUint8Array(Uint8Array arg);
    318  undefined passUint16Array(Uint16Array arg);
    319  undefined passUint32Array(Uint32Array arg);
    320  undefined passUint8ClampedArray(Uint8ClampedArray arg);
    321  undefined passFloat32Array(Float32Array arg);
    322  undefined passFloat64Array(Float64Array arg);
    323  undefined passSequenceOfArrayBuffers(sequence<ArrayBuffer> arg);
    324  undefined passSequenceOfNullableArrayBuffers(sequence<ArrayBuffer?> arg);
    325  undefined passRecordOfArrayBuffers(record<DOMString, ArrayBuffer> arg);
    326  undefined passRecordOfNullableArrayBuffers(record<DOMString, ArrayBuffer?> arg);
    327  undefined passVariadicTypedArray(Float32Array... arg);
    328  undefined passVariadicNullableTypedArray(Float32Array?... arg);
    329  Uint8Array receiveUint8Array();
    330  attribute Uint8Array uint8ArrayAttr;
    331 
    332  // DOMString types
    333  undefined passString(DOMString arg);
    334  undefined passNullableString(DOMString? arg);
    335  undefined passOptionalString(optional DOMString arg);
    336  undefined passOptionalStringWithDefaultValue(optional DOMString arg = "abc");
    337  undefined passOptionalNullableString(optional DOMString? arg);
    338  undefined passOptionalNullableStringWithDefaultValue(optional DOMString? arg = null);
    339  undefined passVariadicString(DOMString... arg);
    340 
    341  // ByteString types
    342  undefined passByteString(ByteString arg);
    343  undefined passNullableByteString(ByteString? arg);
    344  undefined passOptionalByteString(optional ByteString arg);
    345  undefined passOptionalByteStringWithDefaultValue(optional ByteString arg = "abc");
    346  undefined passOptionalNullableByteString(optional ByteString? arg);
    347  undefined passOptionalNullableByteStringWithDefaultValue(optional ByteString? arg = null);
    348  undefined passVariadicByteString(ByteString... arg);
    349  undefined passUnionByteString((ByteString or long) arg);
    350  undefined passOptionalUnionByteString(optional (ByteString or long) arg);
    351  undefined passOptionalUnionByteStringWithDefaultValue(optional (ByteString or long) arg = "abc");
    352 
    353  // UTF8String types
    354  undefined passUTF8String(UTF8String arg);
    355  undefined passNullableUTF8String(UTF8String? arg);
    356  undefined passOptionalUTF8String(optional UTF8String arg);
    357  undefined passOptionalUTF8StringWithDefaultValue(optional UTF8String arg = "abc");
    358  undefined passOptionalNullableUTF8String(optional UTF8String? arg);
    359  undefined passOptionalNullableUTF8StringWithDefaultValue(optional UTF8String? arg = null);
    360  undefined passVariadicUTF8String(UTF8String... arg);
    361  undefined passUnionUTF8String((UTF8String or long) arg);
    362  undefined passOptionalUnionUTF8String(optional (UTF8String or long) arg);
    363  undefined passOptionalUnionUTF8StringWithDefaultValue(optional (UTF8String or long) arg = "abc");
    364 
    365  // USVString types
    366  undefined passSVS(USVString arg);
    367  undefined passNullableSVS(USVString? arg);
    368  undefined passOptionalSVS(optional USVString arg);
    369  undefined passOptionalSVSWithDefaultValue(optional USVString arg = "abc");
    370  undefined passOptionalNullableSVS(optional USVString? arg);
    371  undefined passOptionalNullableSVSWithDefaultValue(optional USVString? arg = null);
    372  undefined passVariadicSVS(USVString... arg);
    373  USVString receiveSVS();
    374 
    375  // JSString types
    376  undefined passJSString(JSString arg);
    377  // undefined passNullableJSString(JSString? arg); // NOT SUPPORTED YET
    378  // undefined passOptionalJSString(optional JSString arg); // NOT SUPPORTED YET
    379  undefined passOptionalJSStringWithDefaultValue(optional JSString arg = "abc");
    380  // undefined passOptionalNullableJSString(optional JSString? arg); // NOT SUPPORTED YET
    381  // undefined passOptionalNullableJSStringWithDefaultValue(optional JSString? arg = null); // NOT SUPPORTED YET
    382  // undefined passVariadicJSString(JSString... arg); // NOT SUPPORTED YET
    383  // undefined passRecordOfJSString(record<DOMString, JSString> arg); // NOT SUPPORTED YET
    384  // undefined passSequenceOfJSString(sequence<JSString> arg); // NOT SUPPORTED YET
    385  // undefined 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  undefined passEnum(MyTestEnum arg);
    395  undefined passNullableEnum(MyTestEnum? arg);
    396  undefined passOptionalEnum(optional MyTestEnum arg);
    397  undefined passEnumWithDefault(optional MyTestEnum arg = "a");
    398  undefined passOptionalNullableEnum(optional MyTestEnum? arg);
    399  undefined passOptionalNullableEnumWithDefaultValue(optional MyTestEnum? arg = null);
    400  undefined 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  undefined passCallback(MyTestCallback arg);
    408  undefined passNullableCallback(MyTestCallback? arg);
    409  undefined passOptionalCallback(optional MyTestCallback arg);
    410  undefined passOptionalNullableCallback(optional MyTestCallback? arg);
    411  undefined 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  //undefined passNullableTreatAsNullCallback(TestTreatAsNullCallback? arg);
    416  //undefined passOptionalNullableTreatAsNullCallback(optional TestTreatAsNullCallback? arg);
    417  undefined passOptionalNullableTreatAsNullCallbackWithDefaultValue(optional TestTreatAsNullCallback? arg = null);
    418 
    419  // Any types
    420  undefined passAny(any arg);
    421  undefined passVariadicAny(any... arg);
    422  undefined passOptionalAny(optional any arg);
    423  undefined passAnyDefaultNull(optional any arg = null);
    424  undefined passSequenceOfAny(sequence<any> arg);
    425  undefined passNullableSequenceOfAny(sequence<any>? arg);
    426  undefined passOptionalSequenceOfAny(optional sequence<any> arg);
    427  undefined passOptionalNullableSequenceOfAny(optional sequence<any>? arg);
    428  undefined passOptionalSequenceOfAnyWithDefaultValue(optional sequence<any>? arg = null);
    429  undefined passSequenceOfSequenceOfAny(sequence<sequence<any>> arg);
    430  undefined passSequenceOfNullableSequenceOfAny(sequence<sequence<any>?> arg);
    431  undefined passNullableSequenceOfNullableSequenceOfAny(sequence<sequence<any>?>? arg);
    432  undefined passOptionalNullableSequenceOfNullableSequenceOfAny(optional sequence<sequence<any>?>? arg);
    433  undefined passRecordOfAny(record<DOMString, any> arg);
    434  undefined passNullableRecordOfAny(record<DOMString, any>? arg);
    435  undefined passOptionalRecordOfAny(optional record<DOMString, any> arg);
    436  undefined passOptionalNullableRecordOfAny(optional record<DOMString, any>? arg);
    437  undefined passOptionalRecordOfAnyWithDefaultValue(optional record<DOMString, any>? arg = null);
    438  undefined passRecordOfRecordOfAny(record<DOMString, record<DOMString, any>> arg);
    439  undefined passRecordOfNullableRecordOfAny(record<DOMString, record<DOMString, any>?> arg);
    440  undefined passNullableRecordOfNullableRecordOfAny(record<DOMString, record<DOMString, any>?>? arg);
    441  undefined passOptionalNullableRecordOfNullableRecordOfAny(optional record<DOMString, record<DOMString, any>?>? arg);
    442  undefined passOptionalNullableRecordOfNullableSequenceOfAny(optional record<DOMString, sequence<any>?>? arg);
    443  undefined passOptionalNullableSequenceOfNullableRecordOfAny(optional sequence<record<DOMString, any>?>? arg);
    444  any receiveAny();
    445 
    446  // object types
    447  undefined passObject(object arg);
    448  undefined passVariadicObject(object... arg);
    449  undefined passNullableObject(object? arg);
    450  undefined passVariadicNullableObject(object... arg);
    451  undefined passOptionalObject(optional object arg);
    452  undefined passOptionalNullableObject(optional object? arg);
    453  undefined passOptionalNullableObjectWithDefaultValue(optional object? arg = null);
    454  undefined passSequenceOfObject(sequence<object> arg);
    455  undefined passSequenceOfNullableObject(sequence<object?> arg);
    456  undefined passNullableSequenceOfObject(sequence<object>? arg);
    457  undefined passOptionalNullableSequenceOfNullableSequenceOfObject(optional sequence<sequence<object>?>? arg);
    458  undefined passOptionalNullableSequenceOfNullableSequenceOfNullableObject(optional sequence<sequence<object?>?>? arg);
    459  undefined passRecordOfObject(record<DOMString, object> arg);
    460  object receiveObject();
    461  object? receiveNullableObject();
    462 
    463  // Union types
    464  undefined passUnion((object or long) arg);
    465  // Some union tests are debug-only to aundefined creating all those
    466  // unused union types in opt builds.
    467 #ifdef DEBUG
    468  undefined passUnion2((long or boolean) arg);
    469  undefined passUnion3((object or long or boolean) arg);
    470  undefined passUnion4((Node or long or boolean) arg);
    471  undefined passUnion5((object or boolean) arg);
    472  undefined passUnion6((object or DOMString) arg);
    473  undefined passUnion7((object or DOMString or long) arg);
    474  undefined passUnion8((object or DOMString or boolean) arg);
    475  undefined passUnion9((object or DOMString or long or boolean) arg);
    476  undefined passUnion10(optional (EventInit or long) arg = {});
    477  undefined passUnion11(optional (CustomEventInit or long) arg = {});
    478  undefined passUnion12(optional (EventInit or long) arg = 5);
    479  undefined passUnion13(optional (object or long?) arg = null);
    480  undefined passUnion14(optional (object or long?) arg = 5);
    481  undefined passUnion15((sequence<long> or long) arg);
    482  undefined passUnion16(optional (sequence<long> or long) arg);
    483  undefined passUnion17(optional (sequence<long>? or long) arg = 5);
    484  undefined passUnion18((sequence<object> or long) arg);
    485  undefined passUnion19(optional (sequence<object> or long) arg);
    486  undefined passUnion20(optional (sequence<object> or long) arg = []);
    487  undefined passUnion21((record<DOMString, long> or long) arg);
    488  undefined passUnion22((record<DOMString, object> or long) arg);
    489  undefined passUnion23((sequence<ImageData> or long) arg);
    490  undefined passUnion24((sequence<ImageData?> or long) arg);
    491  undefined passUnion25((sequence<sequence<ImageData>> or long) arg);
    492  undefined passUnion26((sequence<sequence<ImageData?>> or long) arg);
    493  undefined passUnion27(optional (sequence<DOMString> or EventInit) arg = {});
    494  undefined passUnion28(optional (EventInit or sequence<DOMString>) arg = {});
    495  undefined passUnionWithCallback((EventHandler or long) arg);
    496  undefined passUnionWithByteString((ByteString or long) arg);
    497  undefined passUnionWithUTF8String((UTF8String or long) arg);
    498  undefined passUnionWithRecord((record<DOMString, DOMString> or DOMString) arg);
    499  undefined passUnionWithRecordAndSequence((record<DOMString, DOMString> or sequence<DOMString>) arg);
    500  undefined passUnionWithSequenceAndRecord((sequence<DOMString> or record<DOMString, DOMString>) arg);
    501  undefined passUnionWithSVS((USVString or long) arg);
    502 #endif
    503  undefined passUnionWithNullable((object? or long) arg);
    504  undefined passNullableUnion((object or long)? arg);
    505  undefined passOptionalUnion(optional (object or long) arg);
    506  undefined passOptionalNullableUnion(optional (object or long)? arg);
    507  undefined passOptionalNullableUnionWithDefaultValue(optional (object or long)? arg = null);
    508  //undefined passUnionWithInterfaces((TestJSImplInterface or TestExternalInterface) arg);
    509  //undefined passUnionWithInterfacesAndNullable((TestJSImplInterface? or TestExternalInterface) arg);
    510  //undefined passUnionWithSequence((sequence<object> or long) arg);
    511  undefined passUnionWithArrayBuffer((UTF8String or ArrayBuffer) arg);
    512  undefined passUnionWithArrayBufferOrNull((UTF8String or ArrayBuffer?) arg);
    513  undefined passUnionWithTypedArrays((ArrayBufferView or ArrayBuffer) arg);
    514  undefined passUnionWithTypedArraysOrNull((ArrayBufferView or ArrayBuffer?) arg);
    515  undefined passUnionWithString((DOMString or object) arg);
    516  // Using an enum in a union.  Note that we use some enum not declared in our
    517  // binding file, because UnionTypes.h will need to include the binding header
    518  // for this enum.  Pick an enum from an interface that won't drag in too much
    519  // stuff.
    520  undefined passUnionWithEnum((SupportedType or object) arg);
    521 
    522  // Trying to use a callback in a union won't include the test
    523  // headers, unfortunately, so won't compile.
    524  //  undefined passUnionWithCallback((MyTestCallback or long) arg);
    525  undefined passUnionWithObject((object or long) arg);
    526  //undefined passUnionWithDict((Dict or long) arg);
    527 
    528  undefined passUnionWithDefaultValue1(optional (double or DOMString) arg = "");
    529  undefined passUnionWithDefaultValue2(optional (double or DOMString) arg = 1);
    530  undefined passUnionWithDefaultValue3(optional (double or DOMString) arg = 1.5);
    531  undefined passUnionWithDefaultValue4(optional (float or DOMString) arg = "");
    532  undefined passUnionWithDefaultValue5(optional (float or DOMString) arg = 1);
    533  undefined passUnionWithDefaultValue6(optional (float or DOMString) arg = 1.5);
    534  undefined passUnionWithDefaultValue7(optional (unrestricted double or DOMString) arg = "");
    535  undefined passUnionWithDefaultValue8(optional (unrestricted double or DOMString) arg = 1);
    536  undefined passUnionWithDefaultValue9(optional (unrestricted double or DOMString) arg = 1.5);
    537  undefined passUnionWithDefaultValue10(optional (unrestricted double or DOMString) arg = Infinity);
    538  undefined passUnionWithDefaultValue11(optional (unrestricted float or DOMString) arg = "");
    539  undefined passUnionWithDefaultValue12(optional (unrestricted float or DOMString) arg = 1);
    540  undefined passUnionWithDefaultValue13(optional (unrestricted float or DOMString) arg = Infinity);
    541  undefined passUnionWithDefaultValue14(optional (double or ByteString) arg = "");
    542  undefined passUnionWithDefaultValue15(optional (double or ByteString) arg = 1);
    543  undefined passUnionWithDefaultValue16(optional (double or ByteString) arg = 1.5);
    544  undefined passUnionWithDefaultValue17(optional (double or SupportedType) arg = "text/html");
    545  undefined passUnionWithDefaultValue18(optional (double or SupportedType) arg = 1);
    546  undefined passUnionWithDefaultValue19(optional (double or SupportedType) arg = 1.5);
    547  undefined passUnionWithDefaultValue20(optional (double or USVString) arg = "abc");
    548  undefined passUnionWithDefaultValue21(optional (double or USVString) arg = 1);
    549  undefined passUnionWithDefaultValue22(optional (double or USVString) arg = 1.5);
    550  undefined passUnionWithDefaultValue23(optional (double or UTF8String) arg = "");
    551  undefined passUnionWithDefaultValue24(optional (double or UTF8String) arg = 1);
    552  undefined passUnionWithDefaultValue25(optional (double or UTF8String) arg = 1.5);
    553 
    554  undefined passNullableUnionWithDefaultValue1(optional (double or DOMString)? arg = "");
    555  undefined passNullableUnionWithDefaultValue2(optional (double or DOMString)? arg = 1);
    556  undefined passNullableUnionWithDefaultValue3(optional (double or DOMString)? arg = null);
    557  undefined passNullableUnionWithDefaultValue4(optional (float or DOMString)? arg = "");
    558  undefined passNullableUnionWithDefaultValue5(optional (float or DOMString)? arg = 1);
    559  undefined passNullableUnionWithDefaultValue6(optional (float or DOMString)? arg = null);
    560  undefined passNullableUnionWithDefaultValue7(optional (unrestricted double or DOMString)? arg = "");
    561  undefined passNullableUnionWithDefaultValue8(optional (unrestricted double or DOMString)? arg = 1);
    562  undefined passNullableUnionWithDefaultValue9(optional (unrestricted double or DOMString)? arg = null);
    563  undefined passNullableUnionWithDefaultValue10(optional (unrestricted float or DOMString)? arg = "");
    564  undefined passNullableUnionWithDefaultValue11(optional (unrestricted float or DOMString)? arg = 1);
    565  undefined passNullableUnionWithDefaultValue12(optional (unrestricted float or DOMString)? arg = null);
    566  undefined passNullableUnionWithDefaultValue13(optional (double or ByteString)? arg = "");
    567  undefined passNullableUnionWithDefaultValue14(optional (double or ByteString)? arg = 1);
    568  undefined passNullableUnionWithDefaultValue15(optional (double or ByteString)? arg = 1.5);
    569  undefined passNullableUnionWithDefaultValue16(optional (double or ByteString)? arg = null);
    570  undefined passNullableUnionWithDefaultValue17(optional (double or SupportedType)? arg = "text/html");
    571  undefined passNullableUnionWithDefaultValue18(optional (double or SupportedType)? arg = 1);
    572  undefined passNullableUnionWithDefaultValue19(optional (double or SupportedType)? arg = 1.5);
    573  undefined passNullableUnionWithDefaultValue20(optional (double or SupportedType)? arg = null);
    574  undefined passNullableUnionWithDefaultValue21(optional (double or USVString)? arg = "abc");
    575  undefined passNullableUnionWithDefaultValue22(optional (double or USVString)? arg = 1);
    576  undefined passNullableUnionWithDefaultValue23(optional (double or USVString)? arg = 1.5);
    577  undefined passNullableUnionWithDefaultValue24(optional (double or USVString)? arg = null);
    578  undefined passNullableUnionWithDefaultValue25(optional (double or UTF8String)? arg = "");
    579  undefined passNullableUnionWithDefaultValue26(optional (double or UTF8String)? arg = 1);
    580  undefined passNullableUnionWithDefaultValue27(optional (double or UTF8String)? arg = 1.5);
    581  undefined passNullableUnionWithDefaultValue28(optional (double or UTF8String)? arg = null);
    582 
    583  undefined passSequenceOfUnions(sequence<(CanvasPattern or CanvasGradient)> arg);
    584  undefined passSequenceOfUnions2(sequence<(object or long)> arg);
    585  undefined passVariadicUnion((CanvasPattern or CanvasGradient)... arg);
    586 
    587  undefined passSequenceOfNullableUnions(sequence<(CanvasPattern or CanvasGradient)?> arg);
    588  undefined passVariadicNullableUnion((CanvasPattern or CanvasGradient)?... arg);
    589  undefined passRecordOfUnions(record<DOMString, (CanvasPattern or CanvasGradient)> arg);
    590  // XXXbz no move constructor on some unions
    591  // undefined passRecordOfUnions2(record<DOMString, (object or long)> arg);
    592 
    593  (CanvasPattern or CanvasGradient) receiveUnion();
    594  (object or long) receiveUnion2();
    595  (CanvasPattern? or CanvasGradient) receiveUnionContainingNull();
    596  (CanvasPattern or CanvasGradient)? receiveNullableUnion();
    597  (object or long)? receiveNullableUnion2();
    598 
    599  attribute (CanvasPattern or CanvasGradient) writableUnion;
    600  attribute (CanvasPattern? or CanvasGradient) writableUnionContainingNull;
    601  attribute (CanvasPattern or CanvasGradient)? writableNullableUnion;
    602 
    603  // Promise types
    604  undefined passPromise(Promise<any> arg);
    605  undefined passOptionalPromise(optional Promise<any> arg);
    606  undefined passPromiseSequence(sequence<Promise<any>> arg);
    607  Promise<any> receivePromise();
    608  Promise<any> receiveAddrefedPromise();
    609 
    610  // binaryNames tests
    611  [BinaryName="methodRenamedTo"]
    612  undefined methodRenamedFrom();
    613  [BinaryName="methodRenamedTo"]
    614  undefined methodRenamedFrom(byte argument);
    615  [BinaryName="attributeGetterRenamedTo"]
    616  readonly attribute byte attributeGetterRenamedFrom;
    617  [BinaryName="attributeRenamedTo"]
    618  attribute byte attributeRenamedFrom;
    619 
    620  undefined passDictionary(optional Dict x = {});
    621  undefined passDictionary2(Dict x);
    622  // [Cached] is not supported in JS-implemented WebIDL.
    623  //[Cached, Pure]
    624  //readonly attribute Dict readonlyDictionary;
    625  //[Cached, Pure]
    626  //readonly attribute Dict? readonlyNullableDictionary;
    627  //[Cached, Pure]
    628  //attribute Dict writableDictionary;
    629  //[Cached, Pure, Frozen]
    630  //readonly attribute Dict readonlyFrozenDictionary;
    631  //[Cached, Pure, Frozen]
    632  //readonly attribute Dict? readonlyFrozenNullableDictionary;
    633  //[Cached, Pure, Frozen]
    634  //attribute Dict writableFrozenDictionary;
    635  Dict receiveDictionary();
    636  Dict? receiveNullableDictionary();
    637  undefined passOtherDictionary(optional GrandparentDict x = {});
    638  undefined passSequenceOfDictionaries(sequence<Dict> x);
    639  undefined passRecordOfDictionaries(record<DOMString, GrandparentDict> x);
    640  // No support for nullable dictionaries inside a sequence (nor should there be)
    641  //  undefined passSequenceOfNullableDictionaries(sequence<Dict?> x);
    642  undefined passDictionaryOrLong(optional Dict x = {});
    643  undefined passDictionaryOrLong(long x);
    644 
    645  undefined passDictContainingDict(optional DictContainingDict arg = {});
    646  undefined passDictContainingSequence(optional DictContainingSequence arg = {});
    647  DictContainingSequence receiveDictContainingSequence();
    648  undefined passVariadicDictionary(Dict... arg);
    649 
    650  // EnforceRange/Clamp tests
    651  undefined dontEnforceRangeOrClamp(byte arg);
    652  undefined doEnforceRange([EnforceRange] byte arg);
    653  undefined doEnforceRangeNullable([EnforceRange] byte? arg);
    654  undefined doClamp([Clamp] byte arg);
    655  undefined doClampNullable([Clamp] byte? arg);
    656  attribute [EnforceRange] byte enforcedByte;
    657  attribute [EnforceRange] byte? enforcedByteNullable;
    658  attribute [Clamp] byte clampedByte;
    659  attribute [Clamp] byte? clampedByteNullable;
    660 
    661  // Typedefs
    662  const myLong myLongConstant = 5;
    663  undefined exerciseTypedefInterfaces1(AnotherNameForTestJSImplInterface arg);
    664  AnotherNameForTestJSImplInterface exerciseTypedefInterfaces2(NullableTestJSImplInterface arg);
    665  undefined exerciseTypedefInterfaces3(YetAnotherNameForTestJSImplInterface arg);
    666 
    667  // Deprecated methods and attributes
    668  [Deprecated="Components"]
    669  attribute byte deprecatedAttribute;
    670  [Deprecated="Components"]
    671  byte deprecatedMethod();
    672  [Deprecated="Components"]
    673  undefined deprecatedMethodWithContext(any arg);
    674 
    675  // Static methods and attributes
    676  // FIXME: Bug 863952 Static things are not supported yet
    677  /*
    678  static attribute boolean staticAttribute;
    679  static undefined staticMethod(boolean arg);
    680  static undefined staticMethodWithContext(any arg);
    681 
    682  // Deprecated static methods and attributes
    683  [Deprecated="Components"]
    684  static attribute byte staticDeprecatedAttribute;
    685  [Deprecated="Components"]
    686  static byte staticDeprecatedMethod();
    687  [Deprecated="Components"]
    688  static byte staticDeprecatedMethodWithContext();
    689  */
    690 
    691  // Overload resolution tests
    692  //undefined overload1(DOMString... strs);
    693  boolean overload1(TestJSImplInterface arg);
    694  TestJSImplInterface overload1(DOMString strs, TestJSImplInterface arg);
    695  undefined overload2(TestJSImplInterface arg);
    696  undefined overload2(optional Dict arg = {});
    697  undefined overload2(boolean arg);
    698  undefined overload2(DOMString arg);
    699  undefined overload3(TestJSImplInterface arg);
    700  undefined overload3(MyTestCallback arg);
    701  undefined overload3(boolean arg);
    702  undefined overload4(TestJSImplInterface arg);
    703  undefined overload4(TestCallbackInterface arg);
    704  undefined overload4(DOMString arg);
    705  undefined overload5(long arg);
    706  undefined overload5(MyTestEnum arg);
    707  undefined overload6(long arg);
    708  undefined overload6(boolean arg);
    709  undefined overload7(long arg);
    710  undefined overload7(boolean arg);
    711  undefined overload7(ByteString arg);
    712  undefined overload8(long arg);
    713  undefined overload8(TestJSImplInterface arg);
    714  undefined overload9(long? arg);
    715  undefined overload9(DOMString arg);
    716  undefined overload10(long? arg);
    717  undefined overload10(object arg);
    718  undefined overload11(long arg);
    719  undefined overload11(DOMString? arg);
    720  undefined overload12(long arg);
    721  undefined overload12(boolean? arg);
    722  undefined overload13(long? arg);
    723  undefined overload13(boolean arg);
    724  undefined overload14(optional long arg);
    725  undefined overload14(TestInterface arg);
    726  undefined overload15(long arg);
    727  undefined overload15(optional TestInterface arg);
    728  undefined overload16(long arg);
    729  undefined overload16(optional TestInterface? arg);
    730  undefined overload17(sequence<long> arg);
    731  undefined overload17(record<DOMString, long> arg);
    732  undefined overload18(record<DOMString, DOMString> arg);
    733  undefined overload18(sequence<DOMString> arg);
    734  undefined overload19(sequence<long> arg);
    735  undefined overload19(optional Dict arg = {});
    736  undefined overload20(optional Dict arg = {});
    737  undefined overload20(sequence<long> arg);
    738 
    739  // Variadic handling
    740  undefined passVariadicThirdArg(DOMString arg1, long arg2, TestJSImplInterface... arg3);
    741 
    742  // Conditionally exposed methods/attributes
    743  [Pref="dom.webidl.test1"]
    744  readonly attribute boolean prefable1;
    745  [Pref="dom.webidl.test1"]
    746  readonly attribute boolean prefable2;
    747  [Pref="dom.webidl.test2"]
    748  readonly attribute boolean prefable3;
    749  [Pref="dom.webidl.test2"]
    750  readonly attribute boolean prefable4;
    751  [Pref="dom.webidl.test1"]
    752  readonly attribute boolean prefable5;
    753  [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"]
    754  readonly attribute boolean prefable6;
    755  [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"]
    756  readonly attribute boolean prefable7;
    757  [Pref="dom.webidl.test2", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"]
    758  readonly attribute boolean prefable8;
    759  [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"]
    760  readonly attribute boolean prefable9;
    761  [Pref="dom.webidl.test1"]
    762  undefined prefable10();
    763  [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"]
    764  undefined prefable11();
    765  [Pref="dom.webidl.test1", Func="TestFuncControlledMember"]
    766  readonly attribute boolean prefable12;
    767  [Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"]
    768  undefined prefable13();
    769  [Pref="dom.webidl.test1", Func="TestFuncControlledMember"]
    770  readonly attribute boolean prefable14;
    771  [Func="TestFuncControlledMember"]
    772  readonly attribute boolean prefable15;
    773  [Func="TestFuncControlledMember"]
    774  readonly attribute boolean prefable16;
    775  [Pref="dom.webidl.test1", Func="TestFuncControlledMember"]
    776  undefined prefable17();
    777  [Func="TestFuncControlledMember"]
    778  undefined prefable18();
    779  [Func="TestFuncControlledMember"]
    780  undefined prefable19();
    781  [Pref="dom.webidl.test1", Func="TestFuncControlledMember", ChromeOnly]
    782  undefined prefable20();
    783 
    784  // Conditionally exposed methods/attributes involving [SecureContext]
    785  [SecureContext]
    786  readonly attribute boolean conditionalOnSecureContext1;
    787  [SecureContext, Pref="dom.webidl.test1"]
    788  readonly attribute boolean conditionalOnSecureContext2;
    789  [SecureContext, Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"]
    790  readonly attribute boolean conditionalOnSecureContext3;
    791  [SecureContext, Pref="dom.webidl.test1", Func="TestFuncControlledMember"]
    792  readonly attribute boolean conditionalOnSecureContext4;
    793  [SecureContext]
    794  undefined conditionalOnSecureContext5();
    795  [SecureContext, Pref="dom.webidl.test1"]
    796  undefined conditionalOnSecureContext6();
    797  [SecureContext, Pref="dom.webidl.test1", Func="nsGenericHTMLElement::LegacyTouchAPIEnabled"]
    798  undefined conditionalOnSecureContext7();
    799  [SecureContext, Pref="dom.webidl.test1", Func="TestFuncControlledMember"]
    800  undefined conditionalOnSecureContext8();
    801 
    802  // Miscellania
    803  [LegacyLenientThis] attribute long attrWithLenientThis;
    804  // FIXME: Bug 863954 Unforgeable things get all confused when
    805  // non-JS-implemented interfaces inherit from JS-implemented ones or vice
    806  // versa.
    807  //   [Unforgeable] readonly attribute long unforgeableAttr;
    808  //   [Unforgeable, ChromeOnly] readonly attribute long unforgeableAttr2;
    809  //   [Unforgeable] long unforgeableMethod();
    810  //   [Unforgeable, ChromeOnly] long unforgeableMethod2();
    811  // FIXME: Bug 863955 No stringifiers yet
    812  //   stringifier;
    813  undefined passRenamedInterface(TestRenamedInterface arg);
    814  [PutForwards=writableByte] readonly attribute TestJSImplInterface putForwardsAttr;
    815  [PutForwards=writableByte, LegacyLenientThis] readonly attribute TestJSImplInterface putForwardsAttr2;
    816  [PutForwards=writableByte, ChromeOnly] readonly attribute TestJSImplInterface putForwardsAttr3;
    817  [Throws] undefined throwingMethod();
    818  [Throws] attribute boolean throwingAttr;
    819  [GetterThrows] attribute boolean throwingGetterAttr;
    820  [SetterThrows] attribute boolean throwingSetterAttr;
    821  [CanOOM] undefined canOOMMethod();
    822  [CanOOM] attribute boolean canOOMAttr;
    823  [GetterCanOOM] attribute boolean canOOMGetterAttr;
    824  [SetterCanOOM] attribute boolean canOOMSetterAttr;
    825  [CEReactions] undefined ceReactionsMethod();
    826  [CEReactions] undefined ceReactionsMethodOverload();
    827  [CEReactions] undefined ceReactionsMethodOverload(DOMString bar);
    828  [CEReactions] attribute boolean ceReactionsAttr;
    829  // NeedsSubjectPrincipal not supported on JS-implemented things for
    830  // now, because we always pass in the caller principal anyway.
    831  //  [NeedsSubjectPrincipal] undefined needsSubjectPrincipalMethod();
    832  //  [NeedsSubjectPrincipal] attribute boolean needsSubjectPrincipalAttr;
    833  // legacycaller short(unsigned long arg1, TestInterface arg2);
    834  undefined passArgsWithDefaults(optional long arg1,
    835                            optional TestInterface? arg2 = null,
    836                            optional Dict arg3 = {}, optional double arg4 = 5.0,
    837                            optional float arg5);
    838  attribute any toJSONShouldSkipThis;
    839  attribute TestParentInterface toJSONShouldSkipThis2;
    840  attribute TestCallbackInterface toJSONShouldSkipThis3;
    841  [Default] object toJSON();
    842 
    843  attribute byte dashed-attribute;
    844  undefined dashed-method();
    845 
    846  // [NonEnumerable] tests
    847  [NonEnumerable]
    848  attribute boolean nonEnumerableAttr;
    849  [NonEnumerable]
    850  const boolean nonEnumerableConst = true;
    851  [NonEnumerable]
    852  undefined nonEnumerableMethod();
    853 
    854  // [AllowShared] tests
    855  attribute [AllowShared] ArrayBufferViewTypedef allowSharedArrayBufferViewTypedef;
    856  attribute [AllowShared] ArrayBufferView allowSharedArrayBufferView;
    857  attribute [AllowShared] ArrayBufferView? allowSharedNullableArrayBufferView;
    858  attribute [AllowShared] ArrayBuffer allowSharedArrayBuffer;
    859  attribute [AllowShared] ArrayBuffer? allowSharedNullableArrayBuffer;
    860 
    861  undefined passAllowSharedArrayBufferViewTypedef(AllowSharedArrayBufferViewTypedef foo);
    862  undefined passAllowSharedArrayBufferView([AllowShared] ArrayBufferView foo);
    863  undefined passAllowSharedNullableArrayBufferView([AllowShared] ArrayBufferView? foo);
    864  undefined passAllowSharedArrayBuffer([AllowShared] ArrayBuffer foo);
    865  undefined passAllowSharedNullableArrayBuffer([AllowShared] ArrayBuffer? foo);
    866  undefined passUnionArrayBuffer((DOMString or ArrayBuffer) foo);
    867  undefined passUnionAllowSharedArrayBuffer((DOMString or [AllowShared] ArrayBuffer) foo);
    868  undefined passAllowSharedInt8ArrayOrInt16Array([AllowShared] (Int8Array or Int16Array) foo);
    869 
    870  // If you add things here, add them to TestCodeGen as well
    871 };
    872 
    873 [Exposed=Window]
    874 interface TestCImplementedInterface : TestJSImplInterface {
    875 };
    876 
    877 [Exposed=Window]
    878 interface TestCImplementedInterface2 {
    879 };
    880 
    881 [LegacyNoInterfaceObject,
    882 JSImplementation="@mozilla.org/test-js-impl-interface;2",
    883 Exposed=Window]
    884 interface TestJSImplNoInterfaceObject {
    885  // [Cached] is not supported in JS-implemented WebIDL.
    886  //[Cached, Pure]
    887  //readonly attribute byte cachedByte;
    888 };