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

Unified Diff: Source/bindings/core/v8/ScriptValueSerializer.cpp

Issue 718383003: bindings: fixed incorrect dependency of SerializedScriptValue. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 1 month 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 | « Source/bindings/core/v8/ScriptValueSerializer.h ('k') | Source/bindings/core/v8/SerializationTag.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/core/v8/ScriptValueSerializer.cpp
diff --git a/Source/bindings/core/v8/ScriptValueSerializer.cpp b/Source/bindings/core/v8/ScriptValueSerializer.cpp
index 38455c8c93d06ea54e9ab0d119fd143cc6da7331..cd783a0fce5afe4e98370fdcf6686ea1d3cc8ea3 100644
--- a/Source/bindings/core/v8/ScriptValueSerializer.cpp
+++ b/Source/bindings/core/v8/ScriptValueSerializer.cpp
@@ -12,8 +12,6 @@
#include "bindings/core/v8/V8FileList.h"
#include "bindings/core/v8/V8ImageData.h"
#include "bindings/core/v8/V8MessagePort.h"
-#include "bindings/modules/v8/V8CryptoKey.h"
-#include "bindings/modules/v8/V8DOMFileSystem.h"
#include "core/dom/DOMDataView.h"
#include "core/fileapi/Blob.h"
#include "core/fileapi/File.h"
@@ -31,8 +29,6 @@
namespace blink {
-namespace SerializedScriptValueInternal {
-
// This code implements the HTML5 Structured Clone algorithm:
// http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#safe-passing-of-structured-data
@@ -73,32 +69,32 @@ static bool shouldCheckForCycles(int depth)
return !(depth & (depth - 1));
}
-void Writer::writeUndefined()
+void SerializedScriptValueWriter::writeUndefined()
{
append(UndefinedTag);
}
-void Writer::writeNull()
+void SerializedScriptValueWriter::writeNull()
{
append(NullTag);
}
-void Writer::writeTrue()
+void SerializedScriptValueWriter::writeTrue()
{
append(TrueTag);
}
-void Writer::writeFalse()
+void SerializedScriptValueWriter::writeFalse()
{
append(FalseTag);
}
-void Writer::writeBooleanObject(bool value)
+void SerializedScriptValueWriter::writeBooleanObject(bool value)
{
append(value ? TrueObjectTag : FalseObjectTag);
}
-void Writer::writeOneByteString(v8::Handle<v8::String>& string)
+void SerializedScriptValueWriter::writeOneByteString(v8::Handle<v8::String>& string)
{
int stringLength = string->Length();
int utf8Length = string->Utf8Length();
@@ -118,7 +114,7 @@ void Writer::writeOneByteString(v8::Handle<v8::String>& string)
m_position += utf8Length;
}
-void Writer::writeUCharString(v8::Handle<v8::String>& string)
+void SerializedScriptValueWriter::writeUCharString(v8::Handle<v8::String>& string)
{
int length = string->Length();
ASSERT(length >= 0);
@@ -138,14 +134,14 @@ void Writer::writeUCharString(v8::Handle<v8::String>& string)
m_position += size;
}
-void Writer::writeStringObject(const char* data, int length)
+void SerializedScriptValueWriter::writeStringObject(const char* data, int length)
{
ASSERT(length >= 0);
append(StringObjectTag);
doWriteString(data, length);
}
-void Writer::writeWebCoreString(const String& string)
+void SerializedScriptValueWriter::writeWebCoreString(const String& string)
{
// Uses UTF8 encoding so we can read it back as either V8 or
// WebCore string.
@@ -153,43 +149,43 @@ void Writer::writeWebCoreString(const String& string)
doWriteWebCoreString(string);
}
-void Writer::writeVersion()
+void SerializedScriptValueWriter::writeVersion()
{
append(VersionTag);
doWriteUint32(SerializedScriptValue::wireFormatVersion);
}
-void Writer::writeInt32(int32_t value)
+void SerializedScriptValueWriter::writeInt32(int32_t value)
{
append(Int32Tag);
doWriteUint32(ZigZag::encode(static_cast<uint32_t>(value)));
}
-void Writer::writeUint32(uint32_t value)
+void SerializedScriptValueWriter::writeUint32(uint32_t value)
{
append(Uint32Tag);
doWriteUint32(value);
}
-void Writer::writeDate(double numberValue)
+void SerializedScriptValueWriter::writeDate(double numberValue)
{
append(DateTag);
doWriteNumber(numberValue);
}
-void Writer::writeNumber(double number)
+void SerializedScriptValueWriter::writeNumber(double number)
{
append(NumberTag);
doWriteNumber(number);
}
-void Writer::writeNumberObject(double number)
+void SerializedScriptValueWriter::writeNumberObject(double number)
{
append(NumberObjectTag);
doWriteNumber(number);
}
-void Writer::writeBlob(const String& uuid, const String& type, unsigned long long size)
+void SerializedScriptValueWriter::writeBlob(const String& uuid, const String& type, unsigned long long size)
{
append(BlobTag);
doWriteWebCoreString(uuid);
@@ -197,34 +193,26 @@ void Writer::writeBlob(const String& uuid, const String& type, unsigned long lon
doWriteUint64(size);
}
-void Writer::writeDOMFileSystem(int type, const String& name, const String& url)
-{
- append(DOMFileSystemTag);
- doWriteUint32(type);
- doWriteWebCoreString(name);
- doWriteWebCoreString(url);
-}
-
-void Writer::writeBlobIndex(int blobIndex)
+void SerializedScriptValueWriter::writeBlobIndex(int blobIndex)
{
ASSERT(blobIndex >= 0);
append(BlobIndexTag);
doWriteUint32(blobIndex);
}
-void Writer::writeFile(const File& file)
+void SerializedScriptValueWriter::writeFile(const File& file)
{
append(FileTag);
doWriteFile(file);
}
-void Writer::writeFileIndex(int blobIndex)
+void SerializedScriptValueWriter::writeFileIndex(int blobIndex)
{
append(FileIndexTag);
doWriteUint32(blobIndex);
}
-void Writer::writeFileList(const FileList& fileList)
+void SerializedScriptValueWriter::writeFileList(const FileList& fileList)
{
append(FileListTag);
uint32_t length = fileList.length();
@@ -233,7 +221,7 @@ void Writer::writeFileList(const FileList& fileList)
doWriteFile(*fileList.item(i));
}
-void Writer::writeFileListIndex(const Vector<int>& blobIndices)
+void SerializedScriptValueWriter::writeFileListIndex(const Vector<int>& blobIndices)
{
append(FileListIndexTag);
uint32_t length = blobIndices.size();
@@ -242,46 +230,13 @@ void Writer::writeFileListIndex(const Vector<int>& blobIndices)
doWriteUint32(blobIndices[i]);
}
-bool Writer::writeCryptoKey(const WebCryptoKey& key)
-{
- append(static_cast<uint8_t>(CryptoKeyTag));
-
- switch (key.algorithm().paramsType()) {
- case WebCryptoKeyAlgorithmParamsTypeAes:
- doWriteAesKey(key);
- break;
- case WebCryptoKeyAlgorithmParamsTypeHmac:
- doWriteHmacKey(key);
- break;
- case WebCryptoKeyAlgorithmParamsTypeRsaHashed:
- doWriteRsaHashedKey(key);
- break;
- case WebCryptoKeyAlgorithmParamsTypeEc:
- doWriteEcKey(key);
- break;
- case WebCryptoKeyAlgorithmParamsTypeNone:
- ASSERT_NOT_REACHED();
- return false;
- }
-
- doWriteKeyUsages(key.usages(), key.extractable());
-
- WebVector<uint8_t> keyData;
- if (!Platform::current()->crypto()->serializeKeyForClone(key, keyData))
- return false;
-
- doWriteUint32(keyData.size());
- append(keyData.data(), keyData.size());
- return true;
-}
-
-void Writer::writeArrayBuffer(const ArrayBuffer& arrayBuffer)
+void SerializedScriptValueWriter::writeArrayBuffer(const ArrayBuffer& arrayBuffer)
{
append(ArrayBufferTag);
doWriteArrayBuffer(arrayBuffer);
}
-void Writer::writeArrayBufferView(const ArrayBufferView& arrayBufferView)
+void SerializedScriptValueWriter::writeArrayBufferView(const ArrayBufferView& arrayBufferView)
{
append(ArrayBufferViewTag);
#if ENABLE(ASSERT)
@@ -317,7 +272,7 @@ void Writer::writeArrayBufferView(const ArrayBufferView& arrayBufferView)
doWriteUint32(arrayBufferView.byteLength());
}
-void Writer::writeImageData(uint32_t width, uint32_t height, const uint8_t* pixelData, uint32_t pixelDataLength)
+void SerializedScriptValueWriter::writeImageData(uint32_t width, uint32_t height, const uint8_t* pixelData, uint32_t pixelDataLength)
{
append(ImageDataTag);
doWriteUint32(width);
@@ -326,7 +281,7 @@ void Writer::writeImageData(uint32_t width, uint32_t height, const uint8_t* pixe
append(pixelData, pixelDataLength);
}
-void Writer::writeRegExp(v8::Local<v8::String> pattern, v8::RegExp::Flags flags)
+void SerializedScriptValueWriter::writeRegExp(v8::Local<v8::String> pattern, v8::RegExp::Flags flags)
{
append(RegExpTag);
v8::String::Utf8Value patternUtf8Value(pattern);
@@ -334,45 +289,45 @@ void Writer::writeRegExp(v8::Local<v8::String> pattern, v8::RegExp::Flags flags)
doWriteUint32(static_cast<uint32_t>(flags));
}
-void Writer::writeTransferredMessagePort(uint32_t index)
+void SerializedScriptValueWriter::writeTransferredMessagePort(uint32_t index)
{
append(MessagePortTag);
doWriteUint32(index);
}
-void Writer::writeTransferredArrayBuffer(uint32_t index)
+void SerializedScriptValueWriter::writeTransferredArrayBuffer(uint32_t index)
{
append(ArrayBufferTransferTag);
doWriteUint32(index);
}
-void Writer::writeObjectReference(uint32_t reference)
+void SerializedScriptValueWriter::writeObjectReference(uint32_t reference)
{
append(ObjectReferenceTag);
doWriteUint32(reference);
}
-void Writer::writeObject(uint32_t numProperties)
+void SerializedScriptValueWriter::writeObject(uint32_t numProperties)
{
append(ObjectTag);
doWriteUint32(numProperties);
}
-void Writer::writeSparseArray(uint32_t numProperties, uint32_t length)
+void SerializedScriptValueWriter::writeSparseArray(uint32_t numProperties, uint32_t length)
{
append(SparseArrayTag);
doWriteUint32(numProperties);
doWriteUint32(length);
}
-void Writer::writeDenseArray(uint32_t numProperties, uint32_t length)
+void SerializedScriptValueWriter::writeDenseArray(uint32_t numProperties, uint32_t length)
{
append(DenseArrayTag);
doWriteUint32(numProperties);
doWriteUint32(length);
}
-String Writer::takeWireString()
+String SerializedScriptValueWriter::takeWireString()
{
COMPILE_ASSERT(sizeof(BufferValueType) == 2, BufferValueTypeIsTwoBytes);
fillHole();
@@ -381,30 +336,30 @@ String Writer::takeWireString()
return data;
}
-void Writer::writeReferenceCount(uint32_t numberOfReferences)
+void SerializedScriptValueWriter::writeReferenceCount(uint32_t numberOfReferences)
{
append(ReferenceCountTag);
doWriteUint32(numberOfReferences);
}
-void Writer::writeGenerateFreshObject()
+void SerializedScriptValueWriter::writeGenerateFreshObject()
{
append(GenerateFreshObjectTag);
}
-void Writer::writeGenerateFreshSparseArray(uint32_t length)
+void SerializedScriptValueWriter::writeGenerateFreshSparseArray(uint32_t length)
{
append(GenerateFreshSparseArrayTag);
doWriteUint32(length);
}
-void Writer::writeGenerateFreshDenseArray(uint32_t length)
+void SerializedScriptValueWriter::writeGenerateFreshDenseArray(uint32_t length)
{
append(GenerateFreshDenseArrayTag);
doWriteUint32(length);
}
-void Writer::doWriteFile(const File& file)
+void SerializedScriptValueWriter::doWriteFile(const File& file)
{
doWriteWebCoreString(file.hasBackingFile() ? file.path() : "");
doWriteWebCoreString(file.name());
@@ -428,163 +383,26 @@ void Writer::doWriteFile(const File& file)
doWriteUint32(static_cast<uint8_t>((file.userVisibility() == File::IsUserVisible) ? 1 : 0));
}
-void Writer::doWriteArrayBuffer(const ArrayBuffer& arrayBuffer)
+void SerializedScriptValueWriter::doWriteArrayBuffer(const ArrayBuffer& arrayBuffer)
{
uint32_t byteLength = arrayBuffer.byteLength();
doWriteUint32(byteLength);
append(static_cast<const uint8_t*>(arrayBuffer.data()), byteLength);
}
-void Writer::doWriteString(const char* data, int length)
+void SerializedScriptValueWriter::doWriteString(const char* data, int length)
{
doWriteUint32(static_cast<uint32_t>(length));
append(reinterpret_cast<const uint8_t*>(data), length);
}
-void Writer::doWriteWebCoreString(const String& string)
+void SerializedScriptValueWriter::doWriteWebCoreString(const String& string)
{
StringUTF8Adaptor stringUTF8(string);
doWriteString(stringUTF8.data(), stringUTF8.length());
}
-void Writer::doWriteHmacKey(const WebCryptoKey& key)
-{
- ASSERT(key.algorithm().paramsType() == WebCryptoKeyAlgorithmParamsTypeHmac);
-
- append(static_cast<uint8_t>(HmacKeyTag));
- ASSERT(!(key.algorithm().hmacParams()->lengthBits() % 8));
- doWriteUint32(key.algorithm().hmacParams()->lengthBits() / 8);
- doWriteAlgorithmId(key.algorithm().hmacParams()->hash().id());
-}
-
-void Writer::doWriteAesKey(const WebCryptoKey& key)
-{
- ASSERT(key.algorithm().paramsType() == WebCryptoKeyAlgorithmParamsTypeAes);
-
- append(static_cast<uint8_t>(AesKeyTag));
- doWriteAlgorithmId(key.algorithm().id());
- // Converting the key length from bits to bytes is lossless and makes
- // it fit in 1 byte.
- ASSERT(!(key.algorithm().aesParams()->lengthBits() % 8));
- doWriteUint32(key.algorithm().aesParams()->lengthBits() / 8);
-}
-
-void Writer::doWriteRsaHashedKey(const WebCryptoKey& key)
-{
- ASSERT(key.algorithm().rsaHashedParams());
- append(static_cast<uint8_t>(RsaHashedKeyTag));
-
- doWriteAlgorithmId(key.algorithm().id());
- doWriteAsymmetricKeyType(key.type());
-
- const WebCryptoRsaHashedKeyAlgorithmParams* params = key.algorithm().rsaHashedParams();
- doWriteUint32(params->modulusLengthBits());
- doWriteUint32(params->publicExponent().size());
- append(params->publicExponent().data(), params->publicExponent().size());
- doWriteAlgorithmId(params->hash().id());
-}
-
-void Writer::doWriteEcKey(const WebCryptoKey& key)
-{
- ASSERT(key.algorithm().ecParams());
- append(static_cast<uint8_t>(EcKeyTag));
-
- doWriteAlgorithmId(key.algorithm().id());
- doWriteAsymmetricKeyType(key.type());
- doWriteNamedCurve(key.algorithm().ecParams()->namedCurve());
-}
-
-void Writer::doWriteAlgorithmId(WebCryptoAlgorithmId id)
-{
- switch (id) {
- case WebCryptoAlgorithmIdAesCbc:
- return doWriteUint32(AesCbcTag);
- case WebCryptoAlgorithmIdHmac:
- return doWriteUint32(HmacTag);
- case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5:
- return doWriteUint32(RsaSsaPkcs1v1_5Tag);
- case WebCryptoAlgorithmIdSha1:
- return doWriteUint32(Sha1Tag);
- case WebCryptoAlgorithmIdSha256:
- return doWriteUint32(Sha256Tag);
- case WebCryptoAlgorithmIdSha384:
- return doWriteUint32(Sha384Tag);
- case WebCryptoAlgorithmIdSha512:
- return doWriteUint32(Sha512Tag);
- case WebCryptoAlgorithmIdAesGcm:
- return doWriteUint32(AesGcmTag);
- case WebCryptoAlgorithmIdRsaOaep:
- return doWriteUint32(RsaOaepTag);
- case WebCryptoAlgorithmIdAesCtr:
- return doWriteUint32(AesCtrTag);
- case WebCryptoAlgorithmIdAesKw:
- return doWriteUint32(AesKwTag);
- case WebCryptoAlgorithmIdRsaPss:
- return doWriteUint32(RsaPssTag);
- case WebCryptoAlgorithmIdEcdsa:
- return doWriteUint32(EcdsaTag);
- }
- ASSERT_NOT_REACHED();
-}
-
-void Writer::doWriteAsymmetricKeyType(WebCryptoKeyType keyType)
-{
- switch (keyType) {
- case WebCryptoKeyTypePublic:
- doWriteUint32(PublicKeyType);
- break;
- case WebCryptoKeyTypePrivate:
- doWriteUint32(PrivateKeyType);
- break;
- case WebCryptoKeyTypeSecret:
- ASSERT_NOT_REACHED();
- }
-}
-
-void Writer::doWriteNamedCurve(WebCryptoNamedCurve namedCurve)
-{
- switch (namedCurve) {
- case WebCryptoNamedCurveP256:
- return doWriteUint32(P256Tag);
- case WebCryptoNamedCurveP384:
- return doWriteUint32(P384Tag);
- case WebCryptoNamedCurveP521:
- return doWriteUint32(P521Tag);
- }
- ASSERT_NOT_REACHED();
-}
-
-void Writer::doWriteKeyUsages(const WebCryptoKeyUsageMask usages, bool extractable)
-{
- // Reminder to update this when adding new key usages.
- COMPILE_ASSERT(EndOfWebCryptoKeyUsage == (1 << 7) + 1, UpdateMe);
-
- uint32_t value = 0;
-
- if (extractable)
- value |= ExtractableUsage;
-
- if (usages & WebCryptoKeyUsageEncrypt)
- value |= EncryptUsage;
- if (usages & WebCryptoKeyUsageDecrypt)
- value |= DecryptUsage;
- if (usages & WebCryptoKeyUsageSign)
- value |= SignUsage;
- if (usages & WebCryptoKeyUsageVerify)
- value |= VerifyUsage;
- if (usages & WebCryptoKeyUsageDeriveKey)
- value |= DeriveKeyUsage;
- if (usages & WebCryptoKeyUsageWrapKey)
- value |= WrapKeyUsage;
- if (usages & WebCryptoKeyUsageUnwrapKey)
- value |= UnwrapKeyUsage;
- if (usages & WebCryptoKeyUsageDeriveBits)
- value |= DeriveBitsUsage;
-
- doWriteUint32(value);
-}
-
-int Writer::bytesNeededToWireEncode(uint32_t value)
+int SerializedScriptValueWriter::bytesNeededToWireEncode(uint32_t value)
{
int bytes = 1;
while (true) {
@@ -597,46 +415,46 @@ int Writer::bytesNeededToWireEncode(uint32_t value)
return bytes;
}
-void Writer::doWriteUint32(uint32_t value)
+void SerializedScriptValueWriter::doWriteUint32(uint32_t value)
{
doWriteUintHelper(value);
}
-void Writer::doWriteUint64(uint64_t value)
+void SerializedScriptValueWriter::doWriteUint64(uint64_t value)
{
doWriteUintHelper(value);
}
-void Writer::doWriteNumber(double number)
+void SerializedScriptValueWriter::doWriteNumber(double number)
{
append(reinterpret_cast<uint8_t*>(&number), sizeof(number));
}
-void Writer::append(SerializationTag tag)
+void SerializedScriptValueWriter::append(SerializationTag tag)
{
append(static_cast<uint8_t>(tag));
}
-void Writer::append(uint8_t b)
+void SerializedScriptValueWriter::append(uint8_t b)
{
ensureSpace(1);
*byteAt(m_position++) = b;
}
-void Writer::append(const uint8_t* data, int length)
+void SerializedScriptValueWriter::append(const uint8_t* data, int length)
{
ensureSpace(length);
memcpy(byteAt(m_position), data, length);
m_position += length;
}
-void Writer::ensureSpace(unsigned extra)
+void SerializedScriptValueWriter::ensureSpace(unsigned extra)
{
COMPILE_ASSERT(sizeof(BufferValueType) == 2, BufferValueTypeIsTwoBytes);
m_buffer.resize((m_position + extra + 1) / sizeof(BufferValueType)); // "+ 1" to round up.
}
-void Writer::fillHole()
+void SerializedScriptValueWriter::fillHole()
{
COMPILE_ASSERT(sizeof(BufferValueType) == 2, BufferValueTypeIsTwoBytes);
// If the writer is at odd position in the buffer, then one of
@@ -645,17 +463,17 @@ void Writer::fillHole()
*byteAt(m_position) = static_cast<uint8_t>(PaddingTag);
}
-uint8_t* Writer::byteAt(int position)
+uint8_t* SerializedScriptValueWriter::byteAt(int position)
{
return reinterpret_cast<uint8_t*>(m_buffer.data()) + position;
}
-int Writer::v8StringWriteOptions()
+int SerializedScriptValueWriter::v8StringWriteOptions()
{
return v8::String::NO_NULL_TERMINATION;
}
-Serializer::StateBase* Serializer::AbstractObjectState::serializeProperties(bool ignoreIndexed, Serializer& serializer)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::AbstractObjectState::serializeProperties(bool ignoreIndexed, ScriptValueSerializer& serializer)
{
while (m_index < m_propertyNames->Length()) {
if (!m_nameDone) {
@@ -699,7 +517,7 @@ Serializer::StateBase* Serializer::AbstractObjectState::serializeProperties(bool
return objectDone(m_numSerializedProperties, serializer);
}
-Serializer::StateBase* Serializer::ObjectState::advance(Serializer& serializer)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::ObjectState::advance(ScriptValueSerializer& serializer)
{
if (m_propertyNames.IsEmpty()) {
m_propertyNames = composite()->GetPropertyNames();
@@ -711,12 +529,12 @@ Serializer::StateBase* Serializer::ObjectState::advance(Serializer& serializer)
return serializeProperties(false, serializer);
}
-Serializer::StateBase* Serializer::ObjectState::objectDone(unsigned numProperties, Serializer& serializer)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::ObjectState::objectDone(unsigned numProperties, ScriptValueSerializer& serializer)
{
return serializer.writeObject(numProperties, this);
}
-Serializer::StateBase* Serializer::DenseArrayState::advance(Serializer& serializer)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::DenseArrayState::advance(ScriptValueSerializer& serializer)
{
while (m_arrayIndex < m_arrayLength) {
v8::Handle<v8::Value> value = composite().As<v8::Array>()->Get(m_arrayIndex);
@@ -729,17 +547,17 @@ Serializer::StateBase* Serializer::DenseArrayState::advance(Serializer& serializ
return serializeProperties(true, serializer);
}
-Serializer::StateBase* Serializer::DenseArrayState::objectDone(unsigned numProperties, Serializer& serializer)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::DenseArrayState::objectDone(unsigned numProperties, ScriptValueSerializer& serializer)
{
return serializer.writeDenseArray(numProperties, m_arrayLength, this);
}
-Serializer::StateBase* Serializer::SparseArrayState::advance(Serializer& serializer)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::SparseArrayState::advance(ScriptValueSerializer& serializer)
{
return serializeProperties(false, serializer);
}
-Serializer::StateBase* Serializer::SparseArrayState::objectDone(unsigned numProperties, Serializer& serializer)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::SparseArrayState::objectDone(unsigned numProperties, ScriptValueSerializer& serializer)
{
return serializer.writeSparseArray(numProperties, composite().As<v8::Array>()->Length(), this);
}
@@ -773,7 +591,7 @@ static bool isHostObject(v8::Handle<v8::Object> object)
return object->InternalFieldCount() || object->HasIndexedPropertiesInExternalArrayData();
}
-Serializer::Serializer(Writer& writer, MessagePortArray* messagePorts, ArrayBufferArray* arrayBuffers, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, ScriptState* scriptState)
+ScriptValueSerializer::ScriptValueSerializer(SerializedScriptValueWriter& writer, MessagePortArray* messagePorts, ArrayBufferArray* arrayBuffers, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, ScriptState* scriptState)
: m_scriptState(scriptState)
, m_writer(writer)
, m_tryCatch(tryCatch)
@@ -799,7 +617,7 @@ Serializer::Serializer(Writer& writer, MessagePortArray* messagePorts, ArrayBuff
}
}
-Serializer::Status Serializer::serialize(v8::Handle<v8::Value> value)
+ScriptValueSerializer::Status ScriptValueSerializer::serialize(v8::Handle<v8::Value> value)
{
v8::HandleScope scope(isolate());
m_writer.writeVersion();
@@ -809,7 +627,7 @@ Serializer::Status Serializer::serialize(v8::Handle<v8::Value> value)
return m_status;
}
-Serializer::StateBase* Serializer::doSerialize(v8::Handle<v8::Value> value, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::doSerialize(v8::Handle<v8::Value> value, ScriptValueSerializer::StateBase* next)
{
m_writer.writeReferenceCount(m_nextObjectReference);
uint32_t objectReference;
@@ -868,13 +686,8 @@ Serializer::StateBase* Serializer::doSerialize(v8::Handle<v8::Value> value, Seri
return writeFile(value, next);
} else if (V8Blob::hasInstance(value, isolate())) {
return writeBlob(value, next);
- } else if (V8DOMFileSystem::hasInstance(value, isolate())) {
- return writeDOMFileSystem(value, next);
} else if (V8FileList::hasInstance(value, isolate())) {
return writeFileList(value, next);
- } else if (V8CryptoKey::hasInstance(value, isolate())) {
- if (!writeCryptoKey(value))
- return handleError(DataCloneError, "Couldn't serialize key data", next);
} else if (V8ImageData::hasInstance(value, isolate())) {
writeImageData(value);
} else if (value->IsRegExp()) {
@@ -892,35 +705,35 @@ Serializer::StateBase* Serializer::doSerialize(v8::Handle<v8::Value> value, Seri
return 0;
}
-Serializer::StateBase* Serializer::doSerializeArrayBuffer(v8::Handle<v8::Value> arrayBuffer, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::doSerializeArrayBuffer(v8::Handle<v8::Value> arrayBuffer, ScriptValueSerializer::StateBase* next)
{
return doSerialize(arrayBuffer, next);
}
-Serializer::StateBase* Serializer::checkException(Serializer::StateBase* state)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::checkException(ScriptValueSerializer::StateBase* state)
{
return m_tryCatch.HasCaught() ? handleError(JSException, "", state) : 0;
}
-Serializer::StateBase* Serializer::writeObject(uint32_t numProperties, Serializer::StateBase* state)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeObject(uint32_t numProperties, ScriptValueSerializer::StateBase* state)
{
m_writer.writeObject(numProperties);
return pop(state);
}
-Serializer::StateBase* Serializer::writeSparseArray(uint32_t numProperties, uint32_t length, Serializer::StateBase* state)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeSparseArray(uint32_t numProperties, uint32_t length, ScriptValueSerializer::StateBase* state)
{
m_writer.writeSparseArray(numProperties, length);
return pop(state);
}
-Serializer::StateBase* Serializer::writeDenseArray(uint32_t numProperties, uint32_t length, Serializer::StateBase* state)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeDenseArray(uint32_t numProperties, uint32_t length, ScriptValueSerializer::StateBase* state)
{
m_writer.writeDenseArray(numProperties, length);
return pop(state);
}
-Serializer::StateBase* Serializer::handleError(Serializer::Status errorStatus, const String& message, Serializer::StateBase* state)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::handleError(ScriptValueSerializer::Status errorStatus, const String& message, ScriptValueSerializer::StateBase* state)
{
ASSERT(errorStatus != Success);
m_status = errorStatus;
@@ -933,7 +746,7 @@ Serializer::StateBase* Serializer::handleError(Serializer::Status errorStatus, c
return new ErrorState;
}
-bool Serializer::checkComposite(Serializer::StateBase* top)
+bool ScriptValueSerializer::checkComposite(ScriptValueSerializer::StateBase* top)
{
ASSERT(top);
if (m_depth > maxDepth)
@@ -948,7 +761,7 @@ bool Serializer::checkComposite(Serializer::StateBase* top)
return true;
}
-void Serializer::writeString(v8::Handle<v8::Value> value)
+void ScriptValueSerializer::writeString(v8::Handle<v8::Value> value)
{
v8::Handle<v8::String> string = value.As<v8::String>();
if (!string->Length() || string->IsOneByte())
@@ -957,26 +770,26 @@ void Serializer::writeString(v8::Handle<v8::Value> value)
m_writer.writeUCharString(string);
}
-void Serializer::writeStringObject(v8::Handle<v8::Value> value)
+void ScriptValueSerializer::writeStringObject(v8::Handle<v8::Value> value)
{
v8::Handle<v8::StringObject> stringObject = value.As<v8::StringObject>();
v8::String::Utf8Value stringValue(stringObject->ValueOf());
m_writer.writeStringObject(*stringValue, stringValue.length());
}
-void Serializer::writeNumberObject(v8::Handle<v8::Value> value)
+void ScriptValueSerializer::writeNumberObject(v8::Handle<v8::Value> value)
{
v8::Handle<v8::NumberObject> numberObject = value.As<v8::NumberObject>();
m_writer.writeNumberObject(numberObject->ValueOf());
}
-void Serializer::writeBooleanObject(v8::Handle<v8::Value> value)
+void ScriptValueSerializer::writeBooleanObject(v8::Handle<v8::Value> value)
{
v8::Handle<v8::BooleanObject> booleanObject = value.As<v8::BooleanObject>();
m_writer.writeBooleanObject(booleanObject->ValueOf());
}
-Serializer::StateBase* Serializer::writeBlob(v8::Handle<v8::Value> value, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeBlob(v8::Handle<v8::Value> value, ScriptValueSerializer::StateBase* next)
{
Blob* blob = V8Blob::toImpl(value.As<v8::Object>());
if (!blob)
@@ -992,18 +805,7 @@ Serializer::StateBase* Serializer::writeBlob(v8::Handle<v8::Value> value, Serial
return 0;
}
-Serializer::StateBase* Serializer::writeDOMFileSystem(v8::Handle<v8::Value> value, StateBase* next)
-{
- DOMFileSystem* fs = V8DOMFileSystem::toImpl(value.As<v8::Object>());
- if (!fs)
- return 0;
- if (!fs->clonable())
- return handleError(DataCloneError, "A FileSystem object could not be cloned.", next);
- m_writer.writeDOMFileSystem(fs->type(), fs->name(), fs->rootURL().string());
- return 0;
-}
-
-Serializer::StateBase* Serializer::writeFile(v8::Handle<v8::Value> value, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeFile(v8::Handle<v8::Value> value, ScriptValueSerializer::StateBase* next)
{
File* file = V8File::toImpl(value.As<v8::Object>());
if (!file)
@@ -1021,7 +823,7 @@ Serializer::StateBase* Serializer::writeFile(v8::Handle<v8::Value> value, Serial
return 0;
}
-Serializer::StateBase* Serializer::writeFileList(v8::Handle<v8::Value> value, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeFileList(v8::Handle<v8::Value> value, ScriptValueSerializer::StateBase* next)
{
FileList* fileList = V8FileList::toImpl(value.As<v8::Object>());
if (!fileList)
@@ -1047,15 +849,7 @@ Serializer::StateBase* Serializer::writeFileList(v8::Handle<v8::Value> value, Se
return 0;
}
-bool Serializer::writeCryptoKey(v8::Handle<v8::Value> value)
-{
- CryptoKey* key = V8CryptoKey::toImpl(value.As<v8::Object>());
- if (!key)
- return false;
- return m_writer.writeCryptoKey(key->key());
-}
-
-void Serializer::writeImageData(v8::Handle<v8::Value> value)
+void ScriptValueSerializer::writeImageData(v8::Handle<v8::Value> value)
{
ImageData* imageData = V8ImageData::toImpl(value.As<v8::Object>());
if (!imageData)
@@ -1064,13 +858,13 @@ void Serializer::writeImageData(v8::Handle<v8::Value> value)
m_writer.writeImageData(imageData->width(), imageData->height(), pixelArray->data(), pixelArray->length());
}
-void Serializer::writeRegExp(v8::Handle<v8::Value> value)
+void ScriptValueSerializer::writeRegExp(v8::Handle<v8::Value> value)
{
v8::Handle<v8::RegExp> regExp = value.As<v8::RegExp>();
m_writer.writeRegExp(regExp->GetSource(), regExp->GetFlags());
}
-Serializer::StateBase* Serializer::writeAndGreyArrayBufferView(v8::Handle<v8::Object> object, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeAndGreyArrayBufferView(v8::Handle<v8::Object> object, ScriptValueSerializer::StateBase* next)
{
ASSERT(!object.IsEmpty());
DOMArrayBufferView* arrayBufferView = V8ArrayBufferView::toImpl(object);
@@ -1099,7 +893,7 @@ Serializer::StateBase* Serializer::writeAndGreyArrayBufferView(v8::Handle<v8::Ob
return 0;
}
-Serializer::StateBase* Serializer::writeArrayBuffer(v8::Handle<v8::Value> value, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeArrayBuffer(v8::Handle<v8::Value> value, ScriptValueSerializer::StateBase* next)
{
DOMArrayBuffer* arrayBuffer = V8ArrayBuffer::toImpl(value.As<v8::Object>());
if (!arrayBuffer)
@@ -1111,7 +905,7 @@ Serializer::StateBase* Serializer::writeArrayBuffer(v8::Handle<v8::Value> value,
return 0;
}
-Serializer::StateBase* Serializer::writeTransferredArrayBuffer(v8::Handle<v8::Value> value, uint32_t index, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeTransferredArrayBuffer(v8::Handle<v8::Value> value, uint32_t index, ScriptValueSerializer::StateBase* next)
{
DOMArrayBuffer* arrayBuffer = V8ArrayBuffer::toImpl(value.As<v8::Object>());
if (!arrayBuffer)
@@ -1122,7 +916,7 @@ Serializer::StateBase* Serializer::writeTransferredArrayBuffer(v8::Handle<v8::Va
return 0;
}
-bool Serializer::shouldSerializeDensely(uint32_t length, uint32_t propertyCount)
+bool ScriptValueSerializer::shouldSerializeDensely(uint32_t length, uint32_t propertyCount)
{
// Let K be the cost of serializing all property values that are there
// Cost of serializing sparsely: 5*propertyCount + K (5 bytes per uint32_t key)
@@ -1131,7 +925,7 @@ bool Serializer::shouldSerializeDensely(uint32_t length, uint32_t propertyCount)
return 6 * propertyCount >= length;
}
-Serializer::StateBase* Serializer::startArrayState(v8::Handle<v8::Array> array, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::startArrayState(v8::Handle<v8::Array> array, ScriptValueSerializer::StateBase* next)
{
v8::Handle<v8::Array> propertyNames = array->GetPropertyNames();
if (StateBase* newState = checkException(next))
@@ -1147,7 +941,7 @@ Serializer::StateBase* Serializer::startArrayState(v8::Handle<v8::Array> array,
return push(new SparseArrayState(array, propertyNames, next, isolate()));
}
-Serializer::StateBase* Serializer::startObjectState(v8::Handle<v8::Object> object, Serializer::StateBase* next)
+ScriptValueSerializer::StateBase* ScriptValueSerializer::startObjectState(v8::Handle<v8::Object> object, ScriptValueSerializer::StateBase* next)
{
m_writer.writeGenerateFreshObject();
// FIXME: check not a wrapper
@@ -1156,14 +950,14 @@ Serializer::StateBase* Serializer::startObjectState(v8::Handle<v8::Object> objec
// Marks object as having been visited by the serializer and assigns it a unique object reference ID.
// An object may only be greyed once.
-void Serializer::greyObject(const v8::Handle<v8::Object>& object)
+void ScriptValueSerializer::greyObject(const v8::Handle<v8::Object>& object)
{
ASSERT(!m_objectPool.contains(object));
uint32_t objectReference = m_nextObjectReference++;
m_objectPool.set(object, objectReference);
}
-bool Serializer::appendBlobInfo(const String& uuid, const String& type, unsigned long long size, int* index)
+bool ScriptValueSerializer::appendBlobInfo(const String& uuid, const String& type, unsigned long long size, int* index)
{
if (!m_blobInfo)
return false;
@@ -1172,7 +966,7 @@ bool Serializer::appendBlobInfo(const String& uuid, const String& type, unsigned
return true;
}
-bool Serializer::appendFileInfo(const File* file, int* index)
+bool ScriptValueSerializer::appendFileInfo(const File* file, int* index)
{
if (!m_blobInfo)
return false;
@@ -1185,11 +979,16 @@ bool Serializer::appendFileInfo(const File* file, int* index)
return true;
}
-bool Reader::read(v8::Handle<v8::Value>* value, CompositeCreator& creator)
+bool SerializedScriptValueReader::read(v8::Handle<v8::Value>* value, ScriptValueCompositeCreator& creator)
{
SerializationTag tag;
if (!readTag(&tag))
return false;
+ return readWithTag(tag, value, creator);
+}
+
+bool SerializedScriptValueReader::readWithTag(SerializationTag tag, v8::Handle<v8::Value>* value, ScriptValueCompositeCreator& creator)
+{
switch (tag) {
case ReferenceCountTag: {
if (!m_version)
@@ -1275,22 +1074,12 @@ bool Reader::read(v8::Handle<v8::Value>* value, CompositeCreator& creator)
return false;
creator.pushObjectReference(*value);
break;
- case DOMFileSystemTag:
- if (!readDOMFileSystem(value))
- return false;
- creator.pushObjectReference(*value);
- break;
case FileListTag:
case FileListIndexTag:
if (!readFileList(value, tag == FileListIndexTag))
return false;
creator.pushObjectReference(*value);
break;
- case CryptoKeyTag:
- if (!readCryptoKey(value))
- return false;
- creator.pushObjectReference(*value);
- break;
case ImageDataTag:
if (!readImageData(value))
return false;
@@ -1405,13 +1194,16 @@ bool Reader::read(v8::Handle<v8::Value>* value, CompositeCreator& creator)
return false;
break;
}
+ case DOMFileSystemTag:
+ case CryptoKeyTag:
+ ASSERT_NOT_REACHED();
default:
return false;
}
return !value->IsEmpty();
}
-bool Reader::readVersion(uint32_t& version)
+bool SerializedScriptValueReader::readVersion(uint32_t& version)
{
SerializationTag tag;
if (!readTag(&tag)) {
@@ -1430,12 +1222,12 @@ bool Reader::readVersion(uint32_t& version)
return doReadUint32(&version);
}
-void Reader::setVersion(uint32_t version)
+void SerializedScriptValueReader::setVersion(uint32_t version)
{
m_version = version;
}
-bool Reader::readTag(SerializationTag* tag)
+bool SerializedScriptValueReader::readTag(SerializationTag* tag)
{
if (m_position >= m_length)
return false;
@@ -1443,13 +1235,13 @@ bool Reader::readTag(SerializationTag* tag)
return true;
}
-void Reader::undoReadTag()
+void SerializedScriptValueReader::undoReadTag()
{
if (m_position > 0)
--m_position;
}
-bool Reader::readArrayBufferViewSubTag(ArrayBufferViewSubTag* tag)
+bool SerializedScriptValueReader::readArrayBufferViewSubTag(ArrayBufferViewSubTag* tag)
{
if (m_position >= m_length)
return false;
@@ -1457,7 +1249,7 @@ bool Reader::readArrayBufferViewSubTag(ArrayBufferViewSubTag* tag)
return true;
}
-bool Reader::readString(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readString(v8::Handle<v8::Value>* value)
{
uint32_t length;
if (!doReadUint32(&length))
@@ -1469,7 +1261,7 @@ bool Reader::readString(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readUCharString(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readUCharString(v8::Handle<v8::Value>* value)
{
uint32_t length;
if (!doReadUint32(&length) || (length & 1))
@@ -1482,7 +1274,7 @@ bool Reader::readUCharString(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readStringObject(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readStringObject(v8::Handle<v8::Value>* value)
{
v8::Handle<v8::Value> stringValue;
if (!readString(&stringValue) || !stringValue->IsString())
@@ -1491,7 +1283,7 @@ bool Reader::readStringObject(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readWebCoreString(String* string)
+bool SerializedScriptValueReader::readWebCoreString(String* string)
{
uint32_t length;
if (!doReadUint32(&length))
@@ -1503,7 +1295,7 @@ bool Reader::readWebCoreString(String* string)
return true;
}
-bool Reader::readInt32(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readInt32(v8::Handle<v8::Value>* value)
{
uint32_t rawValue;
if (!doReadUint32(&rawValue))
@@ -1512,7 +1304,7 @@ bool Reader::readInt32(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readUint32(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readUint32(v8::Handle<v8::Value>* value)
{
uint32_t rawValue;
if (!doReadUint32(&rawValue))
@@ -1521,7 +1313,7 @@ bool Reader::readUint32(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readDate(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readDate(v8::Handle<v8::Value>* value)
{
double numberValue;
if (!doReadNumber(&numberValue))
@@ -1530,7 +1322,7 @@ bool Reader::readDate(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readNumber(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readNumber(v8::Handle<v8::Value>* value)
{
double number;
if (!doReadNumber(&number))
@@ -1539,7 +1331,7 @@ bool Reader::readNumber(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readNumberObject(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readNumberObject(v8::Handle<v8::Value>* value)
{
double number;
if (!doReadNumber(&number))
@@ -1548,7 +1340,7 @@ bool Reader::readNumberObject(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readImageData(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readImageData(v8::Handle<v8::Value>* value)
{
uint32_t width;
uint32_t height;
@@ -1571,7 +1363,7 @@ bool Reader::readImageData(v8::Handle<v8::Value>* value)
return true;
}
-PassRefPtr<ArrayBuffer> Reader::doReadArrayBuffer()
+PassRefPtr<ArrayBuffer> SerializedScriptValueReader::doReadArrayBuffer()
{
uint32_t byteLength;
if (!doReadUint32(&byteLength))
@@ -1583,7 +1375,7 @@ PassRefPtr<ArrayBuffer> Reader::doReadArrayBuffer()
return ArrayBuffer::create(bufferStart, byteLength);
}
-bool Reader::readArrayBuffer(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readArrayBuffer(v8::Handle<v8::Value>* value)
{
RefPtr<ArrayBuffer> arrayBuffer = doReadArrayBuffer();
if (!arrayBuffer)
@@ -1592,7 +1384,7 @@ bool Reader::readArrayBuffer(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readArrayBufferView(v8::Handle<v8::Value>* value, CompositeCreator& creator)
+bool SerializedScriptValueReader::readArrayBufferView(v8::Handle<v8::Value>* value, ScriptValueCompositeCreator& creator)
{
ArrayBufferViewSubTag subTag;
uint32_t byteOffset;
@@ -1678,7 +1470,7 @@ bool Reader::readArrayBufferView(v8::Handle<v8::Value>* value, CompositeCreator&
return !value->IsEmpty();
}
-bool Reader::readRegExp(v8::Handle<v8::Value>* value)
+bool SerializedScriptValueReader::readRegExp(v8::Handle<v8::Value>* value)
{
v8::Handle<v8::Value> pattern;
if (!readString(&pattern))
@@ -1690,7 +1482,7 @@ bool Reader::readRegExp(v8::Handle<v8::Value>* value)
return true;
}
-bool Reader::readBlob(v8::Handle<v8::Value>* value, bool isIndexed)
+bool SerializedScriptValueReader::readBlob(v8::Handle<v8::Value>* value, bool isIndexed)
{
if (m_version < 3)
return false;
@@ -1722,23 +1514,7 @@ bool Reader::readBlob(v8::Handle<v8::Value>* value, bool isIndexed)
return true;
}
-bool Reader::readDOMFileSystem(v8::Handle<v8::Value>* value)
-{
- uint32_t type;
- String name;
- String url;
- if (!doReadUint32(&type))
- return false;
- if (!readWebCoreString(&name))
- return false;
- if (!readWebCoreString(&url))
- return false;
- DOMFileSystem* fs = DOMFileSystem::create(m_scriptState->executionContext(), name, static_cast<FileSystemType>(type), KURL(ParsedURLString, url));
- *value = toV8(fs, m_scriptState->context()->Global(), isolate());
- return true;
-}
-
-bool Reader::readFile(v8::Handle<v8::Value>* value, bool isIndexed)
+bool SerializedScriptValueReader::readFile(v8::Handle<v8::Value>* value, bool isIndexed)
{
File* file = nullptr;
if (isIndexed) {
@@ -1754,7 +1530,7 @@ bool Reader::readFile(v8::Handle<v8::Value>* value, bool isIndexed)
return true;
}
-bool Reader::readFileList(v8::Handle<v8::Value>* value, bool isIndexed)
+bool SerializedScriptValueReader::readFileList(v8::Handle<v8::Value>* value, bool isIndexed)
{
if (m_version < 3)
return false;
@@ -1779,62 +1555,7 @@ bool Reader::readFileList(v8::Handle<v8::Value>* value, bool isIndexed)
return true;
}
-bool Reader::readCryptoKey(v8::Handle<v8::Value>* value)
-{
- uint32_t rawKeyType;
- if (!doReadUint32(&rawKeyType))
- return false;
-
- WebCryptoKeyAlgorithm algorithm;
- WebCryptoKeyType type = WebCryptoKeyTypeSecret;
-
- switch (static_cast<CryptoKeySubTag>(rawKeyType)) {
- case AesKeyTag:
- if (!doReadAesKey(algorithm, type))
- return false;
- break;
- case HmacKeyTag:
- if (!doReadHmacKey(algorithm, type))
- return false;
- break;
- case RsaHashedKeyTag:
- if (!doReadRsaHashedKey(algorithm, type))
- return false;
- break;
- case EcKeyTag:
- if (!doReadEcKey(algorithm, type))
- return false;
- break;
- default:
- return false;
- }
-
- WebCryptoKeyUsageMask usages;
- bool extractable;
- if (!doReadKeyUsages(usages, extractable))
- return false;
-
- uint32_t keyDataLength;
- if (!doReadUint32(&keyDataLength))
- return false;
-
- if (m_position + keyDataLength > m_length)
- return false;
-
- const uint8_t* keyData = m_buffer + m_position;
- m_position += keyDataLength;
-
- WebCryptoKey key = WebCryptoKey::createNull();
- if (!Platform::current()->crypto()->deserializeKeyForClone(
- algorithm, type, extractable, usages, keyData, keyDataLength, key)) {
- return false;
- }
-
- *value = toV8(CryptoKey::create(key), m_scriptState->context()->Global(), isolate());
- return true;
-}
-
-File* Reader::readFileHelper()
+File* SerializedScriptValueReader::readFileHelper()
{
if (m_version < 3)
return nullptr;
@@ -1872,7 +1593,7 @@ File* Reader::readFileHelper()
return File::createFromSerialization(path, name, relativePath, userVisibility, hasSnapshot > 0, size, lastModified, getOrCreateBlobDataHandle(uuid, type));
}
-File* Reader::readFileIndexHelper()
+File* SerializedScriptValueReader::readFileIndexHelper()
{
if (m_version < 3)
return nullptr;
@@ -1884,17 +1605,17 @@ File* Reader::readFileIndexHelper()
return File::createFromIndexedSerialization(info.filePath(), info.fileName(), info.size(), info.lastModified(), getOrCreateBlobDataHandle(info.uuid(), info.type(), info.size()));
}
-bool Reader::doReadUint32(uint32_t* value)
+bool SerializedScriptValueReader::doReadUint32(uint32_t* value)
{
return doReadUintHelper(value);
}
-bool Reader::doReadUint64(uint64_t* value)
+bool SerializedScriptValueReader::doReadUint64(uint64_t* value)
{
return doReadUintHelper(value);
}
-bool Reader::doReadNumber(double* number)
+bool SerializedScriptValueReader::doReadNumber(double* number)
{
if (m_position + sizeof(double) > m_length)
return false;
@@ -1904,7 +1625,7 @@ bool Reader::doReadNumber(double* number)
return true;
}
-PassRefPtr<BlobDataHandle> Reader::getOrCreateBlobDataHandle(const String& uuid, const String& type, long long size)
+PassRefPtr<BlobDataHandle> SerializedScriptValueReader::getOrCreateBlobDataHandle(const String& uuid, const String& type, long long size)
{
// The containing ssv may have a BDH for this uuid if this ssv is just being
// passed from main to worker thread (for example). We use those values when creating
@@ -1924,209 +1645,7 @@ PassRefPtr<BlobDataHandle> Reader::getOrCreateBlobDataHandle(const String& uuid,
return BlobDataHandle::create(uuid, type, size);
}
-bool Reader::doReadHmacKey(WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyType& type)
-{
- uint32_t lengthBytes;
- if (!doReadUint32(&lengthBytes))
- return false;
- WebCryptoAlgorithmId hash;
- if (!doReadAlgorithmId(hash))
- return false;
- algorithm = WebCryptoKeyAlgorithm::createHmac(hash, lengthBytes * 8);
- type = WebCryptoKeyTypeSecret;
- return !algorithm.isNull();
-}
-
-bool Reader::doReadAesKey(WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyType& type)
-{
- WebCryptoAlgorithmId id;
- if (!doReadAlgorithmId(id))
- return false;
- uint32_t lengthBytes;
- if (!doReadUint32(&lengthBytes))
- return false;
- algorithm = WebCryptoKeyAlgorithm::createAes(id, lengthBytes * 8);
- type = WebCryptoKeyTypeSecret;
- return !algorithm.isNull();
-}
-
-bool Reader::doReadRsaHashedKey(WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyType& type)
-{
- WebCryptoAlgorithmId id;
- if (!doReadAlgorithmId(id))
- return false;
-
- if (!doReadAsymmetricKeyType(type))
- return false;
-
- uint32_t modulusLengthBits;
- if (!doReadUint32(&modulusLengthBits))
- return false;
-
- uint32_t publicExponentSize;
- if (!doReadUint32(&publicExponentSize))
- return false;
-
- if (m_position + publicExponentSize > m_length)
- return false;
-
- const uint8_t* publicExponent = m_buffer + m_position;
- m_position += publicExponentSize;
-
- WebCryptoAlgorithmId hash;
- if (!doReadAlgorithmId(hash))
- return false;
- algorithm = WebCryptoKeyAlgorithm::createRsaHashed(id, modulusLengthBits, publicExponent, publicExponentSize, hash);
-
- return !algorithm.isNull();
-}
-
-bool Reader::doReadEcKey(WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyType& type)
-{
- WebCryptoAlgorithmId id;
- if (!doReadAlgorithmId(id))
- return false;
-
- if (!doReadAsymmetricKeyType(type))
- return false;
-
- WebCryptoNamedCurve namedCurve;
- if (!doReadNamedCurve(namedCurve))
- return false;
-
- algorithm = WebCryptoKeyAlgorithm::createEc(id, namedCurve);
- return !algorithm.isNull();
-}
-
-bool Reader::doReadAlgorithmId(WebCryptoAlgorithmId& id)
-{
- uint32_t rawId;
- if (!doReadUint32(&rawId))
- return false;
-
- switch (static_cast<CryptoKeyAlgorithmTag>(rawId)) {
- case AesCbcTag:
- id = WebCryptoAlgorithmIdAesCbc;
- return true;
- case HmacTag:
- id = WebCryptoAlgorithmIdHmac;
- return true;
- case RsaSsaPkcs1v1_5Tag:
- id = WebCryptoAlgorithmIdRsaSsaPkcs1v1_5;
- return true;
- case Sha1Tag:
- id = WebCryptoAlgorithmIdSha1;
- return true;
- case Sha256Tag:
- id = WebCryptoAlgorithmIdSha256;
- return true;
- case Sha384Tag:
- id = WebCryptoAlgorithmIdSha384;
- return true;
- case Sha512Tag:
- id = WebCryptoAlgorithmIdSha512;
- return true;
- case AesGcmTag:
- id = WebCryptoAlgorithmIdAesGcm;
- return true;
- case RsaOaepTag:
- id = WebCryptoAlgorithmIdRsaOaep;
- return true;
- case AesCtrTag:
- id = WebCryptoAlgorithmIdAesCtr;
- return true;
- case AesKwTag:
- id = WebCryptoAlgorithmIdAesKw;
- return true;
- case RsaPssTag:
- id = WebCryptoAlgorithmIdRsaPss;
- return true;
- case EcdsaTag:
- id = WebCryptoAlgorithmIdEcdsa;
- return true;
- }
-
- return false;
-}
-
-bool Reader::doReadAsymmetricKeyType(WebCryptoKeyType& type)
-{
- uint32_t rawType;
- if (!doReadUint32(&rawType))
- return false;
-
- switch (static_cast<AssymetricCryptoKeyType>(rawType)) {
- case PublicKeyType:
- type = WebCryptoKeyTypePublic;
- return true;
- case PrivateKeyType:
- type = WebCryptoKeyTypePrivate;
- return true;
- }
-
- return false;
-}
-
-bool Reader::doReadNamedCurve(WebCryptoNamedCurve& namedCurve)
-{
- uint32_t rawName;
- if (!doReadUint32(&rawName))
- return false;
-
- switch (static_cast<NamedCurveTag>(rawName)) {
- case P256Tag:
- namedCurve = WebCryptoNamedCurveP256;
- return true;
- case P384Tag:
- namedCurve = WebCryptoNamedCurveP384;
- return true;
- case P521Tag:
- namedCurve = WebCryptoNamedCurveP521;
- return true;
- }
-
- return false;
-}
-
-bool Reader::doReadKeyUsages(WebCryptoKeyUsageMask& usages, bool& extractable)
-{
- // Reminder to update this when adding new key usages.
- COMPILE_ASSERT(EndOfWebCryptoKeyUsage == (1 << 7) + 1, UpdateMe);
- const uint32_t allPossibleUsages = ExtractableUsage | EncryptUsage | DecryptUsage | SignUsage | VerifyUsage | DeriveKeyUsage | WrapKeyUsage | UnwrapKeyUsage | DeriveBitsUsage;
-
- uint32_t rawUsages;
- if (!doReadUint32(&rawUsages))
- return false;
-
- // Make sure it doesn't contain an unrecognized usage value.
- if (rawUsages & ~allPossibleUsages)
- return false;
-
- usages = 0;
-
- extractable = rawUsages & ExtractableUsage;
-
- if (rawUsages & EncryptUsage)
- usages |= WebCryptoKeyUsageEncrypt;
- if (rawUsages & DecryptUsage)
- usages |= WebCryptoKeyUsageDecrypt;
- if (rawUsages & SignUsage)
- usages |= WebCryptoKeyUsageSign;
- if (rawUsages & VerifyUsage)
- usages |= WebCryptoKeyUsageVerify;
- if (rawUsages & DeriveKeyUsage)
- usages |= WebCryptoKeyUsageDeriveKey;
- if (rawUsages & WrapKeyUsage)
- usages |= WebCryptoKeyUsageWrapKey;
- if (rawUsages & UnwrapKeyUsage)
- usages |= WebCryptoKeyUsageUnwrapKey;
- if (rawUsages & DeriveBitsUsage)
- usages |= WebCryptoKeyUsageDeriveBits;
-
- return true;
-}
-
-v8::Handle<v8::Value> Deserializer::deserialize()
+v8::Handle<v8::Value> ScriptValueDeserializer::deserialize()
{
v8::Isolate* isolate = m_reader.scriptState()->isolate();
if (!m_reader.readVersion(m_version) || m_version > SerializedScriptValue::wireFormatVersion)
@@ -2143,21 +1662,21 @@ v8::Handle<v8::Value> Deserializer::deserialize()
return result;
}
-bool Deserializer::newSparseArray(uint32_t)
+bool ScriptValueDeserializer::newSparseArray(uint32_t)
{
v8::Local<v8::Array> array = v8::Array::New(m_reader.scriptState()->isolate(), 0);
openComposite(array);
return true;
}
-bool Deserializer::newDenseArray(uint32_t length)
+bool ScriptValueDeserializer::newDenseArray(uint32_t length)
{
v8::Local<v8::Array> array = v8::Array::New(m_reader.scriptState()->isolate(), length);
openComposite(array);
return true;
}
-bool Deserializer::consumeTopOfStack(v8::Handle<v8::Value>* object)
+bool ScriptValueDeserializer::consumeTopOfStack(v8::Handle<v8::Value>* object)
{
if (stackDepth() < 1)
return false;
@@ -2166,7 +1685,7 @@ bool Deserializer::consumeTopOfStack(v8::Handle<v8::Value>* object)
return true;
}
-bool Deserializer::newObject()
+bool ScriptValueDeserializer::newObject()
{
v8::Local<v8::Object> object = v8::Object::New(m_reader.scriptState()->isolate());
if (object.IsEmpty())
@@ -2175,7 +1694,7 @@ bool Deserializer::newObject()
return true;
}
-bool Deserializer::completeObject(uint32_t numProperties, v8::Handle<v8::Value>* value)
+bool ScriptValueDeserializer::completeObject(uint32_t numProperties, v8::Handle<v8::Value>* value)
{
v8::Local<v8::Object> object;
if (m_version > 0) {
@@ -2191,7 +1710,7 @@ bool Deserializer::completeObject(uint32_t numProperties, v8::Handle<v8::Value>*
return initializeObject(object, numProperties, value);
}
-bool Deserializer::completeSparseArray(uint32_t numProperties, uint32_t length, v8::Handle<v8::Value>* value)
+bool ScriptValueDeserializer::completeSparseArray(uint32_t numProperties, uint32_t length, v8::Handle<v8::Value>* value)
{
v8::Local<v8::Array> array;
if (m_version > 0) {
@@ -2207,7 +1726,7 @@ bool Deserializer::completeSparseArray(uint32_t numProperties, uint32_t length,
return initializeObject(array, numProperties, value);
}
-bool Deserializer::completeDenseArray(uint32_t numProperties, uint32_t length, v8::Handle<v8::Value>* value)
+bool ScriptValueDeserializer::completeDenseArray(uint32_t numProperties, uint32_t length, v8::Handle<v8::Value>* value)
{
v8::Local<v8::Array> array;
if (m_version > 0) {
@@ -2231,12 +1750,12 @@ bool Deserializer::completeDenseArray(uint32_t numProperties, uint32_t length, v
return true;
}
-void Deserializer::pushObjectReference(const v8::Handle<v8::Value>& object)
+void ScriptValueDeserializer::pushObjectReference(const v8::Handle<v8::Value>& object)
{
m_objectPool.append(object);
}
-bool Deserializer::tryGetTransferredMessagePort(uint32_t index, v8::Handle<v8::Value>* object)
+bool ScriptValueDeserializer::tryGetTransferredMessagePort(uint32_t index, v8::Handle<v8::Value>* object)
{
if (!m_transferredMessagePorts)
return false;
@@ -2247,7 +1766,7 @@ bool Deserializer::tryGetTransferredMessagePort(uint32_t index, v8::Handle<v8::V
return true;
}
-bool Deserializer::tryGetTransferredArrayBuffer(uint32_t index, v8::Handle<v8::Value>* object)
+bool ScriptValueDeserializer::tryGetTransferredArrayBuffer(uint32_t index, v8::Handle<v8::Value>* object)
{
if (!m_arrayBufferContents)
return false;
@@ -2265,7 +1784,7 @@ bool Deserializer::tryGetTransferredArrayBuffer(uint32_t index, v8::Handle<v8::V
return true;
}
-bool Deserializer::tryGetObjectFromObjectReference(uint32_t reference, v8::Handle<v8::Value>* object)
+bool ScriptValueDeserializer::tryGetObjectFromObjectReference(uint32_t reference, v8::Handle<v8::Value>* object)
{
if (reference >= m_objectPool.size())
return false;
@@ -2273,12 +1792,12 @@ bool Deserializer::tryGetObjectFromObjectReference(uint32_t reference, v8::Handl
return object;
}
-uint32_t Deserializer::objectReferenceCount()
+uint32_t ScriptValueDeserializer::objectReferenceCount()
{
return m_objectPool.size();
}
-bool Deserializer::initializeObject(v8::Handle<v8::Object> object, uint32_t numProperties, v8::Handle<v8::Value>* value)
+bool ScriptValueDeserializer::initializeObject(v8::Handle<v8::Object> object, uint32_t numProperties, v8::Handle<v8::Value>* value)
{
unsigned length = 2 * numProperties;
if (length > stackDepth())
@@ -2293,12 +1812,12 @@ bool Deserializer::initializeObject(v8::Handle<v8::Object> object, uint32_t numP
return true;
}
-bool Deserializer::read(v8::Local<v8::Value>* value)
+bool ScriptValueDeserializer::read(v8::Local<v8::Value>* value)
{
return m_reader.read(value, *this);
}
-bool Deserializer::doDeserialize()
+bool ScriptValueDeserializer::doDeserialize()
{
v8::Local<v8::Value> value;
if (!read(&value))
@@ -2308,20 +1827,20 @@ bool Deserializer::doDeserialize()
return true;
}
-v8::Local<v8::Value> Deserializer::element(unsigned index)
+v8::Local<v8::Value> ScriptValueDeserializer::element(unsigned index)
{
ASSERT_WITH_SECURITY_IMPLICATION(index < m_stack.size());
return m_stack[index];
}
-void Deserializer::openComposite(const v8::Local<v8::Value>& object)
+void ScriptValueDeserializer::openComposite(const v8::Local<v8::Value>& object)
{
uint32_t newObjectReference = m_objectPool.size();
m_openCompositeReferenceStack.append(newObjectReference);
m_objectPool.append(object);
}
-bool Deserializer::closeComposite(v8::Handle<v8::Value>* object)
+bool ScriptValueDeserializer::closeComposite(v8::Handle<v8::Value>* object)
{
if (!m_openCompositeReferenceStack.size())
return false;
@@ -2333,6 +1852,4 @@ bool Deserializer::closeComposite(v8::Handle<v8::Value>* object)
return true;
}
-} // SerializedScriptValueInternal
-
} // namespace blink
« no previous file with comments | « Source/bindings/core/v8/ScriptValueSerializer.h ('k') | Source/bindings/core/v8/SerializationTag.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698