diff --git a/src/browser/Frame.zig b/src/browser/Frame.zig index 7298a2150..8c1d7bcad 100644 --- a/src/browser/Frame.zig +++ b/src/browser/Frame.zig @@ -154,6 +154,10 @@ _queued_events: *std.ArrayList(QueuedEvent) = undefined, _focus_fixup_pending: bool = false, _style_manager: StyleManager, + +// Element.documentHeight, valid while the style version and viewport height +// it was computed for hold. +_document_height: ?struct { version: usize, viewport: u32, value: f64 } = null, _script_manager: ScriptManager, _http_owner: HttpClient.Owner, diff --git a/src/browser/tests/element/position.html b/src/browser/tests/element/position.html index 17568d68c..eeeace6bc 100644 --- a/src/browser/tests/element/position.html +++ b/src/browser/tests/element/position.html @@ -337,17 +337,17 @@ testing.expectEqual(0, panel.clientHeight); testing.expectTrue(panel.scrollHeight > 0); - // The root containers keep their synthetic size rather than summing - // children. The root element's clientHeight is the viewport (CSSOM View): - // jstracker tiles clientWidth/10 cells over clientHeight and calls - // elementFromPoint per cell, which the 100M px box turned into ~5M walks. + // The root containers span the document rather than summing children. + // The root element's clientHeight is the viewport (CSSOM View): jstracker + // tiles clientWidth/10 cells over clientHeight and calls elementFromPoint + // per cell, which a document-sized box turned into ~5M walks. testing.expectEqual(document.body.clientHeight, document.body.scrollHeight); testing.expectEqual(window.innerHeight, document.documentElement.clientHeight); testing.expectEqual( document.documentElement.offsetHeight, document.documentElement.scrollHeight, ); - testing.expectTrue(document.documentElement.scrollHeight > document.documentElement.clientHeight); + testing.expectTrue(document.documentElement.scrollHeight >= document.documentElement.clientHeight); } @@ -578,6 +578,11 @@ deep.id = 'deep'; document.body.appendChild(deep); + // Room below it, or the viewport couldn't bring its top up + const room = document.createElement('div'); + room.style.height = '10000px'; + document.body.appendChild(room); + const targetY = deep.getBoundingClientRect().y; testing.expectTrue(targetY > 0); diff --git a/src/browser/tests/mcp_actions.html b/src/browser/tests/mcp_actions.html index c6e409ce5..75bda144f 100644 --- a/src/browser/tests/mcp_actions.html +++ b/src/browser/tests/mcp_actions.html @@ -70,5 +70,7 @@ document.getElementById('rad').addEventListener('click', function() { window.radClicked = true; }); document.getElementById('rad').addEventListener('change', function() { window.radChanged = true; }); + +