| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #include "SCACorePch.h"
- namespace Js
- {
- namespace SCACore
- {
- HRESULT ValidateTransferableVars(Var *vars, size_t count)
- {
- for (size_t i = 0; i < count; i++)
- {
- Js::TypeId typeId = Js::JavascriptOperators::GetTypeId(vars[i]);
- if (typeId != TypeIds_ArrayBuffer)
- {
- AssertMsg(false, "These should have been filtered out by the host.");
- return E_SCA_TRANSFERABLE_UNSUPPORTED;
- }
- if (Js::JavascriptOperators::IsObjectDetached(vars[i]))
- {
- return E_SCA_TRANSFERABLE_NEUTERED;
- }
- }
- return S_OK;
- }
- HRESULT Serializer::SetTransferableVars(Var *vars, size_t count)
- {
- if (m_transferableVars != nullptr)
- {
- Assert(false);
- return E_FAIL;
- }
- else if (count > 0)
- {
- HRESULT hr = ValidateTransferableVars(vars, count);
- if (hr != S_OK)
- {
- return hr;
- }
- m_transferableVars = vars;
- m_cTransferableVars = count;
- }
- return S_OK;
- }
- bool Serializer::WriteValue(Var rootObject)
- {
- ScriptContext *scriptContext = m_streamWriter.GetScriptContext();
- BEGIN_JS_RUNTIME_CALL(scriptContext)
- {
- Js::SCASerializationEngine::Serialize(rootObject, &m_streamWriter, m_transferableVars, m_cTransferableVars, nullptr /*TBD*/);
- }
- END_JS_RUNTIME_CALL(scriptContext)
- return true;
- }
- bool Serializer::DetachArrayBuffer()
- {
- Assert(false);
- return true;
- }
- void Serializer::WriteRawBytes(const void* source, size_t length)
- {
- ScriptContext *scriptContext = m_streamWriter.GetScriptContext();
- BEGIN_JS_RUNTIME_CALL(scriptContext)
- {
- m_streamWriter.Write(source, length);
- }
- END_JS_RUNTIME_CALL(scriptContext)
- }
- bool Serializer::Release(byte** data, size_t *dataLength)
- {
- *data = m_streamWriter.GetBuffer();
- *dataLength = m_streamWriter.GetLength();
- return true;
- }
- bool Deserializer::ReadRawBytes(size_t length, void **data)
- {
- m_streamReader.ReadRawBytes(data, length);
- return true;
- }
- bool Deserializer::ReadBytes(size_t length, void **data)
- {
- m_streamReader.Read(*data, length);
- return true;
- }
- Var Deserializer::ReadValue()
- {
- Var returnedValue = nullptr;
- ScriptContext *scriptContext = m_streamReader.GetScriptContext();
- BEGIN_JS_RUNTIME_CALL(scriptContext)
- {
- returnedValue = Js::SCADeserializationEngine::Deserialize(&m_streamReader, m_transferableVars, m_cTransferableVars);
- }
- END_JS_RUNTIME_CALL(scriptContext)
- return returnedValue;
- }
- HRESULT Deserializer::SetTransferableVars(Var *vars, size_t count)
- {
- if (m_transferableVars != nullptr)
- {
- Assert(false);
- return E_FAIL;
- }
- else if (count > 0)
- {
- HRESULT hr = ValidateTransferableVars(vars, count);
- if (hr != S_OK)
- {
- return hr;
- }
- m_transferableVars = vars;
- m_cTransferableVars = count;
- }
- return S_OK;
- }
- }
- }
|