1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/process/process.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <limits> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include "base/immediate_crash.h" 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker namespace base { 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker static constexpr ProcessHandle kCurrentProcessHandle = 14*6777b538SAndroid Build Coastguard Worker std::numeric_limits<ProcessHandle>::max(); 15*6777b538SAndroid Build Coastguard Worker Process(ProcessHandle handle)16*6777b538SAndroid Build Coastguard WorkerProcess::Process(ProcessHandle handle) : process_(handle) { 17*6777b538SAndroid Build Coastguard Worker DCHECK(handle == kNullProcessHandle || handle == kCurrentProcessHandle); 18*6777b538SAndroid Build Coastguard Worker } 19*6777b538SAndroid Build Coastguard Worker Process(Process && other)20*6777b538SAndroid Build Coastguard WorkerProcess::Process(Process&& other) : process_(other.process_) { 21*6777b538SAndroid Build Coastguard Worker other.Close(); 22*6777b538SAndroid Build Coastguard Worker } 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker Process::~Process() = default; 25*6777b538SAndroid Build Coastguard Worker operator =(Process && other)26*6777b538SAndroid Build Coastguard WorkerProcess& Process::operator=(Process&& other) { 27*6777b538SAndroid Build Coastguard Worker process_ = other.process_; 28*6777b538SAndroid Build Coastguard Worker other.Close(); 29*6777b538SAndroid Build Coastguard Worker return *this; 30*6777b538SAndroid Build Coastguard Worker } 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker // static Current()33*6777b538SAndroid Build Coastguard WorkerProcess Process::Current() { 34*6777b538SAndroid Build Coastguard Worker return Process(kCurrentProcessHandle); 35*6777b538SAndroid Build Coastguard Worker } 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker // static Open(ProcessId pid)38*6777b538SAndroid Build Coastguard WorkerProcess Process::Open(ProcessId pid) { 39*6777b538SAndroid Build Coastguard Worker if (pid == GetCurrentProcId()) { 40*6777b538SAndroid Build Coastguard Worker return Current(); 41*6777b538SAndroid Build Coastguard Worker } 42*6777b538SAndroid Build Coastguard Worker return Process(pid); 43*6777b538SAndroid Build Coastguard Worker } 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker // static OpenWithExtraPrivileges(ProcessId pid)46*6777b538SAndroid Build Coastguard WorkerProcess Process::OpenWithExtraPrivileges(ProcessId pid) { 47*6777b538SAndroid Build Coastguard Worker return Open(pid); 48*6777b538SAndroid Build Coastguard Worker } 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker // static TerminateCurrentProcessImmediately(int exit_code)51*6777b538SAndroid Build Coastguard Workervoid Process::TerminateCurrentProcessImmediately(int exit_code) { 52*6777b538SAndroid Build Coastguard Worker // This method is marked noreturn, so we crash rather than just provide an 53*6777b538SAndroid Build Coastguard Worker // empty stub implementation. 54*6777b538SAndroid Build Coastguard Worker ImmediateCrash(); 55*6777b538SAndroid Build Coastguard Worker } 56*6777b538SAndroid Build Coastguard Worker Terminate(int exit_code,bool wait) const57*6777b538SAndroid Build Coastguard Workerbool Process::Terminate(int exit_code, bool wait) const { 58*6777b538SAndroid Build Coastguard Worker return false; 59*6777b538SAndroid Build Coastguard Worker } 60*6777b538SAndroid Build Coastguard Worker IsValid() const61*6777b538SAndroid Build Coastguard Workerbool Process::IsValid() const { 62*6777b538SAndroid Build Coastguard Worker return process_ != kNullProcessHandle; 63*6777b538SAndroid Build Coastguard Worker } 64*6777b538SAndroid Build Coastguard Worker Handle() const65*6777b538SAndroid Build Coastguard WorkerProcessHandle Process::Handle() const { 66*6777b538SAndroid Build Coastguard Worker return process_; 67*6777b538SAndroid Build Coastguard Worker } 68*6777b538SAndroid Build Coastguard Worker Duplicate() const69*6777b538SAndroid Build Coastguard WorkerProcess Process::Duplicate() const { 70*6777b538SAndroid Build Coastguard Worker return Process(process_); 71*6777b538SAndroid Build Coastguard Worker } 72*6777b538SAndroid Build Coastguard Worker Release()73*6777b538SAndroid Build Coastguard WorkerProcessHandle Process::Release() { 74*6777b538SAndroid Build Coastguard Worker ProcessHandle handle = process_; 75*6777b538SAndroid Build Coastguard Worker Close(); 76*6777b538SAndroid Build Coastguard Worker return handle; 77*6777b538SAndroid Build Coastguard Worker } 78*6777b538SAndroid Build Coastguard Worker Pid() const79*6777b538SAndroid Build Coastguard WorkerProcessId Process::Pid() const { 80*6777b538SAndroid Build Coastguard Worker return process_; 81*6777b538SAndroid Build Coastguard Worker } 82*6777b538SAndroid Build Coastguard Worker CreationTime() const83*6777b538SAndroid Build Coastguard WorkerTime Process::CreationTime() const { 84*6777b538SAndroid Build Coastguard Worker return Time(); 85*6777b538SAndroid Build Coastguard Worker } 86*6777b538SAndroid Build Coastguard Worker is_current() const87*6777b538SAndroid Build Coastguard Workerbool Process::is_current() const { 88*6777b538SAndroid Build Coastguard Worker return Handle() == kCurrentProcessHandle; 89*6777b538SAndroid Build Coastguard Worker } 90*6777b538SAndroid Build Coastguard Worker Close()91*6777b538SAndroid Build Coastguard Workervoid Process::Close() { 92*6777b538SAndroid Build Coastguard Worker process_ = kNullProcessHandle; 93*6777b538SAndroid Build Coastguard Worker } 94*6777b538SAndroid Build Coastguard Worker WaitForExit(int * exit_code) const95*6777b538SAndroid Build Coastguard Workerbool Process::WaitForExit(int* exit_code) const { 96*6777b538SAndroid Build Coastguard Worker return false; 97*6777b538SAndroid Build Coastguard Worker } 98*6777b538SAndroid Build Coastguard Worker WaitForExitWithTimeout(TimeDelta timeout,int * exit_code) const99*6777b538SAndroid Build Coastguard Workerbool Process::WaitForExitWithTimeout(TimeDelta timeout, int* exit_code) const { 100*6777b538SAndroid Build Coastguard Worker return false; 101*6777b538SAndroid Build Coastguard Worker } 102*6777b538SAndroid Build Coastguard Worker Exited(int exit_code) const103*6777b538SAndroid Build Coastguard Workervoid Process::Exited(int exit_code) const {} 104*6777b538SAndroid Build Coastguard Worker GetPriority() const105*6777b538SAndroid Build Coastguard WorkerProcess::Priority Process::GetPriority() const { 106*6777b538SAndroid Build Coastguard Worker return Priority::kUserBlocking; 107*6777b538SAndroid Build Coastguard Worker } 108*6777b538SAndroid Build Coastguard Worker SetPriority(Priority priority)109*6777b538SAndroid Build Coastguard Workerbool Process::SetPriority(Priority priority) { 110*6777b538SAndroid Build Coastguard Worker return false; 111*6777b538SAndroid Build Coastguard Worker } 112*6777b538SAndroid Build Coastguard Worker GetOSPriority() const113*6777b538SAndroid Build Coastguard Workerint Process::GetOSPriority() const { 114*6777b538SAndroid Build Coastguard Worker return -1; 115*6777b538SAndroid Build Coastguard Worker } 116*6777b538SAndroid Build Coastguard Worker 117*6777b538SAndroid Build Coastguard Worker } // namespace base 118