Index: Source/bindings/core/v8/ScriptValueSerializer.cpp |
diff --git a/Source/bindings/core/v8/ScriptValueSerializer.cpp b/Source/bindings/core/v8/ScriptValueSerializer.cpp |
index 8bc1ece92d2099001a1ea471191356ce550bb0b4..8436a7a0a49b27dda2210c442d715a933de39a92 100644 |
--- a/Source/bindings/core/v8/ScriptValueSerializer.cpp |
+++ b/Source/bindings/core/v8/ScriptValueSerializer.cpp |
@@ -8,10 +8,12 @@ |
#include "bindings/core/v8/V8ArrayBuffer.h" |
#include "bindings/core/v8/V8ArrayBufferView.h" |
#include "bindings/core/v8/V8Blob.h" |
+#include "bindings/core/v8/V8CompositorProxy.h" |
#include "bindings/core/v8/V8File.h" |
#include "bindings/core/v8/V8FileList.h" |
#include "bindings/core/v8/V8ImageData.h" |
#include "bindings/core/v8/V8MessagePort.h" |
+#include "core/dom/CompositorProxy.h" |
#include "core/dom/DOMDataView.h" |
#include "core/fileapi/Blob.h" |
#include "core/fileapi/File.h" |
@@ -198,6 +200,13 @@ void SerializedScriptValueWriter::writeBlobIndex(int blobIndex) |
doWriteUint32(blobIndex); |
} |
+void SerializedScriptValueWriter::writeCompositorProxy(const CompositorProxy& compositorProxy) |
+{ |
+ append(CompositorProxyTag); |
+ doWriteUint64(compositorProxy.elementId()); |
+ doWriteUint32(compositorProxy.bitfieldsSupported()); |
+} |
+ |
void SerializedScriptValueWriter::writeFile(const File& file) |
{ |
append(FileTag); |
@@ -709,6 +718,8 @@ ScriptValueSerializer::StateBase* ScriptValueSerializer::doSerializeValue(v8::Lo |
writeRegExp(value); |
} else if (V8ArrayBuffer::hasInstance(value, isolate())) { |
return writeArrayBuffer(value, next); |
+ } else if (V8CompositorProxy::hasInstance(value, isolate())) { |
+ return writeCompositorProxy(value, next); |
} else if (value->IsObject()) { |
if (isHostObject(jsObject) || jsObject->IsCallable() || value->IsNativeError()) |
return handleError(DataCloneError, "An object could not be cloned.", next); |
@@ -820,6 +831,15 @@ ScriptValueSerializer::StateBase* ScriptValueSerializer::writeBlob(v8::Local<v8: |
return 0; |
} |
+ScriptValueSerializer::StateBase* ScriptValueSerializer::writeCompositorProxy(v8::Local<v8::Value> value, ScriptValueSerializer::StateBase* next) |
+{ |
+ CompositorProxy* compositorProxy = V8CompositorProxy::toImpl(value.As<v8::Object>()); |
+ if (!compositorProxy) |
+ return nullptr; |
+ m_writer.writeCompositorProxy(*compositorProxy); |
+ return nullptr; |
+} |
+ |
ScriptValueSerializer::StateBase* ScriptValueSerializer::writeFile(v8::Local<v8::Value> value, ScriptValueSerializer::StateBase* next) |
{ |
File* file = V8File::toImpl(value.As<v8::Object>()); |
@@ -1097,6 +1117,12 @@ bool SerializedScriptValueReader::readWithTag(SerializationTag tag, v8::Local<v8 |
return false; |
creator.pushObjectReference(*value); |
break; |
+ case CompositorProxyTag: |
+ if (!readCompositorProxy(value)) |
+ return false; |
+ creator.pushObjectReference(*value); |
+ break; |
+ |
case ImageDataTag: |
if (!readImageData(value)) |
return false; |
@@ -1382,6 +1408,20 @@ bool SerializedScriptValueReader::readImageData(v8::Local<v8::Value>* value) |
return true; |
} |
+bool SerializedScriptValueReader::readCompositorProxy(v8::Local<v8::Value>* value) |
+{ |
+ uint32_t attributes; |
+ uint64_t element; |
+ if (!doReadUint64(&element)) |
+ return false; |
+ if (!doReadUint32(&attributes)) |
+ return false; |
+ |
+ CompositorProxy* compositorProxy = CompositorProxy::create(element, attributes); |
+ *value = toV8(compositorProxy, m_scriptState->context()->Global(), isolate()); |
+ return true; |
+} |
+ |
PassRefPtr<DOMArrayBuffer> SerializedScriptValueReader::doReadArrayBuffer() |
{ |
uint32_t byteLength; |