| OLD | NEW |
| 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 Loading... |
| 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 |
| OLD | NEW |