dotnet/maui · error · ArgumentNullException

renderer

Error message

renderer

What it means

CustomWebViewNavigationDelegate is the WKWebView navigation delegate created per WkWebViewRenderer. It stores the renderer to forward navigation events back to the WebView/IWebViewController (lines 261-262). A null renderer would NPE on every callback, so the constructor rejects null.

Source

Thrown at src/Compatibility/Core/src/iOS/Renderers/WkWebViewRenderer.cs:704

				{
					cookieBuilder.Append($"; HttpOnly");
				}

				cookieBuilder.Append("';");
			}

			return cookieBuilder.ToString();
		}

		class CustomWebViewNavigationDelegate : WKNavigationDelegate
		{
			readonly WkWebViewRenderer _renderer;
			WebNavigationEvent _lastEvent;

			public CustomWebViewNavigationDelegate(WkWebViewRenderer renderer)
			{
				if (renderer == null)
					throw new ArgumentNullException("renderer");
				_renderer = renderer;
			}

			WebView WebView => _renderer.WebView;
			IWebViewController WebViewController => WebView;

			[PortHandler]
			public override void DidFailNavigation(WKWebView webView, WKNavigation navigation, NSError error)
			{
				var url = GetCurrentUrl();
				WebViewController.SendNavigated(
					new WebNavigatedEventArgs(_lastEvent, new UrlWebViewSource { Url = url }, url, WebNavigationResult.Failure)
				);

				_renderer.UpdateCanGoBackForward();
			}

			[PortHandler]

View on GitHub (pinned to f377ff1c5e)

Solutions

  1. If overriding delegate creation, construct the delegate with 'this' (the fully-constructed renderer), not a null.
  2. Do not create CustomWebViewNavigationDelegate before the renderer is assigned.
  3. Use the default WkWebViewRenderer delegate wiring unless you have a specific reason to override.

Example fix

// before
protected override WKNavigationDelegate CreateNavDelegate() => new CustomWebViewNavigationDelegate(_notSet);

// after
protected override WKNavigationDelegate CreateNavDelegate() => new CustomWebViewNavigationDelegate(this);
Defensive patterns

Strategy: validation

Validate before calling

if (renderer == null) throw new ArgumentNullException(nameof(renderer));
var del = new CustomWebViewNavigationDelegate(renderer);

Prevention

When it happens

Trigger: Constructing new CustomWebViewNavigationDelegate(null), which only happens inside the renderer code if the owning WkWebViewRenderer is null - generally an internal lifecycle issue rather than a caller mistake.

Common situations: Subclassing WkWebViewRenderer and overriding delegate creation while the renderer is partially constructed; custom WebView renderers that mis-wire the delegate.

Related errors


AI-assisted analysis of dotnet/maui@f377ff1c5e (2026-08-13). Data as JSON: /api/errors/ca7832a4d641eb29. Report an issue: GitHub.