Chromium Code Reviews| Index: webrtc/base/network.cc |
| diff --git a/webrtc/base/network.cc b/webrtc/base/network.cc |
| index bc7d50528cfdfa58283617e5f360e8dbe65c6a0e..3a3ca860fdc5c6249d5c743e561d7ee3e5b72b9c 100644 |
| --- a/webrtc/base/network.cc |
| +++ b/webrtc/base/network.cc |
| @@ -48,6 +48,7 @@ |
| #include <algorithm> |
| #include "webrtc/base/logging.h" |
| +#include "webrtc/base/networkmonitor.h" |
| #include "webrtc/base/scoped_ptr.h" |
| #include "webrtc/base/socket.h" // includes something that makes windows happy |
| #include "webrtc/base/stream.h" |
| @@ -329,6 +330,11 @@ BasicNetworkManager::BasicNetworkManager() |
| BasicNetworkManager::~BasicNetworkManager() { |
| } |
| +void BasicNetworkManager::OnNetworksChanged() { |
| + LOG(LS_VERBOSE) << "Network change was observed at the network manager"; |
| + UpdateNetworksOnce(); |
| +} |
| + |
| #if defined(__native_client__) |
| bool BasicNetworkManager::CreateNetworks(bool include_ignored, |
| @@ -663,6 +669,7 @@ void BasicNetworkManager::StartUpdating() { |
| thread_->Post(this, kSignalNetworksMessage); |
| } else { |
| thread_->Post(this, kUpdateNetworksMessage); |
| + StartNetworkMonitor(); |
| } |
| ++start_count_; |
| } |
| @@ -676,13 +683,36 @@ void BasicNetworkManager::StopUpdating() { |
| if (!start_count_) { |
| thread_->Clear(this); |
| sent_first_update_ = false; |
| + StopNetworkMonitor(); |
| } |
| } |
| +void BasicNetworkManager::StartNetworkMonitor() { |
| + NetworkMonitorFactory* factory = NetworkMonitorFactory::GetFactory(); |
| + if (factory == nullptr) { |
| + return; |
| + } |
| + network_monitor_.reset(factory->CreateNetworkMonitor()); |
| + if (!network_monitor_) { |
| + return; |
| + } |
| + network_monitor_->StartMonitoring(); |
| + network_monitor_->SignalNetworksChanged.connect( |
| + this, &BasicNetworkManager::OnNetworksChanged); |
|
pthatcher1
2015/10/15 08:11:43
Shouldn't we connect before starting?
honghaiz3
2015/10/15 19:02:41
Done.
|
| +} |
| + |
| +void BasicNetworkManager::StopNetworkMonitor() { |
| + if (!network_monitor_) { |
| + return; |
| + } |
| + network_monitor_->StopMonitoring(); |
| + network_monitor_.reset(); |
| +} |
| + |
| void BasicNetworkManager::OnMessage(Message* msg) { |
| switch (msg->message_id) { |
| - case kUpdateNetworksMessage: { |
| - DoUpdateNetworks(); |
| + case kUpdateNetworksMessage: { |
| + UpdateNetworksContinually(); |
| break; |
| } |
| case kSignalNetworksMessage: { |
| @@ -694,7 +724,7 @@ void BasicNetworkManager::OnMessage(Message* msg) { |
| } |
| } |
| -void BasicNetworkManager::DoUpdateNetworks() { |
| +void BasicNetworkManager::UpdateNetworksOnce() { |
| if (!start_count_) |
| return; |
| @@ -711,7 +741,10 @@ void BasicNetworkManager::DoUpdateNetworks() { |
| sent_first_update_ = true; |
| } |
| } |
| +} |
| +void BasicNetworkManager::UpdateNetworksContinually() { |
| + UpdateNetworksOnce(); |
| thread_->PostDelayed(kNetworksUpdateIntervalMs, this, kUpdateNetworksMessage); |
| } |