# This file desribes all Web IDL extended attributes that are supported by the
# Cobalt bindings code generation pipeline. Using an extended attribute not
# listed below will cause the build to fail.
# Extended attributes include attributes listed in the Web IDL specification
# (http://heycam.github.io/webidl/#idl-extended-attributes) and custom
# attributes that we need to support Cobalt's bindings implementation.
#
# This file and format is derived from Blink IDL extended attribute whitelist,
# which can be found under
# third_party/blink/Source/bindings/IDLExtendedAttributes.txt
#
# If you introduce a new extended attribute or value:
#     (1) add the extended attribute or value to this file
#     (2) add test cases to run-bindings-tests to exercise the new attribute,
#         if appropriate.
#
# 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].
#

# An Interface Object for this interface will not be created.
# https://www.w3.org/TR/WebIDL/#NoInterfaceObject
NoInterfaceObject

# This interface will be used as a global object. PrimaryGlobal s intended to be
# used by the Window interface, but is also used for TestWindow in unit tests.
# http://heycam.github.io/webidl/#Global
Global
PrimaryGlobal

# This interface is exposed on the specified global interface, rather than
# the default of Window.
# This is generally used for exposing interfaces to Worker interfaces, but it is
# also used in Cobalt to expose interfaces used in unit tests to a TestWindow
# global interface, rather than the default Window global interface.
# http://heycam.github.io/webidl/#Exposed
Exposed=*

# Call the Cobalt function this property is bound to with the corresponding
# object added to the head of the function's parameters.
# StackTrace is a custom addition to CallWith for the purpose of testing
# GetStackTrace, and is not specified in the spec.
CallWith=EnvironmentSettings|StackTrace
ConstructorCallWith=EnvironmentSettings

# The constructor/attribute/operation may raise an exception. A pointer to an
# ExceptionState interface will be passed to the implementation at the end of
# the parameter list.
RaisesException=|Constructor|Setter

# The Constructor keyword exposes a Constructor to JavaScript.
Constructor

# The Constructor for an interface is different from the interface name.
NamedConstructor=*

# When set on a DOMString type, null will be converted to the empty string
# rather than the string "null".
TreatNullAs=EmptyString

# When TreatUndefinedAs=EmptyString is set on a DOMString type, undefined will
# be converted to the empty string rather than the string "undefined".
TreatUndefinedAs=EmptyString

# Surround the affected code in #if defined(CONDITIONAL_VALUE). Can be applied
# to interfaces and individual properties.
Conditional=*

# Marks an interface or properties of an interface as not supported. Such
# properties are not visible from JavaScript. Attempts to access them will
# trigger a notification.
NotSupported

# If the Clamp extended attribute appears on an operation argument,
# writable attribute or dictionary member whose type is one of the
# integer types, it indicates that when an ECMAScript Number is
# converted to the IDL type, out of range values will be clamped to the
# range of valid values, rather than using the operators that use a
# module operation.
Clamp

# Not yet supported
ArrayClass
LenientThis
OverrideBuiltins
PutForwards=*
Replaceable
Unforgeable

# Ignored attributes. We do not perform any additional logic in the bindings
# when these attributes are present
NewObject
SameObject

# Allows to specify an alternate method name for an attribute implementation.
# Can be used to avoid using reserved keywords for method names.
ImplementedAs=*
