| 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 1330279edf3992cd57b605e71d0ec9de8b8e0a88..58b5cacd597cb16380107e0a2e84f6c8e3422064 100644
|
| --- a/chrome/browser/policy/configuration_policy_pref_store.cc
|
| +++ b/chrome/browser/policy/configuration_policy_pref_store.cc
|
| @@ -106,8 +106,9 @@ class ConfigurationPolicyPrefKeeper
|
| // respective values in |prefs_|.
|
| void FinalizeProxyPolicySettings();
|
|
|
| - // Returns true if the policy values stored in proxy_* represent a valid
|
| - // proxy configuration.
|
| + // Returns true if the policy values stored in proxy_* represent a valid proxy
|
| + // configuration, including the case in which there is no configuration at
|
| + // all.
|
| bool CheckProxySettings();
|
|
|
| // Assumes CheckProxySettings returns true and applies the values stored
|
| @@ -363,6 +364,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) {
|
| @@ -492,96 +494,151 @@ void ConfigurationPolicyPrefKeeper::FinalizeProxyPolicySettings() {
|
|
|
| bool ConfigurationPolicyPrefKeeper::CheckProxySettings() {
|
| bool mode = HasProxyPolicy(kPolicyProxyMode);
|
| + bool server_mode = HasProxyPolicy(kPolicyProxyServerMode); // deprecated
|
| 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 into a mode.
|
| + std::string mode_value;
|
| + if (mode) {
|
| + if (server_mode)
|
| + LOG(WARNING) << "Both ProxyMode and ProxyServerMode policies defined, "
|
| + << "ignoring ProxyMode.";
|
| + 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 fixed proxy servers 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 fixed proxy"
|
| + << " servers 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 (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 || pac_url) {
|
| - LOG(WARNING) << "A centrally-administered policy dictates that a proxy"
|
| - << " shall be auto configured but specifies fixed proxy"
|
| - << " servers, a by-pass list or a .pac script URL.";
|
| - return false;
|
| - }
|
| - break;
|
| - case kPolicyManuallyConfiguredProxyMode:
|
| - if (server && pac_url) {
|
| - LOG(WARNING) << "A centrally-administered policy dictates that the"
|
| - << " system proxy settings should use both a fixed"
|
| - << " proxy server and a .pac url.";
|
| - return false;
|
| - }
|
| - if (!server && !pac_url) {
|
| - LOG(WARNING) << "A centrally-administered policy dictates that the"
|
| - << " system proxy settings should use either a fixed"
|
| - << " proxy server or a .pac url, but specifies neither.";
|
| - return false;
|
| - }
|
| - break;
|
| - case kPolicyUseSystemProxyMode:
|
| - 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:
|
| - LOG(WARNING) << "Invalid proxy mode " << mode_value;
|
| + // If neither ProxyMode nor ProxyServerMode are specified, mode_value will be
|
| + // empty and the proxy shouldn't be configured at all.
|
| + if (mode_value.empty())
|
| + return true;
|
| +
|
| + 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;
|
| + }
|
| + } 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, a by-pass list or a .pac script URL.";
|
| return false;
|
| + }
|
| + } 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"
|
| + << " fixed proxy servers should be used but also"
|
| + << " specifies a .pac script URL.";
|
| + return false;
|
| + }
|
| + } 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;
|
| + }
|
| + } 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:
|
| - mode = ProxyPrefs::MODE_DIRECT;
|
| - break;
|
| - case kPolicyAutoDetectProxyMode:
|
| - mode = ProxyPrefs::MODE_AUTO_DETECT;
|
| - break;
|
| - case kPolicyManuallyConfiguredProxyMode:
|
| - mode = ProxyPrefs::MODE_FIXED_SERVERS;
|
| - if (HasProxyPolicy(kPolicyProxyPacUrl))
|
| - mode = ProxyPrefs::MODE_PAC_SCRIPT;
|
| - break;
|
| - case kPolicyUseSystemProxyMode:
|
| - mode = ProxyPrefs::MODE_SYSTEM;
|
| - break;
|
| - default:
|
| - mode = ProxyPrefs::MODE_DIRECT;
|
| - NOTREACHED();
|
| + if (HasProxyPolicy(kPolicyProxyMode)) {
|
| + std::string string_mode;
|
| + CHECK(proxy_policies_[kPolicyProxyMode]->GetAsString(&string_mode));
|
| + if (!ProxyPrefs::StringToProxyMode(string_mode, &mode)) {
|
| + LOG(WARNING) << "A centrally-administered policy specifies a value for"
|
| + << "the ProxyMode policy that isn't recognized.";
|
| + return;
|
| + }
|
| + } 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));
|
|
|
| @@ -710,7 +767,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 },
|
|
|