| 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 11 matching lines...) Expand all Loading... |
| 22 #include "core/dom/DOMTypedArray.h" | 22 #include "core/dom/DOMTypedArray.h" |
| 23 #include "core/fileapi/Blob.h" | 23 #include "core/fileapi/Blob.h" |
| 24 #include "core/fileapi/File.h" | 24 #include "core/fileapi/File.h" |
| 25 #include "core/fileapi/FileList.h" | 25 #include "core/fileapi/FileList.h" |
| 26 #include "platform/RuntimeEnabledFeatures.h" | 26 #include "platform/RuntimeEnabledFeatures.h" |
| 27 #include "public/platform/Platform.h" | 27 #include "public/platform/Platform.h" |
| 28 #include "public/platform/WebBlobInfo.h" | 28 #include "public/platform/WebBlobInfo.h" |
| 29 #include "wtf/DateMath.h" | 29 #include "wtf/DateMath.h" |
| 30 #include "wtf/text/StringHash.h" | 30 #include "wtf/text/StringHash.h" |
| 31 #include "wtf/text/StringUTF8Adaptor.h" | 31 #include "wtf/text/StringUTF8Adaptor.h" |
| 32 #include <memory> |
| 32 | 33 |
| 33 // FIXME: consider crashing in debug mode on deserialization errors | 34 // FIXME: consider crashing in debug mode on deserialization errors |
| 34 // NOTE: be sure to change wireFormatVersion as necessary! | 35 // NOTE: be sure to change wireFormatVersion as necessary! |
| 35 | 36 |
| 36 namespace blink { | 37 namespace blink { |
| 37 | 38 |
| 38 // This code implements the HTML5 Structured Clone algorithm: | 39 // This code implements the HTML5 Structured Clone algorithm: |
| 39 // http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#safe-pa
ssing-of-structured-data | 40 // http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#safe-pa
ssing-of-structured-data |
| 40 | 41 |
| 41 // ZigZag encoding helps VarInt encoding stay small for negative | 42 // ZigZag encoding helps VarInt encoding stay small for negative |
| (...skipping 1057 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1099 if (!imageBitmap) | 1100 if (!imageBitmap) |
| 1100 return nullptr; | 1101 return nullptr; |
| 1101 if (imageBitmap->isNeutered()) | 1102 if (imageBitmap->isNeutered()) |
| 1102 return handleError(DataCloneError, "An ImageBitmap is detached and could
not be cloned.", next); | 1103 return handleError(DataCloneError, "An ImageBitmap is detached and could
not be cloned.", next); |
| 1103 | 1104 |
| 1104 uint32_t index; | 1105 uint32_t index; |
| 1105 if (m_transferredImageBitmaps.tryGet(object, &index)) { | 1106 if (m_transferredImageBitmaps.tryGet(object, &index)) { |
| 1106 m_writer.writeTransferredImageBitmap(index); | 1107 m_writer.writeTransferredImageBitmap(index); |
| 1107 } else { | 1108 } else { |
| 1108 greyObject(object); | 1109 greyObject(object); |
| 1109 OwnPtr<uint8_t[]> pixelData = imageBitmap->copyBitmapData(PremultiplyAlp
ha); | 1110 std::unique_ptr<uint8_t[]> pixelData = imageBitmap->copyBitmapData(Premu
ltiplyAlpha); |
| 1110 m_writer.writeImageBitmap(imageBitmap->width(), imageBitmap->height(), p
ixelData.get(), imageBitmap->width() * imageBitmap->height() * 4); | 1111 m_writer.writeImageBitmap(imageBitmap->width(), imageBitmap->height(), p
ixelData.get(), imageBitmap->width() * imageBitmap->height() * 4); |
| 1111 } | 1112 } |
| 1112 return nullptr; | 1113 return nullptr; |
| 1113 } | 1114 } |
| 1114 | 1115 |
| 1115 void ScriptValueSerializer::writeRegExp(v8::Local<v8::Value> value) | 1116 void ScriptValueSerializer::writeRegExp(v8::Local<v8::Value> value) |
| 1116 { | 1117 { |
| 1117 v8::Local<v8::RegExp> regExp = value.As<v8::RegExp>(); | 1118 v8::Local<v8::RegExp> regExp = value.As<v8::RegExp>(); |
| 1118 m_writer.writeRegExp(regExp->GetSource(), regExp->GetFlags()); | 1119 m_writer.writeRegExp(regExp->GetSource(), regExp->GetFlags()); |
| 1119 } | 1120 } |
| (...skipping 1280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2400 return false; | 2401 return false; |
| 2401 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe
renceStack.size() - 1]; | 2402 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe
renceStack.size() - 1]; |
| 2402 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() -
1); | 2403 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() -
1); |
| 2403 if (objectReference >= m_objectPool.size()) | 2404 if (objectReference >= m_objectPool.size()) |
| 2404 return false; | 2405 return false; |
| 2405 *object = m_objectPool[objectReference]; | 2406 *object = m_objectPool[objectReference]; |
| 2406 return true; | 2407 return true; |
| 2407 } | 2408 } |
| 2408 | 2409 |
| 2409 } // namespace blink | 2410 } // namespace blink |
| OLD | NEW |