| Index: mojo/public/js/bindings/router.js
|
| diff --git a/mojo/public/js/bindings/router.js b/mojo/public/js/bindings/router.js
|
| index 36823921ae84a8669fce511bc46a3108a81ced34..b653c2bea4cf79ec5ffa62a58eb082f408de05ca 100644
|
| --- a/mojo/public/js/bindings/router.js
|
| +++ b/mojo/public/js/bindings/router.js
|
| @@ -14,7 +14,7 @@ define("mojo/public/js/bindings/router", [
|
| this.connector_ = new connectorFactory(handle);
|
| this.incomingReceiver_ = null;
|
| this.nextRequestID_ = 0;
|
| - this.responders_ = {};
|
| + this.completers_ = new Map();
|
| this.payloadValidators_ = [];
|
|
|
| this.connector_.setIncomingReceiver({
|
| @@ -26,7 +26,7 @@ define("mojo/public/js/bindings/router", [
|
| }
|
|
|
| Router.prototype.close = function() {
|
| - this.responders_ = {}; // Drop any responders.
|
| + this.completers_ = null; // Drop any responders.
|
| this.connector_.close();
|
| };
|
|
|
| @@ -38,7 +38,7 @@ define("mojo/public/js/bindings/router", [
|
| // TODO(mpcomplete): no way to trasmit errors over a Connection.
|
| };
|
|
|
| - Router.prototype.acceptWithResponder = function(message, responder) {
|
| + Router.prototype.acceptAndExpectResponse = function(message) {
|
| // Reserve 0 in case we want it to convey special meaning in the future.
|
| var requestID = this.nextRequestID_++;
|
| if (requestID == 0)
|
| @@ -46,13 +46,15 @@ define("mojo/public/js/bindings/router", [
|
|
|
| message.setRequestID(requestID);
|
| var result = this.connector_.accept(message);
|
| -
|
| - this.responders_[requestID] = responder;
|
| -
|
| - // TODO(mpcomplete): accept should return a Promise too, maybe?
|
| - if (result)
|
| - return Promise.resolve();
|
| - return Promise.reject(Error("Connection error"));
|
| + if (!result)
|
| + return Promise.reject(Error("Connection error"));
|
| +
|
| + var completer = {};
|
| + this.completers_.set(requestID, completer);
|
| + return new Promise(function(resolve, reject) {
|
| + completer.resolve = resolve;
|
| + completer.reject = reject;
|
| + });
|
| };
|
|
|
| Router.prototype.setIncomingReceiver = function(receiver) {
|
| @@ -92,9 +94,9 @@ define("mojo/public/js/bindings/router", [
|
| } else if (message.isResponse()) {
|
| var reader = new codec.MessageReader(message);
|
| var requestID = reader.requestID;
|
| - var responder = this.responders_[requestID];
|
| - delete this.responders_[requestID];
|
| - responder.accept(message);
|
| + var completer = this.completers_.get(requestID);
|
| + this.completers_.delete(requestID);
|
| + completer.resolve(message);
|
| } else {
|
| if (this.incomingReceiver_)
|
| this.incomingReceiver_.accept(message);
|
| @@ -106,8 +108,9 @@ define("mojo/public/js/bindings/router", [
|
| }
|
|
|
| Router.prototype.handleConnectionError_ = function(result) {
|
| - for (var each in this.responders_)
|
| - this.responders_[each].reject(result);
|
| + this.completers_.forEach(function(value) {
|
| + value.reject(result);
|
| + });
|
| this.close();
|
| };
|
|
|
|
|