| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/net/proxy_policy_handler.h" | 5 #include "chrome/browser/net/proxy_policy_handler.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/prefs/pref_value_map.h" | 8 #include "base/prefs/pref_value_map.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 break; | 205 break; |
| 206 case ProxyPrefs::kModeCount: | 206 case ProxyPrefs::kModeCount: |
| 207 NOTREACHED(); | 207 NOTREACHED(); |
| 208 } | 208 } |
| 209 } | 209 } |
| 210 | 210 |
| 211 const base::Value* ProxyPolicyHandler::GetProxyPolicyValue( | 211 const base::Value* ProxyPolicyHandler::GetProxyPolicyValue( |
| 212 const PolicyMap& policies, const char* policy_name) { | 212 const PolicyMap& policies, const char* policy_name) { |
| 213 // See note on the ProxyPolicyHandler implementation above. | 213 // See note on the ProxyPolicyHandler implementation above. |
| 214 const base::Value* value = policies.GetValue(key::kProxySettings); | 214 const base::Value* value = policies.GetValue(key::kProxySettings); |
| 215 const DictionaryValue* settings; | 215 const base::DictionaryValue* settings; |
| 216 if (!value || !value->GetAsDictionary(&settings)) | 216 if (!value || !value->GetAsDictionary(&settings)) |
| 217 return NULL; | 217 return NULL; |
| 218 | 218 |
| 219 const base::Value* policy_value = NULL; | 219 const base::Value* policy_value = NULL; |
| 220 std::string tmp; | 220 std::string tmp; |
| 221 if (!settings->Get(policy_name, &policy_value) || | 221 if (!settings->Get(policy_name, &policy_value) || |
| 222 policy_value->IsType(Value::TYPE_NULL) || | 222 policy_value->IsType(base::Value::TYPE_NULL) || |
| 223 (policy_value->IsType(Value::TYPE_STRING) && | 223 (policy_value->IsType(base::Value::TYPE_STRING) && |
| 224 policy_value->GetAsString(&tmp) && | 224 policy_value->GetAsString(&tmp) && |
| 225 tmp.empty())) { | 225 tmp.empty())) { |
| 226 return NULL; | 226 return NULL; |
| 227 } | 227 } |
| 228 return policy_value; | 228 return policy_value; |
| 229 } | 229 } |
| 230 | 230 |
| 231 bool ProxyPolicyHandler::CheckProxyModeAndServerMode(const PolicyMap& policies, | 231 bool ProxyPolicyHandler::CheckProxyModeAndServerMode(const PolicyMap& policies, |
| 232 PolicyErrorMap* errors, | 232 PolicyErrorMap* errors, |
| 233 std::string* mode_value) { | 233 std::string* mode_value) { |
| 234 const base::Value* mode = GetProxyPolicyValue(policies, key::kProxyMode); | 234 const base::Value* mode = GetProxyPolicyValue(policies, key::kProxyMode); |
| 235 const base::Value* server = GetProxyPolicyValue(policies, key::kProxyServer); | 235 const base::Value* server = GetProxyPolicyValue(policies, key::kProxyServer); |
| 236 const base::Value* server_mode = | 236 const base::Value* server_mode = |
| 237 GetProxyPolicyValue(policies, key::kProxyServerMode); | 237 GetProxyPolicyValue(policies, key::kProxyServerMode); |
| 238 const base::Value* pac_url = GetProxyPolicyValue(policies, key::kProxyPacUrl); | 238 const base::Value* pac_url = GetProxyPolicyValue(policies, key::kProxyPacUrl); |
| 239 | 239 |
| 240 // If there's a server mode, convert it into a mode. | 240 // If there's a server mode, convert it into a mode. |
| 241 // When both are specified, the mode takes precedence. | 241 // When both are specified, the mode takes precedence. |
| 242 if (mode) { | 242 if (mode) { |
| 243 if (server_mode) { | 243 if (server_mode) { |
| 244 errors->AddError(key::kProxySettings, | 244 errors->AddError(key::kProxySettings, |
| 245 key::kProxyServerMode, | 245 key::kProxyServerMode, |
| 246 IDS_POLICY_OVERRIDDEN, | 246 IDS_POLICY_OVERRIDDEN, |
| 247 key::kProxyMode); | 247 key::kProxyMode); |
| 248 } | 248 } |
| 249 if (!mode->GetAsString(mode_value)) { | 249 if (!mode->GetAsString(mode_value)) { |
| 250 errors->AddError(key::kProxySettings, | 250 errors->AddError(key::kProxySettings, |
| 251 key::kProxyMode, | 251 key::kProxyMode, |
| 252 IDS_POLICY_TYPE_ERROR, | 252 IDS_POLICY_TYPE_ERROR, |
| 253 ValueTypeToString(Value::TYPE_BOOLEAN)); | 253 ValueTypeToString(base::Value::TYPE_BOOLEAN)); |
| 254 return false; | 254 return false; |
| 255 } | 255 } |
| 256 | 256 |
| 257 ProxyPrefs::ProxyMode mode; | 257 ProxyPrefs::ProxyMode mode; |
| 258 if (!ProxyPrefs::StringToProxyMode(*mode_value, &mode)) { | 258 if (!ProxyPrefs::StringToProxyMode(*mode_value, &mode)) { |
| 259 errors->AddError(key::kProxySettings, | 259 errors->AddError(key::kProxySettings, |
| 260 key::kProxyMode, | 260 key::kProxyMode, |
| 261 IDS_POLICY_INVALID_PROXY_MODE_ERROR); | 261 IDS_POLICY_INVALID_PROXY_MODE_ERROR); |
| 262 return false; | 262 return false; |
| 263 } | 263 } |
| 264 | 264 |
| 265 if (mode == ProxyPrefs::MODE_PAC_SCRIPT && !pac_url) { | 265 if (mode == ProxyPrefs::MODE_PAC_SCRIPT && !pac_url) { |
| 266 errors->AddError(key::kProxySettings, | 266 errors->AddError(key::kProxySettings, |
| 267 key::kProxyPacUrl, | 267 key::kProxyPacUrl, |
| 268 IDS_POLICY_NOT_SPECIFIED_ERROR); | 268 IDS_POLICY_NOT_SPECIFIED_ERROR); |
| 269 return false; | 269 return false; |
| 270 } else if (mode == ProxyPrefs::MODE_FIXED_SERVERS && !server) { | 270 } else if (mode == ProxyPrefs::MODE_FIXED_SERVERS && !server) { |
| 271 errors->AddError(key::kProxySettings, | 271 errors->AddError(key::kProxySettings, |
| 272 key::kProxyServer, | 272 key::kProxyServer, |
| 273 IDS_POLICY_NOT_SPECIFIED_ERROR); | 273 IDS_POLICY_NOT_SPECIFIED_ERROR); |
| 274 return false; | 274 return false; |
| 275 } | 275 } |
| 276 } else if (server_mode) { | 276 } else if (server_mode) { |
| 277 int server_mode_value; | 277 int server_mode_value; |
| 278 if (!server_mode->GetAsInteger(&server_mode_value)) { | 278 if (!server_mode->GetAsInteger(&server_mode_value)) { |
| 279 errors->AddError(key::kProxySettings, | 279 errors->AddError(key::kProxySettings, |
| 280 key::kProxyServerMode, | 280 key::kProxyServerMode, |
| 281 IDS_POLICY_TYPE_ERROR, | 281 IDS_POLICY_TYPE_ERROR, |
| 282 ValueTypeToString(Value::TYPE_INTEGER)); | 282 ValueTypeToString(base::Value::TYPE_INTEGER)); |
| 283 return false; | 283 return false; |
| 284 } | 284 } |
| 285 | 285 |
| 286 switch (server_mode_value) { | 286 switch (server_mode_value) { |
| 287 case PROXY_SERVER_MODE: | 287 case PROXY_SERVER_MODE: |
| 288 *mode_value = ProxyPrefs::kDirectProxyModeName; | 288 *mode_value = ProxyPrefs::kDirectProxyModeName; |
| 289 break; | 289 break; |
| 290 case PROXY_AUTO_DETECT_PROXY_SERVER_MODE: | 290 case PROXY_AUTO_DETECT_PROXY_SERVER_MODE: |
| 291 *mode_value = ProxyPrefs::kAutoDetectProxyModeName; | 291 *mode_value = ProxyPrefs::kAutoDetectProxyModeName; |
| 292 break; | 292 break; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 key::kProxyServerMode, | 324 key::kProxyServerMode, |
| 325 IDS_POLICY_OUT_OF_RANGE_ERROR, | 325 IDS_POLICY_OUT_OF_RANGE_ERROR, |
| 326 base::IntToString(server_mode_value)); | 326 base::IntToString(server_mode_value)); |
| 327 return false; | 327 return false; |
| 328 } | 328 } |
| 329 } | 329 } |
| 330 return true; | 330 return true; |
| 331 } | 331 } |
| 332 | 332 |
| 333 } // namespace policy | 333 } // namespace policy |
| OLD | NEW |