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