Index: chrome/browser/policy/configuration_policy_pref_store.cc |
diff --git a/chrome/browser/policy/configuration_policy_pref_store.cc b/chrome/browser/policy/configuration_policy_pref_store.cc |
index 23e65106c3adebf2a9f45feb3ca8c79b8789af5d..9c0fd8f06e86b19013b46e39b644d3811638ecee 100644 |
--- a/chrome/browser/policy/configuration_policy_pref_store.cc |
+++ b/chrome/browser/policy/configuration_policy_pref_store.cc |
@@ -371,6 +371,7 @@ bool ConfigurationPolicyPrefKeeper::ApplyProxyPolicy( |
// FinalizeProxyPolicySettings() is called to determine whether the presented |
// values were correct and apply them in that case. |
if (policy == kPolicyProxyMode || |
+ policy == kPolicyProxyServerMode || |
policy == kPolicyProxyServer || |
policy == kPolicyProxyPacUrl || |
policy == kPolicyProxyBypassList) { |
@@ -498,96 +499,158 @@ void ConfigurationPolicyPrefKeeper::FinalizeProxyPolicySettings() { |
bool ConfigurationPolicyPrefKeeper::CheckProxySettings() { |
bool mode = HasProxyPolicy(kPolicyProxyMode); |
battre
2011/01/03 13:19:16
Add comment "deprecated"?
danno
2011/01/07 12:24:25
Done.
|
+ bool server_mode = HasProxyPolicy(kPolicyProxyServerMode); |
bool server = HasProxyPolicy(kPolicyProxyServer); |
bool pac_url = HasProxyPolicy(kPolicyProxyPacUrl); |
bool bypass_list = HasProxyPolicy(kPolicyProxyBypassList); |
- if ((server || pac_url || bypass_list) && !mode) { |
+ if ((server || pac_url || bypass_list) && !(mode || server_mode)) { |
LOG(WARNING) << "A centrally-administered policy defines proxy setting" |
<< " details without setting a proxy mode."; |
return false; |
} |
- if (!mode) |
- return true; |
+ // If there's a server mode, convert it info a mode. |
gfeher
2011/01/03 10:30:10
Not: into
danno
2011/01/07 12:24:25
Done.
|
+ std::string mode_value; |
+ if (mode) { |
+ if (!proxy_policies_[kPolicyProxyMode]->GetAsString(&mode_value)) { |
+ LOG(WARNING) << "Invalid ProxyMode value."; |
+ return false; |
+ } |
+ } else if (server_mode) { |
+ int server_mode_value; |
+ if (!proxy_policies_[kPolicyProxyServerMode]->GetAsInteger( |
+ &server_mode_value)) { |
+ LOG(WARNING) << "Invalid ProxyServerMode value."; |
+ return false; |
+ } |
- int mode_value; |
- if (!proxy_policies_[kPolicyProxyMode]->GetAsInteger(&mode_value)) { |
- LOG(WARNING) << "Invalid proxy mode value."; |
- return false; |
+ switch (server_mode_value) { |
+ case kPolicyNoProxyServerMode: |
+ mode_value = ProxyPrefs::kDirectProxyModeName; |
+ break; |
+ case kPolicyAutoDetectProxyServerMode: |
+ mode_value = ProxyPrefs::kAutoDetectProxyModeName; |
+ break; |
+ case kPolicyManuallyConfiguredProxyServerMode: |
+ if (server && pac_url) { |
+ LOG(WARNING) << "A centrally-administered policy dictates that" |
+ << " both a fixed proxy server and a .pac url. should" |
+ << " be used for proxy configuration."; |
+ return false; |
+ } |
+ if (!server && !pac_url) { |
+ LOG(WARNING) << "A centrally-administered policy dictates that the" |
+ << " proxy settings should use either a fixed" |
+ << " proxy server or a .pac url, but specifies neither."; |
+ return false; |
+ } |
+ if (pac_url) |
+ mode_value = ProxyPrefs::kPacScriptProxyModeName; |
+ else |
+ mode_value = ProxyPrefs::kFixedServersProxyModeName; |
+ break; |
+ case kPolicyUseSystemProxyServerMode: |
+ mode_value = ProxyPrefs::kSystemProxyModeName; |
+ break; |
+ default: |
+ LOG(WARNING) << "Invalid proxy mode " << server_mode_value; |
+ return false; |
+ } |
} |
- switch (mode_value) { |
- case kPolicyNoProxyServerMode: |
+ if (!mode_value.empty()) { |
+ if (mode_value == ProxyPrefs::kDirectProxyModeName) { |
if (server || pac_url || bypass_list) { |
LOG(WARNING) << "A centrally-administered policy disables the use of" |
<< " a proxy but also specifies an explicit proxy" |
<< " configuration."; |
return false; |
} |
- break; |
- case kPolicyAutoDetectProxyMode: |
- if (server || bypass_list) { |
+ } else if (mode_value == ProxyPrefs::kAutoDetectProxyModeName) { |
+ if (server || bypass_list || pac_url) { |
LOG(WARNING) << "A centrally-administered policy dictates that a proxy" |
<< " shall be auto configured but specifies fixed proxy" |
- << " servers or a by-pass list."; |
+ << " servers, a by-pass list or a .pac script URL."; |
return false; |
} |
- break; |
- case kPolicyManuallyConfiguredProxyMode: |
- if (!server) { |
- LOG(WARNING) << "A centrally-administered policy dictates that the" |
- << " system proxy settings should use fixed proxy servers" |
- << " without specifying which ones."; |
+ } else if (mode_value == ProxyPrefs::kPacScriptProxyModeName) { |
+ if (server || bypass_list) { |
+ LOG(WARNING) << "A centrally-administered policy dictates that a .pac" |
+ << " script URL should be used for proxy configuration but" |
+ << " also specifies policies required only for fixed" |
+ << " proxy servers."; |
return false; |
} |
+ } else if (mode_value == ProxyPrefs::kFixedServersProxyModeName) { |
if (pac_url) { |
- LOG(WARNING) << "A centrally-administered policy dictates that the" |
- << " system proxy settings should use fixed proxy servers" |
- << " but also specifies a PAC script."; |
+ LOG(WARNING) << "A centrally-administered policy dictates that a" |
+ << " fixed proxy server should be used but also" |
battre
2011/01/03 13:19:16
servers (plural)?
danno
2011/01/07 12:24:25
Done.
|
+ << " specifies a .pac script URL."; |
return false; |
} |
- break; |
- case kPolicyUseSystemProxyMode: |
+ } else if (mode_value == ProxyPrefs::kSystemProxyModeName) { |
if (server || pac_url || bypass_list) { |
LOG(WARNING) << "A centrally-administered policy dictates that the" |
<< " system proxy settings should be used but also " |
<< " specifies an explicit proxy configuration."; |
return false; |
} |
- break; |
- default: |
+ } else { |
LOG(WARNING) << "Invalid proxy mode " << mode_value; |
return false; |
+ } |
} |
return true; |
} |
void ConfigurationPolicyPrefKeeper::ApplyProxySettings() { |
- if (!HasProxyPolicy(kPolicyProxyMode)) |
- return; |
- |
- int int_mode; |
- CHECK(proxy_policies_[kPolicyProxyMode]->GetAsInteger(&int_mode)); |
ProxyPrefs::ProxyMode mode; |
- switch (int_mode) { |
- case kPolicyNoProxyServerMode: |
+ if (HasProxyPolicy(kPolicyProxyMode)) { |
+ std::string string_mode; |
gfeher
2011/01/03 10:30:10
Why not use ProxyPrefs::StringToProxyMode here?
danno
2011/01/07 12:24:25
Done.
|
+ CHECK(proxy_policies_[kPolicyProxyMode]->GetAsString(&string_mode)); |
+ if (string_mode == std::string(ProxyPrefs::kDirectProxyModeName)) { |
mode = ProxyPrefs::MODE_DIRECT; |
- break; |
- case kPolicyAutoDetectProxyMode: |
+ } else if (string_mode == |
+ std::string(ProxyPrefs::kAutoDetectProxyModeName)) { |
mode = ProxyPrefs::MODE_AUTO_DETECT; |
- if (HasProxyPolicy(kPolicyProxyPacUrl)) |
- mode = ProxyPrefs::MODE_PAC_SCRIPT; |
- break; |
- case kPolicyManuallyConfiguredProxyMode: |
+ } else if (string_mode == |
+ std::string(ProxyPrefs::kFixedServersProxyModeName)) { |
mode = ProxyPrefs::MODE_FIXED_SERVERS; |
- break; |
- case kPolicyUseSystemProxyMode: |
+ } else if (string_mode == |
+ std::string(ProxyPrefs::kPacScriptProxyModeName)) { |
+ mode = ProxyPrefs::MODE_PAC_SCRIPT; |
+ } else if (string_mode == |
+ std::string(ProxyPrefs::kSystemProxyModeName)) { |
mode = ProxyPrefs::MODE_SYSTEM; |
- break; |
- default: |
+ } else { |
mode = ProxyPrefs::MODE_DIRECT; |
NOTREACHED(); |
+ } |
+ } else if (HasProxyPolicy(kPolicyProxyServerMode)) { |
+ int int_mode = 0; |
+ CHECK(proxy_policies_[kPolicyProxyServerMode]->GetAsInteger(&int_mode)); |
+ switch (int_mode) { |
+ case kPolicyNoProxyServerMode: |
+ mode = ProxyPrefs::MODE_DIRECT; |
+ break; |
+ case kPolicyAutoDetectProxyServerMode: |
+ mode = ProxyPrefs::MODE_AUTO_DETECT; |
+ break; |
+ case kPolicyManuallyConfiguredProxyServerMode: |
+ mode = ProxyPrefs::MODE_FIXED_SERVERS; |
+ if (HasProxyPolicy(kPolicyProxyPacUrl)) |
+ mode = ProxyPrefs::MODE_PAC_SCRIPT; |
+ break; |
+ case kPolicyUseSystemProxyServerMode: |
+ mode = ProxyPrefs::MODE_SYSTEM; |
+ break; |
+ default: |
+ mode = ProxyPrefs::MODE_DIRECT; |
+ NOTREACHED(); |
+ } |
+ } else { |
+ return; |
} |
prefs_.SetValue(prefs::kProxyMode, Value::CreateIntegerValue(mode)); |
@@ -797,7 +860,8 @@ ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList() { |
key::kDefaultSearchProviderIconURL }, |
{ kPolicyDefaultSearchProviderEncodings, Value::TYPE_STRING, |
key::kDefaultSearchProviderEncodings }, |
- { kPolicyProxyMode, Value::TYPE_INTEGER, key::kProxyMode }, |
+ { kPolicyProxyMode, Value::TYPE_STRING, key::kProxyMode }, |
+ { kPolicyProxyServerMode, Value::TYPE_INTEGER, key::kProxyServerMode }, |
{ kPolicyProxyServer, Value::TYPE_STRING, key::kProxyServer }, |
{ kPolicyProxyPacUrl, Value::TYPE_STRING, key::kProxyPacUrl }, |
{ kPolicyProxyBypassList, Value::TYPE_STRING, key::kProxyBypassList }, |