servoshell: Use DeviceIndependentPixel for WebDriver Rect related requests (#37893)

[Spec](https://w3c.github.io/webdriver/#set-window-rect) expects CSS
pixel for input and output. Previously, we use Device Pixel for them
instead.

Testing: Tested manually with different screen DPR and compared with
other browsers.
Fixes: Task 4 of https://github.com/servo/servo/issues/37804

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
This commit is contained in:
Euclid Ye 2025-07-09 11:56:27 +08:00 committed by GitHub
parent 0db02702e7
commit 3526b7e86e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 66 additions and 269 deletions

View file

@ -9,8 +9,8 @@ use std::rc::Rc;
use euclid::num::Zero;
use euclid::{Length, Point2D, Scale, Size2D};
use servo::servo_geometry::DeviceIndependentPixel;
use servo::webrender_api::units::{DeviceIntRect, DeviceIntSize, DevicePixel};
use servo::servo_geometry::{DeviceIndependentIntRect, DeviceIndependentPixel};
use servo::webrender_api::units::{DeviceIntSize, DevicePixel};
use servo::{RenderingContext, ScreenGeometry, SoftwareRenderingContext};
use winit::dpi::PhysicalSize;
@ -135,8 +135,18 @@ impl WindowPortsMethods for Window {
Length::zero()
}
fn window_rect(&self) -> DeviceIntRect {
DeviceIntRect::from_origin_and_size(Point2D::zero(), self.inner_size.get())
fn window_rect(&self) -> DeviceIndependentIntRect {
let inner_size = self.inner_size.get().to_f64();
let scale = self.hidpi_scale_factor().get() as f64;
// TODO: Find a universal way to convert.
// See https://github.com/servo/servo/issues/37937
DeviceIndependentIntRect::from_origin_and_size(
Point2D::zero(),
Size2D::new(
(inner_size.width / scale).round() as i32,
(inner_size.height / scale).round() as i32,
),
)
}
fn set_toolbar_height(&self, _height: Length<f32, DeviceIndependentPixel>) {