tor-browser

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

commit d8503eb340b28163c7579a413f8eca0e7f928e00
parent 88bf2f355812a51f1e202fd8ac27d1e16e3b07e2
Author: Wangsong Jin <wangsongjin@microsoft.com>
Date:   Mon, 10 Nov 2025 22:18:37 +0000

Bug 1998808 [wpt PR 55925] - Transform 3d-point-mapping-orgins.html test to WPT, a=testonly

Automatic update from web-platform-tests
Transform 3d-point-mapping-orgins.html test to WPT

Test sometimes flakes due to slight differences in the anti aliasing of
the boxes. This was a good candidate to transform to a WPT test and stop
depending on png comparisons.

Bug: 424225631, 1266821, 935528
Change-Id: Ida314960a56e5e571bf5f9d192b5b1365f94ab3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7099183
Reviewed-by: Gaston Rodriguez <gastonr@microsoft.com>
Reviewed-by: Kevin Ellis <kevers@chromium.org>
Commit-Queue: Wangsong Jin <wangsongjin@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1541420}

--

wpt-commits: aa81de6f83264a3acfc2dcec706f08e8ac3867ac
wpt-pr: 55925

Diffstat:
Atesting/web-platform/tests/css/css-transforms/3d-point-mapping-origins.html | 255+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 255 insertions(+), 0 deletions(-)

