| 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/connector", | 6 "mojo/public/js/connector", |
| 7 "mojo/public/js/core", | 7 "mojo/public/js/core", |
| 8 "mojo/public/js/interface_types", | 8 "mojo/public/js/interface_types", |
| 9 "mojo/public/js/lib/interface_endpoint_handle", | 9 "mojo/public/js/lib/interface_endpoint_handle", |
| 10 "mojo/public/js/lib/pipe_control_message_handler", | 10 "mojo/public/js/lib/pipe_control_message_handler", |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 this.cachedMessageData.message.getInterfaceId()); | 146 this.cachedMessageData.message.getInterfaceId()); |
| 147 // Check that the target endpoint's client still exists. | 147 // Check that the target endpoint's client still exists. |
| 148 if (targetEndpoint && targetEndpoint.client) { | 148 if (targetEndpoint && targetEndpoint.client) { |
| 149 var message = this.cachedMessageData.message; | 149 var message = this.cachedMessageData.message; |
| 150 var messageValidator = this.cachedMessageData.messageValidator; | 150 var messageValidator = this.cachedMessageData.messageValidator; |
| 151 this.cachedMessageData = null; | 151 this.cachedMessageData = null; |
| 152 this.connector_.resumeIncomingMethodCallProcessing(); | 152 this.connector_.resumeIncomingMethodCallProcessing(); |
| 153 var ok = endpoint.client.handleIncomingMessage(message, | 153 var ok = endpoint.client.handleIncomingMessage(message, |
| 154 messageValidator); | 154 messageValidator); |
| 155 | 155 |
| 156 if (!ok) { | 156 // Handle invalid cached incoming message. |
| 157 this.handleInvalidIncomingMessage_(); | 157 if (!validator.isTestingMode() && !ok) { |
| 158 this.connector_.handleError(true, true); |
| 158 } | 159 } |
| 159 } | 160 } |
| 160 }).bind(this)); | 161 }).bind(this)); |
| 161 } | 162 } |
| 162 | 163 |
| 163 return endpoint; | 164 return endpoint; |
| 164 }; | 165 }; |
| 165 | 166 |
| 166 Router.prototype.detachEndpointClient = function( | 167 Router.prototype.detachEndpointClient = function( |
| 167 interfaceEndpointHandle) { | 168 interfaceEndpointHandle) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 // We need to wait until a client is attached in order to dispatch | 229 // We need to wait until a client is attached in order to dispatch |
| 229 // further messages. | 230 // further messages. |
| 230 this.cachedMessageData = {message: message, | 231 this.cachedMessageData = {message: message, |
| 231 messageValidator: messageValidator}; | 232 messageValidator: messageValidator}; |
| 232 this.connector_.pauseIncomingMethodCallProcessing(); | 233 this.connector_.pauseIncomingMethodCallProcessing(); |
| 233 return true; | 234 return true; |
| 234 } | 235 } |
| 235 ok = endpoint.client.handleIncomingMessage(message, messageValidator); | 236 ok = endpoint.client.handleIncomingMessage(message, messageValidator); |
| 236 } | 237 } |
| 237 } | 238 } |
| 238 | |
| 239 if (!ok) { | |
| 240 this.handleInvalidIncomingMessage_(); | |
| 241 } | |
| 242 return ok; | 239 return ok; |
| 243 }; | 240 }; |
| 244 | 241 |
| 245 Router.prototype.close = function() { | 242 Router.prototype.close = function() { |
| 246 this.connector_.close(); | 243 this.connector_.close(); |
| 247 // Closing the message pipe won't trigger connection error handler. | 244 // Closing the message pipe won't trigger connection error handler. |
| 248 // Explicitly call onPipeConnectionError() so that associated endpoints | 245 // Explicitly call onPipeConnectionError() so that associated endpoints |
| 249 // will get notified. | 246 // will get notified. |
| 250 this.onPipeConnectionError(); | 247 this.onPipeConnectionError(); |
| 251 }; | 248 }; |
| 252 | 249 |
| 253 Router.prototype.waitForNextMessageForTesting = function() { | 250 Router.prototype.waitForNextMessageForTesting = function() { |
| 254 this.connector_.waitForNextMessageForTesting(); | 251 this.connector_.waitForNextMessageForTesting(); |
| 255 }; | 252 }; |
| 256 | 253 |
| 257 Router.prototype.handleInvalidIncomingMessage_ = function(message) { | |
| 258 if (!validator.isTestingMode()) { | |
| 259 // TODO(yzshen): Consider notifying the embedder. | |
| 260 // TODO(yzshen): This should also trigger connection error handler. | |
| 261 // Consider making accept() return a boolean and let the connector deal | |
| 262 // with this, as the C++ code does. | |
| 263 this.close(); | |
| 264 return; | |
| 265 } | |
| 266 }; | |
| 267 | |
| 268 Router.prototype.onPeerAssociatedEndpointClosed = function(interfaceId, | 254 Router.prototype.onPeerAssociatedEndpointClosed = function(interfaceId, |
| 269 reason) { | 255 reason) { |
| 270 check(!types.isMasterInterfaceId(interfaceId) || reason); | 256 check(!types.isMasterInterfaceId(interfaceId) || reason); |
| 271 | 257 |
| 272 var endpoint = this.endpoints_.get(interfaceId); | 258 var endpoint = this.endpoints_.get(interfaceId); |
| 273 if (!endpoint) { | 259 if (!endpoint) { |
| 274 endpoint = new InterfaceEndpoint(this, interfaceId); | 260 endpoint = new InterfaceEndpoint(this, interfaceId); |
| 275 this.endpoints_.set(interfaceId, endpoint); | 261 this.endpoints_.set(interfaceId, endpoint); |
| 276 } | 262 } |
| 277 | 263 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 } | 322 } |
| 337 if (endpoint.closed && endpoint.peerClosed) { | 323 if (endpoint.closed && endpoint.peerClosed) { |
| 338 this.endpoints_.delete(endpoint.id); | 324 this.endpoints_.delete(endpoint.id); |
| 339 } | 325 } |
| 340 }; | 326 }; |
| 341 | 327 |
| 342 var exports = {}; | 328 var exports = {}; |
| 343 exports.Router = Router; | 329 exports.Router = Router; |
| 344 return exports; | 330 return exports; |
| 345 }); | 331 }); |
| OLD | NEW |