• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 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 #include "mojo/public/cpp/bindings/pipe_control_message_proxy.h"
6 
7 #include <stddef.h>
8 #include <utility>
9 
10 #include "base/compiler_specific.h"
11 #include "base/logging.h"
12 #include "mojo/public/cpp/bindings/lib/message_builder.h"
13 #include "mojo/public/cpp/bindings/lib/serialization.h"
14 #include "mojo/public/cpp/bindings/message.h"
15 #include "mojo/public/interfaces/bindings/pipe_control_messages.mojom.h"
16 
17 namespace mojo {
18 namespace {
19 
SendRunOrClosePipeMessage(MessageReceiver * receiver,pipe_control::RunOrClosePipeInputPtr input,internal::SerializationContext * context)20 void SendRunOrClosePipeMessage(MessageReceiver* receiver,
21                                pipe_control::RunOrClosePipeInputPtr input,
22                                internal::SerializationContext* context) {
23   pipe_control::RunOrClosePipeMessageParamsPtr params_ptr(
24       pipe_control::RunOrClosePipeMessageParams::New());
25   params_ptr->input = std::move(input);
26 
27   size_t size =
28       internal::PrepareToSerialize<
29           pipe_control::RunOrClosePipeMessageParamsPtr>(params_ptr, context);
30   internal::MessageBuilder builder(pipe_control::kRunOrClosePipeMessageId,
31                                    size);
32 
33   pipe_control::internal::RunOrClosePipeMessageParams_Data* params = nullptr;
34   internal::Serialize<pipe_control::RunOrClosePipeMessageParamsPtr>(
35       params_ptr, builder.buffer(), &params, context);
36   builder.message()->set_interface_id(kInvalidInterfaceId);
37   bool ok = receiver->Accept(builder.message());
38   // This return value may be ignored as !ok implies the underlying message pipe
39   // has encountered an error, which will be visible through other means.
40   ALLOW_UNUSED_LOCAL(ok);
41 }
42 
43 }  // namespace
44 
PipeControlMessageProxy(MessageReceiver * receiver)45 PipeControlMessageProxy::PipeControlMessageProxy(MessageReceiver* receiver)
46     : receiver_(receiver) {}
47 
NotifyPeerEndpointClosed(InterfaceId id)48 void PipeControlMessageProxy::NotifyPeerEndpointClosed(InterfaceId id) {
49   DCHECK(!IsMasterInterfaceId(id));
50   pipe_control::PeerAssociatedEndpointClosedEventPtr event(
51       pipe_control::PeerAssociatedEndpointClosedEvent::New());
52   event->id = id;
53 
54   pipe_control::RunOrClosePipeInputPtr input(
55       pipe_control::RunOrClosePipeInput::New());
56   input->set_peer_associated_endpoint_closed_event(std::move(event));
57 
58   SendRunOrClosePipeMessage(receiver_, std::move(input), &context_);
59 }
60 
NotifyEndpointClosedBeforeSent(InterfaceId id)61 void PipeControlMessageProxy::NotifyEndpointClosedBeforeSent(InterfaceId id) {
62   DCHECK(!IsMasterInterfaceId(id));
63   pipe_control::AssociatedEndpointClosedBeforeSentEventPtr event(
64       pipe_control::AssociatedEndpointClosedBeforeSentEvent::New());
65   event->id = id;
66 
67   pipe_control::RunOrClosePipeInputPtr input(
68       pipe_control::RunOrClosePipeInput::New());
69   input->set_associated_endpoint_closed_before_sent_event(std::move(event));
70 
71   SendRunOrClosePipeMessage(receiver_, std::move(input), &context_);
72 }
73 
74 }  // namespace mojo
75