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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp

Issue 2584643002: Revamp OffscreenCanvas commit flow (Closed)
Patch Set: rebase and fix conflict Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "bindings/core/v8/ScriptValueSerializer.h" 5 #include "bindings/core/v8/ScriptValueSerializer.h"
6 6
7 #include "bindings/core/v8/Transferables.h" 7 #include "bindings/core/v8/Transferables.h"
8 #include "bindings/core/v8/V8ArrayBuffer.h" 8 #include "bindings/core/v8/V8ArrayBuffer.h"
9 #include "bindings/core/v8/V8ArrayBufferView.h" 9 #include "bindings/core/v8/V8ArrayBufferView.h"
10 #include "bindings/core/v8/V8Blob.h" 10 #include "bindings/core/v8/V8Blob.h"
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 void SerializedScriptValueWriter::writeTransferredImageBitmap(uint32_t index) { 360 void SerializedScriptValueWriter::writeTransferredImageBitmap(uint32_t index) {
361 append(ImageBitmapTransferTag); 361 append(ImageBitmapTransferTag);
362 doWriteUint32(index); 362 doWriteUint32(index);
363 } 363 }
364 364
365 void SerializedScriptValueWriter::writeTransferredOffscreenCanvas( 365 void SerializedScriptValueWriter::writeTransferredOffscreenCanvas(
366 uint32_t width, 366 uint32_t width,
367 uint32_t height, 367 uint32_t height,
368 uint32_t canvasId, 368 uint32_t canvasId,
369 uint32_t clientId, 369 uint32_t clientId,
370 uint32_t sinkId, 370 uint32_t sinkId) {
371 uint32_t localId,
372 uint64_t nonceHigh,
373 uint64_t nonceLow) {
374 append(OffscreenCanvasTransferTag); 371 append(OffscreenCanvasTransferTag);
375 doWriteUint32(width); 372 doWriteUint32(width);
376 doWriteUint32(height); 373 doWriteUint32(height);
377 doWriteUint32(canvasId); 374 doWriteUint32(canvasId);
378 doWriteUint32(clientId); 375 doWriteUint32(clientId);
379 doWriteUint32(sinkId); 376 doWriteUint32(sinkId);
380 doWriteUint32(localId);
381 doWriteUint64(nonceHigh);
382 doWriteUint64(nonceLow);
383 } 377 }
384 378
385 void SerializedScriptValueWriter::writeTransferredSharedArrayBuffer( 379 void SerializedScriptValueWriter::writeTransferredSharedArrayBuffer(
386 uint32_t index) { 380 uint32_t index) {
387 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); 381 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled());
388 append(SharedArrayBufferTransferTag); 382 append(SharedArrayBufferTransferTag);
389 doWriteUint32(index); 383 doWriteUint32(index);
390 } 384 }
391 385
392 void SerializedScriptValueWriter::writeObjectReference(uint32_t reference) { 386 void SerializedScriptValueWriter::writeObjectReference(uint32_t reference) {
(...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 return handleError( 1289 return handleError(
1296 Status::DataCloneError, 1290 Status::DataCloneError,
1297 "An OffscreenCanvas is detached and could not be cloned.", next); 1291 "An OffscreenCanvas is detached and could not be cloned.", next);
1298 if (offscreenCanvas->renderingContext()) 1292 if (offscreenCanvas->renderingContext())
1299 return handleError(Status::DataCloneError, 1293 return handleError(Status::DataCloneError,
1300 "An OffscreenCanvas with a context could not be cloned.", 1294 "An OffscreenCanvas with a context could not be cloned.",
1301 next); 1295 next);
1302 m_writer.writeTransferredOffscreenCanvas( 1296 m_writer.writeTransferredOffscreenCanvas(
1303 offscreenCanvas->width(), offscreenCanvas->height(), 1297 offscreenCanvas->width(), offscreenCanvas->height(),
1304 offscreenCanvas->placeholderCanvasId(), offscreenCanvas->clientId(), 1298 offscreenCanvas->placeholderCanvasId(), offscreenCanvas->clientId(),
1305 offscreenCanvas->sinkId(), offscreenCanvas->localId(), 1299 offscreenCanvas->sinkId());
1306 offscreenCanvas->nonceHigh(), offscreenCanvas->nonceLow());
1307 return nullptr; 1300 return nullptr;
1308 } 1301 }
1309 1302
1310 ScriptValueSerializer::StateBase* 1303 ScriptValueSerializer::StateBase*
1311 ScriptValueSerializer::writeTransferredSharedArrayBuffer( 1304 ScriptValueSerializer::writeTransferredSharedArrayBuffer(
1312 v8::Local<v8::Value> value, 1305 v8::Local<v8::Value> value,
1313 uint32_t index, 1306 uint32_t index,
1314 StateBase* next) { 1307 StateBase* next) {
1315 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); 1308 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled());
1316 DOMSharedArrayBuffer* sharedArrayBuffer = 1309 DOMSharedArrayBuffer* sharedArrayBuffer =
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 uint32_t index; 1669 uint32_t index;
1677 if (!doReadUint32(&index)) 1670 if (!doReadUint32(&index))
1678 return false; 1671 return false;
1679 if (!deserializer.tryGetTransferredImageBitmap(index, value)) 1672 if (!deserializer.tryGetTransferredImageBitmap(index, value))
1680 return false; 1673 return false;
1681 break; 1674 break;
1682 } 1675 }
1683 case OffscreenCanvasTransferTag: { 1676 case OffscreenCanvasTransferTag: {
1684 if (!m_version) 1677 if (!m_version)
1685 return false; 1678 return false;
1686 uint32_t width, height, canvasId, clientId, sinkId, localId; 1679 uint32_t width, height, canvasId, clientId, sinkId;
1687 uint64_t nonceHigh, nonceLow;
1688 if (!doReadUint32(&width)) 1680 if (!doReadUint32(&width))
1689 return false; 1681 return false;
1690 if (!doReadUint32(&height)) 1682 if (!doReadUint32(&height))
1691 return false; 1683 return false;
1692 if (!doReadUint32(&canvasId)) 1684 if (!doReadUint32(&canvasId))
1693 return false; 1685 return false;
1694 if (!doReadUint32(&clientId)) 1686 if (!doReadUint32(&clientId))
1695 return false; 1687 return false;
1696 if (!doReadUint32(&sinkId)) 1688 if (!doReadUint32(&sinkId))
1697 return false; 1689 return false;
1698 if (!doReadUint32(&localId))
1699 return false;
1700 if (!doReadUint64(&nonceHigh) || !doReadUint64(&nonceLow))
1701 return false;
1702 if (!deserializer.tryGetTransferredOffscreenCanvas( 1690 if (!deserializer.tryGetTransferredOffscreenCanvas(
1703 width, height, canvasId, clientId, sinkId, localId, nonceHigh, 1691 width, height, canvasId, clientId, sinkId, value))
1704 nonceLow, value))
1705 return false; 1692 return false;
1706 break; 1693 break;
1707 } 1694 }
1708 case SharedArrayBufferTransferTag: { 1695 case SharedArrayBufferTransferTag: {
1709 if (!m_version) 1696 if (!m_version)
1710 return false; 1697 return false;
1711 uint32_t index; 1698 uint32_t index;
1712 if (!doReadUint32(&index)) 1699 if (!doReadUint32(&index))
1713 return false; 1700 return false;
1714 if (!deserializer.tryGetTransferredSharedArrayBuffer(index, value)) 1701 if (!deserializer.tryGetTransferredSharedArrayBuffer(index, value))
(...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after
2560 *object = result; 2547 *object = result;
2561 return true; 2548 return true;
2562 } 2549 }
2563 2550
2564 bool ScriptValueDeserializer::tryGetTransferredOffscreenCanvas( 2551 bool ScriptValueDeserializer::tryGetTransferredOffscreenCanvas(
2565 uint32_t width, 2552 uint32_t width,
2566 uint32_t height, 2553 uint32_t height,
2567 uint32_t canvasId, 2554 uint32_t canvasId,
2568 uint32_t clientId, 2555 uint32_t clientId,
2569 uint32_t sinkId, 2556 uint32_t sinkId,
2570 uint32_t localId,
2571 uint64_t nonceHigh,
2572 uint64_t nonceLow,
2573 v8::Local<v8::Value>* object) { 2557 v8::Local<v8::Value>* object) {
2574 OffscreenCanvas* offscreenCanvas = OffscreenCanvas::create(width, height); 2558 OffscreenCanvas* offscreenCanvas = OffscreenCanvas::create(width, height);
2575 offscreenCanvas->setPlaceholderCanvasId(canvasId); 2559 offscreenCanvas->setPlaceholderCanvasId(canvasId);
2576 offscreenCanvas->setSurfaceId(clientId, sinkId, localId, nonceHigh, nonceLow); 2560 offscreenCanvas->setFrameSinkId(clientId, sinkId);
2577 *object = toV8(offscreenCanvas, m_reader.getScriptState()); 2561 *object = toV8(offscreenCanvas, m_reader.getScriptState());
2578 if ((*object).IsEmpty()) 2562 if ((*object).IsEmpty())
2579 return false; 2563 return false;
2580 return true; 2564 return true;
2581 } 2565 }
2582 2566
2583 bool ScriptValueDeserializer::tryGetObjectFromObjectReference( 2567 bool ScriptValueDeserializer::tryGetObjectFromObjectReference(
2584 uint32_t reference, 2568 uint32_t reference,
2585 v8::Local<v8::Value>* object) { 2569 v8::Local<v8::Value>* object) {
2586 if (reference >= m_objectPool.size()) 2570 if (reference >= m_objectPool.size())
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2652 m_openCompositeReferenceStack[m_openCompositeReferenceStack.size() - 1]; 2636 m_openCompositeReferenceStack[m_openCompositeReferenceStack.size() - 1];
2653 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() - 2637 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() -
2654 1); 2638 1);
2655 if (objectReference >= m_objectPool.size()) 2639 if (objectReference >= m_objectPool.size())
2656 return false; 2640 return false;
2657 *object = m_objectPool[objectReference]; 2641 *object = m_objectPool[objectReference];
2658 return true; 2642 return true;
2659 } 2643 }
2660 2644
2661 } // namespace blink 2645 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698