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 |