Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

[webview_flutter_wkwebview] Fix potential timeouts in the integration tests #6869

Closed
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -599,8 +599,7 @@ Future<void> main() async {
'${base64Encode(const Utf8Encoder().convert(blankPage))}';

testWidgets('can allow requests', (WidgetTester tester) async {
final StreamController<String> pageLoads =
StreamController<String>.broadcast();
Completer<void> pageLoaded = Completer<void>();

final PlatformWebViewController controller = PlatformWebViewController(
WebKitWebViewControllerCreationParams(),
Expand All @@ -610,7 +609,7 @@ Future<void> main() async {
WebKitNavigationDelegate(
const WebKitNavigationDelegateCreationParams(),
)
..setOnPageFinished((String url) => pageLoads.add(url))
..setOnPageFinished((_) => pageLoaded.complete())
..setOnNavigationRequest((NavigationRequest navigationRequest) {
return (navigationRequest.url.contains('youtube.com'))
? NavigationDecision.prevent
Expand All @@ -621,10 +620,12 @@ Future<void> main() async {
LoadRequestParams(uri: Uri.parse(blankPageEncoded)),
);

await pageLoads.stream.first; // Wait for initial page load.
await pageLoaded.future; // Wait for initial page load.

pageLoaded = Completer<void>();
await controller.runJavaScript('location.href = "$secondaryUrl"');
await pageLoaded.future; // Wait for the next page load.

await pageLoads.stream.first; // Wait for the next page load.
final String? currentUrl = await controller.currentUrl();
expect(currentUrl, secondaryUrl);
});
Expand Down Expand Up @@ -733,8 +734,7 @@ Future<void> main() async {
);

testWidgets('can block requests', (WidgetTester tester) async {
final StreamController<String> pageLoads =
StreamController<String>.broadcast();
Completer<void> pageLoaded = Completer<void>();

final PlatformWebViewController controller = PlatformWebViewController(
WebKitWebViewControllerCreationParams(),
Expand All @@ -744,7 +744,7 @@ Future<void> main() async {
WebKitNavigationDelegate(
const WebKitNavigationDelegateCreationParams(),
)
..setOnPageFinished((String url) => pageLoads.add(url))
..setOnPageFinished((_) => pageLoaded.complete())
..setOnNavigationRequest((NavigationRequest navigationRequest) {
return (navigationRequest.url.contains('youtube.com'))
? NavigationDecision.prevent
Expand All @@ -753,22 +753,24 @@ Future<void> main() async {
)
..loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));

await pageLoads.stream.first; // Wait for initial page load.
await pageLoaded.future; // Wait for initial page load.

pageLoaded = Completer<void>();
await controller
.runJavaScript('location.href = "https://www.youtube.com/"');

// There should never be any second page load, since our new URL is
// blocked. Still wait for a potential page change for some time in order
// to give the test a chance to fail.
await pageLoads.stream.first
await pageLoaded.future
.timeout(const Duration(milliseconds: 500), onTimeout: () => '');

final String? currentUrl = await controller.currentUrl();
expect(currentUrl, isNot(contains('youtube.com')));
});

testWidgets('supports asynchronous decisions', (WidgetTester tester) async {
final StreamController<String> pageLoads =
StreamController<String>.broadcast();
Completer<void> pageLoaded = Completer<void>();

final PlatformWebViewController controller = PlatformWebViewController(
WebKitWebViewControllerCreationParams(),
Expand All @@ -778,7 +780,7 @@ Future<void> main() async {
WebKitNavigationDelegate(
const WebKitNavigationDelegateCreationParams(),
)
..setOnPageFinished((String url) => pageLoads.add(url))
..setOnPageFinished((_) => pageLoaded.complete())
..setOnNavigationRequest(
(NavigationRequest navigationRequest) async {
NavigationDecision decision = NavigationDecision.prevent;
Expand All @@ -790,10 +792,12 @@ Future<void> main() async {
)
..loadRequest(LoadRequestParams(uri: Uri.parse(blankPageEncoded)));

await pageLoads.stream.first; // Wait for initial page load.
await pageLoaded.future; // Wait for initial page load.

pageLoaded = Completer<void>();
await controller.runJavaScript('location.href = "$secondaryUrl"');
await pageLoaded.future; // Wait for second page to load.

await pageLoads.stream.first; // Wait for second page to load.
final String? currentUrl = await controller.currentUrl();
expect(currentUrl, secondaryUrl);
});
Expand Down