| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ipc/ipc_channel_win.h" | 5 #include "ipc/ipc_channel_win.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 if (!waiting_connect_) { | 86 if (!waiting_connect_) { |
| 87 if (!output_state_.is_pending) { | 87 if (!output_state_.is_pending) { |
| 88 if (!ProcessOutgoingMessages(NULL, 0)) | 88 if (!ProcessOutgoingMessages(NULL, 0)) |
| 89 return false; | 89 return false; |
| 90 } | 90 } |
| 91 } | 91 } |
| 92 | 92 |
| 93 return true; | 93 return true; |
| 94 } | 94 } |
| 95 | 95 |
| 96 // static |
| 97 bool Channel::ChannelImpl::IsNamedServerInitialized( |
| 98 const std::string& channel_id) { |
| 99 if (WaitNamedPipe(PipeName(channel_id).c_str(), 1)) |
| 100 return true; |
| 101 // If ERROR_SEM_TIMEOUT occurred, the pipe exists but is handling another |
| 102 // connection. |
| 103 return GetLastError() == ERROR_SEM_TIMEOUT; |
| 104 } |
| 105 |
| 106 // static |
| 96 const std::wstring Channel::ChannelImpl::PipeName( | 107 const std::wstring Channel::ChannelImpl::PipeName( |
| 97 const std::string& channel_id) const { | 108 const std::string& channel_id) { |
| 98 std::string name("\\\\.\\pipe\\chrome."); | 109 std::string name("\\\\.\\pipe\\chrome."); |
| 99 return ASCIIToWide(name.append(channel_id)); | 110 return ASCIIToWide(name.append(channel_id)); |
| 100 } | 111 } |
| 101 | 112 |
| 102 bool Channel::ChannelImpl::CreatePipe(const IPC::ChannelHandle &channel_handle, | 113 bool Channel::ChannelImpl::CreatePipe(const IPC::ChannelHandle &channel_handle, |
| 103 Mode mode) { | 114 Mode mode) { |
| 104 DCHECK_EQ(INVALID_HANDLE_VALUE, pipe_); | 115 DCHECK_EQ(INVALID_HANDLE_VALUE, pipe_); |
| 105 const std::wstring pipe_name = PipeName(channel_handle.name); | 116 const std::wstring pipe_name = PipeName(channel_handle.name); |
| 106 if (mode & MODE_SERVER_FLAG) { | 117 if (mode & MODE_SERVER_FLAG) { |
| 107 pipe_ = CreateNamedPipeW(pipe_name.c_str(), | 118 pipe_ = CreateNamedPipeW(pipe_name.c_str(), |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 } | 415 } |
| 405 | 416 |
| 406 void Channel::set_listener(Listener* listener) { | 417 void Channel::set_listener(Listener* listener) { |
| 407 channel_impl_->set_listener(listener); | 418 channel_impl_->set_listener(listener); |
| 408 } | 419 } |
| 409 | 420 |
| 410 bool Channel::Send(Message* message) { | 421 bool Channel::Send(Message* message) { |
| 411 return channel_impl_->Send(message); | 422 return channel_impl_->Send(message); |
| 412 } | 423 } |
| 413 | 424 |
| 425 // static |
| 426 bool Channel::IsNamedServerInitialized(const std::string& channel_id) { |
| 427 return ChannelImpl::IsNamedServerInitialized(channel_id); |
| 428 } |
| 429 |
| 414 } // namespace IPC | 430 } // namespace IPC |
| OLD | NEW |