1
0
mirror of https://github.com/bitwarden/browser.git synced 2025-02-15 01:11:47 +01:00

Get Opera Ready for MV3 (#13190)

* Add Opera Sidebar Related Manifest Keys

* Be stricter about where sidebar API's come from

* Skip Sidebar Icon Changes in MV3

* Fix typo in comment

* Add `open_at_install`
This commit is contained in:
Justin Baur 2025-02-11 15:12:11 -05:00 committed by GitHub
parent 182f9baa0f
commit 5f2a773d0d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 30 additions and 4 deletions

View File

@ -128,6 +128,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"
@ -182,5 +189,12 @@
"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",
"open_at_install": false,
"browser_style": false
}
}

View File

@ -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;
}
return win.opr?.sidebarAction || browser.sidebarAction;
if (deviceType === DeviceType.OperaExtension) {
return win.opr?.sidebarAction;
}
return null;
}
static captureVisibleTab(): Promise<string> {

View File

@ -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 currently crashes on MacOS
return;
}
if (this.isOperaSidebar(this.sidebarAction)) {
await new Promise<void>((resolve) =>
(this.sidebarAction as OperaSidebarAction).setIcon(options, () => resolve()),