OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/proxy_cros_settings_provider.h" | 5 #include "chrome/browser/chromeos/proxy_cros_settings_provider.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "chrome/browser/browser_list.h" | 9 #include "chrome/browser/browser_list.h" |
10 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
11 #include "chrome/common/chrome_switches.h" | 11 #include "chrome/common/chrome_switches.h" |
(...skipping 18 matching lines...) Expand all Loading... |
30 //------------------ ProxyCrosSettingsProvider: public methods ----------------- | 30 //------------------ ProxyCrosSettingsProvider: public methods ----------------- |
31 | 31 |
32 ProxyCrosSettingsProvider::ProxyCrosSettingsProvider() { } | 32 ProxyCrosSettingsProvider::ProxyCrosSettingsProvider() { } |
33 | 33 |
34 void ProxyCrosSettingsProvider::DoSet(const std::string& path, | 34 void ProxyCrosSettingsProvider::DoSet(const std::string& path, |
35 Value* in_value) { | 35 Value* in_value) { |
36 if (!in_value) { | 36 if (!in_value) { |
37 return; | 37 return; |
38 } | 38 } |
39 | 39 |
40 // Keep whatever user inputs so that we could use it later. | |
41 SetCache(path, in_value); | |
42 | |
43 chromeos::ProxyConfigServiceImpl* config_service = GetConfigService(); | 40 chromeos::ProxyConfigServiceImpl* config_service = GetConfigService(); |
44 // Don't persist settings to device for guest session. | 41 // Don't persist settings to device for guest session. |
45 config_service->UISetPersistToDevice( | 42 config_service->UISetPersistToDevice( |
46 !CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)); | 43 !CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)); |
47 // Retrieve proxy config. | 44 // Retrieve proxy config. |
48 chromeos::ProxyConfigServiceImpl::ProxyConfig config; | 45 chromeos::ProxyConfigServiceImpl::ProxyConfig config; |
49 config_service->UIGetProxyConfig(&config); | 46 config_service->UIGetProxyConfig(&config); |
50 | 47 |
51 if (path == kProxyPacUrl) { | 48 if (path == kProxyPacUrl) { |
52 std::string val; | 49 std::string val; |
53 if (in_value->GetAsString(&val)) { | 50 if (in_value->GetAsString(&val)) { |
54 GURL url(val); | 51 GURL url(val); |
55 config_service->UISetProxyConfigToPACScript(url); | 52 config_service->UISetProxyConfigToPACScript(url); |
56 } | 53 } |
57 } else if (path == kProxySingleHttp) { | 54 } else if (path == kProxySingleHttp) { |
58 std::string val; | 55 std::string val; |
59 if (in_value->GetAsString(&val)) { | 56 if (in_value->GetAsString(&val)) { |
60 std::string uri = val; | 57 config_service->UISetProxyConfigToSingleProxy(CreateProxyServerFromHost( |
61 AppendPortIfValid(kProxySingleHttpPort, &uri); | 58 val, config.single_proxy, net::ProxyServer::SCHEME_HTTP)); |
62 config_service->UISetProxyConfigToSingleProxy( | |
63 net::ProxyServer::FromURI(uri, net::ProxyServer::SCHEME_HTTP)); | |
64 } | 59 } |
65 } else if (path == kProxySingleHttpPort) { | 60 } else if (path == kProxySingleHttpPort) { |
66 std::string val; | 61 int val; |
67 if (in_value->GetAsString(&val)) { | 62 if (in_value->GetAsInteger(&val)) { |
68 std::string uri; | 63 config_service->UISetProxyConfigToSingleProxy(CreateProxyServerFromPort( |
69 FormServerUriIfValid(kProxySingleHttp, val, &uri); | 64 val, config.single_proxy, net::ProxyServer::SCHEME_HTTP)); |
70 config_service->UISetProxyConfigToSingleProxy( | |
71 net::ProxyServer::FromURI(uri, net::ProxyServer::SCHEME_HTTP)); | |
72 } | 65 } |
73 } else if (path == kProxyHttpUrl) { | 66 } else if (path == kProxyHttpUrl) { |
74 std::string val; | 67 std::string val; |
75 if (in_value->GetAsString(&val)) { | 68 if (in_value->GetAsString(&val)) { |
76 std::string uri = val; | |
77 AppendPortIfValid(kProxyHttpPort, &uri); | |
78 config_service->UISetProxyConfigToProxyPerScheme("http", | 69 config_service->UISetProxyConfigToProxyPerScheme("http", |
79 net::ProxyServer::FromURI(uri, net::ProxyServer::SCHEME_HTTP)); | 70 CreateProxyServerFromHost( |
| 71 val, config.http_proxy, net::ProxyServer::SCHEME_HTTP)); |
80 } | 72 } |
81 } else if (path == kProxyHttpPort) { | 73 } else if (path == kProxyHttpPort) { |
82 std::string val; | 74 int val; |
83 if (in_value->GetAsString(&val)) { | 75 if (in_value->GetAsInteger(&val)) { |
84 std::string uri; | |
85 FormServerUriIfValid(kProxyHttpUrl, val, &uri); | |
86 config_service->UISetProxyConfigToProxyPerScheme("http", | 76 config_service->UISetProxyConfigToProxyPerScheme("http", |
87 net::ProxyServer::FromURI(uri, net::ProxyServer::SCHEME_HTTP)); | 77 CreateProxyServerFromPort( |
| 78 val, config.http_proxy, net::ProxyServer::SCHEME_HTTP)); |
88 } | 79 } |
89 } else if (path == kProxyHttpsUrl) { | 80 } else if (path == kProxyHttpsUrl) { |
90 std::string val; | 81 std::string val; |
91 if (in_value->GetAsString(&val)) { | 82 if (in_value->GetAsString(&val)) { |
92 std::string uri = val; | |
93 AppendPortIfValid(kProxyHttpsPort, &uri); | |
94 config_service->UISetProxyConfigToProxyPerScheme("https", | 83 config_service->UISetProxyConfigToProxyPerScheme("https", |
95 net::ProxyServer::FromURI(uri, net::ProxyServer::SCHEME_HTTP)); | 84 CreateProxyServerFromHost( |
| 85 val, config.https_proxy, net::ProxyServer::SCHEME_HTTPS)); |
96 } | 86 } |
97 } else if (path == kProxyHttpsPort) { | 87 } else if (path == kProxyHttpsPort) { |
98 std::string val; | 88 int val; |
99 if (in_value->GetAsString(&val)) { | 89 if (in_value->GetAsInteger(&val)) { |
100 std::string uri; | |
101 FormServerUriIfValid(kProxyHttpsUrl, val, &uri); | |
102 config_service->UISetProxyConfigToProxyPerScheme("https", | 90 config_service->UISetProxyConfigToProxyPerScheme("https", |
103 net::ProxyServer::FromURI(uri, net::ProxyServer::SCHEME_HTTP)); | 91 CreateProxyServerFromPort( |
| 92 val, config.https_proxy, net::ProxyServer::SCHEME_HTTPS)); |
104 } | 93 } |
105 } else if (path == kProxyType) { | 94 } else if (path == kProxyType) { |
106 int val; | 95 int val; |
107 if (in_value->GetAsInteger(&val)) { | 96 if (in_value->GetAsInteger(&val)) { |
108 if (val == 3) { | 97 if (val == 3) { |
109 if (config.automatic_proxy.pac_url.is_valid()) | 98 if (config.automatic_proxy.pac_url.is_valid()) |
110 config_service->UISetProxyConfigToPACScript( | 99 config_service->UISetProxyConfigToPACScript( |
111 config.automatic_proxy.pac_url); | 100 config.automatic_proxy.pac_url); |
112 else | 101 else |
113 config_service->UISetProxyConfigToAutoDetect(); | 102 config_service->UISetProxyConfigToAutoDetect(); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 if (val) | 141 if (val) |
153 config_service->UISetProxyConfigToSingleProxy( | 142 config_service->UISetProxyConfigToSingleProxy( |
154 config.single_proxy.server); | 143 config.single_proxy.server); |
155 else | 144 else |
156 config_service->UISetProxyConfigToProxyPerScheme("http", | 145 config_service->UISetProxyConfigToProxyPerScheme("http", |
157 config.http_proxy.server); | 146 config.http_proxy.server); |
158 } | 147 } |
159 } else if (path == kProxyFtpUrl) { | 148 } else if (path == kProxyFtpUrl) { |
160 std::string val; | 149 std::string val; |
161 if (in_value->GetAsString(&val)) { | 150 if (in_value->GetAsString(&val)) { |
162 std::string uri = val; | |
163 AppendPortIfValid(kProxyFtpPort, &uri); | |
164 config_service->UISetProxyConfigToProxyPerScheme("ftp", | 151 config_service->UISetProxyConfigToProxyPerScheme("ftp", |
165 net::ProxyServer::FromURI(uri, net::ProxyServer::SCHEME_HTTP)); | 152 CreateProxyServerFromHost( |
| 153 val, config.ftp_proxy, net::ProxyServer::SCHEME_HTTP)); |
166 } | 154 } |
167 } else if (path == kProxyFtpPort) { | 155 } else if (path == kProxyFtpPort) { |
168 std::string val; | 156 int val; |
169 if (in_value->GetAsString(&val)) { | 157 if (in_value->GetAsInteger(&val)) { |
170 std::string uri; | |
171 FormServerUriIfValid(kProxyFtpUrl, val, &uri); | |
172 config_service->UISetProxyConfigToProxyPerScheme("ftp", | 158 config_service->UISetProxyConfigToProxyPerScheme("ftp", |
173 net::ProxyServer::FromURI(uri, net::ProxyServer::SCHEME_HTTP)); | 159 CreateProxyServerFromPort( |
| 160 val, config.ftp_proxy, net::ProxyServer::SCHEME_HTTP)); |
174 } | 161 } |
175 } else if (path == kProxySocks) { | 162 } else if (path == kProxySocks) { |
176 std::string val; | 163 std::string val; |
177 if (in_value->GetAsString(&val)) { | 164 if (in_value->GetAsString(&val)) { |
178 std::string uri = val; | |
179 AppendPortIfValid(kProxySocksPort, &uri); | |
180 config_service->UISetProxyConfigToProxyPerScheme("socks", | 165 config_service->UISetProxyConfigToProxyPerScheme("socks", |
181 net::ProxyServer::FromURI(uri, | 166 CreateProxyServerFromHost(val, config.socks_proxy, |
182 StartsWithASCII(uri, "socks4://", false) ? | 167 StartsWithASCII(val, "socks5://", false) ? |
183 net::ProxyServer::SCHEME_SOCKS4 : | 168 net::ProxyServer::SCHEME_SOCKS5 : |
184 net::ProxyServer::SCHEME_SOCKS5)); | 169 net::ProxyServer::SCHEME_SOCKS4)); |
185 } | 170 } |
186 } else if (path == kProxySocksPort) { | 171 } else if (path == kProxySocksPort) { |
187 std::string val; | 172 int val; |
188 if (in_value->GetAsString(&val)) { | 173 if (in_value->GetAsInteger(&val)) { |
189 std::string uri; | 174 std::string host = config.socks_proxy.server.host_port_pair().host(); |
190 FormServerUriIfValid(kProxySocks, val, &uri); | |
191 config_service->UISetProxyConfigToProxyPerScheme("socks", | 175 config_service->UISetProxyConfigToProxyPerScheme("socks", |
192 net::ProxyServer::FromURI(uri, | 176 CreateProxyServerFromPort(val, config.socks_proxy, |
193 StartsWithASCII(uri, "socks4://", false) ? | 177 StartsWithASCII(host, "socks5://", false) ? |
194 net::ProxyServer::SCHEME_SOCKS4 : | 178 net::ProxyServer::SCHEME_SOCKS5 : |
195 net::ProxyServer::SCHEME_SOCKS5)); | 179 net::ProxyServer::SCHEME_SOCKS4)); |
196 } | 180 } |
197 } else if (path == kProxyIgnoreList) { | 181 } else if (path == kProxyIgnoreList) { |
198 net::ProxyBypassRules bypass_rules; | 182 net::ProxyBypassRules bypass_rules; |
199 if (in_value->GetType() == Value::TYPE_LIST) { | 183 if (in_value->GetType() == Value::TYPE_LIST) { |
200 const ListValue* list_value = static_cast<const ListValue*>(in_value); | 184 const ListValue* list_value = static_cast<const ListValue*>(in_value); |
201 for (size_t x = 0; x < list_value->GetSize(); x++) { | 185 for (size_t x = 0; x < list_value->GetSize(); x++) { |
202 std::string val; | 186 std::string val; |
203 if (list_value->GetString(x, &val)) { | 187 if (list_value->GetString(x, &val)) { |
204 bypass_rules.AddRuleFromString(val); | 188 bypass_rules.AddRuleFromString(val); |
205 } | 189 } |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 return ::StartsWithASCII(path, "cros.session.proxy", true); | 271 return ::StartsWithASCII(path, "cros.session.proxy", true); |
288 } | 272 } |
289 | 273 |
290 //----------------- ProxyCrosSettingsProvider: private methods ----------------- | 274 //----------------- ProxyCrosSettingsProvider: private methods ----------------- |
291 | 275 |
292 chromeos::ProxyConfigServiceImpl* | 276 chromeos::ProxyConfigServiceImpl* |
293 ProxyCrosSettingsProvider::GetConfigService() const { | 277 ProxyCrosSettingsProvider::GetConfigService() const { |
294 return g_browser_process->chromeos_proxy_config_service_impl(); | 278 return g_browser_process->chromeos_proxy_config_service_impl(); |
295 } | 279 } |
296 | 280 |
297 void ProxyCrosSettingsProvider::AppendPortIfValid( | 281 net::ProxyServer ProxyCrosSettingsProvider::CreateProxyServerFromHost( |
298 const char* port_cache_key, | 282 const std::string& host, |
299 std::string* server_uri) { | 283 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy, |
300 std::string port; | 284 net::ProxyServer::Scheme scheme) const { |
301 if (!server_uri->empty() && cache_.GetString(port_cache_key, &port) && | 285 uint16 port = proxy.server.host_port_pair().port(); |
302 !port.empty()) { | 286 if (!port) |
303 *server_uri += ":" + port; | 287 port = net::ProxyServer::GetDefaultPortForScheme(scheme); |
304 } | 288 net::HostPortPair host_port_pair(host, port); |
| 289 return net::ProxyServer(scheme, host_port_pair); |
305 } | 290 } |
306 | 291 |
307 void ProxyCrosSettingsProvider::FormServerUriIfValid( | 292 net::ProxyServer ProxyCrosSettingsProvider::CreateProxyServerFromPort( |
308 const char* host_cache_key, | 293 uint16 port, |
309 const std::string& port_num, std::string* server_uri) { | 294 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy, |
310 if (cache_.GetString(host_cache_key, server_uri) && !server_uri->empty() && | 295 net::ProxyServer::Scheme scheme) const { |
311 !port_num.empty()) | 296 std::string host = proxy.server.host_port_pair().host(); |
312 *server_uri += ":" + port_num; | 297 net::HostPortPair host_port_pair(host, port); |
| 298 return net::ProxyServer(scheme, host_port_pair); |
313 } | 299 } |
314 | 300 |
315 Value* ProxyCrosSettingsProvider::CreateServerHostValue( | 301 Value* ProxyCrosSettingsProvider::CreateServerHostValue( |
316 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) const { | 302 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) const { |
317 return proxy.server.is_valid() ? | 303 return proxy.server.is_valid() ? |
318 Value::CreateStringValue(proxy.server.host_port_pair().host()) : | 304 Value::CreateStringValue(proxy.server.host_port_pair().host()) : |
319 NULL; | 305 NULL; |
320 } | 306 } |
321 | 307 |
322 Value* ProxyCrosSettingsProvider::CreateServerPortValue( | 308 Value* ProxyCrosSettingsProvider::CreateServerPortValue( |
323 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) const { | 309 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) const { |
324 return proxy.server.is_valid() ? | 310 return proxy.server.is_valid() ? |
325 Value::CreateIntegerValue(proxy.server.host_port_pair().port()) : | 311 Value::CreateIntegerValue(proxy.server.host_port_pair().port()) : |
326 NULL; | 312 NULL; |
327 } | 313 } |
328 | 314 |
329 void ProxyCrosSettingsProvider::SetCache(const std::string& key, | |
330 const Value* value) { | |
331 cache_.Set(key, value->DeepCopy()); | |
332 } | |
333 | |
334 } // namespace chromeos | 315 } // namespace chromeos |
OLD | NEW |