Ignore empty data in DataChannel::Send to match FF's behavior.

BUG=crbug/395205
R=pthatcher@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/16949004

git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@6742 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/app/webrtc/datachannel.cc b/app/webrtc/datachannel.cc
index af4fb24..d98f8be 100644
--- a/app/webrtc/datachannel.cc
+++ b/app/webrtc/datachannel.cc
@@ -195,6 +195,14 @@
   if (state_ != kOpen) {
     return false;
   }
+
+  // TODO(jiayl): the spec is unclear about if the remote side should get the
+  // onmessage event. We need to figure out the expected behavior and change the
+  // code accordingly.
+  if (buffer.size() == 0) {
+    return true;
+  }
+
   // If the queue is non-empty, we're waiting for SignalReadyToSend,
   // so just add to the end of the queue and keep waiting.
   if (!queued_send_data_.Empty()) {
diff --git a/app/webrtc/datachannel_unittest.cc b/app/webrtc/datachannel_unittest.cc
index 6f223fe..ef4d26f 100644
--- a/app/webrtc/datachannel_unittest.cc
+++ b/app/webrtc/datachannel_unittest.cc
@@ -410,3 +410,16 @@
   EXPECT_EQ(webrtc::DataChannelInterface::kClosed,
             webrtc_data_channel_->state());
 }
+
+// Tests that sending empty data returns no error and keeps the channel open.
+TEST_F(SctpDataChannelTest, SendEmptyData) {
+  webrtc_data_channel_->SetSctpSid(1);
+  SetChannelReady();
+  EXPECT_EQ(webrtc::DataChannelInterface::kOpen,
+            webrtc_data_channel_->state());
+
+  webrtc::DataBuffer buffer("");
+  EXPECT_TRUE(webrtc_data_channel_->Send(buffer));
+  EXPECT_EQ(webrtc::DataChannelInterface::kOpen,
+            webrtc_data_channel_->state());
+}
diff --git a/app/webrtc/test/fakedatachannelprovider.h b/app/webrtc/test/fakedatachannelprovider.h
index 053b3ac..5859cdb 100644
--- a/app/webrtc/test/fakedatachannelprovider.h
+++ b/app/webrtc/test/fakedatachannelprovider.h
@@ -45,7 +45,7 @@
       return false;
     }
 
-    if (transport_error_) {
+    if (transport_error_ || payload.length() == 0) {
       *result = cricket::SDR_ERROR;
       return false;
     }