Unverified Commit 3c2cd015 authored by Polina Cherkasova's avatar Polina Cherkasova Committed by GitHub

Inspector should not hold callback from garbage collection. (#130436)

parent 0e543889
...@@ -784,7 +784,6 @@ mixin WidgetInspectorService { ...@@ -784,7 +784,6 @@ mixin WidgetInspectorService {
bool _trackRebuildDirtyWidgets = false; bool _trackRebuildDirtyWidgets = false;
bool _trackRepaintWidgets = false; bool _trackRepaintWidgets = false;
late RegisterServiceExtensionCallback _registerServiceExtensionCallback;
/// Registers a service extension method with the given name (full /// Registers a service extension method with the given name (full
/// name "ext.flutter.inspector.name"). /// name "ext.flutter.inspector.name").
/// ///
...@@ -797,8 +796,9 @@ mixin WidgetInspectorService { ...@@ -797,8 +796,9 @@ mixin WidgetInspectorService {
void registerServiceExtension({ void registerServiceExtension({
required String name, required String name,
required ServiceExtensionCallback callback, required ServiceExtensionCallback callback,
required RegisterServiceExtensionCallback registerExtension,
}) { }) {
_registerServiceExtensionCallback( registerExtension(
name: 'inspector.$name', name: 'inspector.$name',
callback: callback, callback: callback,
); );
...@@ -809,12 +809,14 @@ mixin WidgetInspectorService { ...@@ -809,12 +809,14 @@ mixin WidgetInspectorService {
void _registerSignalServiceExtension({ void _registerSignalServiceExtension({
required String name, required String name,
required FutureOr<Object?> Function() callback, required FutureOr<Object?> Function() callback,
required RegisterServiceExtensionCallback registerExtension,
}) { }) {
registerServiceExtension( registerServiceExtension(
name: name, name: name,
callback: (Map<String, String> parameters) async { callback: (Map<String, String> parameters) async {
return <String, Object?>{'result': await callback()}; return <String, Object?>{'result': await callback()};
}, },
registerExtension: registerExtension,
); );
} }
...@@ -827,12 +829,14 @@ mixin WidgetInspectorService { ...@@ -827,12 +829,14 @@ mixin WidgetInspectorService {
void _registerObjectGroupServiceExtension({ void _registerObjectGroupServiceExtension({
required String name, required String name,
required FutureOr<Object?> Function(String objectGroup) callback, required FutureOr<Object?> Function(String objectGroup) callback,
required RegisterServiceExtensionCallback registerExtension,
}) { }) {
registerServiceExtension( registerServiceExtension(
name: name, name: name,
callback: (Map<String, String> parameters) async { callback: (Map<String, String> parameters) async {
return <String, Object?>{'result': await callback(parameters['objectGroup']!)}; return <String, Object?>{'result': await callback(parameters['objectGroup']!)};
}, },
registerExtension: registerExtension,
); );
} }
...@@ -852,6 +856,7 @@ mixin WidgetInspectorService { ...@@ -852,6 +856,7 @@ mixin WidgetInspectorService {
required String name, required String name,
required AsyncValueGetter<bool> getter, required AsyncValueGetter<bool> getter,
required AsyncValueSetter<bool> setter, required AsyncValueSetter<bool> setter,
required RegisterServiceExtensionCallback registerExtension,
}) { }) {
registerServiceExtension( registerServiceExtension(
name: name, name: name,
...@@ -863,6 +868,7 @@ mixin WidgetInspectorService { ...@@ -863,6 +868,7 @@ mixin WidgetInspectorService {
} }
return <String, dynamic>{'enabled': await getter() ? 'true' : 'false'}; return <String, dynamic>{'enabled': await getter() ? 'true' : 'false'};
}, },
registerExtension: registerExtension,
); );
} }
...@@ -893,6 +899,7 @@ mixin WidgetInspectorService { ...@@ -893,6 +899,7 @@ mixin WidgetInspectorService {
void _registerServiceExtensionWithArg({ void _registerServiceExtensionWithArg({
required String name, required String name,
required FutureOr<Object?> Function(String? objectId, String objectGroup) callback, required FutureOr<Object?> Function(String? objectId, String objectGroup) callback,
required RegisterServiceExtensionCallback registerExtension,
}) { }) {
registerServiceExtension( registerServiceExtension(
name: name, name: name,
...@@ -902,6 +909,7 @@ mixin WidgetInspectorService { ...@@ -902,6 +909,7 @@ mixin WidgetInspectorService {
'result': await callback(parameters['arg'], parameters['objectGroup']!), 'result': await callback(parameters['arg'], parameters['objectGroup']!),
}; };
}, },
registerExtension: registerExtension,
); );
} }
...@@ -911,6 +919,7 @@ mixin WidgetInspectorService { ...@@ -911,6 +919,7 @@ mixin WidgetInspectorService {
void _registerServiceExtensionVarArgs({ void _registerServiceExtensionVarArgs({
required String name, required String name,
required FutureOr<Object?> Function(List<String> args) callback, required FutureOr<Object?> Function(List<String> args) callback,
required RegisterServiceExtensionCallback registerExtension,
}) { }) {
registerServiceExtension( registerServiceExtension(
name: name, name: name,
...@@ -931,6 +940,7 @@ mixin WidgetInspectorService { ...@@ -931,6 +940,7 @@ mixin WidgetInspectorService {
assert(index == parameters.length || (index == parameters.length - 1 && parameters.containsKey('isolateId'))); assert(index == parameters.length || (index == parameters.length - 1 && parameters.containsKey('isolateId')));
return <String, Object?>{'result': await callback(args)}; return <String, Object?>{'result': await callback(args)};
}, },
registerExtension: registerExtension,
); );
} }
...@@ -1011,13 +1021,12 @@ mixin WidgetInspectorService { ...@@ -1011,13 +1021,12 @@ mixin WidgetInspectorService {
/// * <https://github.com/dart-lang/sdk/blob/main/runtime/vm/service/service.md#rpcs-requests-and-responses> /// * <https://github.com/dart-lang/sdk/blob/main/runtime/vm/service/service.md#rpcs-requests-and-responses>
/// * [BindingBase.initServiceExtensions], which explains when service /// * [BindingBase.initServiceExtensions], which explains when service
/// extensions can be used. /// extensions can be used.
void initServiceExtensions(RegisterServiceExtensionCallback registerServiceExtensionCallback) { void initServiceExtensions(RegisterServiceExtensionCallback registerExtension) {
final FlutterExceptionHandler defaultExceptionHandler = FlutterError.presentError; final FlutterExceptionHandler defaultExceptionHandler = FlutterError.presentError;
if (isStructuredErrorsEnabled()) { if (isStructuredErrorsEnabled()) {
FlutterError.presentError = _reportStructuredError; FlutterError.presentError = _reportStructuredError;
} }
_registerServiceExtensionCallback = registerServiceExtensionCallback;
assert(!_debugServiceExtensionsRegistered); assert(!_debugServiceExtensionsRegistered);
assert(() { assert(() {
_debugServiceExtensionsRegistered = true; _debugServiceExtensionsRegistered = true;
...@@ -1033,6 +1042,7 @@ mixin WidgetInspectorService { ...@@ -1033,6 +1042,7 @@ mixin WidgetInspectorService {
FlutterError.presentError = value ? _reportStructuredError : defaultExceptionHandler; FlutterError.presentError = value ? _reportStructuredError : defaultExceptionHandler;
return Future<void>.value(); return Future<void>.value();
}, },
registerExtension: registerExtension,
); );
_registerBoolServiceExtension( _registerBoolServiceExtension(
...@@ -1045,6 +1055,7 @@ mixin WidgetInspectorService { ...@@ -1045,6 +1055,7 @@ mixin WidgetInspectorService {
WidgetsApp.debugShowWidgetInspectorOverride = value; WidgetsApp.debugShowWidgetInspectorOverride = value;
return forceRebuild(); return forceRebuild();
}, },
registerExtension: registerExtension,
); );
if (isWidgetCreationTracked()) { if (isWidgetCreationTracked()) {
...@@ -1071,6 +1082,7 @@ mixin WidgetInspectorService { ...@@ -1071,6 +1082,7 @@ mixin WidgetInspectorService {
return; return;
} }
}, },
registerExtension: registerExtension,
); );
_registerBoolServiceExtension( _registerBoolServiceExtension(
...@@ -1097,6 +1109,7 @@ mixin WidgetInspectorService { ...@@ -1097,6 +1109,7 @@ mixin WidgetInspectorService {
debugOnProfilePaint = null; debugOnProfilePaint = null;
} }
}, },
registerExtension: registerExtension,
); );
} }
...@@ -1106,6 +1119,7 @@ mixin WidgetInspectorService { ...@@ -1106,6 +1119,7 @@ mixin WidgetInspectorService {
disposeAllGroups(); disposeAllGroups();
return null; return null;
}, },
registerExtension: registerExtension,
); );
_registerObjectGroupServiceExtension( _registerObjectGroupServiceExtension(
name: WidgetInspectorServiceExtensions.disposeGroup.name, name: WidgetInspectorServiceExtensions.disposeGroup.name,
...@@ -1113,10 +1127,12 @@ mixin WidgetInspectorService { ...@@ -1113,10 +1127,12 @@ mixin WidgetInspectorService {
disposeGroup(name); disposeGroup(name);
return null; return null;
}, },
registerExtension: registerExtension,
); );
_registerSignalServiceExtension( _registerSignalServiceExtension(
name: WidgetInspectorServiceExtensions.isWidgetTreeReady.name, name: WidgetInspectorServiceExtensions.isWidgetTreeReady.name,
callback: isWidgetTreeReady, callback: isWidgetTreeReady,
registerExtension: registerExtension,
); );
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: WidgetInspectorServiceExtensions.disposeId.name, name: WidgetInspectorServiceExtensions.disposeId.name,
...@@ -1124,6 +1140,7 @@ mixin WidgetInspectorService { ...@@ -1124,6 +1140,7 @@ mixin WidgetInspectorService {
disposeId(objectId, objectGroup); disposeId(objectId, objectGroup);
return null; return null;
}, },
registerExtension: registerExtension,
); );
_registerServiceExtensionVarArgs( _registerServiceExtensionVarArgs(
name: WidgetInspectorServiceExtensions.setPubRootDirectories.name, name: WidgetInspectorServiceExtensions.setPubRootDirectories.name,
...@@ -1131,6 +1148,7 @@ mixin WidgetInspectorService { ...@@ -1131,6 +1148,7 @@ mixin WidgetInspectorService {
setPubRootDirectories(args); setPubRootDirectories(args);
return null; return null;
}, },
registerExtension: registerExtension,
); );
_registerServiceExtensionVarArgs( _registerServiceExtensionVarArgs(
name: WidgetInspectorServiceExtensions.addPubRootDirectories.name, name: WidgetInspectorServiceExtensions.addPubRootDirectories.name,
...@@ -1138,6 +1156,7 @@ mixin WidgetInspectorService { ...@@ -1138,6 +1156,7 @@ mixin WidgetInspectorService {
addPubRootDirectories(args); addPubRootDirectories(args);
return null; return null;
}, },
registerExtension: registerExtension,
); );
_registerServiceExtensionVarArgs( _registerServiceExtensionVarArgs(
name: WidgetInspectorServiceExtensions.removePubRootDirectories.name, name: WidgetInspectorServiceExtensions.removePubRootDirectories.name,
...@@ -1145,49 +1164,60 @@ mixin WidgetInspectorService { ...@@ -1145,49 +1164,60 @@ mixin WidgetInspectorService {
removePubRootDirectories(args); removePubRootDirectories(args);
return null; return null;
}, },
registerExtension: registerExtension,
); );
registerServiceExtension( registerServiceExtension(
name: WidgetInspectorServiceExtensions.getPubRootDirectories.name, name: WidgetInspectorServiceExtensions.getPubRootDirectories.name,
callback: pubRootDirectories, callback: pubRootDirectories,
registerExtension: registerExtension,
); );
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: WidgetInspectorServiceExtensions.setSelectionById.name, name: WidgetInspectorServiceExtensions.setSelectionById.name,
callback: setSelectionById, callback: setSelectionById,
registerExtension: registerExtension,
); );
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: WidgetInspectorServiceExtensions.getParentChain.name, name: WidgetInspectorServiceExtensions.getParentChain.name,
callback: _getParentChain, callback: _getParentChain,
registerExtension: registerExtension,
); );
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: WidgetInspectorServiceExtensions.getProperties.name, name: WidgetInspectorServiceExtensions.getProperties.name,
callback: _getProperties, callback: _getProperties,
registerExtension: registerExtension,
); );
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: WidgetInspectorServiceExtensions.getChildren.name, name: WidgetInspectorServiceExtensions.getChildren.name,
callback: _getChildren, callback: _getChildren,
registerExtension: registerExtension,
); );
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: WidgetInspectorServiceExtensions.getChildrenSummaryTree.name, name: WidgetInspectorServiceExtensions.getChildrenSummaryTree.name,
callback: _getChildrenSummaryTree, callback: _getChildrenSummaryTree,
registerExtension: registerExtension,
); );
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: WidgetInspectorServiceExtensions.getChildrenDetailsSubtree.name, name: WidgetInspectorServiceExtensions.getChildrenDetailsSubtree.name,
callback: _getChildrenDetailsSubtree, callback: _getChildrenDetailsSubtree,
registerExtension: registerExtension,
); );
_registerObjectGroupServiceExtension( _registerObjectGroupServiceExtension(
name: WidgetInspectorServiceExtensions.getRootWidget.name, name: WidgetInspectorServiceExtensions.getRootWidget.name,
callback: _getRootWidget, callback: _getRootWidget,
registerExtension: registerExtension,
); );
_registerObjectGroupServiceExtension( _registerObjectGroupServiceExtension(
name: WidgetInspectorServiceExtensions.getRootWidgetSummaryTree.name, name: WidgetInspectorServiceExtensions.getRootWidgetSummaryTree.name,
callback: _getRootWidgetSummaryTree, callback: _getRootWidgetSummaryTree,
registerExtension: registerExtension,
); );
registerServiceExtension( registerServiceExtension(
name: WidgetInspectorServiceExtensions.getRootWidgetSummaryTreeWithPreviews.name, name: WidgetInspectorServiceExtensions.getRootWidgetSummaryTreeWithPreviews.name,
callback: _getRootWidgetSummaryTreeWithPreviews, callback: _getRootWidgetSummaryTreeWithPreviews,
registerExtension: registerExtension,
); );
registerServiceExtension( registerServiceExtension(
name: WidgetInspectorServiceExtensions.getDetailsSubtree.name, name: WidgetInspectorServiceExtensions.getDetailsSubtree.name,
...@@ -1202,19 +1232,23 @@ mixin WidgetInspectorService { ...@@ -1202,19 +1232,23 @@ mixin WidgetInspectorService {
), ),
}; };
}, },
registerExtension: registerExtension,
); );
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: WidgetInspectorServiceExtensions.getSelectedWidget.name, name: WidgetInspectorServiceExtensions.getSelectedWidget.name,
callback: _getSelectedWidget, callback: _getSelectedWidget,
registerExtension: registerExtension,
); );
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: WidgetInspectorServiceExtensions.getSelectedSummaryWidget.name, name: WidgetInspectorServiceExtensions.getSelectedSummaryWidget.name,
callback: _getSelectedSummaryWidget, callback: _getSelectedSummaryWidget,
registerExtension: registerExtension,
); );
_registerSignalServiceExtension( _registerSignalServiceExtension(
name: WidgetInspectorServiceExtensions.isWidgetCreationTracked.name, name: WidgetInspectorServiceExtensions.isWidgetCreationTracked.name,
callback: isWidgetCreationTracked, callback: isWidgetCreationTracked,
registerExtension: registerExtension,
); );
registerServiceExtension( registerServiceExtension(
name: WidgetInspectorServiceExtensions.screenshot.name, name: WidgetInspectorServiceExtensions.screenshot.name,
...@@ -1242,22 +1276,27 @@ mixin WidgetInspectorService { ...@@ -1242,22 +1276,27 @@ mixin WidgetInspectorService {
'result': base64.encoder.convert(Uint8List.view(byteData!.buffer)), 'result': base64.encoder.convert(Uint8List.view(byteData!.buffer)),
}; };
}, },
registerExtension: registerExtension,
); );
registerServiceExtension( registerServiceExtension(
name: WidgetInspectorServiceExtensions.getLayoutExplorerNode.name, name: WidgetInspectorServiceExtensions.getLayoutExplorerNode.name,
callback: _getLayoutExplorerNode, callback: _getLayoutExplorerNode,
registerExtension: registerExtension,
); );
registerServiceExtension( registerServiceExtension(
name: WidgetInspectorServiceExtensions.setFlexFit.name, name: WidgetInspectorServiceExtensions.setFlexFit.name,
callback: _setFlexFit, callback: _setFlexFit,
registerExtension: registerExtension,
); );
registerServiceExtension( registerServiceExtension(
name: WidgetInspectorServiceExtensions.setFlexFactor.name, name: WidgetInspectorServiceExtensions.setFlexFactor.name,
callback: _setFlexFactor, callback: _setFlexFactor,
registerExtension: registerExtension,
); );
registerServiceExtension( registerServiceExtension(
name: WidgetInspectorServiceExtensions.setFlexProperties.name, name: WidgetInspectorServiceExtensions.setFlexProperties.name,
callback: _setFlexProperties, callback: _setFlexProperties,
registerExtension: registerExtension,
); );
} }
......
...@@ -47,6 +47,7 @@ class TestWidgetInspectorService extends Object with WidgetInspectorService { ...@@ -47,6 +47,7 @@ class TestWidgetInspectorService extends Object with WidgetInspectorService {
void registerServiceExtension({ void registerServiceExtension({
required String name, required String name,
required ServiceExtensionCallback callback, required ServiceExtensionCallback callback,
required RegisterServiceExtensionCallback registerExtension,
}) { }) {
assert(!extensions.containsKey(name)); assert(!extensions.containsKey(name));
extensions[name] = callback; extensions[name] = callback;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment