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 |