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

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 8 years, 1 month 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
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 446 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, const String& uuid, const String& type, long long size)
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::create(uuid, type, size));
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 20 matching lines...) Expand all
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 ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge: :send(const Blob& binaryData)
510 { 510 {
511 if (!m_workerClientWrapper || !m_peer) 511 if (!m_workerClientWrapper || !m_peer)
512 return ThreadableWebSocketChannel::SendFail; 512 return ThreadableWebSocketChannel::SendFail;
513 setMethodNotCompleted(); 513 setMethodNotCompleted();
514 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket Channel::mainThreadSendBlob, AllowCrossThreadAccess(m_peer), binaryData.url(), b inaryData.type(), binaryData.size())); 514 m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocket Channel::mainThreadSendBlob, AllowCrossThreadAccess(m_peer), binaryData.uuid(), binaryData.type(), binaryData.size()));
515 RefPtr<Bridge> protect(this); 515 RefPtr<Bridge> protect(this);
516 waitForMethodCompletion(); 516 waitForMethodCompletion();
517 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp er.get(); 517 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp er.get();
518 if (!clientWrapper) 518 if (!clientWrapper)
519 return ThreadableWebSocketChannel::SendFail; 519 return ThreadableWebSocketChannel::SendFail;
520 return clientWrapper->sendRequestResult(); 520 return clientWrapper->sendRequestResult();
521 } 521 }
522 522
523 void WorkerThreadableWebSocketChannel::mainThreadBufferedAmount(ScriptExecutionC ontext* context, Peer* peer) 523 void WorkerThreadableWebSocketChannel::mainThreadBufferedAmount(ScriptExecutionC ontext* context, Peer* peer)
524 { 524 {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp er.get(); 650 ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapp er.get();
651 while (m_workerContext && clientWrapper && !clientWrapper->syncMethodDone() && result != MessageQueueTerminated) { 651 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. 652 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(); 653 clientWrapper = m_workerClientWrapper.get();
654 } 654 }
655 } 655 }
656 656
657 } // namespace WebCore 657 } // namespace WebCore
658 658
659 #endif // ENABLE(WEB_SOCKETS) 659 #endif // ENABLE(WEB_SOCKETS)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698