From 60c5f7ba713950ebda835ce557ada179a20281e2 Mon Sep 17 00:00:00 2001 From: David Iglesias Teixeira Date: Fri, 12 Jul 2024 11:12:40 -0700 Subject: [PATCH 1/9] Rewrite webview_web integration tests so they do something. --- .../legacy/webview_flutter_test.dart | 85 ------------------- .../legacy_webview_flutter_test.dart | 61 +++++++++++++ .../webview_flutter_test.dart | 61 ++++--------- .../integration_test/wrapped_webview.dart | 38 +++++++++ .../webview_flutter_web/example/pubspec.yaml | 1 + 5 files changed, 118 insertions(+), 128 deletions(-) delete mode 100644 packages/webview_flutter/webview_flutter_web/example/integration_test/legacy/webview_flutter_test.dart create mode 100644 packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test.dart create mode 100644 packages/webview_flutter/webview_flutter_web/example/integration_test/wrapped_webview.dart diff --git a/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy/webview_flutter_test.dart deleted file mode 100644 index affd7bbda22..00000000000 --- a/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy/webview_flutter_test.dart +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:async'; -import 'dart:html' as html; -import 'dart:io'; - -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:integration_test/integration_test.dart'; -import 'package:webview_flutter_web_example/legacy/web_view.dart'; - -void main() async { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - - const String primaryPage = 'first.txt'; - const String secondaryPage = 'second.txt'; - final HttpServer server = - await HttpServer.bind(InternetAddress.loopbackIPv4, 0); - unawaited(server.forEach((HttpRequest request) { - if (request.uri.path == '/$primaryPage') { - request.response.writeln('Hello, world.'); - } - if (request.uri.path == '/$secondaryPage') { - request.response.writeln('Another page.'); - } else { - fail('unexpected request: ${request.method} ${request.uri}'); - } - request.response.close(); - })); - final String prefixUrl = 'http://localhost:${server.port}'; - final String primaryUrl = '$prefixUrl/$primaryPage'; - final String secondaryUrl = '$prefixUrl/$secondaryPage'; - - testWidgets('initialUrl', (WidgetTester tester) async { - final Completer controllerCompleter = - Completer(); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: WebView( - key: GlobalKey(), - initialUrl: primaryUrl, - onWebViewCreated: (WebViewController controller) { - controllerCompleter.complete(controller); - }, - ), - ), - ); - await controllerCompleter.future; - - // Assert an iframe has been rendered to the DOM with the correct src attribute. - final html.IFrameElement? element = - html.document.querySelector('iframe') as html.IFrameElement?; - expect(element, isNotNull); - expect(element!.src, primaryUrl); - }); - - testWidgets('loadUrl', (WidgetTester tester) async { - final Completer controllerCompleter = - Completer(); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: WebView( - key: GlobalKey(), - initialUrl: primaryUrl, - onWebViewCreated: (WebViewController controller) { - controllerCompleter.complete(controller); - }, - ), - ), - ); - final WebViewController controller = await controllerCompleter.future; - await controller.loadUrl(secondaryUrl); - - // Assert an iframe has been rendered to the DOM with the correct src attribute. - final html.IFrameElement? element = - html.document.querySelector('iframe') as html.IFrameElement?; - expect(element, isNotNull); - expect(element!.src, secondaryUrl); - }); -} diff --git a/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test.dart new file mode 100644 index 00000000000..e8edbef6a47 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test.dart @@ -0,0 +1,61 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; +import 'package:web/web.dart' as web; +import 'package:webview_flutter_web_example/legacy/web_view.dart'; + +import 'wrapped_webview.dart'; + +void main() async { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + const String someUrl = 'http://example.com/'; + const String fakeUrl = 'https://example.com/'; + + testWidgets('initialUrl', (WidgetTester tester) async { + final Completer controllerCompleter = + Completer(); + await tester.pumpWidget( + wrappedLegacyWebView(fakeUrl, (WebViewController controller) { + controllerCompleter.complete(controller); + }) + ); + await controllerCompleter.future; + // Pump 2 frames so the framework injects the platform view into the DOM. + await tester.pump(); + await tester.pump(); + + // Assert an iframe has been rendered to the DOM with the correct src attribute. + final web.HTMLIFrameElement? element = + web.document.querySelector('iframe') as web.HTMLIFrameElement?; + expect(element, isNotNull); + expect(element!.src, fakeUrl); + }); + + testWidgets('loadUrl', (WidgetTester tester) async { + final Completer controllerCompleter = + Completer(); + await tester.pumpWidget( + wrappedLegacyWebView(someUrl, (WebViewController controller) { + controllerCompleter.complete(controller); + }) + ); + + final WebViewController controller = await controllerCompleter.future; + await controller.loadUrl(fakeUrl); + // Pump 2 frames so the framework injects the platform view into the DOM. + await tester.pump(); + await tester.pump(); + + // Assert an iframe has been rendered to the DOM with the correct src attribute. + final web.HTMLIFrameElement? element = + web.document.querySelector('iframe') as web.HTMLIFrameElement?; + expect(element, isNotNull); + expect(element!.src, fakeUrl); + }); +} diff --git a/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart index 734ace71fa3..2f937ea7699 100644 --- a/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart @@ -2,59 +2,38 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:async'; -import 'dart:html' as html; -import 'dart:io'; - -// FIX (dit): Remove these integration tests, or make them run. They currently never fail. -// (They won't run because they use `dart:io`. If you remove all `dart:io` bits from -// this file, they start failing with `fail()`, for example.) - -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; +import 'package:web/web.dart' as web; import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; import 'package:webview_flutter_web/webview_flutter_web.dart'; +import 'wrapped_webview.dart'; + Future main() async { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - final HttpServer server = await HttpServer.bind(InternetAddress.anyIPv4, 0); - unawaited(server.forEach((HttpRequest request) { - if (request.uri.path == '/hello.txt') { - request.response.writeln('Hello, world.'); - } else { - fail('unexpected request: ${request.method} ${request.uri}'); - } - request.response.close(); - })); - final String prefixUrl = 'http://${server.address.address}:${server.port}'; - final String primaryUrl = '$prefixUrl/hello.txt'; + const String fakeUrl = 'https://example.com/'; testWidgets('loadRequest', (WidgetTester tester) async { final WebWebViewController controller = WebWebViewController(const PlatformWebViewControllerCreationParams()); await controller.loadRequest( - LoadRequestParams(uri: Uri.parse(primaryUrl)), + LoadRequestParams(uri: Uri.parse(fakeUrl)), ); await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: Builder(builder: (BuildContext context) { - return WebWebViewWidget( - PlatformWebViewWidgetCreationParams(controller: controller), - ).build(context); - }), - ), + wrappedWebView(controller), ); + // Pump 2 frames so the framework injects the platform view into the DOM. + await tester.pump(); + await tester.pump(); // Assert an iframe has been rendered to the DOM with the correct src attribute. - final html.IFrameElement? element = - html.document.querySelector('iframe') as html.IFrameElement?; + final web.HTMLIFrameElement? element = + web.document.querySelector('iframe') as web.HTMLIFrameElement?; expect(element, isNotNull); - expect(element!.src, primaryUrl); + expect(element!.src, fakeUrl); }); testWidgets('loadHtmlString', (WidgetTester tester) async { @@ -65,19 +44,15 @@ Future main() async { ); await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: Builder(builder: (BuildContext context) { - return WebWebViewWidget( - PlatformWebViewWidgetCreationParams(controller: controller), - ).build(context); - }), - ), + wrappedWebView(controller), ); + // Pump 2 frames so the framework injects the platform view into the DOM. + await tester.pump(); + await tester.pump(); // Assert an iframe has been rendered to the DOM with the correct src attribute. - final html.IFrameElement? element = - html.document.querySelector('iframe') as html.IFrameElement?; + final web.HTMLIFrameElement? element = + web.document.querySelector('iframe') as web.HTMLIFrameElement?; expect(element, isNotNull); expect( element!.src, diff --git a/packages/webview_flutter/webview_flutter_web/example/integration_test/wrapped_webview.dart b/packages/webview_flutter/webview_flutter_web/example/integration_test/wrapped_webview.dart new file mode 100644 index 00000000000..d3e707f6d13 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_web/example/integration_test/wrapped_webview.dart @@ -0,0 +1,38 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart'; +import 'package:webview_flutter_web/webview_flutter_web.dart'; +import 'package:webview_flutter_web_example/legacy/web_view.dart'; + +/// Returns the webview widget for a given [controller], wrapped so it works +/// in our integration tests. +Widget wrappedWebView(WebWebViewController controller) { + return MaterialApp( + home: Scaffold( + body: Builder( + builder: (BuildContext ctx) => PlatformWebViewWidget( + PlatformWebViewWidgetCreationParams(controller: controller), + ).build(ctx), + ), + ), + ); +} + +/// Returns a (legacy) webview widget for an [url], that calls [onCreated] when +/// done, wrapped so it works in our integration tests. +Widget wrappedLegacyWebView(String url, WebViewCreatedCallback onCreated) { + return MaterialApp( + home: Scaffold( + body: Builder( + builder: (BuildContext ctx) => WebView( + key: GlobalKey(), + initialUrl: url, + onWebViewCreated: onCreated, + ), + ), + ), + ); +} diff --git a/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml b/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml index 23754739bf4..a71a53777c5 100644 --- a/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_web/example/pubspec.yaml @@ -11,6 +11,7 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter + web: ^0.5.0 webview_flutter_platform_interface: ^2.0.0 webview_flutter_web: # When depending on this package from a real application you should use: From 40d9310b98c6e3f1f169e5bfe3dcf2fec975ba91 Mon Sep 17 00:00:00 2001 From: David Iglesias Teixeira Date: Fri, 12 Jul 2024 17:02:50 -0700 Subject: [PATCH 2/9] Rename legacy integration test to prevent it from running in CI. --- ...=> legacy_webview_flutter_test_manual.dart} | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) rename packages/webview_flutter/webview_flutter_web/example/integration_test/{legacy_webview_flutter_test.dart => legacy_webview_flutter_test_manual.dart} (84%) diff --git a/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test_manual.dart similarity index 84% rename from packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test.dart rename to packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test_manual.dart index e8edbef6a47..173de6bd6dc 100644 --- a/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_web/example/integration_test/legacy_webview_flutter_test_manual.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// This test flakes badly in headless mode! + import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; @@ -14,21 +16,21 @@ import 'wrapped_webview.dart'; void main() async { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - const String someUrl = 'http://example.com/'; - const String fakeUrl = 'https://example.com/'; + const String someUrl = 'about:blank'; + const String fakeUrl = 'https://www.flutter.dev/'; testWidgets('initialUrl', (WidgetTester tester) async { final Completer controllerCompleter = Completer(); await tester.pumpWidget( wrappedLegacyWebView(fakeUrl, (WebViewController controller) { - controllerCompleter.complete(controller); - }) + controllerCompleter.complete(controller); + }), ); await controllerCompleter.future; // Pump 2 frames so the framework injects the platform view into the DOM. await tester.pump(); - await tester.pump(); + await tester.pump(const Duration(seconds: 5)); // Assert an iframe has been rendered to the DOM with the correct src attribute. final web.HTMLIFrameElement? element = @@ -42,15 +44,15 @@ void main() async { Completer(); await tester.pumpWidget( wrappedLegacyWebView(someUrl, (WebViewController controller) { - controllerCompleter.complete(controller); - }) + controllerCompleter.complete(controller); + }), ); final WebViewController controller = await controllerCompleter.future; await controller.loadUrl(fakeUrl); // Pump 2 frames so the framework injects the platform view into the DOM. await tester.pump(); - await tester.pump(); + await tester.pump(const Duration(seconds: 5)); // Assert an iframe has been rendered to the DOM with the correct src attribute. final web.HTMLIFrameElement? element = From d5d547c76b99f5e44199e1fb664df23f431cca6b Mon Sep 17 00:00:00 2001 From: David Iglesias Teixeira Date: Fri, 12 Jul 2024 17:03:22 -0700 Subject: [PATCH 3/9] Fix legacy webview to not use the deprecated style of accessing the DOM. --- .../lib/src/webview_flutter_web_legacy.dart | 36 ++++++------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_web/lib/src/webview_flutter_web_legacy.dart b/packages/webview_flutter/webview_flutter_web/lib/src/webview_flutter_web_legacy.dart index 4820743a08d..da4bd8f57e0 100644 --- a/packages/webview_flutter/webview_flutter_web/lib/src/webview_flutter_web_legacy.dart +++ b/packages/webview_flutter/webview_flutter_web/lib/src/webview_flutter_web_legacy.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'dart:convert'; import 'dart:js_interop'; -import 'dart:ui_web' as ui_web; import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; @@ -21,17 +20,6 @@ import 'http_request_factory.dart'; /// /// This is used as the default implementation for [WebView.platform] on web. class WebWebViewPlatform implements WebViewPlatform { - /// Constructs a new instance of [WebWebViewPlatform]. - WebWebViewPlatform() { - ui_web.platformViewRegistry.registerViewFactory( - 'webview-iframe', - (int viewId) => web.HTMLIFrameElement() - ..id = 'webview-$viewId' - ..width = '100%' - ..height = '100%' - ..style.border = 'none'); - } - @override Widget build({ required BuildContext context, @@ -41,23 +29,21 @@ class WebWebViewPlatform implements WebViewPlatform { WebViewPlatformCreatedCallback? onWebViewPlatformCreated, Set>? gestureRecognizers, }) { - return HtmlElementView( - viewType: 'webview-iframe', - onPlatformViewCreated: (int viewId) { - if (onWebViewPlatformCreated == null) { - return; - } - final web.HTMLIFrameElement element = web.document - .getElementById('webview-$viewId')! as web.HTMLIFrameElement; - + return HtmlElementView.fromTagName( + tagName: 'iframe', + onElementCreated: (Object iFrame) { + iFrame as web.HTMLIFrameElement; + iFrame.style.border = 'none'; final String? initialUrl = creationParams.initialUrl; if (initialUrl != null) { // ignore: unsafe_html - element.src = initialUrl; + iFrame.src = initialUrl; + } + if (onWebViewPlatformCreated != null) { + onWebViewPlatformCreated( + WebWebViewPlatformController(iFrame) + ); } - onWebViewPlatformCreated(WebWebViewPlatformController( - element, - )); }, ); } From cc561900c215407fda657988c8036b88a2e0f808 Mon Sep 17 00:00:00 2001 From: David Iglesias Teixeira Date: Fri, 12 Jul 2024 17:03:55 -0700 Subject: [PATCH 4/9] Fix test so it can run in CI. --- .../webview_flutter_test.dart | 24 +++++++----- .../integration_test/wrapped_webview.dart | 37 +++++++++++++------ 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart index 2f937ea7699..0b4ee93dd31 100644 --- a/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart @@ -13,11 +13,12 @@ import 'wrapped_webview.dart'; Future main() async { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - const String fakeUrl = 'https://example.com/'; + const String fakeUrl = 'https://www.flutter.dev/'; testWidgets('loadRequest', (WidgetTester tester) async { - final WebWebViewController controller = - WebWebViewController(const PlatformWebViewControllerCreationParams()); + final WebWebViewController controller = WebWebViewController( + const PlatformWebViewControllerCreationParams(), + ); await controller.loadRequest( LoadRequestParams(uri: Uri.parse(fakeUrl)), ); @@ -26,10 +27,12 @@ Future main() async { wrappedWebView(controller), ); // Pump 2 frames so the framework injects the platform view into the DOM. + // The duration of the second pump is set so the browser has some idle time + // to actually show the contents of the iFrame. await tester.pump(); - await tester.pump(); + await tester.pump(const Duration(seconds: 5)); - // Assert an iframe has been rendered to the DOM with the correct src attribute. + // Assert an iFrame has been rendered to the DOM with the correct src attribute. final web.HTMLIFrameElement? element = web.document.querySelector('iframe') as web.HTMLIFrameElement?; expect(element, isNotNull); @@ -37,8 +40,9 @@ Future main() async { }); testWidgets('loadHtmlString', (WidgetTester tester) async { - final WebWebViewController controller = - WebWebViewController(const PlatformWebViewControllerCreationParams()); + final WebWebViewController controller = WebWebViewController( + const PlatformWebViewControllerCreationParams(), + ); await controller.loadHtmlString( 'data:text/html;charset=utf-8,${Uri.encodeFull('test html')}', ); @@ -47,10 +51,12 @@ Future main() async { wrappedWebView(controller), ); // Pump 2 frames so the framework injects the platform view into the DOM. + // The duration of the second pump is set so the browser has some idle time + // to actually show the contents of the iFrame. await tester.pump(); - await tester.pump(); + await tester.pump(const Duration(seconds: 5)); - // Assert an iframe has been rendered to the DOM with the correct src attribute. + // Assert an iFrame has been rendered to the DOM with the correct src attribute. final web.HTMLIFrameElement? element = web.document.querySelector('iframe') as web.HTMLIFrameElement?; expect(element, isNotNull); diff --git a/packages/webview_flutter/webview_flutter_web/example/integration_test/wrapped_webview.dart b/packages/webview_flutter/webview_flutter_web/example/integration_test/wrapped_webview.dart index d3e707f6d13..0dc10cbf5c2 100644 --- a/packages/webview_flutter/webview_flutter_web/example/integration_test/wrapped_webview.dart +++ b/packages/webview_flutter/webview_flutter_web/example/integration_test/wrapped_webview.dart @@ -10,13 +10,11 @@ import 'package:webview_flutter_web_example/legacy/web_view.dart'; /// Returns the webview widget for a given [controller], wrapped so it works /// in our integration tests. Widget wrappedWebView(WebWebViewController controller) { - return MaterialApp( - home: Scaffold( - body: Builder( - builder: (BuildContext ctx) => PlatformWebViewWidget( - PlatformWebViewWidgetCreationParams(controller: controller), - ).build(ctx), - ), + return _wrapped( + Builder( + builder: (BuildContext ctx) => PlatformWebViewWidget( + PlatformWebViewWidgetCreationParams(controller: controller), + ).build(ctx), ), ); } @@ -24,13 +22,28 @@ Widget wrappedWebView(WebWebViewController controller) { /// Returns a (legacy) webview widget for an [url], that calls [onCreated] when /// done, wrapped so it works in our integration tests. Widget wrappedLegacyWebView(String url, WebViewCreatedCallback onCreated) { + return _wrapped( + WebView( + initialUrl: url, + onWebViewCreated: onCreated, + ), + ); +} + +// Wraps a [child] widget in the scaffolding this test needs. +Widget _wrapped(Widget child) { return MaterialApp( home: Scaffold( - body: Builder( - builder: (BuildContext ctx) => WebView( - key: GlobalKey(), - initialUrl: url, - onWebViewCreated: onCreated, + body: Center( + child: Container( + decoration: BoxDecoration( + border: Border.all( + color: Colors.red, + ), + ), + width: 320, + height: 200, + child: child, ), ), ), From 3f79c7cd9bd4f19ddc17d6ddea6dde8490f66256 Mon Sep 17 00:00:00 2001 From: David Iglesias Teixeira Date: Fri, 12 Jul 2024 17:07:02 -0700 Subject: [PATCH 5/9] Version + CHANGELOG --- packages/webview_flutter/webview_flutter_web/CHANGELOG.md | 4 ++++ packages/webview_flutter/webview_flutter_web/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_web/CHANGELOG.md b/packages/webview_flutter/webview_flutter_web/CHANGELOG.md index 6bdb9145ff9..e56b9836263 100644 --- a/packages/webview_flutter/webview_flutter_web/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.3+1 + +* Fixes DOM timing issue with Legacy Widget build method. + ## 0.2.3 * Migrates to `package:web` diff --git a/packages/webview_flutter/webview_flutter_web/pubspec.yaml b/packages/webview_flutter/webview_flutter_web/pubspec.yaml index c10c125030e..38bd675fcf1 100644 --- a/packages/webview_flutter/webview_flutter_web/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_web/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_web description: A Flutter plugin that provides a WebView widget on web. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 0.2.3 +version: 0.2.3+1 environment: sdk: ^3.3.0 From 0ddc7b3e0acd4fecf3993c1d6f1ea49b02040a2f Mon Sep 17 00:00:00 2001 From: David Iglesias Teixeira Date: Fri, 12 Jul 2024 17:29:31 -0700 Subject: [PATCH 6/9] Fix format. --- .../webview_flutter_web/lib/src/webview_flutter_web_legacy.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_web/lib/src/webview_flutter_web_legacy.dart b/packages/webview_flutter/webview_flutter_web/lib/src/webview_flutter_web_legacy.dart index da4bd8f57e0..460323e4e26 100644 --- a/packages/webview_flutter/webview_flutter_web/lib/src/webview_flutter_web_legacy.dart +++ b/packages/webview_flutter/webview_flutter_web/lib/src/webview_flutter_web_legacy.dart @@ -41,7 +41,7 @@ class WebWebViewPlatform implements WebViewPlatform { } if (onWebViewPlatformCreated != null) { onWebViewPlatformCreated( - WebWebViewPlatformController(iFrame) + WebWebViewPlatformController(iFrame), ); } }, From e25c3e61542590b369766da583f8a1d16abce512 Mon Sep 17 00:00:00 2001 From: David Iglesias Teixeira Date: Fri, 12 Jul 2024 19:59:18 -0700 Subject: [PATCH 7/9] Try to not hit the network at all. --- .../example/integration_test/webview_flutter_test.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart index 0b4ee93dd31..56fd4eee622 100644 --- a/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_web/example/integration_test/webview_flutter_test.dart @@ -13,7 +13,7 @@ import 'wrapped_webview.dart'; Future main() async { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - const String fakeUrl = 'https://www.flutter.dev/'; + const String fakeUrl = 'about:blank'; testWidgets('loadRequest', (WidgetTester tester) async { final WebWebViewController controller = WebWebViewController( @@ -30,7 +30,7 @@ Future main() async { // The duration of the second pump is set so the browser has some idle time // to actually show the contents of the iFrame. await tester.pump(); - await tester.pump(const Duration(seconds: 5)); + await tester.pump(const Duration(seconds: 1)); // Assert an iFrame has been rendered to the DOM with the correct src attribute. final web.HTMLIFrameElement? element = @@ -54,7 +54,7 @@ Future main() async { // The duration of the second pump is set so the browser has some idle time // to actually show the contents of the iFrame. await tester.pump(); - await tester.pump(const Duration(seconds: 5)); + await tester.pump(const Duration(seconds: 1)); // Assert an iFrame has been rendered to the DOM with the correct src attribute. final web.HTMLIFrameElement? element = From 76788d344d11471b4b82db7ce596ab234645a577 Mon Sep 17 00:00:00 2001 From: David Iglesias Teixeira Date: Mon, 15 Jul 2024 09:39:10 -0700 Subject: [PATCH 8/9] Inline flutter bootstrap. --- .../webview_flutter_web/example/web/index.html | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_web/example/web/index.html b/packages/webview_flutter/webview_flutter_web/example/web/index.html index faf1f7e92cc..93341faa844 100644 --- a/packages/webview_flutter/webview_flutter_web/example/web/index.html +++ b/packages/webview_flutter/webview_flutter_web/example/web/index.html @@ -32,13 +32,12 @@ webview_flutter_web Example + - - \ No newline at end of file From a7d99864ca6dbe6a3f85190163d4109cf16793ad Mon Sep 17 00:00:00 2001 From: David Iglesias Teixeira Date: Mon, 15 Jul 2024 10:42:53 -0700 Subject: [PATCH 9/9] Revert "Inline flutter bootstrap." This reverts commit 76788d344d11471b4b82db7ce596ab234645a577. --- .../webview_flutter_web/example/web/index.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_web/example/web/index.html b/packages/webview_flutter/webview_flutter_web/example/web/index.html index 93341faa844..faf1f7e92cc 100644 --- a/packages/webview_flutter/webview_flutter_web/example/web/index.html +++ b/packages/webview_flutter/webview_flutter_web/example/web/index.html @@ -32,12 +32,13 @@ webview_flutter_web Example - + + \ No newline at end of file