summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbemasc <bemasc@chromium.org>2015-07-31 06:48:26 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-31 13:49:02 +0000
commit2a87dfb6fd90b181bcd9f833ced67985f136e847 (patch)
tree8f1e9ce56fdeddf1c34b352b39f0cd8f4bd5078d
parentfd98e2fd7bb864d173d1f0b82e2449a35e5a429a (diff)
downloadchromium_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}
-rw-r--r--components/test_runner/mock_webrtc_data_channel_handler.h5
-rw-r--r--content/renderer/media/rtc_data_channel_handler.cc32
-rw-r--r--content/renderer/media/rtc_data_channel_handler.h3
-rw-r--r--content/renderer/media/rtc_data_channel_handler_unittest.cc1
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 {}