|  | // 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_ |