From 831bf961052b1386ea359f9263f5e02542976111 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 13 Jan 2022 14:11:16 -0500 Subject: [PATCH 1/3] [webview_flutter] Remove duplicate integration test This test is for a change that was entirely in Android Java code when it was written, so is testing behavior that is internal to the Android implementation, and a copy of this test already runs webview_flutter_android. Given that it's testing internal Android behavior, only that copy is needed. For unknown reasons, this copy seems to hang test runs, while the webview_flutter_android copy does not. Since it's a duplicate that we want to remove anyway, this simply removes it to fix the tree without meaningful loss of coverage. Part of https://github.com/flutter/flutter/issues/91004 --- .../webview_flutter_test.dart | 69 ------------------- .../webview_flutter_android/CHANGELOG.md | 4 ++ 2 files changed, 4 insertions(+), 69 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart index 4c2d1fb0f4ff..b4b67ee27d30 100644 --- a/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart @@ -1202,75 +1202,6 @@ void main() { }, skip: _skipDueToIssue86757, ); - - testWidgets( - 'JavaScript does not run in parent window', - (WidgetTester tester) async { - const String iframe = ''' - - - '''; - final String iframeTestBase64 = - base64Encode(const Utf8Encoder().convert(iframe)); - - final String openWindowTest = ''' - - - - XSS test - - - - - - '''; - final String openWindowTestBase64 = - base64Encode(const Utf8Encoder().convert(openWindowTest)); - final Completer controllerCompleter = - Completer(); - final Completer pageLoadCompleter = Completer(); - - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: WebView( - key: GlobalKey(), - onWebViewCreated: (WebViewController controller) { - controllerCompleter.complete(controller); - }, - javascriptMode: JavascriptMode.unrestricted, - initialUrl: - 'data:text/html;charset=utf-8;base64,$openWindowTestBase64', - onPageFinished: (String url) { - pageLoadCompleter.complete(); - }, - ), - ), - ); - - final WebViewController controller = await controllerCompleter.future; - await pageLoadCompleter.future; - - expect(controller.runJavascriptReturningResult('iframeLoaded'), - completion('true')); - expect( - controller.runJavascriptReturningResult( - 'document.querySelector("p") && document.querySelector("p").textContent'), - completion('null'), - ); - }, - skip: !Platform.isAndroid, - ); } // JavaScript booleans evaluate to different string values on Android and iOS. diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 818a13439c95..bb9db80a0691 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Removes a duplicate Android-specific integration test. + ## 2.8.2 * Adds the `WebSettings.setAllowFileAccess()` method and ensure that file access is allowed when the `WebViewAndroidWidget.loadFile()` method is executed. From c6c923e6a3cf4395882605834c5bffe1edec7634 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 13 Jan 2022 14:26:39 -0500 Subject: [PATCH 2/3] CHANGELOG in correct package --- packages/webview_flutter/webview_flutter/CHANGELOG.md | 4 ++++ packages/webview_flutter/webview_flutter_android/CHANGELOG.md | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md index aa117c9d72a8..721a999f3ca4 100644 --- a/packages/webview_flutter/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Removes a duplicate Android-specific integration test. + ## 3.0.0 * **BREAKING CHANGE**: On Android, hybrid composition (SurfaceAndroidWebView) diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index bb9db80a0691..818a13439c95 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,7 +1,3 @@ -## NEXT - -* Removes a duplicate Android-specific integration test. - ## 2.8.2 * Adds the `WebSettings.setAllowFileAccess()` method and ensure that file access is allowed when the `WebViewAndroidWidget.loadFile()` method is executed. From 1adbb9007644a247730fe796e4e06bba3fcdb781 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 13 Jan 2022 14:56:00 -0500 Subject: [PATCH 3/3] Fix a race condition in integration test --- packages/webview_flutter/webview_flutter/CHANGELOG.md | 1 + .../example/integration_test/webview_flutter_test.dart | 4 ++-- .../webview_flutter/webview_flutter_android/CHANGELOG.md | 4 ++++ .../example/integration_test/webview_flutter_test.dart | 2 +- .../webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 6 +++++- .../example/integration_test/webview_flutter_test.dart | 4 ++-- 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md index 721a999f3ca4..662070437cf7 100644 --- a/packages/webview_flutter/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md @@ -1,6 +1,7 @@ ## NEXT * Removes a duplicate Android-specific integration test. +* Fixes an integration test race condition. ## 3.0.0 diff --git a/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart index b4b67ee27d30..7588dc8e02fb 100644 --- a/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter/example/integration_test/webview_flutter_test.dart @@ -480,7 +480,7 @@ void main() { onMessageReceived: (JavascriptMessage message) { final double currentTime = double.parse(message.message); // Let it play for at least 1 second to make sure the related video's properties are set. - if (currentTime > 1) { + if (currentTime > 1 && !videoPlaying.isCompleted) { videoPlaying.complete(null); } }, @@ -532,7 +532,7 @@ void main() { onMessageReceived: (JavascriptMessage message) { final double currentTime = double.parse(message.message); // Let it play for at least 1 second to make sure the related video's properties are set. - if (currentTime > 1) { + if (currentTime > 1 && !videoPlaying.isCompleted) { videoPlaying.complete(null); } }, diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md index 818a13439c95..145bc8fcc068 100644 --- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Fixes an integration test race condition. + ## 2.8.2 * Adds the `WebSettings.setAllowFileAccess()` method and ensure that file access is allowed when the `WebViewAndroidWidget.loadFile()` method is executed. diff --git a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart index 91fc860dffae..544089f1a7ab 100644 --- a/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart @@ -484,7 +484,7 @@ void main() { onMessageReceived: (JavascriptMessage message) { final double currentTime = double.parse(message.message); // Let it play for at least 1 second to make sure the related video's properties are set. - if (currentTime > 1) { + if (currentTime > 1 && !videoPlaying.isCompleted) { videoPlaying.complete(null); } }, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index db8338df5565..c3dd8726273e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,6 +1,10 @@ +## NEXT + +* Fixes an integration test race condition. + ## 2.7.1 -* Fixes header import for cookie manager to be relative only. +* Fixes header import for cookie manager to be relative only. ## 2.7.0 diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart index 1e4adb9f7de0..5824d5d32d0b 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart @@ -466,7 +466,7 @@ void main() { onMessageReceived: (JavascriptMessage message) { final double currentTime = double.parse(message.message); // Let it play for at least 1 second to make sure the related video's properties are set. - if (currentTime > 1) { + if (currentTime > 1 && !videoPlaying.isCompleted) { videoPlaying.complete(null); } }, @@ -517,7 +517,7 @@ void main() { onMessageReceived: (JavascriptMessage message) { final double currentTime = double.parse(message.message); // Let it play for at least 1 second to make sure the related video's properties are set. - if (currentTime > 1) { + if (currentTime > 1 && !videoPlaying.isCompleted) { videoPlaying.complete(null); } },