OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 20 matching lines...) Expand all Loading... |
31 #ifndef SerializedScriptValue_h | 31 #ifndef SerializedScriptValue_h |
32 #define SerializedScriptValue_h | 32 #define SerializedScriptValue_h |
33 | 33 |
34 #include <memory> | 34 #include <memory> |
35 | 35 |
36 #include "bindings/core/v8/NativeValueTraits.h" | 36 #include "bindings/core/v8/NativeValueTraits.h" |
37 #include "bindings/core/v8/ScriptValue.h" | 37 #include "bindings/core/v8/ScriptValue.h" |
38 #include "bindings/core/v8/Transferables.h" | 38 #include "bindings/core/v8/Transferables.h" |
39 #include "core/CoreExport.h" | 39 #include "core/CoreExport.h" |
40 #include "v8/include/v8.h" | 40 #include "v8/include/v8.h" |
| 41 #include "wtf/Allocator.h" |
41 #include "wtf/HashMap.h" | 42 #include "wtf/HashMap.h" |
42 #include "wtf/ThreadSafeRefCounted.h" | 43 #include "wtf/ThreadSafeRefCounted.h" |
43 #include "wtf/allocator/Partitions.h" | 44 #include "wtf/allocator/Partitions.h" |
44 #include "wtf/typed_arrays/ArrayBufferContents.h" | 45 #include "wtf/typed_arrays/ArrayBufferContents.h" |
45 | 46 |
46 namespace blink { | 47 namespace blink { |
47 | 48 |
48 class BlobDataHandle; | 49 class BlobDataHandle; |
49 class Transferables; | 50 class Transferables; |
50 class ExceptionState; | 51 class ExceptionState; |
(...skipping 18 matching lines...) Expand all Loading... |
69 // Version 7: Extended File serialization with user visibility. | 70 // Version 7: Extended File serialization with user visibility. |
70 // Version 8: File.lastModified in milliseconds (seconds-based in earlier | 71 // Version 8: File.lastModified in milliseconds (seconds-based in earlier |
71 // versions.) | 72 // versions.) |
72 // Version 9: Added Map and Set support. | 73 // Version 9: Added Map and Set support. |
73 static const uint32_t wireFormatVersion = 9; | 74 static const uint32_t wireFormatVersion = 9; |
74 | 75 |
75 // VarInt encoding constants. | 76 // VarInt encoding constants. |
76 static const int varIntShift = 7; | 77 static const int varIntShift = 7; |
77 static const int varIntMask = (1 << varIntShift) - 1; | 78 static const int varIntMask = (1 << varIntShift) - 1; |
78 | 79 |
| 80 struct SerializeOptions { |
| 81 STACK_ALLOCATED(); |
| 82 Transferables* transferables = nullptr; |
| 83 WebBlobInfoArray* blobInfo = nullptr; |
| 84 }; |
79 static PassRefPtr<SerializedScriptValue> serialize(v8::Isolate*, | 85 static PassRefPtr<SerializedScriptValue> serialize(v8::Isolate*, |
80 v8::Local<v8::Value>, | 86 v8::Local<v8::Value>, |
81 Transferables*, | 87 const SerializeOptions&, |
82 WebBlobInfoArray*, | |
83 ExceptionState&); | 88 ExceptionState&); |
84 static PassRefPtr<SerializedScriptValue> serializeAndSwallowExceptions( | 89 static PassRefPtr<SerializedScriptValue> serializeAndSwallowExceptions( |
85 v8::Isolate*, | 90 v8::Isolate*, |
86 v8::Local<v8::Value>); | 91 v8::Local<v8::Value>); |
87 | 92 |
88 static PassRefPtr<SerializedScriptValue> create(); | 93 static PassRefPtr<SerializedScriptValue> create(); |
89 static PassRefPtr<SerializedScriptValue> create(const String&); | 94 static PassRefPtr<SerializedScriptValue> create(const String&); |
90 static PassRefPtr<SerializedScriptValue> create(const char* data, | 95 static PassRefPtr<SerializedScriptValue> create(const char* data, |
91 size_t length); | 96 size_t length); |
92 | 97 |
93 ~SerializedScriptValue(); | 98 ~SerializedScriptValue(); |
94 | 99 |
95 static PassRefPtr<SerializedScriptValue> nullValue(); | 100 static PassRefPtr<SerializedScriptValue> nullValue(); |
96 | 101 |
97 String toWireString() const; | 102 String toWireString() const; |
98 void toWireBytes(Vector<char>&) const; | 103 void toWireBytes(Vector<char>&) const; |
99 | 104 |
100 // Deserializes the value (in the current context). Returns a null value in | 105 // Deserializes the value (in the current context). Returns a null value in |
101 // case of failure. | 106 // case of failure. |
102 v8::Local<v8::Value> deserialize(v8::Isolate*, | 107 struct DeserializeOptions { |
103 MessagePortArray* = 0, | 108 STACK_ALLOCATED(); |
104 const WebBlobInfoArray* = 0); | 109 MessagePortArray* messagePorts = nullptr; |
| 110 const WebBlobInfoArray* blobInfo = nullptr; |
| 111 }; |
| 112 v8::Local<v8::Value> deserialize(v8::Isolate* isolate) { |
| 113 return deserialize(isolate, DeserializeOptions()); |
| 114 } |
| 115 v8::Local<v8::Value> deserialize(v8::Isolate*, const DeserializeOptions&); |
105 | 116 |
106 // Helper function which pulls the values out of a JS sequence and into a | 117 // Helper function which pulls the values out of a JS sequence and into a |
107 // MessagePortArray. Also validates the elements per sections 4.1.13 and | 118 // MessagePortArray. Also validates the elements per sections 4.1.13 and |
108 // 4.1.15 of the WebIDL spec and section 8.3.3 of the HTML5 spec and generates | 119 // 4.1.15 of the WebIDL spec and section 8.3.3 of the HTML5 spec and generates |
109 // exceptions as appropriate. | 120 // exceptions as appropriate. |
110 // Returns true if the array was filled, or false if the passed value was not | 121 // Returns true if the array was filled, or false if the passed value was not |
111 // of an appropriate type. | 122 // of an appropriate type. |
112 static bool extractTransferables(v8::Isolate*, | 123 static bool extractTransferables(v8::Isolate*, |
113 v8::Local<v8::Value>, | 124 v8::Local<v8::Value>, |
114 int, | 125 int, |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 bool m_transferablesNeedExternalAllocationRegistration; | 203 bool m_transferablesNeedExternalAllocationRegistration; |
193 }; | 204 }; |
194 | 205 |
195 template <> | 206 template <> |
196 struct NativeValueTraits<SerializedScriptValue> | 207 struct NativeValueTraits<SerializedScriptValue> |
197 : public NativeValueTraitsBase<SerializedScriptValue> { | 208 : public NativeValueTraitsBase<SerializedScriptValue> { |
198 CORE_EXPORT static inline PassRefPtr<SerializedScriptValue> nativeValue( | 209 CORE_EXPORT static inline PassRefPtr<SerializedScriptValue> nativeValue( |
199 v8::Isolate* isolate, | 210 v8::Isolate* isolate, |
200 v8::Local<v8::Value> value, | 211 v8::Local<v8::Value> value, |
201 ExceptionState& exceptionState) { | 212 ExceptionState& exceptionState) { |
202 return SerializedScriptValue::serialize(isolate, value, nullptr, nullptr, | 213 return SerializedScriptValue::serialize( |
203 exceptionState); | 214 isolate, value, SerializedScriptValue::SerializeOptions(), |
| 215 exceptionState); |
204 } | 216 } |
205 }; | 217 }; |
206 | 218 |
207 } // namespace blink | 219 } // namespace blink |
208 | 220 |
209 #endif // SerializedScriptValue_h | 221 #endif // SerializedScriptValue_h |
OLD | NEW |