| Index: webrtc/api/peerconnectionfactory.cc | 
| diff --git a/webrtc/api/peerconnectionfactory.cc b/webrtc/api/peerconnectionfactory.cc | 
| index 8c8fb6f8c05b33cfcaf0eb81578f886fb81a716a..e5ab0ff13c7a501664f2626f2a962358fd5c3544 100644 | 
| --- a/webrtc/api/peerconnectionfactory.cc | 
| +++ b/webrtc/api/peerconnectionfactory.cc | 
| @@ -74,19 +74,17 @@ CreatePeerConnectionFactory() { | 
| pc_factory); | 
| } | 
|  | 
| -rtc::scoped_refptr<PeerConnectionFactoryInterface> | 
| -CreatePeerConnectionFactory( | 
| +rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory( | 
| +    rtc::Thread* network_thread, | 
| rtc::Thread* worker_thread, | 
| rtc::Thread* signaling_thread, | 
| AudioDeviceModule* default_adm, | 
| cricket::WebRtcVideoEncoderFactory* encoder_factory, | 
| cricket::WebRtcVideoDecoderFactory* decoder_factory) { | 
| rtc::scoped_refptr<PeerConnectionFactory> pc_factory( | 
| -      new rtc::RefCountedObject<PeerConnectionFactory>(worker_thread, | 
| -                                                       signaling_thread, | 
| -                                                       default_adm, | 
| -                                                       encoder_factory, | 
| -                                                       decoder_factory)); | 
| +      new rtc::RefCountedObject<PeerConnectionFactory>( | 
| +          network_thread, worker_thread, signaling_thread, default_adm, | 
| +          encoder_factory, decoder_factory)); | 
|  | 
| // Call Initialize synchronously but make sure its executed on | 
| // |signaling_thread|. | 
| @@ -104,16 +102,19 @@ CreatePeerConnectionFactory( | 
| PeerConnectionFactory::PeerConnectionFactory() | 
| : owns_ptrs_(true), | 
| wraps_current_thread_(false), | 
| -      signaling_thread_(rtc::ThreadManager::Instance()->CurrentThread()), | 
| -      worker_thread_(new rtc::Thread) { | 
| +      network_thread_(rtc::Thread::CreateWithSocketServer().release()), | 
| +      worker_thread_(rtc::Thread::Create().release()), | 
| +      signaling_thread_(rtc::Thread::Current()) { | 
| if (!signaling_thread_) { | 
| signaling_thread_ = rtc::ThreadManager::Instance()->WrapCurrentThread(); | 
| wraps_current_thread_ = true; | 
| } | 
| +  network_thread_->Start(); | 
| worker_thread_->Start(); | 
| } | 
|  | 
| PeerConnectionFactory::PeerConnectionFactory( | 
| +    rtc::Thread* network_thread, | 
| rtc::Thread* worker_thread, | 
| rtc::Thread* signaling_thread, | 
| AudioDeviceModule* default_adm, | 
| @@ -121,13 +122,15 @@ PeerConnectionFactory::PeerConnectionFactory( | 
| cricket::WebRtcVideoDecoderFactory* video_decoder_factory) | 
| : owns_ptrs_(false), | 
| wraps_current_thread_(false), | 
| -      signaling_thread_(signaling_thread), | 
| +      network_thread_(network_thread), | 
| worker_thread_(worker_thread), | 
| +      signaling_thread_(signaling_thread), | 
| default_adm_(default_adm), | 
| video_encoder_factory_(video_encoder_factory), | 
| video_decoder_factory_(video_decoder_factory) { | 
| -  ASSERT(worker_thread != NULL); | 
| -  ASSERT(signaling_thread != NULL); | 
| +  RTC_DCHECK(network_thread); | 
| +  RTC_DCHECK(worker_thread); | 
| +  RTC_DCHECK(signaling_thread); | 
| // TODO: Currently there is no way creating an external adm in | 
| // libjingle source tree. So we can 't currently assert if this is NULL. | 
| // ASSERT(default_adm != NULL); | 
| @@ -148,6 +151,7 @@ PeerConnectionFactory::~PeerConnectionFactory() { | 
| if (wraps_current_thread_) | 
| rtc::ThreadManager::Instance()->UnwrapCurrentThread(); | 
| delete worker_thread_; | 
| +    delete network_thread_; | 
| } | 
| } | 
|  | 
| @@ -161,7 +165,7 @@ bool PeerConnectionFactory::Initialize() { | 
| } | 
|  | 
| default_socket_factory_.reset( | 
| -      new rtc::BasicPacketSocketFactory(worker_thread_)); | 
| +      new rtc::BasicPacketSocketFactory(network_thread_)); | 
| if (!default_socket_factory_) { | 
| return false; | 
| } | 
| @@ -172,17 +176,16 @@ bool PeerConnectionFactory::Initialize() { | 
| worker_thread_->Invoke<cricket::MediaEngineInterface*>(rtc::Bind( | 
| &PeerConnectionFactory::CreateMediaEngine_w, this)); | 
|  | 
| -  rtc::Thread* const network_thread = worker_thread_; | 
| channel_manager_.reset(new cricket::ChannelManager( | 
| -      media_engine, worker_thread_, network_thread)); | 
| +      media_engine, worker_thread_, network_thread_)); | 
|  | 
| channel_manager_->SetVideoRtxEnabled(true); | 
| if (!channel_manager_->Init()) { | 
| return false; | 
| } | 
|  | 
| -  dtls_identity_store_ = new RefCountedDtlsIdentityStore( | 
| -      signaling_thread_, worker_thread_); | 
| +  dtls_identity_store_ = | 
| +      new RefCountedDtlsIdentityStore(signaling_thread_, network_thread_); | 
|  | 
| return true; | 
| } | 
| @@ -337,6 +340,10 @@ rtc::Thread* PeerConnectionFactory::worker_thread() { | 
| return worker_thread_; | 
| } | 
|  | 
| +rtc::Thread* PeerConnectionFactory::network_thread() { | 
| +  return network_thread_; | 
| +} | 
| + | 
| cricket::MediaEngineInterface* PeerConnectionFactory::CreateMediaEngine_w() { | 
| ASSERT(worker_thread_ == rtc::Thread::Current()); | 
| return cricket::WebRtcMediaEngineFactory::Create( | 
|  |