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