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 |