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