12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROMEOS_NETWORK_NETWORK_CHANGE_NOTIFIER_CHROMEOS_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROMEOS_NETWORK_NETWORK_CHANGE_NOTIFIER_CHROMEOS_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/gtest_prod_util.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/chromeos_export.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/dbus/power_manager_client.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state_handler_observer.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/network_change_notifier.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CHROMEOS_EXPORT NetworkChangeNotifierChromeos 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public net::NetworkChangeNotifier, 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public chromeos::PowerManagerClient::Observer, 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public chromeos::NetworkStateHandlerObserver { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifierChromeos(); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~NetworkChangeNotifierChromeos(); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Starts observing changes from the network state handler. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Initialize(); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Stops observing changes from the network state handler. 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Shutdown(); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NetworkChangeNotifier overrides. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual net::NetworkChangeNotifier::ConnectionType 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCurrentConnectionType() const OVERRIDE; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // PowerManagerClient::Observer overrides. 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NetworkStateHandlerObserver overrides. 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DefaultNetworkChanged( 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const chromeos::NetworkState* default_network) OVERRIDE; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(NetworkChangeNotifierChromeosTest, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConnectionTypeFromShill); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class NetworkChangeNotifierChromeosUpdateTest; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class DnsConfigService; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the notifier state based on a default network update. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |connection_type_changed| is set to true if we must report a connection 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // type change. 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |ip_address_changed| is set to true if we must report an IP address change. 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |dns_changed| is set to true if we must report a DNS config change. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateState(const chromeos::NetworkState* default_network, 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* connection_type_changed, 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* ip_address_changed, 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* dns_changed); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Maps the shill network type and technology to its NetworkChangeNotifier 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // equivalent. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static net::NetworkChangeNotifier::ConnectionType 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConnectionTypeFromShill(const std::string& type, 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& technology); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Calculates parameters used for network change notifier online/offline 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // signals. 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static net::NetworkChangeNotifier::NetworkChangeCalculatorParams 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeCalculatorParamsChromeos(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkChangeNotifier::ConnectionType connection_type_; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // IP address for the current default network. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string ip_address_; 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // DNS servers for the current default network. 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> dns_servers_; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Service path for the current default network. 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string service_path_; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<DnsConfigService> dns_config_service_; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifierChromeos); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROMEOS_NETWORK_NETWORK_CHANGE_NOTIFIER_CHROMEOS_H_ 89