#
# 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
Clamp
Conditional=*
Constructor
# FIXME: remove [ConstructorCallWith=Document], as can instead use
# [ConstructorCallWith=ExecutionContext] + toDocument(executionContext)
ConstructorCallWith=ExecutionContext|Document
Custom=|Getter|Setter|LegacyCallAsFunction|ToV8|VisitDOMWrapper|Wrap|PropertyGetter|PropertyEnumerator|PropertyQuery
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
EnforceRange
EventConstructor
ExposeJSAccessors
Exposed=*
GarbageCollected
Global=|*
Immutable
ImplementedAs=*
InitializedByEventConstructor
LegacyTreatAsPartialInterface
LogActivity=|GetterOnly|SetterOnly
LogAllWorlds
LogPreviousValue
MeasureAs=*
NamedConstructor=*
NoInterfaceObject
NotEnumerable
OverrideBuiltins
PartialInterfaceImplementedAs=*
# Valid values for [PerContextEnabled] are Context Features, in
# ContextFeatures::FeatureType in Source/core/dom/ContextFeatures.h
PerContextEnabled=*
PerWorldBindings
PrimaryGlobal=|*
PutForwards=*
RaisesException=|Getter|Setter|Constructor
ReadOnly
Reflect=|*
ReflectEmpty=*
ReflectInvalid=*
ReflectMissing=*
ReflectOnly=*
Replaceable
# Valid values for [RuntimeEnabled] are the Runtime Enabled Features, listed in
# Source/core/page/RuntimeEnabledFeatures.in
RuntimeEnabled=*
SetWrapperReferenceFrom=*
SetWrapperReferenceTo=*
SetterCallWith=ExecutionContext|ScriptArguments|ActiveWindow|FirstWindow
SpecialWrapFor=*
TreatNullAs=NullString
TreatReturnedNullStringAs=Null|Undefined
TreatUndefinedAs=NullString
TypeChecking=Interface|Nullable|Unrestricted
URL
Unforgeable
WillBeGarbageCollected
