| Index: content/browser/zygote_host/zygote_communication_linux.h
|
| diff --git a/content/browser/zygote_host/zygote_communication_linux.h b/content/browser/zygote_host/zygote_communication_linux.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..175ba2bc14f811cec204c2d0c9f81be859a4e2e1
|
| --- /dev/null
|
| +++ b/content/browser/zygote_host/zygote_communication_linux.h
|
| @@ -0,0 +1,93 @@
|
| +// Copyright 2015 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 CONTENT_COMMON_ZYGOTE_COMMUNICATION_H_
|
| +#define CONTENT_COMMON_ZYGOTE_COMMUNICATION_H_
|
| +
|
| +#include <set>
|
| +#include <vector>
|
| +
|
| +#include "base/process/kill.h"
|
| +#include "base/synchronization/lock.h"
|
| +#include "content/common/content_export.h"
|
| +#include "content/public/browser/file_descriptor_info.h"
|
| +
|
| +namespace content {
|
| +
|
| +class CONTENT_EXPORT ZygoteCommunication {
|
| + public:
|
| + ZygoteCommunication();
|
| + ~ZygoteCommunication();
|
| +
|
| + void Init();
|
| +
|
| + // Tries to start a process of type indicated by process_type.
|
| + // Returns its pid on success, otherwise
|
| + // base::kNullProcessHandle;
|
| + pid_t ForkRequest(const std::vector<std::string>& command_line,
|
| + scoped_ptr<FileDescriptorInfo> mapping,
|
| + const std::string& process_type);
|
| +
|
| + void EnsureProcessTerminated(pid_t process);
|
| +
|
| + // Should be called every time a Zygote child died.
|
| + void ZygoteChildDied(pid_t process);
|
| +
|
| + // Get the termination status (and, optionally, the exit code) of
|
| + // the process. |exit_code| is set to the exit code of the child
|
| + // process. (|exit_code| may be NULL.)
|
| + // Unfortunately the Zygote can not accurately figure out if a process
|
| + // is already dead without waiting synchronously for it.
|
| + // |known_dead| should be set to true when we already know that the process
|
| + // is dead. When |known_dead| is false, processes could be seen as
|
| + // still running, even when they're not. When |known_dead| is true, the
|
| + // process will be SIGKILL-ed first (which should have no effect if it was
|
| + // really dead). This is to prevent a waiting waitpid() from blocking in
|
| + // a single-threaded Zygote. See crbug.com/157458.
|
| + base::TerminationStatus GetTerminationStatus(base::ProcessHandle handle,
|
| + bool known_dead,
|
| + int* exit_code);
|
| +
|
| + // Returns the sandbox status of this zygote.
|
| + int GetSandboxStatus();
|
| +
|
| + private:
|
| + // Whether we should use the namespace sandbox instead of the setuid sandbox.
|
| + bool ShouldUseNamespaceSandbox();
|
| +
|
| + // Should be called every time a Zygote child is born.
|
| + void ZygoteChildBorn(pid_t process);
|
| +
|
| + // Read the reply from the zygote.
|
| + ssize_t ReadReply(void* buf, size_t buf_len);
|
| +
|
| + // Sends |data| to the zygote via |control_fd_|. If |fds| is non-NULL, the
|
| + // included file descriptors will also be passed. The caller is responsible
|
| + // for acquiring |control_lock_|.
|
| + bool SendMessage(const base::Pickle& data, const std::vector<int>* fds);
|
| +
|
| + // Get the sandbox status from the zygote.
|
| + ssize_t ReadSandboxStatus();
|
| +
|
| + // Set to true when this is initialiazed successfuly.
|
| + bool init_;
|
| + int control_fd_; // the socket to the zygote.
|
| + // A lock protecting all communication with the zygote. This lock must be
|
| + // acquired before sending a command and released after the result has been
|
| + // received.
|
| + base::Lock control_lock_;
|
| + // The pid of the zygote.
|
| + pid_t pid_;
|
| + // The listen of running zygote children.
|
| + std::set<pid_t> list_of_running_zygote_children_;
|
| + // The lock to guard the list of running zygote children.
|
| + base::Lock child_tracking_lock_;
|
| + bool have_read_sandbox_status_word_;
|
| + bool use_suid_sandbox_for_adj_oom_score_;
|
| + int sandbox_status_;
|
| +};
|
| +
|
| +} // namespace content
|
| +
|
| +#endif // CONTENT_COMMON_ZYGOTE_COMMUNICATION_H_
|
|
|