| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 define("mojo/public/js/router", [ | 5 define("mojo/public/js/router", [ |
| 6 "mojo/public/js/codec", | 6 "mojo/public/js/codec", |
| 7 "mojo/public/js/core", |
| 7 "mojo/public/js/connector", | 8 "mojo/public/js/connector", |
| 8 "mojo/public/js/validator", | 9 "mojo/public/js/validator", |
| 9 ], function(codec, connector, validator) { | 10 ], function(codec, core, connector, validator) { |
| 11 |
| 12 var Connector = connector.Connector; |
| 13 var MessageReader = codec.MessageReader; |
| 14 var Validator = validator.Validator; |
| 10 | 15 |
| 11 function Router(handle, connectorFactory) { | 16 function Router(handle, connectorFactory) { |
| 17 if (!core.isHandle(handle)) |
| 18 throw new Error("Router constructor: Not a handle"); |
| 12 if (connectorFactory === undefined) | 19 if (connectorFactory === undefined) |
| 13 connectorFactory = connector.Connector; | 20 connectorFactory = Connector; |
| 14 this.connector_ = new connectorFactory(handle); | 21 this.connector_ = new connectorFactory(handle); |
| 15 this.incomingReceiver_ = null; | 22 this.incomingReceiver_ = null; |
| 16 this.nextRequestID_ = 0; | 23 this.nextRequestID_ = 0; |
| 17 this.completers_ = new Map(); | 24 this.completers_ = new Map(); |
| 18 this.payloadValidators_ = []; | 25 this.payloadValidators_ = []; |
| 19 | 26 |
| 20 this.connector_.setIncomingReceiver({ | 27 this.connector_.setIncomingReceiver({ |
| 21 accept: this.handleIncomingMessage_.bind(this), | 28 accept: this.handleIncomingMessage_.bind(this), |
| 22 }); | 29 }); |
| 23 this.connector_.setErrorHandler({ | 30 this.connector_.setErrorHandler({ |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 Router.prototype.setPayloadValidators = function(payloadValidators) { | 71 Router.prototype.setPayloadValidators = function(payloadValidators) { |
| 65 this.payloadValidators_ = payloadValidators; | 72 this.payloadValidators_ = payloadValidators; |
| 66 }; | 73 }; |
| 67 | 74 |
| 68 Router.prototype.encounteredError = function() { | 75 Router.prototype.encounteredError = function() { |
| 69 return this.connector_.encounteredError(); | 76 return this.connector_.encounteredError(); |
| 70 }; | 77 }; |
| 71 | 78 |
| 72 Router.prototype.handleIncomingMessage_ = function(message) { | 79 Router.prototype.handleIncomingMessage_ = function(message) { |
| 73 var noError = validator.validationError.NONE; | 80 var noError = validator.validationError.NONE; |
| 74 var messageValidator = new validator.Validator(message); | 81 var messageValidator = new Validator(message); |
| 75 var err = messageValidator.validateMessageHeader(); | 82 var err = messageValidator.validateMessageHeader(); |
| 76 for (var i = 0; err === noError && i < this.payloadValidators_.length; ++i) | 83 for (var i = 0; err === noError && i < this.payloadValidators_.length; ++i) |
| 77 err = this.payloadValidators_[i](messageValidator); | 84 err = this.payloadValidators_[i](messageValidator); |
| 78 | 85 |
| 79 if (err == noError) | 86 if (err == noError) |
| 80 this.handleValidIncomingMessage_(message); | 87 this.handleValidIncomingMessage_(message); |
| 81 else | 88 else |
| 82 this.handleInvalidIncomingMessage_(message, err); | 89 this.handleInvalidIncomingMessage_(message, err); |
| 83 }; | 90 }; |
| 84 | 91 |
| 85 Router.prototype.handleValidIncomingMessage_ = function(message) { | 92 Router.prototype.handleValidIncomingMessage_ = function(message) { |
| 86 if (message.expectsResponse()) { | 93 if (message.expectsResponse()) { |
| 87 if (this.incomingReceiver_) { | 94 if (this.incomingReceiver_) { |
| 88 this.incomingReceiver_.acceptWithResponder(message, this); | 95 this.incomingReceiver_.acceptWithResponder(message, this); |
| 89 } else { | 96 } else { |
| 90 // If we receive a request expecting a response when the client is not | 97 // If we receive a request expecting a response when the client is not |
| 91 // listening, then we have no choice but to tear down the pipe. | 98 // listening, then we have no choice but to tear down the pipe. |
| 92 this.close(); | 99 this.close(); |
| 93 } | 100 } |
| 94 } else if (message.isResponse()) { | 101 } else if (message.isResponse()) { |
| 95 var reader = new codec.MessageReader(message); | 102 var reader = new MessageReader(message); |
| 96 var requestID = reader.requestID; | 103 var requestID = reader.requestID; |
| 97 var completer = this.completers_.get(requestID); | 104 var completer = this.completers_.get(requestID); |
| 98 this.completers_.delete(requestID); | 105 this.completers_.delete(requestID); |
| 99 completer.resolve(message); | 106 completer.resolve(message); |
| 100 } else { | 107 } else { |
| 101 if (this.incomingReceiver_) | 108 if (this.incomingReceiver_) |
| 102 this.incomingReceiver_.accept(message); | 109 this.incomingReceiver_.accept(message); |
| 103 } | 110 } |
| 104 } | 111 } |
| 105 | 112 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 129 TestRouter.prototype.handleInvalidIncomingMessage_ = | 136 TestRouter.prototype.handleInvalidIncomingMessage_ = |
| 130 function(message, error) { | 137 function(message, error) { |
| 131 this.validationErrorHandler(error); | 138 this.validationErrorHandler(error); |
| 132 }; | 139 }; |
| 133 | 140 |
| 134 var exports = {}; | 141 var exports = {}; |
| 135 exports.Router = Router; | 142 exports.Router = Router; |
| 136 exports.TestRouter = TestRouter; | 143 exports.TestRouter = TestRouter; |
| 137 return exports; | 144 return exports; |
| 138 }); | 145 }); |
| OLD | NEW |