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