Update talk to 55821645.

TEST=try bots
R=mallinath@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5053 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/app/webrtc/datachannel_unittest.cc b/talk/app/webrtc/datachannel_unittest.cc
index 4d66907..5d29811 100644
--- a/talk/app/webrtc/datachannel_unittest.cc
+++ b/talk/app/webrtc/datachannel_unittest.cc
@@ -26,56 +26,56 @@
  */
 
 #include "talk/app/webrtc/datachannel.h"
+#include "talk/app/webrtc/test/fakedatachannelprovider.h"
 #include "talk/base/gunit.h"
 
 using webrtc::DataChannel;
 
-class FakeDataChannelClient : public webrtc::DataChannelProviderInterface {
- public:
-  FakeDataChannelClient() : send_blocked_(false) {}
-  virtual ~FakeDataChannelClient() {}
-
-  virtual bool SendData(const cricket::SendDataParams& params,
-                        const talk_base::Buffer& payload,
-                        cricket::SendDataResult* result) OVERRIDE {
-    if (send_blocked_) {
-      *result = cricket::SDR_BLOCK;
-      return false;
-    }
-    last_send_data_params_ = params;
-    return true;
-  }
-  virtual bool ConnectDataChannel(DataChannel* data_channel) OVERRIDE {
-    return true;
-  }
-  virtual void DisconnectDataChannel(DataChannel* data_channel) OVERRIDE {}
-
-  void set_send_blocked(bool blocked) { send_blocked_ = blocked; }
-  cricket::SendDataParams last_send_data_params() {
-      return last_send_data_params_;
-  }
-
- private:
-  cricket::SendDataParams last_send_data_params_;
-  bool send_blocked_;
-};
-
 class SctpDataChannelTest : public testing::Test {
  protected:
   SctpDataChannelTest()
       : webrtc_data_channel_(
-          DataChannel::Create(&client_, cricket::DCT_SCTP, "test", &init_)) {
+          DataChannel::Create(&provider_, cricket::DCT_SCTP, "test", &init_)) {
   }
 
   void SetChannelReady() {
+    webrtc_data_channel_->OnTransportChannelCreated();
+    if (webrtc_data_channel_->id() < 0) {
+      webrtc_data_channel_->SetSctpSid(0);
+    }
     webrtc_data_channel_->OnChannelReady(true);
   }
 
   webrtc::DataChannelInit init_;
-  FakeDataChannelClient client_;
+  FakeDataChannelProvider provider_;
   talk_base::scoped_refptr<DataChannel> webrtc_data_channel_;
 };
 
+// Verifies that the data channel is connected to the transport after creation.
+TEST_F(SctpDataChannelTest, ConnectedToTransportOnCreated) {
+  EXPECT_TRUE(provider_.IsConnected(webrtc_data_channel_.get()));
+  // The sid is not set yet, so it should not have added the streams.
+  EXPECT_FALSE(provider_.IsSendStreamAdded(webrtc_data_channel_->id()));
+  EXPECT_FALSE(provider_.IsRecvStreamAdded(webrtc_data_channel_->id()));
+
+  webrtc_data_channel_->SetSctpSid(0);
+  EXPECT_TRUE(provider_.IsSendStreamAdded(webrtc_data_channel_->id()));
+  EXPECT_TRUE(provider_.IsRecvStreamAdded(webrtc_data_channel_->id()));
+}
+
+// Verifies that the data channel is connected to the transport if the transport
+// is not available initially and becomes available later.
+TEST_F(SctpDataChannelTest, ConnectedAfterTransportBecomesAvailable) {
+  provider_.set_transport_available(false);
+  talk_base::scoped_refptr<DataChannel> dc = DataChannel::Create(
+      &provider_, cricket::DCT_SCTP, "test1", &init_);
+  EXPECT_FALSE(provider_.IsConnected(dc.get()));
+
+  provider_.set_transport_available(true);
+  dc->OnTransportChannelCreated();
+  EXPECT_TRUE(provider_.IsConnected(dc.get()));
+}
+
 // Tests the state of the data channel.
 TEST_F(SctpDataChannelTest, StateTransition) {
   EXPECT_EQ(webrtc::DataChannelInterface::kConnecting,
@@ -85,6 +85,8 @@
   webrtc_data_channel_->Close();
   EXPECT_EQ(webrtc::DataChannelInterface::kClosed,
             webrtc_data_channel_->state());
+  // Verifies that it's disconnected from the transport.
+  EXPECT_FALSE(provider_.IsConnected(webrtc_data_channel_.get()));
 }
 
 // Tests that DataChannel::buffered_amount() is correct after the channel is
@@ -96,7 +98,7 @@
 
   EXPECT_EQ(0U, webrtc_data_channel_->buffered_amount());
 
-  client_.set_send_blocked(true);
+  provider_.set_send_blocked(true);
 
   const int number_of_packets = 3;
   for (int i = 0; i < number_of_packets; ++i) {
@@ -111,18 +113,22 @@
 TEST_F(SctpDataChannelTest, QueuedDataSentWhenUnblocked) {
   SetChannelReady();
   webrtc::DataBuffer buffer("abcd");
-  client_.set_send_blocked(true);
+  provider_.set_send_blocked(true);
   EXPECT_TRUE(webrtc_data_channel_->Send(buffer));
 
-  client_.set_send_blocked(false);
+  provider_.set_send_blocked(false);
   SetChannelReady();
   EXPECT_EQ(0U, webrtc_data_channel_->buffered_amount());
 }
 
 // Tests that the queued control message is sent when channel is ready.
-TEST_F(SctpDataChannelTest, QueuedControlMessageSent) {
-  talk_base::Buffer* buffer = new talk_base::Buffer("abcd", 4);
-  EXPECT_TRUE(webrtc_data_channel_->SendControl(buffer));
+TEST_F(SctpDataChannelTest, OpenMessageSent) {
+  // Initially the id is unassigned.
+  EXPECT_EQ(-1, webrtc_data_channel_->id());
+
   SetChannelReady();
-  EXPECT_EQ(cricket::DMT_CONTROL, client_.last_send_data_params().type);
+  EXPECT_GE(webrtc_data_channel_->id(), 0);
+  EXPECT_EQ(cricket::DMT_CONTROL, provider_.last_send_data_params().type);
+  EXPECT_EQ(provider_.last_send_data_params().ssrc,
+            static_cast<uint32>(webrtc_data_channel_->id()));
 }