Home | History | Annotate | Download | only in network
      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 "chromeos/network/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     user_settings_ = dict.Pass();
     69   }
     70   const std::string& policy_guid() const {
     71     return policy_guid_;
     72   }
     73   void set_policy_guid(const std::string& guid) {
     74     policy_guid_ = guid;
     75   }
     76 
     77   // Fills in |dict| with the currently configured values. This will write the
     78   // keys appropriate for Network::ui_data() as defined below (kKeyXXX).
     79   void FillDictionary(base::DictionaryValue* dict) const;
     80 
     81   // Creates a NetworkUIData object from |onc_network|, which has to be a valid
     82   // ONC NetworkConfiguration dictionary.
     83   // This function is used to create the "UIData" field of the Shill
     84   // configuration.
     85   static scoped_ptr<NetworkUIData> CreateFromONC(
     86       onc::ONCSource onc_source,
     87       const base::DictionaryValue& onc_network);
     88 
     89   // Key for storing source of the ONC network.
     90   static const char kKeyONCSource[];
     91 
     92   // Key for storing the certificate pattern.
     93   static const char kKeyCertificatePattern[];
     94 
     95   // Key for storing the certificate type.
     96   static const char kKeyCertificateType[];
     97 
     98   // Key for storing the user settings.
     99   static const char kKeyUserSettings[];
    100 
    101  private:
    102   CertificatePattern certificate_pattern_;
    103   onc::ONCSource onc_source_;
    104   ClientCertType certificate_type_;
    105   scoped_ptr<base::DictionaryValue> user_settings_;
    106   std::string policy_guid_;
    107 };
    108 
    109 }  // namespace chromeos
    110 
    111 #endif  // CHROMEOS_NETWORK_NETWORK_UI_DATA_H_
    112