blob: 1a17452be522ef9c4219f790b3c9017e64813ffa [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
Adam Rice3d178a82021-04-12 13:49:537#include <stdint.h>
8
guidouca055a542016-08-11 11:15:539#include <string>
Adam Rice3d178a82021-04-12 13:49:5310#include <vector>
guidouca055a542016-08-11 11:15:5311
guidouca055a542016-08-11 11:15:5312#include "base/strings/string_number_conversions.h"
13#include "base/strings/string_util.h"
avib896c712015-12-26 02:10:4314#include "build/build_config.h"
Yuta Hijikata235fc62b2020-12-08 03:48:3215#include "build/chromeos_buildflags.h"
John Abd-El-Malek7d032b372019-05-07 18:01:3116#include "chrome/browser/browser_process.h"
Adam Rice3d178a82021-04-12 13:49:5317#include "chrome/browser/net/convert_explicitly_allowed_network_ports_pref.h"
Yves Arrouye39b8ef62021-02-23 00:39:2918#if BUILDFLAG(IS_CHROMEOS_ASH)
Henrique Ferreiro606669a2021-02-24 13:36:5519#include "chrome/browser/ash/login/demo_mode/demo_session.h"
Yves Arrouye39b8ef62021-02-23 00:39:2920#endif
[email protected]8ecad5e2010-12-02 21:18:3321#include "chrome/browser/profiles/profile.h"
Dominic Mazzoni554089e2020-07-31 22:12:0422#include "chrome/browser/profiles/profile_manager.h"
[email protected]0a8db0d2011-04-13 15:15:4023#include "chrome/common/pref_names.h"
Trevor Perrierfa7339d2020-09-11 00:42:4024#include "components/language/core/browser/language_prefs.h"
Alexandre Frechette572755b2019-02-13 22:30:2025#include "components/language/core/browser/pref_names.h"
brettwb1fc1b82016-02-02 00:19:0826#include "components/prefs/pref_service.h"
Dominic Mazzoni554089e2020-07-31 22:12:0427#include "content/public/browser/browser_accessibility_state.h"
Ian Vollick0c34a072019-02-15 03:40:2728#include "content/public/browser/renderer_preferences_util.h"
Scott Violeta35f9a42018-03-22 22:00:4429#include "media/media_buildflags.h"
Antonio Gomesb5bf548f2019-09-12 17:40:1530#include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h"
Mario Sanchez Prada0bd8b8c2020-10-21 17:49:2331#include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h"
Blink Reformata30d4232018-04-07 15:31:0632#include "third_party/blink/public/public_buildflags.h"
[email protected]38a85712013-01-02 22:45:0233#include "third_party/skia/include/core/SkColor.h"
Ionel Popescu2649f2f2020-01-10 10:06:5934#include "ui/base/ui_base_features.h"
[email protected]93623c5d2009-12-10 21:40:3235
[email protected]dbf75012013-09-24 06:37:2536#if defined(TOOLKIT_VIEWS)
37#include "ui/views/controls/textfield/textfield.h"
[email protected]7bd129f2012-11-30 02:06:0138#endif
39
Xiaohan Wang55ae2c012022-01-20 21:49:1140#if defined(USE_AURA) && (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS))
[email protected]96514e72013-09-25 20:42:2441#include "chrome/browser/themes/theme_service.h"
42#include "chrome/browser/themes/theme_service_factory.h"
43#include "ui/views/linux_ui/linux_ui.h"
44#endif
45
guidouca055a542016-08-11 11:15:5346namespace {
47
48// Parses a string |range| with a port range in the form "<min>-<max>".
49// If |range| is not in the correct format or contains an invalid range, zero
50// is written to |min_port| and |max_port|.
51// TODO(guidou): Consider replacing with remoting/protocol/port_range.cc
52void ParsePortRange(const std::string& range,
53 uint16_t* min_port,
54 uint16_t* max_port) {
55 *min_port = 0;
56 *max_port = 0;
57
58 if (range.empty())
59 return;
60
61 size_t separator_index = range.find('-');
62 if (separator_index == std::string::npos)
63 return;
64
65 std::string min_port_string, max_port_string;
66 base::TrimWhitespaceASCII(range.substr(0, separator_index), base::TRIM_ALL,
67 &min_port_string);
68 base::TrimWhitespaceASCII(range.substr(separator_index + 1), base::TRIM_ALL,
69 &max_port_string);
70 unsigned min_port_uint, max_port_uint;
71 if (!base::StringToUint(min_port_string, &min_port_uint) ||
72 !base::StringToUint(max_port_string, &max_port_uint)) {
73 return;
74 }
75 if (min_port_uint == 0 || min_port_uint > max_port_uint ||
76 max_port_uint > UINT16_MAX) {
77 return;
78 }
79
80 *min_port = static_cast<uint16_t>(min_port_uint);
81 *max_port = static_cast<uint16_t>(max_port_uint);
82}
83
Qingsi Wang337dc7a2019-10-29 01:02:0484// Extracts the string representation of URLs allowed for local IP exposure.
85std::vector<std::string> GetLocalIpsAllowedUrls(
Austin Sullivan7d219a252021-12-20 14:55:3186 const base::Value* allowed_urls) {
Qingsi Wang337dc7a2019-10-29 01:02:0487 std::vector<std::string> ret;
88 if (allowed_urls) {
Daniel Cheng354945d2022-02-02 23:39:1789 const auto& urls = allowed_urls->GetListDeprecated();
Qingsi Wang337dc7a2019-10-29 01:02:0490 for (const auto& url : urls)
91 ret.push_back(url.GetString());
92 }
93 return ret;
94}
95
Yves Arrouye39b8ef62021-02-23 00:39:2996std::string GetLanguageListForProfile(Profile* profile,
97 const std::string& language_list) {
98 if (profile->IsOffTheRecord()) {
99 // In incognito mode return only the first language.
100 return language::GetFirstLanguage(language_list);
101 }
102#if BUILDFLAG(IS_CHROMEOS_ASH)
103 // On Chrome OS, if in demo mode, add the demo mode private language list.
Henrique Ferreirod71de902021-05-10 18:57:11104 if (ash::DemoSession::IsDeviceInDemoMode()) {
105 return language_list + "," + ash::DemoSession::GetAdditionalLanguageList();
Yves Arrouye39b8ef62021-02-23 00:39:29106 }
107#endif
108 return language_list;
109}
110
guidouca055a542016-08-11 11:15:53111} // namespace
112
[email protected]93623c5d2009-12-10 21:40:32113namespace renderer_preferences_util {
114
Mario Sanchez Prada0bd8b8c2020-10-21 17:49:23115void UpdateFromSystemSettings(blink::RendererPreferences* prefs,
Kenichi Ishibashif522ac42018-07-12 23:16:46116 Profile* profile) {
[email protected]f57f69012012-06-13 02:52:21117 const PrefService* pref_service = profile->GetPrefs();
Yves Arrouye39b8ef62021-02-23 00:39:29118 prefs->accept_languages = GetLanguageListForProfile(
119 profile, pref_service->GetString(language::prefs::kAcceptLanguages));
[email protected]f57f69012012-06-13 02:52:21120 prefs->enable_referrers = pref_service->GetBoolean(prefs::kEnableReferrers);
[email protected]498bc512012-09-21 21:50:08121 prefs->enable_do_not_track =
122 pref_service->GetBoolean(prefs::kEnableDoNotTrack);
Xiaohan Wang2ec4a6832017-11-15 00:55:51123 prefs->enable_encrypted_media =
124 pref_service->GetBoolean(prefs::kEnableEncryptedMedia);
guoweisc537ba22015-11-06 21:20:31125 prefs->webrtc_ip_handling_policy = std::string();
Xiaohan Wang55ae2c012022-01-20 21:49:11126#if !BUILDFLAG(IS_ANDROID)
Dominic Mazzoni554089e2020-07-31 22:12:04127 prefs->caret_browsing_enabled =
128 pref_service->GetBoolean(prefs::kCaretBrowsingEnabled);
129 content::BrowserAccessibilityState::GetInstance()->SetCaretBrowsingState(
130 prefs->caret_browsing_enabled);
131#endif
132
guoweisc537ba22015-11-06 21:20:31