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

Side by Side Diff: ipc/ipc_channel_posix.cc

Issue 2118083002: ShellClient -> Service (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mus2
Patch Set: . Created 4 years, 5 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/unix_domain_socket_util.h » ('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 <stdint.h> 10 #include <stdint.h>
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 // Watch the pipe for connections, and turn any connections into 357 // Watch the pipe for connections, and turn any connections into
358 // active sockets. 358 // active sockets.
359 base::MessageLoopForIO::current()->WatchFileDescriptor( 359 base::MessageLoopForIO::current()->WatchFileDescriptor(
360 server_listen_pipe_.get(), 360 server_listen_pipe_.get(),
361 true, 361 true,
362 base::MessageLoopForIO::WATCH_READ, 362 base::MessageLoopForIO::WATCH_READ,
363 &server_listen_connection_watcher_, 363 &server_listen_connection_watcher_,
364 this); 364 this);
365 #endif 365 #endif
366 } else { 366 } else {
367 did_connect = AcceptConnection(); 367 did_connect = OnConnect();
368 } 368 }
369 return did_connect; 369 return did_connect;
370 } 370 }
371 371
372 void ChannelPosix::CloseFileDescriptors(Message* msg) { 372 void ChannelPosix::CloseFileDescriptors(Message* msg) {
373 #if defined(OS_MACOSX) 373 #if defined(OS_MACOSX)
374 // There is a bug on OSX which makes it dangerous to close 374 // There is a bug on OSX which makes it dangerous to close
375 // a file descriptor while it is in transit. So instead we 375 // a file descriptor while it is in transit. So instead we
376 // store the file descriptor in a set and send a message to 376 // store the file descriptor in a set and send a message to
377 // the recipient, which is queued AFTER the message that 377 // the recipient, which is queued AFTER the message that
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 #endif // OS_LINUX 625 #endif // OS_LINUX
626 626
627 // Called by libevent when we can read from the pipe without blocking. 627 // Called by libevent when we can read from the pipe without blocking.
628 void ChannelPosix::OnFileCanReadWithoutBlocking(int fd) { 628 void ChannelPosix::OnFileCanReadWithoutBlocking(int fd) {
629 if (fd == server_listen_pipe_.get()) { 629 if (fd == server_listen_pipe_.get()) {
630 #if defined(OS_NACL_NONSFI) 630 #if defined(OS_NACL_NONSFI)
631 LOG(FATAL) 631 LOG(FATAL)
632 << "IPC channels in nacl_helper_nonsfi should not be SERVER mode."; 632 << "IPC channels in nacl_helper_nonsfi should not be SERVER mode.";
633 #else 633 #else
634 int new_pipe = 0; 634 int new_pipe = 0;
635 if (!ServerAcceptConnection(server_listen_pipe_.get(), &new_pipe) || 635 if (!ServerOnConnect(server_listen_pipe_.get(), &new_pipe) ||
636 new_pipe < 0) { 636 new_pipe < 0) {
637 Close(); 637 Close();
638 listener()->OnChannelListenError(); 638 listener()->OnChannelListenError();
639 } 639 }
640 640
641 if (pipe_.is_valid()) { 641 if (pipe_.is_valid()) {
642 // We already have a connection. We only handle one at a time. 642 // We already have a connection. We only handle one at a time.
643 // close our new descriptor. 643 // close our new descriptor.
644 if (HANDLE_EINTR(shutdown(new_pipe, SHUT_RDWR)) < 0) 644 if (HANDLE_EINTR(shutdown(new_pipe, SHUT_RDWR)) < 0)
645 DPLOG(ERROR) << "shutdown " << pipe_name_; 645 DPLOG(ERROR) << "shutdown " << pipe_name_;
(...skipping 12 matching lines...) Expand all
658 ResetToAcceptingConnectionState(); 658 ResetToAcceptingConnectionState();
659 return; 659 return;
660 } 660 }
661 if (client_euid != geteuid()) { 661 if (client_euid != geteuid()) {
662 DLOG(WARNING) << "Client euid is not authorised"; 662 DLOG(WARNING) << "Client euid is not authorised";
663 ResetToAcceptingConnectionState(); 663 ResetToAcceptingConnectionState();
664 return; 664 return;
665 } 665 }
666 } 666 }
667 667
668 if (!AcceptConnection()) { 668 if (!OnConnect()) {
669 NOTREACHED() << "AcceptConnection should not fail on server"; 669 NOTREACHED() << "AcceptConnection should not fail on server";
670 } 670 }
671 waiting_connect_ = false; 671 waiting_connect_ = false;
672 #endif 672 #endif
673 } else if (fd == pipe_) { 673 } else if (fd == pipe_) {
674 if (waiting_connect_ && (mode_ & MODE_SERVER_FLAG)) { 674 if (waiting_connect_ && (mode_ & MODE_SERVER_FLAG)) {
675 waiting_connect_ = false; 675 waiting_connect_ = false;
676 } 676 }
677 if (ProcessIncomingMessages() == DISPATCH_ERROR) { 677 if (ProcessIncomingMessages() == DISPATCH_ERROR) {
678 // ClosePipeOnError may delete this object, so we mustn't call 678 // ClosePipeOnError may delete this object, so we mustn't call
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 // Delete any unprocessed messages. 761 // Delete any unprocessed messages.
762 while (!prelim_queue.empty()) { 762 while (!prelim_queue.empty()) {
763 Message* m = prelim_queue.front(); 763 Message* m = prelim_queue.front();
764 delete m; 764 delete m;
765 prelim_queue.pop(); 765 prelim_queue.pop();
766 } 766 }
767 767
768 return !processing_error; 768 return !processing_error;
769 } 769 }
770 770
771 bool ChannelPosix::AcceptConnection() { 771 bool ChannelPosix::OnConnect() {
772 base::MessageLoopForIO::current()->WatchFileDescriptor( 772 base::MessageLoopForIO::current()->WatchFileDescriptor(
773 pipe_.get(), 773 pipe_.get(),
774 true, 774 true,
775 base::MessageLoopForIO::WATCH_READ, 775 base::MessageLoopForIO::WATCH_READ,
776 &read_watcher_, 776 &read_watcher_,
777 this); 777 this);
778 QueueHelloMessage(); 778 QueueHelloMessage();
779 779
780 if (mode_ & MODE_CLIENT_FLAG) { 780 if (mode_ & MODE_CLIENT_FLAG) {
781 // If we are a client we want to send a hello message out immediately. 781 // If we are a client we want to send a hello message out immediately.
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 // static 1139 // static
1140 void Channel::SetGlobalPid(int pid) { 1140 void Channel::SetGlobalPid(int pid) {
1141 ChannelPosix::SetGlobalPid(pid); 1141 ChannelPosix::SetGlobalPid(pid);
1142 } 1142 }
1143 int Channel::GetGlobalPid() { 1143 int Channel::GetGlobalPid() {
1144 return ChannelPosix::GetGlobalPid(); 1144 return ChannelPosix::GetGlobalPid();
1145 } 1145 }
1146 #endif // OS_LINUX 1146 #endif // OS_LINUX
1147 1147
1148 } // namespace IPC 1148 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/ipc_channel_posix.h ('k') | ipc/unix_domain_socket_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698