| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/renderer_preferences_util.h" |
| |
| #include <array> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "chrome/common/pref_names.h" |
| #include "chrome/test/base/testing_profile.h" |
| #include "components/content_settings/core/common/content_settings_pattern.h" |
| #include "components/prefs/pref_service.h" |
| #include "content/public/test/browser_task_environment.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h" |
| #include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h" |
| #include "third_party/blink/public/mojom/peerconnection/webrtc_ip_handling_policy.mojom-shared.h" |
| |
| class RendererPreferencesUtilTest : public testing::Test { |
| public: |
| RendererPreferencesUtilTest() : pref_service_(profile_.GetPrefs()) {} |
| |
| protected: |
| content::BrowserTaskEnvironment task_environment_; |
| TestingProfile profile_; |
| raw_ptr<PrefService> pref_service_; |
| }; |
| |
| TEST_F(RendererPreferencesUtilTest, WebRTCIPHandlingPolicy) { |
| std::array<const char*, 5> webrtc_ip_handling_policy_values = { |
| blink::kWebRTCIPHandlingDefault, |
| blink::kWebRTCIPHandlingDefaultPublicAndPrivateInterfaces, |
| blink::kWebRTCIPHandlingDefaultPublicInterfaceOnly, |
| blink::kWebRTCIPHandlingDisableNonProxiedUdp, "some_nonstandard_value"}; |
| |
| std::array<blink::mojom::WebRtcIpHandlingPolicy, 5> expected_values = { |
| blink::mojom::WebRtcIpHandlingPolicy::kDefault, |
| blink::mojom::WebRtcIpHandlingPolicy::kDefaultPublicAndPrivateInterfaces, |
| blink::mojom::WebRtcIpHandlingPolicy::kDefaultPublicInterfaceOnly, |
| blink::mojom::WebRtcIpHandlingPolicy::kDisableNonProxiedUdp, |
| blink::mojom::WebRtcIpHandlingPolicy::kDefault}; |
| |
| for (int i = 0; i < 5; i++) { |
| pref_service_->SetString(prefs::kWebRTCIPHandlingPolicy, |
| webrtc_ip_handling_policy_values[i]); |
| blink::RendererPreferences renderer_preferences; |
| renderer_preferences_util::UpdateFromSystemSettings(&renderer_preferences, |
| &profile_); |
| EXPECT_EQ(renderer_preferences.webrtc_ip_handling_policy, |
| expected_values[i]); |
| } |
| } |
| |
| TEST_F(RendererPreferencesUtilTest, WebRTCIPHandlingURLValidEntries) { |
| base::Value::Dict valid_entry_1 = |
| base::Value::Dict() |
| .Set("url", "[*.]example.com") |
| .Set("handling", blink::kWebRTCIPHandlingDisableNonProxiedUdp); |
| base::Value::Dict no_url = base::Value::Dict().Set( |
| "handling", blink::kWebRTCIPHandlingDisableNonProxiedUdp); |
| base::Value::Dict invalid_url = |
| base::Value::Dict().Set("url", "*.example.com"); |
| base::Value::Dict no_handling = |
| base::Value::Dict().Set("url", "[*.]example.com"); |
| base::Value::Dict valid_entry_2 = |
| base::Value::Dict() |
| .Set("url", "*://google.com:*") |
| .Set("handling", blink::kWebRTCIPHandlingDefault); |
| |
| base::Value::List list = base::Value::List() |
| .Append(std::move(valid_entry_1)) |
| .Append(std::move(no_url)) |
| .Append(std::move(invalid_url)) |
| .Append(std::move(no_handling)) |
| .Append(std::move(valid_entry_2)); |
| pref_service_->SetList(prefs::kWebRTCIPHandlingUrl, std::move(list)); |
| |
| blink::RendererPreferences renderer_preferences; |
| renderer_preferences_util::UpdateFromSystemSettings(&renderer_preferences, |
| &profile_); |
| |
| ASSERT_EQ(renderer_preferences.webrtc_ip_handling_urls.size(), 2u); |
| |
| EXPECT_EQ( |
| renderer_preferences.webrtc_ip_handling_urls[0].url_pattern.GetScheme(), |
| ContentSettingsPattern::SCHEME_WILDCARD); |
| EXPECT_EQ( |
| renderer_preferences.webrtc_ip_handling_urls[0].url_pattern.GetHost(), |
| "example.com"); |
| EXPECT_TRUE(renderer_preferences.webrtc_ip_handling_urls[0] |
| .url_pattern.HasDomainWildcard()); |
| EXPECT_EQ( |
| renderer_preferences.webrtc_ip_handling_urls[0].url_pattern.GetScope(), |
| ContentSettingsPattern::Scope::kWithDomainAndSchemeAndPortWildcard); |
| EXPECT_EQ(renderer_preferences.webrtc_ip_handling_urls[0].handling, |
| blink::mojom::WebRtcIpHandlingPolicy::kDisableNonProxiedUdp); |
| |
| EXPECT_EQ( |
| renderer_preferences.webrtc_ip_handling_urls[1].url_pattern.GetScheme(), |
| ContentSettingsPattern::SCHEME_WILDCARD); |
| EXPECT_EQ( |
| renderer_preferences.webrtc_ip_handling_urls[1].url_pattern.GetHost(), |
| "google.com"); |
| EXPECT_FALSE(renderer_preferences.webrtc_ip_handling_urls[1] |
| .url_pattern.HasDomainWildcard()); |
| EXPECT_EQ( |
| renderer_preferences.webrtc_ip_handling_urls[1].url_pattern.GetScope(), |
| ContentSettingsPattern::Scope::kWithSchemeAndPortWildcard); |
| EXPECT_EQ(renderer_preferences.webrtc_ip_handling_urls[1].handling, |
| blink::mojom::WebRtcIpHandlingPolicy::kDefault); |
| } |