Home | History | Annotate | Download | only in shared_impl
      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