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