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

Side by Side Diff: Source/modules/websockets/MainThreadWebSocketChannel.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
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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 } 153 }
154 154
155 WebSocketChannel::SendResult MainThreadWebSocketChannel::send(const ArrayBuffer& binaryData, unsigned byteOffset, unsigned byteLength) 155 WebSocketChannel::SendResult MainThreadWebSocketChannel::send(const ArrayBuffer& binaryData, unsigned byteOffset, unsigned byteLength)
156 { 156 {
157 LOG(Network, "MainThreadWebSocketChannel %p send() Sending ArrayBuffer %p by teOffset=%u byteLength=%u", this, &binaryData, byteOffset, byteLength); 157 LOG(Network, "MainThreadWebSocketChannel %p send() Sending ArrayBuffer %p by teOffset=%u byteLength=%u", this, &binaryData, byteOffset, byteLength);
158 enqueueRawFrame(WebSocketFrame::OpCodeBinary, static_cast<const char*>(binar yData.data()) + byteOffset, byteLength); 158 enqueueRawFrame(WebSocketFrame::OpCodeBinary, static_cast<const char*>(binar yData.data()) + byteOffset, byteLength);
159 processOutgoingFrameQueue(); 159 processOutgoingFrameQueue();
160 return WebSocketChannel::SendSuccess; 160 return WebSocketChannel::SendSuccess;
161 } 161 }
162 162
163 WebSocketChannel::SendResult MainThreadWebSocketChannel::send(const Blob& binary Data) 163 WebSocketChannel::SendResult MainThreadWebSocketChannel::send(PassRefPtr<BlobDat aHandle> binaryData)
164 { 164 {
165 LOG(Network, "MainThreadWebSocketChannel %p send() Sending Blob '%s'", this, binaryData.url().elidedString().utf8().data()); 165 LOG(Network, "MainThreadWebSocketChannel %p send() Sending Blob '%s'", this, binaryData->uuid().utf8().data());
166 enqueueBlobFrame(WebSocketFrame::OpCodeBinary, binaryData); 166 enqueueBlobFrame(WebSocketFrame::OpCodeBinary, binaryData);
167 processOutgoingFrameQueue(); 167 processOutgoingFrameQueue();
168 return WebSocketChannel::SendSuccess; 168 return WebSocketChannel::SendSuccess;
169 } 169 }
170 170
171 bool MainThreadWebSocketChannel::send(const char* data, int length) 171 bool MainThreadWebSocketChannel::send(const char* data, int length)
172 { 172 {
173 LOG(Network, "MainThreadWebSocketChannel %p send() Sending char* data=%p len gth=%d", this, data, length); 173 LOG(Network, "MainThreadWebSocketChannel %p send() Sending char* data=%p len gth=%d", this, data, length);
174 enqueueRawFrame(WebSocketFrame::OpCodeBinary, data, length); 174 enqueueRawFrame(WebSocketFrame::OpCodeBinary, data, length);
175 processOutgoingFrameQueue(); 175 processOutgoingFrameQueue();
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 ASSERT(m_outgoingFrameQueueStatus == OutgoingFrameQueueOpen); 701 ASSERT(m_outgoingFrameQueueStatus == OutgoingFrameQueueOpen);
702 OwnPtr<QueuedFrame> frame = adoptPtr(new QueuedFrame); 702 OwnPtr<QueuedFrame> frame = adoptPtr(new QueuedFrame);
703 frame->opCode = opCode; 703 frame->opCode = opCode;
704 frame->frameType = QueuedFrameTypeVector; 704 frame->frameType = QueuedFrameTypeVector;
705 frame->vectorData.resize(dataLength); 705 frame->vectorData.resize(dataLength);
706 if (dataLength) 706 if (dataLength)
707 memcpy(frame->vectorData.data(), data, dataLength); 707 memcpy(frame->vectorData.data(), data, dataLength);
708 m_outgoingFrameQueue.append(frame.release()); 708 m_outgoingFrameQueue.append(frame.release());
709 } 709 }
710 710
711 void MainThreadWebSocketChannel::enqueueBlobFrame(WebSocketFrame::OpCode opCode, const Blob& blob) 711 void MainThreadWebSocketChannel::enqueueBlobFrame(WebSocketFrame::OpCode opCode, PassRefPtr<BlobDataHandle> blobData)
712 { 712 {
713 ASSERT(m_outgoingFrameQueueStatus == OutgoingFrameQueueOpen); 713 ASSERT(m_outgoingFrameQueueStatus == OutgoingFrameQueueOpen);
714 OwnPtr<QueuedFrame> frame = adoptPtr(new QueuedFrame); 714 OwnPtr<QueuedFrame> frame = adoptPtr(new QueuedFrame);
715 frame->opCode = opCode; 715 frame->opCode = opCode;
716 frame->frameType = QueuedFrameTypeBlob; 716 frame->frameType = QueuedFrameTypeBlob;
717 frame->blobData = Blob::create(blob.url(), blob.type(), blob.size()); 717 frame->blobData = blobData;
718 m_outgoingFrameQueue.append(frame.release()); 718 m_outgoingFrameQueue.append(frame.release());
719 } 719 }
720 720
721 void MainThreadWebSocketChannel::processOutgoingFrameQueue() 721 void MainThreadWebSocketChannel::processOutgoingFrameQueue()
722 { 722 {
723 if (m_outgoingFrameQueueStatus == OutgoingFrameQueueClosed) 723 if (m_outgoingFrameQueueStatus == OutgoingFrameQueueClosed)
724 return; 724 return;
725 725
726 while (!m_outgoingFrameQueue.isEmpty()) { 726 while (!m_outgoingFrameQueue.isEmpty()) {
727 OwnPtr<QueuedFrame> frame = m_outgoingFrameQueue.takeFirst(); 727 OwnPtr<QueuedFrame> frame = m_outgoingFrameQueue.takeFirst();
728 switch (frame->frameType) { 728 switch (frame->frameType) {
729 case QueuedFrameTypeString: { 729 case QueuedFrameTypeString: {
730 if (!sendFrame(frame->opCode, frame->stringData.data(), frame->strin gData.length())) 730 if (!sendFrame(frame->opCode, frame->stringData.data(), frame->strin gData.length()))
731 failAsError("Failed to send WebSocket frame."); 731 failAsError("Failed to send WebSocket frame.");
732 break; 732 break;
733 } 733 }
734 734
735 case QueuedFrameTypeVector: 735 case QueuedFrameTypeVector:
736 if (!sendFrame(frame->opCode, frame->vectorData.data(), frame->vecto rData.size())) 736 if (!sendFrame(frame->opCode, frame->vectorData.data(), frame->vecto rData.size()))
737 failAsError("Failed to send WebSocket frame."); 737 failAsError("Failed to send WebSocket frame.");
738 break; 738 break;
739 739
740 case QueuedFrameTypeBlob: { 740 case QueuedFrameTypeBlob: {
741 switch (m_blobLoaderStatus) { 741 switch (m_blobLoaderStatus) {
742 case BlobLoaderNotStarted: 742 case BlobLoaderNotStarted:
743 ref(); // Will be derefed after didFinishLoading() or didFail(). 743 ref(); // Will be derefed after didFinishLoading() or didFail().
744 ASSERT(!m_blobLoader); 744 ASSERT(!m_blobLoader);
745 m_blobLoader = adoptPtr(new FileReaderLoader(FileReaderLoader::R eadAsArrayBuffer, this)); 745 m_blobLoader = adoptPtr(new FileReaderLoader(FileReaderLoader::R eadAsArrayBuffer, this));
746 m_blobLoaderStatus = BlobLoaderStarted; 746 m_blobLoaderStatus = BlobLoaderStarted;
747 m_blobLoader->start(m_document, *frame->blobData); 747 m_blobLoader->start(m_document, frame->blobData);
748 m_outgoingFrameQueue.prepend(frame.release()); 748 m_outgoingFrameQueue.prepend(frame.release());
749 return; 749 return;
750 750
751 case BlobLoaderStarted: 751 case BlobLoaderStarted:
752 case BlobLoaderFailed: 752 case BlobLoaderFailed:
753 m_outgoingFrameQueue.prepend(frame.release()); 753 m_outgoingFrameQueue.prepend(frame.release());
754 return; 754 return;
755 755
756 case BlobLoaderFinished: { 756 case BlobLoaderFinished: {
757 RefPtr<ArrayBuffer> result = m_blobLoader->arrayBufferResult(); 757 RefPtr<ArrayBuffer> result = m_blobLoader->arrayBufferResult();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 } 808 }
809 809
810 Vector<char> frameData; 810 Vector<char> frameData;
811 frame.makeFrameData(frameData); 811 frame.makeFrameData(frameData);
812 812
813 m_perMessageDeflate.resetDeflateBuffer(); 813 m_perMessageDeflate.resetDeflateBuffer();
814 return m_handle->send(frameData.data(), frameData.size()); 814 return m_handle->send(frameData.data(), frameData.size());
815 } 815 }
816 816
817 } // namespace WebCore 817 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698