From 20dfaed9791ceeb2e5d036334facb743209025ef Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 19 Jan 2023 17:52:51 -0500 Subject: [PATCH 1/2] fix chooser --- .../webview_flutter/example/lib/main.dart | 6 ++- .../webview_flutter/example/pubspec.yaml | 3 +- .../webview_flutter/pubspec.yaml | 3 +- .../lib/src/android_webview.dart | 2 +- .../test/android_webview_test.dart | 52 +++++++++++++++++++ 5 files changed, 62 insertions(+), 4 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index 239b417c4e04..3c70faa6d21e 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -146,13 +146,17 @@ Page resource error: ); }, ) - ..loadRequest(Uri.parse('https://flutter.dev')); + ..loadRequest(Uri.parse('https://ps.uci.edu/~franklin/doc/file_upload.html')); // #docregion platform_features if (controller.platform is AndroidWebViewController) { AndroidWebViewController.enableDebugging(true); (controller.platform as AndroidWebViewController) .setMediaPlaybackRequiresUserGesture(false); + (controller.platform as AndroidWebViewController).setOnShowFileSelector((FileSelectorParams params) async { + print('hello'); + return ['apple.txt']; + }); } // #enddocregion platform_features diff --git a/packages/webview_flutter/webview_flutter/example/pubspec.yaml b/packages/webview_flutter/webview_flutter/example/pubspec.yaml index 4d8d7889d733..3d0a5e06c158 100644 --- a/packages/webview_flutter/webview_flutter/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/example/pubspec.yaml @@ -17,7 +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.0.0 + webview_flutter_android: + path: ../../webview_flutter_android webview_flutter_wkwebview: ^3.0.0 dev_dependencies: diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml index ace6207d6236..f29522cf81f9 100644 --- a/packages/webview_flutter/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/pubspec.yaml @@ -19,7 +19,8 @@ flutter: dependencies: flutter: sdk: flutter - webview_flutter_android: ^3.0.0 + webview_flutter_android: + path: ../webview_flutter_android webview_flutter_platform_interface: ^2.0.0 webview_flutter_wkwebview: ^3.0.0 diff --git a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart index f7d536ce3972..c5d301d93202 100644 --- a/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart +++ b/packages/webview_flutter/webview_flutter_android/lib/src/android_webview.dart @@ -927,7 +927,7 @@ class WebChromeClient extends JavaObject { Future setSynchronousReturnValueForOnShowFileChooser( bool value, ) { - if (value && onShowFileChooser != null) { + if (value && onShowFileChooser == null) { throw StateError( 'Setting this to true requires `onShowFileChooser` to be nonnull.', ); diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart index bd01494cfb4d..9878d7a7e5cf 100644 --- a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart +++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart @@ -861,6 +861,58 @@ void main() { expect(result[1], params); }); + test('setSynchronousReturnValueForOnShowFileChooser', () { + final MockTestWebChromeClientHostApi mockHostApi = + MockTestWebChromeClientHostApi(); + TestWebChromeClientHostApi.setup(mockHostApi); + + WebChromeClient.api = + WebChromeClientHostApiImpl(instanceManager: instanceManager); + + final WebChromeClient webChromeClient = WebChromeClient.detached(); + instanceManager.addHostCreatedInstance(webChromeClient, 2); + + webChromeClient.setSynchronousReturnValueForOnShowFileChooser(false); + + verify( + mockHostApi.setSynchronousReturnValueForOnShowFileChooser(2, false), + ); + }); + + test( + 'setSynchronousReturnValueForOnShowFileChooser throws StateError when onShowFileChooser is null', + () { + final MockTestWebChromeClientHostApi mockHostApi = + MockTestWebChromeClientHostApi(); + TestWebChromeClientHostApi.setup(mockHostApi); + + WebChromeClient.api = + WebChromeClientHostApiImpl(instanceManager: instanceManager); + + final WebChromeClient clientWithNullCallback = + WebChromeClient.detached(); + instanceManager.addHostCreatedInstance(clientWithNullCallback, 2); + + expect( + () => clientWithNullCallback + .setSynchronousReturnValueForOnShowFileChooser(true), + throwsStateError, + ); + + final WebChromeClient clientWithNonnullCallback = + WebChromeClient.detached( + onShowFileChooser: (_, __) async => [], + ); + instanceManager.addHostCreatedInstance(clientWithNonnullCallback, 3); + + clientWithNonnullCallback + .setSynchronousReturnValueForOnShowFileChooser(true); + + verify( + mockHostApi.setSynchronousReturnValueForOnShowFileChooser(3, true), + ); + }); + test('copy', () { expect(WebChromeClient.detached().copy(), isA()); }); From 6f0e667282760c4be7cb494bb56063935d1dac84 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 19 Jan 2023 17:55:17 -0500 Subject: [PATCH 2/2] undo webview flutter changes --- .../webview_flutter/webview_flutter/example/lib/main.dart | 6 +----- .../webview_flutter/webview_flutter/example/pubspec.yaml | 3 +-- packages/webview_flutter/webview_flutter/pubspec.yaml | 3 +-- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/lib/main.dart b/packages/webview_flutter/webview_flutter/example/lib/main.dart index 3c70faa6d21e..239b417c4e04 100644 --- a/packages/webview_flutter/webview_flutter/example/lib/main.dart +++ b/packages/webview_flutter/webview_flutter/example/lib/main.dart @@ -146,17 +146,13 @@ Page resource error: ); }, ) - ..loadRequest(Uri.parse('https://ps.uci.edu/~franklin/doc/file_upload.html')); + ..loadRequest(Uri.parse('https://flutter.dev')); // #docregion platform_features if (controller.platform is AndroidWebViewController) { AndroidWebViewController.enableDebugging(true); (controller.platform as AndroidWebViewController) .setMediaPlaybackRequiresUserGesture(false); - (controller.platform as AndroidWebViewController).setOnShowFileSelector((FileSelectorParams params) async { - print('hello'); - return ['apple.txt']; - }); } // #enddocregion platform_features diff --git a/packages/webview_flutter/webview_flutter/example/pubspec.yaml b/packages/webview_flutter/webview_flutter/example/pubspec.yaml index 3d0a5e06c158..4d8d7889d733 100644 --- a/packages/webview_flutter/webview_flutter/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/example/pubspec.yaml @@ -17,8 +17,7 @@ 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: - path: ../../webview_flutter_android + webview_flutter_android: ^3.0.0 webview_flutter_wkwebview: ^3.0.0 dev_dependencies: diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml index f29522cf81f9..ace6207d6236 100644 --- a/packages/webview_flutter/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/pubspec.yaml @@ -19,8 +19,7 @@ flutter: dependencies: flutter: sdk: flutter - webview_flutter_android: - path: ../webview_flutter_android + webview_flutter_android: ^3.0.0 webview_flutter_platform_interface: ^2.0.0 webview_flutter_wkwebview: ^3.0.0