| Index: webrtc/p2p/base/dtlstransportchannel_unittest.cc
 | 
| diff --git a/webrtc/p2p/base/dtlstransportchannel_unittest.cc b/webrtc/p2p/base/dtlstransportchannel_unittest.cc
 | 
| index 95696e222c500f54cd44b23df3a218b52cf19ad2..10640f99e3c130a73ab1f579a3f053dcaa119e9f 100644
 | 
| --- a/webrtc/p2p/base/dtlstransportchannel_unittest.cc
 | 
| +++ b/webrtc/p2p/base/dtlstransportchannel_unittest.cc
 | 
| @@ -11,7 +11,7 @@
 | 
|  #include <set>
 | 
|  
 | 
|  #include "webrtc/p2p/base/dtlstransport.h"
 | 
| -#include "webrtc/p2p/base/faketransportcontroller.h"
 | 
| +#include "webrtc/p2p/base/fakesession.h"
 | 
|  #include "webrtc/base/common.h"
 | 
|  #include "webrtc/base/dscp.h"
 | 
|  #include "webrtc/base/gunit.h"
 | 
| @@ -21,6 +21,7 @@
 | 
|  #include "webrtc/base/sslidentity.h"
 | 
|  #include "webrtc/base/sslstreamadapter.h"
 | 
|  #include "webrtc/base/stringutils.h"
 | 
| +#include "webrtc/base/thread.h"
 | 
|  
 | 
|  #define MAYBE_SKIP_TEST(feature)                    \
 | 
