From d882304918590f1b7a0beaf78405ed326bc0f845 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Mon, 20 Mar 2023 13:57:50 -0400 Subject: [PATCH 1/3] [web] Turn on CanvasKit Chromium --- .../src/engine/canvaskit/canvaskit_api.dart | 11 +++-- .../test/canvaskit/canvaskit_api_test.dart | 43 +++++++++++++++++++ 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart index 00c8662ed6422..4f890e36989c3 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart @@ -28,10 +28,7 @@ import 'renderer.dart'; /// Entrypoint into the CanvasKit API. late CanvasKit canvasKit; -// TODO(mdebbar): Turn this on when CanvasKit Chromium is ready. -// Set it to `browserSupportsCanvasKitChromium`. -// https://github.com/flutter/flutter/issues/122329 -const bool _enableCanvasKitChromiumInAutoMode = false; +bool get _enableCanvasKitChromiumInAutoMode => browserSupportsCanvaskitChromium; /// Sets the [CanvasKit] object on `window` so we can use `@JS()` to bind to /// static APIs. @@ -2699,7 +2696,9 @@ const String _kFullCanvasKitJsFileName = 'canvaskit.js'; const String _kChromiumCanvasKitJsFileName = 'chromium/canvaskit.js'; String get _canvasKitBaseUrl => configuration.canvasKitBaseUrl; -List get _canvasKitJsFileNames { + +@visibleForTesting +List get canvasKitJsFileNames { switch (configuration.canvasKitVariant) { case CanvasKitVariant.auto: return [ @@ -2713,7 +2712,7 @@ List get _canvasKitJsFileNames { } } Iterable get _canvasKitJsUrls { - return _canvasKitJsFileNames.map((String filename) => '$_canvasKitBaseUrl$filename'); + return canvasKitJsFileNames.map((String filename) => '$_canvasKitBaseUrl$filename'); } @visibleForTesting String canvasKitWasmModuleUrl(String file, String canvasKitBase) => diff --git a/lib/web_ui/test/canvaskit/canvaskit_api_test.dart b/lib/web_ui/test/canvaskit/canvaskit_api_test.dart index 39ef01da27299..8a0a9c8a5869e 100644 --- a/lib/web_ui/test/canvaskit/canvaskit_api_test.dart +++ b/lib/web_ui/test/canvaskit/canvaskit_api_test.dart @@ -5,6 +5,7 @@ import 'dart:math'; import 'dart:typed_data'; +import 'package:js/js.dart'; import 'package:test/bootstrap/browser.dart'; import 'package:test/test.dart'; @@ -1834,6 +1835,41 @@ void _paragraphTests() { expect(surface, isNotNull); }, skip: isFirefox); // Intended: Headless firefox has no webgl support https://github.com/flutter/flutter/issues/109265 + group('CanvasKit Chromium', () { + late dynamic oldV8BreakIterator = v8BreakIterator; + setUp(() { + oldV8BreakIterator = v8BreakIterator; + }); + tearDown(() { + v8BreakIterator = oldV8BreakIterator; + debugResetBrowserSupportsImageDecoder(); + }); + + test('is downloaded in Chromium-based browsers', () { + v8BreakIterator = Object(); // Any non-null value. + browserSupportsImageDecoder = true; + + expect(canvasKitJsFileNames, [ + 'chromium/canvaskit.js', + 'canvaskit.js', + ]); + }); + + test('is not downloaded in other browsers', () { + v8BreakIterator = null; + browserSupportsImageDecoder = true; + expect(canvasKitJsFileNames, ['canvaskit.js']); + + v8BreakIterator = Object(); + browserSupportsImageDecoder = false; + expect(canvasKitJsFileNames, ['canvaskit.js']); + + v8BreakIterator = null; + browserSupportsImageDecoder = false; + expect(canvasKitJsFileNames, ['canvaskit.js']); + }); + }); + test('respects actual location of canvaskit files', () { expect( canvasKitWasmModuleUrl('canvaskit.wasm', 'https://example.com/'), @@ -1849,3 +1885,10 @@ void _paragraphTests() { ); }); } + + +@JS('window.Intl.v8BreakIterator') +external dynamic get v8BreakIterator; + +@JS('window.Intl.v8BreakIterator') +external set v8BreakIterator(dynamic x); From b0fff43fd582c173227d8fa44a34ede848679564 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 21 Mar 2023 10:31:07 -0400 Subject: [PATCH 2/3] fix tests --- lib/web_ui/dev/test_platform.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/web_ui/dev/test_platform.dart b/lib/web_ui/dev/test_platform.dart index 6f5949c5b46e0..9883da45c8c49 100644 --- a/lib/web_ui/dev/test_platform.dart +++ b/lib/web_ui/dev/test_platform.dart @@ -512,7 +512,10 @@ class BrowserPlatform extends PlatformPlugin { $link From daeefe70b5a7223cc71fcd8325cbd2b68b88c691 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 21 Mar 2023 11:42:03 -0400 Subject: [PATCH 3/3] fix mo tests --- .../src/engine/canvaskit/canvaskit_api.dart | 8 ++++--- .../test/canvaskit/canvaskit_api_test.dart | 22 +++++++++++++------ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart index 4f890e36989c3..24bd22352fb68 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart @@ -2698,8 +2698,8 @@ const String _kChromiumCanvasKitJsFileName = 'chromium/canvaskit.js'; String get _canvasKitBaseUrl => configuration.canvasKitBaseUrl; @visibleForTesting -List get canvasKitJsFileNames { - switch (configuration.canvasKitVariant) { +List getCanvasKitJsFileNames(CanvasKitVariant variant) { + switch (variant) { case CanvasKitVariant.auto: return [ if (_enableCanvasKitChromiumInAutoMode) _kChromiumCanvasKitJsFileName, @@ -2712,7 +2712,9 @@ List get canvasKitJsFileNames { } } Iterable get _canvasKitJsUrls { - return canvasKitJsFileNames.map((String filename) => '$_canvasKitBaseUrl$filename'); + return getCanvasKitJsFileNames(configuration.canvasKitVariant).map( + (String filename) => '$_canvasKitBaseUrl$filename', + ); } @visibleForTesting String canvasKitWasmModuleUrl(String file, String canvasKitBase) => diff --git a/lib/web_ui/test/canvaskit/canvaskit_api_test.dart b/lib/web_ui/test/canvaskit/canvaskit_api_test.dart index 8a0a9c8a5869e..647d0627d891b 100644 --- a/lib/web_ui/test/canvaskit/canvaskit_api_test.dart +++ b/lib/web_ui/test/canvaskit/canvaskit_api_test.dart @@ -1835,7 +1835,7 @@ void _paragraphTests() { expect(surface, isNotNull); }, skip: isFirefox); // Intended: Headless firefox has no webgl support https://github.com/flutter/flutter/issues/109265 - group('CanvasKit Chromium', () { + group('getCanvasKitJsFileNames', () { late dynamic oldV8BreakIterator = v8BreakIterator; setUp(() { oldV8BreakIterator = v8BreakIterator; @@ -1845,28 +1845,36 @@ void _paragraphTests() { debugResetBrowserSupportsImageDecoder(); }); - test('is downloaded in Chromium-based browsers', () { + test('in Chromium-based browsers', () { v8BreakIterator = Object(); // Any non-null value. browserSupportsImageDecoder = true; - expect(canvasKitJsFileNames, [ + expect(getCanvasKitJsFileNames(CanvasKitVariant.full), ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), ['chromium/canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), [ 'chromium/canvaskit.js', 'canvaskit.js', ]); }); - test('is not downloaded in other browsers', () { + test('in other browsers', () { v8BreakIterator = null; browserSupportsImageDecoder = true; - expect(canvasKitJsFileNames, ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.full), ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), ['chromium/canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), ['canvaskit.js']); v8BreakIterator = Object(); browserSupportsImageDecoder = false; - expect(canvasKitJsFileNames, ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.full), ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), ['chromium/canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), ['canvaskit.js']); v8BreakIterator = null; browserSupportsImageDecoder = false; - expect(canvasKitJsFileNames, ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.full), ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), ['chromium/canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), ['canvaskit.js']); }); });