Support setExceptionPauseMode (#270)
diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md
index 9938634..cc65c80 100644
--- a/dwds/CHANGELOG.md
+++ b/dwds/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.2.1
+
+- Support `setExceptionPauseMode`.
+
## 0.2.0
- Added custom tokens to the `wsUri` for increased security.
diff --git a/dwds/lib/src/chrome_proxy_service.dart b/dwds/lib/src/chrome_proxy_service.dart
index 8b9b79e..fa3a172 100644
--- a/dwds/lib/src/chrome_proxy_service.dart
+++ b/dwds/lib/src/chrome_proxy_service.dart
@@ -562,8 +562,16 @@
}
@override
- Future<Success> setExceptionPauseMode(String isolateId, String mode) {
- throw UnimplementedError();
+ Future<Success> setExceptionPauseMode(String isolateId, String mode) async {
+ // Validates that the ID is correct.
+ _getIsolate(isolateId);
+
+ var pauseState = _pauseModePauseStates[mode.toLowerCase()] ??
+ // ignore: only_throw_errors
+ (throw RPCError(
+ 'setExceptionPauseMode', -32602, 'Unsupported mode `$mode`'));
+ await tabConnection.debugger.setPauseOnExceptions(pauseState);
+ return Success();
}
@override
@@ -836,3 +844,10 @@
return description.toString();
}
}
+
+/// Converts from ExceptionPauseMode strings to [PauseState] enums.
+const _pauseModePauseStates = {
+ 'none': PauseState.none,
+ 'all': PauseState.all,
+ 'unhandled': PauseState.uncaught,
+};
diff --git a/dwds/pubspec.yaml b/dwds/pubspec.yaml
index 82312bc..d5ff4c5 100644
--- a/dwds/pubspec.yaml
+++ b/dwds/pubspec.yaml
@@ -1,5 +1,5 @@
name: dwds
-version: 0.2.0
+version: 0.2.1
author: Dart Team <misc@dartlang.org>
homepage: https://github.com/dart-lang/webdev/tree/master/dwds
description: >-
diff --git a/dwds/test/chrome_proxy_service_test.dart b/dwds/test/chrome_proxy_service_test.dart
index 89efb4d..fd3d5d1 100644
--- a/dwds/test/chrome_proxy_service_test.dart
+++ b/dwds/test/chrome_proxy_service_test.dart
@@ -333,9 +333,18 @@
throwsUnimplementedError);
});
- test('setExceptionPauseMode', () {
- expect(() => service.setExceptionPauseMode(null, null),
- throwsUnimplementedError);
+ test('setExceptionPauseMode', () async {
+ var vm = await service.getVM();
+ var isolateId = vm.isolates.first.id;
+ expect(await service.setExceptionPauseMode(isolateId, 'all'), isSuccess);
+ expect(
+ await service.setExceptionPauseMode(isolateId, 'unhandled'), isSuccess);
+ // Make sure this is the last one - or future tests might hang.
+ expect(await service.setExceptionPauseMode(isolateId, 'none'), isSuccess);
+ expect(
+ service.setExceptionPauseMode(isolateId, 'invalid'),
+ throwsA(isA<RPCError>()
+ .having((e) => e.code, 'invalid params error', equals(-32602))));
});
test('setFlag', () {