command_line_pref_store.cc revision 4a5e2dc747d50c653511c68ccb2cfbfb740bd5a7
1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/prefs/command_line_pref_store.h" 6 7#include "app/app_switches.h" 8#include "base/logging.h" 9#include "base/values.h" 10#include "chrome/common/chrome_switches.h" 11#include "chrome/common/pref_names.h" 12 13const CommandLinePrefStore::StringSwitchToPreferenceMapEntry 14 CommandLinePrefStore::string_switch_map_[] = { 15 { switches::kLang, prefs::kApplicationLocale }, 16 { switches::kProxyServer, prefs::kProxyServer }, 17 { switches::kProxyPacUrl, prefs::kProxyPacUrl }, 18 { switches::kProxyBypassList, prefs::kProxyBypassList }, 19 { switches::kAuthSchemes, prefs::kAuthSchemes }, 20 { switches::kAuthServerWhitelist, prefs::kAuthServerWhitelist }, 21 { switches::kAuthNegotiateDelegateWhitelist, 22 prefs::kAuthNegotiateDelegateWhitelist }, 23 { switches::kGSSAPILibraryName, prefs::kGSSAPILibraryName }, 24}; 25 26const CommandLinePrefStore::BooleanSwitchToPreferenceMapEntry 27 CommandLinePrefStore::boolean_switch_map_[] = { 28 { switches::kNoProxyServer, prefs::kNoProxyServer, true }, 29 { switches::kProxyAutoDetect, prefs::kProxyAutoDetect, true }, 30 { switches::kDisableAuthNegotiateCnameLookup, 31 prefs::kDisableAuthNegotiateCnameLookup, true }, 32 { switches::kEnableAuthNegotiatePort, prefs::kEnableAuthNegotiatePort, 33 true }, 34}; 35 36CommandLinePrefStore::CommandLinePrefStore(const CommandLine* command_line) 37 : command_line_(command_line), 38 prefs_(new DictionaryValue()) {} 39 40CommandLinePrefStore::~CommandLinePrefStore() {} 41 42PrefStore::PrefReadError CommandLinePrefStore::ReadPrefs() { 43 ApplySimpleSwitches(); 44 ValidateProxySwitches(); 45 return PrefStore::PREF_READ_ERROR_NONE; 46} 47 48void CommandLinePrefStore::ApplySimpleSwitches() { 49 // Look for each switch we know about and set its preference accordingly. 50 for (size_t i = 0; i < arraysize(string_switch_map_); ++i) { 51 if (command_line_->HasSwitch(string_switch_map_[i].switch_name)) { 52 Value* value = Value::CreateStringValue(command_line_-> 53 GetSwitchValueASCII(string_switch_map_[i].switch_name)); 54 prefs_->Set(string_switch_map_[i].preference_path, value); 55 } 56 } 57 58 for (size_t i = 0; i < arraysize(boolean_switch_map_); ++i) { 59 if (command_line_->HasSwitch(boolean_switch_map_[i].switch_name)) { 60 Value* value = Value::CreateBooleanValue( 61 boolean_switch_map_[i].set_value); 62 prefs_->Set(boolean_switch_map_[i].preference_path, value); 63 } 64 } 65} 66 67bool CommandLinePrefStore::ValidateProxySwitches() { 68 if (command_line_->HasSwitch(switches::kNoProxyServer) && 69 (command_line_->HasSwitch(switches::kProxyAutoDetect) || 70 command_line_->HasSwitch(switches::kProxyServer) || 71 command_line_->HasSwitch(switches::kProxyPacUrl) || 72 command_line_->HasSwitch(switches::kProxyBypassList))) { 73 LOG(WARNING) << "Additional command-line proxy switches specified when --" 74 << switches::kNoProxyServer << " was also specified."; 75 return false; 76 } 77 return true; 78} 79