Cleaner hit testing: removed UISceneNode::overFind() override; UIRoot now has root-scoped child traversal extent for embedded document scenes.

This commit is contained in:
Martín Lucas Golini
2026-07-01 23:11:11 -03:00
parent e210736c2d
commit 5ad166b648
8 changed files with 256 additions and 65 deletions
@@ -164,22 +164,21 @@ application UISceneNode
`UIScrollView::mContainer` size updates.
- Scroll extent measurement resizes `mDocumentLayout` and `mDocumentScene`, while
root/html/body layout remains viewport-sized.
- Hit testing now uses a root-scoped traversal extent instead of a
`UISceneNode::overFind()` compatibility override. `UIRoot` keeps its layout/self-hit
bounds viewport-sized, but embedded document scenes can ask it to traverse child
hit testing through the measured document extent.
- Basic author `@font-face` isolation is implemented and covered by UIWebView tests.
- Tests cover the new topology, viewport-vs-extent behavior, scrolling, two-scene
style isolation, navigation supersession, and a resize metric regression that guards
against no-op queued viewport churn rebuilding RichText.
against no-op queued viewport churn rebuilding RichText. They also cover document
root hit testing below the layout viewport.
### Pending / Follow-Up
- **Cleaner hit-test bounds model.** The current implementation overrides
`UISceneNode::overFind()` for scenes with an explicit layout viewport. This is a
narrow compatibility hook: when the viewport-sized `mRoot` rejects a point, the scene
searches root children directly so visible scrolled document descendants can still be
hit. The cleaner long-term shape is to split layout bounds from hit-test traversal
bounds, likely on `UIRoot` or `Node`, so root can remain the layout viewport while
hit testing can intentionally traverse visible overflow without a `UISceneNode`
special case.
- **Author `@font-face` isolation and cleanup** still needs the full scene-local alias
registry and navigation cleanup described in Phase 5.
- **Author `@font-face` cleanup audit** should verify navigation/destruction cleanup
for scene-local aliases and loaded font resources. The basic scene-local isolation
path is implemented and tested.
- **Subresource lifetime coverage** should be completed for every async path described
in Phase 6, including deferred CSS, fonts, images, redirects, cookies, and destruction.
- **Example and documentation integration** should be completed after the code shape
@@ -477,6 +476,12 @@ two-web-view isolation tests pass:
projects/scripts/xvfb-run-eepp bin/unit_tests/eepp-unit_tests-debug
```
Current verification status:
- Focused `UISceneNode.*` and `UIWebView.*` suites pass through
`projects/scripts/xvfb-run-eepp`.
- The full native Linux unit-test suite has been run and passes.
---
## Completion Criteria
+10 -2
View File
@@ -1,7 +1,9 @@
# UIWebView Document Scene Isolation Plan
> Status: PROPOSED - investigated against the current `UIWebView`, `UISceneNode`,
> `UIScrollView`, HTML loading, and nested-scene behavior.
> Status: IMPLEMENTED WITH FOLLOW-UPS - the owned document scene, real scroll-target
> layout widget, viewport/extent split, root-scoped hit-test traversal, and focused
> UIWebView coverage are implemented. Remaining work is cleanup/audit coverage for
> async subresources, examples/docs, and fixed/sticky acceptance tests.
## Goal
@@ -613,6 +615,12 @@ projects/scripts/xvfb-run-eepp bin/unit_tests/eepp-unit_tests-debug
Run it after the focused isolation, scrolling, positioned-layout, media-query, and nested-scene
tests pass.
Current verification status:
- Focused `UISceneNode.*` and `UIWebView.*` suites pass through
`projects/scripts/xvfb-run-eepp`.
- The full native Linux unit-test suite has been run and passes.
## Phase Backup Stashes
Each implementation phase must end with a persistent Git stash backup after that phase's focused