Chromium Code Reviews| OLD | NEW |
|---|---|
| 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_config_service_impl.h" | 5 #include "chrome/browser/chromeos/proxy_config_service_impl.h" |
| 6 | 6 |
| 7 #include <ostream> | 7 #include <ostream> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| 11 #include "base/task.h" | 11 #include "base/task.h" |
| 12 #include "chrome/browser/chromeos/cros/cros_library.h" | 12 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 13 #include "chrome/browser/chromeos/cros_settings_names.h" | 13 #include "chrome/browser/chromeos/cros_settings_names.h" |
| 14 #include "chrome/browser/net/pref_proxy_config_service.h" | |
| 14 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h" | 15 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h" |
| 16 #include "chrome/browser/prefs/pref_service.h" | |
| 15 #include "chrome/browser/prefs/proxy_config_dictionary.h" | 17 #include "chrome/browser/prefs/proxy_config_dictionary.h" |
| 16 #include "chrome/browser/prefs/proxy_prefs.h" | 18 #include "chrome/browser/prefs/proxy_prefs.h" |
| 19 #include "chrome/browser/profiles/profile.h" | |
| 20 #include "chrome/common/pref_names.h" | |
| 17 #include "content/browser/browser_thread.h" | 21 #include "content/browser/browser_thread.h" |
| 18 #include "content/common/json_value_serializer.h" | 22 #include "content/common/json_value_serializer.h" |
| 19 #include "grit/generated_resources.h" | 23 #include "grit/generated_resources.h" |
| 20 #include "ui/base/l10n/l10n_util.h" | 24 #include "ui/base/l10n/l10n_util.h" |
| 21 | 25 |
| 22 namespace em = enterprise_management; | 26 namespace em = enterprise_management; |
| 23 | 27 |
| 24 namespace chromeos { | 28 namespace chromeos { |
| 25 | 29 |
| 26 namespace { | 30 namespace { |
| 27 | 31 |
| 28 const char* SourceToString(ProxyConfigServiceImpl::ProxyConfig::Source source) { | 32 const char* SourceToString(ProxyConfigServiceImpl::ProxyConfig::Source source) { |
| 29 switch (source) { | 33 switch (source) { |
| 30 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_NONE: | 34 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_NONE: |
| 31 return "SOURCE_NONE"; | 35 return "SOURCE_NONE"; |
| 36 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_NONE_DISABLED: | |
| 37 return "SOURCE_NONE_DISABLED"; | |
| 32 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_POLICY: | 38 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_POLICY: |
| 33 return "SOURCE_POLICY"; | 39 return "SOURCE_POLICY"; |
| 34 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_OWNER: | 40 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_EXTENSION: |
| 35 return "SOURCE_OWNER"; | 41 return "SOURCE_EXTENSION"; |
| 42 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_RECOMMENDED: | |
| 43 return "SOURCE_RECOMMENDED"; | |
| 44 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_RECOMMENDED_DISABLED: | |
| 45 return "SOURCE_RECOMMENDED_DISABLED"; | |
| 46 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_NETWORK: | |
| 47 return "SOURCE_NETWORK"; | |
| 48 case ProxyConfigServiceImpl::ProxyConfig::SOURCE_NETWORK_DISABLED: | |
| 49 return "SOURCE_NETWORK_DISABLED"; | |
| 36 } | 50 } |
| 37 NOTREACHED() << "Unrecognized source type"; | 51 NOTREACHED() << "Unrecognized source type"; |
| 38 return ""; | 52 return ""; |
| 39 } | 53 } |
| 40 | 54 |
| 41 std::ostream& operator<<(std::ostream& out, | 55 std::ostream& operator<<(std::ostream& out, |
| 42 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) { | 56 const ProxyConfigServiceImpl::ProxyConfig::ManualProxy& proxy) { |
|
Mattias Nissler (ping if slow)
2011/10/05 10:18:36
indentation: parameters should line up (break afte
kuan
2011/10/07 00:30:41
i can't line them up, 'cos they won't fit, i belie
| |
| 43 out << " " << SourceToString(proxy.source) << "\n" | 57 out << (proxy.server.is_valid() ? proxy.server.ToURI() : "") << "\n"; |
| 44 << " server: " << (proxy.server.is_valid() ? proxy.server.ToURI() : "") | |
| 45 << "\n"; | |
| 46 return out; | 58 return out; |
| 47 } | 59 } |
| 48 | 60 |
| 49 std::ostream& operator<<(std::ostream& out, | 61 std::ostream& operator<<(std::ostream& out, |
| 50 const ProxyConfigServiceImpl::ProxyConfig& config) { | 62 const ProxyConfigServiceImpl::ProxyConfig& config) { |
|
Mattias Nissler (ping if slow)
2011/10/05 10:18:36
same here.
kuan
2011/10/07 00:30:41
Done.
| |
| 51 switch (config.mode) { | 63 switch (config.mode) { |
| 52 case ProxyConfigServiceImpl::ProxyConfig::MODE_DIRECT: | 64 case ProxyConfigServiceImpl::ProxyConfig::MODE_DIRECT: |
| 53 out << "Direct connection:\n " | 65 out << "Direct connection:\n " |
| 54 << SourceToString(config.automatic_proxy.source) << "\n"; | 66 << SourceToString(config.source) << "\n"; |
| 55 break; | 67 break; |
| 56 case ProxyConfigServiceImpl::ProxyConfig::MODE_AUTO_DETECT: | 68 case ProxyConfigServiceImpl::ProxyConfig::MODE_AUTO_DETECT: |
| 57 out << "Auto detection:\n " | 69 out << "Auto detection:\n " |
| 58 << SourceToString(config.automatic_proxy.source) << "\n"; | 70 << SourceToString(config.source) << "\n"; |
| 59 break; | 71 break; |
| 60 case ProxyConfigServiceImpl::ProxyConfig::MODE_PAC_SCRIPT: | 72 case ProxyConfigServiceImpl::ProxyConfig::MODE_PAC_SCRIPT: |
| 61 out << "Custom PAC script:\n " | 73 out << "Custom PAC script:\n " |
| 62 << SourceToString(config.automatic_proxy.source) | 74 << SourceToString(config.source) |
| 63 << "\n PAC: " << config.automatic_proxy.pac_url << "\n"; | 75 << "\n PAC: " << config.automatic_proxy.pac_url << "\n"; |
| 64 break; | 76 break; |
| 65 case ProxyConfigServiceImpl::ProxyConfig::MODE_SINGLE_PROXY: | 77 case ProxyConfigServiceImpl::ProxyConfig::MODE_SINGLE_PROXY: |
| 66 out << "Single proxy:\n" << config.single_proxy; | 78 out << "Single proxy:\n" |
| 79 << SourceToString(config.source) << "\n " << config.single_proxy; | |
| 67 break; | 80 break; |
| 68 case ProxyConfigServiceImpl::ProxyConfig::MODE_PROXY_PER_SCHEME: | 81 case ProxyConfigServiceImpl::ProxyConfig::MODE_PROXY_PER_SCHEME: |
| 69 out << "HTTP proxy: " << config.http_proxy; | 82 out << "Manual proxies:\n" |
| 70 out << "HTTPS proxy: " << config.https_proxy; | 83 << SourceToString(config.source) << "\n" |
| 71 out << "FTP proxy: " << config.ftp_proxy; | 84 << " HTTP: " << config.http_proxy |
| 72 out << "SOCKS proxy: " << config.socks_proxy; | 85 << " HTTPS: " << config.https_proxy |
| 86 << " FTP: " << config.ftp_proxy | |
| 87 << " SOCKS: " << config.socks_proxy; | |
| 73 break; | 88 break; |
| 74 default: | 89 default: |
| 75 NOTREACHED() << "Unrecognized proxy config mode"; | 90 NOTREACHED() << "Unrecognized proxy config mode"; |
| 76 break; | 91 break; |
| 77 } | 92 } |
| 78 if (config.mode == ProxyConfigServiceImpl::ProxyConfig::MODE_SINGLE_PROXY || | 93 if (config.mode == ProxyConfigServiceImpl::ProxyConfig::MODE_SINGLE_PROXY || |
| 79 config.mode == | 94 config.mode == |
| 80 ProxyConfigServiceImpl::ProxyConfig::MODE_PROXY_PER_SCHEME) { | 95 ProxyConfigServiceImpl::ProxyConfig::MODE_PROXY_PER_SCHEME) { |
| 81 out << "Bypass list: "; | 96 out << "Bypass list: "; |
| 82 if (config.bypass_rules.rules().empty()) { | 97 if (config.bypass_rules.rules().empty()) { |
| 83 out << "[None]"; | 98 out << "[None]"; |
| 84 } else { | 99 } else { |
| 85 const net::ProxyBypassRules& bypass_rules = config.bypass_rules; | 100 const net::ProxyBypassRules& bypass_rules = config.bypass_rules; |
| 86 net::ProxyBypassRules::RuleList::const_iterator it; | 101 net::ProxyBypassRules::RuleList::const_iterator it; |
| 87 for (it = bypass_rules.rules().begin(); | 102 for (it = bypass_rules.rules().begin(); |
| 88 it != bypass_rules.rules().end(); ++it) { | 103 it != bypass_rules.rules().end(); ++it) { |
| 89 out << "\n " << (*it)->ToString(); | 104 out << "\n " << (*it)->ToString(); |
| 90 } | 105 } |
| 91 } | 106 } |
| 92 } | 107 } |
| 93 return out; | 108 return out; |
| 94 } | 109 } |
| 95 | 110 |
| 96 std::string ProxyConfigToString( | 111 std::string ProxyConfigToString( |
|
Mattias Nissler (ping if slow)
2011/10/05 10:18:36
This and the functions above appear to be dead cod
kuan
2011/10/07 00:30:41
i need it for debugging, so i make #if defined.
O
| |
| 97 const ProxyConfigServiceImpl::ProxyConfig& proxy_config) { | 112 const ProxyConfigServiceImpl::ProxyConfig& proxy_config) { |
| 98 std::ostringstream stream; | 113 std::ostringstream stream; |
| 99 stream << proxy_config; | 114 stream << proxy_config; |
| 100 return stream.str(); | 115 return stream.str(); |
| 101 } | 116 } |
| 102 | 117 |
| 103 } // namespace | 118 } // namespace |
| 104 | 119 |
| 105 //---------- ProxyConfigServiceImpl::ProxyConfig::Setting methods -------------- | |
| 106 | |
| 107 bool ProxyConfigServiceImpl::ProxyConfig::Setting::CanBeWrittenByUser( | |
| 108 bool user_is_owner) { | |
| 109 // Setting can only be written by user if user is owner and setting is not | |
| 110 // from policy. | |
| 111 return user_is_owner && source != ProxyConfig::SOURCE_POLICY; | |
| 112 } | |
| 113 | |
| 114 //----------- ProxyConfigServiceImpl::ProxyConfig: public methods -------------- | 120 //----------- ProxyConfigServiceImpl::ProxyConfig: public methods -------------- |
| 115 | 121 |
| 116 ProxyConfigServiceImpl::ProxyConfig::ProxyConfig() : mode(MODE_DIRECT) {} | 122 ProxyConfigServiceImpl::ProxyConfig::ProxyConfig() |
| 123 : mode(MODE_DIRECT), source(SOURCE_NONE) {} | |
| 117 | 124 |
| 118 ProxyConfigServiceImpl::ProxyConfig::~ProxyConfig() {} | 125 ProxyConfigServiceImpl::ProxyConfig::~ProxyConfig() {} |
| 119 | 126 |
| 120 void ProxyConfigServiceImpl::ProxyConfig::ToNetProxyConfig( | 127 void ProxyConfigServiceImpl::ProxyConfig::ToNetProxyConfig( |
| 121 net::ProxyConfig* net_config) { | 128 net::ProxyConfig* net_config) { |
| 122 switch (mode) { | 129 switch (mode) { |
| 123 case MODE_DIRECT: | 130 case MODE_DIRECT: |
| 124 *net_config = net::ProxyConfig::CreateDirect(); | 131 *net_config = net::ProxyConfig::CreateDirect(); |
| 125 break; | 132 break; |
| 126 case MODE_AUTO_DETECT: | 133 case MODE_AUTO_DETECT: |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 146 net_config->proxy_rules().proxy_for_ftp = ftp_proxy.server; | 153 net_config->proxy_rules().proxy_for_ftp = ftp_proxy.server; |
| 147 net_config->proxy_rules().fallback_proxy = socks_proxy.server; | 154 net_config->proxy_rules().fallback_proxy = socks_proxy.server; |
| 148 net_config->proxy_rules().bypass_rules = bypass_rules; | 155 net_config->proxy_rules().bypass_rules = bypass_rules; |
| 149 break; | 156 break; |
| 150 default: | 157 default: |
| 151 NOTREACHED() << "Unrecognized proxy config mode"; | 158 NOTREACHED() << "Unrecognized proxy config mode"; |
| 152 break; | 159 break; |
| 153 } | 160 } |
| 154 } | 161 } |
| 155 | 162 |
| 156 bool ProxyConfigServiceImpl::ProxyConfig::CanBeWrittenByUser( | 163 bool ProxyConfigServiceImpl::ProxyConfig::FromNetProxyConfig( |
| 157 bool user_is_owner, const std::string& scheme) { | 164 const net::ProxyConfig& net_config) { |
| 158 // Setting can only be written by user if user is owner and setting is not | 165 const net::ProxyConfig::ProxyRules& rules = net_config.proxy_rules(); |
| 159 // from policy. | 166 switch (rules.type) { |
| 160 Setting* setting = NULL; | 167 case net::ProxyConfig::ProxyRules::TYPE_NO_RULES: |
| 161 switch (mode) { | 168 if (!net_config.HasAutomaticSettings()) { |
| 162 case MODE_DIRECT: | 169 mode = ProxyConfig::MODE_DIRECT; |
| 163 case MODE_AUTO_DETECT: | 170 } else if (net_config.auto_detect()) { |
| 164 case MODE_PAC_SCRIPT: | 171 mode = ProxyConfig::MODE_AUTO_DETECT; |
| 165 setting = &automatic_proxy; | 172 } else if (net_config.has_pac_url()) { |
| 166 break; | 173 mode = ProxyConfig::MODE_PAC_SCRIPT; |
| 167 case MODE_SINGLE_PROXY: | 174 automatic_proxy.pac_url = net_config.pac_url(); |
| 168 setting = &single_proxy; | 175 } else { |
| 169 break; | 176 return false; |
| 170 case MODE_PROXY_PER_SCHEME: | 177 } |
| 171 setting = MapSchemeToProxy(scheme); | 178 return true; |
| 172 break; | 179 case net::ProxyConfig::ProxyRules::TYPE_SINGLE_PROXY: |
| 180 if (!rules.single_proxy.is_valid()) | |
| 181 return false; | |
| 182 mode = MODE_SINGLE_PROXY; | |
| 183 single_proxy.server = rules.single_proxy; | |
| 184 bypass_rules = rules.bypass_rules; | |
| 185 return true; | |
| 186 case net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME: | |
| 187 // Make sure we have valid server for at least one of the protocols. | |
| 188 if (!rules.proxy_for_http.is_valid() && | |
| 189 !rules.proxy_for_https.is_valid() && | |
| 190 !rules.proxy_for_ftp.is_valid() && | |
| 191 !rules.fallback_proxy.is_valid()) { | |
| 192 return false; | |
| 193 } | |
| 194 mode = MODE_PROXY_PER_SCHEME; | |
| 195 if (rules.proxy_for_http.is_valid()) | |
| 196 http_proxy.server = rules.proxy_for_http; | |
| 197 if (rules.proxy_for_https.is_valid()) | |
| 198 https_proxy.server = rules.proxy_for_https; | |
| 199 if (rules.proxy_for_ftp.is_valid()) | |
| 200 ftp_proxy.server = rules.proxy_for_ftp; | |
| 201 if (rules.fallback_proxy.is_valid()) | |
| 202 socks_proxy.server = rules.fallback_proxy; | |
| 203 bypass_rules = rules.bypass_rules; | |
| 204 return true; | |
| 173 default: | 205 default: |
| 206 NOTREACHED() << "Unrecognized proxy config mode"; | |
| 174 break; | 207 break; |
| 175 } | 208 } |
| 176 if (!setting) { | 209 return false; |
| 177 NOTREACHED() << "Unrecognized proxy config mode"; | |
| 178 return false; | |
| 179 } | |
| 180 return setting->CanBeWrittenByUser(user_is_owner); | |
| 181 } | 210 } |
| 182 | 211 |
| 183 ProxyConfigServiceImpl::ProxyConfig::ManualProxy* | 212 ProxyConfigServiceImpl::ProxyConfig::ManualProxy* |
| 184 ProxyConfigServiceImpl::ProxyConfig::MapSchemeToProxy( | 213 ProxyConfigServiceImpl::ProxyConfig::MapSchemeToProxy( |
| 185 const std::string& scheme) { | 214 const std::string& scheme) { |
| 186 if (scheme == "http") | 215 if (scheme == "http") |
| 187 return &http_proxy; | 216 return &http_proxy; |
| 188 if (scheme == "https") | 217 if (scheme == "https") |
| 189 return &https_proxy; | 218 return &https_proxy; |
| 190 if (scheme == "ftp") | 219 if (scheme == "ftp") |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 266 JSONStringValueSerializer serializer(input); | 295 JSONStringValueSerializer serializer(input); |
| 267 scoped_ptr<Value> value(serializer.Deserialize(NULL, NULL)); | 296 scoped_ptr<Value> value(serializer.Deserialize(NULL, NULL)); |
| 268 if (!value.get() || value->GetType() != Value::TYPE_DICTIONARY) | 297 if (!value.get() || value->GetType() != Value::TYPE_DICTIONARY) |
| 269 return false; | 298 return false; |
| 270 DictionaryValue* proxy_dict = static_cast<DictionaryValue*>(value.get()); | 299 DictionaryValue* proxy_dict = static_cast<DictionaryValue*>(value.get()); |
| 271 return FromPrefProxyConfig(proxy_dict); | 300 return FromPrefProxyConfig(proxy_dict); |
| 272 } | 301 } |
| 273 | 302 |
| 274 bool ProxyConfigServiceImpl::ProxyConfig::Equals( | 303 bool ProxyConfigServiceImpl::ProxyConfig::Equals( |
| 275 const ProxyConfig& other) const { | 304 const ProxyConfig& other) const { |
| 305 // Intentionally ignore source which is only used for ui purposes and has no | |
| 306 // impact on proxy backend. | |
| 276 if (mode != other.mode) | 307 if (mode != other.mode) |
| 277 return false; | 308 return false; |
| 278 switch (mode) { | 309 switch (mode) { |
| 279 case MODE_DIRECT: | 310 case MODE_DIRECT: |
| 280 case MODE_AUTO_DETECT: | 311 case MODE_AUTO_DETECT: |
| 281 return true; | 312 return true; |
| 282 case MODE_PAC_SCRIPT: | 313 case MODE_PAC_SCRIPT: |
| 283 return automatic_proxy.pac_url == other.automatic_proxy.pac_url; | 314 return automatic_proxy.pac_url == other.automatic_proxy.pac_url; |
| 284 case MODE_SINGLE_PROXY: | 315 case MODE_SINGLE_PROXY: |
| 285 return single_proxy.server == other.single_proxy.server && | 316 return single_proxy.server == other.single_proxy.server && |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 480 } | 511 } |
| 481 } | 512 } |
| 482 | 513 |
| 483 void ProxyConfigServiceImpl::UIGetProxyConfig(ProxyConfig* config) { | 514 void ProxyConfigServiceImpl::UIGetProxyConfig(ProxyConfig* config) { |
| 484 // Should be called from UI thread. | 515 // Should be called from UI thread. |
| 485 CheckCurrentlyOnUIThread(); | 516 CheckCurrentlyOnUIThread(); |
| 486 // Simply returns the copy on the UI thread. | 517 // Simply returns the copy on the UI thread. |
| 487 *config = current_ui_config_; | 518 *config = current_ui_config_; |
| 488 } | 519 } |
| 489 | 520 |
| 490 bool ProxyConfigServiceImpl::UISetCurrentNetwork( | 521 void ProxyConfigServiceImpl::UISetCurrentNetworkWithProfile( |
| 491 const std::string& current_network) { | 522 const std::string& current_network, Profile* profile) { |
|
Mattias Nissler (ping if slow)
2011/10/05 10:18:36
nit: second parameter on next line.
kuan
2011/10/07 00:30:41
Done.
| |
| 492 // Should be called from UI thread. | 523 // Should be called from UI thread. |
| 493 CheckCurrentlyOnUIThread(); | 524 CheckCurrentlyOnUIThread(); |
| 494 if (current_ui_network_ == current_network) | |
| 495 return false; | |
| 496 Network* network = CrosLibrary::Get()->GetNetworkLibrary()->FindNetworkByPath( | 525 Network* network = CrosLibrary::Get()->GetNetworkLibrary()->FindNetworkByPath( |
| 497 current_network); | 526 current_network); |
| 498 if (!network) { | 527 if (!network) { |
| 528 ResetUICache(); | |
| 499 LOG(ERROR) << "can't find requested network " << current_network; | 529 LOG(ERROR) << "can't find requested network " << current_network; |
| 500 return false; | 530 return; |
| 501 } | 531 } |
| 502 current_ui_network_ = current_network; | 532 current_ui_network_ = current_network; |
| 503 current_ui_config_ = ProxyConfig(); | 533 DetermineUIConfig(profile, network); |
| 504 SetCurrentNetworkName(network); | 534 SetCurrentNetworkName(network); |
| 505 if (!network->proxy_config().empty()) | |
| 506 current_ui_config_.DeserializeForNetwork(network->proxy_config()); | |
| 507 VLOG(1) << "current ui network: " | 535 VLOG(1) << "current ui network: " |
| 508 << (current_ui_network_name_.empty() ? | 536 << (current_ui_network_name_.empty() ? |
| 509 current_ui_network_ : current_ui_network_name_) | 537 current_ui_network_ : current_ui_network_name_) |
| 510 << ", proxy mode: " << current_ui_config_.mode; | 538 << ", proxy mode: " << current_ui_config_.mode |
| 511 return true; | 539 << ", " << SourceToString(current_ui_config_.source) |
| 540 << ", modifiable:" << current_ui_config_.IsUserModifiable(); | |
| 512 } | 541 } |
| 513 | 542 |
| 514 bool ProxyConfigServiceImpl::UIMakeActiveNetworkCurrent() { | 543 void ProxyConfigServiceImpl::UIMakeActiveNetworkCurrentWithProfile( |
| 544 Profile* profile) { | |
| 515 // Should be called from UI thread. | 545 // Should be called from UI thread. |
| 516 CheckCurrentlyOnUIThread(); | 546 CheckCurrentlyOnUIThread(); |
| 517 if (current_ui_network_ == active_network_) | |
| 518 return false; | |
| 519 Network* network = NULL; | 547 Network* network = NULL; |
| 520 if (!testing_) { | 548 if (!testing_) { |
| 521 network = CrosLibrary::Get()->GetNetworkLibrary()->FindNetworkByPath( | 549 network = CrosLibrary::Get()->GetNetworkLibrary()->FindNetworkByPath( |
| 522 active_network_); | 550 active_network_); |
| 523 if (!network) { | 551 if (!network) { |
| 552 ResetUICache(); | |
| 524 LOG(ERROR) << "can't find requested network " << active_network_; | 553 LOG(ERROR) << "can't find requested network " << active_network_; |
| 525 return false; | 554 return; |
| 526 } | 555 } |
| 527 } | 556 } |
| 528 current_ui_network_ = active_network_; | 557 current_ui_network_ = active_network_; |
| 529 current_ui_config_ = active_config_; | 558 DetermineUIConfig(profile, network); |
| 530 SetCurrentNetworkName(network); | 559 SetCurrentNetworkName(network); |
| 531 VLOG(1) << "current ui network: " | 560 VLOG(1) << "current ui network: " |
| 532 << (current_ui_network_name_.empty() ? | 561 << (current_ui_network_name_.empty() ? |
| 533 current_ui_network_ : current_ui_network_name_) | 562 current_ui_network_ : current_ui_network_name_) |
| 534 << ", proxy mode: " << current_ui_config_.mode; | 563 << ", proxy mode: " << current_ui_config_.mode |
| 535 return true; | 564 << ", " << SourceToString(current_ui_config_.source) |
| 565 << ", modifiable:" << current_ui_config_.IsUserModifiable(); | |
| 536 } | 566 } |
| 537 | 567 |
| 538 void ProxyConfigServiceImpl::UISetUseSharedProxies(bool use_shared) { | 568 void ProxyConfigServiceImpl::UISetUseSharedProxies(bool use_shared) { |
| 539 // Should be called from UI thread. | 569 // Should be called from UI thread. |
| 540 CheckCurrentlyOnUIThread(); | 570 CheckCurrentlyOnUIThread(); |
| 541 | 571 |
| 542 // Reset all UI-related variables so that the next opening of proxy | |
| 543 // configuration dialog of any network will trigger javascript reloading of | |
| 544 // (possibly) new proxy settings. | |
| 545 current_ui_network_.clear(); | |
| 546 current_ui_network_name_.clear(); | |
| 547 current_ui_config_ = ProxyConfig(); | |
| 548 | |
| 549 if (use_shared_proxies_ == use_shared) { | 572 if (use_shared_proxies_ == use_shared) { |
| 550 VLOG(1) << "same use_shared_proxies = " << use_shared_proxies_; | 573 VLOG(1) << "same use_shared_proxies = " << use_shared_proxies_; |
| 551 return; | 574 return; |
| 552 } | 575 } |
| 553 use_shared_proxies_ = use_shared; | 576 use_shared_proxies_ = use_shared; |
| 554 VLOG(1) << "new use_shared_proxies = " << use_shared_proxies_; | 577 VLOG(1) << "new use_shared_proxies = " << use_shared_proxies_; |
| 555 if (active_network_.empty()) | 578 if (active_network_.empty()) |
| 556 return; | 579 return; |
| 557 Network* network = CrosLibrary::Get()->GetNetworkLibrary()->FindNetworkByPath( | 580 Network* network = CrosLibrary::Get()->GetNetworkLibrary()->FindNetworkByPath( |
| 558 active_network_); | 581 active_network_); |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 705 IOSetProxyConfig(active_config_, net::ProxyConfigService::CONFIG_VALID); | 728 IOSetProxyConfig(active_config_, net::ProxyConfigService::CONFIG_VALID); |
| 706 return; | 729 return; |
| 707 } | 730 } |
| 708 if (current_ui_network_.empty()) | 731 if (current_ui_network_.empty()) |
| 709 return; | 732 return; |
| 710 // Update config to flimflam. | 733 // Update config to flimflam. |
| 711 std::string value; | 734 std::string value; |
| 712 if (current_ui_config_.SerializeForNetwork(&value)) { | 735 if (current_ui_config_.SerializeForNetwork(&value)) { |
| 713 VLOG(1) << "set proxy (mode=" << current_ui_config_.mode | 736 VLOG(1) << "set proxy (mode=" << current_ui_config_.mode |
| 714 << ") for " << current_ui_network_; | 737 << ") for " << current_ui_network_; |
| 738 current_ui_config_.source = ProxyConfig::SOURCE_NETWORK; | |
| 715 SetProxyConfigForNetwork(current_ui_network_, value, false); | 739 SetProxyConfigForNetwork(current_ui_network_, value, false); |
| 716 } | 740 } |
| 717 } | 741 } |
| 718 | 742 |
| 719 void ProxyConfigServiceImpl::IOSetProxyConfig( | 743 void ProxyConfigServiceImpl::IOSetProxyConfig( |
| 720 const ProxyConfig& new_config, | 744 const ProxyConfig& new_config, |
| 721 net::ProxyConfigService::ConfigAvailability new_availability) { | 745 net::ProxyConfigService::ConfigAvailability new_availability) { |
| 722 if (!BrowserThread::CurrentlyOn(BrowserThread::IO) && can_post_task_) { | 746 if (!BrowserThread::CurrentlyOn(BrowserThread::IO) && can_post_task_) { |
| 723 // Posts a task to IO thread with the new config, so it can update | 747 // Posts a task to IO thread with the new config, so it can update |
| 724 // |cached_config_|. | 748 // |cached_config_|. |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 814 DetermineConfigFromNetwork(network); | 838 DetermineConfigFromNetwork(network); |
| 815 } | 839 } |
| 816 } | 840 } |
| 817 | 841 |
| 818 void ProxyConfigServiceImpl::DetermineConfigFromNetwork( | 842 void ProxyConfigServiceImpl::DetermineConfigFromNetwork( |
| 819 const Network* network) { | 843 const Network* network) { |
| 820 active_config_ = ProxyConfig(); // Default is DIRECT mode (i.e. no proxy). | 844 active_config_ = ProxyConfig(); // Default is DIRECT mode (i.e. no proxy). |
| 821 net::ProxyConfigService::ConfigAvailability available = | 845 net::ProxyConfigService::ConfigAvailability available = |
| 822 net::ProxyConfigService::CONFIG_UNSET; | 846 net::ProxyConfigService::CONFIG_UNSET; |
| 823 // If network is shared but user doesn't use shared proxies, use direct mode. | 847 // If network is shared but user doesn't use shared proxies, use direct mode. |
| 824 if (network->profile_type() == PROFILE_SHARED && !use_shared_proxies_) { | 848 if (IgnoreProxy(network)) { |
| 825 VLOG(1) << "shared network and !use_shared_proxies, using direct"; | 849 VLOG(1) << "shared network and !use_shared_proxies, using direct"; |
| 826 available = net::ProxyConfigService::CONFIG_VALID; | 850 available = net::ProxyConfigService::CONFIG_VALID; |
| 827 } else if (!network->proxy_config().empty() && | 851 } else if (!network->proxy_config().empty() && |
| 828 active_config_.DeserializeForNetwork(network->proxy_config())) { | 852 active_config_.DeserializeForNetwork(network->proxy_config())) { |
| 829 // Network is private or shared with user using shared proxies. | 853 // Network is private or shared with user using shared proxies. |
| 830 VLOG(1) << "using network proxy: " << network->proxy_config(); | 854 VLOG(1) << "using network proxy: " << network->proxy_config(); |
| 831 available = net::ProxyConfigService::CONFIG_VALID; | 855 available = net::ProxyConfigService::CONFIG_VALID; |
| 832 } | 856 } |
| 833 IOSetProxyConfig(active_config_, available); | 857 IOSetProxyConfig(active_config_, available); |
| 834 } | 858 } |
| 835 | 859 |
| 860 void ProxyConfigServiceImpl::DetermineUIConfig(Profile* profile, | |
| 861 const Network* network) { | |
|
Mattias Nissler (ping if slow)
2011/10/05 10:18:36
second parameter fits on previous line.
kuan
2011/10/07 00:30:41
it doesn't fit, i align it with 1st param.
On 201
| |
| 862 if (!network) { | |
| 863 if (testing_) | |
| 864 current_ui_config_ = active_config_; | |
| 865 return; | |
| 866 } | |
| 867 net::ProxyConfig pref_config; | |
| 868 PrefProxyConfigTracker::ConfigState state = | |
| 869 PrefProxyConfigTracker::CONFIG_UNSET; | |
| 870 if (profile) | |
| 871 state = profile->GetProxyConfigTracker()->UIGetProxyConfig(&pref_config); | |
| 872 if (state == PrefProxyConfigTracker::CONFIG_PRESENT) { // Mandatory proxy. | |
| 873 current_ui_config_.FromNetProxyConfig(pref_config); | |
| 874 const PrefService::Preference* pref = profile->GetPrefs()->FindPreference( | |
| 875 prefs::kProxy); | |
| 876 current_ui_config_.source = pref && pref->IsManaged() ? | |
| 877 ProxyConfig::SOURCE_POLICY : | |
| 878 (pref && pref->IsExtensionControlled() ? | |
| 879 ProxyConfig::SOURCE_EXTENSION : ProxyConfig::SOURCE_NONE_DISABLED); | |
|
stevenjb
2011/10/05 00:22:57
nit: Maybe use an if / else if / else here instead
Mattias Nissler (ping if slow)
2011/10/05 10:18:36
You split the logic between PrefProxyConfigTracker
kuan
2011/10/07 00:30:41
Done.
| |
| 880 } else if (!network->proxy_config().empty()) { // Network proxy. | |
| 881 current_ui_config_.DeserializeForNetwork(network->proxy_config()); | |
| 882 current_ui_config_.source = IgnoreProxy(network) ? | |
| 883 ProxyConfig::SOURCE_NETWORK_DISABLED : ProxyConfig::SOURCE_NETWORK; | |
|
stevenjb
2011/10/05 00:22:57
I really think
source = SOURCE_NETWORK
is_disa
Mattias Nissler (ping if slow)
2011/10/05 10:18:36
+1
kuan
2011/10/07 00:30:41
Done.
kuan
2011/10/07 00:30:41
Done.
| |
| 884 } else if (state == PrefProxyConfigTracker::CONFIG_FALLBACK) { | |
| 885 // Recommended proxy. | |
| 886 current_ui_config_.FromNetProxyConfig(pref_config); | |
| 887 current_ui_config_.source = IgnoreProxy(network) ? | |
| 888 ProxyConfig::SOURCE_RECOMMENDED_DISABLED : | |
| 889 ProxyConfig::SOURCE_RECOMMENDED; | |
| 890 } else { // No proxy. | |
| 891 current_ui_config_ = ProxyConfig(); | |
| 892 current_ui_config_.source = IgnoreProxy(network) ? | |
| 893 ProxyConfig::SOURCE_NONE_DISABLED : ProxyConfig::SOURCE_NONE; | |
| 894 } | |
| 895 } | |
| 896 | |
| 836 void ProxyConfigServiceImpl::SetCurrentNetworkName(const Network* network) { | 897 void ProxyConfigServiceImpl::SetCurrentNetworkName(const Network* network) { |
| 837 if (!network) { | 898 if (!network) { |
| 838 if (testing_) | 899 if (testing_) |
| 839 current_ui_network_name_ = "test"; | 900 current_ui_network_name_ = "test"; |
| 840 return; | 901 return; |
| 841 } | 902 } |
| 842 if (network->name().empty() && network->type() == chromeos::TYPE_ETHERNET) { | 903 if (network->name().empty() && network->type() == chromeos::TYPE_ETHERNET) { |
| 843 current_ui_network_name_ = l10n_util::GetStringUTF8( | 904 current_ui_network_name_ = l10n_util::GetStringUTF8( |
| 844 IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); | 905 IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); |
| 845 } else { | 906 } else { |
| 846 current_ui_network_name_ = network->name(); | 907 current_ui_network_name_ = network->name(); |
| 847 } | 908 } |
| 848 } | 909 } |
| 849 | 910 |
| 911 void ProxyConfigServiceImpl::ResetUICache() { | |
| 912 current_ui_network_.clear(); | |
| 913 current_ui_network_name_.clear(); | |
| 914 current_ui_config_ = ProxyConfig(); | |
| 915 } | |
| 916 | |
| 850 void ProxyConfigServiceImpl::CheckCurrentlyOnIOThread() { | 917 void ProxyConfigServiceImpl::CheckCurrentlyOnIOThread() { |
| 851 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 918 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 852 } | 919 } |
| 853 | 920 |
| 854 void ProxyConfigServiceImpl::CheckCurrentlyOnUIThread() { | 921 void ProxyConfigServiceImpl::CheckCurrentlyOnUIThread() { |
| 855 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 922 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 856 } | 923 } |
| 857 | 924 |
| 858 } // namespace chromeos | 925 } // namespace chromeos |
| OLD | NEW |