Implement document.scrollingElement (#35994)

<!-- Please describe your changes on the following line: -->
This implements `document.scrollingElement`
(https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement).

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by
`[X]` when the step is complete, and replace `___` with appropriate
data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #35700
- [x] There are tests for these changes

<!-- Also, please make sure that "Allow edits from maintainers" checkbox
is checked, so that we can help you if you get stuck somewhere along the
way.-->

<!-- Pull requests that do not address these steps are welcome, but they
will require additional verification as part of the review process. -->

---------

Signed-off-by: JimmyDdotEXE <50691404+JimmyDdotEXE@users.noreply.github.com>
This commit is contained in:
Jimmy D. Buckets 2025-05-05 08:50:42 -04:00 committed by GitHub
parent 7ea5951e34
commit 1f6050f931
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
37 changed files with 195 additions and 272 deletions

View file

@ -6369,6 +6369,30 @@ impl DocumentMethods<crate::DomTypeHolder> for Document {
)
}
/// <https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement>
fn GetScrollingElement(&self, can_gc: CanGc) -> Option<DomRoot<Element>> {
// Step 1. If the Document is in quirks mode, follow these steps:
if self.quirks_mode() == QuirksMode::Quirks {
// Step 1.1. If the body element exists,
if let Some(ref body) = self.GetBody() {
let e = body.upcast::<Element>();
// and it is not potentially scrollable, return the body element and abort these steps.
// For this purpose, a value of overflow:clip on the the body elements parent element
// must be treated as overflow:hidden.
if !e.is_potentially_scrollable_body_for_scrolling_element(can_gc) {
return Some(DomRoot::from_ref(e));
}
}
// Step 1.2. Return null and abort these steps.
return None;
}
// Step 2. If there is a root element, return the root element and abort these steps.
// Step 3. Return null.
self.GetDocumentElement()
}
// https://html.spec.whatwg.org/multipage/#dom-document-open
fn Open(
&self,