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 "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