diff --git a/components/layout_2020/dom_traversal.rs b/components/layout_2020/dom_traversal.rs index 7d9be02634e..76e1a2b0cf9 100644 --- a/components/layout_2020/dom_traversal.rs +++ b/components/layout_2020/dom_traversal.rs @@ -169,32 +169,43 @@ fn traverse_children_of<'dom, Node>( { traverse_pseudo_element(WhichPseudoElement::Before, parent_element, context, handler); - for child in iter_child_nodes(parent_element) { - if child.is_text_node() { - let info = NodeAndStyleInfo::new(child, child.style(context)); - handler.handle_text(&info, child.to_threadsafe().node_text_content()); - } else if child.is_element() { - traverse_element(child, context, handler); - } - } - - if matches!( + let is_text_input_element = matches!( parent_element.type_id(), LayoutNodeType::Element(LayoutElementType::HTMLInputElement) - ) { + ); + + let is_textarea_element = matches!( + parent_element.type_id(), + LayoutNodeType::Element(LayoutElementType::HTMLTextAreaElement) + ); + + if is_text_input_element || is_textarea_element { let info = NodeAndStyleInfo::new(parent_element, parent_element.style(context)); - // The addition of zero-width space here forces the text input to have an inline formatting - // context that might otherwise be trimmed if there's no text. This is important to ensure - // that the input element is at least as tall as the line gap of the caret: - // . - // - // TODO: Is there a less hacky way to do this? - handler.handle_text(&info, "\u{200B}".into()); + if is_text_input_element { + // The addition of zero-width space here forces the text input to have an inline formatting + // context that might otherwise be trimmed if there's no text. This is important to ensure + // that the input element is at least as tall as the line gap of the caret: + // . + // + // TODO: Is there a less hacky way to do this? + handler.handle_text(&info, "\u{200B}".into()); + } handler.handle_text(&info, parent_element.to_threadsafe().node_text_content()); } + if !is_text_input_element && !is_textarea_element { + for child in iter_child_nodes(parent_element) { + if child.is_text_node() { + let info = NodeAndStyleInfo::new(child, child.style(context)); + handler.handle_text(&info, child.to_threadsafe().node_text_content()); + } else if child.is_element() { + traverse_element(child, context, handler); + } + } + } + traverse_pseudo_element(WhichPseudoElement::After, parent_element, context, handler); } diff --git a/tests/wpt/meta/css/css-inline/baseline-source/baseline-source-first-textarea-001.tentative.html.ini b/tests/wpt/meta/css/css-inline/baseline-source/baseline-source-first-textarea-001.tentative.html.ini index a0d601bc001..33e8242e0ef 100644 --- a/tests/wpt/meta/css/css-inline/baseline-source/baseline-source-first-textarea-001.tentative.html.ini +++ b/tests/wpt/meta/css/css-inline/baseline-source/baseline-source-first-textarea-001.tentative.html.ini @@ -5,5 +5,5 @@ [.target > * 1] expected: FAIL - [.target > * 5] + [.target > * 11] expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN.html.ini deleted file mode 100644 index d05c57232ad..00000000000 --- a/tests/wpt/meta/html/dom/elements/global-attributes/dir_auto-textarea-script-N-EN.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[dir_auto-textarea-script-N-EN.html] - expected: FAIL diff --git a/tests/wpt/meta/html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html.ini b/tests/wpt/meta/html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html.ini deleted file mode 100644 index 341c31c230c..00000000000 --- a/tests/wpt/meta/html/semantics/forms/the-textarea-element/multiline-placeholder-cr.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[multiline-placeholder-cr.html] - expected: FAIL diff --git a/tests/wpt/meta/html/semantics/forms/the-textarea-element/multiline-placeholder-crlf.html.ini b/tests/wpt/meta/html/semantics/forms/the-textarea-element/multiline-placeholder-crlf.html.ini deleted file mode 100644 index f013c959875..00000000000 --- a/tests/wpt/meta/html/semantics/forms/the-textarea-element/multiline-placeholder-crlf.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[multiline-placeholder-crlf.html] - expected: FAIL diff --git a/tests/wpt/meta/html/semantics/forms/the-textarea-element/multiline-placeholder.html.ini b/tests/wpt/meta/html/semantics/forms/the-textarea-element/multiline-placeholder.html.ini deleted file mode 100644 index da95ec74928..00000000000 --- a/tests/wpt/meta/html/semantics/forms/the-textarea-element/multiline-placeholder.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[multiline-placeholder.html] - expected: FAIL diff --git a/tests/wpt/meta/html/semantics/forms/the-textarea-element/placeholder-white-space.tentative.html.ini b/tests/wpt/meta/html/semantics/forms/the-textarea-element/placeholder-white-space.tentative.html.ini deleted file mode 100644 index ed6c90d86ff..00000000000 --- a/tests/wpt/meta/html/semantics/forms/the-textarea-element/placeholder-white-space.tentative.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[placeholder-white-space.tentative.html] - expected: FAIL diff --git a/tests/wpt/mozilla/meta/mozilla/textarea_placeholder.html.ini b/tests/wpt/mozilla/meta/mozilla/textarea_placeholder.html.ini deleted file mode 100644 index 83e7aac96c9..00000000000 --- a/tests/wpt/mozilla/meta/mozilla/textarea_placeholder.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[textarea_placeholder.html] - expected: FAIL