Home | History | Annotate | Download | only in prefs
      1 // Copyright (c) 2011 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 #include "chrome/browser/prefs/proxy_config_dictionary.h"
      6 
      7 #include "base/basictypes.h"
      8 #include "base/logging.h"
      9 #include "base/values.h"
     10 
     11 namespace {
     12 
     13 // Integer to specify the type of proxy settings.
     14 // See ProxyPrefs for possible values and interactions with the other proxy
     15 // preferences.
     16 const char kProxyMode[] = "mode";
     17 // String specifying the proxy server. For a specification of the expected
     18 // syntax see net::ProxyConfig::ProxyRules::ParseFromString().
     19 const char kProxyServer[] = "server";
     20 // URL to the proxy .pac file.
     21 const char kProxyPacUrl[] = "pac_url";
     22 // Optional boolean flag indicating whether a valid PAC script is mandatory.
     23 // If true, network traffic does not fall back to direct connections in case the
     24 // PAC script is not available.
     25 const char kProxyPacMandatory[] = "pac_mandatory";
     26 // String containing proxy bypass rules. For a specification of the
     27 // expected syntax see net::ProxyBypassRules::ParseFromString().
     28 const char kProxyBypassList[] = "bypass_list";
     29 
     30 }  // namespace
     31 
     32 ProxyConfigDictionary::ProxyConfigDictionary(const base::DictionaryValue* dict)
     33     : dict_(dict->DeepCopy()) {
     34 }
     35 
     36 ProxyConfigDictionary::~ProxyConfigDictionary() {}
     37 
     38 bool ProxyConfigDictionary::GetMode(ProxyPrefs::ProxyMode* out) const {
     39   std::string mode_str;
     40   return dict_->GetString(kProxyMode, &mode_str)
     41       && StringToProxyMode(mode_str, out);
     42 }
     43 
     44 bool ProxyConfigDictionary::GetPacUrl(std::string* out) const {
     45   return dict_->GetString(kProxyPacUrl, out);
     46 }
     47 
     48 bool ProxyConfigDictionary::GetPacMandatory(bool* out) const {
     49   if (!dict_->HasKey(kProxyPacMandatory)) {
     50     *out = false;
     51     return true;
     52   }
     53   return dict_->GetBoolean(kProxyPacMandatory, out);
     54 }
     55 
     56 bool ProxyConfigDictionary::GetProxyServer(std::string* out) const {
     57   return dict_->GetString(kProxyServer, out);
     58 }
     59 
     60 bool ProxyConfigDictionary::GetBypassList(std::string* out) const {
     61   return dict_->GetString(kProxyBypassList, out);
     62 }
     63 
     64 bool ProxyConfigDictionary::HasBypassList() const {
     65   return dict_->HasKey(kProxyBypassList);
     66 }
     67 
     68 const base::DictionaryValue& ProxyConfigDictionary::GetDictionary() const {
     69   return *dict_;
     70 }
     71 
     72 // static
     73 base::DictionaryValue* ProxyConfigDictionary::CreateDirect() {
     74   return CreateDictionary(ProxyPrefs::MODE_DIRECT,
     75                           std::string(),
     76                           false,
     77                           std::string(),
     78                           std::string());
     79 }
     80 
     81 // static
     82 base::DictionaryValue* ProxyConfigDictionary::CreateAutoDetect() {
     83   return CreateDictionary(ProxyPrefs::MODE_AUTO_DETECT,
     84                           std::string(),
     85                           false,
     86                           std::string(),
     87                           std::string());
     88 }
     89 
     90 // static
     91 base::DictionaryValue* ProxyConfigDictionary::CreatePacScript(
     92     const std::string& pac_url,
     93     bool pac_mandatory) {
     94   return CreateDictionary(ProxyPrefs::MODE_PAC_SCRIPT,
     95                           pac_url,
     96                           pac_mandatory,
     97                           std::string(),
     98                           std::string());
     99 }
    100 
    101 // static
    102 base::DictionaryValue* ProxyConfigDictionary::CreateFixedServers(
    103     const std::string& proxy_server,
    104     const std::string& bypass_list) {
    105   if (!proxy_server.empty()) {
    106     return CreateDictionary(ProxyPrefs::MODE_FIXED_SERVERS,
    107                             std::string(),
    108                             false,
    109                             proxy_server,
    110                             bypass_list);
    111   } else {
    112     return CreateDirect();
    113   }
    114 }
    115 
    116 // static
    117 base::DictionaryValue* ProxyConfigDictionary::CreateSystem() {
    118   return CreateDictionary(ProxyPrefs::MODE_SYSTEM,
    119                           std::string(),
    120                           false,
    121                           std::string(),
    122                           std::string());
    123 }
    124 
    125 // static
    126 base::DictionaryValue* ProxyConfigDictionary::CreateDictionary(
    127     ProxyPrefs::ProxyMode mode,
    128     const std::string& pac_url,
    129     bool pac_mandatory,
    130     const std::string& proxy_server,
    131     const std::string& bypass_list) {
    132   base::DictionaryValue* dict = new base::DictionaryValue();
    133   dict->SetString(kProxyMode, ProxyModeToString(mode));
    134   if (!pac_url.empty()) {
    135     dict->SetString(kProxyPacUrl, pac_url);
    136     dict->SetBoolean(kProxyPacMandatory, pac_mandatory);
    137   }
    138   if (!proxy_server.empty())
    139     dict->SetString(kProxyServer, proxy_server);
    140   if (!bypass_list.empty())
    141     dict->SetString(kProxyBypassList, bypass_list);
    142   return dict;
    143 }
    144