| // Copyright (c) 2011 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 PPAPI_SHARED_IMPL_SCOPED_RESOURCE_H_ |
| #define PPAPI_SHARED_IMPL_SCOPED_RESOURCE_H_ |
| |
| #include "ppapi/c/pp_resource.h" |
| #include "ppapi/shared_impl/ppapi_shared_export.h" |
| |
| namespace ppapi { |
| |
| class Resource; |
| |
| // This is a version of scoped_refptr but for PP_Resources. |
| class PPAPI_SHARED_EXPORT ScopedPPResource { |
| public: |
| struct PassRef {}; |
| |
| ScopedPPResource(); |
| |
| // Takes one reference to the given resource. |
| explicit ScopedPPResource(PP_Resource resource); |
| |
| // Assumes responsibility for one ref that the resource already has. |
| explicit ScopedPPResource(const PassRef&, PP_Resource resource); |
| |
| // Helper to get the PP_Resource out of the given object and take a reference |
| // to it. |
| explicit ScopedPPResource(Resource* resource); |
| |
| // Implicit copy constructor allowed. |
| ScopedPPResource(const ScopedPPResource& other); |
| |
| ~ScopedPPResource(); |
| |
| ScopedPPResource& operator=(PP_Resource resource); |
| ScopedPPResource& operator=(const ScopedPPResource& resource); |
| |
| // Returns the PP_Resource without affecting the refcounting. |
| PP_Resource get() const { return id_; } |
| operator PP_Resource() const { return id_; } |
| |
| // Returns the PP_Resource, passing the reference to the caller. This class |
| // will no longer hold the resource. |
| PP_Resource Release(); |
| |
| private: |
| // Helpers to addref or release the id_ if it's non-NULL. The id_ value will |
| // be unchanged. |
| void CallAddRef(); |
| void CallRelease(); |
| |
| PP_Resource id_; |
| }; |
| |
| } // namespace ppapi |
| |
| #endif // PPAPI_SHARED_IMPL_SCOPED_RESOURCE_H_ |