blob: d770df62f9ff136c9b050a18a855e5bce1de7eb8 [file] [log] [blame]
// 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 "base/macros.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_