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/ui/options/options_util.h"
6
7 #include "base/threading/thread_restrictions.h"
8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/content_settings/host_content_settings_map.h"
10 #include "chrome/browser/download/download_manager.h"
11 #include "chrome/browser/download/download_prefs.h"
12 #include "chrome/browser/geolocation/geolocation_content_settings_map.h"
13 #include "chrome/browser/metrics/metrics_service.h"
14 #include "chrome/browser/notifications/desktop_notification_service.h"
15 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
16 #include "chrome/browser/prefs/pref_service.h"
17 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/common/pref_names.h"
19 #include "chrome/installer/util/google_update_settings.h"
20 #include "content/browser/host_zoom_map.h"
21
22 // static
ResetToDefaults(Profile * profile)23 void OptionsUtil::ResetToDefaults(Profile* profile) {
24 // TODO(tc): It would be nice if we could generate this list automatically so
25 // changes to any of the options pages doesn't require updating this list
26 // manually.
27 PrefService* prefs = profile->GetPrefs();
28 const char* kUserPrefs[] = {
29 prefs::kAcceptLanguages,
30 prefs::kAlternateErrorPagesEnabled,
31 prefs::kClearSiteDataOnExit,
32 prefs::kCookieBehavior,
33 prefs::kDefaultCharset,
34 prefs::kDefaultZoomLevel,
35 prefs::kDeleteBrowsingHistory,
36 prefs::kDeleteCache,
37 prefs::kDeleteCookies,
38 prefs::kDeleteDownloadHistory,
39 prefs::kDeleteFormData,
40 prefs::kDeletePasswords,
41 prefs::kNetworkPredictionEnabled,
42 // TODO(rtenneti): Remove ssl preferences from user_prefs when we stop
43 // migrating user_prefs to local_state after 6 months (after we delete
44 // migration code).
45 prefs::kCertRevocationCheckingEnabled,
46 prefs::kSSL3Enabled,
47 prefs::kTLS1Enabled,
48 #if defined(OS_CHROMEOS)
49 prefs::kTapToClickEnabled,
50 prefs::kTouchpadSensitivity,
51 #endif
52 prefs::kDownloadDefaultDirectory,
53 prefs::kDownloadExtensionsToOpen,
54 prefs::kSavingBrowserHistoryDisabled,
55 prefs::kEnableSpellCheck,
56 prefs::kEnableTranslate,
57 prefs::kAutofillEnabled,
58 prefs::kAutofillAuxiliaryProfilesEnabled,
59 prefs::kHomePage,
60 prefs::kHomePageIsNewTabPage,
61 prefs::kPromptForDownload,
62 prefs::kPasswordManagerEnabled,
63 prefs::kRestoreOnStartup,
64 prefs::kSafeBrowsingEnabled,
65 prefs::kSafeBrowsingReportingEnabled,
66 prefs::kSearchSuggestEnabled,
67 prefs::kShowHomeButton,
68 prefs::kSpellCheckDictionary,
69 prefs::kURLsToRestoreOnStartup,
70 prefs::kWebKitDefaultFixedFontSize,
71 prefs::kWebKitDefaultFontSize,
72 prefs::kWebKitFixedFontFamily,
73 prefs::kWebKitJavaEnabled,
74 prefs::kWebKitJavascriptEnabled,
75 prefs::kWebKitLoadsImagesAutomatically,
76 prefs::kWebKitPluginsEnabled,
77 prefs::kWebKitSansSerifFontFamily,
78 prefs::kWebKitSerifFontFamily,
79 prefs::kWebKitMinimumFontSize,
80 prefs::kWebKitMinimumLogicalFontSize,
81 prefs::kWebkitTabsToLinks,
82 };
83 profile->GetDownloadManager()->download_prefs()->ResetToDefaults();
84 profile->GetHostContentSettingsMap()->ResetToDefaults();
85 profile->GetGeolocationContentSettingsMap()->ResetToDefault();
86 profile->GetHostZoomMap()->ResetToDefaults();
87 DesktopNotificationServiceFactory::GetForProfile(profile)->
88 ResetToDefaultContentSetting();
89 for (size_t i = 0; i < arraysize(kUserPrefs); ++i)
90 prefs->ClearPref(kUserPrefs[i]);
91
92 PrefService* local_state = g_browser_process->local_state();
93 // Note that we don't reset the kMetricsReportingEnabled preference here
94 // because the reset will reset it to the default setting specified in Chrome
95 // source, not the default setting selected by the user on the web page where
96 // they downloaded Chrome. This means that if the user ever resets their
97 // settings they'll either inadvertedly enable this logging or disable it.
98 // One is undesirable for them, one is undesirable for us. For now, we just
99 // don't reset it.
100 const char* kLocalStatePrefs[] = {
101 prefs::kApplicationLocale,
102 prefs::kCertRevocationCheckingEnabled,
103 prefs::kSSL3Enabled,
104 prefs::kTLS1Enabled,
105 };
106 for (size_t i = 0; i < arraysize(kLocalStatePrefs); ++i)
107 local_state->ClearPref(kLocalStatePrefs[i]);
108 }
109
110 // static
ResolveMetricsReportingEnabled(bool enabled)111 bool OptionsUtil::ResolveMetricsReportingEnabled(bool enabled) {
112 // GoogleUpdateSettings touches the disk from the UI thread. MetricsService
113 // also calls GoogleUpdateSettings below. http://crbug/62626
114 base::ThreadRestrictions::ScopedAllowIO allow_io;
115
116 GoogleUpdateSettings::SetCollectStatsConsent(enabled);
117 bool update_pref = GoogleUpdateSettings::GetCollectStatsConsent();
118
119 if (enabled != update_pref) {
120 DVLOG(1) << "OptionsUtil: Unable to set crash report status to " << enabled;
121 }
122
123 // Only change the pref if GoogleUpdateSettings::GetCollectStatsConsent
124 // succeeds.
125 enabled = update_pref;
126
127 MetricsService* metrics = g_browser_process->metrics_service();
128 DCHECK(metrics);
129 if (metrics) {
130 if (enabled)
131 metrics->Start();
132 else
133 metrics->Stop();
134 }
135
136 return enabled;
137 }
138