OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" | 5 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 *thread = jingle_glue::JingleThreadWrapper::current(); | 649 *thread = jingle_glue::JingleThreadWrapper::current(); |
650 event->Signal(); | 650 event->Signal(); |
651 } | 651 } |
652 | 652 |
653 void PeerConnectionDependencyFactory::TryScheduleStunProbeTrial() { | 653 void PeerConnectionDependencyFactory::TryScheduleStunProbeTrial() { |
654 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); | 654 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); |
655 | 655 |
656 if (!cmd_line->HasSwitch(switches::kWebRtcStunProbeTrialParameter)) | 656 if (!cmd_line->HasSwitch(switches::kWebRtcStunProbeTrialParameter)) |
657 return; | 657 return; |
658 | 658 |
659 GetPcFactory(); | |
660 | |
661 // The underneath IPC channel has to be connected before sending any IPC | 659 // The underneath IPC channel has to be connected before sending any IPC |
662 // message. | 660 // message. |
663 if (!p2p_socket_dispatcher_->connected()) { | 661 if (!p2p_socket_dispatcher_->connected()) { |
664 base::MessageLoop::current()->PostDelayedTask( | 662 base::MessageLoop::current()->PostDelayedTask( |
665 FROM_HERE, | 663 FROM_HERE, |
666 base::Bind(&PeerConnectionDependencyFactory::TryScheduleStunProbeTrial, | 664 base::Bind(&PeerConnectionDependencyFactory::TryScheduleStunProbeTrial, |
667 base::Unretained(this)), | 665 base::Unretained(this)), |
668 base::TimeDelta::FromSeconds(1)); | 666 base::TimeDelta::FromSeconds(1)); |
669 return; | 667 return; |
670 } | 668 } |
671 | 669 |
| 670 // GetPcFactory could trigger an IPC message. If done before |
| 671 // |p2p_socket_dispatcher_| is connected, that'll put the |
| 672 // |p2p_socket_dispatcher_| in a bad state such that no other IPC message can |
| 673 // be processed. |
| 674 GetPcFactory(); |
| 675 |
672 const std::string params = | 676 const std::string params = |
673 cmd_line->GetSwitchValueASCII(switches::kWebRtcStunProbeTrialParameter); | 677 cmd_line->GetSwitchValueASCII(switches::kWebRtcStunProbeTrialParameter); |
674 | 678 |
675 chrome_worker_thread_.task_runner()->PostDelayedTask( | 679 chrome_worker_thread_.task_runner()->PostDelayedTask( |
676 FROM_HERE, | 680 FROM_HERE, |
677 base::Bind( | 681 base::Bind( |
678 &PeerConnectionDependencyFactory::StartStunProbeTrialOnWorkerThread, | 682 &PeerConnectionDependencyFactory::StartStunProbeTrialOnWorkerThread, |
679 base::Unretained(this), params), | 683 base::Unretained(this), params), |
680 base::TimeDelta::FromMilliseconds(kExperimentStartDelayMs)); | 684 base::TimeDelta::FromMilliseconds(kExperimentStartDelayMs)); |
681 } | 685 } |
682 | 686 |
683 void PeerConnectionDependencyFactory::StartStunProbeTrialOnWorkerThread( | 687 void PeerConnectionDependencyFactory::StartStunProbeTrialOnWorkerThread( |
684 const std::string& params) { | 688 const std::string& params) { |
| 689 DCHECK(network_manager_); |
685 DCHECK(chrome_worker_thread_.task_runner()->BelongsToCurrentThread()); | 690 DCHECK(chrome_worker_thread_.task_runner()->BelongsToCurrentThread()); |
686 rtc::NetworkManager::NetworkList networks; | 691 stun_trial_.reset( |
687 network_manager_->GetNetworks(&networks); | 692 new StunProberTrial(network_manager_, params, socket_factory_.get())); |
688 stun_prober_ = StartStunProbeTrial(networks, params, socket_factory_.get()); | |
689 } | 693 } |
690 | 694 |
691 void PeerConnectionDependencyFactory::CreateIpcNetworkManagerOnWorkerThread( | 695 void PeerConnectionDependencyFactory::CreateIpcNetworkManagerOnWorkerThread( |
692 base::WaitableEvent* event) { | 696 base::WaitableEvent* event) { |
693 DCHECK(chrome_worker_thread_.task_runner()->BelongsToCurrentThread()); | 697 DCHECK(chrome_worker_thread_.task_runner()->BelongsToCurrentThread()); |
694 network_manager_ = new IpcNetworkManager(p2p_socket_dispatcher_.get()); | 698 network_manager_ = new IpcNetworkManager(p2p_socket_dispatcher_.get()); |
695 event->Signal(); | 699 event->Signal(); |
696 } | 700 } |
697 | 701 |
698 void PeerConnectionDependencyFactory::DeleteIpcNetworkManager() { | 702 void PeerConnectionDependencyFactory::DeleteIpcNetworkManager() { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 } | 759 } |
756 | 760 |
757 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() { | 761 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() { |
758 if (audio_device_.get()) | 762 if (audio_device_.get()) |
759 return; | 763 return; |
760 | 764 |
761 audio_device_ = new WebRtcAudioDeviceImpl(); | 765 audio_device_ = new WebRtcAudioDeviceImpl(); |
762 } | 766 } |
763 | 767 |
764 } // namespace content | 768 } // namespace content |
OLD | NEW |