blob: c5311e6a91877b769c204c47ff539c91a3bc2872 [file] [log] [blame]
[email protected]37cc8042012-02-27 19:32:581// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]93623c5d2009-12-10 21:40:322// 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/renderer_preferences_util.h"
6
guidouca055a542016-08-11 11:15:537#include <string>
8
[email protected]516b2c732014-07-25 00:10:319#include "base/macros.h"
guidouca055a542016-08-11 11:15:5310#include "base/strings/string_number_conversions.h"
11#include "base/strings/string_util.h"
avib896c712015-12-26 02:10:4312#include "build/build_config.h"
[email protected]8ecad5e2010-12-02 21:18:3313#include "chrome/browser/profiles/profile.h"
[email protected]0a8db0d2011-04-13 15:15:4014#include "chrome/common/pref_names.h"
brettwb1fc1b82016-02-02 00:19:0815#include "components/prefs/pref_service.h"
thestig2c8c41e2014-10-23 02:56:5016#include "content/public/browser/web_contents.h"
[email protected]daf82f82011-10-31 22:35:3117#include "content/public/common/renderer_preferences.h"
guoweisc537ba22015-11-06 21:20:3118#include "content/public/common/webrtc_ip_handling_policy.h"
Scott Violeta35f9a42018-03-22 22:00:4419#include "media/media_buildflags.h"
brettw8a274fa2016-11-15 00:20:4020#include "third_party/WebKit/public/public_features.h"
[email protected]38a85712013-01-02 22:45:0221#include "third_party/skia/include/core/SkColor.h"
[email protected]93623c5d2009-12-10 21:40:3222
[email protected]7d076cf52012-07-09 23:04:4723#if defined(OS_LINUX) || defined(OS_ANDROID)
[email protected]cd9c65e2014-07-10 02:57:0124#include "ui/gfx/font_render_params.h"
[email protected]f57f69012012-06-13 02:52:2125#endif
26
[email protected]dbf75012013-09-24 06:37:2527#if defined(TOOLKIT_VIEWS)
28#include "ui/views/controls/textfield/textfield.h"
[email protected]7bd129f2012-11-30 02:06:0129#endif
30
ellyjonesd0fd7b12016-08-26 18:26:3631#if defined(OS_MACOSX)
32#include "ui/base/cocoa/defaults_utils.h"
33#endif
34
[email protected]96514e72013-09-25 20:42:2435#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
36#include "chrome/browser/themes/theme_service.h"
37#include "chrome/browser/themes/theme_service_factory.h"
38#include "ui/views/linux_ui/linux_ui.h"
39#endif
40
Brett Wilson0748bf412016-11-22 17:55:4641#if BUILDFLAG(ENABLE_WEBRTC)
guidouca055a542016-08-11 11:15:5342namespace {
43
44// Parses a string |range| with a port range in the form "<min>-<max>".
45// If |range| is not in the correct format or contains an invalid range, zero
46// is written to |min_port| and |max_port|.
47// TODO(guidou): Consider replacing with remoting/protocol/port_range.cc
48void ParsePortRange(const std::string& range,
49 uint16_t* min_port,
50 uint16_t* max_port) {
51 *min_port = 0;
52 *max_port = 0;
53
54 if (range.empty())
55 return;
56
57 size_t separator_index = range.find('-');
58 if (separator_index == std::string::npos)
59 return;
60
61 std::string min_port_string, max_port_string;
62 base::TrimWhitespaceASCII(range.substr(0, separator_index), base::TRIM_ALL,
63 &min_port_string);
64 base::TrimWhitespaceASCII(range.substr(separator_index + 1), base::TRIM_ALL,
65 &max_port_string);
66 unsigned min_port_uint, max_port_uint;
67 if (!base::StringToUint(min_port_string, &min_port_uint) ||
68 !base::StringToUint(max_port_string, &max_port_uint)) {
69 return;
70 }
71 if (min_port_uint == 0 || min_port_uint > max_port_uint ||
72 max_port_uint > UINT16_MAX) {
73 return;
74 }
75
76 *min_port = static_cast<uint16_t>(min_port_uint);
77 *max_port = static_cast<uint16_t>(max_port_uint);
78}
79
80} // namespace
liushouqun4d122dd2016-09-19 02:07:4181#endif
guidouca055a542016-08-11 11:15:5382
[email protected]93623c5d2009-12-10 21:40:3283namespace renderer_preferences_util {
84
wjmacleane530aa742014-10-14 21:43:3085void UpdateFromSystemSettings(content::RendererPreferences* prefs,
86 Profile* profile,
87 content::WebContents* web_contents) {
[email protected]f57f69012012-06-13 02:52:2188 const PrefService* pref_service = profile->GetPrefs();
[email protected]9982c802013-06-12 15:22:0689 prefs->accept_languages = pref_service->GetString(prefs::kAcceptLanguages);
[email protected]f57f69012012-06-13 02:52:2190 prefs->enable_referrers = pref_service->GetBoolean(prefs::kEnableReferrers);
[email protected]498bc512012-09-21 21:50:0891 prefs->enable_do_not_track =
92 pref_service->GetBoolean(prefs::kEnableDoNotTrack);
Xiaohan Wang2ec4a6832017-11-15 00:55:5193 prefs->enable_encrypted_media =
94 pref_service->GetBoolean(prefs::kEnableEncryptedMedia);
Brett Wilson0748bf412016-11-22 17:55:4695#if BUILDFLAG(ENABLE_WEBRTC)
guoweisc537ba22015-11-06 21:20:3196 prefs->webrtc_ip_handling_policy = std::string();
97 // Handling the backward compatibility of previous boolean verions of policy
98 // controls.
99 if (!pref_service->HasPrefPath(prefs::kWebRTCIPHandlingPolicy)) {
100 if (!pref_service->GetBoolean(prefs::kWebRTCNonProxiedUdpEnabled)) {
101 prefs->webrtc_ip_handling_policy =
102 content::kWebRTCIPHandlingDisableNonProxiedUdp;
103 } else if (!pref_service->GetBoolean(prefs::kWebRTCMultipleRoutesEnabled)) {
104 prefs->webrtc_ip_handling_policy =
105 content::kWebRTCIPHandlingDefaultPublicInterfaceOnly;
106 }
107 }
108 if (prefs->webrtc_ip_handling_policy.empty()) {
109 prefs->webrtc_ip_handling_policy =
110 pref_service->GetString(prefs::kWebRTCIPHandlingPolicy);
111 }
guidouca055a542016-08-11 11:15:53112 std::string webrtc_udp_port_range =
113 pref_service->GetString(prefs::kWebRTCUDPPortRange);
114 ParsePortRange(webrtc_udp_port_range, &prefs->webrtc_udp_min_port,
115 &prefs->webrtc_udp_max_port);
guoweis7c98bab02015-02-19 14:54:51116#endif
thestig2c8c41e2014-10-23 02:56:50117
brettw8a274fa2016-11-15 00:20:40118#if BUILDFLAG(USE_DEFAULT_RENDER_THEME)
[email protected]38a85712013-01-02 22:45:02119 prefs->focus_ring_color = SkColorSetRGB(0x4D, 0x90, 0xFE);
[email protected]d41e40502014-04-12 00:56:22120#if defined(OS_CHROMEOS)
[email protected]38a85712013-01-02 22:45:02121 // This color is 0x544d90fe modulated with 0xffffff.
122 prefs->active_selection_bg_color = SkColorSetRGB(0xCB, 0xE4, 0xFA);
123 prefs->active_selection_fg_color = SK_ColorBLACK;
124 prefs->inactive_selection_bg_color = SkColorSetRGB(0xEA, 0xEA, 0xEA);
125 prefs->inactive_selection_fg_color = SK_ColorBLACK;
[email protected]f2cb988d22013-07-01 22:07:04126#endif
[email protected]7bd129f2012-11-30 02:06:01127#endif
128
[email protected]dbf75012013-09-24 06:37:25129#if defined(TOOLKIT_VIEWS)
tzikd450061e2017-11-28 17:14:50130 prefs->caret_blink_interval = views::Textfield::GetCaretBlinkInterval();
[email protected]dbf75012013-09-24 06:37:25131#endif
132
ellyjonesd0fd7b12016-08-26 18:26:36133#if defined(OS_MACOSX)
134 base::TimeDelta interval;
135 if (ui::TextInsertionCaretBlinkPeriod(&interval))
tzikd450061e2017-11-28 17:14:50136 prefs->caret_blink_interval = interval;
ellyjonesd0fd7b12016-08-26 18:26:36137#endif
138
[email protected]96514e72013-09-25 20:42:24139#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
140 views::LinuxUI* linux_ui = views::LinuxUI::instance();
141 if (linux_ui) {
[email protected]448d7dc2014-05-13 03:22:55142 if (ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme()) {
[email protected]96514e72013-09-25 20:42:24143 prefs->focus_ring_color = linux_ui->GetFocusRingColor();
144 prefs->thumb_active_color = linux_ui->GetThumbActiveColor();
145 prefs->thumb_inactive_color = linux_ui->GetThumbInactiveColor();
146 prefs->track_color = linux_ui->GetTrackColor();
147 prefs->active_selection_bg_color = linux_ui->GetActiveSelectionBgColor();
148 prefs->active_selection_fg_color = linux_ui->GetActiveSelectionFgColor();
149 prefs->inactive_selection_bg_color =
150 linux_ui->GetInactiveSelectionBgColor();
151 prefs->inactive_selection_fg_color =
152 linux_ui->GetInactiveSelectionFgColor();
153 }
154
155 // If we have a linux_ui object, set the caret blink interval regardless of
156 // whether we're in native theme mode.
157 prefs->caret_blink_interval = linux_ui->GetCursorBlinkInterval();
158 }
159#endif
160
scottmga04a4b32015-03-26 22:56:49161#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN)
[email protected]516b2c732014-07-25 00:10:31162 CR_DEFINE_STATIC_LOCAL(const gfx::FontRenderParams, params,
stapelberg575097c2015-04-06 18:31:38163 (gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), NULL)));
[email protected]f57f69012012-06-13 02:52:21164 prefs->should_antialias_text = params.antialiasing;
165 prefs->use_subpixel_positioning = params.subpixel_positioning;
[email protected]0681ba02014-07-28 00:27:11166 prefs->hinting = params.hinting;
[email protected]7d076cf52012-07-09 23:04:47167 prefs->use_autohinter = params.autohinter;
168 prefs->use_bitmaps = params.use_bitmaps;
[email protected]0681ba02014-07-28 00:27:11169 prefs->subpixel_rendering = params.subpixel_rendering;
[email protected]f57f69012012-06-13 02:52:21170#endif
[email protected]0509bc82013-09-20 20:42:59171
172#if !defined(OS_MACOSX)
173 prefs->plugin_fullscreen_allowed =
174 pref_service->GetBoolean(prefs::kFullscreenAllowed);
175#endif
[email protected]93623c5d2009-12-10 21:40:32176}
177
[email protected]0509bc82013-09-20 20:42:59178} // namespace renderer_preferences_util