Migrate blocklist and allowlists to use base::Value::List

Triggered by the migration of PrefService::GetList to
PrefService::GetValueList.

Bug: 1341998
Change-Id: I57de2ba691fe8a42d68c3067675678e0770ceba7
Tests: Existing tests
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3687660
Commit-Queue: Roland Bock <[email protected]>
Reviewed-by: Gabriel Charette <[email protected]>
Owners-Override: Gabriel Charette <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1024834}
diff --git a/components/enterprise/content/clipboard_restriction_service.cc b/components/enterprise/content/clipboard_restriction_service.cc
index cd87f4e..ad34c6b 100644
--- a/components/enterprise/content/clipboard_restriction_service.cc
+++ b/components/enterprise/content/clipboard_restriction_service.cc
@@ -83,11 +83,6 @@
   enable_url_matcher_ = std::make_unique<url_matcher::URLMatcher>();
   disable_url_matcher_ = std::make_unique<url_matcher::URLMatcher>();
 
-  // Convert the `base::Value`s to `base::ListValue`s because that's what
-  // AddFilters expects.
-  const base::ListValue* enable_list = &base::Value::AsListValue(*enable);
-  const base::ListValue* disable_list = &base::Value::AsListValue(*disable);
-
   // For the following 2 calls, the second param is a bool called `allow`. In
   // this context, we're not concerned about a URL being "allowed" or not, but
   // rather with this prevention feature being enabled on a given URL. Because
@@ -98,9 +93,9 @@
   // same policy format as the content analysis connector, which also has
   // "enable" and "disable" lists used in this way.
   url_matcher::util::AddFilters(enable_url_matcher_.get(), true, &next_id_,
-                                enable_list);
+                                enable->GetList());
   url_matcher::util::AddFilters(disable_url_matcher_.get(), false, &next_id_,
-                                disable_list);
+                                disable->GetList());
 
   absl::optional<int> min_data_size = settings->FindIntKey(
       enterprise::content::kCopyPreventionSettingsMinDataSizeFieldName);
@@ -140,4 +135,4 @@
 KeyedService* ClipboardRestrictionServiceFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
   return new ClipboardRestrictionService(user_prefs::UserPrefs::Get(context));
-}
\ No newline at end of file
+}
diff --git a/components/invalidation/impl/invalidator_registrar_with_memory.cc b/components/invalidation/impl/invalidator_registrar_with_memory.cc
index e470156..51a5692b 100644
--- a/components/invalidation/impl/invalidator_registrar_with_memory.cc
+++ b/components/invalidation/impl/invalidator_registrar_with_memory.cc
@@ -123,8 +123,8 @@
   if (migrate_old_prefs) {
     MigratePrefs(prefs_, sender_id_);
   }
