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:
committed by
Miles Blackwood
parent
c6176ed8a2
commit
ecda510d26
@@ -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() &&
|
||||
|
||||
@@ -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":
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import SafariServices
|
||||
|
||||
class SafariExtensionViewController: SFSafariExtensionViewController {
|
||||
static let shared: SafariExtensionViewController = {
|
||||
let shared = SafariExtensionViewController()
|
||||
return shared
|
||||
}()
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user