summaryrefslogtreecommitdiff
path: root/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h')
-rw-r--r--Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h101
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