From 518d32c8b4fc32d72a192f7221c606be55c9339f Mon Sep 17 00:00:00 2001 From: Brandon T Date: Tue, 15 Oct 2024 11:02:38 -0400 Subject: [PATCH 1/2] Fix crash in WebKit media permissions prompt --- .../BVC+WKNavigationDelegate.swift | 84 +++++++++++-------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/ios/brave-ios/Sources/Brave/Frontend/Browser/BrowserViewController/BVC+WKNavigationDelegate.swift b/ios/brave-ios/Sources/Brave/Frontend/Browser/BrowserViewController/BVC+WKNavigationDelegate.swift index 3553c03d39b3..f35dbbfa3311 100644 --- a/ios/brave-ios/Sources/Brave/Frontend/Browser/BrowserViewController/BVC+WKNavigationDelegate.swift +++ b/ios/brave-ios/Sources/Brave/Frontend/Browser/BrowserViewController/BVC+WKNavigationDelegate.swift @@ -1353,48 +1353,60 @@ extension BrowserViewController: WKUIDelegate { type: WKMediaCaptureType, decisionHandler: @escaping (WKPermissionDecision) -> Void ) { - let titleFormat: String = { - switch type { - case .camera: - return Strings.requestCameraPermissionPrompt - case .microphone: - return Strings.requestMicrophonePermissionPrompt - case .cameraAndMicrophone: - return Strings.requestCameraAndMicrophonePermissionPrompt - @unknown default: - return Strings.requestCaptureDevicePermissionPrompt - } - }() - let title = String.localizedStringWithFormat(titleFormat, origin.host) - let alertController = BrowserAlertController(title: title, message: nil, preferredStyle: .alert) - alertController.addAction( - .init( - title: Strings.requestCaptureDevicePermissionAllowButtonTitle, - style: .default, - handler: { _ in - decisionHandler(.grant) + let presentAlert = { [weak self] in + guard let self = self else { return } + + let titleFormat: String = { + switch type { + case .camera: + return Strings.requestCameraPermissionPrompt + case .microphone: + return Strings.requestMicrophonePermissionPrompt + case .cameraAndMicrophone: + return Strings.requestCameraAndMicrophonePermissionPrompt + @unknown default: + return Strings.requestCaptureDevicePermissionPrompt } + }() + let title = String.localizedStringWithFormat(titleFormat, origin.host) + let alertController = BrowserAlertController(title: title, message: nil, preferredStyle: .alert) + alertController.addAction( + .init( + title: Strings.requestCaptureDevicePermissionAllowButtonTitle, + style: .default, + handler: { _ in + decisionHandler(.grant) + } + ) ) - ) - alertController.addAction( - .init( - title: Strings.CancelString, - style: .cancel, - handler: { _ in - decisionHandler(.deny) - } + alertController.addAction( + .init( + title: Strings.CancelString, + style: .cancel, + handler: { _ in + decisionHandler(.deny) + } + ) ) - ) - alertController.dismissedWithoutAction = { - decisionHandler(.prompt) + alertController.dismissedWithoutAction = { + decisionHandler(.prompt) + } + if webView.fullscreenState == .inFullscreen || webView.fullscreenState == .enteringFullscreen { + webView.closeAllMediaPresentations { + self.present(alertController, animated: true) + } + return + } + self.present(alertController, animated: true) } - if webView.fullscreenState == .inFullscreen || webView.fullscreenState == .enteringFullscreen { - webView.closeAllMediaPresentations { - self.present(alertController, animated: true) + + if let presentedViewController = presentedViewController as? BrowserAlertController { + presentedViewController.dismiss(animated: true) { + presentAlert() } - return + } else { + presentAlert() } - present(alertController, animated: true) } fileprivate func shouldDisplayJSAlertForWebView(_ webView: WKWebView) -> Bool { From 5fbcff9831820d72c30659b65f879917fe45a4c0 Mon Sep 17 00:00:00 2001 From: Brandon T Date: Wed, 16 Oct 2024 10:16:37 -0400 Subject: [PATCH 2/2] Format AGAIN --- .../BVC+WKNavigationDelegate.swift | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ios/brave-ios/Sources/Brave/Frontend/Browser/BrowserViewController/BVC+WKNavigationDelegate.swift b/ios/brave-ios/Sources/Brave/Frontend/Browser/BrowserViewController/BVC+WKNavigationDelegate.swift index f35dbbfa3311..30f3cdaa9272 100644 --- a/ios/brave-ios/Sources/Brave/Frontend/Browser/BrowserViewController/BVC+WKNavigationDelegate.swift +++ b/ios/brave-ios/Sources/Brave/Frontend/Browser/BrowserViewController/BVC+WKNavigationDelegate.swift @@ -1355,7 +1355,7 @@ extension BrowserViewController: WKUIDelegate { ) { let presentAlert = { [weak self] in guard let self = self else { return } - + let titleFormat: String = { switch type { case .camera: @@ -1369,7 +1369,11 @@ extension BrowserViewController: WKUIDelegate { } }() let title = String.localizedStringWithFormat(titleFormat, origin.host) - let alertController = BrowserAlertController(title: title, message: nil, preferredStyle: .alert) + let alertController = BrowserAlertController( + title: title, + message: nil, + preferredStyle: .alert + ) alertController.addAction( .init( title: Strings.requestCaptureDevicePermissionAllowButtonTitle, @@ -1391,7 +1395,8 @@ extension BrowserViewController: WKUIDelegate { alertController.dismissedWithoutAction = { decisionHandler(.prompt) } - if webView.fullscreenState == .inFullscreen || webView.fullscreenState == .enteringFullscreen { + if webView.fullscreenState == .inFullscreen || webView.fullscreenState == .enteringFullscreen + { webView.closeAllMediaPresentations { self.present(alertController, animated: true) } @@ -1399,7 +1404,7 @@ extension BrowserViewController: WKUIDelegate { } self.present(alertController, animated: true) } - + if let presentedViewController = presentedViewController as? BrowserAlertController { presentedViewController.dismiss(animated: true) { presentAlert()