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 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..24bd22352fb68 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,8 +2696,10 @@ const String _kFullCanvasKitJsFileName = 'canvaskit.js'; const String _kChromiumCanvasKitJsFileName = 'chromium/canvaskit.js'; String get _canvasKitBaseUrl => configuration.canvasKitBaseUrl; -List get _canvasKitJsFileNames { - switch (configuration.canvasKitVariant) { + +@visibleForTesting +List getCanvasKitJsFileNames(CanvasKitVariant variant) { + switch (variant) { case CanvasKitVariant.auto: return [ if (_enableCanvasKitChromiumInAutoMode) _kChromiumCanvasKitJsFileName, @@ -2713,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 39ef01da27299..647d0627d891b 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,49 @@ void _paragraphTests() { expect(surface, isNotNull); }, skip: isFirefox); // Intended: Headless firefox has no webgl support https://github.com/flutter/flutter/issues/109265 + group('getCanvasKitJsFileNames', () { + late dynamic oldV8BreakIterator = v8BreakIterator; + setUp(() { + oldV8BreakIterator = v8BreakIterator; + }); + tearDown(() { + v8BreakIterator = oldV8BreakIterator; + debugResetBrowserSupportsImageDecoder(); + }); + + test('in Chromium-based browsers', () { + v8BreakIterator = Object(); // Any non-null value. + browserSupportsImageDecoder = true; + + expect(getCanvasKitJsFileNames(CanvasKitVariant.full), ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), ['chromium/canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), [ + 'chromium/canvaskit.js', + 'canvaskit.js', + ]); + }); + + test('in other browsers', () { + v8BreakIterator = null; + browserSupportsImageDecoder = true; + expect(getCanvasKitJsFileNames(CanvasKitVariant.full), ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), ['chromium/canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), ['canvaskit.js']); + + v8BreakIterator = Object(); + browserSupportsImageDecoder = false; + expect(getCanvasKitJsFileNames(CanvasKitVariant.full), ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), ['chromium/canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), ['canvaskit.js']); + + v8BreakIterator = null; + browserSupportsImageDecoder = false; + expect(getCanvasKitJsFileNames(CanvasKitVariant.full), ['canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), ['chromium/canvaskit.js']); + expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), ['canvaskit.js']); + }); + }); + test('respects actual location of canvaskit files', () { expect( canvasKitWasmModuleUrl('canvaskit.wasm', 'https://example.com/'), @@ -1849,3 +1893,10 @@ void _paragraphTests() { ); }); } + + +@JS('window.Intl.v8BreakIterator') +external dynamic get v8BreakIterator; + +@JS('window.Intl.v8BreakIterator') +external set v8BreakIterator(dynamic x);