Index: chrome/browser/chromeos/cros/network_ui_data.h |
diff --git a/chrome/browser/chromeos/cros/network_ui_data.h b/chrome/browser/chromeos/cros/network_ui_data.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7b3d24f4f057446c58f52b97a182899008311167 |
--- /dev/null |
+++ b/chrome/browser/chromeos/cros/network_ui_data.h |
@@ -0,0 +1,165 @@ |
+// 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. |
+ |
+#ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_UI_DATA_H_ |
+#define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_UI_DATA_H_ |
+#pragma once |
+ |
+#include <string> |
+ |
+#include "base/basictypes.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/values.h" |
+#include "chrome/browser/chromeos/cros/network_parser.h" |
+ |
+namespace chromeos { |
+ |
+class Network; |
+class NetworkPropertyUIData; |
+ |
+// Helper for accessing and setting values in the network's UI data dictionary. |
+// Accessing values is done via static members that take the network as an |
+// argument. In order to fill a UI data dictionary, construct an instance, set |
+// up your data members, and call FillDictionary(). For example, if you have a |
+// |network|: |
+// |
+// NetworkUIData ui_data; |
+// ui_data.set_onc_source(NetworkUIData::ONC_SOURCE_USER_IMPORT); |
+// NetworkPropertyUIData auto_connect_property( |
+// NetworkPropertyUIData::CONTROLLER_USER, |
+// base::Value::CreateBooleanValue(true)); |
+// ui_data.SetProperty(NetworkUIData::kPropertyAutoConnect, |
+// auto_connect_property); |
+// ui_data.FillDictionary(network->ui_data()); |
+class NetworkUIData { |
+ public: |
+ // Indicates from which source an ONC blob comes from. |
+ enum ONCSource { |
+ ONC_SOURCE_NONE, |
+ ONC_SOURCE_USER_IMPORT, |
+ ONC_SOURCE_DEVICE_POLICY, |
+ ONC_SOURCE_USER_POLICY, |
+ }; |
+ |
+ // Constructs a new dictionary builder. |
+ NetworkUIData(); |
+ ~NetworkUIData(); |
+ |
+ // Sets the ONC source. |
+ void set_onc_source(ONCSource onc_source) { onc_source_ = onc_source; } |
+ |
+ // Fills in metadata for a property. |
+ void SetProperty(const char* property_key, |
+ const NetworkPropertyUIData& ui_data); |
+ |
+ // Fills in |dict| with the currently configured values. This will write the |
+ // keys appropriate for Network::ui_data() as defined below (kKeyXXX). |
+ void FillDictionary(DictionaryValue* dict) const; |
+ |
+ // Get the ONC source for a network. |
+ static ONCSource GetONCSource(const Network* network); |
+ |
+ // Check whether a network is managed by policy. |
+ static bool IsManaged(const Network* network); |
+ |
+ // Source of the ONC network. This is an integer according to enum ONCSource. |
+ static const char kKeyONCSource[]; |
+ |
+ // Per-property meta data. This is handled by NetworkPropertyUIData. |
+ static const char kKeyProperties[]; |
+ |
+ // Property names for per-property dat |
+ static const char kPropertyAutoConnect[]; |
+ static const char kPropertyPreferred[]; |
+ static const char kPropertyPassphrase[]; |
+ static const char kPropertySaveCredentials[]; |
+ |
+ static const char kPropertyVPNCaCertNss[]; |
+ static const char kPropertyVPNPskPassphrase[]; |
+ static const char kPropertyVPNClientCertId[]; |
+ static const char kPropertyVPNUsername[]; |
+ static const char kPropertyVPNUserPassphrase[]; |
+ static const char kPropertyVPNGroupName[]; |
+ |
+ static const char kPropertyEAPMethod[]; |
+ static const char kPropertyEAPPhase2Auth[]; |
+ static const char kPropertyEAPServerCaCertNssNickname[]; |
+ static const char kPropertyEAPClientCertPkcs11Id[]; |
+ static const char kPropertyEAPUseSystemCAs[]; |
+ static const char kPropertyEAPIdentity[]; |
+ static const char kPropertyEAPAnonymousIdentity[]; |
+ static const char kPropertyEAPPassphrase[]; |
+ |
+ private: |
+ static EnumMapper<ONCSource>& GetONCSourceMapper(); |
+ |
+ ONCSource onc_source_; |
+ DictionaryValue properties_; |
+ |
+ static const EnumMapper<NetworkUIData::ONCSource>::Pair kONCSourceTable[]; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NetworkUIData); |
+}; |
+ |
+// Holds meta information for a network property: Whether the property is under |
+// policy control, if it is user-editable, and whether the policy-provided |
+// default value, if applicable. |
+class NetworkPropertyUIData { |
+ public: |
+ // Enum values indicating the entity controlling the property. |
+ enum Controller { |
+ // Property is managed by policy. |
+ CONTROLLER_POLICY, |
+ // The user controls the policy. |
+ CONTROLLER_USER, |
+ }; |
+ |
+ // Initializes the object with CONTROLLER_USER and no default value. |
+ NetworkPropertyUIData(); |
+ ~NetworkPropertyUIData(); |
+ |
+ // Initializes the object with the given values. |default_value| may be NULL |
+ // to specify no default value is present. Takes ownership of |default_value|. |
+ NetworkPropertyUIData(Controller controller, base::Value* default_value); |
+ |
+ // Initializes the object and calls UpdateFromNetwork. |
+ NetworkPropertyUIData(const Network* network, const char* property_key); |
+ |
+ // Updates the object from the network-level UI data dictionary. |
+ // |property_key| may be null, in which case the there'll be no default value |
+ // and |controller| will be set to CONTROLLER_POLICY iff the network is |
+ // managed. |
+ void UpdateFromNetwork(const Network* network, const char* property_key); |
+ // Builds a dictionary for storing in the network-level UI data dictionary. |
+ // Ownership is transferred to the caller. |
+ DictionaryValue* BuildDictionary() const; |
+ |
+ const base::Value* default_value() const { return default_value_.get(); } |
+ bool managed() const { return controller_ == CONTROLLER_POLICY; } |
+ bool recommended() const { |
+ return controller_ == CONTROLLER_USER && default_value_.get(); |
+ } |
+ bool editable() const { return controller_ == CONTROLLER_USER; } |
+ |
+ private: |
+ static EnumMapper<Controller>& GetControllerMapper(); |
+ |
+ Controller controller_; |
+ scoped_ptr<base::Value> default_value_; |
+ |
+ static const char kKeyController[]; |
+ static const char kKeyDefaultValue[]; |
+ |
+ static const EnumMapper<NetworkPropertyUIData::Controller>::Pair |
+ kControllerTable[]; |
+ |
+ // So it can access the kKeyXYZ constants. |
+ friend class NetworkUIDataTest; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NetworkPropertyUIData); |
+}; |
+ |
+} // namespace chromeos |
+ |
+#endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_UI_DATA_H_ |