49 lines · 1.5 KB · Swift
RawDownload
#if os(macOS)import SweetCookieKit public typealias BrowserCookieImportOrder = [Browser]#elsepublic struct Browser: Sendable, Hashable {    public init() {}} public typealias BrowserCookieImportOrder = [Browser]#endif extension [Browser] {    /// Filters a browser list to sources worth attempting for cookie imports.    ///    /// This is intentionally stricter than "app installed": it aims to avoid unnecessary Keychain prompts.    public func cookieImportCandidates(using detection: BrowserDetection) -> [Browser] {        let candidates = self.filter { detection.isCookieSourceAvailable($0) }        guard !KeychainAccessGate.isDisabled else {            return candidates.filter { !$0.usesKeychainForCookieDecryption }        }        return candidates    }     /// Filters a browser list to sources with usable profile data on disk.    public func browsersWithProfileData(using detection: BrowserDetection) -> [Browser] {        self.filter { detection.hasUsableProfileData($0) }    }} extension Browser {    var usesKeychainForCookieDecryption: Bool {        switch self {        case .safari, .firefox:            return false        case .chrome, .chromeBeta, .chromeCanary,             .arc, .arcBeta, .arcCanary,             .chatgptAtlas,             .chromium,             .brave, .braveBeta, .braveNightly,             .edge, .edgeBeta, .edgeCanary,             .helium,             .vivaldi:            return true        @unknown default:            return true        }    }}