Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.h

Issue 2359363005: Support Blob on the V8-based structured clone path. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698