| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MOJO_CORE_SCOPED_PROCESS_HANDLE_H_ |
| #define MOJO_CORE_SCOPED_PROCESS_HANDLE_H_ |
| |
| #include "base/macros.h" |
| #include "base/process/process_handle.h" |
| #include "build/build_config.h" |
| |
| #if defined(OS_WIN) |
| #include "base/win/scoped_handle.h" |
| #endif |
| |
| namespace mojo { |
| namespace core { |
| |
| // Wraps a |base::ProcessHandle| with additional scoped lifetime semantics on |
| // applicable platforms. For platforms where process handles aren't ownable |
| // references, this is just a wrapper around |base::ProcessHandle|. |
| // |
| // This essentially exists to support passing around process handles internally |
| // in a generic way while also supporting Windows process handle ownership |
| // semantics. |
| // |
| // A ScopedProcessHandle will never refer to the current process, and |
| // constructing a ScopedProcessHandle over the current process's handle is |
| // considered an error. |
| class ScopedProcessHandle { |
| public: |
| ScopedProcessHandle(); |
| |
| // Assumes ownership of |handle|. |
| explicit ScopedProcessHandle(base::ProcessHandle handle); |
| |
| ScopedProcessHandle(ScopedProcessHandle&&); |
| |
| ~ScopedProcessHandle(); |
| |
| // Creates a new ScopedProcessHandle from a clone of |handle|. |
| static ScopedProcessHandle CloneFrom(base::ProcessHandle handle); |
| |
| ScopedProcessHandle& operator=(ScopedProcessHandle&&); |
| |
| bool is_valid() const; |
| base::ProcessHandle get() const; |
| base::ProcessHandle release(); |
| |
| ScopedProcessHandle Clone() const; |
| |
| private: |
| #if defined(OS_WIN) |
| base::win::ScopedHandle handle_; |
| #else |
| base::ProcessHandle handle_ = base::kNullProcessHandle; |
| #endif |
| |
| DISALLOW_COPY_AND_ASSIGN(ScopedProcessHandle); |
| }; |
| |
| } // namespace core |
| } // namespace mojo |
| |
| #endif // MOJO_CORE_SCOPED_PROCESS_HANDLE_H_ |