WebKitNavigationDelegate constructor

WebKitNavigationDelegate(
  1. PlatformNavigationDelegateCreationParams params
)

Constructs a WebKitNavigationDelegate.

Implementation

WebKitNavigationDelegate(PlatformNavigationDelegateCreationParams params)
    : super.implementation(params is WebKitNavigationDelegateCreationParams
          ? params
          : WebKitNavigationDelegateCreationParams
              .fromPlatformNavigationDelegateCreationParams(params)) {
  final WeakReference<WebKitNavigationDelegate> weakThis =
      WeakReference<WebKitNavigationDelegate>(this);
  _navigationDelegate =
      (this.params as WebKitNavigationDelegateCreationParams)
          .webKitProxy
          .createNavigationDelegate(
    didFinishNavigation: (WKWebView webView, String? url) {
      if (weakThis.target?._onPageFinished != null) {
        weakThis.target!._onPageFinished!(url ?? '');
      }
    },
    didStartProvisionalNavigation: (WKWebView webView, String? url) {
      if (weakThis.target?._onPageStarted != null) {
        weakThis.target!._onPageStarted!(url ?? '');
      }
    },
    decidePolicyForNavigationAction: (
      WKWebView webView,
      WKNavigationAction action,
    ) async {
      if (weakThis.target?._onNavigationRequest != null) {
        final NavigationDecision decision =
            await weakThis.target!._onNavigationRequest!(NavigationRequest(
          url: action.request.url,
          isMainFrame: action.targetFrame.isMainFrame,
        ));
        switch (decision) {
          case NavigationDecision.prevent:
            return WKNavigationActionPolicy.cancel;
          case NavigationDecision.navigate:
            return WKNavigationActionPolicy.allow;
        }
      }
      return WKNavigationActionPolicy.allow;
    },
    didFailNavigation: (WKWebView webView, NSError error) {
      if (weakThis.target?._onWebResourceError != null) {
        weakThis.target!._onWebResourceError!(
          WebKitWebResourceError._(
            error,
            isForMainFrame: true,
            url: error.userInfo[NSErrorUserInfoKey
                .NSURLErrorFailingURLStringError] as String?,
          ),
        );
      }
    },
    didFailProvisionalNavigation: (WKWebView webView, NSError error) {
      if (weakThis.target?._onWebResourceError != null) {
        weakThis.target!._onWebResourceError!(
          WebKitWebResourceError._(
            error,
            isForMainFrame: true,
            url: error.userInfo[NSErrorUserInfoKey
                .NSURLErrorFailingURLStringError] as String?,
          ),
        );
      }
    },
    webViewWebContentProcessDidTerminate: (WKWebView webView) {
      if (weakThis.target?._onWebResourceError != null) {
        weakThis.target!._onWebResourceError!(
          WebKitWebResourceError._(
            const NSError(
              code: WKErrorCode.webContentProcessTerminated,
              // Value from https://developer.apple.com/documentation/webkit/wkerrordomain?language=objc.
              domain: 'WKErrorDomain',
            ),
            isForMainFrame: true,
            url: null,
          ),
        );
      }
    },
  );
}