prepare method

void prepare()

Implementation

void prepare() {
  if (headlessWebViewId != null) {
    final headlessWebView =
        HeadlessInAppWebViewManager.webViews[headlessWebViewId!];
    if (headlessWebView != null && headlessWebView.webView != null) {
      final webView = headlessWebView.disposeAndGetFlutterWebView();
      if (webView != null) {
        webView.iframe.id = iframe.id;
        iframe.remove();
        iframeContainer.append(webView.iframe);
        iframe = webView.iframe;

        initialSettings = webView.initialSettings;
        settings = webView.settings;
        initialUrlRequest = webView.initialUrlRequest;
        initialData = webView.initialData;
        initialFile = webView.initialFile;
        initialUserScripts = webView.initialUserScripts;

        jsWebView = flutterInAppWebView?.createFlutterInAppWebView(
          _viewId is int ? (_viewId as int).toJS : _viewId.toString().toJS,
          iframe,
          iframeContainer,
          _expectedBridgeSecret,
        );
      }
    }
  }

  if (headlessWebViewId == null && settings == null) {
    settings = initialSettings ?? InAppWebViewSettings();

    Set<Sandbox> sandbox = Set.from(Sandbox.values);

    if (settings!.javaScriptEnabled != null &&
        !settings!.javaScriptEnabled!) {
      sandbox.remove(Sandbox.ALLOW_SCRIPTS);
    }

    iframe.allow = settings!.iframeAllow ?? iframe.allow;
    iframe.allowFullscreen =
        settings!.iframeAllowFullscreen ?? iframe.allowFullscreen;
    iframe.referrerPolicy =
        settings!.iframeReferrerPolicy?.toNativeValue() ??
        iframe.referrerPolicy;
    iframe.name = settings!.iframeName ?? iframe.name;
    iframe.csp = settings!.iframeCsp ?? iframe.csp;
    iframe.role = settings!.iframeRole ?? iframe.role;
    iframe.ariaHidden = settings!.iframeAriaHidden ?? iframe.ariaHidden;

    if (settings!.iframeSandbox != null &&
        settings!.iframeSandbox != Sandbox.ALLOW_ALL) {
      iframe.setAttribute(
        "sandbox",
        settings!.iframeSandbox!.map((e) => e.toNativeValue()).join(" "),
      );
    } else if (settings!.iframeSandbox == Sandbox.ALLOW_ALL) {
      iframe.removeAttribute("sandbox");
    } else if (sandbox != Sandbox.values) {
      iframe.setAttribute(
        "sandbox",
        sandbox.map((e) => e.toNativeValue()).join(" "),
      );
      settings!.iframeSandbox = sandbox;
    }
  }

  if (initialUserScripts != null) {
    userContentController.addUserOnlyScripts(initialUserScripts!.toList());
  }

  jsWebView?.prepare(settings?.toMap().jsify());
}