diff options
author | morrita@chromium.org <morrita@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-18 22:44:10 +0000 |
---|---|---|
committer | morrita@chromium.org <morrita@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-18 22:44:10 +0000 |
commit | d9674614bfd88227209c54849aaeedccdedd0b84 (patch) | |
tree | be2a438fde0cb36646fe0d4dab2bded68f107bcc /ipc | |
parent | 6d9e0587c46c5b6d0218bc40590798c9942b2313 (diff) | |
download | chromium_src-d9674614bfd88227209c54849aaeedccdedd0b84.zip chromium_src-d9674614bfd88227209c54849aaeedccdedd0b84.tar.gz chromium_src-d9674614bfd88227209c54849aaeedccdedd0b84.tar.bz2 |
Rename IPC::ChannelFactory to UnixDomainSocketAcceptor.
ChannelFactory doesn't create any channel and it just listens on
and accepts from a unix socket. So this change renames it to
represent what it actually does.
R=darin@chromium.org,cpu@chromium.org,jeremya@chromium.org,tapted@chromium.org
TEST=none
BUG=377980
Review URL: https://codereview.chromium.org/305973002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284231 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc')
-rw-r--r-- | ipc/BUILD.gn | 4 | ||||
-rw-r--r-- | ipc/ipc.gypi | 4 | ||||
-rw-r--r-- | ipc/ipc_channel_factory.cc | 89 | ||||
-rw-r--r-- | ipc/ipc_channel_factory.h | 58 |
4 files changed, 1 insertions, 154 deletions
diff --git a/ipc/BUILD.gn b/ipc/BUILD.gn index 3bff55e..c0aa307 100644 --- a/ipc/BUILD.gn +++ b/ipc/BUILD.gn @@ -9,8 +9,6 @@ component("ipc") { "ipc_channel.cc", "ipc_channel.h", "ipc_channel_common.cc", - "ipc_channel_factory.cc", - "ipc_channel_factory.h", "ipc_channel_handle.h", "ipc_channel_nacl.cc", "ipc_channel_nacl.h", @@ -70,7 +68,7 @@ component("ipc") { if (is_win || is_ios) { sources -= [ - "ipc_channel_factory.cc", + "unix_domain_socket_acceptor.cc", "unix_domain_socket_util.cc", ] } diff --git a/ipc/ipc.gypi b/ipc/ipc.gypi index e7d5cc6..5cf5051 100644 --- a/ipc/ipc.gypi +++ b/ipc/ipc.gypi @@ -16,8 +16,6 @@ 'ipc_channel.cc', 'ipc_channel.h', 'ipc_channel_common.cc', - 'ipc_channel_factory.cc', - 'ipc_channel_factory.h', 'ipc_channel_handle.h', 'ipc_channel_nacl.cc', 'ipc_channel_nacl.h', @@ -77,14 +75,12 @@ ['>(nacl_untrusted_build)==1', { 'sources!': [ 'ipc_channel.cc', - 'ipc_channel_factory.cc', 'ipc_channel_posix.cc', 'unix_domain_socket_util.cc', ], }], ['OS == "win" or OS == "ios"', { 'sources!': [ - 'ipc_channel_factory.cc', 'unix_domain_socket_util.cc', ], }], diff --git a/ipc/ipc_channel_factory.cc b/ipc/ipc_channel_factory.cc deleted file mode 100644 index 244024c..0000000 --- a/ipc/ipc_channel_factory.cc +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ipc/ipc_channel_factory.h" - -#include "base/file_util.h" -#include "base/files/scoped_file.h" -#include "base/logging.h" -#include "ipc/unix_domain_socket_util.h" - -namespace IPC { - -ChannelFactory::ChannelFactory(const base::FilePath& path, Delegate* delegate) - : path_(path), delegate_(delegate), listen_fd_(-1) { - DCHECK(delegate_); - CreateSocket(); -} - -ChannelFactory::~ChannelFactory() { - Close(); -} - -bool ChannelFactory::CreateSocket() { - DCHECK(listen_fd_ < 0); - - // Create the socket. - return CreateServerUnixDomainSocket(path_, &listen_fd_); -} - -bool ChannelFactory::Listen() { - if (listen_fd_ < 0) - return false; - - // Watch the fd for connections, and turn any connections into - // active sockets. - base::MessageLoopForIO::current()->WatchFileDescriptor( - listen_fd_, - true, - base::MessageLoopForIO::WATCH_READ, - &server_listen_connection_watcher_, - this); - return true; -} - -// Called by libevent when we can read from the fd without blocking. -void ChannelFactory::OnFileCanReadWithoutBlocking(int fd) { - DCHECK(fd == listen_fd_); - int new_fd = -1; - if (!ServerAcceptConnection(listen_fd_, &new_fd)) { - Close(); - delegate_->OnListenError(); - return; - } - base::ScopedFD scoped_fd(new_fd); - - if (!scoped_fd.is_valid()) { - // The accept() failed, but not in such a way that the factory needs to be - // shut down. - return; - } - - // Verify that the IPC channel peer is running as the same user. - if (!IsPeerAuthorized(scoped_fd.get())) - return; - - ChannelHandle handle(std::string(), - base::FileDescriptor(scoped_fd.release(), true)); - delegate_->OnClientConnected(handle); -} - -void ChannelFactory::OnFileCanWriteWithoutBlocking(int fd) { - NOTREACHED() << "Listen fd should never be writable."; -} - -void ChannelFactory::Close() { - if (listen_fd_ < 0) - return; - if (IGNORE_EINTR(close(listen_fd_)) < 0) - PLOG(ERROR) << "close"; - listen_fd_ = -1; - if (unlink(path_.value().c_str()) < 0) - PLOG(ERROR) << "unlink"; - - // Unregister libevent for the listening socket and close it. - server_listen_connection_watcher_.StopWatchingFileDescriptor(); -} - -} // namespace IPC diff --git a/ipc/ipc_channel_factory.h b/ipc/ipc_channel_factory.h deleted file mode 100644 index 3115601..0000000 --- a/ipc/ipc_channel_factory.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IPC_IPC_CHANNEL_FACTORY_H_ -#define IPC_IPC_CHANNEL_FACTORY_H_ - -#include "base/files/file_path.h" -#include "base/message_loop/message_loop.h" -#include "ipc/ipc_channel_handle.h" -#include "ipc/ipc_export.h" - -namespace IPC { - -// A ChannelFactory listens on a UNIX domain socket. When a client connects to -// the socket, it accept()s the connection and passes the new FD to the -// delegate. The delegate is then responsible for creating a new IPC::Channel -// for the FD. -class IPC_EXPORT ChannelFactory : public base::MessageLoopForIO::Watcher { - public: - class Delegate { - public: - // Called when a client connects to the factory. It is the delegate's - // responsibility to create an IPC::Channel for the handle, or else close - // the file descriptor contained therein. - virtual void OnClientConnected(const ChannelHandle& handle) = 0; - - // Called when an error occurs and the channel is closed. - virtual void OnListenError() = 0; - }; - - ChannelFactory(const base::FilePath& path, Delegate* delegate); - - virtual ~ChannelFactory(); - - // Call this to start listening on the socket. - bool Listen(); - - // Close and unlink the socket, and stop accepting connections. - void Close(); - - private: - bool CreateSocket(); - virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; - virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE; - - base::MessageLoopForIO::FileDescriptorWatcher - server_listen_connection_watcher_; - base::FilePath path_; - Delegate* delegate_; - int listen_fd_; - - DISALLOW_COPY_AND_ASSIGN(ChannelFactory); -}; - -} // namespace IPC - -#endif // IPC_IPC_CHANNEL_FACTORY_H_ |