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

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

Issue 11192017: ********** WebCore blob hacking (Closed) Base URL: http://svn.webkit.org/repository/webkit/trunk/Source/
Patch Set: Created 8 years 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 Google Inc. All rights reserved. 2 * Copyright (C) 2011 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 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, get FramingOverhead(payloadSize)); 338 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, get FramingOverhead(payloadSize));
339 return false; 339 return false;
340 } 340 }
341 ASSERT(m_channel); 341 ASSERT(m_channel);
342 RefPtr<ArrayBuffer> arrayBuffer(arrayBufferView->buffer()); 342 RefPtr<ArrayBuffer> arrayBuffer(arrayBufferView->buffer());
343 return m_channel->send(*arrayBuffer, arrayBufferView->byteOffset(), arrayBuf ferView->byteLength()) == ThreadableWebSocketChannel::SendSuccess; 343 return m_channel->send(*arrayBuffer, arrayBufferView->byteOffset(), arrayBuf ferView->byteLength()) == ThreadableWebSocketChannel::SendSuccess;
344 } 344 }
345 345
346 bool WebSocket::send(Blob* binaryData, ExceptionCode& ec) 346 bool WebSocket::send(Blob* binaryData, ExceptionCode& ec)
347 { 347 {
348 LOG(Network, "WebSocket %p send blob %s", this, binaryData->url().string().u tf8().data()); 348 LOG(Network, "WebSocket %p send blob %s", this, binaryData->uuid().utf8().da ta());
349 ASSERT(binaryData); 349 ASSERT(binaryData);
350 if (m_state == CONNECTING) { 350 if (m_state == CONNECTING) {
351 ec = INVALID_STATE_ERR; 351 ec = INVALID_STATE_ERR;
352 return false; 352 return false;
353 } 353 }
354 if (m_state == CLOSING || m_state == CLOSED) { 354 if (m_state == CLOSING || m_state == CLOSED) {
355 unsigned long payloadSize = static_cast<unsigned long>(binaryData->size( )); 355 unsigned long payloadSize = static_cast<unsigned long>(binaryData->size( ));
356 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, pay loadSize); 356 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, pay loadSize);
357 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, get FramingOverhead(payloadSize)); 357 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, get FramingOverhead(payloadSize));
358 return false; 358 return false;
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 if (m_state != OPEN && m_state != CLOSING) 508 if (m_state != OPEN && m_state != CLOSING)
509 return; 509 return;
510 ASSERT(scriptExecutionContext()); 510 ASSERT(scriptExecutionContext());
511 dispatchEvent(MessageEvent::create(msg, SecurityOrigin::create(m_url)->toStr ing())); 511 dispatchEvent(MessageEvent::create(msg, SecurityOrigin::create(m_url)->toStr ing()));
512 } 512 }
513 513
514 void WebSocket::didReceiveBinaryData(PassOwnPtr<Vector<char> > binaryData) 514 void WebSocket::didReceiveBinaryData(PassOwnPtr<Vector<char> > binaryData)
515 { 515 {
516 switch (m_binaryType) { 516 switch (m_binaryType) {
517 case BinaryTypeBlob: { 517 case BinaryTypeBlob: {
518 // FIXME: What if this is a very large amount of data, too large to reas onably fit
519 // into a Vector<char>? As data is received, we should be spooling it ou t incrementally
520 // to construct the blob.
518 size_t size = binaryData->size(); 521 size_t size = binaryData->size();
519 RefPtr<RawData> rawData = RawData::create(); 522 RefPtr<RawData> rawData = RawData::create();
520 binaryData->swap(*rawData->mutableData()); 523 binaryData->swap(*rawData->mutableData());
521 OwnPtr<BlobData> blobData = BlobData::create(); 524 OwnPtr<BlobData> blobData = BlobData::create();
522 blobData->appendData(rawData.release(), 0, BlobDataItem::toEndOfFile); 525 blobData->appendData(rawData.release(), 0, BlobDataItem::toEndOfFile);
523 RefPtr<Blob> blob = Blob::create(blobData.release(), size); 526 RefPtr<Blob> blob = Blob::create(BlobDataHandle::create(blobData.release (), size));
524 dispatchEvent(MessageEvent::create(blob.release(), SecurityOrigin::creat e(m_url)->toString())); 527 dispatchEvent(MessageEvent::create(blob.release(), SecurityOrigin::creat e(m_url)->toString()));
525 break; 528 break;
526 } 529 }
527 530
528 case BinaryTypeArrayBuffer: 531 case BinaryTypeArrayBuffer:
529 dispatchEvent(MessageEvent::create(ArrayBuffer::create(binaryData->data( ), binaryData->size()), SecurityOrigin::create(m_url)->toString())); 532 dispatchEvent(MessageEvent::create(ArrayBuffer::create(binaryData->data( ), binaryData->size()), SecurityOrigin::create(m_url)->toString()));
530 break; 533 break;
531 } 534 }
532 } 535 }
533 536
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 if (payloadSize >= minimumPayloadSizeWithEightByteExtendedPayloadLength) 594 if (payloadSize >= minimumPayloadSizeWithEightByteExtendedPayloadLength)
592 overhead += 8; 595 overhead += 8;
593 else if (payloadSize >= minimumPayloadSizeWithTwoByteExtendedPayloadLength) 596 else if (payloadSize >= minimumPayloadSizeWithTwoByteExtendedPayloadLength)
594 overhead += 2; 597 overhead += 2;
595 return overhead; 598 return overhead;
596 } 599 }
597 600
598 } // namespace WebCore 601 } // namespace WebCore
599 602
600 #endif 603 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698