import AppKit import WebKit @MainActor enum RedditWebViewManager { private static let processPool = WKProcessPool() static func makeConfiguration(includeLoginBridge: Bool = true) -> WKWebViewConfiguration { let configuration = WKWebViewConfiguration() configuration.processPool = processPool configuration.websiteDataStore = .default() configuration.defaultWebpagePreferences.allowsContentJavaScript = true configuration.preferences.isElementFullscreenEnabled = true let boundaryScript = WKUserScript( source: RedditPostBoundaryStyle.injectionScript, injectionTime: .atDocumentEnd, forMainFrameOnly: true ) configuration.userContentController.addUserScript(boundaryScript) let chromeScript = WKUserScript( source: RedditHomeChromeStyle.injectionScript, injectionTime: .atDocumentEnd, forMainFrameOnly: true ) configuration.userContentController.addUserScript(chromeScript) let authChromeScript = WKUserScript( source: RedditAuthChromeStyle.injectionScript, injectionTime: .atDocumentEnd, forMainFrameOnly: true ) configuration.userContentController.addUserScript(authChromeScript) if includeLoginBridge { let loginBridgeScript = WKUserScript( source: RedditLoginBridgeStyle.injectionScript, injectionTime: .atDocumentStart, forMainFrameOnly: true ) configuration.userContentController.addUserScript(loginBridgeScript) configuration.userContentController.add( RedditLoginScriptBridge.shared, name: RedditLoginBridgeStyle.messageHandlerName ) } return configuration } static func makeWebView() -> WKWebView { let webView = WKWebView(frame: .zero, configuration: makeConfiguration()) webView.allowsBackForwardNavigationGestures = true webView.allowsMagnification = true webView.customUserAgent = RedditWebAuthHelper.safariUserAgent applyUnderPageBackground(to: webView, isDarkMode: AppearanceManager.shared.isDarkMode) return webView } static func applyUnderPageBackground(to webView: WKWebView, isDarkMode: Bool) { webView.underPageBackgroundColor = AppearanceManager.webUnderPageBackgroundColor(isDarkMode: isDarkMode) } }