| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #ifndef V8ScriptValueDeserializer_h | 5 #ifndef V8ScriptValueDeserializer_h |
| 6 #define V8ScriptValueDeserializer_h | 6 #define V8ScriptValueDeserializer_h |
| 7 | 7 |
| 8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
| 9 #include "bindings/core/v8/SerializationTag.h" | 9 #include "bindings/core/v8/SerializationTag.h" |
| 10 #include "bindings/core/v8/SerializedScriptValue.h" | 10 #include "bindings/core/v8/SerializedScriptValue.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 // | 24 // |
| 25 // A deserializer cannot be used multiple times; it is expected that its | 25 // A deserializer cannot be used multiple times; it is expected that its |
| 26 // deserialize method will be invoked exactly once. | 26 // deserialize method will be invoked exactly once. |
| 27 class GC_PLUGIN_IGNORE("https://crbug.com/644725") CORE_EXPORT V8ScriptValueDese
rializer : public v8::ValueDeserializer::Delegate { | 27 class GC_PLUGIN_IGNORE("https://crbug.com/644725") CORE_EXPORT V8ScriptValueDese
rializer : public v8::ValueDeserializer::Delegate { |
| 28 STACK_ALLOCATED(); | 28 STACK_ALLOCATED(); |
| 29 WTF_MAKE_NONCOPYABLE(V8ScriptValueDeserializer); | 29 WTF_MAKE_NONCOPYABLE(V8ScriptValueDeserializer); |
| 30 public: | 30 public: |
| 31 V8ScriptValueDeserializer(RefPtr<ScriptState>, RefPtr<SerializedScriptValue>
); | 31 V8ScriptValueDeserializer(RefPtr<ScriptState>, RefPtr<SerializedScriptValue>
); |
| 32 | 32 |
| 33 void setTransferredMessagePorts(const MessagePortArray* ports) { m_transferr
edMessagePorts = ports; } | 33 void setTransferredMessagePorts(const MessagePortArray* ports) { m_transferr
edMessagePorts = ports; } |
| 34 void setBlobInfoArray(const WebBlobInfoArray* blobInfoArray) { m_blobInfoArr
ay = blobInfoArray; } |
| 34 | 35 |
| 35 v8::Local<v8::Value> deserialize(); | 36 v8::Local<v8::Value> deserialize(); |
| 36 | 37 |
| 37 protected: | 38 protected: |
| 38 virtual ScriptWrappable* readDOMObject(SerializationTag); | 39 virtual ScriptWrappable* readDOMObject(SerializationTag); |
| 39 | 40 |
| 40 uint32_t version() const { return m_version; } | 41 uint32_t version() const { return m_version; } |
| 41 bool readTag(SerializationTag* tag) | 42 bool readTag(SerializationTag* tag) |
| 42 { | 43 { |
| 43 const void* tagBytes = nullptr; | 44 const void* tagBytes = nullptr; |
| 44 if (!m_deserializer.ReadRawBytes(1, &tagBytes)) | 45 if (!m_deserializer.ReadRawBytes(1, &tagBytes)) |
| 45 return false; | 46 return false; |
| 46 *tag = static_cast<SerializationTag>(*reinterpret_cast<const uint8_t*>(t
agBytes)); | 47 *tag = static_cast<SerializationTag>(*reinterpret_cast<const uint8_t*>(t
agBytes)); |
| 47 return true; | 48 return true; |
| 48 } | 49 } |
| 49 bool readUint32(uint32_t* value) { return m_deserializer.ReadUint32(value);
} | 50 bool readUint32(uint32_t* value) { return m_deserializer.ReadUint32(value);
} |
| 50 bool readUint64(uint64_t* value) { return m_deserializer.ReadUint64(value);
} | 51 bool readUint64(uint64_t* value) { return m_deserializer.ReadUint64(value);
} |
| 51 bool readRawBytes(size_t size, const void** data) { return m_deserializer.Re
adRawBytes(size, data); } | 52 bool readRawBytes(size_t size, const void** data) { return m_deserializer.Re
adRawBytes(size, data); } |
| 52 bool readUTF8String(String* stringOut); | 53 bool readUTF8String(String* stringOut); |
| 53 | 54 |
| 54 private: | 55 private: |
| 55 void transfer(); | 56 void transfer(); |
| 56 | 57 |
| 58 RefPtr<BlobDataHandle> getOrCreateBlobDataHandle(const String& uuid, const S
tring& type, uint64_t size); |
| 59 |
| 57 // v8::ValueDeserializer::Delegate | 60 // v8::ValueDeserializer::Delegate |
| 58 v8::MaybeLocal<v8::Object> ReadHostObject(v8::Isolate*) override; | 61 v8::MaybeLocal<v8::Object> ReadHostObject(v8::Isolate*) override; |
| 59 | 62 |
| 60 RefPtr<ScriptState> m_scriptState; | 63 RefPtr<ScriptState> m_scriptState; |
| 61 RefPtr<SerializedScriptValue> m_serializedScriptValue; | 64 RefPtr<SerializedScriptValue> m_serializedScriptValue; |
| 62 v8::ValueDeserializer m_deserializer; | 65 v8::ValueDeserializer m_deserializer; |
| 63 | 66 |
| 64 // Message ports which were transferred in. | 67 // Message ports which were transferred in. |
| 65 const MessagePortArray* m_transferredMessagePorts = nullptr; | 68 const MessagePortArray* m_transferredMessagePorts = nullptr; |
| 66 | 69 |
| 67 // ImageBitmaps which were transferred in. | 70 // ImageBitmaps which were transferred in. |
| 68 HeapVector<Member<ImageBitmap>> m_transferredImageBitmaps; | 71 HeapVector<Member<ImageBitmap>> m_transferredImageBitmaps; |
| 69 | 72 |
| 73 // Blob info for blobs stored by index. |
| 74 const WebBlobInfoArray* m_blobInfoArray = nullptr; |
| 75 |
| 70 // Set during deserialize after the header is read. | 76 // Set during deserialize after the header is read. |
| 71 uint32_t m_version = 0; | 77 uint32_t m_version = 0; |
| 72 #if DCHECK_IS_ON() | 78 #if DCHECK_IS_ON() |
| 73 bool m_deserializeInvoked = false; | 79 bool m_deserializeInvoked = false; |
| 74 #endif | 80 #endif |
| 75 }; | 81 }; |
| 76 | 82 |
| 77 } // namespace blink | 83 } // namespace blink |
| 78 | 84 |
| 79 #endif // V8ScriptValueDeserializer_h | 85 #endif // V8ScriptValueDeserializer_h |
| OLD | NEW |