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