From 87845d504b5248dc6e19f83c53a4020018527fa6 Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Fri, 31 Jan 2025 14:48:22 -0500 Subject: [PATCH 1/5] Add Opera Sidebar Related Manifest Keys --- apps/browser/src/manifest.v3.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/browser/src/manifest.v3.json b/apps/browser/src/manifest.v3.json index c88796fd201..cdd2566e42e 100644 --- a/apps/browser/src/manifest.v3.json +++ b/apps/browser/src/manifest.v3.json @@ -112,6 +112,13 @@ }, "description": "__MSG_commandOpenSidebar__" }, + "__opera___execute_sidebar_action": { + "suggested_key": { + "default": "Alt+Shift+Y", + "linux": "Alt+Shift+U" + }, + "description": "__MSG_commandOpenSidebar__" + }, "autofill_login": { "suggested_key": { "default": "Ctrl+Shift+L" @@ -166,5 +173,11 @@ "storage": { "managed_schema": "managed_schema.json" }, - "__firefox__storage": null + "__firefox__storage": null, + "__opera__sidebar_action": { + "default_title": "Bitwarden", + "default_panel": "popup/index.html?uilocation=sidebar", + "default_icon": "images/icon19.png", + "browser_style": false + } } From f8d6728026c0448d21a201e38c6194cc6e750ce1 Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Fri, 31 Jan 2025 14:49:26 -0500 Subject: [PATCH 2/5] Be stricter about where sidebar API's come from --- apps/browser/src/platform/browser/browser-api.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/browser/src/platform/browser/browser-api.ts b/apps/browser/src/platform/browser/browser-api.ts index 1d8ff65c17d..293fca4d029 100644 --- a/apps/browser/src/platform/browser/browser-api.ts +++ b/apps/browser/src/platform/browser/browser-api.ts @@ -530,10 +530,15 @@ export class BrowserApi { win: Window & typeof globalThis, ): OperaSidebarAction | FirefoxSidebarAction | null { const deviceType = BrowserPlatformUtilsService.getDevice(win); - if (deviceType !== DeviceType.FirefoxExtension && deviceType !== DeviceType.OperaExtension) { - return null; + if (deviceType === DeviceType.FirefoxExtension) { + return browser.sidebarAction; + } + + if (deviceType === DeviceType.OperaExtension) { + return win.opr?.sidebarAction; } - return win.opr?.sidebarAction || browser.sidebarAction; + + return null; } static captureVisibleTab(): Promise { From f5c3b5d9e2676d3f747b7c57b71654c7716493b2 Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Fri, 31 Jan 2025 14:54:42 -0500 Subject: [PATCH 3/5] Skip Sidebar Icon Changes in MV3 --- apps/browser/src/platform/listeners/update-badge.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/browser/src/platform/listeners/update-badge.ts b/apps/browser/src/platform/listeners/update-badge.ts index f67b96c847f..b598c7aa17d 100644 --- a/apps/browser/src/platform/listeners/update-badge.ts +++ b/apps/browser/src/platform/listeners/update-badge.ts @@ -165,6 +165,13 @@ export class UpdateBadge { return; } + if ("opr" in this.win && BrowserApi.isManifestVersion(3)) { + // setIcon API is currenly broken for Opera MV3 extensions + // https://forums.opera.com/topic/75680/opr-sidebaraction-seticon-api-is-broken-access-to-extension-api-denied?_=1738349261570 + // The API current crashes on MacOS + return; + } + if (this.isOperaSidebar(this.sidebarAction)) { await new Promise((resolve) => (this.sidebarAction as OperaSidebarAction).setIcon(options, () => resolve()), From 0ac4c40aed7be6176225178aa3baa016b0b6e94e Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:23:19 -0500 Subject: [PATCH 4/5] Fix typo in comment --- apps/browser/src/platform/listeners/update-badge.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/browser/src/platform/listeners/update-badge.ts b/apps/browser/src/platform/listeners/update-badge.ts index b598c7aa17d..9f2a1f5a057 100644 --- a/apps/browser/src/platform/listeners/update-badge.ts +++ b/apps/browser/src/platform/listeners/update-badge.ts @@ -168,7 +168,7 @@ export class UpdateBadge { if ("opr" in this.win && BrowserApi.isManifestVersion(3)) { // setIcon API is currenly broken for Opera MV3 extensions // https://forums.opera.com/topic/75680/opr-sidebaraction-seticon-api-is-broken-access-to-extension-api-denied?_=1738349261570 - // The API current crashes on MacOS + // The API currently crashes on MacOS return; } From e1689da91fa329653f6d49ba201ed6814e09c72c Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Tue, 11 Feb 2025 14:32:44 -0500 Subject: [PATCH 5/5] Add `open_at_install` --- apps/browser/src/manifest.v3.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/browser/src/manifest.v3.json b/apps/browser/src/manifest.v3.json index 8562edd5eba..43041aff563 100644 --- a/apps/browser/src/manifest.v3.json +++ b/apps/browser/src/manifest.v3.json @@ -194,6 +194,7 @@ "default_title": "Bitwarden", "default_panel": "popup/index.html?uilocation=sidebar", "default_icon": "images/icon19.png", + "open_at_install": false, "browser_style": false } }