• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
CallAddRef(const PP_Var & v)14 void CallAddRef(const PP_Var& v) {
15   PpapiGlobals::Get()->GetVarTracker()->AddRefVar(v);
16 }
17 
CallRelease(const PP_Var & v)18 void CallRelease(const PP_Var& v) {
19   PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(v);
20 }
21 
22 }  // namespace
23 
ScopedPPVar()24 ScopedPPVar::ScopedPPVar() : var_(PP_MakeUndefined()) {}
25 
ScopedPPVar(const PP_Var & v)26 ScopedPPVar::ScopedPPVar(const PP_Var& v) : var_(v) { CallAddRef(var_); }
27 
ScopedPPVar(const PassRef &,const PP_Var & v)28 ScopedPPVar::ScopedPPVar(const PassRef&, const PP_Var& v) : var_(v) {}
29 
ScopedPPVar(const ScopedPPVar & other)30 ScopedPPVar::ScopedPPVar(const ScopedPPVar& other) : var_(other.var_) {
31   CallAddRef(var_);
32 }
33 
~ScopedPPVar()34 ScopedPPVar::~ScopedPPVar() { CallRelease(var_); }
35 
operator =(const PP_Var & v)36 ScopedPPVar& ScopedPPVar::operator=(const PP_Var& v) {
37   CallAddRef(v);
38   CallRelease(var_);
39   var_ = v;
40   return *this;
41 }
42 
Release()43 PP_Var ScopedPPVar::Release() {
44   PP_Var result = var_;
45   var_ = PP_MakeUndefined();
46   return result;
47 }
48 
49 }  // namespace ppapi
50