• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 "base/logging.h"
8 #include "base/values.h"
9 #include "chrome/browser/prefs/proxy_config_dictionary.h"
10 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/pref_names.h"
12 #include "ui/base/ui_base_switches.h"
13 
14 const CommandLinePrefStore::StringSwitchToPreferenceMapEntry
15     CommandLinePrefStore::string_switch_map_[] = {
16       { switches::kLang, prefs::kApplicationLocale },
17       { switches::kAuthSchemes, prefs::kAuthSchemes },
18       { switches::kAuthServerWhitelist, prefs::kAuthServerWhitelist },
19       { switches::kAuthNegotiateDelegateWhitelist,
20           prefs::kAuthNegotiateDelegateWhitelist },
21       { switches::kGSSAPILibraryName, prefs::kGSSAPILibraryName },
22 };
23 
24 const CommandLinePrefStore::BooleanSwitchToPreferenceMapEntry
25     CommandLinePrefStore::boolean_switch_map_[] = {
26       { switches::kDisableAuthNegotiateCnameLookup,
27           prefs::kDisableAuthNegotiateCnameLookup, true },
28       { switches::kEnableAuthNegotiatePort, prefs::kEnableAuthNegotiatePort,
29           true },
30       { switches::kDisable3DAPIs, prefs::kDisable3DAPIs, true },
31       { switches::kEnableCloudPrintProxy, prefs::kCloudPrintProxyEnabled,
32           true },
33       { switches::kAllowOutdatedPlugins, prefs::kPluginsAllowOutdated, true },
34       { switches::kNoPings, prefs::kEnableHyperlinkAuditing, false },
35       { switches::kNoReferrers, prefs::kEnableReferrers, false },
36 };
37 
CommandLinePrefStore(const CommandLine * command_line)38 CommandLinePrefStore::CommandLinePrefStore(const CommandLine* command_line)
39     : command_line_(command_line) {
40   ApplySimpleSwitches();
41   ApplyProxyMode();
42   ValidateProxySwitches();
43 }
44 
~CommandLinePrefStore()45 CommandLinePrefStore::~CommandLinePrefStore() {}
46 
ApplySimpleSwitches()47 void CommandLinePrefStore::ApplySimpleSwitches() {
48   // Look for each switch we know about and set its preference accordingly.
49   for (size_t i = 0; i < arraysize(string_switch_map_); ++i) {
50     if (command_line_->HasSwitch(string_switch_map_[i].switch_name)) {
51       Value* value = Value::CreateStringValue(command_line_->
52           GetSwitchValueASCII(string_switch_map_[i].switch_name));
53       SetValue(string_switch_map_[i].preference_path, value);
54     }
55   }
56 
57   for (size_t i = 0; i < arraysize(boolean_switch_map_); ++i) {
58     if (command_line_->HasSwitch(boolean_switch_map_[i].switch_name)) {
59       Value* value = Value::CreateBooleanValue(
60           boolean_switch_map_[i].set_value);
61       SetValue(boolean_switch_map_[i].preference_path, value);
62     }
63   }
64 }
65 
ValidateProxySwitches()66 bool CommandLinePrefStore::ValidateProxySwitches() {
67   if (command_line_->HasSwitch(switches::kNoProxyServer) &&
68       (command_line_->HasSwitch(switches::kProxyAutoDetect) ||
69        command_line_->HasSwitch(switches::kProxyServer) ||
70        command_line_->HasSwitch(switches::kProxyPacUrl) ||
71        command_line_->HasSwitch(switches::kProxyBypassList))) {
72     LOG(WARNING) << "Additional command-line proxy switches specified when --"
73                  << switches::kNoProxyServer << " was also specified.";
74     return false;
75   }
76   return true;
77 }
78 
ApplyProxyMode()79 void CommandLinePrefStore::ApplyProxyMode() {
80   if (command_line_->HasSwitch(switches::kNoProxyServer)) {
81     SetValue(prefs::kProxy,
82              ProxyConfigDictionary::CreateDirect());
83   } else if (command_line_->HasSwitch(switches::kProxyPacUrl)) {
84     std::string pac_script_url =
85         command_line_->GetSwitchValueASCII(switches::kProxyPacUrl);
86     SetValue(prefs::kProxy,
87              ProxyConfigDictionary::CreatePacScript(pac_script_url));
88   } else if (command_line_->HasSwitch(switches::kProxyAutoDetect)) {
89     SetValue(prefs::kProxy,
90              ProxyConfigDictionary::CreateAutoDetect());
91   } else if (command_line_->HasSwitch(switches::kProxyServer)) {
92     std::string proxy_server =
93         command_line_->GetSwitchValueASCII(switches::kProxyServer);
94     std::string bypass_list =
95         command_line_->GetSwitchValueASCII(switches::kProxyBypassList);
96     SetValue(prefs::kProxy,
97              ProxyConfigDictionary::CreateFixedServers(proxy_server,
98                                                        bypass_list));
99   }
100 }
101