Changeset 263655 in webkit
- Timestamp:
- Jun 29, 2020, 4:50:04 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r263651 r263655 1 2020-06-29 Youenn Fablet <youenn@apple.com> 2 3 RTCDataChannel.bufferedAmount should stay the same even if channel is closed 4 https://bugs.webkit.org/show_bug.cgi?id=213698 5 6 Reviewed by Darin Adler. 7 8 * webrtc/datachannel/bufferedAmount-afterClose-expected.txt: Added. 9 * webrtc/datachannel/bufferedAmount-afterClose.html: Added. 10 1 11 2020-06-29 Youenn Fablet <youenn@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r263654 r263655 1 2020-06-29 Youenn Fablet <youenn@apple.com> 2 3 RTCDataChannel.bufferedAmount should stay the same even if channel is closed 4 https://bugs.webkit.org/show_bug.cgi?id=213698 5 6 Reviewed by Darin Adler. 7 8 bufferedAmount was set back to zero when closing. 9 Instead, we should keep the value in RTCDataChannel and update it either when sending data 10 or being notified or some data getting sent. 11 12 Test: webrtc/datachannel/bufferedAmount-afterClose.html 13 14 * Modules/mediastream/RTCDataChannel.cpp: 15 (WebCore::RTCDataChannel::bufferedAmountIsDecreasing): 16 * platform/mock/RTCDataChannelHandlerMock.h: 17 1 18 2020-06-29 Antti Koivisto <antti@apple.com> 2 19 -
trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp
r262999 r263655 91 91 } 92 92 93 size_t RTCDataChannel::bufferedAmount() const94 {95 // FIXME: We should compute our own bufferedAmount and not count on m_handler which is made null at closing time.96 if (m_stopped)97 return 0;98 return m_handler->bufferedAmount();99 }100 101 93 const AtomString& RTCDataChannel::binaryType() const 102 94 { … … 130 122 return Exception { InvalidStateError }; 131 123 124 m_bufferedAmount += data.utf8().length(); 132 125 m_messageQueue.enqueue(data); 133 126 return { }; … … 139 132 return Exception { InvalidStateError }; 140 133 134 m_bufferedAmount += data.byteLength(); 141 135 m_messageQueue.enqueue(data, 0, data.byteLength()); 142 136 return { }; … … 148 142 return Exception { InvalidStateError }; 149 143 144 m_bufferedAmount += data.byteLength(); 150 145 m_messageQueue.enqueue(*data.unsharedBuffer(), data.byteOffset(), data.byteLength()); 151 146 return { }; … … 157 152 return Exception { InvalidStateError }; 158 153 154 m_bufferedAmount += blob.size(); 159 155 m_messageQueue.enqueue(blob); 160 156 return { }; … … 220 216 void RTCDataChannel::bufferedAmountIsDecreasing(size_t amount) 221 217 { 222 if (amount <= m_bufferedAmountLowThreshold) 218 auto previousBufferedAmount = m_bufferedAmount; 219 m_bufferedAmount -= amount; 220 if (previousBufferedAmount > m_bufferedAmountLowThreshold && m_bufferedAmount <= m_bufferedAmountLowThreshold) 223 221 scheduleDispatchEvent(Event::create(eventNames().bufferedamountlowEvent, Event::CanBubble::No, Event::IsCancelable::No)); 224 222 } -
trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h
r252889 r263655 62 62 String label() const { return m_label; } 63 63 RTCDataChannelState readyState() const {return m_readyState; } 64 size_t bufferedAmount() const ;64 size_t bufferedAmount() const { return m_bufferedAmount; } 65 65 size_t bufferedAmountLowThreshold() const { return m_bufferedAmountLowThreshold; } 66 66 void setBufferedAmountLowThreshold(size_t value) { m_bufferedAmountLowThreshold = value; } … … 114 114 String m_label; 115 115 RTCDataChannelInit m_options; 116 size_t m_bufferedAmount { 0 }; 116 117 size_t m_bufferedAmountLowThreshold { 0 }; 117 118 -
trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp
r249722 r263655 154 154 } 155 155 156 void LibWebRTCDataChannelHandler::OnBufferedAmountChange(uint64_t previousAmount)156 void LibWebRTCDataChannelHandler::OnBufferedAmountChange(uint64_t amount) 157 157 { 158 158 if (!m_client) 159 159 return; 160 160 161 if (previousAmount <= m_channel->buffered_amount()) 162 return; 163 164 callOnMainThread([protectedClient = makeRef(*m_client), amount = m_channel->buffered_amount()] { 161 callOnMainThread([protectedClient = makeRef(*m_client), amount] { 165 162 protectedClient->bufferedAmountIsDecreasing(static_cast<size_t>(amount)); 166 163 }); -
trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h
r252472 r263655 64 64 bool sendRawData(const char*, size_t) final; 65 65 void close() final; 66 size_t bufferedAmount() const final { return static_cast<size_t>(m_channel->buffered_amount()); }67 66 68 67 // webrtc::DataChannelObserver API -
trunk/Source/WebCore/fileapi/BlobLoader.h
r262999 r263655 41 41 WTF_MAKE_FAST_ALLOCATED; 42 42 public: 43 BlobLoader(Document*, Blob&, CompletionHandler<void()>&&);43 BlobLoader(Document*, Blob&, Function<void()>&&); 44 44 ~BlobLoader(); 45 45 … … 59 59 RefPtr<JSC::ArrayBuffer> m_buffer; 60 60 Optional<ExceptionCode> m_errorCode; 61 CompletionHandler<void()> m_completionHandler;61 Function<void()> m_completionHandler; 62 62 }; 63 63 64 inline BlobLoader::BlobLoader(WebCore::Document* document, Blob& blob, CompletionHandler<void()>&& completionHandler)64 inline BlobLoader::BlobLoader(WebCore::Document* document, Blob& blob, Function<void()>&& completionHandler) 65 65 : m_loader(makeUnique<FileReaderLoader>(FileReaderLoader::ReadAsArrayBuffer, this)) 66 66 , m_completionHandler(WTFMove(completionHandler)) … … 73 73 if (m_loader) 74 74 m_loader->cancel(); 75 // FIXME: Call m_completionHandler to migrate it from a Function to a CompletionHandler. 75 76 } 76 77 -
trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandler.h
r239427 r263655 53 53 virtual bool sendRawData(const char*, size_t) = 0; 54 54 virtual void close() = 0; 55 56 virtual size_t bufferedAmount() const = 0;57 55 }; 58 56 -
trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.h
r248762 r263655 44 44 bool sendRawData(const char*, size_t) final; 45 45 void close() final; 46 size_t bufferedAmount() const final { return 0; }47 46 48 47 RTCDataChannelHandlerClient* m_client { nullptr };
Note:
See TracChangeset
for help on using the changeset viewer.