#
# This file describes all Blink IDL extended attributes and allowed values.
# If any IDL file uses an extended attribute or values not listed below, the
# build will fail.
# If you would like to add a new extended attribute or value, please:
#     (1) add the extended attribute or value to this file
#     (2) add an explanation to the Blink IDL extended attributes document:
#         IDLExtendedAttributes.md (in this directory)
#     (3) add appropriate test cases to run-bindings-tests
#
# The syntax of this file is as follows:
#     - One extended attribute per one line: Name and (optionally) Values.
#     - "Attr" means that the Attr does not take a value, i.e. [Attr].
#     - "Attr=X" means that Attr takes a required value, which must be X;
#       i.e. [Attr=X].
#     - "Attr=X|Y|Z" means that Attr takes a required value, and the valid
#       values are X, Y, and Z, and combinations thereof;
#       e.g. [Attr=X], [Attr=Y], [Attr=X|Z].
#       The separator must be | or &, so [Attr=X&Z] is also valid.
#     - "Attr=|X|Y|Z" means that Attr takes an optional value, whose valid
#       values (if present) are X, Y, and Z, and combinations thereof; e.g.
#       [Attr], [Attr=X], [Attr=Y], [Attr=X|Z], [Attr=X|Y|Z], [Attr=X&Z].
#       Note that including an empty value in the list, as in [Attr=X||Y],
#       is NOT valid: the value is optional, but empty values are not allowed.
#     - "Attr=*" means that Attr takes a required value, which can be
#       arbitrary, and combinations thereof, e.g. [Attr=IndexedDB],
#       [Attr=DeleteFunction], [Attr=X|Y].
#     - "Attr=|*" means that Attr takes an optional value, which can be
#       arbitrary, e.g. [Attr], [Attr=X].
#     - "Attr=X|*" means that Attr takes an required value, which can be
#       arbitrary, but that "X" is standard, e.g. [Attr=X], [Attr=Foo].
#

ActiveScriptWrappable
AllowShared
CEReactions
CachedAccessor
CachedAttribute=*
CallWith=ExecutionContext|ScriptState|ScriptArguments|CurrentWindow|EnteredWindow|ThisValue
CheckSecurity=Receiver|ReturnValue
Clamp
Constructor
# FIXME: remove [ConstructorCallWith=Document], as can instead use
# [ConstructorCallWith=ExecutionContext] + toDocument(executionContext)
ConstructorCallWith=ExecutionContext|ScriptState|Document
ContextEnabled=*
CrossOrigin=|Getter|Setter
Custom=|Getter|Setter|LegacyCallAsFunction|PropertyGetter|PropertyEnumerator|PropertyQuery|CallPrologue|CallEpilogue
CustomConstructor
CustomElementCallbacks
# FIXMEDART: Dartium specific attributes.
# DartCustom can have no value or New if New an additional method is added (V8 will not see this method)
DartCustom=|New|Setter|Getter
# DartName should have the alias name to be used to resolve.
DartName=*
# DartSuppress can have no value will suppress attribute/method, if attribute can also suppress
# just the DartSuppress=getter or DartSuppress=Setter
DartSuppress=|Getter|Setter
# No need to setup Dart API scope when a native function is invoked. 
DartNoAutoScope
# TODO(terry): Used in dart.idl - look at removing or using 
DartSupplemental
# TODO(terry): Used in dart.idl (look at eliminating).
DartForceOptional
# TODO(terry): Used in dart.idl (look at eliminating).
Callback
# TODO(terry): Used in dart.idl (look at eliminating).
DartStrictTypeChecking
# End of Dartium attributes.
Default=Undefined
DependentLifetime
DeprecateAs=*
DoNotCheckConstants
DoNotTestNewObject
EnforceRange
Exposed=*
FeaturePolicy=*
FlexibleArrayBufferView
Global=|*
HTMLConstructor
ImmutablePrototype
ImplementedAs=*
LegacyInterfaceTypeChecking
LegacyTreatAsPartialInterface
LegacyUnenumerableNamedProperties
LenientThis
LogActivity=|GetterOnly|SetterOnly
LogAllWorlds
NewObject
Measure
MeasureAs=*
NamedConstructor=*
NoInterfaceObject
NotEnumerable
OriginTrialEnabled=*
OverrideBuiltins
PartialInterfaceImplementedAs=*
PermissiveDictionaryConversion
PerWorldBindings
PostMessage
PrimaryGlobal=|*
PutForwards=*
RaisesException=|Getter|Setter|Constructor
Reflect=|*
ReflectEmpty=*
ReflectInvalid=*
ReflectMissing=*
ReflectOnly=*
Replaceable
# Valid values for [RuntimeEnabled] are the Runtime Enabled Features, listed in
# Source/platform/runtime_enabled_features.json5
RuntimeEnabled=*
# Valid values for [RuntimeCallStatsCounter] are counters defined in
# Source/platform/bindings/RuntimeCallStats.h
RuntimeCallStatsCounter=*
SameObject
SaveSameObject
SecureContext
SetterCallWith=ExecutionContext|ScriptArguments|CurrentWindow|EnteredWindow
TreatNullAs=NullString|EmptyString
URL
Unforgeable
Unscopable
WebAgentAPI
