OLD | NEW |
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 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 doWriteUint32(index); | 363 doWriteUint32(index); |
364 } | 364 } |
365 | 365 |
366 void SerializedScriptValueWriter::writeTransferredOffscreenCanvas( | 366 void SerializedScriptValueWriter::writeTransferredOffscreenCanvas( |
367 uint32_t width, | 367 uint32_t width, |
368 uint32_t height, | 368 uint32_t height, |
369 uint32_t canvasId, | 369 uint32_t canvasId, |
370 uint32_t clientId, | 370 uint32_t clientId, |
371 uint32_t sinkId, | 371 uint32_t sinkId, |
372 uint32_t localId, | 372 uint32_t localId, |
373 uint64_t nonce) { | 373 uint64_t nonceHigh, |
| 374 uint64_t nonceLow) { |
374 append(OffscreenCanvasTransferTag); | 375 append(OffscreenCanvasTransferTag); |
375 doWriteUint32(width); | 376 doWriteUint32(width); |
376 doWriteUint32(height); | 377 doWriteUint32(height); |
377 doWriteUint32(canvasId); | 378 doWriteUint32(canvasId); |
378 doWriteUint32(clientId); | 379 doWriteUint32(clientId); |
379 doWriteUint32(sinkId); | 380 doWriteUint32(sinkId); |
380 doWriteUint32(localId); | 381 doWriteUint32(localId); |
381 doWriteUint64(nonce); | 382 doWriteUint64(nonceHigh); |
| 383 doWriteUint64(nonceLow); |
382 } | 384 } |
383 | 385 |
384 void SerializedScriptValueWriter::writeTransferredSharedArrayBuffer( | 386 void SerializedScriptValueWriter::writeTransferredSharedArrayBuffer( |
385 uint32_t index) { | 387 uint32_t index) { |
386 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); | 388 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); |
387 append(SharedArrayBufferTransferTag); | 389 append(SharedArrayBufferTransferTag); |
388 doWriteUint32(index); | 390 doWriteUint32(index); |
389 } | 391 } |
390 | 392 |
391 void SerializedScriptValueWriter::writeObjectReference(uint32_t reference) { | 393 void SerializedScriptValueWriter::writeObjectReference(uint32_t reference) { |
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1322 Status::DataCloneError, | 1324 Status::DataCloneError, |
1323 "An OffscreenCanvas is detached and could not be cloned.", next); | 1325 "An OffscreenCanvas is detached and could not be cloned.", next); |
1324 if (offscreenCanvas->renderingContext()) | 1326 if (offscreenCanvas->renderingContext()) |
1325 return handleError(Status::DataCloneError, | 1327 return handleError(Status::DataCloneError, |
1326 "An OffscreenCanvas with a context could not be cloned.", | 1328 "An OffscreenCanvas with a context could not be cloned.", |
1327 next); | 1329 next); |
1328 m_writer.writeTransferredOffscreenCanvas( | 1330 m_writer.writeTransferredOffscreenCanvas( |
1329 offscreenCanvas->width(), offscreenCanvas->height(), | 1331 offscreenCanvas->width(), offscreenCanvas->height(), |
1330 offscreenCanvas->getAssociatedCanvasId(), offscreenCanvas->clientId(), | 1332 offscreenCanvas->getAssociatedCanvasId(), offscreenCanvas->clientId(), |
1331 offscreenCanvas->sinkId(), offscreenCanvas->localId(), | 1333 offscreenCanvas->sinkId(), offscreenCanvas->localId(), |
1332 offscreenCanvas->nonce()); | 1334 offscreenCanvas->nonceHigh(), offscreenCanvas->nonceLow()); |
1333 return nullptr; | 1335 return nullptr; |
1334 } | 1336 } |
1335 | 1337 |
1336 ScriptValueSerializer::StateBase* | 1338 ScriptValueSerializer::StateBase* |
1337 ScriptValueSerializer::writeTransferredSharedArrayBuffer( | 1339 ScriptValueSerializer::writeTransferredSharedArrayBuffer( |
1338 v8::Local<v8::Value> value, | 1340 v8::Local<v8::Value> value, |
1339 uint32_t index, | 1341 uint32_t index, |
1340 StateBase* next) { | 1342 StateBase* next) { |
1341 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); | 1343 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); |
1342 DOMSharedArrayBuffer* sharedArrayBuffer = | 1344 DOMSharedArrayBuffer* sharedArrayBuffer = |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1703 if (!doReadUint32(&index)) | 1705 if (!doReadUint32(&index)) |
1704 return false; | 1706 return false; |
1705 if (!deserializer.tryGetTransferredImageBitmap(index, value)) | 1707 if (!deserializer.tryGetTransferredImageBitmap(index, value)) |
1706 return false; | 1708 return false; |
1707 break; | 1709 break; |
1708 } | 1710 } |
1709 case OffscreenCanvasTransferTag: { | 1711 case OffscreenCanvasTransferTag: { |
1710 if (!m_version) | 1712 if (!m_version) |
1711 return false; | 1713 return false; |
1712 uint32_t width, height, canvasId, clientId, sinkId, localId; | 1714 uint32_t width, height, canvasId, clientId, sinkId, localId; |
1713 uint64_t nonce; | 1715 uint64_t nonceHigh, nonceLow; |
1714 if (!doReadUint32(&width)) | 1716 if (!doReadUint32(&width)) |
1715 return false; | 1717 return false; |
1716 if (!doReadUint32(&height)) | 1718 if (!doReadUint32(&height)) |
1717 return false; | 1719 return false; |
1718 if (!doReadUint32(&canvasId)) | 1720 if (!doReadUint32(&canvasId)) |
1719 return false; | 1721 return false; |
1720 if (!doReadUint32(&clientId)) | 1722 if (!doReadUint32(&clientId)) |
1721 return false; | 1723 return false; |
1722 if (!doReadUint32(&sinkId)) | 1724 if (!doReadUint32(&sinkId)) |
1723 return false; | 1725 return false; |
1724 if (!doReadUint32(&localId)) | 1726 if (!doReadUint32(&localId)) |
1725 return false; | 1727 return false; |
1726 if (!doReadUint64(&nonce)) | 1728 if (!doReadUint64(&nonceHigh) || !doReadUint64(&nonceLow)) |
1727 return false; | 1729 return false; |
1728 if (!deserializer.tryGetTransferredOffscreenCanvas( | 1730 if (!deserializer.tryGetTransferredOffscreenCanvas( |
1729 width, height, canvasId, clientId, sinkId, localId, nonce, value)) | 1731 width, height, canvasId, clientId, sinkId, localId, nonceHigh, |
| 1732 nonceLow, value)) |
1730 return false; | 1733 return false; |
1731 break; | 1734 break; |
1732 } | 1735 } |
1733 case SharedArrayBufferTransferTag: { | 1736 case SharedArrayBufferTransferTag: { |
1734 if (!m_version) | 1737 if (!m_version) |
1735 return false; | 1738 return false; |
1736 uint32_t index; | 1739 uint32_t index; |
1737 if (!doReadUint32(&index)) | 1740 if (!doReadUint32(&index)) |
1738 return false; | 1741 return false; |
1739 if (!deserializer.tryGetTransferredSharedArrayBuffer(index, value)) | 1742 if (!deserializer.tryGetTransferredSharedArrayBuffer(index, value)) |
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2586 return true; | 2589 return true; |
2587 } | 2590 } |
2588 | 2591 |
2589 bool ScriptValueDeserializer::tryGetTransferredOffscreenCanvas( | 2592 bool ScriptValueDeserializer::tryGetTransferredOffscreenCanvas( |
2590 uint32_t width, | 2593 uint32_t width, |
2591 uint32_t height, | 2594 uint32_t height, |
2592 uint32_t canvasId, | 2595 uint32_t canvasId, |
2593 uint32_t clientId, | 2596 uint32_t clientId, |
2594 uint32_t sinkId, | 2597 uint32_t sinkId, |
2595 uint32_t localId, | 2598 uint32_t localId, |
2596 uint64_t nonce, | 2599 uint64_t nonceHigh, |
| 2600 uint64_t nonceLow, |
2597 v8::Local<v8::Value>* object) { | 2601 v8::Local<v8::Value>* object) { |
2598 OffscreenCanvas* offscreenCanvas = OffscreenCanvas::create(width, height); | 2602 OffscreenCanvas* offscreenCanvas = OffscreenCanvas::create(width, height); |
2599 offscreenCanvas->setAssociatedCanvasId(canvasId); | 2603 offscreenCanvas->setAssociatedCanvasId(canvasId); |
2600 offscreenCanvas->setSurfaceId(clientId, sinkId, localId, nonce); | 2604 offscreenCanvas->setSurfaceId(clientId, sinkId, localId, nonceHigh, nonceLow); |
2601 *object = toV8(offscreenCanvas, m_reader.getScriptState()); | 2605 *object = toV8(offscreenCanvas, m_reader.getScriptState()); |
2602 if ((*object).IsEmpty()) | 2606 if ((*object).IsEmpty()) |
2603 return false; | 2607 return false; |
2604 return true; | 2608 return true; |
2605 } | 2609 } |
2606 | 2610 |
2607 bool ScriptValueDeserializer::tryGetObjectFromObjectReference( | 2611 bool ScriptValueDeserializer::tryGetObjectFromObjectReference( |
2608 uint32_t reference, | 2612 uint32_t reference, |
2609 v8::Local<v8::Value>* object) { | 2613 v8::Local<v8::Value>* object) { |
2610 if (reference >= m_objectPool.size()) | 2614 if (reference >= m_objectPool.size()) |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2676 m_openCompositeReferenceStack[m_openCompositeReferenceStack.size() - 1]; | 2680 m_openCompositeReferenceStack[m_openCompositeReferenceStack.size() - 1]; |
2677 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() - | 2681 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() - |
2678 1); | 2682 1); |
2679 if (objectReference >= m_objectPool.size()) | 2683 if (objectReference >= m_objectPool.size()) |
2680 return false; | 2684 return false; |
2681 *object = m_objectPool[objectReference]; | 2685 *object = m_objectPool[objectReference]; |
2682 return true; | 2686 return true; |
2683 } | 2687 } |
2684 | 2688 |
2685 } // namespace blink | 2689 } // namespace blink |
OLD | NEW |