| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| (function() { |
| var internal = mojo.internal; |
| |
| function validateControlRequestWithoutResponse(message) { |
| var messageValidator = new internal.Validator(message); |
| var error = messageValidator.validateMessageIsRequestWithoutResponse(); |
| if (error != internal.validationError.NONE) { |
| throw error; |
| } |
| |
| if (message.getName() != mojo.pipeControl.kRunOrClosePipeMessageId) { |
| throw new Error("Control message name is not kRunOrClosePipeMessageId"); |
| } |
| |
| // Validate payload. |
| error = mojo.pipeControl.RunOrClosePipeMessageParams.validate( |
| messageValidator, message.getHeaderNumBytes()); |
| if (error != internal.validationError.NONE) { |
| throw error; |
| } |
| } |
| |
| function runOrClosePipe(message, delegate) { |
| var reader = new internal.MessageReader(message); |
| var runOrClosePipeMessageParams = reader.decodeStruct( |
| mojo.pipeControl.RunOrClosePipeMessageParams); |
| var event = runOrClosePipeMessageParams.input |
| .peerAssociatedEndpointClosedEvent; |
| return delegate.onPeerAssociatedEndpointClosed(event.id, |
| event.disconnectReason); |
| } |
| |
| function isPipeControlMessage(message) { |
| return !internal.isValidInterfaceId(message.getInterfaceId()); |
| } |
| |
| function PipeControlMessageHandler(delegate) { |
| this.delegate_ = delegate; |
| } |
| |
| PipeControlMessageHandler.prototype.accept = function(message) { |
| validateControlRequestWithoutResponse(message); |
| return runOrClosePipe(message, this.delegate_); |
| }; |
| |
| internal.PipeControlMessageHandler = PipeControlMessageHandler; |
| internal.isPipeControlMessage = isPipeControlMessage; |
| })(); |