SerializedScriptValue.h [plain text]
#ifndef SerializedScriptValue_h
#define SerializedScriptValue_h
#include "ScriptValue.h"
#include <v8.h>
#include <wtf/ArrayBuffer.h>
#include <wtf/Threading.h>
namespace WebCore {
class MessagePort;
typedef Vector<RefPtr<MessagePort>, 1> MessagePortArray;
typedef Vector<RefPtr<WTF::ArrayBuffer>, 1> ArrayBufferArray;
class SerializedScriptValue : public ThreadSafeRefCounted<SerializedScriptValue> {
public:
static PassRefPtr<SerializedScriptValue> create(v8::Handle<v8::Value>,
MessagePortArray*, ArrayBufferArray*,
bool& didThrow, v8::Isolate* = 0);
static PassRefPtr<SerializedScriptValue> create(v8::Handle<v8::Value>, v8::Isolate* = 0);
static PassRefPtr<SerializedScriptValue> createFromWire(const String& data);
static PassRefPtr<SerializedScriptValue> create(const String& data, v8::Isolate* = 0);
static PassRefPtr<SerializedScriptValue> create();
static SerializedScriptValue* nullValue(v8::Isolate* = 0);
static PassRefPtr<SerializedScriptValue> undefinedValue(v8::Isolate* = 0);
static PassRefPtr<SerializedScriptValue> booleanValue(bool value, v8::Isolate* = 0);
static PassRefPtr<SerializedScriptValue> numberValue(double value, v8::Isolate* = 0);
PassRefPtr<SerializedScriptValue> release();
String toWireString() const { return m_data; }
v8::Handle<v8::Value> deserialize(MessagePortArray* = 0, v8::Isolate* = 0);
#if ENABLE(INSPECTOR)
ScriptValue deserializeForInspector(ScriptState*, v8::Isolate* = 0);
#endif
const Vector<String>& blobURLs() const { return m_blobURLs; }
private:
enum StringDataMode {
StringValue,
WireData
};
typedef Vector<WTF::ArrayBufferContents, 1> ArrayBufferContentsArray;
SerializedScriptValue();
SerializedScriptValue(v8::Handle<v8::Value>, MessagePortArray*, ArrayBufferArray*, bool& didThrow, v8::Isolate*);
explicit SerializedScriptValue(const String& wireData);
static PassOwnPtr<ArrayBufferContentsArray> transferArrayBuffers(ArrayBufferArray&, bool& didThrow);
String m_data;
OwnPtr<ArrayBufferContentsArray> m_arrayBufferContentsArray;
Vector<String> m_blobURLs;
};
}
#endif // SerializedScriptValue_h