void WorkerThreadableWebSocketChannel::Bridge::initialize(const String& sourceURL, unsigned lineNumber) { RefPtr<WeakReference<Peer> > reference = WeakReference<Peer>::createUnbound(); m_peer = WeakPtr<Peer>(reference); OwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper = ThreadableWebSocketChannelSyncHelper::create(adoptPtr(blink::Platform::current()->createWaitableEvent())); // This pointer is guaranteed to be valid until we call terminatePeer. m_syncHelper = syncHelper.get(); RefPtr<Bridge> protect(this); if (!waitForMethodCompletion(createCallbackTask(&Peer::initialize, reference.release(), AllowCrossThreadAccess(&m_loaderProxy), m_workerClientWrapper.get(), sourceURL, lineNumber, syncHelper.release()))) { // The worker thread has been signalled to shutdown before method completion. terminatePeer(); } }
void WorkerThreadableWebSocketChannel::Bridge::disconnect() { clearClientWrapper(); terminatePeer(); }