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

Unified Diff: ppapi/shared_impl/var_value_conversions.cc

Issue 12388083: Add PPB_VarArray_Dev support - part 1. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/shared_impl/var.cc ('k') | ppapi/shared_impl/var_value_conversions_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/shared_impl/var_value_conversions.cc
diff --git a/ppapi/shared_impl/var_value_conversions.cc b/ppapi/shared_impl/var_value_conversions.cc
index a54c7263f00582c02fe6404ada01f0bcd4f391a5..614002a5eae4a113cdf7eb5a910da7ec132d78b5 100644
--- a/ppapi/shared_impl/var_value_conversions.cc
+++ b/ppapi/shared_impl/var_value_conversions.cc
@@ -15,6 +15,7 @@
#include "base/values.h"
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_stdint.h"
+#include "ppapi/shared_impl/array_var.h"
#include "ppapi/shared_impl/dictionary_var.h"
#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/scoped_pp_var.h"
@@ -98,8 +99,14 @@ bool CreateValueFromVarHelper(const std::set<int64_t>& parent_ids,
return false;
}
case PP_VARTYPE_ARRAY: {
- // TODO(yzshen): Implement it once array var is supported.
- return false;
+ if (ContainsKey(parent_ids, var.value.as_id)) {
+ // A circular reference is found.
+ return false;
+ }
+
+ value->reset(new base::ListValue());
+ state->push(VarNode(var, value->get()));
+ return true;
}
case PP_VARTYPE_DICTIONARY: {
if (ContainsKey(parent_ids, var.value.as_id)) {
@@ -200,8 +207,10 @@ bool CreateVarFromValueHelper(const base::Value& value,
return true;
}
case base::Value::TYPE_LIST: {
- // TODO(yzshen): Add support once array var is supported.
- return false;
+ scoped_refptr<ArrayVar> array_var(new ArrayVar());
+ *var = ScopedPPVar(ScopedPPVar::PassRef(), array_var->GetPPVar());
+ state->push(ValueNode(var->get(), &value));
+ return true;
}
}
NOTREACHED();
@@ -252,6 +261,29 @@ base::Value* CreateValueFromVar(const PP_Var& var) {
dict_value->SetWithoutPathExpansion(iter->first, child_value.release());
}
+ } else if (top.var.type == PP_VARTYPE_ARRAY) {
+ parent_ids.insert(top.var.value.as_id);
+ top.sentinel = true;
+
+ ArrayVar* array_var = ArrayVar::FromPPVar(top.var);
+ if (!array_var)
+ return NULL;
+
+ DCHECK(top.value->GetType() == base::Value::TYPE_LIST);
+ base::ListValue* list_value = static_cast<base::ListValue*>(top.value);
+
+ for (ArrayVar::ElementVector::const_iterator iter =
+ array_var->elements().begin();
+ iter != array_var->elements().end();
+ ++iter) {
+ scoped_ptr<base::Value> child_value;
+ if (!CreateValueFromVarHelper(parent_ids, iter->get(), &child_value,
+ &state)) {
+ return NULL;
+ }
+
+ list_value->Append(child_value.release());
+ }
} else {
NOTREACHED();
return NULL;
@@ -286,6 +318,20 @@ PP_Var CreateVarFromValue(const base::Value& value) {
return PP_MakeUndefined();
}
}
+ } else if (top.value->GetType() == base::Value::TYPE_LIST) {
+ const base::ListValue* list_value =
+ static_cast<const base::ListValue*>(top.value);
+ ArrayVar* array_var = ArrayVar::FromPPVar(top.var);
+ DCHECK(array_var);
+ for (base::ListValue::const_iterator iter = list_value->begin();
+ iter != list_value->end();
+ ++iter) {
+ ScopedPPVar child_var;
+ if (!CreateVarFromValueHelper(**iter, &child_var, &state))
+ return PP_MakeUndefined();
+
+ array_var->elements().push_back(child_var);
+ }
} else {
NOTREACHED();
return PP_MakeUndefined();
« no previous file with comments | « ppapi/shared_impl/var.cc ('k') | ppapi/shared_impl/var_value_conversions_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698