From b6310f010b3ad74a5d6f4a5be5a8e737697597c3 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 28 Apr 2023 15:37:25 -0400 Subject: [PATCH 1/2] Fixes bug --- .../webview_flutter_wkwebview/CHANGELOG.md | 4 ++ .../lib/src/webkit_webview_controller.dart | 4 +- .../webview_flutter_wkwebview/pubspec.yaml | 2 +- .../test/webkit_webview_controller_test.dart | 50 +++++++++++++++++++ 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index 1041b121f48..a23a7113c97 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.4.1 + +* Fixes an exception caused by the `onUrlChange` callback returning a null url. + ## 3.4.0 * Adds support for `PlatformWebViewController.setOnPlatformPermissionRequest`. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart index b7975d5198c..885573f37e3 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart @@ -239,8 +239,8 @@ class WebKitWebViewController extends PlatformWebViewController { final UrlChangeCallback? urlChangeCallback = controller._currentNavigationDelegate?._onUrlChange; if (urlChangeCallback != null) { - final NSUrl url = change[NSKeyValueChangeKey.newValue]! as NSUrl; - urlChangeCallback(UrlChange(url: await url.getAbsoluteString())); + final NSUrl? url = change[NSKeyValueChangeKey.newValue] as NSUrl?; + urlChangeCallback(UrlChange(url: await url?.getAbsoluteString())); } break; } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index 915be555f56..e1f2e314265 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_wkwebview description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 3.4.0 +version: 3.4.1 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart index b4a8439e285..41900b559a3 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart @@ -1036,6 +1036,56 @@ void main() { expect(urlChange.url, 'https://www.google.com'); }); + test('setPlatformNavigationDelegate onUrlChange to null NSUrl', () async { + final MockWKWebView mockWebView = MockWKWebView(); + + late final void Function( + String keyPath, + NSObject object, + Map change, + ) webViewObserveValue; + + final WebKitWebViewController controller = createControllerWithMocks( + createMockWebView: ( + _, { + void Function( + String keyPath, + NSObject object, + Map change, + )? observeValue, + }) { + webViewObserveValue = observeValue!; + return mockWebView; + }, + ); + + final WebKitNavigationDelegate navigationDelegate = + WebKitNavigationDelegate( + const WebKitNavigationDelegateCreationParams( + webKitProxy: WebKitProxy( + createNavigationDelegate: CapturingNavigationDelegate.new, + createUIDelegate: WKUIDelegate.detached, + ), + ), + ); + + final Completer urlChangeCompleter = Completer(); + navigationDelegate.setOnUrlChange( + (UrlChange change) => urlChangeCompleter.complete(change), + ); + + await controller.setPlatformNavigationDelegate(navigationDelegate); + + webViewObserveValue( + 'URL', + mockWebView, + {NSKeyValueChangeKey.newValue: null}, + ); + + final UrlChange urlChange = await urlChangeCompleter.future; + expect(urlChange.url, isNull); + }); + test('webViewIdentifier', () { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, From 54d4407cf80686252754a722712973e1406ef8fd Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 28 Apr 2023 15:57:44 -0400 Subject: [PATCH 2/2] better wording --- packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index a23a7113c97..399cbe279c9 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,6 +1,6 @@ ## 3.4.1 -* Fixes an exception caused by the `onUrlChange` callback returning a null url. +* Fixes an exception caused by the `onUrlChange` callback passing a null `NSUrl`. ## 3.4.0