Skip to content

Commit

Permalink
Fix crash in WebKit media permissions prompt
Browse files Browse the repository at this point in the history
  • Loading branch information
Brandon-T committed Oct 15, 2024
1 parent ab85ec5 commit 911ac76
Showing 1 changed file with 48 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1359,48 +1359,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 {
Expand Down

0 comments on commit 911ac76

Please sign in to comment.