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/ui/browser_ui_prefs.h"
6 
7 #include <memory>
8 
9 #include "base/numerics/safe_conversions.h"
10 #include "build/build_config.h"
11 #include "chrome/browser/first_run/first_run.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/upgrade_detector/upgrade_detector.h"
14 #include "chrome/common/buildflags.h"
15 #include "chrome/common/pref_names.h"
16 #include "components/pref_registry/pref_registry_syncable.h"
17 #include "components/prefs/pref_registry_simple.h"
18 #include "components/prefs/pref_service.h"
19 #include "components/prefs/scoped_user_pref_update.h"
20 #include "components/translate/core/browser/translate_pref_names.h"
21 #include "media/media_buildflags.h"
22 #include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h"
23 
24 #if !defined(OS_CHROMEOS)
25 #include "ui/accessibility/accessibility_features.h"
26 #endif
27 
28 #if defined(OS_WIN)
29 #include "base/win/windows_version.h"
30 #endif
31 
32 namespace {
33 
GetHomeButtonAndHomePageIsNewTabPageFlags()34 uint32_t GetHomeButtonAndHomePageIsNewTabPageFlags() {
35 #if defined(OS_ANDROID)
36   return PrefRegistry::NO_REGISTRATION_FLAGS;
37 #else
38   return user_prefs::PrefRegistrySyncable::SYNCABLE_PREF;
39 #endif
40 }
41 
42 }  // namespace
43 
RegisterBrowserPrefs(PrefRegistrySimple * registry)44 void RegisterBrowserPrefs(PrefRegistrySimple* registry) {
45   registry->RegisterBooleanPref(prefs::kAllowFileSelectionDialogs, true);
46 
47 #if !defined(OS_ANDROID)
48   registry->RegisterIntegerPref(prefs::kRelaunchNotification, 0);
49   registry->RegisterIntegerPref(
50       prefs::kRelaunchNotificationPeriod,
51       base::saturated_cast<int>(
52           UpgradeDetector::GetDefaultHighAnnoyanceThreshold()
53               .InMilliseconds()));
54 #endif  // !defined(OS_ANDROID)
55 }
56 
RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable * registry)57 void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) {
58   registry->RegisterBooleanPref(prefs::kHomePageIsNewTabPage, true,
59                                 GetHomeButtonAndHomePageIsNewTabPageFlags());
60   registry->RegisterBooleanPref(prefs::kShowHomeButton, false,
61                                 GetHomeButtonAndHomePageIsNewTabPageFlags());
62 
63   registry->RegisterInt64Pref(prefs::kDefaultBrowserLastDeclined, 0);
64   bool reset_check_default = false;
65 #if defined(OS_WIN)
66   reset_check_default = base::win::GetVersion() >= base::win::Version::WIN10;
67 #endif
68   registry->RegisterBooleanPref(prefs::kResetCheckDefaultBrowser,
69                                 reset_check_default);
70   registry->RegisterBooleanPref(prefs::kWebAppCreateOnDesktop, true);
71   registry->RegisterBooleanPref(prefs::kWebAppCreateInAppsMenu, true);
72   registry->RegisterBooleanPref(prefs::kWebAppCreateInQuickLaunchBar, true);
73   registry->RegisterBooleanPref(
74       prefs::kOfferTranslateEnabled, true,
75       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
76   registry->RegisterStringPref(prefs::kCloudPrintEmail, std::string());
77   registry->RegisterBooleanPref(prefs::kCloudPrintProxyEnabled, true);
78   registry->RegisterBooleanPref(prefs::kCloudPrintSubmitEnabled, true);
79   registry->RegisterDictionaryPref(prefs::kBrowserWindowPlacement);
80   registry->RegisterDictionaryPref(prefs::kBrowserWindowPlacementPopup);
81   registry->RegisterDictionaryPref(prefs::kAppWindowPlacement);
82   registry->RegisterBooleanPref(
83       prefs::kEnableDoNotTrack, false,
84       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
85 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
86   registry->RegisterBooleanPref(prefs::kPrintPreviewUseSystemDefaultPrinter,
87                                 false);
88 #endif
89   registry->RegisterStringPref(prefs::kWebRTCIPHandlingPolicy,
90                                blink::kWebRTCIPHandlingDefault);
91   registry->RegisterStringPref(prefs::kWebRTCUDPPortRange, std::string());
92   registry->RegisterBooleanPref(prefs::kWebRtcEventLogCollectionAllowed, false);
93   registry->RegisterListPref(prefs::kWebRtcLocalIpsAllowedUrls);
94   registry->RegisterBooleanPref(prefs::kWebRTCAllowLegacyTLSProtocols, false);
95 
96   // Dictionaries to keep track of default tasks in the file browser.
97   registry->RegisterDictionaryPref(
98       prefs::kDefaultTasksByMimeType,
99       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
100   registry->RegisterDictionaryPref(
101       prefs::kDefaultTasksBySuffix,
102       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
103 
104   // We need to register the type of these preferences in order to query
105   // them even though they're only typically controlled via policy.
106   registry->RegisterBooleanPref(prefs::kClearPluginLSODataEnabled, true);
107   registry->RegisterBooleanPref(prefs::kHideWebStoreIcon, false);
108   registry->RegisterBooleanPref(prefs::kSharedClipboardEnabled, true);
109 
110 #if BUILDFLAG(ENABLE_CLICK_TO_CALL)
111   registry->RegisterBooleanPref(prefs::kClickToCallEnabled, true);
112 #endif  // BUILDFLAG(ENABLE_CLICK_TO_CALL)
113 
114 #if defined(OS_MAC)
115   // This really belongs in platform code, but there's no good place to
116   // initialize it between the time when the AppController is created
117   // (where there's no profile) and the time the controller gets another
118   // crack at the start of the main event loop. By that time,
119   // StartupBrowserCreator has already created the browser window, and it's too
120   // late: we need the pref to be already initialized. Doing it here also saves
121   // us from having to hard-code pref registration in the several unit tests
122   // that use this preference.
123   registry->RegisterBooleanPref(prefs::kShowUpdatePromotionInfoBar, true);
124   registry->RegisterBooleanPref(
125       prefs::kShowFullscreenToolbar, true,
126       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
127   registry->RegisterBooleanPref(
128       prefs::kAllowJavascriptAppleEvents, false,
129       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
130 #else
131   registry->RegisterBooleanPref(prefs::kFullscreenAllowed, true);
132 #endif
133 
134   registry->RegisterBooleanPref(prefs::kEnterpriseHardwarePlatformAPIEnabled,
135                                 false);
136   registry->RegisterBooleanPref(prefs::kUserFeedbackAllowed, true);
137   registry->RegisterBooleanPref(prefs::kAllowSyncXHRInPageDismissal, false);
138   registry->RegisterBooleanPref(
139       prefs::kExternalProtocolDialogShowAlwaysOpenCheckbox, true);
140   registry->RegisterBooleanPref(prefs::kScreenCaptureAllowed, true);
141 
142 #if !defined(OS_ANDROID)
143   registry->RegisterBooleanPref(prefs::kCaretBrowsingEnabled, false);
144   registry->RegisterBooleanPref(prefs::kCloudPrintDeprecationWarningsSuppressed,
145                                 false);
146   registry->RegisterBooleanPref(prefs::kShowCaretBrowsingDialog, true);
147 #endif
148 
149 #if !defined(OS_CHROMEOS)
150   registry->RegisterBooleanPref(prefs::kAccessibilityFocusHighlightEnabled,
151                                 false);
152 #endif
153 }
154