OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "chrome/browser/chromeos/net/network_change_notifier_chromeos.h" |
| 6 |
| 7 #include "base/task.h" |
| 8 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 9 #include "content/browser/browser_thread.h" |
| 10 |
| 11 namespace chromeos { |
| 12 |
| 13 NetworkChangeNotifierChromeos::NetworkChangeNotifierChromeos() |
| 14 : has_active_network_(false), |
| 15 connectivity_state_(chromeos::CONN_STATE_UNKNOWN), |
| 16 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { |
| 17 |
| 18 chromeos::NetworkLibrary* lib = |
| 19 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
| 20 lib->AddNetworkManagerObserver(this); |
| 21 } |
| 22 |
| 23 NetworkChangeNotifierChromeos::~NetworkChangeNotifierChromeos() { |
| 24 chromeos::NetworkLibrary* lib = |
| 25 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
| 26 lib->RemoveNetworkManagerObserver(this); |
| 27 lib->RemoveObserverForAllNetworks(this); |
| 28 } |
| 29 |
| 30 void NetworkChangeNotifierChromeos::OnNetworkManagerChanged( |
| 31 chromeos::NetworkLibrary* cros) { |
| 32 UpdateNetworkState(cros); |
| 33 } |
| 34 |
| 35 bool NetworkChangeNotifierChromeos::IsCurrentlyOffline() const { |
| 36 return connectivity_state_ != chromeos::CONN_STATE_UNRESTRICTED; |
| 37 } |
| 38 |
| 39 void NetworkChangeNotifierChromeos::UpdateNetworkState( |
| 40 chromeos::NetworkLibrary* lib) { |
| 41 const chromeos::Network* network = lib->active_network(); |
| 42 |
| 43 // Check if active network was added, removed or changed. |
| 44 if ((!network && has_active_network_) || |
| 45 (network && (!has_active_network_ || |
| 46 network->service_path() != service_path_ || |
| 47 network->ip_address() != ip_address_))) { |
| 48 if (has_active_network_) |
| 49 lib->RemoveObserverForAllNetworks(this); |
| 50 if (!network) { |
| 51 has_active_network_ = false; |
| 52 service_path_.clear(); |
| 53 ip_address_.clear(); |
| 54 } else { |
| 55 has_active_network_ = true; |
| 56 service_path_ = network->service_path(); |
| 57 lib->AddNetworkObserver(network->service_path(), this); |
| 58 ip_address_ = network->ip_address(); |
| 59 } |
| 60 BrowserThread::PostTask( |
| 61 BrowserThread::IO, FROM_HERE, |
| 62 NewRunnableFunction( |
| 63 &NetworkChangeNotifierChromeos::NotifyObserversOfIPAddressChange)); |
| 64 } |
| 65 } |
| 66 |
| 67 void NetworkChangeNotifierChromeos::OnNetworkChanged( |
| 68 chromeos::NetworkLibrary* cros, |
| 69 const chromeos::Network* network) { |
| 70 if (!network) { |
| 71 NOTREACHED(); |
| 72 return; |
| 73 } |
| 74 // Active network changed? |
| 75 if (network->service_path() != service_path_) { |
| 76 UpdateNetworkState(cros); |
| 77 return; |
| 78 } |
| 79 if (network->connectivity_state() != connectivity_state_) { |
| 80 connectivity_state_ = network->connectivity_state(); |
| 81 BrowserThread::PostTask( |
| 82 BrowserThread::IO, FROM_HERE, |
| 83 method_factory_.NewRunnableMethod( |
| 84 &NetworkChangeNotifierChromeos::NotifyObserversOfOnlineStateChange)); |
| 85 } |
| 86 } |
| 87 |
| 88 } // namespace net |
OLD | NEW |