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