Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -2699,7 +2696,9 @@ const String _kFullCanvasKitJsFileName = 'canvaskit.js';
const String _kChromiumCanvasKitJsFileName = 'chromium/canvaskit.js';

String get _canvasKitBaseUrl => configuration.canvasKitBaseUrl;
List<String> get _canvasKitJsFileNames {

@visibleForTesting
List<String> get canvasKitJsFileNames {
switch (configuration.canvasKitVariant) {
case CanvasKitVariant.auto:
return <String>[
Expand All @@ -2713,7 +2712,7 @@ List<String> get _canvasKitJsFileNames {
}
}
Iterable<String> get _canvasKitJsUrls {
return _canvasKitJsFileNames.map((String filename) => '$_canvasKitBaseUrl$filename');
return canvasKitJsFileNames.map((String filename) => '$_canvasKitBaseUrl$filename');
}
@visibleForTesting
String canvasKitWasmModuleUrl(String file, String canvasKitBase) =>
Expand Down
43 changes: 43 additions & 0 deletions lib/web_ui/test/canvaskit/canvaskit_api_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -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, <String>[
'chromium/canvaskit.js',
'canvaskit.js',
]);
});

test('is not downloaded in other browsers', () {
v8BreakIterator = null;
browserSupportsImageDecoder = true;
expect(canvasKitJsFileNames, <String>['canvaskit.js']);

v8BreakIterator = Object();
browserSupportsImageDecoder = false;
expect(canvasKitJsFileNames, <String>['canvaskit.js']);

v8BreakIterator = null;
browserSupportsImageDecoder = false;
expect(canvasKitJsFileNames, <String>['canvaskit.js']);
});
});

test('respects actual location of canvaskit files', () {
expect(
canvasKitWasmModuleUrl('canvaskit.wasm', 'https://example.com/'),
Expand All @@ -1849,3 +1885,10 @@ void _paragraphTests() {
);
});
}


@JS('window.Intl.v8BreakIterator')
external dynamic get v8BreakIterator;

@JS('window.Intl.v8BreakIterator')
external set v8BreakIterator(dynamic x);