File: renderer_preferences_util_unittest.cc

package info (click to toggle)
chromium 138.0.7204.157-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,864 kB
  • sloc: cpp: 34,936,859; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,967; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (112 lines) | stat: -rw-r--r-- 5,095 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// 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);
}