-  const base::Value* pref_data =
-      prefs_->Get(kTopicsToHandler)->FindDictKey(sender_id_);
+  const base::Value::Dict* pref_data =
+      prefs_->GetValueDict(kTopicsToHandler).FindDict(sender_id_);
   if (!pref_data) {
     DictionaryPrefUpdate update(prefs_, kTopicsToHandler);
     update->SetKey(sender_id_, base::Value(base::Value::Type::DICTIONARY));
@@ -133,7 +133,7 @@
   // Restore |handler_name_to_subscribed_topics_map_| from prefs.
   if (!base::FeatureList::IsEnabled(kRestoreInterestingTopicsFeature))
     return;
-  for (auto it : pref_data->DictItems()) {
+  for (auto it : *pref_data) {
     const std::string& topic_name = it.first;
     if (it.second.is_dict()) {
       const std::string* handler = it.second.FindStringKey(kHandler);
diff --git a/components/policy/core/browser/url_blocklist_manager.cc b/components/policy/core/browser/url_blocklist_manager.cc
index 555636a..2451c25 100644
--- a/components/policy/core/browser/url_blocklist_manager.cc
+++ b/components/policy/core/browser/url_blocklist_manager.cc
@@ -77,18 +77,18 @@
 #endif
 
 // Returns a blocklist based on the given |block| and |allow| pattern lists.
-std::unique_ptr<URLBlocklist> BuildBlocklist(const base::Value* block,
-                                             const base::Value* allow) {
+std::unique_ptr<URLBlocklist> BuildBlocklist(const base::Value::List* block,
+                                             const base::Value::List* allow) {
   auto blocklist = std::make_unique<URLBlocklist>();
   if (block)
-    blocklist->Block(&base::Value::AsListValue(*block));
+    blocklist->Block(*block);
   if (allow)
-    blocklist->Allow(&base::Value::AsListValue(*allow));
+    blocklist->Allow(*allow);
   return blocklist;
 }
 
-const base::Value* GetPrefValue(PrefService* pref_service,
-                                absl::optional<std::string> pref_path) {
+const base::Value::List* GetPrefList(PrefService* pref_service,
+                                     absl::optional<std::string> pref_path) {
   DCHECK(pref_service);
 
   if (!pref_path)
@@ -97,7 +97,7 @@
   DCHECK(!pref_path->empty());
 
   return pref_service->HasPrefPath(*pref_path)
-             ? pref_service->GetList(*pref_path)
+             ? &pref_service->GetValueList(*pref_path)
              : nullptr;
 }
 
@@ -131,12 +131,12 @@
 
 URLBlocklist::~URLBlocklist() = default;
 
-void URLBlocklist::Block(const base::ListValue* filters) {
+void URLBlocklist::Block(const base::Value::List& filters) {
   url_matcher::util::AddFilters(url_matcher_.get(), false, &id_, filters,
                                 &filters_);
 }
 
-void URLBlocklist::Allow(const base::ListValue* filters) {
+void URLBlocklist::Allow(const base::Value::List& filters) {
   url_matcher::util::AddFilters(url_matcher_.get(), true, &id_, filters,
                                 &filters_);
 }
@@ -237,8 +237,10 @@
 
   // Start enforcing the policies without a delay when they are present at
   // startup.
-  const base::Value* block = GetPrefValue(pref_service_, blocklist_pref_path_);
-  const base::Value* allow = GetPrefValue(pref_service_, allowlist_pref_path_);
+  const base::Value::List* block =
+      GetPrefList(pref_service_, blocklist_pref_path_);
+  const base::Value::List* allow =
+      GetPrefList(pref_service_, allowlist_pref_path_);
   if (block || allow)
     SetBlocklist(BuildBlocklist(block, allow));
 }
@@ -264,16 +266,20 @@
 
   // The URLBlocklist is built in the background. Once it's ready, it is passed
   // to the URLBlocklistManager back on ui_task_runner_.
-  const base::Value* block = GetPrefValue(pref_service_, blocklist_pref_path_);
-  const base::Value* allow = GetPrefValue(pref_service_, allowlist_pref_path_);
+  const base::Value::List* block =
+      GetPrefList(pref_service_, blocklist_pref_path_);
+  const base::Value::List* allow =
+      GetPrefList(pref_service_, allowlist_pref_path_);
   base::PostTaskAndReplyWithResult(
       background_task_runner_.get(), FROM_HERE,
       base::BindOnce(
           &BuildBlocklist,
-          base::Owned(block ? base::Value::ToUniquePtrValue(block->Clone())
-                            : nullptr),
-          base::Owned(allow ? base::Value::ToUniquePtrValue(allow->Clone())
-                            : nullptr)),
+          base::Owned(block
+                          ? std::make_unique<base::Value::List>(block->Clone())
+                          : nullptr),
+          base::Owned(allow
+                          ? std::make_unique<base::Value::List>(allow->Clone())
+                          : nullptr)),
       base::BindOnce(&URLBlocklistManager::SetBlocklist,
                      ui_weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/components/policy/core/browser/url_blocklist_manager.h b/components/policy/core/browser/url_blocklist_manager.h
index fd66142..2dd9a59 100644
--- a/components/policy/core/browser/url_blocklist_manager.h
+++ b/components/policy/core/browser/url_blocklist_manager.h
@@ -15,6 +15,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "base/values.h"
 #include "components/policy/policy_export.h"
 #include "components/prefs/pref_change_registrar.h"
 #include "components/url_matcher/url_matcher.h"
@@ -24,7 +25,6 @@
 class PrefService;
 
 namespace base {
-class ListValue;
 class SequencedTaskRunner;
 }  // namespace base
 
@@ -55,11 +55,11 @@
   // URLs matching one of the |filters| will be blocked. The filter format is
   // documented at
   // http://www.chromium.org/administrators/url-blocklist-filter-format.
-  void Block(const base::ListValue* filters);
+  void Block(const base::Value::List& filters);
 
   // URLs matching one of the |filters| will be allowed. If a URL is both
   // Blocked and Allowed, Allow takes precedence.
-  void Allow(const base::ListValue* filters);
+  void Allow(const base::Value::List& filters);
 
   // Returns true if the URL is blocked.
   bool IsURLBlocked(const GURL& url) const;
diff --git a/components/policy/core/browser/url_blocklist_manager_unittest.cc b/components/policy/core/browser/url_blocklist_manager_unittest.cc
index 52cc185..9880d391 100644
--- a/components/policy/core/browser/url_blocklist_manager_unittest.cc
+++ b/components/policy/core/browser/url_blocklist_manager_unittest.cc
@@ -96,9 +96,9 @@
   URLBlocklist blocklist;
 
   // Add the pattern to blocklist.
-  base::Value blocked(base::Value::Type::LIST);
+  base::Value::List blocked;
   blocked.Append(pattern);
-  blocklist.Block(&base::Value::AsListValue(blocked));
+  blocklist.Block(blocked);
 
   return blocklist.IsURLBlocked(GURL(url));
 }
@@ -111,23 +111,23 @@
   URLBlocklist blocklist;
 
   // Add the pattern to list.
-  base::Value blocked(base::Value::Type::LIST);
+  base::Value::List blocked;
   blocked.Append(pattern);
 
   if (use_allowlist) {
-    blocklist.Allow(&base::Value::AsListValue(blocked));
+    blocklist.Allow(blocked);
   } else {
-    blocklist.Block(&base::Value::AsListValue(blocked));
+    blocklist.Block(blocked);
   }
 
   return blocklist.GetURLBlocklistState(GURL(url));
 }
 
 TEST_F(URLBlocklistManagerTest, LoadBlocklistOnCreate) {
-  base::Value list(base::Value::Type::LIST);
+  base::Value::List list;
   list.Append("example.com");
   pref_service_.SetManagedPref(policy_prefs::kUrlBlocklist,
-                               base::Value::ToUniquePtrValue(std::move(list)));
+                               std::make_unique<base::Value>(std::move(list)));
   auto manager = std::make_unique<URLBlocklistManager>(
       &pref_service_, policy_prefs::kUrlBlocklist, policy_prefs::kUrlAllowlist);
   task_environment_.RunUntilIdle();
@@ -219,14 +219,14 @@
   EXPECT_FALSE(IsMatch("123.123.123.123", "http://123.123.123.124/"));
 
   // Test exceptions to path prefixes, and most specific matches.
-  base::Value blocked(base::Value::Type::LIST);
-  base::Value allowed(base::Value::Type::LIST);
+  base::Value::List blocked;
+  base::Value::List allowed;
   blocked.Append("s.xxx.com/a");
   allowed.Append("s.xxx.com/a/b");
   blocked.Append("https://s.xxx.com/a/b/c");
   allowed.Append("https://s.xxx.com/a/b/c/d");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Block(blocked);
+  blocklist.Allow(allowed);
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://s.xxx.com/a")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://s.xxx.com/a/x")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("https://s.xxx.com/a/x")));
@@ -244,20 +244,20 @@
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://xxx.com/a/b")));
 
   // Open an exception.
-  blocked.ClearList();
+  blocked.clear();
   blocked.Append("google.com");
-  allowed.ClearList();
+  allowed.clear();
   allowed.Append("plus.google.com");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Block(blocked);
+  blocklist.Allow(allowed);
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://google.com/")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://www.google.com/")));
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://plus.google.com/")));
 
   // Open an exception only when using https for mail.
-  allowed.ClearList();
+  allowed.clear();
   allowed.Append("https://mail.google.com");
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Allow(allowed);
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://google.com/")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://mail.google.com/")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://www.google.com/")));
@@ -266,21 +266,21 @@
 
   // Match exactly "google.com", only for http. Subdomains without exceptions
   // are still blocked.
-  allowed.ClearList();
+  allowed.clear();
   allowed.Append("http://.google.com");
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Allow(allowed);
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://google.com/")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("https://google.com/")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://www.google.com/")));
 
   // A smaller path match in an exact host overrides a longer path for hosts
   // that also match subdomains.
-  blocked.ClearList();
+  blocked.clear();
   blocked.Append("yyy.com/aaa");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  allowed.ClearList();
+  blocklist.Block(blocked);
+  allowed.clear();
   allowed.Append(".yyy.com/a");
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Allow(allowed);
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://yyy.com")));
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://yyy.com/aaa")));
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://yyy.com/aaa2")));
@@ -289,35 +289,35 @@
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://www.yyy.com/aaa2")));
 
   // If the exact entry is both allowed and blocked, allowing takes precedence.
-  blocked.ClearList();
+  blocked.clear();
   blocked.Append("example.com");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  allowed.ClearList();
+  blocklist.Block(blocked);
+  allowed.clear();
   allowed.Append("example.com");
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Allow(allowed);
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://example.com")));
 
   // Devtools should not be blocked.
-  blocked.ClearList();
+  blocked.clear();
   blocked.Append("*");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  allowed.ClearList();
+  blocklist.Block(blocked);
+  allowed.clear();
   allowed.Append("devtools://*");
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Allow(allowed);
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("devtools://something.com")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("https://something.com")));
 }
 
 TEST_F(URLBlocklistManagerTest, QueryParameters) {
   URLBlocklist blocklist;
-  base::Value blocked(base::Value::Type::LIST);
-  base::Value allowed(base::Value::Type::LIST);
+  base::Value::List blocked;
+  base::Value::List allowed;
 
   // Block domain and all subdomains, for any filtered scheme.
   blocked.Append("youtube.com");
   allowed.Append("youtube.com/watch?v=XYZ");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Block(blocked);
+  blocklist.Allow(allowed);
 
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube.com")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube.com/watch?v=123")));
@@ -331,9 +331,9 @@
   EXPECT_FALSE(
       blocklist.IsURLBlocked(GURL("http://youtube.com/watch?foo=bar&v=XYZ")));
 
-  allowed.ClearList();
+  allowed.clear();
   allowed.Append("youtube.com/watch?av=XYZ&ag=123");
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Allow(allowed);
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube.com")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube.com/watch?av=123")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube.com/watch?av=XYZ")));
@@ -350,9 +350,9 @@
   EXPECT_TRUE(blocklist.IsURLBlocked(
       GURL("http://youtube.com/watch?av=XYZ&ag=123&ag=1234")));
 
