| Index: ipc/ipc_channel_posix.cc
 | 
| diff --git a/ipc/ipc_channel_posix.cc b/ipc/ipc_channel_posix.cc
 | 
| index 11b20ff39e3a2996de3f61a77049f039ce8aedfd..3972788772eed771ecc1b3df6250492e4fece7dd 100644
 | 
| --- a/ipc/ipc_channel_posix.cc
 | 
| +++ b/ipc/ipc_channel_posix.cc
 | 
| @@ -174,11 +174,11 @@ void Channel::NotifyProcessForkedForTesting() {
 | 
|  //------------------------------------------------------------------------------
 | 
|  
 | 
|  #if defined(OS_LINUX)
 | 
| -int Channel::ChannelImpl::global_pid_ = 0;
 | 
| +int ChannelPosix::global_pid_ = 0;
 | 
|  #endif  // OS_LINUX
 | 
|  
 | 
| -Channel::ChannelImpl::ChannelImpl(const IPC::ChannelHandle& channel_handle,
 | 
| -                                  Mode mode, Listener* listener)
 | 
| +ChannelPosix::ChannelPosix(const IPC::ChannelHandle& channel_handle,
 | 
| +                           Mode mode, Listener* listener)
 | 
|      : ChannelReader(listener),
 | 
|        mode_(mode),
 | 
|        peer_pid_(base::kNullProcessId),
 | 
| @@ -203,7 +203,7 @@ Channel::ChannelImpl::ChannelImpl(const IPC::ChannelHandle& channel_handle,
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -Channel::ChannelImpl::~ChannelImpl() {
 | 
| +ChannelPosix::~ChannelPosix() {
 | 
|    Close();
 | 
|  }
 | 
|  
 | 
| @@ -231,7 +231,7 @@ bool SocketPair(int* fd1, int* fd2) {
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::CreatePipe(
 | 
| +bool ChannelPosix::CreatePipe(
 | 
|      const IPC::ChannelHandle& channel_handle) {
 | 
|    DCHECK(server_listen_pipe_ == -1 && pipe_ == -1);
 | 
|  
 | 
| @@ -337,7 +337,7 @@ bool Channel::ChannelImpl::CreatePipe(
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::Connect() {
 | 
| +bool ChannelPosix::Connect() {
 | 
|    if (server_listen_pipe_ == -1 && pipe_ == -1) {
 | 
|      DLOG(WARNING) << "Channel creation failed: " << pipe_name_;
 | 
|      return false;
 | 
| @@ -359,7 +359,7 @@ bool Channel::ChannelImpl::Connect() {
 | 
|    return did_connect;
 | 
|  }
 | 
|  
 | 
| -void Channel::ChannelImpl::CloseFileDescriptors(Message* msg) {
 | 
| +void ChannelPosix::CloseFileDescriptors(Message* msg) {
 | 
|  #if defined(OS_MACOSX)
 | 
|    // There is a bug on OSX which makes it dangerous to close
 | 
|    // a file descriptor while it is in transit. So instead we
 | 
| @@ -380,7 +380,7 @@ void Channel::ChannelImpl::CloseFileDescriptors(Message* msg) {
 | 
|  #endif
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::ProcessOutgoingMessages() {
 | 
| +bool ChannelPosix::ProcessOutgoingMessages() {
 | 
|    DCHECK(!waiting_connect_);  // Why are we trying to send messages if there's
 | 
|                                // no connection?
 | 
|    if (output_queue_.empty())
 | 
| @@ -526,7 +526,7 @@ bool Channel::ChannelImpl::ProcessOutgoingMessages() {
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::Send(Message* message) {
 | 
| +bool ChannelPosix::Send(Message* message) {
 | 
|    DVLOG(2) << "sending message @" << message << " on channel @" << this
 | 
|             << " with type " << message->type()
 | 
|             << " (" << output_queue_.size() << " in queue)";
 | 
| @@ -544,12 +544,12 @@ bool Channel::ChannelImpl::Send(Message* message) {
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| -int Channel::ChannelImpl::GetClientFileDescriptor() {
 | 
| +int ChannelPosix::GetClientFileDescriptor() const {
 | 
|    base::AutoLock lock(client_pipe_lock_);
 | 
|    return client_pipe_;
 | 
|  }
 | 
|  
 | 
| -int Channel::ChannelImpl::TakeClientFileDescriptor() {
 | 
| +int ChannelPosix::TakeClientFileDescriptor() {
 | 
|    base::AutoLock lock(client_pipe_lock_);
 | 
|    int fd = client_pipe_;
 | 
|    if (client_pipe_ != -1) {
 | 
| @@ -559,7 +559,7 @@ int Channel::ChannelImpl::TakeClientFileDescriptor() {
 | 
|    return fd;
 | 
|  }
 | 
|  
 | 
| -void Channel::ChannelImpl::CloseClientFileDescriptor() {
 | 
| +void ChannelPosix::CloseClientFileDescriptor() {
 | 
|    base::AutoLock lock(client_pipe_lock_);
 | 
|    if (client_pipe_ != -1) {
 | 
|      PipeMap::GetInstance()->Remove(pipe_name_);
 | 
| @@ -569,20 +569,20 @@ void Channel::ChannelImpl::CloseClientFileDescriptor() {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::AcceptsConnections() const {
 | 
| +bool ChannelPosix::AcceptsConnections() const {
 | 
|    return server_listen_pipe_ != -1;
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::HasAcceptedConnection() const {
 | 
| +bool ChannelPosix::HasAcceptedConnection() const {
 | 
|    return AcceptsConnections() && pipe_ != -1;
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::GetPeerEuid(uid_t* peer_euid) const {
 | 
| +bool ChannelPosix::GetPeerEuid(uid_t* peer_euid) const {
 | 
|    DCHECK(!(mode_ & MODE_SERVER) || HasAcceptedConnection());
 | 
|    return IPC::GetPeerEuid(pipe_, peer_euid);
 | 
|  }
 | 
|  
 | 
| -void Channel::ChannelImpl::ResetToAcceptingConnectionState() {
 | 
| +void ChannelPosix::ResetToAcceptingConnectionState() {
 | 
|    // Unregister libevent for the unix domain socket and close it.
 | 
|    read_watcher_.StopWatchingFileDescriptor();
 | 
|    write_watcher_.StopWatchingFileDescriptor();
 | 
| @@ -626,20 +626,20 @@ void Channel::ChannelImpl::ResetToAcceptingConnectionState() {
 | 
|  }
 | 
|  
 | 
|  // static
 | 
| -bool Channel::ChannelImpl::IsNamedServerInitialized(
 | 
| +bool ChannelPosix::IsNamedServerInitialized(
 | 
|      const std::string& channel_id) {
 | 
|    return base::PathExists(base::FilePath(channel_id));
 | 
|  }
 | 
|  
 | 
|  #if defined(OS_LINUX)
 | 
|  // static
 | 
| -void Channel::ChannelImpl::SetGlobalPid(int pid) {
 | 
| +void ChannelPosix::SetGlobalPid(int pid) {
 | 
|    global_pid_ = pid;
 | 
|  }
 | 
|  #endif  // OS_LINUX
 | 
|  
 | 
|  // Called by libevent when we can read from the pipe without blocking.
 | 
| -void Channel::ChannelImpl::OnFileCanReadWithoutBlocking(int fd) {
 | 
| +void ChannelPosix::OnFileCanReadWithoutBlocking(int fd) {
 | 
|    if (fd == server_listen_pipe_) {
 | 
|      int new_pipe = 0;
 | 
|      if (!ServerAcceptConnection(server_listen_pipe_, &new_pipe) ||
 | 
| @@ -705,7 +705,7 @@ void Channel::ChannelImpl::OnFileCanReadWithoutBlocking(int fd) {
 | 
|  }
 | 
|  
 | 
|  // Called by libevent when we can write to the pipe without blocking.
 | 
| -void Channel::ChannelImpl::OnFileCanWriteWithoutBlocking(int fd) {
 | 
| +void ChannelPosix::OnFileCanWriteWithoutBlocking(int fd) {
 | 
|    DCHECK_EQ(pipe_, fd);
 | 
|    is_blocked_on_write_ = false;
 | 
|    if (!ProcessOutgoingMessages()) {
 | 
| @@ -713,7 +713,7 @@ void Channel::ChannelImpl::OnFileCanWriteWithoutBlocking(int fd) {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::AcceptConnection() {
 | 
| +bool ChannelPosix::AcceptConnection() {
 | 
|    base::MessageLoopForIO::current()->WatchFileDescriptor(
 | 
|        pipe_, true, base::MessageLoopForIO::WATCH_READ, &read_watcher_, this);
 | 
|    QueueHelloMessage();
 | 
| @@ -733,7 +733,7 @@ bool Channel::ChannelImpl::AcceptConnection() {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -void Channel::ChannelImpl::ClosePipeOnError() {
 | 
| +void ChannelPosix::ClosePipeOnError() {
 | 
|    if (HasAcceptedConnection()) {
 | 
|      ResetToAcceptingConnectionState();
 | 
|      listener()->OnChannelError();
 | 
| @@ -747,7 +747,7 @@ void Channel::ChannelImpl::ClosePipeOnError() {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -int Channel::ChannelImpl::GetHelloMessageProcId() {
 | 
| +int ChannelPosix::GetHelloMessageProcId() {
 | 
|    int pid = base::GetCurrentProcId();
 | 
|  #if defined(OS_LINUX)
 | 
|    // Our process may be in a sandbox with a separate PID namespace.
 | 
| @@ -758,7 +758,7 @@ int Channel::ChannelImpl::GetHelloMessageProcId() {
 | 
|    return pid;
 | 
|  }
 | 
|  
 | 
| -void Channel::ChannelImpl::QueueHelloMessage() {
 | 
| +void ChannelPosix::QueueHelloMessage() {
 | 
|    // Create the Hello message
 | 
|    scoped_ptr<Message> msg(new Message(MSG_ROUTING_NONE,
 | 
|                                        HELLO_MESSAGE_TYPE,
 | 
| @@ -779,7 +779,7 @@ void Channel::ChannelImpl::QueueHelloMessage() {
 | 
|    output_queue_.push(msg.release());
 | 
|  }
 | 
|  
 | 
| -Channel::ChannelImpl::ReadState Channel::ChannelImpl::ReadData(
 | 
| +ChannelPosix::ReadState ChannelPosix::ReadData(
 | 
|      char* buffer,
 | 
|      int buffer_len,
 | 
|      int* bytes_read) {
 | 
| @@ -837,7 +837,7 @@ Channel::ChannelImpl::ReadState Channel::ChannelImpl::ReadData(
 | 
|  }
 | 
|  
 | 
|  #if defined(IPC_USES_READWRITE)
 | 
| -bool Channel::ChannelImpl::ReadFileDescriptorsFromFDPipe() {
 | 
| +bool ChannelPosix::ReadFileDescriptorsFromFDPipe() {
 | 
|    char dummy;
 | 
|    struct iovec fd_pipe_iov = { &dummy, 1 };
 | 
|  
 | 
| @@ -862,7 +862,7 @@ bool Channel::ChannelImpl::ReadFileDescriptorsFromFDPipe() {
 | 
|  //
 | 
|  // This will read from the input_fds_ (READWRITE mode only) and read more
 | 
|  // handles from the FD pipe if necessary.
 | 
| -bool Channel::ChannelImpl::WillDispatchInputMessage(Message* msg) {
 | 
| +bool ChannelPosix::WillDispatchInputMessage(Message* msg) {
 | 
|    uint16 header_fds = msg->header()->num_fds;
 | 
|    if (!header_fds)
 | 
|      return true;  // Nothing to do.
 | 
| @@ -902,14 +902,14 @@ bool Channel::ChannelImpl::WillDispatchInputMessage(Message* msg) {
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::DidEmptyInputBuffers() {
 | 
| +bool ChannelPosix::DidEmptyInputBuffers() {
 | 
|    // When the input data buffer is empty, the fds should be too. If this is
 | 
|    // not the case, we probably have a rogue renderer which is trying to fill
 | 
|    // our descriptor table.
 | 
|    return input_fds_.empty();
 | 
|  }
 | 
|  
 | 
| -bool Channel::ChannelImpl::ExtractFileDescriptorsFromMsghdr(msghdr* msg) {
 | 
| +bool ChannelPosix::ExtractFileDescriptorsFromMsghdr(msghdr* msg) {
 | 
|    // Check that there are any control messages. On OSX, CMSG_FIRSTHDR will
 | 
|    // return an invalid non-NULL pointer in the case that controllen == 0.
 | 
|    if (msg->msg_controllen == 0)
 | 
| @@ -941,7 +941,7 @@ bool Channel::ChannelImpl::ExtractFileDescriptorsFromMsghdr(msghdr* msg) {
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| -void Channel::ChannelImpl::ClearInputFDs() {
 | 
| +void ChannelPosix::ClearInputFDs() {
 | 
|    for (size_t i = 0; i < input_fds_.size(); ++i) {
 | 
|      if (IGNORE_EINTR(close(input_fds_[i])) < 0)
 | 
|        PLOG(ERROR) << "close ";
 | 
| @@ -949,7 +949,7 @@ void Channel::ChannelImpl::ClearInputFDs() {
 | 
|    input_fds_.clear();
 | 
|  }
 | 
|  
 | 
| -void Channel::ChannelImpl::QueueCloseFDMessage(int fd, int hops) {
 | 
| +void ChannelPosix::QueueCloseFDMessage(int fd, int hops) {
 | 
|    switch (hops) {
 | 
|      case 1:
 | 
|      case 2: {
 | 
| @@ -971,7 +971,7 @@ void Channel::ChannelImpl::QueueCloseFDMessage(int fd, int hops) {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -void Channel::ChannelImpl::HandleInternalMessage(const Message& msg) {
 | 
| +void ChannelPosix::HandleInternalMessage(const Message& msg) {
 | 
|    // The Hello message contains only the process id.
 | 
|    PickleIterator iter(msg);
 | 
|  
 | 
| @@ -1025,7 +1025,7 @@ void Channel::ChannelImpl::HandleInternalMessage(const Message& msg) {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -void Channel::ChannelImpl::Close() {
 | 
| +void ChannelPosix::Close() {
 | 
|    // Close can be called multiple time, so we need to make sure we're
 | 
|    // idempotent.
 | 
|  
 | 
| @@ -1046,61 +1046,18 @@ void Channel::ChannelImpl::Close() {
 | 
|    CloseClientFileDescriptor();
 | 
|  }
 | 
|  
 | 
| -//------------------------------------------------------------------------------
 | 
| -// Channel's methods simply call through to ChannelImpl.
 | 
| -Channel::Channel(const IPC::ChannelHandle& channel_handle, Mode mode,
 | 
| -                 Listener* listener)
 | 
| -    : channel_impl_(new ChannelImpl(channel_handle, mode, listener)) {
 | 
| -}
 | 
| -
 | 
| -Channel::~Channel() {
 | 
| -  delete channel_impl_;
 | 
| -}
 | 
| -
 | 
| -bool Channel::Connect() {
 | 
| -  return channel_impl_->Connect();
 | 
| -}
 | 
| -
 | 
| -void Channel::Close() {
 | 
| -  if (channel_impl_)
 | 
| -    channel_impl_->Close();
 | 
| -}
 | 
| -
 | 
| -base::ProcessId Channel::peer_pid() const {
 | 
| -  return channel_impl_->peer_pid();
 | 
| -}
 | 
| -
 | 
| -bool Channel::Send(Message* message) {
 | 
| -  return channel_impl_->Send(message);
 | 
| -}
 | 
| -
 | 
| -int Channel::GetClientFileDescriptor() const {
 | 
| -  return channel_impl_->GetClientFileDescriptor();
 | 
| +base::ProcessId ChannelPosix::GetPeerPID() const {
 | 
| +  return peer_pid_;
 | 
|  }
 | 
|  
 | 
| -int Channel::TakeClientFileDescriptor() {
 | 
| -  return channel_impl_->TakeClientFileDescriptor();
 | 
| -}
 | 
| -
 | 
| -bool Channel::AcceptsConnections() const {
 | 
| -  return channel_impl_->AcceptsConnections();
 | 
| -}
 | 
| -
 | 
| -bool Channel::HasAcceptedConnection() const {
 | 
| -  return channel_impl_->HasAcceptedConnection();
 | 
| -}
 | 
| -
 | 
| -bool Channel::GetPeerEuid(uid_t* peer_euid) const {
 | 
| -  return channel_impl_->GetPeerEuid(peer_euid);
 | 
| -}
 | 
| -
 | 
| -void Channel::ResetToAcceptingConnectionState() {
 | 
| -  channel_impl_->ResetToAcceptingConnectionState();
 | 
| -}
 | 
| +//------------------------------------------------------------------------------
 | 
| +// Channel's methods
 | 
|  
 | 
|  // static
 | 
| -bool Channel::IsNamedServerInitialized(const std::string& channel_id) {
 | 
| -  return ChannelImpl::IsNamedServerInitialized(channel_id);
 | 
| +scoped_ptr<Channel> Channel::Create(
 | 
| +    const IPC::ChannelHandle &channel_handle, Mode mode, Listener* listener) {
 | 
| +  return scoped_ptr<Channel>(
 | 
| +      new ChannelPosix(channel_handle, mode, listener));
 | 
|  }
 | 
|  
 | 
|  // static
 | 
| @@ -1116,10 +1073,15 @@ std::string Channel::GenerateVerifiedChannelID(const std::string& prefix) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| +bool Channel::IsNamedServerInitialized(
 | 
| +    const std::string& channel_id) {
 | 
| +  return ChannelPosix::IsNamedServerInitialized(channel_id);
 | 
| +}
 | 
| +
 | 
|  #if defined(OS_LINUX)
 | 
|  // static
 | 
|  void Channel::SetGlobalPid(int pid) {
 | 
| -  ChannelImpl::SetGlobalPid(pid);
 | 
| +  ChannelPosix::SetGlobalPid(pid);
 | 
|  }
 | 
|  #endif  // OS_LINUX
 | 
|  
 | 
| 
 |