#include #include "message_translation.h" // Transfer a V8 value to a List index. void TranslateListValue(CefRefPtr list, int index, CefRefPtr value) { if (value->IsArray()) { CefRefPtr new_list = CefListValue::Create(); TranslateList(value, new_list); list->SetList(index, new_list); } else if (value->IsString()) { list->SetString(index, value->GetStringValue()); } else if (value->IsBool()) { list->SetBool(index, value->GetBoolValue()); } else if (value->IsInt()) { list->SetInt(index, value->GetIntValue()); } else if (value->IsDouble()) { list->SetDouble(index, value->GetDoubleValue()); } } // Transfer a V8 array to a List. void TranslateList(CefRefPtr source, CefRefPtr target) { assert(source->IsArray()); int arg_length = source->GetArrayLength(); if (arg_length == 0) return; // Start with null types in all spaces. target->SetSize(arg_length); for (int i = 0; i < arg_length; ++i) { TranslateListValue(target, i, source->GetValue(i)); } } // Transfer a List value to a V8 array index. void TranslateListValue(CefRefPtr list, int index, CefRefPtr value) { CefRefPtr new_value; CefValueType type = value->GetType(index); switch (type) { case VTYPE_LIST: { CefRefPtr list = value->GetList(index); new_value = CefV8Value::CreateArray(list->GetSize()); TranslateList(list, new_value); } break; case VTYPE_BOOL: new_value = CefV8Value::CreateBool(value->GetBool(index)); break; case VTYPE_DOUBLE: new_value = CefV8Value::CreateDouble(value->GetDouble(index)); break; case VTYPE_INT: new_value = CefV8Value::CreateInt(value->GetInt(index)); break; case VTYPE_STRING: new_value = CefV8Value::CreateString(value->GetString(index)); break; default: break; } if (new_value.get()) { list->SetValue(index, new_value); } else { list->SetValue(index, CefV8Value::CreateNull()); } } // Transfer a List to a V8 array. void TranslateList(CefRefPtr source, CefRefPtr target) { assert(target->IsArray()); int arg_length = source->GetSize(); if (arg_length == 0) return; for (int i = 0; i < arg_length; ++i) { TranslateListValue(target, i, source); } }