1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/process.h"
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/logging.h"
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/process_util.h"
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace base {
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid Process::Close() {
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (!process_)
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return;
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  ::CloseHandle(process_);
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  process_ = NULL;
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid Process::Terminate(int result_code) {
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (!process_)
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return;
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  ::TerminateProcess(process_, result_code);
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool Process::IsProcessBackgrounded() const {
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (!process_)
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return false;  // Failure case.
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  DWORD priority = GetPriority();
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (priority == 0)
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return false;  // Failure case.
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return priority == BELOW_NORMAL_PRIORITY_CLASS;
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool Process::SetProcessBackgrounded(bool value) {
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (!process_)
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return false;
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  DWORD priority = value ? BELOW_NORMAL_PRIORITY_CLASS : NORMAL_PRIORITY_CLASS;
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return (SetPriorityClass(process_, priority) != 0);
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottProcessId Process::pid() const {
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (process_ == 0)
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return 0;
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return GetProcId(process_);
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool Process::is_current() const {
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return process_ == GetCurrentProcess();
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottProcess Process::Current() {
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return Process(GetCurrentProcess());
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottint Process::GetPriority() const {
58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  DCHECK(process_);
59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return GetPriorityClass(process_);
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace base
63