Home | History | Annotate | Download | only in shared_impl
      1 // Copyright (c) 2011 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 PPAPI_SHARED_IMPL_SCOPED_RESOURCE_H_
      6 #define PPAPI_SHARED_IMPL_SCOPED_RESOURCE_H_
      7 
      8 #include "ppapi/c/pp_resource.h"
      9 #include "ppapi/shared_impl/ppapi_shared_export.h"
     10 
     11 namespace ppapi {
     12 
     13 class Resource;
     14 
     15 // This is a version of scoped_refptr but for PP_Resources.
     16 class PPAPI_SHARED_EXPORT ScopedPPResource {
     17  public:
     18   struct PassRef {};
     19 
     20   ScopedPPResource();
     21 
     22   // Takes one reference to the given resource.
     23   explicit ScopedPPResource(PP_Resource resource);
     24 
     25   // Assumes responsibility for one ref that the resource already has.
     26   explicit ScopedPPResource(const PassRef&, PP_Resource resource);
     27 
     28   // Helper to get the PP_Resource out of the given object and take a reference
     29   // to it.
     30   explicit ScopedPPResource(Resource* resource);
     31 
     32   // Implicit copy constructor allowed.
     33   ScopedPPResource(const ScopedPPResource& other);
     34 
     35   ~ScopedPPResource();
     36 
     37   ScopedPPResource& operator=(PP_Resource resource);
     38   ScopedPPResource& operator=(const ScopedPPResource& resource);
     39 
     40   // Returns the PP_Resource without affecting the refcounting.
     41   PP_Resource get() const { return id_; }
     42   operator PP_Resource() const { return id_; }
     43 
     44   // Returns the PP_Resource, passing the reference to the caller. This class
     45   // will no longer hold the resource.
     46   PP_Resource Release();
     47 
     48  private:
     49   // Helpers to addref or release the id_ if it's non-NULL. The id_ value will
     50   // be unchanged.
     51   void CallAddRef();
     52   void CallRelease();
     53 
     54   PP_Resource id_;
     55 };
     56 
     57 }  // namespace ppapi
     58 
     59 #endif  // PPAPI_SHARED_IMPL_SCOPED_RESOURCE_H_
     60