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 
     27 ScopedPPVar::ScopedPPVar(const PP_Var& v) : var_(v) {
     28   CallAddRef(var_);
     29 }
     30 
     31 ScopedPPVar::ScopedPPVar(const PassRef&, const PP_Var& v) : var_(v) {
     32 }
     33 
     34 ScopedPPVar::ScopedPPVar(const ScopedPPVar& other)
     35     : var_(other.var_) {
     36   CallAddRef(var_);
     37 }
     38 
     39 ScopedPPVar::~ScopedPPVar() {
     40   CallRelease(var_);
     41 }
     42 
     43 ScopedPPVar& ScopedPPVar::operator=(const PP_Var& v) {
     44   CallAddRef(v);
     45   CallRelease(var_);
     46   var_ = v;
     47   return *this;
     48 }
     49 
     50 PP_Var ScopedPPVar::Release() {
     51   PP_Var result = var_;
     52   var_ = PP_MakeUndefined();
     53   return result;
     54 }
     55 
     56 }  // namespace ppapi
     57