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

Unified Diff: third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp

Issue 2361253002: Support OffscreenCanvas transfer with V8-based structured clone. (Closed)
Patch Set: Merge branch 'master' into vs-offscreen-canvas Created 4 years, 3 months 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
Index: third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
index fb08af290b9e6f3a860d6b503817ef513b0f14a7..69c43d317d23032577e30afc5c4b68578450c20c 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
@@ -8,6 +8,7 @@
#include "bindings/core/v8/V8ImageBitmap.h"
#include "bindings/core/v8/V8ImageData.h"
#include "bindings/core/v8/V8MessagePort.h"
+#include "bindings/core/v8/V8OffscreenCanvas.h"
#include "core/dom/DOMArrayBufferBase.h"
#include "core/html/ImageData.h"
#include "platform/RuntimeEnabledFeatures.h"
@@ -103,6 +104,10 @@ void V8ScriptValueSerializer::finalizeTransfer(ExceptionState& exceptionState)
m_serializedScriptValue->transferImageBitmaps(isolate, m_transferables->imageBitmaps, exceptionState);
if (exceptionState.hadException())
return;
+
+ m_serializedScriptValue->transferOffscreenCanvas(isolate, m_transferables->offscreenCanvases, exceptionState);
+ if (exceptionState.hadException())
+ return;
}
void V8ScriptValueSerializer::writeUTF8String(const String& string)
@@ -176,6 +181,32 @@ bool V8ScriptValueSerializer::writeDOMObject(ScriptWrappable* wrappable, Excepti
writeUint32(static_cast<uint32_t>(index));
return true;
}
+ if (wrapperTypeInfo == &V8OffscreenCanvas::wrapperTypeInfo) {
+ OffscreenCanvas* canvas = wrappable->toImpl<OffscreenCanvas>();
+ size_t index = kNotFound;
+ if (m_transferables)
+ index = m_transferables->offscreenCanvases.find(canvas);
+ if (index == kNotFound) {
+ exceptionState.throwDOMException(DataCloneError, "An OffscreenCanvas could not be cloned because it was not transferred.");
+ return false;
+ }
+ if (canvas->isNeutered()) {
+ exceptionState.throwDOMException(DataCloneError, "An OffscreenCanvas could not be cloned because it was detached.");
+ return false;
+ }
+ if (canvas->renderingContext()) {
+ exceptionState.throwDOMException(DataCloneError, "An OffscreenCanvas could not be cloned because it had a rendering context.");
+ return false;
+ }
+ writeTag(OffscreenCanvasTransferTag);
+ writeUint32(canvas->width());
+ writeUint32(canvas->height());
+ writeUint32(canvas->getAssociatedCanvasId());
+ writeUint32(canvas->clientId());
+ writeUint32(canvas->localId());
+ writeUint64(canvas->nonce());
+ return true;
+ }
return false;
}

Powered by Google App Engine
This is Rietveld 408576698