script: Chain up keyboard scrolling to parent <iframe>s (#39469)

When an `<iframe>` cannot scroll because the size of the frame is
greater than or
equal to the size of page contents, chain up the keyboard scroll
operation to the parent frame.

Testing: A new Servo-only WPT tests is added, though needs to be
manually
run with `--product servodriver`.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Delan Azabani <dazabani@igalia.com>
This commit is contained in:
Martin Robinson 2025-09-25 13:16:41 +02:00 committed by GitHub
parent 75e32ba5a4
commit ffdb7d3663
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 406 additions and 132 deletions

View file

@ -333,11 +333,17 @@ impl Layout for LayoutThread {
#[servo_tracing::instrument(skip_all)]
fn query_scroll_container(
&self,
node: TrustedNodeAddress,
node: Option<TrustedNodeAddress>,
flags: ScrollContainerQueryFlags,
) -> Option<ScrollContainerResponse> {
let node = unsafe { ServoLayoutNode::new(&node) };
process_scroll_container_query(node, flags)
let node = unsafe { node.as_ref().map(|node| ServoLayoutNode::new(node)) };
let viewport_overflow = self
.box_tree
.borrow()
.as_ref()
.expect("Should have a BoxTree for all scroll container queries.")
.viewport_overflow;
process_scroll_container_query(node, flags, viewport_overflow)
}
#[servo_tracing::instrument(skip_all)]