import AppKit import WebKit @MainActor enum RedditWebViewManager { private static let processPool = WKProcessPool() static func makeConfiguration() -> 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) return configuration } static func makeWebView() -> WKWebView { let webView = WKWebView(frame: .zero, configuration: makeConfiguration()) webView.allowsBackForwardNavigationGestures = true webView.allowsMagnification = true webView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15" applyUnderPageBackground(to: webView, isDarkMode: AppearanceManager.shared.isDarkMode) return webView } static func applyUnderPageBackground(to webView: WKWebView, isDarkMode: Bool) { webView.underPageBackgroundColor = AppearanceManager.webUnderPageBackgroundColor(isDarkMode: isDarkMode) } }