[webview_flutter_wkwebview] Repeatedly pump WebViews until one is garbage collected (#4662)

This should improve the chance that a `WKWebView` is garbage collected by repeatedly pumping `WebViewWidgets`.
This commit is contained in:
Maurice Parrish
2023-08-07 22:35:16 -04:00
committed by GitHub
parent 0042da7e63
commit 269118d228

View File

@ -69,18 +69,22 @@ Future<void> main() async {
testWidgets(
'WKWebView is released by garbage collection',
(WidgetTester tester) async {
final Completer<void> webViewGCCompleter = Completer<void>();
bool aWebViewHasBeenGarbageCollected = false;
late final InstanceManager instanceManager;
instanceManager =
InstanceManager(onWeakReferenceRemoved: (int identifier) {
if (!aWebViewHasBeenGarbageCollected) {
final Copyable instance =
instanceManager.getInstanceWithWeakReference(identifier)!;
if (instance is WKWebView && !webViewGCCompleter.isCompleted) {
webViewGCCompleter.complete();
if (instance is WKWebView) {
aWebViewHasBeenGarbageCollected = true;
}
}
});
// Wait for any WebView to be garbage collected.
while (!aWebViewHasBeenGarbageCollected) {
await tester.pumpWidget(
Builder(
builder: (BuildContext context) {
@ -106,10 +110,9 @@ Future<void> main() async {
.watchPerformance(() async {
await tester.pumpAndSettle();
});
await expectLater(webViewGCCompleter.future, completes);
}
},
timeout: const Timeout(Duration(seconds: 10)),
timeout: const Timeout(Duration(seconds: 30)),
);
testWidgets('loadRequest', (WidgetTester tester) async {