From ade23fee975fc4c61775063edad68de20f3f1863 Mon Sep 17 00:00:00 2001 From: rekire Date: Sun, 12 Nov 2023 14:02:34 +0100 Subject: [PATCH 01/11] Add missing exports from the platform interface --- .../lib/src/webview_controller.dart | 24 +++++++++++++++++++ .../webview_flutter/lib/webview_flutter.dart | 3 +++ 2 files changed, 27 insertions(+) diff --git a/packages/webview_flutter/webview_flutter/lib/src/webview_controller.dart b/packages/webview_flutter/webview_flutter/lib/src/webview_controller.dart index 0b81978d6fcc..f8f083c9ba90 100644 --- a/packages/webview_flutter/webview_flutter/lib/src/webview_controller.dart +++ b/packages/webview_flutter/webview_flutter/lib/src/webview_controller.dart @@ -370,6 +370,30 @@ class WebViewController { return platform.setOnConsoleMessage(onConsoleMessage); } + /// Sets a callback that notifies the host application that the web page + /// wants to display a JavaScript alert() dialog. + Future setOnJavaScriptAlertDialog( + Future Function(JavaScriptAlertDialogRequest request) + onJavaScriptAlertDialog) async { + return platform.setOnJavaScriptAlertDialog(onJavaScriptAlertDialog); + } + + /// Sets a callback that notifies the host application that the web page + /// wants to display a JavaScript confirm() dialog. + Future setOnJavaScriptConfirmDialog( + Future Function(JavaScriptConfirmDialogRequest request) + onJavaScriptConfirmDialog) async { + return platform.setOnJavaScriptConfirmDialog(onJavaScriptConfirmDialog); + } + + /// Sets a callback that notifies the host application that the web page + /// wants to display a JavaScript prompt() dialog. + Future setOnJavaScriptTextInputDialog( + Future Function(JavaScriptTextInputDialogRequest request) + onJavaScriptTextInputDialog) async { + return platform.setOnJavaScriptTextInputDialog(onJavaScriptTextInputDialog); + } + /// Gets the value used for the HTTP `User-Agent:` request header. Future getUserAgent() { return platform.getUserAgent(); diff --git a/packages/webview_flutter/webview_flutter/lib/webview_flutter.dart b/packages/webview_flutter/webview_flutter/lib/webview_flutter.dart index 3b6495ca96f1..29a7d48cd570 100644 --- a/packages/webview_flutter/webview_flutter/lib/webview_flutter.dart +++ b/packages/webview_flutter/webview_flutter/lib/webview_flutter.dart @@ -5,10 +5,13 @@ export 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart' show HttpAuthRequest, + JavaScriptAlertDialogRequest, + JavaScriptConfirmDialogRequest, JavaScriptConsoleMessage, JavaScriptLogLevel, JavaScriptMessage, JavaScriptMode, + JavaScriptTextInputDialogRequest, LoadRequestMethod, NavigationDecision, NavigationRequest, From 0f6fb5fffa10e71394dd296aa85073c31929d6a0 Mon Sep 17 00:00:00 2001 From: jsharp83 Date: Thu, 25 Jan 2024 10:49:18 +0900 Subject: [PATCH 02/11] Update changelog, pubspec and add test case --- .../webview_flutter/CHANGELOG.md | 1 + .../lib/src/webview_controller.dart | 6 +- .../webview_flutter/pubspec.yaml | 6 +- .../test/webview_controller_test.dart | 56 +++++++++++++++++++ 4 files changed, 63 insertions(+), 6 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md index 2b10fb2efb1a..51e85c7b134b 100644 --- a/packages/webview_flutter/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md @@ -1,6 +1,7 @@ ## 4.5.0 * Adds support for HTTP basic authentication. See `NavigationDelegate(onReceivedHttpAuthRequest)`. +* Adds support to show JavaScript dialog. See `WebViewController.setOnJavaScriptAlertDialog`, `WebViewController.setOnJavaScriptConfirmDialog` and `WebViewController.setOnJavaScriptTextInputDialog`. * Updates support matrix in README to indicate that iOS 11 is no longer supported. * Clients on versions of Flutter that still support iOS 11 can continue to use this package with iOS 11, but will not receive any further updates to the iOS implementation. diff --git a/packages/webview_flutter/webview_flutter/lib/src/webview_controller.dart b/packages/webview_flutter/webview_flutter/lib/src/webview_controller.dart index f8f083c9ba90..d917d7637c2e 100644 --- a/packages/webview_flutter/webview_flutter/lib/src/webview_controller.dart +++ b/packages/webview_flutter/webview_flutter/lib/src/webview_controller.dart @@ -374,7 +374,7 @@ class WebViewController { /// wants to display a JavaScript alert() dialog. Future setOnJavaScriptAlertDialog( Future Function(JavaScriptAlertDialogRequest request) - onJavaScriptAlertDialog) async { + onJavaScriptAlertDialog) async { return platform.setOnJavaScriptAlertDialog(onJavaScriptAlertDialog); } @@ -382,7 +382,7 @@ class WebViewController { /// wants to display a JavaScript confirm() dialog. Future setOnJavaScriptConfirmDialog( Future Function(JavaScriptConfirmDialogRequest request) - onJavaScriptConfirmDialog) async { + onJavaScriptConfirmDialog) async { return platform.setOnJavaScriptConfirmDialog(onJavaScriptConfirmDialog); } @@ -390,7 +390,7 @@ class WebViewController { /// wants to display a JavaScript prompt() dialog. Future setOnJavaScriptTextInputDialog( Future Function(JavaScriptTextInputDialogRequest request) - onJavaScriptTextInputDialog) async { + onJavaScriptTextInputDialog) async { return platform.setOnJavaScriptTextInputDialog(onJavaScriptTextInputDialog); } diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml index 0572df372d52..deb1cf18cc3c 100644 --- a/packages/webview_flutter/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/pubspec.yaml @@ -19,9 +19,9 @@ flutter: dependencies: flutter: sdk: flutter - webview_flutter_android: ^3.13.0 - webview_flutter_platform_interface: ^2.7.0 - webview_flutter_wkwebview: ^3.10.0 + webview_flutter_android: ^3.14.0 + webview_flutter_platform_interface: ^2.10.0 + webview_flutter_wkwebview: ^3.11.0 dev_dependencies: build_runner: ^2.1.5 diff --git a/packages/webview_flutter/webview_flutter/test/webview_controller_test.dart b/packages/webview_flutter/webview_flutter/test/webview_controller_test.dart index 695a781738e2..9eb5343f84df 100644 --- a/packages/webview_flutter/webview_flutter/test/webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter/test/webview_controller_test.dart @@ -403,6 +403,62 @@ void main() { verify(mockPlatformWebViewController.setOnConsoleMessage(onConsoleMessage)); }); + test('setOnJavaScriptAlertDialog', () async { + final MockPlatformWebViewController mockPlatformWebViewController = + MockPlatformWebViewController(); + + final WebViewController webViewController = WebViewController.fromPlatform( + mockPlatformWebViewController, + ); + + Future onJavaScriptAlertDialog( + JavaScriptAlertDialogRequest request) async { + return; + } + + await webViewController.setOnJavaScriptAlertDialog(onJavaScriptAlertDialog); + verify(mockPlatformWebViewController + .setOnJavaScriptAlertDialog(onJavaScriptAlertDialog)); + }); + + test('setOnJavaScriptConfirmDialog', () async { + final MockPlatformWebViewController mockPlatformWebViewController = + MockPlatformWebViewController(); + + final WebViewController webViewController = WebViewController.fromPlatform( + mockPlatformWebViewController, + ); + + Future onJavaScriptConfirmDialog( + JavaScriptConfirmDialogRequest request) async { + return true; + } + + await webViewController + .setOnJavaScriptConfirmDialog(onJavaScriptConfirmDialog); + verify(mockPlatformWebViewController + .setOnJavaScriptConfirmDialog(onJavaScriptConfirmDialog)); + }); + + test('setOnJavaScriptTextInputDialog', () async { + final MockPlatformWebViewController mockPlatformWebViewController = + MockPlatformWebViewController(); + + final WebViewController webViewController = WebViewController.fromPlatform( + mockPlatformWebViewController, + ); + + Future onJavaScriptTextInputDialog( + JavaScriptTextInputDialogRequest request) async { + return 'text'; + } + + await webViewController + .setOnJavaScriptTextInputDialog(onJavaScriptTextInputDialog); + verify(mockPlatformWebViewController + .setOnJavaScriptTextInputDialog(onJavaScriptTextInputDialog)); + }); + test('getUserAgent', () async { final MockPlatformWebViewController mockPlatformWebViewController = MockPlatformWebViewController(); From aff2aa896205697def6468cb1a70ce70dfd74f27 Mon Sep 17 00:00:00 2001 From: jsharp83 Date: Fri, 26 Jan 2024 09:58:49 +0900 Subject: [PATCH 03/11] Update minimum flutter and dart version --- packages/webview_flutter/webview_flutter/pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml index deb1cf18cc3c..caffb1505ff3 100644 --- a/packages/webview_flutter/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 4.5.0 environment: - sdk: ">=3.0.0 <4.0.0" - flutter: ">=3.10.0" + sdk: ">=3.2.3 <4.0.0" + flutter: ">=3.16.6" flutter: plugin: From 203c627c9ebaff18470e4ddc2e12db222ad6e9a1 Mon Sep 17 00:00:00 2001 From: jsharp83 Date: Fri, 26 Jan 2024 11:11:53 +0900 Subject: [PATCH 04/11] Remove warning --- .../test/legacy/webview_flutter_test.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart index 008e91a8bb29..6abd2648377a 100644 --- a/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart @@ -1319,13 +1319,13 @@ class MatchesWebSettings extends Matcher { bool matches( covariant WebSettings webSettings, Map matchState) { return _webSettings!.javascriptMode == webSettings.javascriptMode && - _webSettings!.hasNavigationDelegate == + _webSettings.hasNavigationDelegate == webSettings.hasNavigationDelegate && - _webSettings!.debuggingEnabled == webSettings.debuggingEnabled && - _webSettings!.gestureNavigationEnabled == + _webSettings.debuggingEnabled == webSettings.debuggingEnabled && + _webSettings.gestureNavigationEnabled == webSettings.gestureNavigationEnabled && - _webSettings!.userAgent == webSettings.userAgent && - _webSettings!.zoomEnabled == webSettings.zoomEnabled; + _webSettings.userAgent == webSettings.userAgent && + _webSettings.zoomEnabled == webSettings.zoomEnabled; } } From 2b35ddd737f456c81d52aa59bda2b3696a1a0924 Mon Sep 17 00:00:00 2001 From: jsharp83 Date: Sat, 3 Feb 2024 20:57:55 +0900 Subject: [PATCH 05/11] Update change log --- packages/webview_flutter/webview_flutter/CHANGELOG.md | 8 +++++++- packages/webview_flutter/webview_flutter/pubspec.yaml | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md index 51e85c7b134b..d9807aa0084a 100644 --- a/packages/webview_flutter/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md @@ -1,7 +1,13 @@ +## 4.6.0 + +* Adds support for custom handling of JavaScript dialogs. + See `WebViewController.setOnJavaScriptAlertDialog`, + `WebViewController.setOnJavaScriptConfirmDialog` + and `WebViewController.setOnJavaScriptTextInputDialog`. + ## 4.5.0 * Adds support for HTTP basic authentication. See `NavigationDelegate(onReceivedHttpAuthRequest)`. -* Adds support to show JavaScript dialog. See `WebViewController.setOnJavaScriptAlertDialog`, `WebViewController.setOnJavaScriptConfirmDialog` and `WebViewController.setOnJavaScriptTextInputDialog`. * Updates support matrix in README to indicate that iOS 11 is no longer supported. * Clients on versions of Flutter that still support iOS 11 can continue to use this package with iOS 11, but will not receive any further updates to the iOS implementation. diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml index caffb1505ff3..2d9bd8abd123 100644 --- a/packages/webview_flutter/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter description: A Flutter plugin that provides a WebView widget on Android and iOS. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 4.5.0 +version: 4.6.0 environment: sdk: ">=3.2.3 <4.0.0" From 28f3eda965675a8d7b24e1c4c72ba76690e03d21 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 8 Feb 2024 12:16:22 -0500 Subject: [PATCH 06/11] undo dart and flutter bumps --- packages/webview_flutter/webview_flutter/pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml index 2d9bd8abd123..f2d7ca2b0775 100644 --- a/packages/webview_flutter/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 4.6.0 environment: - sdk: ">=3.2.3 <4.0.0" - flutter: ">=3.16.6" + sdk: ">=3.0.0 <4.0.0" + flutter: ">=3.10.0" flutter: plugin: From f06bfc20cc7b10f5cabe5919a35312e01d30b29a Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 8 Feb 2024 12:18:16 -0500 Subject: [PATCH 07/11] format changelog --- packages/webview_flutter/webview_flutter/CHANGELOG.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md index d9807aa0084a..70e4fca262ba 100644 --- a/packages/webview_flutter/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md @@ -1,8 +1,7 @@ ## 4.6.0 -* Adds support for custom handling of JavaScript dialogs. - See `WebViewController.setOnJavaScriptAlertDialog`, - `WebViewController.setOnJavaScriptConfirmDialog` +* Adds support for custom handling of JavaScript dialogs. See + `WebViewController.setOnJavaScriptAlertDialog`, `WebViewController.setOnJavaScriptConfirmDialog` and `WebViewController.setOnJavaScriptTextInputDialog`. ## 4.5.0 From 39ff8decf92e8e6d9426cfedb1d7b1b47706fe3c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 8 Feb 2024 13:23:21 -0500 Subject: [PATCH 08/11] fix test --- .../test/legacy/webview_flutter_test.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart index 6abd2648377a..008e91a8bb29 100644 --- a/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart @@ -1319,13 +1319,13 @@ class MatchesWebSettings extends Matcher { bool matches( covariant WebSettings webSettings, Map matchState) { return _webSettings!.javascriptMode == webSettings.javascriptMode && - _webSettings.hasNavigationDelegate == + _webSettings!.hasNavigationDelegate == webSettings.hasNavigationDelegate && - _webSettings.debuggingEnabled == webSettings.debuggingEnabled && - _webSettings.gestureNavigationEnabled == + _webSettings!.debuggingEnabled == webSettings.debuggingEnabled && + _webSettings!.gestureNavigationEnabled == webSettings.gestureNavigationEnabled && - _webSettings.userAgent == webSettings.userAgent && - _webSettings.zoomEnabled == webSettings.zoomEnabled; + _webSettings!.userAgent == webSettings.userAgent && + _webSettings!.zoomEnabled == webSettings.zoomEnabled; } } From 2bbea8c9a9f0d774995b115d709842cea18c8ba7 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 8 Feb 2024 13:55:29 -0500 Subject: [PATCH 09/11] my bad redo version change --- packages/webview_flutter/webview_flutter/pubspec.yaml | 4 ++-- .../test/legacy/webview_flutter_test.dart | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml index f2d7ca2b0775..b6d8bf8663de 100644 --- a/packages/webview_flutter/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 4.6.0 environment: - sdk: ">=3.0.0 <4.0.0" - flutter: ">=3.10.0" + sdk: ^3.2.3 + flutter: ">=3.16.6" flutter: plugin: diff --git a/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart index 008e91a8bb29..6abd2648377a 100644 --- a/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter/test/legacy/webview_flutter_test.dart @@ -1319,13 +1319,13 @@ class MatchesWebSettings extends Matcher { bool matches( covariant WebSettings webSettings, Map matchState) { return _webSettings!.javascriptMode == webSettings.javascriptMode && - _webSettings!.hasNavigationDelegate == + _webSettings.hasNavigationDelegate == webSettings.hasNavigationDelegate && - _webSettings!.debuggingEnabled == webSettings.debuggingEnabled && - _webSettings!.gestureNavigationEnabled == + _webSettings.debuggingEnabled == webSettings.debuggingEnabled && + _webSettings.gestureNavigationEnabled == webSettings.gestureNavigationEnabled && - _webSettings!.userAgent == webSettings.userAgent && - _webSettings!.zoomEnabled == webSettings.zoomEnabled; + _webSettings.userAgent == webSettings.userAgent && + _webSettings.zoomEnabled == webSettings.zoomEnabled; } } From d50d7ae4169396cc698b50e05843f6803e6067a4 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 8 Feb 2024 13:57:58 -0500 Subject: [PATCH 10/11] add to changelog about version bump --- packages/webview_flutter/webview_flutter/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md index 70e4fca262ba..64cb02db86fa 100644 --- a/packages/webview_flutter/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md @@ -3,6 +3,7 @@ * Adds support for custom handling of JavaScript dialogs. See `WebViewController.setOnJavaScriptAlertDialog`, `WebViewController.setOnJavaScriptConfirmDialog` and `WebViewController.setOnJavaScriptTextInputDialog`. +* Updates minimum Dart version to 3.2.3 and minimum Flutter version to 3.16.6. ## 4.5.0 From 2c3dc83bc9dc819c4f5122d05199ab47c9c36fc8 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 8 Feb 2024 14:00:41 -0500 Subject: [PATCH 11/11] also bump example pubspec version --- .../webview_flutter/example/pubspec.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/pubspec.yaml b/packages/webview_flutter/webview_flutter/example/pubspec.yaml index 24b41bf5833c..805324927ae3 100644 --- a/packages/webview_flutter/webview_flutter/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/example/pubspec.yaml @@ -3,8 +3,8 @@ description: Demonstrates how to use the webview_flutter plugin. publish_to: none environment: - sdk: ">=3.0.0 <4.0.0" - flutter: ">=3.10.0" + sdk: ^3.2.3 + flutter: ">=3.16.6" dependencies: flutter: @@ -17,8 +17,8 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ - webview_flutter_android: ^3.13.0 - webview_flutter_wkwebview: ^3.10.0 + webview_flutter_android: ^3.14.0 + webview_flutter_wkwebview: ^3.11.0 dev_dependencies: build_runner: ^2.1.5 @@ -27,7 +27,7 @@ dev_dependencies: sdk: flutter integration_test: sdk: flutter - webview_flutter_platform_interface: ^2.7.0 + webview_flutter_platform_interface: ^2.10.0 flutter: uses-material-design: true