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/Modules/websockets/WorkerThreadableWebSocketChannel.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h')
-rw-r--r-- | Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h | 101 |
1 files changed, 42 insertions, 59 deletions
diff --git a/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h b/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h index 90b0ea07e..be90d12f1 100644 --- a/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h +++ b/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h @@ -28,8 +28,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef WorkerThreadableWebSocketChannel_h -#define WorkerThreadableWebSocketChannel_h +#pragma once #if ENABLE(WEB_SOCKETS) @@ -37,7 +36,6 @@ #include "WebSocketChannelClient.h" #include "WorkerGlobalScope.h" -#include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> #include <wtf/RefPtr.h> #include <wtf/Threading.h> @@ -55,41 +53,38 @@ class WorkerRunLoop; class WorkerThreadableWebSocketChannel : public RefCounted<WorkerThreadableWebSocketChannel>, public ThreadableWebSocketChannel { WTF_MAKE_FAST_ALLOCATED; public: - static PassRefPtr<ThreadableWebSocketChannel> create(WorkerGlobalScope* workerGlobalScope, WebSocketChannelClient* client, const String& taskMode) + static Ref<ThreadableWebSocketChannel> create(WorkerGlobalScope& workerGlobalScope, WebSocketChannelClient& client, const String& taskMode, SocketProvider& provider) { - return adoptRef(new WorkerThreadableWebSocketChannel(workerGlobalScope, client, taskMode)); + return adoptRef(*new WorkerThreadableWebSocketChannel(workerGlobalScope, client, taskMode, provider)); } virtual ~WorkerThreadableWebSocketChannel(); // ThreadableWebSocketChannel functions. - virtual void connect(const URL&, const String& protocol) override; - virtual String subprotocol() override; - virtual String extensions() override; - virtual ThreadableWebSocketChannel::SendResult send(const String& message) override; - virtual ThreadableWebSocketChannel::SendResult send(const JSC::ArrayBuffer&, unsigned byteOffset, unsigned byteLength) override; - virtual ThreadableWebSocketChannel::SendResult send(const Blob&) override; - virtual unsigned long bufferedAmount() const override; - virtual void close(int code, const String& reason) override; - virtual void fail(const String& reason) override; - virtual void disconnect() override; // Will suppress didClose(). - virtual void suspend() override; - virtual void resume() override; + void connect(const URL&, const String& protocol) override; + String subprotocol() override; + String extensions() override; + ThreadableWebSocketChannel::SendResult send(const String& message) override; + ThreadableWebSocketChannel::SendResult send(const JSC::ArrayBuffer&, unsigned byteOffset, unsigned byteLength) override; + ThreadableWebSocketChannel::SendResult send(Blob&) override; + unsigned bufferedAmount() const override; + void close(int code, const String& reason) override; + void fail(const String& reason) override; + void disconnect() override; // Will suppress didClose(). + void suspend() override; + void resume() override; // Generated by the bridge. The Peer and its bridge should have identical // lifetimes. class Peer : public WebSocketChannelClient { WTF_MAKE_NONCOPYABLE(Peer); WTF_MAKE_FAST_ALLOCATED; public: - static Peer* create(PassRefPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, WorkerLoaderProxy& loaderProxy, ScriptExecutionContext* context, const String& taskMode) - { - return new Peer(clientWrapper, loaderProxy, context, taskMode); - } + Peer(Ref<ThreadableWebSocketChannelClientWrapper>&&, WorkerLoaderProxy&, ScriptExecutionContext&, const String& taskMode, SocketProvider&); ~Peer(); void connect(const URL&, const String& protocol); void send(const String& message); void send(const JSC::ArrayBuffer&); - void send(const Blob&); + void send(Blob&); void bufferedAmount(); void close(int code, const String& reason); void fail(const String& reason); @@ -98,18 +93,17 @@ public: void resume(); // WebSocketChannelClient functions. - virtual void didConnect() override; - virtual void didReceiveMessage(const String& message) override; - virtual void didReceiveBinaryData(PassOwnPtr<Vector<char>>) override; - virtual void didUpdateBufferedAmount(unsigned long bufferedAmount) override; - virtual void didStartClosingHandshake() override; - virtual void didClose(unsigned long unhandledBufferedAmount, ClosingHandshakeCompletionStatus, unsigned short code, const String& reason) override; - virtual void didReceiveMessageError() override; + void didConnect() final; + void didReceiveMessage(const String& message) final; + void didReceiveBinaryData(Vector<uint8_t>&&) final; + void didUpdateBufferedAmount(unsigned bufferedAmount) final; + void didStartClosingHandshake() final; + void didClose(unsigned unhandledBufferedAmount, ClosingHandshakeCompletionStatus, unsigned short code, const String& reason) final; + void didReceiveMessageError() final; + void didUpgradeURL() final; private: - Peer(PassRefPtr<ThreadableWebSocketChannelClientWrapper>, WorkerLoaderProxy&, ScriptExecutionContext*, const String& taskMode); - - RefPtr<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper; + Ref<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper; WorkerLoaderProxy& m_loaderProxy; RefPtr<ThreadableWebSocketChannel> m_mainWebSocketChannel; String m_taskMode; @@ -119,24 +113,24 @@ public: using RefCounted<WorkerThreadableWebSocketChannel>::deref; protected: - virtual void refThreadableWebSocketChannel() { ref(); } - virtual void derefThreadableWebSocketChannel() { deref(); } + void refThreadableWebSocketChannel() override { ref(); } + void derefThreadableWebSocketChannel() override { deref(); } private: // Bridge for Peer. Running on the worker thread. class Bridge : public RefCounted<Bridge> { public: - static PassRefPtr<Bridge> create(PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, PassRefPtr<WorkerGlobalScope> workerGlobalScope, const String& taskMode) + static Ref<Bridge> create(Ref<ThreadableWebSocketChannelClientWrapper>&& workerClientWrapper, Ref<WorkerGlobalScope>&& workerGlobalScope, const String& taskMode, Ref<SocketProvider>&& provider) { - return adoptRef(new Bridge(workerClientWrapper, workerGlobalScope, taskMode)); + return adoptRef(*new Bridge(WTFMove(workerClientWrapper), WTFMove(workerGlobalScope), taskMode, WTFMove(provider))); } ~Bridge(); void initialize(); void connect(const URL&, const String& protocol); ThreadableWebSocketChannel::SendResult send(const String& message); ThreadableWebSocketChannel::SendResult send(const JSC::ArrayBuffer&, unsigned byteOffset, unsigned byteLength); - ThreadableWebSocketChannel::SendResult send(const Blob&); - unsigned long bufferedAmount(); + ThreadableWebSocketChannel::SendResult send(Blob&); + unsigned bufferedAmount(); void close(int code, const String& reason); void fail(const String& reason); void disconnect(); @@ -147,12 +141,12 @@ private: using RefCounted<Bridge>::deref; private: - Bridge(PassRefPtr<ThreadableWebSocketChannelClientWrapper>, PassRefPtr<WorkerGlobalScope>, const String& taskMode); + Bridge(Ref<ThreadableWebSocketChannelClientWrapper>&&, Ref<WorkerGlobalScope>&&, const String& taskMode, Ref<SocketProvider>&&); - static void setWebSocketChannel(ScriptExecutionContext*, Bridge* thisPtr, Peer*, PassRefPtr<ThreadableWebSocketChannelClientWrapper>); + static void setWebSocketChannel(ScriptExecutionContext*, Bridge* thisPtr, Peer*, Ref<ThreadableWebSocketChannelClientWrapper>&&); // Executed on the main thread to create a Peer for this bridge. - static void mainThreadInitialize(ScriptExecutionContext*, WorkerLoaderProxy*, PassRefPtr<ThreadableWebSocketChannelClientWrapper>, const String& taskMode); + static void mainThreadInitialize(ScriptExecutionContext&, WorkerLoaderProxy&, Ref<ThreadableWebSocketChannelClientWrapper>&&, const String& taskMode, Ref<SocketProvider>&&); // Executed on the worker context's thread. void clearClientWrapper(); @@ -160,35 +154,24 @@ private: void setMethodNotCompleted(); void waitForMethodCompletion(); - RefPtr<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper; + Ref<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper; RefPtr<WorkerGlobalScope> m_workerGlobalScope; WorkerLoaderProxy& m_loaderProxy; String m_taskMode; - Peer* m_peer; + Peer* m_peer { nullptr }; + Ref<SocketProvider> m_socketProvider; }; - WorkerThreadableWebSocketChannel(WorkerGlobalScope*, WebSocketChannelClient*, const String& taskMode); - - static void mainThreadConnect(ScriptExecutionContext*, Peer*, const URL&, const String& protocol); - static void mainThreadSend(ScriptExecutionContext*, Peer*, const String& message); - static void mainThreadSendArrayBuffer(ScriptExecutionContext*, Peer*, PassOwnPtr<Vector<char>>); - static void mainThreadSendBlob(ScriptExecutionContext*, Peer*, const URL&, const String& type, long long size); - static void mainThreadBufferedAmount(ScriptExecutionContext*, Peer*); - static void mainThreadClose(ScriptExecutionContext*, Peer*, int code, const String& reason); - static void mainThreadFail(ScriptExecutionContext*, Peer*, const String& reason); - static void mainThreadDestroy(ScriptExecutionContext*, PassOwnPtr<Peer>); - static void mainThreadSuspend(ScriptExecutionContext*, Peer*); - static void mainThreadResume(ScriptExecutionContext*, Peer*); + WEBCORE_EXPORT WorkerThreadableWebSocketChannel(WorkerGlobalScope&, WebSocketChannelClient&, const String& taskMode, SocketProvider&); class WorkerGlobalScopeDidInitializeTask; - RefPtr<WorkerGlobalScope> m_workerGlobalScope; - RefPtr<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper; + Ref<WorkerGlobalScope> m_workerGlobalScope; + Ref<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper; RefPtr<Bridge> m_bridge; + Ref<SocketProvider> m_socketProvider; }; } // namespace WebCore #endif // ENABLE(WEB_SOCKETS) - -#endif // WorkerThreadableWebSocketChannel_h |