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

Commit 41e9b4f

Browse files
Don't use a factory constructor on the finalization registry. (#42350)
The factory constructor breaks the Google3 build for some reason. See b/284478971
1 parent ec7b0ae commit 41e9b4f

File tree

4 files changed

+16
-9
lines changed

4 files changed

+16
-9
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import 'package:ui/src/engine.dart';
2020
/// 4. GC decides to perform a GC cycle and collects CkPaint.
2121
/// 5. The finalizer function is called with the SkPaint as the sole argument.
2222
/// 6. We call `delete` on SkPaint.
23-
DomFinalizationRegistry _finalizationRegistry = DomFinalizationRegistry(
23+
DomFinalizationRegistry _finalizationRegistry = createDomFinalizationRegistry(
2424
(UniqueRef<Object> uniq) {
2525
uniq.collect();
2626
}.toJS

lib/web_ui/lib/src/engine/dom.dart

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3438,9 +3438,19 @@ extension DomTextDecoderExtension on DomTextDecoder {
34383438

34393439
@JS('window.FinalizationRegistry')
34403440
@staticInterop
3441-
class DomFinalizationRegistry {
3442-
external factory DomFinalizationRegistry(JSFunction cleanup);
3443-
}
3441+
class DomFinalizationRegistry {}
3442+
3443+
@JS('window.FinalizationRegistry')
3444+
external JSAny? get _finalizationRegistryConstructor;
3445+
3446+
// Note: We don't use a factory constructor here because there is an issue in
3447+
// dart2js that causes a crash in the Google3 build if we do use a factory
3448+
// constructor. See b/284478971
3449+
DomFinalizationRegistry createDomFinalizationRegistry(JSFunction cleanup) =>
3450+
js_util.callConstructor(
3451+
_finalizationRegistryConstructor!.toObjectShallow,
3452+
<Object>[cleanup]
3453+
);
34443454

34453455
extension DomFinalizationRegistryExtension on DomFinalizationRegistry {
34463456
@JS('register')
@@ -3461,9 +3471,6 @@ extension DomFinalizationRegistryExtension on DomFinalizationRegistry {
34613471
void unregister(Object token) => _unregister(token.toJSAnyShallow);
34623472
}
34633473

3464-
@JS('window.FinalizationRegistry')
3465-
external JSAny? get _finalizationRegistryConstructor;
3466-
34673474
/// Whether the current browser supports `FinalizationRegistry`.
34683475
bool browserSupportsFinalizationRegistry =
34693476
_finalizationRegistryConstructor != null;

lib/web_ui/lib/src/engine/skwasm/skwasm_impl/memory.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ typedef DisposeFunction<T extends NativeType> = void Function(Pointer<T>);
2828

2929
class SkwasmFinalizationRegistry<T extends NativeType> {
3030
SkwasmFinalizationRegistry(this.dispose)
31-
: registry = DomFinalizationRegistry(((JSNumber address) =>
31+
: registry = createDomFinalizationRegistry(((JSNumber address) =>
3232
dispose(Pointer<T>.fromAddress(address.toDart.toInt()))
3333
).toJS);
3434

lib/web_ui/test/canvaskit/canvaskit_api_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1907,7 +1907,7 @@ void _paragraphTests() {
19071907
// FinalizationRegistry because it depends on GC, which cannot be controlled,
19081908
// So the test simply tests that a FinalizationRegistry can be constructed
19091909
// and its `register` method can be called.
1910-
final DomFinalizationRegistry registry = DomFinalizationRegistry((String arg) {}.toJS);
1910+
final DomFinalizationRegistry registry = createDomFinalizationRegistry((String arg) {}.toJS);
19111911
registry.register(Object(), Object());
19121912
});
19131913
}

0 commit comments

Comments
 (0)