aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/htmltableelement.rs32
-rw-r--r--components/script/dom/webidls/HTMLTableElement.webidl2
-rw-r--r--tests/wpt/metadata/html/dom/interfaces.html.ini6
-rw-r--r--tests/wpt/metadata/html/semantics/tabular-data/the-caption-element/caption_001.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/tabular-data/the-table-element/insertRow-method-02.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/tabular-data/the-table-element/table-rows.html.ini12
6 files changed, 31 insertions, 29 deletions
diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs
index 94c0b6dc986..ab611716b90 100644
--- a/components/script/dom/htmltableelement.rs
+++ b/components/script/dom/htmltableelement.rs
@@ -8,13 +8,15 @@ use dom::bindings::codegen::Bindings::HTMLTableElementBinding;
use dom::bindings::codegen::Bindings::HTMLTableElementBinding::HTMLTableElementMethods;
use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
use dom::bindings::inheritance::Castable;
-use dom::bindings::js::{LayoutJS, Root, RootedReference};
+use dom::bindings::js::{JS, LayoutJS, Root, RootedReference};
use dom::document::Document;
use dom::element::{AttributeMutation, Element, RawLayoutElementHelpers};
+use dom::htmlcollection::{CollectionFilter, HTMLCollection};
use dom::htmlelement::HTMLElement;
use dom::htmltablecaptionelement::HTMLTableCaptionElement;
+use dom::htmltablerowelement::HTMLTableRowElement;
use dom::htmltablesectionelement::HTMLTableSectionElement;
-use dom::node::{Node, document_from_node};
+use dom::node::{Node, document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
use std::cell::Cell;
use string_cache::Atom;
@@ -51,6 +53,32 @@ impl HTMLTableElement {
}
impl HTMLTableElementMethods for HTMLTableElement {
+ // https://html.spec.whatwg.org/multipage/#dom-table-rows
+ fn Rows(&self) -> Root<HTMLCollection> {
+ #[allow(unrooted_must_root)]
+ #[derive(JSTraceable, HeapSizeOf)]
+ struct TableRowFilter {
+ sections: Vec<JS<Node>>
+ }
+
+ impl CollectionFilter for TableRowFilter {
+ fn filter(&self, elem: &Element, root: &Node) -> bool {
+ elem.is::<HTMLTableRowElement>()
+ && (root.is_parent_of(elem.upcast())
+ || self.sections.iter().any(|ref section| section.is_parent_of(elem.upcast())))
+ }
+ }
+
+ let filter = TableRowFilter {
+ sections: self.upcast::<Node>()
+ .children()
+ .filter_map(|ref node|
+ node.downcast::<HTMLTableSectionElement>().map(|_| JS::from_rooted(node)))
+ .collect()
+ };
+ HTMLCollection::new(window_from_node(self).r(), self.upcast(), box filter)
+ }
+
// https://html.spec.whatwg.org/multipage/#dom-table-caption
fn GetCaption(&self) -> Option<Root<HTMLTableCaptionElement>> {
self.upcast::<Node>().children().filter_map(Root::downcast).next()
diff --git a/components/script/dom/webidls/HTMLTableElement.webidl b/components/script/dom/webidls/HTMLTableElement.webidl
index edf8d1d720f..2697f4c1e93 100644
--- a/components/script/dom/webidls/HTMLTableElement.webidl
+++ b/components/script/dom/webidls/HTMLTableElement.webidl
@@ -16,7 +16,7 @@ interface HTMLTableElement : HTMLElement {
//void deleteTFoot();
//readonly attribute HTMLCollection tBodies;
HTMLTableSectionElement createTBody();
- //readonly attribute HTMLCollection rows;
+ readonly attribute HTMLCollection rows;
//HTMLElement insertRow(optional long index = -1);
//void deleteRow(long index);
// attribute boolean sortable;
diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini
index b28e62669b5..a1e6fcabbab 100644
--- a/tests/wpt/metadata/html/dom/interfaces.html.ini
+++ b/tests/wpt/metadata/html/dom/interfaces.html.ini
@@ -4179,9 +4179,6 @@
[HTMLTableElement interface: attribute tBodies]
expected: FAIL
- [HTMLTableElement interface: attribute rows]
- expected: FAIL
-
[HTMLTableElement interface: operation insertRow(long)]
expected: FAIL
@@ -4236,9 +4233,6 @@
[HTMLTableElement interface: document.createElement("table") must inherit property "tBodies" with the proper type (9)]
expected: FAIL
- [HTMLTableElement interface: document.createElement("table") must inherit property "rows" with the proper type (11)]
- expected: FAIL
-
[HTMLTableElement interface: document.createElement("table") must inherit property "insertRow" with the proper type (12)]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/tabular-data/the-caption-element/caption_001.html.ini b/tests/wpt/metadata/html/semantics/tabular-data/the-caption-element/caption_001.html.ini
deleted file mode 100644
index ab6dcbaa27c..00000000000
--- a/tests/wpt/metadata/html/semantics/tabular-data/the-caption-element/caption_001.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[caption_001.html]
- type: testharness
- [caption of the third table element should be null]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/insertRow-method-02.html.ini b/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/insertRow-method-02.html.ini
index 4755074483a..22418c828ba 100644
--- a/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/insertRow-method-02.html.ini
+++ b/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/insertRow-method-02.html.ini
@@ -3,9 +3,6 @@
[insertRow(): Empty table]
expected: FAIL
- [table should start out empty]
- expected: FAIL
-
[insertRow should insert a tr element]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/table-rows.html.ini b/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/table-rows.html.ini
index f79dbcc5dd2..4370c22560c 100644
--- a/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/table-rows.html.ini
+++ b/tests/wpt/metadata/html/semantics/tabular-data/the-table-element/table-rows.html.ini
@@ -1,17 +1,5 @@
[table-rows.html]
type: testharness
- [Children of table]
- expected: FAIL
-
- [Children of thead]
- expected: FAIL
-
- [Children of tbody]
- expected: FAIL
-
- [Children of tfoot]
- expected: FAIL
-
[Complicated case]
expected: FAIL