blob: c6ac6a5546036cd88642fbbd386560f7a304cc15 [file] [log] [blame]
Guido Urdanetafdaf45e2024-12-17 20:47:291// Copyright 2024 The Chromium Authors
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/renderer_preferences_util.h"
6
7#include <array>
8
9#include "base/memory/raw_ptr.h"
10#include "chrome/common/pref_names.h"
11#include "chrome/test/base/testing_profile.h"
12#include "components/content_settings/core/common/content_settings_pattern.h"
13#include "components/prefs/pref_service.h"
14#include "content/public/test/browser_task_environment.h"
15#include "testing/gtest/include/gtest/gtest.h"
16#include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h"
17#include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h"
18#include "third_party/blink/public/mojom/peerconnection/webrtc_ip_handling_policy.mojom-shared.h"
19
20class RendererPreferencesUtilTest : public testing::Test {
21 public:
22 RendererPreferencesUtilTest() : pref_service_(profile_.GetPrefs()) {}
23
24 protected:
25 content::BrowserTaskEnvironment task_environment_;
26 TestingProfile profile_;
27 raw_ptr<PrefService> pref_service_;
28};
29
30TEST_F(RendererPreferencesUtilTest, WebRTCIPHandlingPolicy) {
31 std::array<const char*, 5> webrtc_ip_handling_policy_values = {
32 blink::kWebRTCIPHandlingDefault,
33 blink::kWebRTCIPHandlingDefaultPublicAndPrivateInterfaces,
34 blink::kWebRTCIPHandlingDefaultPublicInterfaceOnly,
35 blink::kWebRTCIPHandlingDisableNonProxiedUdp, "some_nonstandard_value"};
36
37 std::array<blink::mojom::WebRtcIpHandlingPolicy, 5> expected_values = {
38 blink::mojom::WebRtcIpHandlingPolicy::kDefault,
39 blink::mojom::WebRtcIpHandlingPolicy::kDefaultPublicAndPrivateInterfaces,
40 blink::mojom::WebRtcIpHandlingPolicy::kDefaultPublicInterfaceOnly,
41 blink::mojom::WebRtcIpHandlingPolicy::kDisableNonProxiedUdp,
42 blink::mojom::WebRtcIpHandlingPolicy::kDefault};
43
44 for (int i = 0; i < 5; i++) {
45 pref_service_->SetString(prefs::kWebRTCIPHandlingPolicy,
46 webrtc_ip_handling_policy_values[i]);
47 blink::RendererPreferences renderer_preferences;
48 renderer_preferences_util::UpdateFromSystemSettings(&renderer_preferences,
49 &profile_);
50 EXPECT_EQ(renderer_preferences.webrtc_ip_handling_policy,
51 expected_values[i]);
52 }
53}
54
55TEST_F(RendererPreferencesUtilTest, WebRTCIPHandlingURLValidEntries) {
56 base::Value::Dict valid_entry_1 =
57 base::Value::Dict()
58 .Set("url", "[*.]example.com")
59 .Set("handling", blink::kWebRTCIPHandlingDisableNonProxiedUdp);
60 base::Value::Dict no_url = base::Value::Dict().Set(
61 "handling", blink::kWebRTCIPHandlingDisableNonProxiedUdp);
62 base::Value::Dict invalid_url =
63 base::Value::Dict().Set("url", "*.example.com");
64 base::Value::Dict no_handling =
65 base::Value::Dict().Set("url", "[*.]example.com");
66 base::Value::Dict valid_entry_2 =
67 base::Value::Dict()
68 .Set("url", "*://google.com:*")
69 .Set("handling", blink::kWebRTCIPHandlingDefault);
70
71 base::Value::List list = base::Value::List()
72 .Append(std::move(valid_entry_1))
73 .Append(std::move(no_url))
74 .Append(std::move(invalid_url))
75 .Append(std::move(no_handling))
76 .Append(std::move(valid_entry_2));
77 pref_service_->SetList(prefs::kWebRTCIPHandlingUrl, std::move(list));
78
79 blink::RendererPreferences renderer_preferences;
80 renderer_preferences_util::UpdateFromSystemSettings(&renderer_preferences,
81 &profile_);
82
83 ASSERT_EQ(renderer_preferences.webrtc_ip_handling_urls.size(), 2u);
84
85 EXPECT_EQ(
86 renderer_preferences.webrtc_ip_handling_urls[0].url_pattern.GetScheme(),
87 ContentSettingsPattern::SCHEME_WILDCARD);
88 EXPECT_EQ(
89 renderer_preferences.webrtc_ip_handling_urls[0].url_pattern.GetHost(),
90 "example.com");
91 EXPECT_TRUE(renderer_preferences.webrtc_ip_handling_urls[0]
92 .url_pattern.HasDomainWildcard());
93 EXPECT_EQ(
94 renderer_preferences.webrtc_ip_handling_urls[0].url_pattern.GetScope(),
95 ContentSettingsPattern::Scope::kWithDomainAndSchemeAndPortWildcard);
96 EXPECT_EQ(renderer_preferences.webrtc_ip_handling_urls[0].handling,
97 blink::mojom::WebRtcIpHandlingPolicy::kDisableNonProxiedUdp);
98
99 EXPECT_EQ(
100 renderer_preferences.webrtc_ip_handling_urls[1].url_pattern.GetScheme(),
101 ContentSettingsPattern::SCHEME_WILDCARD);
102 EXPECT_EQ(
103 renderer_preferences.webrtc_ip_handling_urls[1].url_pattern.GetHost(),
104 "google.com");
105 EXPECT_FALSE(renderer_preferences.webrtc_ip_handling_urls[1]
106 .url_pattern.HasDomainWildcard());
107 EXPECT_EQ(
108 renderer_preferences.webrtc_ip_handling_urls[1].url_pattern.GetScope(),
109 ContentSettingsPattern::Scope::kWithSchemeAndPortWildcard);
110 EXPECT_EQ(renderer_preferences.webrtc_ip_handling_urls[1].handling,
111 blink::mojom::WebRtcIpHandlingPolicy::kDefault);
112}