tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 37db33174d7bb511621240fbd49929b935b38d5a
parent eb9ba190413ecfa8ca24cf76636e62fb3eda4f14
Author: sickl8 <sickl8@protonmail.com>
Date:   Fri, 28 Nov 2025 23:06:12 +0000

Bug 1918733 - Implement recommended fix for zero width/height on `range.getBoundingClientRect()`. r=emilio

- Added a tests for Bug 1918733
- Used `AsContent()` instead of `static_cast<nsIContent*>`

- Fixed typo in file name

- Updated code to handle root nodes as well as leaf nodes
- Added tests for root nodes

- Fix wrong variable to use in test

Differential Revision: https://phabricator.services.mozilla.com/D274369

Diffstat:
Mdom/base/nsRange.cpp | 6+++++-
Atesting/web-platform/tests/css/cssom-view/getBoundingClientRect-content-visibility-hidden.html | 25+++++++++++++++++++++++++
2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/dom/base/nsRange.cpp b/dom/base/nsRange.cpp @@ -3060,7 +3060,11 @@ void nsRange::CollectClientRectsAndText( } if (aFlushLayout) { - aStartContainer->OwnerDoc()->FlushPendingNotifications(FlushType::Layout); + if (auto* content = nsIContent::FromNode(aStartContainer)) { + content->GetPrimaryFrame(FlushType::Layout); + } else { + aStartContainer->OwnerDoc()->FlushPendingNotifications(FlushType::Layout); + } // Recheck whether we're still in the document if (!aStartContainer->IsInComposedDoc()) { return; diff --git a/testing/web-platform/tests/css/cssom-view/getBoundingClientRect-content-visibility-hidden.html b/testing/web-platform/tests/css/cssom-view/getBoundingClientRect-content-visibility-hidden.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-getboundingclientrect"> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-range-getboundingclientrect"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1918733"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +</style> +<body> + <div style="content-visibility: hidden; contain-intrinsic-size: 100px 100px;"> + <span id="span">Hello</span> + </div> +<script> + const rangeLeaf = document.createRange(); + const rangeRoot = document.createRange(); + rangeLeaf.selectNode(span.firstChild); + rangeRoot.selectNode(document.documentElement); + const rectLeaf = rangeLeaf.getBoundingClientRect(); + const rectRoot = rangeRoot.getBoundingClientRect(); + test(() => assert_not_equals(rectLeaf.width, 0, "leaf rect width should not be zero")); + test(() => assert_not_equals(rectLeaf.height, 0, "leaf rect height should not be zero")); + test(() => assert_not_equals(rectRoot.width, 0, "root rect width should not be zero")); + test(() => assert_not_equals(rectRoot.height, 0, "root rect height should not be zero")); +</script> +</body>