| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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 "net/proxy/proxy_config_service_ios.h" | |
| 6 | |
| 7 #include <CoreFoundation/CoreFoundation.h> | |
| 8 #include <CFNetwork/CFProxySupport.h> | |
| 9 | |
| 10 #include "base/mac/foundation_util.h" | |
| 11 #include "base/mac/scoped_cftyperef.h" | |
| 12 #include "base/message_loop/message_loop.h" | |
| 13 #include "base/strings/sys_string_conversions.h" | |
| 14 #include "net/proxy/proxy_config.h" | |
| 15 | |
| 16 namespace net { | |
| 17 | |
| 18 namespace { | |
| 19 | |
| 20 const int kPollIntervalSec = 10; | |
| 21 | |
| 22 // Utility function to pull out a boolean value from a dictionary and return it, | |
| 23 // returning a default value if the key is not present. | |
| 24 bool GetBoolFromDictionary(CFDictionaryRef dict, | |
| 25 CFStringRef key, | |
| 26 bool default_value) { | |
| 27 CFNumberRef number = | |
| 28 base::mac::GetValueFromDictionary<CFNumberRef>(dict, key); | |
| 29 if (!number) | |
| 30 return default_value; | |
| 31 | |
| 32 int int_value; | |
| 33 if (CFNumberGetValue(number, kCFNumberIntType, &int_value)) | |
| 34 return int_value; | |
| 35 else | |
| 36 return default_value; | |
| 37 } | |
| 38 | |
| 39 void GetCurrentProxyConfig(ProxyConfig* config) { | |
| 40 base::ScopedCFTypeRef<CFDictionaryRef> config_dict( | |
| 41 CFNetworkCopySystemProxySettings()); | |
| 42 DCHECK(config_dict); | |
| 43 | |
| 44 // Auto-detect is not supported. | |
| 45 // The kCFNetworkProxiesProxyAutoDiscoveryEnable key is not available on iOS. | |
| 46 | |
| 47 // PAC file | |
| 48 | |
| 49 if (GetBoolFromDictionary(config_dict.get(), | |
| 50 kCFNetworkProxiesProxyAutoConfigEnable, | |
| 51 false)) { | |
| 52 CFStringRef pac_url_ref = base::mac::GetValueFromDictionary<CFStringRef>( | |
| 53 config_dict.get(), kCFNetworkProxiesProxyAutoConfigURLString); | |
| 54 if (pac_url_ref) | |
| 55 config->set_pac_url(GURL(base::SysCFStringRefToUTF8(pac_url_ref))); | |
| 56 } | |
| 57 | |
| 58 // Proxies (for now http). | |
| 59 | |
| 60 // The following keys are not available on iOS: | |
| 61 // kCFNetworkProxiesFTPEnable | |
| 62 // kCFNetworkProxiesFTPProxy | |
| 63 // kCFNetworkProxiesFTPPort | |
| 64 // kCFNetworkProxiesHTTPSEnable | |
| 65 // kCFNetworkProxiesHTTPSProxy | |
| 66 // kCFNetworkProxiesHTTPSPort | |
| 67 // kCFNetworkProxiesSOCKSEnable | |
| 68 // kCFNetworkProxiesSOCKSProxy | |
| 69 // kCFNetworkProxiesSOCKSPort | |
| 70 if (GetBoolFromDictionary(config_dict.get(), | |
| 71 kCFNetworkProxiesHTTPEnable, | |
| 72 false)) { | |
| 73 ProxyServer proxy_server = | |
| 74 ProxyServer::FromDictionary(ProxyServer::SCHEME_HTTP, | |
| 75 config_dict.get(), | |
| 76 kCFNetworkProxiesHTTPProxy, | |
| 77 kCFNetworkProxiesHTTPPort); | |
| 78 if (proxy_server.is_valid()) { | |
| 79 config->proxy_rules().type = | |
| 80 ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME; | |
| 81 config->proxy_rules().proxies_for_http.SetSingleProxyServer(proxy_server); | |
| 82 // Desktop Safari applies the HTTP proxy to http:// URLs only, but | |
| 83 // Mobile Safari applies the HTTP proxy to https:// URLs as well. | |
| 84 config->proxy_rules().proxies_for_https.SetSingleProxyServer( | |
| 85 proxy_server); | |
| 86 } | |
| 87 } | |
| 88 | |
| 89 // Proxy bypass list is not supported. | |
| 90 // The kCFNetworkProxiesExceptionsList key is not available on iOS. | |
| 91 | |
| 92 // Proxy bypass boolean is not supported. | |
| 93 // The kCFNetworkProxiesExcludeSimpleHostnames key is not available on iOS. | |
| 94 | |
| 95 // Source | |
| 96 config->set_source(PROXY_CONFIG_SOURCE_SYSTEM); | |
| 97 } | |
| 98 | |
| 99 } // namespace | |
| 100 | |
| 101 ProxyConfigServiceIOS::ProxyConfigServiceIOS() | |
| 102 : PollingProxyConfigService(base::TimeDelta::FromSeconds(kPollIntervalSec), | |
| 103 GetCurrentProxyConfig) { | |
| 104 } | |
| 105 | |
| 106 ProxyConfigServiceIOS::~ProxyConfigServiceIOS() { | |
| 107 } | |
| 108 | |
| 109 } // namespace net | |
| OLD | NEW |