- add sources.
[platform/framework/web/crosswalk.git] / src / ppapi / cpp / resource.cc
1 // Copyright (c) 2010 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/cpp/resource.h"
6
7 #include <algorithm>
8
9 #include "ppapi/cpp/logging.h"
10 #include "ppapi/cpp/module.h"
11
12 namespace pp {
13
14 Resource::Resource() : pp_resource_(0) {
15 }
16
17 Resource::Resource(const Resource& other) : pp_resource_(other.pp_resource_) {
18   if (!is_null())
19     Module::Get()->core()->AddRefResource(pp_resource_);
20 }
21
22 Resource::~Resource() {
23   if (!is_null())
24     Module::Get()->core()->ReleaseResource(pp_resource_);
25 }
26
27 Resource& Resource::operator=(const Resource& other) {
28   if (!other.is_null())
29     Module::Get()->core()->AddRefResource(other.pp_resource_);
30   if (!is_null())
31     Module::Get()->core()->ReleaseResource(pp_resource_);
32   pp_resource_ = other.pp_resource_;
33   return *this;
34 }
35
36 PP_Resource Resource::detach() {
37   PP_Resource ret = pp_resource_;
38   pp_resource_ = 0;
39   return ret;
40 }
41
42 Resource::Resource(PP_Resource resource) : pp_resource_(resource) {
43   if (!is_null())
44     Module::Get()->core()->AddRefResource(pp_resource_);
45 }
46
47 Resource::Resource(PassRef, PP_Resource resource) : pp_resource_(resource) {
48 }
49
50 void Resource::PassRefFromConstructor(PP_Resource resource) {
51   PP_DCHECK(!pp_resource_);
52   pp_resource_ = resource;
53 }
54
55 void Resource::Clear() {
56   if (is_null())
57     return;
58   Module::Get()->core()->ReleaseResource(pp_resource_);
59   pp_resource_ = 0;
60 }
61
62 }  // namespace pp