From e81b6786457b076a06c945835a3080fa33fa81ca Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Thu, 17 Oct 2019 19:41:47 +0900 Subject: [PATCH] Support [LegacyWindowAlias] --- .../dom/bindings/codegen/CodegenRust.py | 21 ++++++++++++++++--- components/script/dom/bindings/interface.rs | 7 +++++++ .../script/dom/webidls/DOMMatrix.webidl | 3 ++- components/script/dom/webidls/URL.webidl | 3 ++- .../css/geometry/WebKitCSSMatrix.html.ini | 7 ------- tests/wpt/metadata/url/idlharness.any.js.ini | 18 ---------------- tests/wpt/mozilla/meta/MANIFEST.json | 4 ++-- .../wpt/mozilla/tests/mozilla/interfaces.html | 1 + tests/wpt/mozilla/tests/mozilla/interfaces.js | 1 - 9 files changed, 32 insertions(+), 33 deletions(-) delete mode 100644 tests/wpt/metadata/css/geometry/WebKitCSSMatrix.html.ini delete mode 100644 tests/wpt/metadata/url/idlharness.any.js.ini diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index ad76ef5d8d33..a644e352e7a0 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2925,13 +2925,14 @@ class CGCreateInterfaceObjectsMethod(CGAbstractMethod): properties should be a PropertyArrays instance. """ - def __init__(self, descriptor, properties, haveUnscopables): + def __init__(self, descriptor, properties, haveUnscopables, haveLegacyWindowAliases): args = [Argument('SafeJSContext', 'cx'), Argument('HandleObject', 'global'), Argument('*mut ProtoOrIfaceArray', 'cache')] CGAbstractMethod.__init__(self, descriptor, 'CreateInterfaceObjects', 'void', args, unsafe=True) self.properties = properties self.haveUnscopables = haveUnscopables + self.haveLegacyWindowAliases = haveLegacyWindowAliases def definition_body(self): name = self.descriptor.interface.identifier.name @@ -2990,7 +2991,8 @@ def definition_body(self): properties = { "id": name, - "unscopables": "unscopable_names" if self.haveUnscopables else "&[]" + "unscopables": "unscopable_names" if self.haveUnscopables else "&[]", + "legacyWindowAliases": "legacy_window_aliases" if self.haveLegacyWindowAliases else "&[]" } for arrayName in self.properties.arrayNames(): array = getattr(self.properties, arrayName) @@ -3058,6 +3060,7 @@ def definition_body(self): prototype.handle(), %(name)s, %(length)s, + %(legacyWindowAliases)s, interface.handle_mut()); assert!(!interface.is_null());""" % properties)) if self.descriptor.shouldCacheConstructor(): @@ -6266,6 +6269,15 @@ def reexportedName(name): if descriptor.weakReferenceable: cgThings.append(CGWeakReferenceableTrait(descriptor)) + legacyWindowAliases = descriptor.interface.legacyWindowAliases + haveLegacyWindowAliases = len(legacyWindowAliases) != 0 + if haveLegacyWindowAliases: + cgThings.append( + CGList([CGGeneric("const legacy_window_aliases: &'static [&'static [u8]] = &["), + CGIndenter(CGList([CGGeneric(str_to_const_array(name)) for + name in legacyWindowAliases], ",\n")), + CGGeneric("];\n")], "\n")) + cgThings.append(CGGeneric(str(properties))) if not descriptor.interface.getExtendedAttribute("Inline"): @@ -6287,7 +6299,8 @@ def reexportedName(name): cgThings.append(CGDefineDOMInterfaceMethod(descriptor)) reexports.append('DefineDOMInterface') cgThings.append(CGConstructorEnabled(descriptor)) - cgThings.append(CGCreateInterfaceObjectsMethod(descriptor, properties, haveUnscopables)) + cgThings.append(CGCreateInterfaceObjectsMethod(descriptor, properties, haveUnscopables, + haveLegacyWindowAliases)) cgThings = generate_imports(config, CGList(cgThings, '\n'), [descriptor]) cgThings = CGWrapper(CGNamespace(toBindingNamespace(descriptor.name), @@ -7453,6 +7466,8 @@ def InterfaceObjectMapData(config): for d in config.getDescriptors(hasInterfaceObject=True, isInline=False): binding = toBindingNamespace(d.name) pairs.append((d.name, binding, binding)) + for alias in d.interface.legacyWindowAliases: + pairs.append((alias, binding, binding)) for ctor in d.interface.namedConstructors: pairs.append((ctor.identifier.name, binding, binding)) pairs.sort(key=operator.itemgetter(0)) diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs index 0a5ee24fb239..2514efcf0636 100644 --- a/components/script/dom/bindings/interface.rs +++ b/components/script/dom/bindings/interface.rs @@ -238,6 +238,7 @@ pub fn create_noncallback_interface_object( interface_prototype_object: HandleObject, name: &[u8], length: u32, + legacy_window_alias_names: &[&[u8]], rval: MutableHandleObject, ) { create_object( @@ -260,6 +261,12 @@ pub fn create_noncallback_interface_object( define_name(cx, rval.handle(), name); define_length(cx, rval.handle(), i32::try_from(length).expect("overflow")); define_on_global_object(cx, global, name, rval.handle()); + + if is_exposed_in(global, Globals::WINDOW) { + for legacy_window_alias in legacy_window_alias_names { + define_on_global_object(cx, global, legacy_window_alias, rval.handle()); + } + } } /// Create and define the named constructors of a non-callback interface. diff --git a/components/script/dom/webidls/DOMMatrix.webidl b/components/script/dom/webidls/DOMMatrix.webidl index 9911f868710c..1731116c0515 100644 --- a/components/script/dom/webidls/DOMMatrix.webidl +++ b/components/script/dom/webidls/DOMMatrix.webidl @@ -10,7 +10,8 @@ * related or neighboring rights to this work. */ -[Exposed=(Window,Worker)] +[Exposed=(Window,Worker), + LegacyWindowAlias=WebKitCSSMatrix] interface DOMMatrix : DOMMatrixReadOnly { [Throws] constructor(optional (DOMString or sequence) init); diff --git a/components/script/dom/webidls/URL.webidl b/components/script/dom/webidls/URL.webidl index 31425fcd8430..d51f675ec0a4 100644 --- a/components/script/dom/webidls/URL.webidl +++ b/components/script/dom/webidls/URL.webidl @@ -3,7 +3,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ // https://url.spec.whatwg.org/#url -[Exposed=(Window,Worker)] +[Exposed=(Window,Worker), + LegacyWindowAlias=webkitURL] interface URL { [Throws] constructor(USVString url, optional USVString base); [SetterThrows] diff --git a/tests/wpt/metadata/css/geometry/WebKitCSSMatrix.html.ini b/tests/wpt/metadata/css/geometry/WebKitCSSMatrix.html.ini deleted file mode 100644 index 49236db8460b..000000000000 --- a/tests/wpt/metadata/css/geometry/WebKitCSSMatrix.html.ini +++ /dev/null @@ -1,7 +0,0 @@ -[WebKitCSSMatrix.html] - [Equivalence test] - expected: FAIL - - [Property descriptor for WebKitCSSMatrix] - expected: FAIL - diff --git a/tests/wpt/metadata/url/idlharness.any.js.ini b/tests/wpt/metadata/url/idlharness.any.js.ini deleted file mode 100644 index c7f8449baa1e..000000000000 --- a/tests/wpt/metadata/url/idlharness.any.js.ini +++ /dev/null @@ -1,18 +0,0 @@ -[idlharness.any.html] - [idlharness] - expected: FAIL - - [Testing Symbol.iterator property of iterable interface URLSearchParams] - expected: FAIL - - [URL interface: legacy window alias] - expected: FAIL - - -[idlharness.any.worker.html] - [idlharness] - expected: FAIL - - [Testing Symbol.iterator property of iterable interface URLSearchParams] - expected: FAIL - diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 6274543554eb..cf90fd08a31c 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -18966,11 +18966,11 @@ "testharness" ], "mozilla/interfaces.html": [ - "7aed97b42d8fe974ea489db66905d9fbc0edb84d", + "1207eaa2d8ff55e0c2216086b5a2c90a41ff78cf", "testharness" ], "mozilla/interfaces.js": [ - "26db0c23e544d38f02b9573ffaa44bf5dee8370a", + "f1854a3ae00493554006ad2c483489f4be8450a6", "support" ], "mozilla/interfaces.worker.js": [ diff --git a/tests/wpt/mozilla/tests/mozilla/interfaces.html b/tests/wpt/mozilla/tests/mozilla/interfaces.html index 7aed97b42d8f..1207eaa2d8ff 100644 --- a/tests/wpt/mozilla/tests/mozilla/interfaces.html +++ b/tests/wpt/mozilla/tests/mozilla/interfaces.html @@ -244,6 +244,7 @@ "WebGLObject", "WebGLActiveInfo", "WebGLShaderPrecisionFormat", + "WebKitCSSMatrix", "WebSocket", "WheelEvent", "Window", diff --git a/tests/wpt/mozilla/tests/mozilla/interfaces.js b/tests/wpt/mozilla/tests/mozilla/interfaces.js index 26db0c23e544..f1854a3ae004 100644 --- a/tests/wpt/mozilla/tests/mozilla/interfaces.js +++ b/tests/wpt/mozilla/tests/mozilla/interfaces.js @@ -45,7 +45,6 @@ function test_interfaces(interfaceNamesInGlobalScope) { "Uint32Array", "Uint8Array", "Uint8ClampedArray", - "Uint8ClampedArray", "WeakMap", "WeakSet", "WebAssembly",