• 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/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