Index: chrome/browser/net/proxy_policy_handler.cc |
diff --git a/chrome/browser/net/proxy_policy_handler.cc b/chrome/browser/net/proxy_policy_handler.cc |
deleted file mode 100644 |
index 591fc2a0f43d134fad85b05b4656627d639ca439..0000000000000000000000000000000000000000 |
--- a/chrome/browser/net/proxy_policy_handler.cc |
+++ /dev/null |
@@ -1,338 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/net/proxy_policy_handler.h" |
- |
-#include "base/logging.h" |
-#include "base/prefs/pref_value_map.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/values.h" |
-#include "chrome/common/pref_names.h" |
-#include "components/policy/core/browser/configuration_policy_handler.h" |
-#include "components/policy/core/browser/policy_error_map.h" |
-#include "components/policy/core/common/policy_map.h" |
-#include "components/proxy_config/proxy_config_dictionary.h" |
-#include "components/proxy_config/proxy_config_pref_names.h" |
-#include "grit/components_strings.h" |
-#include "policy/policy_constants.h" |
- |
-namespace { |
- |
-// This is used to check whether for a given ProxyMode value, the ProxyPacUrl, |
-// the ProxyBypassList and the ProxyServer policies are allowed to be specified. |
-// |error_message_id| is the message id of the localized error message to show |
-// when the policies are not specified as allowed. Each value of ProxyMode |
-// has a ProxyModeValidationEntry in the |kProxyModeValidationMap| below. |
-struct ProxyModeValidationEntry { |
- const char* mode_value; |
- bool pac_url_allowed; |
- bool bypass_list_allowed; |
- bool server_allowed; |
- int error_message_id; |
-}; |
- |
-// List of entries determining which proxy policies can be specified, depending |
-// on the ProxyMode. |
-const ProxyModeValidationEntry kProxyModeValidationMap[] = { |
- { ProxyPrefs::kDirectProxyModeName, |
- false, false, false, IDS_POLICY_PROXY_MODE_DISABLED_ERROR }, |
- { ProxyPrefs::kAutoDetectProxyModeName, |
- false, false, false, IDS_POLICY_PROXY_MODE_AUTO_DETECT_ERROR }, |
- { ProxyPrefs::kPacScriptProxyModeName, |
- true, false, false, IDS_POLICY_PROXY_MODE_PAC_URL_ERROR }, |
- { ProxyPrefs::kFixedServersProxyModeName, |
- false, true, true, IDS_POLICY_PROXY_MODE_FIXED_SERVERS_ERROR }, |
- { ProxyPrefs::kSystemProxyModeName, |
- false, false, false, IDS_POLICY_PROXY_MODE_SYSTEM_ERROR }, |
-}; |
- |
-} // namespace |
- |
-namespace policy { |
- |
-// The proxy policies have the peculiarity that they are loaded from individual |
-// policies, but the providers then expose them through a unified |
-// DictionaryValue. Once Dictionary policies are fully supported, the individual |
-// proxy policies will be deprecated. http://crbug.com/108996 |
- |
-ProxyPolicyHandler::ProxyPolicyHandler() {} |
- |
-ProxyPolicyHandler::~ProxyPolicyHandler() { |
-} |
- |
-bool ProxyPolicyHandler::CheckPolicySettings(const PolicyMap& policies, |
- PolicyErrorMap* errors) { |
- const base::Value* mode = GetProxyPolicyValue(policies, key::kProxyMode); |
- const base::Value* server = GetProxyPolicyValue(policies, key::kProxyServer); |
- const base::Value* server_mode = |
- GetProxyPolicyValue(policies, key::kProxyServerMode); |
- const base::Value* pac_url = GetProxyPolicyValue(policies, key::kProxyPacUrl); |
- const base::Value* bypass_list = |
- GetProxyPolicyValue(policies, key::kProxyBypassList); |
- |
- if ((server || pac_url || bypass_list) && !(mode || server_mode)) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyMode, |
- IDS_POLICY_NOT_SPECIFIED_ERROR); |
- return false; |
- } |
- |
- std::string mode_value; |
- if (!CheckProxyModeAndServerMode(policies, errors, &mode_value)) |
- return false; |
- |
- // 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; |
- |
- bool is_valid_mode = false; |
- for (size_t i = 0; i != arraysize(kProxyModeValidationMap); ++i) { |
- const ProxyModeValidationEntry& entry = kProxyModeValidationMap[i]; |
- if (entry.mode_value != mode_value) |
- continue; |
- |
- is_valid_mode = true; |
- |
- if (!entry.pac_url_allowed && pac_url) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyPacUrl, |
- entry.error_message_id); |
- } |
- if (!entry.bypass_list_allowed && bypass_list) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyBypassList, |
- entry.error_message_id); |
- } |
- if (!entry.server_allowed && server) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyServer, |
- entry.error_message_id); |
- } |
- |
- if ((!entry.pac_url_allowed && pac_url) || |
- (!entry.bypass_list_allowed && bypass_list) || |
- (!entry.server_allowed && server)) { |
- return false; |
- } |
- } |
- |
- if (!is_valid_mode) { |
- errors->AddError(key::kProxySettings, |
- mode ? key::kProxyMode : key::kProxyServerMode, |
- IDS_POLICY_OUT_OF_RANGE_ERROR, |
- mode_value); |
- return false; |
- } |
- return true; |
-} |
- |
-void ProxyPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, |
- PrefValueMap* prefs) { |
- const base::Value* mode = GetProxyPolicyValue(policies, key::kProxyMode); |
- const base::Value* server = GetProxyPolicyValue(policies, key::kProxyServer); |
- const base::Value* server_mode = |
- GetProxyPolicyValue(policies, key::kProxyServerMode); |
- const base::Value* pac_url = GetProxyPolicyValue(policies, key::kProxyPacUrl); |
- const base::Value* bypass_list = |
- GetProxyPolicyValue(policies, key::kProxyBypassList); |
- |
- ProxyPrefs::ProxyMode proxy_mode; |
- if (mode) { |
- std::string string_mode; |
- CHECK(mode->GetAsString(&string_mode)); |
- CHECK(ProxyPrefs::StringToProxyMode(string_mode, &proxy_mode)); |
- } else if (server_mode) { |
- int int_mode = 0; |
- CHECK(server_mode->GetAsInteger(&int_mode)); |
- |
- switch (int_mode) { |
- case PROXY_SERVER_MODE: |
- proxy_mode = ProxyPrefs::MODE_DIRECT; |
- break; |
- case PROXY_AUTO_DETECT_PROXY_SERVER_MODE: |
- proxy_mode = ProxyPrefs::MODE_AUTO_DETECT; |
- break; |
- case PROXY_MANUALLY_CONFIGURED_PROXY_SERVER_MODE: |
- proxy_mode = ProxyPrefs::MODE_FIXED_SERVERS; |
- if (pac_url) |
- proxy_mode = ProxyPrefs::MODE_PAC_SCRIPT; |
- break; |
- case PROXY_USE_SYSTEM_PROXY_SERVER_MODE: |
- proxy_mode = ProxyPrefs::MODE_SYSTEM; |
- break; |
- default: |
- proxy_mode = ProxyPrefs::MODE_DIRECT; |
- NOTREACHED(); |
- } |
- } else { |
- return; |
- } |
- |
- switch (proxy_mode) { |
- case ProxyPrefs::MODE_DIRECT: |
- prefs->SetValue(proxy_config::prefs::kProxy, |
- make_scoped_ptr(ProxyConfigDictionary::CreateDirect())); |
- break; |
- case ProxyPrefs::MODE_AUTO_DETECT: |
- prefs->SetValue( |
- proxy_config::prefs::kProxy, |
- make_scoped_ptr(ProxyConfigDictionary::CreateAutoDetect())); |
- break; |
- case ProxyPrefs::MODE_PAC_SCRIPT: { |
- std::string pac_url_string; |
- if (pac_url && pac_url->GetAsString(&pac_url_string)) { |
- prefs->SetValue(proxy_config::prefs::kProxy, |
- make_scoped_ptr(ProxyConfigDictionary::CreatePacScript( |
- pac_url_string, false))); |
- } else { |
- NOTREACHED(); |
- } |
- break; |
- } |
- case ProxyPrefs::MODE_FIXED_SERVERS: { |
- std::string proxy_server; |
- std::string bypass_list_string; |
- if (server->GetAsString(&proxy_server)) { |
- if (bypass_list) |
- bypass_list->GetAsString(&bypass_list_string); |
- prefs->SetValue( |
- proxy_config::prefs::kProxy, |
- make_scoped_ptr(ProxyConfigDictionary::CreateFixedServers( |
- proxy_server, bypass_list_string))); |
- } |
- break; |
- } |
- case ProxyPrefs::MODE_SYSTEM: |
- prefs->SetValue(proxy_config::prefs::kProxy, |
- make_scoped_ptr(ProxyConfigDictionary::CreateSystem())); |
- break; |
- case ProxyPrefs::kModeCount: |
- NOTREACHED(); |
- } |
-} |
- |
-const base::Value* ProxyPolicyHandler::GetProxyPolicyValue( |
- const PolicyMap& policies, const char* policy_name) { |
- // See note on the ProxyPolicyHandler implementation above. |
- const base::Value* value = policies.GetValue(key::kProxySettings); |
- const base::DictionaryValue* settings; |
- if (!value || !value->GetAsDictionary(&settings)) |
- return NULL; |
- |
- const base::Value* policy_value = NULL; |
- std::string tmp; |
- if (!settings->Get(policy_name, &policy_value) || |
- policy_value->IsType(base::Value::TYPE_NULL) || |
- (policy_value->IsType(base::Value::TYPE_STRING) && |
- policy_value->GetAsString(&tmp) && |
- tmp.empty())) { |
- return NULL; |
- } |
- return policy_value; |
-} |
- |
-bool ProxyPolicyHandler::CheckProxyModeAndServerMode(const PolicyMap& policies, |
- PolicyErrorMap* errors, |
- std::string* mode_value) { |
- const base::Value* mode = GetProxyPolicyValue(policies, key::kProxyMode); |
- const base::Value* server = GetProxyPolicyValue(policies, key::kProxyServer); |
- const base::Value* server_mode = |
- GetProxyPolicyValue(policies, key::kProxyServerMode); |
- const base::Value* pac_url = GetProxyPolicyValue(policies, key::kProxyPacUrl); |
- |
- // If there's a server mode, convert it into a mode. |
- // When both are specified, the mode takes precedence. |
- if (mode) { |
- if (server_mode) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyServerMode, |
- IDS_POLICY_OVERRIDDEN, |
- key::kProxyMode); |
- } |
- if (!mode->GetAsString(mode_value)) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyMode, |
- IDS_POLICY_TYPE_ERROR, |
- ValueTypeToString(base::Value::TYPE_BOOLEAN)); |
- return false; |
- } |
- |
- ProxyPrefs::ProxyMode mode; |
- if (!ProxyPrefs::StringToProxyMode(*mode_value, &mode)) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyMode, |
- IDS_POLICY_INVALID_PROXY_MODE_ERROR); |
- return false; |
- } |
- |
- if (mode == ProxyPrefs::MODE_PAC_SCRIPT && !pac_url) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyPacUrl, |
- IDS_POLICY_NOT_SPECIFIED_ERROR); |
- return false; |
- } else if (mode == ProxyPrefs::MODE_FIXED_SERVERS && !server) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyServer, |
- IDS_POLICY_NOT_SPECIFIED_ERROR); |
- return false; |
- } |
- } else if (server_mode) { |
- int server_mode_value; |
- if (!server_mode->GetAsInteger(&server_mode_value)) { |
- errors->AddError(key::kProxySettings, |
- key::kProxyServerMode, |
- IDS_POLICY_TYPE_ERROR, |
- ValueTypeToString(base::Value::TYPE_INTEGER)); |
- return false; |
- } |
- |
- switch (server_mode_value) { |
- case PROXY_SERVER_MODE: |
- *mode_value = ProxyPrefs::kDirectProxyModeName; |
- break; |
- case PROXY_AUTO_DETECT_PROXY_SERVER_MODE: |
- *mode_value = ProxyPrefs::kAutoDetectProxyModeName; |
- break; |
- case PROXY_MANUALLY_CONFIGURED_PROXY_SERVER_MODE: |
- if (server && pac_url) { |
- int message_id = IDS_POLICY_PROXY_BOTH_SPECIFIED_ERROR; |
- errors->AddError(key::kProxySettings, |
- key::kProxyServer, |
- message_id); |
- errors->AddError(key::kProxySettings, |
- key::kProxyPacUrl, |
- message_id); |
- return false; |
- } |
- if (!server && !pac_url) { |
- int message_id = IDS_POLICY_PROXY_NEITHER_SPECIFIED_ERROR; |
- errors->AddError(key::kProxySettings, |
- key::kProxyServer, |
- message_id); |
- errors->AddError(key::kProxySettings, |
- key::kProxyPacUrl, |
- message_id); |
- return false; |
- } |
- if (pac_url) |
- *mode_value = ProxyPrefs::kPacScriptProxyModeName; |
- else |
- *mode_value = ProxyPrefs::kFixedServersProxyModeName; |
- break; |
- case PROXY_USE_SYSTEM_PROXY_SERVER_MODE: |
- *mode_value = ProxyPrefs::kSystemProxyModeName; |
- break; |
- default: |
- errors->AddError(key::kProxySettings, |
- key::kProxyServerMode, |
- IDS_POLICY_OUT_OF_RANGE_ERROR, |
- base::IntToString(server_mode_value)); |
- return false; |
- } |
- } |
- return true; |
-} |
- |
-} // namespace policy |