1 // Copyright (c) 2012 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 #include "ppapi/shared_impl/scoped_pp_var.h" 6 7 #include "ppapi/shared_impl/ppapi_globals.h" 8 #include "ppapi/shared_impl/var_tracker.h" 9 10 namespace ppapi { 11 12 namespace { 13 14 void CallAddRef(const PP_Var& v) { 15 PpapiGlobals::Get()->GetVarTracker()->AddRefVar(v); 16 } 17 18 void CallRelease(const PP_Var& v) { 19 PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(v); 20 } 21 22 } // namespace 23 24 ScopedPPVar::ScopedPPVar() : var_(PP_MakeUndefined()) {} 25 26 ScopedPPVar::ScopedPPVar(const PP_Var& v) : var_(v) { CallAddRef(var_); } 27 28 ScopedPPVar::ScopedPPVar(const PassRef&, const PP_Var& v) : var_(v) {} 29 30 ScopedPPVar::ScopedPPVar(const ScopedPPVar& other) : var_(other.var_) { 31 CallAddRef(var_); 32 } 33 34 ScopedPPVar::~ScopedPPVar() { CallRelease(var_); } 35 36 ScopedPPVar& ScopedPPVar::operator=(const PP_Var& v) { 37 CallAddRef(v); 38 CallRelease(var_); 39 var_ = v; 40 return *this; 41 } 42 43 PP_Var ScopedPPVar::Release() { 44 PP_Var result = var_; 45 var_ = PP_MakeUndefined(); 46 return result; 47 } 48 49 } // namespace ppapi 50