Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit d2ddbb5

Browse files
authored
Reland "[web] Turn on CanvasKit Chromium (#40459)" (#40503)
Reland "[web] Turn on CanvasKit Chromium (#40459)"
1 parent 25e3817 commit d2ddbb5

2 files changed

Lines changed: 59 additions & 7 deletions

File tree

lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ import 'renderer.dart';
2828
/// Entrypoint into the CanvasKit API.
2929
late CanvasKit canvasKit;
3030

31-
// TODO(mdebbar): Turn this on when CanvasKit Chromium is ready.
32-
// Set it to `browserSupportsCanvasKitChromium`.
33-
// https://github.com/flutter/flutter/issues/122329
34-
const bool _enableCanvasKitChromiumInAutoMode = false;
31+
bool get _enableCanvasKitChromiumInAutoMode => browserSupportsCanvaskitChromium;
3532

3633
/// Sets the [CanvasKit] object on `window` so we can use `@JS()` to bind to
3734
/// static APIs.
@@ -2699,8 +2696,10 @@ const String _kFullCanvasKitJsFileName = 'canvaskit.js';
26992696
const String _kChromiumCanvasKitJsFileName = 'chromium/canvaskit.js';
27002697

27012698
String get _canvasKitBaseUrl => configuration.canvasKitBaseUrl;
2702-
List<String> get _canvasKitJsFileNames {
2703-
switch (configuration.canvasKitVariant) {
2699+
2700+
@visibleForTesting
2701+
List<String> getCanvasKitJsFileNames(CanvasKitVariant variant) {
2702+
switch (variant) {
27042703
case CanvasKitVariant.auto:
27052704
return <String>[
27062705
if (_enableCanvasKitChromiumInAutoMode) _kChromiumCanvasKitJsFileName,
@@ -2713,7 +2712,9 @@ List<String> get _canvasKitJsFileNames {
27132712
}
27142713
}
27152714
Iterable<String> get _canvasKitJsUrls {
2716-
return _canvasKitJsFileNames.map((String filename) => '$_canvasKitBaseUrl$filename');
2715+
return getCanvasKitJsFileNames(configuration.canvasKitVariant).map(
2716+
(String filename) => '$_canvasKitBaseUrl$filename',
2717+
);
27172718
}
27182719
@visibleForTesting
27192720
String canvasKitWasmModuleUrl(String file, String canvasKitBase) =>

lib/web_ui/test/canvaskit/canvaskit_api_test.dart

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'dart:math';
66
import 'dart:typed_data';
77

8+
import 'package:js/js.dart';
89
import 'package:test/bootstrap/browser.dart';
910
import 'package:test/test.dart';
1011

@@ -1834,6 +1835,49 @@ void _paragraphTests() {
18341835
expect(surface, isNotNull);
18351836
}, skip: isFirefox); // Intended: Headless firefox has no webgl support https://github.com/flutter/flutter/issues/109265
18361837

1838+
group('getCanvasKitJsFileNames', () {
1839+
late dynamic oldV8BreakIterator = v8BreakIterator;
1840+
setUp(() {
1841+
oldV8BreakIterator = v8BreakIterator;
1842+
});
1843+
tearDown(() {
1844+
v8BreakIterator = oldV8BreakIterator;
1845+
debugResetBrowserSupportsImageDecoder();
1846+
});
1847+
1848+
test('in Chromium-based browsers', () {
1849+
v8BreakIterator = Object(); // Any non-null value.
1850+
browserSupportsImageDecoder = true;
1851+
1852+
expect(getCanvasKitJsFileNames(CanvasKitVariant.full), <String>['canvaskit.js']);
1853+
expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), <String>['chromium/canvaskit.js']);
1854+
expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), <String>[
1855+
'chromium/canvaskit.js',
1856+
'canvaskit.js',
1857+
]);
1858+
});
1859+
1860+
test('in other browsers', () {
1861+
v8BreakIterator = null;
1862+
browserSupportsImageDecoder = true;
1863+
expect(getCanvasKitJsFileNames(CanvasKitVariant.full), <String>['canvaskit.js']);
1864+
expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), <String>['chromium/canvaskit.js']);
1865+
expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), <String>['canvaskit.js']);
1866+
1867+
v8BreakIterator = Object();
1868+
browserSupportsImageDecoder = false;
1869+
expect(getCanvasKitJsFileNames(CanvasKitVariant.full), <String>['canvaskit.js']);
1870+
expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), <String>['chromium/canvaskit.js']);
1871+
expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), <String>['canvaskit.js']);
1872+
1873+
v8BreakIterator = null;
1874+
browserSupportsImageDecoder = false;
1875+
expect(getCanvasKitJsFileNames(CanvasKitVariant.full), <String>['canvaskit.js']);
1876+
expect(getCanvasKitJsFileNames(CanvasKitVariant.chromium), <String>['chromium/canvaskit.js']);
1877+
expect(getCanvasKitJsFileNames(CanvasKitVariant.auto), <String>['canvaskit.js']);
1878+
});
1879+
});
1880+
18371881
test('respects actual location of canvaskit files', () {
18381882
expect(
18391883
canvasKitWasmModuleUrl('canvaskit.wasm', 'https://example.com/'),
@@ -1849,3 +1893,10 @@ void _paragraphTests() {
18491893
);
18501894
});
18511895
}
1896+
1897+
1898+
@JS('window.Intl.v8BreakIterator')
1899+
external dynamic get v8BreakIterator;
1900+
1901+
@JS('window.Intl.v8BreakIterator')
1902+
external set v8BreakIterator(dynamic x);

0 commit comments

Comments
 (0)