aboutsummaryrefslogtreecommitdiff
path: root/extensions/chrome-profile-bridge/index.ts
diff options
context:
space:
mode:
authorTianren Dong <tianrendong.dtr@gmail.com>2026-05-16 14:01:00 -0400
committerTianren Dong <tianrendong.dtr@gmail.com>2026-05-16 14:01:00 -0400
commitb792f22f2c2ef4dfb7bd300e7381a186e34e0c18 (patch)
treea31a4e6d1213478f5ac96e2208d1a1c16fc825b9 /extensions/chrome-profile-bridge/index.ts
parentf133011c8ecda06ae63068649a9714c88a7b901e (diff)
0.15.25: fix reload after stale singleton
Diffstat (limited to 'extensions/chrome-profile-bridge/index.ts')
-rw-r--r--extensions/chrome-profile-bridge/index.ts12
1 files changed, 8 insertions, 4 deletions
diff --git a/extensions/chrome-profile-bridge/index.ts b/extensions/chrome-profile-bridge/index.ts
index c8c921a..77ae767 100644
--- a/extensions/chrome-profile-bridge/index.ts
+++ b/extensions/chrome-profile-bridge/index.ts
@@ -470,17 +470,21 @@ function StringEnum<T extends readonly [string, ...string[]]>(values: T) {
export default function (pi: ExtensionAPI): void {
const instanceToken = Symbol("pi-chrome-instance");
+ const currentRoot = extensionRoot();
const globalState = globalThis as typeof globalThis & {
- [PI_CHROME_GLOBAL_KEY]?: { version: string; root: string; token: symbol };
+ [PI_CHROME_GLOBAL_KEY]?: { version: string; root: string; token?: symbol };
};
const alreadyLoaded = globalState[PI_CHROME_GLOBAL_KEY];
- if (alreadyLoaded) {
+ if (alreadyLoaded?.token || (alreadyLoaded && alreadyLoaded.root !== currentRoot)) {
console.warn(
- `pi-chrome already loaded from ${alreadyLoaded.root} (v${alreadyLoaded.version}); skipping duplicate from ${extensionRoot()}.`,
+ `pi-chrome already loaded from ${alreadyLoaded.root} (v${alreadyLoaded.version}); skipping duplicate from ${currentRoot}.`,
);
return;
}
- globalState[PI_CHROME_GLOBAL_KEY] = { version: PI_CHROME_VERSION, root: extensionRoot(), token: instanceToken };
+ // pi-chrome <=0.15.19 set the singleton flag but did not clear it on reload.
+ // If the stale flag points at this same extension root, replace it instead of
+ // skipping the freshly reloaded extension.
+ globalState[PI_CHROME_GLOBAL_KEY] = { version: PI_CHROME_VERSION, root: currentRoot, token: instanceToken };
const bridge = new ChromeProfileBridge(DEFAULT_HOST, DEFAULT_PORT);
let backgroundDefault = false;