Index: third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h |
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h |
deleted file mode 100644 |
index c3d560af4c9ea207f330b55c230ae529463281fa..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h |
+++ /dev/null |
@@ -1,243 +0,0 @@ |
-/* |
- * Copyright (C) 2009, 2010 Google Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions are |
- * met: |
- * |
- * * Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * * Redistributions in binary form must reproduce the above |
- * copyright notice, this list of conditions and the following disclaimer |
- * in the documentation and/or other materials provided with the |
- * distribution. |
- * * Neither the name of Google Inc. nor the names of its |
- * contributors may be used to endorse or promote products derived from |
- * this software without specific prior written permission. |
- * |
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#ifndef SerializedScriptValue_h |
-#define SerializedScriptValue_h |
- |
-#include <memory> |
- |
-#include "bindings/core/v8/NativeValueTraits.h" |
-#include "bindings/core/v8/ScriptValue.h" |
-#include "bindings/core/v8/Transferables.h" |
-#include "core/CoreExport.h" |
-#include "platform/wtf/Allocator.h" |
-#include "platform/wtf/HashMap.h" |
-#include "platform/wtf/ThreadSafeRefCounted.h" |
-#include "platform/wtf/allocator/Partitions.h" |
-#include "platform/wtf/typed_arrays/ArrayBufferContents.h" |
-#include "v8/include/v8.h" |
- |
-namespace blink { |
- |
-class BlobDataHandle; |
-class Transferables; |
-class ExceptionState; |
-class StaticBitmapImage; |
-class WebBlobInfo; |
- |
-typedef HashMap<String, RefPtr<BlobDataHandle>> BlobDataHandleMap; |
-typedef Vector<WebBlobInfo> WebBlobInfoArray; |
- |
-class CORE_EXPORT SerializedScriptValue |
- : public ThreadSafeRefCounted<SerializedScriptValue> { |
- public: |
- using ArrayBufferContentsArray = Vector<WTF::ArrayBufferContents, 1>; |
- using ImageBitmapContentsArray = Vector<RefPtr<StaticBitmapImage>, 1>; |
- using TransferredWasmModulesArray = |
- WTF::Vector<v8::WasmCompiledModule::TransferrableModule>; |
- |
- // Increment this for each incompatible change to the wire format. |
- // Version 2: Added StringUCharTag for UChar v8 strings. |
- // Version 3: Switched to using uuids as blob data identifiers. |
- // Version 4: Extended File serialization to be complete. |
- // Version 5: Added CryptoKeyTag for Key objects. |
- // Version 6: Added indexed serialization for File, Blob, and FileList. |
- // Version 7: Extended File serialization with user visibility. |
- // Version 8: File.lastModified in milliseconds (seconds-based in earlier |
- // versions.) |
- // Version 9: Added Map and Set support. |
- // [versions skipped] |
- // Version 16: Separate versioning between V8 and Blink. |
- // Version 17: Remove unnecessary byte swapping. |
- // |
- // The following versions cannot be used, in order to be able to |
- // deserialize version 0 SSVs. The class implementation has details. |
- // DO NOT USE: 35, 64, 68, 73, 78, 82, 83, 85, 91, 98, 102, 108, 123. |
- // |
- // WARNING: Increasing this value is a change which cannot safely be rolled |
- // back without breaking compatibility with data stored on disk. It is |
- // strongly recommended that you do not make such changes near a release |
- // milestone branch point. |
- // |
- // Recent changes are routinely reverted in preparation for branch, and this |
- // has been the cause of at least one bug in the past. |
- static constexpr uint32_t kWireFormatVersion = 17; |
- |
- struct SerializeOptions { |
- STACK_ALLOCATED(); |
- Transferables* transferables = nullptr; |
- WebBlobInfoArray* blob_info = nullptr; |
- bool write_wasm_to_stream = false; |
- // Set when serializing a value for storage; e.g. when writing to |
- // IndexedDB. |
- bool for_storage = false; |
- }; |
- static PassRefPtr<SerializedScriptValue> Serialize(v8::Isolate*, |
- v8::Local<v8::Value>, |
- const SerializeOptions&, |
- ExceptionState&); |
- static PassRefPtr<SerializedScriptValue> SerializeAndSwallowExceptions( |
- v8::Isolate*, |
- v8::Local<v8::Value>); |
- |
- static PassRefPtr<SerializedScriptValue> Create(); |
- static PassRefPtr<SerializedScriptValue> Create(const String&); |
- static PassRefPtr<SerializedScriptValue> Create(const char* data, |
- size_t length); |
- |
- ~SerializedScriptValue(); |
- |
- static PassRefPtr<SerializedScriptValue> NullValue(); |
- |
- String ToWireString() const; |
- void ToWireBytes(Vector<char>&) const; |
- |
- // Deserializes the value (in the current context). Returns a null value in |
- // case of failure. |
- struct DeserializeOptions { |
- STACK_ALLOCATED(); |
- MessagePortArray* message_ports = nullptr; |
- const WebBlobInfoArray* blob_info = nullptr; |
- bool read_wasm_from_stream = false; |
- }; |
- v8::Local<v8::Value> Deserialize(v8::Isolate* isolate) { |
- return Deserialize(isolate, DeserializeOptions()); |
- } |
- v8::Local<v8::Value> Deserialize(v8::Isolate*, const DeserializeOptions&); |
- |
- // Helper function which pulls the values out of a JS sequence and into a |
- // MessagePortArray. Also validates the elements per sections 4.1.13 and |
- // 4.1.15 of the WebIDL spec and section 8.3.3 of the HTML5 spec and generates |
- // exceptions as appropriate. |
- // Returns true if the array was filled, or false if the passed value was not |
- // of an appropriate type. |
- static bool ExtractTransferables(v8::Isolate*, |
- v8::Local<v8::Value>, |
- int, |
- Transferables&, |
- ExceptionState&); |
- |
- // Helper function which pulls ArrayBufferContents out of an ArrayBufferArray |
- // and neuters the ArrayBufferArray. Returns nullptr if there is an |
- // exception. |
- static std::unique_ptr<ArrayBufferContentsArray> TransferArrayBufferContents( |
- v8::Isolate*, |
- const ArrayBufferArray&, |
- ExceptionState&); |
- |
- static std::unique_ptr<ImageBitmapContentsArray> TransferImageBitmapContents( |
- v8::Isolate*, |
- const ImageBitmapArray&, |
- ExceptionState&); |
- |
- // Informs V8 about external memory allocated and owned by this object. |
- // Large values should contribute to GC counters to eventually trigger a GC, |
- // otherwise flood of postMessage() can cause OOM. |
- // Ok to invoke multiple times (only adds memory once). |
- // The memory registration is revoked automatically in destructor. |
- void RegisterMemoryAllocatedWithCurrentScriptContext(); |
- |
- // The dual, unregistering / subtracting the external memory allocation costs |
- // of this SerializedScriptValue with the current context. This includes |
- // discounting the cost of the transferables. |
- // |
- // The value is updated and marked as having no allocations registered, |
- // hence subsequent calls will be no-ops. |
- void UnregisterMemoryAllocatedWithCurrentScriptContext(); |
- |
- const uint8_t* Data() const { return data_buffer_.get(); } |
- size_t DataLengthInBytes() const { return data_buffer_size_; } |
- |
- BlobDataHandleMap& BlobDataHandles() { return blob_data_handles_; } |
- ArrayBufferContentsArray* GetArrayBufferContentsArray() { |
- return array_buffer_contents_array_.get(); |
- } |
- ImageBitmapContentsArray* GetImageBitmapContentsArray() { |
- return image_bitmap_contents_array_.get(); |
- } |
- |
- TransferredWasmModulesArray& WasmModules() { return wasm_modules_; } |
- |
- private: |
- friend class ScriptValueSerializer; |
- friend class V8ScriptValueSerializer; |
- |
- struct BufferDeleter { |
- void operator()(uint8_t* buffer) { WTF::Partitions::BufferFree(buffer); } |
- }; |
- using DataBufferPtr = std::unique_ptr<uint8_t[], BufferDeleter>; |
- |
- SerializedScriptValue(); |
- explicit SerializedScriptValue(const String& wire_data); |
- |
- void SetData(DataBufferPtr data, size_t size) { |
- data_buffer_ = std::move(data); |
- data_buffer_size_ = size; |
- } |
- |
- void TransferArrayBuffers(v8::Isolate*, |
- const ArrayBufferArray&, |
- ExceptionState&); |
- void TransferImageBitmaps(v8::Isolate*, |
- const ImageBitmapArray&, |
- ExceptionState&); |
- void TransferOffscreenCanvas(v8::Isolate*, |
- const OffscreenCanvasArray&, |
- ExceptionState&); |
- |
- DataBufferPtr data_buffer_; |
- size_t data_buffer_size_ = 0; |
- |
- std::unique_ptr<ArrayBufferContentsArray> array_buffer_contents_array_; |
- std::unique_ptr<ImageBitmapContentsArray> image_bitmap_contents_array_; |
- TransferredWasmModulesArray wasm_modules_; |
- |
- BlobDataHandleMap blob_data_handles_; |
- |
- bool has_registered_external_allocation_; |
- bool transferables_need_external_allocation_registration_; |
-}; |
- |
-template <> |
-struct NativeValueTraits<SerializedScriptValue> |
- : public NativeValueTraitsBase<SerializedScriptValue> { |
- CORE_EXPORT static inline PassRefPtr<SerializedScriptValue> NativeValue( |
- v8::Isolate* isolate, |
- v8::Local<v8::Value> value, |
- ExceptionState& exception_state) { |
- return SerializedScriptValue::Serialize( |
- isolate, value, SerializedScriptValue::SerializeOptions(), |
- exception_state); |
- } |
-}; |
- |
-} // namespace blink |
- |
-#endif // SerializedScriptValue_h |