[webview_flutter] Remove duplicate integration test (#4666)
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.
Also fixes a race condition in an integration test, where a future
could be completed more than once.
Part of https://github.com/flutter/flutter/issues/91004
diff --git a/packages/webview_flutter/webview_flutter/CHANGELOG.md b/packages/webview_flutter/webview_flutter/CHANGELOG.md
index aa117c9..6620704 100644
--- a/packages/webview_flutter/webview_flutter/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter/CHANGELOG.md
@@ -1,3 +1,8 @@
+## NEXT
+
+* Removes a duplicate Android-specific integration test.
+* Fixes an integration test race condition.
+
## 3.0.0
* **BREAKING CHANGE**: On Android, hybrid composition (SurfaceAndroidWebView)
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 4c2d1fb..7588dc8 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 @@
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 @@
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);
}
},
@@ -1202,75 +1202,6 @@
},
skip: _skipDueToIssue86757,
);
-
- testWidgets(
- 'JavaScript does not run in parent window',
- (WidgetTester tester) async {
- const String iframe = '''
- <!DOCTYPE html>
- <script>
- window.onload = () => {
- window.open(`javascript:
- var elem = document.createElement("p");
- elem.innerHTML = "<b>Executed JS in parent origin: " + window.location.origin + "</b>";
- document.body.append(elem);
- `);
- };
- </script>
- ''';
- final String iframeTestBase64 =
- base64Encode(const Utf8Encoder().convert(iframe));
-
- final String openWindowTest = '''
- <!DOCTYPE html>
- <html>
- <head>
- <title>XSS test</title>
- </head>
- <body>
- <iframe
- onload="window.iframeLoaded = true;"
- src="data:text/html;charset=utf-8;base64,$iframeTestBase64"></iframe>
- </body>
- </html>
- ''';
- final String openWindowTestBase64 =
- base64Encode(const Utf8Encoder().convert(openWindowTest));
- final Completer<WebViewController> controllerCompleter =
- Completer<WebViewController>();
- final Completer<void> pageLoadCompleter = Completer<void>();
-
- 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 818a134..145bc8f 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 91fc860..544089f 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 @@
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 db8338d..c3dd872 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 1e4adb9..5824d5d 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 @@
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 @@
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);
}
},