diff --git a/browse/test/sidebar-tabs.test.ts b/browse/test/sidebar-tabs.test.ts index 31e57c4b6e..91d50dcef2 100644 --- a/browse/test/sidebar-tabs.test.ts +++ b/browse/test/sidebar-tabs.test.ts @@ -254,3 +254,15 @@ describe('manifest: ws permission + xterm-safe CSP', () => { } }); }); + +describe('manifest: live tab awareness needs "tabs" permission', () => { + // Without "tabs", chrome.tabs.query() returns tab objects with undefined + // url/title for any site outside host_permissions (e.g., everything except + // 127.0.0.1). snapshotTabs() then writes empty strings into tabs.json and + // active-tab.json silently skips the write — the sidebar agent loses track + // of what page the user is on. activeTab is too narrow (only after a user + // gesture on the extension action) for background polling. + test('permissions includes "tabs"', () => { + expect(MANIFEST.permissions).toContain('tabs'); + }); +}); diff --git a/extension/manifest.json b/extension/manifest.json index 502c5bb791..9625626464 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -3,7 +3,7 @@ "name": "gstack browse", "version": "0.1.0", "description": "Live activity feed and @ref overlays for gstack browse", - "permissions": ["sidePanel", "storage", "activeTab", "scripting"], + "permissions": ["sidePanel", "storage", "activeTab", "scripting", "tabs"], "host_permissions": ["http://127.0.0.1:*/", "ws://127.0.0.1:*/"], "action": { "default_icon": {