跳转至

已退役浏览器视口操作所有权

视口操作会捕获一个来宾 ID,然后等待 CDP 命令。关闭标签页会删除其视口状态,但旧的延续随后可能重新创建 UA 意图条目。失败的 UA 清除也可能在替换来宾已完成的桌面预设之上恢复旧值,或者迟到的清除可能删除替换者的移动意图。

修正在三个变更边界处复用该捕获的来宾 ID:在发布已应用预设的 UA 意图之前,在读取/删除已清除预设的意图之前,以及在失败清除回滚之前。同所有者回滚、原生 UA 配置文件、导航行为以及每标签页 Promise 链均保持不变。

证据

回归测试夹具调用实际的管理器、注册、注销和视口实现。Electron WebContents 和待处理的调试器回复是受控端口;不会启动原生浏览器或窗口。

  • 基线:7 个失败的所有权回归,5 个通过的控制。
  • 修复后:12/12 个所有权用例,另有 30 个现有视口、导航、部分失败和 UA 用例。
  • 在 unregisterAll 之后,16 个待处理的 UA 清除拒绝在之前留下 16 个已退役 UA 条目,之后为零。注册、预设和 Promise 映射保持为空。
  • 其他回归覆盖已关闭标签页的迟到成功、失败清除回滚、移动/桌面替换,以及原生到默认配置文件替换。
  • 控制保留普通序列化的移动/桌面/null 操作、两种原生配置文件预设、同所有者回滚,以及在旧排队操作结算时替换 Promise 尾部。
  • 独立审查者运行了全部 12 个候选用例,并在提升前审查了三个变更守卫。

保留的条目是标签页 ID 字符串和布尔值。这不证明保留了原生 WebContents、进程 RSS 斜率或吉字节级内存增长。进行中的 CDP 工作仍拥有其延续,直到其结算。关闭后的正向和负向命令回复是注入的调度,而不是受影响主机的跟踪。

普通调用方和兼容性

渲染器在用户选择视口预设时以及来宾 dom-ready 时请求覆盖,包括 null 预设。受信任的 IPC 处理程序在调用此管理器之前验证尺寸。导航随后读取 UA 意图映射,因此过期的替换值可能改变常设的移动/桌面身份。夹具不执行渲染器或 IPC 生产者。

本地 webview 和主机端离屏注册都使用这些映射。修正不更改任何线上字段、协议、执行主机所有权、原生进程生命周期、文件夹/worktree 处理或 UI 布局。它仅防止针对不同来宾的操作变更当前注册的状态。

source-versions.json 在审计检查点 4a09b1d1、独立 main 291b4ddd 和报告的 v1.4.198 e0826956 处记录 11 个路径。视口实现、注册、注册表声明、IPC 处理程序和工具栏生产者与全部三个匹配。十个源匹配独立 main,八个匹配 v1.4.198。来宾会话生产者包含一个更早的审计修复;历史导航和夹具源不同。这是使用精确历史视口源的当前依赖重放,而不是历史应用二进制重放。

19831 中的浏览活动使此路径原则上适用。报告未确定所需的重叠或标签页数量,并且此小型元数据机制不能解释其报告的内存总量。

复现

从 worktree 运行修复后的回归测试套件:

ORCA_BACKGROUND_LAUNCH=1 node node_modules/vitest/vitest.mjs run --config docs/audits/browser-viewport-owner-retention/vitest.config.mjs

使用精确的基线视口实现运行相同测试;预期退出状态 1 和七个失败用例:

ORCA_BACKGROUND_LAUNCH=1 ORCA_VIEWPORT_BASELINE=1 node node_modules/vitest/vitest.mjs run --config docs/audits/browser-viewport-owner-retention/vitest.config.mjs

导入覆盖层从不重写产品文件。baseline-source.txt 仅包含原始视口模块;当前支持模块仍在使用。baseline-results.json、fixed-results.json 和 validation.json 记录测量结果及其范围。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca