aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py2
-rwxr-xr-xcomponents/script/dom/htmlselectelement.rs14
-rw-r--r--components/script/dom/webidls/HTMLSelectElement.webidl7
-rw-r--r--tests/wpt/metadata/custom-elements/reactions/HTMLSelectElement.html.ini14
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-select-element/select-add.html.ini7
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json30
-rw-r--r--tests/wpt/mozilla/tests/mozilla/union.html8
7 files changed, 34 insertions, 48 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index ec29a59c9d4..e0a5df68882 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -5263,7 +5263,7 @@ class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod):
CGIndenter(CGProxyNamedSetter(self.descriptor)).define() +
" return (*opresult).succeed();\n" +
"}\n")
- else:
+ elif self.descriptor.operations['NamedGetter']:
set += ("if RUST_JSID_IS_STRING(id) || RUST_JSID_IS_INT(id) {\n" +
CGIndenter(CGProxyNamedGetter(self.descriptor)).define() +
" if result.is_some() {\n"
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs
index 0ef500ccb1a..f6330b9b65a 100755
--- a/components/script/dom/htmlselectelement.rs
+++ b/components/script/dom/htmlselectelement.rs
@@ -12,6 +12,7 @@ use crate::dom::bindings::codegen::Bindings::HTMLSelectElementBinding::HTMLSelec
use crate::dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
use crate::dom::bindings::codegen::UnionTypes::HTMLElementOrLong;
use crate::dom::bindings::codegen::UnionTypes::HTMLOptionElementOrHTMLOptGroupElement;
+use crate::dom::bindings::error::ErrorResult;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::DOMString;
@@ -203,13 +204,13 @@ impl HTMLSelectElementMethods for HTMLSelectElement {
ValidityState::new(&window, self.upcast())
}
- // Note: this function currently only exists for union.html.
// https://html.spec.whatwg.org/multipage/#dom-select-add
fn Add(
&self,
- _element: HTMLOptionElementOrHTMLOptGroupElement,
- _before: Option<HTMLElementOrLong>,
- ) {
+ element: HTMLOptionElementOrHTMLOptGroupElement,
+ before: Option<HTMLElementOrLong>,
+ ) -> ErrorResult {
+ self.Options().Add(element, before)
}
// https://html.spec.whatwg.org/multipage/#dom-fe-disabled
@@ -281,6 +282,11 @@ impl HTMLSelectElementMethods for HTMLSelectElement {
self.Options().IndexedGetter(index)
}
+ // https://html.spec.whatwg.org/multipage/#dom-select-setter
+ fn IndexedSetter(&self, index: u32, value: Option<&HTMLOptionElement>) -> ErrorResult {
+ self.Options().IndexedSetter(index, value)
+ }
+
// https://html.spec.whatwg.org/multipage/#dom-select-nameditem
fn NamedItem(&self, name: DOMString) -> Option<DomRoot<HTMLOptionElement>> {
self.Options()
diff --git a/components/script/dom/webidls/HTMLSelectElement.webidl b/components/script/dom/webidls/HTMLSelectElement.webidl
index 975d198f764..1fe48bcefb2 100644
--- a/components/script/dom/webidls/HTMLSelectElement.webidl
+++ b/components/script/dom/webidls/HTMLSelectElement.webidl
@@ -28,15 +28,14 @@ interface HTMLSelectElement : HTMLElement {
attribute unsigned long length;
getter Element? item(unsigned long index);
HTMLOptionElement? namedItem(DOMString name);
- // Note: this function currently only exists for union.html.
- [CEReactions]
+
+ [CEReactions, Throws]
void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
[CEReactions]
void remove(); // ChildNode overload
[CEReactions]
void remove(long index);
- // [CEReactions]
- // setter void (unsigned long index, HTMLOptionElement? option);
+ [CEReactions, Throws] setter void (unsigned long index, HTMLOptionElement? option);
// readonly attribute HTMLCollection selectedOptions;
attribute long selectedIndex;
diff --git a/tests/wpt/metadata/custom-elements/reactions/HTMLSelectElement.html.ini b/tests/wpt/metadata/custom-elements/reactions/HTMLSelectElement.html.ini
deleted file mode 100644
index bd93572e6b1..00000000000
--- a/tests/wpt/metadata/custom-elements/reactions/HTMLSelectElement.html.ini
+++ /dev/null
@@ -1,14 +0,0 @@
-[HTMLSelectElement.html]
- type: testharness
- [The indexed setter on HTMLSelectElement must enqueue connectedCallback when inserting a custom element]
- expected: FAIL
-
- [The indexed setter on HTMLSelectElement must enqueue disconnectedCallback when removing a custom element]
- expected: FAIL
-
- [add on HTMLSelectElement must enqueue connectedCallback when inserting a custom element]
- expected: FAIL
-
- [Custom Elements: CEReactions on HTMLSelectElement interface]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/forms/the-select-element/select-add.html.ini b/tests/wpt/metadata/html/semantics/forms/the-select-element/select-add.html.ini
deleted file mode 100644
index 510c23a07de..00000000000
--- a/tests/wpt/metadata/html/semantics/forms/the-select-element/select-add.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[select-add.html]
- [test that HTMLSelectElement.add method can add option element]
- expected: FAIL
-
- [test that HierarchyRequestError exception must be thrown when element is an ancestor of the element into which it is to be inserted]
- expected: FAIL
-
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index 559e6baff6c..a829b0114b8 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -827,6 +827,18 @@
{}
]
],
+ "css/border_black_groove.html": [
+ [
+ "css/border_black_groove.html",
+ [
+ [
+ "/_mozilla/css/border_black_solid.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/border_black_ridge_a.html": [
[
"css/border_black_ridge_a.html",
@@ -7662,20 +7674,6 @@
]
]
},
- "reftest_node": {
- "css/border_black_groove.html": [
- [
- "css/border_black_groove.html",
- [
- [
- "/_mozilla/css/border_black_solid.html",
- "!="
- ]
- ],
- {}
- ]
- ]
- },
"support": {
".gitignore": [
[]
@@ -14053,7 +14051,7 @@
],
"css/border_black_groove.html": [
"49e1647a6f71e320770225ad537b4fd4020bd700",
- "reftest_node"
+ "reftest"
],
"css/border_black_ridge_a.html": [
"90cdda1dca8793a1c01b72f1ad27398903cfd823",
@@ -19552,7 +19550,7 @@
"testharness"
],
"mozilla/union.html": [
- "42012add68c355c81e793492e59b05c1ca728f2d",
+ "dec25d03b8e46791c8044c67bca93036c3e8bdeb",
"testharness"
],
"mozilla/unitless-length.html": [
diff --git a/tests/wpt/mozilla/tests/mozilla/union.html b/tests/wpt/mozilla/tests/mozilla/union.html
index 42012add68c..dec25d03b8e 100644
--- a/tests/wpt/mozilla/tests/mozilla/union.html
+++ b/tests/wpt/mozilla/tests/mozilla/union.html
@@ -6,14 +6,18 @@
<script>
test(function() {
var div = document.createElement('div');
+ var div2 = document.createElement('div');
var optgroup = document.createElement('optgroup');
var sel = document.getElementById('sel');
+ sel.appendChild(div2);
var opt = document.createElement('option');
sel.add(opt);
sel.add(optgroup);
- sel.add(opt, div);
- sel.add(optgroup, div);
+ assert_throws("NotFoundError", function() { sel.add(opt, div); });
+ assert_throws("NotFoundError", function() { sel.add(optgroup, div); });
+ sel.add(opt, div2);
+ sel.add(optgroup, div2);
sel.add(opt, 5);
sel.add(optgroup, 5);
assert_throws(new TypeError(), function() { sel.add(div) });