Home | History | Annotate | Download | only in system
      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 
     17 ProxyMessagePipeEndpoint::ProxyMessagePipeEndpoint(
     18     ChannelEndpoint* channel_endpoint)
     19     : channel_endpoint_(channel_endpoint) {
     20 }
     21 
     22 ProxyMessagePipeEndpoint::~ProxyMessagePipeEndpoint() {
     23   channel_endpoint_->DetachFromMessagePipe();
     24 }
     25 
     26 MessagePipeEndpoint::Type ProxyMessagePipeEndpoint::GetType() const {
     27   return kTypeProxy;
     28 }
     29 
     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).
     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