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