aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2019-07-12 04:35:46 -0400
committerGitHub <noreply@github.com>2019-07-12 04:35:46 -0400
commit026e550d3536115b23ad794e08b3c93147913dfb (patch)
tree5d83ec4a7d401706c2668ee5fac90e99ef734b1e
parent5fdc7c0d2c787ef562809072e3dd7c3258dc8a83 (diff)
parent01151274f1487e630852680ba38ab5a651db44ec (diff)
downloadservo-026e550d3536115b23ad794e08b3c93147913dfb.tar.gz
servo-026e550d3536115b23ad794e08b3c93147913dfb.zip
Auto merge of #23748 - saschanaz:default-dict, r=Manishearth
Sync WebIDL.py with gecko <!-- Please describe your changes on the following line: --> The new change requires default dictionary value for optional dictionary-type arguments. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [ ] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #23703 <!-- Either: --> - [x] There are tests for these changes <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/23748) <!-- Reviewable:end -->
-rw-r--r--Cargo.lock6
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py16
-rw-r--r--components/script/dom/bindings/codegen/parser/WebIDL.py337
-rw-r--r--components/script/dom/bindings/codegen/parser/abstract.patch10
-rw-r--r--components/script/dom/bindings/codegen/parser/callback-location.patch6
-rw-r--r--components/script/dom/bindings/codegen/parser/debug.patch2
-rw-r--r--components/script/dom/bindings/codegen/parser/inline.patch4
-rw-r--r--components/script/dom/bindings/codegen/parser/pref-main-thread.patch27
-rw-r--r--components/script/dom/bindings/codegen/parser/runtests.py2
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_attr.py8
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_callback.py3
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_callback_constructor.py63
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_cereactions.py4
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_conditional_dictionary_member.py6
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_const.py19
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py87
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py1
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_dictionary.py82
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py27
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_empty_sequence_default_value.py2
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_error_colno.py2
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_error_lineno.py2
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_exposed_extended_attribute.py12
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_float_types.py10
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_identifier_conflict.py6
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interface.py86
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py4
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_lenientSetter.py2
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_method.py89
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_namespace.py18
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_record.py4
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_replaceable.py2
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_typedef.py8
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_unenumerable_own_properties.py6
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_unforgeable.py4
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_union.py2
-rwxr-xr-xcomponents/script/dom/bindings/codegen/parser/update.sh1
-rw-r--r--components/script/dom/webidls/AnalyserNode.webidl2
-rw-r--r--components/script/dom/webidls/AudioBufferSourceNode.webidl2
-rw-r--r--components/script/dom/webidls/AudioContext.webidl2
-rw-r--r--components/script/dom/webidls/BiquadFilterNode.webidl2
-rw-r--r--components/script/dom/webidls/Blob.webidl2
-rw-r--r--components/script/dom/webidls/Bluetooth.webidl2
-rw-r--r--components/script/dom/webidls/ChannelMergerNode.webidl2
-rw-r--r--components/script/dom/webidls/ChannelSplitterNode.webidl2
-rw-r--r--components/script/dom/webidls/CloseEvent.webidl2
-rw-r--r--components/script/dom/webidls/CompositionEvent.webidl2
-rw-r--r--components/script/dom/webidls/CustomElementRegistry.webidl2
-rw-r--r--components/script/dom/webidls/CustomEvent.webidl2
-rw-r--r--components/script/dom/webidls/DOMMatrix.webidl6
-rw-r--r--components/script/dom/webidls/DOMMatrixReadOnly.webidl6
-rw-r--r--components/script/dom/webidls/DOMPoint.webidl2
-rw-r--r--components/script/dom/webidls/DOMPointReadOnly.webidl2
-rw-r--r--components/script/dom/webidls/DOMQuad.webidl16
-rw-r--r--components/script/dom/webidls/Document.webidl4
-rw-r--r--components/script/dom/webidls/Element.webidl6
-rw-r--r--components/script/dom/webidls/ErrorEvent.webidl2
-rw-r--r--components/script/dom/webidls/Event.webidl2
-rw-r--r--components/script/dom/webidls/EventSource.webidl2
-rw-r--r--components/script/dom/webidls/EventTarget.webidl4
-rw-r--r--components/script/dom/webidls/ExtendableEvent.webidl2
-rw-r--r--components/script/dom/webidls/ExtendableMessageEvent.webidl2
-rw-r--r--components/script/dom/webidls/Fetch.webidl2
-rw-r--r--components/script/dom/webidls/File.webidl2
-rw-r--r--components/script/dom/webidls/FocusEvent.webidl2
-rw-r--r--components/script/dom/webidls/FormDataEvent.webidl2
-rw-r--r--components/script/dom/webidls/GainNode.webidl2
-rw-r--r--components/script/dom/webidls/HashChangeEvent.webidl2
-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/MediaDevices.webidl2
-rw-r--r--components/script/dom/webidls/MediaQueryListEvent.webidl2
-rw-r--r--components/script/dom/webidls/MessageEvent.webidl2
-rw-r--r--components/script/dom/webidls/MouseEvent.webidl2
-rw-r--r--components/script/dom/webidls/MutationObserver.webidl2
-rw-r--r--components/script/dom/webidls/Node.webidl2
-rw-r--r--components/script/dom/webidls/OscillatorNode.webidl2
-rw-r--r--components/script/dom/webidls/PageTransitionEvent.webidl2
-rw-r--r--components/script/dom/webidls/PannerNode.webidl2
-rw-r--r--components/script/dom/webidls/PopStateEvent.webidl2
-rw-r--r--components/script/dom/webidls/ProgressEvent.webidl2
-rw-r--r--components/script/dom/webidls/PromiseRejectionEvent.webidl2
-rw-r--r--components/script/dom/webidls/RTCIceCandidate.webidl2
-rw-r--r--components/script/dom/webidls/RTCPeerConnection.webidl8
-rw-r--r--components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl2
-rw-r--r--components/script/dom/webidls/Request.webidl2
-rw-r--r--components/script/dom/webidls/Response.webidl2
-rw-r--r--components/script/dom/webidls/ServiceWorkerContainer.webidl3
-rw-r--r--components/script/dom/webidls/StereoPannerNode.webidl2
-rw-r--r--components/script/dom/webidls/StorageEvent.webidl2
-rw-r--r--components/script/dom/webidls/TestBinding.webidl2
-rw-r--r--components/script/dom/webidls/TestWorklet.webidl2
-rw-r--r--components/script/dom/webidls/TextDecoder.webidl4
-rw-r--r--components/script/dom/webidls/TrackEvent.webidl2
-rw-r--r--components/script/dom/webidls/TransitionEvent.webidl2
-rw-r--r--components/script/dom/webidls/UIEvent.webidl2
-rw-r--r--components/script/dom/webidls/WebGLContextEvent.webidl2
-rw-r--r--components/script/dom/webidls/WheelEvent.webidl2
-rw-r--r--components/script/dom/webidls/Window.webidl6
-rw-r--r--components/script/dom/webidls/Worker.webidl2
-rw-r--r--components/script/dom/webidls/Worklet.webidl2
-rw-r--r--components/script/dom/webidls/XR.webidl2
-rw-r--r--components/script/dom/webidls/XRRigidTransform.webidl2
-rw-r--r--components/script/dom/webidls/XRSession.webidl2
-rw-r--r--components/script/dom/webidls/XRWebGLLayer.webidl2
-rw-r--r--components/script_plugins/Cargo.toml2
106 files changed, 832 insertions, 319 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 9c40f21b496..797d0fdef66 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3969,7 +3969,7 @@ dependencies = [
name = "script_plugins"
version = "0.0.1"
dependencies = [
- "weedle 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "weedle 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -5534,7 +5534,7 @@ dependencies = [
[[package]]
name = "weedle"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"nom 4.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -6180,7 +6180,7 @@ dependencies = [
"checksum webrender_build 0.0.1 (git+https://github.com/jdm/webrender?branch=servo-hl)" = "<none>"
"checksum webxr 0.0.1 (git+https://github.com/servo/webxr)" = "<none>"
"checksum webxr-api 0.0.1 (git+https://github.com/servo/webxr)" = "<none>"
-"checksum weedle 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bcc44aa200daee8b1f3a004beaf16554369746f1b4486f0cf93b0caf8a3c2d1e"
+"checksum weedle 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3bb43f70885151e629e2a19ce9e50bd730fd436cfd4b666894c9ce4de9141164"
"checksum which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164"
"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770"
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 114b403d077..98df7a8b51f 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -17,6 +17,7 @@ import functools
from WebIDL import (
BuiltinTypes,
IDLBuiltinType,
+ IDLDefaultDictionaryValue,
IDLEmptySequenceValue,
IDLInterfaceMember,
IDLNullableType,
@@ -678,13 +679,16 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
return None
if isinstance(defaultValue, IDLNullValue):
- assert type.nullable() or type.isDictionary()
+ assert type.nullable()
+ return nullValue
+ elif isinstance(defaultValue, IDLDefaultDictionaryValue):
+ assert type.isDictionary()
return nullValue
elif isinstance(defaultValue, IDLEmptySequenceValue):
assert type.isSequence()
return "Vec::new()"
- raise TypeError("Can't handle non-null or non-empty sequence default value here")
+ raise TypeError("Can't handle non-null, non-empty sequence or non-empty dictionary default value here")
# A helper function for wrapping up the template body for
# possibly-nullable objecty stuff
@@ -747,17 +751,19 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
for memberType in type.unroll().flatMemberTypes
if memberType.isDictionary()
]
- if defaultValue and not isinstance(defaultValue, IDLNullValue):
+ if (defaultValue and
+ not isinstance(defaultValue, IDLNullValue) and
+ not isinstance(defaultValue, IDLDefaultDictionaryValue)):
tag = defaultValue.type.tag()
if tag is IDLType.Tags.bool:
default = "%s::Boolean(%s)" % (
union_native_type(type),
"true" if defaultValue.value else "false")
else:
- raise("We don't currently support default values that aren't null or boolean")
+ raise("We don't currently support default values that aren't null, boolean or default dictionary")
elif dictionaries:
if defaultValue:
- assert isinstance(defaultValue, IDLNullValue)
+ assert isinstance(defaultValue, IDLDefaultDictionaryValue)
dictionary, = dictionaries
default = "%s::%s(%s::%s::empty())" % (
union_native_type(type),
diff --git a/components/script/dom/bindings/codegen/parser/WebIDL.py b/components/script/dom/bindings/codegen/parser/WebIDL.py
index df88cf120dd..e18b6e34a2c 100644
--- a/components/script/dom/bindings/codegen/parser/WebIDL.py
+++ b/components/script/dom/bindings/codegen/parser/WebIDL.py
@@ -1,16 +1,18 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
""" A WebIDL parser. """
+from __future__ import print_function
from ply import lex, yacc
import re
import os
import traceback
import math
import string
-from collections import defaultdict
+from collections import defaultdict, OrderedDict
+from itertools import chain
# Machinery
@@ -40,32 +42,22 @@ def parseInt(literal):
return value * sign
-# Magic for creating enums
-def M_add_class_attribs(attribs, start):
- def foo(name, bases, dict_):
- for v, k in enumerate(attribs):
- dict_[k] = start + v
- assert 'length' not in dict_
- dict_['length'] = start + len(attribs)
- return type(name, bases, dict_)
- return foo
-
-
def enum(*names, **kw):
- if len(kw) == 1:
- base = kw['base'].__class__
- start = base.length
- else:
- assert len(kw) == 0
- base = object
- start = 0
-
- class Foo(base):
- __metaclass__ = M_add_class_attribs(names, start)
-
+ class Foo(object):
+ attrs = OrderedDict()
+ def __init__(self, names):
+ for v, k in enumerate(names):
+ self.attrs[k] = v
+ def __getattr__(self, attr):
+ if attr in self.attrs:
+ return self.attrs[attr]
+ raise AttributeError
def __setattr__(self, name, value): # this makes it read-only
raise NotImplementedError
- return Foo()
+
+ if "base" not in kw:
+ return Foo(names)
+ return Foo(chain(kw["base"].attrs.keys(), names))
class WebIDLError(Exception):
@@ -482,9 +474,6 @@ class IDLExposureMixins():
def isExposedOnMainThread(self):
return self.isExposedInWindow()
- def isExposedOffMainThread(self):
- return len(self.exposureSet - {'Window', 'FakeTestPrimaryGlobal'}) > 0
-
def isExposedInAnyWorker(self):
return len(self.getWorkerExposureSet()) > 0
@@ -568,6 +557,9 @@ class IDLExternalInterface(IDLObjectWithIdentifier, IDLExposureMixins):
def isNavigatorProperty(self):
return False
+ def isSerializable(self):
+ return False
+
def _getDependentObjects(self):
return set()
@@ -704,6 +696,7 @@ class IDLInterfaceOrNamespace(IDLObjectWithScope, IDLExposureMixins):
# outputs the constructs in the order that namedConstructors enumerates
# them.
self.namedConstructors = list()
+ self.legacyWindowAliases = []
self.implementedInterfaces = set()
self._consequential = False
self._isKnownNonPartial = False
@@ -774,6 +767,16 @@ class IDLInterfaceOrNamespace(IDLObjectWithScope, IDLExposureMixins):
IDLExposureMixins.finish(self, scope)
+ if len(self.legacyWindowAliases) > 0:
+ if not self.hasInterfaceObject():
+ raise WebIDLError("Interface %s unexpectedly has [LegacyWindowAlias] "
+ "and [NoInterfaceObject] together" % self.identifier.name,
+ [self.location])
+ if not self.isExposedInWindow():
+ raise WebIDLError("Interface %s has [LegacyWindowAlias] "
+ "but not exposed in Window" % self.identifier.name,
+ [self.location])
+
# Now go ahead and merge in our partial interfaces.
for partial in self._partialInterfaces:
partial.finish(scope)
@@ -962,7 +965,6 @@ class IDLInterfaceOrNamespace(IDLObjectWithScope, IDLExposureMixins):
# self.members. Sort our consequential interfaces by name
# just so we have a consistent order.
for iface in sorted(self.getConsequentialInterfaces(),
- cmp=cmp,
key=lambda x: x.identifier.name):
# Flag the interface as being someone's consequential interface
iface.setIsConsequentialInterfaceOf(self)
@@ -1325,6 +1327,7 @@ class IDLInterfaceOrNamespace(IDLObjectWithScope, IDLExposureMixins):
for bindingAlias in member.bindingAliases:
checkDuplicateNames(member, bindingAlias, "BindingAlias")
+
# Conditional exposure makes no sense for interfaces with no
# interface object, unless they're navigator properties.
# And SecureContext makes sense for interfaces with no interface object,
@@ -1640,6 +1643,11 @@ class IDLInterface(IDLInterfaceOrNamespace):
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)
@@ -1700,6 +1708,10 @@ 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():
@@ -1723,6 +1735,18 @@ class IDLInterface(IDLInterfaceOrNamespace):
self.parentScope.addIfaceGlobalNames(self.identifier.name,
[self.identifier.name])
self._isOnGlobalProtoChain = True
+ elif identifier == "LegacyWindowAlias":
+ if attr.hasValue():
+ self.legacyWindowAliases = [attr.value()]
+ elif attr.hasArgs():
+ self.legacyWindowAliases = attr.args()
+ else:
+ raise WebIDLError("[%s] must either take an identifier "
+ "or take an identifier list" % identifier,
+ [attr.location])
+ for alias in self.legacyWindowAliases:
+ unresolved = IDLUnresolvedIdentifier(attr.location, alias)
+ IDLObjectWithIdentifier(attr.location, self.parentScope, unresolved)
elif identifier == "SecureContext":
if not attr.noArguments():
raise WebIDLError("[%s] must take no arguments" % identifier,
@@ -1744,6 +1768,7 @@ class IDLInterface(IDLInterfaceOrNamespace):
identifier == "LegacyUnenumerableNamedProperties" or
identifier == "RunConstructorInCallerCompartment" or
identifier == "WantsEventListenerHooks" or
+ identifier == "Serializable" or
identifier == "Abstract" or
identifier == "Inline"):
# Known extended attributes that do not take values
@@ -1770,6 +1795,19 @@ class IDLInterface(IDLInterfaceOrNamespace):
attrlist = attr.listValue()
self._extendedAttrDict[identifier] = attrlist if len(attrlist) else True
+ def validate(self):
+ IDLInterfaceOrNamespace.validate(self)
+ if self.parent and self.isSerializable() and not self.parent.isSerializable():
+ raise WebIDLError(
+ "Serializable interface inherits from non-serializable "
+ "interface. Per spec, that means the object should not be "
+ "serializable, so chances are someone made a mistake here "
+ "somewhere.",
+ [self.location, self.parent.location])
+
+ def isSerializable(self):
+ return self.getExtendedAttribute("Serializable")
+
class IDLNamespace(IDLInterfaceOrNamespace):
def __init__(self, location, parentScope, name, members, isKnownNonPartial):
@@ -1805,7 +1843,9 @@ class IDLNamespace(IDLInterfaceOrNamespace):
if not attr.noArguments():
raise WebIDLError("[%s] must not have arguments" % identifier,
[attr.location])
- elif identifier == "Pref" or identifier == "Func":
+ elif (identifier == "Pref" or
+ identifier == "HeaderFile" or
+ identifier == "Func"):
# Known extended attributes that take a string value
if not attr.hasValue():
raise WebIDLError("[%s] must have a value" % identifier,
@@ -1818,6 +1858,9 @@ class IDLNamespace(IDLInterfaceOrNamespace):
attrlist = attr.listValue()
self._extendedAttrDict[identifier] = attrlist if len(attrlist) else True
+ def isSerializable(self):
+ return False
+
class IDLDictionary(IDLObjectWithScope):
def __init__(self, location, parentScope, name, parent, members):
@@ -1877,7 +1920,7 @@ class IDLDictionary(IDLObjectWithScope):
assert member.type.isComplete()
# Members of a dictionary are sorted in lexicographic order
- self.members.sort(cmp=cmp, key=lambda x: x.identifier.name)
+ self.members.sort(key=lambda x: x.identifier.name)
inheritedMembers = []
ancestor = self.parent
@@ -2232,7 +2275,7 @@ class IDLUnresolvedType(IDLType):
assert obj
if obj.isType():
- print obj
+ print(obj)
assert not obj.isType()
if obj.isTypedef():
assert self.name.name == obj.identifier.name
@@ -3562,8 +3605,6 @@ class IDLNullValue(IDLObject):
def coerceToType(self, type, location):
if (not isinstance(type, IDLNullableType) and
not (type.isUnion() and type.hasNullableType) and
- not (type.isUnion() and type.hasDictionaryType()) and
- not type.isDictionary() and
not type.isAny()):
raise WebIDLError("Cannot coerce null value to type %s." % type,
[location])
@@ -3612,6 +3653,35 @@ class IDLEmptySequenceValue(IDLObject):
return set()
+class IDLDefaultDictionaryValue(IDLObject):
+ def __init__(self, location):
+ IDLObject.__init__(self, location)
+ self.type = None
+ self.value = None
+
+ def coerceToType(self, type, location):
+ if type.isUnion():
+ # We use the flat member types here, because if we have a nullable
+ # member type, or a nested union, we want the type the value
+ # actually coerces to, not the nullable or nested union type.
+ for subtype in type.unroll().flatMemberTypes:
+ try:
+ return self.coerceToType(subtype, location)
+ except:
+ pass
+
+ if not type.isDictionary():
+ raise WebIDLError("Cannot coerce default dictionary value to type %s." % type,
+ [location])
+
+ defaultDictionaryValue = IDLDefaultDictionaryValue(self.location)
+ defaultDictionaryValue.type = type
+ return defaultDictionaryValue
+
+ def _getDependentObjects(self):
+ return set()
+
+
class IDLUndefinedValue(IDLObject):
def __init__(self, location):
IDLObject.__init__(self, location)
@@ -3689,7 +3759,7 @@ class IDLInterfaceMember(IDLObjectWithIdentifier, IDLExposureMixins):
def finish(self, scope):
# We better be exposed _somewhere_.
if (len(self._exposureGlobalNames) == 0):
- print self.identifier.name
+ print(self.identifier.name)
assert len(self._exposureGlobalNames) != 0
IDLExposureMixins.finish(self, scope)
@@ -4577,7 +4647,9 @@ class IDLArgument(IDLObjectWithIdentifier):
elif identifier == "TreatNonCallableAsNull":
self._allowTreatNonCallableAsNull = True
elif (self.dictionaryMember and
- (identifier == "ChromeOnly" or identifier == "Func")):
+ (identifier == "ChromeOnly" or
+ identifier == "Func" or
+ identifier == "Pref")):
if not self.optional:
raise WebIDLError("[%s] must not be used on a required "
"dictionary member" % identifier,
@@ -4609,14 +4681,7 @@ class IDLArgument(IDLObjectWithIdentifier):
assert not isinstance(type.name, IDLUnresolvedIdentifier)
self.type = type
- if ((self.type.isDictionary() or
- self.type.isUnion() and self.type.unroll().hasDictionaryType()) and
- self.optional and not self.defaultValue and not self.variadic and
- not self.dictionaryMember):
- # Default optional non-variadic dictionary arguments to null,
- # for simplicity, so the codegen doesn't have to special-case this.
- self.defaultValue = IDLNullValue(self.location)
- elif self.type.isAny():
+ if self.type.isAny():
assert (self.defaultValue is None or
isinstance(self.defaultValue, IDLNullValue))
# optional 'any' values always have a default value
@@ -4648,7 +4713,7 @@ class IDLArgument(IDLObjectWithIdentifier):
class IDLCallback(IDLObjectWithScope):
- def __init__(self, location, parentScope, identifier, returnType, arguments):
+ def __init__(self, location, parentScope, identifier, returnType, arguments, isConstructor):
assert isinstance(returnType, IDLType)
self._returnType = returnType
@@ -4663,10 +4728,15 @@ class IDLCallback(IDLObjectWithScope):
self._treatNonCallableAsNull = False
self._treatNonObjectAsNull = False
+ self._isRunScriptBoundary = False
+ self._isConstructor = isConstructor
def isCallback(self):
return True
+ def isConstructor(self):
+ return self._isConstructor
+
def signatures(self):
return [(self._returnType, self._arguments)]
@@ -4699,7 +4769,16 @@ class IDLCallback(IDLObjectWithScope):
if attr.identifier() == "TreatNonCallableAsNull":
self._treatNonCallableAsNull = True
elif attr.identifier() == "TreatNonObjectAsNull":
+ if self._isConstructor:
+ raise WebIDLError("[TreatNonObjectAsNull] is not supported "
+ "on constructors", [self.location])
self._treatNonObjectAsNull = True
+ elif attr.identifier() == "MOZ_CAN_RUN_SCRIPT_BOUNDARY":
+ if self._isConstructor:
+ raise WebIDLError("[MOZ_CAN_RUN_SCRIPT_BOUNDARY] is not "
+ "permitted on constructors",
+ [self.location])
+ self._isRunScriptBoundary = True
else:
unhandledAttrs.append(attr)
if self._treatNonCallableAsNull and self._treatNonObjectAsNull:
@@ -4711,6 +4790,9 @@ class IDLCallback(IDLObjectWithScope):
def _getDependentObjects(self):
return set([self._returnType] + self._arguments)
+ def isRunScriptBoundary(self):
+ return self._isRunScriptBoundary;
+
class IDLCallbackType(IDLType):
def __init__(self, location, callback):
@@ -4757,6 +4839,9 @@ class IDLMethodOverload:
deps.add(self.returnType)
return deps
+ def includesRestrictedFloatArgument(self):
+ return any(arg.type.includesRestrictedFloat() for arg in self.arguments)
+
class IDLMethod(IDLInterfaceMember, IDLScope):
@@ -4928,10 +5013,25 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
def addOverload(self, method):
assert len(method._overloads) == 1
- if self._extendedAttrDict != method ._extendedAttrDict:
- raise WebIDLError("Extended attributes differ on different "
- "overloads of %s" % method.identifier,
- [self.location, method.location])
+ if self._extendedAttrDict != method._extendedAttrDict:
+ extendedAttrDiff = set(self._extendedAttrDict.keys()) ^ set(method._extendedAttrDict.keys())
+
+ if extendedAttrDiff == { "LenientFloat" }:
+ if "LenientFloat" not in self._extendedAttrDict:
+ for overload in self._overloads:
+ if overload.includesRestrictedFloatArgument():
+ raise WebIDLError("Restricted float behavior differs on different "
+ "overloads of %s" % method.identifier,
+ [overload.location, method.location])
+ self._extendedAttrDict["LenientFloat"] = method._extendedAttrDict["LenientFloat"]
+ elif method._overloads[0].includesRestrictedFloatArgument():
+ raise WebIDLError("Restricted float behavior differs on different "
+ "overloads of %s" % method.identifier,
+ [self.location, method.location])
+ else:
+ raise WebIDLError("Extended attributes differ on different "
+ "overloads of %s" % method.identifier,
+ [self.location, method.location])
self._overloads.extend(method._overloads)
@@ -5039,6 +5139,15 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
"must be optional",
[argument.location])
+ if (not argument.defaultValue and
+ all(arg.optional for arg in arguments[idx+1:])):
+ raise WebIDLError("Dictionary argument without any "
+ "required fields or union argument "
+ "containing such dictionary not "
+ "followed by a required argument "
+ "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 "
@@ -5162,12 +5271,12 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
[attr.location, self.location])
elif identifier == "LenientFloat":
# This is called before we've done overload resolution
- assert len(self.signatures()) == 1
- sig = self.signatures()[0]
- if not sig[0].isVoid():
+ overloads = self._overloads
+ assert len(overloads) == 1
+ if not overloads[0].returnType.isVoid():
raise WebIDLError("[LenientFloat] used on a non-void method",
[attr.location, self.location])
- if not any(arg.type.includesRestrictedFloat() for arg in sig[1]):
+ if not overloads[0].includesRestrictedFloatArgument():
raise WebIDLError("[LenientFloat] used on an operation with no "
"restricted float type arguments",
[attr.location, self.location])
@@ -5238,7 +5347,7 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
if self.signatures()[0][0] != BuiltinTypes[IDLBuiltinType.Types.object]:
raise WebIDLError("The return type of the default toJSON "
"operation must be 'object'",
- [attr.location, self.location]);
+ [attr.location, self.location])
elif (identifier == "Throws" or
identifier == "CanOOM" or
identifier == "NewObject" or
@@ -5251,7 +5360,8 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
identifier == "NeedsSubjectPrincipal" or
identifier == "NeedsCallerType" or
identifier == "StaticClassOverride" or
- identifier == "NonEnumerable"):
+ identifier == "NonEnumerable" or
+ identifier == "Unexposed"):
# Known attributes that we don't need to do anything with here
pass
else:
@@ -5478,6 +5588,7 @@ class Tokenizer(object):
"iterable": "ITERABLE",
"namespace": "NAMESPACE",
"ReadableStream": "READABLESTREAM",
+ "constructor": "CONSTRUCTOR",
}
tokens.extend(keywords.values())
@@ -5604,6 +5715,7 @@ class Parser(Tokenizer):
def p_CallbackRestOrInterface(self, p):
"""
CallbackRestOrInterface : CallbackRest
+ | CallbackConstructorRest
| Interface
"""
assert p[1]
@@ -5637,7 +5749,7 @@ class Parser(Tokenizer):
[location, existingObj.location])
existingObj.setNonPartial(*nonPartialArgs)
return existingObj
- except Exception, ex:
+ except Exception as ex:
if isinstance(ex, WebIDLError):
raise ex
pass
@@ -5675,7 +5787,7 @@ class Parser(Tokenizer):
"%s and %s" % (identifier.name, p[0]),
[location, p[0].location])
return
- except Exception, ex:
+ except Exception as ex:
if isinstance(ex, WebIDLError):
raise ex
pass
@@ -5739,7 +5851,7 @@ class Parser(Tokenizer):
"non-%s object" %
(prettyname, prettyname),
[location, nonPartialObject.location])
- except Exception, ex:
+ except Exception as ex:
if isinstance(ex, WebIDLError):
raise ex
pass
@@ -5905,12 +6017,23 @@ class Parser(Tokenizer):
"""
DefaultValue : ConstValue
| LBRACKET RBRACKET
+ | LBRACE RBRACE
"""
if len(p) == 2:
p[0] = p[1]
else:
- assert len(p) == 3 # Must be []
- p[0] = IDLEmptySequenceValue(self.getLocation(p, 1))
+ assert len(p) == 3 # Must be [] or {}
+ if p[1] == "[":
+ p[0] = IDLEmptySequenceValue(self.getLocation(p, 1))
+ else:
+ assert p[1] == "{"
+ p[0] = IDLDefaultDictionaryValue(self.getLocation(p, 1))
+
+ def p_DefaultValueNull(self, p):
+ """
+ DefaultValue : NULL
+ """
+ p[0] = IDLNullValue(self.getLocation(p, 1))
def p_Exception(self, p):
"""
@@ -5967,7 +6090,15 @@ class Parser(Tokenizer):
"""
identifier = IDLUnresolvedIdentifier(self.getLocation(p, 1), p[1])
p[0] = IDLCallback(self.getLocation(p, 1), self.globalScope(),
- identifier, p[3], p[5])
+ identifier, p[3], p[5], isConstructor=False)
+
+ def p_CallbackConstructorRest(self, p):
+ """
+ CallbackConstructorRest : CONSTRUCTOR IDENTIFIER EQUALS ReturnType LPAREN ArgumentList RPAREN SEMICOLON
+ """
+ identifier = IDLUnresolvedIdentifier(self.getLocation(p, 2), p[2])
+ p[0] = IDLCallback(self.getLocation(p, 2), self.globalScope(),
+ identifier, p[4], p[6], isConstructor=True)
def p_ExceptionMembers(self, p):
"""
@@ -6041,12 +6172,6 @@ class Parser(Tokenizer):
stringType = BuiltinTypes[IDLBuiltinType.Types.domstring]
p[0] = IDLValue(location, stringType, p[1])
- def p_ConstValueNull(self, p):
- """
- ConstValue : NULL
- """
- p[0] = IDLNullValue(self.getLocation(p, 1))
-
def p_BooleanLiteralTrue(self, p):
"""
BooleanLiteral : TRUE
@@ -6442,6 +6567,7 @@ class Parser(Tokenizer):
| ATTRIBUTE
| CALLBACK
| CONST
+ | CONSTRUCTOR
| DELETER
| DICTIONARY
| ENUM
@@ -6566,6 +6692,7 @@ class Parser(Tokenizer):
| BYTE
| LEGACYCALLER
| CONST
+ | CONSTRUCTOR
| DELETER
| DOUBLE
| EXCEPTION
@@ -6619,9 +6746,9 @@ class Parser(Tokenizer):
"""
p[0] = p[2].withExtendedAttributes(p[1])
- def p_SingleTypeNonAnyType(self, p):
+ def p_SingleTypeDistinguishableType(self, p):
"""
- SingleType : NonAnyType
+ SingleType : DistinguishableType
"""
p[0] = p[1]
@@ -6631,6 +6758,14 @@ class Parser(Tokenizer):
"""
p[0] = BuiltinTypes[IDLBuiltinType.Types.any]
+ # Note: Promise<void> is allowed, so we want to parametrize on ReturnType,
+ # not Type. Promise types can't be null, hence no "Null" in there.
+ def p_SingleTypePromiseType(self, p):
+ """
+ SingleType : PROMISE LT ReturnType GT
+ """
+ p[0] = IDLPromiseType(self.getLocation(p, 1), p[3])
+
def p_UnionType(self, p):
"""
UnionType : LPAREN UnionMemberType OR UnionMemberType UnionMemberTypes RPAREN
@@ -6639,9 +6774,9 @@ class Parser(Tokenizer):
types.extend(p[5])
p[0] = IDLUnionType(self.getLocation(p, 1), types)
- def p_UnionMemberTypeNonAnyType(self, p):
+ def p_UnionMemberTypeDistinguishableType(self, p):
"""
- UnionMemberType : ExtendedAttributeList NonAnyType
+ UnionMemberType : ExtendedAttributeList DistinguishableType
"""
p[0] = p[2].withExtendedAttributes(p[1])
@@ -6664,13 +6799,13 @@ class Parser(Tokenizer):
"""
p[0] = []
- def p_NonAnyType(self, p):
+ def p_DistinguishableType(self, p):
"""
- NonAnyType : PrimitiveType Null
- | ARRAYBUFFER Null
- | SHAREDARRAYBUFFER Null
- | READABLESTREAM Null
- | OBJECT Null
+ DistinguishableType : PrimitiveType Null
+ | ARRAYBUFFER Null
+ | SHAREDARRAYBUFFER Null
+ | READABLESTREAM Null
+ | OBJECT Null
"""
if p[1] == "object":
type = BuiltinTypes[IDLBuiltinType.Types.object]
@@ -6685,40 +6820,32 @@ class Parser(Tokenizer):
p[0] = self.handleNullable(type, p[2])
- def p_NonAnyTypeStringType(self, p):
+ def p_DistinguishableTypeStringType(self, p):
"""
- NonAnyType : StringType Null
+ DistinguishableType : StringType Null
"""
p[0] = self.handleNullable(p[1], p[2])
- def p_NonAnyTypeSequenceType(self, p):
+ def p_DistinguishableTypeSequenceType(self, p):
"""
- NonAnyType : SEQUENCE LT TypeWithExtendedAttributes GT Null
+ DistinguishableType : SEQUENCE LT TypeWithExtendedAttributes GT Null
"""
innerType = p[3]
type = IDLSequenceType(self.getLocation(p, 1), innerType)
p[0] = self.handleNullable(type, p[5])
- # Note: Promise<void> is allowed, so we want to parametrize on ReturnType,
- # not Type. Promise types can't be null, hence no "Null" in there.
- def p_NonAnyTypePromiseType(self, p):
+ def p_DistinguishableTypeRecordType(self, p):
"""
- NonAnyType : PROMISE LT ReturnType GT
- """
- p[0] = IDLPromiseType(self.getLocation(p, 1), p[3])
-
- def p_NonAnyTypeRecordType(self, p):
- """
- NonAnyType : RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null
+ DistinguishableType : RECORD LT StringType COMMA TypeWithExtendedAttributes GT Null
"""
keyType = p[3]
valueType = p[5]
type = IDLRecordType(self.getLocation(p, 1), keyType, valueType)
p[0] = self.handleNullable(type, p[7])
- def p_NonAnyTypeScopedName(self, p):
+ def p_DistinguishableTypeScopedName(self, p):
"""
- NonAnyType : ScopedName Null
+ DistinguishableType : ScopedName Null
"""
assert isinstance(p[1], IDLUnresolvedIdentifier)
@@ -6748,28 +6875,26 @@ class Parser(Tokenizer):
type = IDLUnresolvedType(self.getLocation(p, 1), p[1])
p[0] = self.handleNullable(type, p[2])
- def p_NonAnyTypeDate(self, p):
+ def p_DistinguishableTypeDate(self, p):
"""
- NonAnyType : DATE Null
+ DistinguishableType : DATE Null
"""
p[0] = self.handleNullable(BuiltinTypes[IDLBuiltinType.Types.date],
p[2])
def p_ConstType(self, p):
"""
- ConstType : PrimitiveType Null
+ ConstType : PrimitiveType
"""
- type = BuiltinTypes[p[1]]
- p[0] = self.handleNullable(type, p[2])
+ p[0] = BuiltinTypes[p[1]]
def p_ConstTypeIdentifier(self, p):
"""
- ConstType : IDENTIFIER Null
+ ConstType : IDENTIFIER
"""
identifier = IDLUnresolvedIdentifier(self.getLocation(p, 1), p[1])
- type = IDLUnresolvedType(self.getLocation(p, 1), identifier)
- p[0] = self.handleNullable(type, p[2])
+ p[0] = IDLUnresolvedType(self.getLocation(p, 1), identifier)
def p_PrimitiveTypeUint(self, p):
"""
@@ -7040,8 +7165,8 @@ class Parser(Tokenizer):
def _installBuiltins(self, scope):
assert isinstance(scope, IDLScope)
- # xrange omits the last value.
- for x in xrange(IDLBuiltinType.Types.ArrayBuffer, IDLBuiltinType.Types.Float64Array + 1):
+ # range omits the last value.
+ for x in range(IDLBuiltinType.Types.ArrayBuffer, IDLBuiltinType.Types.Float64Array + 1):
builtin = BuiltinTypes[x]
name = builtin.name
typedef = IDLTypedef(BuiltinLocation("<builtin type>"), scope, builtin, name)
@@ -7185,14 +7310,14 @@ def main():
f = open(fullPath, 'rb')
lines = f.readlines()
f.close()
- print fullPath
+ print(fullPath)
parser.parse(''.join(lines), fullPath)
parser.finish()
- except WebIDLError, e:
+ except WebIDLError as e:
if options.verbose_errors:
traceback.print_exc()
else:
- print e
+ print(e)
if __name__ == '__main__':
main()
diff --git a/components/script/dom/bindings/codegen/parser/abstract.patch b/components/script/dom/bindings/codegen/parser/abstract.patch
index 8e6c272b2c5..e2db398a051 100644
--- a/components/script/dom/bindings/codegen/parser/abstract.patch
+++ b/components/script/dom/bindings/codegen/parser/abstract.patch
@@ -1,12 +1,12 @@
--- WebIDL.py
+++ WebIDL.py
-@@ -1786,7 +1786,8 @@ class IDLInterface(IDLInterfaceOrNamespace):
- identifier == "ProbablyShortLivingWrapper" or
+@@ -1768,7 +1768,8 @@ class IDLInterface(IDLInterfaceOrNamespace):
identifier == "LegacyUnenumerableNamedProperties" or
identifier == "RunConstructorInCallerCompartment" or
-- identifier == "WantsEventListenerHooks"):
-+ identifier == "WantsEventListenerHooks" or
+ identifier == "WantsEventListenerHooks" or
+- identifier == "Serializable"):
++ identifier == "Serializable" or
+ identifier == "Abstract"):
# Known extended attributes that do not take values
if not attr.noArguments():
- raise WebIDLError("[%s] must take no arguments" % identifier, \ No newline at end of file
+ raise WebIDLError("[%s] must take no arguments" % identifier,
diff --git a/components/script/dom/bindings/codegen/parser/callback-location.patch b/components/script/dom/bindings/codegen/parser/callback-location.patch
index 00b3b034396..b7a308df631 100644
--- a/components/script/dom/bindings/codegen/parser/callback-location.patch
+++ b/components/script/dom/bindings/codegen/parser/callback-location.patch
@@ -1,7 +1,7 @@
--- WebIDL.py
+++ WebIDL.py
-@@ -2275,7 +2275,7 @@ class IDLUnresolvedType(IDLType):
- return typedefType.complete(scope)
+@@ -2283,7 +2283,7 @@ class IDLUnresolvedType(IDLType):
+ return typedefType.complete(scope).withExtendedAttributes(self.extraTypeAttributes)
elif obj.isCallback() and not obj.isInterface():
assert self.name.name == obj.identifier.name
- return IDLCallbackType(self.location, obj)
@@ -9,7 +9,7 @@
name = self.name.resolve(scope, None)
return IDLWrapperType(self.location, obj)
-@@ -6688,7 +6688,7 @@ class Parser(Tokenizer):
+@@ -6854,7 +6854,7 @@ class Parser(Tokenizer):
type = IDLTypedefType(self.getLocation(p, 1), obj.innerType,
obj.identifier.name)
elif obj.isCallback() and not obj.isInterface():
diff --git a/components/script/dom/bindings/codegen/parser/debug.patch b/components/script/dom/bindings/codegen/parser/debug.patch
index 49cb962cbba..f9b3d940399 100644
--- a/components/script/dom/bindings/codegen/parser/debug.patch
+++ b/components/script/dom/bindings/codegen/parser/debug.patch
@@ -1,6 +1,6 @@
--- WebIDL.py
+++ WebIDL.py
-@@ -6959,7 +6959,8 @@ class Parser(Tokenizer):
+@@ -7123,7 +7123,8 @@ class Parser(Tokenizer):
self.parser = yacc.yacc(module=self,
outputdir=outputdir,
tabmodule='webidlyacc',
diff --git a/components/script/dom/bindings/codegen/parser/inline.patch b/components/script/dom/bindings/codegen/parser/inline.patch
index e2b16f9b158..8337effd0f1 100644
--- a/components/script/dom/bindings/codegen/parser/inline.patch
+++ b/components/script/dom/bindings/codegen/parser/inline.patch
@@ -1,9 +1,9 @@
--- WebIDL.py
+++ WebIDL.py
-@@ -1787,7 +1787,8 @@ class IDLInterface(IDLInterfaceOrNamespace):
- identifier == "LegacyUnenumerableNamedProperties" or
+@@ -1769,7 +1769,8 @@ class IDLInterface(IDLInterfaceOrNamespace):
identifier == "RunConstructorInCallerCompartment" or
identifier == "WantsEventListenerHooks" or
+ identifier == "Serializable" or
- identifier == "Abstract"):
+ identifier == "Abstract" or
+ identifier == "Inline"):
diff --git a/components/script/dom/bindings/codegen/parser/pref-main-thread.patch b/components/script/dom/bindings/codegen/parser/pref-main-thread.patch
deleted file mode 100644
index a90d0593693..00000000000
--- a/components/script/dom/bindings/codegen/parser/pref-main-thread.patch
+++ /dev/null
@@ -1,27 +0,0 @@
---- WebIDL.py
-+++ WebIDL.py
-@@ -1362,12 +1362,6 @@ class IDLInterfaceOrNamespace(IDLObjectWithScope, IDLExposureMixins):
- for bindingAlias in member.bindingAliases:
- checkDuplicateNames(member, bindingAlias, "BindingAlias")
-
--
-- if self.getExtendedAttribute("Pref") and self.isExposedOffMainThread():
-- raise WebIDLError("[Pref] used on an interface that is not "
-- "main-thread-only",
-- [self.location])
--
- # Conditional exposure makes no sense for interfaces with no
- # interface object, unless they're navigator properties.
- # And SecureContext makes sense for interfaces with no interface object,
-@@ -3619,11 +3613,6 @@ class IDLInterfaceMember(IDLObjectWithIdentifier, IDLExposureMixins):
- IDLExposureMixins.finish(self, scope)
-
- def validate(self):
-- if self.getExtendedAttribute("Pref") and self.isExposedOffMainThread():
-- raise WebIDLError("[Pref] used on an interface member that is not "
-- "main-thread-only",
-- [self.location])
--
- if self.isAttr() or self.isMethod():
- if self.affects == "Everything" and self.dependsOn != "Everything":
- raise WebIDLError("Interface member is flagged as affecting "
diff --git a/components/script/dom/bindings/codegen/parser/runtests.py b/components/script/dom/bindings/codegen/parser/runtests.py
index 10dbc3292f7..0599bf55fec 100644
--- a/components/script/dom/bindings/codegen/parser/runtests.py
+++ b/components/script/dom/bindings/codegen/parser/runtests.py
@@ -62,7 +62,7 @@ def run_tests(tests, verbose):
harness.start()
try:
_test.WebIDLTest.__call__(WebIDL.Parser(), harness)
- except Exception, ex:
+ except Exception as ex:
print("TEST-UNEXPECTED-FAIL | Unhandled exception in test %s: %s" % (testpath, ex))
traceback.print_exc()
finally:
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_attr.py b/components/script/dom/bindings/codegen/parser/tests/test_attr.py
index ad7aabc1918..35f680aaa82 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_attr.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_attr.py
@@ -133,7 +133,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should not allow [SetterThrows] on readonly attributes")
@@ -146,7 +146,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should spell [Throws] correctly")
@@ -159,7 +159,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should not allow [SameObject] on attributes not of interface type")
@@ -172,6 +172,6 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(not threw, "Should allow [SameObject] on attributes of interface type")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_callback.py b/components/script/dom/bindings/codegen/parser/tests/test_callback.py
index 4dfda1c3c76..c304d085ce5 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_callback.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_callback.py
@@ -32,3 +32,6 @@ def WebIDLTest(parser, harness):
harness.ok(not isinstance(t, WebIDL.IDLWrapperType), "Attr has the right type")
harness.ok(isinstance(t, WebIDL.IDLNullableType), "Attr has the right type")
harness.ok(t.isCallback(), "Attr has the right type")
+
+ callback = results[1]
+ harness.ok(not callback.isConstructor(), "callback is not constructor")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_callback_constructor.py b/components/script/dom/bindings/codegen/parser/tests/test_callback_constructor.py
new file mode 100644
index 00000000000..4999deef623
--- /dev/null
+++ b/components/script/dom/bindings/codegen/parser/tests/test_callback_constructor.py
@@ -0,0 +1,63 @@
+import WebIDL
+
+def WebIDLTest(parser, harness):
+ parser.parse("""
+ interface TestCallbackConstructor {
+ attribute CallbackConstructorType? constructorAttribute;
+ };
+
+ callback constructor CallbackConstructorType = TestCallbackConstructor (unsigned long arg);
+ """)
+
+ results = parser.finish()
+
+ harness.ok(True, "TestCallbackConstructor interface parsed without error.")
+ harness.check(len(results), 2, "Should be two productions.")
+ iface = results[0]
+ harness.ok(isinstance(iface, WebIDL.IDLInterface),
+ "Should be an IDLInterface")
+ harness.check(iface.identifier.QName(), "::TestCallbackConstructor", "Interface has the right QName")
+ harness.check(iface.identifier.name, "TestCallbackConstructor", "Interface has the right name")
+ harness.check(len(iface.members), 1, "Expect %s members" % 1)
+
+ attr = iface.members[0]
+ harness.ok(isinstance(attr, WebIDL.IDLAttribute),
+ "Should be an IDLAttribute")
+ harness.ok(attr.isAttr(), "Should be an attribute")
+ harness.ok(not attr.isMethod(), "Attr is not an method")
+ harness.ok(not attr.isConst(), "Attr is not a const")
+ harness.check(attr.identifier.QName(), "::TestCallbackConstructor::constructorAttribute", "Attr has the right QName")
+ harness.check(attr.identifier.name, "constructorAttribute", "Attr has the right name")
+ t = attr.type
+ harness.ok(not isinstance(t, WebIDL.IDLWrapperType), "Attr has the right type")
+ harness.ok(isinstance(t, WebIDL.IDLNullableType), "Attr has the right type")
+ harness.ok(t.isCallback(), "Attr has the right type")
+
+ callback = results[1]
+ harness.ok(callback.isConstructor(), "Callback is constructor")
+
+ parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [TreatNonObjectAsNull]
+ callback constructor CallbackConstructorType = object ();
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Should throw on TreatNonObjectAsNull callback constructors")
+
+ parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [MOZ_CAN_RUN_SCRIPT_BOUNDARY]
+ callback constructor CallbackConstructorType = object ();
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Should not permit MOZ_CAN_RUN_SCRIPT_BOUNDARY callback constructors")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_cereactions.py b/components/script/dom/bindings/codegen/parser/tests/test_cereactions.py
index dba16f53302..f726907c2fc 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_cereactions.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_cereactions.py
@@ -38,7 +38,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, e:
+ except Exception as e:
harness.ok(False, "Shouldn't have thrown for [CEReactions] used on writable attribute. %s" % e)
threw = True
@@ -52,7 +52,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, e:
+ except Exception as e:
harness.ok(False, "Shouldn't have thrown for [CEReactions] used on regular operations. %s" % e)
threw = True
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_conditional_dictionary_member.py b/components/script/dom/bindings/codegen/parser/tests/test_conditional_dictionary_member.py
index 433b7e501a4..066300e8bb4 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_conditional_dictionary_member.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_conditional_dictionary_member.py
@@ -44,7 +44,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, exception:
+ except Exception as exception:
pass
harness.ok(exception, "Should have thrown.")
@@ -70,7 +70,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, exception:
+ except Exception as exception:
pass
harness.ok(exception, "Should have thrown (2).")
@@ -100,7 +100,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, exception:
+ except Exception as exception:
pass
harness.ok(exception, "Should have thrown (3).")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_const.py b/components/script/dom/bindings/codegen/parser/tests/test_const.py
index 80b6fb0e9c8..918f284a226 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_const.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_const.py
@@ -12,9 +12,6 @@ expected = [
("::TestConsts::ll", "ll", "LongLong", -8),
("::TestConsts::t", "t", "Boolean", True),
("::TestConsts::f", "f", "Boolean", False),
- ("::TestConsts::n", "n", "BooleanOrNull", None),
- ("::TestConsts::nt", "nt", "BooleanOrNull", True),
- ("::TestConsts::nf", "nf", "BooleanOrNull", False),
("::TestConsts::fl", "fl", "Float", 0.2),
("::TestConsts::db", "db", "Double", 0.2),
("::TestConsts::ufl", "ufl", "UnrestrictedFloat", 0.2),
@@ -39,9 +36,6 @@ def WebIDLTest(parser, harness):
const long long ll = -010;
const boolean t = true;
const boolean f = false;
- const boolean? n = null;
- const boolean? nt = true;
- const boolean? nf = false;
const float fl = 0.2;
const double db = 0.2;
const unrestricted float ufl = 0.2;
@@ -78,3 +72,16 @@ def WebIDLTest(parser, harness):
"Const's value has the same type as the type")
harness.check(const.value.value, value, "Const value has the right value.")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ interface TestConsts {
+ const boolean? zero = 0;
+ };
+ """)
+ parser.finish()
+ except:
+ threw = True
+ harness.ok(threw, "Nullable types are not allowed for consts.")
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
new file mode 100644
index 00000000000..14d42caf09c
--- /dev/null
+++ b/components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py
@@ -0,0 +1,87 @@
+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]
+ interface TestConstructorGlobal {
+ };
+ """)
+
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Should have thrown.")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [Global, NamedConstructor=FooBar]
+ interface TestNamedConstructorGlobal {
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Should have thrown.")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [NamedConstructor=FooBar, Global]
+ interface TestNamedConstructorGlobal {
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Should have thrown.")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [Global, HTMLConstructor]
+ interface TestHTMLConstructorGlobal {
+ };
+ """)
+
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Should have thrown.")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [HTMLConstructor, Global]
+ interface TestHTMLConstructorGlobal {
+ };
+ """)
+
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Should have thrown.")
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 40708e7870e..e5413350a28 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
@@ -13,6 +13,7 @@ def WebIDLTest(parser, harness):
harness.ok(threw, "Should have thrown.")
+ parser = parser.reset()
threw = False
try:
parser.parse("""
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 361b83ea52b..770f76b22f0 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_dictionary.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_dictionary.py
@@ -174,6 +174,22 @@ def WebIDLTest(parser, harness):
dictionary A {
};
interface X {
+ void doFoo(optional A arg);
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Trailing dictionary arg must have a default value")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ };
+ interface X {
void doFoo((A or DOMString) arg);
};
""")
@@ -191,6 +207,23 @@ def WebIDLTest(parser, harness):
dictionary A {
};
interface X {
+ void doFoo(optional (A or DOMString) arg);
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw,
+ "Trailing union arg containing a dictionary must have a default value")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ };
+ interface X {
void doFoo(A arg1, optional long arg2);
};
""")
@@ -207,6 +240,22 @@ def WebIDLTest(parser, harness):
dictionary A {
};
interface X {
+ void doFoo(optional A arg1, optional long arg2);
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "Dictionary arg followed by optional arg must have default value")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ };
+ interface X {
void doFoo(A arg1, optional long arg2, long arg3);
};
""")
@@ -236,6 +285,24 @@ def WebIDLTest(parser, harness):
"be optional")
parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ };
+ interface X {
+ void doFoo(optional (A or DOMString) arg1, optional long arg2);
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw,
+ "Union arg containing dictionary followed by optional arg must "
+ "have a default value")
+
+ parser = parser.reset()
parser.parse("""
dictionary A {
};
@@ -326,7 +393,7 @@ def WebIDLTest(parser, harness):
dictionary A {
};
interface X {
- void doFoo(optional A arg);
+ void doFoo(optional A arg = {});
};
""")
results = parser.finish()
@@ -337,13 +404,24 @@ def WebIDLTest(parser, harness):
dictionary A {
};
interface X {
- void doFoo(optional (A or DOMString) arg);
+ void doFoo(optional (A or DOMString) arg = {});
};
""")
results = parser.finish()
harness.ok(True, "Union arg containing a dictionary should actually parse")
parser = parser.reset()
+ parser.parse("""
+ dictionary A {
+ };
+ interface X {
+ void doFoo(optional (A or DOMString) arg = "abc");
+ };
+ """)
+ results = parser.finish()
+ harness.ok(True, "Union arg containing a dictionary with string default should actually parse")
+
+ parser = parser.reset()
threw = False
try:
parser.parse("""
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 73a32b0acfb..e88c2b50d98 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py
@@ -3,13 +3,16 @@ def firstArgType(method):
def WebIDLTest(parser, harness):
parser.parse("""
+ // Give our dictionary a required member so we don't need to
+ // mess with optional and default values.
dictionary Dict {
+ required long member;
};
callback interface Foo {
};
interface Bar {
// Bit of a pain to get things that have dictionary types
- void passDict(optional Dict arg);
+ void passDict(Dict arg);
void passFoo(Foo arg);
void passNullableUnion((object? or DOMString) arg);
void passNullable(Foo? arg);
@@ -156,8 +159,8 @@ def WebIDLTest(parser, harness):
"AncestorInterface", "UnrelatedInterface",
"ImplementedInterface", "CallbackInterface",
"CallbackInterface?", "CallbackInterface2",
- "object", "Callback", "Callback2", "optional Dict",
- "optional Dict2", "sequence<long>", "sequence<short>",
+ "object", "Callback", "Callback2", "Dict",
+ "Dict2", "sequence<long>", "sequence<short>",
"record<DOMString, object>",
"record<USVString, Dict>",
"record<ByteString, long>",
@@ -165,7 +168,7 @@ def WebIDLTest(parser, harness):
"Promise<any>", "Promise<any>?",
"USVString", "ArrayBuffer", "ArrayBufferView", "SharedArrayBuffer",
"Uint8Array", "Uint16Array",
- "(long or Callback)", "optional (long or Dict)",
+ "(long or Callback)", "(long or Dict)",
]
# When we can parse Date, we need to add it here.
# XXXbz we can, and should really do that...
@@ -174,7 +177,7 @@ def WebIDLTest(parser, harness):
def allBut(list1, list2):
return [a for a in list1 if a not in list2 and
(a != "any" and a != "Promise<any>" and a != "Promise<any>?")]
- unions = [ "(long or Callback)", "optional (long or Dict)" ]
+ unions = [ "(long or Callback)", "(long or Dict)" ]
numerics = [ "long", "short", "long?", "short?" ]
booleans = [ "boolean", "boolean?" ]
primitives = numerics + booleans
@@ -189,7 +192,7 @@ def WebIDLTest(parser, harness):
interfaces = [ "Interface", "Interface?", "AncestorInterface",
"UnrelatedInterface", "ImplementedInterface" ] + bufferSourceTypes + sharedBufferSourceTypes
nullables = (["long?", "short?", "boolean?", "Interface?",
- "CallbackInterface?", "optional Dict", "optional Dict2",
+ "CallbackInterface?", "Dict", "Dict2",
"Date?", "any", "Promise<any>?"] +
allBut(unions, [ "(long or Callback)" ]))
dates = [ "Date", "Date?" ]
@@ -233,8 +236,8 @@ def WebIDLTest(parser, harness):
setDistinguishable("object", nonObjects)
setDistinguishable("Callback", nonUserObjects)
setDistinguishable("Callback2", nonUserObjects)
- setDistinguishable("optional Dict", allBut(nonUserObjects, nullables))
- setDistinguishable("optional Dict2", allBut(nonUserObjects, nullables))
+ setDistinguishable("Dict", allBut(nonUserObjects, nullables))
+ setDistinguishable("Dict2", allBut(nonUserObjects, nullables))
setDistinguishable("sequence<long>",
allBut(argTypes, sequences + ["object"]))
setDistinguishable("sequence<short>",
@@ -254,7 +257,7 @@ def WebIDLTest(parser, harness):
setDistinguishable("SharedArrayBuffer", allBut(argTypes, ["SharedArrayBuffer", "object"]))
setDistinguishable("(long or Callback)",
allBut(nonUserObjects, numerics))
- setDistinguishable("optional (long or Dict)",
+ setDistinguishable("(long or Dict)",
allBut(nonUserObjects, numerics + nullables))
def areDistinguishable(type1, type2):
@@ -273,8 +276,10 @@ def WebIDLTest(parser, harness):
callback interface CallbackInterface2 {};
callback Callback = any();
callback Callback2 = long(short arg);
- dictionary Dict {};
- dictionary Dict2 {};
+ // Give our dictionaries required members so we don't need to
+ // mess with optional and default values.
+ dictionary Dict { required long member; };
+ dictionary Dict2 { required long member; };
interface TestInterface {%s
};
"""
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_empty_sequence_default_value.py b/components/script/dom/bindings/codegen/parser/tests/test_empty_sequence_default_value.py
index 350ae72f022..a713266c88e 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_empty_sequence_default_value.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_empty_sequence_default_value.py
@@ -10,7 +10,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw, "Constant cannot have [] as a default value")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_error_colno.py b/components/script/dom/bindings/codegen/parser/tests/test_error_colno.py
index ca0674aec04..7afd15513c6 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_error_colno.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_error_colno.py
@@ -8,7 +8,7 @@ def WebIDLTest(parser, harness):
try:
parser.parse(input)
results = parser.finish()
- except WebIDL.WebIDLError, e:
+ except WebIDL.WebIDLError as e:
threw = True
lines = str(e).split('\n')
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_error_lineno.py b/components/script/dom/bindings/codegen/parser/tests/test_error_lineno.py
index f11222e7a4d..70bb1883682 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_error_lineno.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_error_lineno.py
@@ -14,7 +14,7 @@ interface ?"""
try:
parser.parse(input)
results = parser.finish()
- except WebIDL.WebIDLError, e:
+ except WebIDL.WebIDLError as e:
threw = True
lines = str(e).split('\n')
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_exposed_extended_attribute.py b/components/script/dom/bindings/codegen/parser/tests/test_exposed_extended_attribute.py
index 48957098bfe..a6c04e30caf 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_exposed_extended_attribute.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_exposed_extended_attribute.py
@@ -124,7 +124,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown on invalid Exposed value on interface.")
@@ -140,7 +140,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown on invalid Exposed value on attribute.")
@@ -156,7 +156,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown on invalid Exposed value on operation.")
@@ -172,7 +172,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown on invalid Exposed value on constant.")
@@ -192,7 +192,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown on member exposed where its interface is not.")
@@ -216,7 +216,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown on LHS of implements being exposed where RHS is not.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_float_types.py b/components/script/dom/bindings/codegen/parser/tests/test_float_types.py
index 718f09c114b..b7325cf9d26 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_float_types.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_float_types.py
@@ -68,7 +68,7 @@ def WebIDLTest(parser, harness):
long m(float arg);
};
""")
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "[LenientFloat] only allowed on void methods")
@@ -81,7 +81,7 @@ def WebIDLTest(parser, harness):
void m(unrestricted float arg);
};
""")
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "[LenientFloat] only allowed on methods with unrestricted float args")
@@ -94,7 +94,7 @@ def WebIDLTest(parser, harness):
void m(sequence<unrestricted float> arg);
};
""")
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "[LenientFloat] only allowed on methods with unrestricted float args (2)")
@@ -107,7 +107,7 @@ def WebIDLTest(parser, harness):
void m((unrestricted float or FloatTypes) arg);
};
""")
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "[LenientFloat] only allowed on methods with unrestricted float args (3)")
@@ -120,6 +120,6 @@ def WebIDLTest(parser, harness):
readonly attribute float foo;
};
""")
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "[LenientFloat] only allowed on writable attributes")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_identifier_conflict.py b/components/script/dom/bindings/codegen/parser/tests/test_identifier_conflict.py
index b510a30c044..0e9a6654aa7 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_identifier_conflict.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_identifier_conflict.py
@@ -9,7 +9,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
harness.ok(False, "Should fail to parse")
- except Exception, e:
+ except Exception as e:
harness.ok("Name collision" in e.message,
"Should have name collision for interface")
@@ -21,7 +21,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
harness.ok(False, "Should fail to parse")
- except Exception, e:
+ except Exception as e:
harness.ok("Name collision" in e.message,
"Should have name collision for dictionary")
@@ -33,7 +33,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
harness.ok(False, "Should fail to parse")
- except Exception, e:
+ except Exception as e:
harness.ok("Multiple unresolvable definitions" in e.message,
"Should have name collision for dictionary")
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 a23243abe61..ea3e842907a 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_interface.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_interface.py
@@ -374,3 +374,89 @@ def WebIDLTest(parser, harness):
threw = True
harness.ok(threw,
"Should not allow unknown extended attributes on interfaces")
+
+ parser = parser.reset()
+ parser.parse("""
+ [Global] interface Window {};
+ [Exposed=Window, LegacyWindowAlias=A]
+ interface B {};
+ [Exposed=Window, LegacyWindowAlias=(C, D)]
+ interface E {};
+ """);
+ results = parser.finish();
+ harness.check(results[1].legacyWindowAliases, ["A"],
+ "Should support a single identifier")
+ harness.check(results[2].legacyWindowAliases, ["C", "D"],
+ "Should support an identifier list")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [LegacyWindowAlias]
+ interface A {};
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow [LegacyWindowAlias] with no value")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [Exposed=Worker, LegacyWindowAlias=B]
+ interface A {};
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow [LegacyWindowAlias] without Window exposure")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [Global] interface Window {};
+ interface A {};
+ [Exposed=Window, LegacyWindowAlias=A]
+ interface B {};
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow [LegacyWindowAlias] to conflict with other identifiers")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [Global] interface Window {};
+ [Exposed=Window, LegacyWindowAlias=A]
+ interface B {};
+ interface A {};
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow [LegacyWindowAlias] to conflict with other identifiers")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [Global] interface Window {};
+ [Exposed=Window, LegacyWindowAlias=A]
+ interface B {};
+ [Exposed=Window, LegacyWindowAlias=A]
+ interface C {};
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow [LegacyWindowAlias] to conflict with other identifiers")
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 ee5d870c200..72aa7617b84 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
@@ -37,10 +37,10 @@ def WebIDLTest(parser, harness):
p.finish()
harness.ok(False,
prefix + " - Interface passed when should've failed")
- except WebIDL.WebIDLError, e:
+ except WebIDL.WebIDLError as e:
harness.ok(True,
prefix + " - Interface failed as expected")
- except Exception, e:
+ except Exception as e:
harness.ok(False,
prefix + " - Interface failed but not as a WebIDLError exception: %s" % e)
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_lenientSetter.py b/components/script/dom/bindings/codegen/parser/tests/test_lenientSetter.py
index 50e9df658e9..78a9ffe9eaa 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_lenientSetter.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_lenientSetter.py
@@ -1,6 +1,6 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
def should_throw(parser, harness, message, code):
parser = parser.reset();
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_method.py b/components/script/dom/bindings/codegen/parser/tests/test_method.py
index 29e6d6b25b7..88ee874386c 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_method.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_method.py
@@ -120,7 +120,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(not threw, "Should allow integer to float type corecion")
@@ -133,7 +133,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should not allow [GetterThrows] on methods")
@@ -146,7 +146,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should not allow [SetterThrows] on methods")
@@ -159,7 +159,7 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should spell [Throws] correctly on methods")
@@ -172,6 +172,85 @@ def WebIDLTest(parser, harness):
};
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should not allow __noSuchMethod__ methods")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ interface A {
+ [Throws, LenientFloat]
+ void foo(float myFloat);
+ [Throws]
+ void foo();
+ };
+ """)
+ results = parser.finish()
+ except Exception as x:
+ threw = True
+ harness.ok(not threw, "Should allow LenientFloat to be only in a specific overload")
+
+ parser = parser.reset()
+ parser.parse("""
+ interface A {
+ [Throws]
+ void foo();
+ [Throws, LenientFloat]
+ void foo(float myFloat);
+ };
+ """)
+ results = parser.finish()
+ iface = results[0]
+ methods = iface.members
+ lenientFloat = methods[0].getExtendedAttribute("LenientFloat")
+ harness.ok(lenientFloat is not None, "LenientFloat in overloads must be added to the method")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ interface A {
+ [Throws, LenientFloat]
+ void foo(float myFloat);
+ [Throws]
+ void foo(float myFloat, float yourFloat);
+ };
+ """)
+ results = parser.finish()
+ except Exception as x:
+ threw = True
+ harness.ok(threw, "Should prevent overloads from getting different restricted float behavior")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ interface A {
+ [Throws]
+ void foo(float myFloat, float yourFloat);
+ [Throws, LenientFloat]
+ void foo(float myFloat);
+ };
+ """)
+ results = parser.finish()
+ except Exception as x:
+ threw = True
+ harness.ok(threw, "Should prevent overloads from getting different restricted float behavior (2)")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ interface A {
+ [Throws, LenientFloat]
+ void foo(float myFloat);
+ [Throws, LenientFloat]
+ void foo(short myShort);
+ };
+ """)
+ results = parser.finish()
+ except Exception as x:
+ threw = True
+ harness.ok(threw, "Should prevent overloads from getting redundant [LenientFloat]")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_namespace.py b/components/script/dom/bindings/codegen/parser/tests/test_namespace.py
index 74533a1770e..62edb270c63 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_namespace.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_namespace.py
@@ -70,7 +70,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -85,7 +85,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -104,7 +104,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -123,7 +123,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -142,7 +142,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -161,7 +161,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -180,7 +180,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -199,7 +199,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -218,6 +218,6 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_record.py b/components/script/dom/bindings/codegen/parser/tests/test_record.py
index c3fe29fa060..d50572caf07 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_record.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_record.py
@@ -33,7 +33,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown because record can't have void as value type.")
@@ -47,7 +47,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw,
"Should have thrown on dictionary containing itself via record.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_replaceable.py b/components/script/dom/bindings/codegen/parser/tests/test_replaceable.py
index 78b1bf7e60b..93ee42ed919 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_replaceable.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_replaceable.py
@@ -1,6 +1,6 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# 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/.
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
def should_throw(parser, harness, message, code):
parser = parser.reset();
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_typedef.py b/components/script/dom/bindings/codegen/parser/tests/test_typedef.py
index 8921985c5ca..b5fc1c68890 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_typedef.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_typedef.py
@@ -4,15 +4,15 @@ def WebIDLTest(parser, harness):
typedef long? mynullablelong;
interface Foo {
const mylong X = 5;
- const mynullablelong Y = 7;
- const mynullablelong Z = null;
- void foo(mylong arg);
+ void foo(optional mynullablelong arg = 7);
+ void bar(optional mynullablelong arg = null);
+ void baz(mylong arg);
};
""")
results = parser.finish()
- harness.check(results[2].members[1].type.name, "LongOrNull",
+ harness.check(results[2].members[1].signatures()[0][1][0].type.name, "LongOrNull",
"Should expand typedefs")
parser = parser.reset()
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_unenumerable_own_properties.py b/components/script/dom/bindings/codegen/parser/tests/test_unenumerable_own_properties.py
index d017d5ce092..d28cc1ec052 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_unenumerable_own_properties.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_unenumerable_own_properties.py
@@ -24,7 +24,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -39,7 +39,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
@@ -59,6 +59,6 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception, x:
+ except Exception as x:
threw = True
harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_unforgeable.py b/components/script/dom/bindings/codegen/parser/tests/test_unforgeable.py
index 3787e8c6af1..44a168670ed 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_unforgeable.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_unforgeable.py
@@ -111,7 +111,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw,
"Should have thrown when shadowing unforgeable attribute on "
@@ -130,7 +130,7 @@ def WebIDLTest(parser, harness):
""")
results = parser.finish()
- except Exception,x:
+ except Exception as x:
threw = True
harness.ok(threw,
"Should have thrown when shadowing unforgeable operation on "
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_union.py b/components/script/dom/bindings/codegen/parser/tests/test_union.py
index 9c4f2a56ab6..801314fd0bd 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_union.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_union.py
@@ -17,7 +17,7 @@ def combinations(iterable, r):
n = len(pool)
if r > n:
return
- indices = range(r)
+ indices = list(range(r))
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(r)):
diff --git a/components/script/dom/bindings/codegen/parser/update.sh b/components/script/dom/bindings/codegen/parser/update.sh
index 213aba6df89..fee9720ab2d 100755
--- a/components/script/dom/bindings/codegen/parser/update.sh
+++ b/components/script/dom/bindings/codegen/parser/update.sh
@@ -1,7 +1,6 @@
wget https://hg.mozilla.org/mozilla-central/raw-file/tip/dom/bindings/parser/WebIDL.py -O WebIDL.py
patch < abstract.patch
patch < debug.patch
-patch < pref-main-thread.patch
patch < callback-location.patch
patch < union-typedef.patch
patch < inline.patch
diff --git a/components/script/dom/webidls/AnalyserNode.webidl b/components/script/dom/webidls/AnalyserNode.webidl
index 6747cda0690..07826c16fab 100644
--- a/components/script/dom/webidls/AnalyserNode.webidl
+++ b/components/script/dom/webidls/AnalyserNode.webidl
@@ -14,7 +14,7 @@ dictionary AnalyserOptions : AudioNodeOptions {
};
[Exposed=Window,
- Constructor (BaseAudioContext context, optional AnalyserOptions options)]
+ Constructor (BaseAudioContext context, optional AnalyserOptions options = {})]
interface AnalyserNode : AudioNode {
void getFloatFrequencyData (Float32Array array);
void getByteFrequencyData (Uint8Array array);
diff --git a/components/script/dom/webidls/AudioBufferSourceNode.webidl b/components/script/dom/webidls/AudioBufferSourceNode.webidl
index 929cdc05c1a..da1222a6935 100644
--- a/components/script/dom/webidls/AudioBufferSourceNode.webidl
+++ b/components/script/dom/webidls/AudioBufferSourceNode.webidl
@@ -16,7 +16,7 @@ dictionary AudioBufferSourceOptions {
};
[Exposed=Window,
- Constructor (BaseAudioContext context, optional AudioBufferSourceOptions options)]
+ Constructor (BaseAudioContext context, optional AudioBufferSourceOptions options = {})]
interface AudioBufferSourceNode : AudioScheduledSourceNode {
[Throws] attribute AudioBuffer? buffer;
readonly attribute AudioParam playbackRate;
diff --git a/components/script/dom/webidls/AudioContext.webidl b/components/script/dom/webidls/AudioContext.webidl
index c47813d21e0..6acf7ec3e7c 100644
--- a/components/script/dom/webidls/AudioContext.webidl
+++ b/components/script/dom/webidls/AudioContext.webidl
@@ -23,7 +23,7 @@ dictionary AudioTimestamp {
};
[Exposed=Window,
- Constructor(optional AudioContextOptions contextOptions)]
+ Constructor(optional AudioContextOptions contextOptions = {})]
interface AudioContext : BaseAudioContext {
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 e8ddaee1cac..d222e9a7297 100644
--- a/components/script/dom/webidls/BiquadFilterNode.webidl
+++ b/components/script/dom/webidls/BiquadFilterNode.webidl
@@ -26,7 +26,7 @@ dictionary BiquadFilterOptions : AudioNodeOptions {
};
[Exposed=Window,
- Constructor (BaseAudioContext context, optional BiquadFilterOptions options)]
+ Constructor (BaseAudioContext context, optional BiquadFilterOptions options = {})]
interface BiquadFilterNode : AudioNode {
attribute BiquadFilterType type;
readonly attribute AudioParam frequency;
diff --git a/components/script/dom/webidls/Blob.webidl b/components/script/dom/webidls/Blob.webidl
index b06da6d2fae..d58c67a6398 100644
--- a/components/script/dom/webidls/Blob.webidl
+++ b/components/script/dom/webidls/Blob.webidl
@@ -5,7 +5,7 @@
// https://w3c.github.io/FileAPI/#blob
[Constructor(optional sequence<BlobPart> blobParts,
- optional BlobPropertyBag options),
+ optional BlobPropertyBag options = {}),
Exposed=(Window,Worker)]
interface Blob {
diff --git a/components/script/dom/webidls/Bluetooth.webidl b/components/script/dom/webidls/Bluetooth.webidl
index c5ae3f8f26c..4491a296c41 100644
--- a/components/script/dom/webidls/Bluetooth.webidl
+++ b/components/script/dom/webidls/Bluetooth.webidl
@@ -34,7 +34,7 @@ interface Bluetooth : EventTarget {
// [SecureContext, SameObject]
// readonly attribute BluetoothDevice? referringDevice;
[SecureContext]
- Promise<BluetoothDevice> requestDevice(optional RequestDeviceOptions options);
+ Promise<BluetoothDevice> requestDevice(optional RequestDeviceOptions options = {});
};
// Bluetooth implements BluetoothDeviceEventHandlers;
diff --git a/components/script/dom/webidls/ChannelMergerNode.webidl b/components/script/dom/webidls/ChannelMergerNode.webidl
index f8345fe4512..33fc0e6ea67 100644
--- a/components/script/dom/webidls/ChannelMergerNode.webidl
+++ b/components/script/dom/webidls/ChannelMergerNode.webidl
@@ -11,6 +11,6 @@ dictionary ChannelMergerOptions : AudioNodeOptions {
};
[Exposed=Window,
- Constructor (BaseAudioContext context, optional ChannelMergerOptions options)]
+ Constructor (BaseAudioContext context, optional ChannelMergerOptions options = {})]
interface ChannelMergerNode : AudioNode {
};
diff --git a/components/script/dom/webidls/ChannelSplitterNode.webidl b/components/script/dom/webidls/ChannelSplitterNode.webidl
index 1056fce61bf..d776ac62ac3 100644
--- a/components/script/dom/webidls/ChannelSplitterNode.webidl
+++ b/components/script/dom/webidls/ChannelSplitterNode.webidl
@@ -11,6 +11,6 @@ dictionary ChannelSplitterOptions : AudioNodeOptions {
};
[Exposed=Window,
- Constructor (BaseAudioContext context, optional ChannelSplitterOptions options)]
+ Constructor (BaseAudioContext context, optional ChannelSplitterOptions options = {})]
interface ChannelSplitterNode : AudioNode {
};
diff --git a/components/script/dom/webidls/CloseEvent.webidl b/components/script/dom/webidls/CloseEvent.webidl
index f69d08c37a8..a689b337328 100644
--- a/components/script/dom/webidls/CloseEvent.webidl
+++ b/components/script/dom/webidls/CloseEvent.webidl
@@ -3,7 +3,7 @@
* 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)]
+[Constructor(DOMString type, optional CloseEventInit eventInitDict = {}), Exposed=(Window,Worker)]
interface CloseEvent : Event {
readonly attribute boolean wasClean;
readonly attribute unsigned short code;
diff --git a/components/script/dom/webidls/CompositionEvent.webidl b/components/script/dom/webidls/CompositionEvent.webidl
index c018aa6deac..043873c9354 100644
--- a/components/script/dom/webidls/CompositionEvent.webidl
+++ b/components/script/dom/webidls/CompositionEvent.webidl
@@ -8,7 +8,7 @@
*/
// https://w3c.github.io/uievents/#idl-compositionevent
-[Pref="dom.compositionevent.enabled", Constructor(DOMString type, optional CompositionEventInit eventInitDict)]
+[Pref="dom.compositionevent.enabled", Constructor(DOMString type, optional CompositionEventInit eventInitDict = {})]
interface CompositionEvent : UIEvent {
readonly attribute DOMString data;
};
diff --git a/components/script/dom/webidls/CustomElementRegistry.webidl b/components/script/dom/webidls/CustomElementRegistry.webidl
index 1072eed0031..d2ebff0bdf0 100644
--- a/components/script/dom/webidls/CustomElementRegistry.webidl
+++ b/components/script/dom/webidls/CustomElementRegistry.webidl
@@ -6,7 +6,7 @@
[Pref="dom.customelements.enabled"]
interface CustomElementRegistry {
[Throws, CEReactions]
- void define(DOMString name, CustomElementConstructor constructor_, optional ElementDefinitionOptions options);
+ void define(DOMString name, CustomElementConstructor constructor_, optional ElementDefinitionOptions options = {});
any get(DOMString name);
diff --git a/components/script/dom/webidls/CustomEvent.webidl b/components/script/dom/webidls/CustomEvent.webidl
index 2e77d67fe4b..5bede1513f2 100644
--- a/components/script/dom/webidls/CustomEvent.webidl
+++ b/components/script/dom/webidls/CustomEvent.webidl
@@ -13,7 +13,7 @@
* http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.
*/
-[Constructor(DOMString type, optional CustomEventInit eventInitDict),
+[Constructor(DOMString type, optional CustomEventInit eventInitDict = {}),
Exposed=(Window,Worker)]
interface CustomEvent : Event {
readonly attribute any detail;
diff --git a/components/script/dom/webidls/DOMMatrix.webidl b/components/script/dom/webidls/DOMMatrix.webidl
index d617f20af99..ffaa720b7d9 100644
--- a/components/script/dom/webidls/DOMMatrix.webidl
+++ b/components/script/dom/webidls/DOMMatrix.webidl
@@ -14,7 +14,7 @@
Exposed=(Window,Worker)]
interface DOMMatrix : DOMMatrixReadOnly {
- [NewObject, Throws] static DOMMatrix fromMatrix(optional DOMMatrixInit other);
+ [NewObject, Throws] static DOMMatrix fromMatrix(optional DOMMatrixInit other = {});
[NewObject, Throws] static DOMMatrix fromFloat32Array(Float32Array array32);
[NewObject, Throws] static DOMMatrix fromFloat64Array(Float64Array array64);
@@ -44,8 +44,8 @@ interface DOMMatrix : DOMMatrixReadOnly {
inherit attribute unrestricted double m44;
// Mutable transform methods
- [Throws] DOMMatrix multiplySelf(optional DOMMatrixInit other);
- [Throws] DOMMatrix preMultiplySelf(optional DOMMatrixInit other);
+ [Throws] DOMMatrix multiplySelf(optional DOMMatrixInit other = {});
+ [Throws] DOMMatrix preMultiplySelf(optional DOMMatrixInit other = {});
DOMMatrix translateSelf(optional unrestricted double tx = 0,
optional unrestricted double ty = 0,
optional unrestricted double tz = 0);
diff --git a/components/script/dom/webidls/DOMMatrixReadOnly.webidl b/components/script/dom/webidls/DOMMatrixReadOnly.webidl
index eb7051ba529..ea5d8caf8e5 100644
--- a/components/script/dom/webidls/DOMMatrixReadOnly.webidl
+++ b/components/script/dom/webidls/DOMMatrixReadOnly.webidl
@@ -14,7 +14,7 @@
Exposed=(Window,Worker)]
interface DOMMatrixReadOnly {
- [NewObject, Throws] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other);
+ [NewObject, Throws] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other = {});
[NewObject, Throws] static DOMMatrixReadOnly fromFloat32Array(Float32Array array32);
[NewObject, Throws] static DOMMatrixReadOnly fromFloat64Array(Float64Array array64);
@@ -73,12 +73,12 @@ interface DOMMatrixReadOnly {
optional unrestricted double angle = 0);
DOMMatrix skewX(optional unrestricted double sx = 0);
DOMMatrix skewY(optional unrestricted double sy = 0);
- [Throws] DOMMatrix multiply(optional DOMMatrixInit other);
+ [Throws] DOMMatrix multiply(optional DOMMatrixInit other = {});
DOMMatrix flipX();
DOMMatrix flipY();
DOMMatrix inverse();
- DOMPoint transformPoint(optional DOMPointInit point);
+ DOMPoint transformPoint(optional DOMPointInit point = {});
Float32Array toFloat32Array();
Float64Array toFloat64Array();
// stringifier;
diff --git a/components/script/dom/webidls/DOMPoint.webidl b/components/script/dom/webidls/DOMPoint.webidl
index 9f75a1c835f..34a355f6085 100644
--- a/components/script/dom/webidls/DOMPoint.webidl
+++ b/components/script/dom/webidls/DOMPoint.webidl
@@ -14,7 +14,7 @@
optional unrestricted double z = 0, optional unrestricted double w = 1),
Exposed=(Window,Worker)]
interface DOMPoint : DOMPointReadOnly {
- [NewObject] static DOMPoint fromPoint(optional DOMPointInit other = null);
+ [NewObject] static DOMPoint fromPoint(optional DOMPointInit other = {});
inherit attribute unrestricted double x;
inherit attribute unrestricted double y;
diff --git a/components/script/dom/webidls/DOMPointReadOnly.webidl b/components/script/dom/webidls/DOMPointReadOnly.webidl
index b6478f31337..23643179333 100644
--- a/components/script/dom/webidls/DOMPointReadOnly.webidl
+++ b/components/script/dom/webidls/DOMPointReadOnly.webidl
@@ -14,7 +14,7 @@
optional unrestricted double z = 0, optional unrestricted double w = 1),
Exposed=(Window,Worker)]
interface DOMPointReadOnly {
- [NewObject] static DOMPointReadOnly fromPoint(optional DOMPointInit other = null);
+ [NewObject] static DOMPointReadOnly fromPoint(optional DOMPointInit other = {});
readonly attribute unrestricted double x;
readonly attribute unrestricted double y;
diff --git a/components/script/dom/webidls/DOMQuad.webidl b/components/script/dom/webidls/DOMQuad.webidl
index 397118a88aa..8711dd44215 100644
--- a/components/script/dom/webidls/DOMQuad.webidl
+++ b/components/script/dom/webidls/DOMQuad.webidl
@@ -10,12 +10,12 @@
* related or neighboring rights to this work.
*/
-[Constructor(optional DOMPointInit p1, optional DOMPointInit p2,
- optional DOMPointInit p3, optional DOMPointInit p4),
+[Constructor(optional DOMPointInit p1 = {}, optional DOMPointInit p2 = {},
+ optional DOMPointInit p3 = {}, optional DOMPointInit p4 = {}),
Exposed=(Window,Worker)]
interface DOMQuad {
- [NewObject] static DOMQuad fromRect(optional DOMRectInit other);
- [NewObject] static DOMQuad fromQuad(optional DOMQuadInit other);
+ [NewObject] static DOMQuad fromRect(optional DOMRectInit other = {});
+ [NewObject] static DOMQuad fromQuad(optional DOMQuadInit other = {});
[SameObject] readonly attribute DOMPoint p1;
[SameObject] readonly attribute DOMPoint p2;
@@ -25,8 +25,8 @@ interface DOMQuad {
};
dictionary DOMQuadInit {
- DOMPointInit p1 = null;
- DOMPointInit p2 = null;
- DOMPointInit p3 = null;
- DOMPointInit p4 = null;
+ DOMPointInit p1 = {};
+ DOMPointInit p2 = {};
+ DOMPointInit p3 = {};
+ DOMPointInit p4 = {};
};
diff --git a/components/script/dom/webidls/Document.webidl b/components/script/dom/webidls/Document.webidl
index 85c3362f42e..0127f8ecf98 100644
--- a/components/script/dom/webidls/Document.webidl
+++ b/components/script/dom/webidls/Document.webidl
@@ -33,9 +33,9 @@ interface Document : Node {
HTMLCollection getElementsByClassName(DOMString classNames);
[CEReactions, NewObject, Throws]
- Element createElement(DOMString localName, optional ElementCreationOptions options);
+ Element createElement(DOMString localName, optional ElementCreationOptions options = {});
[CEReactions, NewObject, Throws]
- Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional ElementCreationOptions options);
+ Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional ElementCreationOptions options = {});
[NewObject]
DocumentFragment createDocumentFragment();
[NewObject]
diff --git a/components/script/dom/webidls/Element.webidl b/components/script/dom/webidls/Element.webidl
index af14f81b373..f45dfe53f1a 100644
--- a/components/script/dom/webidls/Element.webidl
+++ b/components/script/dom/webidls/Element.webidl
@@ -91,12 +91,12 @@ partial interface Element {
[NewObject]
DOMRect getBoundingClientRect();
- void scroll(optional ScrollToOptions options);
+ void scroll(optional ScrollToOptions options = {});
void scroll(unrestricted double x, unrestricted double y);
- void scrollTo(optional ScrollToOptions options);
+ void scrollTo(optional ScrollToOptions options = {});
void scrollTo(unrestricted double x, unrestricted double y);
- void scrollBy(optional ScrollToOptions options);
+ void scrollBy(optional ScrollToOptions options = {});
void scrollBy(unrestricted double x, unrestricted double y);
attribute unrestricted double scrollTop;
attribute unrestricted double scrollLeft;
diff --git a/components/script/dom/webidls/ErrorEvent.webidl b/components/script/dom/webidls/ErrorEvent.webidl
index 9fb248e6095..165fbd35110 100644
--- a/components/script/dom/webidls/ErrorEvent.webidl
+++ b/components/script/dom/webidls/ErrorEvent.webidl
@@ -4,7 +4,7 @@
// https://html.spec.whatwg.org/multipage/#the-errorevent-interface
-[Constructor(DOMString type, optional ErrorEventInit eventInitDict), Exposed=(Window,Worker)]
+[Constructor(DOMString type, optional ErrorEventInit eventInitDict = {}), Exposed=(Window,Worker)]
interface ErrorEvent : Event {
readonly attribute DOMString message;
readonly attribute DOMString filename;
diff --git a/components/script/dom/webidls/Event.webidl b/components/script/dom/webidls/Event.webidl
index 2bf103149d9..c688daedb2e 100644
--- a/components/script/dom/webidls/Event.webidl
+++ b/components/script/dom/webidls/Event.webidl
@@ -6,7 +6,7 @@
* https://dom.spec.whatwg.org/#event
*/
-[Constructor(DOMString type, optional EventInit eventInitDict), Exposed=(Window,Worker)]
+[Constructor(DOMString type, optional EventInit eventInitDict = {}), Exposed=(Window,Worker)]
interface Event {
[Pure]
readonly attribute DOMString type;
diff --git a/components/script/dom/webidls/EventSource.webidl b/components/script/dom/webidls/EventSource.webidl
index d1c33a6c3fc..7784c97d4ca 100644
--- a/components/script/dom/webidls/EventSource.webidl
+++ b/components/script/dom/webidls/EventSource.webidl
@@ -6,7 +6,7 @@
* https://html.spec.whatwg.org/multipage/#eventsource
*/
-[Constructor(DOMString url, optional EventSourceInit eventSourceInitDict),
+[Constructor(DOMString url, optional EventSourceInit eventSourceInitDict = {}),
Exposed=(Window,Worker)]
interface EventSource : EventTarget {
readonly attribute DOMString url;
diff --git a/components/script/dom/webidls/EventTarget.webidl b/components/script/dom/webidls/EventTarget.webidl
index b0a6e77035e..283f86a806f 100644
--- a/components/script/dom/webidls/EventTarget.webidl
+++ b/components/script/dom/webidls/EventTarget.webidl
@@ -10,13 +10,13 @@ interface EventTarget {
void addEventListener(
DOMString type,
EventListener? callback,
- optional (AddEventListenerOptions or boolean) options
+ optional (AddEventListenerOptions or boolean) options = {}
);
void removeEventListener(
DOMString type,
EventListener? callback,
- optional (EventListenerOptions or boolean) options
+ optional (EventListenerOptions or boolean) options = {}
);
[Throws]
diff --git a/components/script/dom/webidls/ExtendableEvent.webidl b/components/script/dom/webidls/ExtendableEvent.webidl
index 7dc2983fe74..5d6c4786c3f 100644
--- a/components/script/dom/webidls/ExtendableEvent.webidl
+++ b/components/script/dom/webidls/ExtendableEvent.webidl
@@ -5,7 +5,7 @@
// https://w3c.github.io/ServiceWorker/#extendable-event
[Constructor(DOMString type,
- optional ExtendableEventInit eventInitDict),
+ optional ExtendableEventInit eventInitDict = {}),
Exposed=ServiceWorker,
Pref="dom.serviceworker.enabled"]
interface ExtendableEvent : Event {
diff --git a/components/script/dom/webidls/ExtendableMessageEvent.webidl b/components/script/dom/webidls/ExtendableMessageEvent.webidl
index 3b06fb08cd8..e934d06b50b 100644
--- a/components/script/dom/webidls/ExtendableMessageEvent.webidl
+++ b/components/script/dom/webidls/ExtendableMessageEvent.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/ServiceWorker/#extendablemessage-event-section
-[Constructor(DOMString type, optional ExtendableMessageEventInit eventInitDict),
+[Constructor(DOMString type, optional ExtendableMessageEventInit eventInitDict = {}),
Exposed=ServiceWorker,
Pref="dom.serviceworker.enabled"]
interface ExtendableMessageEvent : ExtendableEvent {
diff --git a/components/script/dom/webidls/Fetch.webidl b/components/script/dom/webidls/Fetch.webidl
index 3b424ba85b6..ad0907d7436 100644
--- a/components/script/dom/webidls/Fetch.webidl
+++ b/components/script/dom/webidls/Fetch.webidl
@@ -7,5 +7,5 @@
[Exposed=(Window,Worker)]
partial interface WindowOrWorkerGlobalScope {
- [NewObject] Promise<Response> fetch(RequestInfo input, optional RequestInit init);
+ [NewObject] Promise<Response> fetch(RequestInfo input, optional RequestInit init = {});
};
diff --git a/components/script/dom/webidls/File.webidl b/components/script/dom/webidls/File.webidl
index 00e1709ecc1..04e670723e4 100644
--- a/components/script/dom/webidls/File.webidl
+++ b/components/script/dom/webidls/File.webidl
@@ -6,7 +6,7 @@
[Constructor(sequence<BlobPart> fileBits,
DOMString fileName,
- optional FilePropertyBag options),
+ optional FilePropertyBag options = {}),
Exposed=(Window,Worker)]
interface File : Blob {
readonly attribute DOMString name;
diff --git a/components/script/dom/webidls/FocusEvent.webidl b/components/script/dom/webidls/FocusEvent.webidl
index 5371399228f..67dec33a952 100644
--- a/components/script/dom/webidls/FocusEvent.webidl
+++ b/components/script/dom/webidls/FocusEvent.webidl
@@ -3,7 +3,7 @@
* 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),
+[Constructor(DOMString typeArg, optional FocusEventInit focusEventInitDict = {}),
Exposed=Window]
interface FocusEvent : UIEvent {
readonly attribute EventTarget? relatedTarget;
diff --git a/components/script/dom/webidls/FormDataEvent.webidl b/components/script/dom/webidls/FormDataEvent.webidl
index d34f57b3a09..e478a33a729 100644
--- a/components/script/dom/webidls/FormDataEvent.webidl
+++ b/components/script/dom/webidls/FormDataEvent.webidl
@@ -4,7 +4,7 @@
// https://html.spec.whatwg.org/multipage/#the-formdataevent-interface
[Exposed=Window,
- Constructor(DOMString type, optional FormDataEventInit eventInitDict)]
+ Constructor(DOMString type, optional FormDataEventInit eventInitDict = {})]
interface FormDataEvent : Event {
readonly attribute FormData formData;
};
diff --git a/components/script/dom/webidls/GainNode.webidl b/components/script/dom/webidls/GainNode.webidl
index 02bbbacb697..97b205e63e9 100644
--- a/components/script/dom/webidls/GainNode.webidl
+++ b/components/script/dom/webidls/GainNode.webidl
@@ -11,7 +11,7 @@ dictionary GainOptions : AudioNodeOptions {
};
[Exposed=Window,
- Constructor (BaseAudioContext context, optional GainOptions options)]
+ Constructor (BaseAudioContext context, optional GainOptions options = {})]
interface GainNode : AudioNode {
readonly attribute AudioParam gain;
};
diff --git a/components/script/dom/webidls/HashChangeEvent.webidl b/components/script/dom/webidls/HashChangeEvent.webidl
index ec2065aa49e..e5049e75129 100644
--- a/components/script/dom/webidls/HashChangeEvent.webidl
+++ b/components/script/dom/webidls/HashChangeEvent.webidl
@@ -3,7 +3,7 @@
* 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),
+[Constructor(DOMString type, optional HashChangeEventInit eventInitDict = {}),
Exposed=Window]
interface HashChangeEvent : Event {
readonly attribute USVString oldURL;
diff --git a/components/script/dom/webidls/InputEvent.webidl b/components/script/dom/webidls/InputEvent.webidl
index 23a62c06b2a..49fb9dc9695 100644
--- a/components/script/dom/webidls/InputEvent.webidl
+++ b/components/script/dom/webidls/InputEvent.webidl
@@ -8,7 +8,7 @@
*/
// https://w3c.github.io/uievents/#idl-inputevent
-[Constructor(DOMString type, optional InputEventInit eventInitDict)]
+[Constructor(DOMString type, optional InputEventInit eventInitDict = {})]
interface InputEvent : UIEvent {
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 ed9350a9f29..f30265a87d8 100644
--- a/components/script/dom/webidls/KeyboardEvent.webidl
+++ b/components/script/dom/webidls/KeyboardEvent.webidl
@@ -7,7 +7,7 @@
*
*/
-[Constructor(DOMString typeArg, optional KeyboardEventInit keyboardEventInitDict)]
+[Constructor(DOMString typeArg, optional KeyboardEventInit keyboardEventInitDict = {})]
interface KeyboardEvent : UIEvent {
// KeyLocationCode
const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;
diff --git a/components/script/dom/webidls/MediaDevices.webidl b/components/script/dom/webidls/MediaDevices.webidl
index 866e1e964d0..0d9c3b9e98b 100644
--- a/components/script/dom/webidls/MediaDevices.webidl
+++ b/components/script/dom/webidls/MediaDevices.webidl
@@ -18,7 +18,7 @@ partial interface Navigator {
partial interface MediaDevices {
// MediaTrackSupportedConstraints getSupportedConstraints();
- Promise<MediaStream> getUserMedia(optional MediaStreamConstraints constraints);
+ Promise<MediaStream> getUserMedia(optional MediaStreamConstraints constraints = {});
};
diff --git a/components/script/dom/webidls/MediaQueryListEvent.webidl b/components/script/dom/webidls/MediaQueryListEvent.webidl
index 9f194a6feb6..36464230e1b 100644
--- a/components/script/dom/webidls/MediaQueryListEvent.webidl
+++ b/components/script/dom/webidls/MediaQueryListEvent.webidl
@@ -3,7 +3,7 @@
* 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)]
+[Constructor(DOMString type, optional MediaQueryListEventInit eventInitDict = {}), Exposed=(Window)]
interface MediaQueryListEvent : Event {
readonly attribute DOMString media;
readonly attribute boolean matches;
diff --git a/components/script/dom/webidls/MessageEvent.webidl b/components/script/dom/webidls/MessageEvent.webidl
index c2ef9732096..fc43c463743 100644
--- a/components/script/dom/webidls/MessageEvent.webidl
+++ b/components/script/dom/webidls/MessageEvent.webidl
@@ -3,7 +3,7 @@
* 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)]
+[Constructor(DOMString type, optional MessageEventInit eventInitDict = {}), Exposed=(Window,Worker)]
interface MessageEvent : Event {
readonly attribute any data;
readonly attribute DOMString origin;
diff --git a/components/script/dom/webidls/MouseEvent.webidl b/components/script/dom/webidls/MouseEvent.webidl
index 29d5872f65e..ca39c759c04 100644
--- a/components/script/dom/webidls/MouseEvent.webidl
+++ b/components/script/dom/webidls/MouseEvent.webidl
@@ -3,7 +3,7 @@
* 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),
+[Constructor(DOMString typeArg, optional MouseEventInit mouseEventInitDict = {}),
Exposed=Window]
interface MouseEvent : UIEvent {
readonly attribute long screenX;
diff --git a/components/script/dom/webidls/MutationObserver.webidl b/components/script/dom/webidls/MutationObserver.webidl
index 28e59d8244d..a2f223da800 100644
--- a/components/script/dom/webidls/MutationObserver.webidl
+++ b/components/script/dom/webidls/MutationObserver.webidl
@@ -10,7 +10,7 @@
[Pref="dom.mutation_observer.enabled", Constructor(MutationCallback callback)]
interface MutationObserver {
[Throws]
- void observe(Node target, optional MutationObserverInit options);
+ void observe(Node target, optional MutationObserverInit options = {});
void disconnect();
sequence<MutationRecord> takeRecords();
};
diff --git a/components/script/dom/webidls/Node.webidl b/components/script/dom/webidls/Node.webidl
index 9433e96efa2..37943477bd3 100644
--- a/components/script/dom/webidls/Node.webidl
+++ b/components/script/dom/webidls/Node.webidl
@@ -32,7 +32,7 @@ interface Node : EventTarget {
readonly attribute Document? ownerDocument;
[Pure]
- Node getRootNode(optional GetRootNodeOptions options);
+ Node getRootNode(optional GetRootNodeOptions options = {});
[Pure]
readonly attribute Node? parentNode;
diff --git a/components/script/dom/webidls/OscillatorNode.webidl b/components/script/dom/webidls/OscillatorNode.webidl
index 510b87880a7..ee21e96ffea 100644
--- a/components/script/dom/webidls/OscillatorNode.webidl
+++ b/components/script/dom/webidls/OscillatorNode.webidl
@@ -22,7 +22,7 @@ dictionary OscillatorOptions : AudioNodeOptions {
};
[Exposed=Window,
- Constructor (BaseAudioContext context, optional OscillatorOptions options)]
+ Constructor (BaseAudioContext context, optional OscillatorOptions options = {})]
interface OscillatorNode : AudioScheduledSourceNode {
[SetterThrows]
attribute OscillatorType type;
diff --git a/components/script/dom/webidls/PageTransitionEvent.webidl b/components/script/dom/webidls/PageTransitionEvent.webidl
index 147a2d2e0c1..c2f438a89b5 100644
--- a/components/script/dom/webidls/PageTransitionEvent.webidl
+++ b/components/script/dom/webidls/PageTransitionEvent.webidl
@@ -3,7 +3,7 @@
* 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),
+[Constructor(DOMString type, optional PageTransitionEventInit eventInitDict = {}),
Exposed=Window]
interface PageTransitionEvent : Event {
readonly attribute boolean persisted;
diff --git a/components/script/dom/webidls/PannerNode.webidl b/components/script/dom/webidls/PannerNode.webidl
index 8c9f8f1913e..08733377fef 100644
--- a/components/script/dom/webidls/PannerNode.webidl
+++ b/components/script/dom/webidls/PannerNode.webidl
@@ -35,7 +35,7 @@ enum PanningModelType {
};
[Exposed=Window,
- Constructor (BaseAudioContext context, optional PannerOptions options)]
+ Constructor (BaseAudioContext context, optional PannerOptions options = {})]
interface PannerNode : AudioNode {
attribute PanningModelType panningModel;
readonly attribute AudioParam positionX;
diff --git a/components/script/dom/webidls/PopStateEvent.webidl b/components/script/dom/webidls/PopStateEvent.webidl
index 933ec3e7efa..1bd7637a647 100644
--- a/components/script/dom/webidls/PopStateEvent.webidl
+++ b/components/script/dom/webidls/PopStateEvent.webidl
@@ -3,7 +3,7 @@
* 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),
+[Constructor(DOMString type, optional PopStateEventInit eventInitDict = {}),
Exposed=Window]
interface PopStateEvent : Event {
readonly attribute any state;
diff --git a/components/script/dom/webidls/ProgressEvent.webidl b/components/script/dom/webidls/ProgressEvent.webidl
index 4168c2e6b1d..698ec828877 100644
--- a/components/script/dom/webidls/ProgressEvent.webidl
+++ b/components/script/dom/webidls/ProgressEvent.webidl
@@ -12,7 +12,7 @@
* http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.
*/
-[Constructor(DOMString type, optional ProgressEventInit eventInitDict),
+[Constructor(DOMString type, optional ProgressEventInit eventInitDict = {}),
Exposed=(Window,Worker)]
interface ProgressEvent : Event {
readonly attribute boolean lengthComputable;
diff --git a/components/script/dom/webidls/PromiseRejectionEvent.webidl b/components/script/dom/webidls/PromiseRejectionEvent.webidl
index 3a1ee3dc128..43eb391ccfc 100644
--- a/components/script/dom/webidls/PromiseRejectionEvent.webidl
+++ b/components/script/dom/webidls/PromiseRejectionEvent.webidl
@@ -4,7 +4,7 @@
// https://html.spec.whatwg.org/multipage/#the-promiserejectionevent-interface
-[Constructor(DOMString type, optional PromiseRejectionEventInit eventInitDict), Exposed=(Window,Worker)]
+[Constructor(DOMString type, optional PromiseRejectionEventInit eventInitDict = {}), Exposed=(Window,Worker)]
interface PromiseRejectionEvent : Event {
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 538805c88db..01fd9a42034 100644
--- a/components/script/dom/webidls/RTCIceCandidate.webidl
+++ b/components/script/dom/webidls/RTCIceCandidate.webidl
@@ -5,7 +5,7 @@
// https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface
-[Constructor(optional RTCIceCandidateInit candidateInitDict),
+[Constructor(optional RTCIceCandidateInit candidateInitDict = {}),
Exposed=Window, Pref="dom.webrtc.enabled"]
interface RTCIceCandidate {
readonly attribute DOMString candidate;
diff --git a/components/script/dom/webidls/RTCPeerConnection.webidl b/components/script/dom/webidls/RTCPeerConnection.webidl
index 58cb7301ea3..b702a70f71d 100644
--- a/components/script/dom/webidls/RTCPeerConnection.webidl
+++ b/components/script/dom/webidls/RTCPeerConnection.webidl
@@ -4,11 +4,11 @@
// https://w3c.github.io/webrtc-pc/#interface-definition
-[Constructor(optional RTCConfiguration configuration),
+[Constructor(optional RTCConfiguration configuration = {}),
Exposed=Window, Pref="dom.webrtc.enabled"]
interface RTCPeerConnection : EventTarget {
- Promise<RTCSessionDescriptionInit> createOffer(optional RTCOfferOptions options);
- Promise<RTCSessionDescriptionInit> createAnswer(optional RTCAnswerOptions options);
+ Promise<RTCSessionDescriptionInit> createOffer(optional RTCOfferOptions options = {});
+ Promise<RTCSessionDescriptionInit> createAnswer(optional RTCAnswerOptions options = {});
Promise<void> setLocalDescription(RTCSessionDescriptionInit description);
readonly attribute RTCSessionDescription? localDescription;
// readonly attribute RTCSessionDescription? currentLocalDescription;
@@ -17,7 +17,7 @@ interface RTCPeerConnection : EventTarget {
readonly attribute RTCSessionDescription? remoteDescription;
// readonly attribute RTCSessionDescription? currentRemoteDescription;
// readonly attribute RTCSessionDescription? pendingRemoteDescription;
- Promise<void> addIceCandidate(optional RTCIceCandidateInit candidate);
+ Promise<void> addIceCandidate(optional RTCIceCandidateInit candidate = {});
readonly attribute RTCSignalingState signalingState;
readonly attribute RTCIceGatheringState iceGatheringState;
readonly attribute RTCIceConnectionState iceConnectionState;
diff --git a/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl b/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl
index 26a3919b21f..0d2c2b72879 100644
--- a/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl
+++ b/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl
@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#rtcpeerconnectioniceevent
-[Constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict),
+[Constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict = {}),
Exposed=Window, Pref="dom.webrtc.enabled"]
interface RTCPeerConnectionIceEvent : Event {
readonly attribute RTCIceCandidate? candidate;
diff --git a/components/script/dom/webidls/Request.webidl b/components/script/dom/webidls/Request.webidl
index 79c1da9bad5..52f258446f3 100644
--- a/components/script/dom/webidls/Request.webidl
+++ b/components/script/dom/webidls/Request.webidl
@@ -6,7 +6,7 @@
typedef (Request or USVString) RequestInfo;
-[Constructor(RequestInfo input, optional RequestInit init),
+[Constructor(RequestInfo input, optional RequestInit init = {}),
Exposed=(Window,Worker)]
interface Request {
diff --git a/components/script/dom/webidls/Response.webidl b/components/script/dom/webidls/Response.webidl
index eaf8fb8b066..7297d64ae9b 100644
--- a/components/script/dom/webidls/Response.webidl
+++ b/components/script/dom/webidls/Response.webidl
@@ -4,7 +4,7 @@
// https://fetch.spec.whatwg.org/#response-class
- [Constructor(optional BodyInit? body = null, optional ResponseInit init),
+ [Constructor(optional BodyInit? body = null, optional ResponseInit init = {}),
Exposed=(Window,Worker)]
interface Response {
[NewObject] static Response error();
diff --git a/components/script/dom/webidls/ServiceWorkerContainer.webidl b/components/script/dom/webidls/ServiceWorkerContainer.webidl
index ec7ae1a43e8..18deb5e58f4 100644
--- a/components/script/dom/webidls/ServiceWorkerContainer.webidl
+++ b/components/script/dom/webidls/ServiceWorkerContainer.webidl
@@ -8,7 +8,8 @@ interface ServiceWorkerContainer : EventTarget {
readonly attribute ServiceWorker? controller;
//readonly attribute Promise<ServiceWorkerRegistration> ready;
- [NewObject] Promise<ServiceWorkerRegistration> register(USVString scriptURL, optional RegistrationOptions options);
+ [NewObject] Promise<ServiceWorkerRegistration> register(USVString scriptURL,
+ optional RegistrationOptions options = {});
//[NewObject] Promise<any> getRegistration(optional USVString clientURL = "");
//[NewObject] Promise<FrozenArray<ServiceWorkerRegistration>> getRegistrations();
diff --git a/components/script/dom/webidls/StereoPannerNode.webidl b/components/script/dom/webidls/StereoPannerNode.webidl
index 69b58a408c1..1795ce79bdf 100644
--- a/components/script/dom/webidls/StereoPannerNode.webidl
+++ b/components/script/dom/webidls/StereoPannerNode.webidl
@@ -11,7 +11,7 @@ dictionary StereoPannerOptions: AudioNodeOptions {
};
[Exposed=Window,
- Constructor (BaseAudioContext context, optional StereoPannerOptions options)]
+ Constructor (BaseAudioContext context, optional StereoPannerOptions options = {})]
interface StereoPannerNode : AudioScheduledSourceNode {
readonly attribute AudioParam pan;
};
diff --git a/components/script/dom/webidls/StorageEvent.webidl b/components/script/dom/webidls/StorageEvent.webidl
index 72330c77f9e..060a82c0d05 100644
--- a/components/script/dom/webidls/StorageEvent.webidl
+++ b/components/script/dom/webidls/StorageEvent.webidl
@@ -9,7 +9,7 @@
* Event sent to a window when a storage area changes.
*/
-[Constructor(DOMString type, optional StorageEventInit eventInitDict), Exposed=Window]
+[Constructor(DOMString type, optional StorageEventInit eventInitDict = {}), Exposed=Window]
interface StorageEvent : Event {
readonly attribute DOMString? key;
readonly attribute DOMString? oldValue;
diff --git a/components/script/dom/webidls/TestBinding.webidl b/components/script/dom/webidls/TestBinding.webidl
index cc942fd06b8..36f91806d4a 100644
--- a/components/script/dom/webidls/TestBinding.webidl
+++ b/components/script/dom/webidls/TestBinding.webidl
@@ -32,7 +32,7 @@ dictionary TestDictionary {
Blob interfaceValue;
any anyValue;
object objectValue;
- TestDictionaryDefaults dict = null;
+ TestDictionaryDefaults dict = {};
sequence<TestDictionaryDefaults> seqDict;
// Testing codegen to import Element correctly, ensure no other code references Element directly
sequence<Element> elementSequence;
diff --git a/components/script/dom/webidls/TestWorklet.webidl b/components/script/dom/webidls/TestWorklet.webidl
index 3c5d84d2b09..3be494d4825 100644
--- a/components/script/dom/webidls/TestWorklet.webidl
+++ b/components/script/dom/webidls/TestWorklet.webidl
@@ -7,6 +7,6 @@
[Pref="dom.worklet.testing.enabled", Exposed=(Window), Constructor]
interface TestWorklet {
- [NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options);
+ [NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options = {});
DOMString? lookup(DOMString key);
};
diff --git a/components/script/dom/webidls/TextDecoder.webidl b/components/script/dom/webidls/TextDecoder.webidl
index 5f1a0cc881a..a2454ab4e05 100644
--- a/components/script/dom/webidls/TextDecoder.webidl
+++ b/components/script/dom/webidls/TextDecoder.webidl
@@ -12,11 +12,11 @@ dictionary TextDecodeOptions {
boolean stream = false;
};
-[Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options), Exposed=(Window,Worker)]
+[Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options = {}), Exposed=(Window,Worker)]
interface TextDecoder {
readonly attribute DOMString encoding;
readonly attribute boolean fatal;
readonly attribute boolean ignoreBOM;
[Throws]
- USVString decode(optional BufferSource input, optional TextDecodeOptions options);
+ USVString decode(optional BufferSource input, optional TextDecodeOptions options = {});
};
diff --git a/components/script/dom/webidls/TrackEvent.webidl b/components/script/dom/webidls/TrackEvent.webidl
index 214583e3245..f87fa0472a1 100644
--- a/components/script/dom/webidls/TrackEvent.webidl
+++ b/components/script/dom/webidls/TrackEvent.webidl
@@ -5,7 +5,7 @@
// https://html.spec.whatwg.org/multipage/#the-trackevent-interface
[Exposed=Window,
- Constructor(DOMString type, optional TrackEventInit eventInitDict)]
+ Constructor(DOMString type, optional TrackEventInit eventInitDict = {})]
interface TrackEvent : Event {
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 505d6bc2941..05998ececfb 100644
--- a/components/script/dom/webidls/TransitionEvent.webidl
+++ b/components/script/dom/webidls/TransitionEvent.webidl
@@ -6,7 +6,7 @@
* https://dom.spec.whatwg.org/#event
*/
-[Constructor(DOMString type, optional TransitionEventInit transitionEventInitDict),
+[Constructor(DOMString type, optional TransitionEventInit transitionEventInitDict = {}),
Exposed=Window]
interface TransitionEvent : Event {
readonly attribute DOMString propertyName;
diff --git a/components/script/dom/webidls/UIEvent.webidl b/components/script/dom/webidls/UIEvent.webidl
index 7e895a34448..20be43aec90 100644
--- a/components/script/dom/webidls/UIEvent.webidl
+++ b/components/script/dom/webidls/UIEvent.webidl
@@ -3,7 +3,7 @@
* 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)]
+[Constructor(DOMString type, optional UIEventInit eventInitDict = {})]
interface UIEvent : Event {
// readonly attribute WindowProxy? view;
readonly attribute Window? view;
diff --git a/components/script/dom/webidls/WebGLContextEvent.webidl b/components/script/dom/webidls/WebGLContextEvent.webidl
index 308f3ec7610..f8a2dbf2137 100644
--- a/components/script/dom/webidls/WebGLContextEvent.webidl
+++ b/components/script/dom/webidls/WebGLContextEvent.webidl
@@ -3,7 +3,7 @@
* 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),
+[Constructor(DOMString type, optional WebGLContextEventInit eventInit = {}),
Exposed=Window]
interface WebGLContextEvent : Event {
readonly attribute DOMString statusMessage;
diff --git a/components/script/dom/webidls/WheelEvent.webidl b/components/script/dom/webidls/WheelEvent.webidl
index a38b87dd97d..b202d7f2c24 100644
--- a/components/script/dom/webidls/WheelEvent.webidl
+++ b/components/script/dom/webidls/WheelEvent.webidl
@@ -3,7 +3,7 @@
* 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),
+[Constructor(DOMString typeArg, optional WheelEventInit wheelEventInitDict = {}),
Exposed=Window]
interface WheelEvent : MouseEvent {
const unsigned long DOM_DELTA_PIXEL = 0x00;
diff --git a/components/script/dom/webidls/Window.webidl b/components/script/dom/webidls/Window.webidl
index 81ffee9283e..56d9d06a819 100644
--- a/components/script/dom/webidls/Window.webidl
+++ b/components/script/dom/webidls/Window.webidl
@@ -118,11 +118,11 @@ partial interface Window {
[Replaceable] readonly attribute long pageXOffset;
[Replaceable] readonly attribute long scrollY;
[Replaceable] readonly attribute long pageYOffset;
- void scroll(optional ScrollToOptions options);
+ void scroll(optional ScrollToOptions options = {});
void scroll(unrestricted double x, unrestricted double y);
- void scrollTo(optional ScrollToOptions options);
+ void scrollTo(optional ScrollToOptions options = {});
void scrollTo(unrestricted double x, unrestricted double y);
- void scrollBy(optional ScrollToOptions options);
+ void scrollBy(optional ScrollToOptions options = {});
void scrollBy(unrestricted double x, unrestricted double y);
// client
diff --git a/components/script/dom/webidls/Worker.webidl b/components/script/dom/webidls/Worker.webidl
index 2c17e459fa8..f09b565f31a 100644
--- a/components/script/dom/webidls/Worker.webidl
+++ b/components/script/dom/webidls/Worker.webidl
@@ -9,7 +9,7 @@ interface AbstractWorker {
};
// https://html.spec.whatwg.org/multipage/#worker
-[Constructor(USVString scriptURL, optional WorkerOptions options), Exposed=(Window,Worker)]
+[Constructor(USVString scriptURL, optional WorkerOptions options = {}), Exposed=(Window,Worker)]
interface Worker : EventTarget {
void terminate();
diff --git a/components/script/dom/webidls/Worklet.webidl b/components/script/dom/webidls/Worklet.webidl
index 9e954925ab0..16ec8e8d7c9 100644
--- a/components/script/dom/webidls/Worklet.webidl
+++ b/components/script/dom/webidls/Worklet.webidl
@@ -5,7 +5,7 @@
// https://drafts.css-houdini.org/worklets/#worklet
[Pref="dom.worklet.enabled", Exposed=(Window)]
interface Worklet {
- [NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options);
+ [NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options = {});
};
dictionary WorkletOptions {
diff --git a/components/script/dom/webidls/XR.webidl b/components/script/dom/webidls/XR.webidl
index 58732edd42b..0b3debeaee6 100644
--- a/components/script/dom/webidls/XR.webidl
+++ b/components/script/dom/webidls/XR.webidl
@@ -7,7 +7,7 @@
interface XR: EventTarget {
// Methods
Promise<void> supportsSessionMode(XRSessionMode mode);
- Promise<XRSession> requestSession(optional XRSessionCreationOptions parameters);
+ Promise<XRSession> requestSession(optional XRSessionCreationOptions parameters = {});
// Events
// attribute EventHandler ondevicechange;
diff --git a/components/script/dom/webidls/XRRigidTransform.webidl b/components/script/dom/webidls/XRRigidTransform.webidl
index 089dc1732a6..b58a8c339e4 100644
--- a/components/script/dom/webidls/XRRigidTransform.webidl
+++ b/components/script/dom/webidls/XRRigidTransform.webidl
@@ -5,7 +5,7 @@
// https://immersive-web.github.io/webxr/#xrrigidtransform-interface
[SecureContext, Exposed=Window, Pref="dom.webxr.enabled",
- Constructor(optional DOMPointInit position, optional DOMPointInit orientation)]
+ Constructor(optional DOMPointInit position = {}, optional DOMPointInit orientation = {})]
interface XRRigidTransform {
readonly attribute DOMPointReadOnly position;
readonly attribute DOMPointReadOnly orientation;
diff --git a/components/script/dom/webidls/XRSession.webidl b/components/script/dom/webidls/XRSession.webidl
index 59ccecb521a..d35f724f87e 100644
--- a/components/script/dom/webidls/XRSession.webidl
+++ b/components/script/dom/webidls/XRSession.webidl
@@ -29,7 +29,7 @@ interface XRSession : EventTarget {
// FrozenArray<XRInputSource> getInputSources();
sequence<XRInputSource> getInputSources();
- void updateRenderState(optional XRRenderStateInit state);
+ void updateRenderState(optional XRRenderStateInit state = {});
long requestAnimationFrame(XRFrameRequestCallback callback);
void cancelAnimationFrame(long handle);
diff --git a/components/script/dom/webidls/XRWebGLLayer.webidl b/components/script/dom/webidls/XRWebGLLayer.webidl
index 0df8296be34..f551096fc05 100644
--- a/components/script/dom/webidls/XRWebGLLayer.webidl
+++ b/components/script/dom/webidls/XRWebGLLayer.webidl
@@ -19,7 +19,7 @@ dictionary XRWebGLLayerInit {
[SecureContext, Exposed=Window, Constructor(XRSession session,
XRWebGLRenderingContext context,
- optional XRWebGLLayerInit layerInit),
+ optional XRWebGLLayerInit layerInit = {}),
Pref="dom.webxr.enabled"]
interface XRWebGLLayer : XRLayer {
// // Attributes
diff --git a/components/script_plugins/Cargo.toml b/components/script_plugins/Cargo.toml
index 407d4639939..f1537b655a0 100644
--- a/components/script_plugins/Cargo.toml
+++ b/components/script_plugins/Cargo.toml
@@ -14,4 +14,4 @@ unrooted_must_root_lint = []
webidl_lint = []
[dependencies]
-weedle = "0.9"
+weedle = "0.10"