Chromium Code Reviews| Index: Source/modules/websockets/WorkerThreadableWebSocketChannel.cpp |
| diff --git a/Source/modules/websockets/WorkerThreadableWebSocketChannel.cpp b/Source/modules/websockets/WorkerThreadableWebSocketChannel.cpp |
| index f66c0f15f6d66acb8b278374a6aceecec3760a6e..a40cad8e9ea472aa6c19e02708421639acb75c55 100644 |
| --- a/Source/modules/websockets/WorkerThreadableWebSocketChannel.cpp |
| +++ b/Source/modules/websockets/WorkerThreadableWebSocketChannel.cpp |
| @@ -232,10 +232,11 @@ void WorkerThreadableWebSocketChannel::resume() |
| void WorkerThreadableWebSocketChannel::trace(Visitor* visitor) |
| { |
| visitor->trace(m_workerGlobalScope); |
| + visitor->trace(m_workerClientWrapper); |
| WebSocketChannel::trace(visitor); |
| } |
| -WorkerThreadableWebSocketChannel::Peer::Peer(PassRefPtr<WeakReference<Peer> > reference, PassRefPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, WorkerLoaderProxy& loaderProxy, ExecutionContext* context, const String& sourceURL, unsigned lineNumber, PassOwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper) |
| +WorkerThreadableWebSocketChannel::Peer::Peer(PassRefPtr<WeakReference<Peer> > reference, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, WorkerLoaderProxy& loaderProxy, ExecutionContext* context, const String& sourceURL, unsigned lineNumber, PassOwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper) |
| : m_workerClientWrapper(clientWrapper) |
| , m_loaderProxy(loaderProxy) |
| , m_mainWebSocketChannel(nullptr) |
| @@ -262,7 +263,7 @@ WorkerThreadableWebSocketChannel::Peer::~Peer() |
| m_mainWebSocketChannel->disconnect(); |
| } |
| -void WorkerThreadableWebSocketChannel::Peer::initialize(ExecutionContext* context, PassRefPtr<WeakReference<Peer> > reference, WorkerLoaderProxy* loaderProxy, PassRefPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, const String& sourceURLAtConnection, unsigned lineNumberAtConnection, PassOwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper) |
| +void WorkerThreadableWebSocketChannel::Peer::initialize(ExecutionContext* context, PassRefPtr<WeakReference<Peer> > reference, WorkerLoaderProxy* loaderProxy, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, const String& sourceURLAtConnection, unsigned lineNumberAtConnection, PassOwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper) |
| { |
| // The caller must call destroy() to free the peer. |
| new Peer(reference, clientWrapper, *loaderProxy, context, sourceURLAtConnection, lineNumberAtConnection, syncHelper); |
| @@ -376,7 +377,7 @@ void WorkerThreadableWebSocketChannel::Peer::resume() |
| m_mainWebSocketChannel->resume(); |
| } |
| -static void workerGlobalScopeDidConnect(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const String& subprotocol, const String& extensions) |
| +static void workerGlobalScopeDidConnect(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const String& subprotocol, const String& extensions) |
| { |
| ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| workerClientWrapper->setSubprotocol(subprotocol); |
| @@ -387,10 +388,10 @@ static void workerGlobalScopeDidConnect(ExecutionContext* context, PassRefPtr<Th |
| void WorkerThreadableWebSocketChannel::Peer::didConnect() |
| { |
| ASSERT(isMainThread()); |
| - m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidConnect, m_workerClientWrapper, m_mainWebSocketChannel->subprotocol(), m_mainWebSocketChannel->extensions())); |
| + m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidConnect, m_workerClientWrapper.get(), m_mainWebSocketChannel->subprotocol(), m_mainWebSocketChannel->extensions())); |
|
haraken
2014/05/07 07:45:16
If we don't want to add .get() here, we need to de
tyoshino (SeeGerritForStatus)
2014/05/07 08:32:52
Is the reason why this works that the task would c
zerny-chromium
2014/05/07 09:50:00
Do you need the .get() calls (here and below) afte
haraken
2014/05/07 11:18:33
I couldn't make it workable (See my comment in Cro
haraken
2014/05/07 11:18:33
This works because the Peer object in the main thr
tyoshino (SeeGerritForStatus)
2014/05/08 06:29:55
FTR: As discussed offline, the PassRefPtr in the t
|
| } |
| -static void workerGlobalScopeDidReceiveMessage(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const String& message) |
| +static void workerGlobalScopeDidReceiveMessage(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const String& message) |
| { |
| ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| workerClientWrapper->didReceiveMessage(message); |
| @@ -399,10 +400,10 @@ static void workerGlobalScopeDidReceiveMessage(ExecutionContext* context, PassRe |
| void WorkerThreadableWebSocketChannel::Peer::didReceiveMessage(const String& message) |
| { |
| ASSERT(isMainThread()); |
| - m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidReceiveMessage, m_workerClientWrapper, message)); |
| + m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidReceiveMessage, m_workerClientWrapper.get(), message)); |
| } |
| -static void workerGlobalScopeDidReceiveBinaryData(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, PassOwnPtr<Vector<char> > binaryData) |
| +static void workerGlobalScopeDidReceiveBinaryData(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, PassOwnPtr<Vector<char> > binaryData) |
| { |
| ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| workerClientWrapper->didReceiveBinaryData(binaryData); |
| @@ -411,10 +412,10 @@ static void workerGlobalScopeDidReceiveBinaryData(ExecutionContext* context, Pas |
| void WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData(PassOwnPtr<Vector<char> > binaryData) |
| { |
| ASSERT(isMainThread()); |
| - m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidReceiveBinaryData, m_workerClientWrapper, binaryData)); |
| + m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidReceiveBinaryData, m_workerClientWrapper.get(), binaryData)); |
| } |
| -static void workerGlobalScopeDidUpdateBufferedAmount(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigned long bufferedAmount) |
| +static void workerGlobalScopeDidUpdateBufferedAmount(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigned long bufferedAmount) |
| { |
| ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| workerClientWrapper->didUpdateBufferedAmount(bufferedAmount); |
| @@ -423,10 +424,10 @@ static void workerGlobalScopeDidUpdateBufferedAmount(ExecutionContext* context, |
| void WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount(unsigned long bufferedAmount) |
| { |
| ASSERT(isMainThread()); |
| - m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidUpdateBufferedAmount, m_workerClientWrapper, bufferedAmount)); |
| + m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidUpdateBufferedAmount, m_workerClientWrapper.get(), bufferedAmount)); |
| } |
| -static void workerGlobalScopeDidStartClosingHandshake(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper) |
| +static void workerGlobalScopeDidStartClosingHandshake(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper) |
| { |
| ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| workerClientWrapper->didStartClosingHandshake(); |
| @@ -435,10 +436,10 @@ static void workerGlobalScopeDidStartClosingHandshake(ExecutionContext* context, |
| void WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake() |
| { |
| ASSERT(isMainThread()); |
| - m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidStartClosingHandshake, m_workerClientWrapper)); |
| + m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidStartClosingHandshake, m_workerClientWrapper.get())); |
| } |
| -static void workerGlobalScopeDidClose(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigned long unhandledBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsigned short code, const String& reason) |
| +static void workerGlobalScopeDidClose(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigned long unhandledBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsigned short code, const String& reason) |
| { |
| ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| workerClientWrapper->didClose(unhandledBufferedAmount, closingHandshakeCompletion, code, reason); |
| @@ -448,10 +449,10 @@ void WorkerThreadableWebSocketChannel::Peer::didClose(unsigned long unhandledBuf |
| { |
| ASSERT(isMainThread()); |
| m_mainWebSocketChannel = nullptr; |
| - m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidClose, m_workerClientWrapper, unhandledBufferedAmount, closingHandshakeCompletion, code, reason)); |
| + m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidClose, m_workerClientWrapper.get(), unhandledBufferedAmount, closingHandshakeCompletion, code, reason)); |
| } |
| -static void workerGlobalScopeDidReceiveMessageError(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper) |
| +static void workerGlobalScopeDidReceiveMessageError(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper) |
| { |
| ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| workerClientWrapper->didReceiveMessageError(); |
| @@ -460,10 +461,10 @@ static void workerGlobalScopeDidReceiveMessageError(ExecutionContext* context, P |
| void WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError() |
| { |
| ASSERT(isMainThread()); |
| - m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidReceiveMessageError, m_workerClientWrapper)); |
| + m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalScopeDidReceiveMessageError, m_workerClientWrapper.get())); |
| } |
| -WorkerThreadableWebSocketChannel::Bridge::Bridge(PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, PassRefPtrWillBeRawPtr<WorkerGlobalScope> workerGlobalScope) |
| +WorkerThreadableWebSocketChannel::Bridge::Bridge(PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, PassRefPtrWillBeRawPtr<WorkerGlobalScope> workerGlobalScope) |
| : m_workerClientWrapper(workerClientWrapper) |
| , m_workerGlobalScope(workerGlobalScope) |
| , m_loaderProxy(m_workerGlobalScope->thread()->workerLoaderProxy()) |
| @@ -487,7 +488,7 @@ void WorkerThreadableWebSocketChannel::Bridge::initialize(const String& sourceUR |
| m_syncHelper = syncHelper.get(); |
| RefPtr<Bridge> protect(this); |
| - m_loaderProxy.postTaskToLoader(createCallbackTask(&Peer::initialize, reference.release(), AllowCrossThreadAccess(&m_loaderProxy), m_workerClientWrapper, sourceURL, lineNumber, syncHelper.release())); |
| + m_loaderProxy.postTaskToLoader(createCallbackTask(&Peer::initialize, reference.release(), AllowCrossThreadAccess(&m_loaderProxy), m_workerClientWrapper.get(), sourceURL, lineNumber, syncHelper.release())); |
| if (!waitForMethodCompletion()) { |
| // The worker thread has been signalled to shutdown before method completion. |
| terminatePeer(); |