Index: third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.h |
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.h b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.h |
index a3e6cc02f64543275468bc473d6bfdd536be534b..781fdc415305d88d2e81917179fa93f9386b1896 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.h |
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.h |
@@ -7,7 +7,9 @@ |
#include "bindings/core/v8/ExceptionState.h" |
#include "bindings/core/v8/ScriptState.h" |
+#include "bindings/core/v8/SerializationTag.h" |
#include "bindings/core/v8/SerializedScriptValue.h" |
+#include "core/CoreExport.h" |
#include "wtf/Allocator.h" |
#include "wtf/Noncopyable.h" |
#include "wtf/RefPtr.h" |
@@ -25,18 +27,34 @@ class Transferables; |
// |
// A serializer cannot be used multiple times; it is expected that its serialize |
// method will be invoked exactly once. |
-class GC_PLUGIN_IGNORE("https://crbug.com/644725") V8ScriptValueSerializer : public v8::ValueSerializer::Delegate { |
+class GC_PLUGIN_IGNORE("https://crbug.com/644725") CORE_EXPORT V8ScriptValueSerializer : public v8::ValueSerializer::Delegate { |
STACK_ALLOCATED(); |
WTF_MAKE_NONCOPYABLE(V8ScriptValueSerializer); |
public: |
explicit V8ScriptValueSerializer(RefPtr<ScriptState>); |
RefPtr<SerializedScriptValue> serialize(v8::Local<v8::Value>, Transferables*, ExceptionState&); |
+protected: |
+ // Returns true if the DOM object was successfully written. |
+ // If false is returned and no more specific exception is thrown, a generic |
+ // DataCloneError message will be used. |
+ virtual bool writeDOMObject(ScriptWrappable*, ExceptionState&); |
+ |
+ void writeTag(SerializationTag tag) |
+ { |
+ uint8_t tagByte = tag; |
+ m_serializer.WriteRawBytes(&tagByte, 1); |
+ } |
+ void writeUint32(uint32_t value) { m_serializer.WriteUint32(value); } |
+ void writeUint64(uint64_t value) { m_serializer.WriteUint64(value); } |
+ void writeRawBytes(const void* data, size_t size) { m_serializer.WriteRawBytes(data, size); } |
+ |
private: |
void transfer(Transferables*, ExceptionState&); |
// v8::ValueSerializer::Delegate |
void ThrowDataCloneError(v8::Local<v8::String> message) override; |
+ v8::Maybe<bool> WriteHostObject(v8::Isolate*, v8::Local<v8::Object> message) override; |
RefPtr<ScriptState> m_scriptState; |
RefPtr<SerializedScriptValue> m_serializedScriptValue; |