diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-19 17:36:08 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-19 17:36:08 +0000 |
commit | 7657b68535868ea5bb3fd81d1b9428691739a232 (patch) | |
tree | 11fbdc38bb33482450480370e215fcf05788490d /ppapi | |
parent | 28e9584fb55f83343eb50caa7e826dc721dd0f70 (diff) | |
download | chromium_src-7657b68535868ea5bb3fd81d1b9428691739a232.zip chromium_src-7657b68535868ea5bb3fd81d1b9428691739a232.tar.gz chromium_src-7657b68535868ea5bb3fd81d1b9428691739a232.tar.bz2 |
Add a ScopedPPVar class for helping to track a reference to a base PP_Var.
This will be used in unit tests and (possibly in the future) son proxy implementation code. This is basically copied from ScopedPPResource.
TEST=none
BUG=none
Review URL: https://chromiumcodereview.appspot.com/10562033
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142982 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r-- | ppapi/ppapi_shared.gypi | 2 | ||||
-rw-r--r-- | ppapi/shared_impl/scoped_pp_var.cc | 50 | ||||
-rw-r--r-- | ppapi/shared_impl/scoped_pp_var.h | 47 |
3 files changed, 99 insertions, 0 deletions
diff --git a/ppapi/ppapi_shared.gypi b/ppapi/ppapi_shared.gypi index beecb34..2ed61c1 100644 --- a/ppapi/ppapi_shared.gypi +++ b/ppapi/ppapi_shared.gypi @@ -90,6 +90,8 @@ 'shared_impl/resource_tracker.h', 'shared_impl/scoped_pp_resource.cc', 'shared_impl/scoped_pp_resource.h', + 'shared_impl/scoped_pp_var.cc', + 'shared_impl/scoped_pp_var.h', 'shared_impl/time_conversion.cc', 'shared_impl/time_conversion.h', 'shared_impl/tracked_callback.cc', diff --git a/ppapi/shared_impl/scoped_pp_var.cc b/ppapi/shared_impl/scoped_pp_var.cc new file mode 100644 index 0000000..fcd6806 --- /dev/null +++ b/ppapi/shared_impl/scoped_pp_var.cc @@ -0,0 +1,50 @@ +// Copyright (c) 2012 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. + +#include "ppapi/shared_impl/scoped_pp_var.h" + +#include "ppapi/shared_impl/ppapi_globals.h" +#include "ppapi/shared_impl/var_tracker.h" + +namespace ppapi { + +namespace { + +void CallAddRef(const PP_Var& v) { + PpapiGlobals::Get()->GetVarTracker()->AddRefVar(v); +} + +void CallRelease(const PP_Var& v) { + PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(v); +} + +} // namespace + +ScopedPPVar::ScopedPPVar() : var_(PP_MakeUndefined()) { +} + +ScopedPPVar::ScopedPPVar(const PP_Var& v) : var_(v) { + CallAddRef(var_); +} + +ScopedPPVar::ScopedPPVar(const PassRef&, const PP_Var& v) : var_(v) { +} + +ScopedPPVar::ScopedPPVar(const ScopedPPVar& other) + : var_(other.var_) { + CallAddRef(var_); +} + +ScopedPPVar::~ScopedPPVar() { + CallRelease(var_); +} + +ScopedPPVar& ScopedPPVar::operator=(const PP_Var& v) { + CallAddRef(v); + CallRelease(var_); + var_ = v; + return *this; +} + +} // namespace ppapi diff --git a/ppapi/shared_impl/scoped_pp_var.h b/ppapi/shared_impl/scoped_pp_var.h new file mode 100644 index 0000000..8079a91 --- /dev/null +++ b/ppapi/shared_impl/scoped_pp_var.h @@ -0,0 +1,47 @@ +// Copyright (c) 2012 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_PP_VAR_H_ +#define PPAPI_SHARED_IMPL_SCOPED_PP_VAR_H_ + +#include "ppapi/c/pp_var.h" +#include "ppapi/shared_impl/ppapi_shared_export.h" + +namespace ppapi { + +class PPAPI_SHARED_EXPORT ScopedPPVar { + public: + struct PassRef {}; + + ScopedPPVar(); + + // Takes one reference to the given resource. + explicit ScopedPPVar(const PP_Var& v); + + // Assumes responsibility for one ref that the var already has. + ScopedPPVar(const PassRef&, const PP_Var& v); + + // Implicit copy constructor allowed. + ScopedPPVar(const ScopedPPVar& other); + + ~ScopedPPVar(); + + ScopedPPVar& operator=(const PP_Var& r); + ScopedPPVar& operator=(const ScopedPPVar& other) { + return operator=(other.var_); + } + + const PP_Var& get() const { return var_; } + + // Returns the PP_Var, passing the reference to the caller. This class + // will no longer hold the var. + PP_Var Release(); + + private: + PP_Var var_; +}; + +} // namespace ppapi + +#endif // PPAPI_SHARED_IMPL_SCOPED_PP_VAR_H_ |