Skip to content

Commit a97c2a1

Browse files
authored
Implement the VM service getFlagList API (#2438)
1 parent 7eeebbb commit a97c2a1

File tree

3 files changed

+59
-15
lines changed

3 files changed

+59
-15
lines changed

Diff for: dwds/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
- Fix bug where debugging clients are not aware of service extensions when connecting to a new web app. - [#2388](https://github.com/dart-lang/webdev/pull/2388)
44
- Respect the value of `pause_isolates_on_start` during page-refreshes. - [#2431](https://github.com/dart-lang/webdev/pull/2431)
55
- Fix issue where DAP clients wouldn't resume after a restart. - [#2441](https://github.com/dart-lang/webdev/pull/2441)
6+
- Add implementation for the VM Service's `getFlagList` API. - [#2438](https://github.com/dart-lang/webdev/pull/2438)
67

78
## 24.0.0
89

Diff for: dwds/lib/src/services/chrome_proxy_service.dart

+26-15
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,17 @@ class ChromeProxyService implements VmServiceInterface {
9292

9393
StreamSubscription<ConsoleAPIEvent>? _consoleSubscription;
9494

95-
bool _pauseIsolatesOnStart = false;
95+
/// The flags that can be set at runtime via [setFlag] and their respective
96+
/// values.
97+
final Map<String, bool> _currentVmServiceFlags = {
98+
_pauseIsolatesOnStartFlag: false,
99+
};
96100

97101
/// The value of the [_pauseIsolatesOnStartFlag].
98102
///
99103
/// This value can be updated at runtime via [setFlag].
100-
bool get pauseIsolatesOnStart => _pauseIsolatesOnStart;
104+
bool get pauseIsolatesOnStart =>
105+
_currentVmServiceFlags[_pauseIsolatesOnStartFlag] ?? false;
101106

102107
/// Whether or not the connected app has a pending restart.
103108
bool get hasPendingRestart => _resumeAfterRestartEventsController.hasListener;
@@ -775,9 +780,22 @@ ${globalToolConfiguration.loadStrategy.loadModuleSnippet}("dart_sdk").developer.
775780
}
776781

777782
@override
778-
Future<FlagList> getFlagList() async {
779-
// VM flags do not apply to web apps.
780-
return FlagList(flags: []);
783+
Future<FlagList> getFlagList() {
784+
return wrapInErrorHandlerAsync(
785+
'getFlagList',
786+
_getFlagList,
787+
);
788+
}
789+
790+
Future<FlagList> _getFlagList() {
791+
final flags = _currentVmServiceFlags.entries.map<Flag>(
792+
(entry) => Flag(
793+
name: entry.key,
794+
valueAsString: '${entry.value}',
795+
),
796+
);
797+
798+
return Future.value(FlagList(flags: flags.toList()));
781799
}
782800

783801
@override
@@ -1231,14 +1249,12 @@ ${globalToolConfiguration.loadStrategy.loadModuleSnippet}("dart_sdk").developer.
12311249
);
12321250

12331251
Future<Success> _setFlag(String name, String value) async {
1234-
if (!_supportedVmServiceFlags.contains(name)) {
1252+
if (!_currentVmServiceFlags.containsKey(name)) {
12351253
return _rpcNotSupportedFuture('setFlag');
12361254
}
12371255

1238-
if (name == _pauseIsolatesOnStartFlag) {
1239-
assert(value == 'true' || value == 'false');
1240-
_pauseIsolatesOnStart = value == 'true';
1241-
}
1256+
assert(value == 'true' || value == 'false');
1257+
_currentVmServiceFlags[name] = value == 'true';
12421258

12431259
return Success();
12441260
}
@@ -1716,8 +1732,3 @@ const _stderrTypes = ['error'];
17161732
const _stdoutTypes = ['log', 'info', 'warning'];
17171733

17181734
const _pauseIsolatesOnStartFlag = 'pause_isolates_on_start';
1719-
1720-
/// The flags that can be set at runtime via [setFlag].
1721-
const _supportedVmServiceFlags = {
1722-
_pauseIsolatesOnStartFlag,
1723-
};

Diff for: dwds/test/chrome_proxy_service_test.dart

+32
Original file line numberDiff line numberDiff line change
@@ -2097,6 +2097,38 @@ void main() {
20972097
});
20982098
});
20992099

2100+
group('getFlagList', () {
2101+
List<String> stringifyFlags(FlagList flagList) {
2102+
return flagList.flags
2103+
?.map((flag) => '${flag.name} -> ${flag.valueAsString}')
2104+
.toList() ??
2105+
[];
2106+
}
2107+
2108+
test('returns expected default values', () async {
2109+
final service = context.service;
2110+
final flagList = await service.getFlagList();
2111+
expect(
2112+
stringifyFlags(flagList),
2113+
containsAll([
2114+
'pause_isolates_on_start -> false',
2115+
]),
2116+
);
2117+
});
2118+
2119+
test('returns any modified flag values', () async {
2120+
final service = context.service;
2121+
await service.setFlag('pause_isolates_on_start', 'true');
2122+
final flagList = await service.getFlagList();
2123+
expect(
2124+
stringifyFlags(flagList),
2125+
containsAll([
2126+
'pause_isolates_on_start -> true',
2127+
]),
2128+
);
2129+
});
2130+
});
2131+
21002132
group('streamListen/onEvent', () {
21012133
late ChromeProxyService service;
21022134

0 commit comments

Comments
 (0)