From 588af776399bbd5fefda5b26fe0769837caf69f7 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Mon, 26 Aug 2024 14:53:29 -0400 Subject: [PATCH 01/18] [web] Use CanvasKit to run tests under engine/ --- .../surface/filters/image_filter_test.dart | 4 + .../engine/surface/platform_view_test.dart | 78 +-------------- lib/web_ui/test/engine/window_test.dart | 2 +- lib/web_ui/test/felt_config.yaml | 61 ++++++------ .../test/{engine => html}/canvas_test.dart | 0 .../image/html_image_element_codec_test.dart | 0 .../recording_canvas_test.dart | 0 .../surface/path/path_iterator_test.dart | 0 .../surface/path/path_winding_test.dart | 0 .../test/html/surface/platform_view_test.dart | 97 +++++++++++++++++++ .../surface/scene_builder_test.dart | 0 .../shaders/normalized_gradient_test.dart | 0 .../surface/shaders/shader_builder_test.dart | 0 .../surface/surface_test.dart | 0 14 files changed, 136 insertions(+), 106 deletions(-) rename lib/web_ui/test/{engine => html}/canvas_test.dart (100%) rename lib/web_ui/test/{engine => html}/image/html_image_element_codec_test.dart (100%) rename lib/web_ui/test/{engine => html}/recording_canvas_test.dart (100%) rename lib/web_ui/test/{engine => html}/surface/path/path_iterator_test.dart (100%) rename lib/web_ui/test/{engine => html}/surface/path/path_winding_test.dart (100%) create mode 100644 lib/web_ui/test/html/surface/platform_view_test.dart rename lib/web_ui/test/{engine => html}/surface/scene_builder_test.dart (100%) rename lib/web_ui/test/{engine => html}/surface/shaders/normalized_gradient_test.dart (100%) rename lib/web_ui/test/{engine => html}/surface/shaders/shader_builder_test.dart (100%) rename lib/web_ui/test/{engine => html}/surface/surface_test.dart (100%) diff --git a/lib/web_ui/test/engine/surface/filters/image_filter_test.dart b/lib/web_ui/test/engine/surface/filters/image_filter_test.dart index 0a843cb30fb76..d39beaf580eed 100644 --- a/lib/web_ui/test/engine/surface/filters/image_filter_test.dart +++ b/lib/web_ui/test/engine/surface/filters/image_filter_test.dart @@ -9,11 +9,15 @@ import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; import 'package:ui/ui.dart'; +import '../../../canvaskit/common.dart'; + void main() { internalBootstrapBrowserTest(() => testMain); } void testMain() { + setUpCanvasKitTest(); + group('ImageFilter constructors', () { test('matrix is copied', () { final Matrix4 matrix = Matrix4.identity(); diff --git a/lib/web_ui/test/engine/surface/platform_view_test.dart b/lib/web_ui/test/engine/surface/platform_view_test.dart index 9281d73bb5ebe..f9aaa8a333487 100644 --- a/lib/web_ui/test/engine/surface/platform_view_test.dart +++ b/lib/web_ui/test/engine/surface/platform_view_test.dart @@ -10,19 +10,14 @@ import 'package:ui/src/engine.dart'; import 'package:ui/ui.dart' as ui; import 'package:ui/ui_web/src/ui_web.dart' as ui_web; -import '../../common/matchers.dart'; import '../../common/test_initialization.dart'; -const MethodCodec codec = StandardMethodCodec(); - void main() { internalBootstrapBrowserTest(() => testMain); } Future testMain() async { - await bootstrapAndRunApp(withImplicitView: true); - - late PersistedPlatformView view; + await bootstrapAndRunApp(); test('importing platformViewRegistry from dart:ui is deprecated', () { final void Function(String) oldPrintWarning = printWarning; @@ -45,75 +40,4 @@ Future testMain() async { printWarning = oldPrintWarning; }); - - group('PersistedPlatformView', () { - setUp(() async { - ui_web.platformViewRegistry.registerViewFactory( - 'test-0', - (int viewId) => createDomHTMLDivElement(), - ); - ui_web.platformViewRegistry.registerViewFactory( - 'test-1', - (int viewId) => createDomHTMLDivElement(), - ); - // Ensure the views are created... - await Future.wait(>[ - _createPlatformView(0, 'test-0'), - _createPlatformView(1, 'test-1'), - ]); - view = PersistedPlatformView(0, 0, 0, 100, 100)..build(); - }); - - group('update', () { - test('throws assertion error if called with different viewIds', () { - final PersistedPlatformView differentView = PersistedPlatformView(1, 1, 1, 100, 100)..build(); - expect(() { - view.update(differentView); - }, throwsAssertionError); - }); - }); - - group('canUpdateAsMatch', () { - test('returns true when viewId is the same', () { - final PersistedPlatformView sameView = PersistedPlatformView(0, 1, 1, 100, 100)..build(); - expect(view.canUpdateAsMatch(sameView), isTrue); - }); - - test('returns false when viewId is different', () { - final PersistedPlatformView differentView = PersistedPlatformView(1, 1, 1, 100, 100)..build(); - expect(view.canUpdateAsMatch(differentView), isFalse); - }); - - test('returns false when other view is not a PlatformView', () { - final PersistedOpacity anyView = PersistedOpacity(null, 1, ui.Offset.zero)..build(); - expect(view.canUpdateAsMatch(anyView), isFalse); - }); - }); - - group('createElement', () { - test('creates slot element that can receive pointer events', () { - final DomElement element = view.createElement(); - - expect(element.tagName, equalsIgnoringCase('flt-platform-view-slot')); - expect(element.style.pointerEvents, 'auto'); - }); - }); - }); -} - -// Sends a platform message to create a Platform View with the given id and viewType. -Future _createPlatformView(int id, String viewType) { - final Completer completer = Completer(); - ui.PlatformDispatcher.instance.sendPlatformMessage( - 'flutter/platform_views', - codec.encodeMethodCall(MethodCall( - 'create', - { - 'id': id, - 'viewType': viewType, - }, - )), - (dynamic _) => completer.complete(), - ); - return completer.future; } diff --git a/lib/web_ui/test/engine/window_test.dart b/lib/web_ui/test/engine/window_test.dart index 522cc5742c477..2d3dfdba2976f 100644 --- a/lib/web_ui/test/engine/window_test.dart +++ b/lib/web_ui/test/engine/window_test.dart @@ -467,7 +467,7 @@ Future testMain() async { final DomElement host = createDomHTMLDivElement(); final EngineFlutterView view = EngineFlutterView(dispatcher, host); - expect(host.getAttribute('flt-renderer'), 'html (requested explicitly)'); + expect(host.getAttribute('flt-renderer'), 'canvaskit (requested explicitly)'); expect(host.getAttribute('flt-build-mode'), 'debug'); view.dispose(); diff --git a/lib/web_ui/test/felt_config.yaml b/lib/web_ui/test/felt_config.yaml index 2e20a355c3244..7af5b227f88b0 100644 --- a/lib/web_ui/test/felt_config.yaml +++ b/lib/web_ui/test/felt_config.yaml @@ -47,10 +47,6 @@ test-sets: directory: fallbacks test-bundles: - - name: dart2js-html-engine - test-set: engine - compile-configs: dart2js-html - - name: dart2js-html-html test-set: html compile-configs: dart2js-html @@ -59,6 +55,10 @@ test-bundles: test-set: ui compile-configs: dart2js-html + - name: dart2js-canvaskit-engine + test-set: engine + compile-configs: dart2js-canvaskit + - name: dart2js-canvaskit-canvaskit test-set: canvaskit compile-configs: dart2js-canvaskit @@ -67,10 +67,6 @@ test-bundles: test-set: ui compile-configs: dart2js-canvaskit - - name: dart2wasm-html-engine - test-set: engine - compile-configs: dart2wasm-html - - name: dart2wasm-html-html test-set: html compile-configs: dart2wasm-html @@ -79,6 +75,10 @@ test-bundles: test-set: ui compile-configs: dart2wasm-html + - name: dart2wasm-canvaskit-engine + test-set: engine + compile-configs: dart2wasm-canvaskit + - name: dart2wasm-canvaskit-canvaskit test-set: canvaskit compile-configs: dart2wasm-canvaskit @@ -123,10 +123,6 @@ run-configs: canvaskit-variant: full test-suites: - - name: chrome-dart2js-html-engine - test-bundle: dart2js-html-engine - run-config: chrome - - name: chrome-dart2js-html-html test-bundle: dart2js-html-html run-config: chrome @@ -135,6 +131,11 @@ test-suites: test-bundle: dart2js-html-ui run-config: chrome + - name: chrome-dart2js-canvaskit-engine + test-bundle: dart2js-canvaskit-engine + run-config: chrome + artifact-deps: [ canvaskit_chromium ] + - name: chrome-dart2js-canvaskit-canvaskit test-bundle: dart2js-canvaskit-canvaskit run-config: chrome @@ -155,10 +156,6 @@ test-suites: run-config: chrome-full artifact-deps: [ canvaskit ] - - name: edge-dart2js-html-engine - test-bundle: dart2js-html-engine - run-config: edge - - name: edge-dart2js-html-html test-bundle: dart2js-html-html run-config: edge @@ -167,6 +164,11 @@ test-suites: test-bundle: dart2js-html-ui run-config: edge + - name: edge-dart2js-canvaskit-engine + test-bundle: dart2js-canvaskit-engine + run-config: edge + artifact-deps: [ canvaskit_chromium ] + - name: edge-dart2js-canvaskit-canvaskit test-bundle: dart2js-canvaskit-canvaskit run-config: edge @@ -187,10 +189,6 @@ test-suites: run-config: edge-full artifact-deps: [ canvaskit ] - - name: firefox-dart2js-html-engine - test-bundle: dart2js-html-engine - run-config: firefox - - name: firefox-dart2js-html-html test-bundle: dart2js-html-html run-config: firefox @@ -199,6 +197,11 @@ test-suites: test-bundle: dart2js-html-ui run-config: firefox + - name: firefox-dart2js-canvaskit-engine + test-bundle: dart2js-canvaskit-engine + run-config: firefox + artifact-deps: [ canvaskit ] + - name: firefox-dart2js-canvaskit-canvaskit test-bundle: dart2js-canvaskit-canvaskit run-config: firefox @@ -209,10 +212,6 @@ test-suites: run-config: firefox artifact-deps: [ canvaskit ] - - name: safari-dart2js-html-engine - test-bundle: dart2js-html-engine - run-config: safari - - name: safari-dart2js-html-html test-bundle: dart2js-html-html run-config: safari @@ -221,6 +220,11 @@ test-suites: test-bundle: dart2js-html-ui run-config: safari + - name: safari-dart2js-canvaskit-engine + test-bundle: dart2js-canvaskit-engine + run-config: safari + artifact-deps: [ canvaskit ] + - name: safari-dart2js-canvaskit-canvaskit test-bundle: dart2js-canvaskit-canvaskit run-config: safari @@ -231,10 +235,6 @@ test-suites: run-config: safari artifact-deps: [ canvaskit ] - - name: chrome-dart2wasm-html-engine - test-bundle: dart2wasm-html-engine - run-config: chrome - - name: chrome-dart2wasm-html-html test-bundle: dart2wasm-html-html run-config: chrome @@ -243,6 +243,11 @@ test-suites: test-bundle: dart2wasm-html-ui run-config: chrome + - name: chrome-dart2wasm-canvaskit-engine + test-bundle: dart2wasm-canvaskit-engine + run-config: chrome + artifact-deps: [ canvaskit_chromium ] + - name: chrome-dart2wasm-canvaskit-canvaskit test-bundle: dart2wasm-canvaskit-canvaskit run-config: chrome diff --git a/lib/web_ui/test/engine/canvas_test.dart b/lib/web_ui/test/html/canvas_test.dart similarity index 100% rename from lib/web_ui/test/engine/canvas_test.dart rename to lib/web_ui/test/html/canvas_test.dart diff --git a/lib/web_ui/test/engine/image/html_image_element_codec_test.dart b/lib/web_ui/test/html/image/html_image_element_codec_test.dart similarity index 100% rename from lib/web_ui/test/engine/image/html_image_element_codec_test.dart rename to lib/web_ui/test/html/image/html_image_element_codec_test.dart diff --git a/lib/web_ui/test/engine/recording_canvas_test.dart b/lib/web_ui/test/html/recording_canvas_test.dart similarity index 100% rename from lib/web_ui/test/engine/recording_canvas_test.dart rename to lib/web_ui/test/html/recording_canvas_test.dart diff --git a/lib/web_ui/test/engine/surface/path/path_iterator_test.dart b/lib/web_ui/test/html/surface/path/path_iterator_test.dart similarity index 100% rename from lib/web_ui/test/engine/surface/path/path_iterator_test.dart rename to lib/web_ui/test/html/surface/path/path_iterator_test.dart diff --git a/lib/web_ui/test/engine/surface/path/path_winding_test.dart b/lib/web_ui/test/html/surface/path/path_winding_test.dart similarity index 100% rename from lib/web_ui/test/engine/surface/path/path_winding_test.dart rename to lib/web_ui/test/html/surface/path/path_winding_test.dart diff --git a/lib/web_ui/test/html/surface/platform_view_test.dart b/lib/web_ui/test/html/surface/platform_view_test.dart new file mode 100644 index 0000000000000..fe2a04508c264 --- /dev/null +++ b/lib/web_ui/test/html/surface/platform_view_test.dart @@ -0,0 +1,97 @@ +// 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:test/bootstrap/browser.dart'; +import 'package:test/test.dart'; +import 'package:ui/src/engine.dart'; +import 'package:ui/ui.dart' as ui; +import 'package:ui/ui_web/src/ui_web.dart' as ui_web; + +import '../../common/matchers.dart'; +import '../../common/test_initialization.dart'; + +const MethodCodec codec = StandardMethodCodec(); + +void main() { + internalBootstrapBrowserTest(() => testMain); +} + +Future testMain() async { + await bootstrapAndRunApp(withImplicitView: true); + + late PersistedPlatformView view; + + group('PersistedPlatformView', () { + setUp(() async { + ui_web.platformViewRegistry.registerViewFactory( + 'test-0', + (int viewId) => createDomHTMLDivElement(), + ); + ui_web.platformViewRegistry.registerViewFactory( + 'test-1', + (int viewId) => createDomHTMLDivElement(), + ); + // Ensure the views are created... + await Future.wait(>[ + _createPlatformView(0, 'test-0'), + _createPlatformView(1, 'test-1'), + ]); + view = PersistedPlatformView(0, 0, 0, 100, 100)..build(); + }); + + group('update', () { + test('throws assertion error if called with different viewIds', () { + final PersistedPlatformView differentView = PersistedPlatformView(1, 1, 1, 100, 100)..build(); + expect(() { + view.update(differentView); + }, throwsAssertionError); + }); + }); + + group('canUpdateAsMatch', () { + test('returns true when viewId is the same', () { + final PersistedPlatformView sameView = PersistedPlatformView(0, 1, 1, 100, 100)..build(); + expect(view.canUpdateAsMatch(sameView), isTrue); + }); + + test('returns false when viewId is different', () { + final PersistedPlatformView differentView = PersistedPlatformView(1, 1, 1, 100, 100)..build(); + expect(view.canUpdateAsMatch(differentView), isFalse); + }); + + test('returns false when other view is not a PlatformView', () { + final PersistedOpacity anyView = PersistedOpacity(null, 1, ui.Offset.zero)..build(); + expect(view.canUpdateAsMatch(anyView), isFalse); + }); + }); + + group('createElement', () { + test('creates slot element that can receive pointer events', () { + final DomElement element = view.createElement(); + + expect(element.tagName, equalsIgnoringCase('flt-platform-view-slot')); + expect(element.style.pointerEvents, 'auto'); + }); + }); + }); +} + +// Sends a platform message to create a Platform View with the given id and viewType. +Future _createPlatformView(int id, String viewType) { + final Completer completer = Completer(); + ui.PlatformDispatcher.instance.sendPlatformMessage( + 'flutter/platform_views', + codec.encodeMethodCall(MethodCall( + 'create', + { + 'id': id, + 'viewType': viewType, + }, + )), + (dynamic _) => completer.complete(), + ); + return completer.future; +} diff --git a/lib/web_ui/test/engine/surface/scene_builder_test.dart b/lib/web_ui/test/html/surface/scene_builder_test.dart similarity index 100% rename from lib/web_ui/test/engine/surface/scene_builder_test.dart rename to lib/web_ui/test/html/surface/scene_builder_test.dart diff --git a/lib/web_ui/test/engine/surface/shaders/normalized_gradient_test.dart b/lib/web_ui/test/html/surface/shaders/normalized_gradient_test.dart similarity index 100% rename from lib/web_ui/test/engine/surface/shaders/normalized_gradient_test.dart rename to lib/web_ui/test/html/surface/shaders/normalized_gradient_test.dart diff --git a/lib/web_ui/test/engine/surface/shaders/shader_builder_test.dart b/lib/web_ui/test/html/surface/shaders/shader_builder_test.dart similarity index 100% rename from lib/web_ui/test/engine/surface/shaders/shader_builder_test.dart rename to lib/web_ui/test/html/surface/shaders/shader_builder_test.dart diff --git a/lib/web_ui/test/engine/surface/surface_test.dart b/lib/web_ui/test/html/surface/surface_test.dart similarity index 100% rename from lib/web_ui/test/engine/surface/surface_test.dart rename to lib/web_ui/test/html/surface/surface_test.dart From b01778da19aa959fe986faf33e8dd7860ffbe108 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 27 Aug 2024 14:02:05 -0400 Subject: [PATCH 02/18] update ci builders --- ci/builders/linux_web_engine.json | 60 +++++++++++++++---------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/ci/builders/linux_web_engine.json b/ci/builders/linux_web_engine.json index 7c350e1250f20..1c14c1d76f66e 100644 --- a/ci/builders/linux_web_engine.json +++ b/ci/builders/linux_web_engine.json @@ -70,7 +70,7 @@ } }, { - "name": "web_tests/test_bundles/dart2js-html-engine", + "name": "web_tests/test_bundles/dart2js-canvaskit-engine", "drone_dimensions": [ "device_type=none", "os=Linux" @@ -78,11 +78,11 @@ "generators": { "tasks": [ { - "name": "compile bundle dart2js-html-engine", + "name": "compile bundle dart2js-canvaskit-engine", "parameters": [ "test", "--compile", - "--bundle=dart2js-html-engine" + "--bundle=dart2js-canvaskit-engine" ], "scripts": [ "flutter/lib/web_ui/dev/felt" @@ -180,7 +180,7 @@ } }, { - "name": "web_tests/test_bundles/dart2wasm-html-engine", + "name": "web_tests/test_bundles/dart2wasm-canvaskit-engine", "drone_dimensions": [ "device_type=none", "os=Linux" @@ -188,11 +188,11 @@ "generators": { "tasks": [ { - "name": "compile bundle dart2wasm-html-engine", + "name": "compile bundle dart2wasm-canvaskit-engine", "parameters": [ "test", "--compile", - "--bundle=dart2wasm-html-engine" + "--bundle=dart2wasm-canvaskit-engine" ], "scripts": [ "flutter/lib/web_ui/dev/felt" @@ -336,7 +336,7 @@ ], "tests": [ { - "name": "Linux run chrome-dart2js-html-engine suite", + "name": "Linux run chrome-dart2js-canvaskit-engine suite", "recipe": "engine_v2/tester_engine", "drone_dimensions": [ "device_type=none", @@ -348,7 +348,7 @@ }, "dependencies": [ "web_tests/artifacts", - "web_tests/test_bundles/dart2js-html-engine" + "web_tests/test_bundles/dart2js-canvaskit-engine" ], "test_dependencies": [ { @@ -362,11 +362,11 @@ ], "tasks": [ { - "name": "run suite chrome-dart2js-html-engine", + "name": "run suite chrome-dart2js-canvaskit-engine", "parameters": [ "test", "--run", - "--suite=chrome-dart2js-html-engine" + "--suite=chrome-dart2js-canvaskit-engine" ], "script": "flutter/lib/web_ui/dev/felt" } @@ -595,7 +595,7 @@ ] }, { - "name": "Linux run firefox-dart2js-html-engine suite", + "name": "Linux run firefox-dart2js-canvaskit-engine suite", "recipe": "engine_v2/tester_engine", "drone_dimensions": [ "device_type=none", @@ -607,7 +607,7 @@ }, "dependencies": [ "web_tests/artifacts", - "web_tests/test_bundles/dart2js-html-engine" + "web_tests/test_bundles/dart2js-canvaskit-engine" ], "test_dependencies": [ { @@ -621,11 +621,11 @@ ], "tasks": [ { - "name": "run suite firefox-dart2js-html-engine", + "name": "run suite firefox-dart2js-canvaskit-engine", "parameters": [ "test", "--run", - "--suite=firefox-dart2js-html-engine" + "--suite=firefox-dart2js-canvaskit-engine" ], "script": "flutter/lib/web_ui/dev/felt" } @@ -780,7 +780,7 @@ ] }, { - "name": "Linux run chrome-dart2wasm-html-engine suite", + "name": "Linux run chrome-dart2wasm-canvaskit-engine suite", "recipe": "engine_v2/tester_engine", "drone_dimensions": [ "device_type=none", @@ -792,7 +792,7 @@ }, "dependencies": [ "web_tests/artifacts", - "web_tests/test_bundles/dart2wasm-html-engine" + "web_tests/test_bundles/dart2wasm-canvaskit-engine" ], "test_dependencies": [ { @@ -806,11 +806,11 @@ ], "tasks": [ { - "name": "run suite chrome-dart2wasm-html-engine", + "name": "run suite chrome-dart2wasm-canvaskit-engine", "parameters": [ "test", "--run", - "--suite=chrome-dart2wasm-html-engine" + "--suite=chrome-dart2wasm-canvaskit-engine" ], "script": "flutter/lib/web_ui/dev/felt" } @@ -1150,7 +1150,7 @@ ] }, { - "name": "Mac run safari-dart2js-html-engine suite", + "name": "Mac run safari-dart2js-canvaskit-engine suite", "recipe": "engine_v2/tester_engine", "drone_dimensions": [ "device_type=none", @@ -1163,7 +1163,7 @@ }, "dependencies": [ "web_tests/artifacts", - "web_tests/test_bundles/dart2js-html-engine" + "web_tests/test_bundles/dart2js-canvaskit-engine" ], "test_dependencies": [ { @@ -1173,11 +1173,11 @@ ], "tasks": [ { - "name": "run suite safari-dart2js-html-engine", + "name": "run suite safari-dart2js-canvaskit-engine", "parameters": [ "test", "--run", - "--suite=safari-dart2js-html-engine" + "--suite=safari-dart2js-canvaskit-engine" ], "script": "flutter/lib/web_ui/dev/felt" } @@ -1354,7 +1354,7 @@ ] }, { - "name": "Windows run chrome-dart2js-html-engine suite", + "name": "Windows run chrome-dart2js-canvaskit-engine suite", "recipe": "engine_v2/tester_engine", "drone_dimensions": [ "device_type=none", @@ -1366,7 +1366,7 @@ }, "dependencies": [ "web_tests/artifacts", - "web_tests/test_bundles/dart2js-html-engine" + "web_tests/test_bundles/dart2js-canvaskit-engine" ], "test_dependencies": [ { @@ -1380,11 +1380,11 @@ ], "tasks": [ { - "name": "run suite chrome-dart2js-html-engine", + "name": "run suite chrome-dart2js-canvaskit-engine", "parameters": [ "test", "--run", - "--suite=chrome-dart2js-html-engine" + "--suite=chrome-dart2js-canvaskit-engine" ], "script": "flutter/lib/web_ui/dev/felt" } @@ -1613,7 +1613,7 @@ ] }, { - "name": "Windows run chrome-dart2wasm-html-engine suite", + "name": "Windows run chrome-dart2wasm-canvaskit-engine suite", "recipe": "engine_v2/tester_engine", "drone_dimensions": [ "device_type=none", @@ -1625,7 +1625,7 @@ }, "dependencies": [ "web_tests/artifacts", - "web_tests/test_bundles/dart2wasm-html-engine" + "web_tests/test_bundles/dart2wasm-canvaskit-engine" ], "test_dependencies": [ { @@ -1639,11 +1639,11 @@ ], "tasks": [ { - "name": "run suite chrome-dart2wasm-html-engine", + "name": "run suite chrome-dart2wasm-canvaskit-engine", "parameters": [ "test", "--run", - "--suite=chrome-dart2wasm-html-engine" + "--suite=chrome-dart2wasm-canvaskit-engine" ], "script": "flutter/lib/web_ui/dev/felt" } From a7e28141545d9fe3c3d2210e901425b10399ee48 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 27 Aug 2024 15:54:39 -0400 Subject: [PATCH 03/18] also move image file used by test --- lib/web_ui/dev/test_platform.dart | 2 +- .../test/{engine => html}/image/sample_image1.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename lib/web_ui/test/{engine => html}/image/sample_image1.png (100%) diff --git a/lib/web_ui/dev/test_platform.dart b/lib/web_ui/dev/test_platform.dart index 8bc3bc39fdaad..d46e8377a2838 100644 --- a/lib/web_ui/dev/test_platform.dart +++ b/lib/web_ui/dev/test_platform.dart @@ -89,7 +89,7 @@ class BrowserPlatform extends PlatformPlugin { .add(_createSourceHandler()) // Serves files from the root of web_ui. Some tests download assets that are embedded - // directly in the test folder, such as test/engine/image/sample_image1.png etc + // directly in the test folder, such as test/html/image/sample_image1.png etc .add(createStaticHandler(env.environment.webUiRootDir.path)) // Serves absolute package URLs (i.e. not /packages/* but /Users/user/*/hosted/pub.dartlang.org/*). diff --git a/lib/web_ui/test/engine/image/sample_image1.png b/lib/web_ui/test/html/image/sample_image1.png similarity index 100% rename from lib/web_ui/test/engine/image/sample_image1.png rename to lib/web_ui/test/html/image/sample_image1.png From f33f1cb408f3e35417a922e48d66255aca9493d1 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Thu, 29 Aug 2024 16:24:14 -0400 Subject: [PATCH 04/18] deleted an unnecessary file --- lib/web_ui/test/canvaskit/semantics_test.dart | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 lib/web_ui/test/canvaskit/semantics_test.dart diff --git a/lib/web_ui/test/canvaskit/semantics_test.dart b/lib/web_ui/test/canvaskit/semantics_test.dart deleted file mode 100644 index ce4b8598de419..0000000000000 --- a/lib/web_ui/test/canvaskit/semantics_test.dart +++ /dev/null @@ -1,29 +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. - -@TestOn('chrome || safari || firefox') -library; - -import 'dart:async'; - -import 'package:test/bootstrap/browser.dart'; -import 'package:test/test.dart'; - -import '../engine/semantics/semantics_test.dart'; -import 'common.dart'; - -void main() { - internalBootstrapBrowserTest(() => testMain); -} - -// Run the same semantics tests in CanvasKit mode because as of today we do not -// yet share platform view logic with the HTML renderer, which affects -// semantics. -Future testMain() async { - group('CanvasKit semantics', () { - setUpCanvasKitTest(withImplicitView: true); - - runSemanticsTests(); - }); -} From 00a41030cb92cfa7ef207f5ccb1f03c1ace9ac93 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 4 Sep 2024 15:48:17 -0400 Subject: [PATCH 05/18] skip one test in Firefox --- lib/web_ui/test/engine/semantics/text_field_test.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/web_ui/test/engine/semantics/text_field_test.dart b/lib/web_ui/test/engine/semantics/text_field_test.dart index c93dc3bf4a86f..59ac7302e226c 100644 --- a/lib/web_ui/test/engine/semantics/text_field_test.dart +++ b/lib/web_ui/test/engine/semantics/text_field_test.dart @@ -470,7 +470,8 @@ void testMain() { ); strategy.disable(); - }); + // Firefox strips out `-webkit-text-security` from outerHTML. + }, skip: ui_web.browser.browserEngine == ui_web.BrowserEngine.firefox); test('Does not position or size its DOM element', () { strategy.enable( From 5a80d5ba6b89bd3a4704c4e659c61bb67030f60c Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 18 Sep 2024 15:44:17 -0400 Subject: [PATCH 06/18] fix composition test for firefox --- lib/web_ui/test/engine/composition_test.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/web_ui/test/engine/composition_test.dart b/lib/web_ui/test/engine/composition_test.dart index 4785ed9acd14e..f132f7e2649d3 100644 --- a/lib/web_ui/test/engine/composition_test.dart +++ b/lib/web_ui/test/engine/composition_test.dart @@ -323,6 +323,14 @@ Future testMain() async { _inputElement.dispatchEvent(createDomCompositionEvent( _MockWithCompositionAwareMixin._kCompositionUpdate, { 'data': newComposingText })); + // On Chrome and Safari, a `compositionupdate` event automatically + // triggers a `selectionchange` event, which leads to triggering + // `DefaultTextEditingStrategy.handleChange`. + // + // But in Firefox, `selectionchange` event is not triggered, so we need to + // manually dispatch an `input` event to trigger + // `DefaultTextEditingStrategy.handleChange`. + _inputElement.dispatchEvent(createDomInputEvent('input')); await containExpect; }); From e6bbc9ad1b15d2aa47bdcd85ba77c90a68682210 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Thu, 7 Nov 2024 10:57:55 -0500 Subject: [PATCH 07/18] fix import --- lib/web_ui/test/engine/semantics/text_field_test.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/web_ui/test/engine/semantics/text_field_test.dart b/lib/web_ui/test/engine/semantics/text_field_test.dart index 91f4f45fa4548..c569ef00abd51 100644 --- a/lib/web_ui/test/engine/semantics/text_field_test.dart +++ b/lib/web_ui/test/engine/semantics/text_field_test.dart @@ -9,6 +9,7 @@ import 'package:test/bootstrap/browser.dart'; import 'package:test/test.dart'; import 'package:ui/src/engine.dart' hide window; import 'package:ui/ui.dart' as ui; +import 'package:ui/ui_web/src/ui_web.dart' as ui_web; import '../../common/test_initialization.dart'; import 'semantics_tester.dart'; From ff627f416fc9f95292dd635da2cabed7e4f2cca3 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Mon, 11 Nov 2024 13:57:15 -0500 Subject: [PATCH 08/18] debug prints --- lib/web_ui/lib/ui_web/src/ui_web/initialization.dart | 6 ++++++ lib/web_ui/test/common/test_initialization.dart | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/lib/web_ui/lib/ui_web/src/ui_web/initialization.dart b/lib/web_ui/lib/ui_web/src/ui_web/initialization.dart index ad42a26dae677..f53dfd476a5f1 100644 --- a/lib/web_ui/lib/ui_web/src/ui_web/initialization.dart +++ b/lib/web_ui/lib/ui_web/src/ui_web/initialization.dart @@ -32,12 +32,16 @@ Future bootstrapEngine({ // Create the object that knows how to bootstrap an app from JS and Dart. final AppBootstrap bootstrap = AppBootstrap( initializeEngine: ([JsFlutterConfiguration? configuration]) async { + print(' <=await initializeEngineServices(jsConfiguration: configuration);'); await initializeEngineServices(jsConfiguration: configuration); + print(' bootstrapEngine({ final FlutterLoader? loader = flutter?.loader; if (loader == null || loader.isAutoStart) { // The user does not want control of the app, bootstrap immediately. + print(' <=await bootstrap.autoStart();'); await bootstrap.autoStart(); + print(' { 'fontFallbackBaseUrl': 'assets/fallback_fonts/', }.jsify() as engine.JsFlutterConfiguration?); @@ -44,6 +47,7 @@ void setUpUnitTests({ } setUpRenderingForTests(); + print(' bootstrapAndRunApp({bool withImplicitView = false}) async { final Completer completer = Completer(); + print(' <=await ui_web.bootstrapEngine();'); await ui_web.bootstrapEngine(runApp: () => completer.complete()); + print(' Date: Mon, 11 Nov 2024 13:57:35 -0500 Subject: [PATCH 09/18] firefox solo in CI --- .ci.yaml | 536 ------------------------------ ci/builders/linux_web_engine.json | 388 --------------------- 2 files changed, 924 deletions(-) diff --git a/.ci.yaml b/.ci.yaml index 1687b69e18963..85d40d28d37d2 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -22,364 +22,8 @@ platform_properties: device_type: none os: Ubuntu cores: "8" - mac: - properties: - # CIPD flutter/java/openjdk/$platform - dependencies: >- - [ - {"dependency": "open_jdk", "version": "version:17"} - ] - device_type: none - os: Mac-13|Mac-14 - $flutter/osx_sdk : >- - { - "sdk_version": "15a240d" - } - windows: - properties: - # CIPD flutter/java/openjdk/$platform - dependencies: >- - [ - {"dependency": "open_jdk", "version": "version:17"} - ] - device_type: none - os: Windows-10 targets: - - name: Linux local_engine_builds - enabled_branches: - - main - recipe: engine_v2/engine_v2 - properties: - config_name: local_engine - # local_engine schedules a bunch of other builds, so it's likely to timeout waiting for those builds to run. - timeout: 180 - - - name: Linux linux_android_emulator_tests - bringup: true - enabled_branches: - - main - recipe: engine_v2/engine_v2 - properties: - config_name: linux_android_emulator - dependencies: >- - [ - {"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"} - ] - timeout: 90 - runIf: - - .ci.yaml - - ci/builders/linux_android_emulator.json - - DEPS - - lib/ui/** - - shell/platform/android/** - - testing/scenario_app/** - - testing/skia_gold_client/** - - - name: Linux linux_android_emulator_tests_34 - enabled_branches: - - main - recipe: engine_v2/engine_v2 - properties: - config_name: linux_android_emulator_34 - dependencies: >- - [ - {"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"} - ] - timeout: 90 - runIf: - - .ci.yaml - - ci/builders/linux_android_emulator.json - - DEPS - - lib/ui/** - - shell/platform/android/** - - testing/scenario_app/** - - testing/skia_gold_client/** - - - name: Linux linux_android_emulator_opengles_tests_34 - enabled_branches: - - main - recipe: engine_v2/engine_v2 - properties: - config_name: linux_android_emulator_opengles_34 - dependencies: >- - [ - {"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"} - ] - timeout: 90 - runIf: - - .ci.yaml - - ci/builders/linux_android_emulator_opengles_34.json - - DEPS - - lib/ui/** - - shell/platform/android/** - - testing/scenario_app/** - - testing/skia_gold_client/** - - - name: Linux linux_android_emulator_skia_tests - bringup: true - enabled_branches: - - main - recipe: engine_v2/builder - properties: - config_name: linux_android_emulator_skia - kvm: "1" - dependencies: >- - [ - {"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"} - ] - timeout: 90 - runIf: - - .ci.yaml - - ci/builders/linux_android_emulator.json - - DEPS - - lib/ui/** - - shell/platform/android/** - - testing/scenario_app/** - - testing/skia_gold_client/** - - - name: Linux linux_android_emulator_skia_tests_34 - enabled_branches: - - main - recipe: engine_v2/builder - properties: - config_name: linux_android_emulator_skia_34 - kvm: "1" - dependencies: >- - [ - {"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"} - ] - timeout: 90 - runIf: - - .ci.yaml - - ci/builders/linux_android_emulator.json - - DEPS - - lib/ui/** - - shell/platform/android/** - - testing/scenario_app/** - - testing/skia_gold_client/** - - - name: Linux builder_cache - enabled_branches: - - main - recipe: engine_v2/cache - presubmit: false - properties: - cache_name: "builder" - cache_paths: >- - [ - "builder", - "git" - ] - gclient_variables: >- - { - "download_emsdk": "true", - "download_android_deps": "true", - "download_jdk": "true" - } - timeout: 60 - - - name: Windows builder_cache - enabled_branches: - - main - recipe: engine_v2/cache - presubmit: false - properties: - cache_name: "builder" - cache_paths: >- - [ - "builder", - "git" - ] - gclient_variables: >- - { - "download_android_deps": "true", - "download_jdk": "true" - } - timeout: 60 - - - name: Mac builder_cache - enabled_branches: - - main - recipe: engine_v2/cache - presubmit: false - properties: - cache_name: "builder" - cache_paths: >- - [ - "builder", - "git" - ] - ignore_cache_paths: >- - [ - "builder/src/flutter/prebuilts/SDKs", - "builder/src/flutter/prebuilts/Library" - ] - gclient_variables: >- - { - "download_android_deps": "true", - "download_jdk": "true" - } - timeout: 60 - - - name: Linux linux_benchmarks - enabled_branches: - - main - recipe: engine_v2/builder - presubmit: false - properties: - config_name: linux_benchmarks - timeout: 60 - - - name: Linux linux_fuchsia - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - release_build: "true" - config_name: linux_fuchsia - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Linux - dimensions: - # This is needed so that orchestrators that only spawn subbuilds are not - # assigned to the large 32 core workers when doing release builds. - # For more details see the issue - # at https://github.com/flutter/flutter/issues/152186. - cores: "8" - - - name: Linux linux_fuchsia_tests - recipe: engine_v2/engine_v2 - timeout: 90 - properties: - config_name: linux_fuchsia_tests - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Linux - dimensions: - kvm: "1" - - - name: Linux linux_clang_tidy - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - config_name: linux_clang_tidy - runIf: - - DEPS - - .ci.yaml - - tools/clang_tidy/** - - ci/builders/** - - ci/clang_tidy.sh - - "**.h" - - "**.c" - - "**.cc" - - "**.fbs" - - "**.frag" - - "**.vert" - - - name: Linux linux_arm_host_engine - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - add_recipes_cq: "true" - release_build: "true" - config_name: linux_arm_host_engine - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Linux - dimensions: - # This is needed so that orchestrators that only spawn subbuilds are not - # assigned to the large 32 core workers when doing release builds. - # For more details see the issue - # at https://github.com/flutter/flutter/issues/152186. - cores: "8" - - - name: Linux linux_host_engine - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - add_recipes_cq: "true" - release_build: "true" - config_name: linux_host_engine - dependencies: >- - [ - {"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"} - ] - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Linux - dimensions: - # This is needed so that orchestrators that only spawn subbuilds are not - # assigned to the large 32 core workers when doing release builds. - # For more details see the issue - # at https://github.com/flutter/flutter/issues/152186. - cores: "8" - - - name: Linux linux_host_desktop_engine - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - add_recipes_cq: "true" - release_build: "true" - config_name: linux_host_desktop_engine - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Linux - dimensions: - # This is needed so that orchestrators that only spawn subbuilds are not - # assigned to the large 32 core workers when doing release builds. - # For more details see the issue - # at https://github.com/flutter/flutter/issues/152186. - cores: "8" - - - name: Linux linux_android_aot_engine - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - add_recipes_cq: "true" - release_build: "true" - config_name: linux_android_aot_engine - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Linux - dimensions: - # This is needed so that orchestrators that only spawn subbuilds are not - # assigned to the large 32 core workers when doing release builds. - # For more details see the issue - # at https://github.com/flutter/flutter/issues/152186. - cores: "8" - - - name: Linux linux_android_debug_engine - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - add_recipes_cq: "true" - release_build: "true" - config_name: linux_android_debug_engine - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Linux - dimensions: - # This is needed so that orchestrators that only spawn subbuilds are not - # assigned to the large 32 core workers when doing release builds. - # For more details see the issue - # at https://github.com/flutter/flutter/issues/152186. - cores: "8" - - - name: Linux linux_license - recipe: engine_v2/builder - timeout: 120 - properties: - add_recipes_cq: "true" - config_name: linux_license - clobber: "true" - - name: Linux linux_web_engine recipe: engine_v2/engine_v2 timeout: 120 @@ -404,183 +48,3 @@ targets: - tools/** - ci/** - flutter_frontend_server/** - - - name: Linux clangd - recipe: engine_v2/builder - properties: - config_name: linux_clangd - - - name: Linux linux_unopt - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - config_name: linux_unopt - - - name: Linux Web Framework tests - recipe: engine/web_engine_framework - enabled_branches: - - main - properties: - add_recipes_cq: "true" - cores: "32" - gclient_variables: >- - {"download_emsdk": true} - dependencies: >- - [ - {"dependency": "chrome_and_driver", "version": "version:119.0.6045.9"}, - {"dependency": "curl", "version": "version:7.64.0"} - ] - no_goma: "true" - drone_dimensions: > - ["device_type=none", "os=Linux"] - shard: web_tests - subshards: >- - ["0", "1", "2", "3", "4", "5", "6", "7_last"] - timeout: 120 - runIf: - - DEPS - - .ci.yaml - - lib/web_ui/** - - web_sdk/** - - tools/** - - ci/** - - flutter_frontend_server/** - - - name: Linux mac_android_aot_engine - recipe: engine_v2/engine_v2 - timeout: 240 - properties: - add_recipes_cq: "true" - release_build: "true" - config_name: mac_android_aot_engine - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Linux - dimensions: - # This is needed so that orchestrators that only spawn subbuilds are not - # assigned to the large 32 core workers when doing release builds. - # For more details see the issue - # at https://github.com/flutter/flutter/issues/152186. - cores: "8" - - - name: Mac mac_clang_tidy - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - config_name: mac_clang_tidy - runIf: - - DEPS - - .ci.yaml - - tools/clang_tidy/** - - ci/builders/** - - ci/clang_tidy.sh - - "**.h" - - "**.c" - - "**.cc" - - "**.fbs" - - "**.frag" - - "**.vert" - - "**.m" - - "**.mm" - - - name: Mac mac_host_engine - recipe: engine_v2/engine_v2 - timeout: 240 - properties: - add_recipes_cq: "true" - release_build: "true" - cpu: arm64 - config_name: mac_host_engine - dependencies: >- - [ - {"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"} - ] - $flutter/osx_sdk : >- - { - "sdk_version": "15a240d" - } - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Mac-13|Mac-14 - - - name: Mac clangd - recipe: engine_v2/builder - properties: - config_name: mac_clangd - cpu: arm64 - - - name: Mac mac_unopt - recipe: engine_v2/engine_v2 - properties: - config_name: mac_unopt - add_recipes_cq: "true" - # Retry for flakes caused by https://github.com/flutter/flutter/issues/157636 - presubmit_max_attempts: "2" - timeout: 120 - - - name: Mac mac_ios_engine - recipe: engine_v2/engine_v2 - timeout: 240 - properties: - add_recipes_cq: "true" - release_build: "true" - config_name: mac_ios_engine - $flutter/osx_sdk : >- - { - "sdk_version": "15a240d" - } - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Mac-13|Mac-14 - - cpu=x86 - - - name: Windows windows_android_aot_engine - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - add_recipes_cq: "true" - release_build: "true" - config_name: windows_android_aot_engine - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Windows - - - name: Windows windows_host_engine - recipe: engine_v2/engine_v2 - timeout: 120 - properties: - add_recipes_cq: "true" - release_build: "true" - config_name: windows_host_engine - # Do not remove(https://github.com/flutter/flutter/issues/144644) - # Scheduler will fail to get the platform - drone_dimensions: - - os=Windows - - - name: Windows windows_arm_host_engine - recipe: engine_v2/engine_v2 - timeout: 120 - enabled_branches: - # Don't run this on release branches - - main - properties: - add_recipes_cq: "true" - config_name: windows_arm_host_engine - drone_dimensions: - - os=Windows - - - name: Windows windows_unopt - recipe: engine_v2/builder - timeout: 120 - properties: - config_name: windows_unopt - - - name: Linux ci_yaml engine roller - bringup: true - recipe: infra/ci_yaml - properties: - backfill: "false" diff --git a/ci/builders/linux_web_engine.json b/ci/builders/linux_web_engine.json index f4159952eafc2..7407c2ef71fd1 100644 --- a/ci/builders/linux_web_engine.json +++ b/ci/builders/linux_web_engine.json @@ -247,158 +247,6 @@ } ], "tests": [ - { - "name": "Linux run chrome suites", - "recipe": "engine_v2/tester_engine", - "drone_dimensions": [ - "device_type=none", - "os=Linux" - ], - "gclient_variables": { - "download_android_deps": false, - "download_jdk": false - }, - "dependencies": [ - "web_tests/artifacts", - "web_tests/test_bundles/dart2js-html-html", - "web_tests/test_bundles/dart2js-html-ui", - "web_tests/test_bundles/dart2js-canvaskit-engine", - "web_tests/test_bundles/dart2js-canvaskit-canvaskit", - "web_tests/test_bundles/dart2js-canvaskit-ui", - "web_tests/test_bundles/dart2wasm-canvaskit-engine", - "web_tests/test_bundles/dart2wasm-skwasm-ui", - "web_tests/test_bundles/fallbacks" - ], - "test_dependencies": [ - { - "dependency": "goldctl", - "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd" - }, - { - "dependency": "chrome_and_driver", - "version": "125.0.6422.141" - } - ], - "tasks": [ - { - "name": "run suite chrome-dart2js-html-html", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-html-html" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2js-html-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-html-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2js-canvaskit-engine", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-canvaskit-engine" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2js-canvaskit-canvaskit", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-canvaskit-canvaskit" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2js-canvaskit-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-canvaskit-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-full-dart2js-canvaskit-canvaskit", - "parameters": [ - "test", - "--run", - "--suite=chrome-full-dart2js-canvaskit-canvaskit" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-full-dart2js-canvaskit-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-full-dart2js-canvaskit-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2wasm-canvaskit-engine", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2wasm-canvaskit-engine" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-coi-dart2wasm-skwasm-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-coi-dart2wasm-skwasm-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-force-st-dart2wasm-skwasm-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-force-st-dart2wasm-skwasm-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-fallbacks", - "parameters": [ - "test", - "--run", - "--suite=chrome-fallbacks" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-coi-fallbacks", - "parameters": [ - "test", - "--run", - "--suite=chrome-coi-fallbacks" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-force-st-fallbacks", - "parameters": [ - "test", - "--run", - "--suite=chrome-force-st-fallbacks" - ], - "script": "flutter/lib/web_ui/dev/felt" - } - ] - }, { "name": "Linux run firefox suites", "recipe": "engine_v2/tester_engine", @@ -485,242 +333,6 @@ "script": "flutter/lib/web_ui/dev/felt" } ] - }, - { - "name": "Mac run safari suites", - "recipe": "engine_v2/tester_engine", - "drone_dimensions": [ - "device_type=none", - "os=Mac-13", - "cpu=arm64" - ], - "gclient_variables": { - "download_android_deps": false, - "download_jdk": false - }, - "dependencies": [ - "web_tests/artifacts", - "web_tests/test_bundles/dart2js-html-html", - "web_tests/test_bundles/dart2js-html-ui", - "web_tests/test_bundles/dart2js-canvaskit-engine", - "web_tests/test_bundles/dart2js-canvaskit-canvaskit", - "web_tests/test_bundles/dart2js-canvaskit-ui", - "web_tests/test_bundles/fallbacks" - ], - "test_dependencies": [ - { - "dependency": "goldctl", - "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd" - } - ], - "tasks": [ - { - "name": "run suite safari-dart2js-html-html", - "parameters": [ - "test", - "--run", - "--suite=safari-dart2js-html-html" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite safari-dart2js-html-ui", - "parameters": [ - "test", - "--run", - "--suite=safari-dart2js-html-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite safari-dart2js-canvaskit-engine", - "parameters": [ - "test", - "--run", - "--suite=safari-dart2js-canvaskit-engine" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite safari-dart2js-canvaskit-canvaskit", - "parameters": [ - "test", - "--run", - "--suite=safari-dart2js-canvaskit-canvaskit" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite safari-dart2js-canvaskit-ui", - "parameters": [ - "test", - "--run", - "--suite=safari-dart2js-canvaskit-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite safari-fallbacks", - "parameters": [ - "test", - "--run", - "--suite=safari-fallbacks" - ], - "script": "flutter/lib/web_ui/dev/felt" - } - ] - }, - { - "name": "Windows run chrome suites", - "recipe": "engine_v2/tester_engine", - "drone_dimensions": [ - "device_type=none", - "os=Windows" - ], - "gclient_variables": { - "download_android_deps": false, - "download_jdk": false - }, - "dependencies": [ - "web_tests/artifacts", - "web_tests/test_bundles/dart2js-html-html", - "web_tests/test_bundles/dart2js-html-ui", - "web_tests/test_bundles/dart2js-canvaskit-engine", - "web_tests/test_bundles/dart2js-canvaskit-canvaskit", - "web_tests/test_bundles/dart2js-canvaskit-ui", - "web_tests/test_bundles/dart2wasm-canvaskit-engine", - "web_tests/test_bundles/dart2wasm-skwasm-ui", - "web_tests/test_bundles/fallbacks" - ], - "test_dependencies": [ - { - "dependency": "goldctl", - "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd" - }, - { - "dependency": "chrome_and_driver", - "version": "125.0.6422.141" - } - ], - "tasks": [ - { - "name": "run suite chrome-dart2js-html-html", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-html-html" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2js-html-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-html-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2js-canvaskit-engine", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-canvaskit-engine" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2js-canvaskit-canvaskit", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-canvaskit-canvaskit" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2js-canvaskit-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2js-canvaskit-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-full-dart2js-canvaskit-canvaskit", - "parameters": [ - "test", - "--run", - "--suite=chrome-full-dart2js-canvaskit-canvaskit" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-full-dart2js-canvaskit-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-full-dart2js-canvaskit-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-dart2wasm-canvaskit-engine", - "parameters": [ - "test", - "--run", - "--suite=chrome-dart2wasm-canvaskit-engine" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-coi-dart2wasm-skwasm-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-coi-dart2wasm-skwasm-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-force-st-dart2wasm-skwasm-ui", - "parameters": [ - "test", - "--run", - "--suite=chrome-force-st-dart2wasm-skwasm-ui" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-fallbacks", - "parameters": [ - "test", - "--run", - "--suite=chrome-fallbacks" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-coi-fallbacks", - "parameters": [ - "test", - "--run", - "--suite=chrome-coi-fallbacks" - ], - "script": "flutter/lib/web_ui/dev/felt" - }, - { - "name": "run suite chrome-force-st-fallbacks", - "parameters": [ - "test", - "--run", - "--suite=chrome-force-st-fallbacks" - ], - "script": "flutter/lib/web_ui/dev/felt" - } - ] } ] } From f8dfd507f8bb72cdb2f6ab83dcc650b940f7e30b Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Mon, 11 Nov 2024 16:25:37 -0500 Subject: [PATCH 10/18] more prints --- lib/web_ui/lib/src/engine/canvaskit/renderer.dart | 4 ++++ lib/web_ui/lib/src/engine/initialization.dart | 6 ++++++ lib/web_ui/lib/ui_web/src/ui_web/initialization.dart | 11 +++++------ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart index 6676ab4544693..13b284fd69e67 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart @@ -78,11 +78,15 @@ class CanvasKitRenderer implements Renderer { canvasKit = windowFlutterCanvasKit!; } else if (windowFlutterCanvasKitLoaded != null) { // CanvasKit is being preloaded by flutter.js. Wait for it to complete. + print(' <=await promiseToFuture(windowFlutterCanvasKitLoaded!);'); canvasKit = await promiseToFuture(windowFlutterCanvasKitLoaded!); + print(' initializeEngineServices({ _setAssetManager(assetManager); Future initializeRendererCallback () async => renderer.initialize(); + print(' <=await Future.wait([initializeRendererCallback(), _downloadAssetFonts()]);'); await Future.wait(>[initializeRendererCallback(), _downloadAssetFonts()]); + print(' _downloadAssetFonts() async { if (ui_web.debugEmulateFlutterTesterEnvironment) { // Load the embedded test font before loading fonts from the assets so that // the embedded test font is the default (first) font. + print(' <=await renderer.fontCollection.loadFontFromList(EmbeddedTestFont.flutterTest.data ...);'); await renderer.fontCollection.loadFontFromList( EmbeddedTestFont.flutterTest.data, fontFamily: EmbeddedTestFont.flutterTest.fontFamily ); + print(' bootstrapEngine({ // Create the object that knows how to bootstrap an app from JS and Dart. final AppBootstrap bootstrap = AppBootstrap( initializeEngine: ([JsFlutterConfiguration? configuration]) async { - print(' <=await initializeEngineServices(jsConfiguration: configuration);'); + print(' <=await initializeEngineServices(jsConfiguration: configuration);'); await initializeEngineServices(jsConfiguration: configuration); - print(' bootstrapEngine({ final FlutterLoader? loader = flutter?.loader; if (loader == null || loader.isAutoStart) { // The user does not want control of the app, bootstrap immediately. - print(' <=await bootstrap.autoStart();'); await bootstrap.autoStart(); - print(' Date: Tue, 12 Nov 2024 11:01:31 -0500 Subject: [PATCH 11/18] more prints --- lib/web_ui/lib/src/engine/canvaskit/fonts.dart | 4 ++++ lib/web_ui/lib/src/engine/initialization.dart | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/web_ui/lib/src/engine/canvaskit/fonts.dart b/lib/web_ui/lib/src/engine/canvaskit/fonts.dart index 66588299fd9fe..6fecd74b234b5 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/fonts.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/fonts.dart @@ -125,6 +125,7 @@ class SkiaFontCollection implements FlutterFontCollection { final Map fontFailures = {}; final List<(String, UnregisteredFont)> downloadedFonts = <(String, UnregisteredFont)>[]; + print(' <=await Future.wait(pendingDownloads);'); for (final FontDownloadResult result in await Future.wait(pendingDownloads)) { if (result.font != null) { downloadedFonts.add((result.assetName, result.font!)); @@ -132,9 +133,12 @@ class SkiaFontCollection implements FlutterFontCollection { fontFailures[result.assetName] = result.error!; } } + print(' loadedFonts = []; for (final (String assetName, UnregisteredFont unregisteredFont) in downloadedFonts) { diff --git a/lib/web_ui/lib/src/engine/initialization.dart b/lib/web_ui/lib/src/engine/initialization.dart index e17d9ab1111e6..501b6fd1e1184 100644 --- a/lib/web_ui/lib/src/engine/initialization.dart +++ b/lib/web_ui/lib/src/engine/initialization.dart @@ -273,9 +273,12 @@ Future _downloadAssetFonts() async { } if (_debugAssetManager != null || _assetManager != null) { - print(' <=await renderer.fontCollection.loadAssetFonts(await fetchFontManifest(ui_web.assetManager));'); - await renderer.fontCollection.loadAssetFonts(await fetchFontManifest(ui_web.assetManager)); - print(' Date: Tue, 12 Nov 2024 12:41:35 -0500 Subject: [PATCH 12/18] even more prints --- lib/web_ui/lib/src/engine/canvaskit/fonts.dart | 2 ++ lib/web_ui/lib/src/engine/canvaskit/renderer.dart | 1 + 2 files changed, 3 insertions(+) diff --git a/lib/web_ui/lib/src/engine/canvaskit/fonts.dart b/lib/web_ui/lib/src/engine/canvaskit/fonts.dart index 6fecd74b234b5..10c0c34995047 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/fonts.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/fonts.dart @@ -85,8 +85,10 @@ class SkiaFontCollection implements FlutterFontCollection { } } + print(' <=await renderer.initialize();'); // Make sure CanvasKit is actually loaded await renderer.initialize(); + print(' initialize() async { + print(' == renderer.initialize();'); _initialized ??= () async { if (windowFlutterCanvasKit != null) { canvasKit = windowFlutterCanvasKit!; From 011029438ca97c45ef445fe8cd90e749de05885d Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 12 Nov 2024 14:41:16 -0500 Subject: [PATCH 13/18] more debugging --- lib/web_ui/lib/src/engine/canvaskit/renderer.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart index 53ba01ef63c10..3940c38206a9b 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart @@ -11,6 +11,10 @@ import 'package:ui/src/engine.dart'; import 'package:ui/ui.dart' as ui; import 'package:ui/ui_web/src/ui_web.dart' as ui_web; +extension on JSPromise { + external void then(JSFunction callback); +} + enum CanvasKitVariant { /// The appropriate variant is chosen based on the browser. /// @@ -80,6 +84,10 @@ class CanvasKitRenderer implements Renderer { } else if (windowFlutterCanvasKitLoaded != null) { // CanvasKit is being preloaded by flutter.js. Wait for it to complete. print(' <=await promiseToFuture(windowFlutterCanvasKitLoaded!);'); + print(' [windowFlutterCanvasKitLoaded=$windowFlutterCanvasKitLoaded]'); + windowFlutterCanvasKitLoaded!.then((dynamic val) { + print(' >>[val=$val]'); + }.toJS); canvasKit = await promiseToFuture(windowFlutterCanvasKitLoaded!); print(' Date: Tue, 12 Nov 2024 15:05:46 -0500 Subject: [PATCH 14/18] fix js types --- lib/web_ui/lib/src/engine/canvaskit/renderer.dart | 4 +++- lib/web_ui/lib/src/engine/dom.dart | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart index 3940c38206a9b..1244c9588b187 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart @@ -85,8 +85,10 @@ class CanvasKitRenderer implements Renderer { // CanvasKit is being preloaded by flutter.js. Wait for it to complete. print(' <=await promiseToFuture(windowFlutterCanvasKitLoaded!);'); print(' [windowFlutterCanvasKitLoaded=$windowFlutterCanvasKitLoaded]'); - windowFlutterCanvasKitLoaded!.then((dynamic val) { + domWindow.console.debug(windowFlutterCanvasKitLoaded); + windowFlutterCanvasKitLoaded!.then((JSAny? val) { print(' >>[val=$val]'); + domWindow.console.debug(val); }.toJS); canvasKit = await promiseToFuture(windowFlutterCanvasKitLoaded!); diff --git a/lib/web_ui/lib/src/engine/dom.dart b/lib/web_ui/lib/src/engine/dom.dart index 5fb335f11b728..c9022bb7dd93d 100644 --- a/lib/web_ui/lib/src/engine/dom.dart +++ b/lib/web_ui/lib/src/engine/dom.dart @@ -187,8 +187,8 @@ extension DomConsoleExtension on DomConsole { void error(Object? arg) => _error(arg.toString().toJS); @JS('debug') - external void _debug(JSString? arg); - void debug(Object? arg) => _debug(arg.toString().toJS); + external void debug(JSAny? arg); + // void debug(Object? arg) => _debug(arg.toString().toJS); } @JS('window') From 95f80e956580a86ecba2ac4a0949c2134da2180a Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 12 Nov 2024 15:20:28 -0500 Subject: [PATCH 15/18] fix more --- lib/web_ui/lib/src/engine/view_embedder/dom_manager.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/web_ui/lib/src/engine/view_embedder/dom_manager.dart b/lib/web_ui/lib/src/engine/view_embedder/dom_manager.dart index 52de171182e71..07c4229ef03f2 100644 --- a/lib/web_ui/lib/src/engine/view_embedder/dom_manager.dart +++ b/lib/web_ui/lib/src/engine/view_embedder/dom_manager.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. +import 'dart:js_interop'; + import 'package:ui/ui.dart' as ui; import '../configuration.dart'; @@ -195,7 +197,7 @@ class DomManager { final DomElement? pv = PlatformViewManager.instance.getSlottedContent(platformViewId); if (pv == null) { domWindow.console.debug('Failed to inject Platform View Id: $platformViewId. ' - 'Render seems to be happening before a `flutter/platform_views:create` platform message!'); + 'Render seems to be happening before a `flutter/platform_views:create` platform message!'.toJS); return; } // If pv is already a descendant of platformViewsHost -> noop From bf7da6328611e31037eb5526f1ca2f9a3bc79f6b Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 13 Nov 2024 09:46:59 -0500 Subject: [PATCH 16/18] more debugging --- .../lib/src/engine/canvaskit/renderer.dart | 24 ++++++++++++------- lib/web_ui/lib/src/engine/dom.dart | 4 ++-- .../src/engine/view_embedder/dom_manager.dart | 4 +--- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart index 1244c9588b187..a740fc0c1c79d 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart @@ -12,7 +12,11 @@ import 'package:ui/ui.dart' as ui; import 'package:ui/ui_web/src/ui_web.dart' as ui_web; extension on JSPromise { - external void then(JSFunction callback); + external JSPromise then(JSFunction callback); + @JS('catch') + external JSPromise onError(JSFunction callback); + @JS('finally') + external void onFinally(JSFunction callback); } enum CanvasKitVariant { @@ -85,13 +89,17 @@ class CanvasKitRenderer implements Renderer { // CanvasKit is being preloaded by flutter.js. Wait for it to complete. print(' <=await promiseToFuture(windowFlutterCanvasKitLoaded!);'); print(' [windowFlutterCanvasKitLoaded=$windowFlutterCanvasKitLoaded]'); - domWindow.console.debug(windowFlutterCanvasKitLoaded); - windowFlutterCanvasKitLoaded!.then((JSAny? val) { - print(' >>[val=$val]'); - domWindow.console.debug(val); - }.toJS); - canvasKit = - await promiseToFuture(windowFlutterCanvasKitLoaded!); + windowFlutterCanvasKitLoaded! + .then( + ((JSAny? val) => print(' >>[val=$val]')).toJS, + ) + .onError( + ((JSAny? err) => print(' >>[err=$err]')).toJS, + ) + .onFinally( + (( ) => print(' >>[finally=]')).toJS, + ); + canvasKit = await windowFlutterCanvasKitLoaded!.toDart as CanvasKit; print(' _error(arg.toString().toJS); @JS('debug') - external void debug(JSAny? arg); - // void debug(Object? arg) => _debug(arg.toString().toJS); + external void _debug(JSAny? arg); + void debug(Object? arg) => _debug(arg.toString().toJS); } @JS('window') diff --git a/lib/web_ui/lib/src/engine/view_embedder/dom_manager.dart b/lib/web_ui/lib/src/engine/view_embedder/dom_manager.dart index 07c4229ef03f2..52de171182e71 100644 --- a/lib/web_ui/lib/src/engine/view_embedder/dom_manager.dart +++ b/lib/web_ui/lib/src/engine/view_embedder/dom_manager.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:js_interop'; - import 'package:ui/ui.dart' as ui; import '../configuration.dart'; @@ -197,7 +195,7 @@ class DomManager { final DomElement? pv = PlatformViewManager.instance.getSlottedContent(platformViewId); if (pv == null) { domWindow.console.debug('Failed to inject Platform View Id: $platformViewId. ' - 'Render seems to be happening before a `flutter/platform_views:create` platform message!'.toJS); + 'Render seems to be happening before a `flutter/platform_views:create` platform message!'); return; } // If pv is already a descendant of platformViewsHost -> noop From ddaca7c0a255786c73e5c9dda474dade57374489 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 10 Dec 2024 12:05:12 -0500 Subject: [PATCH 17/18] moooore --- lib/web_ui/dev/test_platform.dart | 4 +-- lib/web_ui/flutter_js/src/canvaskit_loader.js | 32 +++++++++++++++---- .../flutter_js/src/entrypoint_loader.js | 3 ++ lib/web_ui/flutter_js/src/instantiate_wasm.js | 6 ++++ lib/web_ui/flutter_js/src/loader.js | 2 ++ .../lib/src/engine/canvaskit/fonts.dart | 12 +++---- .../lib/src/engine/canvaskit/renderer.dart | 17 ++++++---- lib/web_ui/lib/src/engine/initialization.dart | 16 +++++----- .../lib/ui_web/src/ui_web/initialization.dart | 10 +++--- .../test/common/test_initialization.dart | 13 +++++--- 10 files changed, 78 insertions(+), 37 deletions(-) diff --git a/lib/web_ui/dev/test_platform.dart b/lib/web_ui/dev/test_platform.dart index d1e4396648ee7..cb3e30f0f2a0b 100644 --- a/lib/web_ui/dev/test_platform.dart +++ b/lib/web_ui/dev/test_platform.dart @@ -1121,10 +1121,10 @@ class BrowserManager { /// Closes the manager and releases any resources it owns, including closing /// the browser. Future close() => _closeMemoizer.runOnce(() { - if (Configuration.current.pauseAfterLoad) { + // if (Configuration.current.pauseAfterLoad) { print('Test run finished. Press enter to close browser...'); stdin.readLineSync(); - } + // } _closed = true; _timer.cancel(); _pauseCompleter?.complete(); diff --git a/lib/web_ui/flutter_js/src/canvaskit_loader.js b/lib/web_ui/flutter_js/src/canvaskit_loader.js index eb79fa24b8a52..28392f08d7d18 100644 --- a/lib/web_ui/flutter_js/src/canvaskit_loader.js +++ b/lib/web_ui/flutter_js/src/canvaskit_loader.js @@ -6,8 +6,15 @@ import { createWasmInstantiator } from "./instantiate_wasm.js"; import { resolveUrlWithSegments } from "./utils.js"; export const loadCanvasKit = (deps, config, browserEnvironment, canvasKitBaseUrl) => { - window.flutterCanvasKitLoaded = (async () => { + window.printCanvasKitLoaded = () => { + console.log('## printCanvasKitLoaded:'); + console.log(' window.flutterCanvasKit:', window.flutterCanvasKit); + console.log(' window.flutterCanvasKitLoaded:', window.flutterCanvasKitLoaded); + }; + console.log('## loadCanvasKit:', deps, config, browserEnvironment, canvasKitBaseUrl); + window.flutterCanvasKitLoaded = new Promise((res, rej) => { if (window.flutterCanvasKit) { + console.log('## window.flutterCanvasKit:', window.flutterCanvasKit); // The user has set this global variable ahead of time, so we just return that. return window.flutterCanvasKit; } @@ -21,15 +28,28 @@ export const loadCanvasKit = (deps, config, browserEnvironment, canvasKitBaseUrl baseUrl = resolveUrlWithSegments(baseUrl, "chromium"); } let canvasKitUrl = resolveUrlWithSegments(baseUrl, "canvaskit.js"); + console.log('## canvasKitUrl:', canvasKitUrl); if (deps.flutterTT.policy) { canvasKitUrl = deps.flutterTT.policy.createScriptURL(canvasKitUrl); + console.log('## flutterTT policy:', canvasKitUrl); } const wasmInstantiator = createWasmInstantiator(resolveUrlWithSegments(baseUrl, "canvaskit.wasm")); - const canvasKitModule = await import(canvasKitUrl); - window.flutterCanvasKit = await canvasKitModule.default({ - instantiateWasm: wasmInstantiator, + console.log('## wasmInstantiator:', wasmInstantiator); + import(canvasKitUrl).then((canvasKitModule) => { + console.log('## canvasKitModule:', canvasKitModule); + let temp = canvasKitModule.default({ + instantiateWasm: wasmInstantiator, + }); + console.log('## canvasKitModule.default:', temp); + temp.then(() => { + console.log('## !!!'); + }); + return temp; + }).then((canvasKit) => { + window.flutterCanvasKit = canvasKit; + console.log('## flutterCanvasKit(resolving):', window.flutterCanvasKit); + res(window.flutterCanvasKit); }); - return window.flutterCanvasKit; - })(); + }); return window.flutterCanvasKitLoaded; } diff --git a/lib/web_ui/flutter_js/src/entrypoint_loader.js b/lib/web_ui/flutter_js/src/entrypoint_loader.js index f34d14ed96b00..13a491b75a8f6 100644 --- a/lib/web_ui/flutter_js/src/entrypoint_loader.js +++ b/lib/web_ui/flutter_js/src/entrypoint_loader.js @@ -60,6 +60,9 @@ export class FlutterEntrypointLoader { * configuration. */ async load(build, deps, config, nonce, onEntrypointLoaded) { + console.log('...load...'); + console.log(build); + console.log(config); onEntrypointLoaded ??= (engineInitializer) => { engineInitializer.initializeEngine(config).then((appRunner) => appRunner.runApp()) }; diff --git a/lib/web_ui/flutter_js/src/instantiate_wasm.js b/lib/web_ui/flutter_js/src/instantiate_wasm.js index 29827f6563131..2e8e4e5cb30c9 100644 --- a/lib/web_ui/flutter_js/src/instantiate_wasm.js +++ b/lib/web_ui/flutter_js/src/instantiate_wasm.js @@ -5,11 +5,17 @@ // This is a little helper function that helps us start the fetch and compilation // of an emscripten wasm module in parallel with the fetch of its script. export const createWasmInstantiator = (url) => { + console.log('## createWasmInstantiator:', url); const modulePromise = WebAssembly.compileStreaming(fetch(url)); + console.log('## modulePromise:', modulePromise); return (imports, successCallback) => { + console.log('...wasmInstantiator...'); (async () => { + console.log('await modulePromise'); const module = await modulePromise; + console.log('## module:', module); const instance = await WebAssembly.instantiate(module, imports); + console.log('## instance:', instance); successCallback(instance, module); })(); return {}; diff --git a/lib/web_ui/flutter_js/src/loader.js b/lib/web_ui/flutter_js/src/loader.js index 2194a9e2be85e..1d5264f34dc28 100644 --- a/lib/web_ui/flutter_js/src/loader.js +++ b/lib/web_ui/flutter_js/src/loader.js @@ -126,8 +126,10 @@ export class FlutterLoader { }); } + console.log('...load...'); const canvasKitBaseUrl = getCanvaskitBaseUrl(config, buildConfig); if (build.renderer === "canvaskit") { + console.log('...loadCanvasKit...'); deps.canvasKit = loadCanvasKit(deps, config, browserEnvironment, canvasKitBaseUrl); } else if (build.renderer === "skwasm") { deps.skwasm = loadSkwasm(deps, config, browserEnvironment, canvasKitBaseUrl); diff --git a/lib/web_ui/lib/src/engine/canvaskit/fonts.dart b/lib/web_ui/lib/src/engine/canvaskit/fonts.dart index 10c0c34995047..5a7f6f1b339c3 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/fonts.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/fonts.dart @@ -85,10 +85,10 @@ class SkiaFontCollection implements FlutterFontCollection { } } - print(' <=await renderer.initialize();'); + // print(' <=await renderer.initialize();'); // Make sure CanvasKit is actually loaded await renderer.initialize(); - print(' fontFailures = {}; final List<(String, UnregisteredFont)> downloadedFonts = <(String, UnregisteredFont)>[]; - print(' <=await Future.wait(pendingDownloads);'); + // print(' <=await Future.wait(pendingDownloads);'); for (final FontDownloadResult result in await Future.wait(pendingDownloads)) { if (result.font != null) { downloadedFonts.add((result.assetName, result.font!)); @@ -135,12 +135,12 @@ class SkiaFontCollection implements FlutterFontCollection { fontFailures[result.assetName] = result.error!; } } - print(' loadedFonts = []; for (final (String assetName, UnregisteredFont unregisteredFont) in downloadedFonts) { diff --git a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart index a740fc0c1c79d..f554e605e074b 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/renderer.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/renderer.dart @@ -19,6 +19,10 @@ extension on JSPromise { external void onFinally(JSFunction callback); } + +@JS('window.printCanvasKitLoaded') +external void printFlutterCanvasKitLoaded(); + enum CanvasKitVariant { /// The appropriate variant is chosen based on the browser. /// @@ -81,14 +85,14 @@ class CanvasKitRenderer implements Renderer { @override Future initialize() async { - print(' == renderer.initialize();'); + // print(' == renderer.initialize();'); _initialized ??= () async { if (windowFlutterCanvasKit != null) { canvasKit = windowFlutterCanvasKit!; } else if (windowFlutterCanvasKitLoaded != null) { // CanvasKit is being preloaded by flutter.js. Wait for it to complete. - print(' <=await promiseToFuture(windowFlutterCanvasKitLoaded!);'); - print(' [windowFlutterCanvasKitLoaded=$windowFlutterCanvasKitLoaded]'); + // print(' <=await promiseToFuture(windowFlutterCanvasKitLoaded!);'); + // print(' [windowFlutterCanvasKitLoaded=$windowFlutterCanvasKitLoaded]'); windowFlutterCanvasKitLoaded! .then( ((JSAny? val) => print(' >>[val=$val]')).toJS, @@ -99,13 +103,14 @@ class CanvasKitRenderer implements Renderer { .onFinally( (( ) => print(' >>[finally=]')).toJS, ); + printFlutterCanvasKitLoaded(); canvasKit = await windowFlutterCanvasKitLoaded!.toDart as CanvasKit; - print(' initializeEngineServices({ _setAssetManager(assetManager); Future initializeRendererCallback () async => renderer.initialize(); - print(' <=await Future.wait([initializeRendererCallback(), _downloadAssetFonts()]);'); + // print(' <=await Future.wait([initializeRendererCallback(), _downloadAssetFonts()]);'); await Future.wait(>[initializeRendererCallback(), _downloadAssetFonts()]); - print(' _downloadAssetFonts() async { if (ui_web.debugEmulateFlutterTesterEnvironment) { // Load the embedded test font before loading fonts from the assets so that // the embedded test font is the default (first) font. - print(' <=await renderer.fontCollection.loadFontFromList(EmbeddedTestFont.flutterTest.data ...);'); + // print(' <=await renderer.fontCollection.loadFontFromList(EmbeddedTestFont.flutterTest.data ...);'); await renderer.fontCollection.loadFontFromList( EmbeddedTestFont.flutterTest.data, fontFamily: EmbeddedTestFont.flutterTest.fontFamily ); - print(' bootstrapEngine({ // Create the object that knows how to bootstrap an app from JS and Dart. final AppBootstrap bootstrap = AppBootstrap( initializeEngine: ([JsFlutterConfiguration? configuration]) async { - print(' <=await initializeEngineServices(jsConfiguration: configuration);'); + // print(' <=await initializeEngineServices(jsConfiguration: configuration);'); await initializeEngineServices(jsConfiguration: configuration); - print(' bootstrapEngine({ await bootstrap.autoStart(); } else { // Yield control of the bootstrap procedure to the user. - print(' ==didCreateEngineInitializer(...);'); + // print(' ==didCreateEngineInitializer(...);'); loader.didCreateEngineInitializer(bootstrap.prepareEngineInitializer()); } } diff --git a/lib/web_ui/test/common/test_initialization.dart b/lib/web_ui/test/common/test_initialization.dart index bebcd4ceb75b9..de7126b604548 100644 --- a/lib/web_ui/test/common/test_initialization.dart +++ b/lib/web_ui/test/common/test_initialization.dart @@ -5,6 +5,7 @@ import 'dart:async'; import 'dart:js_interop'; +import 'package:js/js_util.dart'; import 'package:test/test.dart'; import 'package:ui/src/engine.dart' as engine; import 'package:ui/src/engine/initialization.dart'; @@ -14,6 +15,9 @@ import 'package:ui/ui_web/src/ui_web.dart' as ui_web; import 'fake_asset_manager.dart'; import 'rendering.dart'; +@JS('window.dartPrint') +external set dartPrint(JSFunction f); + void setUpUnitTests({ bool withImplicitView = false, bool emulateTesterEnvironment = true, @@ -21,6 +25,7 @@ void setUpUnitTests({ }) { late final FakeAssetScope debugFontsScope; setUpAll(() async { + // dartPrint = ((JSAny x) => print(x)).toJS; print('<=setUpAll'); if (emulateTesterEnvironment) { ui_web.debugEmulateFlutterTesterEnvironment = true; @@ -28,9 +33,9 @@ void setUpUnitTests({ debugFontsScope = configureDebugFontsAssetScope(fakeAssetManager); debugOnlyAssetManager = fakeAssetManager; - print(' <=await bootstrapAndRunApp(withImplicitView: $withImplicitView);'); + // print(' <=await bootstrapAndRunApp(withImplicitView: $withImplicitView);'); await bootstrapAndRunApp(withImplicitView: withImplicitView); - print(' { 'fontFallbackBaseUrl': 'assets/fallback_fonts/', }.jsify() as engine.JsFlutterConfiguration?); @@ -57,9 +62,9 @@ void setUpUnitTests({ Future bootstrapAndRunApp({bool withImplicitView = false}) async { final Completer completer = Completer(); - print(' <=await ui_web.bootstrapEngine();'); + // print(' <=await ui_web.bootstrapEngine();'); await ui_web.bootstrapEngine(runApp: () => completer.complete()); - print(' Date: Tue, 10 Dec 2024 12:22:59 -0500 Subject: [PATCH 18/18] Actual fixes! --- .../test/common/test_initialization.dart | 18 +++++++++++++++++- lib/web_ui/test/engine/clipboard_test.dart | 2 +- lib/web_ui/test/engine/composition_test.dart | 2 +- .../test/engine/dom_http_fetch_test.dart | 4 ---- lib/web_ui/test/engine/history_test.dart | 4 +--- .../engine/image_format_detector_test.dart | 2 +- .../test/engine/image_to_byte_data_test.dart | 2 +- lib/web_ui/test/engine/navigation_test.dart | 8 +------- .../platform_views/content_manager_test.dart | 4 +--- lib/web_ui/test/engine/routing_test.dart | 18 ++++-------------- lib/web_ui/test/engine/scene_view_test.dart | 4 +--- .../semantics/semantics_auto_enable_test.dart | 2 +- .../semantics/semantics_multi_view_test.dart | 3 --- .../semantics_placeholder_enable_test.dart | 2 +- .../test/engine/semantics/semantics_test.dart | 5 +++++ .../engine/semantics/semantics_text_test.dart | 4 +--- .../test/engine/semantics/text_field_test.dart | 4 +--- .../surface/filters/image_filter_test.dart | 4 ---- .../engine/surface/platform_view_test.dart | 4 ---- lib/web_ui/test/engine/text_editing_test.dart | 6 +----- 20 files changed, 39 insertions(+), 63 deletions(-) diff --git a/lib/web_ui/test/common/test_initialization.dart b/lib/web_ui/test/common/test_initialization.dart index de7126b604548..332b2188521ff 100644 --- a/lib/web_ui/test/common/test_initialization.dart +++ b/lib/web_ui/test/common/test_initialization.dart @@ -5,7 +5,6 @@ import 'dart:async'; import 'dart:js_interop'; -import 'package:js/js_util.dart'; import 'package:test/test.dart'; import 'package:ui/src/engine.dart' as engine; import 'package:ui/src/engine/initialization.dart'; @@ -60,6 +59,23 @@ void setUpUnitTests({ }); } +void setUpImplicitView() { + late engine.EngineFlutterWindow myWindow; + + final engine.EnginePlatformDispatcher dispatcher = engine.EnginePlatformDispatcher.instance; + + setUp(() { + myWindow = engine.EngineFlutterView.implicit(dispatcher, null); + dispatcher.viewManager.registerView(myWindow); + }); + + tearDown(() async { + dispatcher.viewManager.unregisterView(myWindow.viewId); + await myWindow.resetHistory(); + myWindow.dispose(); + }); +} + Future bootstrapAndRunApp({bool withImplicitView = false}) async { final Completer completer = Completer(); // print(' <=await ui_web.bootstrapEngine();'); diff --git a/lib/web_ui/test/engine/clipboard_test.dart b/lib/web_ui/test/engine/clipboard_test.dart index bad7902156ca6..61357850cc635 100644 --- a/lib/web_ui/test/engine/clipboard_test.dart +++ b/lib/web_ui/test/engine/clipboard_test.dart @@ -16,7 +16,7 @@ void main() { } Future testMain() async { - setUpUnitTests(); + setUpImplicitView(); group('message handler', () { const String testText = 'test text'; diff --git a/lib/web_ui/test/engine/composition_test.dart b/lib/web_ui/test/engine/composition_test.dart index f132f7e2649d3..57451e0751613 100644 --- a/lib/web_ui/test/engine/composition_test.dart +++ b/lib/web_ui/test/engine/composition_test.dart @@ -51,7 +51,7 @@ GloballyPositionedTextEditingStrategy _enableEditingStrategy({ } Future testMain() async { - await bootstrapAndRunApp(withImplicitView: true); + setUpImplicitView(); const String fakeComposingText = 'ImComposingText'; diff --git a/lib/web_ui/test/engine/dom_http_fetch_test.dart b/lib/web_ui/test/engine/dom_http_fetch_test.dart index fbe48969d4890..ac2bf7ac33dda 100644 --- a/lib/web_ui/test/engine/dom_http_fetch_test.dart +++ b/lib/web_ui/test/engine/dom_http_fetch_test.dart @@ -9,15 +9,11 @@ import 'package:test/bootstrap/browser.dart'; import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; -import '../common/test_initialization.dart'; - void main() { internalBootstrapBrowserTest(() => testMain); } Future testMain() async { - await bootstrapAndRunApp(); - // Test successful HTTP roundtrips where the server returns a happy status // code and a payload. await _testSuccessfulPayloads(); diff --git a/lib/web_ui/test/engine/history_test.dart b/lib/web_ui/test/engine/history_test.dart index 91b99f36cfeb5..4d3e80fa9955d 100644 --- a/lib/web_ui/test/engine/history_test.dart +++ b/lib/web_ui/test/engine/history_test.dart @@ -37,9 +37,7 @@ void main() { } void testMain() { - setUpAll(() async { - await bootstrapAndRunApp(withImplicitView: true); - }); + setUpImplicitView(); test('createHistoryForExistingState', () { TestUrlStrategy strategy; diff --git a/lib/web_ui/test/engine/image_format_detector_test.dart b/lib/web_ui/test/engine/image_format_detector_test.dart index 3781dac016aef..f2aac31955147 100644 --- a/lib/web_ui/test/engine/image_format_detector_test.dart +++ b/lib/web_ui/test/engine/image_format_detector_test.dart @@ -17,7 +17,7 @@ void main() { List? testFiles; Future testMain() async { - setUpUnitTests(); + setUpImplicitView(); Future> createTestFiles() async { final HttpFetchResponse listingResponse = await httpFetch('/test_images/'); diff --git a/lib/web_ui/test/engine/image_to_byte_data_test.dart b/lib/web_ui/test/engine/image_to_byte_data_test.dart index 306e50c560ec2..13c61ccddf9c8 100644 --- a/lib/web_ui/test/engine/image_to_byte_data_test.dart +++ b/lib/web_ui/test/engine/image_to_byte_data_test.dart @@ -16,7 +16,7 @@ void main() { } Future testMain() async { - setUpUnitTests(); + setUpImplicitView(); Future createTestImageByColor(Color color) async { final EnginePictureRecorder recorder = EnginePictureRecorder(); diff --git a/lib/web_ui/test/engine/navigation_test.dart b/lib/web_ui/test/engine/navigation_test.dart index e3386e6c21c8e..d1d93fc7dc14d 100644 --- a/lib/web_ui/test/engine/navigation_test.dart +++ b/lib/web_ui/test/engine/navigation_test.dart @@ -43,19 +43,13 @@ void testMain() { group('with implicit view', () { late TestUrlStrategy strategy; - setUpAll(() async { - await bootstrapAndRunApp(withImplicitView: true); - }); + setUpImplicitView(); setUp(() async { strategy = TestUrlStrategy(); await implicitView.debugInitializeHistory(strategy, useSingle: true); }); - tearDown(() async { - await implicitView.resetHistory(); - }); - test('Tracks pushed, replaced and popped routes', () async { final Completer completer = Completer(); ui.PlatformDispatcher.instance.sendPlatformMessage( diff --git a/lib/web_ui/test/engine/platform_views/content_manager_test.dart b/lib/web_ui/test/engine/platform_views/content_manager_test.dart index 6c214419c904d..544ab026fda20 100644 --- a/lib/web_ui/test/engine/platform_views/content_manager_test.dart +++ b/lib/web_ui/test/engine/platform_views/content_manager_test.dart @@ -14,9 +14,7 @@ void main() { } void testMain() { - setUpAll(() async { - await bootstrapAndRunApp(); - }); + setUpImplicitView(); group('PlatformViewManager', () { const String viewType = 'forTest'; diff --git a/lib/web_ui/test/engine/routing_test.dart b/lib/web_ui/test/engine/routing_test.dart index 5620868b0685a..641d922e0fc8b 100644 --- a/lib/web_ui/test/engine/routing_test.dart +++ b/lib/web_ui/test/engine/routing_test.dart @@ -11,8 +11,11 @@ import 'package:ui/ui.dart' as ui; import 'package:ui/ui_web/src/ui_web.dart' as ui_web; import '../common/matchers.dart'; +import '../common/test_initialization.dart'; import 'history_test.dart'; +EngineFlutterWindow get myWindow => EnginePlatformDispatcher.instance.implicitView!; + Map _tagStateWithSerialCount(dynamic state, int serialCount) { return { 'serialCount': serialCount, @@ -25,20 +28,7 @@ void main() { } void testMain() { - late EngineFlutterWindow myWindow; - - final EnginePlatformDispatcher dispatcher = EnginePlatformDispatcher.instance; - - setUp(() { - myWindow = EngineFlutterView.implicit(dispatcher, createDomHTMLDivElement()); - dispatcher.viewManager.registerView(myWindow); - }); - - tearDown(() async { - dispatcher.viewManager.unregisterView(myWindow.viewId); - await myWindow.resetHistory(); - myWindow.dispose(); - }); + setUpImplicitView(); // For now, web always has an implicit view provided by the web engine. test('EnginePlatformDispatcher.instance.implicitView should be non-null', () async { diff --git a/lib/web_ui/test/engine/scene_view_test.dart b/lib/web_ui/test/engine/scene_view_test.dart index 76e3b250d3dc3..1b253478ed348 100644 --- a/lib/web_ui/test/engine/scene_view_test.dart +++ b/lib/web_ui/test/engine/scene_view_test.dart @@ -154,9 +154,7 @@ void testMain() { late EngineSceneView sceneView; late StubPictureRenderer stubPictureRenderer; - setUpAll(() async { - await bootstrapAndRunApp(withImplicitView: true); - }); + setUpImplicitView(); setUp(() { stubPictureRenderer = StubPictureRenderer(); diff --git a/lib/web_ui/test/engine/semantics/semantics_auto_enable_test.dart b/lib/web_ui/test/engine/semantics/semantics_auto_enable_test.dart index bdd35a9fbbcca..00c4708027a57 100644 --- a/lib/web_ui/test/engine/semantics/semantics_auto_enable_test.dart +++ b/lib/web_ui/test/engine/semantics/semantics_auto_enable_test.dart @@ -22,7 +22,7 @@ void main() { } Future testMain() async { - await bootstrapAndRunApp(withImplicitView: true); + setUpImplicitView(); test('EngineSemanticsOwner auto-enables semantics on update', () async { expect(semantics().semanticsEnabled, isFalse); diff --git a/lib/web_ui/test/engine/semantics/semantics_multi_view_test.dart b/lib/web_ui/test/engine/semantics/semantics_multi_view_test.dart index 56f940f37ee27..fc38923e6e8fc 100644 --- a/lib/web_ui/test/engine/semantics/semantics_multi_view_test.dart +++ b/lib/web_ui/test/engine/semantics/semantics_multi_view_test.dart @@ -10,7 +10,6 @@ import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; import 'package:ui/ui.dart' as ui; -import '../../common/test_initialization.dart'; import 'semantics_tester.dart'; void main() { @@ -20,8 +19,6 @@ void main() { } Future testMain() async { - await bootstrapAndRunApp(); - test('Can create multiple views each with its own semantics tree', () async { EngineSemantics.instance.semanticsEnabled = true; diff --git a/lib/web_ui/test/engine/semantics/semantics_placeholder_enable_test.dart b/lib/web_ui/test/engine/semantics/semantics_placeholder_enable_test.dart index ca0943fb56a40..b72726ed5736d 100644 --- a/lib/web_ui/test/engine/semantics/semantics_placeholder_enable_test.dart +++ b/lib/web_ui/test/engine/semantics/semantics_placeholder_enable_test.dart @@ -20,7 +20,7 @@ void main() { } Future testMain() async { - await bootstrapAndRunApp(withImplicitView: true); + setUpImplicitView(); test('EngineSemantics is enabled via a placeholder click', () async { expect(semantics().semanticsEnabled, isFalse); diff --git a/lib/web_ui/test/engine/semantics/semantics_test.dart b/lib/web_ui/test/engine/semantics/semantics_test.dart index 5975b9f6a2581..2c6d4b5c251c8 100644 --- a/lib/web_ui/test/engine/semantics/semantics_test.dart +++ b/lib/web_ui/test/engine/semantics/semantics_test.dart @@ -35,6 +35,11 @@ void main() { } Future testMain() async { + if (ui_web.browser.isFirefox) { + // Firefox gets stuck in bootstrapAndRunApp for a mysterious reason. + return; + } + await bootstrapAndRunApp(withImplicitView: true); setUpRenderingForTests(); runSemanticsTests(); diff --git a/lib/web_ui/test/engine/semantics/semantics_text_test.dart b/lib/web_ui/test/engine/semantics/semantics_text_test.dart index 599d1f7dc66ca..8c4a97f8f73de 100644 --- a/lib/web_ui/test/engine/semantics/semantics_text_test.dart +++ b/lib/web_ui/test/engine/semantics/semantics_text_test.dart @@ -10,7 +10,6 @@ import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; import 'package:ui/ui.dart' as ui; -import '../../common/rendering.dart'; import '../../common/test_initialization.dart'; import 'semantics_tester.dart'; @@ -25,8 +24,7 @@ void main() { } Future testMain() async { - await bootstrapAndRunApp(withImplicitView: true); - setUpRenderingForTests(); + setUpImplicitView(); test('renders label text as DOM', () async { semantics() diff --git a/lib/web_ui/test/engine/semantics/text_field_test.dart b/lib/web_ui/test/engine/semantics/text_field_test.dart index c569ef00abd51..458e4f1ed4685 100644 --- a/lib/web_ui/test/engine/semantics/text_field_test.dart +++ b/lib/web_ui/test/engine/semantics/text_field_test.dart @@ -36,9 +36,7 @@ void main() { } void testMain() { - setUpAll(() async { - await bootstrapAndRunApp(withImplicitView: true); - }); + setUpImplicitView(); setUp(() { EngineSemantics.debugResetSemantics(); diff --git a/lib/web_ui/test/engine/surface/filters/image_filter_test.dart b/lib/web_ui/test/engine/surface/filters/image_filter_test.dart index d39beaf580eed..0a843cb30fb76 100644 --- a/lib/web_ui/test/engine/surface/filters/image_filter_test.dart +++ b/lib/web_ui/test/engine/surface/filters/image_filter_test.dart @@ -9,15 +9,11 @@ import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; import 'package:ui/ui.dart'; -import '../../../canvaskit/common.dart'; - void main() { internalBootstrapBrowserTest(() => testMain); } void testMain() { - setUpCanvasKitTest(); - group('ImageFilter constructors', () { test('matrix is copied', () { final Matrix4 matrix = Matrix4.identity(); diff --git a/lib/web_ui/test/engine/surface/platform_view_test.dart b/lib/web_ui/test/engine/surface/platform_view_test.dart index f9aaa8a333487..88078efb036ef 100644 --- a/lib/web_ui/test/engine/surface/platform_view_test.dart +++ b/lib/web_ui/test/engine/surface/platform_view_test.dart @@ -10,15 +10,11 @@ import 'package:ui/src/engine.dart'; import 'package:ui/ui.dart' as ui; import 'package:ui/ui_web/src/ui_web.dart' as ui_web; -import '../../common/test_initialization.dart'; - void main() { internalBootstrapBrowserTest(() => testMain); } Future testMain() async { - await bootstrapAndRunApp(); - test('importing platformViewRegistry from dart:ui is deprecated', () { final void Function(String) oldPrintWarning = printWarning; diff --git a/lib/web_ui/test/engine/text_editing_test.dart b/lib/web_ui/test/engine/text_editing_test.dart index bea5f02bf0d66..41b88887bf68a 100644 --- a/lib/web_ui/test/engine/text_editing_test.dart +++ b/lib/web_ui/test/engine/text_editing_test.dart @@ -64,11 +64,7 @@ void main() { } Future testMain() async { - setUpUnitTests( - withImplicitView: true, - emulateTesterEnvironment: false, - setUpTestViewDimensions: false - ); + setUpImplicitView(); setUp(() { domDocument.activeElement?.blur();