diff --git a/testing/web-platform/tests/css/css-transforms/3d-point-mapping-origins.html b/testing/web-platform/tests/css/css-transforms/3d-point-mapping-origins.html @@ -0,0 +1,254 @@ +<!DOCTYPE html> +<title>Point mapping through 3D transforms with origins</title> +<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-document-elementfrompoint"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style type="text/css" media="screen"> + body { + margin: 0; + border: 1px solid black; + } + + .test { + display: inline-block; + height: 200px; + width: 200px; + border: 1px solid black; + margin: 20px; + } + + .perspective-container { + height: 140px; + width: 140px; + margin: 20px; + border: 1px solid black; + box-sizing: border-box; + perspective: 400px; + perspective-origin: 20% 80%; + } + + .transformed-parent { + position: relative; + height: 100px; + width: 100px; + padding: 20px; + margin: 20px; + border: 1px solid black; + box-sizing: border-box; + transform: translateZ(100px) rotateY(-40deg); + transform-origin: 20% 40%; + } + + .light-gray-box { + background-color: #DDD; + } + + .medium-gray-box { + background-color: #AAA; + } + + .blue-box { + height: 100px; + width: 100px; + box-sizing: border-box; + background-color: blue; + border: 1px solid black; + } + + .green-box { + height: 100px; + width: 100px; + padding: 20px; + box-sizing: border-box; + background-color: #C0D69E; + border: 1px solid black; + } + + .layered { + position: relative; + } + + div[id]:hover { + outline: 3px solid orange; + } +</style> + +<body> + <div class="test"> + <!-- Simple transformed div in perspective --> + <div class="perspective-container light-gray-box" id="top-left-light-gray"> + <div class="transformed-parent medium-gray-box" id="top-left-medium-gray"> + </div> + </div> + </div> + + <div class="test"> + <!-- Transformed div in perspective with non-layer child --> + <div class="perspective-container light-gray-box" id="top-right-light-gray"> + <div class="transformed-parent medium-gray-box" id="top-right-medium-gray"> + <div class="blue-box" id="top-right-blue"> + </div> + </div> + </div> + </div> + <br> + + <div class="test"> + <!-- Transformed div in perspective with layer child --> + <div class="perspective-container light-gray-box" id="bottom-left-light-gray"> + <div class="transformed-parent medium-gray-box" id="bottom-left-medium-gray"> + <div class="blue-box layered" id="bottom-left-blue"> + </div> + </div> + </div> + </div> + + <div class="test"> + <!-- Transformed div in perspective with child having layer child --> + <div class="perspective-container light-gray-box" id="bottom-right-light-gray"> + <div class="transformed-parent medium-gray-box" id="bottom-right-medium-gray"> + <div class="green-box" id="bottom-right-green"> + <div class="blue-box layered" id="bottom-right-blue"> + </div> + </div> + </div> + </div> + </div> +</body> + +<script> + class Point { + constructor(x, y) { + this.x = x; + this.y = y; + } + }; + // Each test case defines four test points near the corners of an element. + // - Point 1: Top-left + // - Point 2: Top-right + // - Point 3: Bottom-left + // - Point 4: Bottom-right + const tests = [{ + expectedElemId: 'top-left-light-gray', + points: [ + new Point(48, 48), + new Point(60, 48), + new Point(48, 172), + new Point(175, 172), + ] + }, + { + expectedElemId: 'top-left-medium-gray', + points: [ + new Point(70, 41), // Inside top-left-light-gray without transform-origin. + new Point(182, 12), // Inside main document without transform-origin. + new Point(70, 158), + new Point(182, 158), + ] + }, + { + expectedElemId: 'top-right-light-gray', + points: [ + new Point(290, 45), + new Point(308, 45), + new Point(290, 175), + new Point(327, 175), + ] + }, + { + expectedElemId: 'top-right-medium-gray', + points: [ + new Point(315, 40), // Inside top-right-light-gray without transform-origin. + new Point(427, 12), + new Point(315, 158), + // The bottom-right area is overlapped by top-right-blue. + ] + }, + { + expectedElemId: 'top-right-blue', + points: [ + new Point(338, 64), + new Point(462, 36), + new Point(338, 186), + new Point(462, 197), + ] + }, + { + expectedElemId: 'bottom-left-light-gray', + points: [ + new Point(45, 290), + new Point(62, 290), + new Point(45, 420), + new Point(80, 420), + ] + }, + { + expectedElemId: 'bottom-left-medium-gray', + points: [ + new Point(70, 288), // Inside bottom-left-light-gray without transform-origin. + new Point(183, 256), + new Point(70, 404), // Inside bottom-left-light-gray without transform-origin. + // The bottom-right area is overlapped by bottom-left-blue. + ] + }, + { + expectedElemId: 'bottom-left-blue', + points: [ + new Point(92, 310), + new Point(216, 283), + new Point(90, 433), + new Point(216, 442), + ] + }, + { + expectedElemId: 'bottom-right-light-gray', + points: [ + new Point(290, 290), + new Point(307, 290), + new Point(290, 420), + new Point(325, 420), + ] + }, + { + expectedElemId: 'bottom-right-medium-gray', + points: [ + new Point(314, 288), // Inside bottom-right-light-gray without transform-origin. + new Point(430, 255), + new Point(314, 405), // Inside bottom-right-light-gray without transform-origin. + // The bottom-right area is overlapped by bottom-right-green. + ] + }, + { + expectedElemId: 'bottom-right-green', + points: [ + new Point(337, 309), // Inside bottom-right-medium-gray without transform-origin. + new Point(464, 284), // Inside main document without transform-origin. + new Point(337, 434), // Inside main document without transform-origin. + // The bottom-right area is overlapped by bottom-right-blue. + ] + }, + { + expectedElemId: 'bottom-right-blue', + points: [ + new Point(360, 334), // Inside bottom-right-green without transform-origin. + new Point(500, 316), // Inside main document without transform-origin. + new Point(360, 462), // Inside main document without transform-origin. + new Point(498, 480), // Inside main document without transform-origin. + ] + } + ]; + + tests.forEach(testcase => { + test(t => { + const expectedElem = document.getElementById(testcase.expectedElemId); + for (const point of testcase.points) { + const hitElem = document.elementFromPoint(point.x, point.y); + assert_equals(hitElem, expectedElem, + `point (${point.x}, ${point.y}) is inside element ${testcase.expectedElemId}`); + } + }, `${document.title}, hittesting ${testcase.expectedElemId})`); + }); +</script> + +</html> +\ No newline at end of file