1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-10 13:40:06 +00:00

Send message to extension code when popup close required.

This commit is contained in:
Miles Robinson
2025-02-14 16:47:32 -05:00
committed by Miles Blackwood
parent c6176ed8a2
commit ecda510d26
6 changed files with 31 additions and 3 deletions

View File

@@ -1577,6 +1577,10 @@ export default class MainBackground {
await SafariApp.sendMessageToApp("showPopover", null, true);
}
async closeSafariPopup() {
await SafariApp.sendMessageToApp("closePopover", null, true);
}
async reseedStorage() {
if (
!this.platformUtilsService.isChrome() &&

View File

@@ -291,6 +291,9 @@ export default class RuntimeBackground {
case "openPopup":
await this.main.openPopup();
break;
case "closeSafariPopup":
await this.main.closeSafariPopup();
break;
case "bgUpdateContextMenu":
case "editedCipher":
case "addedCipher":

View File

@@ -430,7 +430,10 @@ export class BrowserApi {
}
static closePopup(win: Window) {
if (BrowserApi.isWebExtensionsApi && BrowserApi.isFirefoxOnAndroid) {
if (BrowserApi.isSafariApi) {
// eslint-disable-next-line @typescript-eslint/no-floating-promises
this.sendMessage("closeSafariPopup");
} else if (BrowserApi.isWebExtensionsApi && BrowserApi.isFirefoxOnAndroid) {
// Reactivating the active tab dismisses the popup tab. The promise final
// condition is only called if the popup wasn't already dismissed (future proofing).
// ref: https://bugzilla.mozilla.org/show_bug.cgi?id=1433604

View File

@@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
025FE0402D5FE56300B982BE /* SafariExtensionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 025FE03F2D5FE55F00B982BE /* SafariExtensionViewController.swift */; };
03100CAF291891F4008E14EF /* encrypt-worker.js in Resources */ = {isa = PBXBuildFile; fileRef = 03100CAE291891F4008E14EF /* encrypt-worker.js */; };
55BC93932CB4268A008CA4C6 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 55BC93922CB4268A008CA4C6 /* assets */; };
55E0374D2577FA6B00979016 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E0374C2577FA6B00979016 /* AppDelegate.swift */; };
@@ -53,6 +54,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
025FE03F2D5FE55F00B982BE /* SafariExtensionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariExtensionViewController.swift; sourceTree = "<group>"; };
03100CAE291891F4008E14EF /* encrypt-worker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = "encrypt-worker.js"; path = "../../../build/encrypt-worker.js"; sourceTree = "<group>"; };
5508DD7926051B5900A85C58 /* libswiftAppKit.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libswiftAppKit.tbd; path = usr/lib/swift/libswiftAppKit.tbd; sourceTree = SDKROOT; };
55BC93922CB4268A008CA4C6 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = assets; path = ../../../build/assets; sourceTree = "<group>"; };
@@ -143,6 +145,7 @@
55E037612577FA6F00979016 /* safari */ = {
isa = PBXGroup;
children = (
025FE03F2D5FE55F00B982BE /* SafariExtensionViewController.swift */,
55E0376F2577FA6F00979016 /* Resources */,
55E037622577FA6F00979016 /* SafariWebExtensionHandler.swift */,
55E037642577FA6F00979016 /* Info.plist */,
@@ -297,6 +300,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
025FE0402D5FE56300B982BE /* SafariExtensionViewController.swift in Sources */,
55E037632577FA6F00979016 /* SafariWebExtensionHandler.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;

View File

@@ -0,0 +1,8 @@
import SafariServices
class SafariExtensionViewController: SFSafariExtensionViewController {
static let shared: SafariExtensionViewController = {
let shared = SafariExtensionViewController()
return shared
}()
}

View File

@@ -6,14 +6,14 @@ let SFExtensionMessageKey = "message"
let ServiceName = "Bitwarden"
let ServiceNameBiometric = ServiceName + "_biometric"
class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {
class SafariWebExtensionHandler: SFSafariExtensionHandler {
override init() {
super.init();
NSApplication.shared.setActivationPolicy(.accessory)
}
func beginRequest(with context: NSExtensionContext) {
override func beginRequest(with context: NSExtensionContext) {
let item = context.inputItems[0] as! NSExtensionItem
let message = item.userInfo?[SFExtensionMessageKey] as AnyObject?
os_log(.default, "Received message from browser.runtime.sendNativeMessage: %@", message as! CVarArg)
@@ -43,6 +43,12 @@ class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {
})
}
break
case "closePopover":
os_log(.default, "Closing Safari Popup")
// NSApp.keyWindow?.contentViewController?.dismiss(nil)
// self.popoverViewController().dismiss(nil)
SafariExtensionViewController.shared.dismissPopover()
break
case "downloadFile":
guard let jsonData = message?["data"] as? String else {
return