-  allowed.ClearList();
+  allowed.clear();
   allowed.Append("youtube.com/watch?foo=bar*&vid=2*");
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Allow(allowed);
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube.com")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube.com/watch?vid=2")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube.com/watch?foo=bar")));
@@ -365,9 +365,9 @@
   EXPECT_FALSE(blocklist.IsURLBlocked(
       GURL("http://youtube.com/watch?vid=234&foo=bar23")));
 
-  blocked.ClearList();
+  blocked.clear();
   blocked.Append("youtube1.com/disallow?v=44678");
-  blocklist.Block(&base::Value::AsListValue(blocked));
+  blocklist.Block(blocked);
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://youtube1.com")));
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://youtube1.com?v=123")));
   // Path does not match
@@ -381,9 +381,9 @@
   EXPECT_TRUE(blocklist.IsURLBlocked(
       GURL("http://youtube1.com/disallow?v=4467&v=123&v=44678")));
 
-  blocked.ClearList();
+  blocked.clear();
   blocked.Append("youtube1.com/disallow?g=*");
-  blocklist.Block(&base::Value::AsListValue(blocked));
+  blocklist.Block(blocked);
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://youtube1.com")));
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://youtube1.com?ag=123")));
   EXPECT_TRUE(
@@ -391,9 +391,9 @@
   EXPECT_TRUE(
       blocklist.IsURLBlocked(GURL("http://youtube1.com/disallow?ag=13&g=123")));
 
-  blocked.ClearList();
+  blocked.clear();
   blocked.Append("youtube2.com/disallow?a*");
-  blocklist.Block(&base::Value::AsListValue(blocked));
+  blocklist.Block(blocked);
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://youtube2.com")));
   EXPECT_TRUE(blocklist.IsURLBlocked(
       GURL("http://youtube2.com/disallow?b=123&a21=467")));
@@ -402,12 +402,12 @@
   EXPECT_FALSE(
       blocklist.IsURLBlocked(GURL("http://youtube2.com/disallow?baba=true")));
 
-  allowed.ClearList();
-  blocked.ClearList();
+  allowed.clear();
+  blocked.clear();
   blocked.Append("youtube3.com");
   allowed.Append("youtube3.com/watch?fo*");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Block(blocked);
+  blocklist.Allow(allowed);
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube3.com")));
   EXPECT_TRUE(
       blocklist.IsURLBlocked(GURL("http://youtube3.com/watch?b=123&a21=467")));
@@ -421,22 +421,22 @@
       blocklist.IsURLBlocked(GURL("http://youtube3.com/watch?foreign=true")));
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://youtube3.com/watch?fold")));
 
