Skip to content

fix(geometry): preserve OOPIF scale with occupied scrollbars - #206

Merged
iuyo5678 merged 1 commit into
mainfrom
fix/oopif-scrollbar-geometry
Sep 9, 2026
Merged

fix(geometry): preserve OOPIF scale with occupied scrollbars#206
iuyo5678 merged 1 commit into
mainfrom
fix/oopif-scrollbar-geometry

Conversation

@iuyo5678

@iuyo5678 iuyo5678 commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

问题

OOPIF(跨进程 iframe)的 owner content quad 包含滚动条占用的空间,而 cssLayoutViewport 不包含。原实现将可见视口映射到整个内容框,额外放大了坐标和尺寸,导致观察框及元素操作的顶层坐标偏移。例如完整宽度为 200px、可见宽度为 185px 时,会额外引入 200 / 185 的横向缩放。

修复与范围

  • 使用目标 OOPIF 的 window.innerWidth / innerHeight 确定完整视口与 owner content quad 的投影比例。
  • 可见视口继续负责裁剪:在每一层 OOPIF 边界投影可见区域,排除滚动条条带;目标内的操作点也继续受可见视口约束。
  • 尺寸读取失败或无效时保留几何不可用的错误处理,不猜测投影比例。

生产改动仅涉及 GeometryContextresolveNodeGeometry 所在的两个文件。DOMSnapshot 单位归一化、截图 CSS → DIP 转换、公共协议和依赖保持不变。本提交其余 12 个文件为回归 fixture、断言、现有 mock 适配及说明。

运行成本: 每次测量每个涉及投影的 OOPIF target 最多新增一次 Runtime.evaluate。结果在单次测量内按 target 缓存,沿用现有并发限制,不跨操作复用。顶层和同进程 frame 不增加该读取。本 PR 不宣称整体观察耗时降低。

回归验证

新增 evals/browseroopif-scrollbars 场景,复用已有浏览器测试入口,覆盖双层 OOPIF、页面滚动、border/padding、CSS transform、横向/纵向/双向/无占位滚动条,以及部分可见和完全不可见的控件。

数值断言以独立 DOM 矩形及裁剪计算为基准,检查 snapshot 与实时几何,误差须小于 2 CSS px;通过真实鼠标事件确认目标 frame 内的按钮收到点击,并检查测量复用。

本地验证结果:

检查 结果
同一套真实浏览器测试(Chrome 152) 未修改的 main 896c794:7 失败、6 通过;修复后:13/13 通过
扩展单元测试 1076 项通过
CLI + 实际构建扩展(Chrome for Testing 149) core 6/6、matrix seeds 4/7/14 共 3/3、regression 2/2,全部 verified,结束后无遗留 session
其他检查 类型检查、相关 lint、默认构建通过;插件测试 214 项、eval harness 测试 15 项通过

浏览器测试保留五组设备缩放 / 浏览器缩放组合:1/10.8/11/1.252/12/0.8

复跑

需要 Node 22+ 和本地 Chrome:

BSK_GEOMETRY_CHROME=/path/to/chrome pnpm --filter @browser-skill/extension exec vitest run \
  src/tools/__tests__/snapshot-coordinates.browser.test.ts

测试自行创建并清理隔离浏览器。未设置 BSK_GEOMETRY_CHROME 时,常规单元测试及默认 CI 会跳过真实浏览器测试。

CLI fixture smoke(需连接测试扩展):

BSK_AUTO_UPDATE=off pnpm eval:browser smoke --case oopif-scrollbars --bsk ./target/debug/bsk

Smoke 验证嵌套 frame 的滚动条确实占位、观察到标记以及会话关闭;它不替代上述数值几何及实际点击断言。

@iuyo5678
iuyo5678 merged commit 0fe36bc into main Sep 9, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants