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 1137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1148 | 1148 |
1149 ScriptValueSerializer::StateBase* ScriptValueSerializer::writeAndGreyArrayBuffer
View(v8::Local<v8::Object> object, StateBase* next) | 1149 ScriptValueSerializer::StateBase* ScriptValueSerializer::writeAndGreyArrayBuffer
View(v8::Local<v8::Object> object, StateBase* next) |
1150 { | 1150 { |
1151 ASSERT(!object.IsEmpty()); | 1151 ASSERT(!object.IsEmpty()); |
1152 DOMArrayBufferView* arrayBufferView = V8ArrayBufferView::toImpl(object); | 1152 DOMArrayBufferView* arrayBufferView = V8ArrayBufferView::toImpl(object); |
1153 if (!arrayBufferView) | 1153 if (!arrayBufferView) |
1154 return nullptr; | 1154 return nullptr; |
1155 if (!arrayBufferView->bufferBase()) | 1155 if (!arrayBufferView->bufferBase()) |
1156 return handleError(Status::DataCloneError, "An ArrayBuffer could not be
cloned.", next); | 1156 return handleError(Status::DataCloneError, "An ArrayBuffer could not be
cloned.", next); |
1157 v8::Local<v8::Value> underlyingBuffer = toV8(arrayBufferView->bufferBase(),
m_scriptState->context()->Global(), isolate()); | 1157 v8::Local<v8::Value> underlyingBuffer = toV8(arrayBufferView->bufferBase(),
m_scriptState->context()->Global(), isolate()); |
1158 if (underlyingBuffer.IsEmpty()) | |
1159 return handleError(Status::DataCloneError, "An ArrayBuffer could not be
cloned.", next); | |
1160 StateBase* stateOut = doSerializeArrayBuffer(underlyingBuffer, next); | 1158 StateBase* stateOut = doSerializeArrayBuffer(underlyingBuffer, next); |
1161 if (stateOut) | 1159 if (stateOut) |
1162 return stateOut; | 1160 return stateOut; |
1163 m_writer.writeArrayBufferView(*arrayBufferView); | 1161 m_writer.writeArrayBufferView(*arrayBufferView); |
1164 // This should be safe: we serialize something that we know to be a wrapper
(see | 1162 // This should be safe: we serialize something that we know to be a wrapper
(see |
1165 // the toV8 call above), so the call to doSerializeArrayBuffer should neithe
r | 1163 // the toV8 call above), so the call to doSerializeArrayBuffer should neithe
r |
1166 // cause the system stack to overflow nor should it have potential to reach | 1164 // cause the system stack to overflow nor should it have potential to reach |
1167 // this ArrayBufferView again. | 1165 // this ArrayBufferView again. |
1168 // | 1166 // |
1169 // We do need to grey the underlying buffer before we grey its view, however
; | 1167 // We do need to grey the underlying buffer before we grey its view, however
; |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1768 return false; | 1766 return false; |
1769 ImageData* imageData = ImageData::create(IntSize(width, height)); | 1767 ImageData* imageData = ImageData::create(IntSize(width, height)); |
1770 DOMUint8ClampedArray* pixelArray = imageData->data(); | 1768 DOMUint8ClampedArray* pixelArray = imageData->data(); |
1771 ASSERT(pixelArray); | 1769 ASSERT(pixelArray); |
1772 ASSERT(pixelArray->length() >= pixelDataLength); | 1770 ASSERT(pixelArray->length() >= pixelDataLength); |
1773 memcpy(pixelArray->data(), m_buffer + m_position, pixelDataLength); | 1771 memcpy(pixelArray->data(), m_buffer + m_position, pixelDataLength); |
1774 m_position += pixelDataLength; | 1772 m_position += pixelDataLength; |
1775 if (!imageData) | 1773 if (!imageData) |
1776 return false; | 1774 return false; |
1777 *value = toV8(imageData, m_scriptState->context()->Global(), isolate()); | 1775 *value = toV8(imageData, m_scriptState->context()->Global(), isolate()); |
1778 return !value->IsEmpty(); | 1776 return true; |
1779 } | 1777 } |
1780 | 1778 |
1781 bool SerializedScriptValueReader::readImageBitmap(v8::Local<v8::Value>* value) | 1779 bool SerializedScriptValueReader::readImageBitmap(v8::Local<v8::Value>* value) |
1782 { | 1780 { |
1783 uint32_t isOriginClean; | 1781 uint32_t isOriginClean; |
1784 if (!doReadUint32(&isOriginClean)) | 1782 if (!doReadUint32(&isOriginClean)) |
1785 return false; | 1783 return false; |
1786 uint32_t isPremultiplied; | 1784 uint32_t isPremultiplied; |
1787 if (!doReadUint32(&isPremultiplied)) | 1785 if (!doReadUint32(&isPremultiplied)) |
1788 return false; | 1786 return false; |
1789 uint32_t width; | 1787 uint32_t width; |
1790 uint32_t height; | 1788 uint32_t height; |
1791 uint32_t pixelDataLength; | 1789 uint32_t pixelDataLength; |
1792 if (!doReadImageDataProperties(&width, &height, &pixelDataLength)) | 1790 if (!doReadImageDataProperties(&width, &height, &pixelDataLength)) |
1793 return false; | 1791 return false; |
1794 std::unique_ptr<uint8_t[]> pixelData = wrapArrayUnique(new uint8_t[pixelData
Length]); | 1792 std::unique_ptr<uint8_t[]> pixelData = wrapArrayUnique(new uint8_t[pixelData
Length]); |
1795 memcpy(pixelData.get(), m_buffer + m_position, pixelDataLength); | 1793 memcpy(pixelData.get(), m_buffer + m_position, pixelDataLength); |
1796 m_position += pixelDataLength; | 1794 m_position += pixelDataLength; |
1797 ImageBitmap* imageBitmap = ImageBitmap::create(std::move(pixelData), width,
height, isPremultiplied, isOriginClean); | 1795 ImageBitmap* imageBitmap = ImageBitmap::create(std::move(pixelData), width,
height, isPremultiplied, isOriginClean); |
1798 if (!imageBitmap) | 1796 if (!imageBitmap) |
1799 return false; | 1797 return false; |
1800 *value = toV8(imageBitmap, m_scriptState->context()->Global(), isolate()); | 1798 *value = toV8(imageBitmap, m_scriptState->context()->Global(), isolate()); |
1801 return !value->IsEmpty(); | 1799 return true; |
1802 } | 1800 } |
1803 | 1801 |
1804 bool SerializedScriptValueReader::readCompositorProxy(v8::Local<v8::Value>* valu
e) | 1802 bool SerializedScriptValueReader::readCompositorProxy(v8::Local<v8::Value>* valu
e) |
1805 { | 1803 { |
1806 uint32_t attributes; | 1804 uint32_t attributes; |
1807 uint64_t element; | 1805 uint64_t element; |
1808 if (!doReadUint64(&element)) | 1806 if (!doReadUint64(&element)) |
1809 return false; | 1807 return false; |
1810 if (!doReadUint32(&attributes)) | 1808 if (!doReadUint32(&attributes)) |
1811 return false; | 1809 return false; |
1812 | 1810 |
1813 CompositorProxy* compositorProxy = CompositorProxy::create(m_scriptState->ge
tExecutionContext(), element, attributes); | 1811 CompositorProxy* compositorProxy = CompositorProxy::create(m_scriptState->ge
tExecutionContext(), element, attributes); |
1814 *value = toV8(compositorProxy, m_scriptState->context()->Global(), isolate()
); | 1812 *value = toV8(compositorProxy, m_scriptState->context()->Global(), isolate()
); |
1815 return !value->IsEmpty(); | 1813 return true; |
1816 } | 1814 } |
1817 | 1815 |
1818 DOMArrayBuffer* SerializedScriptValueReader::doReadArrayBuffer() | 1816 DOMArrayBuffer* SerializedScriptValueReader::doReadArrayBuffer() |
1819 { | 1817 { |
1820 uint32_t byteLength; | 1818 uint32_t byteLength; |
1821 if (!doReadUint32(&byteLength)) | 1819 if (!doReadUint32(&byteLength)) |
1822 return nullptr; | 1820 return nullptr; |
1823 if (m_position + byteLength > m_length) | 1821 if (m_position + byteLength > m_length) |
1824 return nullptr; | 1822 return nullptr; |
1825 const void* bufferStart = m_buffer + m_position; | 1823 const void* bufferStart = m_buffer + m_position; |
1826 m_position += byteLength; | 1824 m_position += byteLength; |
1827 return DOMArrayBuffer::create(bufferStart, byteLength); | 1825 return DOMArrayBuffer::create(bufferStart, byteLength); |
1828 } | 1826 } |
1829 | 1827 |
1830 bool SerializedScriptValueReader::readArrayBuffer(v8::Local<v8::Value>* value) | 1828 bool SerializedScriptValueReader::readArrayBuffer(v8::Local<v8::Value>* value) |
1831 { | 1829 { |
1832 DOMArrayBuffer* arrayBuffer = doReadArrayBuffer(); | 1830 DOMArrayBuffer* arrayBuffer = doReadArrayBuffer(); |
1833 if (!arrayBuffer) | 1831 if (!arrayBuffer) |
1834 return false; | 1832 return false; |
1835 *value = toV8(arrayBuffer, m_scriptState->context()->Global(), isolate()); | 1833 *value = toV8(arrayBuffer, m_scriptState->context()->Global(), isolate()); |
1836 return !value->IsEmpty(); | 1834 return true; |
1837 } | 1835 } |
1838 | 1836 |
1839 bool SerializedScriptValueReader::readArrayBufferView(v8::Local<v8::Value>* valu
e, ScriptValueDeserializer& deserializer) | 1837 bool SerializedScriptValueReader::readArrayBufferView(v8::Local<v8::Value>* valu
e, ScriptValueDeserializer& deserializer) |
1840 { | 1838 { |
1841 ArrayBufferViewSubTag subTag; | 1839 ArrayBufferViewSubTag subTag; |
1842 uint32_t byteOffset; | 1840 uint32_t byteOffset; |
1843 uint32_t byteLength; | 1841 uint32_t byteLength; |
1844 DOMArrayBufferBase* arrayBuffer = nullptr; | 1842 DOMArrayBufferBase* arrayBuffer = nullptr; |
1845 v8::Local<v8::Value> arrayBufferV8Value; | 1843 v8::Local<v8::Value> arrayBufferV8Value; |
1846 if (!readArrayBufferViewSubTag(&subTag)) | 1844 if (!readArrayBufferViewSubTag(&subTag)) |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1934 case FloatArrayTag: | 1932 case FloatArrayTag: |
1935 *value = toV8(DOMFloat32Array::create(arrayBuffer, byteOffset, numElemen
ts), creationContext, isolate()); | 1933 *value = toV8(DOMFloat32Array::create(arrayBuffer, byteOffset, numElemen
ts), creationContext, isolate()); |
1936 break; | 1934 break; |
1937 case DoubleArrayTag: | 1935 case DoubleArrayTag: |
1938 *value = toV8(DOMFloat64Array::create(arrayBuffer, byteOffset, numElemen
ts), creationContext, isolate()); | 1936 *value = toV8(DOMFloat64Array::create(arrayBuffer, byteOffset, numElemen
ts), creationContext, isolate()); |
1939 break; | 1937 break; |
1940 case DataViewTag: | 1938 case DataViewTag: |
1941 *value = toV8(DOMDataView::create(arrayBuffer, byteOffset, byteLength),
creationContext, isolate()); | 1939 *value = toV8(DOMDataView::create(arrayBuffer, byteOffset, byteLength),
creationContext, isolate()); |
1942 break; | 1940 break; |
1943 } | 1941 } |
1944 return !value->IsEmpty(); | 1942 return true; |
1945 } | 1943 } |
1946 | 1944 |
1947 bool SerializedScriptValueReader::readRegExp(v8::Local<v8::Value>* value) | 1945 bool SerializedScriptValueReader::readRegExp(v8::Local<v8::Value>* value) |
1948 { | 1946 { |
1949 v8::Local<v8::Value> pattern; | 1947 v8::Local<v8::Value> pattern; |
1950 if (!readString(&pattern)) | 1948 if (!readString(&pattern)) |
1951 return false; | 1949 return false; |
1952 uint32_t flags; | 1950 uint32_t flags; |
1953 if (!doReadUint32(&flags)) | 1951 if (!doReadUint32(&flags)) |
1954 return false; | 1952 return false; |
(...skipping 24 matching lines...) Expand all Loading... |
1979 ASSERT(!m_blobInfo); | 1977 ASSERT(!m_blobInfo); |
1980 if (!readWebCoreString(&uuid)) | 1978 if (!readWebCoreString(&uuid)) |
1981 return false; | 1979 return false; |
1982 if (!readWebCoreString(&type)) | 1980 if (!readWebCoreString(&type)) |
1983 return false; | 1981 return false; |
1984 if (!doReadUint64(&size)) | 1982 if (!doReadUint64(&size)) |
1985 return false; | 1983 return false; |
1986 blob = Blob::create(getOrCreateBlobDataHandle(uuid, type, size)); | 1984 blob = Blob::create(getOrCreateBlobDataHandle(uuid, type, size)); |
1987 } | 1985 } |
1988 *value = toV8(blob, m_scriptState->context()->Global(), isolate()); | 1986 *value = toV8(blob, m_scriptState->context()->Global(), isolate()); |
1989 return !value->IsEmpty(); | 1987 return true; |
1990 } | 1988 } |
1991 | 1989 |
1992 bool SerializedScriptValueReader::readFile(v8::Local<v8::Value>* value, bool isI
ndexed) | 1990 bool SerializedScriptValueReader::readFile(v8::Local<v8::Value>* value, bool isI
ndexed) |
1993 { | 1991 { |
1994 File* file = nullptr; | 1992 File* file = nullptr; |
1995 if (isIndexed) { | 1993 if (isIndexed) { |
1996 if (m_version < 6) | 1994 if (m_version < 6) |
1997 return false; | 1995 return false; |
1998 file = readFileIndexHelper(); | 1996 file = readFileIndexHelper(); |
1999 } else { | 1997 } else { |
2000 file = readFileHelper(); | 1998 file = readFileHelper(); |
2001 } | 1999 } |
2002 if (!file) | 2000 if (!file) |
2003 return false; | 2001 return false; |
2004 *value = toV8(file, m_scriptState->context()->Global(), isolate()); | 2002 *value = toV8(file, m_scriptState->context()->Global(), isolate()); |
2005 return !value->IsEmpty(); | 2003 return true; |
2006 } | 2004 } |
2007 | 2005 |
2008 bool SerializedScriptValueReader::readFileList(v8::Local<v8::Value>* value, bool
isIndexed) | 2006 bool SerializedScriptValueReader::readFileList(v8::Local<v8::Value>* value, bool
isIndexed) |
2009 { | 2007 { |
2010 if (m_version < 3) | 2008 if (m_version < 3) |
2011 return false; | 2009 return false; |
2012 uint32_t length; | 2010 uint32_t length; |
2013 if (!doReadUint32(&length)) | 2011 if (!doReadUint32(&length)) |
2014 return false; | 2012 return false; |
2015 FileList* fileList = FileList::create(); | 2013 FileList* fileList = FileList::create(); |
2016 for (unsigned i = 0; i < length; ++i) { | 2014 for (unsigned i = 0; i < length; ++i) { |
2017 File* file = nullptr; | 2015 File* file = nullptr; |
2018 if (isIndexed) { | 2016 if (isIndexed) { |
2019 if (m_version < 6) | 2017 if (m_version < 6) |
2020 return false; | 2018 return false; |
2021 file = readFileIndexHelper(); | 2019 file = readFileIndexHelper(); |
2022 } else { | 2020 } else { |
2023 file = readFileHelper(); | 2021 file = readFileHelper(); |
2024 } | 2022 } |
2025 if (!file) | 2023 if (!file) |
2026 return false; | 2024 return false; |
2027 fileList->append(file); | 2025 fileList->append(file); |
2028 } | 2026 } |
2029 *value = toV8(fileList, m_scriptState->context()->Global(), isolate()); | 2027 *value = toV8(fileList, m_scriptState->context()->Global(), isolate()); |
2030 return !value->IsEmpty(); | 2028 return true; |
2031 } | 2029 } |
2032 | 2030 |
2033 File* SerializedScriptValueReader::readFileHelper() | 2031 File* SerializedScriptValueReader::readFileHelper() |
2034 { | 2032 { |
2035 if (m_version < 3) | 2033 if (m_version < 3) |
2036 return nullptr; | 2034 return nullptr; |
2037 ASSERT(!m_blobInfo); | 2035 ASSERT(!m_blobInfo); |
2038 String path; | 2036 String path; |
2039 String name; | 2037 String name; |
2040 String relativePath; | 2038 String relativePath; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2294 } | 2292 } |
2295 | 2293 |
2296 bool ScriptValueDeserializer::tryGetTransferredMessagePort(uint32_t index, v8::L
ocal<v8::Value>* object) | 2294 bool ScriptValueDeserializer::tryGetTransferredMessagePort(uint32_t index, v8::L
ocal<v8::Value>* object) |
2297 { | 2295 { |
2298 if (!m_transferredMessagePorts) | 2296 if (!m_transferredMessagePorts) |
2299 return false; | 2297 return false; |
2300 if (index >= m_transferredMessagePorts->size()) | 2298 if (index >= m_transferredMessagePorts->size()) |
2301 return false; | 2299 return false; |
2302 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->context()
->Global(); | 2300 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->context()
->Global(); |
2303 *object = toV8(m_transferredMessagePorts->at(index).get(), creationContext,
m_reader.getScriptState()->isolate()); | 2301 *object = toV8(m_transferredMessagePorts->at(index).get(), creationContext,
m_reader.getScriptState()->isolate()); |
2304 return !object->IsEmpty(); | 2302 return true; |
2305 } | 2303 } |
2306 | 2304 |
2307 bool ScriptValueDeserializer::tryGetTransferredArrayBuffer(uint32_t index, v8::L
ocal<v8::Value>* object) | 2305 bool ScriptValueDeserializer::tryGetTransferredArrayBuffer(uint32_t index, v8::L
ocal<v8::Value>* object) |
2308 { | 2306 { |
2309 if (!m_arrayBufferContents) | 2307 if (!m_arrayBufferContents) |
2310 return false; | 2308 return false; |
2311 if (index >= m_arrayBuffers.size()) | 2309 if (index >= m_arrayBuffers.size()) |
2312 return false; | 2310 return false; |
2313 v8::Local<v8::Value> result = m_arrayBuffers.at(index); | 2311 v8::Local<v8::Value> result = m_arrayBuffers.at(index); |
2314 if (result.IsEmpty()) { | 2312 if (result.IsEmpty()) { |
2315 DOMArrayBuffer* buffer = DOMArrayBuffer::create(m_arrayBufferContents->a
t(index)); | 2313 DOMArrayBuffer* buffer = DOMArrayBuffer::create(m_arrayBufferContents->a
t(index)); |
2316 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); | 2314 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); |
2317 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->conte
xt()->Global(); | 2315 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->conte
xt()->Global(); |
2318 result = toV8(buffer, creationContext, isolate); | 2316 result = toV8(buffer, creationContext, isolate); |
2319 if (result.IsEmpty()) | |
2320 return false; | |
2321 m_arrayBuffers[index] = result; | 2317 m_arrayBuffers[index] = result; |
2322 } | 2318 } |
2323 *object = result; | 2319 *object = result; |
2324 return true; | 2320 return true; |
2325 } | 2321 } |
2326 | 2322 |
2327 bool ScriptValueDeserializer::tryGetTransferredImageBitmap(uint32_t index, v8::L
ocal<v8::Value>* object) | 2323 bool ScriptValueDeserializer::tryGetTransferredImageBitmap(uint32_t index, v8::L
ocal<v8::Value>* object) |
2328 { | 2324 { |
2329 if (!m_imageBitmapContents) | 2325 if (!m_imageBitmapContents) |
2330 return false; | 2326 return false; |
2331 if (index >= m_imageBitmaps.size()) | 2327 if (index >= m_imageBitmaps.size()) |
2332 return false; | 2328 return false; |
2333 v8::Local<v8::Value> result = m_imageBitmaps.at(index); | 2329 v8::Local<v8::Value> result = m_imageBitmaps.at(index); |
2334 if (result.IsEmpty()) { | 2330 if (result.IsEmpty()) { |
2335 ImageBitmap* bitmap = ImageBitmap::create(m_imageBitmapContents->at(inde
x)); | 2331 ImageBitmap* bitmap = ImageBitmap::create(m_imageBitmapContents->at(inde
x)); |
2336 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); | 2332 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); |
2337 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->conte
xt()->Global(); | 2333 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->conte
xt()->Global(); |
2338 result = toV8(bitmap, creationContext, isolate); | 2334 result = toV8(bitmap, creationContext, isolate); |
2339 if (result.IsEmpty()) | |
2340 return false; | |
2341 m_imageBitmaps[index] = result; | 2335 m_imageBitmaps[index] = result; |
2342 } | 2336 } |
2343 *object = result; | 2337 *object = result; |
2344 return true; | 2338 return true; |
2345 } | 2339 } |
2346 | 2340 |
2347 bool ScriptValueDeserializer::tryGetTransferredSharedArrayBuffer(uint32_t index,
v8::Local<v8::Value>* object) | 2341 bool ScriptValueDeserializer::tryGetTransferredSharedArrayBuffer(uint32_t index,
v8::Local<v8::Value>* object) |
2348 { | 2342 { |
2349 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); | 2343 ASSERT(RuntimeEnabledFeatures::sharedArrayBufferEnabled()); |
2350 if (!m_arrayBufferContents) | 2344 if (!m_arrayBufferContents) |
2351 return false; | 2345 return false; |
2352 if (index >= m_arrayBuffers.size()) | 2346 if (index >= m_arrayBuffers.size()) |
2353 return false; | 2347 return false; |
2354 v8::Local<v8::Value> result = m_arrayBuffers.at(index); | 2348 v8::Local<v8::Value> result = m_arrayBuffers.at(index); |
2355 if (result.IsEmpty()) { | 2349 if (result.IsEmpty()) { |
2356 DOMSharedArrayBuffer* buffer = DOMSharedArrayBuffer::create(m_arrayBuffe
rContents->at(index)); | 2350 DOMSharedArrayBuffer* buffer = DOMSharedArrayBuffer::create(m_arrayBuffe
rContents->at(index)); |
2357 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); | 2351 v8::Isolate* isolate = m_reader.getScriptState()->isolate(); |
2358 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->conte
xt()->Global(); | 2352 v8::Local<v8::Object> creationContext = m_reader.getScriptState()->conte
xt()->Global(); |
2359 result = toV8(buffer, creationContext, isolate); | 2353 result = toV8(buffer, creationContext, isolate); |
2360 if (result.IsEmpty()) | |
2361 return false; | |
2362 m_arrayBuffers[index] = result; | 2354 m_arrayBuffers[index] = result; |
2363 } | 2355 } |
2364 *object = result; | 2356 *object = result; |
2365 return true; | 2357 return true; |
2366 } | 2358 } |
2367 | 2359 |
2368 bool ScriptValueDeserializer::tryGetTransferredOffscreenCanvas(uint32_t index, u
int32_t width, uint32_t height, uint32_t canvasId, uint32_t clientId, uint32_t l
ocalId, uint64_t nonce, v8::Local<v8::Value>* object) | 2360 bool ScriptValueDeserializer::tryGetTransferredOffscreenCanvas(uint32_t index, u
int32_t width, uint32_t height, uint32_t canvasId, uint32_t clientId, uint32_t l
ocalId, uint64_t nonce, v8::Local<v8::Value>* object) |
2369 { | 2361 { |
2370 OffscreenCanvas* offscreenCanvas = OffscreenCanvas::create(width, height); | 2362 OffscreenCanvas* offscreenCanvas = OffscreenCanvas::create(width, height); |
2371 offscreenCanvas->setAssociatedCanvasId(canvasId); | 2363 offscreenCanvas->setAssociatedCanvasId(canvasId); |
2372 offscreenCanvas->setSurfaceId(clientId, localId, nonce); | 2364 offscreenCanvas->setSurfaceId(clientId, localId, nonce); |
2373 *object = toV8(offscreenCanvas, m_reader.getScriptState()); | 2365 *object = toV8(offscreenCanvas, m_reader.getScriptState()); |
2374 if ((*object).IsEmpty()) | |
2375 return false; | |
2376 return true; | 2366 return true; |
2377 } | 2367 } |
2378 | 2368 |
2379 bool ScriptValueDeserializer::tryGetObjectFromObjectReference(uint32_t reference
, v8::Local<v8::Value>* object) | 2369 bool ScriptValueDeserializer::tryGetObjectFromObjectReference(uint32_t reference
, v8::Local<v8::Value>* object) |
2380 { | 2370 { |
2381 if (reference >= m_objectPool.size()) | 2371 if (reference >= m_objectPool.size()) |
2382 return false; | 2372 return false; |
2383 *object = m_objectPool[reference]; | 2373 *object = m_objectPool[reference]; |
2384 return object; | 2374 return object; |
2385 } | 2375 } |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2447 return false; | 2437 return false; |
2448 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe
renceStack.size() - 1]; | 2438 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe
renceStack.size() - 1]; |
2449 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() -
1); | 2439 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() -
1); |
2450 if (objectReference >= m_objectPool.size()) | 2440 if (objectReference >= m_objectPool.size()) |
2451 return false; | 2441 return false; |
2452 *object = m_objectPool[objectReference]; | 2442 *object = m_objectPool[objectReference]; |
2453 return true; | 2443 return true; |
2454 } | 2444 } |
2455 | 2445 |
2456 } // namespace blink | 2446 } // namespace blink |
OLD | NEW |