X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fbase%2Fprocess%2Fprocess.h;h=701947491d7497a29ed2dfac754d0fd96e969083;hb=1afa4dd80ef85af7c90efaea6959db1d92330844;hp=20e8884b9720f04fad879980107c14a9a3951f31;hpb=90762837333c13ccf56f2ad88e4481fc71e8d281;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/base/process/process.h b/src/base/process/process.h index 20e8884..7019474 100644 --- a/src/base/process/process.h +++ b/src/base/process/process.h @@ -7,53 +7,81 @@ #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 encapsulation of a process. +// +// This object is not tied to the lifetime of the underlying process: the +// process may be killed and this object may still around, and it will still +// claim to be valid. The actual behavior in that case is OS dependent like so: +// +// Windows: The underlying ProcessHandle will be valid after the process dies +// and can be used to gather some information about that process, but most +// methods will obviously fail. +// +// POSIX: The underlying PorcessHandle is not guaranteed to remain valid after +// the process dies, and it may be reused by the system, which means that it may +// end up pointing to the wrong process. class BASE_EXPORT Process { + MOVE_ONLY_TYPE_FOR_CPP_03(Process, RValue) + public: - Process() : process_(kNullProcessHandle) { - } + explicit Process(ProcessHandle handle = kNullProcessHandle); + + // Move constructor for C++03 move emulation of this type. + Process(RValue other); - explicit Process(ProcessHandle handle) : process_(handle) { - } + // The destructor does not terminate the process. + ~Process() {} - // A handle to the current process. + // Move operator= for C++03 move emulation of this type. + Process& operator=(RValue other); + + // Returns an object for the current process. static Process Current(); + // Returns true if processes can be backgrounded. static bool CanBackgroundProcesses(); - // Get/Set the handle for this process. The handle will be 0 if the process - // is no longer running. - ProcessHandle handle() const { return process_; } - void set_handle(ProcessHandle handle) { - process_ = handle; - } + // 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. + Process Duplicate() const; // Get the PID for this process. ProcessId pid() const; - // Is the this process the current process. + // 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. If the process has already exited, this - // will do nothing. + // 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. + // 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); @@ -62,7 +90,12 @@ class BASE_EXPORT Process { int GetPriority() const; private: +#if defined(OS_WIN) + bool is_current_process_; + win::ScopedHandle process_; +#else ProcessHandle process_; +#endif }; } // namespace base