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
3 changes: 2 additions & 1 deletion lib/web_ui/lib/src/engine/browser_detection.dart
Original file line number Diff line number Diff line change
Expand Up @@ -268,4 +268,5 @@ int _detectWebGLVersion() {
}

/// Whether the current browser supports the Chromium variant of CanvasKit.
bool get browserSupportsCanvaskitChromium => domIntl.v8BreakIterator != null;
bool get browserSupportsCanvaskitChromium =>
domIntl.v8BreakIterator != null && domIntl.Segmenter != null;
17 changes: 17 additions & 0 deletions lib/web_ui/test/engine/browser_detect_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -158,11 +158,15 @@ void testMain() {

group('browserSupportsCanvasKitChromium', () {
late dynamic oldV8BreakIterator = v8BreakIterator;
late dynamic oldIntlSegmenter = intlSegmenter;

setUp(() {
oldV8BreakIterator = v8BreakIterator;
oldIntlSegmenter = intlSegmenter;
});
tearDown(() {
v8BreakIterator = oldV8BreakIterator;
intlSegmenter = oldIntlSegmenter;
debugResetBrowserSupportsImageDecoder();
});

Expand Down Expand Up @@ -195,6 +199,13 @@ void testMain() {

expect(browserSupportsCanvaskitChromium, isFalse);
});

test('Detect browsers that support v8BreakIterator but no Intl.Segmenter', () {
v8BreakIterator = Object(); // Any non-null value.
intlSegmenter = null;

expect(browserSupportsCanvaskitChromium, isFalse);
});
});

group('OffscreenCanvas', () {
Expand All @@ -211,3 +222,9 @@ external dynamic get v8BreakIterator;

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

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

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