Chromium Code Reviews| Index: webrtc/base/network.cc |
| diff --git a/webrtc/base/network.cc b/webrtc/base/network.cc |
| index bc7d50528cfdfa58283617e5f360e8dbe65c6a0e..c2141abfbbcf8b1ffffe0729f7d048f26408a29c 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/networkchangenotifier.h" |
| #include "webrtc/base/scoped_ptr.h" |
| #include "webrtc/base/socket.h" // includes something that makes windows happy |
| #include "webrtc/base/stream.h" |
| @@ -64,6 +65,7 @@ const int kMaxIPv6Networks = 5; |
| const uint32 kUpdateNetworksMessage = 1; |
|
pthatcher1
2015/10/09 23:11:29
Similarly, kUpdateNetworksContinuallyMessage
honghaiz3
2015/10/13 23:19:56
I kept the message name because now I do not need
|
| const uint32 kSignalNetworksMessage = 2; |
| +const uint32 kUpdateNetworksOnceMessage = 3; |
| // Fetch list of networks every two seconds. |
| const int kNetworksUpdateIntervalMs = 2000; |
| @@ -329,6 +331,11 @@ BasicNetworkManager::BasicNetworkManager() |
| BasicNetworkManager::~BasicNetworkManager() { |
| } |
| +void BasicNetworkManager::OnNetworkChangeNotified() { |
|
pthatcher1
2015/10/09 23:11:29
I think OnNetworksChanged would be a better name.
honghaiz3
2015/10/13 23:19:56
Done.
|
| + LOG(LS_VERBOSE) << "Network change was notified at the network manager"; |
| + thread_->Post(this, kUpdateNetworksOnceMessage); |
| +} |
| + |
| #if defined(__native_client__) |
| bool BasicNetworkManager::CreateNetworks(bool include_ignored, |
| @@ -663,6 +670,7 @@ void BasicNetworkManager::StartUpdating() { |
| thread_->Post(this, kSignalNetworksMessage); |
| } else { |
| thread_->Post(this, kUpdateNetworksMessage); |
| + StartNetworkChangeNotifier(); |
| } |
| ++start_count_; |
| } |
| @@ -676,12 +684,34 @@ void BasicNetworkManager::StopUpdating() { |
| if (!start_count_) { |
| thread_->Clear(this); |
| sent_first_update_ = false; |
| + StopNetworkChangeNotifier(); |
| } |
| } |
| +void BasicNetworkManager::StartNetworkChangeNotifier() { |
| + NetworkChangeNotifierFactory* factory = NetworkChangeNotifier::GetFactory(); |
| + if (factory == nullptr) { |
| + return; |
| + } |
| + network_change_notifier_.reset(factory->CreateNotifier()); |
|
pthatcher1
2015/10/09 23:11:29
Why do we have GetFactory()->CreateNotifier()? Wh
honghaiz3
2015/10/13 23:19:56
I keep the factory as it helps unittests and allow
|
| + if (!network_change_notifier_) { |
| + return; |
| + } |
| + network_change_notifier_->SignalNetworksChanged.connect( |
| + this, &BasicNetworkManager::OnNetworkChangeNotified); |
| +} |
| + |
| +void BasicNetworkManager::StopNetworkChangeNotifier() { |
| + network_change_notifier_.reset(); |
| +} |
| + |
| void BasicNetworkManager::OnMessage(Message* msg) { |
| switch (msg->message_id) { |
| case kUpdateNetworksMessage: { |
| + UpdateNetworks(); |
| + break; |
| + } |
| + case kUpdateNetworksOnceMessage: { |
| DoUpdateNetworks(); |
| break; |
| } |
| @@ -711,7 +741,10 @@ void BasicNetworkManager::DoUpdateNetworks() { |
| sent_first_update_ = true; |
| } |
| } |
| +} |
| +void BasicNetworkManager::UpdateNetworks() { |
| + DoUpdateNetworks(); |
| thread_->PostDelayed(kNetworksUpdateIntervalMs, this, kUpdateNetworksMessage); |
| } |