Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: ppapi/shared_impl/var.cc

Issue 7578001: Unify var tracking between webkit and the proxy. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/shared_impl/var.h ('k') | ppapi/shared_impl/var_tracker.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/shared_impl/var.h" 5 #include "ppapi/shared_impl/var.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
11 #include "base/string_util.h" 11 #include "base/string_util.h"
12 #include "ppapi/c/pp_var.h" 12 #include "ppapi/c/pp_var.h"
13 #include "ppapi/shared_impl/tracker_base.h" 13 #include "ppapi/shared_impl/tracker_base.h"
14 #include "ppapi/shared_impl/var_tracker.h"
14 15
15 namespace ppapi { 16 namespace ppapi {
16 17
17 // Var ------------------------------------------------------------------------- 18 // Var -------------------------------------------------------------------------
18 19
19 Var::Var(PP_Module module) : pp_module_(module), var_id_(0) { 20 Var::Var(PP_Module module) : pp_module_(module), var_id_(0) {
20 } 21 }
21 22
22 Var::~Var() { 23 Var::~Var() {
23 } 24 }
(...skipping 29 matching lines...) Expand all
53 ReplaceSubstringsAfterOffset(&result, 0, null, "\\0"); 54 ReplaceSubstringsAfterOffset(&result, 0, null, "\\0");
54 return result; 55 return result;
55 } 56 }
56 case PP_VARTYPE_OBJECT: 57 case PP_VARTYPE_OBJECT:
57 return "[Object]"; 58 return "[Object]";
58 default: 59 default:
59 return "[Invalid var]"; 60 return "[Invalid var]";
60 } 61 }
61 } 62 }
62 63
63 // static
64 void Var::PluginAddRefPPVar(PP_Var var) {
65 if (var.type == PP_VARTYPE_STRING || var.type == PP_VARTYPE_OBJECT) {
66 if (!TrackerBase::Get()->AddRefVar(static_cast<int32>(var.value.as_id)))
67 DLOG(WARNING) << "AddRefVar()ing a nonexistent string/object var.";
68 }
69 }
70
71 // static
72 void Var::PluginReleasePPVar(PP_Var var) {
73 if (var.type == PP_VARTYPE_STRING || var.type == PP_VARTYPE_OBJECT) {
74 if (!TrackerBase::Get()->UnrefVar(static_cast<int32>(var.value.as_id)))
75 DLOG(WARNING) << "ReleaseVar()ing a nonexistent string/object var.";
76 }
77 }
78
79 StringVar* Var::AsStringVar() { 64 StringVar* Var::AsStringVar() {
80 return NULL; 65 return NULL;
81 } 66 }
82 67
83 NPObjectVar* Var::AsNPObjectVar() { 68 NPObjectVar* Var::AsNPObjectVar() {
84 return NULL; 69 return NULL;
85 } 70 }
86 71
72 ProxyObjectVar* Var::AsProxyObjectVar() {
73 return NULL;
74 }
75
87 int32 Var::GetExistingVarID() const { 76 int32 Var::GetExistingVarID() const {
88 return var_id_; 77 return var_id_;
89 } 78 }
90 79
91 int32 Var::GetOrCreateVarID() { 80 int32 Var::GetOrCreateVarID() {
92 TrackerBase* tracker = TrackerBase::Get(); 81 VarTracker* tracker = TrackerBase::Get()->GetVarTracker();
93 if (var_id_) { 82 if (var_id_) {
94 if (!tracker->AddRefVar(var_id_)) 83 if (!tracker->AddRefVar(var_id_))
95 return 0; 84 return 0;
96 } else { 85 } else {
97 var_id_ = tracker->AddVar(this); 86 var_id_ = tracker->AddVar(this);
98 if (!var_id_) 87 if (!var_id_)
99 return 0; 88 return 0;
100 } 89 }
101 return var_id_; 90 return var_id_;
102 } 91 }
103 92
93 void Var::AssignVarID(int32 id) {
94 DCHECK(!var_id_); // Must not have already been generated.
95 var_id_ = id;
96 }
97
104 // StringVar ------------------------------------------------------------------- 98 // StringVar -------------------------------------------------------------------
105 99
106 StringVar::StringVar(PP_Module module, const char* str, uint32 len) 100 StringVar::StringVar(PP_Module module, const char* str, uint32 len)
107 : Var(module), 101 : Var(module),
108 value_(str, len) { 102 value_(str, len) {
109 } 103 }
110 104
111 StringVar::~StringVar() { 105 StringVar::~StringVar() {
112 } 106 }
113 107
114 StringVar* StringVar::AsStringVar() { 108 StringVar* StringVar::AsStringVar() {
115 return this; 109 return this;
116 } 110 }
117 111
118 PP_Var StringVar::GetPPVar() { 112 PP_Var StringVar::GetPPVar() {
119 int32 id = GetOrCreateVarID(); 113 int32 id = GetOrCreateVarID();
120 if (!id) 114 if (!id)
121 return PP_MakeNull(); 115 return PP_MakeNull();
122 116
123 PP_Var result; 117 PP_Var result;
124 result.type = PP_VARTYPE_STRING; 118 result.type = PP_VARTYPE_STRING;
125 result.value.as_id = id; 119 result.value.as_id = id;
126 return result; 120 return result;
127 } 121 }
128 122
123 PP_VarType StringVar::GetType() const {
124 return PP_VARTYPE_STRING;
125 }
126
129 // static 127 // static
130 PP_Var StringVar::StringToPPVar(PP_Module module, const std::string& var) { 128 PP_Var StringVar::StringToPPVar(PP_Module module, const std::string& var) {
131 return StringToPPVar(module, var.c_str(), var.size()); 129 return StringToPPVar(module, var.c_str(), var.size());
132 } 130 }
133 131
134 // static 132 // static
135 PP_Var StringVar::StringToPPVar(PP_Module module, 133 PP_Var StringVar::StringToPPVar(PP_Module module,
136 const char* data, uint32 len) { 134 const char* data, uint32 len) {
137 scoped_refptr<StringVar> str(new StringVar(module, data, len)); 135 scoped_refptr<StringVar> str(new StringVar(module, data, len));
138 if (!str || !IsStringUTF8(str->value())) 136 if (!str || !IsStringUTF8(str->value()))
139 return PP_MakeNull(); 137 return PP_MakeNull();
140 return str->GetPPVar(); 138 return str->GetPPVar();
141 } 139 }
142 140
143 // static 141 // static
144 scoped_refptr<StringVar> StringVar::FromPPVar(PP_Var var) { 142 scoped_refptr<StringVar> StringVar::FromPPVar(PP_Var var) {
145 if (var.type != PP_VARTYPE_STRING) 143 if (var.type != PP_VARTYPE_STRING)
146 return scoped_refptr<StringVar>(); 144 return scoped_refptr<StringVar>();
147 scoped_refptr<Var> var_object( 145 scoped_refptr<Var> var_object(
148 TrackerBase::Get()->GetVar(static_cast<int32>(var.value.as_id))); 146 TrackerBase::Get()->GetVarTracker()->GetVar(var));
149 if (!var_object) 147 if (!var_object)
150 return scoped_refptr<StringVar>(); 148 return scoped_refptr<StringVar>();
151 return scoped_refptr<StringVar>(var_object->AsStringVar()); 149 return scoped_refptr<StringVar>(var_object->AsStringVar());
152 } 150 }
153 151
154 } // namespace ppapi 152 } // namespace ppapi
155 153
OLDNEW
« no previous file with comments | « ppapi/shared_impl/var.h ('k') | ppapi/shared_impl/var_tracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698