172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/command_line_pref_store.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/logging.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h" 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/prefs/proxy_config_dictionary.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_switches.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/pref_names.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/ui_base_switches.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst CommandLinePrefStore::StringSwitchToPreferenceMapEntry 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CommandLinePrefStore::string_switch_map_[] = { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { switches::kLang, prefs::kApplicationLocale }, 174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch { switches::kAuthSchemes, prefs::kAuthSchemes }, 184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch { switches::kAuthServerWhitelist, prefs::kAuthServerWhitelist }, 194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch { switches::kAuthNegotiateDelegateWhitelist, 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch prefs::kAuthNegotiateDelegateWhitelist }, 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch { switches::kGSSAPILibraryName, prefs::kGSSAPILibraryName }, 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst CommandLinePrefStore::BooleanSwitchToPreferenceMapEntry 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CommandLinePrefStore::boolean_switch_map_[] = { 264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch { switches::kDisableAuthNegotiateCnameLookup, 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch prefs::kDisableAuthNegotiateCnameLookup, true }, 284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch { switches::kEnableAuthNegotiatePort, prefs::kEnableAuthNegotiatePort, 294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch true }, 30ac1e49eb6695f711d72215fcdf9388548942a00dBen Murdoch { switches::kDisable3DAPIs, prefs::kDisable3DAPIs, true }, 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen { switches::kEnableCloudPrintProxy, prefs::kCloudPrintProxyEnabled, 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen true }, 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { switches::kAllowOutdatedPlugins, prefs::kPluginsAllowOutdated, true }, 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { switches::kNoPings, prefs::kEnableHyperlinkAuditing, false }, 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { switches::kNoReferrers, prefs::kEnableReferrers, false }, 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCommandLinePrefStore::CommandLinePrefStore(const CommandLine* command_line) 3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen : command_line_(command_line) { 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ApplySimpleSwitches(); 4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ApplyProxyMode(); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ValidateProxySwitches(); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenCommandLinePrefStore::~CommandLinePrefStore() {} 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CommandLinePrefStore::ApplySimpleSwitches() { 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Look for each switch we know about and set its preference accordingly. 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < arraysize(string_switch_map_); ++i) { 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (command_line_->HasSwitch(string_switch_map_[i].switch_name)) { 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Value* value = Value::CreateStringValue(command_line_-> 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetSwitchValueASCII(string_switch_map_[i].switch_name)); 5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SetValue(string_switch_map_[i].preference_path, value); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < arraysize(boolean_switch_map_); ++i) { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (command_line_->HasSwitch(boolean_switch_map_[i].switch_name)) { 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Value* value = Value::CreateBooleanValue( 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boolean_switch_map_[i].set_value); 6121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen SetValue(boolean_switch_map_[i].preference_path, value); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool CommandLinePrefStore::ValidateProxySwitches() { 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (command_line_->HasSwitch(switches::kNoProxyServer) && 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (command_line_->HasSwitch(switches::kProxyAutoDetect) || 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch command_line_->HasSwitch(switches::kProxyServer) || 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch command_line_->HasSwitch(switches::kProxyPacUrl) || 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch command_line_->HasSwitch(switches::kProxyBypassList))) { 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(WARNING) << "Additional command-line proxy switches specified when --" 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << switches::kNoProxyServer << " was also specified."; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid CommandLinePrefStore::ApplyProxyMode() { 8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (command_line_->HasSwitch(switches::kNoProxyServer)) { 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetValue(prefs::kProxy, 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProxyConfigDictionary::CreateDirect()); 8321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else if (command_line_->HasSwitch(switches::kProxyPacUrl)) { 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string pac_script_url = 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen command_line_->GetSwitchValueASCII(switches::kProxyPacUrl); 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetValue(prefs::kProxy, 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProxyConfigDictionary::CreatePacScript(pac_script_url)); 8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else if (command_line_->HasSwitch(switches::kProxyAutoDetect)) { 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetValue(prefs::kProxy, 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProxyConfigDictionary::CreateAutoDetect()); 9121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else if (command_line_->HasSwitch(switches::kProxyServer)) { 9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string proxy_server = 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen command_line_->GetSwitchValueASCII(switches::kProxyServer); 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string bypass_list = 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen command_line_->GetSwitchValueASCII(switches::kProxyBypassList); 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetValue(prefs::kProxy, 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProxyConfigDictionary::CreateFixedServers(proxy_server, 9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bypass_list)); 9921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 10021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 101