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
23void 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
111bool 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