Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(502)

Side by Side Diff: WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp

Issue 11192017: ********** WebCore blob hacking (Closed) Base URL: http://svn.webkit.org/repository/webkit/trunk/Source/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h ('k') | WebCore/WebCore.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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)
OLDNEW
« no previous file with comments | « WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h ('k') | WebCore/WebCore.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698