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_NETWORK_UI_DATA_H_ 6 #define CHROMEOS_NETWORK_NETWORK_UI_DATA_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "chromeos/chromeos_export.h" 13 #include "chromeos/network/certificate_pattern.h" 14 #include "components/onc/onc_constants.h" 15 16 namespace base { 17 class DictionaryValue; 18 } 19 20 namespace chromeos { 21 22 enum ClientCertType { 23 CLIENT_CERT_TYPE_NONE = 0, 24 CLIENT_CERT_TYPE_REF = 1, 25 CLIENT_CERT_TYPE_PATTERN = 2 26 }; 27 28 // Helper for accessing and setting values in the network's UI data dictionary. 29 // Accessing values is done via static members that take the network as an 30 // argument. In order to fill a UI data dictionary, construct an instance, set 31 // up your data members, and call FillDictionary(). For example, if you have a 32 // |network|: 33 // 34 // NetworkUIData ui_data; 35 // ui_data.set_onc_source(onc::ONC_SOURCE_USER_IMPORT); 36 // ui_data.FillDictionary(network->ui_data()); 37 class CHROMEOS_EXPORT NetworkUIData { 38 public: 39 NetworkUIData(); 40 NetworkUIData(const NetworkUIData& other); 41 NetworkUIData& operator=(const NetworkUIData& other); 42 explicit NetworkUIData(const base::DictionaryValue& dict); 43 ~NetworkUIData(); 44 45 void set_onc_source(::onc::ONCSource onc_source) { onc_source_ = onc_source; } 46 ::onc::ONCSource onc_source() const { return onc_source_; } 47 48 void set_certificate_pattern(const CertificatePattern& pattern) { 49 certificate_pattern_ = pattern; 50 } 51 const CertificatePattern& certificate_pattern() const { 52 return certificate_pattern_; 53 } 54 void set_certificate_type(ClientCertType type) { 55 certificate_type_ = type; 56 } 57 ClientCertType certificate_type() const { 58 return certificate_type_; 59 } 60 bool is_managed() const { 61 return onc_source_ == ::onc::ONC_SOURCE_DEVICE_POLICY || 62 onc_source_ == ::onc::ONC_SOURCE_USER_POLICY; 63 } 64 const base::DictionaryValue* user_settings() const { 65 return user_settings_.get(); 66 } 67 void set_user_settings(scoped_ptr<base::DictionaryValue> dict); 68 const std::string& policy_guid() const { 69 return policy_guid_; 70 } 71 void set_policy_guid(const std::string& guid) { 72 policy_guid_ = guid; 73 } 74 75 // Returns |onc_source_| as a string, one of kONCSource*. 76 std::string GetONCSourceAsString() const; 77 78 // Fills in |dict| with the currently configured values. This will write the 79 // keys appropriate for Network::ui_data() as defined below (kKeyXXX). 80 void FillDictionary(base::DictionaryValue* dict) const; 81 82 // Creates a NetworkUIData object from |onc_network|, which has to be a valid 83 // ONC NetworkConfiguration dictionary. 84 // This function is used to create the "UIData" field of the Shill 85 // configuration. 86 static scoped_ptr<NetworkUIData> CreateFromONC( 87 ::onc::ONCSource onc_source, 88 const base::DictionaryValue& onc_network); 89 90 // Key for storing source of the ONC network. 91 static const char kKeyONCSource[]; 92 93 // Key for storing the certificate pattern. 94 static const char kKeyCertificatePattern[]; 95 96 // Key for storing the certificate type. 97 static const char kKeyCertificateType[]; 98 99 // Key for storing the user settings. 100 static const char kKeyUserSettings[]; 101 102 // Values for kKeyONCSource 103 static const char kONCSourceUserImport[]; 104 static const char kONCSourceDevicePolicy[]; 105 static const char kONCSourceUserPolicy[]; 106 107 private: 108 CertificatePattern certificate_pattern_; 109 ::onc::ONCSource onc_source_; 110 ClientCertType certificate_type_; 111 scoped_ptr<base::DictionaryValue> user_settings_; 112 std::string policy_guid_; 113 }; 114 115 } // namespace chromeos 116 117 #endif // CHROMEOS_NETWORK_NETWORK_UI_DATA_H_ 118