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

Side by Side Diff: Source/modules/websockets/WorkerThreadableWebSocketChannel.cpp

Issue 23992003: blob hacking webcore style (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 2 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 | « Source/modules/websockets/WorkerThreadableWebSocketChannel.h ('k') | Source/web/WebBlob.cpp » ('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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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(ExecutionContext* context, Pas sRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigned l ong bufferedAmount) 243 static void workerGlobalScopeDidGetBufferedAmount(ExecutionContext* context, Pas sRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigned l ong 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
491 void WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer(ExecutionContex t* context, Peer* peer, PassOwnPtr<Vector<char> > data) 491 void WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer(ExecutionContex t* 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(ExecutionContext* cont ext, Peer* peer, const KURL& url, const String& type, long long size) 501 void WorkerThreadableWebSocketChannel::mainThreadSendBlob(ExecutionContext* cont ext, 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
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(ExecutionContext * context, Peer* peer) 555 void WorkerThreadableWebSocketChannel::mainThreadBufferedAmount(ExecutionContext * context, Peer* peer)
558 { 556 {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
OLDNEW
« no previous file with comments | « Source/modules/websockets/WorkerThreadableWebSocketChannel.h ('k') | Source/web/WebBlob.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698