1 // Copyright (c) 2013 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_PROXY_LOCKING_RESOURCE_RELEASER_H_ 6 #define PPAPI_PROXY_LOCKING_RESOURCE_RELEASER_H_ 7 8 #include "ppapi/shared_impl/ppapi_globals.h" 9 #include "ppapi/shared_impl/proxy_lock.h" 10 #include "ppapi/shared_impl/resource_tracker.h" 11 12 namespace ppapi { 13 namespace proxy { 14 15 // LockingResourceReleaser is a simple RAII class for releasing a resource at 16 // the end of scope. This acquires the ProxyLock before releasing the resource. 17 // It is for use in unit tests. Most proxy or implementation code should use 18 // ScopedPPResource instead. Unit tests sometimes can't use ScopedPPResource 19 // because it asserts that the ProxyLock is already held. 20 class LockingResourceReleaser { 21 public: 22 explicit LockingResourceReleaser(PP_Resource resource) 23 : resource_(resource) { 24 } 25 ~LockingResourceReleaser() { 26 ProxyAutoLock lock; 27 PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource_); 28 } 29 30 PP_Resource get() { return resource_; } 31 32 private: 33 PP_Resource resource_; 34 35 DISALLOW_COPY_AND_ASSIGN(LockingResourceReleaser); 36 }; 37 38 } // namespace proxy 39 } // namespace ppapi 40 41 #endif // PPAPI_PROXY_LOCKING_RESOURCE_RELEASER_H_ 42