diff options
author | bors-servo <servo-ops@mozilla.com> | 2020-04-09 17:39:10 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-09 17:39:10 -0400 |
commit | 455a99ca8db4426c2f0f33b92846f0d8902a62b7 (patch) | |
tree | a6b7a6ae0cc6b845a43c8de5478f97805f92a634 /components | |
parent | bc10c60710c958f3a794e06d77f8932bf043c847 (diff) | |
parent | 58bab8a7e9b4e61e11694accbf5caf24886cc217 (diff) | |
download | servo-455a99ca8db4426c2f0f33b92846f0d8902a62b7.tar.gz servo-455a99ca8db4426c2f0f33b92846f0d8902a62b7.zip |
Auto merge of #26154 - Manishearth:platform-object-overload, r=jdm
Do not filter out platform objects when doing dictionary conversions in overload resolution
https://heycam.github.io/webidl/#es-overloads
In step 12, the platform object check is for substep 4, but importantly it only matters if `V` implements the matching interface. If not, it should be able to fall back to substep 10 and attempt conversion to a dictionary.
Diffstat (limited to 'components')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 4 | ||||
-rw-r--r-- | components/script/dom/testbinding.rs | 11 | ||||
-rw-r--r-- | components/script/dom/webidls/TestBinding.webidl | 8 |
3 files changed, 20 insertions, 3 deletions
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<typedarray::ArrayBuffer>) {} fn PassOverloaded_(&self, _: DOMString) {} + fn PassOverloadedDict(&self, _: &Node) -> DOMString { + "node".into() + } + + fn PassOverloadedDict_(&self, u: &TestURLLike) -> DOMString { + u.href.clone() + } + fn PassNullableBoolean(&self, _: Option<bool>) {} fn PassNullableByte(&self, _: Option<i8>) {} fn PassNullableOctet(&self, _: Option<u8>) {} 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); |