aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-05-05 15:28:35 +0200
committerGulshan Singh <gulshan@umich.edu>2014-05-07 17:30:32 -0400
commit0ab3444af9f0a1c8f7265308c0bf7c20e18df9f5 (patch)
tree792c15664f1265305a335d17a2737d721d3e3bca
parentd66197ae406e252c51bda48611ddfce78ecedb02 (diff)
downloadservo-0ab3444af9f0a1c8f7265308c0bf7c20e18df9f5.tar.gz
servo-0ab3444af9f0a1c8f7265308c0bf7c20e18df9f5.zip
Add support for DOMString in unions (fixes #2324).
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py5
-rw-r--r--src/components/script/dom/testbinding.rs7
-rw-r--r--src/components/script/dom/webidls/TestBinding.webidl9
3 files changed, 20 insertions, 1 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index 4429298f5a4..65dbe42b4cc 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -2699,6 +2699,9 @@ def getUnionTypeTemplateVars(type, descriptorProvider):
name = str(type)
#XXXjdm dunno about typeName here
typeName = "/*" + type.name + "*/"
+ elif type.isDOMString():
+ name = type.name
+ typeName = "DOMString"
elif type.isPrimitive():
name = type.name
typeName = builtinNames[type.tag()]
@@ -5312,6 +5315,7 @@ class GlobalGenRoots():
'dom::bindings::utils::unwrap_jsmanaged',
'dom::bindings::codegen::PrototypeList',
'dom::bindings::conversions::{FromJSValConvertible, ToJSValConvertible}',
+ 'dom::bindings::conversions::{Default, Empty}',
'dom::bindings::error::throw_not_in_union',
'dom::bindings::js::JS',
'dom::types::*',
@@ -5337,6 +5341,7 @@ class GlobalGenRoots():
'js::glue::{GetProxyPrivate, NewProxyObject, ProxyTraps}',
'js::glue::{RUST_FUNCTION_VALUE_TO_JITINFO}',
'js::glue::{RUST_JS_NumberValue, RUST_JSID_IS_STRING}',
+ 'servo_util::str::DOMString',
])
# Add the auto-generated comment.
diff --git a/src/components/script/dom/testbinding.rs b/src/components/script/dom/testbinding.rs
index ed22f34edf0..7fe109d0176 100644
--- a/src/components/script/dom/testbinding.rs
+++ b/src/components/script/dom/testbinding.rs
@@ -4,7 +4,7 @@
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::codegen::BindingDeclarations::TestBindingBinding;
-use dom::bindings::codegen::UnionTypes::HTMLElementOrLong;
+use dom::bindings::codegen::UnionTypes::{HTMLElementOrLong, StringOrFormData};
use self::TestBindingBinding::TestEnum;
use self::TestBindingBinding::TestEnumValues::_empty;
use dom::bindings::str::ByteString;
@@ -102,6 +102,7 @@ pub trait TestBindingMethods {
fn PassEnum(&self, _: TestEnum) {}
fn PassInterface(&self, _: &JSRef<Blob>) {}
fn PassUnion(&self, _: HTMLElementOrLong) {}
+ fn PassUnion2(&self, _: StringOrFormData) {}
fn PassAny(&self, _: *JSContext, _: JSVal) {}
fn PassNullableBoolean(&self, _: Option<bool>) {}
@@ -120,6 +121,7 @@ pub trait TestBindingMethods {
// fn PassNullableEnum(&self, _: Option<TestEnum>) {}
fn PassNullableInterface(&self, _: Option<JSRef<Blob>>) {}
fn PassNullableUnion(&self, _: Option<HTMLElementOrLong>) {}
+ fn PassNullableUnion2(&self, _: Option<StringOrFormData>) {}
fn PassNullableAny(&self, _: *JSContext, _: Option<JSVal>) {}
fn PassOptionalBoolean(&self, _: Option<bool>) {}
@@ -138,6 +140,7 @@ pub trait TestBindingMethods {
fn PassOptionalEnum(&self, _: Option<TestEnum>) {}
fn PassOptionalInterface(&self, _: Option<JSRef<Blob>>) {}
fn PassOptionalUnion(&self, _: Option<HTMLElementOrLong>) {}
+ fn PassOptionalUnion2(&self, _: Option<StringOrFormData>) {}
fn PassOptionalAny(&self, _: *JSContext, _: Option<JSVal>) {}
fn PassOptionalNullableBoolean(&self, _: Option<Option<bool>>) {}
@@ -156,6 +159,7 @@ pub trait TestBindingMethods {
// fn PassOptionalNullableEnum(&self, _: Option<Option<TestEnum>>) {}
fn PassOptionalNullableInterface(&self, _: Option<Option<JSRef<Blob>>>) {}
fn PassOptionalNullableUnion(&self, _: Option<Option<HTMLElementOrLong>>) {}
+ fn PassOptionalNullableUnion2(&self, _: Option<Option<StringOrFormData>>) {}
fn PassOptionalBooleanWithDefault(&self, _: bool) {}
fn PassOptionalByteWithDefault(&self, _: i8) {}
@@ -185,6 +189,7 @@ pub trait TestBindingMethods {
// fn PassOptionalNullableEnumWithDefault(&self, _: Option<TestEnum>) {}
fn PassOptionalNullableInterfaceWithDefault(&self, _: Option<JSRef<Blob>>) {}
fn PassOptionalNullableUnionWithDefault(&self, _: Option<HTMLElementOrLong>) {}
+ fn PassOptionalNullableUnion2WithDefault(&self, _: Option<StringOrFormData>) {}
fn PassOptionalAnyWithDefault(&self, _: *JSContext, _: JSVal) {}
fn PassOptionalNullableBooleanWithNonNullDefault(&self, _: Option<bool>) {}
diff --git a/src/components/script/dom/webidls/TestBinding.webidl b/src/components/script/dom/webidls/TestBinding.webidl
index 89325125da2..15dc79bd2aa 100644
--- a/src/components/script/dom/webidls/TestBinding.webidl
+++ b/src/components/script/dom/webidls/TestBinding.webidl
@@ -70,6 +70,7 @@ interface TestBinding {
attribute TestEnum enumAttribute;
attribute Blob interfaceAttribute;
// attribute (HTMLElement or long) unionAttribute;
+ // attribute (DOMString or FormData) union2Attribute;
attribute any anyAttribute;
attribute boolean? booleanAttributeNullable;
@@ -88,6 +89,7 @@ interface TestBinding {
readonly attribute TestEnum? enumAttributeNullable;
attribute Blob? interfaceAttributeNullable;
// attribute (HTMLElement or long)? unionAttributeNullable;
+ // attribute (DOMString or FormData)? union2AttributeNullable;
void passBoolean(boolean arg);
void passByte(byte arg);
@@ -105,6 +107,7 @@ interface TestBinding {
void passEnum(TestEnum arg);
void passInterface(Blob arg);
void passUnion((HTMLElement or long) arg);
+ void passUnion2((DOMString or FormData) data);
void passAny(any arg);
void passNullableBoolean(boolean? arg);
@@ -123,6 +126,7 @@ interface TestBinding {
// void passNullableEnum(TestEnum? arg);
void passNullableInterface(Blob? arg);
void passNullableUnion((HTMLElement or long)? arg);
+ void passNullableUnion2((DOMString or FormData)? data);
void passOptionalBoolean(optional boolean arg);
void passOptionalByte(optional byte arg);
@@ -140,6 +144,7 @@ interface TestBinding {
void passOptionalEnum(optional TestEnum arg);
void passOptionalInterface(optional Blob arg);
void passOptionalUnion(optional (HTMLElement or long) arg);
+ void passOptionalUnion2(optional (DOMString or FormData) data);
void passOptionalAny(optional any arg);
void passOptionalNullableBoolean(optional boolean? arg);
@@ -158,6 +163,7 @@ interface TestBinding {
// void passOptionalNullableEnum(optional TestEnum? arg);
void passOptionalNullableInterface(optional Blob? arg);
void passOptionalNullableUnion(optional (HTMLElement or long)? arg);
+ void passOptionalNullableUnion2(optional (DOMString or FormData)? data);
void passOptionalBooleanWithDefault(optional boolean arg = false);
void passOptionalByteWithDefault(optional byte arg = 0);
@@ -171,6 +177,7 @@ interface TestBinding {
void passOptionalStringWithDefault(optional DOMString arg = "");
void passOptionalEnumWithDefault(optional TestEnum arg = "foo");
// void passOptionalUnionWithDefault(optional (HTMLElement or long) arg = 9);
+ // void passOptionalUnion2WithDefault(optional(DOMString or FormData)? data = "foo");
void passOptionalNullableBooleanWithDefault(optional boolean? arg = null);
void passOptionalNullableByteWithDefault(optional byte? arg = null);
@@ -186,6 +193,7 @@ interface TestBinding {
// void passOptionalNullableEnumWithDefault(optional TestEnum? arg = null);
void passOptionalNullableInterfaceWithDefault(optional Blob? arg = null);
void passOptionalNullableUnionWithDefault(optional (HTMLElement or long)? arg = null);
+ void passOptionalNullableUnion2WithDefault(optional (DOMString or FormData)? data = null);
void passOptionalAnyWithDefault(optional any arg = null);
void passOptionalNullableBooleanWithNonNullDefault(optional boolean? arg = false);
@@ -202,4 +210,5 @@ interface TestBinding {
void passOptionalNullableStringWithNonNullDefault(optional DOMString? arg = "");
// void passOptionalNullableEnumWithNonNullDefault(optional TestEnum? arg = "foo");
// void passOptionalNullableUnionWithNonNullDefault(optional (HTMLElement or long)? arg = 7);
+ // void passOptionalNullableUnion2WithNonNullDefault(optional (DOMString or FormData)? data = "foo");
};