| 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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 { | 95 { |
| 96 if (!m_bridge) | 96 if (!m_bridge) |
| 97 return ThreadableWebSocketChannel::SendFail; | 97 return ThreadableWebSocketChannel::SendFail; |
| 98 return m_bridge->send(binaryData, byteOffset, byteLength); | 98 return m_bridge->send(binaryData, byteOffset, byteLength); |
| 99 } | 99 } |
| 100 | 100 |
| 101 ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::send(co
nst Blob& binaryData) | 101 ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::send(co
nst Blob& binaryData) |
| 102 { | 102 { |
| 103 if (!m_bridge) | 103 if (!m_bridge) |
| 104 return ThreadableWebSocketChannel::SendFail; | 104 return ThreadableWebSocketChannel::SendFail; |
| 105 return m_bridge->send(binaryData); | 105 return m_bridge->send(binaryData.blobDataHandle()); |
| 106 } | 106 } |
| 107 | 107 |
| 108 unsigned long WorkerThreadableWebSocketChannel::bufferedAmount() const | 108 unsigned long WorkerThreadableWebSocketChannel::bufferedAmount() const |
| 109 { | 109 { |
| 110 if (!m_bridge) | 110 if (!m_bridge) |
| 111 return 0; | 111 return 0; |
| 112 return m_bridge->bufferedAmount(); | 112 return m_bridge->bufferedAmount(); |
| 113 } | 113 } |
| 114 | 114 |
| 115 void WorkerThreadableWebSocketChannel::close(int code, const String& reason) | 115 void WorkerThreadableWebSocketChannel::close(int code, const String& reason) |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 void WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer(ScriptExecution
Context* context, Peer* peer, PassOwnPtr<Vector<char> > data) | 457 void WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer(ScriptExecution
Context* context, Peer* peer, PassOwnPtr<Vector<char> > data) |
| 458 { | 458 { |
| 459 ASSERT(isMainThread()); | 459 ASSERT(isMainThread()); |
| 460 ASSERT_UNUSED(context, context->isDocument()); | 460 ASSERT_UNUSED(context, context->isDocument()); |
| 461 ASSERT(peer); | 461 ASSERT(peer); |
| 462 | 462 |
| 463 RefPtr<ArrayBuffer> arrayBuffer = ArrayBuffer::create(data->data(), data->si
ze()); | 463 RefPtr<ArrayBuffer> arrayBuffer = ArrayBuffer::create(data->data(), data->si
ze()); |
| 464 peer->send(*arrayBuffer); | 464 peer->send(*arrayBuffer); |
| 465 } | 465 } |
| 466 | 466 |
| 467 void WorkerThreadableWebSocketChannel::mainThreadSendBlob(ScriptExecutionContext
* context, Peer* peer, const KURL& url, const String& type, long long size) | 467 void WorkerThreadableWebSocketChannel::mainThreadSendBlob(ScriptExecutionContext
* context, Peer* peer, PassRefPtr<BlobDataHandle> blobDataHandle) |
| 468 { | 468 { |
| 469 ASSERT(isMainThread()); | 469 ASSERT(isMainThread()); |
| 470 ASSERT_UNUSED(context, context->isDocument()); | 470 ASSERT_UNUSED(context, context->isDocument()); |
| 471 ASSERT(peer); | 471 ASSERT(peer); |
| 472 | 472 |
| 473 RefPtr<Blob> blob = Blob::create(url, type, size); | 473 RefPtr<Blob> blob = Blob::create(blobDataHandle); |
| 474 peer->send(*blob); | 474 peer->send(*blob); |
| 475 } | 475 } |
| 476 | 476 |
| 477 ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge:
:send(const String& message) | 477 ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge:
:send(const String& message) |
| 478 { | 478 { |
| 479 if (!m_workerClientWrapper || !m_peer) | 479 if (!m_workerClientWrapper || !m_peer) |
| 480 return ThreadableWebSocketChannel::SendFail; | 480 return ThreadableWebSocketChannel::SendFail; |
| 481 setMethodNotCompleted(); | 481 setMethodNotCompleted(); |
| 482 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSend, AllowCrossThreadAccess(m_peer), message)); | 482 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSend, AllowCrossThreadAccess(m_peer), message)); |
| 483 RefPtr<Bridge> protect(this); | 483 RefPtr<Bridge> protect(this); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 499 setMethodNotCompleted(); | 499 setMethodNotCompleted(); |
| 500 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSendArrayBuffer, AllowCrossThreadAccess(m_peer), data.release
())); | 500 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSendArrayBuffer, AllowCrossThreadAccess(m_peer), data.release
())); |
| 501 RefPtr<Bridge> protect(this); | 501 RefPtr<Bridge> protect(this); |
| 502 waitForMethodCompletion(); | 502 waitForMethodCompletion(); |
| 503 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); | 503 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); |
| 504 if (!clientWrapper) | 504 if (!clientWrapper) |
| 505 return ThreadableWebSocketChannel::SendFail; | 505 return ThreadableWebSocketChannel::SendFail; |
| 506 return clientWrapper->sendRequestResult(); | 506 return clientWrapper->sendRequestResult(); |
| 507 } | 507 } |
| 508 | 508 |
| 509 ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge:
:send(const Blob& binaryData) | 509 |
| 510 ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge:
:send(PassRefPtr<BlobDataHandle> blobDataHandle) |
| 510 { | 511 { |
| 511 if (!m_workerClientWrapper || !m_peer) | 512 if (!m_workerClientWrapper || !m_peer) |
| 512 return ThreadableWebSocketChannel::SendFail; | 513 return ThreadableWebSocketChannel::SendFail; |
| 513 setMethodNotCompleted(); | 514 setMethodNotCompleted(); |
| 514 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSendBlob, AllowCrossThreadAccess(m_peer), binaryData.url(), b
inaryData.type(), binaryData.size())); | 515 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket
Channel::mainThreadSendBlob, AllowCrossThreadAccess(m_peer), blobDataHandle)); |
| 515 RefPtr<Bridge> protect(this); | 516 RefPtr<Bridge> protect(this); |
| 516 waitForMethodCompletion(); | 517 waitForMethodCompletion(); |
| 517 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); | 518 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); |
| 518 if (!clientWrapper) | 519 if (!clientWrapper) |
| 519 return ThreadableWebSocketChannel::SendFail; | 520 return ThreadableWebSocketChannel::SendFail; |
| 520 return clientWrapper->sendRequestResult(); | 521 return clientWrapper->sendRequestResult(); |
| 521 } | 522 } |
| 522 | 523 |
| 523 void WorkerThreadableWebSocketChannel::mainThreadBufferedAmount(ScriptExecutionC
ontext* context, Peer* peer) | 524 void WorkerThreadableWebSocketChannel::mainThreadBufferedAmount(ScriptExecutionC
ontext* context, Peer* peer) |
| 524 { | 525 { |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); | 651 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp
er.get(); |
| 651 while (m_workerContext && clientWrapper && !clientWrapper->syncMethodDone()
&& result != MessageQueueTerminated) { | 652 while (m_workerContext && clientWrapper && !clientWrapper->syncMethodDone()
&& result != MessageQueueTerminated) { |
| 652 result = runLoop.runInMode(m_workerContext.get(), m_taskMode); // May ca
use this bridge to get disconnected, which makes m_workerContext become null. | 653 result = runLoop.runInMode(m_workerContext.get(), m_taskMode); // May ca
use this bridge to get disconnected, which makes m_workerContext become null. |
| 653 clientWrapper = m_workerClientWrapper.get(); | 654 clientWrapper = m_workerClientWrapper.get(); |
| 654 } | 655 } |
| 655 } | 656 } |
| 656 | 657 |
| 657 } // namespace WebCore | 658 } // namespace WebCore |
| 658 | 659 |
| 659 #endif // ENABLE(WEB_SOCKETS) | 660 #endif // ENABLE(WEB_SOCKETS) |
| OLD | NEW |