| 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 6457c7ec42526d42b09c268ba4d5bdc596b995ac..1a18a5ed67b44131332cbbf1d87b728a25629b60 100644
|
| --- a/ppapi/shared_impl/var_value_conversions.cc
|
| +++ b/ppapi/shared_impl/var_value_conversions.cc
|
| @@ -14,6 +14,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"
|
| @@ -58,10 +59,24 @@ base::Value* CreateValueFromVarImpl(const PP_Var& var,
|
| return NULL;
|
| }
|
|
|
| + ArrayVar* array_var = ArrayVar::FromPPVar(var);
|
| + if (!array_var)
|
| + return NULL;
|
| +
|
| scoped_ptr<base::ListValue> list_value(new base::ListValue());
|
| parent_ids->push_back(var.value.as_id);
|
|
|
| - // TODO(yzshen): Implement it once array var is supported.
|
| + for (ArrayVar::ElementVector::const_iterator iter =
|
| + array_var->elements().begin();
|
| + iter != array_var->elements().end(); ++iter) {
|
| + base::Value* value = CreateValueFromVarImpl(iter->get(), parent_ids);
|
| + if (!value) {
|
| + parent_ids->pop_back();
|
| + return NULL;
|
| + }
|
| +
|
| + list_value->Append(value);
|
| + }
|
|
|
| parent_ids->pop_back();
|
| return list_value.release();
|
| @@ -185,8 +200,22 @@ PP_Var CreateVarFromValue(const base::Value& value) {
|
| return dict_var->GetPPVar();
|
| }
|
| case base::Value::TYPE_LIST: {
|
| - // TODO(yzshen): Add support once array var is supported.
|
| - return PP_MakeUndefined();
|
| + const base::ListValue& list_value =
|
| + static_cast<const base::ListValue&>(value);
|
| +
|
| + scoped_refptr<ArrayVar> array_var(new ArrayVar());
|
| + array_var->elements().reserve(list_value.GetSize());
|
| + for (base::ListValue::const_iterator iter = list_value.begin();
|
| + iter != list_value.end(); ++iter) {
|
| + ScopedPPVar child_var(ScopedPPVar::PassRef(),
|
| + CreateVarFromValue(**iter));
|
| + if (child_var.get().type == PP_VARTYPE_UNDEFINED)
|
| + return PP_MakeUndefined();
|
| +
|
| + array_var->elements().push_back(child_var);
|
| + }
|
| +
|
| + return array_var->GetPPVar();
|
| }
|
| }
|
| NOTREACHED();
|
|
|