| 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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 return m_bridge->send(message); | 108 return m_bridge->send(message); |
| 109 } | 109 } |
| 110 | 110 |
| 111 WebSocketChannel::SendResult WorkerThreadableWebSocketChannel::send(const ArrayB
uffer& binaryData, unsigned byteOffset, unsigned byteLength) | 111 WebSocketChannel::SendResult WorkerThreadableWebSocketChannel::send(const ArrayB
uffer& binaryData, unsigned byteOffset, unsigned byteLength) |
| 112 { | 112 { |
| 113 if (!m_bridge) | 113 if (!m_bridge) |
| 114 return WebSocketChannel::SendFail; | 114 return WebSocketChannel::SendFail; |
| 115 return m_bridge->send(binaryData, byteOffset, byteLength); | 115 return m_bridge->send(binaryData, byteOffset, byteLength); |
| 116 } | 116 } |
| 117 | 117 |
| 118 WebSocketChannel::SendResult WorkerThreadableWebSocketChannel::send(const Blob&
binaryData) | 118 WebSocketChannel::SendResult WorkerThreadableWebSocketChannel::send(PassRefPtr<B
lobDataHandle> blobData) |
| 119 { | 119 { |
| 120 if (!m_bridge) | 120 if (!m_bridge) |
| 121 return WebSocketChannel::SendFail; | 121 return WebSocketChannel::SendFail; |
| 122 return m_bridge->send(binaryData); | 122 return m_bridge->send(blobData); |
| 123 } | 123 } |
| 124 | 124 |
| 125 unsigned long WorkerThreadableWebSocketChannel::bufferedAmount() const | 125 unsigned long WorkerThreadableWebSocketChannel::bufferedAmount() const |
| 126 { | 126 { |
| 127 if (!m_bridge) | 127 if (!m_bridge) |
| 128 return 0; | 128 return 0; |
| 129 return m_bridge->bufferedAmount(); | 129 return m_bridge->bufferedAmount(); |
| 130 } | 130 } |
| 131 | 131 |
| 132 void WorkerThreadableWebSocketChannel::close(int code, const String& reason) | 132 void WorkerThreadableWebSocketChannel::close(int code, const String& reason) |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 | 224 |
| 225 void WorkerThreadableWebSocketChannel::Peer::send(const ArrayBuffer& binaryData) | 225 void WorkerThreadableWebSocketChannel::Peer::send(const ArrayBuffer& binaryData) |
| 226 { | 226 { |
| 227 ASSERT(isMainThread()); | 227 ASSERT(isMainThread()); |
| 228 if (!m_mainWebSocketChannel || !m_workerClientWrapper) | 228 if (!m_mainWebSocketChannel || !m_workerClientWrapper) |
| 229 return; | 229 return; |
| 230 WebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->sen
d(binaryData, 0, binaryData.byteLength()); | 230 WebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->sen
d(binaryData, 0, binaryData.byteLength()); |
| 231 m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&workerG
lobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode); | 231 m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&workerG
lobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode); |
| 232 } | 232 } |
| 233 | 233 |
| 234 void WorkerThreadableWebSocketChannel::Peer::send(const Blob& binaryData) | 234 void WorkerThreadableWebSocketChannel::Peer::send(PassRefPtr<BlobDataHandle> blo
bData) |
| 235 { | 235 { |
| 236 ASSERT(isMainThread()); | 236 ASSERT(isMainThread()); |
| 237 if (!m_mainWebSocketChannel || !m_workerClientWrapper) | 237 if (!m_mainWebSocketChannel || !m_workerClientWrapper) |
| 238 return; | 238 return; |
| 239 WebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->sen
d(binaryData); | 239 WebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->sen
d(blobData); |
| 240 m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&workerG
lobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode); | 240 m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&workerG
lobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode); |
| 241 } | 241 } |
| 242 | 242 |
| 243 static void workerGlobalScopeDidGetBufferedAmount(ScriptExecutionContext* contex
t, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsi
gned long bufferedAmount) | 243 static void workerGlobalScopeDidGetBufferedAmount(ScriptExecutionContext* contex
t, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsi
gned long bufferedAmount) |
| 244 { | 244 { |
| 245 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); | 245 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); |
| 246 workerClientWrapper->setBufferedAmount(bufferedAmount); | 246 workerClientWrapper->setBufferedAmount(bufferedAmount); |
| 247 } | 247 } |
| 248 | 248 |
| 249 void WorkerThreadableWebSocketChannel::Peer::bufferedAmount() | 249 void WorkerThreadableWebSocketChannel::Peer::bufferedAmount() |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 void WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer(ScriptExecution
Context* context, Peer* peer, PassOwnPtr<Vector<char> > data) | 491 void WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer(ScriptExecution
Context* context, Peer* peer, PassOwnPtr<Vector<char> > data) |
| 492 { | 492 { |
| 493 ASSERT(isMainThread()); | 493 ASSERT(isMainThread()); |
| 494 ASSERT_UNUSED(context, context->isDocument()); | 494 ASSERT_UNUSED(context, context->isDocument()); |
| 495 ASSERT(peer); | 495 ASSERT(peer); |
| 496 | 496 |
| 497 RefPtr<ArrayBuffer> arrayBuffer = ArrayBuffer::create(data->data(), data->si
ze()); | 497 RefPtr<ArrayBuffer> arrayBuffer = ArrayBuffer::create(data->data(), data->si
ze()); |
| 498 peer->send(*arrayBuffer); | 498 peer->send(*arrayBuffer); |
| 499 } | 499 } |
| 500 | 500 |
| 501 void WorkerThreadableWebSocketChannel::mainThreadSendBlob(ScriptExecutionContext
* context, Peer* peer, const KURL& url, const String& type, long long size) | 501 void WorkerThreadableWebSocketChannel::mainThreadSendBlob(ScriptExecutionContext
* context, Peer* peer, PassRefPtr<BlobDataHandle> data) |
| 502 { | 502 { |
| 503 ASSERT(isMainThread()); | 503 ASSERT(isMainThread()); |
| 504 ASSERT_UNUSED(context, context->isDocument()); | 504 ASSERT_UNUSED(context, context->isDocument()); |
| 505 ASSERT(peer); | 505 ASSERT(peer); |
| 506 | 506 peer->send(data); |
| 507 RefPtr<Blob> blob = Blob::create(url, type, size); | |
| 508 peer->send(*blob); | |
| 509 } | 507 } |
| 510 | 508 |
| 511 WebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(cons
t String& message) | 509 WebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(cons
t String& message) |
| 512 { | 510 { |
| 513 if (!m_workerClientWrapper || !m_peer) | 511 if (!m_workerClientWrapper || !m_peer) |
| 514 return WebSocketChannel::SendFail; | 512 return WebSocketChannel::SendFail; |
| 515 setMethodNotCompleted(); | 513 setMethodNotCompleted(); |
| 516 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSend, AllowCrossThreadAccess(m_peer), message)); | 514 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSend, AllowCrossThreadAccess(m_peer), message)); |
| 517 RefPtr<Bridge> protect(this); | 515 RefPtr<Bridge> protect(this); |
| 518 waitForMethodCompletion(); | 516 waitForMethodCompletion(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 533 setMethodNotCompleted(); | 531 setMethodNotCompleted(); |
| 534 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSendArrayBuffer, AllowCrossThreadAccess(m_peer), data.release
())); | 532 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSendArrayBuffer, AllowCrossThreadAccess(m_peer), data.release
())); |
| 535 RefPtr<Bridge> protect(this); | 533 RefPtr<Bridge> protect(this); |
| 536 waitForMethodCompletion(); | 534 waitForMethodCompletion(); |
| 537 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); | 535 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); |
| 538 if (!clientWrapper) | 536 if (!clientWrapper) |
| 539 return WebSocketChannel::SendFail; | 537 return WebSocketChannel::SendFail; |
| 540 return clientWrapper->sendRequestResult(); | 538 return clientWrapper->sendRequestResult(); |
| 541 } | 539 } |
| 542 | 540 |
| 543 WebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(cons
t Blob& binaryData) | 541 WebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(Pass
RefPtr<BlobDataHandle> data) |
| 544 { | 542 { |
| 545 if (!m_workerClientWrapper || !m_peer) | 543 if (!m_workerClientWrapper || !m_peer) |
| 546 return WebSocketChannel::SendFail; | 544 return WebSocketChannel::SendFail; |
| 547 setMethodNotCompleted(); | 545 setMethodNotCompleted(); |
| 548 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSendBlob, AllowCrossThreadAccess(m_peer), binaryData.url(), b
inaryData.type(), binaryData.size())); | 546 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSendBlob, AllowCrossThreadAccess(m_peer), data)); |
| 549 RefPtr<Bridge> protect(this); | 547 RefPtr<Bridge> protect(this); |
| 550 waitForMethodCompletion(); | 548 waitForMethodCompletion(); |
| 551 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); | 549 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); |
| 552 if (!clientWrapper) | 550 if (!clientWrapper) |
| 553 return WebSocketChannel::SendFail; | 551 return WebSocketChannel::SendFail; |
| 554 return clientWrapper->sendRequestResult(); | 552 return clientWrapper->sendRequestResult(); |
| 555 } | 553 } |
| 556 | 554 |
| 557 void WorkerThreadableWebSocketChannel::mainThreadBufferedAmount(ScriptExecutionC
ontext* context, Peer* peer) | 555 void WorkerThreadableWebSocketChannel::mainThreadBufferedAmount(ScriptExecutionC
ontext* context, Peer* peer) |
| 558 { | 556 { |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 WorkerRunLoop& runLoop = m_workerGlobalScope->thread()->runLoop(); | 680 WorkerRunLoop& runLoop = m_workerGlobalScope->thread()->runLoop(); |
| 683 MessageQueueWaitResult result = MessageQueueMessageReceived; | 681 MessageQueueWaitResult result = MessageQueueMessageReceived; |
| 684 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); | 682 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); |
| 685 while (m_workerGlobalScope && clientWrapper && !clientWrapper->syncMethodDon
e() && result != MessageQueueTerminated) { | 683 while (m_workerGlobalScope && clientWrapper && !clientWrapper->syncMethodDon
e() && result != MessageQueueTerminated) { |
| 686 result = runLoop.runInMode(m_workerGlobalScope.get(), m_taskMode); // Ma
y cause this bridge to get disconnected, which makes m_workerGlobalScope become
null. | 684 result = runLoop.runInMode(m_workerGlobalScope.get(), m_taskMode); // Ma
y cause this bridge to get disconnected, which makes m_workerGlobalScope become
null. |
| 687 clientWrapper = m_workerClientWrapper.get(); | 685 clientWrapper = m_workerClientWrapper.get(); |
| 688 } | 686 } |
| 689 } | 687 } |
| 690 | 688 |
| 691 } // namespace WebCore | 689 } // namespace WebCore |
| OLD | NEW |