Index: Source/bindings/core/v8/ScriptValueSerializer.h |
diff --git a/Source/bindings/core/v8/ScriptValueSerializer.h b/Source/bindings/core/v8/ScriptValueSerializer.h |
index 19f3d99267670af3c2239dc6995883287fd92078..d0c044175a91b4c185cecd65a40b67d29a52d918 100644 |
--- a/Source/bindings/core/v8/ScriptValueSerializer.h |
+++ b/Source/bindings/core/v8/ScriptValueSerializer.h |
@@ -8,9 +8,6 @@ |
#include "bindings/core/v8/SerializationTag.h" |
#include "bindings/core/v8/SerializedScriptValue.h" |
#include "bindings/core/v8/V8Binding.h" |
-#include "public/platform/WebCrypto.h" |
-#include "public/platform/WebCryptoKey.h" |
-#include "public/platform/WebCryptoKeyAlgorithm.h" |
#include "wtf/ArrayBufferContents.h" |
#include "wtf/HashMap.h" |
#include "wtf/Noncopyable.h" |
@@ -25,8 +22,6 @@ class DOMArrayBufferView; |
class File; |
class FileList; |
-namespace SerializedScriptValueInternal { |
- |
typedef Vector<WTF::ArrayBufferContents, 1> ArrayBufferContentsArray; |
// V8ObjectMap is a map from V8 objects to arbitrary values of type T. |
@@ -94,15 +89,15 @@ private: |
HandleToT m_map; |
}; |
-// Writer is responsible for serializing primitive types and storing |
+// SerializedScriptValueWriter is responsible for serializing primitive types and storing |
// information used to reconstruct composite types. |
-class Writer { |
+class SerializedScriptValueWriter { |
STACK_ALLOCATED(); |
- WTF_MAKE_NONCOPYABLE(Writer); |
+ WTF_MAKE_NONCOPYABLE(SerializedScriptValueWriter); |
public: |
typedef UChar BufferValueType; |
- Writer() |
+ SerializedScriptValueWriter() |
: m_position(0) |
{ |
} |
@@ -126,12 +121,10 @@ public: |
void writeNumberObject(double number); |
void writeBlob(const String& uuid, const String& type, unsigned long long size); |
void writeBlobIndex(int blobIndex); |
- void writeDOMFileSystem(int type, const String& name, const String& url); |
void writeFile(const File&); |
void writeFileIndex(int blobIndex); |
void writeFileList(const FileList&); |
void writeFileListIndex(const Vector<int>& blobIndices); |
- bool writeCryptoKey(const WebCryptoKey&); |
void writeArrayBuffer(const DOMArrayBuffer&); |
void writeArrayBufferView(const DOMArrayBufferView&); |
void writeImageData(uint32_t width, uint32_t height, const uint8_t* pixelData, uint32_t pixelDataLength); |
@@ -153,14 +146,6 @@ protected: |
void doWriteArrayBuffer(const DOMArrayBuffer&); |
void doWriteString(const char* data, int length); |
void doWriteWebCoreString(const String&); |
- void doWriteHmacKey(const WebCryptoKey&); |
- void doWriteAesKey(const WebCryptoKey&); |
- void doWriteRsaHashedKey(const WebCryptoKey&); |
- void doWriteEcKey(const WebCryptoKey&); |
- void doWriteAlgorithmId(WebCryptoAlgorithmId); |
- void doWriteAsymmetricKeyType(WebCryptoKeyType); |
- void doWriteNamedCurve(WebCryptoNamedCurve); |
- void doWriteKeyUsages(const WebCryptoKeyUsageMask usages, bool extractable); |
int bytesNeededToWireEncode(uint32_t value); |
template<class T> |
@@ -193,9 +178,9 @@ private: |
unsigned m_position; |
}; |
-class Serializer { |
+class ScriptValueSerializer { |
STACK_ALLOCATED(); |
- WTF_MAKE_NONCOPYABLE(Serializer); |
+ WTF_MAKE_NONCOPYABLE(ScriptValueSerializer); |
protected: |
class StateBase; |
public: |
@@ -206,21 +191,12 @@ public: |
JSException |
}; |
- Serializer(Writer&, MessagePortArray* messagePorts, ArrayBufferArray* arrayBuffers, WebBlobInfoArray*, BlobDataHandleMap& blobDataHandles, v8::TryCatch&, ScriptState*); |
+ ScriptValueSerializer(SerializedScriptValueWriter&, MessagePortArray* messagePorts, ArrayBufferArray* arrayBuffers, WebBlobInfoArray*, BlobDataHandleMap& blobDataHandles, v8::TryCatch&, ScriptState*); |
v8::Isolate* isolate() { return m_scriptState->isolate(); } |
Status serialize(v8::Handle<v8::Value>); |
String errorMessage() { return m_errorMessage; } |
- // Functions used by serialization states. |
- Serializer::StateBase* doSerialize(v8::Handle<v8::Value>, Serializer::StateBase* next); |
- |
- StateBase* doSerializeArrayBuffer(v8::Handle<v8::Value> arrayBuffer, StateBase* next); |
- StateBase* checkException(StateBase*); |
- StateBase* writeObject(uint32_t numProperties, StateBase*); |
- StateBase* writeSparseArray(uint32_t numProperties, uint32_t length, StateBase*); |
- StateBase* writeDenseArray(uint32_t numProperties, uint32_t length, StateBase*); |
- |
protected: |
class StateBase { |
WTF_MAKE_NONCOPYABLE(StateBase); |
@@ -236,7 +212,7 @@ protected: |
// Serializes (a part of) the current composite and returns |
// the next state to process or null when this is the final |
// state. |
- virtual StateBase* advance(Serializer&) = 0; |
+ virtual StateBase* advance(ScriptValueSerializer&) = 0; |
protected: |
StateBase(v8::Handle<v8::Value> composite, StateBase* next) |
@@ -258,7 +234,7 @@ protected: |
{ |
} |
- virtual StateBase* advance(Serializer&) override |
+ virtual StateBase* advance(ScriptValueSerializer&) override |
{ |
delete this; |
return 0; |
@@ -288,9 +264,9 @@ protected: |
} |
protected: |
- virtual StateBase* objectDone(unsigned numProperties, Serializer&) = 0; |
+ virtual StateBase* objectDone(unsigned numProperties, ScriptValueSerializer&) = 0; |
- StateBase* serializeProperties(bool ignoreIndexed, Serializer&); |
+ StateBase* serializeProperties(bool ignoreIndexed, ScriptValueSerializer&); |
v8::Local<v8::Array> m_propertyNames; |
private: |
@@ -307,10 +283,10 @@ protected: |
{ |
} |
- virtual StateBase* advance(Serializer&) override; |
+ virtual StateBase* advance(ScriptValueSerializer&) override; |
protected: |
- virtual StateBase* objectDone(unsigned numProperties, Serializer&) override; |
+ virtual StateBase* objectDone(unsigned numProperties, ScriptValueSerializer&) override; |
}; |
class DenseArrayState final : public AbstractObjectState { |
@@ -323,10 +299,10 @@ protected: |
m_propertyNames = v8::Local<v8::Array>::New(isolate, propertyNames); |
} |
- virtual StateBase* advance(Serializer&) override; |
+ virtual StateBase* advance(ScriptValueSerializer&) override; |
protected: |
- virtual StateBase* objectDone(unsigned numProperties, Serializer&) override; |
+ virtual StateBase* objectDone(unsigned numProperties, ScriptValueSerializer&) override; |
private: |
uint32_t m_arrayIndex; |
@@ -341,13 +317,23 @@ protected: |
m_propertyNames = v8::Local<v8::Array>::New(isolate, propertyNames); |
} |
- virtual StateBase* advance(Serializer&) override; |
+ virtual StateBase* advance(ScriptValueSerializer&) override; |
protected: |
- virtual StateBase* objectDone(unsigned numProperties, Serializer&) override; |
+ virtual StateBase* objectDone(unsigned numProperties, ScriptValueSerializer&) override; |
}; |
+ // Functions used by serialization states. |
+ virtual StateBase* doSerializeValue(v8::Handle<v8::Value>, StateBase* next); |
+ |
private: |
+ StateBase* doSerialize(v8::Handle<v8::Value>, StateBase* next); |
+ StateBase* doSerializeArrayBuffer(v8::Handle<v8::Value> arrayBuffer, StateBase* next); |
+ StateBase* checkException(StateBase*); |
+ StateBase* writeObject(uint32_t numProperties, StateBase*); |
+ StateBase* writeSparseArray(uint32_t numProperties, uint32_t length, StateBase*); |
+ StateBase* writeDenseArray(uint32_t numProperties, uint32_t length, StateBase*); |
+ |
StateBase* push(StateBase* state) |
{ |
ASSERT(state); |
@@ -370,10 +356,8 @@ private: |
void writeNumberObject(v8::Handle<v8::Value>); |
void writeBooleanObject(v8::Handle<v8::Value>); |
StateBase* writeBlob(v8::Handle<v8::Value>, StateBase* next); |
- StateBase* writeDOMFileSystem(v8::Handle<v8::Value>, StateBase* next); |
StateBase* writeFile(v8::Handle<v8::Value>, StateBase* next); |
StateBase* writeFileList(v8::Handle<v8::Value>, StateBase* next); |
- bool writeCryptoKey(v8::Handle<v8::Value>); |
void writeImageData(v8::Handle<v8::Value>); |
void writeRegExp(v8::Handle<v8::Value>); |
StateBase* writeAndGreyArrayBufferView(v8::Handle<v8::Object>, StateBase* next); |
@@ -384,21 +368,22 @@ private: |
StateBase* startArrayState(v8::Handle<v8::Array>, StateBase* next); |
StateBase* startObjectState(v8::Handle<v8::Object>, StateBase* next); |
- // 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 greyObject(const v8::Handle<v8::Object>&); |
bool appendBlobInfo(const String& uuid, const String& type, unsigned long long size, int* index); |
bool appendFileInfo(const File*, int* index); |
protected: |
+ // 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 greyObject(const v8::Handle<v8::Object>&); |
+ |
StateBase* handleError(Status errorStatus, const String& message, StateBase*); |
- Writer& writer() { return m_writer; } |
+ SerializedScriptValueWriter& writer() { return m_writer; } |
uint32_t nextObjectReference() const { return m_nextObjectReference; } |
private: |
RefPtr<ScriptState> m_scriptState; |
- Writer& m_writer; |
+ SerializedScriptValueWriter& m_writer; |
v8::TryCatch& m_tryCatch; |
int m_depth; |
Status m_status; |
@@ -412,13 +397,13 @@ private: |
BlobDataHandleMap& m_blobDataHandles; |
}; |
-// Interface used by Reader to create objects of composite types. |
-class CompositeCreator { |
+// Interface used by SerializedScriptValueReader to create objects of composite types. |
+class ScriptValueCompositeCreator { |
STACK_ALLOCATED(); |
- WTF_MAKE_NONCOPYABLE(CompositeCreator); |
+ WTF_MAKE_NONCOPYABLE(ScriptValueCompositeCreator); |
public: |
- CompositeCreator() { } |
- virtual ~CompositeCreator() { } |
+ ScriptValueCompositeCreator() { } |
+ virtual ~ScriptValueCompositeCreator() { } |
virtual bool consumeTopOfStack(v8::Handle<v8::Value>*) = 0; |
virtual uint32_t objectReferenceCount() = 0; |
@@ -434,13 +419,13 @@ public: |
virtual bool completeDenseArray(uint32_t numProperties, uint32_t length, v8::Handle<v8::Value>*) = 0; |
}; |
-// Reader is responsible for deserializing primitive types and |
+// SerializedScriptValueReader is responsible for deserializing primitive types and |
// restoring information about saved objects of composite types. |
-class Reader { |
+class SerializedScriptValueReader { |
STACK_ALLOCATED(); |
- WTF_MAKE_NONCOPYABLE(Reader); |
+ WTF_MAKE_NONCOPYABLE(SerializedScriptValueReader); |
public: |
- Reader(const uint8_t* buffer, int length, const WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, ScriptState* scriptState) |
+ SerializedScriptValueReader(const uint8_t* buffer, int length, const WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, ScriptState* scriptState) |
: m_scriptState(scriptState) |
, m_buffer(buffer) |
, m_length(length) |
@@ -470,14 +455,20 @@ protected: |
} |
public: |
- bool read(v8::Handle<v8::Value>*, CompositeCreator&); |
+ virtual bool read(v8::Handle<v8::Value>*, ScriptValueCompositeCreator&); |
bool readVersion(uint32_t& version); |
void setVersion(uint32_t); |
-private: |
+protected: |
+ bool readWithTag(SerializationTag, v8::Handle<v8::Value>*, ScriptValueCompositeCreator&); |
+ |
bool readTag(SerializationTag*); |
bool readWebCoreString(String*); |
bool readUint32(v8::Handle<v8::Value>*); |
+ |
+ bool doReadUint32(uint32_t* value); |
+ |
+private: |
void undoReadTag(); |
bool readArrayBufferViewSubTag(ArrayBufferViewSubTag*); |
bool readString(v8::Handle<v8::Value>*); |
@@ -490,13 +481,11 @@ private: |
bool readImageData(v8::Handle<v8::Value>*); |
PassRefPtr<DOMArrayBuffer> doReadArrayBuffer(); |
bool readArrayBuffer(v8::Handle<v8::Value>*); |
- bool readArrayBufferView(v8::Handle<v8::Value>*, CompositeCreator&); |
+ bool readArrayBufferView(v8::Handle<v8::Value>*, ScriptValueCompositeCreator&); |
bool readRegExp(v8::Handle<v8::Value>*); |
bool readBlob(v8::Handle<v8::Value>*, bool isIndexed); |
- bool readDOMFileSystem(v8::Handle<v8::Value>*); |
bool readFile(v8::Handle<v8::Value>*, bool isIndexed); |
bool readFileList(v8::Handle<v8::Value>*, bool isIndexed); |
- bool readCryptoKey(v8::Handle<v8::Value>*); |
File* readFileHelper(); |
File* readFileIndexHelper(); |
@@ -516,18 +505,9 @@ private: |
return true; |
} |
- bool doReadUint32(uint32_t* value); |
bool doReadUint64(uint64_t* value); |
bool doReadNumber(double* number); |
PassRefPtr<BlobDataHandle> getOrCreateBlobDataHandle(const String& uuid, const String& type, long long size = -1); |
- bool doReadHmacKey(WebCryptoKeyAlgorithm&, WebCryptoKeyType&); |
- bool doReadAesKey(WebCryptoKeyAlgorithm&, WebCryptoKeyType&); |
- bool doReadRsaHashedKey(WebCryptoKeyAlgorithm&, WebCryptoKeyType&); |
- bool doReadEcKey(WebCryptoKeyAlgorithm&, WebCryptoKeyType&); |
- bool doReadAlgorithmId(WebCryptoAlgorithmId&); |
- bool doReadAsymmetricKeyType(WebCryptoKeyType&); |
- bool doReadNamedCurve(WebCryptoNamedCurve&); |
- bool doReadKeyUsages(WebCryptoKeyUsageMask& usages, bool& extractable); |
private: |
RefPtr<ScriptState> m_scriptState; |
@@ -539,11 +519,11 @@ private: |
const BlobDataHandleMap& m_blobDataHandles; |
}; |
-class Deserializer : public CompositeCreator { |
+class ScriptValueDeserializer : public ScriptValueCompositeCreator { |
STACK_ALLOCATED(); |
- WTF_MAKE_NONCOPYABLE(Deserializer); |
+ WTF_MAKE_NONCOPYABLE(ScriptValueDeserializer); |
public: |
- Deserializer(Reader& reader, MessagePortArray* messagePorts, ArrayBufferContentsArray* arrayBufferContents) |
+ ScriptValueDeserializer(SerializedScriptValueReader& reader, MessagePortArray* messagePorts, ArrayBufferContentsArray* arrayBufferContents) |
: m_reader(reader) |
, m_transferredMessagePorts(messagePorts) |
, m_arrayBufferContents(arrayBufferContents) |
@@ -567,8 +547,8 @@ public: |
virtual uint32_t objectReferenceCount() override; |
protected: |
- Reader& reader() { return m_reader; } |
- bool read(v8::Local<v8::Value>*); |
+ SerializedScriptValueReader& reader() { return m_reader; } |
+ virtual bool read(v8::Local<v8::Value>*); |
private: |
bool initializeObject(v8::Handle<v8::Object>, uint32_t numProperties, v8::Handle<v8::Value>*); |
@@ -585,7 +565,7 @@ private: |
void openComposite(const v8::Local<v8::Value>&); |
bool closeComposite(v8::Handle<v8::Value>*); |
- Reader& m_reader; |
+ SerializedScriptValueReader& m_reader; |
Vector<v8::Local<v8::Value> > m_stack; |
Vector<v8::Handle<v8::Value> > m_objectPool; |
Vector<uint32_t> m_openCompositeReferenceStack; |
@@ -595,8 +575,6 @@ private: |
uint32_t m_version; |
}; |
-} // namespace SerializedScriptValueInternal |
- |
} // namespace blink |
#endif // ScriptValueSerializer_h |