anchor.diff:              exception: exception,
               result: result,
               stackTrace: trace);
  -
  -        _onCommandController.add(event);
  -        for (WebDriverListener listener in _commandListeners) {
  -          await listener(event);
  -        }
         }
       }
     }
  
positive.code:       return new Future.error(e, trace);
      } finally {
        if (notifyListeners) {
          var event = new WebDriverCommandEvent(
              method: method,
              endPoint: command,
              params: params,
  
negative.code:     }
    }
  
    Future postRequest(String command, [params]) => _performRequestWithLog(
        () => _commandProcessor.post(_resolve(command), params),
        'POST',
        command,
        params);
  
    Future getRequest(String command) => _performRequestWithLog(
        () => _commandProcessor.get(_resolve(command)), 'GET', command, null);
  
    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 {
  