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

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 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
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 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, get FramingOverhead(payloadSize)); 346 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, get FramingOverhead(payloadSize));
347 return false; 347 return false;
348 } 348 }
349 ASSERT(m_channel); 349 ASSERT(m_channel);
350 RefPtr<ArrayBuffer> arrayBuffer(arrayBufferView->buffer()); 350 RefPtr<ArrayBuffer> arrayBuffer(arrayBufferView->buffer());
351 return m_channel->send(*arrayBuffer, arrayBufferView->byteOffset(), arrayBuf ferView->byteLength()) == ThreadableWebSocketChannel::SendSuccess; 351 return m_channel->send(*arrayBuffer, arrayBufferView->byteOffset(), arrayBuf ferView->byteLength()) == ThreadableWebSocketChannel::SendSuccess;
352 } 352 }
353 353
354 bool WebSocket::send(Blob* binaryData, ExceptionCode& ec) 354 bool WebSocket::send(Blob* binaryData, ExceptionCode& ec)
355 { 355 {
356 LOG(Network, "WebSocket %p send blob %s", this, binaryData->url().string().u tf8().data()); 356 LOG(Network, "WebSocket %p send blob %s", this, binaryData->uuid().utf8().da ta());
357 ASSERT(binaryData); 357 ASSERT(binaryData);
358 if (m_state == CONNECTING) { 358 if (m_state == CONNECTING) {
359 ec = INVALID_STATE_ERR; 359 ec = INVALID_STATE_ERR;
360 return false; 360 return false;
361 } 361 }
362 if (m_state == CLOSING || m_state == CLOSED) { 362 if (m_state == CLOSING || m_state == CLOSED) {
363 unsigned long payloadSize = static_cast<unsigned long>(binaryData->size( )); 363 unsigned long payloadSize = static_cast<unsigned long>(binaryData->size( ));
364 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, pay loadSize); 364 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, pay loadSize);
365 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, get FramingOverhead(payloadSize)); 365 m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, get FramingOverhead(payloadSize));
366 return false; 366 return false;
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 if (m_state != OPEN && m_state != CLOSING) 516 if (m_state != OPEN && m_state != CLOSING)
517 return; 517 return;
518 ASSERT(scriptExecutionContext()); 518 ASSERT(scriptExecutionContext());
519 dispatchEvent(MessageEvent::create(msg, SecurityOrigin::create(m_url)->toStr ing())); 519 dispatchEvent(MessageEvent::create(msg, SecurityOrigin::create(m_url)->toStr ing()));
520 } 520 }
521 521
522 void WebSocket::didReceiveBinaryData(PassOwnPtr<Vector<char> > binaryData) 522 void WebSocket::didReceiveBinaryData(PassOwnPtr<Vector<char> > binaryData)
523 { 523 {
524 switch (m_binaryType) { 524 switch (m_binaryType) {
525 case BinaryTypeBlob: { 525 case BinaryTypeBlob: {
526 // FIXME: What if this is a very large amount of data, too large to reas onably fit
527 // into a Vector<char>? As data is received, we should be spooling it ou t incrementally
528 // to construct the blob.
526 size_t size = binaryData->size(); 529 size_t size = binaryData->size();
527 RefPtr<RawData> rawData = RawData::create(); 530 RefPtr<RawData> rawData = RawData::create();
528 binaryData->swap(*rawData->mutableData()); 531 binaryData->swap(*rawData->mutableData());
529 OwnPtr<BlobData> blobData = BlobData::create(); 532 OwnPtr<BlobData> blobData = BlobData::create();
530 blobData->appendData(rawData.release(), 0, BlobDataItem::toEndOfFile); 533 blobData->appendData(rawData.release(), 0, BlobDataItem::toEndOfFile);
531 RefPtr<Blob> blob = Blob::create(blobData.release(), size); 534 RefPtr<Blob> blob = Blob::create(BlobDataHandle::create(blobData.release (), size));
532 dispatchEvent(MessageEvent::create(blob.release(), SecurityOrigin::creat e(m_url)->toString())); 535 dispatchEvent(MessageEvent::create(blob.release(), SecurityOrigin::creat e(m_url)->toString()));
533 break; 536 break;
534 } 537 }
535 538
536 case BinaryTypeArrayBuffer: 539 case BinaryTypeArrayBuffer:
537 dispatchEvent(MessageEvent::create(ArrayBuffer::create(binaryData->data( ), binaryData->size()), SecurityOrigin::create(m_url)->toString())); 540 dispatchEvent(MessageEvent::create(ArrayBuffer::create(binaryData->data( ), binaryData->size()), SecurityOrigin::create(m_url)->toString()));
538 break; 541 break;
539 } 542 }
540 } 543 }
541 544
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 if (payloadSize >= minimumPayloadSizeWithEightByteExtendedPayloadLength) 602 if (payloadSize >= minimumPayloadSizeWithEightByteExtendedPayloadLength)
600 overhead += 8; 603 overhead += 8;
601 else if (payloadSize >= minimumPayloadSizeWithTwoByteExtendedPayloadLength) 604 else if (payloadSize >= minimumPayloadSizeWithTwoByteExtendedPayloadLength)
602 overhead += 2; 605 overhead += 2;
603 return overhead; 606 return overhead;
604 } 607 }
605 608
606 } // namespace WebCore 609 } // namespace WebCore
607 610
608 #endif 611 #endif
OLDNEW
« no previous file with comments | « WebCore/Modules/indexeddb/IDBObjectStore.cpp ('k') | WebCore/Modules/websockets/WebSocketChannel.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698