aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorKagami Sascha Rosylight <saschanaz@outlook.com>2019-10-02 21:45:01 +0900
committerKagami Sascha Rosylight <saschanaz@outlook.com>2019-10-02 21:45:30 +0900
commit9ce82ea1aedfd3eddad0eed9fac6718599a25ec3 (patch)
tree022259fe3bcf1133705eb5f58d0c1f91f309d3fa /components
parent9706cd497da0fcc30c9af04b7d3dc0d4e9d7c8fb (diff)
downloadservo-9ce82ea1aedfd3eddad0eed9fac6718599a25ec3.tar.gz
servo-9ce82ea1aedfd3eddad0eed9fac6718599a25ec3.zip
Migrate to new constructor operation syntax
Diffstat (limited to 'components')
-rw-r--r--components/script/dom/bindings/codegen/parser/WebIDL.py310
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_argument_keywords.py17
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_attributes_on_types.py12
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_constructor.py207
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py18
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py18
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_dictionary.py74
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py8
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interface.py8
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py16
-rwxr-xr-xcomponents/script/dom/bindings/codegen/parser/update.sh4
-rw-r--r--components/script/dom/webidls/AnalyserNode.webidl4
-rw-r--r--components/script/dom/webidls/AudioBuffer.webidl4
-rw-r--r--components/script/dom/webidls/AudioBufferSourceNode.webidl4
-rw-r--r--components/script/dom/webidls/AudioContext.webidl4
-rw-r--r--components/script/dom/webidls/BiquadFilterNode.webidl4
-rw-r--r--components/script/dom/webidls/Blob.webidl6
-rw-r--r--components/script/dom/webidls/BluetoothAdvertisingEvent.webidl3
-rw-r--r--components/script/dom/webidls/ChannelMergerNode.webidl4
-rw-r--r--components/script/dom/webidls/ChannelSplitterNode.webidl4
-rw-r--r--components/script/dom/webidls/CloseEvent.webidl3
-rw-r--r--components/script/dom/webidls/Comment.webidl2
-rw-r--r--components/script/dom/webidls/CompositionEvent.webidl3
-rw-r--r--components/script/dom/webidls/ConstantSourceNode.webidl4
-rw-r--r--components/script/dom/webidls/CustomEvent.webidl4
-rw-r--r--components/script/dom/webidls/DOMException.webidl4
-rw-r--r--components/script/dom/webidls/DOMMatrix.webidl4
-rw-r--r--components/script/dom/webidls/DOMMatrixReadOnly.webidl4
-rw-r--r--components/script/dom/webidls/DOMParser.webidl2
-rw-r--r--components/script/dom/webidls/DOMPoint.webidl6
-rw-r--r--components/script/dom/webidls/DOMPointReadOnly.webidl6
-rw-r--r--components/script/dom/webidls/DOMQuad.webidl6
-rw-r--r--components/script/dom/webidls/DOMRect.webidl6
-rw-r--r--components/script/dom/webidls/DOMRectReadOnly.webidl6
-rw-r--r--components/script/dom/webidls/Document.webidl2
-rw-r--r--components/script/dom/webidls/DocumentFragment.webidl2
-rw-r--r--components/script/dom/webidls/ErrorEvent.webidl3
-rw-r--r--components/script/dom/webidls/Event.webidl3
-rw-r--r--components/script/dom/webidls/EventSource.webidl4
-rw-r--r--components/script/dom/webidls/EventTarget.webidl3
-rw-r--r--components/script/dom/webidls/ExtendableEvent.webidl6
-rw-r--r--components/script/dom/webidls/ExtendableMessageEvent.webidl4
-rw-r--r--components/script/dom/webidls/File.webidl8
-rw-r--r--components/script/dom/webidls/FileReader.webidl3
-rw-r--r--components/script/dom/webidls/FileReaderSync.webidl3
-rw-r--r--components/script/dom/webidls/FocusEvent.webidl4
-rw-r--r--components/script/dom/webidls/FormData.webidl4
-rw-r--r--components/script/dom/webidls/FormDataEvent.webidl4
-rw-r--r--components/script/dom/webidls/GainNode.webidl4
-rw-r--r--components/script/dom/webidls/GamepadEvent.webidl3
-rw-r--r--components/script/dom/webidls/HashChangeEvent.webidl4
-rw-r--r--components/script/dom/webidls/Headers.webidl4
-rw-r--r--components/script/dom/webidls/ImageData.webidl6
-rw-r--r--components/script/dom/webidls/InputEvent.webidl2
-rw-r--r--components/script/dom/webidls/KeyboardEvent.webidl2
-rw-r--r--components/script/dom/webidls/MediaQueryListEvent.webidl3
-rw-r--r--components/script/dom/webidls/MediaStream.webidl8
-rw-r--r--components/script/dom/webidls/MessageEvent.webidl3
-rw-r--r--components/script/dom/webidls/MouseEvent.webidl4
-rw-r--r--components/script/dom/webidls/MutationObserver.webidl3
-rw-r--r--components/script/dom/webidls/OfflineAudioCompletionEvent.webidl4
-rw-r--r--components/script/dom/webidls/OfflineAudioContext.webidl6
-rw-r--r--components/script/dom/webidls/OffscreenCanvas.webidl4
-rw-r--r--components/script/dom/webidls/OscillatorNode.webidl4
-rw-r--r--components/script/dom/webidls/PageTransitionEvent.webidl4
-rw-r--r--components/script/dom/webidls/PannerNode.webidl4
-rw-r--r--components/script/dom/webidls/PerformanceObserver.webidl4
-rw-r--r--components/script/dom/webidls/PopStateEvent.webidl4
-rw-r--r--components/script/dom/webidls/ProgressEvent.webidl4
-rw-r--r--components/script/dom/webidls/PromiseRejectionEvent.webidl3
-rw-r--r--components/script/dom/webidls/RTCIceCandidate.webidl4
-rw-r--r--components/script/dom/webidls/RTCPeerConnection.webidl4
-rw-r--r--components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl4
-rw-r--r--components/script/dom/webidls/RTCSessionDescription.webidl4
-rw-r--r--components/script/dom/webidls/RTCTrackEvent.webidl4
-rw-r--r--components/script/dom/webidls/Range.webidl2
-rw-r--r--components/script/dom/webidls/Request.webidl5
-rw-r--r--components/script/dom/webidls/Response.webidl4
-rw-r--r--components/script/dom/webidls/StereoPannerNode.webidl4
-rw-r--r--components/script/dom/webidls/StorageEvent.webidl3
-rw-r--r--components/script/dom/webidls/TestBinding.webidl8
-rw-r--r--components/script/dom/webidls/TestBindingIterable.webidl3
-rw-r--r--components/script/dom/webidls/TestBindingPairIterable.webidl3
-rw-r--r--components/script/dom/webidls/TestWorklet.webidl3
-rw-r--r--components/script/dom/webidls/Text.webidl2
-rw-r--r--components/script/dom/webidls/TextDecoder.webidl3
-rw-r--r--components/script/dom/webidls/TextEncoder.webidl3
-rw-r--r--components/script/dom/webidls/TrackEvent.webidl4
-rw-r--r--components/script/dom/webidls/TransitionEvent.webidl4
-rw-r--r--components/script/dom/webidls/UIEvent.webidl2
-rw-r--r--components/script/dom/webidls/URL.webidl3
-rw-r--r--components/script/dom/webidls/URLSearchParams.webidl6
-rw-r--r--components/script/dom/webidls/VRDisplayEvent.webidl3
-rw-r--r--components/script/dom/webidls/VRFrameData.webidl3
-rw-r--r--components/script/dom/webidls/WebGLContextEvent.webidl4
-rw-r--r--components/script/dom/webidls/WebSocket.webidl3
-rw-r--r--components/script/dom/webidls/WheelEvent.webidl4
-rw-r--r--components/script/dom/webidls/Worker.webidl3
-rw-r--r--components/script/dom/webidls/XMLHttpRequest.webidl3
-rw-r--r--components/script/dom/webidls/XMLSerializer.webidl2
-rw-r--r--components/script/dom/webidls/XRRigidTransform.webidl4
-rw-r--r--components/script/dom/webidls/XRSessionEvent.webidl4
-rw-r--r--components/script/dom/webidls/XRWebGLLayer.webidl8
103 files changed, 649 insertions, 403 deletions
diff --git a/components/script/dom/bindings/codegen/parser/WebIDL.py b/components/script/dom/bindings/codegen/parser/WebIDL.py
index b934c21db5b..5e8b958e3de 100644
--- a/components/script/dom/bindings/codegen/parser/WebIDL.py
+++ b/components/script/dom/bindings/codegen/parser/WebIDL.py
@@ -554,9 +554,6 @@ class IDLExternalInterface(IDLObjectWithIdentifier, IDLExposureMixins):
def hasProbablyShortLivingWrapper(self):
return False
- def isNavigatorProperty(self):
- return False
-
def isSerializable(self):
return False
@@ -611,7 +608,7 @@ class IDLPartialInterfaceOrNamespace(IDLObject):
for attr in attrs:
identifier = attr.identifier()
- if identifier in ["Constructor", "NamedConstructor"]:
+ if identifier == "NamedConstructor":
self.propagatedExtendedAttrs.append(attr)
elif identifier == "SecureContext":
self._haveSecureContextExtendedAttribute = True
@@ -737,7 +734,7 @@ class IDLInterfaceOrInterfaceMixinOrNamespace(IDLObjectWithScope, IDLExposureMix
self.location = location
# Put the new members at the beginning
self.members = members + self.members
-
+
def addPartial(self, partial):
assert self.identifier.name == partial.identifier.name
self._partials.append(partial)
@@ -790,7 +787,7 @@ class IDLInterfaceMixin(IDLInterfaceOrInterfaceMixinOrNamespace):
def __str__(self):
return "Interface mixin '%s'" % self.identifier.name
-
+
def finish(self, scope):
if self._finished:
return
@@ -969,7 +966,11 @@ class IDLInterfaceOrNamespace(IDLInterfaceOrInterfaceMixinOrNamespace):
(self.identifier.name,
self.parent.identifier.name),
[self.location])
- assert not parent or isinstance(parent, IDLInterface)
+ if parent and not isinstance(parent, IDLInterface):
+ raise WebIDLError("%s inherits from %s which is not an interface " %
+ (self.identifier.name,
+ self.parent.identifier.name),
+ [self.location, parent.location])
self.parent = parent
@@ -1076,11 +1077,34 @@ class IDLInterfaceOrNamespace(IDLInterfaceOrInterfaceMixinOrNamespace):
ctor = self.ctor()
if ctor is not None:
- assert len(ctor._exposureGlobalNames) == 0
+ if not self.hasInterfaceObject():
+ raise WebIDLError(
+ "Can't have both a constructor and [NoInterfaceObject]",
+ [self.location, ctor.location])
+
+ if self.globalNames:
+ raise WebIDLError(
+ "Can't have both a constructor and [Global]",
+ [self.location, ctor.location])
+
+ assert(len(ctor._exposureGlobalNames) == 0 or
+ ctor._exposureGlobalNames == self._exposureGlobalNames)
ctor._exposureGlobalNames.update(self._exposureGlobalNames)
- ctor.finish(scope)
+ if ctor in self.members:
+ # constructor operation.
+ self.members.remove(ctor)
+ else:
+ # extended attribute. This can only happen with
+ # [HTMLConstructor] and this is the only way we can get into this
+ # code with len(ctor._exposureGlobalNames) !=
+ # self._exposureGlobalNames.
+ ctor.finish(scope)
for ctor in self.namedConstructors:
+ if self.globalNames:
+ raise WebIDLError(
+ "Can't have both a named constructor and [Global]",
+ [self.location, self.namedConstructors.location])
assert len(ctor._exposureGlobalNames) == 0
ctor._exposureGlobalNames.update(self._exposureGlobalNames)
ctor.finish(scope)
@@ -1462,12 +1486,11 @@ class IDLInterfaceOrNamespace(IDLInterfaceOrInterfaceMixinOrNamespace):
# Conditional exposure makes no sense for interfaces with no
- # interface object, unless they're navigator properties.
+ # interface object.
# And SecureContext makes sense for interfaces with no interface object,
# since it is also propagated to interface members.
if (self.isExposedConditionally(exclusions=["SecureContext"]) and
- not self.hasInterfaceObject() and
- not self.isNavigatorProperty()):
+ not self.hasInterfaceObject()):
raise WebIDLError("Interface with no interface object is "
"exposed conditionally",
[self.location])
@@ -1640,39 +1663,6 @@ class IDLInterfaceOrNamespace(IDLInterfaceOrInterfaceMixinOrNamespace):
current = current.parent
return False
- def isNavigatorProperty(self):
- naviProp = self.getExtendedAttribute("NavigatorProperty")
- if not naviProp:
- return False
- assert len(naviProp) == 1
- assert isinstance(naviProp, list)
- assert len(naviProp[0]) != 0
- return True
-
- def getNavigatorProperty(self):
- naviProp = self.getExtendedAttribute("NavigatorProperty")
- if not naviProp:
- return None
- assert len(naviProp) == 1
- assert isinstance(naviProp, list)
- assert len(naviProp[0]) != 0
- conditionExtendedAttributes = self._extendedAttrDict.viewkeys() & IDLInterfaceOrNamespace.conditionExtendedAttributes
- attr = IDLAttribute(self.location,
- IDLUnresolvedIdentifier(BuiltinLocation("<auto-generated-identifier>"), naviProp[0]),
- IDLUnresolvedType(self.location, IDLUnresolvedIdentifier(self.location, self.identifier.name)),
- True,
- extendedAttrDict={ a: self._extendedAttrDict[a] for a in conditionExtendedAttributes },
- navigatorObjectGetter=True)
- attr._exposureGlobalNames = self._exposureGlobalNames
- # We're abusing Constant a little bit here, because we need Cached. The
- # getter will create a new object every time, but we're never going to
- # clear the cached value.
- extendedAttrs = [ IDLExtendedAttribute(self.location, ("Throws", )),
- IDLExtendedAttribute(self.location, ("Cached", )),
- IDLExtendedAttribute(self.location, ("Constant", )) ]
- attr.addExtendedAttributes(extendedAttrs)
- return attr
-
def hasChildInterfaces(self):
return self._hasChildInterfaces
@@ -1731,67 +1721,39 @@ class IDLInterface(IDLInterfaceOrNamespace):
raise WebIDLError("[NoInterfaceObject] must take no arguments",
[attr.location])
- if self.ctor():
- raise WebIDLError("Constructor and NoInterfaceObject are incompatible",
- [self.location])
-
self._noInterfaceObject = True
- elif identifier == "Constructor" or identifier == "NamedConstructor" or identifier == "ChromeConstructor" or identifier == "HTMLConstructor":
- if identifier == "Constructor" and not self.hasInterfaceObject():
- raise WebIDLError(str(identifier) + " and NoInterfaceObject are incompatible",
- [self.location])
-
+ elif identifier == "NamedConstructor" or identifier == "HTMLConstructor":
if identifier == "NamedConstructor" and not attr.hasValue():
raise WebIDLError("NamedConstructor must either take an identifier or take a named argument list",
[attr.location])
- if identifier == "ChromeConstructor" and not self.hasInterfaceObject():
- raise WebIDLError(str(identifier) + " and NoInterfaceObject are incompatible",
- [self.location])
-
if identifier == "HTMLConstructor":
- if not self.hasInterfaceObject():
- raise WebIDLError(str(identifier) + " and NoInterfaceObject are incompatible",
- [self.location])
-
if not attr.noArguments():
raise WebIDLError(str(identifier) + " must take no arguments",
[attr.location])
- if self.globalNames:
- raise WebIDLError("[%s] must not be specified together with "
- "[Global]" % identifier,
- [self.location, attr.location])
-
args = attr.args() if attr.hasArgs() else []
retType = IDLWrapperType(self.location, self)
- if identifier == "Constructor" or identifier == "ChromeConstructor" or identifier == "HTMLConstructor":
+ if identifier == "HTMLConstructor":
name = "constructor"
allowForbidden = True
else:
name = attr.value()
allowForbidden = False
- methodIdentifier = IDLUnresolvedIdentifier(self.location, name,
- allowForbidden=allowForbidden)
+ method = IDLConstructor(
+ attr.location, args, name,
+ htmlConstructor=(identifier == "HTMLConstructor"))
+ method.reallyInit(self)
- method = IDLMethod(self.location, methodIdentifier, retType,
- args, static=True,
- htmlConstructor=(identifier == "HTMLConstructor"))
- # Constructors are always NewObject and are always
- # assumed to be able to throw (since there's no way to
- # indicate otherwise) and never have any other
- # extended attributes.
+ # Are always assumed to be able to throw (since there's no way to
+ # indicate otherwise).
method.addExtendedAttributes(
- [IDLExtendedAttribute(self.location, ("NewObject",)),
- IDLExtendedAttribute(self.location, ("Throws",))])
- if identifier == "ChromeConstructor":
- method.addExtendedAttributes(
- [IDLExtendedAttribute(self.location, ("ChromeOnly",))])
+ [IDLExtendedAttribute(self.location, ("Throws",))])
- if identifier == "Constructor" or identifier == "ChromeConstructor" or identifier == "HTMLConstructor":
+ if identifier == "HTMLConstructor":
method.resolve(self)
else:
# We need to detect conflicts for NamedConstructors across
@@ -1823,10 +1785,6 @@ class IDLInterface(IDLInterfaceOrNamespace):
"an interface with inherited interfaces",
[attr.location, self.location])
elif identifier == "Global":
- if self.ctor() or self.namedConstructors:
- raise WebIDLError("[Global] cannot be specified on an "
- "interface with a constructor",
- [attr.location, self.location]);
if attr.hasValue():
self.globalNames = [attr.value()]
elif attr.hasArgs():
@@ -1896,7 +1854,6 @@ class IDLInterface(IDLInterfaceOrNamespace):
elif (identifier == "Pref" or
identifier == "JSImplementation" or
identifier == "HeaderFile" or
- identifier == "NavigatorProperty" or
identifier == "Func" or
identifier == "Deprecated"):
# Known extended attributes that take a string value
@@ -1923,6 +1880,17 @@ class IDLInterface(IDLInterfaceOrNamespace):
def isSerializable(self):
return self.getExtendedAttribute("Serializable")
+ def setNonPartial(self, location, parent, members):
+ # Before we do anything else, finish initializing any constructors that
+ # might be in "members", so we don't have partially-initialized objects
+ # hanging around. We couldn't do it before now because we needed to have
+ # to have the IDLInterface on hand to properly set the return type.
+ for member in members:
+ if isinstance(member, IDLConstructor):
+ member.reallyInit(self)
+
+ IDLInterfaceOrNamespace.setNonPartial(self, location, parent, members)
+
class IDLNamespace(IDLInterfaceOrNamespace):
def __init__(self, location, parentScope, name, members, isKnownNonPartial):
@@ -2193,6 +2161,7 @@ class IDLType(IDLObject):
'domstring',
'bytestring',
'usvstring',
+ 'jsstring',
'object',
'date',
'void',
@@ -2254,6 +2223,9 @@ class IDLType(IDLObject):
def isUSVString(self):
return False
+ def isJSString(self):
+ return False
+
def isVoid(self):
return self.name == "Void"
@@ -2479,6 +2451,9 @@ class IDLNullableType(IDLParametrizedType):
def isUSVString(self):
return self.inner.isUSVString()
+ def isJSString(self):
+ return self.inner.isJSString()
+
def isFloat(self):
return self.inner.isFloat()
@@ -2600,6 +2575,9 @@ class IDLSequenceType(IDLParametrizedType):
def isUSVString(self):
return False
+ def isJSString(self):
+ return False
+
def isVoid(self):
return False
@@ -2861,6 +2839,9 @@ class IDLTypedefType(IDLType):
def isUSVString(self):
return self.inner.isUSVString()
+ def isJSString(self):
+ return self.inner.isJSString()
+
def isVoid(self):
return self.inner.isVoid()
@@ -2991,6 +2972,9 @@ class IDLWrapperType(IDLType):
def isUSVString(self):
return False
+ def isJSString(self):
+ return False
+
def isVoid(self):
return False
@@ -3190,6 +3174,7 @@ class IDLBuiltinType(IDLType):
'domstring',
'bytestring',
'usvstring',
+ 'jsstring',
'object',
'date',
'void',
@@ -3227,6 +3212,7 @@ class IDLBuiltinType(IDLType):
Types.domstring: IDLType.Tags.domstring,
Types.bytestring: IDLType.Tags.bytestring,
Types.usvstring: IDLType.Tags.usvstring,
+ Types.jsstring: IDLType.Tags.jsstring,
Types.object: IDLType.Tags.object,
Types.date: IDLType.Tags.date,
Types.void: IDLType.Tags.void,
@@ -3311,7 +3297,8 @@ class IDLBuiltinType(IDLType):
def isString(self):
return (self._typeTag == IDLBuiltinType.Types.domstring or
self._typeTag == IDLBuiltinType.Types.bytestring or
- self._typeTag == IDLBuiltinType.Types.usvstring)
+ self._typeTag == IDLBuiltinType.Types.usvstring or
+ self._typeTag == IDLBuiltinType.Types.jsstring)
def isByteString(self):
return self._typeTag == IDLBuiltinType.Types.bytestring
@@ -3322,6 +3309,9 @@ class IDLBuiltinType(IDLType):
def isUSVString(self):
return self._typeTag == IDLBuiltinType.Types.usvstring
+ def isJSString(self):
+ return self._typeTag == IDLBuiltinType.Types.jsstring
+
def isInteger(self):
return self._typeTag <= IDLBuiltinType.Types.unsigned_long_long
@@ -3524,6 +3514,9 @@ BuiltinTypes = {
IDLBuiltinType.Types.usvstring:
IDLBuiltinType(BuiltinLocation("<builtin type>"), "USVString",
IDLBuiltinType.Types.usvstring),
+ IDLBuiltinType.Types.jsstring:
+ IDLBuiltinType(BuiltinLocation("<builtin type>"), "JSString",
+ IDLBuiltinType.Types.jsstring),
IDLBuiltinType.Types.object:
IDLBuiltinType(BuiltinLocation("<builtin type>"), "Object",
IDLBuiltinType.Types.object),
@@ -3690,8 +3683,8 @@ class IDLValue(IDLObject):
# TreatNullAsEmpty is a different type for resolution reasons,
# however once you have a value it doesn't matter
return self
- elif self.type.isString() and type.isByteString():
- # Allow ByteStrings to use a default value like DOMString.
+ elif self.type.isString() and (type.isByteString() or type.isJSString()):
+ # Allow ByteStrings and JSStrings to use a default value like DOMString.
# No coercion is required as Codegen.py will handle the
# extra steps. We want to make sure that our string contains
# only valid characters, so we check that here.
@@ -4340,7 +4333,7 @@ class IDLConst(IDLInterfaceMember):
class IDLAttribute(IDLInterfaceMember):
def __init__(self, location, identifier, type, readonly, inherit=False,
static=False, stringifier=False, maplikeOrSetlike=None,
- extendedAttrDict=None, navigatorObjectGetter=False):
+ extendedAttrDict=None):
IDLInterfaceMember.__init__(self, location, identifier,
IDLInterfaceMember.Tags.Attr,
extendedAttrDict=extendedAttrDict)
@@ -4358,7 +4351,6 @@ class IDLAttribute(IDLInterfaceMember):
self.maplikeOrSetlike = maplikeOrSetlike
self.dependsOn = "Everything"
self.affects = "Everything"
- self.navigatorObjectGetter = navigatorObjectGetter
self.bindingAliases = []
if static and identifier.name == "prototype":
@@ -5239,7 +5231,7 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
assert argument.type.isComplete()
if ((argument.type.isDictionary() and
- argument.type.inner.canBeEmpty())or
+ argument.type.unroll().inner.canBeEmpty()) or
(argument.type.isUnion() and
argument.type.unroll().hasPossiblyEmptyDictionaryType())):
# Optional dictionaries and unions containing optional
@@ -5263,12 +5255,16 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
"must have a default value",
[argument.location])
- # An argument cannot be a Nullable Dictionary
- if argument.type.nullable():
- raise WebIDLError("An argument cannot be a nullable "
- "dictionary or nullable union "
- "containing a dictionary",
- [argument.location])
+ # An argument cannot be a nullable dictionary or a
+ # nullable union containing a dictionary.
+ if (argument.type.nullable() and
+ (argument.type.isDictionary() or
+ (argument.type.isUnion() and
+ argument.type.unroll().hasDictionaryType()))):
+ raise WebIDLError("An argument cannot be a nullable "
+ "dictionary or nullable union "
+ "containing a dictionary",
+ [argument.location])
# Only the last argument can be variadic
if variadicArgument:
@@ -5497,6 +5493,52 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
return deps
+class IDLConstructor(IDLMethod):
+ def __init__(self, location, args, name, htmlConstructor=False):
+ # We can't actually init our IDLMethod yet, because we do not know the
+ # return type yet. Just save the info we have for now and we will init
+ # it later.
+ self._initLocation = location
+ self._initArgs = args
+ self._initName = name
+ self._htmlConstructor = htmlConstructor
+ self._inited = False
+ self._initExtendedAttrs = []
+
+ def addExtendedAttributes(self, attrs):
+ if self._inited:
+ return IDLMethod.addExtendedAttributes(self, attrs)
+ self._initExtendedAttrs.extend(attrs)
+
+ def handleExtendedAttribute(self, attr):
+ identifier = attr.identifier()
+ if (identifier == "BinaryName" or
+ identifier == "ChromeOnly" or
+ identifier == "NewObject" or
+ identifier == "SecureContext" or
+ identifier == "Throws"):
+ IDLMethod.handleExtendedAttribute(self, attr)
+ else:
+ raise WebIDLError("Unknown extended attribute %s on method" % identifier,
+ [attr.location])
+
+ def reallyInit(self, parentInterface):
+ name = self._initName
+ location = self._initLocation
+ identifier = IDLUnresolvedIdentifier(location, name, allowForbidden=True)
+ retType = IDLWrapperType(parentInterface.location, parentInterface)
+ IDLMethod.__init__(self, location, identifier, retType, self._initArgs,
+ static=True, htmlConstructor=self._htmlConstructor)
+ self._inited = True;
+ # Propagate through whatever extended attributes we already had
+ self.addExtendedAttributes(self._initExtendedAttrs)
+ self._initExtendedAttrs = []
+ # Constructors are always NewObject. Whether they throw or not is
+ # indicated by [Throws] annotations in the usual way.
+ self.addExtendedAttributes(
+ [IDLExtendedAttribute(self.location, ("NewObject",))])
+
+
class IDLImplementsStatement(IDLObject):
def __init__(self, location, implementor, implementee):
IDLObject.__init__(self, location)
@@ -5712,6 +5754,7 @@ class Tokenizer(object):
"DOMString": "DOMSTRING",
"ByteString": "BYTESTRING",
"USVString": "USVSTRING",
+ "JSString": "JSSTRING",
"any": "ANY",
"boolean": "BOOLEAN",
"byte": "BYTE",
@@ -6076,7 +6119,7 @@ class Parser(Tokenizer):
def p_PartialInterfaceRest(self, p):
"""
- PartialInterfaceRest : IDENTIFIER LBRACE InterfaceMembers RBRACE SEMICOLON
+ PartialInterfaceRest : IDENTIFIER LBRACE PartialInterfaceMembers RBRACE SEMICOLON
"""
location = self.getLocation(p, 1)
identifier = IDLUnresolvedIdentifier(location, p[1])
@@ -6157,12 +6200,42 @@ class Parser(Tokenizer):
def p_InterfaceMember(self, p):
"""
- InterfaceMember : Const
- | AttributeOrOperationOrMaplikeOrSetlikeOrIterable
+ InterfaceMember : PartialInterfaceMember
+ | Constructor
"""
p[0] = p[1]
-
+ def p_Constructor(self, p):
+ """
+ Constructor : CONSTRUCTOR LPAREN ArgumentList RPAREN SEMICOLON
+ """
+ p[0] = IDLConstructor(self.getLocation(p, 1), p[3], "constructor")
+
+ def p_PartialInterfaceMembers(self, p):
+ """
+ PartialInterfaceMembers : ExtendedAttributeList PartialInterfaceMember PartialInterfaceMembers
+ """
+ p[0] = [p[2]]
+
+ assert not p[1] or p[2]
+ p[2].addExtendedAttributes(p[1])
+
+ p[0].extend(p[3])
+
+ def p_PartialInterfaceMembersEmpty(self, p):
+ """
+ PartialInterfaceMembers :
+ """
+ p[0] = []
+
+ def p_PartialInterfaceMember(self, p):
+ """
+ PartialInterfaceMember : Const
+ | AttributeOrOperationOrMaplikeOrSetlikeOrIterable
+ """
+ p[0] = p[1]
+
+
def p_MixinMembersEmpty(self, p):
"""
MixinMembers :
@@ -6778,7 +6851,9 @@ class Parser(Tokenizer):
"""
t = p[2]
assert isinstance(t, IDLType)
- identifier = IDLUnresolvedIdentifier(self.getLocation(p, 3), p[3])
+ # Arg names can be reserved identifiers
+ identifier = IDLUnresolvedIdentifier(self.getLocation(p, 3), p[3],
+ allowForbidden=True)
defaultValue = p[4]
@@ -6795,7 +6870,9 @@ class Parser(Tokenizer):
"""
t = p[1]
assert isinstance(t, IDLType)
- identifier = IDLUnresolvedIdentifier(self.getLocation(p, 3), p[3])
+ # Arg names can be reserved identifiers
+ identifier = IDLUnresolvedIdentifier(self.getLocation(p, 3), p[3],
+ allowForbidden=True)
variadic = p[2]
@@ -6934,6 +7011,7 @@ class Parser(Tokenizer):
| DOMSTRING
| BYTESTRING
| USVSTRING
+ | JSSTRING
| ANY
| ATTRIBUTE
| BOOLEAN
@@ -7216,6 +7294,12 @@ class Parser(Tokenizer):
"""
p[0] = IDLBuiltinType.Types.usvstring
+ def p_BuiltinStringTypeJSString(self, p):
+ """
+ BuiltinStringType : JSSTRING
+ """
+ p[0] = IDLBuiltinType.Types.jsstring
+
def p_UnsignedIntegerTypeUnsigned(self, p):
"""
UnsignedIntegerType : UNSIGNED IntegerType
@@ -7443,23 +7527,9 @@ class Parser(Tokenizer):
for p in self._productions:
if isinstance(p, IDLInterface):
interfaceStatements.append(p)
- if p.identifier.name == "Navigator":
- navigatorInterface = p
iterableIteratorIface = None
for iface in interfaceStatements:
- navigatorProperty = iface.getNavigatorProperty()
- if navigatorProperty:
- # We're generating a partial interface to add a readonly
- # property to the Navigator interface for every interface
- # annotated with NavigatorProperty.
- partialInterface = IDLPartialInterfaceOrNamespace(
- iface.location,
- IDLUnresolvedIdentifier(iface.location, "Navigator"),
- [ navigatorProperty ],
- navigatorInterface)
- self._productions.append(partialInterface)
-
iterable = None
# We haven't run finish() on the interface yet, so we don't know
# whether our interface is maplike/setlike/iterable or not. This
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_argument_keywords.py b/components/script/dom/bindings/codegen/parser/tests/test_argument_keywords.py
new file mode 100644
index 00000000000..e190f617e26
--- /dev/null
+++ b/components/script/dom/bindings/codegen/parser/tests/test_argument_keywords.py
@@ -0,0 +1,17 @@
+def WebIDLTest(parser, harness):
+ parser.parse("""
+ interface Foo {
+ void foo(object constructor);
+ };
+ """)
+
+ results = parser.finish()
+ harness.check(len(results), 1, "Should have an interface");
+ iface = results[0];
+ harness.check(len(iface.members), 1, "Should have an operation");
+ operation = iface.members[0];
+ harness.check(len(operation.signatures()), 1, "Should have one signature");
+ (retval, args) = operation.signatures()[0];
+ harness.check(len(args), 1, "Should have an argument");
+ harness.check(args[0].identifier.name, "constructor",
+ "Should have an identifier named 'constructor'");
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_attributes_on_types.py b/components/script/dom/bindings/codegen/parser/tests/test_attributes_on_types.py
index 1128d58317a..43daca3c453 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_attributes_on_types.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_attributes_on_types.py
@@ -209,6 +209,18 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
+ typedef [TreatNullAs=EmptyString] JSString Foo;
+ """)
+ parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Should not allow [TreatNullAs] on JSString")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
interface Foo {
void foo([Clamp] Bar arg);
};
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_constructor.py b/components/script/dom/bindings/codegen/parser/tests/test_constructor.py
index c722d7bc5c7..20eb152cdab 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_constructor.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_constructor.py
@@ -43,45 +43,55 @@ def WebIDLTest(parser, harness):
(QName, name, type, optional, variadic) = expectedArgs[i]
checkArgument(gotArgs[i], QName, name, type, optional, variadic)
+ def checkResults(results):
+ harness.check(len(results), 3, "Should be three productions")
+ harness.ok(isinstance(results[0], WebIDL.IDLInterface),
+ "Should be an IDLInterface")
+ harness.ok(isinstance(results[1], WebIDL.IDLInterface),
+ "Should be an IDLInterface")
+ harness.ok(isinstance(results[2], WebIDL.IDLInterface),
+ "Should be an IDLInterface")
+
+ checkMethod(results[0].ctor(), "::TestConstructorNoArgs::constructor",
+ "constructor", [("TestConstructorNoArgs (Wrapper)", [])])
+ harness.check(len(results[0].members), 0,
+ "TestConstructorNoArgs should not have members")
+ checkMethod(results[1].ctor(), "::TestConstructorWithArgs::constructor",
+ "constructor",
+ [("TestConstructorWithArgs (Wrapper)",
+ [("::TestConstructorWithArgs::constructor::name", "name", "String", False, False)])])
+ harness.check(len(results[1].members), 0,
+ "TestConstructorWithArgs should not have members")
+ checkMethod(results[2].ctor(), "::TestConstructorOverloads::constructor",
+ "constructor",
+ [("TestConstructorOverloads (Wrapper)",
+ [("::TestConstructorOverloads::constructor::foo", "foo", "Object", False, False)]),
+ ("TestConstructorOverloads (Wrapper)",
+ [("::TestConstructorOverloads::constructor::bar", "bar", "Boolean", False, False)])])
+ harness.check(len(results[2].members), 0,
+ "TestConstructorOverloads should not have members")
+
parser.parse("""
- [Constructor]
interface TestConstructorNoArgs {
+ constructor();
};
- [Constructor(DOMString name)]
interface TestConstructorWithArgs {
+ constructor(DOMString name);
};
- [Constructor(object foo), Constructor(boolean bar)]
interface TestConstructorOverloads {
+ constructor(object foo);
+ constructor(boolean bar);
};
""")
results = parser.finish()
- harness.check(len(results), 3, "Should be three productions")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface),
- "Should be an IDLInterface")
- harness.ok(isinstance(results[1], WebIDL.IDLInterface),
- "Should be an IDLInterface")
- harness.ok(isinstance(results[2], WebIDL.IDLInterface),
- "Should be an IDLInterface")
-
- checkMethod(results[0].ctor(), "::TestConstructorNoArgs::constructor",
- "constructor", [("TestConstructorNoArgs (Wrapper)", [])])
- checkMethod(results[1].ctor(), "::TestConstructorWithArgs::constructor",
- "constructor",
- [("TestConstructorWithArgs (Wrapper)",
- [("::TestConstructorWithArgs::constructor::name", "name", "String", False, False)])])
- checkMethod(results[2].ctor(), "::TestConstructorOverloads::constructor",
- "constructor",
- [("TestConstructorOverloads (Wrapper)",
- [("::TestConstructorOverloads::constructor::foo", "foo", "Object", False, False)]),
- ("TestConstructorOverloads (Wrapper)",
- [("::TestConstructorOverloads::constructor::bar", "bar", "Boolean", False, False)])])
+ checkResults(results)
parser = parser.reset()
parser.parse("""
- [ChromeConstructor()]
- interface TestChromeConstructor {
+ interface TestChromeOnlyConstructor {
+ [ChromeOnly] constructor();
};
""")
results = parser.finish()
@@ -89,8 +99,8 @@ def WebIDLTest(parser, harness):
harness.ok(isinstance(results[0], WebIDL.IDLInterface),
"Should be an IDLInterface")
- checkMethod(results[0].ctor(), "::TestChromeConstructor::constructor",
- "constructor", [("TestChromeConstructor (Wrapper)", [])],
+ checkMethod(results[0].ctor(), "::TestChromeOnlyConstructor::constructor",
+ "constructor", [("TestChromeOnlyConstructor (Wrapper)", [])],
chromeOnly=True)
parser = parser.reset()
@@ -112,16 +122,16 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
- [Constructor(),
- ChromeConstructor(DOMString a)]
- interface TestChromeConstructor {
+ interface TestChromeOnlyConstructor {
+ constructor()
+ [ChromeOnly] constructor(DOMString a);
};
""")
results = parser.finish()
except:
threw = True
- harness.ok(threw, "Can't have both a Constructor and a ChromeConstructor")
+ harness.ok(threw, "Can't have both a constructor and a ChromeOnly constructor")
# Test HTMLConstructor with argument
parser = parser.reset()
@@ -153,120 +163,197 @@ def WebIDLTest(parser, harness):
harness.ok(threw, "HTMLConstructor can't be used on a callback interface")
- # Test HTMLConstructor and Constructor
+ # Test HTMLConstructor and constructor operation
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [HTMLConstructor]
+ interface TestHTMLConstructorAndConstructor {
+ constructor();
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Can't have both a constructor and a HTMLConstructor")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [HTMLConstructor]
+ interface TestHTMLConstructorAndConstructor {
+ [Throws]
+ constructor();
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw,
+ "Can't have both a throwing constructor and a HTMLConstructor")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [HTMLConstructor]
+ interface TestHTMLConstructorAndConstructor {
+ constructor(DOMString a);
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw,
+ "Can't have both a HTMLConstructor and a constructor operation")
+
parser = parser.reset()
threw = False
try:
parser.parse("""
- [Constructor,
- HTMLConstructor]
+ [HTMLConstructor]
interface TestHTMLConstructorAndConstructor {
+ [Throws]
+ constructor(DOMString a);
};
""")
results = parser.finish()
except:
threw = True
- harness.ok(threw, "Can't have both a Constructor and a HTMLConstructor")
+ harness.ok(threw,
+ "Can't have both a HTMLConstructor and a throwing constructor "
+ "operation")
+ # Test HTMLConstructor and [ChromeOnly] constructor operation
parser = parser.reset()
threw = False
try:
parser.parse("""
- [HTMLConstructor,
- Constructor]
+ [HTMLConstructor]
interface TestHTMLConstructorAndConstructor {
+ [ChromeOnly]
+ constructor();
};
""")
results = parser.finish()
except:
threw = True
- harness.ok(threw, "Can't have both a HTMLConstructor and a Constructor")
+ harness.ok(threw,
+ "Can't have both a ChromeOnly constructor and a HTMLConstructor")
parser = parser.reset()
threw = False
try:
parser.parse("""
- [HTMLConstructor,
- Constructor(DOMString a)]
+ [HTMLConstructor]
interface TestHTMLConstructorAndConstructor {
+ [Throws, ChromeOnly]
+ constructor();
};
""")
+ results = parser.finish()
except:
threw = True
- harness.ok(threw, "Can't have both a HTMLConstructor and a Constructor")
+ harness.ok(threw,
+ "Can't have both a throwing chromeonly constructor and a "
+ "HTMLConstructor")
parser = parser.reset()
threw = False
try:
parser.parse("""
- [Constructor(DOMString a),
- HTMLConstructor]
+ [HTMLConstructor]
interface TestHTMLConstructorAndConstructor {
+ [ChromeOnly]
+ constructor(DOMString a);
};
""")
+ results = parser.finish()
except:
threw = True
- harness.ok(threw, "Can't have both a HTMLConstructor and a Constructor")
+ harness.ok(threw,
+ "Can't have both a HTMLConstructor and a chromeonly constructor "
+ "operation")
- # Test HTMLConstructor and ChromeConstructor
parser = parser.reset()
threw = False
try:
parser.parse("""
- [ChromeConstructor,
- HTMLConstructor]
- interface TestHTMLConstructorAndChromeConstructor {
+ [HTMLConstructor]
+ interface TestHTMLConstructorAndConstructor {
+ [Throws, ChromeOnly]
+ constructor(DOMString a);
};
""")
results = parser.finish()
except:
threw = True
- harness.ok(threw, "Can't have both a HTMLConstructor and a ChromeConstructor")
+ harness.ok(threw,
+ "Can't have both a HTMLConstructor and a throwing chromeonly "
+ "constructor operation")
parser = parser.reset()
threw = False
try:
parser.parse("""
- [HTMLConstructor,
- ChromeConstructor]
- interface TestHTMLConstructorAndChromeConstructor {
+ [NoInterfaceObject]
+ interface InterfaceWithoutInterfaceObject {
+ constructor();
};
""")
results = parser.finish()
except:
threw = True
- harness.ok(threw, "Can't have both a HTMLConstructor and a ChromeConstructor")
+ harness.ok(threw,
+ "Can't have a constructor operation on a [NoInterfaceObject] "
+ "interface")
parser = parser.reset()
threw = False
try:
parser.parse("""
- [ChromeConstructor(DOMString a),
- HTMLConstructor]
- interface TestHTMLConstructorAndChromeConstructor {
+ interface InterfaceWithPartial {
+ };
+
+ partial interface InterfaceWithPartial {
+ constructor();
};
""")
results = parser.finish()
except:
threw = True
+ harness.ok(threw,
+ "Can't have a constructor operation on a partial interface")
+
parser = parser.reset()
threw = False
try:
parser.parse("""
- [HTMLConstructor,
- ChromeConstructor(DOMString a)]
- interface TestHTMLConstructorAndChromeConstructor {
+ interface InterfaceWithMixin {
};
+
+ interface mixin Mixin {
+ constructor();
+ };
+
+ InterfaceWithMixin includes Mixin
""")
results = parser.finish()
except:
threw = True
- harness.ok(threw, "Can't have both a HTMLConstructor and a ChromeConstructor")
+ harness.ok(threw,
+ "Can't have a constructor operation on a mixin")
+
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py b/components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py
index 14d42caf09c..c469d56e817 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py
@@ -2,23 +2,9 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
- [Constructor, Global]
- interface TestConstructorGlobal {
- };
- """)
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse("""
- [Global, Constructor]
+ [Global]
interface TestConstructorGlobal {
+ constructor();
};
""")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py b/components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py
index e5413350a28..d4175094911 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py
@@ -2,23 +2,9 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
- [Constructor, NoInterfaceObject]
- interface TestConstructorNoInterfaceObject {
- };
- """)
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse("""
- [NoInterfaceObject, Constructor]
+ [NoInterfaceObject]
interface TestConstructorNoInterfaceObject {
+ constructor();
};
""")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_dictionary.py b/components/script/dom/bindings/codegen/parser/tests/test_dictionary.py
index 770f76b22f0..cff049bea15 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_dictionary.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_dictionary.py
@@ -320,14 +320,36 @@ def WebIDLTest(parser, harness):
dictionary A {
};
interface X {
- void doFoo(optional A? arg1);
+ void doFoo(optional A? arg1 = {});
};
""")
results = parser.finish()
- except:
- threw = True
+ except Exception as x:
+ threw = x
+
+ harness.ok(threw, "Optional dictionary arg must not be nullable")
+ harness.ok("nullable" in str(threw),
+ "Must have the expected exception for optional nullable dictionary arg")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ required long x;
+ };
+ interface X {
+ void doFoo(A? arg1);
+ };
+ """)
+ results = parser.finish()
+ except Exception as x:
+ threw = x
- harness.ok(threw, "Dictionary arg must not be nullable")
+ harness.ok(threw, "Required dictionary arg must not be nullable")
+ harness.ok("nullable" in str(threw),
+ "Must have the expected exception for required nullable "
+ "dictionary arg")
parser = parser.reset()
threw = False
@@ -336,14 +358,54 @@ def WebIDLTest(parser, harness):
dictionary A {
};
interface X {
- void doFoo(optional (A or long)? arg1);
+ void doFoo(optional (A or long)? arg1 = {});
+ };
+ """)
+ results = parser.finish()
+ except Exception as x:
+ threw = x
+
+ harness.ok(threw, "Dictionary arg must not be in an optional nullable union")
+ harness.ok("nullable" in str(threw),
+ "Must have the expected exception for optional nullable union "
+ "arg containing dictionary")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ required long x;
+ };
+ interface X {
+ void doFoo((A or long)? arg1);
+ };
+ """)
+ results = parser.finish()
+ except Exception as x:
+ threw = x
+
+ harness.ok(threw, "Dictionary arg must not be in a required nullable union")
+ harness.ok("nullable" in str(threw),
+ "Must have the expected exception for required nullable union "
+ "arg containing dictionary")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ };
+ interface X {
+ void doFoo(sequence<A?> arg1);
};
""")
results = parser.finish()
except:
threw = True
- harness.ok(threw, "Dictionary arg must not be in a nullable union")
+ harness.ok(not threw,
+ "Nullable union should be allowed in a sequence argument")
parser = parser.reset()
threw = False
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py b/components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py
index e88c2b50d98..8d18b26cf2d 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py
@@ -166,7 +166,7 @@ def WebIDLTest(parser, harness):
"record<ByteString, long>",
"Date", "Date?", "any",
"Promise<any>", "Promise<any>?",
- "USVString", "ArrayBuffer", "ArrayBufferView", "SharedArrayBuffer",
+ "USVString", "JSString", "ArrayBuffer", "ArrayBufferView", "SharedArrayBuffer",
"Uint8Array", "Uint16Array",
"(long or Callback)", "(long or Dict)",
]
@@ -183,7 +183,7 @@ def WebIDLTest(parser, harness):
primitives = numerics + booleans
nonNumerics = allBut(argTypes, numerics + unions)
nonBooleans = allBut(argTypes, booleans)
- strings = [ "DOMString", "ByteString", "Enum", "Enum2", "USVString" ]
+ strings = [ "DOMString", "ByteString", "Enum", "Enum2", "USVString", "JSString" ]
nonStrings = allBut(argTypes, strings)
nonObjects = primitives + strings
objects = allBut(argTypes, nonObjects )
@@ -202,7 +202,7 @@ def WebIDLTest(parser, harness):
notRelatedInterfaces = (nonObjects + ["UnrelatedInterface"] +
otherObjects + dates + sequences + bufferSourceTypes + sharedBufferSourceTypes)
records = [ "record<DOMString, object>", "record<USVString, Dict>",
- "record<ByteString, long>" ]
+ "record<ByteString, long>" ] # JSString not supported in records
# Build a representation of the distinguishability table as a dict
# of dicts, holding True values where needed, holes elsewhere.
@@ -222,6 +222,7 @@ def WebIDLTest(parser, harness):
setDistinguishable("DOMString", nonStrings)
setDistinguishable("ByteString", nonStrings)
setDistinguishable("USVString", nonStrings)
+ setDistinguishable("JSString", nonStrings)
setDistinguishable("Enum", nonStrings)
setDistinguishable("Enum2", nonStrings)
setDistinguishable("Interface", notRelatedInterfaces)
@@ -244,6 +245,7 @@ def WebIDLTest(parser, harness):
allBut(argTypes, sequences + ["object"]))
setDistinguishable("record<DOMString, object>", nonUserObjects)
setDistinguishable("record<USVString, Dict>", nonUserObjects)
+ # JSString not supported in records
setDistinguishable("record<ByteString, long>", nonUserObjects)
setDistinguishable("Date", allBut(argTypes, dates + ["object"]))
setDistinguishable("Date?", allBut(argTypes, dates + nullables + ["object"]))
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_interface.py b/components/script/dom/bindings/codegen/parser/tests/test_interface.py
index ea3e842907a..28e6af94597 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_interface.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_interface.py
@@ -189,12 +189,12 @@ def WebIDLTest(parser, harness):
parser = parser.reset()
parser.parse("""
- [Constructor(long arg)]
interface A {
+ constructor();
+ constructor(long arg);
readonly attribute boolean x;
void foo();
};
- [Constructor]
partial interface A {
readonly attribute boolean y;
void foo(long arg);
@@ -219,13 +219,13 @@ def WebIDLTest(parser, harness):
parser = parser.reset()
parser.parse("""
- [Constructor]
partial interface A {
readonly attribute boolean y;
void foo(long arg);
};
- [Constructor(long arg)]
interface A {
+ constructor();
+ constructor(long arg);
readonly attribute boolean x;
void foo();
};
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py b/components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py
index 72aa7617b84..5de2e02af7e 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py
@@ -264,18 +264,18 @@ def WebIDLTest(parser, harness):
shouldPass("JS Implemented maplike interface",
"""
- [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1",
- Constructor()]
+ [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1"]
interface Foo1 {
+ constructor();
setlike<long>;
};
""", setRWChromeMembers)
shouldPass("JS Implemented maplike interface",
"""
- [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1",
- Constructor()]
+ [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1"]
interface Foo1 {
+ constructor();
maplike<long, long>;
};
""", mapRWChromeMembers)
@@ -655,9 +655,9 @@ def WebIDLTest(parser, harness):
shouldPass("JS Implemented read-only interface with readonly allowable overrides",
"""
- [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1",
- Constructor()]
+ [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1"]
interface Foo1 {
+ constructor();
readonly setlike<long>;
readonly attribute boolean clear;
};
@@ -665,9 +665,9 @@ def WebIDLTest(parser, harness):
shouldFail("JS Implemented read-write interface with non-readwrite allowable overrides",
"""
- [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1",
- Constructor()]
+ [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1"]
interface Foo1 {
+ constructor();
setlike<long>;
readonly attribute boolean clear;
};
diff --git a/components/script/dom/bindings/codegen/parser/update.sh b/components/script/dom/bindings/codegen/parser/update.sh
index fee9720ab2d..81b3d944a70 100755
--- a/components/script/dom/bindings/codegen/parser/update.sh
+++ b/components/script/dom/bindings/codegen/parser/update.sh
@@ -1,11 +1,11 @@
-wget https://hg.mozilla.org/mozilla-central/raw-file/tip/dom/bindings/parser/WebIDL.py -O WebIDL.py
+wget https://hg.mozilla.org/mozilla-central/raw-file/e447e3d69684cf04a95a35b9708174a6538eb042/dom/bindings/parser/WebIDL.py -O WebIDL.py
patch < abstract.patch
patch < debug.patch
patch < callback-location.patch
patch < union-typedef.patch
patch < inline.patch
-wget https://hg.mozilla.org/mozilla-central/archive/tip.tar.gz/dom/bindings/parser/tests/ -O tests.tar.gz
+wget https://hg.mozilla.org/mozilla-central/archive/e447e3d69684cf04a95a35b9708174a6538eb042.tar.gz/dom/bindings/parser/tests/ -O tests.tar.gz
rm -r tests
mkdir tests
tar xvpf tests.tar.gz -C tests --strip-components=5
diff --git a/components/script/dom/webidls/AnalyserNode.webidl b/components/script/dom/webidls/AnalyserNode.webidl
index 07826c16fab..c1398d56378 100644
--- a/components/script/dom/webidls/AnalyserNode.webidl
+++ b/components/script/dom/webidls/AnalyserNode.webidl
@@ -13,9 +13,9 @@ dictionary AnalyserOptions : AudioNodeOptions {
double smoothingTimeConstant = 0.8;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional AnalyserOptions options = {})]
+[Exposed=Window]
interface AnalyserNode : AudioNode {
+ [Throws] constructor(BaseAudioContext context, optional AnalyserOptions options = {});
void getFloatFrequencyData (Float32Array array);
void getByteFrequencyData (Uint8Array array);
void getFloatTimeDomainData (Float32Array array);
diff --git a/components/script/dom/webidls/AudioBuffer.webidl b/components/script/dom/webidls/AudioBuffer.webidl
index 9b521fb8edf..75b3b470838 100644
--- a/components/script/dom/webidls/AudioBuffer.webidl
+++ b/components/script/dom/webidls/AudioBuffer.webidl
@@ -12,9 +12,9 @@ dictionary AudioBufferOptions {
required float sampleRate;
};
-[Exposed=Window,
- Constructor (AudioBufferOptions options)]
+[Exposed=Window]
interface AudioBuffer {
+ [Throws] constructor(AudioBufferOptions options);
readonly attribute float sampleRate;
readonly attribute unsigned long length;
readonly attribute double duration;
diff --git a/components/script/dom/webidls/AudioBufferSourceNode.webidl b/components/script/dom/webidls/AudioBufferSourceNode.webidl
index da1222a6935..8744a521ddb 100644
--- a/components/script/dom/webidls/AudioBufferSourceNode.webidl
+++ b/components/script/dom/webidls/AudioBufferSourceNode.webidl
@@ -15,9 +15,9 @@ dictionary AudioBufferSourceOptions {
float playbackRate = 1;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional AudioBufferSourceOptions options = {})]
+[Exposed=Window]
interface AudioBufferSourceNode : AudioScheduledSourceNode {
+ [Throws] constructor(BaseAudioContext context, optional AudioBufferSourceOptions options = {});
[Throws] attribute AudioBuffer? buffer;
readonly attribute AudioParam playbackRate;
readonly attribute AudioParam detune;
diff --git a/components/script/dom/webidls/AudioContext.webidl b/components/script/dom/webidls/AudioContext.webidl
index 6acf7ec3e7c..8667d8d8b8f 100644
--- a/components/script/dom/webidls/AudioContext.webidl
+++ b/components/script/dom/webidls/AudioContext.webidl
@@ -22,9 +22,9 @@ dictionary AudioTimestamp {
DOMHighResTimeStamp performanceTime;
};
-[Exposed=Window,
- Constructor(optional AudioContextOptions contextOptions = {})]
+[Exposed=Window]
interface AudioContext : BaseAudioContext {
+ [Throws] constructor(optional AudioContextOptions contextOptions = {});
readonly attribute double baseLatency;
readonly attribute double outputLatency;
diff --git a/components/script/dom/webidls/BiquadFilterNode.webidl b/components/script/dom/webidls/BiquadFilterNode.webidl
index d222e9a7297..d1b5450338c 100644
--- a/components/script/dom/webidls/BiquadFilterNode.webidl
+++ b/components/script/dom/webidls/BiquadFilterNode.webidl
@@ -25,9 +25,9 @@ dictionary BiquadFilterOptions : AudioNodeOptions {
float gain = 0;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional BiquadFilterOptions options = {})]
+[Exposed=Window]
interface BiquadFilterNode : AudioNode {
+ [Throws] constructor(BaseAudioContext context, optional BiquadFilterOptions options = {});
attribute BiquadFilterType type;
readonly attribute AudioParam frequency;
readonly attribute AudioParam detune;
diff --git a/components/script/dom/webidls/Blob.webidl b/components/script/dom/webidls/Blob.webidl
index d58c67a6398..15d28cadb99 100644
--- a/components/script/dom/webidls/Blob.webidl
+++ b/components/script/dom/webidls/Blob.webidl
@@ -4,10 +4,10 @@
// https://w3c.github.io/FileAPI/#blob
-[Constructor(optional sequence<BlobPart> blobParts,
- optional BlobPropertyBag options = {}),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface Blob {
+ [Throws] constructor(optional sequence<BlobPart> blobParts,
+ optional BlobPropertyBag options = {});
readonly attribute unsigned long long size;
readonly attribute DOMString type;
diff --git a/components/script/dom/webidls/BluetoothAdvertisingEvent.webidl b/components/script/dom/webidls/BluetoothAdvertisingEvent.webidl
index 0ae355ebb2d..b27590266de 100644
--- a/components/script/dom/webidls/BluetoothAdvertisingEvent.webidl
+++ b/components/script/dom/webidls/BluetoothAdvertisingEvent.webidl
@@ -10,8 +10,9 @@
interface BluetoothServiceDataMap {
readonly maplike<UUID, DataView>;
};*/
-[Pref="dom.bluetooth.enabled", Constructor(DOMString type, BluetoothAdvertisingEventInit init)]
+[Pref="dom.bluetooth.enabled"]
interface BluetoothAdvertisingEvent : Event {
+ [Throws] constructor(DOMString type, BluetoothAdvertisingEventInit init);
[SameObject]
readonly attribute BluetoothDevice device;
// readonly attribute FrozenArray<UUID> uuids;
diff --git a/components/script/dom/webidls/ChannelMergerNode.webidl b/components/script/dom/webidls/ChannelMergerNode.webidl
index 33fc0e6ea67..c6eaad8bb55 100644
--- a/components/script/dom/webidls/ChannelMergerNode.webidl
+++ b/components/script/dom/webidls/ChannelMergerNode.webidl
@@ -10,7 +10,7 @@ dictionary ChannelMergerOptions : AudioNodeOptions {
unsigned long numberOfInputs = 6;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional ChannelMergerOptions options = {})]
+[Exposed=Window]
interface ChannelMergerNode : AudioNode {
+ [Throws] constructor(BaseAudioContext context, optional ChannelMergerOptions options = {});
};
diff --git a/components/script/dom/webidls/ChannelSplitterNode.webidl b/components/script/dom/webidls/ChannelSplitterNode.webidl
index d776ac62ac3..e867f7a9181 100644
--- a/components/script/dom/webidls/ChannelSplitterNode.webidl
+++ b/components/script/dom/webidls/ChannelSplitterNode.webidl
@@ -10,7 +10,7 @@ dictionary ChannelSplitterOptions : AudioNodeOptions {
unsigned long numberOfOutputs = 6;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {})]
+[Exposed=Window]
interface ChannelSplitterNode : AudioNode {
+ [Throws] constructor(BaseAudioContext context, optional ChannelSplitterOptions options = {});
};
diff --git a/components/script/dom/webidls/CloseEvent.webidl b/components/script/dom/webidls/CloseEvent.webidl
index a689b337328..712f8848df0 100644
--- a/components/script/dom/webidls/CloseEvent.webidl
+++ b/components/script/dom/webidls/CloseEvent.webidl
@@ -3,8 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
//https://html.spec.whatwg.org/multipage/#the-closeevent-interfaces
-[Constructor(DOMString type, optional CloseEventInit eventInitDict = {}), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface CloseEvent : Event {
+ [Throws] constructor(DOMString type, optional CloseEventInit eventInitDict = {});
readonly attribute boolean wasClean;
readonly attribute unsigned short code;
readonly attribute DOMString reason;
diff --git a/components/script/dom/webidls/Comment.webidl b/components/script/dom/webidls/Comment.webidl
index e0a6c3aecf9..59b9f78cdf4 100644
--- a/components/script/dom/webidls/Comment.webidl
+++ b/components/script/dom/webidls/Comment.webidl
@@ -9,6 +9,6 @@
* liability, trademark and document use rules apply.
*/
-[Constructor(optional DOMString data = "")]
interface Comment : CharacterData {
+ [Throws] constructor(optional DOMString data = "");
};
diff --git a/components/script/dom/webidls/CompositionEvent.webidl b/components/script/dom/webidls/CompositionEvent.webidl
index 043873c9354..a16981e023f 100644
--- a/components/script/dom/webidls/CompositionEvent.webidl
+++ b/components/script/dom/webidls/CompositionEvent.webidl
@@ -8,8 +8,9 @@
*/
// https://w3c.github.io/uievents/#idl-compositionevent
-[Pref="dom.compositionevent.enabled", Constructor(DOMString type, optional CompositionEventInit eventInitDict = {})]
+[Pref="dom.compositionevent.enabled"]
interface CompositionEvent : UIEvent {
+ [Throws] constructor(DOMString type, optional CompositionEventInit eventInitDict = {});
readonly attribute DOMString data;
};
diff --git a/components/script/dom/webidls/ConstantSourceNode.webidl b/components/script/dom/webidls/ConstantSourceNode.webidl
index 6fb8dca1988..e3a5a174250 100644
--- a/components/script/dom/webidls/ConstantSourceNode.webidl
+++ b/components/script/dom/webidls/ConstantSourceNode.webidl
@@ -10,8 +10,8 @@ dictionary ConstantSourceOptions: AudioNodeOptions {
float offset = 1;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional ConstantSourceOptions options = {})]
+[Exposed=Window]
interface ConstantSourceNode : AudioScheduledSourceNode {
+ [Throws] constructor(BaseAudioContext context, optional ConstantSourceOptions options = {});
readonly attribute AudioParam offset;
};
diff --git a/components/script/dom/webidls/CustomEvent.webidl b/components/script/dom/webidls/CustomEvent.webidl
index 5bede1513f2..604286881df 100644
--- a/components/script/dom/webidls/CustomEvent.webidl
+++ b/components/script/dom/webidls/CustomEvent.webidl
@@ -13,9 +13,9 @@
* http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.
*/
-[Constructor(DOMString type, optional CustomEventInit eventInitDict = {}),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface CustomEvent : Event {
+ [Throws] constructor(DOMString type, optional CustomEventInit eventInitDict = {});
readonly attribute any detail;
void initCustomEvent(DOMString type, boolean bubbles, boolean cancelable, any detail);
diff --git a/components/script/dom/webidls/DOMException.webidl b/components/script/dom/webidls/DOMException.webidl
index 1c7bca4ce66..8475238cb9b 100644
--- a/components/script/dom/webidls/DOMException.webidl
+++ b/components/script/dom/webidls/DOMException.webidl
@@ -9,10 +9,10 @@
[
ExceptionClass,
- Exposed=(Window,Worker,Worklet,DissimilarOriginWindow),
- Constructor(optional DOMString message="", optional DOMString name="Error")
+ Exposed=(Window,Worker,Worklet,DissimilarOriginWindow)
]
interface DOMException {
+ [Throws] constructor(optional DOMString message="", optional DOMString name="Error");
const unsigned short INDEX_SIZE_ERR = 1;
const unsigned short DOMSTRING_SIZE_ERR = 2; // historical
const unsigned short HIERARCHY_REQUEST_ERR = 3;
diff --git a/components/script/dom/webidls/DOMMatrix.webidl b/components/script/dom/webidls/DOMMatrix.webidl
index ffaa720b7d9..9911f868710 100644
--- a/components/script/dom/webidls/DOMMatrix.webidl
+++ b/components/script/dom/webidls/DOMMatrix.webidl
@@ -10,9 +10,9 @@
* related or neighboring rights to this work.
*/
-[Constructor(optional (DOMString or sequence<unrestricted double>) init),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface DOMMatrix : DOMMatrixReadOnly {
+ [Throws] constructor(optional (DOMString or sequence<unrestricted double>) init);
[NewObject, Throws] static DOMMatrix fromMatrix(optional DOMMatrixInit other = {});
[NewObject, Throws] static DOMMatrix fromFloat32Array(Float32Array array32);
diff --git a/components/script/dom/webidls/DOMMatrixReadOnly.webidl b/components/script/dom/webidls/DOMMatrixReadOnly.webidl
index 317c2860707..d86a475c38e 100644
--- a/components/script/dom/webidls/DOMMatrixReadOnly.webidl
+++ b/components/script/dom/webidls/DOMMatrixReadOnly.webidl
@@ -10,9 +10,9 @@
* related or neighboring rights to this work.
*/
-[Constructor(optional (DOMString or sequence<unrestricted double>) init),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface DOMMatrixReadOnly {
+ [Throws] constructor(optional (DOMString or sequence<unrestricted double>) init);
[NewObject, Throws] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other = {});
[NewObject, Throws] static DOMMatrixReadOnly fromFloat32Array(Float32Array array32);
diff --git a/components/script/dom/webidls/DOMParser.webidl b/components/script/dom/webidls/DOMParser.webidl
index 01ab8c67780..e804adfecd5 100644
--- a/components/script/dom/webidls/DOMParser.webidl
+++ b/components/script/dom/webidls/DOMParser.webidl
@@ -14,8 +14,8 @@ enum SupportedType {
"image/svg+xml"*/
};
-[Constructor]
interface DOMParser {
+ [Throws] constructor();
[Throws]
Document parseFromString(DOMString str, SupportedType type);
};
diff --git a/components/script/dom/webidls/DOMPoint.webidl b/components/script/dom/webidls/DOMPoint.webidl
index 34a355f6085..ee25eed0d69 100644
--- a/components/script/dom/webidls/DOMPoint.webidl
+++ b/components/script/dom/webidls/DOMPoint.webidl
@@ -10,10 +10,10 @@
*/
// http://dev.w3.org/fxtf/geometry/Overview.html#dompoint
-[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
- optional unrestricted double z = 0, optional unrestricted double w = 1),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface DOMPoint : DOMPointReadOnly {
+ [Throws] constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
+ optional unrestricted double z = 0, optional unrestricted double w = 1);
[NewObject] static DOMPoint fromPoint(optional DOMPointInit other = {});
inherit attribute unrestricted double x;
diff --git a/components/script/dom/webidls/DOMPointReadOnly.webidl b/components/script/dom/webidls/DOMPointReadOnly.webidl
index 071252c7690..bdd7eba31eb 100644
--- a/components/script/dom/webidls/DOMPointReadOnly.webidl
+++ b/components/script/dom/webidls/DOMPointReadOnly.webidl
@@ -10,10 +10,10 @@
*/
// http://dev.w3.org/fxtf/geometry/Overview.html#dompointreadonly
-[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
- optional unrestricted double z = 0, optional unrestricted double w = 1),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface DOMPointReadOnly {
+ [Throws] constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
+ optional unrestricted double z = 0, optional unrestricted double w = 1);
[NewObject] static DOMPointReadOnly fromPoint(optional DOMPointInit other = {});
readonly attribute unrestricted double x;
diff --git a/components/script/dom/webidls/DOMQuad.webidl b/components/script/dom/webidls/DOMQuad.webidl
index 15f126cfea6..ba58ccffc48 100644
--- a/components/script/dom/webidls/DOMQuad.webidl
+++ b/components/script/dom/webidls/DOMQuad.webidl
@@ -10,10 +10,10 @@
* related or neighboring rights to this work.
*/
-[Constructor(optional DOMPointInit p1 = {}, optional DOMPointInit p2 = {},
- optional DOMPointInit p3 = {}, optional DOMPointInit p4 = {}),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface DOMQuad {
+ [Throws] constructor(optional DOMPointInit p1 = {}, optional DOMPointInit p2 = {},
+ optional DOMPointInit p3 = {}, optional DOMPointInit p4 = {});
[NewObject] static DOMQuad fromRect(optional DOMRectInit other = {});
[NewObject] static DOMQuad fromQuad(optional DOMQuadInit other = {});
diff --git a/components/script/dom/webidls/DOMRect.webidl b/components/script/dom/webidls/DOMRect.webidl
index 047233abee9..0aabed6d93f 100644
--- a/components/script/dom/webidls/DOMRect.webidl
+++ b/components/script/dom/webidls/DOMRect.webidl
@@ -2,11 +2,11 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
- optional unrestricted double width = 0, optional unrestricted double height = 0),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
// https://drafts.fxtf.org/geometry/#domrect
interface DOMRect : DOMRectReadOnly {
+ [Throws] constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
+ optional unrestricted double width = 0, optional unrestricted double height = 0);
inherit attribute unrestricted double x;
inherit attribute unrestricted double y;
inherit attribute unrestricted double width;
diff --git a/components/script/dom/webidls/DOMRectReadOnly.webidl b/components/script/dom/webidls/DOMRectReadOnly.webidl
index 58a8c87cd1c..9885841c73a 100644
--- a/components/script/dom/webidls/DOMRectReadOnly.webidl
+++ b/components/script/dom/webidls/DOMRectReadOnly.webidl
@@ -2,11 +2,11 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
- optional unrestricted double width = 0, optional unrestricted double height = 0),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
// https://drafts.fxtf.org/geometry/#domrect
interface DOMRectReadOnly {
+ [Throws] constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
+ optional unrestricted double width = 0, optional unrestricted double height = 0);
// [NewObject] static DOMRectReadOnly fromRect(optional DOMRectInit other);
readonly attribute unrestricted double x;
diff --git a/components/script/dom/webidls/Document.webidl b/components/script/dom/webidls/Document.webidl
index f7b8eea0434..04109960ce9 100644
--- a/components/script/dom/webidls/Document.webidl
+++ b/components/script/dom/webidls/Document.webidl
@@ -8,8 +8,8 @@
*/
// https://dom.spec.whatwg.org/#interface-document
-[Constructor]
interface Document : Node {
+ [Throws] constructor();
[SameObject]
readonly attribute DOMImplementation implementation;
[Constant]
diff --git a/components/script/dom/webidls/DocumentFragment.webidl b/components/script/dom/webidls/DocumentFragment.webidl
index bc34479ee9f..8c3cadf9455 100644
--- a/components/script/dom/webidls/DocumentFragment.webidl
+++ b/components/script/dom/webidls/DocumentFragment.webidl
@@ -3,8 +3,8 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://dom.spec.whatwg.org/#interface-documentfragment
-[Constructor]
interface DocumentFragment : Node {
+ [Throws] constructor();
};
DocumentFragment includes NonElementParentNode;
diff --git a/components/script/dom/webidls/ErrorEvent.webidl b/components/script/dom/webidls/ErrorEvent.webidl
index 165fbd35110..6f0782f4653 100644
--- a/components/script/dom/webidls/ErrorEvent.webidl
+++ b/components/script/dom/webidls/ErrorEvent.webidl
@@ -4,8 +4,9 @@
// https://html.spec.whatwg.org/multipage/#the-errorevent-interface
-[Constructor(DOMString type, optional ErrorEventInit eventInitDict = {}), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface ErrorEvent : Event {
+ [Throws] constructor(DOMString type, optional ErrorEventInit eventInitDict = {});
readonly attribute DOMString message;
readonly attribute DOMString filename;
readonly attribute unsigned long lineno;
diff --git a/components/script/dom/webidls/Event.webidl b/components/script/dom/webidls/Event.webidl
index f3d281813a1..0c2c122e044 100644
--- a/components/script/dom/webidls/Event.webidl
+++ b/components/script/dom/webidls/Event.webidl
@@ -6,8 +6,9 @@
* https://dom.spec.whatwg.org/#event
*/
-[Constructor(DOMString type, optional EventInit eventInitDict = {}), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface Event {
+ [Throws] constructor(DOMString type, optional EventInit eventInitDict = {});
[Pure]
readonly attribute DOMString type;
readonly attribute EventTarget? target;
diff --git a/components/script/dom/webidls/EventSource.webidl b/components/script/dom/webidls/EventSource.webidl
index 7784c97d4ca..5525970891b 100644
--- a/components/script/dom/webidls/EventSource.webidl
+++ b/components/script/dom/webidls/EventSource.webidl
@@ -6,9 +6,9 @@
* https://html.spec.whatwg.org/multipage/#eventsource
*/
-[Constructor(DOMString url, optional EventSourceInit eventSourceInitDict = {}),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface EventSource : EventTarget {
+ [Throws] constructor(DOMString url, optional EventSourceInit eventSourceInitDict = {});
readonly attribute DOMString url;
readonly attribute boolean withCredentials;
diff --git a/components/script/dom/webidls/EventTarget.webidl b/components/script/dom/webidls/EventTarget.webidl
index 9eedce795c2..dd0236c910c 100644
--- a/components/script/dom/webidls/EventTarget.webidl
+++ b/components/script/dom/webidls/EventTarget.webidl
@@ -5,8 +5,9 @@
* https://dom.spec.whatwg.org/#interface-eventtarget
*/
-[Constructor, Exposed=(Window,Worker,Worklet,DissimilarOriginWindow)]
+[Exposed=(Window,Worker,Worklet,DissimilarOriginWindow)]
interface EventTarget {
+ [Throws] constructor();
void addEventListener(
DOMString type,
EventListener? callback,
diff --git a/components/script/dom/webidls/ExtendableEvent.webidl b/components/script/dom/webidls/ExtendableEvent.webidl
index 5d6c4786c3f..99cafa305a6 100644
--- a/components/script/dom/webidls/ExtendableEvent.webidl
+++ b/components/script/dom/webidls/ExtendableEvent.webidl
@@ -4,11 +4,11 @@
// https://w3c.github.io/ServiceWorker/#extendable-event
-[Constructor(DOMString type,
- optional ExtendableEventInit eventInitDict = {}),
- Exposed=ServiceWorker,
+[Exposed=ServiceWorker,
Pref="dom.serviceworker.enabled"]
interface ExtendableEvent : Event {
+ [Throws] constructor(DOMString type,
+ optional ExtendableEventInit eventInitDict = {});
[Throws] void waitUntil(/*Promise<*/any/*>*/ f);
};
diff --git a/components/script/dom/webidls/ExtendableMessageEvent.webidl b/components/script/dom/webidls/ExtendableMessageEvent.webidl
index e934d06b50b..d623d4cb898 100644
--- a/components/script/dom/webidls/ExtendableMessageEvent.webidl
+++ b/components/script/dom/webidls/ExtendableMessageEvent.webidl
@@ -4,10 +4,10 @@
// https://w3c.github.io/ServiceWorker/#extendablemessage-event-section
-[Constructor(DOMString type, optional ExtendableMessageEventInit eventInitDict = {}),
- Exposed=ServiceWorker,
+[Exposed=ServiceWorker,
Pref="dom.serviceworker.enabled"]
interface ExtendableMessageEvent : ExtendableEvent {
+ [Throws] constructor(DOMString type, optional ExtendableMessageEventInit eventInitDict = {});
readonly attribute any data;
readonly attribute DOMString origin;
readonly attribute DOMString lastEventId;
diff --git a/components/script/dom/webidls/File.webidl b/components/script/dom/webidls/File.webidl
index 04e670723e4..143df2f8f13 100644
--- a/components/script/dom/webidls/File.webidl
+++ b/components/script/dom/webidls/File.webidl
@@ -4,11 +4,11 @@
// https://w3c.github.io/FileAPI/#file
-[Constructor(sequence<BlobPart> fileBits,
- DOMString fileName,
- optional FilePropertyBag options = {}),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface File : Blob {
+ [Throws] constructor(sequence<BlobPart> fileBits,
+ DOMString fileName,
+ optional FilePropertyBag options = {});
readonly attribute DOMString name;
readonly attribute long long lastModified;
};
diff --git a/components/script/dom/webidls/FileReader.webidl b/components/script/dom/webidls/FileReader.webidl
index a4844c21997..a1c01fb716c 100644
--- a/components/script/dom/webidls/FileReader.webidl
+++ b/components/script/dom/webidls/FileReader.webidl
@@ -5,8 +5,9 @@
// http://dev.w3.org/2006/webapi/FileAPI/#APIASynch
typedef (DOMString or object) FileReaderResult;
-[Constructor, Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface FileReader: EventTarget {
+ [Throws] constructor();
// async read methods
[Throws]
diff --git a/components/script/dom/webidls/FileReaderSync.webidl b/components/script/dom/webidls/FileReaderSync.webidl
index 93bfa5236b2..08248839958 100644
--- a/components/script/dom/webidls/FileReaderSync.webidl
+++ b/components/script/dom/webidls/FileReaderSync.webidl
@@ -4,8 +4,9 @@
// https://w3c.github.io/FileAPI/#FileReaderSync
-[Constructor, Exposed=Worker]
+[Exposed=Worker]
interface FileReaderSync {
+ [Throws] constructor();
// Synchronously return strings
[Throws]
diff --git a/components/script/dom/webidls/FocusEvent.webidl b/components/script/dom/webidls/FocusEvent.webidl
index 67dec33a952..1d5e4ee4bea 100644
--- a/components/script/dom/webidls/FocusEvent.webidl
+++ b/components/script/dom/webidls/FocusEvent.webidl
@@ -3,9 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/uievents/#interface-FocusEvent
-[Constructor(DOMString typeArg, optional FocusEventInit focusEventInitDict = {}),
- Exposed=Window]
+[Exposed=Window]
interface FocusEvent : UIEvent {
+ [Throws] constructor(DOMString typeArg, optional FocusEventInit focusEventInitDict = {});
readonly attribute EventTarget? relatedTarget;
};
diff --git a/components/script/dom/webidls/FormData.webidl b/components/script/dom/webidls/FormData.webidl
index 9f75579a802..4e2f5de04ec 100644
--- a/components/script/dom/webidls/FormData.webidl
+++ b/components/script/dom/webidls/FormData.webidl
@@ -8,9 +8,9 @@
typedef (File or USVString) FormDataEntryValue;
-[Constructor(optional HTMLFormElement form),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface FormData {
+ [Throws] constructor(optional HTMLFormElement form);
void append(USVString name, USVString value);
void append(USVString name, Blob value, optional USVString filename);
void delete(USVString name);
diff --git a/components/script/dom/webidls/FormDataEvent.webidl b/components/script/dom/webidls/FormDataEvent.webidl
index e478a33a729..5160a396081 100644
--- a/components/script/dom/webidls/FormDataEvent.webidl
+++ b/components/script/dom/webidls/FormDataEvent.webidl
@@ -3,9 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://html.spec.whatwg.org/multipage/#the-formdataevent-interface
-[Exposed=Window,
- Constructor(DOMString type, optional FormDataEventInit eventInitDict = {})]
+[Exposed=Window]
interface FormDataEvent : Event {
+ [Throws] constructor(DOMString type, optional FormDataEventInit eventInitDict = {});
readonly attribute FormData formData;
};
diff --git a/components/script/dom/webidls/GainNode.webidl b/components/script/dom/webidls/GainNode.webidl
index 97b205e63e9..1247aeda95d 100644
--- a/components/script/dom/webidls/GainNode.webidl
+++ b/components/script/dom/webidls/GainNode.webidl
@@ -10,8 +10,8 @@ dictionary GainOptions : AudioNodeOptions {
float gain = 1.0;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional GainOptions options = {})]
+[Exposed=Window]
interface GainNode : AudioNode {
+ [Throws] constructor(BaseAudioContext context, optional GainOptions options = {});
readonly attribute AudioParam gain;
};
diff --git a/components/script/dom/webidls/GamepadEvent.webidl b/components/script/dom/webidls/GamepadEvent.webidl
index 2ef917a9428..3bd6ea0c0c8 100644
--- a/components/script/dom/webidls/GamepadEvent.webidl
+++ b/components/script/dom/webidls/GamepadEvent.webidl
@@ -3,8 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/gamepad/#gamepadevent-interface
-[Pref="dom.gamepad.enabled", Constructor(DOMString type, GamepadEventInit eventInitDict)]
+[Pref="dom.gamepad.enabled"]
interface GamepadEvent : Event {
+ [Throws] constructor(DOMString type, GamepadEventInit eventInitDict);
readonly attribute Gamepad gamepad;
};
diff --git a/components/script/dom/webidls/HashChangeEvent.webidl b/components/script/dom/webidls/HashChangeEvent.webidl
index e5049e75129..f225967a138 100644
--- a/components/script/dom/webidls/HashChangeEvent.webidl
+++ b/components/script/dom/webidls/HashChangeEvent.webidl
@@ -3,9 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://html.spec.whatwg.org/multipage/#hashchangeevent
-[Constructor(DOMString type, optional HashChangeEventInit eventInitDict = {}),
- Exposed=Window]
+[Exposed=Window]
interface HashChangeEvent : Event {
+ [Throws] constructor(DOMString type, optional HashChangeEventInit eventInitDict = {});
readonly attribute USVString oldURL;
readonly attribute USVString newURL;
};
diff --git a/components/script/dom/webidls/Headers.webidl b/components/script/dom/webidls/Headers.webidl
index 44c9c050d92..88e9a14c8d6 100644
--- a/components/script/dom/webidls/Headers.webidl
+++ b/components/script/dom/webidls/Headers.webidl
@@ -6,9 +6,9 @@
typedef (Headers or sequence<sequence<ByteString>> or record<DOMString, ByteString>) HeadersInit;
-[Constructor(optional HeadersInit init),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface Headers {
+ [Throws] constructor(optional HeadersInit init);
[Throws]
void append(ByteString name, ByteString value);
[Throws]
diff --git a/components/script/dom/webidls/ImageData.webidl b/components/script/dom/webidls/ImageData.webidl
index 3915e6c51c7..b05e201f42a 100644
--- a/components/script/dom/webidls/ImageData.webidl
+++ b/components/script/dom/webidls/ImageData.webidl
@@ -9,10 +9,10 @@
* You are granted a license to use, reproduce and create derivative works of this document.
*/
-[Constructor(unsigned long sw, unsigned long sh),
- Constructor(/* Uint8ClampedArray */ object data, unsigned long sw, optional unsigned long sh),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface ImageData {
+ [Throws] constructor(unsigned long sw, unsigned long sh);
+ [Throws] constructor(/* Uint8ClampedArray */ object data, unsigned long sw, optional unsigned long sh);
//[Constant]
readonly attribute unsigned long width;
//[Constant]
diff --git a/components/script/dom/webidls/InputEvent.webidl b/components/script/dom/webidls/InputEvent.webidl
index 49fb9dc9695..710f95d511e 100644
--- a/components/script/dom/webidls/InputEvent.webidl
+++ b/components/script/dom/webidls/InputEvent.webidl
@@ -8,8 +8,8 @@
*/
// https://w3c.github.io/uievents/#idl-inputevent
-[Constructor(DOMString type, optional InputEventInit eventInitDict = {})]
interface InputEvent : UIEvent {
+ [Throws] constructor(DOMString type, optional InputEventInit eventInitDict = {});
readonly attribute DOMString? data;
readonly attribute boolean isComposing;
};
diff --git a/components/script/dom/webidls/KeyboardEvent.webidl b/components/script/dom/webidls/KeyboardEvent.webidl
index f30265a87d8..85a74ead258 100644
--- a/components/script/dom/webidls/KeyboardEvent.webidl
+++ b/components/script/dom/webidls/KeyboardEvent.webidl
@@ -7,8 +7,8 @@
*
*/
-[Constructor(DOMString typeArg, optional KeyboardEventInit keyboardEventInitDict = {})]
interface KeyboardEvent : UIEvent {
+ [Throws] constructor(DOMString typeArg, optional KeyboardEventInit keyboardEventInitDict = {});
// KeyLocationCode
const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;
const unsigned long DOM_KEY_LOCATION_LEFT = 0x01;
diff --git a/components/script/dom/webidls/MediaQueryListEvent.webidl b/components/script/dom/webidls/MediaQueryListEvent.webidl
index 36464230e1b..f1837ee2750 100644
--- a/components/script/dom/webidls/MediaQueryListEvent.webidl
+++ b/components/script/dom/webidls/MediaQueryListEvent.webidl
@@ -3,8 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://drafts.csswg.org/cssom-view/#dom-mediaquerylistevent-mediaquerylistevent
-[Constructor(DOMString type, optional MediaQueryListEventInit eventInitDict = {}), Exposed=(Window)]
+[Exposed=(Window)]
interface MediaQueryListEvent : Event {
+ [Throws] constructor(DOMString type, optional MediaQueryListEventInit eventInitDict = {});
readonly attribute DOMString media;
readonly attribute boolean matches;
};
diff --git a/components/script/dom/webidls/MediaStream.webidl b/components/script/dom/webidls/MediaStream.webidl
index b1d5664a7f7..2129f999f95 100644
--- a/components/script/dom/webidls/MediaStream.webidl
+++ b/components/script/dom/webidls/MediaStream.webidl
@@ -5,11 +5,11 @@
// https://w3c.github.io/mediacapture-main/#dom-mediastream
[Exposed=Window,
- Constructor,
- Constructor(MediaStream stream),
- Constructor(sequence<MediaStreamTrack> tracks),
-Pref="dom.webrtc.enabled"]
+ Pref="dom.webrtc.enabled"]
interface MediaStream : EventTarget {
+ [Throws] constructor();
+ [Throws] constructor(MediaStream stream);
+ [Throws] constructor(sequence<MediaStreamTrack> tracks);
// readonly attribute DOMString id;
sequence<MediaStreamTrack> getAudioTracks();
sequence<MediaStreamTrack> getVideoTracks();
diff --git a/components/script/dom/webidls/MessageEvent.webidl b/components/script/dom/webidls/MessageEvent.webidl
index fc43c463743..e5b91a043f3 100644
--- a/components/script/dom/webidls/MessageEvent.webidl
+++ b/components/script/dom/webidls/MessageEvent.webidl
@@ -3,8 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://html.spec.whatwg.org/multipage/#messageevent
-[Constructor(DOMString type, optional MessageEventInit eventInitDict = {}), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface MessageEvent : Event {
+ [Throws] constructor(DOMString type, optional MessageEventInit eventInitDict = {});
readonly attribute any data;
readonly attribute DOMString origin;
readonly attribute DOMString lastEventId;
diff --git a/components/script/dom/webidls/MouseEvent.webidl b/components/script/dom/webidls/MouseEvent.webidl
index ca39c759c04..9a36e69cafe 100644
--- a/components/script/dom/webidls/MouseEvent.webidl
+++ b/components/script/dom/webidls/MouseEvent.webidl
@@ -3,9 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/uievents/#interface-mouseevent
-[Constructor(DOMString typeArg, optional MouseEventInit mouseEventInitDict = {}),
- Exposed=Window]
+[Exposed=Window]
interface MouseEvent : UIEvent {
+ [Throws] constructor(DOMString typeArg, optional MouseEventInit mouseEventInitDict = {});
readonly attribute long screenX;
readonly attribute long screenY;
readonly attribute long clientX;
diff --git a/components/script/dom/webidls/MutationObserver.webidl b/components/script/dom/webidls/MutationObserver.webidl
index a2f223da800..0ed66457dea 100644
--- a/components/script/dom/webidls/MutationObserver.webidl
+++ b/components/script/dom/webidls/MutationObserver.webidl
@@ -7,8 +7,9 @@
*/
// https://dom.spec.whatwg.org/#mutationobserver
-[Pref="dom.mutation_observer.enabled", Constructor(MutationCallback callback)]
+[Pref="dom.mutation_observer.enabled"]
interface MutationObserver {
+ [Throws] constructor(MutationCallback callback);
[Throws]
void observe(Node target, optional MutationObserverInit options = {});
void disconnect();
diff --git a/components/script/dom/webidls/OfflineAudioCompletionEvent.webidl b/components/script/dom/webidls/OfflineAudioCompletionEvent.webidl
index 5849185cb09..aa63fe22156 100644
--- a/components/script/dom/webidls/OfflineAudioCompletionEvent.webidl
+++ b/components/script/dom/webidls/OfflineAudioCompletionEvent.webidl
@@ -10,8 +10,8 @@ dictionary OfflineAudioCompletionEventInit : EventInit {
required AudioBuffer renderedBuffer;
};
-[Exposed=Window,
- Constructor(DOMString type, OfflineAudioCompletionEventInit eventInitDict)]
+[Exposed=Window]
interface OfflineAudioCompletionEvent : Event {
+ [Throws] constructor(DOMString type, OfflineAudioCompletionEventInit eventInitDict);
readonly attribute AudioBuffer renderedBuffer;
};
diff --git a/components/script/dom/webidls/OfflineAudioContext.webidl b/components/script/dom/webidls/OfflineAudioContext.webidl
index ec7bb38be69..ff2d923a096 100644
--- a/components/script/dom/webidls/OfflineAudioContext.webidl
+++ b/components/script/dom/webidls/OfflineAudioContext.webidl
@@ -12,10 +12,10 @@ dictionary OfflineAudioContextOptions {
required float sampleRate;
};
-[Exposed=Window,
- Constructor (OfflineAudioContextOptions contextOptions),
- Constructor (unsigned long numberOfChannels, unsigned long length, float sampleRate)]
+[Exposed=Window]
interface OfflineAudioContext : BaseAudioContext {
+ [Throws] constructor(OfflineAudioContextOptions contextOptions);
+ [Throws] constructor(unsigned long numberOfChannels, unsigned long length, float sampleRate);
readonly attribute unsigned long length;
attribute EventHandler oncomplete;
diff --git a/components/script/dom/webidls/OffscreenCanvas.webidl b/components/script/dom/webidls/OffscreenCanvas.webidl
index d25e8eadd98..8bb87b178f9 100644
--- a/components/script/dom/webidls/OffscreenCanvas.webidl
+++ b/components/script/dom/webidls/OffscreenCanvas.webidl
@@ -13,9 +13,9 @@ dictionary ImageEncodeOptions {
//enum OffscreenRenderingContextId { "2d", "webgl", "webgl2" };
-[Constructor([EnforceRange] unsigned long long width, [EnforceRange] unsigned long long height),
-Exposed=(Window,Worker)/*, Transferable*/, Pref="dom.offscreen_canvas.enabled"]
+[Exposed=(Window,Worker)/*, Transferable*/, Pref="dom.offscreen_canvas.enabled"]
interface OffscreenCanvas : EventTarget {
+ [Throws] constructor([EnforceRange] unsigned long long width, [EnforceRange] unsigned long long height);
attribute /*[EnforceRange]*/ unsigned long long width;
attribute /*[EnforceRange]*/ unsigned long long height;
diff --git a/components/script/dom/webidls/OscillatorNode.webidl b/components/script/dom/webidls/OscillatorNode.webidl
index ee21e96ffea..f2b4c215561 100644
--- a/components/script/dom/webidls/OscillatorNode.webidl
+++ b/components/script/dom/webidls/OscillatorNode.webidl
@@ -21,9 +21,9 @@ dictionary OscillatorOptions : AudioNodeOptions {
// PeriodicWave periodicWave;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional OscillatorOptions options = {})]
+[Exposed=Window]
interface OscillatorNode : AudioScheduledSourceNode {
+ [Throws] constructor(BaseAudioContext context, optional OscillatorOptions options = {});
[SetterThrows]
attribute OscillatorType type;
diff --git a/components/script/dom/webidls/PageTransitionEvent.webidl b/components/script/dom/webidls/PageTransitionEvent.webidl
index c2f438a89b5..000818f1a30 100644
--- a/components/script/dom/webidls/PageTransitionEvent.webidl
+++ b/components/script/dom/webidls/PageTransitionEvent.webidl
@@ -3,9 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://html.spec.whatwg.org/multipage/#the-pagetransitionevent-interface
-[Constructor(DOMString type, optional PageTransitionEventInit eventInitDict = {}),
- Exposed=Window]
+[Exposed=Window]
interface PageTransitionEvent : Event {
+ [Throws] constructor(DOMString type, optional PageTransitionEventInit eventInitDict = {});
readonly attribute boolean persisted;
};
diff --git a/components/script/dom/webidls/PannerNode.webidl b/components/script/dom/webidls/PannerNode.webidl
index 08733377fef..c692a97e278 100644
--- a/components/script/dom/webidls/PannerNode.webidl
+++ b/components/script/dom/webidls/PannerNode.webidl
@@ -34,9 +34,9 @@ enum PanningModelType {
"HRTF"
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional PannerOptions options = {})]
+[Exposed=Window]
interface PannerNode : AudioNode {
+ [Throws] constructor(BaseAudioContext context, optional PannerOptions options = {});
attribute PanningModelType panningModel;
readonly attribute AudioParam positionX;
readonly attribute AudioParam positionY;
diff --git a/components/script/dom/webidls/PerformanceObserver.webidl b/components/script/dom/webidls/PerformanceObserver.webidl
index 19af06d9231..257ff96c46f 100644
--- a/components/script/dom/webidls/PerformanceObserver.webidl
+++ b/components/script/dom/webidls/PerformanceObserver.webidl
@@ -13,9 +13,9 @@ dictionary PerformanceObserverInit {
callback PerformanceObserverCallback = void (PerformanceObserverEntryList entries, PerformanceObserver observer);
-[Constructor(PerformanceObserverCallback callback),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface PerformanceObserver {
+ [Throws] constructor(PerformanceObserverCallback callback);
[Throws]
void observe(PerformanceObserverInit options);
void disconnect();
diff --git a/components/script/dom/webidls/PopStateEvent.webidl b/components/script/dom/webidls/PopStateEvent.webidl
index 1bd7637a647..deb398abb3d 100644
--- a/components/script/dom/webidls/PopStateEvent.webidl
+++ b/components/script/dom/webidls/PopStateEvent.webidl
@@ -3,9 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://html.spec.whatwg.org/multipage/#the-popstateevent-interface
-[Constructor(DOMString type, optional PopStateEventInit eventInitDict = {}),
- Exposed=Window]
+[Exposed=Window]
interface PopStateEvent : Event {
+ [Throws] constructor(DOMString type, optional PopStateEventInit eventInitDict = {});
readonly attribute any state;
};
diff --git a/components/script/dom/webidls/ProgressEvent.webidl b/components/script/dom/webidls/ProgressEvent.webidl
index 698ec828877..17d066ef187 100644
--- a/components/script/dom/webidls/ProgressEvent.webidl
+++ b/components/script/dom/webidls/ProgressEvent.webidl
@@ -12,9 +12,9 @@
* http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.
*/
-[Constructor(DOMString type, optional ProgressEventInit eventInitDict = {}),
- Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface ProgressEvent : Event {
+ [Throws] constructor(DOMString type, optional ProgressEventInit eventInitDict = {});
readonly attribute boolean lengthComputable;
readonly attribute unsigned long long loaded;
readonly attribute unsigned long long total;
diff --git a/components/script/dom/webidls/PromiseRejectionEvent.webidl b/components/script/dom/webidls/PromiseRejectionEvent.webidl
index 43eb391ccfc..6ef93b8b1a7 100644
--- a/components/script/dom/webidls/PromiseRejectionEvent.webidl
+++ b/components/script/dom/webidls/PromiseRejectionEvent.webidl
@@ -4,8 +4,9 @@
// https://html.spec.whatwg.org/multipage/#the-promiserejectionevent-interface
-[Constructor(DOMString type, optional PromiseRejectionEventInit eventInitDict = {}), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface PromiseRejectionEvent : Event {
+ [Throws] constructor(DOMString type, optional PromiseRejectionEventInit eventInitDict = {});
readonly attribute Promise<any> promise;
readonly attribute any reason;
};
diff --git a/components/script/dom/webidls/RTCIceCandidate.webidl b/components/script/dom/webidls/RTCIceCandidate.webidl
index 01fd9a42034..fde0421c8c0 100644
--- a/components/script/dom/webidls/RTCIceCandidate.webidl
+++ b/components/script/dom/webidls/RTCIceCandidate.webidl
@@ -5,9 +5,9 @@
// https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface
-[Constructor(optional RTCIceCandidateInit candidateInitDict = {}),
- Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom.webrtc.enabled"]
interface RTCIceCandidate {
+ [Throws] constructor(optional RTCIceCandidateInit candidateInitDict = {});
readonly attribute DOMString candidate;
readonly attribute DOMString? sdpMid;
readonly attribute unsigned short? sdpMLineIndex;
diff --git a/components/script/dom/webidls/RTCPeerConnection.webidl b/components/script/dom/webidls/RTCPeerConnection.webidl
index b702a70f71d..d2054343150 100644
--- a/components/script/dom/webidls/RTCPeerConnection.webidl
+++ b/components/script/dom/webidls/RTCPeerConnection.webidl
@@ -4,9 +4,9 @@
// https://w3c.github.io/webrtc-pc/#interface-definition
-[Constructor(optional RTCConfiguration configuration = {}),
- Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom.webrtc.enabled"]
interface RTCPeerConnection : EventTarget {
+ [Throws] constructor(optional RTCConfiguration configuration = {});
Promise<RTCSessionDescriptionInit> createOffer(optional RTCOfferOptions options = {});
Promise<RTCSessionDescriptionInit> createAnswer(optional RTCAnswerOptions options = {});
Promise<void> setLocalDescription(RTCSessionDescriptionInit description);
diff --git a/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl b/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl
index 0d2c2b72879..2ffd69cea50 100644
--- a/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl
+++ b/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl
@@ -4,9 +4,9 @@
// https://w3c.github.io/webrtc-pc/#rtcpeerconnectioniceevent
-[Constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict = {}),
- Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom.webrtc.enabled"]
interface RTCPeerConnectionIceEvent : Event {
+ [Throws] constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict = {});
readonly attribute RTCIceCandidate? candidate;
readonly attribute DOMString? url;
};
diff --git a/components/script/dom/webidls/RTCSessionDescription.webidl b/components/script/dom/webidls/RTCSessionDescription.webidl
index 90ba45f1c44..f13d0fd0d9f 100644
--- a/components/script/dom/webidls/RTCSessionDescription.webidl
+++ b/components/script/dom/webidls/RTCSessionDescription.webidl
@@ -4,9 +4,9 @@
// https://w3c.github.io/webrtc-pc/#rtcsessiondescription-class
-[Constructor(RTCSessionDescriptionInit descriptionInitDict),
- Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom.webrtc.enabled"]
interface RTCSessionDescription {
+ [Throws] constructor(RTCSessionDescriptionInit descriptionInitDict);
readonly attribute RTCSdpType type;
readonly attribute DOMString sdp;
[Default] object toJSON();
diff --git a/components/script/dom/webidls/RTCTrackEvent.webidl b/components/script/dom/webidls/RTCTrackEvent.webidl
index fa07f36b9f5..c2283e5a803 100644
--- a/components/script/dom/webidls/RTCTrackEvent.webidl
+++ b/components/script/dom/webidls/RTCTrackEvent.webidl
@@ -4,9 +4,9 @@
// https://w3c.github.io/webrtc-pc/#dom-rtctrackevent
-[Constructor(DOMString type, RTCTrackEventInit eventInitDict),
- Exposed=Window, Pref="dom.webrtc.enabled"]
+[Exposed=Window, Pref="dom.webrtc.enabled"]
interface RTCTrackEvent : Event {
+ [Throws] constructor(DOMString type, RTCTrackEventInit eventInitDict);
// readonly attribute RTCRtpReceiver receiver;
readonly attribute MediaStreamTrack track;
// [SameObject]
diff --git a/components/script/dom/webidls/Range.webidl b/components/script/dom/webidls/Range.webidl
index 74a1224eb06..b897b049e99 100644
--- a/components/script/dom/webidls/Range.webidl
+++ b/components/script/dom/webidls/Range.webidl
@@ -8,8 +8,8 @@
* http://dvcs.w3.org/hg/csswg/raw-file/tip/cssom-view/Overview.html#extensions-to-the-range-interface
*/
-[Constructor]
interface Range {
+ [Throws] constructor();
[Pure]
readonly attribute Node startContainer;
[Pure]
diff --git a/components/script/dom/webidls/Request.webidl b/components/script/dom/webidls/Request.webidl
index 46334ad931d..b185014c606 100644
--- a/components/script/dom/webidls/Request.webidl
+++ b/components/script/dom/webidls/Request.webidl
@@ -6,10 +6,9 @@
typedef (Request or USVString) RequestInfo;
-[Constructor(RequestInfo input, optional RequestInit init = {}),
- Exposed=(Window,Worker)]
-
+[Exposed=(Window,Worker)]
interface Request {
+ [Throws] constructor(RequestInfo input, optional RequestInit init = {});
readonly attribute ByteString method;
readonly attribute USVString url;
[SameObject] readonly attribute Headers headers;
diff --git a/components/script/dom/webidls/Response.webidl b/components/script/dom/webidls/Response.webidl
index 4452af3ce69..0ced0c13794 100644
--- a/components/script/dom/webidls/Response.webidl
+++ b/components/script/dom/webidls/Response.webidl
@@ -4,9 +4,9 @@
// https://fetch.spec.whatwg.org/#response-class
- [Constructor(optional BodyInit? body = null, optional ResponseInit init = {}),
- Exposed=(Window,Worker)]
+ [Exposed=(Window,Worker)]
interface Response {
+ [Throws] constructor(optional BodyInit? body = null, optional ResponseInit init = {});
[NewObject] static Response error();
[NewObject, Throws] static Response redirect(USVString url, optional unsigned short status = 302);
diff --git a/components/script/dom/webidls/StereoPannerNode.webidl b/components/script/dom/webidls/StereoPannerNode.webidl
index 1795ce79bdf..e59f7cb9d19 100644
--- a/components/script/dom/webidls/StereoPannerNode.webidl
+++ b/components/script/dom/webidls/StereoPannerNode.webidl
@@ -10,8 +10,8 @@ dictionary StereoPannerOptions: AudioNodeOptions {
float pan = 0;
};
-[Exposed=Window,
- Constructor (BaseAudioContext context, optional StereoPannerOptions options = {})]
+[Exposed=Window]
interface StereoPannerNode : AudioScheduledSourceNode {
+ [Throws] constructor(BaseAudioContext context, optional StereoPannerOptions options = {});
readonly attribute AudioParam pan;
};
diff --git a/components/script/dom/webidls/StorageEvent.webidl b/components/script/dom/webidls/StorageEvent.webidl
index 060a82c0d05..dbc60b23036 100644
--- a/components/script/dom/webidls/StorageEvent.webidl
+++ b/components/script/dom/webidls/StorageEvent.webidl
@@ -9,8 +9,9 @@
* Event sent to a window when a storage area changes.
*/
-[Constructor(DOMString type, optional StorageEventInit eventInitDict = {}), Exposed=Window]
+[Exposed=Window]
interface StorageEvent : Event {
+ [Throws] constructor(DOMString type, optional StorageEventInit eventInitDict = {});
readonly attribute DOMString? key;
readonly attribute DOMString? oldValue;
readonly attribute DOMString? newValue;
diff --git a/components/script/dom/webidls/TestBinding.webidl b/components/script/dom/webidls/TestBinding.webidl
index b07fe213cdd..0621be01858 100644
--- a/components/script/dom/webidls/TestBinding.webidl
+++ b/components/script/dom/webidls/TestBinding.webidl
@@ -86,13 +86,13 @@ dictionary TestDictionaryDefaults {
object? nullableObjectValue = null;
};
-[Constructor,
- Constructor(sequence<unrestricted double> numberSequence),
- Constructor(unrestricted double num),
- Pref="dom.testbinding.enabled",
+[Pref="dom.testbinding.enabled",
Exposed=(Window,Worker)
]
interface TestBinding {
+ [Throws] constructor();
+ [Throws] constructor(sequence<unrestricted double> numberSequence);
+ [Throws] constructor(unrestricted double num);
attribute boolean booleanAttribute;
attribute byte byteAttribute;
attribute octet octetAttribute;
diff --git a/components/script/dom/webidls/TestBindingIterable.webidl b/components/script/dom/webidls/TestBindingIterable.webidl
index afecbfa0bf2..d74c43d8f5f 100644
--- a/components/script/dom/webidls/TestBindingIterable.webidl
+++ b/components/script/dom/webidls/TestBindingIterable.webidl
@@ -5,8 +5,9 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Pref="dom.testbinding.enabled", Exposed=(Window,Worker), Constructor]
+[Pref="dom.testbinding.enabled", Exposed=(Window,Worker)]
interface TestBindingIterable {
+ [Throws] constructor();
void add(DOMString arg);
readonly attribute unsigned long length;
getter DOMString getItem(unsigned long index);
diff --git a/components/script/dom/webidls/TestBindingPairIterable.webidl b/components/script/dom/webidls/TestBindingPairIterable.webidl
index 4129c6abea8..5d19fbe9f32 100644
--- a/components/script/dom/webidls/TestBindingPairIterable.webidl
+++ b/components/script/dom/webidls/TestBindingPairIterable.webidl
@@ -5,8 +5,9 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Pref="dom.testbinding.enabled", Exposed=(Window,Worker), Constructor]
+[Pref="dom.testbinding.enabled", Exposed=(Window,Worker)]
interface TestBindingPairIterable {
+ [Throws] constructor();
void add(DOMString key, unsigned long value);
iterable<DOMString, unsigned long>;
};
diff --git a/components/script/dom/webidls/TestWorklet.webidl b/components/script/dom/webidls/TestWorklet.webidl
index 3be494d4825..be254a3d079 100644
--- a/components/script/dom/webidls/TestWorklet.webidl
+++ b/components/script/dom/webidls/TestWorklet.webidl
@@ -5,8 +5,9 @@
// This interface is entirely internal to Servo, and should not be accessible to
// web pages.
-[Pref="dom.worklet.testing.enabled", Exposed=(Window), Constructor]
+[Pref="dom.worklet.testing.enabled", Exposed=(Window)]
interface TestWorklet {
+ [Throws] constructor();
[NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options = {});
DOMString? lookup(DOMString key);
};
diff --git a/components/script/dom/webidls/Text.webidl b/components/script/dom/webidls/Text.webidl
index cb07cbfcb53..21a556a22a8 100644
--- a/components/script/dom/webidls/Text.webidl
+++ b/components/script/dom/webidls/Text.webidl
@@ -10,8 +10,8 @@
*/
// https://dom.spec.whatwg.org/#text
-[Constructor(optional DOMString data = "")]
interface Text : CharacterData {
+ [Throws] constructor(optional DOMString data = "");
[NewObject, Throws]
Text splitText(unsigned long offset);
[Pure]
diff --git a/components/script/dom/webidls/TextDecoder.webidl b/components/script/dom/webidls/TextDecoder.webidl
index a2454ab4e05..cc9cf5506db 100644
--- a/components/script/dom/webidls/TextDecoder.webidl
+++ b/components/script/dom/webidls/TextDecoder.webidl
@@ -12,8 +12,9 @@ dictionary TextDecodeOptions {
boolean stream = false;
};
-[Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options = {}), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface TextDecoder {
+ [Throws] constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options = {});
readonly attribute DOMString encoding;
readonly attribute boolean fatal;
readonly attribute boolean ignoreBOM;
diff --git a/components/script/dom/webidls/TextEncoder.webidl b/components/script/dom/webidls/TextEncoder.webidl
index d5030c644fa..77e5132ff05 100644
--- a/components/script/dom/webidls/TextEncoder.webidl
+++ b/components/script/dom/webidls/TextEncoder.webidl
@@ -3,8 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
/* https://encoding.spec.whatwg.org/#interface-textencoder */
-[Constructor, Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface TextEncoder {
+ [Throws] constructor();
readonly attribute DOMString encoding;
[NewObject]
Uint8Array encode(optional USVString input = "");
diff --git a/components/script/dom/webidls/TrackEvent.webidl b/components/script/dom/webidls/TrackEvent.webidl
index f87fa0472a1..124e5cf4345 100644
--- a/components/script/dom/webidls/TrackEvent.webidl
+++ b/components/script/dom/webidls/TrackEvent.webidl
@@ -4,9 +4,9 @@
// https://html.spec.whatwg.org/multipage/#the-trackevent-interface
-[Exposed=Window,
- Constructor(DOMString type, optional TrackEventInit eventInitDict = {})]
+[Exposed=Window]
interface TrackEvent : Event {
+ [Throws] constructor(DOMString type, optional TrackEventInit eventInitDict = {});
readonly attribute (VideoTrack or AudioTrack or TextTrack)? track;
};
diff --git a/components/script/dom/webidls/TransitionEvent.webidl b/components/script/dom/webidls/TransitionEvent.webidl
index 05998ececfb..eaa9f3917db 100644
--- a/components/script/dom/webidls/TransitionEvent.webidl
+++ b/components/script/dom/webidls/TransitionEvent.webidl
@@ -6,9 +6,9 @@
* https://dom.spec.whatwg.org/#event
*/
-[Constructor(DOMString type, optional TransitionEventInit transitionEventInitDict = {}),
- Exposed=Window]
+[Exposed=Window]
interface TransitionEvent : Event {
+ [Throws] constructor(DOMString type, optional TransitionEventInit transitionEventInitDict = {});
readonly attribute DOMString propertyName;
readonly attribute float elapsedTime;
readonly attribute DOMString pseudoElement;
diff --git a/components/script/dom/webidls/UIEvent.webidl b/components/script/dom/webidls/UIEvent.webidl
index 20be43aec90..b49e5d5701b 100644
--- a/components/script/dom/webidls/UIEvent.webidl
+++ b/components/script/dom/webidls/UIEvent.webidl
@@ -3,8 +3,8 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/uievents/#interface-uievent
-[Constructor(DOMString type, optional UIEventInit eventInitDict = {})]
interface UIEvent : Event {
+ [Throws] constructor(DOMString type, optional UIEventInit eventInitDict = {});
// readonly attribute WindowProxy? view;
readonly attribute Window? view;
readonly attribute long detail;
diff --git a/components/script/dom/webidls/URL.webidl b/components/script/dom/webidls/URL.webidl
index 334100a3bfe..31425fcd843 100644
--- a/components/script/dom/webidls/URL.webidl
+++ b/components/script/dom/webidls/URL.webidl
@@ -3,8 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://url.spec.whatwg.org/#url
-[Constructor(USVString url, optional USVString base), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface URL {
+ [Throws] constructor(USVString url, optional USVString base);
[SetterThrows]
/*stringifier*/ attribute USVString href;
readonly attribute USVString origin;
diff --git a/components/script/dom/webidls/URLSearchParams.webidl b/components/script/dom/webidls/URLSearchParams.webidl
index 1c495cde1a1..70845900003 100644
--- a/components/script/dom/webidls/URLSearchParams.webidl
+++ b/components/script/dom/webidls/URLSearchParams.webidl
@@ -6,10 +6,10 @@
* https://url.spec.whatwg.org/#interface-urlsearchparams
*/
-[Constructor(
- optional (sequence<sequence<USVString>> or record<USVString, USVString> or USVString) init/* = ""*/
-), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface URLSearchParams {
+ [Throws] constructor(
+ optional (sequence<sequence<USVString>> or record<USVString, USVString> or USVString) init);
void append(USVString name, USVString value);
void delete(USVString name);
USVString? get(USVString name);
diff --git a/components/script/dom/webidls/VRDisplayEvent.webidl b/components/script/dom/webidls/VRDisplayEvent.webidl
index 94544868fb6..c4207d51b7e 100644
--- a/components/script/dom/webidls/VRDisplayEvent.webidl
+++ b/components/script/dom/webidls/VRDisplayEvent.webidl
@@ -11,8 +11,9 @@ enum VRDisplayEventReason {
"requested"
};
-[Pref="dom.webvr.enabled", Constructor(DOMString type, VRDisplayEventInit eventInitDict)]
+[Pref="dom.webvr.enabled"]
interface VRDisplayEvent : Event {
+ [Throws] constructor(DOMString type, VRDisplayEventInit eventInitDict);
readonly attribute VRDisplay display;
readonly attribute VRDisplayEventReason? reason;
};
diff --git a/components/script/dom/webidls/VRFrameData.webidl b/components/script/dom/webidls/VRFrameData.webidl
index 2401a362c4b..5b95df05ffb 100644
--- a/components/script/dom/webidls/VRFrameData.webidl
+++ b/components/script/dom/webidls/VRFrameData.webidl
@@ -4,8 +4,9 @@
// https://w3c.github.io/webvr/#interface-vrframedata
-[Pref="dom.webvr.enabled", Constructor]
+[Pref="dom.webvr.enabled"]
interface VRFrameData {
+ [Throws] constructor();
readonly attribute DOMHighResTimeStamp timestamp;
readonly attribute Float32Array leftProjectionMatrix;
readonly attribute Float32Array leftViewMatrix;
diff --git a/components/script/dom/webidls/WebGLContextEvent.webidl b/components/script/dom/webidls/WebGLContextEvent.webidl
index f8a2dbf2137..5c6a1c4f1d7 100644
--- a/components/script/dom/webidls/WebGLContextEvent.webidl
+++ b/components/script/dom/webidls/WebGLContextEvent.webidl
@@ -3,9 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15
-[Constructor(DOMString type, optional WebGLContextEventInit eventInit = {}),
- Exposed=Window]
+[Exposed=Window]
interface WebGLContextEvent : Event {
+ [Throws] constructor(DOMString type, optional WebGLContextEventInit eventInit = {});
readonly attribute DOMString statusMessage;
};
diff --git a/components/script/dom/webidls/WebSocket.webidl b/components/script/dom/webidls/WebSocket.webidl
index 0d6f25ca2e5..089b2c5a378 100644
--- a/components/script/dom/webidls/WebSocket.webidl
+++ b/components/script/dom/webidls/WebSocket.webidl
@@ -6,8 +6,9 @@
enum BinaryType { "blob", "arraybuffer" };
-[Constructor(DOMString url, optional (DOMString or sequence<DOMString>) protocols), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface WebSocket : EventTarget {
+ [Throws] constructor(DOMString url, optional (DOMString or sequence<DOMString>) protocols);
readonly attribute DOMString url;
//ready state
const unsigned short CONNECTING = 0;
diff --git a/components/script/dom/webidls/WheelEvent.webidl b/components/script/dom/webidls/WheelEvent.webidl
index b202d7f2c24..15fc033a21b 100644
--- a/components/script/dom/webidls/WheelEvent.webidl
+++ b/components/script/dom/webidls/WheelEvent.webidl
@@ -3,9 +3,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/uievents/#interface-wheelevent
-[Constructor(DOMString typeArg, optional WheelEventInit wheelEventInitDict = {}),
- Exposed=Window]
+[Exposed=Window]
interface WheelEvent : MouseEvent {
+ [Throws] constructor(DOMString typeArg, optional WheelEventInit wheelEventInitDict = {});
const unsigned long DOM_DELTA_PIXEL = 0x00;
const unsigned long DOM_DELTA_LINE = 0x01;
const unsigned long DOM_DELTA_PAGE = 0x02;
diff --git a/components/script/dom/webidls/Worker.webidl b/components/script/dom/webidls/Worker.webidl
index 56e3075e6f8..4e55d6fbe00 100644
--- a/components/script/dom/webidls/Worker.webidl
+++ b/components/script/dom/webidls/Worker.webidl
@@ -9,8 +9,9 @@ interface mixin AbstractWorker {
};
// https://html.spec.whatwg.org/multipage/#worker
-[Constructor(USVString scriptURL, optional WorkerOptions options = {}), Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface Worker : EventTarget {
+ [Throws] constructor(USVString scriptURL, optional WorkerOptions options = {});
void terminate();
[Throws] void postMessage(any message/*, sequence<object> transfer*/);
diff --git a/components/script/dom/webidls/XMLHttpRequest.webidl b/components/script/dom/webidls/XMLHttpRequest.webidl
index e2f97577ee7..d2211110d73 100644
--- a/components/script/dom/webidls/XMLHttpRequest.webidl
+++ b/components/script/dom/webidls/XMLHttpRequest.webidl
@@ -24,8 +24,9 @@ enum XMLHttpRequestResponseType {
"text"
};
-[Constructor, Exposed=(Window,Worker)]
+[Exposed=(Window,Worker)]
interface XMLHttpRequest : XMLHttpRequestEventTarget {
+ [Throws] constructor();
// event handler
attribute EventHandler onreadystatechange;
diff --git a/components/script/dom/webidls/XMLSerializer.webidl b/components/script/dom/webidls/XMLSerializer.webidl
index cdc0f2f0342..e93d3546787 100644
--- a/components/script/dom/webidls/XMLSerializer.webidl
+++ b/components/script/dom/webidls/XMLSerializer.webidl
@@ -6,8 +6,8 @@
* https://w3c.github.io/DOM-Parsing/#the-domparser-interface
*/
-[Constructor]
interface XMLSerializer {
+ [Throws] constructor();
[Throws]
DOMString serializeToString(Node root);
};
diff --git a/components/script/dom/webidls/XRRigidTransform.webidl b/components/script/dom/webidls/XRRigidTransform.webidl
index b58a8c339e4..91505a96285 100644
--- a/components/script/dom/webidls/XRRigidTransform.webidl
+++ b/components/script/dom/webidls/XRRigidTransform.webidl
@@ -4,9 +4,9 @@
// https://immersive-web.github.io/webxr/#xrrigidtransform-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled",
- Constructor(optional DOMPointInit position = {}, optional DOMPointInit orientation = {})]
+[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
interface XRRigidTransform {
+ [Throws] constructor(optional DOMPointInit position = {}, optional DOMPointInit orientation = {});
readonly attribute DOMPointReadOnly position;
readonly attribute DOMPointReadOnly orientation;
readonly attribute Float32Array matrix;
diff --git a/components/script/dom/webidls/XRSessionEvent.webidl b/components/script/dom/webidls/XRSessionEvent.webidl
index f48fa5eb342..19506af613d 100644
--- a/components/script/dom/webidls/XRSessionEvent.webidl
+++ b/components/script/dom/webidls/XRSessionEvent.webidl
@@ -4,9 +4,9 @@
// https://immersive-web.github.io/webxr/#xrsessionevent-interface
-[SecureContext, Exposed=Window, Pref="dom.webxr.enabled", Constructor
-(DOMString type, XRSessionEventInit eventInitDict)]
+[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
interface XRSessionEvent : Event {
+ [Throws] constructor(DOMString type, XRSessionEventInit eventInitDict);
[SameObject] readonly attribute XRSession session;
};
diff --git a/components/script/dom/webidls/XRWebGLLayer.webidl b/components/script/dom/webidls/XRWebGLLayer.webidl
index 769b3e9b567..40091ccc73e 100644
--- a/components/script/dom/webidls/XRWebGLLayer.webidl
+++ b/components/script/dom/webidls/XRWebGLLayer.webidl
@@ -17,11 +17,11 @@ dictionary XRWebGLLayerInit {
// double framebufferScaleFactor = 1.0;
};
-[SecureContext, Exposed=Window, Constructor(XRSession session,
- XRWebGLRenderingContext context,
- optional XRWebGLLayerInit layerInit = {}),
- Pref="dom.webxr.enabled"]
+[SecureContext, Exposed=Window, Pref="dom.webxr.enabled"]
interface XRWebGLLayer {
+ [Throws] constructor(XRSession session,
+ XRWebGLRenderingContext context,
+ optional XRWebGLLayerInit layerInit = {});
// // Attributes
readonly attribute XRWebGLRenderingContext context;