diff options
Diffstat (limited to 'base/process/process.h')
-rw-r--r-- | base/process/process.h | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/base/process/process.h b/base/process/process.h index 70c8260193..fc2add24c5 100644 --- a/base/process/process.h +++ b/base/process/process.h @@ -15,8 +15,17 @@ #include "base/win/scoped_handle.h" #endif +#if defined(OS_MACOSX) +#include "base/feature_list.h" +#include "base/process/port_provider_mac.h" +#endif + namespace base { +#if defined(OS_MACOSX) +extern const Feature kMacAllowBackgroundingProcesses; +#endif + // Provides a move-only encapsulation of a process. // // This object is not tied to the lifetime of the underlying process: the @@ -67,6 +76,9 @@ class BASE_EXPORT Process { // Returns true if processes can be backgrounded. static bool CanBackgroundProcesses(); + // Terminates the current process immediately with |exit_code|. + static void TerminateCurrentProcessImmediately(int exit_code); + // Returns true if this objects represents a valid process. bool IsValid() const; @@ -99,13 +111,35 @@ class BASE_EXPORT Process { // any process. // NOTE: |exit_code| is optional, nullptr can be passed if the exit code is // not required. - bool WaitForExit(int* exit_code); + bool WaitForExit(int* exit_code) const; // Same as WaitForExit() but only waits for up to |timeout|. // NOTE: |exit_code| is optional, nullptr can be passed if the exit code // is not required. - bool WaitForExitWithTimeout(TimeDelta timeout, int* exit_code); - + bool WaitForExitWithTimeout(TimeDelta timeout, int* exit_code) const; + +#if defined(OS_MACOSX) + // The Mac needs a Mach port in order to manipulate a process's priority, + // and there's no good way to get that from base given the pid. These Mac + // variants of the IsProcessBackgrounded and SetProcessBackgrounded API take + // a port provider for this reason. See crbug.com/460102 + // + // A process is backgrounded when its task priority is + // |TASK_BACKGROUND_APPLICATION|. + // + // Returns true if the port_provider can locate a task port for the process + // and it is backgrounded. If port_provider is null, returns false. + bool IsProcessBackgrounded(PortProvider* port_provider) const; + + // Set the process as backgrounded. If value is + // true, the priority of the associated task will be set to + // TASK_BACKGROUND_APPLICATION. If value is false, the + // priority of the process will be set to TASK_FOREGROUND_APPLICATION. + // + // Returns true if the priority was changed, false otherwise. If + // |port_provider| is null, this is a no-op and it returns false. + bool SetProcessBackgrounded(PortProvider* port_provider, bool value); +#else // A process is backgrounded when it's priority is lower than normal. // Return true if this process is backgrounded, false otherwise. bool IsProcessBackgrounded() const; @@ -115,7 +149,7 @@ class BASE_EXPORT Process { // will be made "normal" - equivalent to default process priority. // Returns true if the priority was changed, false otherwise. bool SetProcessBackgrounded(bool value); - +#endif // defined(OS_MACOSX) // Returns an integer representing the priority of a process. The meaning // of this value is OS dependent. int GetPriority() const; |