Auto merge of #28520 - yvt:fix-offset-queries, r=jdm

Implement `offset{Left,Top,Width,Height,Parent}` in Layout 2020

Implements `HTMLElement#offset{Left,Top,Width,Height,Parent}` ([CSSOM View Module §7]) in Layout 2020.

[CSSOM View Module §7]: https://www.w3.org/TR/2016/WD-cssom-view-1-20160317/#extensions-to-the-htmlelement-interface

---

- [x] `./mach build -d`**` --with-layout-2020`** does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #___ (GitHub issue number if applicable)

---

- [ ] There are tests for these changes OR
- [x] These changes do not require tests because the implemented items are already extensively used by the test harness for layout assertion
This commit is contained in:
bors-servo 2021-06-23 08:20:56 -04:00 committed by GitHub
commit 9d1af2ac7b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
92 changed files with 267 additions and 1045 deletions

View file

@ -437,17 +437,17 @@ impl FragmentTree {
pub(crate) fn find<T>( pub(crate) fn find<T>(
&self, &self,
mut process_func: impl FnMut(&Fragment, &PhysicalRect<Length>) -> Option<T>, mut process_func: impl FnMut(&Fragment, usize, &PhysicalRect<Length>) -> Option<T>,
) -> Option<T> { ) -> Option<T> {
self.root_fragments.iter().find_map(|child| { self.root_fragments.iter().find_map(|child| {
child child
.borrow() .borrow()
.find(&self.initial_containing_block, &mut process_func) .find(&self.initial_containing_block, 0, &mut process_func)
}) })
} }
pub fn remove_nodes_in_fragment_tree_from_set(&self, set: &mut FxHashSet<AnimationSetKey>) { pub fn remove_nodes_in_fragment_tree_from_set(&self, set: &mut FxHashSet<AnimationSetKey>) {
self.find(|fragment, _| { self.find(|fragment, _, _| {
let (node, pseudo) = match fragment.tag()? { let (node, pseudo) = match fragment.tag()? {
Tag::Node(node) => (node, None), Tag::Node(node) => (node, None),
Tag::BeforePseudo(node) => (node, Some(PseudoElement::Before)), Tag::BeforePseudo(node) => (node, Some(PseudoElement::Before)),
@ -461,7 +461,7 @@ impl FragmentTree {
pub fn get_content_box_for_node(&self, requested_node: OpaqueNode) -> Rect<Au> { pub fn get_content_box_for_node(&self, requested_node: OpaqueNode) -> Rect<Au> {
let mut bounding_box = PhysicalRect::zero(); let mut bounding_box = PhysicalRect::zero();
let tag_to_find = Tag::Node(requested_node); let tag_to_find = Tag::Node(requested_node);
self.find(|fragment, containing_block| { self.find(|fragment, _, containing_block| {
if fragment.tag() != Some(tag_to_find) { if fragment.tag() != Some(tag_to_find) {
return None::<()>; return None::<()>;
} }
@ -497,7 +497,7 @@ impl FragmentTree {
} }
pub fn get_border_dimensions_for_node(&self, requested_node: OpaqueNode) -> Rect<i32> { pub fn get_border_dimensions_for_node(&self, requested_node: OpaqueNode) -> Rect<i32> {
self.find(|fragment, containing_block| { self.find(|fragment, _, containing_block| {
let (style, padding_rect) = match fragment { let (style, padding_rect) = match fragment {
Fragment::Box(fragment) if fragment.tag.node() == requested_node => { Fragment::Box(fragment) if fragment.tag.node() == requested_node => {
(&fragment.style, fragment.padding_rect()) (&fragment.style, fragment.padding_rect())

View file

@ -227,9 +227,10 @@ impl Fragment {
pub(crate) fn find<T>( pub(crate) fn find<T>(
&self, &self,
containing_block: &PhysicalRect<Length>, containing_block: &PhysicalRect<Length>,
process_func: &mut impl FnMut(&Fragment, &PhysicalRect<Length>) -> Option<T>, level: usize,
process_func: &mut impl FnMut(&Fragment, usize, &PhysicalRect<Length>) -> Option<T>,
) -> Option<T> { ) -> Option<T> {
if let Some(result) = process_func(self, containing_block) { if let Some(result) = process_func(self, level, containing_block) {
return Some(result); return Some(result);
} }
@ -239,20 +240,22 @@ impl Fragment {
.content_rect .content_rect
.to_physical(fragment.style.writing_mode, containing_block) .to_physical(fragment.style.writing_mode, containing_block)
.translate(containing_block.origin.to_vector()); .translate(containing_block.origin.to_vector());
fragment fragment.children.iter().find_map(|child| {
.children child
.iter() .borrow()
.find_map(|child| child.borrow().find(&new_containing_block, process_func)) .find(&new_containing_block, level + 1, process_func)
})
}, },
Fragment::Anonymous(fragment) => { Fragment::Anonymous(fragment) => {
let new_containing_block = fragment let new_containing_block = fragment
.rect .rect
.to_physical(fragment.mode, containing_block) .to_physical(fragment.mode, containing_block)
.translate(containing_block.origin.to_vector()); .translate(containing_block.origin.to_vector());
fragment fragment.children.iter().find_map(|child| {
.children child
.iter() .borrow()
.find_map(|child| child.borrow().find(&new_containing_block, process_func)) .find(&new_containing_block, level + 1, process_func)
})
}, },
_ => None, _ => None,
} }

View file

@ -299,7 +299,7 @@ pub fn process_resolved_style_request<'dom>(
None => return computed_style(), None => return computed_style(),
}; };
fragment_tree fragment_tree
.find(|fragment, containing_block| { .find(|fragment, _, containing_block| {
let box_fragment = match fragment { let box_fragment = match fragment {
Fragment::Box(ref box_fragment) if box_fragment.tag == tag_to_find => box_fragment, Fragment::Box(ref box_fragment) if box_fragment.tag == tag_to_find => box_fragment,
_ => return None, _ => return None,
@ -375,8 +375,205 @@ pub fn process_resolved_style_request_for_unstyled_node<'dom>(
style.computed_value_to_string(PropertyDeclarationId::Longhand(longhand_id)) style.computed_value_to_string(PropertyDeclarationId::Longhand(longhand_id))
} }
pub fn process_offset_parent_query(_requested_node: OpaqueNode) -> OffsetParentResponse { pub fn process_offset_parent_query(
OffsetParentResponse::empty() node: OpaqueNode,
fragment_tree: Option<Arc<FragmentTree>>,
) -> OffsetParentResponse {
process_offset_parent_query_inner(node, fragment_tree)
.unwrap_or_else(OffsetParentResponse::empty)
}
#[inline]
fn process_offset_parent_query_inner(
node: OpaqueNode,
fragment_tree: Option<Arc<FragmentTree>>,
) -> Option<OffsetParentResponse> {
let fragment_tree = fragment_tree?;
struct NodeOffsetBoxInfo {
border_box: Rect<Au>,
offset_parent_node_address: Option<OpaqueNode>,
}
// https://www.w3.org/TR/2016/WD-cssom-view-1-20160317/#extensions-to-the-htmlelement-interface
let mut parent_node_addresses = Vec::new();
let node_offset_box = fragment_tree.find(|fragment, level, containing_block| {
// FIXME: Is there a less fragile way of checking whether this
// fragment is the body element, rather than just checking that
// it's at level 1 (below the root node)?
let is_body_element = level == 1;
if fragment.tag() == Some(Tag::Node(node)) {
// Only consider the first fragment of the node found as per a
// possible interpretation of the specification: "[...] return the
// y-coordinate of the top border edge of the first CSS layout box
// associated with the element [...]"
//
// FIXME: Browsers implement this all differently (e.g., [1]) -
// Firefox does returns the union of all layout elements of some
// sort. Chrome returns the first fragment for a block element (the
// same as ours) or the union of all associated fragments in the
// first containing block fragment for an inline element. We could
// implement Chrome's behavior, but our fragment tree currently
// provides insufficient information.
//
// [1]: https://github.com/w3c/csswg-drafts/issues/4541
let fragment_relative_rect = match fragment {
Fragment::Box(fragment) => fragment
.border_rect()
.to_physical(fragment.style.writing_mode, &containing_block),
Fragment::Text(fragment) => fragment
.rect
.to_physical(fragment.parent_style.writing_mode, &containing_block),
Fragment::AbsoluteOrFixedPositioned(_) |
Fragment::Image(_) |
Fragment::Anonymous(_) => unreachable!(),
};
let border_box = fragment_relative_rect.translate(containing_block.origin.to_vector());
let mut border_box = Rect::new(
Point2D::new(
Au::from_f32_px(border_box.origin.x.px()),
Au::from_f32_px(border_box.origin.y.px()),
),
Size2D::new(
Au::from_f32_px(border_box.size.width.px()),
Au::from_f32_px(border_box.size.height.px()),
),
);
// "If any of the following holds true return null and terminate
// this algorithm: [...] The elements computed value of the
// `position` property is `fixed`."
let is_fixed = match fragment {
Fragment::Box(fragment) if fragment.style.get_box().position == Position::Fixed => {
true
},
_ => false,
};
if is_body_element {
// "If the element is the HTML body element or [...] return zero
// and terminate this algorithm."
border_box.origin = Point2D::zero();
}
let offset_parent_node_address = if is_fixed {
None
} else {
// Find the nearest ancestor element eligible as `offsetParent`.
parent_node_addresses[..level]
.iter()
.rev()
.cloned()
.find_map(std::convert::identity)
};
Some(NodeOffsetBoxInfo {
border_box,
offset_parent_node_address,
})
} else {
// Record the paths of the nodes being traversed.
let parent_node_address = match fragment {
Fragment::Box(fragment) => {
let is_eligible_parent =
match (is_body_element, fragment.style.get_box().position) {
// Spec says the element is eligible as `offsetParent` if any of
// these are true:
// 1) Is the body element
// 2) Is static position *and* is a table or table cell
// 3) Is not static position
// TODO: Handle case 2
(true, _) |
(false, Position::Absolute) |
(false, Position::Relative) |
(false, Position::Fixed) => true,
// Otherwise, it's not a valid parent
(false, Position::Static) => false,
};
if let Tag::Node(node_address) = fragment.tag {
is_eligible_parent.then(|| node_address)
} else {
None
}
},
Fragment::AbsoluteOrFixedPositioned(_) |
Fragment::Text(_) |
Fragment::Image(_) |
Fragment::Anonymous(_) => None,
};
while parent_node_addresses.len() <= level {
parent_node_addresses.push(None);
}
parent_node_addresses[level] = parent_node_address;
None
}
});
// Bail out if the element doesn't have an associated fragment.
// "If any of the following holds true return null and terminate this
// algorithm: [...] The element does not have an associated CSS layout box."
// (`offsetParent`) "If the element is the HTML body element [...] return
// zero and terminate this algorithm." (others)
let node_offset_box = node_offset_box?;
let offset_parent_padding_box_corner = node_offset_box
.offset_parent_node_address
.map(|offset_parent_node_address| {
// Find the top and left padding edges of "the first CSS layout box
// associated with the `offsetParent` of the element".
//
// Since we saw `offset_parent_node_address` once, we should be able
// to find it again.
fragment_tree
.find(|fragment, _, containing_block| {
match fragment {
Fragment::Box(fragment)
if fragment.tag == Tag::Node(offset_parent_node_address) =>
{
// Again, take the *first* associated CSS layout box.
let padding_box_corner = fragment
.padding_rect()
.to_physical(fragment.style.writing_mode, &containing_block)
.origin
.to_vector() +
containing_block.origin.to_vector();
let padding_box_corner = Vector2D::new(
Au::from_f32_px(padding_box_corner.x.px()),
Au::from_f32_px(padding_box_corner.y.px()),
);
Some(padding_box_corner)
}
Fragment::AbsoluteOrFixedPositioned(_) |
Fragment::Box(_) |
Fragment::Text(_) |
Fragment::Image(_) |
Fragment::Anonymous(_) => None,
}
})
.unwrap()
})
// "If the offsetParent of the element is null," subtract zero in the
// following step.
.unwrap_or(Vector2D::zero());
Some(OffsetParentResponse {
node_address: node_offset_box.offset_parent_node_address.map(Into::into),
// "Return the result of subtracting the x-coordinate of the left
// padding edge of the first CSS layout box associated with the
// `offsetParent` of the element from the x-coordinate of the left
// border edge of the first CSS layout box associated with the element,
// relative to the initial containing block origin, ignoring any
// transforms that apply to the element and its ancestors." (and vice
// versa for the top border edge)
rect: node_offset_box
.border_box
.translate(-offset_parent_padding_box_corner),
})
} }
// https://html.spec.whatwg.org/multipage/#the-innertext-idl-attribute // https://html.spec.whatwg.org/multipage/#the-innertext-idl-attribute

View file

@ -1212,7 +1212,8 @@ impl LayoutThread {
process_resolved_font_style_query(node, property, value); process_resolved_font_style_query(node, property, value);
}, },
&QueryMsg::OffsetParentQuery(node) => { &QueryMsg::OffsetParentQuery(node) => {
rw_data.offset_parent_response = process_offset_parent_query(node); rw_data.offset_parent_response =
process_offset_parent_query(node, self.fragment_tree.borrow().clone());
}, },
&QueryMsg::StyleQuery => {}, &QueryMsg::StyleQuery => {},
&QueryMsg::NodesFromPointQuery(client_point, ref reflow_goal) => { &QueryMsg::NodesFromPointQuery(client_point, ref reflow_goal) => {

View file

@ -0,0 +1,4 @@
[abspos-in-block-in-inline-in-relpos-inline.html]
[position:absolute should be sized by the right ancestor]
expected: FAIL

View file

@ -0,0 +1,2 @@
[margin-collapse-018.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[margin-collapse-024.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[margin-collapse-027.xht]
expected: FAIL

View file

@ -1,25 +1,7 @@
[inline-negative-margin-001.html] [inline-negative-margin-001.html]
[[data-expected-height\] 3]
expected: FAIL
[[data-expected-height\] 7] [[data-expected-height\] 7]
expected: FAIL expected: FAIL
[[data-expected-height\] 4]
expected: FAIL
[[data-expected-height\] 1]
expected: FAIL
[[data-expected-height\] 2]
expected: FAIL
[[data-expected-height\] 5]
expected: FAIL
[[data-expected-height\] 6]
expected: FAIL
[[data-expected-height\] 8] [[data-expected-height\] 8]
expected: FAIL expected: FAIL

View file

@ -1,4 +0,0 @@
[auto-margins-root-element.html]
[Root element auto margins resolve]
expected: FAIL

View file

@ -1,4 +0,0 @@
[containing-block-percent-margin-left.html]
[#container 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[containing-block-percent-margin-right.html]
[#container 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[containing-block-percent-padding-bottom.html]
[#container 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[containing-block-percent-padding-left.html]
[#container 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[containing-block-percent-padding-right.html]
[#container 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[containing-block-percent-padding-top.html]
[#container 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[unresolvable-max-height.html]
[#container 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[unresolvable-min-height.html]
[#container 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[abspos-descendent-001.html]
[.flexbox 1]
expected: FAIL

View file

@ -44,9 +44,6 @@
[.flexbox 85] [.flexbox 85]
expected: FAIL expected: FAIL
[.flexbox 87]
expected: FAIL
[.flexbox 86] [.flexbox 86]
expected: FAIL expected: FAIL
@ -68,9 +65,6 @@
[.flexbox 10] [.flexbox 10]
expected: FAIL expected: FAIL
[.flexbox 109]
expected: FAIL
[.flexbox 18] [.flexbox 18]
expected: FAIL expected: FAIL
@ -107,9 +101,6 @@
[.flexbox 107] [.flexbox 107]
expected: FAIL expected: FAIL
[.flexbox 106]
expected: FAIL
[.flexbox 63] [.flexbox 63]
expected: FAIL expected: FAIL
@ -242,9 +233,6 @@
[.flexbox 6] [.flexbox 6]
expected: FAIL expected: FAIL
[.flexbox 7]
expected: FAIL
[.flexbox 2] [.flexbox 2]
expected: FAIL expected: FAIL
@ -284,18 +272,12 @@
[.flexbox 55] [.flexbox 55]
expected: FAIL expected: FAIL
[.flexbox 29]
expected: FAIL
[.flexbox 28] [.flexbox 28]
expected: FAIL expected: FAIL
[.flexbox 27] [.flexbox 27]
expected: FAIL expected: FAIL
[.flexbox 26]
expected: FAIL
[.flexbox 25] [.flexbox 25]
expected: FAIL expected: FAIL
@ -314,48 +296,3 @@
[.flexbox 120] [.flexbox 120]
expected: FAIL expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 4]
expected: FAIL
[.flexbox 11]
expected: FAIL
[.flexbox 14]
expected: FAIL
[.flexbox 22]
expected: FAIL
[.flexbox 32]
expected: FAIL
[.flexbox 52]
expected: FAIL
[.flexbox 71]
expected: FAIL
[.flexbox 74]
expected: FAIL
[.flexbox 81]
expected: FAIL
[.flexbox 84]
expected: FAIL
[.flexbox 91]
expected: FAIL
[.flexbox 94]
expected: FAIL
[.flexbox 102]
expected: FAIL
[.flexbox 112]
expected: FAIL

View file

@ -5,12 +5,6 @@
[.flexbox 4] [.flexbox 4]
expected: FAIL expected: FAIL
[.flexbox 6]
expected: FAIL
[.flexbox 7]
expected: FAIL
[.flexbox 3] [.flexbox 3]
expected: FAIL expected: FAIL
@ -23,6 +17,3 @@
[.flexbox 9] [.flexbox 9]
expected: FAIL expected: FAIL
[.flexbox 1]
expected: FAIL

View file

@ -17,18 +17,6 @@
[.rect 5] [.rect 5]
expected: FAIL expected: FAIL
[.rect 4]
expected: FAIL
[.rect 3]
expected: FAIL
[.rect 2]
expected: FAIL
[.rect 1]
expected: FAIL
[.rect 14] [.rect 14]
expected: FAIL expected: FAIL

View file

@ -1,4 +0,0 @@
[position-absolute-004.html]
[#flex 1]
expected: FAIL

View file

@ -1,5 +1,4 @@
[position-absolute-013.html] [position-absolute-013.html]
expected: TIMEOUT
[.flexbox 309] [.flexbox 309]
expected: FAIL expected: FAIL

View file

@ -1,13 +1,4 @@
[align-content-wrap-002.html] [align-content-wrap-002.html]
[.flex-horizontal, .flex-vertical 1]
expected: FAIL
[.flex-horizontal, .flex-vertical 2]
expected: FAIL
[.flex-horizontal, .flex-vertical 3]
expected: FAIL
[.flex-horizontal, .flex-vertical 4] [.flex-horizontal, .flex-vertical 4]
expected: FAIL expected: FAIL

View file

@ -1,7 +1,4 @@
[align-content-wrap-003.html] [align-content-wrap-003.html]
[.flexbox 37]
expected: FAIL
[.flexbox 4] [.flexbox 4]
expected: FAIL expected: FAIL
@ -17,9 +14,6 @@
[.flexbox 1] [.flexbox 1]
expected: FAIL expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 3] [.flexbox 3]
expected: FAIL expected: FAIL
@ -32,18 +26,6 @@
[.flexbox 9] [.flexbox 9]
expected: FAIL expected: FAIL
[.flexbox 16]
expected: FAIL
[.flexbox 17]
expected: FAIL
[.flexbox 14]
expected: FAIL
[.flexbox 15]
expected: FAIL
[.flexbox 12] [.flexbox 12]
expected: FAIL expected: FAIL
@ -53,9 +35,6 @@
[.flexbox 10] [.flexbox 10]
expected: FAIL expected: FAIL
[.flexbox 11]
expected: FAIL
[.flexbox 34] [.flexbox 34]
expected: FAIL expected: FAIL
@ -74,18 +53,6 @@
[.flexbox 31] [.flexbox 31]
expected: FAIL expected: FAIL
[.flexbox 18]
expected: FAIL
[.flexbox 19]
expected: FAIL
[.flexbox 38]
expected: FAIL
[.flexbox 39]
expected: FAIL
[.flexbox 29] [.flexbox 29]
expected: FAIL expected: FAIL
@ -122,9 +89,6 @@
[.flexbox 41] [.flexbox 41]
expected: FAIL expected: FAIL
[.flexbox 40]
expected: FAIL
[.flexbox 43] [.flexbox 43]
expected: FAIL expected: FAIL

View file

@ -2,30 +2,9 @@
[.flexbox 10] [.flexbox 10]
expected: FAIL expected: FAIL
[.flexbox 4]
expected: FAIL
[.flexbox 8] [.flexbox 8]
expected: FAIL expected: FAIL
[.flexbox 9] [.flexbox 9]
expected: FAIL expected: FAIL
[.flexbox 5]
expected: FAIL
[.flexbox 6]
expected: FAIL
[.flexbox 7]
expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 3]
expected: FAIL

View file

@ -1,7 +0,0 @@
[box-sizing-min-max-sizes-001.html]
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL

View file

@ -1,7 +0,0 @@
[column-flex-child-with-overflow-scroll.html]
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL

View file

@ -1,17 +1,7 @@
[dynamic-grid-flex-abspos.html] [dynamic-grid-flex-abspos.html]
[.relpos 1]
expected: FAIL
[.relpos 2]
expected: FAIL
[.relpos 3]
expected: FAIL
[.relpos 4] [.relpos 4]
expected: FAIL expected: FAIL
[.relpos 5]
expected: FAIL
[.relpos 6]
expected: FAIL
[.relpos 7]
expected: FAIL
[.relpos 8] [.relpos 8]
expected: FAIL expected: FAIL

View file

@ -8,15 +8,6 @@
[.flexbox 7] [.flexbox 7]
expected: FAIL expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 8]
expected: FAIL
[.flexbox 4]
expected: FAIL
[.flexbox 6] [.flexbox 6]
expected: FAIL expected: FAIL
@ -26,5 +17,3 @@
[.flexbox 3] [.flexbox 3]
expected: FAIL expected: FAIL
[.flexbox 9]
expected: FAIL

View file

@ -1,4 +0,0 @@
[flex-column-relayout-assert.html]
[.flexbox 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[flex-direction-column-overlap-001.html]
[#container 1]
expected: FAIL

View file

@ -1,7 +1,4 @@
[flex-factor-less-than-one.html] [flex-factor-less-than-one.html]
[.flexbox 4]
expected: FAIL
[.flexbox 5] [.flexbox 5]
expected: FAIL expected: FAIL
@ -14,9 +11,6 @@
[.flexbox 8] [.flexbox 8]
expected: FAIL expected: FAIL
[.flexbox 9]
expected: FAIL
[.flexbox 16] [.flexbox 16]
expected: FAIL expected: FAIL
@ -29,12 +23,6 @@
[.flexbox 12] [.flexbox 12]
expected: FAIL expected: FAIL
[.flexbox 13]
expected: FAIL
[.flexbox 18]
expected: FAIL
[.flexbox 19] [.flexbox 19]
expected: FAIL expected: FAIL
@ -47,21 +35,3 @@
[.flexbox 20] [.flexbox 20]
expected: FAIL expected: FAIL
[.flexbox 6]
expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 15]
expected: FAIL
[.flexbox 10]
expected: FAIL
[.flexbox 11]
expected: FAIL

View file

@ -2,9 +2,6 @@
[.flexbox 12] [.flexbox 12]
expected: FAIL expected: FAIL
[.flexbox 10]
expected: FAIL
[.flexbox 11] [.flexbox 11]
expected: FAIL expected: FAIL
@ -26,9 +23,6 @@
[.flexbox 8] [.flexbox 8]
expected: FAIL expected: FAIL
[.flexbox 9]
expected: FAIL
[.flexbox 1] [.flexbox 1]
expected: FAIL expected: FAIL

View file

@ -1,16 +1,4 @@
[flex-item-compressible-001.html] [flex-item-compressible-001.html]
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 6]
expected: FAIL
[.flexbox 7]
expected: FAIL
[.flexbox 14] [.flexbox 14]
expected: FAIL expected: FAIL

View file

@ -11,3 +11,15 @@
[.inline-flex 8] [.inline-flex 8]
expected: FAIL expected: FAIL
[.inline-flex 1]
expected: FAIL
[.inline-flex 2]
expected: FAIL
[.inline-flex 5]
expected: FAIL
[.inline-flex 6]
expected: FAIL

View file

@ -1,7 +0,0 @@
[flex-minimum-height-flex-items-009.html]
[.container 2]
expected: FAIL
[.container 1]
expected: FAIL

View file

@ -1,7 +0,0 @@
[flex-minimum-height-flex-items-010.html]
[.container 2]
expected: FAIL
[.container 1]
expected: FAIL

View file

@ -11,9 +11,6 @@
[.flexbox, .inline-flexbox 4] [.flexbox, .inline-flexbox 4]
expected: FAIL expected: FAIL
[.flexbox, .inline-flexbox 3]
expected: FAIL
[.flexbox, .inline-flexbox 2] [.flexbox, .inline-flexbox 2]
expected: FAIL expected: FAIL

View file

@ -1,4 +0,0 @@
[flex-outer-flexbox-column-recalculate-height-on-resize-001.html]
[.OuterFlexbox 1]
expected: FAIL

View file

@ -1,7 +0,0 @@
[flex-shorthand-flex-basis-middle.html]
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL

View file

@ -1,4 +0,0 @@
[flexbox_width-change-and-relayout-children.html]
[#container 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[flexitem-no-margin-collapsing.html]
[.flexbox 1]
expected: FAIL

View file

@ -1,7 +0,0 @@
[height-percentage-with-dynamic-container-size.html]
[.container 1]
expected: FAIL
[.container 2]
expected: FAIL
[.container 3]
expected: FAIL

View file

@ -1,55 +1,19 @@
[image-as-flexitem-size-001.html] [image-as-flexitem-size-001.html]
[.flexbox > img 1]
expected: FAIL
[.flexbox > img 2]
expected: FAIL
[.flexbox > img 3] [.flexbox > img 3]
expected: FAIL expected: FAIL
[.flexbox > img 4] [.flexbox > img 4]
expected: FAIL expected: FAIL
[.flexbox > img 5]
expected: FAIL
[.flexbox > img 6] [.flexbox > img 6]
expected: FAIL expected: FAIL
[.flexbox > img 7] [.flexbox > img 7]
expected: FAIL expected: FAIL
[.flexbox > img 8]
expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 12]
expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 18]
expected: FAIL

View file

@ -2,54 +2,18 @@
[.flexbox > img 4] [.flexbox > img 4]
expected: FAIL expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 12]
expected: FAIL
[.flexbox > img 18]
expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 8]
expected: FAIL
[.flexbox > img 5]
expected: FAIL
[.flexbox > img 7] [.flexbox > img 7]
expected: FAIL expected: FAIL
[.flexbox > img 6] [.flexbox > img 6]
expected: FAIL expected: FAIL
[.flexbox > img 1]
expected: FAIL
[.flexbox > img 3] [.flexbox > img 3]
expected: FAIL expected: FAIL
[.flexbox > img 2]
expected: FAIL

View file

@ -2,54 +2,18 @@
[.flexbox > img 4] [.flexbox > img 4]
expected: FAIL expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 12]
expected: FAIL
[.flexbox > img 18]
expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 8]
expected: FAIL
[.flexbox > img 5]
expected: FAIL
[.flexbox > img 7] [.flexbox > img 7]
expected: FAIL expected: FAIL
[.flexbox > img 6] [.flexbox > img 6]
expected: FAIL expected: FAIL
[.flexbox > img 1]
expected: FAIL
[.flexbox > img 3] [.flexbox > img 3]
expected: FAIL expected: FAIL
[.flexbox > img 2]
expected: FAIL

View file

@ -2,54 +2,18 @@
[.flexbox > img 4] [.flexbox > img 4]
expected: FAIL expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 12]
expected: FAIL
[.flexbox > img 18]
expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 8]
expected: FAIL
[.flexbox > img 5]
expected: FAIL
[.flexbox > img 7] [.flexbox > img 7]
expected: FAIL expected: FAIL
[.flexbox > img 6] [.flexbox > img 6]
expected: FAIL expected: FAIL
[.flexbox > img 1]
expected: FAIL
[.flexbox > img 3] [.flexbox > img 3]
expected: FAIL expected: FAIL
[.flexbox > img 2]
expected: FAIL

View file

@ -14,42 +14,12 @@
[.flexbox > img 8] [.flexbox > img 8]
expected: FAIL expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 12]
expected: FAIL
[.flexbox > img 4]
expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 18]
expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 3] [.flexbox > img 3]
expected: FAIL expected: FAIL
[.flexbox > img 2]
expected: FAIL

View file

@ -14,42 +14,12 @@
[.flexbox > img 8] [.flexbox > img 8]
expected: FAIL expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 12]
expected: FAIL
[.flexbox > img 4]
expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 18]
expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 3] [.flexbox > img 3]
expected: FAIL expected: FAIL
[.flexbox > img 2]
expected: FAIL

View file

@ -2,9 +2,6 @@
[.flexbox > img 15] [.flexbox > img 15]
expected: FAIL expected: FAIL
[.flexbox > img 11]
expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
@ -35,12 +32,6 @@
[.flexbox > img 14] [.flexbox > img 14]
expected: FAIL expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 12] [.flexbox > img 12]
expected: FAIL expected: FAIL

View file

@ -2,9 +2,6 @@
[.flexbox > img 15] [.flexbox > img 15]
expected: FAIL expected: FAIL
[.flexbox > img 11]
expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
@ -35,12 +32,6 @@
[.flexbox > img 14] [.flexbox > img 14]
expected: FAIL expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 12] [.flexbox > img 12]
expected: FAIL expected: FAIL

View file

@ -1,19 +1,7 @@
[image-as-flexitem-size-005.html] [image-as-flexitem-size-005.html]
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 10]
expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 18] [.flexbox > img 18]
expected: FAIL expected: FAIL
@ -35,9 +23,6 @@
[.flexbox > img 1] [.flexbox > img 1]
expected: FAIL expected: FAIL
[.flexbox > img 3]
expected: FAIL
[.flexbox > img 2] [.flexbox > img 2]
expected: FAIL expected: FAIL

View file

@ -11,21 +11,9 @@
[.flexbox > img 17] [.flexbox > img 17]
expected: FAIL expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 10]
expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 18] [.flexbox > img 18]
expected: FAIL expected: FAIL
@ -47,9 +35,6 @@
[.flexbox > img 1] [.flexbox > img 1]
expected: FAIL expected: FAIL
[.flexbox > img 3]
expected: FAIL
[.flexbox > img 2] [.flexbox > img 2]
expected: FAIL expected: FAIL

View file

@ -1,55 +1,19 @@
[image-as-flexitem-size-007.html] [image-as-flexitem-size-007.html]
[.flexbox > img 1]
expected: FAIL
[.flexbox > img 2]
expected: FAIL
[.flexbox > img 3] [.flexbox > img 3]
expected: FAIL expected: FAIL
[.flexbox > img 4] [.flexbox > img 4]
expected: FAIL expected: FAIL
[.flexbox > img 5]
expected: FAIL
[.flexbox > img 6] [.flexbox > img 6]
expected: FAIL expected: FAIL
[.flexbox > img 7] [.flexbox > img 7]
expected: FAIL expected: FAIL
[.flexbox > img 8]
expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 12]
expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 18]
expected: FAIL

View file

@ -2,54 +2,18 @@
[.flexbox > img 4] [.flexbox > img 4]
expected: FAIL expected: FAIL
[.flexbox > img 15]
expected: FAIL
[.flexbox > img 14]
expected: FAIL
[.flexbox > img 17]
expected: FAIL
[.flexbox > img 16]
expected: FAIL
[.flexbox > img 11] [.flexbox > img 11]
expected: FAIL expected: FAIL
[.flexbox > img 10] [.flexbox > img 10]
expected: FAIL expected: FAIL
[.flexbox > img 13]
expected: FAIL
[.flexbox > img 12]
expected: FAIL
[.flexbox > img 18]
expected: FAIL
[.flexbox > img 9]
expected: FAIL
[.flexbox > img 8]
expected: FAIL
[.flexbox > img 5]
expected: FAIL
[.flexbox > img 7] [.flexbox > img 7]
expected: FAIL expected: FAIL
[.flexbox > img 6] [.flexbox > img 6]
expected: FAIL expected: FAIL
[.flexbox > img 1]
expected: FAIL
[.flexbox > img 3] [.flexbox > img 3]
expected: FAIL expected: FAIL
[.flexbox > img 2]
expected: FAIL

View file

@ -1,4 +0,0 @@
[inline-flex.html]
[#testcase 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[justify-content_space-between-002.html]
[.flexbox 1]
expected: FAIL

View file

@ -1,7 +1,4 @@
[max-width-violation.html] [max-width-violation.html]
[.columns 1]
expected: FAIL
[.columns 2] [.columns 2]
expected: FAIL expected: FAIL

View file

@ -1,43 +1,10 @@
[multiline-min-max.html] [multiline-min-max.html]
[.flexbox 14]
expected: FAIL
[.flexbox 12] [.flexbox 12]
expected: FAIL expected: FAIL
[.flexbox 13] [.flexbox 13]
expected: FAIL expected: FAIL
[.flexbox 10]
expected: FAIL
[.flexbox 11]
expected: FAIL
[.flexbox 4]
expected: FAIL
[.flexbox 5] [.flexbox 5]
expected: FAIL expected: FAIL
[.flexbox 6]
expected: FAIL
[.flexbox 7]
expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 3]
expected: FAIL
[.flexbox 8]
expected: FAIL
[.flexbox 9]
expected: FAIL

View file

@ -1,4 +0,0 @@
[order_value.html]
[CSS Flexible Box Test: order_check]
expected: FAIL

View file

@ -1,7 +0,0 @@
[orthogonal-writing-modes-and-intrinsic-sizing.html]
[.flexbox 2]
expected: FAIL
[.flexbox 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[overflow-auto-002.html]
[section 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[overflow-auto-003.html]
[.flexbox 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[overflow-auto-004.html]
[#list-wrapper 1]
expected: FAIL

View file

@ -2,27 +2,9 @@
[.flexbox, .inline-flexbox 10] [.flexbox, .inline-flexbox 10]
expected: FAIL expected: FAIL
[.flexbox, .inline-flexbox 3]
expected: FAIL
[.flexbox, .inline-flexbox 2]
expected: FAIL
[.flexbox, .inline-flexbox 1]
expected: FAIL
[.flexbox, .inline-flexbox 7] [.flexbox, .inline-flexbox 7]
expected: FAIL expected: FAIL
[.flexbox, .inline-flexbox 6]
expected: FAIL
[.flexbox, .inline-flexbox 5]
expected: FAIL
[.flexbox, .inline-flexbox 4]
expected: FAIL
[.flexbox, .inline-flexbox 9] [.flexbox, .inline-flexbox 9]
expected: FAIL expected: FAIL

View file

@ -1,40 +0,0 @@
[percentage-heights-001.html]
[.flexbox 12]
expected: FAIL
[.flexbox 13]
expected: FAIL
[.flexbox 10]
expected: FAIL
[.flexbox 11]
expected: FAIL
[.flexbox 4]
expected: FAIL
[.flexbox 5]
expected: FAIL
[.flexbox 6]
expected: FAIL
[.flexbox 7]
expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 3]
expected: FAIL
[.flexbox 8]
expected: FAIL
[.flexbox 9]
expected: FAIL

View file

@ -5,9 +5,6 @@
[.flexbox 7] [.flexbox 7]
expected: FAIL expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2] [.flexbox 2]
expected: FAIL expected: FAIL

View file

@ -1,4 +0,0 @@
[percentage-heights-011.html]
[#outer 1]
expected: FAIL

View file

@ -1,31 +1,7 @@
[percentage-heights-012.html] [percentage-heights-012.html]
[.flexbox 4]
expected: FAIL
[.flexbox 5]
expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 3]
expected: FAIL
[.flexbox 9] [.flexbox 9]
expected: FAIL expected: FAIL
[.flexbox 10] [.flexbox 10]
expected: FAIL expected: FAIL
[.flexbox 6]
expected: FAIL
[.flexbox 7]
expected: FAIL
[.flexbox 8]
expected: FAIL

View file

@ -2,12 +2,6 @@
[.flexbox 4] [.flexbox 4]
expected: FAIL expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 3] [.flexbox 3]
expected: FAIL expected: FAIL

View file

@ -2,9 +2,3 @@
[.flexbox 1] [.flexbox 1]
expected: FAIL expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 3]
expected: FAIL

View file

@ -1,7 +1,4 @@
[percentage-max-width-cross-axis.html] [percentage-max-width-cross-axis.html]
[.flexbox 1]
expected: FAIL
[.flexbox 2] [.flexbox 2]
expected: FAIL expected: FAIL

View file

@ -1,4 +0,0 @@
[percentage-padding-001.html]
[x-flexbox 1]
expected: FAIL

View file

@ -1,7 +1,4 @@
[percentage-size-quirks-002.html] [percentage-size-quirks-002.html]
[.pct 1]
expected: FAIL
[.pct 2] [.pct 2]
expected: FAIL expected: FAIL

View file

@ -2,21 +2,6 @@
[.flexbox 8] [.flexbox 8]
expected: FAIL expected: FAIL
[.flexbox 4]
expected: FAIL
[.flexbox 5]
expected: FAIL
[.flexbox 7]
expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 3] [.flexbox 3]
expected: FAIL expected: FAIL

View file

@ -2,21 +2,6 @@
[.flexbox 8] [.flexbox 8]
expected: FAIL expected: FAIL
[.flexbox 4]
expected: FAIL
[.flexbox 5]
expected: FAIL
[.flexbox 7]
expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL
[.flexbox 3] [.flexbox 3]
expected: FAIL expected: FAIL

View file

@ -1,4 +0,0 @@
[position-relative-percentage-top-001.html]
[.border 1]
expected: FAIL

View file

@ -0,0 +1,4 @@
[radiobutton-min-size.html]
[two radio button widths are identical]
expected: FAIL

View file

@ -1,7 +0,0 @@
[relayout-align-items.html]
[.flexbox 1]
expected: FAIL
[.flexbox 2]
expected: FAIL

View file

@ -1,4 +0,0 @@
[relayout-input.html]
[#target 1]
expected: FAIL

View file

@ -1,4 +0,0 @@
[stretch-after-sibling-size-change.html]
[.flexbox 1]
expected: FAIL

View file

@ -2,18 +2,9 @@
[.flexbox 4] [.flexbox 4]
expected: FAIL expected: FAIL
[.flexbox 5]
expected: FAIL
[.flexbox 6] [.flexbox 6]
expected: FAIL expected: FAIL
[.flexbox 1]
expected: FAIL
[.flexbox 2] [.flexbox 2]
expected: FAIL expected: FAIL
[.flexbox 3]
expected: FAIL

View file

@ -1,7 +0,0 @@
[table-with-percent-intrinsic-width.html]
[table 2]
expected: FAIL
[table 1]
expected: FAIL

View file

@ -1,85 +0,0 @@
[offsetTopLeft-border-box.html]
[container: 0]
expected: FAIL
[container: 1]
expected: FAIL
[container: 2]
expected: FAIL
[container: 3]
expected: FAIL
[container: 4]
expected: FAIL
[container: 5]
expected: FAIL
[container: 6]
expected: FAIL
[container: 7]
expected: FAIL
[container: 8]
expected: FAIL
[container: 9]
expected: FAIL
[container: 10]
expected: FAIL
[container: 11]
expected: FAIL
[container: 12]
expected: FAIL
[container: 13]
expected: FAIL
[container: 14]
expected: FAIL
[container: 15]
expected: FAIL
[container: 16]
expected: FAIL
[container: 17]
expected: FAIL
[container: 18]
expected: FAIL
[container: 19]
expected: FAIL
[container: 20]
expected: FAIL
[container: 21]
expected: FAIL
[container: 22]
expected: FAIL
[container: 23]
expected: FAIL
[container: 24]
expected: FAIL
[container: 25]
expected: FAIL
[container: 26]
expected: FAIL
[container: 27]
expected: FAIL

View file

@ -0,0 +1,7 @@
[offsetTopLeft-trailing-space-inline.html]
[offsetTop/Left of empty inline elements should work as if they were not empty: 1]
expected: FAIL
[offsetTop/Left of empty inline elements should work as if they were not empty: 2]
expected: FAIL

View file

@ -1,25 +1,4 @@
[offsetTopLeftInScrollableParent.html] [offsetTopLeftInScrollableParent.html]
[Margins on child and parent, border on child]
expected: FAIL
[Margins on child and parent]
expected: FAIL
[Basic functionality]
expected: FAIL
[Margins on child and parent, border on child and parent, padding on child]
expected: FAIL
[Margins on child]
expected: FAIL
[Margins on child and parent, border on child and parent, padding on child and parent] [Margins on child and parent, border on child and parent, padding on child and parent]
expected: FAIL expected: FAIL
[Basic functionality in scrolled parent]
expected: FAIL
[Margins on child and parent, border on child and parent]
expected: FAIL

View file

@ -0,0 +1,4 @@
[table-border-collapse-client-width-height.html]
[Table's clientWidth/Height and OffsetWidth/Height should be the same]
expected: FAIL

View file

@ -0,0 +1,4 @@
[table-border-separate-client-width-height.html]
[Table's clientWidth/Height and OffsetWidth/Height should be the same]
expected: FAIL

View file

@ -0,0 +1,4 @@
[table-with-border-client-width-height.html]
[Table's clientWidth/Height and OffsetWidth/Height should be the same]
expected: FAIL

View file

@ -1,4 +0,0 @@
[offset_properties_inline.html]
[offsetParent]
expected: FAIL