diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 96947d83ec7..d4b103cc21b 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -429,8 +429,8 @@ class CGMethodCall(CGThing): # Check for vanilla JS objects # XXXbz Do we need to worry about security wrappers? - pickFirstSignature("%s.get().is_object() && !is_platform_object(%s.get().to_object(), *cx)" % - (distinguishingArg, distinguishingArg), + pickFirstSignature("%s.get().is_object()" % + distinguishingArg, lambda s: (s[1][distinguishingIndex].type.isCallback() or s[1][distinguishingIndex].type.isCallbackInterface() or s[1][distinguishingIndex].type.isDictionary() or diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs index e44983ea3a3..1ac5d8db31a 100644 --- a/components/script/dom/testbinding.rs +++ b/components/script/dom/testbinding.rs @@ -12,7 +12,7 @@ use crate::dom::bindings::codegen::Bindings::TestBindingBinding::{ TestBindingMethods, TestDictionary, }; use crate::dom::bindings::codegen::Bindings::TestBindingBinding::{ - TestDictionaryDefaults, TestEnum, + TestDictionaryDefaults, TestEnum, TestURLLike, }; use crate::dom::bindings::codegen::UnionTypes; use crate::dom::bindings::codegen::UnionTypes::{ @@ -45,6 +45,7 @@ use crate::dom::bindings::trace::RootedTraceableBox; use crate::dom::bindings::weakref::MutableWeakRef; use crate::dom::blob::Blob; use crate::dom::globalscope::GlobalScope; +use crate::dom::node::Node; use crate::dom::promise::Promise; use crate::dom::promisenativehandler::{Callback, PromiseNativeHandler}; use crate::dom::url::URL; @@ -679,6 +680,14 @@ impl TestBindingMethods for TestBinding { fn PassOverloaded(&self, _: CustomAutoRooterGuard) {} fn PassOverloaded_(&self, _: DOMString) {} + fn PassOverloadedDict(&self, _: &Node) -> DOMString { + "node".into() + } + + fn PassOverloadedDict_(&self, u: &TestURLLike) -> DOMString { + u.href.clone() + } + fn PassNullableBoolean(&self, _: Option) {} fn PassNullableByte(&self, _: Option) {} fn PassNullableOctet(&self, _: Option) {} diff --git a/components/script/dom/webidls/TestBinding.webidl b/components/script/dom/webidls/TestBinding.webidl index 9c3fdc02638..6aa748e502f 100644 --- a/components/script/dom/webidls/TestBinding.webidl +++ b/components/script/dom/webidls/TestBinding.webidl @@ -86,6 +86,10 @@ dictionary TestDictionaryDefaults { object? nullableObjectValue = null; }; +dictionary TestURLLike { + required DOMString href; +}; + [Pref="dom.testbinding.enabled", Exposed=(Window,Worker) ] @@ -279,6 +283,10 @@ interface TestBinding { void passOverloaded(ArrayBuffer arg); void passOverloaded(DOMString arg); + // https://github.com/servo/servo/pull/26154 + DOMString passOverloadedDict(Node arg); + DOMString passOverloadedDict(TestURLLike arg); + void passNullableBoolean(boolean? arg); void passNullableByte(byte? arg); void passNullableOctet(octet? arg); diff --git a/tests/wpt/mozilla/meta-layout-2020/mozilla/overload_dict.html.ini b/tests/wpt/mozilla/meta-layout-2020/mozilla/overload_dict.html.ini new file mode 100644 index 00000000000..646813bf83c --- /dev/null +++ b/tests/wpt/mozilla/meta-layout-2020/mozilla/overload_dict.html.ini @@ -0,0 +1,3 @@ +[overload_dict.html] + type: testharness + prefs: [dom.testbinding.enabled:true] diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 770fb31f3a8..ecf75a68e87 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -14088,6 +14088,13 @@ {} ] ], + "overload_dict.html": [ + "cd42fd97331753fc0580a47a39814cff57911638", + [ + null, + {} + ] + ], "paint_timing.html": [ "0c1798ec565a77d20d9550b5cec352a0b286c415", [ diff --git a/tests/wpt/mozilla/meta/mozilla/overload_dict.html.ini b/tests/wpt/mozilla/meta/mozilla/overload_dict.html.ini new file mode 100644 index 00000000000..646813bf83c --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/overload_dict.html.ini @@ -0,0 +1,3 @@ +[overload_dict.html] + type: testharness + prefs: [dom.testbinding.enabled:true] diff --git a/tests/wpt/mozilla/tests/mozilla/overload_dict.html b/tests/wpt/mozilla/tests/mozilla/overload_dict.html new file mode 100644 index 00000000000..cd42fd97331 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/overload_dict.html @@ -0,0 +1,18 @@ + + +Test for overload with dictionary object + + +