mirror of
https://github.com/servo/servo
synced 2026-05-14 10:56:44 +02:00
0a4dd17566a2789c8faef007fdb5ee79bb04962d
Document element in element.scrollLeft and similar methods (#41234)
This PR fixes an issue where the Shadow DOM roots were incorrectly identified as the document roots in scroll and dimension calculations. The previous check `*self.root_element() == *self` returned true for shadow roots which caused `scrollTop`, `scrollLeft`, `clientWidth` to return viewport dimensions instead of actual dimensions. The previous check was replaced with the already existing `self.is_document_element()` to check for actual roots. Testing: - This causes `shadow-dom/scroll-restore-shadow.html` to start passing. - It was also locally tested on the tests given by @rayguo17 ( [clientWidth Test](https://github.com/servo/servo/issues/41002#issue-3684265503) and [scrollTop Test](https://github.com/servo/servo/issues/41002#issuecomment-3605214797) ) Test results: ``` No build type specified so assuming `--dev`. shadow_host_client_width: 300 shadow_root_element_client_width: 300 No build type specified so assuming `--dev`. shadow host scrollTop: 0 shadow_root_element_scrollTop: 0 document root element scrollTop: 536 Button in shadow DOM clicked ``` Fixes: #41002 --------- Signed-off-by: zen-zap <pandaashutosh340@gmail.com>
script: Do not conflate shadow roots and the
Document element in element.scrollLeft and similar methods (#41234)
script: Do not conflate shadow roots and the
Document element in element.scrollLeft and similar methods (#41234)
The Servo Parallel Browser Engine Project
Servo is a prototype web browser engine written in the Rust language. It is currently developed on 64-bit macOS, 64-bit Linux, 64-bit Windows, 64-bit OpenHarmony, and Android.
Servo welcomes contribution from everyone. Check out:
- The Servo Book for documentation
- servo.org for news and guides
Coordination of Servo development happens:
- Here in the Github Issues
- On the Servo Zulip
- In video calls advertised in the Servo Project repo.
Getting started
For more detailed build instructions, see the Servo Book under Getting the Code and Building Servo.
macOS
- Download and install Xcode and
brew. - Install
uv:curl -LsSf https://astral.sh/uv/install.sh | sh - Install
rustup:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Restart your shell to make sure
cargois available - Install the other dependencies:
./mach bootstrap - Build servoshell:
./mach build
Linux
- Install
curl:- Arch:
sudo pacman -S --needed curl - Debian, Ubuntu:
sudo apt install curl - Fedora:
sudo dnf install curl - Gentoo:
sudo emerge net-misc/curl
- Arch:
- Install
uv:curl -LsSf https://astral.sh/uv/install.sh | sh - Install
rustup:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Restart your shell to make sure
cargois available - Install the other dependencies:
./mach bootstrap - Build servoshell:
./mach build
Windows
- Download
uv,choco, andrustup- Be sure to select Quick install via the Visual Studio Community installer
- In the Visual Studio Installer, ensure the following components are installed:
- Windows 10/11 SDK (anything >= 10.0.19041.0) (
Microsoft.VisualStudio.Component.Windows{10, 11}SDK.{>=19041}) - MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest) (
Microsoft.VisualStudio.Component.VC.Tools.x86.x64) - C++ ATL for latest v143 build tools (x86 & x64) (
Microsoft.VisualStudio.Component.VC.ATL)
- Windows 10/11 SDK (anything >= 10.0.19041.0) (
- Restart your shell to make sure
cargois available - Install the other dependencies:
.\mach bootstrap - Build servoshell:
.\mach build
Android
- Ensure that the following environment variables are set:
ANDROID_SDK_ROOTANDROID_NDK_ROOT:$ANDROID_SDK_ROOT/ndk/28.2.13676358/ANDROID_SDK_ROOTcan be any directory (such as~/android-sdk). All of the Android build dependencies will be installed there.
- Install the latest version of the Android command-line
tools to
$ANDROID_SDK_ROOT/cmdline-tools/latest. - Run the following command to install the necessary components:
sudo $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --install \ "build-tools;34.0.0" \ "emulator" \ "ndk;28.2.13676358" \ "platform-tools" \ "platforms;android-33" \ "system-images;android-33;google_apis;x86_64" - Follow the instructions above for the platform you are building on
OpenHarmony
- Follow the instructions above for the platform you are building on to prepare the environment.
- Depending on the target distribution (e.g.
HarmonyOS NEXTvs pureOpenHarmony) the build configuration will differ slightly. - Ensure that the following environment variables are set
DEVECO_SDK_HOME(Required when targetingHarmonyOS NEXT)OHOS_BASE_SDK_HOME(Required when targetingOpenHarmony)OHOS_SDK_NATIVE(e.g.${DEVECO_SDK_HOME}/default/openharmony/nativeor${OHOS_BASE_SDK_HOME}/${API_VERSION}/native)SERVO_OHOS_SIGNING_CONFIG: Path to json file containing a valid signing configuration for the demo app.
- Review the detailed instructions at [Building for OpenHarmony].
- The target distribution can be modified by passing
--flavor=<default|harmonyos>tomach <build|package|install>.
Languages
Rust
87.8%
Python
6%
WebIDL
3.1%
HTML
1.9%
JavaScript
0.5%
Other
0.5%