Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 225 void WorkerThreadableWebSocketChannel::resume() | 225 void WorkerThreadableWebSocketChannel::resume() |
| 226 { | 226 { |
| 227 m_workerClientWrapper->resume(); | 227 m_workerClientWrapper->resume(); |
| 228 if (m_bridge) | 228 if (m_bridge) |
| 229 m_bridge->resume(); | 229 m_bridge->resume(); |
| 230 } | 230 } |
| 231 | 231 |
| 232 void WorkerThreadableWebSocketChannel::trace(Visitor* visitor) | 232 void WorkerThreadableWebSocketChannel::trace(Visitor* visitor) |
| 233 { | 233 { |
| 234 visitor->trace(m_workerGlobalScope); | 234 visitor->trace(m_workerGlobalScope); |
| 235 visitor->trace(m_workerClientWrapper); | |
| 235 WebSocketChannel::trace(visitor); | 236 WebSocketChannel::trace(visitor); |
| 236 } | 237 } |
| 237 | 238 |
| 238 WorkerThreadableWebSocketChannel::Peer::Peer(PassRefPtr<WeakReference<Peer> > re ference, PassRefPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, Work erLoaderProxy& loaderProxy, ExecutionContext* context, const String& sourceURL, unsigned lineNumber, PassOwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper ) | 239 WorkerThreadableWebSocketChannel::Peer::Peer(PassRefPtr<WeakReference<Peer> > re ference, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> clientW rapper, WorkerLoaderProxy& loaderProxy, ExecutionContext* context, const String& sourceURL, unsigned lineNumber, PassOwnPtr<ThreadableWebSocketChannelSyncHelper > syncHelper) |
| 239 : m_workerClientWrapper(clientWrapper) | 240 : m_workerClientWrapper(clientWrapper) |
| 240 , m_loaderProxy(loaderProxy) | 241 , m_loaderProxy(loaderProxy) |
| 241 , m_mainWebSocketChannel(nullptr) | 242 , m_mainWebSocketChannel(nullptr) |
| 242 , m_syncHelper(syncHelper) | 243 , m_syncHelper(syncHelper) |
| 243 , m_weakFactory(reference, this) | 244 , m_weakFactory(reference, this) |
| 244 { | 245 { |
| 245 ASSERT(isMainThread()); | 246 ASSERT(isMainThread()); |
| 246 ASSERT(m_workerClientWrapper.get()); | 247 ASSERT(m_workerClientWrapper.get()); |
| 247 | 248 |
| 248 Document* document = toDocument(context); | 249 Document* document = toDocument(context); |
| 249 if (RuntimeEnabledFeatures::experimentalWebSocketEnabled()) { | 250 if (RuntimeEnabledFeatures::experimentalWebSocketEnabled()) { |
| 250 m_mainWebSocketChannel = NewWebSocketChannelImpl::create(document, this, sourceURL, lineNumber); | 251 m_mainWebSocketChannel = NewWebSocketChannelImpl::create(document, this, sourceURL, lineNumber); |
| 251 } else { | 252 } else { |
| 252 m_mainWebSocketChannel = MainThreadWebSocketChannel::create(document, th is, sourceURL, lineNumber); | 253 m_mainWebSocketChannel = MainThreadWebSocketChannel::create(document, th is, sourceURL, lineNumber); |
| 253 } | 254 } |
| 254 | 255 |
| 255 m_syncHelper->signalWorkerThread(); | 256 m_syncHelper->signalWorkerThread(); |
| 256 } | 257 } |
| 257 | 258 |
| 258 WorkerThreadableWebSocketChannel::Peer::~Peer() | 259 WorkerThreadableWebSocketChannel::Peer::~Peer() |
| 259 { | 260 { |
| 260 ASSERT(isMainThread()); | 261 ASSERT(isMainThread()); |
| 261 if (m_mainWebSocketChannel) | 262 if (m_mainWebSocketChannel) |
| 262 m_mainWebSocketChannel->disconnect(); | 263 m_mainWebSocketChannel->disconnect(); |
| 263 } | 264 } |
| 264 | 265 |
| 265 void WorkerThreadableWebSocketChannel::Peer::initialize(ExecutionContext* contex t, PassRefPtr<WeakReference<Peer> > reference, WorkerLoaderProxy* loaderProxy, P assRefPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, const String& sourceURLAtConnection, unsigned lineNumberAtConnection, PassOwnPtr<ThreadableWeb SocketChannelSyncHelper> syncHelper) | 266 void WorkerThreadableWebSocketChannel::Peer::initialize(ExecutionContext* contex t, PassRefPtr<WeakReference<Peer> > reference, WorkerLoaderProxy* loaderProxy, P assRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper, co nst String& sourceURLAtConnection, unsigned lineNumberAtConnection, PassOwnPtr<T hreadableWebSocketChannelSyncHelper> syncHelper) |
| 266 { | 267 { |
| 267 // The caller must call destroy() to free the peer. | 268 // The caller must call destroy() to free the peer. |
| 268 new Peer(reference, clientWrapper, *loaderProxy, context, sourceURLAtConnect ion, lineNumberAtConnection, syncHelper); | 269 new Peer(reference, clientWrapper, *loaderProxy, context, sourceURLAtConnect ion, lineNumberAtConnection, syncHelper); |
| 269 } | 270 } |
| 270 | 271 |
| 271 void WorkerThreadableWebSocketChannel::Peer::destroy() | 272 void WorkerThreadableWebSocketChannel::Peer::destroy() |
| 272 { | 273 { |
| 273 ASSERT(isMainThread()); | 274 ASSERT(isMainThread()); |
| 274 delete this; | 275 delete this; |
| 275 } | 276 } |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 369 } | 370 } |
| 370 | 371 |
| 371 void WorkerThreadableWebSocketChannel::Peer::resume() | 372 void WorkerThreadableWebSocketChannel::Peer::resume() |
| 372 { | 373 { |
| 373 ASSERT(isMainThread()); | 374 ASSERT(isMainThread()); |
| 374 if (!m_mainWebSocketChannel) | 375 if (!m_mainWebSocketChannel) |
| 375 return; | 376 return; |
| 376 m_mainWebSocketChannel->resume(); | 377 m_mainWebSocketChannel->resume(); |
| 377 } | 378 } |
| 378 | 379 |
| 379 static void workerGlobalScopeDidConnect(ExecutionContext* context, PassRefPtr<Th readableWebSocketChannelClientWrapper> workerClientWrapper, const String& subpro tocol, const String& extensions) | 380 static void workerGlobalScopeDidConnect(ExecutionContext* context, PassRefPtrWil lBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const St ring& subprotocol, const String& extensions) |
| 380 { | 381 { |
| 381 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); | 382 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| 382 workerClientWrapper->setSubprotocol(subprotocol); | 383 workerClientWrapper->setSubprotocol(subprotocol); |
| 383 workerClientWrapper->setExtensions(extensions); | 384 workerClientWrapper->setExtensions(extensions); |
| 384 workerClientWrapper->didConnect(); | 385 workerClientWrapper->didConnect(); |
| 385 } | 386 } |
| 386 | 387 |
| 387 void WorkerThreadableWebSocketChannel::Peer::didConnect() | 388 void WorkerThreadableWebSocketChannel::Peer::didConnect() |
| 388 { | 389 { |
| 389 ASSERT(isMainThread()); | 390 ASSERT(isMainThread()); |
| 390 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidConnect, m_workerClientWrapper, m_mainWebSocketChannel->subprotocol(), m_m ainWebSocketChannel->extensions())); | 391 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidConnect, 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
| |
| 391 } | 392 } |
| 392 | 393 |
| 393 static void workerGlobalScopeDidReceiveMessage(ExecutionContext* context, PassRe fPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const String& message) | 394 static void workerGlobalScopeDidReceiveMessage(ExecutionContext* context, PassRe fPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, c onst String& message) |
| 394 { | 395 { |
| 395 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); | 396 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| 396 workerClientWrapper->didReceiveMessage(message); | 397 workerClientWrapper->didReceiveMessage(message); |
| 397 } | 398 } |
| 398 | 399 |
| 399 void WorkerThreadableWebSocketChannel::Peer::didReceiveMessage(const String& mes sage) | 400 void WorkerThreadableWebSocketChannel::Peer::didReceiveMessage(const String& mes sage) |
| 400 { | 401 { |
| 401 ASSERT(isMainThread()); | 402 ASSERT(isMainThread()); |
| 402 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveMessage, m_workerClientWrapper, message)); | 403 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveMessage, m_workerClientWrapper.get(), message)); |
| 403 } | 404 } |
| 404 | 405 |
| 405 static void workerGlobalScopeDidReceiveBinaryData(ExecutionContext* context, Pas sRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, PassOwnPtr <Vector<char> > binaryData) | 406 static void workerGlobalScopeDidReceiveBinaryData(ExecutionContext* context, Pas sRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper , PassOwnPtr<Vector<char> > binaryData) |
| 406 { | 407 { |
| 407 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); | 408 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| 408 workerClientWrapper->didReceiveBinaryData(binaryData); | 409 workerClientWrapper->didReceiveBinaryData(binaryData); |
| 409 } | 410 } |
| 410 | 411 |
| 411 void WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData(PassOwnPtr<Vec tor<char> > binaryData) | 412 void WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData(PassOwnPtr<Vec tor<char> > binaryData) |
| 412 { | 413 { |
| 413 ASSERT(isMainThread()); | 414 ASSERT(isMainThread()); |
| 414 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveBinaryData, m_workerClientWrapper, binaryData)); | 415 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveBinaryData, m_workerClientWrapper.get(), binaryData)); |
| 415 } | 416 } |
| 416 | 417 |
| 417 static void workerGlobalScopeDidUpdateBufferedAmount(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigne d long bufferedAmount) | 418 static void workerGlobalScopeDidUpdateBufferedAmount(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrap per, unsigned long bufferedAmount) |
| 418 { | 419 { |
| 419 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); | 420 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| 420 workerClientWrapper->didUpdateBufferedAmount(bufferedAmount); | 421 workerClientWrapper->didUpdateBufferedAmount(bufferedAmount); |
| 421 } | 422 } |
| 422 | 423 |
| 423 void WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount(unsigned lo ng bufferedAmount) | 424 void WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount(unsigned lo ng bufferedAmount) |
| 424 { | 425 { |
| 425 ASSERT(isMainThread()); | 426 ASSERT(isMainThread()); |
| 426 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidUpdateBufferedAmount, m_workerClientWrapper, bufferedAmount)); | 427 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidUpdateBufferedAmount, m_workerClientWrapper.get(), bufferedAmount)); |
| 427 } | 428 } |
| 428 | 429 |
| 429 static void workerGlobalScopeDidStartClosingHandshake(ExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper) | 430 static void workerGlobalScopeDidStartClosingHandshake(ExecutionContext* context, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWra pper) |
| 430 { | 431 { |
| 431 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); | 432 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| 432 workerClientWrapper->didStartClosingHandshake(); | 433 workerClientWrapper->didStartClosingHandshake(); |
| 433 } | 434 } |
| 434 | 435 |
| 435 void WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake() | 436 void WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake() |
| 436 { | 437 { |
| 437 ASSERT(isMainThread()); | 438 ASSERT(isMainThread()); |
| 438 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidStartClosingHandshake, m_workerClientWrapper)); | 439 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidStartClosingHandshake, m_workerClientWrapper.get())); |
| 439 } | 440 } |
| 440 | 441 |
| 441 static void workerGlobalScopeDidClose(ExecutionContext* context, PassRefPtr<Thre adableWebSocketChannelClientWrapper> workerClientWrapper, unsigned long unhandle dBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionStatus closin gHandshakeCompletion, unsigned short code, const String& reason) | 442 static void workerGlobalScopeDidClose(ExecutionContext* context, PassRefPtrWillB eRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigned l ong unhandledBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionS tatus closingHandshakeCompletion, unsigned short code, const String& reason) |
| 442 { | 443 { |
| 443 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); | 444 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| 444 workerClientWrapper->didClose(unhandledBufferedAmount, closingHandshakeCompl etion, code, reason); | 445 workerClientWrapper->didClose(unhandledBufferedAmount, closingHandshakeCompl etion, code, reason); |
| 445 } | 446 } |
| 446 | 447 |
| 447 void WorkerThreadableWebSocketChannel::Peer::didClose(unsigned long unhandledBuf feredAmount, ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsign ed short code, const String& reason) | 448 void WorkerThreadableWebSocketChannel::Peer::didClose(unsigned long unhandledBuf feredAmount, ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsign ed short code, const String& reason) |
| 448 { | 449 { |
| 449 ASSERT(isMainThread()); | 450 ASSERT(isMainThread()); |
| 450 m_mainWebSocketChannel = nullptr; | 451 m_mainWebSocketChannel = nullptr; |
| 451 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidClose, m_workerClientWrapper, unhandledBufferedAmount, closingHandshakeCom pletion, code, reason)); | 452 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidClose, m_workerClientWrapper.get(), unhandledBufferedAmount, closingHandsh akeCompletion, code, reason)); |
| 452 } | 453 } |
| 453 | 454 |
| 454 static void workerGlobalScopeDidReceiveMessageError(ExecutionContext* context, P assRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper) | 455 static void workerGlobalScopeDidReceiveMessageError(ExecutionContext* context, P assRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapp er) |
| 455 { | 456 { |
| 456 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); | 457 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| 457 workerClientWrapper->didReceiveMessageError(); | 458 workerClientWrapper->didReceiveMessageError(); |
| 458 } | 459 } |
| 459 | 460 |
| 460 void WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError() | 461 void WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError() |
| 461 { | 462 { |
| 462 ASSERT(isMainThread()); | 463 ASSERT(isMainThread()); |
| 463 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveMessageError, m_workerClientWrapper)); | 464 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc opeDidReceiveMessageError, m_workerClientWrapper.get())); |
| 464 } | 465 } |
| 465 | 466 |
| 466 WorkerThreadableWebSocketChannel::Bridge::Bridge(PassRefPtr<ThreadableWebSocketC hannelClientWrapper> workerClientWrapper, PassRefPtrWillBeRawPtr<WorkerGlobalSco pe> workerGlobalScope) | 467 WorkerThreadableWebSocketChannel::Bridge::Bridge(PassRefPtrWillBeRawPtr<Threadab leWebSocketChannelClientWrapper> workerClientWrapper, PassRefPtrWillBeRawPtr<Wor kerGlobalScope> workerGlobalScope) |
| 467 : m_workerClientWrapper(workerClientWrapper) | 468 : m_workerClientWrapper(workerClientWrapper) |
| 468 , m_workerGlobalScope(workerGlobalScope) | 469 , m_workerGlobalScope(workerGlobalScope) |
| 469 , m_loaderProxy(m_workerGlobalScope->thread()->workerLoaderProxy()) | 470 , m_loaderProxy(m_workerGlobalScope->thread()->workerLoaderProxy()) |
| 470 , m_syncHelper(0) | 471 , m_syncHelper(0) |
| 471 { | 472 { |
| 472 ASSERT(m_workerClientWrapper.get()); | 473 ASSERT(m_workerClientWrapper.get()); |
| 473 } | 474 } |
| 474 | 475 |
| 475 WorkerThreadableWebSocketChannel::Bridge::~Bridge() | 476 WorkerThreadableWebSocketChannel::Bridge::~Bridge() |
| 476 { | 477 { |
| 477 disconnect(); | 478 disconnect(); |
| 478 } | 479 } |
| 479 | 480 |
| 480 void WorkerThreadableWebSocketChannel::Bridge::initialize(const String& sourceUR L, unsigned lineNumber) | 481 void WorkerThreadableWebSocketChannel::Bridge::initialize(const String& sourceUR L, unsigned lineNumber) |
| 481 { | 482 { |
| 482 RefPtr<WeakReference<Peer> > reference = WeakReference<Peer>::createUnbound( ); | 483 RefPtr<WeakReference<Peer> > reference = WeakReference<Peer>::createUnbound( ); |
| 483 m_peer = WeakPtr<Peer>(reference); | 484 m_peer = WeakPtr<Peer>(reference); |
| 484 | 485 |
| 485 OwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper = ThreadableWebSocke tChannelSyncHelper::create(adoptPtr(blink::Platform::current()->createWaitableEv ent())); | 486 OwnPtr<ThreadableWebSocketChannelSyncHelper> syncHelper = ThreadableWebSocke tChannelSyncHelper::create(adoptPtr(blink::Platform::current()->createWaitableEv ent())); |
| 486 // This pointer is guaranteed to be valid until we call terminatePeer. | 487 // This pointer is guaranteed to be valid until we call terminatePeer. |
| 487 m_syncHelper = syncHelper.get(); | 488 m_syncHelper = syncHelper.get(); |
| 488 | 489 |
| 489 RefPtr<Bridge> protect(this); | 490 RefPtr<Bridge> protect(this); |
| 490 m_loaderProxy.postTaskToLoader(createCallbackTask(&Peer::initialize, referen ce.release(), AllowCrossThreadAccess(&m_loaderProxy), m_workerClientWrapper, sou rceURL, lineNumber, syncHelper.release())); | 491 m_loaderProxy.postTaskToLoader(createCallbackTask(&Peer::initialize, referen ce.release(), AllowCrossThreadAccess(&m_loaderProxy), m_workerClientWrapper.get( ), sourceURL, lineNumber, syncHelper.release())); |
| 491 if (!waitForMethodCompletion()) { | 492 if (!waitForMethodCompletion()) { |
| 492 // The worker thread has been signalled to shutdown before method comple tion. | 493 // The worker thread has been signalled to shutdown before method comple tion. |
| 493 terminatePeer(); | 494 terminatePeer(); |
| 494 } | 495 } |
| 495 } | 496 } |
| 496 | 497 |
| 497 bool WorkerThreadableWebSocketChannel::Bridge::connect(const KURL& url, const St ring& protocol) | 498 bool WorkerThreadableWebSocketChannel::Bridge::connect(const KURL& url, const St ring& protocol) |
| 498 { | 499 { |
| 499 if (!m_workerGlobalScope) | 500 if (!m_workerGlobalScope) |
| 500 return false; | 501 return false; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 603 } | 604 } |
| 604 | 605 |
| 605 void WorkerThreadableWebSocketChannel::Bridge::terminatePeer() | 606 void WorkerThreadableWebSocketChannel::Bridge::terminatePeer() |
| 606 { | 607 { |
| 607 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::destroy, m_peer))); | 608 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::destroy, m_peer))); |
| 608 m_workerGlobalScope = nullptr; | 609 m_workerGlobalScope = nullptr; |
| 609 m_syncHelper = 0; | 610 m_syncHelper = 0; |
| 610 } | 611 } |
| 611 | 612 |
| 612 } // namespace WebCore | 613 } // namespace WebCore |
| OLD | NEW |