Revision control

Copy as Markdown

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/
import WebKit
protocol WKUIHandler: WKUIDelegate {
var delegate: EngineSessionDelegate? { get set }
func webView(_ webView: WKWebView,
createWebViewWith configuration: WKWebViewConfiguration,
for navigationAction: WKNavigationAction,
windowFeatures: WKWindowFeatures) -> WKWebView?
func webView(
_ webView: WKWebView,
runJavaScriptAlertPanelWithMessage message: String,
initiatedByFrame frame: WKFrameInfo,
completionHandler: @escaping @MainActor () -> Void
)
func webView(
_ webView: WKWebView,
runJavaScriptConfirmPanelWithMessage message: String,
initiatedByFrame frame: WKFrameInfo,
completionHandler: @escaping @MainActor (Bool) -> Void
)
func webView(
_ webView: WKWebView,
runJavaScriptTextInputPanelWithPrompt prompt: String,
defaultText: String?,
initiatedByFrame frame: WKFrameInfo,
completionHandler: @escaping @MainActor (String?) -> Void
)
func webViewDidClose(_ webView: WKWebView)
func webView(
_ webView: WKWebView,
contextMenuConfigurationForElement elementInfo: WKContextMenuElementInfo,
completionHandler: @escaping @MainActor (UIContextMenuConfiguration?) -> Void
)
func webView(
_ webView: WKWebView,
requestMediaCapturePermissionFor origin: WKSecurityOrigin,
initiatedByFrame frame: WKFrameInfo,
type: WKMediaCaptureType,
decisionHandler: @escaping @MainActor (WKPermissionDecision) -> Void
)
}
class DefaultUIHandler: NSObject, WKUIHandler {
weak var delegate: EngineSessionDelegate?
func webView(_ webView: WKWebView,
createWebViewWith configuration: WKWebViewConfiguration,
for navigationAction: WKNavigationAction,
windowFeatures: WKWindowFeatures) -> WKWebView? {
// TODO: FXIOS-8243 - Handle popup windows with createWebViewWith in WebEngine (epic part 2)
return nil
}
func webView(
_ webView: WKWebView,
runJavaScriptAlertPanelWithMessage message: String,
initiatedByFrame frame: WKFrameInfo,
completionHandler: @escaping @MainActor () -> Void
) {
// TODO: FXIOS-8244 - Handle Javascript panel messages in WebEngine (epic part 3)
}
func webView(
_ webView: WKWebView,
runJavaScriptConfirmPanelWithMessage message: String,
initiatedByFrame frame: WKFrameInfo,
completionHandler: @escaping @MainActor (Bool) -> Void
) {
// TODO: FXIOS-8244 - Handle Javascript panel messages in WebEngine (epic part 3)
}
func webView(
_ webView: WKWebView,
runJavaScriptTextInputPanelWithPrompt prompt: String,
defaultText: String?,
initiatedByFrame frame: WKFrameInfo,
completionHandler: @escaping @MainActor (String?) -> Void
) {
// TODO: FXIOS-8244 - Handle Javascript panel messages in WebEngine (epic part 3)
}
func webViewDidClose(_ webView: WKWebView) {
// TODO: FXIOS-8245 - Handle webViewDidClose in WebEngine (epic part 3)
}
func webView(
_ webView: WKWebView,
contextMenuConfigurationForElement elementInfo: WKContextMenuElementInfo,
completionHandler: @escaping @MainActor (UIContextMenuConfiguration?) -> Void
) {
completionHandler(delegate?.onProvideContextualMenu(linkURL: elementInfo.linkURL))
}
func webView(
_ webView: WKWebView,
requestMediaCapturePermissionFor origin: WKSecurityOrigin,
initiatedByFrame frame: WKFrameInfo,
type: WKMediaCaptureType,
decisionHandler: @escaping @MainActor (WKPermissionDecision) -> Void
) {
// TODO: FXIOS-8247 - Handle media capture in WebEngine (epic part 3)
}
}