blob: c6ac6a5546036cd88642fbbd386560f7a304cc15 [file] [log] [blame]
// 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);
}