OLD | NEW |
| (Empty) |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 define("mojo/public/js/lib/pipe_control_message_handler", [ | |
6 "mojo/public/interfaces/bindings/pipe_control_messages.mojom", | |
7 "mojo/public/js/codec", | |
8 "mojo/public/js/interface_types", | |
9 "mojo/public/js/validator", | |
10 ], function(pipeControlMessages, codec, types, validator) { | |
11 | |
12 var Validator = validator.Validator; | |
13 | |
14 function validateControlRequestWithoutResponse(message) { | |
15 var messageValidator = new Validator(message); | |
16 var error = messageValidator.validateMessageIsRequestWithoutResponse(); | |
17 if (error != validator.validationError.NONE) { | |
18 throw error; | |
19 } | |
20 | |
21 if (message.getName() != pipeControlMessages.kRunOrClosePipeMessageId) { | |
22 throw new Error("Control message name is not kRunOrClosePipeMessageId"); | |
23 } | |
24 | |
25 // Validate payload. | |
26 error = pipeControlMessages.RunOrClosePipeMessageParams.validate( | |
27 messageValidator, message.getHeaderNumBytes()); | |
28 if (error != validator.validationError.NONE) { | |
29 throw error; | |
30 } | |
31 } | |
32 | |
33 function runOrClosePipe(message, delegate) { | |
34 var reader = new codec.MessageReader(message); | |
35 var runOrClosePipeMessageParams = reader.decodeStruct( | |
36 pipeControlMessages.RunOrClosePipeMessageParams); | |
37 var event = runOrClosePipeMessageParams.input | |
38 .peer_associated_endpoint_closed_event; | |
39 return delegate.onPeerAssociatedEndpointClosed(event.id, | |
40 event.disconnect_reason); | |
41 } | |
42 | |
43 function isPipeControlMessage(message) { | |
44 return !types.isValidInterfaceId(message.getInterfaceId()); | |
45 } | |
46 | |
47 function PipeControlMessageHandler(delegate) { | |
48 this.delegate_ = delegate; | |
49 } | |
50 | |
51 PipeControlMessageHandler.prototype.accept = function(message) { | |
52 validateControlRequestWithoutResponse(message); | |
53 return runOrClosePipe(message, this.delegate_); | |
54 }; | |
55 | |
56 var exports = {}; | |
57 exports.PipeControlMessageHandler = PipeControlMessageHandler; | |
58 exports.isPipeControlMessage = isPipeControlMessage; | |
59 | |
60 return exports; | |
61 }); | |
OLD | NEW |