#
# This file describes all IDL attributes.
# If any IDL file uses an IDL attribute not listed below, the WebKit build will fail.
# If you want to add a new IDL attribute, you need to
#     (1) add the IDL attribute to this file
#     (2) add the explanation to the WebKit IDL document (https://trac.webkit.org/wiki/WebKitIDL)
#     (3) add test cases to run-bindings-tests
#
# The syntax of this file is as follows:
#     - You can write one IDL attribute per one line.
#     - "ATTR" means that the IDL attribute ATTR does not take any argument; i.e. [ATTR].
#     - "ATTR=X" means that the IDL attribute ATTR always takes one argument X; i.e. [ATTR=X].
#     - "ATTR=X|Y|Z" means that the IDL attribute ATTR takes one or more arguments
#       and the arguments are X, Y or Z; e.g. [ATTR=X], [ATTR=Y], [ATTR=X|Z], [ATTR=X|Y|Z].
#     - "ATTR=|X|Y|Z" means that the IDL attribute ATTR can take arguments
#       and the arguments are X, Y or Z; e.g. [ATTR], [ATTR=X], [ATTR=Y], [ATTR=X|Z], [ATTR=X|Y|Z].
#     - "ATTR=*" means that the IDL attribute ATTR can take arbitrary arguments;
#       e.g. [ATTR=INDEXED_DATABASE], [ATTR=deleteFunction].
#

ActiveDOMObject
ActivityLog=Access|Setter|Getter|AccessForIsolatedWorlds|SetterForIsolatedWorlds|GetterForIsolatedWorlds
AllowJSCreationOnlyIfFeatureEnabled
CachedAttribute
KeepAttributeAliveForGC
CallWith=ScriptExecutionContext|ScriptState|ScriptArguments|ActiveWindow|FirstWindow|ThisValue
CheckSecurity
CheckSecurityForNode
Clamp
Conditional=*
Constructor
ConstructorCallWith=ScriptExecutionContext
ConstructorRaisesException
ConstructorTemplate=Event|TypedArray
Custom
CustomConstructor
CustomEnumerateProperty
CustomGetter
CustomIsReachable
CustomLegacyCall
CustomSetter
CustomToV8
Default=NullString|Undefined
DeliverCustomElementCallbacks
DependentLifetime
DeprecateAs=*
DoNotCheckConstants
DoNotCheckSecurity
DoNotCheckSecurityOnGetter
DoNotCheckSecurityOnSetter
DoNotCheckSignature
DoNotGenerateToV8
DoNotGenerateWrap
EnabledAtRuntime=*
EnabledPerContext=*
EnforceRange
GenerateIsReachable=*
GetterRaisesException
GlobalContext=Window|WorkerGlobalScope|SharedWorkerGlobalScope|DedicatedWorkerGlobalScope
Immutable
ImplementedAs=*
InitializedByEventConstructor
IsIndex
MasqueradesAsUndefined
MeasureAs=*
NamedConstructor=*
NoInterfaceObject
NotEnumerable
OverrideBuiltins
PerWorldBindings
RaisesException
ReadOnly
Reflect=*
Replaceable
SetterCallWith=ScriptExecutionContext|ScriptState|ScriptArguments|ActiveWindow|FirstWindow
SetterRaisesException
StrictTypeChecking
TreatNullAs=*
TreatReturnedNullStringAs=Null|Undefined
TreatUndefinedAs=*
URL
Unforgeable
