Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: chrome/browser/chromeos/proxy_cros_settings_parser.cc

Issue 8467012: Refactor proxy handling for ChromeOS to not go through the CrosSettings interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Centralized the proxy change notification. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 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_parser.h"
6 6
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/chromeos/cros_settings.h"
10 #include "chrome/browser/profiles/profile.h" 8 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/ui/browser_list.h"
12 9
13 namespace chromeos { 10 namespace chromeos {
14 11
15 static const char kProxyPacUrl[] = "cros.session.proxy.pacurl"; 12 // Names of proxy preferences.
16 static const char kProxySingleHttp[] = "cros.session.proxy.singlehttp"; 13 const char kProxyPacUrl[] = "cros.session.proxy.pacurl";
17 static const char kProxySingleHttpPort[] = "cros.session.proxy.singlehttpport"; 14 const char kProxySingleHttp[] = "cros.session.proxy.singlehttp";
18 static const char kProxyHttpUrl[] = "cros.session.proxy.httpurl"; 15 const char kProxySingleHttpPort[] = "cros.session.proxy.singlehttpport";
19 static const char kProxyHttpPort[] = "cros.session.proxy.httpport"; 16 const char kProxyHttpUrl[] = "cros.session.proxy.httpurl";
20 static const char kProxyHttpsUrl[] = "cros.session.proxy.httpsurl"; 17 const char kProxyHttpPort[] = "cros.session.proxy.httpport";
21 static const char kProxyHttpsPort[] = "cros.session.proxy.httpsport"; 18 const char kProxyHttpsUrl[] = "cros.session.proxy.httpsurl";
22 static const char kProxyType[] = "cros.session.proxy.type"; 19 const char kProxyHttpsPort[] = "cros.session.proxy.httpsport";
23 static const char kProxySingle[] = "cros.session.proxy.single"; 20 const char kProxyType[] = "cros.session.proxy.type";
24 static const char kProxyFtpUrl[] = "cros.session.proxy.ftpurl"; 21 const char kProxySingle[] = "cros.session.proxy.single";
25 static const char kProxyFtpPort[] = "cros.session.proxy.ftpport"; 22 const char kProxyFtpUrl[] = "cros.session.proxy.ftpurl";
26 static const char kProxySocks[] = "cros.session.proxy.socks"; 23 const char kProxyFtpPort[] = "cros.session.proxy.ftpport";
27 static const char kProxySocksPort[] = "cros.session.proxy.socksport"; 24 const char kProxySocks[] = "cros.session.proxy.socks";
28 static const char kProxyIgnoreList[] = "cros.session.proxy.ignorelist"; 25 const char kProxySocksPort[] = "cros.session.proxy.socksport";
26 const char kProxyIgnoreList[] = "cros.session.proxy.ignorelist";
29 27
30 static const char* const kProxySettings[] = { 28 namespace {
31 kProxyPacUrl,
32 kProxySingleHttp,
33 kProxySingleHttpPort,
34 kProxyHttpUrl,
35 kProxyHttpPort,
36 kProxyHttpsUrl,
37 kProxyHttpsPort,
38 kProxyType,
39 kProxySingle,
40 kProxyFtpUrl,
41 kProxyFtpPort,
42 kProxySocks,
43 kProxySocksPort,
44 kProxyIgnoreList,
45 };
46 29
47 //------------------ ProxyCrosSettingsProvider: public methods ----------------- 30 base::Value* CreateServerHostValue(
48 31 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) {
49 ProxyCrosSettingsProvider::ProxyCrosSettingsProvider(Profile* profile) 32 return proxy.server.is_valid() ?
50 : profile_(profile) { 33 base::Value::CreateStringValue(proxy.server.host_port_pair().host()) :
34 NULL;
51 } 35 }
52 36
53 void ProxyCrosSettingsProvider::SetCurrentNetwork(const std::string& network) { 37 base::Value* CreateServerPortValue(
54 GetConfigService()->UISetCurrentNetwork(network); 38 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) {
55 for (size_t i = 0; i < arraysize(kProxySettings); ++i) 39 return proxy.server.is_valid() ?
56 CrosSettings::Get()->FireObservers(kProxySettings[i]); 40 base::Value::CreateIntegerValue(proxy.server.host_port_pair().port()) :
41 NULL;
57 } 42 }
58 43
59 void ProxyCrosSettingsProvider::MakeActiveNetworkCurrent() { 44 net::ProxyServer CreateProxyServerFromHost(
60 GetConfigService()->UIMakeActiveNetworkCurrent(); 45 const std::string& host,
61 for (size_t i = 0; i < arraysize(kProxySettings); ++i) 46 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy,
62 CrosSettings::Get()->FireObservers(kProxySettings[i]); 47 net::ProxyServer::Scheme scheme) {
48 uint16 port = 0;
49 if (proxy.server.is_valid())
50 port = proxy.server.host_port_pair().port();
51 if (host.length() == 0 && port == 0)
52 return net::ProxyServer();
53 if (port == 0)
54 port = net::ProxyServer::GetDefaultPortForScheme(scheme);
55 net::HostPortPair host_port_pair(host, port);
56 return net::ProxyServer(scheme, host_port_pair);
63 } 57 }
64 58
65 void ProxyCrosSettingsProvider::DoSet(const std::string& path, 59 net::ProxyServer CreateProxyServerFromPort(
66 Value* in_value) { 60 uint16 port,
61 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy,
62 net::ProxyServer::Scheme scheme) {
63 std::string host;
64 if (proxy.server.is_valid())
65 host = proxy.server.host_port_pair().host();
66 if (host.length() == 0 && port == 0)
67 return net::ProxyServer();
68 net::HostPortPair host_port_pair(host, port);
69 return net::ProxyServer(scheme, host_port_pair);
70 }
71
72 }
Mattias Nissler (ping if slow) 2011/11/08 09:25:22 // namespace
pastarmovj 2011/11/09 17:51:53 Done.
73
74 void ProxyCrosSettingsParser::SetProxyPrefValue(Profile* profile,
Mattias Nissler (ping if slow) 2011/11/08 09:25:22 These large functions suck. I wonder whether we ca
kuan 2011/11/08 14:45:25 somewhere some code has to do the parsing with mul
pastarmovj 2011/11/09 17:51:53 Ok keeping as is for now. Those functions are anyh
75 const std::string& path,
76 const base::Value* in_value) {
67 if (!in_value) { 77 if (!in_value) {
78 NOTREACHED();
68 return; 79 return;
69 } 80 }
70 81
71 chromeos::ProxyConfigServiceImpl* config_service = GetConfigService(); 82 chromeos::ProxyConfigServiceImpl* config_service =
83 profile->GetProxyConfigTracker();
72 // Retrieve proxy config. 84 // Retrieve proxy config.
73 chromeos::ProxyConfigServiceImpl::ProxyConfig config; 85 chromeos::ProxyConfigServiceImpl::ProxyConfig config;
74 config_service->UIGetProxyConfig(&config); 86 config_service->UIGetProxyConfig(&config);
75 87
76 if (path == kProxyPacUrl) { 88 if (path == kProxyPacUrl) {
77 std::string val; 89 std::string val;
78 if (in_value->GetAsString(&val)) { 90 if (in_value->GetAsString(&val)) {
79 GURL url(val); 91 GURL url(val);
80 if (url.is_valid()) 92 if (url.is_valid())
81 config_service->UISetProxyConfigToPACScript(url); 93 config_service->UISetProxyConfigToPACScript(url);
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 if (in_value->GetAsInteger(&val)) { 216 if (in_value->GetAsInteger(&val)) {
205 std::string host = config.socks_proxy.server.host_port_pair().host(); 217 std::string host = config.socks_proxy.server.host_port_pair().host();
206 config_service->UISetProxyConfigToProxyPerScheme("socks", 218 config_service->UISetProxyConfigToProxyPerScheme("socks",
207 CreateProxyServerFromPort(val, config.socks_proxy, 219 CreateProxyServerFromPort(val, config.socks_proxy,
208 StartsWithASCII(host, "socks5://", false) ? 220 StartsWithASCII(host, "socks5://", false) ?
209 net::ProxyServer::SCHEME_SOCKS5 : 221 net::ProxyServer::SCHEME_SOCKS5 :
210 net::ProxyServer::SCHEME_SOCKS4)); 222 net::ProxyServer::SCHEME_SOCKS4));
211 } 223 }
212 } else if (path == kProxyIgnoreList) { 224 } else if (path == kProxyIgnoreList) {
213 net::ProxyBypassRules bypass_rules; 225 net::ProxyBypassRules bypass_rules;
214 if (in_value->GetType() == Value::TYPE_LIST) { 226 if (in_value->GetType() == base::Value::TYPE_LIST) {
215 const ListValue* list_value = static_cast<const ListValue*>(in_value); 227 const ListValue* list_value = static_cast<const ListValue*>(in_value);
216 for (size_t x = 0; x < list_value->GetSize(); x++) { 228 for (size_t x = 0; x < list_value->GetSize(); x++) {
217 std::string val; 229 std::string val;
218 if (list_value->GetString(x, &val)) { 230 if (list_value->GetString(x, &val)) {
219 bypass_rules.AddRuleFromString(val); 231 bypass_rules.AddRuleFromString(val);
220 } 232 }
221 } 233 }
222 config_service->UISetProxyConfigBypassRules(bypass_rules); 234 config_service->UISetProxyConfigBypassRules(bypass_rules);
223 } 235 }
224 } 236 }
225 } 237 }
226 238
227 bool ProxyCrosSettingsProvider::Get(const std::string& path, 239 bool ProxyCrosSettingsParser::GetProxyPrefValue(Profile* profile,
228 Value** out_value) const { 240 const std::string& path,
241 base::Value** out_value) {
229 bool found = false; 242 bool found = false;
230 bool managed = false; 243 bool managed = false;
231 std::string controlled_by; 244 std::string controlled_by;
232 Value* data = NULL; 245 base::Value* data = NULL;
233 chromeos::ProxyConfigServiceImpl* config_service = GetConfigService(); 246 chromeos::ProxyConfigServiceImpl* config_service =
247 profile->GetProxyConfigTracker();
234 chromeos::ProxyConfigServiceImpl::ProxyConfig config; 248 chromeos::ProxyConfigServiceImpl::ProxyConfig config;
235 config_service->UIGetProxyConfig(&config); 249 config_service->UIGetProxyConfig(&config);
236 250
237 if (path == kProxyPacUrl) { 251 if (path == kProxyPacUrl) {
238 // Only show pacurl for pac-script mode. 252 // Only show pacurl for pac-script mode.
239 if (config.mode == 253 if (config.mode ==
240 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_PAC_SCRIPT && 254 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_PAC_SCRIPT &&
241 config.automatic_proxy.pac_url.is_valid()) { 255 config.automatic_proxy.pac_url.is_valid()) {
242 data = Value::CreateStringValue(config.automatic_proxy.pac_url.spec()); 256 data =
257 base::Value::CreateStringValue(config.automatic_proxy.pac_url.spec());
243 } 258 }
244 found = true; 259 found = true;
245 } else if (path == kProxySingleHttp) { 260 } else if (path == kProxySingleHttp) {
246 data = CreateServerHostValue(config.single_proxy); 261 data = CreateServerHostValue(config.single_proxy);
247 found = true; 262 found = true;
248 } else if (path == kProxySingleHttpPort) { 263 } else if (path == kProxySingleHttpPort) {
249 data = CreateServerPortValue(config.single_proxy); 264 data = CreateServerPortValue(config.single_proxy);
250 found = true; 265 found = true;
251 } else if (path == kProxyHttpUrl) { 266 } else if (path == kProxyHttpUrl) {
252 data = CreateServerHostValue(config.http_proxy); 267 data = CreateServerHostValue(config.http_proxy);
253 found = true; 268 found = true;
254 } else if (path == kProxyHttpsUrl) { 269 } else if (path == kProxyHttpsUrl) {
255 data = CreateServerHostValue(config.https_proxy); 270 data = CreateServerHostValue(config.https_proxy);
256 found = true; 271 found = true;
257 } else if (path == kProxyType) { 272 } else if (path == kProxyType) {
258 if (config.mode == 273 if (config.mode ==
259 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_AUTO_DETECT || 274 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_AUTO_DETECT ||
260 config.mode == 275 config.mode ==
261 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_PAC_SCRIPT) { 276 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_PAC_SCRIPT) {
262 data = Value::CreateIntegerValue(3); 277 data = base::Value::CreateIntegerValue(3);
263 } else if (config.mode == 278 } else if (config.mode ==
264 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_SINGLE_PROXY || 279 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_SINGLE_PROXY ||
265 config.mode == 280 config.mode ==
266 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_PROXY_PER_SCHEME) { 281 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_PROXY_PER_SCHEME) {
267 data = Value::CreateIntegerValue(2); 282 data = base::Value::CreateIntegerValue(2);
268 } else { 283 } else {
269 data = Value::CreateIntegerValue(1); 284 data = base::Value::CreateIntegerValue(1);
270 } 285 }
271 switch (config.state) { 286 switch (config.state) {
272 case ProxyPrefs::CONFIG_POLICY: 287 case ProxyPrefs::CONFIG_POLICY:
273 controlled_by = "policyManagedPrefsBannerText"; 288 controlled_by = "policyManagedPrefsBannerText";
274 break; 289 break;
275 case ProxyPrefs::CONFIG_EXTENSION: 290 case ProxyPrefs::CONFIG_EXTENSION:
276 controlled_by = "extensionManagedPrefsBannerText"; 291 controlled_by = "extensionManagedPrefsBannerText";
277 break; 292 break;
278 case ProxyPrefs::CONFIG_OTHER_PRECEDE: 293 case ProxyPrefs::CONFIG_OTHER_PRECEDE:
279 controlled_by = "unmodifiablePrefsBannerText"; 294 controlled_by = "unmodifiablePrefsBannerText";
280 break; 295 break;
281 default: 296 default:
282 if (!config.user_modifiable) 297 if (!config.user_modifiable)
283 controlled_by = "enableSharedProxiesBannerText"; 298 controlled_by = "enableSharedProxiesBannerText";
284 break; 299 break;
285 } 300 }
286 found = true; 301 found = true;
287 } else if (path == kProxySingle) { 302 } else if (path == kProxySingle) {
288 data = Value::CreateBooleanValue(config.mode == 303 data = base::Value::CreateBooleanValue(config.mode ==
289 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_SINGLE_PROXY); 304 chromeos::ProxyConfigServiceImpl::ProxyConfig::MODE_SINGLE_PROXY);
290 found = true; 305 found = true;
291 } else if (path == kProxyFtpUrl) { 306 } else if (path == kProxyFtpUrl) {
292 data = CreateServerHostValue(config.ftp_proxy); 307 data = CreateServerHostValue(config.ftp_proxy);
293 found = true; 308 found = true;
294 } else if (path == kProxySocks) { 309 } else if (path == kProxySocks) {
295 data = CreateServerHostValue(config.socks_proxy); 310 data = CreateServerHostValue(config.socks_proxy);
296 found = true; 311 found = true;
297 } else if (path == kProxyHttpPort) { 312 } else if (path == kProxyHttpPort) {
298 data = CreateServerPortValue(config.http_proxy); 313 data = CreateServerPortValue(config.http_proxy);
299 found = true; 314 found = true;
300 } else if (path == kProxyHttpsPort) { 315 } else if (path == kProxyHttpsPort) {
301 data = CreateServerPortValue(config.https_proxy); 316 data = CreateServerPortValue(config.https_proxy);
302 found = true; 317 found = true;
303 } else if (path == kProxyFtpPort) { 318 } else if (path == kProxyFtpPort) {
304 data = CreateServerPortValue(config.ftp_proxy); 319 data = CreateServerPortValue(config.ftp_proxy);
305 found = true; 320 found = true;
306 } else if (path == kProxySocksPort) { 321 } else if (path == kProxySocksPort) {
307 data = CreateServerPortValue(config.socks_proxy); 322 data = CreateServerPortValue(config.socks_proxy);
308 found = true; 323 found = true;
309 } else if (path == kProxyIgnoreList) { 324 } else if (path == kProxyIgnoreList) {
310 ListValue* list = new ListValue(); 325 ListValue* list = new ListValue();
311 net::ProxyBypassRules::RuleList bypass_rules = config.bypass_rules.rules(); 326 net::ProxyBypassRules::RuleList bypass_rules = config.bypass_rules.rules();
312 for (size_t x = 0; x < bypass_rules.size(); x++) { 327 for (size_t x = 0; x < bypass_rules.size(); x++) {
313 list->Append(Value::CreateStringValue(bypass_rules[x]->ToString())); 328 list->Append(base::Value::CreateStringValue(bypass_rules[x]->ToString()));
314 } 329 }
315 *out_value = list; 330 *out_value = list;
316 return true; 331 return true;
317 } 332 }
318 if (found) { 333 if (found) {
319 DictionaryValue* dict = new DictionaryValue; 334 DictionaryValue* dict = new DictionaryValue;
320 if (!data) 335 if (!data)
321 data = Value::CreateStringValue(""); 336 data = base::Value::CreateStringValue("");
322 dict->Set("value", data); 337 dict->Set("value", data);
323 dict->SetBoolean("managed", managed); 338 dict->SetBoolean("managed", managed);
324 if (path == kProxyType) { 339 if (path == kProxyType) {
325 dict->SetString("controlledBy", controlled_by); 340 dict->SetString("controlledBy", controlled_by);
326 dict->SetBoolean("disabled", !config.user_modifiable); 341 dict->SetBoolean("disabled", !config.user_modifiable);
327 } 342 }
328 *out_value = dict; 343 *out_value = dict;
329 return true; 344 return true;
330 } else { 345 } else {
331 *out_value = NULL; 346 *out_value = NULL;
332 return false; 347 return false;
333 } 348 }
334 } 349 }
335 350
336 bool ProxyCrosSettingsProvider::HandlesSetting(const std::string& path) const {
337 return ::StartsWithASCII(path, "cros.session.proxy", true);
338 }
339
340 //----------------- ProxyCrosSettingsProvider: private methods -----------------
341
342 chromeos::ProxyConfigServiceImpl*
343 ProxyCrosSettingsProvider::GetConfigService() const {
344 return profile_->GetProxyConfigTracker();
345 }
346
347 net::ProxyServer ProxyCrosSettingsProvider::CreateProxyServerFromHost(
348 const std::string& host,
349 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy,
350 net::ProxyServer::Scheme scheme) const {
351 uint16 port = 0;
352 if (proxy.server.is_valid())
353 port = proxy.server.host_port_pair().port();
354 if (host.length() == 0 && port == 0)
355 return net::ProxyServer();
356 if (port == 0)
357 port = net::ProxyServer::GetDefaultPortForScheme(scheme);
358 net::HostPortPair host_port_pair(host, port);
359 return net::ProxyServer(scheme, host_port_pair);
360 }
361
362 net::ProxyServer ProxyCrosSettingsProvider::CreateProxyServerFromPort(
363 uint16 port,
364 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy,
365 net::ProxyServer::Scheme scheme) const {
366 std::string host;
367 if (proxy.server.is_valid())
368 host = proxy.server.host_port_pair().host();
369 if (host.length() == 0 && port == 0)
370 return net::ProxyServer();
371 net::HostPortPair host_port_pair(host, port);
372 return net::ProxyServer(scheme, host_port_pair);
373 }
374
375 Value* ProxyCrosSettingsProvider::CreateServerHostValue(
376 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) const {
377 return proxy.server.is_valid() ?
378 Value::CreateStringValue(proxy.server.host_port_pair().host()) :
379 NULL;
380 }
381
382 Value* ProxyCrosSettingsProvider::CreateServerPortValue(
383 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) const {
384 return proxy.server.is_valid() ?
385 Value::CreateIntegerValue(proxy.server.host_port_pair().port()) :
386 NULL;
387 }
388
389 } // namespace chromeos 351 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698