Chromium Code Reviews| Index: chrome/browser/chromeos/net/network_change_notifier_chromeos.cc |
| =================================================================== |
| --- chrome/browser/chromeos/net/network_change_notifier_chromeos.cc (revision 0) |
| +++ chrome/browser/chromeos/net/network_change_notifier_chromeos.cc (revision 0) |
| @@ -0,0 +1,87 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/chromeos/net/network_change_notifier_chromeos.h" |
| + |
| +#include "base/task.h" |
| +#include "chrome/browser/chromeos/cros/cros_library.h" |
| +#include "content/browser/browser_thread.h" |
| + |
| +namespace chromeos { |
| + |
| +NetworkChangeNotifierChromeos::NetworkChangeNotifierChromeos() |
| + : has_active_network_(false), |
| + connectivity_state_(chromeos::CONN_STATE_UNKNOWN), |
| + ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { |
| + |
| + chromeos::NetworkLibrary* lib = |
| + chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
| + lib->AddNetworkManagerObserver(this); |
| +} |
| + |
| +NetworkChangeNotifierChromeos::~NetworkChangeNotifierChromeos() { |
| + chromeos::NetworkLibrary* lib = |
| + chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
| + lib->RemoveNetworkManagerObserver(this); |
| + lib->RemoveObserverForAllNetworks(this); |
| +} |
| + |
| +void NetworkChangeNotifierChromeos::OnNetworkManagerChanged( |
| + chromeos::NetworkLibrary* cros) { |
| + UpdateNetworkState(cros); |
| +} |
| + |
| +bool NetworkChangeNotifierChromeos::IsCurrentlyOffline() const { |
| + return connectivity_state_ != chromeos::CONN_STATE_UNRESTRICTED; |
| +} |
| + |
| +void NetworkChangeNotifierChromeos::UpdateNetworkState( |
| + chromeos::NetworkLibrary* lib) { |
| + const chromeos::Network* network = lib->active_network(); |
| + |
| + // Check if active network was added, removed or changed. |
| + if ((network && !has_active_network_) || (!network && has_active_network_) || |
| + (network && (network->service_path() != service_path_ || |
| + network->ip_address() != ip_address_))) { |
|
oshima
2011/05/18 01:42:44
All right, i think this is easier to follow, then
zel
2011/05/18 01:48:27
Done.
|
| + if (has_active_network_) |
| + lib->RemoveObserverForAllNetworks(this); |
| + if (!network) { |
| + has_active_network_ = false; |
| + service_path_.clear(); |
| + ip_address_.clear(); |
| + } else { |
| + has_active_network_ = true; |
| + service_path_ = network->service_path(); |
| + lib->AddNetworkObserver(network->service_path(), this); |
| + ip_address_ = network->ip_address(); |
| + } |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, |
| + NewRunnableFunction( |
| + &NetworkChangeNotifierChromeos::NotifyObserversOfIPAddressChange)); |
| + } |
| +} |
| + |
| +void NetworkChangeNotifierChromeos::OnNetworkChanged( |
| + chromeos::NetworkLibrary* cros, |
| + const chromeos::Network* network) { |
| + if (!network) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + // Active network changed? |
| + if (network->service_path() != service_path_) { |
| + UpdateNetworkState(cros); |
| + return; |
| + } |
| + if (network->connectivity_state() != connectivity_state_) { |
| + connectivity_state_ = network->connectivity_state(); |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, |
| + NewRunnableMethod(this, |
| + &NetworkChangeNotifierChromeos::NotifyObserversOfOnlineStateChange)); |
| + } |
| +} |
| + |
| +} // namespace net |
| Property changes on: chrome/browser/chromeos/net/network_change_notifier_chromeos.cc |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |