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