Skip to content

fix: 新增 extensionEnv 处理 isIncognito (early-start & bgScript), userAgent (bgScript) 及 run-in (bgScript)#1368

Merged
CodFrm merged 8 commits intorelease/v1.4from
fix/isIncognito-value-in-early-start
Apr 27, 2026
Merged

fix: 新增 extensionEnv 处理 isIncognito (early-start & bgScript), userAgent (bgScript) 及 run-in (bgScript)#1368
CodFrm merged 8 commits intorelease/v1.4from
fix/isIncognito-value-in-early-start

Conversation

@cyfung1031
Copy link
Copy Markdown
Collaborator

Checklist / 检查清单

  • Fixes mentioned issues / 修复已提及的问题
  • Code reviewed by human / 代码通过人工检查
  • Changes tested / 已完成测试

Description / 描述

early-start

  • isIncognito 在 scripting 中取得,跟 eventFlag 一同传到 inject/content

bgScript

  • isIncognito, userAgent 等资讯透过 sandbox -> offscreen -> serviceWorker 取得,然后传回 sandbox 的 bgScript ExecWrap

Screenshots / 截图

@cyfung1031 cyfung1031 requested a review from CodFrm April 23, 2026 09:55
@cyfung1031 cyfung1031 added the P1 🔥 重要但是不紧急的内容 label Apr 23, 2026
@cyfung1031 cyfung1031 changed the title 新增 extensionEnv 处理 isIncognito (early-start & bgScript), userAgent (bgScript) 及 run-in (bgScript) fix: 新增 extensionEnv 处理 isIncognito (early-start & bgScript), userAgent (bgScript) 及 run-in (bgScript) Apr 23, 2026
@CodFrm CodFrm requested a review from Copilot April 26, 2026 15:35
@CodFrm CodFrm changed the base branch from main to release/v1.4 April 26, 2026 15:35
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 主要为 early-start 与后台/定时脚本补齐 extensionEnv 信息传递链路,使脚本能够正确获取 GM_info.isIncognitoGM_info.userAgentData,并让后台/定时脚本支持按 @run-in 控制仅在指定上下文执行(normal / incognito / all)。

Changes:

  • 在 scripting → inject/content 与 sandbox → offscreen → service worker 的消息链路中引入 extensionEnv(incognito + userAgentData),并注入到运行时 envInfo。
  • 后台/定时脚本执行前根据 @run-ininIncognitoContext 做上下文过滤,避免双环境重复运行。
  • GM_xhr 的 DNR Session Rule ID 分配改为集中控制(dnr_id_controller)并补充单测与 mock 能力。

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/inject.ts 接收并传入 extensionEnv 到 ScriptRuntime(inject 侧)。
src/content.ts 接收并传入 extensionEnv 到 ScriptRuntime(content 侧)。
src/app/service/service_worker/runtime.ts userAgentData 初始化逻辑抽到 getExtensionUserAgentData。
src/app/service/service_worker/index.ts 新增 getExtensionEnv API,供 offscreen/sandbox 拉取 extensionEnv。
src/app/service/service_worker/gm_api/gm_api.ts GM_xhr DNR session rule id 改为受控分配/释放,并在更多错误分支做清理。
src/app/service/service_worker/gm_api/dnr_id_controller.ts 新增 session rule id 控制器:获取现有 rule、分配 id、释放 id、限额等待。
src/app/service/service_worker/gm_api/dnr_id_controller.test.ts 为 dnr_id_controller 增加单测覆盖。
src/app/service/sandbox/runtime.ts 后台/定时脚本执行前拉取 extensionEnv,并按 @run-in 过滤执行环境。
src/app/service/sandbox/index.ts sandbox 初始化时发起 extensionEnv 拉取并注入 Runtime。
src/app/service/offscreen/index.ts offscreen 增加 getExtensionEnv 转发到 service worker。
src/app/service/offscreen/client.ts 新增 getExtensionEnv 的 client 方法(sandbox → offscreen)。
src/app/service/extension/extension_env.ts 新增 extensionEnv 定义与 userAgentData 获取方法。
src/app/service/content/script_runtime.ts early-start 检测时将 inIncognitoContext 写入 initialEnvInfo.isIncognito。
src/app/service/content/script_executor.ts initEnvInfo 显式标注 GMInfoEnv,并更新 isIncognito 注释语义。
src/app/service/content/exec_warp.ts BgExecScriptWarp 支持从 extensionEnv 注入 isIncognito 与 userAgentData。
packages/message/common.ts eventFlag 协商流程携带 extensionEnv(用于 inject/content early-start)。
packages/chrome-extension-mock/web_reqeuest.ts mock webRequest 增加 onResponseStarted 回调入口。
packages/chrome-extension-mock/declarativ_net_request.ts mock DNR 增加 session rules 存取与 updateSessionRules 行为模拟。
example/tests/gm_menu_test.js 新增 GM_registerMenuCommand 行为示例脚本。

Comment thread packages/message/common.ts Outdated
Comment on lines +53 to +55
it("sessionRuleIds 未初始化时为 no-op", () => {
expect(() => removeSessionRuleIdEntry(10404)).not.toThrow();
});
Copy link

Copilot AI Apr 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

该用例名为“sessionRuleIds 未初始化时为 no-op”,但当前测试文件在此之前已调用过 getSessionRuleIds/nextSessionRuleId,模块级 sessionRuleIds 很可能已经初始化了,导致这个用例并未真正覆盖“未初始化”的分支。建议在该用例里通过 vi.resetModules()+重新 import,或为 dnr_id_controller 暴露仅测试可用的 reset 方法来明确验证未初始化场景。

Copilot uses AI. Check for mistakes.
Comment thread packages/message/common.ts Outdated
Comment thread packages/message/common.ts
cyfung1031 and others added 7 commits April 27, 2026 00:56
- extension_env.test.ts:覆盖 getExtensionUserAgentData 的 navigator 缺失、platformInfo 异常、bitness 64/32 派生
- exec_warp.test.ts:覆盖 BgExecScriptWarp 把 extensionEnv 注入 GM_info 的各分支
- sandbox/runtime.test.ts:覆盖 execScript 中 run-in × inIncognitoContext 的过滤逻辑(含 extensionEnv 为 undefined 的 fail-open 行为)
@CodFrm CodFrm merged commit 11d149e into release/v1.4 Apr 27, 2026
3 of 4 checks passed
@CodFrm CodFrm deleted the fix/isIncognito-value-in-early-start branch April 27, 2026 03:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P1 🔥 重要但是不紧急的内容

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants