| 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 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 m_bridge->fail(reason, level, sourceURL, lineNumber); | 180 m_bridge->fail(reason, level, sourceURL, lineNumber); |
| 181 } | 181 } |
| 182 } | 182 } |
| 183 | 183 |
| 184 void WorkerThreadableWebSocketChannel::disconnect() | 184 void WorkerThreadableWebSocketChannel::disconnect() |
| 185 { | 185 { |
| 186 m_bridge->disconnect(); | 186 m_bridge->disconnect(); |
| 187 m_bridge.clear(); | 187 m_bridge.clear(); |
| 188 } | 188 } |
| 189 | 189 |
| 190 void WorkerThreadableWebSocketChannel::suspend() |
| 191 { |
| 192 m_workerClientWrapper->suspend(); |
| 193 if (m_bridge) |
| 194 m_bridge->suspend(); |
| 195 } |
| 196 |
| 197 void WorkerThreadableWebSocketChannel::resume() |
| 198 { |
| 199 m_workerClientWrapper->resume(); |
| 200 if (m_bridge) |
| 201 m_bridge->resume(); |
| 202 } |
| 203 |
| 190 void WorkerThreadableWebSocketChannel::trace(Visitor* visitor) | 204 void WorkerThreadableWebSocketChannel::trace(Visitor* visitor) |
| 191 { | 205 { |
| 192 visitor->trace(m_workerClientWrapper); | 206 visitor->trace(m_workerClientWrapper); |
| 193 WebSocketChannel::trace(visitor); | 207 WebSocketChannel::trace(visitor); |
| 194 } | 208 } |
| 195 | 209 |
| 196 WorkerThreadableWebSocketChannel::Peer::Peer(PassRefPtr<WeakReference<Peer> > re
ference, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> clientW
rapper, WorkerLoaderProxy& loaderProxy, ExecutionContext* context, const String&
sourceURL, unsigned lineNumber, PassOwnPtr<ThreadableWebSocketChannelSyncHelper
> syncHelper) | 210 WorkerThreadableWebSocketChannel::Peer::Peer(PassRefPtr<WeakReference<Peer> > re
ference, PassRefPtrWillBeRawPtr<ThreadableWebSocketChannelClientWrapper> clientW
rapper, WorkerLoaderProxy& loaderProxy, ExecutionContext* context, const String&
sourceURL, unsigned lineNumber, PassOwnPtr<ThreadableWebSocketChannelSyncHelper
> syncHelper) |
| 197 : m_workerClientWrapper(clientWrapper) | 211 : m_workerClientWrapper(clientWrapper) |
| 198 , m_loaderProxy(loaderProxy) | 212 , m_loaderProxy(loaderProxy) |
| 199 , m_mainWebSocketChannel(nullptr) | 213 , m_mainWebSocketChannel(nullptr) |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 | 312 |
| 299 void WorkerThreadableWebSocketChannel::Peer::disconnect() | 313 void WorkerThreadableWebSocketChannel::Peer::disconnect() |
| 300 { | 314 { |
| 301 ASSERT(isMainThread()); | 315 ASSERT(isMainThread()); |
| 302 if (!m_mainWebSocketChannel) | 316 if (!m_mainWebSocketChannel) |
| 303 return; | 317 return; |
| 304 m_mainWebSocketChannel->disconnect(); | 318 m_mainWebSocketChannel->disconnect(); |
| 305 m_mainWebSocketChannel = nullptr; | 319 m_mainWebSocketChannel = nullptr; |
| 306 } | 320 } |
| 307 | 321 |
| 322 void WorkerThreadableWebSocketChannel::Peer::suspend() |
| 323 { |
| 324 ASSERT(isMainThread()); |
| 325 if (!m_mainWebSocketChannel) |
| 326 return; |
| 327 m_mainWebSocketChannel->suspend(); |
| 328 } |
| 329 |
| 330 void WorkerThreadableWebSocketChannel::Peer::resume() |
| 331 { |
| 332 ASSERT(isMainThread()); |
| 333 if (!m_mainWebSocketChannel) |
| 334 return; |
| 335 m_mainWebSocketChannel->resume(); |
| 336 } |
| 337 |
| 308 static void workerGlobalScopeDidConnect(ExecutionContext* context, PassRefPtrWil
lBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const St
ring& subprotocol, const String& extensions) | 338 static void workerGlobalScopeDidConnect(ExecutionContext* context, PassRefPtrWil
lBeRawPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, const St
ring& subprotocol, const String& extensions) |
| 309 { | 339 { |
| 310 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); | 340 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| 311 workerClientWrapper->didConnect(subprotocol, extensions); | 341 workerClientWrapper->didConnect(subprotocol, extensions); |
| 312 } | 342 } |
| 313 | 343 |
| 314 void WorkerThreadableWebSocketChannel::Peer::didConnect(const String& subprotoco
l, const String& extensions) | 344 void WorkerThreadableWebSocketChannel::Peer::didConnect(const String& subprotoco
l, const String& extensions) |
| 315 { | 345 { |
| 316 ASSERT(isMainThread()); | 346 ASSERT(isMainThread()); |
| 317 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc
opeDidConnect, m_workerClientWrapper.get(), subprotocol, extensions)); | 347 m_loaderProxy.postTaskToWorkerGlobalScope(createCallbackTask(&workerGlobalSc
opeDidConnect, m_workerClientWrapper.get(), subprotocol, extensions)); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 | 518 |
| 489 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::fail, m_p
eer, reason.isolatedCopy(), level, sourceURL.isolatedCopy(), lineNumber))); | 519 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::fail, m_p
eer, reason.isolatedCopy(), level, sourceURL.isolatedCopy(), lineNumber))); |
| 490 } | 520 } |
| 491 | 521 |
| 492 void WorkerThreadableWebSocketChannel::Bridge::disconnect() | 522 void WorkerThreadableWebSocketChannel::Bridge::disconnect() |
| 493 { | 523 { |
| 494 clearClientWrapper(); | 524 clearClientWrapper(); |
| 495 terminatePeer(); | 525 terminatePeer(); |
| 496 } | 526 } |
| 497 | 527 |
| 528 void WorkerThreadableWebSocketChannel::Bridge::suspend() |
| 529 { |
| 530 if (hasTerminatedPeer()) |
| 531 return; |
| 532 |
| 533 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::suspend,
m_peer))); |
| 534 } |
| 535 |
| 536 void WorkerThreadableWebSocketChannel::Bridge::resume() |
| 537 { |
| 538 if (hasTerminatedPeer()) |
| 539 return; |
| 540 |
| 541 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::resume, m
_peer))); |
| 542 } |
| 543 |
| 498 void WorkerThreadableWebSocketChannel::Bridge::clearClientWrapper() | 544 void WorkerThreadableWebSocketChannel::Bridge::clearClientWrapper() |
| 499 { | 545 { |
| 500 m_workerClientWrapper->clearClient(); | 546 m_workerClientWrapper->clearClient(); |
| 501 } | 547 } |
| 502 | 548 |
| 503 // Caller of this function should hold a reference to the bridge, because this f
unction may call WebSocket::didClose() in the end, | 549 // Caller of this function should hold a reference to the bridge, because this f
unction may call WebSocket::didClose() in the end, |
| 504 // which causes the bridge to get disconnected from the WebSocket and deleted if
there is no other reference. | 550 // which causes the bridge to get disconnected from the WebSocket and deleted if
there is no other reference. |
| 505 bool WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion(PassOwnPt
r<ExecutionContextTask> task) | 551 bool WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion(PassOwnPt
r<ExecutionContextTask> task) |
| 506 { | 552 { |
| 507 ASSERT(m_workerGlobalScope); | 553 ASSERT(m_workerGlobalScope); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 524 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::destroy,
m_peer))); | 570 m_loaderProxy.postTaskToLoader(CallClosureTask::create(bind(&Peer::destroy,
m_peer))); |
| 525 // Peer::destroy() deletes m_peer and then m_syncHelper will be released. | 571 // Peer::destroy() deletes m_peer and then m_syncHelper will be released. |
| 526 // We must not touch m_syncHelper any more. | 572 // We must not touch m_syncHelper any more. |
| 527 m_syncHelper = 0; | 573 m_syncHelper = 0; |
| 528 | 574 |
| 529 // We won't use this any more. | 575 // We won't use this any more. |
| 530 m_workerGlobalScope = nullptr; | 576 m_workerGlobalScope = nullptr; |
| 531 } | 577 } |
| 532 | 578 |
| 533 } // namespace WebCore | 579 } // namespace WebCore |
| OLD | NEW |