diff options
Diffstat (limited to 'ppapi/proxy/locking_resource_releaser.h')
-rw-r--r-- | ppapi/proxy/locking_resource_releaser.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/ppapi/proxy/locking_resource_releaser.h b/ppapi/proxy/locking_resource_releaser.h new file mode 100644 index 0000000..d390ac4 --- /dev/null +++ b/ppapi/proxy/locking_resource_releaser.h @@ -0,0 +1,41 @@ +// Copyright (c) 2013 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_PROXY_LOCKING_RESOURCE_RELEASER_H_ +#define PPAPI_PROXY_LOCKING_RESOURCE_RELEASER_H_ + +#include "ppapi/shared_impl/ppapi_globals.h" +#include "ppapi/shared_impl/proxy_lock.h" +#include "ppapi/shared_impl/resource_tracker.h" + +namespace ppapi { +namespace proxy { + +// LockingResourceReleaser is a simple RAII class for releasing a resource at +// the end of scope. This acquires the ProxyLock before releasing the resource. +// It is for use in unit tests. Most proxy or implementation code should use +// ScopedPPResource instead. Unit tests sometimes can't use ScopedPPResource +// because it asserts that the ProxyLock is already held. +class LockingResourceReleaser { + public: + explicit LockingResourceReleaser(PP_Resource resource) + : resource_(resource) { + } + ~LockingResourceReleaser() { + ProxyAutoLock lock; + PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource_); + } + + PP_Resource get() { return resource_; } + + private: + PP_Resource resource_; + + DISALLOW_COPY_AND_ASSIGN(LockingResourceReleaser); +}; + +} // namespace proxy +} // namespace ppapi + +#endif // PPAPI_PROXY_LOCKING_RESOURCE_RELEASER_H_ |