diff options
author | bemasc <bemasc@chromium.org> | 2015-07-31 06:48:26 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-31 13:49:02 +0000 |
commit | 2a87dfb6fd90b181bcd9f833ced67985f136e847 (patch) | |
tree | 8f1e9ce56fdeddf1c34b352b39f0cd8f4bd5078d | |
parent | fd98e2fd7bb864d173d1f0b82e2449a35e5a429a (diff) | |
download | chromium_src-2a87dfb6fd90b181bcd9f833ced67985f136e847.zip chromium_src-2a87dfb6fd90b181bcd9f833ced67985f136e847.tar.gz chromium_src-2a87dfb6fd90b181bcd9f833ced67985f136e847.tar.bz2 |
Initial version of onbufferedamountlow
BUG=496700
Review URL: https://codereview.chromium.org/1161133005
Cr-Commit-Position: refs/heads/master@{#341327}
4 files changed, 38 insertions, 3 deletions
diff --git a/components/test_runner/mock_webrtc_data_channel_handler.h b/components/test_runner/mock_webrtc_data_channel_handler.h index 46df5e67..e23a61b 100644 --- a/components/test_runner/mock_webrtc_data_channel_handler.h +++ b/components/test_runner/mock_webrtc_data_channel_handler.h @@ -33,9 +33,8 @@ class MockWebRTCDataChannelHandler : public blink::WebRTCDataChannelHandler { virtual blink::WebString protocol() const override; virtual bool negotiated() const override; virtual unsigned short id() const override; - // TODO(bemasc): Mark |state()| as |override| once https://codereview.chromium.org/782843003/ - // lands in Blink and rolls into Chromium. - virtual blink::WebRTCDataChannelHandlerClient::ReadyState state() const; + virtual blink::WebRTCDataChannelHandlerClient::ReadyState state() const + override; virtual unsigned long bufferedAmount() override; virtual bool sendStringData(const blink::WebString& data) override; virtual bool sendRawData(const char* data, size_t size) override; diff --git a/content/renderer/media/rtc_data_channel_handler.cc b/content/renderer/media/rtc_data_channel_handler.cc index fe990df..51fe9e6 100644 --- a/content/renderer/media/rtc_data_channel_handler.cc +++ b/content/renderer/media/rtc_data_channel_handler.cc @@ -83,6 +83,17 @@ void RtcDataChannelHandler::Observer::OnStateChange() { channel_->state())); } +void RtcDataChannelHandler::Observer::OnBufferedAmountChange( + uint64 previous_amount) { + // Optimization: Only post a task if the change is a decrease, because the web + // interface does not perform any action when there is an increase. + if (previous_amount > channel_->buffered_amount()) { + main_thread_->PostTask(FROM_HERE, base::Bind( + &RtcDataChannelHandler::Observer::OnBufferedAmountDecreaseImpl, this, + previous_amount)); + } +} + void RtcDataChannelHandler::Observer::OnMessage( const webrtc::DataBuffer& buffer) { // TODO(tommi): Figure out a way to transfer ownership of the buffer without @@ -100,6 +111,13 @@ void RtcDataChannelHandler::Observer::OnStateChangeImpl( handler_->OnStateChange(state); } +void RtcDataChannelHandler::Observer::OnBufferedAmountDecreaseImpl( + unsigned previous_amount) { + DCHECK(main_thread_->BelongsToCurrentThread()); + if (handler_) + handler_->OnBufferedAmountDecrease(previous_amount); +} + void RtcDataChannelHandler::Observer::OnMessageImpl( scoped_ptr<webrtc::DataBuffer> buffer) { DCHECK(main_thread_->BelongsToCurrentThread()); @@ -283,6 +301,20 @@ void RtcDataChannelHandler::OnStateChange( webkit_client_->didChangeReadyState(convertReadyState(state)); } +void RtcDataChannelHandler::OnBufferedAmountDecrease( + unsigned previous_amount) { + DCHECK(thread_checker_.CalledOnValidThread()); + DVLOG(1) << "OnBufferedAmountDecrease " << previous_amount; + + if (!webkit_client_) { + // If this happens, the web application will not get notified of changes. + NOTREACHED() << "WebRTCDataChannelHandlerClient not set."; + return; + } + + webkit_client_->didDecreaseBufferedAmount(previous_amount); +} + void RtcDataChannelHandler::OnMessage(scoped_ptr<webrtc::DataBuffer> buffer) { DCHECK(thread_checker_.CalledOnValidThread()); if (!webkit_client_) { diff --git a/content/renderer/media/rtc_data_channel_handler.h b/content/renderer/media/rtc_data_channel_handler.h index c1ae1336..f93eeca5 100644 --- a/content/renderer/media/rtc_data_channel_handler.h +++ b/content/renderer/media/rtc_data_channel_handler.h @@ -60,6 +60,7 @@ class CONTENT_EXPORT RtcDataChannelHandler private: void OnStateChange(webrtc::DataChannelInterface::DataState state); + void OnBufferedAmountDecrease(unsigned previous_amount); void OnMessage(scoped_ptr<webrtc::DataBuffer> buffer); void RecordMessageSent(size_t num_bytes); @@ -86,9 +87,11 @@ class CONTENT_EXPORT RtcDataChannelHandler // webrtc::DataChannelObserver implementation. void OnStateChange() override; + void OnBufferedAmountChange(uint64 previous_amount) override; void OnMessage(const webrtc::DataBuffer& buffer) override; void OnStateChangeImpl(webrtc::DataChannelInterface::DataState state); + void OnBufferedAmountDecreaseImpl(unsigned previous_amount); void OnMessageImpl(scoped_ptr<webrtc::DataBuffer> buffer); RtcDataChannelHandler* handler_; diff --git a/content/renderer/media/rtc_data_channel_handler_unittest.cc b/content/renderer/media/rtc_data_channel_handler_unittest.cc index e33dbbe..7087095 100644 --- a/content/renderer/media/rtc_data_channel_handler_unittest.cc +++ b/content/renderer/media/rtc_data_channel_handler_unittest.cc @@ -17,6 +17,7 @@ class MockDataChannelHandlerClient : MockDataChannelHandlerClient() : state_(ReadyStateConnecting) {} void didChangeReadyState(ReadyState state) override { state_ = state; } + void didDecreaseBufferedAmount(unsigned previous_amount) override {} void didReceiveStringData(const blink::WebString& s) override {} void didReceiveRawData(const char* data, size_t size) override {} void didDetectError() override {} |