|    if (!(rtc::SSLStreamAdapter::feature())) {  \
 | 
| @@ -44,14 +45,19 @@
 | 
|  
 | 
|  class DtlsTestClient : public sigslot::has_slots<> {
 | 
|   public:
 | 
| -  DtlsTestClient(const std::string& name)
 | 
| -      : name_(name),
 | 
| -        packet_size_(0),
 | 
| -        use_dtls_srtp_(false),
 | 
| -        ssl_max_version_(rtc::SSL_PROTOCOL_DTLS_10),
 | 
| -        negotiated_dtls_(false),
 | 
| -        received_dtls_client_hello_(false),
 | 
| -        received_dtls_server_hello_(false) {}
 | 
| +  DtlsTestClient(const std::string& name,
 | 
| +                 rtc::Thread* signaling_thread,
 | 
| +                 rtc::Thread* worker_thread) :
 | 
| +      name_(name),
 | 
| +      signaling_thread_(signaling_thread),
 | 
| +      worker_thread_(worker_thread),
 | 
| +      packet_size_(0),
 | 
| +      use_dtls_srtp_(false),
 | 
| +      ssl_max_version_(rtc::SSL_PROTOCOL_DTLS_10),
 | 
| +      negotiated_dtls_(false),
 | 
| +      received_dtls_client_hello_(false),
 | 
| +      received_dtls_server_hello_(false) {
 | 
| +  }
 | 
|    void CreateCertificate(rtc::KeyType key_type) {
 | 
|      certificate_ = rtc::RTCCertificate::Create(
 | 
|          rtc::scoped_ptr<rtc::SSLIdentity>(
 | 
| @@ -65,12 +71,13 @@
 | 
|      use_dtls_srtp_ = true;
 | 
|    }
 | 
|    void SetupMaxProtocolVersion(rtc::SSLProtocolVersion version) {
 | 
| -    ASSERT(!transport_);
 | 
| +    ASSERT(transport_.get() == NULL);
 | 
|      ssl_max_version_ = version;
 | 
|    }
 | 
|    void SetupChannels(int count, cricket::IceRole role) {
 | 
|      transport_.reset(new cricket::DtlsTransport<cricket::FakeTransport>(
 | 
| -        "dtls content name", nullptr, certificate_));
 | 
| +        signaling_thread_, worker_thread_, "dtls content name", nullptr,
 | 
| +        certificate_));
 | 
|      transport_->SetAsync(true);
 | 
|      transport_->SetIceRole(role);
 | 
|      transport_->SetIceTiebreaker(
 | 
| @@ -111,8 +118,8 @@
 | 
|    void Negotiate(DtlsTestClient* peer, cricket::ContentAction action,
 | 
|                   ConnectionRole local_role, ConnectionRole remote_role,
 | 
|                   int flags) {
 | 
| -    Negotiate(certificate_, certificate_ ? peer->certificate_ : nullptr, action,
 | 
| -              local_role, remote_role, flags);
 | 
| +    Negotiate(certificate_, certificate_ ? peer->certificate_ : nullptr,
 | 
| +              action, local_role, remote_role, flags);
 | 
|    }
 | 
|  
 | 
|    // Allow any DTLS configuration to be specified (including invalid ones).
 | 
| @@ -156,18 +163,18 @@
 | 
|      }
 | 
|  
 | 
|      cricket::TransportDescription local_desc(
 | 
| -        std::vector<std::string>(), kIceUfrag1, kIcePwd1, cricket::ICEMODE_FULL,
 | 
| -        local_role,
 | 
| -        // If remote if the offerer and has no DTLS support, answer will be
 | 
| +        std::vector<std::string>(), kIceUfrag1, kIcePwd1,
 | 
| +        cricket::ICEMODE_FULL, local_role,
 | 
| +         // If remote if the offerer and has no DTLS support, answer will be
 | 
|          // without any fingerprint.
 | 
| -        (action == cricket::CA_ANSWER && !remote_cert)
 | 
| -            ? nullptr
 | 
| -            : local_fingerprint.get(),
 | 
| +        (action == cricket::CA_ANSWER && !remote_cert) ?
 | 
| +            NULL : local_fingerprint.get(),
 | 
|          cricket::Candidates());
 | 
|  
 | 
|      cricket::TransportDescription remote_desc(
 | 
| -        std::vector<std::string>(), kIceUfrag1, kIcePwd1, cricket::ICEMODE_FULL,
 | 
| -        remote_role, remote_fingerprint.get(), cricket::Candidates());
 | 
| +        std::vector<std::string>(), kIceUfrag1, kIcePwd1,
 | 
| +        cricket::ICEMODE_FULL, remote_role, remote_fingerprint.get(),
 | 
| +        cricket::Candidates());
 | 
|  
 | 
|      bool expect_success = (flags & NF_EXPECT_FAILURE) ? false : true;
 | 
|      // If |expect_success| is false, expect SRTD or SLTD to fail when
 | 
| @@ -192,9 +199,7 @@
 | 
|      return true;
 | 
|    }
 | 
|  
 | 
| -  bool all_channels_writable() const {
 | 
| -    return transport_->all_channels_writable();
 | 
| -  }
 | 
| +  bool writable() const { return transport_->writable(); }
 | 
|  
 | 
|    void CheckRole(rtc::SSLRole role) {
 | 
|      if (role == rtc::SSL_CLIENT) {
 | 
| @@ -332,8 +337,8 @@
 | 
|      ASSERT_TRUE(VerifyPacket(data, size, &packet_num));
 | 
|      received_.insert(packet_num);
 | 
|      // Only DTLS-SRTP packets should have the bypass flag set.
 | 
| -    int expected_flags =
 | 
| -        (certificate_ && IsRtpLeadByte(data[0])) ? cricket::PF_SRTP_BYPASS : 0;
 | 
| +    int expected_flags = (certificate_ && IsRtpLeadByte(data[0])) ?
 | 
| +        cricket::PF_SRTP_BYPASS : 0;
 | 
|      ASSERT_EQ(expected_flags, flags);
 | 
|    }
 | 
|  
 | 
| @@ -367,6 +372,8 @@
 | 
|  
 | 
|   private:
 | 
|    std::string name_;
 | 
| +  rtc::Thread* signaling_thread_;
 | 
| +  rtc::Thread* worker_thread_;
 | 
|    rtc::scoped_refptr<rtc::RTCCertificate> certificate_;
 | 
|    rtc::scoped_ptr<cricket::FakeTransport> transport_;
 | 
|    std::vector<cricket::DtlsTransportChannelWrapper*> channels_;
 | 
| @@ -382,13 +389,16 @@
 | 
|  
 | 
|  class DtlsTransportChannelTest : public testing::Test {
 | 
|   public:
 | 
| -  DtlsTransportChannelTest()
 | 
| -      : client1_("P1"),
 | 
| -        client2_("P2"),
 | 
| -        channel_ct_(1),
 | 
| -        use_dtls_(false),
 | 
| -        use_dtls_srtp_(false),
 | 
| -        ssl_expected_version_(rtc::SSL_PROTOCOL_DTLS_10) {}
 | 
| +  DtlsTransportChannelTest() :
 | 
| +      client1_("P1", rtc::Thread::Current(),
 | 
| +               rtc::Thread::Current()),
 | 
| +      client2_("P2", rtc::Thread::Current(),
 | 
| +               rtc::Thread::Current()),
 | 
| +      channel_ct_(1),
 | 
| +      use_dtls_(false),
 | 
| +      use_dtls_srtp_(false),
 | 
| +      ssl_expected_version_(rtc::SSL_PROTOCOL_DTLS_10) {
 | 
| +  }
 | 
|  
 | 
|    void SetChannelCount(size_t channel_ct) {
 | 
|      channel_ct_ = static_cast<int>(channel_ct);
 | 
| @@ -430,10 +440,8 @@
 | 
|      if (!rv)
 | 
|        return false;
 | 
|  
 | 
| -    EXPECT_TRUE_WAIT(
 | 
| -        client1_.all_channels_writable() && client2_.all_channels_writable(),
 | 
| -        10000);
 | 
| -    if (!client1_.all_channels_writable() || !client2_.all_channels_writable())
 | 
| +    EXPECT_TRUE_WAIT(client1_.writable() && client2_.writable(), 10000);
 | 
| +    if (!client1_.writable() || !client2_.writable())
 | 
|        return false;
 | 
|  
 | 
|      // Check that we used the right roles.
 | 
| @@ -810,9 +818,7 @@
 | 
|                cricket::CONNECTIONROLE_ACTIVE, NF_REOFFER);
 | 
|    bool rv = client1_.Connect(&client2_);
 | 
|    EXPECT_TRUE(rv);
 | 
| -  EXPECT_TRUE_WAIT(
 | 
| -      client1_.all_channels_writable() && client2_.all_channels_writable(),
 | 
| -      10000);
 | 
| +  EXPECT_TRUE_WAIT(client1_.writable() && client2_.writable(), 10000);
 | 
|  
 | 
|    TestTransfer(0, 1000, 100, true);
 | 
|    TestTransfer(1, 1000, 100, true);
 | 
| @@ -831,8 +837,8 @@
 | 
|  
 | 
|    // After negotiation, each side has a distinct local certificate, but still no
 | 
|    // remote certificate, because connection has not yet occurred.
 | 
| -  ASSERT_TRUE(client1_.transport()->GetLocalCertificate(&certificate1));
 | 
| -  ASSERT_TRUE(client2_.transport()->GetLocalCertificate(&certificate2));
 | 
| +  ASSERT_TRUE(client1_.transport()->GetCertificate(&certificate1));
 | 
| +  ASSERT_TRUE(client2_.transport()->GetCertificate(&certificate2));
 | 
|    ASSERT_NE(certificate1->ssl_certificate().ToPEMString(),
 | 
|              certificate2->ssl_certificate().ToPEMString());
 | 
|    ASSERT_FALSE(
 | 
| @@ -855,8 +861,8 @@
 | 
|    rtc::scoped_ptr<rtc::SSLCertificate> remote_cert2;
 | 
|  
 | 
|    // After connection, each side has a distinct local certificate.
 | 
| -  ASSERT_TRUE(client1_.transport()->GetLocalCertificate(&certificate1));
 | 
| -  ASSERT_TRUE(client2_.transport()->GetLocalCertificate(&certificate2));
 | 
| +  ASSERT_TRUE(client1_.transport()->GetCertificate(&certificate1));
 | 
| +  ASSERT_TRUE(client2_.transport()->GetCertificate(&certificate2));
 | 
|    ASSERT_NE(certificate1->ssl_certificate().ToPEMString(),
 | 
|              certificate2->ssl_certificate().ToPEMString());
 | 
|  
 | 
| 
 |