#
# 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:
#         http://www.chromium.org/blink/webidl/blink-idl-extended-attributes
#     (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; the
#       separator makes a difference for Conditional, but otherwise is simply
#       a style convention.
#     - "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].
#

ActiveDOMObject
CachedAttribute=*
CallWith=ExecutionContext|ScriptState|ScriptArguments|ActiveWindow|FirstWindow|ThisValue
CheckSecurity=Frame|Node|Window
Clamp
Conditional=*
Constructor
# FIXME: remove [ConstructorCallWith=Document], as can instead use
# [ConstructorCallWith=ExecutionContext] + toDocument(executionContext)
ConstructorCallWith=ExecutionContext|ScriptState|Document
Custom=|Getter|Setter|LegacyCallAsFunction|VisitDOMWrapper|PropertyGetter|PropertyEnumerator|PropertyQuery|CallPrologue|CallEpilogue
CustomConstructor
CustomElementCallbacks
# 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
DoNotCheckSecurity=|Setter
DoNotCheckSignature
DoNotExposeJSAccessors
EnforceRange
ExposeJSAccessors
Exposed=*
GarbageCollected
Global=|*
Immutable
ImplementedAs=*
ImplementedInPrivateScript
Iterable
LegacyInterfaceTypeChecking
LegacyTreatAsPartialInterface
LenientThis
LogActivity=|GetterOnly|SetterOnly
LogAllWorlds
NewObject
Measure
MeasureAs=*
NamedConstructor=*
NoImplHeader
NoInterfaceObject
NotEnumerable
OnlyExposedToPrivateScript
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/core/page/RuntimeEnabledFeatures.in
RuntimeEnabled=*
SameObject
SetWrapperReferenceFrom=*
SetWrapperReferenceTo=*
SetterCallWith=ExecutionContext|ScriptArguments|ActiveWindow|FirstWindow
TreatNullAs=NullString|EmptyString
TreatReturnedNullStringAs=Null|Undefined
TreatUndefinedAs=NullString
TypeChecking=Interface
URL
Unforgeable
Unscopeable
WillBeGarbageCollected
