diff --git a/apps/browser/src/safari/safari/SafariWebExtensionHandler.swift b/apps/browser/src/safari/safari/SafariWebExtensionHandler.swift index b0688e3beb..1768ce6b15 100644 --- a/apps/browser/src/safari/safari/SafariWebExtensionHandler.swift +++ b/apps/browser/src/safari/safari/SafariWebExtensionHandler.swift @@ -88,12 +88,9 @@ class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling { return case "biometricUnlock": - var error: NSError? let laContext = LAContext() - laContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) - - if let e = error, e.code != kLAErrorBiometryLockout { + if(!laContext.isBiometricsAvailable()){ response.userInfo = [ SFExtensionMessageKey: [ "message": [ @@ -162,6 +159,20 @@ class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling { } return + case "biometricUnlockAvailable": + let laContext = LAContext() + var isAvailable = laContext.isBiometricsAvailable(); + + response.userInfo = [ + SFExtensionMessageKey: [ + "message": [ + "command": "biometricUnlockAvailable", + "response": isAvailable ? "available" : "not available", + "timestamp": Int64(NSDate().timeIntervalSince1970 * 1000), + ], + ], + ] + break default: return } @@ -194,6 +205,20 @@ func jsonDeserialize(json: String?) -> T? { } } +extension LAContext { + func isBiometricsAvailable() -> Bool { + var error: NSError? + + self.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) + + if let e = error, e.code != kLAErrorBiometryLockout { + return false; + } else { + return true; + } + } +} + class DownloadFileMessage: Decodable, Encodable { var fileName: String var blobData: String?