15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_PROXY_PROXY_CONFIG_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_PROXY_PROXY_CONFIG_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_export.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_bypass_rules.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_config_source.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/proxy/proxy_list.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_server.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyInfo; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ProxyConfig describes a user's proxy settings. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// There are two categories of proxy settings: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (1) Automatic (indicates the methods to obtain a PAC script) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (2) Manual (simple set of proxy servers per scheme, and bypass patterns) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When both automatic and manual settings are specified, the Automatic ones 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// take precedence over the manual ones. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For more details see: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://www.chromium.org/developers/design-documents/proxy-settings-fallback 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NET_EXPORT ProxyConfig { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ProxyRules describes the "manual" proxy settings. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(eroman): Turn this into a class. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(marq): Update the enum names; "TYPE_SINGLE_PROXY" really means 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the same set of proxies are used for all requests. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct NET_EXPORT ProxyRules { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Type { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_NO_RULES, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_SINGLE_PROXY, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_PROXY_PER_SCHEME, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that the default of TYPE_NO_RULES results in direct connections 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // being made when using this ProxyConfig. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyRules(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ProxyRules(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool empty() const { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return type == TYPE_NO_RULES; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets |result| with the proxies to use for |url| based on the current 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // rules. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Apply(const GURL& url, ProxyInfo* result) const; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses the rules from a string, indicating which proxies to use. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // proxy-uri = [<proxy-scheme>"://"]<proxy-host>[":"<proxy-port>] 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // proxy-uri-list = <proxy-uri>[","<proxy-uri-list>] 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // url-scheme = "http" | "https" | "ftp" | "socks" 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // scheme-proxies = [<url-scheme>"="]<proxy-uri-list> 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // proxy-rules = scheme-proxies[";"<scheme-proxies>] 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Thus, the proxy-rules string should be a semicolon-separated list of 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ordered proxies that apply to a particular URL scheme. Unless specified, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the proxy scheme for proxy-uris is assumed to be http. 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Some special cases: 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // * If the scheme is omitted from the first proxy list, that list applies 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to all URL schemes and subsequent lists are ignored. 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // * If a scheme is omitted from any proxy list after a list where a scheme 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // has been provided, the list without a scheme is ignored. 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // * If the url-scheme is set to 'socks', that sets a fallback list that 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to all otherwise unspecified url-schemes, however the default proxy- 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // scheme for proxy urls in the 'socks' list is understood to be 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // socks4:// if unspecified. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For example: 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "http=foopy:80;ftp=foopy2" -- use HTTP proxy "foopy:80" for http:// 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLs, and HTTP proxy "foopy2:80" for 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ftp:// URLs. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "foopy:80" -- use HTTP proxy "foopy:80" for all URLs. 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "foopy:80,bar,direct://" -- use HTTP proxy "foopy:80" for all URLs, 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // failing over to "bar" if "foopy:80" is 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // unavailable, and after that using no 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // proxy. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "socks4://foopy" -- use SOCKS v4 proxy "foopy:1080" for all 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLs. 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "http=foop,socks5://bar.com -- use HTTP proxy "foopy" for http URLs, 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and fail over to the SOCKS5 proxy 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "bar.com" if "foop" is unavailable. 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "http=foopy,direct:// -- use HTTP proxy "foopy" for http URLs, 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and use no proxy if "foopy" is 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // unavailable. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "http=foopy;socks=foopy2 -- use HTTP proxy "foopy" for http URLs, 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and use socks4://foopy2 for all other 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // URLs. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ParseFromString(const std::string& proxy_rules); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns one of {&proxies_for_http, &proxies_for_https, &proxies_for_ftp, 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // &fallback_proxies}, or NULL if there is no proxy to use. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should only call this if the type is TYPE_PROXY_PER_SCHEME. 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ProxyList* MapUrlSchemeToProxyList( 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& url_scheme) const; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if |*this| describes the same configuration as |other|. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Equals(const ProxyRules& other) const; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exceptions for when not to use a proxy. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyBypassRules bypass_rules; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reverse the meaning of |bypass_rules|. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool reverse_bypass; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Type type; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set if |type| is TYPE_SINGLE_PROXY. 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyList single_proxies; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set if |type| is TYPE_PROXY_PER_SCHEME. 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyList proxies_for_http; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyList proxies_for_https; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyList proxies_for_ftp; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used when a fallback has been defined and the url to be proxied doesn't 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // match any of the standard schemes. 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyList fallback_proxies; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns one of {&proxies_for_http, &proxies_for_https, &proxies_for_ftp} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or NULL if it is a scheme that we don't have a mapping 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for. Should only call this if the type is TYPE_PROXY_PER_SCHEME. 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyList* MapUrlSchemeToProxyListNoFallback(const std::string& scheme); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef int ID; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates an invalid proxy config. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ID kInvalidConfigID = 0; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfig(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfig(const ProxyConfig& config); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ProxyConfig(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfig& operator=(const ProxyConfig& config); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to numerically identify this configuration. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ID id() const { return id_; } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_id(ID id) { id_ = id; } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_valid() const { return id_ != kInvalidConfigID; } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the given config is equivalent to this config. The 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // comparison ignores differences in |id()| and |source()|. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Equals(const ProxyConfig& other) const; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if this config contains any "automatic" settings. See the 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class description for what that means. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasAutomaticSettings() const; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearAutomaticSettings(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a Value dump of this configuration. The caller is responsible for 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // deleting the returned value. 173868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::DictionaryValue* ToValue() const; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyRules& proxy_rules() { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return proxy_rules_; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProxyRules& proxy_rules() const { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return proxy_rules_; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_pac_url(const GURL& url) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pac_url_ = url; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& pac_url() const { 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pac_url_; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_pac_mandatory(bool enable_pac_mandatory) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pac_mandatory_ = enable_pac_mandatory; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool pac_mandatory() const { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pac_mandatory_; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_pac_url() const { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pac_url_.is_valid(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_auto_detect(bool enable_auto_detect) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_detect_ = enable_auto_detect; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool auto_detect() const { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return auto_detect_; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_source(ProxyConfigSource source) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_ = source; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigSource source() const { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return source_; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helpers to construct some common proxy configurations. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static ProxyConfig CreateDirect() { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ProxyConfig(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static ProxyConfig CreateAutoDetect() { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfig config; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config.set_auto_detect(true); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return config; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static ProxyConfig CreateFromCustomPacURL(const GURL& pac_url) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfig config; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config.set_pac_url(pac_url); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // By default fall back to direct connection in case PAC script fails. 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config.set_pac_mandatory(false); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return config; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if the proxy configuration should be auto-detected. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool auto_detect_; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If non-empty, indicates the URL of the proxy auto-config file to use. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL pac_url_; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If true, blocks all traffic in case fetching the pac script from |pac_url_| 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fails. Only valid if |pac_url_| is non-empty. 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool pac_mandatory_; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Manual proxy settings. 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyRules proxy_rules_; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Source of proxy settings. 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigSource source_; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ID id_; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NET_PROXY_PROXY_CONFIG_H_ 264