diff --git a/components/layout_2020/flow/root.rs b/components/layout_2020/flow/root.rs index 80a42c70701..fb05049f4a8 100644 --- a/components/layout_2020/flow/root.rs +++ b/components/layout_2020/flow/root.rs @@ -538,6 +538,39 @@ impl FragmentTree { }) .unwrap_or_else(Rect::zero) } + + pub fn get_scroll_area_for_node(&self, requested_node: OpaqueNode) -> Rect { + let mut scroll_area: PhysicalRect = PhysicalRect::zero(); + let tag_to_find = Tag::Node(requested_node); + self.find(|fragment, _, containing_block| { + if fragment.tag() != Some(tag_to_find) { + return None::<()>; + } + + scroll_area = match fragment { + Fragment::Box(fragment) => fragment + .scrollable_overflow(&containing_block) + .translate(containing_block.origin.to_vector()), + Fragment::Text(_) | + Fragment::AbsoluteOrFixedPositioned(_) | + Fragment::Image(_) | + Fragment::IFrame(_) | + Fragment::Anonymous(_) => return None, + }; + None::<()> + }); + + Rect::new( + Point2D::new( + scroll_area.origin.x.px() as i32, + scroll_area.origin.y.px() as i32, + ), + Size2D::new( + scroll_area.size.width.px() as i32, + scroll_area.size.height.px() as i32, + ), + ) + } } /// https://drafts.csswg.org/css-backgrounds/#root-background diff --git a/components/layout_2020/query.rs b/components/layout_2020/query.rs index 0e99ec88fac..f59163a3a7c 100644 --- a/components/layout_2020/query.rs +++ b/components/layout_2020/query.rs @@ -201,8 +201,15 @@ pub fn process_node_scroll_id_request<'dom>( } /// https://drafts.csswg.org/cssom-view/#scrolling-area -pub fn process_node_scroll_area_request(_requested_node: OpaqueNode) -> Rect { - Rect::zero() +pub fn process_node_scroll_area_request( + requested_node: OpaqueNode, + fragment_tree: Option>, +) -> Rect { + if let Some(fragment_tree) = fragment_tree { + fragment_tree.get_scroll_area_for_node(requested_node) + } else { + Rect::zero() + } } /// Return the resolved value of property for a given (pseudo)element. diff --git a/components/layout_thread_2020/lib.rs b/components/layout_thread_2020/lib.rs index 0a1dff2d284..18851ef905c 100644 --- a/components/layout_thread_2020/lib.rs +++ b/components/layout_thread_2020/lib.rs @@ -1184,7 +1184,8 @@ impl LayoutThread { process_node_geometry_request(node, self.fragment_tree.borrow().clone()); }, &QueryMsg::NodeScrollGeometryQuery(node) => { - rw_data.scroll_area_response = process_node_scroll_area_request(node); + rw_data.scroll_area_response = + process_node_scroll_area_request(node, self.fragment_tree.borrow().clone()); }, &QueryMsg::NodeScrollIdQuery(node) => { let node = unsafe { ServoLayoutNode::new(&node) }; diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-attachment-local/attachment-local-positioning-2.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-attachment-local/attachment-local-positioning-2.html.ini deleted file mode 100644 index c2c7efbdb1e..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-attachment-local/attachment-local-positioning-2.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[attachment-local-positioning-2.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-attachment-local/attachment-scroll-positioning-1.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-attachment-local/attachment-scroll-positioning-1.html.ini deleted file mode 100644 index 56dea1c6b86..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-attachment-local/attachment-scroll-positioning-1.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[attachment-scroll-positioning-1.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/scroll-positioned-multiple-background-images.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/scroll-positioned-multiple-background-images.html.ini deleted file mode 100644 index b5ff1f789a7..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-backgrounds/scroll-positioned-multiple-background-images.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[scroll-positioned-multiple-background-images.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/containing-block-change-scrollframe.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/containing-block-change-scrollframe.html.ini deleted file mode 100644 index 242f79c08a9..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-position/containing-block-change-scrollframe.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[containing-block-change-scrollframe.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/position-absolute-under-non-containing-stacking-context.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/position-absolute-under-non-containing-stacking-context.html.ini new file mode 100644 index 00000000000..ac4f8b57db3 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-position/position-absolute-under-non-containing-stacking-context.html.ini @@ -0,0 +1,2 @@ +[position-absolute-under-non-containing-stacking-context.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/positon-absolute-scrollable-overflow-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/positon-absolute-scrollable-overflow-001.html.ini index 9293d969cdb..85b4aad53ef 100644 --- a/tests/wpt/metadata-layout-2020/css/css-position/positon-absolute-scrollable-overflow-001.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-position/positon-absolute-scrollable-overflow-001.html.ini @@ -28,15 +28,3 @@ [.containing-block 14] expected: FAIL - - [.containing-block 5] - expected: FAIL - - [.containing-block 6] - expected: FAIL - - [.containing-block 12] - expected: FAIL - - [.containing-block 13] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-escape-scroller-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-escape-scroller-001.html.ini deleted file mode 100644 index 3018d79f1af..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-escape-scroller-001.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[position-sticky-escape-scroller-001.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-escape-scroller-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-escape-scroller-003.html.ini deleted file mode 100644 index 990a7ae58c6..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-escape-scroller-003.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[position-sticky-escape-scroller-003.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-fractional-offset.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-fractional-offset.html.ini deleted file mode 100644 index 396d46a2f2b..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-fractional-offset.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[position-sticky-fractional-offset.html] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-overflow-padding.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-overflow-padding.html.ini index 7fb4bc0467c..c36358f4f58 100644 --- a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-overflow-padding.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-overflow-padding.html.ini @@ -1,6 +1,3 @@ [position-sticky-overflow-padding.html] [Ancestor overflow padding does not allow a sticky element to escape its container] expected: FAIL - - [A sticky element should be offset by ancestor padding even when stuck] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-scrolled-remove-sibling.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-scrolled-remove-sibling.html.ini deleted file mode 100644 index 7272a91e0af..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-scrolled-remove-sibling.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[position-sticky-scrolled-remove-sibling.html] - [Sticky position and its overflow contribution in the vertical axis] - expected: FAIL - - [Sticky position and its overflow contribution in the horizontal axis] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-table-td-top.html.ini b/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-table-td-top.html.ini new file mode 100644 index 00000000000..c1aa4f40983 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-position/sticky/position-sticky-table-td-top.html.ini @@ -0,0 +1,2 @@ +[position-sticky-table-td-top.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini index 314dca9c1f5..153b135b9a9 100644 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini @@ -1,3 +1,9 @@ [MediaQueryList-addListener-removeListener.html] [listeners are called when