Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: ipc/ipc_channel_posix.cc

Issue 1185133006: IPC: Make ChannelReader inherit from SupportsAttachmentBrokering. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments from tsepez. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ipc/ipc_channel_posix.h ('k') | ipc/ipc_channel_posix_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_posix.h" 5 #include "ipc/ipc_channel_posix.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <fcntl.h> 8 #include <fcntl.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 #include <sys/socket.h> 10 #include <sys/socket.h>
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 } 175 }
176 #endif 176 #endif
177 177
178 //------------------------------------------------------------------------------ 178 //------------------------------------------------------------------------------
179 179
180 #if defined(OS_LINUX) 180 #if defined(OS_LINUX)
181 int ChannelPosix::global_pid_ = 0; 181 int ChannelPosix::global_pid_ = 0;
182 #endif // OS_LINUX 182 #endif // OS_LINUX
183 183
184 ChannelPosix::ChannelPosix(const IPC::ChannelHandle& channel_handle, 184 ChannelPosix::ChannelPosix(const IPC::ChannelHandle& channel_handle,
185 Mode mode, Listener* listener) 185 Mode mode,
186 Listener* listener,
187 AttachmentBroker* broker)
186 : ChannelReader(listener), 188 : ChannelReader(listener),
187 mode_(mode), 189 mode_(mode),
188 peer_pid_(base::kNullProcessId), 190 peer_pid_(base::kNullProcessId),
189 is_blocked_on_write_(false), 191 is_blocked_on_write_(false),
190 waiting_connect_(true), 192 waiting_connect_(true),
191 message_send_bytes_written_(0), 193 message_send_bytes_written_(0),
192 pipe_name_(channel_handle.name), 194 pipe_name_(channel_handle.name),
193 in_dtor_(false), 195 in_dtor_(false),
194 must_unlink_(false) { 196 must_unlink_(false),
197 broker_(broker) {
195 if (!CreatePipe(channel_handle)) { 198 if (!CreatePipe(channel_handle)) {
196 // The pipe may have been closed already. 199 // The pipe may have been closed already.
197 const char *modestr = (mode_ & MODE_SERVER_FLAG) ? "server" : "client"; 200 const char *modestr = (mode_ & MODE_SERVER_FLAG) ? "server" : "client";
198 LOG(WARNING) << "Unable to create pipe named \"" << channel_handle.name 201 LOG(WARNING) << "Unable to create pipe named \"" << channel_handle.name
199 << "\" in " << modestr << " mode"; 202 << "\" in " << modestr << " mode";
200 } 203 }
201 } 204 }
202 205
203 ChannelPosix::~ChannelPosix() { 206 ChannelPosix::~ChannelPosix() {
204 in_dtor_ = true; 207 in_dtor_ = true;
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 513
511 message->TraceMessageBegin(); 514 message->TraceMessageBegin();
512 output_queue_.push(message); 515 output_queue_.push(message);
513 if (!is_blocked_on_write_ && !waiting_connect_) { 516 if (!is_blocked_on_write_ && !waiting_connect_) {
514 return ProcessOutgoingMessages(); 517 return ProcessOutgoingMessages();
515 } 518 }
516 519
517 return true; 520 return true;
518 } 521 }
519 522
523 AttachmentBroker* ChannelPosix::GetAttachmentBroker() {
524 return broker_;
525 }
526
520 int ChannelPosix::GetClientFileDescriptor() const { 527 int ChannelPosix::GetClientFileDescriptor() const {
521 base::AutoLock lock(client_pipe_lock_); 528 base::AutoLock lock(client_pipe_lock_);
522 return client_pipe_.get(); 529 return client_pipe_.get();
523 } 530 }
524 531
525 base::ScopedFD ChannelPosix::TakeClientFileDescriptor() { 532 base::ScopedFD ChannelPosix::TakeClientFileDescriptor() {
526 base::AutoLock lock(client_pipe_lock_); 533 base::AutoLock lock(client_pipe_lock_);
527 if (!client_pipe_.is_valid()) 534 if (!client_pipe_.is_valid())
528 return base::ScopedFD(); 535 return base::ScopedFD();
529 PipeMap::GetInstance()->Remove(pipe_name_); 536 PipeMap::GetInstance()->Remove(pipe_name_);
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 if (-1 != fd_to_close) { 995 if (-1 != fd_to_close) {
989 int rv = IGNORE_EINTR(close(fd_to_close)); 996 int rv = IGNORE_EINTR(close(fd_to_close));
990 DPCHECK(0 == rv); 997 DPCHECK(0 == rv);
991 } 998 }
992 } 999 }
993 1000
994 //------------------------------------------------------------------------------ 1001 //------------------------------------------------------------------------------
995 // Channel's methods 1002 // Channel's methods
996 1003
997 // static 1004 // static
998 scoped_ptr<Channel> Channel::Create( 1005 scoped_ptr<Channel> Channel::Create(const IPC::ChannelHandle& channel_handle,
999 const IPC::ChannelHandle &channel_handle, Mode mode, Listener* listener) { 1006 Mode mode,
1000 return make_scoped_ptr(new ChannelPosix(channel_handle, mode, listener)); 1007 Listener* listener,
1008 AttachmentBroker* broker) {
1009 return make_scoped_ptr(
1010 new ChannelPosix(channel_handle, mode, listener, broker));
1001 } 1011 }
1002 1012
1003 // static 1013 // static
1004 std::string Channel::GenerateVerifiedChannelID(const std::string& prefix) { 1014 std::string Channel::GenerateVerifiedChannelID(const std::string& prefix) {
1005 // A random name is sufficient validation on posix systems, so we don't need 1015 // A random name is sufficient validation on posix systems, so we don't need
1006 // an additional shared secret. 1016 // an additional shared secret.
1007 1017
1008 std::string id = prefix; 1018 std::string id = prefix;
1009 if (!id.empty()) 1019 if (!id.empty())
1010 id.append("."); 1020 id.append(".");
1011 1021
1012 return id.append(GenerateUniqueRandomChannelID()); 1022 return id.append(GenerateUniqueRandomChannelID());
1013 } 1023 }
1014 1024
1015 bool Channel::IsNamedServerInitialized( 1025 bool Channel::IsNamedServerInitialized(
1016 const std::string& channel_id) { 1026 const std::string& channel_id) {
1017 return ChannelPosix::IsNamedServerInitialized(channel_id); 1027 return ChannelPosix::IsNamedServerInitialized(channel_id);
1018 } 1028 }
1019 1029
1020 #if defined(OS_LINUX) 1030 #if defined(OS_LINUX)
1021 // static 1031 // static
1022 void Channel::SetGlobalPid(int pid) { 1032 void Channel::SetGlobalPid(int pid) {
1023 ChannelPosix::SetGlobalPid(pid); 1033 ChannelPosix::SetGlobalPid(pid);
1024 } 1034 }
1025 #endif // OS_LINUX 1035 #endif // OS_LINUX
1026 1036
1027 } // namespace IPC 1037 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/ipc_channel_posix.h ('k') | ipc/ipc_channel_posix_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698