managed_state.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
1// Copyright (c) 2012 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#ifndef CHROMEOS_NETWORK_MANAGED_STATE_H_
6#define CHROMEOS_NETWORK_MANAGED_STATE_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/compiler_specific.h"
12#include "chromeos/chromeos_export.h"
13
14namespace base {
15class Value;
16}
17
18namespace chromeos {
19
20class DeviceState;
21class NetworkState;
22
23// Base class for states managed by NetworkStateManger which are associated
24// with a Shill path (e.g. service path or device path).
25class ManagedState {
26 public:
27  enum ManagedType {
28    MANAGED_TYPE_NETWORK,
29    MANAGED_TYPE_DEVICE
30  };
31
32  virtual ~ManagedState();
33
34  // This will construct and return a new instance of the approprate class
35  // based on |type|.
36  static ManagedState* Create(ManagedType type, const std::string& path);
37
38  // Returns the specific class pointer if this is the correct type, or
39  // NULL if it is not.
40  NetworkState* AsNetworkState();
41  DeviceState* AsDeviceState();
42
43  // Called by NetworkStateHandler when a property changes. Returns true if
44  // the property was recognized and parsed successfully.
45  virtual bool PropertyChanged(const std::string& key,
46                               const base::Value& value) = 0;
47
48  // Called by NetworkStateHandler after all calls to PropertyChanged for the
49  // initial set of properties. Used to update state requiring multiple
50  // parsed properties, e.g. name from hex_ssid in NetworkState.
51  virtual void InitialPropertiesReceived();
52
53  const ManagedType managed_type() const { return managed_type_; }
54  const std::string& path() const { return path_; }
55  const std::string& name() const { return name_; }
56  const std::string& type() const { return type_; }
57  bool is_observed() const { return is_observed_; }
58  void set_is_observed(bool is_observed) { is_observed_ = is_observed; }
59
60 protected:
61  ManagedState(ManagedType type, const std::string& path);
62
63  // Parses common property keys (name, type).
64  bool ManagedStatePropertyChanged(const std::string& key,
65                                   const base::Value& value);
66
67  // Helper methods that log warnings and return false if parsing failed.
68  bool GetBooleanValue(const std::string& key,
69                       const base::Value& value,
70                       bool* out_value);
71  bool GetIntegerValue(const std::string& key,
72                       const base::Value& value,
73                       int* out_value);
74  bool GetStringValue(const std::string& key,
75                      const base::Value& value,
76                      std::string* out_value);
77
78  void set_name(const std::string& name) { name_ = name; }
79
80 private:
81  friend class NetworkChangeNotifierChromeosUpdateTest;
82
83  ManagedType managed_type_;
84
85  // The path (e.g. service path or device path) of the managed state object.
86  std::string path_;
87
88  // Common properties shared by all managed state objects.
89  std::string name_;  // flimflam::kNameProperty
90  std::string type_;  // flimflam::kTypeProperty
91
92  // Tracks when the state is being observed.
93  bool is_observed_;
94
95  DISALLOW_COPY_AND_ASSIGN(ManagedState);
96};
97
98}  // namespace chromeos
99
100#endif  // CHROMEOS_NETWORK_MANAGED_STATE_H_
101