firefox_proxy_settings.cc revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/firefox_proxy_settings.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_tokenizer.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/firefox_importer_utils.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/proxy/proxy_config.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst wchar_t* const kNetworkProxyTypeKey = L"network.proxy.type"; 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char* const kHTTPProxyKey = "network.proxy.http"; 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst wchar_t* const kHTTPProxyPortKey = L"network.proxy.http_port"; 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char* const kSSLProxyKey = "network.proxy.ssl"; 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst wchar_t* const kSSLProxyPortKey = L"network.proxy.ssl_port"; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char* const kFTPProxyKey = "network.proxy.ftp"; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst wchar_t* const kFTPProxyPortKey = L"network.proxy.ftp_port"; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char* const kGopherProxyKey = "network.proxy.gopher"; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst wchar_t* const kGopherProxyPortKey = L"network.proxy.gopher_port"; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char* const kSOCKSHostKey = "network.proxy.socks"; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst wchar_t* const kSOCKSHostPortKey = L"network.proxy.socks_port"; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst wchar_t* const kSOCKSVersionKey = L"network.proxy.socks_version"; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char* const kAutoconfigURL = "network.proxy.autoconfig_url"; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char* const kNoProxyListKey = "network.proxy.no_proxies_on"; 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char* const kPrefFileName = "prefs.js"; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFirefoxProxySettings::ProxyConfig IntToProxyConfig(int type) { 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (type) { 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case 1: 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return FirefoxProxySettings::MANUAL; 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case 2: 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return FirefoxProxySettings::AUTO_FROM_URL; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case 4: 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return FirefoxProxySettings::AUTO_DETECT; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case 5: 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return FirefoxProxySettings::SYSTEM; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Unknown Firefox proxy config type: " << type; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return FirefoxProxySettings::NO_PROXY; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFirefoxProxySettings::SOCKSVersion IntToSOCKSVersion(int type) { 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (type) { 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case 4: 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return FirefoxProxySettings::V4; 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case 5: 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return FirefoxProxySettings::V5; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Unknown Firefox proxy config type: " << type; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return FirefoxProxySettings::UNKNONW; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFirefoxProxySettings::FirefoxProxySettings() { 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Reset(); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFirefoxProxySettings::~FirefoxProxySettings() { 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid FirefoxProxySettings::Reset() { 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch config_type_ = NO_PROXY; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch http_proxy_.clear(); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch http_proxy_port_ = 0; 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ssl_proxy_.clear(); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ssl_proxy_port_ = 0; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ftp_proxy_.clear(); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ftp_proxy_port_ = 0; 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gopher_proxy_.clear(); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gopher_proxy_port_ = 0; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch socks_host_.clear(); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch socks_port_ = 0; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch socks_version_ = UNKNONW; 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch proxy_bypass_list_.clear(); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch autoconfig_url_.clear(); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool FirefoxProxySettings::GetSettings(FirefoxProxySettings* settings) { 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(settings); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch settings->Reset(); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath profile_path = GetFirefoxProfilePath(); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (profile_path.empty()) 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath pref_file = profile_path.AppendASCII(kPrefFileName); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GetSettingsFromFile(pref_file, settings); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool FirefoxProxySettings::ToProxyConfig(net::ProxyConfig* config) { 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (config_type()) { 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case NO_PROXY: 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *config = net::ProxyConfig::CreateDirect(); 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case AUTO_DETECT: 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *config = net::ProxyConfig::CreateAutoDetect(); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case AUTO_FROM_URL: 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *config = net::ProxyConfig::CreateFromCustomPacURL( 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL(autoconfig_url())); 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case SYSTEM: 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Can't convert this directly to a ProxyConfig. 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case MANUAL: 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Handled outside of the switch (since it is a lot of code.) 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The rest of this funciton is for handling the MANUAL case. 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK_EQ(MANUAL, config_type()); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *config = net::ProxyConfig(); 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch config->proxy_rules().type = 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME; 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!http_proxy().empty()) { 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch config->proxy_rules().proxy_for_http = net::ProxyServer( 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::ProxyServer::SCHEME_HTTP, 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch http_proxy(), 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch http_proxy_port()); 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!ftp_proxy().empty()) { 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch config->proxy_rules().proxy_for_ftp = net::ProxyServer( 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::ProxyServer::SCHEME_HTTP, 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ftp_proxy(), 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ftp_proxy_port()); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!ssl_proxy().empty()) { 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch config->proxy_rules().proxy_for_https = net::ProxyServer( 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::ProxyServer::SCHEME_HTTP, 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ssl_proxy(), 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ssl_proxy_port()); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!socks_host().empty()) { 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::ProxyServer::Scheme proxy_scheme = V5 == socks_version() ? 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::ProxyServer::SCHEME_SOCKS5 : net::ProxyServer::SCHEME_SOCKS4; 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch config->proxy_rules().socks_proxy = net::ProxyServer( 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch proxy_scheme, 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch socks_host(), 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch socks_port()); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch config->proxy_rules().bypass_rules.ParseFromStringUsingSuffixMatching( 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch JoinString(proxy_bypass_list_, ';')); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool FirefoxProxySettings::GetSettingsFromFile(const FilePath& pref_file, 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FirefoxProxySettings* settings) { 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue dictionary; 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!ParsePrefFile(pref_file, &dictionary)) 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int proxy_type = 0; 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetInteger(kNetworkProxyTypeKey, &proxy_type)) 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; // No type means no proxy. 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch settings->config_type_ = IntToProxyConfig(proxy_type); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (settings->config_type_ == AUTO_FROM_URL) { 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetStringASCII(kAutoconfigURL, 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &(settings->autoconfig_url_))) { 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox proxy autoconfig URL"; 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (settings->config_type_ == MANUAL) { 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetStringASCII(kHTTPProxyKey, &(settings->http_proxy_))) 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox proxy HTTP host"; 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetInteger(kHTTPProxyPortKey, 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &(settings->http_proxy_port_))) { 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox proxy HTTP port"; 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetStringASCII(kSSLProxyKey, &(settings->ssl_proxy_))) 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox proxy SSL host"; 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetInteger(kSSLProxyPortKey, &(settings->ssl_proxy_port_))) 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox proxy SSL port"; 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetStringASCII(kFTPProxyKey, &(settings->ftp_proxy_))) 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox proxy FTP host"; 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetInteger(kFTPProxyPortKey, &(settings->ftp_proxy_port_))) 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox proxy SSL port"; 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetStringASCII(kGopherProxyKey, &(settings->gopher_proxy_))) 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox proxy gopher host"; 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetInteger(kGopherProxyPortKey, 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &(settings->gopher_proxy_port_))) { 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox proxy gopher port"; 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetStringASCII(kSOCKSHostKey, &(settings->socks_host_))) 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox SOCKS host"; 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!dictionary.GetInteger(kSOCKSHostPortKey, &(settings->socks_port_))) 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << "Failed to retrieve Firefox SOCKS port"; 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int socks_version; 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (dictionary.GetInteger(kSOCKSVersionKey, &socks_version)) 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch settings->socks_version_ = IntToSOCKSVersion(socks_version); 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string proxy_bypass; 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (dictionary.GetStringASCII(kNoProxyListKey, &proxy_bypass) && 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch !proxy_bypass.empty()) { 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StringTokenizer string_tok(proxy_bypass, ","); 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch while (string_tok.GetNext()) { 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string token = string_tok.token(); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TrimWhitespaceASCII(token, TRIM_ALL, &token); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!token.empty()) 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch settings->proxy_bypass_list_.push_back(token); 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 227