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

Unified Diff: chrome/browser/chromeos/process_proxy/process_output_watcher.cc

Issue 12433023: Move chrome/browser/chromeos/process_proxy to chromeos (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/process_proxy/process_output_watcher.cc
diff --git a/chrome/browser/chromeos/process_proxy/process_output_watcher.cc b/chrome/browser/chromeos/process_proxy/process_output_watcher.cc
deleted file mode 100644
index b89537aa1d4cf8e0f659c40b6ccde0c870e70512..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/process_proxy/process_output_watcher.cc
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/chromeos/process_proxy/process_output_watcher.h"
-
-#include <algorithm>
-#include <cstdio>
-#include <cstring>
-
-#include <sys/ioctl.h>
-#include <sys/select.h>
-#include <unistd.h>
-
-#include "base/logging.h"
-#include "base/posix/eintr_wrapper.h"
-
-namespace {
-
-void InitReadFdSet(int out_fd, int stop_fd, fd_set* set) {
- FD_ZERO(set);
- if (out_fd != -1)
- FD_SET(out_fd, set);
- FD_SET(stop_fd, set);
-}
-
-void CloseFd(int* fd) {
- if (*fd >= 0) {
- if (HANDLE_EINTR(close(*fd)) != 0)
- DPLOG(WARNING) << "close fd " << *fd << " failed.";
- }
- *fd = -1;
-}
-
-} // namespace
-
-ProcessOutputWatcher::ProcessOutputWatcher(int out_fd, int stop_fd,
- const ProcessOutputCallback& callback)
- : out_fd_(out_fd),
- stop_fd_(stop_fd),
- on_read_callback_(callback) {
- VerifyFileDescriptor(out_fd_);
- VerifyFileDescriptor(stop_fd_);
- max_fd_ = std::max(out_fd_, stop_fd_);
- // We want to be sure we will be able to add 0 at the end of the input, so -1.
- read_buffer_size_ = arraysize(read_buffer_) - 1;
-}
-
-void ProcessOutputWatcher::Start() {
- WatchProcessOutput();
- OnStop();
-}
-
-ProcessOutputWatcher::~ProcessOutputWatcher() {
- CloseFd(&out_fd_);
- CloseFd(&stop_fd_);
-}
-
-void ProcessOutputWatcher::WatchProcessOutput() {
- while (true) {
- // This has to be reset with every watch cycle.
- fd_set rfds;
- DCHECK(stop_fd_ >= 0);
- InitReadFdSet(out_fd_, stop_fd_, &rfds);
-
- int select_result =
- HANDLE_EINTR(select(max_fd_ + 1, &rfds, NULL, NULL, NULL));
-
- if (select_result < 0) {
- DPLOG(WARNING) << "select failed";
- return;
- }
-
- // Check if we were stopped.
- if (FD_ISSET(stop_fd_, &rfds)) {
- return;
- }
-
- if (out_fd_ != -1 && FD_ISSET(out_fd_, &rfds)) {
- ReadFromFd(PROCESS_OUTPUT_TYPE_OUT, &out_fd_);
- }
- }
-}
-
-void ProcessOutputWatcher::VerifyFileDescriptor(int fd) {
- CHECK_LE(0, fd);
- CHECK_GT(FD_SETSIZE, fd);
-}
-
-void ProcessOutputWatcher::ReadFromFd(ProcessOutputType type, int* fd) {
- // We don't want to necessary read pipe until it is empty so we don't starve
- // other streams in case data is written faster than we read it. If there is
- // more than read_buffer_size_ bytes in pipe, it will be read in the next
- // iteration.
- ssize_t bytes_read = HANDLE_EINTR(read(*fd, read_buffer_, read_buffer_size_));
- if (bytes_read < 0)
- DPLOG(WARNING) << "read from buffer failed";
-
- if (bytes_read > 0) {
- on_read_callback_.Run(type, std::string(read_buffer_, bytes_read));
- }
-
- // If there is nothing on the output the watched process has exited (slave end
- // of pty is closed).
- if (bytes_read <= 0) {
- // Slave pseudo terminal has been closed, we won't need master fd anymore.
- CloseFd(fd);
-
- // We have lost contact with the process, so report it.
- on_read_callback_.Run(PROCESS_OUTPUT_TYPE_EXIT, "");
- }
-}
-
-void ProcessOutputWatcher::OnStop() {
- delete this;
-}

Powered by Google App Engine
This is Rietveld 408576698