172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/prefs/proxy_config_dictionary.h" 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/basictypes.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/logging.h" 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/values.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace { 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Integer to specify the type of proxy settings. 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// See ProxyPrefs for possible values and interactions with the other proxy 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// preferences. 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst char kProxyMode[] = "mode"; 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// String specifying the proxy server. For a specification of the expected 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// syntax see net::ProxyConfig::ProxyRules::ParseFromString(). 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst char kProxyServer[] = "server"; 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// URL to the proxy .pac file. 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst char kProxyPacUrl[] = "pac_url"; 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// String containing proxy bypass rules. For a specification of the 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// expected syntax see net::ProxyBypassRules::ParseFromString(). 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst char kProxyBypassList[] = "bypass_list"; 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenProxyConfigDictionary::ProxyConfigDictionary(const DictionaryValue* dict) 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : dict_(dict->DeepCopy()) { 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenProxyConfigDictionary::~ProxyConfigDictionary() {} 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool ProxyConfigDictionary::GetMode(ProxyPrefs::ProxyMode* out) const { 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string mode_str; 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return dict_->GetString(kProxyMode, &mode_str) 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen && StringToProxyMode(mode_str, out); 3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool ProxyConfigDictionary::GetPacUrl(std::string* out) const { 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return dict_->GetString(kProxyPacUrl, out); 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool ProxyConfigDictionary::GetProxyServer(std::string* out) const { 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return dict_->GetString(kProxyServer, out); 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool ProxyConfigDictionary::GetBypassList(std::string* out) const { 4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return dict_->GetString(kProxyBypassList, out); 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool ProxyConfigDictionary::HasBypassList() const { 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return dict_->HasKey(kProxyBypassList); 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// static 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* ProxyConfigDictionary::CreateDirect() { 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return CreateDictionary(ProxyPrefs::MODE_DIRECT, "", "", ""); 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// static 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* ProxyConfigDictionary::CreateAutoDetect() { 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return CreateDictionary(ProxyPrefs::MODE_AUTO_DETECT, "", "", ""); 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// static 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* ProxyConfigDictionary::CreatePacScript( 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& pac_url) { 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return CreateDictionary(ProxyPrefs::MODE_PAC_SCRIPT, pac_url, "", ""); 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// static 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* ProxyConfigDictionary::CreateFixedServers( 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& proxy_server, 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& bypass_list) { 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!proxy_server.empty()) { 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return CreateDictionary( 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProxyPrefs::MODE_FIXED_SERVERS, "", proxy_server, bypass_list); 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else { 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return CreateDirect(); 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// static 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* ProxyConfigDictionary::CreateSystem() { 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return CreateDictionary(ProxyPrefs::MODE_SYSTEM, "", "", ""); 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// static 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* ProxyConfigDictionary::CreateDictionary( 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProxyPrefs::ProxyMode mode, 9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& pac_url, 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& proxy_server, 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& bypass_list) { 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* dict = new DictionaryValue(); 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen dict->SetString(kProxyMode, ProxyModeToString(mode)); 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!pac_url.empty()) 9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen dict->SetString(kProxyPacUrl, pac_url); 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!proxy_server.empty()) 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen dict->SetString(kProxyServer, proxy_server); 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!bypass_list.empty()) 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen dict->SetString(kProxyBypassList, bypass_list); 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return dict; 10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 105