Guido Urdaneta | fdaf45e | 2024-12-17 20:47:29 | [diff] [blame] | 1 | // 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 | |
| 20 | class 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 | |
| 30 | TEST_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 | |
| 55 | TEST_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 | } |