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);