Home | History | Annotate | Download | only in embedder
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef MOJO_EMBEDDER_SCOPED_PLATFORM_HANDLE_H_
      6 #define MOJO_EMBEDDER_SCOPED_PLATFORM_HANDLE_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "base/move.h"
     10 #include "mojo/embedder/platform_handle.h"
     11 #include "mojo/system/system_impl_export.h"
     12 
     13 namespace mojo {
     14 namespace embedder {
     15 
     16 class MOJO_SYSTEM_IMPL_EXPORT ScopedPlatformHandle {
     17   MOVE_ONLY_TYPE_FOR_CPP_03(ScopedPlatformHandle, RValue)
     18 
     19  public:
     20   ScopedPlatformHandle() {}
     21   explicit ScopedPlatformHandle(PlatformHandle handle) : handle_(handle) {}
     22   ~ScopedPlatformHandle() { handle_.CloseIfNecessary(); }
     23 
     24   // Move-only constructor and operator=.
     25   ScopedPlatformHandle(RValue other) : handle_(other.object->release()) {}
     26   ScopedPlatformHandle& operator=(RValue other) {
     27     handle_ = other.object->release();
     28     return *this;
     29   }
     30 
     31   const PlatformHandle& get() const { return handle_; }
     32 
     33   void swap(ScopedPlatformHandle& other) {
     34     PlatformHandle temp = handle_;
     35     handle_ = other.handle_;
     36     other.handle_ = temp;
     37   }
     38 
     39   PlatformHandle release() WARN_UNUSED_RESULT {
     40     PlatformHandle rv = handle_;
     41     handle_ = PlatformHandle();
     42     return rv;
     43   }
     44 
     45   void reset(PlatformHandle handle = PlatformHandle()) {
     46     handle_.CloseIfNecessary();
     47     handle_ = handle;
     48   }
     49 
     50   bool is_valid() const { return handle_.is_valid(); }
     51 
     52  private:
     53   PlatformHandle handle_;
     54 };
     55 
     56 }  // namespace embedder
     57 }  // namespace mojo
     58 
     59 #endif  // MOJO_EMBEDDER_SCOPED_PLATFORM_HANDLE_H_
     60