network_state.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROMEOS_NETWORK_NETWORK_STATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROMEOS_NETWORK_NETWORK_STATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/network/managed_state.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Simple class to provide network state information about a network service.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class should always be passed as a const* and should never be held
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on to. Store network_state->path() (defined in ManagedState) instead and
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// call NetworkStateHandler::GetNetworkState(path) to retrieve the state for
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the network.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CHROMEOS_EXPORT NetworkState : public ManagedState {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit NetworkState(const std::string& path);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~NetworkState();
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ManagedState overrides
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If you change this method, update GetProperties too.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool PropertyChanged(const std::string& key,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const base::Value& value) OVERRIDE;
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Fills |dictionary| with the state properties. All the properties that are
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // accepted by PropertyChanged are stored in |dictionary|, no other values are
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // stored.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetProperties(base::DictionaryValue* dictionary) const;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Accessors
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& security() const { return security_; }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& ip_address() const { return ip_address_; }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& device_path() const { return device_path_; }
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const std::string& guid() const { return guid_; }
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const std::string& connection_state() const { return connection_state_; }
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& error() const { return error_; }
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Wireless property accessors
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  int signal_strength() const { return signal_strength_; }
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Cellular property accessors
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const std::string& technology() const { return technology_; }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& activation_state() const { return activation_state_; }
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& roaming() const { return roaming_; }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool activate_over_non_cellular_networks() const {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return activate_over_non_cellular_networks_;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool cellular_out_of_credits() const { return cellular_out_of_credits_; }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsConnectedState() const;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsConnectingState() const;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helpers (used e.g. when a state is cached)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool StateIsConnected(const std::string& connection_state);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool StateIsConnecting(const std::string& connection_state);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class NetworkStateHandler;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class NetworkChangeNotifierChromeosUpdateTest;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called by NetworkStateHandler when the ip config changes.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_ip_address(const std::string& ip_address) {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ip_address_ = ip_address;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Common Network Service properties
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string security_;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string device_path_;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string guid_;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string ip_address_;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string connection_state_;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string error_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Wireless properties
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int signal_strength_;
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Cellular properties
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string technology_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string activation_state_;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string roaming_;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool activate_over_non_cellular_networks_;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool cellular_out_of_credits_;
85
86  DISALLOW_COPY_AND_ASSIGN(NetworkState);
87};
88
89}  // namespace chromeos
90
91#endif  // CHROMEOS_NETWORK_NETWORK_STATE_H_
92