aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorbors-servo <servo-ops@mozilla.com>2020-04-09 17:39:10 -0400
committerGitHub <noreply@github.com>2020-04-09 17:39:10 -0400
commit455a99ca8db4426c2f0f33b92846f0d8902a62b7 (patch)
treea6b7a6ae0cc6b845a43c8de5478f97805f92a634 /components
parentbc10c60710c958f3a794e06d77f8932bf043c847 (diff)
parent58bab8a7e9b4e61e11694accbf5caf24886cc217 (diff)
downloadservo-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.py4
-rw-r--r--components/script/dom/testbinding.rs11
-rw-r--r--components/script/dom/webidls/TestBinding.webidl8
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);