Refactor _performRequest to use whenComplete, not finally
diff --git a/lib/src/web_driver.dart b/lib/src/web_driver.dart
index 9856950..5cae129 100644
--- a/lib/src/web_driver.dart
+++ b/lib/src/web_driver.dart
@@ -217,21 +217,40 @@
}
}
- Future postRequest(String command, [params]) => _performRequest(
+ Future postRequest(String command, [params]) => _performRequestWithLog(
() => _commandProcessor.post(_resolve(command), params),
'POST',
command,
params);
- Future getRequest(String command) => _performRequest(
+ Future getRequest(String command) => _performRequestWithLog(
() => _commandProcessor.get(_resolve(command)), 'GET', command, null);
- Future deleteRequest(String command) => _performRequest(
+ Future deleteRequest(String command) => _performRequestWithLog(
() => _commandProcessor.delete(_resolve(command)),
'DELETE',
command,
null);
+ Future _performRequestWithLog(
+ Function fn, String method, String command, params) async {
+ return await _performRequest(fn, method, command, params)
+ .whenComplete(() async {
+ if (notifyListeners) {
+ if (_previousEvent == null) {
+ throw new Error(); // This should be impossible.
+ }
+ _onCommandController.add(_previousEvent);
+ for (WebDriverListener listener in _commandListeners) {
+ await listener(_previousEvent);
+ }
+ }
+ });
+ }
+
+ // This is an ugly hack, I know, but I dunno how to cleanly do this.
+ var _previousEvent = null;
+
Future _performRequest(
Function fn, String method, String command, params) async {
var startTime = new DateTime.now();
@@ -256,7 +275,7 @@
return new Future.error(e, trace);
} finally {
if (notifyListeners) {
- var event = new WebDriverCommandEvent(
+ _previousEvent = new WebDriverCommandEvent(
method: method,
endPoint: command,
params: params,
@@ -265,11 +284,6 @@
exception: exception,
result: result,
stackTrace: trace);
-
- _onCommandController.add(event);
- for (WebDriverListener listener in _commandListeners) {
- await listener(event);
- }
}
}
}