• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
set_onc_source(::onc::ONCSource onc_source)45   void set_onc_source(::onc::ONCSource onc_source) { onc_source_ = onc_source; }
onc_source()46   ::onc::ONCSource onc_source() const { return onc_source_; }
47 
set_certificate_pattern(const CertificatePattern & pattern)48   void set_certificate_pattern(const CertificatePattern& pattern) {
49     certificate_pattern_ = pattern;
50   }
certificate_pattern()51   const CertificatePattern& certificate_pattern() const {
52     return certificate_pattern_;
53   }
set_certificate_type(ClientCertType type)54   void set_certificate_type(ClientCertType type) {
55     certificate_type_ = type;
56   }
certificate_type()57   ClientCertType certificate_type() const {
58     return certificate_type_;
59   }
is_managed()60   bool is_managed() const {
61     return onc_source_ == ::onc::ONC_SOURCE_DEVICE_POLICY ||
62         onc_source_ == ::onc::ONC_SOURCE_USER_POLICY;
63   }
user_settings()64   const base::DictionaryValue* user_settings() const {
65     return user_settings_.get();
66   }
67   void set_user_settings(scoped_ptr<base::DictionaryValue> dict);
policy_guid()68   const std::string& policy_guid() const {
69     return policy_guid_;
70   }
set_policy_guid(const std::string & guid)71   void set_policy_guid(const std::string& guid) {
72     policy_guid_ = guid;
73   }
74 
75   // Fills in |dict| with the currently configured values. This will write the
76   // keys appropriate for Network::ui_data() as defined below (kKeyXXX).
77   void FillDictionary(base::DictionaryValue* dict) const;
78 
79   // Creates a NetworkUIData object from |onc_network|, which has to be a valid
80   // ONC NetworkConfiguration dictionary.
81   // This function is used to create the "UIData" field of the Shill
82   // configuration.
83   static scoped_ptr<NetworkUIData> CreateFromONC(
84       ::onc::ONCSource onc_source,
85       const base::DictionaryValue& onc_network);
86 
87   // Key for storing source of the ONC network.
88   static const char kKeyONCSource[];
89 
90   // Key for storing the certificate pattern.
91   static const char kKeyCertificatePattern[];
92 
93   // Key for storing the certificate type.
94   static const char kKeyCertificateType[];
95 
96   // Key for storing the user settings.
97   static const char kKeyUserSettings[];
98 
99  private:
100   CertificatePattern certificate_pattern_;
101   ::onc::ONCSource onc_source_;
102   ClientCertType certificate_type_;
103   scoped_ptr<base::DictionaryValue> user_settings_;
104   std::string policy_guid_;
105 };
106 
107 }  // namespace chromeos
108 
109 #endif  // CHROMEOS_NETWORK_NETWORK_UI_DATA_H_
110