Index: content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
index 34a949b750d9181e6f154e2032cf1fef8db721cb..fb5594e2a1102dd88cf062b6a35ca26af679d64d 100644 |
--- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
@@ -656,8 +656,6 @@ void PeerConnectionDependencyFactory::TryScheduleStunProbeTrial() { |
if (!cmd_line->HasSwitch(switches::kWebRtcStunProbeTrialParameter)) |
return; |
- GetPcFactory(); |
- |
// The underneath IPC channel has to be connected before sending any IPC |
// message. |
if (!p2p_socket_dispatcher_->connected()) { |
@@ -669,6 +667,12 @@ void PeerConnectionDependencyFactory::TryScheduleStunProbeTrial() { |
return; |
} |
+ // GetPcFactory could trigger an IPC message. If done before |
+ // |p2p_socket_dispatcher_| is connected, that'll put the |
+ // |p2p_socket_dispatcher_| in a bad state such that no other IPC message can |
+ // be processed. |
+ GetPcFactory(); |
+ |
const std::string params = |
cmd_line->GetSwitchValueASCII(switches::kWebRtcStunProbeTrialParameter); |
@@ -682,10 +686,10 @@ void PeerConnectionDependencyFactory::TryScheduleStunProbeTrial() { |
void PeerConnectionDependencyFactory::StartStunProbeTrialOnWorkerThread( |
const std::string& params) { |
+ DCHECK(network_manager_); |
DCHECK(chrome_worker_thread_.task_runner()->BelongsToCurrentThread()); |
- rtc::NetworkManager::NetworkList networks; |
- network_manager_->GetNetworks(&networks); |
- stun_prober_ = StartStunProbeTrial(networks, params, socket_factory_.get()); |
+ stun_trial_.reset( |
+ new StunProberTrial(network_manager_, params, socket_factory_.get())); |
} |
void PeerConnectionDependencyFactory::CreateIpcNetworkManagerOnWorkerThread( |