// Copyright © 2015 The CefSharp Authors. All rights reserved. // // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. #include "stdafx.h" #include "JsObjectsSerialization.h" #include "../CefSharp.Core/Internals/Serialization/Primitives.h" #include "../CefSharp.Core/Internals/Serialization/ObjectsSerialization.h" namespace CefSharp { namespace Internals { namespace Serialization { JavascriptObject^ DeserializeJsObject(const CefRefPtr& rootList, int index) { if (rootList->GetType(index) == VTYPE_INVALID || rootList->GetType(index) == VTYPE_NULL) { return nullptr; } auto list = rootList->GetList(index); auto jsObject = gcnew JavascriptObject(); jsObject->Id = GetInt64(list, 0); jsObject->Name = StringUtils::ToClr(list->GetString(1)); jsObject->JavascriptName = StringUtils::ToClr(list->GetString(2)); jsObject->IsAsync = list->GetBool(3); auto methodList = list->GetList(4); auto methodCount = methodList->GetInt(0); auto k = 1; for (auto j = 0; j < methodCount; j++) { auto jsMethod = gcnew JavascriptMethod(); jsMethod->Id = GetInt64(methodList, k++); jsMethod->ManagedName = StringUtils::ToClr(methodList->GetString(k++)); jsMethod->JavascriptName = StringUtils::ToClr(methodList->GetString(k++)); jsMethod->ParameterCount = methodList->GetInt(k++); jsObject->Methods->Add(jsMethod); } auto propertyList = list->GetList(5); auto propertyCount = propertyList->GetInt(0); k = 1; for (auto j = 0; j < propertyCount; j++) { auto jsProperty = gcnew JavascriptProperty(); jsProperty->Id = GetInt64(propertyList, k++); jsProperty->ManagedName = StringUtils::ToClr(propertyList->GetString(k++)); jsProperty->JavascriptName = StringUtils::ToClr(propertyList->GetString(k++)); jsProperty->IsComplexType = propertyList->GetBool(k++); jsProperty->IsReadOnly = propertyList->GetBool(k++); jsProperty->JsObject = DeserializeJsObject(propertyList, k++); jsProperty->PropertyValue = DeserializeObject(propertyList, k++, nullptr); jsObject->Properties->Add(jsProperty); } return jsObject; } List^ DeserializeJsObjects(const CefRefPtr& list, int index) { auto result = gcnew List(); auto subList = list->GetList(index); for (auto i = 0; i < subList->GetSize(); i++) { result->Add(DeserializeJsObject(subList, i)); } return result; } } } }