Upstream version 11.39.250.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / prefs / command_line_pref_store.cc
1 // Copyright (c) 2012 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 <string>
8 #include <vector>
9
10 #include "base/files/file_path.h"
11 #include "base/logging.h"
12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/string_split.h"
14 #include "base/values.h"
15 #include "chrome/browser/prefs/proxy_config_dictionary.h"
16 #include "chrome/common/chrome_switches.h"
17 #include "chrome/common/pref_names.h"
18 #include "ui/base/ui_base_switches.h"
19
20 #if defined(OS_CHROMEOS)
21 #include "chromeos/chromeos_switches.h"
22 #endif
23
24 const CommandLinePrefStore::StringSwitchToPreferenceMapEntry
25     CommandLinePrefStore::string_switch_map_[] = {
26       { switches::kLang, prefs::kApplicationLocale },
27       { switches::kAuthSchemes, prefs::kAuthSchemes },
28       { switches::kAuthServerWhitelist, prefs::kAuthServerWhitelist },
29       { switches::kAuthNegotiateDelegateWhitelist,
30           prefs::kAuthNegotiateDelegateWhitelist },
31       { switches::kGSSAPILibraryName, prefs::kGSSAPILibraryName },
32       { data_reduction_proxy::switches::kDataReductionProxy,
33           data_reduction_proxy::prefs::kDataReductionProxy },
34       { switches::kSSLVersionMin, prefs::kSSLVersionMin },
35       { switches::kSSLVersionMax, prefs::kSSLVersionMax },
36       { switches::kSSLVersionFallbackMin, prefs::kSSLVersionFallbackMin },
37 };
38
39 const CommandLinePrefStore::PathSwitchToPreferenceMapEntry
40     CommandLinePrefStore::path_switch_map_[] = {
41       { switches::kDiskCacheDir, prefs::kDiskCacheDir },
42 };
43
44 const CommandLinePrefStore::BooleanSwitchToPreferenceMapEntry
45     CommandLinePrefStore::boolean_switch_map_[] = {
46       { switches::kDisableAuthNegotiateCnameLookup,
47           prefs::kDisableAuthNegotiateCnameLookup, true },
48       { switches::kEnableAuthNegotiatePort, prefs::kEnableAuthNegotiatePort,
49           true },
50       { switches::kDisable3DAPIs, prefs::kDisable3DAPIs, true },
51       { switches::kEnableCloudPrintProxy, prefs::kCloudPrintProxyEnabled,
52           true },
53       { switches::kAllowOutdatedPlugins, prefs::kPluginsAllowOutdated, true },
54       { switches::kAlwaysAuthorizePlugins, prefs::kPluginsAlwaysAuthorize,
55           true },
56       { switches::kNoPings, prefs::kEnableHyperlinkAuditing, false },
57       { switches::kNoReferrers, prefs::kEnableReferrers, false },
58       { switches::kAllowRunningInsecureContent,
59         prefs::kWebKitAllowRunningInsecureContent, true },
60       { switches::kNoDisplayingInsecureContent,
61         prefs::kWebKitAllowDisplayingInsecureContent, false },
62       { switches::kAllowCrossOriginAuthPrompt,
63         prefs::kAllowCrossOriginAuthPrompt, true },
64       { switches::kDisablePrintPreview, prefs::kPrintPreviewDisabled, true },
65 #if defined(OS_CHROMEOS)
66       { chromeos::switches::kEnableTouchpadThreeFingerClick,
67           prefs::kEnableTouchpadThreeFingerClick, true },
68 #endif
69       { switches::kDisableAsyncDns, prefs::kBuiltInDnsClientEnabled, false },
70       { switches::kEnableAsyncDns, prefs::kBuiltInDnsClientEnabled, true },
71 };
72
73 const CommandLinePrefStore::IntegerSwitchToPreferenceMapEntry
74     CommandLinePrefStore::integer_switch_map_[] = {
75       { switches::kDiskCacheSize, prefs::kDiskCacheSize },
76       { switches::kMediaCacheSize, prefs::kMediaCacheSize },
77     };
78
79 CommandLinePrefStore::CommandLinePrefStore(const CommandLine* command_line)
80     : command_line_(command_line) {
81   ApplySimpleSwitches();
82   ApplyProxyMode();
83   ValidateProxySwitches();
84   ApplySSLSwitches();
85   ApplyBackgroundModeSwitches();
86 }
87
88 CommandLinePrefStore::~CommandLinePrefStore() {}
89
90 bool CommandLinePrefStore::ValidateProxySwitches() {
91   if (command_line_->HasSwitch(switches::kNoProxyServer) &&
92       (command_line_->HasSwitch(switches::kProxyAutoDetect) ||
93        command_line_->HasSwitch(switches::kProxyServer) ||
94        command_line_->HasSwitch(switches::kProxyPacUrl) ||
95        command_line_->HasSwitch(switches::kProxyBypassList))) {
96     LOG(WARNING) << "Additional command-line proxy switches specified when --"
97                  << switches::kNoProxyServer << " was also specified.";
98     return false;
99   }
100   return true;
101 }
102
103 void CommandLinePrefStore::ApplySimpleSwitches() {
104   // Look for each switch we know about and set its preference accordingly.
105   for (size_t i = 0; i < arraysize(string_switch_map_); ++i) {
106     if (command_line_->HasSwitch(string_switch_map_[i].switch_name)) {
107       SetValue(string_switch_map_[i].preference_path,
108                new base::StringValue(command_line_->GetSwitchValueASCII(
109                    string_switch_map_[i].switch_name)));
110     }
111   }
112
113   for (size_t i = 0; i < arraysize(path_switch_map_); ++i) {
114     if (command_line_->HasSwitch(path_switch_map_[i].switch_name)) {
115       SetValue(path_switch_map_[i].preference_path,
116                new base::StringValue(command_line_->GetSwitchValuePath(
117                    path_switch_map_[i].switch_name).value()));
118     }
119   }
120
121   for (size_t i = 0; i < arraysize(integer_switch_map_); ++i) {
122     if (command_line_->HasSwitch(integer_switch_map_[i].switch_name)) {
123       std::string str_value = command_line_->GetSwitchValueASCII(
124           integer_switch_map_[i].switch_name);
125       int int_value = 0;
126       if (!base::StringToInt(str_value, &int_value)) {
127         LOG(ERROR) << "The value " << str_value << " of "
128                    << integer_switch_map_[i].switch_name
129                    << " can not be converted to integer, ignoring!";
130         continue;
131       }
132       SetValue(integer_switch_map_[i].preference_path,
133                new base::FundamentalValue(int_value));
134     }
135   }
136
137   for (size_t i = 0; i < arraysize(boolean_switch_map_); ++i) {
138     if (command_line_->HasSwitch(boolean_switch_map_[i].switch_name)) {
139       SetValue(boolean_switch_map_[i].preference_path,
140                new base::FundamentalValue(boolean_switch_map_[i].set_value));
141     }
142   }
143 }
144
145 void CommandLinePrefStore::ApplyProxyMode() {
146   if (command_line_->HasSwitch(switches::kNoProxyServer)) {
147     SetValue(prefs::kProxy,
148              ProxyConfigDictionary::CreateDirect());
149   } else if (command_line_->HasSwitch(switches::kProxyPacUrl)) {
150     std::string pac_script_url =
151         command_line_->GetSwitchValueASCII(switches::kProxyPacUrl);
152     SetValue(prefs::kProxy,
153              ProxyConfigDictionary::CreatePacScript(pac_script_url, false));
154   } else if (command_line_->HasSwitch(switches::kProxyAutoDetect)) {
155     SetValue(prefs::kProxy,
156              ProxyConfigDictionary::CreateAutoDetect());
157   } else if (command_line_->HasSwitch(switches::kProxyServer)) {
158     std::string proxy_server =
159         command_line_->GetSwitchValueASCII(switches::kProxyServer);
160     std::string bypass_list =
161         command_line_->GetSwitchValueASCII(switches::kProxyBypassList);
162     SetValue(prefs::kProxy,
163              ProxyConfigDictionary::CreateFixedServers(proxy_server,
164                                                        bypass_list));
165   }
166 }
167
168 void CommandLinePrefStore::ApplySSLSwitches() {
169   if (command_line_->HasSwitch(switches::kCipherSuiteBlacklist)) {
170     std::string cipher_suites =
171         command_line_->GetSwitchValueASCII(switches::kCipherSuiteBlacklist);
172     std::vector<std::string> cipher_strings;
173     base::SplitString(cipher_suites, ',', &cipher_strings);
174     base::ListValue* list_value = new base::ListValue();
175     for (std::vector<std::string>::const_iterator it = cipher_strings.begin();
176          it != cipher_strings.end(); ++it) {
177       list_value->Append(new base::StringValue(*it));
178     }
179     SetValue(prefs::kCipherSuiteBlacklist, list_value);
180   }
181 }
182
183 void CommandLinePrefStore::ApplyBackgroundModeSwitches() {
184   if (command_line_->HasSwitch(switches::kDisableExtensions))
185     SetValue(prefs::kBackgroundModeEnabled, new base::FundamentalValue(false));
186 }