-  allowed.ClearList();
-  blocked.ClearList();
+  allowed.clear();
+  blocked.clear();
   blocked.Append("youtube4.com");
   allowed.Append("youtube4.com?*");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Block(blocked);
+  blocklist.Allow(allowed);
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube4.com")));
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://youtube4.com/?hello")));
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://youtube4.com/?foo")));
 
-  allowed.ClearList();
-  blocked.ClearList();
+  allowed.clear();
+  blocked.clear();
   blocked.Append("youtube5.com?foo=bar");
   allowed.Append("youtube5.com?foo1=bar1&foo2=bar2&");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Block(blocked);
+  blocklist.Allow(allowed);
   EXPECT_FALSE(blocklist.IsURLBlocked(GURL("http://youtube5.com")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://youtube5.com/?foo=bar&a=b")));
   // More specific filter is given precedence.
@@ -447,15 +447,15 @@
 TEST_F(URLBlocklistManagerTest, BlockAllWithExceptions) {
   URLBlocklist blocklist;
 
-  base::Value blocked(base::Value::Type::LIST);
-  base::Value allowed(base::Value::Type::LIST);
+  base::Value::List blocked;
+  base::Value::List allowed;
   blocked.Append("*");
   allowed.Append(".www.google.com");
   allowed.Append("plus.google.com");
   allowed.Append("https://mail.google.com");
   allowed.Append("https://very.safe/path");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Block(blocked);
+  blocklist.Allow(allowed);
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://random.com")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://google.com")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://s.www.google.com")));
@@ -472,11 +472,11 @@
 
 TEST_F(URLBlocklistManagerTest, DefaultBlocklistExceptions) {
   URLBlocklist blocklist;
-  base::Value blocked(base::Value::Type::LIST);
+  base::Value::List blocked;
 
   // Blocklist everything:
   blocked.Append("*");
-  blocklist.Block(&base::Value::AsListValue(blocked));
+  blocklist.Block(blocked);
 
   // Internal NTP and extension URLs are not blocked by the "*":
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://www.google.com")));
@@ -497,10 +497,10 @@
 
   // Unless they are explicitly on the blocklist:
   blocked.Append("chrome-extension://*");
-  base::Value allowed(base::Value::Type::LIST);
+  base::Value::List allowed;
   allowed.Append("chrome-extension://abc");
-  blocklist.Block(&base::Value::AsListValue(blocked));
-  blocklist.Allow(&base::Value::AsListValue(allowed));
+  blocklist.Block(blocked);
+  blocklist.Allow(allowed);
 
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("http://www.google.com")));
   EXPECT_TRUE(blocklist.IsURLBlocked(GURL("chrome-extension://xyz")));
diff --git a/components/safe_browsing/content/common/file_type_policies_policy_util.cc b/components/safe_browsing/content/common/file_type_policies_policy_util.cc
index 15df3fa..e13effdc 100644
--- a/components/safe_browsing/content/common/file_type_policies_policy_util.cc
+++ b/components/safe_browsing/content/common/file_type_policies_policy_util.cc
@@ -43,7 +43,7 @@
   const std::string lower_extension = base::ToLowerASCII(extension);
 
   if (heuristic_overrides) {
-    base::ListValue domains_for_extension;
+    base::Value::List domains_for_extension;
     for (const base::Value& entry : heuristic_overrides->GetListDeprecated()) {
       const base::DictionaryValue& extension_domain_patterns_dict =
           base::Value::AsDictionaryValue(entry);
@@ -62,11 +62,10 @@
       }
     }
 
-    if (!domains_for_extension.GetListDeprecated().empty()) {
+    if (!domains_for_extension.empty()) {
       url_matcher::URLMatcher matcher;
       base::MatcherStringPattern::ID id(0);
-      url_matcher::util::AddFilters(&matcher, true, &id,
-                                    &domains_for_extension);
+      url_matcher::util::AddFilters(&matcher, true, &id, domains_for_extension);
       auto matching_set_size = matcher.MatchURL(normalized_url).size();
       return matching_set_size > 0;
     }
diff --git a/components/url_matcher/url_util.cc b/components/url_matcher/url_util.cc
index 4cec96d..5d33c5b8 100644
--- a/components/url_matcher/url_util.cc
+++ b/components/url_matcher/url_util.cc
@@ -411,20 +411,15 @@
 void AddFilters(URLMatcher* matcher,
                 bool allow,
                 base::MatcherStringPattern::ID* id,
-                const base::ListValue* patterns,
+                const base::Value::List& patterns,
                 std::map<base::MatcherStringPattern::ID,
                          url_matcher::util::FilterComponents>* filters) {
   URLMatcherConditionSet::Vector all_conditions;
-  base::Value::ConstListView patterns_list = patterns->GetListDeprecated();
-  size_t size = std::min(kMaxFiltersAllowed, patterns_list.size());
+  size_t size = std::min(kMaxFiltersAllowed, patterns.size());
   scoped_refptr<URLMatcherConditionSet> condition_set;
   for (size_t i = 0; i < size; ++i) {
-    std::string pattern;
-    if (patterns_list[i].is_string()) {
-      pattern = patterns_list[i].GetString();
-    } else {
-      DCHECK(false);
-    }
+    DCHECK(patterns[i].is_string());
+    const std::string pattern = patterns[i].GetString();
     FilterComponents components;
     components.allow = allow;
     if (!FilterToComponents(pattern, &components.scheme, &components.host,
@@ -480,7 +475,7 @@
 }
 
 void AddAllowFilters(url_matcher::URLMatcher* matcher,
-                     const base::ListValue* patterns) {
+                     const base::Value::List& patterns) {
   base::MatcherStringPattern::ID id(0);
   AddFilters(matcher, true, &id, patterns);
 }
diff --git a/components/url_matcher/url_util.h b/components/url_matcher/url_util.h
index 8a29308..2d1a14b159 100644
--- a/components/url_matcher/url_util.h
+++ b/components/url_matcher/url_util.h
@@ -99,7 +99,7 @@
     url_matcher::URLMatcher* matcher,
     bool allow,
     base::MatcherStringPattern::ID* id,
-    const base::ListValue* patterns,
+    const base::Value::List& patterns,
     std::map<base::MatcherStringPattern::ID,
              url_matcher::util::FilterComponents>* filters = nullptr);
 
@@ -121,7 +121,7 @@
              url_matcher::util::FilterComponents>* filters = nullptr);
 
 URL_MATCHER_EXPORT void AddAllowFilters(url_matcher::URLMatcher* matcher,
-                                        const base::ListValue* patterns);
+                                        const base::Value::List& patterns);
 
 URL_MATCHER_EXPORT void AddAllowFilters(
     url_matcher::URLMatcher* matcher,
diff --git a/components/url_matcher/url_util_unittest.cc b/components/url_matcher/url_util_unittest.cc
index 4849019..fb35ac7 100644
--- a/components/url_matcher/url_util_unittest.cc
+++ b/components/url_matcher/url_util_unittest.cc
@@ -79,10 +79,10 @@
                   const std::string& url) {
   // Add the pattern to the matcher.
   URLMatcher matcher;
-  base::Value list(base::Value::Type::LIST);
+  base::Value::List list;
   for (const auto& pattern : patterns)
     list.Append(pattern);
-  AddAllowFilters(&matcher, &base::Value::AsListValue(list));
+  AddAllowFilters(&matcher, list);
   return !matcher.MatchURL(GURL(url)).empty();
 }