From 65d14b038d7c31d2cf37a8c0d5b81eac267b03b3 Mon Sep 17 00:00:00 2001 From: math1man Date: Mon, 29 Mar 2021 15:27:13 -0700 Subject: [PATCH 1/9] Remove explicit layoutDirection from webview_android.dart. Despite the comment here, this layout direction affects the rendering of the scroll bar. --- packages/webview_flutter/lib/src/webview_android.dart | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/webview_flutter/lib/src/webview_android.dart b/packages/webview_flutter/lib/src/webview_android.dart index 8850c7977e9c..78bfce53b750 100644 --- a/packages/webview_flutter/lib/src/webview_android.dart +++ b/packages/webview_flutter/lib/src/webview_android.dart @@ -47,10 +47,6 @@ class AndroidWebView implements WebViewPlatform { id, webViewPlatformCallbacksHandler)); }, gestureRecognizers: gestureRecognizers, - // WebView content is not affected by the Android view's layout direction, - // we explicitly set it here so that the widget doesn't require an ambient - // directionality. - layoutDirection: TextDirection.rtl, creationParams: MethodChannelWebViewPlatform.creationParamsToMap(creationParams), creationParamsCodec: const StandardMessageCodec(), From af2b9d1827cd2d001de6bcb34a3b5cfe1220f7e0 Mon Sep 17 00:00:00 2001 From: math1man Date: Mon, 29 Mar 2021 15:28:38 -0700 Subject: [PATCH 2/9] Update CHANGELOG.md --- packages/webview_flutter/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md index 6d2b4bb26815..b8e5e0bba5e0 100644 --- a/packages/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.0.3 + +* Fixes bug where scroll bars on the Android non-hybrid WebView are rendered on +the wrong side of the screen. + ## 2.0.2 * Fixes bug where text fields are hidden behind the keyboard From dfa48d2fb8e42ae68e8711c66149b4be506b7d26 Mon Sep 17 00:00:00 2001 From: math1man Date: Mon, 29 Mar 2021 15:34:00 -0700 Subject: [PATCH 3/9] Update pubspec.yaml --- packages/webview_flutter/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/pubspec.yaml b/packages/webview_flutter/pubspec.yaml index 6ee9e119bd3a..a89ded4e9014 100644 --- a/packages/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/pubspec.yaml @@ -1,7 +1,7 @@ name: webview_flutter description: A Flutter plugin that provides a WebView widget on Android and iOS. homepage: https://github.com/flutter/plugins/tree/master/packages/webview_flutter -version: 2.0.2 +version: 2.0.3 environment: sdk: ">=2.12.0-259.9.beta <3.0.0" From 793902feea884cd6d3fa3e1735ce0c7988c0be98 Mon Sep 17 00:00:00 2001 From: math1man Date: Tue, 30 Mar 2021 09:53:42 -0700 Subject: [PATCH 4/9] Update webview_flutter_test.dart. Now that the WebView doesn't internally specify a layoutDirection, it must have a Directionality widget as an ancestor to derive the direction from. --- .../test/webview_flutter_test.dart | 358 +++++++++++------- 1 file changed, 218 insertions(+), 140 deletions(-) diff --git a/packages/webview_flutter/test/webview_flutter_test.dart b/packages/webview_flutter/test/webview_flutter_test.dart index 4360484408b5..54eff64e2812 100644 --- a/packages/webview_flutter/test/webview_flutter_test.dart +++ b/packages/webview_flutter/test/webview_flutter_test.dart @@ -36,12 +36,13 @@ void main() { }); testWidgets('Create WebView', (WidgetTester tester) async { - await tester.pumpWidget(const WebView()); + await _pumpWebView(tester, const WebView()); }); testWidgets('Initial url', (WidgetTester tester) async { late WebViewController controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', onWebViewCreated: (WebViewController webViewController) { @@ -54,26 +55,31 @@ void main() { }); testWidgets('Javascript mode', (WidgetTester tester) async { - await tester.pumpWidget(const WebView( - initialUrl: 'https://youtube.com', - javascriptMode: JavascriptMode.unrestricted, - )); + await _pumpWebView( + tester, + const WebView( + initialUrl: 'https://youtube.com', + javascriptMode: JavascriptMode.unrestricted, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; expect(platformWebView.javascriptMode, JavascriptMode.unrestricted); - await tester.pumpWidget(const WebView( - initialUrl: 'https://youtube.com', - javascriptMode: JavascriptMode.disabled, - )); + await _pumpWebView( + tester, + const WebView( + initialUrl: 'https://youtube.com', + javascriptMode: JavascriptMode.disabled, + )); expect(platformWebView.javascriptMode, JavascriptMode.disabled); }); testWidgets('Load url', (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -90,7 +96,8 @@ void main() { testWidgets('Invalid urls', (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -112,7 +119,8 @@ void main() { testWidgets('Headers in loadUrl', (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -131,8 +139,9 @@ void main() { testWidgets("Can't go back before loading a page", (WidgetTester tester) async { - WebViewController? controller; - await tester.pumpWidget( + WebViewController? controller; + await _pumpWebView( + tester, WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -149,7 +158,8 @@ void main() { testWidgets("Clear Cache", (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -167,7 +177,8 @@ void main() { testWidgets("Can't go back with no history", (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -184,7 +195,8 @@ void main() { testWidgets('Can go back', (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -203,8 +215,9 @@ void main() { testWidgets("Can't go forward before loading a page", (WidgetTester tester) async { - WebViewController? controller; - await tester.pumpWidget( + WebViewController? controller; + await _pumpWebView( + tester, WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -221,7 +234,8 @@ void main() { testWidgets("Can't go forward with no history", (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -238,7 +252,8 @@ void main() { testWidgets('Can go forward', (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -258,7 +273,8 @@ void main() { testWidgets('Go back', (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', onWebViewCreated: (WebViewController webViewController) { @@ -282,7 +298,8 @@ void main() { testWidgets('Go forward', (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', onWebViewCreated: (WebViewController webViewController) { @@ -310,7 +327,8 @@ void main() { testWidgets('Current URL', (WidgetTester tester) async { WebViewController? controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -335,7 +353,8 @@ void main() { testWidgets('Reload url', (WidgetTester tester) async { late WebViewController controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -362,7 +381,8 @@ void main() { testWidgets('evaluate Javascript', (WidgetTester tester) async { late WebViewController controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://flutter.io', javascriptMode: JavascriptMode.unrestricted, @@ -378,8 +398,9 @@ void main() { testWidgets('evaluate Javascript with JavascriptMode disabled', (WidgetTester tester) async { - late WebViewController controller; - await tester.pumpWidget( + late WebViewController controller; + await _pumpWebView( + tester, WebView( initialUrl: 'https://flutter.io', javascriptMode: JavascriptMode.disabled, @@ -395,7 +416,8 @@ void main() { }); testWidgets('Cookies can be cleared once', (WidgetTester tester) async { - await tester.pumpWidget( + await _pumpWebView( + tester, const WebView( initialUrl: 'https://flutter.io', ), @@ -407,7 +429,8 @@ void main() { testWidgets('Second cookie clear does not have cookies', (WidgetTester tester) async { - await tester.pumpWidget( + await _pumpWebView( + tester, const WebView( initialUrl: 'https://flutter.io', ), @@ -420,7 +443,8 @@ void main() { }); testWidgets('Initial JavaScript channels', (WidgetTester tester) async { - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -458,7 +482,8 @@ void main() { testWidgets('Unique JavaScript channel names are required', (WidgetTester tester) async { - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -473,7 +498,8 @@ void main() { }); testWidgets('JavaScript channels update', (WidgetTester tester) async { - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -485,7 +511,8 @@ void main() { ), ); - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -512,7 +539,8 @@ void main() { // updating it again with a subset of the previously registered channels fails as the // widget's cache of current channel wasn't properly updated when updating javascriptChannels to // null. - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -522,13 +550,15 @@ void main() { ), ); - await tester.pumpWidget( + await _pumpWebView( + tester, const WebView( initialUrl: 'https://youtube.com', ), ); - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -548,7 +578,8 @@ void main() { testWidgets('JavaScript channel messages', (WidgetTester tester) async { final List ttsMessagesReceived = []; final List alarmMessagesReceived = []; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -582,12 +613,14 @@ void main() { testWidgets('onPageStarted is not null', (WidgetTester tester) async { String? returnedUrl; - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - onPageStarted: (String url) { - returnedUrl = url; - }, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + onPageStarted: (String url) { + returnedUrl = url; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -598,10 +631,12 @@ void main() { }); testWidgets('onPageStarted is null', (WidgetTester tester) async { - await tester.pumpWidget(const WebView( - initialUrl: 'https://youtube.com', - onPageStarted: null, - )); + await _pumpWebView( + tester, + const WebView( + initialUrl: 'https://youtube.com', + onPageStarted: null, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -614,17 +649,21 @@ void main() { testWidgets('onPageStarted changed', (WidgetTester tester) async { String? returnedUrl; - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - onPageStarted: (String url) {}, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + onPageStarted: (String url) {}, + )); - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - onPageStarted: (String url) { - returnedUrl = url; - }, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + onPageStarted: (String url) { + returnedUrl = url; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -639,12 +678,14 @@ void main() { testWidgets('onPageFinished is not null', (WidgetTester tester) async { String? returnedUrl; - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - onPageFinished: (String url) { - returnedUrl = url; - }, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + onPageFinished: (String url) { + returnedUrl = url; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -655,10 +696,12 @@ void main() { }); testWidgets('onPageFinished is null', (WidgetTester tester) async { - await tester.pumpWidget(const WebView( - initialUrl: 'https://youtube.com', - onPageFinished: null, - )); + await _pumpWebView( + tester, + const WebView( + initialUrl: 'https://youtube.com', + onPageFinished: null, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -671,17 +714,21 @@ void main() { testWidgets('onPageFinished changed', (WidgetTester tester) async { String? returnedUrl; - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - onPageFinished: (String url) {}, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + onPageFinished: (String url) {}, + )); - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - onPageFinished: (String url) { - returnedUrl = url; - }, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + onPageFinished: (String url) { + returnedUrl = url; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -696,12 +743,14 @@ void main() { testWidgets('onLoadingProgress is not null', (WidgetTester tester) async { int? loadingProgress; - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - onProgress: (int progress) { - loadingProgress = progress; - }, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + onProgress: (int progress) { + loadingProgress = progress; + }, + )); final FakePlatformWebView? platformWebView = fakePlatformViewsController.lastCreatedView; @@ -712,10 +761,12 @@ void main() { }); testWidgets('onLoadingProgress is null', (WidgetTester tester) async { - await tester.pumpWidget(const WebView( - initialUrl: 'https://youtube.com', - onProgress: null, - )); + await _pumpWebView( + tester, + const WebView( + initialUrl: 'https://youtube.com', + onProgress: null, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -727,17 +778,21 @@ void main() { testWidgets('onLoadingProgress changed', (WidgetTester tester) async { int? loadingProgress; - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - onProgress: (int progress) {}, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + onProgress: (int progress) {}, + )); - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - onProgress: (int progress) { - loadingProgress = progress; - }, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + onProgress: (int progress) { + loadingProgress = progress; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -750,20 +805,24 @@ void main() { group('navigationDelegate', () { testWidgets('hasNavigationDelegate', (WidgetTester tester) async { - await tester.pumpWidget(const WebView( - initialUrl: 'https://youtube.com', - )); + await _pumpWebView( + tester, + const WebView( + initialUrl: 'https://youtube.com', + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; expect(platformWebView.hasNavigationDelegate, false); - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - navigationDelegate: (NavigationRequest r) => - NavigationDecision.navigate, - )); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + navigationDelegate: (NavigationRequest r) => + NavigationDecision.navigate, + )); expect(platformWebView.hasNavigationDelegate, true); }); @@ -771,15 +830,17 @@ void main() { testWidgets('Block navigation', (WidgetTester tester) async { final List navigationRequests = []; - await tester.pumpWidget(WebView( - initialUrl: 'https://youtube.com', - navigationDelegate: (NavigationRequest request) { - navigationRequests.add(request); - // Only allow navigating to https://flutter.dev - return request.url == 'https://flutter.dev' - ? NavigationDecision.navigate - : NavigationDecision.prevent; - })); + await _pumpWebView( + tester, + WebView( + initialUrl: 'https://youtube.com', + navigationDelegate: (NavigationRequest request) { + navigationRequests.add(request); + // Only allow navigating to https://flutter.dev + return request.url == 'https://flutter.dev' + ? NavigationDecision.navigate + : NavigationDecision.prevent; + })); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -802,9 +863,11 @@ void main() { group('debuggingEnabled', () { testWidgets('enable debugging', (WidgetTester tester) async { - await tester.pumpWidget(const WebView( - debuggingEnabled: true, - )); + await _pumpWebView( + tester, + const WebView( + debuggingEnabled: true, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -813,7 +876,7 @@ void main() { }); testWidgets('defaults to false', (WidgetTester tester) async { - await tester.pumpWidget(const WebView()); + await _pumpWebView(tester, const WebView()); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -823,22 +886,26 @@ void main() { testWidgets('can be changed', (WidgetTester tester) async { final GlobalKey key = GlobalKey(); - await tester.pumpWidget(WebView(key: key)); + await _pumpWebView(tester, WebView(key: key)); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; - await tester.pumpWidget(WebView( - key: key, - debuggingEnabled: true, - )); + await _pumpWebView( + tester, + WebView( + key: key, + debuggingEnabled: true, + )); expect(platformWebView.debuggingEnabled, true); - await tester.pumpWidget(WebView( - key: key, - debuggingEnabled: false, - )); + await _pumpWebView( + tester, + WebView( + key: key, + debuggingEnabled: false, + )); expect(platformWebView.debuggingEnabled, false); }); @@ -853,7 +920,8 @@ void main() { }); testWidgets('creation', (WidgetTester tester) async { - await tester.pumpWidget( + await _pumpWebView( + tester, const WebView( initialUrl: 'https://youtube.com', gestureNavigationEnabled: true, @@ -879,7 +947,8 @@ void main() { testWidgets('loadUrl', (WidgetTester tester) async { late WebViewController controller; - await tester.pumpWidget( + await _pumpWebView( + tester, WebView( initialUrl: 'https://youtube.com', onWebViewCreated: (WebViewController webViewController) { @@ -902,26 +971,35 @@ void main() { }); }); testWidgets('Set UserAgent', (WidgetTester tester) async { - await tester.pumpWidget(const WebView( - initialUrl: 'https://youtube.com', - javascriptMode: JavascriptMode.unrestricted, - )); + await _pumpWebView( + tester, + const WebView( + initialUrl: 'https://youtube.com', + javascriptMode: JavascriptMode.unrestricted, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; expect(platformWebView.userAgent, isNull); - await tester.pumpWidget(const WebView( - initialUrl: 'https://youtube.com', - javascriptMode: JavascriptMode.unrestricted, - userAgent: 'UA', - )); + await _pumpWebView( + tester, + const WebView( + initialUrl: 'https://youtube.com', + javascriptMode: JavascriptMode.unrestricted, + userAgent: 'UA', + )); expect(platformWebView.userAgent, 'UA'); }); } +Future _pumpWebView(WidgetTester tester, WebView webView) { + return tester.pumpWidget( + Directionality(textDirection: TextDirection.rtl, child: webView)); +} + class FakePlatformWebView { FakePlatformWebView(int? id, Map params) { if (params.containsKey('initialUrl')) { From 32ceafaecd506f786dfcb3f4cd2b76bdcee342c3 Mon Sep 17 00:00:00 2001 From: math1man Date: Tue, 30 Mar 2021 10:01:22 -0700 Subject: [PATCH 5/9] Fix some formatting --- packages/webview_flutter/test/webview_flutter_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/test/webview_flutter_test.dart b/packages/webview_flutter/test/webview_flutter_test.dart index 54eff64e2812..9719a5794c2b 100644 --- a/packages/webview_flutter/test/webview_flutter_test.dart +++ b/packages/webview_flutter/test/webview_flutter_test.dart @@ -139,7 +139,7 @@ void main() { testWidgets("Can't go back before loading a page", (WidgetTester tester) async { - WebViewController? controller; + WebViewController? controller; await _pumpWebView( tester, WebView( From 239671b8f30f8d973ebaecc8a12b1a3f70e36b99 Mon Sep 17 00:00:00 2001 From: math1man Date: Tue, 30 Mar 2021 10:01:49 -0700 Subject: [PATCH 6/9] Fix some formatting --- packages/webview_flutter/test/webview_flutter_test.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/test/webview_flutter_test.dart b/packages/webview_flutter/test/webview_flutter_test.dart index 9719a5794c2b..e82625090f75 100644 --- a/packages/webview_flutter/test/webview_flutter_test.dart +++ b/packages/webview_flutter/test/webview_flutter_test.dart @@ -215,7 +215,7 @@ void main() { testWidgets("Can't go forward before loading a page", (WidgetTester tester) async { - WebViewController? controller; + WebViewController? controller; await _pumpWebView( tester, WebView( @@ -398,7 +398,7 @@ void main() { testWidgets('evaluate Javascript with JavascriptMode disabled', (WidgetTester tester) async { - late WebViewController controller; + late WebViewController controller; await _pumpWebView( tester, WebView( From d90bcd0f771e16ccfc0b52bf8542972285c28e9a Mon Sep 17 00:00:00 2001 From: math1man Date: Wed, 31 Mar 2021 15:25:36 -0700 Subject: [PATCH 7/9] Revert "Update webview_flutter_test.dart. Now that the WebView doesn't internally specify a layoutDirection, it must have a Directionality widget as an ancestor to derive the direction from." This reverts commit 793902feea884cd6d3fa3e1735ce0c7988c0be98. # Conflicts: # packages/webview_flutter/test/webview_flutter_test.dart --- .../test/webview_flutter_test.dart | 352 +++++++----------- 1 file changed, 137 insertions(+), 215 deletions(-) diff --git a/packages/webview_flutter/test/webview_flutter_test.dart b/packages/webview_flutter/test/webview_flutter_test.dart index e82625090f75..4360484408b5 100644 --- a/packages/webview_flutter/test/webview_flutter_test.dart +++ b/packages/webview_flutter/test/webview_flutter_test.dart @@ -36,13 +36,12 @@ void main() { }); testWidgets('Create WebView', (WidgetTester tester) async { - await _pumpWebView(tester, const WebView()); + await tester.pumpWidget(const WebView()); }); testWidgets('Initial url', (WidgetTester tester) async { late WebViewController controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', onWebViewCreated: (WebViewController webViewController) { @@ -55,31 +54,26 @@ void main() { }); testWidgets('Javascript mode', (WidgetTester tester) async { - await _pumpWebView( - tester, - const WebView( - initialUrl: 'https://youtube.com', - javascriptMode: JavascriptMode.unrestricted, - )); + await tester.pumpWidget(const WebView( + initialUrl: 'https://youtube.com', + javascriptMode: JavascriptMode.unrestricted, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; expect(platformWebView.javascriptMode, JavascriptMode.unrestricted); - await _pumpWebView( - tester, - const WebView( - initialUrl: 'https://youtube.com', - javascriptMode: JavascriptMode.disabled, - )); + await tester.pumpWidget(const WebView( + initialUrl: 'https://youtube.com', + javascriptMode: JavascriptMode.disabled, + )); expect(platformWebView.javascriptMode, JavascriptMode.disabled); }); testWidgets('Load url', (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -96,8 +90,7 @@ void main() { testWidgets('Invalid urls', (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -119,8 +112,7 @@ void main() { testWidgets('Headers in loadUrl', (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -140,8 +132,7 @@ void main() { testWidgets("Can't go back before loading a page", (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -158,8 +149,7 @@ void main() { testWidgets("Clear Cache", (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -177,8 +167,7 @@ void main() { testWidgets("Can't go back with no history", (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -195,8 +184,7 @@ void main() { testWidgets('Can go back', (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -216,8 +204,7 @@ void main() { testWidgets("Can't go forward before loading a page", (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -234,8 +221,7 @@ void main() { testWidgets("Can't go forward with no history", (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -252,8 +238,7 @@ void main() { testWidgets('Can go forward', (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -273,8 +258,7 @@ void main() { testWidgets('Go back', (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', onWebViewCreated: (WebViewController webViewController) { @@ -298,8 +282,7 @@ void main() { testWidgets('Go forward', (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', onWebViewCreated: (WebViewController webViewController) { @@ -327,8 +310,7 @@ void main() { testWidgets('Current URL', (WidgetTester tester) async { WebViewController? controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( onWebViewCreated: (WebViewController webViewController) { controller = webViewController; @@ -353,8 +335,7 @@ void main() { testWidgets('Reload url', (WidgetTester tester) async { late WebViewController controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://flutter.io', onWebViewCreated: (WebViewController webViewController) { @@ -381,8 +362,7 @@ void main() { testWidgets('evaluate Javascript', (WidgetTester tester) async { late WebViewController controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://flutter.io', javascriptMode: JavascriptMode.unrestricted, @@ -399,8 +379,7 @@ void main() { testWidgets('evaluate Javascript with JavascriptMode disabled', (WidgetTester tester) async { late WebViewController controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://flutter.io', javascriptMode: JavascriptMode.disabled, @@ -416,8 +395,7 @@ void main() { }); testWidgets('Cookies can be cleared once', (WidgetTester tester) async { - await _pumpWebView( - tester, + await tester.pumpWidget( const WebView( initialUrl: 'https://flutter.io', ), @@ -429,8 +407,7 @@ void main() { testWidgets('Second cookie clear does not have cookies', (WidgetTester tester) async { - await _pumpWebView( - tester, + await tester.pumpWidget( const WebView( initialUrl: 'https://flutter.io', ), @@ -443,8 +420,7 @@ void main() { }); testWidgets('Initial JavaScript channels', (WidgetTester tester) async { - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -482,8 +458,7 @@ void main() { testWidgets('Unique JavaScript channel names are required', (WidgetTester tester) async { - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -498,8 +473,7 @@ void main() { }); testWidgets('JavaScript channels update', (WidgetTester tester) async { - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -511,8 +485,7 @@ void main() { ), ); - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -539,8 +512,7 @@ void main() { // updating it again with a subset of the previously registered channels fails as the // widget's cache of current channel wasn't properly updated when updating javascriptChannels to // null. - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -550,15 +522,13 @@ void main() { ), ); - await _pumpWebView( - tester, + await tester.pumpWidget( const WebView( initialUrl: 'https://youtube.com', ), ); - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -578,8 +548,7 @@ void main() { testWidgets('JavaScript channel messages', (WidgetTester tester) async { final List ttsMessagesReceived = []; final List alarmMessagesReceived = []; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', javascriptChannels: { @@ -613,14 +582,12 @@ void main() { testWidgets('onPageStarted is not null', (WidgetTester tester) async { String? returnedUrl; - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - onPageStarted: (String url) { - returnedUrl = url; - }, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + onPageStarted: (String url) { + returnedUrl = url; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -631,12 +598,10 @@ void main() { }); testWidgets('onPageStarted is null', (WidgetTester tester) async { - await _pumpWebView( - tester, - const WebView( - initialUrl: 'https://youtube.com', - onPageStarted: null, - )); + await tester.pumpWidget(const WebView( + initialUrl: 'https://youtube.com', + onPageStarted: null, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -649,21 +614,17 @@ void main() { testWidgets('onPageStarted changed', (WidgetTester tester) async { String? returnedUrl; - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - onPageStarted: (String url) {}, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + onPageStarted: (String url) {}, + )); - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - onPageStarted: (String url) { - returnedUrl = url; - }, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + onPageStarted: (String url) { + returnedUrl = url; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -678,14 +639,12 @@ void main() { testWidgets('onPageFinished is not null', (WidgetTester tester) async { String? returnedUrl; - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - onPageFinished: (String url) { - returnedUrl = url; - }, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + onPageFinished: (String url) { + returnedUrl = url; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -696,12 +655,10 @@ void main() { }); testWidgets('onPageFinished is null', (WidgetTester tester) async { - await _pumpWebView( - tester, - const WebView( - initialUrl: 'https://youtube.com', - onPageFinished: null, - )); + await tester.pumpWidget(const WebView( + initialUrl: 'https://youtube.com', + onPageFinished: null, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -714,21 +671,17 @@ void main() { testWidgets('onPageFinished changed', (WidgetTester tester) async { String? returnedUrl; - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - onPageFinished: (String url) {}, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + onPageFinished: (String url) {}, + )); - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - onPageFinished: (String url) { - returnedUrl = url; - }, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + onPageFinished: (String url) { + returnedUrl = url; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -743,14 +696,12 @@ void main() { testWidgets('onLoadingProgress is not null', (WidgetTester tester) async { int? loadingProgress; - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - onProgress: (int progress) { - loadingProgress = progress; - }, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + onProgress: (int progress) { + loadingProgress = progress; + }, + )); final FakePlatformWebView? platformWebView = fakePlatformViewsController.lastCreatedView; @@ -761,12 +712,10 @@ void main() { }); testWidgets('onLoadingProgress is null', (WidgetTester tester) async { - await _pumpWebView( - tester, - const WebView( - initialUrl: 'https://youtube.com', - onProgress: null, - )); + await tester.pumpWidget(const WebView( + initialUrl: 'https://youtube.com', + onProgress: null, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -778,21 +727,17 @@ void main() { testWidgets('onLoadingProgress changed', (WidgetTester tester) async { int? loadingProgress; - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - onProgress: (int progress) {}, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + onProgress: (int progress) {}, + )); - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - onProgress: (int progress) { - loadingProgress = progress; - }, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + onProgress: (int progress) { + loadingProgress = progress; + }, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -805,24 +750,20 @@ void main() { group('navigationDelegate', () { testWidgets('hasNavigationDelegate', (WidgetTester tester) async { - await _pumpWebView( - tester, - const WebView( - initialUrl: 'https://youtube.com', - )); + await tester.pumpWidget(const WebView( + initialUrl: 'https://youtube.com', + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; expect(platformWebView.hasNavigationDelegate, false); - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - navigationDelegate: (NavigationRequest r) => - NavigationDecision.navigate, - )); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + navigationDelegate: (NavigationRequest r) => + NavigationDecision.navigate, + )); expect(platformWebView.hasNavigationDelegate, true); }); @@ -830,17 +771,15 @@ void main() { testWidgets('Block navigation', (WidgetTester tester) async { final List navigationRequests = []; - await _pumpWebView( - tester, - WebView( - initialUrl: 'https://youtube.com', - navigationDelegate: (NavigationRequest request) { - navigationRequests.add(request); - // Only allow navigating to https://flutter.dev - return request.url == 'https://flutter.dev' - ? NavigationDecision.navigate - : NavigationDecision.prevent; - })); + await tester.pumpWidget(WebView( + initialUrl: 'https://youtube.com', + navigationDelegate: (NavigationRequest request) { + navigationRequests.add(request); + // Only allow navigating to https://flutter.dev + return request.url == 'https://flutter.dev' + ? NavigationDecision.navigate + : NavigationDecision.prevent; + })); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -863,11 +802,9 @@ void main() { group('debuggingEnabled', () { testWidgets('enable debugging', (WidgetTester tester) async { - await _pumpWebView( - tester, - const WebView( - debuggingEnabled: true, - )); + await tester.pumpWidget(const WebView( + debuggingEnabled: true, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -876,7 +813,7 @@ void main() { }); testWidgets('defaults to false', (WidgetTester tester) async { - await _pumpWebView(tester, const WebView()); + await tester.pumpWidget(const WebView()); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; @@ -886,26 +823,22 @@ void main() { testWidgets('can be changed', (WidgetTester tester) async { final GlobalKey key = GlobalKey(); - await _pumpWebView(tester, WebView(key: key)); + await tester.pumpWidget(WebView(key: key)); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; - await _pumpWebView( - tester, - WebView( - key: key, - debuggingEnabled: true, - )); + await tester.pumpWidget(WebView( + key: key, + debuggingEnabled: true, + )); expect(platformWebView.debuggingEnabled, true); - await _pumpWebView( - tester, - WebView( - key: key, - debuggingEnabled: false, - )); + await tester.pumpWidget(WebView( + key: key, + debuggingEnabled: false, + )); expect(platformWebView.debuggingEnabled, false); }); @@ -920,8 +853,7 @@ void main() { }); testWidgets('creation', (WidgetTester tester) async { - await _pumpWebView( - tester, + await tester.pumpWidget( const WebView( initialUrl: 'https://youtube.com', gestureNavigationEnabled: true, @@ -947,8 +879,7 @@ void main() { testWidgets('loadUrl', (WidgetTester tester) async { late WebViewController controller; - await _pumpWebView( - tester, + await tester.pumpWidget( WebView( initialUrl: 'https://youtube.com', onWebViewCreated: (WebViewController webViewController) { @@ -971,35 +902,26 @@ void main() { }); }); testWidgets('Set UserAgent', (WidgetTester tester) async { - await _pumpWebView( - tester, - const WebView( - initialUrl: 'https://youtube.com', - javascriptMode: JavascriptMode.unrestricted, - )); + await tester.pumpWidget(const WebView( + initialUrl: 'https://youtube.com', + javascriptMode: JavascriptMode.unrestricted, + )); final FakePlatformWebView platformWebView = fakePlatformViewsController.lastCreatedView!; expect(platformWebView.userAgent, isNull); - await _pumpWebView( - tester, - const WebView( - initialUrl: 'https://youtube.com', - javascriptMode: JavascriptMode.unrestricted, - userAgent: 'UA', - )); + await tester.pumpWidget(const WebView( + initialUrl: 'https://youtube.com', + javascriptMode: JavascriptMode.unrestricted, + userAgent: 'UA', + )); expect(platformWebView.userAgent, 'UA'); }); } -Future _pumpWebView(WidgetTester tester, WebView webView) { - return tester.pumpWidget( - Directionality(textDirection: TextDirection.rtl, child: webView)); -} - class FakePlatformWebView { FakePlatformWebView(int? id, Map params) { if (params.containsKey('initialUrl')) { From 7b1d8c946137f53e6ff0ecb1b1ae59e86b4ddf54 Mon Sep 17 00:00:00 2001 From: math1man Date: Wed, 31 Mar 2021 15:26:34 -0700 Subject: [PATCH 8/9] Use Directionality.maybeOf(BuildContext) to specify the correct layoutDirection without introducing a possibly-breaking change. --- packages/webview_flutter/lib/src/webview_android.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/webview_flutter/lib/src/webview_android.dart b/packages/webview_flutter/lib/src/webview_android.dart index 78bfce53b750..6b45a3dd29f7 100644 --- a/packages/webview_flutter/lib/src/webview_android.dart +++ b/packages/webview_flutter/lib/src/webview_android.dart @@ -46,6 +46,7 @@ class AndroidWebView implements WebViewPlatform { onWebViewPlatformCreated(MethodChannelWebViewPlatform( id, webViewPlatformCallbacksHandler)); }, + layoutDirection: Directionality.maybeOf(context) ?? TextDirection.rtl, gestureRecognizers: gestureRecognizers, creationParams: MethodChannelWebViewPlatform.creationParamsToMap(creationParams), From bf60a0671a0f6065be15f58e66e7a72df1d16bcc Mon Sep 17 00:00:00 2001 From: math1man Date: Wed, 31 Mar 2021 16:13:11 -0700 Subject: [PATCH 9/9] Switch two lines to better preserve code history --- packages/webview_flutter/lib/src/webview_android.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/lib/src/webview_android.dart b/packages/webview_flutter/lib/src/webview_android.dart index 6b45a3dd29f7..ca1440d69929 100644 --- a/packages/webview_flutter/lib/src/webview_android.dart +++ b/packages/webview_flutter/lib/src/webview_android.dart @@ -46,8 +46,8 @@ class AndroidWebView implements WebViewPlatform { onWebViewPlatformCreated(MethodChannelWebViewPlatform( id, webViewPlatformCallbacksHandler)); }, - layoutDirection: Directionality.maybeOf(context) ?? TextDirection.rtl, gestureRecognizers: gestureRecognizers, + layoutDirection: Directionality.maybeOf(context) ?? TextDirection.rtl, creationParams: MethodChannelWebViewPlatform.creationParamsToMap(creationParams), creationParamsCodec: const StandardMessageCodec(),