From a7801d7971feade5172640615b7e56394d778721 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Tue, 12 Dec 2023 17:50:54 +0000 Subject: [PATCH] Manual roll of Dart SDK from 82c4571bb2de to a677378ae254 Includes type annotations for JSArray/JSPromise (see https://dart-review.googlesource.com/c/sdk/+/337923) --- DEPS | 2 +- ci/licenses_golden/licenses_dart | 2 +- .../src/engine/canvaskit/canvaskit_api.dart | 14 ++--- .../engine/canvaskit/image_web_codecs.dart | 2 +- lib/web_ui/lib/src/engine/dom.dart | 60 +++++++++---------- .../lib/src/engine/js_interop/js_promise.dart | 4 +- .../lib/src/engine/platform_dispatcher.dart | 4 +- .../lib/src/engine/safe_browser_api.dart | 9 +-- .../hot_restart_cache_handler.dart | 8 +-- .../engine/surface/scene_builder_test.dart | 2 +- .../hot_restart_cache_handler_test.dart | 4 +- 11 files changed, 56 insertions(+), 55 deletions(-) diff --git a/DEPS b/DEPS index 398f3aca1c81b..cf0d094e5bee6 100644 --- a/DEPS +++ b/DEPS @@ -66,7 +66,7 @@ vars = { # Dart is: https://github.com/dart-lang/sdk/blob/main/DEPS # You can use //tools/dart/create_updated_flutter_deps.py to produce # updated revision list of existing dependencies. - 'dart_revision': '82c4571bb2ded15cca71862158f2a7a78ee9127f', + 'dart_revision': 'a677378ae25424f8e74b2f750e879458e9a17488', # WARNING: DO NOT EDIT MANUALLY # The lines between blank lines above and below are generated by a script. See create_updated_flutter_deps.py diff --git a/ci/licenses_golden/licenses_dart b/ci/licenses_golden/licenses_dart index 88d6634b82166..12694e6ce503e 100644 --- a/ci/licenses_golden/licenses_dart +++ b/ci/licenses_golden/licenses_dart @@ -1,4 +1,4 @@ -Signature: fa0827b53a214003c14110498dcee743 +Signature: 9566e23501be49ccdb4d0e710a9b74e7 ==================================================================================================== LIBRARY: dart 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 fea055f16bbec..a0de3717860f8 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart @@ -2942,7 +2942,7 @@ extension SkTextStylePropertiesExtension on SkTextStyleProperties { external set fontStyle(SkFontStyle? value); @JS('shadows') - external set _shadows(JSArray? value); + external set _shadows(JSArray? value); set shadows(List? value) => // TODO(joshualitt): remove this cast when we reify JS types on JS // backends. @@ -2950,7 +2950,7 @@ extension SkTextStylePropertiesExtension on SkTextStyleProperties { _shadows = (value as List?)?.toJS; @JS('fontFeatures') - external set _fontFeatures(JSArray? value); + external set _fontFeatures(JSArray? value); set fontFeatures(List? value) => // TODO(joshualitt): remove this cast when we reify JS types on JS // backends. @@ -2958,7 +2958,7 @@ extension SkTextStylePropertiesExtension on SkTextStyleProperties { _fontFeatures = (value as List?)?.toJS; @JS('fontVariations') - external set _fontVariations(JSArray? value); + external set _fontVariations(JSArray? value); set fontVariations(List? value) => // TODO(joshualitt): remove this cast when we reify JS types on JS // backends. @@ -3200,7 +3200,7 @@ class SkGlyphClusterInfo {} extension SkGlyphClusterInfoExtension on SkGlyphClusterInfo { @JS('graphemeLayoutBounds') - external JSArray get _bounds; + external JSArray get _bounds; @JS('dir') external SkTextDirection get _direction; @@ -3256,7 +3256,7 @@ extension SkParagraphExtension on SkParagraph { double getIdeographicBaseline() => _getIdeographicBaseline().toDartDouble; @JS('getLineMetrics') - external JSArray _getLineMetrics(); + external JSArray _getLineMetrics(); List getLineMetrics() => _getLineMetrics().toDart.cast(); @@ -3289,7 +3289,7 @@ extension SkParagraphExtension on SkParagraph { double getMaxWidth() => _getMaxWidth().toDartDouble; @JS('getRectsForRange') - external JSArray _getRectsForRange( + external JSArray _getRectsForRange( JSNumber start, JSNumber end, SkRectHeightStyle heightStyle, @@ -3304,7 +3304,7 @@ extension SkParagraphExtension on SkParagraph { widthStyle).toDart.cast(); @JS('getRectsForPlaceholders') - external JSArray _getRectsForPlaceholders(); + external JSArray _getRectsForPlaceholders(); List getRectsForPlaceholders() => _getRectsForPlaceholders().toDart.cast(); diff --git a/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart b/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart index 74a06d6cd4d6d..054e7640ef9bf 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart @@ -142,7 +142,7 @@ Future readVideoFramePixelsUnmodified(VideoFrame videoFrame) async { // In dart2wasm, Uint8List is not the same as a JS Uint8Array. So we // explicitly construct the JS object here. final JSUint8Array destination = createUint8ArrayFromLength(size); - final JSPromise copyPromise = videoFrame.copyTo(destination); + final JSPromise copyPromise = videoFrame.copyTo(destination); await promiseToFuture(copyPromise); // In dart2wasm, `toDart` incurs a copy here. On JS backends, this is a diff --git a/lib/web_ui/lib/src/engine/dom.dart b/lib/web_ui/lib/src/engine/dom.dart index cd2d3a46c31e5..21b2a8fe2a467 100644 --- a/lib/web_ui/lib/src/engine/dom.dart +++ b/lib/web_ui/lib/src/engine/dom.dart @@ -110,9 +110,9 @@ extension DomWindowExtension on DomWindow { } @JS('fetch') - external JSPromise _fetch1(JSString url); + external JSPromise _fetch1(JSString url); @JS('fetch') - external JSPromise _fetch2(JSString url, JSAny headers); + external JSPromise _fetch2(JSString url, JSAny headers); // ignore: non_constant_identifier_names external DomURL get URL; @@ -149,7 +149,7 @@ extension DomWindowExtension on DomWindow { external JSVoid _postMessage1(JSAny message, JSString targetOrigin); @JS('postMessage') external JSVoid _postMessage2( - JSAny message, JSString targetOrigin, JSArray messagePorts); + JSAny message, JSString targetOrigin, JSArray messagePorts); void postMessage(Object message, String targetOrigin, [List? messagePorts]) { if (messagePorts == null) { @@ -199,18 +199,18 @@ external DomIntl get domIntl; external DomSymbol get domSymbol; @JS('createImageBitmap') -external JSPromise _createImageBitmap1( +external JSPromise _createImageBitmap1( JSAny source, ); @JS('createImageBitmap') -external JSPromise _createImageBitmap2( +external JSPromise _createImageBitmap2( JSAny source, JSNumber x, JSNumber y, JSNumber width, JSNumber height, ); -JSPromise createImageBitmap(JSAny source, +JSPromise createImageBitmap(JSAny source, [({int x, int y, int width, int height})? bounds]) { if (bounds != null) { return _createImageBitmap2(source, bounds.x.toJS, bounds.y.toJS, @@ -248,7 +248,7 @@ extension DomNavigatorExtension on DomNavigator { String get userAgent => _userAgent.toDart; @JS('languages') - external JSArray? get _languages; + external JSArray? get _languages; List? get languages => _languages?.toDart .map((JSAny? any) => (any! as JSString).toDart) .toList(); @@ -947,7 +947,7 @@ extension DomHTMLImageElementExtension on DomHTMLImageElement { set height(double? value) => _height = value?.toJS; @JS('decode') - external JSPromise _decode(); + external JSPromise _decode(); Future decode() => js_util.promiseToFuture(_decode()); } @@ -1886,16 +1886,16 @@ extension DomResponseExtension on DomResponse { external _DomReadableStream get body; @JS('arrayBuffer') - external JSPromise _arrayBuffer(); + external JSPromise _arrayBuffer(); Future arrayBuffer() => js_util.promiseToFuture(_arrayBuffer()); @JS('json') - external JSPromise _json(); + external JSPromise _json(); Future json() => js_util.promiseToFuture(_json()); @JS('text') - external JSPromise _text(); + external JSPromise _text(); Future text() => js_util.promiseToFuture(_text()); } @@ -1923,7 +1923,7 @@ class _DomStreamReader {} extension _DomStreamReaderExtension on _DomStreamReader { @JS('read') - external JSPromise _read(); + external JSPromise _read(); Future<_DomStreamChunk> read() => js_util.promiseToFuture<_DomStreamChunk>(_read()); } @@ -2045,7 +2045,7 @@ DomFontFace createDomFontFace(String family, Object source, extension DomFontFaceExtension on DomFontFace { @JS('load') - external JSPromise _load(); + external JSPromise _load(); Future load() => js_util.promiseToFuture(_load()); @JS('family') @@ -2166,11 +2166,11 @@ class DomClipboard extends DomEventTarget {} extension DomClipboardExtension on DomClipboard { @JS('readText') - external JSPromise _readText(); + external JSPromise _readText(); Future readText() => js_util.promiseToFuture(_readText()); @JS('writeText') - external JSPromise _writeText(JSString data); + external JSPromise _writeText(JSString data); Future writeText(String data) => js_util.promiseToFuture(_writeText(data.toJS)); } @@ -2340,26 +2340,26 @@ extension DomURLExtension on DomURL { @JS('Blob') @staticInterop class DomBlob { - external factory DomBlob(JSArray parts); + external factory DomBlob(JSArray parts); - external factory DomBlob.withOptions(JSArray parts, JSAny options); + external factory DomBlob.withOptions(JSArray parts, JSAny options); } extension DomBlobExtension on DomBlob { - external JSPromise arrayBuffer(); + external JSPromise arrayBuffer(); } DomBlob createDomBlob(List parts, [Map? options]) { if (options == null) { - return DomBlob(parts.toJSAnyShallow as JSArray); + return DomBlob(parts.toJSAnyShallow as JSArray); } else { return DomBlob.withOptions( - parts.toJSAnyShallow as JSArray, options.toJSAnyDeep); + parts.toJSAnyShallow as JSArray, options.toJSAnyDeep); } } typedef DomMutationCallback = void Function( - JSArray mutation, DomMutationObserver observer); + JSArray mutation, DomMutationObserver observer); @JS('MutationObserver') @staticInterop @@ -2565,7 +2565,7 @@ extension DomPointerEventExtension on DomPointerEvent { double? get tiltY => _tiltY?.toDartDouble; @JS('getCoalescedEvents') - external JSArray _getCoalescedEvents(); + external JSArray _getCoalescedEvents(); List getCoalescedEvents() => _getCoalescedEvents().toDart.cast(); } @@ -2886,11 +2886,11 @@ extension DomOffscreenCanvasExtension on DomOffscreenCanvas { } @JS('convertToBlob') - external JSPromise _convertToBlob1(); + external JSPromise _convertToBlob1(); @JS('convertToBlob') - external JSPromise _convertToBlob2(JSAny options); + external JSPromise _convertToBlob2(JSAny options); Future convertToBlob([Map? options]) { - final JSPromise blob; + final JSPromise blob; if (options == null) { blob = _convertToBlob1(); } else { @@ -3013,7 +3013,7 @@ class DomScreenOrientation extends DomEventTarget {} extension DomScreenOrientationExtension on DomScreenOrientation { @JS('lock') - external JSPromise _lock(JSString orientation); + external JSPromise _lock(JSString orientation); Future lock(String orientation) => js_util.promiseToFuture(_lock(orientation.toJS)); @@ -3163,7 +3163,7 @@ abstract class DomResizeObserver { /// Internally converts the `List` of entries into the expected /// `List` DomResizeObserver? createDomResizeObserver(DomResizeObserverCallbackFn fn) => - DomResizeObserver((JSArray entries, DomResizeObserver observer) { + DomResizeObserver((JSArray entries, DomResizeObserver observer) { fn(entries.toDart.cast(), observer); }.toJS); @@ -3480,7 +3480,7 @@ class DomSegmenter { // TODO(joshualitt): `locales` should really be typed as `JSAny?`, and we // should pass `JSUndefined`. Revisit this after we reify `JSUndefined` on // Dart2Wasm. - external factory DomSegmenter(JSArray locales, JSAny options); + external factory DomSegmenter(JSArray locales, JSAny options); } extension DomSegmenterExtension on DomSegmenter { @@ -3580,7 +3580,7 @@ DomSegmenter createIntlSegmenter({required String granularity}) { @JS('Intl.v8BreakIterator') @staticInterop class DomV8BreakIterator { - external factory DomV8BreakIterator(JSArray locales, JSAny options); + external factory DomV8BreakIterator(JSArray locales, JSAny options); } extension DomV8BreakIteratorExtension on DomV8BreakIterator { @@ -3679,7 +3679,7 @@ bool get browserSupportsCreateImageBitmap => @JS() @staticInterop -extension JSArrayExtension on JSArray { +extension JSArrayExtension on JSArray { external void push(JSAny value); external JSNumber get length; } diff --git a/lib/web_ui/lib/src/engine/js_interop/js_promise.dart b/lib/web_ui/lib/src/engine/js_interop/js_promise.dart index b394a00c36dfc..b535cf94368cb 100644 --- a/lib/web_ui/lib/src/engine/js_interop/js_promise.dart +++ b/lib/web_ui/lib/src/engine/js_interop/js_promise.dart @@ -18,14 +18,14 @@ extension CallExtension on JSFunction { @JS('Promise') external JSAny get _promiseConstructor; -JSPromise createPromise(JSFunction executor) => +JSPromise createPromise(JSFunction executor) => js_util.callConstructor( _promiseConstructor, [executor], ); -JSPromise futureToPromise(Future future) { +JSPromise futureToPromise(Future future) { return createPromise((JSFunction resolver, JSFunction rejecter) { future.then( (T value) => resolver.call(null, value), diff --git a/lib/web_ui/lib/src/engine/platform_dispatcher.dart b/lib/web_ui/lib/src/engine/platform_dispatcher.dart index fb739f7a3c23d..8327b3d3cf26f 100644 --- a/lib/web_ui/lib/src/engine/platform_dispatcher.dart +++ b/lib/web_ui/lib/src/engine/platform_dispatcher.dart @@ -986,8 +986,8 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher { void _addFontSizeObserver() { const String styleAttribute = 'style'; - _fontSizeObserver = - createDomMutationObserver((JSArray mutations, DomMutationObserver _) { + _fontSizeObserver = createDomMutationObserver( + (JSArray mutations, DomMutationObserver _) { for (final JSAny? mutation in mutations.toDart) { final DomMutationRecord record = mutation! as DomMutationRecord; if (record.type == 'attributes' && diff --git a/lib/web_ui/lib/src/engine/safe_browser_api.dart b/lib/web_ui/lib/src/engine/safe_browser_api.dart index 73ba4775ac169..f2674d93e4058 100644 --- a/lib/web_ui/lib/src/engine/safe_browser_api.dart +++ b/lib/web_ui/lib/src/engine/safe_browser_api.dart @@ -214,7 +214,7 @@ extension ImageDecoderExtension on ImageDecoder { external JSBoolean get _complete; bool get complete => _complete.toDart; - external JSPromise decode(DecodeOptions options); + external JSPromise decode(DecodeOptions options); external JSVoid close(); } @@ -288,8 +288,9 @@ extension VideoFrameExtension on VideoFrame { double allocationSize() => _allocationSize().toDartDouble; @JS('copyTo') - external JSPromise _copyTo(JSAny destination); - JSPromise copyTo(Object destination) => _copyTo(destination.toJSAnyShallow); + external JSPromise _copyTo(JSAny destination); + JSPromise copyTo(Object destination) => + _copyTo(destination.toJSAnyShallow); @JS('format') external JSString? get _format; @@ -330,7 +331,7 @@ extension VideoFrameExtension on VideoFrame { class ImageTrackList {} extension ImageTrackListExtension on ImageTrackList { - external JSPromise get ready; + external JSPromise get ready; external ImageTrack? get selectedTrack; } diff --git a/lib/web_ui/lib/src/engine/view_embedder/hot_restart_cache_handler.dart b/lib/web_ui/lib/src/engine/view_embedder/hot_restart_cache_handler.dart index fe714c57ed9f4..eb8be79747b07 100644 --- a/lib/web_ui/lib/src/engine/view_embedder/hot_restart_cache_handler.dart +++ b/lib/web_ui/lib/src/engine/view_embedder/hot_restart_cache_handler.dart @@ -13,10 +13,10 @@ import '../dom.dart'; /// to clear. Delay removal of old visible state to make the /// transition appear smooth. @JS('window.__flutterState') -external JSArray? get _jsHotRestartStore; +external JSArray? get _jsHotRestartStore; @JS('window.__flutterState') -external set _jsHotRestartStore(JSArray? nodes); +external set _jsHotRestartStore(JSArray? nodes); /// Handles [DomElement]s that need to be removed after a hot-restart. /// @@ -36,7 +36,7 @@ class HotRestartCacheHandler { /// Removes every element that was registered prior to the hot-restart from /// the DOM. void _resetHotRestartStore() { - final JSArray? jsStore = _jsHotRestartStore; + final JSArray? jsStore = _jsHotRestartStore; if (jsStore != null) { // We are in a post hot-restart world, clear the elements now. @@ -47,7 +47,7 @@ class HotRestartCacheHandler { } } } - _jsHotRestartStore = JSArray(); + _jsHotRestartStore = JSArray(); } /// Registers a [DomElement] to be removed after hot-restart. diff --git a/lib/web_ui/test/engine/surface/scene_builder_test.dart b/lib/web_ui/test/engine/surface/scene_builder_test.dart index 2a653c019f5ea..3c893ddc2ec6f 100644 --- a/lib/web_ui/test/engine/surface/scene_builder_test.dart +++ b/lib/web_ui/test/engine/surface/scene_builder_test.dart @@ -487,7 +487,7 @@ void testMain() { // Watches DOM mutations and counts deletions and additions to the child // list of the `` element. - final DomMutationObserver observer = createDomMutationObserver((JSArray mutations, _) { + final DomMutationObserver observer = createDomMutationObserver((JSArray mutations, _) { for (final DomMutationRecord record in mutations.toDart.cast()) { actualDeletions.addAll(record.removedNodes!); actualAdditions.addAll(record.addedNodes!); diff --git a/lib/web_ui/test/engine/view_embedder/hot_restart_cache_handler_test.dart b/lib/web_ui/test/engine/view_embedder/hot_restart_cache_handler_test.dart index 934718ce75e70..6c1ccac606082 100644 --- a/lib/web_ui/test/engine/view_embedder/hot_restart_cache_handler_test.dart +++ b/lib/web_ui/test/engine/view_embedder/hot_restart_cache_handler_test.dart @@ -13,10 +13,10 @@ import 'package:ui/src/engine/dom.dart'; import 'package:ui/src/engine/view_embedder/hot_restart_cache_handler.dart'; @JS('window.__flutterState') -external JSArray? get _jsHotRestartStore; +external JSArray? get _jsHotRestartStore; @JS('window.__flutterState') -external set _jsHotRestartStore(JSArray? nodes); +external set _jsHotRestartStore(JSArray? nodes); void main() { internalBootstrapBrowserTest(() => doTests);