# 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=TestWindow|Window|Worker

# The value of this attribute is a list of functions to be called that will
# return a scoped_refptr<Wrappable>.
# The raw pointer will be added as an opaque root when an instance of this
# interface is visited during garbage collection.
AddOpaqueRoots=|*

# The value of this attribute is a function to be called that will return a
# scoped_refptr<Wrappable> that represents an opaque root of an object
# implementing this interface.
# If opaque root of an object is in the set of opaque roots that have been
# collected during garbage collection, the object's wrapper will be kept alive
# as well.
GetOpaqueRoot=*

# 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

# 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
