• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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/system/proxy_message_pipe_endpoint.h"
6 
7 #include <string.h>
8 
9 #include "base/logging.h"
10 #include "mojo/system/channel_endpoint.h"
11 #include "mojo/system/local_message_pipe_endpoint.h"
12 #include "mojo/system/message_pipe_dispatcher.h"
13 
14 namespace mojo {
15 namespace system {
16 
ProxyMessagePipeEndpoint(ChannelEndpoint * channel_endpoint)17 ProxyMessagePipeEndpoint::ProxyMessagePipeEndpoint(
18     ChannelEndpoint* channel_endpoint)
19     : channel_endpoint_(channel_endpoint) {
20 }
21 
~ProxyMessagePipeEndpoint()22 ProxyMessagePipeEndpoint::~ProxyMessagePipeEndpoint() {
23   channel_endpoint_->DetachFromMessagePipe();
24 }
25 
GetType() const26 MessagePipeEndpoint::Type ProxyMessagePipeEndpoint::GetType() const {
27   return kTypeProxy;
28 }
29 
OnPeerClose()30 bool ProxyMessagePipeEndpoint::OnPeerClose() {
31   return false;
32 }
33 
34 // Note: We may have to enqueue messages even when our (local) peer isn't open
35 // -- it may have been written to and closed immediately, before we were ready.
36 // This case is handled in |Run()| (which will call us).
EnqueueMessage(scoped_ptr<MessageInTransit> message)37 void ProxyMessagePipeEndpoint::EnqueueMessage(
38     scoped_ptr<MessageInTransit> message) {
39   DCHECK(channel_endpoint_.get());
40   LOG_IF(WARNING, !channel_endpoint_->EnqueueMessage(message.Pass()))
41       << "Failed to write enqueue message to channel";
42 }
43 
44 }  // namespace system
45 }  // namespace mojo
46