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

Unified Diff: base/process/process.h

Issue 651253002: Enforce handle ownership in base::Process (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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: base/process/process.h
diff --git a/base/process/process.h b/base/process/process.h
index 20e8884b9720f04fad879980107c14a9a3951f31..41c9976ead89be16e9175b710afbd5e375ea64c2 100644
--- a/base/process/process.h
+++ b/base/process/process.h
@@ -7,11 +7,88 @@
#include "base/base_export.h"
#include "base/basictypes.h"
+#include "base/move.h"
#include "base/process/process_handle.h"
#include "build/build_config.h"
+#if defined(OS_WIN)
+#include "base/win/scoped_handle.h"
+#endif
+
namespace base {
+// Provides a move-only implementation of Process.
+// TODO(rvargas) crbug.com/417532: Reaname this class Process after switching
scottmg 2014/10/14 18:51:02 Any chance we could do that upfront? i.e. switch P
scottmg 2014/10/14 18:51:03 nit; "Rename"
rvargas (doing something else) 2014/10/14 19:56:54 I was trying to avoid a huge change right now, but
+// all users and deleting the old implementation.
+class BASE_EXPORT ProcessObject {
+ MOVE_ONLY_TYPE_FOR_CPP_03(ProcessObject, RValue)
+
+ public:
+ explicit ProcessObject(ProcessHandle handle = kNullProcessHandle);
scottmg 2014/10/14 18:51:02 nit; I think default args are against "the rules"
rvargas (doing something else) 2014/10/14 19:56:54 I though that too until some recent thread involvi
+
+ // Move constructor for C++03 move emulation of this type.
+ ProcessObject(RValue other);
+
+ // The destructor does not terminate the process.
scottmg 2014/10/14 18:51:03 Is it possible the handle could be reused if Proce
rvargas (doing something else) 2014/10/14 19:56:54 That should not be the case. The handle should be
+ ~ProcessObject() {}
+
+ // Move operator= for C++03 move emulation of this type.
+ ProcessObject& operator=(RValue other);
+
+ // Returns an object for the current process.
+ static ProcessObject Current();
+
+ // Returns true if processes can be backgrounded.
+ static bool CanBackgroundProcesses();
+
+ // Returns true if this objects represents a valid process.
+ bool IsValid() const;
+
+ // Returns a handle for this process. There is no guarantee about when that
+ // handle becomes invalid because this object retains ownership.
+ ProcessHandle Handle() const;
+
+ // Returns a second object that represents this process.
+ ProcessObject Duplicate() const;
+
+ // Get the PID for this process.
+ ProcessId pid() const;
+
+ // Returns true if this process is the current process.
+ bool is_current() const;
+
+ // Close the process handle. This will not terminate the process.
+ void Close();
+
+ // Terminates the process with extreme prejudice. The given |result_code| will
+ // be the exit code of the process.
+ // NOTE: On POSIX |result_code| is ignored.
+ void Terminate(int result_code);
+
+ // A process is backgrounded when it's priority is lower than normal.
+ // Return true if this process is backgrounded, false otherwise.
+ bool IsProcessBackgrounded() const;
+
+ // Set a process as backgrounded. If value is true, the priority of the
+ // process will be lowered. If value is false, the priority of the process
+ // will be made "normal" - equivalent to default process priority.
+ // Returns true if the priority was changed, false otherwise.
+ bool SetProcessBackgrounded(bool value);
+
+ // Returns an integer representing the priority of a process. The meaning
+ // of this value is OS dependent.
+ int GetPriority() const;
+
+ private:
+#if defined(OS_WIN)
+ bool is_current_process_;
scottmg 2014/10/14 18:51:03 nit; indent
+ win::ScopedHandle process_;
scottmg 2014/10/14 18:51:03 Could you explain why we use Scoped on Windows, bu
rvargas (doing something else) 2014/10/14 19:56:54 I'be been back and forth about how to clean up thi
+#else
+ ProcessHandle process_;
+#endif
+};
+
+// Deprecated!. Use ProcessObject instead.
class BASE_EXPORT Process {
public:
Process() : process_(kNullProcessHandle) {
« no previous file with comments | « base/base.gyp ('k') | base/process/process_linux.cc » ('j') | base/process/process_win.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698