diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/bindings/js/SerializedScriptValue.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/bindings/js/SerializedScriptValue.h')
-rw-r--r-- | Source/WebCore/bindings/js/SerializedScriptValue.h | 111 |
1 files changed, 40 insertions, 71 deletions
diff --git a/Source/WebCore/bindings/js/SerializedScriptValue.h b/Source/WebCore/bindings/js/SerializedScriptValue.h index 37b31729a..1729011c4 100644 --- a/Source/WebCore/bindings/js/SerializedScriptValue.h +++ b/Source/WebCore/bindings/js/SerializedScriptValue.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009, 2013 Apple Inc. All rights reserved. + * Copyright (C) 2009, 2013, 2016 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,10 +10,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -24,16 +24,14 @@ * */ -#ifndef SerializedScriptValue_h -#define SerializedScriptValue_h +#pragma once -#include "ScriptState.h" -#include <bindings/ScriptValue.h> +#include "ExceptionOr.h" #include <heap/Strong.h> #include <runtime/ArrayBuffer.h> #include <runtime/JSCJSValue.h> #include <wtf/Forward.h> -#include <wtf/PassRefPtr.h> +#include <wtf/Function.h> #include <wtf/RefCounted.h> #include <wtf/text/WTFString.h> @@ -42,96 +40,67 @@ typedef const struct OpaqueJSValue* JSValueRef; namespace WebCore { +class IDBValue; class MessagePort; -typedef Vector<RefPtr<MessagePort>, 1> MessagePortArray; -typedef Vector<RefPtr<JSC::ArrayBuffer>, 1> ArrayBufferArray; - -enum SerializationReturnCode { - SuccessfullyCompleted, - StackOverflowError, - InterruptedExecutionError, - ValidationError, - ExistingExceptionError, - DataCloneError, - UnspecifiedError -}; - -enum SerializationErrorMode { NonThrowing, Throwing }; - class SharedBuffer; +enum class SerializationReturnCode; -class SerializedScriptValue : -#if ENABLE(INDEXED_DATABASE) - public ThreadSafeRefCounted<SerializedScriptValue> { -#else - public RefCounted<SerializedScriptValue> { -#endif +enum class SerializationErrorMode { NonThrowing, Throwing }; +enum class SerializationContext { Default, WorkerPostMessage }; + +using ArrayBufferContentsArray = Vector<JSC::ArrayBufferContents>; + +class SerializedScriptValue : public ThreadSafeRefCounted<SerializedScriptValue> { public: - static PassRefPtr<SerializedScriptValue> create(JSC::ExecState*, JSC::JSValue, MessagePortArray*, ArrayBufferArray*, SerializationErrorMode = Throwing); - static PassRefPtr<SerializedScriptValue> create(JSContextRef, JSValueRef, MessagePortArray*, ArrayBufferArray*, JSValueRef* exception); - static PassRefPtr<SerializedScriptValue> create(JSContextRef, JSValueRef, JSValueRef* exception); + WEBCORE_EXPORT static RefPtr<SerializedScriptValue> create(JSC::ExecState&, JSC::JSValue, SerializationErrorMode = SerializationErrorMode::Throwing); + + WEBCORE_EXPORT static ExceptionOr<Ref<SerializedScriptValue>> create(JSC::ExecState&, JSC::JSValue, Vector<JSC::Strong<JSC::JSObject>>&& transfer, Vector<RefPtr<MessagePort>>&, SerializationContext = SerializationContext::Default); - static PassRefPtr<SerializedScriptValue> create(const String&); - static PassRefPtr<SerializedScriptValue> adopt(Vector<uint8_t>& buffer) + WEBCORE_EXPORT static RefPtr<SerializedScriptValue> create(StringView); + static Ref<SerializedScriptValue> adopt(Vector<uint8_t>&& buffer) { - return adoptRef(new SerializedScriptValue(buffer)); + return adoptRef(*new SerializedScriptValue(WTFMove(buffer))); } - static PassRefPtr<SerializedScriptValue> create(); - static PassRefPtr<SerializedScriptValue> nullValue(); - static PassRefPtr<SerializedScriptValue> undefinedValue(); - static PassRefPtr<SerializedScriptValue> booleanValue(bool value); + static Ref<SerializedScriptValue> nullValue(); - static PassRefPtr<SerializedScriptValue> serialize(const Deprecated::ScriptValue&, JSC::ExecState*, SerializationErrorMode = Throwing); - static PassRefPtr<SerializedScriptValue> serialize(const Deprecated::ScriptValue&, JSC::ExecState*, MessagePortArray*, ArrayBufferArray*, bool&); - static Deprecated::ScriptValue deserialize(JSC::ExecState*, SerializedScriptValue*, SerializationErrorMode = Throwing); + WEBCORE_EXPORT JSC::JSValue deserialize(JSC::ExecState&, JSC::JSGlobalObject*, SerializationErrorMode = SerializationErrorMode::Throwing); + WEBCORE_EXPORT JSC::JSValue deserialize(JSC::ExecState&, JSC::JSGlobalObject*, Vector<RefPtr<MessagePort>>&, SerializationErrorMode = SerializationErrorMode::Throwing); + JSC::JSValue deserialize(JSC::ExecState&, JSC::JSGlobalObject*, Vector<RefPtr<MessagePort>>&, const Vector<String>& blobURLs, const Vector<String>& blobFilePaths, SerializationErrorMode = SerializationErrorMode::Throwing); static uint32_t wireFormatVersion(); String toString(); - - JSC::JSValue deserialize(JSC::ExecState*, JSC::JSGlobalObject*, MessagePortArray*, SerializationErrorMode = Throwing); - JSValueRef deserialize(JSContextRef, JSValueRef* exception, MessagePortArray*); - JSValueRef deserialize(JSContextRef, JSValueRef* exception); -#if ENABLE(INSPECTOR) - Deprecated::ScriptValue deserializeForInspector(JSC::ExecState*); -#endif + // API implementation helpers. These don't expose special behavior for ArrayBuffers or MessagePorts. + WEBCORE_EXPORT static RefPtr<SerializedScriptValue> create(JSContextRef, JSValueRef, JSValueRef* exception); + WEBCORE_EXPORT JSValueRef deserialize(JSContextRef, JSValueRef* exception); const Vector<uint8_t>& data() const { return m_data; } bool hasBlobURLs() const { return !m_blobURLs.isEmpty(); } - void blobURLs(Vector<String>&) const; #if ENABLE(INDEXED_DATABASE) - static PassRefPtr<SerializedScriptValue> create(JSC::ExecState*, JSC::JSValue); - static PassRefPtr<SerializedScriptValue> numberValue(double value); - JSC::JSValue deserialize(JSC::ExecState*, JSC::JSGlobalObject*); -#endif + Vector<String> blobURLsIsolatedCopy() const; + void writeBlobsToDiskForIndexedDB(WTF::Function<void (const IDBValue&)>&& completionHandler); + IDBValue writeBlobsToDiskForIndexedDBSynchronously(); +#endif // ENABLE(INDEXED_DATABASE) - static PassRefPtr<SerializedScriptValue> createFromWireBytes(const Vector<uint8_t>& data) + static Ref<SerializedScriptValue> createFromWireBytes(Vector<uint8_t>&& data) { - return adoptRef(new SerializedScriptValue(data)); + return adoptRef(*new SerializedScriptValue(WTFMove(data))); } const Vector<uint8_t>& toWireBytes() const { return m_data; } - ~SerializedScriptValue(); + WEBCORE_EXPORT ~SerializedScriptValue(); private: - typedef Vector<JSC::ArrayBufferContents> ArrayBufferContentsArray; - static void maybeThrowExceptionIfSerializationFailed(JSC::ExecState*, SerializationReturnCode); - static bool serializationDidCompleteSuccessfully(SerializationReturnCode); - static PassOwnPtr<ArrayBufferContentsArray> transferArrayBuffers(JSC::ExecState*, ArrayBufferArray&, SerializationReturnCode&); - void addBlobURL(const String&); - - SerializedScriptValue(const Vector<unsigned char>&); - SerializedScriptValue(Vector<unsigned char>&); - SerializedScriptValue(Vector<unsigned char>&, Vector<String>& blobURLs); - SerializedScriptValue(Vector<unsigned char>&, Vector<String>& blobURLs, PassOwnPtr<ArrayBufferContentsArray>); + WEBCORE_EXPORT SerializedScriptValue(Vector<unsigned char>&&); + SerializedScriptValue(Vector<unsigned char>&&, const Vector<String>& blobURLs, std::unique_ptr<ArrayBufferContentsArray>, std::unique_ptr<ArrayBufferContentsArray> sharedBuffers); + Vector<unsigned char> m_data; - OwnPtr<ArrayBufferContentsArray> m_arrayBufferContentsArray; - Vector<Vector<uint16_t>> m_blobURLs; + std::unique_ptr<ArrayBufferContentsArray> m_arrayBufferContentsArray; + std::unique_ptr<ArrayBufferContentsArray> m_sharedBufferContentsArray; + Vector<String> m_blobURLs; }; } - -#endif // SerializedScriptValue_h |