Migrate from DictionaryBuilder::Build() in c/{b,c}/extensions

DictionaryBuilder::Build() is deprecated and should be replaced with
BuildDict(). Also migrated some uses of ListBuilder::Build() and other
deprecated base::Value types. This cl migrates all of //chrome/{browser,
common}/extensions except the api subdirectory handled in
crrev.com/c/4091443

Bug: 1187061
Change-Id: Ifd91205aad39330c4023d79499b9534c844ddafe
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4089472
Auto-Submit: Alex Turner <alexmt@chromium.org>
Commit-Queue: Alex Turner <alexmt@chromium.org>
Reviewed-by: Finnur Thorarinsson <finnur@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1082088}
diff --git a/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc b/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc
index 4f24825..273bfdc 100644
--- a/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc
+++ b/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc
@@ -132,7 +132,7 @@
                            .Set("name", "Watchdog Extension ")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .SetID(kExtensionID)
           .Build();
   extension_service1->AddExtension(extension.get());
@@ -192,7 +192,7 @@
                            .Set("name", "Watchdog Extension ")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .SetID("fpofdchlamddhnajleknffcbmnjfahpg")
           .Build();
   extension_service1->AddExtension(extension.get());
@@ -239,7 +239,7 @@
                            .Set("name", "Watchdog Extension ")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .SetID(kExtensionID)
           .Build();
   extension_service->AddExtension(extension.get());
@@ -295,7 +295,7 @@
                            .Set("name", "Watchdog Extension ")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .SetID(kExtensionID)
           .Build();
   extension_service->AddExtension(extension.get());
diff --git a/chrome/browser/extensions/activity_log/activity_log_unittest.cc b/chrome/browser/extensions/activity_log/activity_log_unittest.cc
index 55e7999..d7b51557 100644
--- a/chrome/browser/extensions/activity_log/activity_log_unittest.cc
+++ b/chrome/browser/extensions/activity_log/activity_log_unittest.cc
@@ -317,7 +317,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service_->AddExtension(extension.get());
   ActivityLog* activity_log = ActivityLog::GetInstance(profile());
@@ -412,7 +412,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
 
   ActivityLog* activity_log = ActivityLog::GetInstance(profile());
diff --git a/chrome/browser/extensions/activity_log/counting_policy_unittest.cc b/chrome/browser/extensions/activity_log/counting_policy_unittest.cc
index 224bd11..cdf083f9 100644
--- a/chrome/browser/extensions/activity_log/counting_policy_unittest.cc
+++ b/chrome/browser/extensions/activity_log/counting_policy_unittest.cc
@@ -400,7 +400,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service_->AddExtension(extension.get());
   scoped_refptr<Action> action = new Action(extension->id(),
@@ -421,7 +421,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service_->AddExtension(extension.get());
 
@@ -542,7 +542,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service_->AddExtension(extension.get());
   GURL gurl("http://www.google.com");
diff --git a/chrome/browser/extensions/activity_log/fullstream_ui_policy_unittest.cc b/chrome/browser/extensions/activity_log/fullstream_ui_policy_unittest.cc
index 0a5c249c..931bb13 100644
--- a/chrome/browser/extensions/activity_log/fullstream_ui_policy_unittest.cc
+++ b/chrome/browser/extensions/activity_log/fullstream_ui_policy_unittest.cc
@@ -345,7 +345,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service_->AddExtension(extension.get());
   scoped_refptr<Action> action = new Action(extension->id(),
@@ -366,7 +366,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service_->AddExtension(extension.get());
   GURL gurl("http://www.google.com");
@@ -404,7 +404,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service_->AddExtension(extension.get());
   GURL gurl("http://www.google.com");
@@ -484,7 +484,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service_->AddExtension(extension.get());
 
@@ -776,7 +776,7 @@
                            .Set("name", "Test extension")
                            .Set("version", "1.0.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service_->AddExtension(extension.get());
   GURL gurl("http://www.google.com");
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
index b76ae1ca..4e19af5 100644
--- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
+++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
@@ -474,12 +474,14 @@
   InstallTracker* tracker = InstallTracker::Get(browser_context());
   DCHECK(tracker);
   bool is_installed =
-      extensions::ExtensionRegistry::Get(browser_context())->GetExtensionById(
-          details().id, extensions::ExtensionRegistry::EVERYTHING) != nullptr;
+      extensions::ExtensionRegistry::Get(browser_context())
+          ->GetExtensionById(details().id,
+                             extensions::ExtensionRegistry::EVERYTHING) !=
+      nullptr;
   if (is_installed || tracker->GetActiveInstall(details().id)) {
-    return RespondNow(BuildResponse(
-        api::webstore_private::RESULT_ALREADY_INSTALLED,
-        kAlreadyInstalledError));
+    return RespondNow(
+        BuildResponse(api::webstore_private::RESULT_ALREADY_INSTALLED,
+                      kAlreadyInstalledError));
   }
   ActiveInstallData install_data(details().id);
   scoped_active_install_ =
@@ -963,8 +965,8 @@
   approval_ =
       g_pending_approvals.Get().PopApproval(profile, params->expected_id);
   if (!approval_) {
-    return RespondNow(Error(kNoPreviousBeginInstallWithManifestError,
-                            params->expected_id));
+    return RespondNow(
+        Error(kNoPreviousBeginInstallWithManifestError, params->expected_id));
   }
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
@@ -1023,8 +1025,8 @@
     const std::string& error,
     WebstoreInstaller::FailureReason reason) {
   if (test_webstore_installer_delegate) {
-    test_webstore_installer_delegate->OnExtensionInstallFailure(
-        id, error, reason);
+    test_webstore_installer_delegate->OnExtensionInstallFailure(id, error,
+                                                                reason);
   }
 
   VLOG(1) << "Install failed, sending response";
@@ -1075,8 +1077,7 @@
 WebstorePrivateGetStoreLoginFunction::WebstorePrivateGetStoreLoginFunction() =
     default;
 
-WebstorePrivateGetStoreLoginFunction::
-    ~WebstorePrivateGetStoreLoginFunction() {}
+WebstorePrivateGetStoreLoginFunction::~WebstorePrivateGetStoreLoginFunction() {}
 
 ExtensionFunction::ResponseAction WebstorePrivateGetStoreLoginFunction::Run() {
   return RespondNow(ArgumentList(GetStoreLogin::Results::Create(
@@ -1086,8 +1087,7 @@
 WebstorePrivateSetStoreLoginFunction::WebstorePrivateSetStoreLoginFunction() =
     default;
 
-WebstorePrivateSetStoreLoginFunction::
-    ~WebstorePrivateSetStoreLoginFunction() {}
+WebstorePrivateSetStoreLoginFunction::~WebstorePrivateSetStoreLoginFunction() {}
 
 ExtensionFunction::ResponseAction WebstorePrivateSetStoreLoginFunction::Run() {
   std::unique_ptr<SetStoreLogin::Params> params(
@@ -1164,8 +1164,8 @@
 
 ExtensionFunction::ResponseAction
 WebstorePrivateGetEphemeralAppsEnabledFunction::Run() {
-  return RespondNow(ArgumentList(GetEphemeralAppsEnabled::Results::Create(
-      false)));
+  return RespondNow(
+      ArgumentList(GetEphemeralAppsEnabled::Results::Create(false)));
 }
 
 WebstorePrivateIsPendingCustodianApprovalFunction::
diff --git a/chrome/browser/extensions/crx_installer_browsertest.cc b/chrome/browser/extensions/crx_installer_browsertest.cc
index 96df51ab..9b4b42fb 100644
--- a/chrome/browser/extensions/crx_installer_browsertest.cc
+++ b/chrome/browser/extensions/crx_installer_browsertest.cc
@@ -127,10 +127,8 @@
 
 class MockInstallPrompt : public ExtensionInstallPrompt {
  public:
-  MockInstallPrompt(content::WebContents* web_contents,
-                    MockPromptProxy* proxy) :
-      ExtensionInstallPrompt(web_contents),
-      proxy_(proxy) {}
+  MockInstallPrompt(content::WebContents* web_contents, MockPromptProxy* proxy)
+      : ExtensionInstallPrompt(web_contents), proxy_(proxy) {}
 
   MockInstallPrompt(const MockInstallPrompt&) = delete;
   MockInstallPrompt& operator=(const MockInstallPrompt&) = delete;
@@ -261,7 +259,7 @@
                             .Set("name", "My First Extension")
                             .Set("version", version)
                             .Set("manifest_version", 2)
-                            .Build());
+                            .BuildDict());
     builder.SetID(extension_id);
     builder.SetPath(temp_dir.GetPath());
     extension_service()->AddExtension(builder.Build().get());
@@ -400,8 +398,8 @@
                        ExperimentalExtensionFromOutsideGallery) {
   // Non-gallery-installed extensions should lose their experimental
   // permission if the flag isn't enabled.
-  const Extension* extension = InstallExtension(
-      test_data_dir_.AppendASCII("experimental.crx"), 1);
+  const Extension* extension =
+      InstallExtension(test_data_dir_.AppendASCII("experimental.crx"), 1);
   ASSERT_TRUE(extension);
   EXPECT_FALSE(extension->permissions_data()->HasAPIPermission(
       mojom::APIPermissionID::kExperimental));
@@ -411,8 +409,8 @@
                        ExperimentalExtensionFromOutsideGalleryWithFlag) {
   // Non-gallery-installed extensions should maintain their experimental
   // permission if the flag is enabled.
-  const Extension* extension = InstallExtension(
-      test_data_dir_.AppendASCII("experimental.crx"), 1);
+  const Extension* extension =
+      InstallExtension(test_data_dir_.AppendASCII("experimental.crx"), 1);
   ASSERT_TRUE(extension);
   EXPECT_TRUE(extension->permissions_data()->HasAPIPermission(
       mojom::APIPermissionID::kExperimental));
@@ -468,8 +466,8 @@
 
   const int kNumDownloadsExpected = 1;
 
-  base::FilePath crx_path = PackExtension(
-      test_data_dir_.AppendASCII("common/background_page"));
+  base::FilePath crx_path =
+      PackExtension(test_data_dir_.AppendASCII("common/background_page"));
   ASSERT_FALSE(crx_path.empty());
   std::string crx_path_string(crx_path.value().begin(), crx_path.value().end());
   GURL url = GURL(std::string("file:///").append(crx_path_string));
@@ -555,14 +553,15 @@
     // is done.
     run_loop.Run();
     EXPECT_EQ(kTestData[i], mock_prompt->did_succeed());
-    EXPECT_EQ(kTestData[i], mock_prompt->confirmation_requested()) <<
-        kTestData[i];
+    EXPECT_EQ(kTestData[i], mock_prompt->confirmation_requested())
+        << kTestData[i];
     if (kTestData[i]) {
       EXPECT_EQ(std::u16string(), mock_prompt->error()) << kTestData[i];
     } else {
-      EXPECT_EQ(l10n_util::GetStringUTF16(
-          IDS_EXTENSION_INSTALL_DISALLOWED_ON_SITE),
-          mock_prompt->error()) << kTestData[i];
+      EXPECT_EQ(
+          l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALL_DISALLOWED_ON_SITE),
+          mock_prompt->error())
+          << kTestData[i];
     }
   }
 }
@@ -574,10 +573,9 @@
   ASSERT_TRUE(InstallExtension(crx_path, 1));
 
   const std::string extension_id("gllekhaobjnhgeagipipnkpmmmpchacm");
-  ExtensionRegistry* registry = ExtensionRegistry::Get(
-      browser()->profile());
+  ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile());
   const extensions::Extension* extension =
-     registry->enabled_extensions().GetByID(extension_id);
+      registry->enabled_extensions().GetByID(extension_id);
   ASSERT_TRUE(extension);
   EXPECT_EQ(extension_id, extension->id());
 
@@ -592,8 +590,7 @@
 
   ExtensionService* service = extension_service();
   ASSERT_TRUE(service);
-  ExtensionRegistry* registry = ExtensionRegistry::Get(
-      browser()->profile());
+  ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile());
   ASSERT_TRUE(registry);
 
   // Install version 1 of the test extension. This extension does not have
@@ -602,7 +599,7 @@
   ASSERT_FALSE(v1_path.empty());
   ASSERT_TRUE(InstallExtension(v1_path, 1));
   const extensions::Extension* extension =
-     registry->enabled_extensions().GetByID(extension_id);
+      registry->enabled_extensions().GetByID(extension_id);
   ASSERT_TRUE(extension);
   ASSERT_EQ(extension_id, extension->id());
   ASSERT_EQ("1.0", extension->version().GetString());
@@ -654,7 +651,7 @@
   blocklist_db->SetUnsafe(extension_id);
 
   base::FilePath crx_path = test_data_dir_.AppendASCII("theme_hidpi_crx")
-                                          .AppendASCII("theme_hidpi.crx");
+                                .AppendASCII("theme_hidpi.crx");
   EXPECT_FALSE(InstallExtension(crx_path, 0));
 
   auto installation_failure =
@@ -975,8 +972,7 @@
 IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest, KioskOnlyTest) {
   base::ScopedAllowBlockingForTesting allow_io;
   // kiosk_only is allowlisted from non-chromeos.
-  base::FilePath crx_path =
-      test_data_dir_.AppendASCII("kiosk/kiosk_only.crx");
+  base::FilePath crx_path = test_data_dir_.AppendASCII("kiosk/kiosk_only.crx");
   EXPECT_FALSE(InstallExtension(crx_path, 0));
   // Simulate ChromeOS kiosk mode. |scoped_user_manager| will take over
   // lifetime of |user_manager|.
@@ -1007,8 +1003,7 @@
 
   std::string extension_id = extension->id();
   UninstallExtension(extension_id);
-  ExtensionRegistry* registry = ExtensionRegistry::Get(
-      browser()->profile());
+  ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile());
   EXPECT_FALSE(registry->enabled_extensions().GetByID(extension_id));
 
   content::RunAllTasksUntilIdle();
diff --git a/chrome/browser/extensions/error_console/error_console_unittest.cc b/chrome/browser/extensions/error_console/error_console_unittest.cc
index 0684576..a773cad 100644
--- a/chrome/browser/extensions/error_console/error_console_unittest.cc
+++ b/chrome/browser/extensions/error_console/error_console_unittest.cc
@@ -86,7 +86,7 @@
                            .Set("name", "apps dev tools")
                            .Set("version", "0.2.0")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .SetID(kAppsDeveloperToolsExtensionId)
           .Build();
   ExtensionRegistry* registry = ExtensionRegistry::Get(profile_.get());
@@ -201,7 +201,7 @@
                            .Set("name", "unpacked")
                            .Set("version", "0.0.1")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .SetLocation(mojom::ManifestLocation::kUnpacked)
           .SetID(crx_file::id_util::GenerateId("unpacked"))
           .Build();
@@ -211,7 +211,7 @@
                            .Set("name", "packed")
                            .Set("version", "0.0.1")
                            .Set("manifest_version", 2)
-                           .Build())
+                           .BuildDict())
           .SetLocation(mojom::ManifestLocation::kInternal)
           .SetID(crx_file::id_util::GenerateId("packed"))
           .Build();
diff --git a/chrome/browser/extensions/extension_context_menu_model_unittest.cc b/chrome/browser/extensions/extension_context_menu_model_unittest.cc
index d40ee31a..41b4d91 100644
--- a/chrome/browser/extensions/extension_context_menu_model_unittest.cc
+++ b/chrome/browser/extensions/extension_context_menu_model_unittest.cc
@@ -321,12 +321,13 @@
   DictionaryBuilder manifest;
   manifest.Set("name", name).Set("version", "1").Set("manifest_version", 2);
   if (action_key)
-    manifest.Set(action_key, DictionaryBuilder().Build());
+    manifest.Set(action_key, DictionaryBuilder().BuildDict());
   if (!host_permission.empty())
-    manifest.Set("permissions", ListBuilder().Append(host_permission).Build());
+    manifest.Set("permissions",
+                 ListBuilder().Append(host_permission).BuildList());
   scoped_refptr<const Extension> extension =
       ExtensionBuilder()
-          .SetManifest(manifest.Build())
+          .SetManifest(manifest.BuildDict())
           .SetID(crx_file::id_util::GenerateId(name))
           .SetLocation(location)
           .Build();
@@ -512,19 +513,18 @@
   InitializeEmptyExtensionService();
 
   std::string name("component");
-  std::unique_ptr<base::DictionaryValue> manifest =
+  base::Value::Dict manifest =
       DictionaryBuilder()
           .Set("name", name)
           .Set("version", "1")
           .Set("manifest_version", 2)
-          .Set("browser_action", DictionaryBuilder().Build())
-          .Build();
+          .Set("browser_action", DictionaryBuilder().BuildDict())
+          .BuildDict();
 
   {
     scoped_refptr<const Extension> extension =
         ExtensionBuilder()
-            .SetManifest(base::DictionaryValue::From(
-                base::Value::ToUniquePtrValue(manifest->Clone())))
+            .SetManifest(manifest.Clone())
             .SetID(crx_file::id_util::GenerateId("component"))
             .SetLocation(ManifestLocation::kComponent)
             .Build();
@@ -554,7 +554,7 @@
   {
     // Check that a component extension with an options page does have the
     // options menu item, and it is enabled.
-    manifest->SetStringKey("options_page", "options_page.html");
+    manifest.Set("options_page", "options_page.html");
     scoped_refptr<const Extension> extension =
         ExtensionBuilder()
             .SetManifest(std::move(manifest))
diff --git a/chrome/browser/extensions/extension_error_controller_unittest.cc b/chrome/browser/extensions/extension_error_controller_unittest.cc
index 427610b..e573f34 100644
--- a/chrome/browser/extensions/extension_error_controller_unittest.cc
+++ b/chrome/browser/extensions/extension_error_controller_unittest.cc
@@ -94,10 +94,11 @@
 // Builds and returns a simple extension.
 scoped_refptr<const Extension> BuildExtension() {
   return ExtensionBuilder()
-      .SetManifest(DictionaryBuilder().Set("name", "My Wonderful Extension")
-                                      .Set("version", "0.1.1.0")
-                                      .Set("manifest_version", 2)
-                                      .Build())
+      .SetManifest(DictionaryBuilder()
+                       .Set("name", "My Wonderful Extension")
+                       .Set("version", "0.1.1.0")
+                       .Set("manifest_version", 2)
+                       .BuildDict())
       .Build();
 }
 
diff --git a/chrome/browser/extensions/extension_install_prompt_unittest.cc b/chrome/browser/extensions/extension_install_prompt_unittest.cc
index d0a58eb..7172020 100644
--- a/chrome/browser/extensions/extension_install_prompt_unittest.cc
+++ b/chrome/browser/extensions/extension_install_prompt_unittest.cc
@@ -118,7 +118,7 @@
                            .Set("version", "1.0")
                            .Set("manifest_version", 2)
                            .Set("description", "Random Ext")
-                           .Build())
+                           .BuildDict())
           .Build();
 
   content::TestWebContentsFactory factory;
@@ -139,16 +139,17 @@
        DelegatedPromptShowsOptionalPermissions) {
   scoped_refptr<const Extension> extension =
       ExtensionBuilder()
-          .SetManifest(DictionaryBuilder()
-                           .Set("name", "foo")
-                           .Set("version", "1.0")
-                           .Set("manifest_version", 2)
-                           .Set("description", "Random Ext")
-                           .Set("permissions",
-                                ListBuilder().Append("clipboardRead").Build())
-                           .Set("optional_permissions",
-                                ListBuilder().Append("tabs").Build())
-                           .Build())
+          .SetManifest(
+              DictionaryBuilder()
+                  .Set("name", "foo")
+                  .Set("version", "1.0")
+                  .Set("manifest_version", 2)
+                  .Set("description", "Random Ext")
+                  .Set("permissions",
+                       ListBuilder().Append("clipboardRead").BuildList())
+                  .Set("optional_permissions",
+                       ListBuilder().Append("tabs").BuildList())
+                  .BuildDict())
           .Build();
 
   content::TestWebContentsFactory factory;
diff --git a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
index 25dd5ca..7297cac 100644
--- a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
+++ b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
@@ -203,7 +203,7 @@
                             .Set("name", std::string("Extension " + index))
                             .Set("version", "1.0")
                             .Set("manifest_version", 2)
-                            .Build());
+                            .BuildDict());
     builder.SetLocation(location);
     builder.SetID(id);
     service_->AddExtension(builder.Build().get());
@@ -224,8 +224,8 @@
             .Set("manifest_version", 2)
             .Set("browser_action", DictionaryBuilder()
                                        .Set("default_title", "Default title")
-                                       .Build())
-            .Build());
+                                       .BuildDict())
+            .BuildDict());
     builder.SetLocation(location);
     builder.SetID(id);
     service_->AddExtension(builder.Build().get());
@@ -247,8 +247,8 @@
                             .Set("chrome_settings_overrides",
                                  DictionaryBuilder()
                                      .Set("homepage", "http://www.google.com")
-                                     .Build())
-                            .Build());
+                                     .BuildDict())
+                            .BuildDict());
     builder.SetLocation(location);
     builder.SetID(id);
     service_->AddExtension(builder.Build().get());
@@ -270,10 +270,11 @@
             .Set("manifest_version", 2)
             .Set("chrome_settings_overrides",
                  DictionaryBuilder()
-                     .Set("startup_pages",
-                          ListBuilder().Append("http://www.google.com").Build())
-                     .Build())
-            .Build());
+                     .Set("startup_pages", ListBuilder()
+                                               .Append("http://www.google.com")
+                                               .BuildList())
+                     .BuildDict())
+            .BuildDict());
     builder.SetLocation(location);
     builder.SetID(id);
     service_->AddExtension(builder.Build().get());
@@ -294,8 +295,8 @@
             .Set("version", "1.0")
             .Set("manifest_version", 2)
             .Set("chrome_url_overrides",
-                 DictionaryBuilder().Set("newtab", "Default.html").Build())
-            .Build());
+                 DictionaryBuilder().Set("newtab", "Default.html").BuildDict())
+            .BuildDict());
 
     builder.SetLocation(location);
     builder.SetID(id);
@@ -316,8 +317,8 @@
             .Set("name", std::string("Extension " + index))
             .Set("version", "1.0")
             .Set("manifest_version", 2)
-            .Set("permissions", ListBuilder().Append("proxy").Build())
-            .Build());
+            .Set("permissions", ListBuilder().Append("proxy").BuildList())
+            .BuildDict());
 
     builder.SetLocation(location);
     builder.SetID(id);
diff --git a/chrome/browser/extensions/extension_navigation_throttle_unittest.cc b/chrome/browser/extensions/extension_navigation_throttle_unittest.cc
index 00ad5a5..30035411 100644
--- a/chrome/browser/extensions/extension_navigation_throttle_unittest.cc
+++ b/chrome/browser/extensions/extension_navigation_throttle_unittest.cc
@@ -80,10 +80,12 @@
         .Set("description", "something")
         .Set("version", "0.1")
         .Set("manifest_version", 2)
-        .Set("web_accessible_resources",
-             ListBuilder().Append(kAccessible).Append(kAccessibleDir).Build());
+        .Set("web_accessible_resources", ListBuilder()
+                                             .Append(kAccessible)
+                                             .Append(kAccessibleDir)
+                                             .BuildList());
     extension_ = ExtensionBuilder()
-                     .SetManifest(manifest.Build())
+                     .SetManifest(manifest.BuildDict())
                      .SetID(crx_file::id_util::GenerateId("foo"))
                      .Build();
     ASSERT_TRUE(extension_);
diff --git a/chrome/browser/extensions/extension_protocols_unittest.cc b/chrome/browser/extensions/extension_protocols_unittest.cc
index 04f6365..ab1cb6ea 100644
--- a/chrome/browser/extensions/extension_protocols_unittest.cc
+++ b/chrome/browser/extensions/extension_protocols_unittest.cc
@@ -108,16 +108,17 @@
 }
 
 scoped_refptr<Extension> CreateWebStoreExtension() {
-  std::unique_ptr<base::DictionaryValue> manifest =
+  base::Value::Dict manifest =
       DictionaryBuilder()
           .Set("name", "WebStore")
           .Set("version", "1")
           .Set("manifest_version", 2)
-          .Set("icons",
-               DictionaryBuilder().Set("16", "webstore_icon_16.png").Build())
+          .Set(
+              "icons",
+              DictionaryBuilder().Set("16", "webstore_icon_16.png").BuildDict())
           .Set("web_accessible_resources",
-               ListBuilder().Append("webstore_icon_16.png").Build())
-          .Build();
+               ListBuilder().Append("webstore_icon_16.png").BuildList())
+          .BuildDict();
 
   base::FilePath path;
   EXPECT_TRUE(base::PathService::Get(chrome::DIR_RESOURCES, &path));
@@ -125,7 +126,7 @@
 
   std::string error;
   scoped_refptr<Extension> extension(
-      Extension::Create(path, mojom::ManifestLocation::kComponent, *manifest,
+      Extension::Create(path, mojom::ManifestLocation::kComponent, manifest,
                         Extension::NO_FLAGS, &error));
   EXPECT_TRUE(extension.get()) << error;
   return extension;
@@ -134,7 +135,7 @@
 scoped_refptr<const Extension> CreateTestResponseHeaderExtension() {
   return ExtensionBuilder("An extension with web-accessible resources")
       .SetManifestKey("web_accessible_resources",
-                      ListBuilder().Append("test.dat").Build())
+                      ListBuilder().Append("test.dat").BuildList())
       .SetPath(GetTestPath("response_headers"))
       .Build();
 }
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index 0b118e5..5b267f9 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -295,16 +295,15 @@
               base::WriteFile(file, data.c_str(), data.size()));
   }
 
-  std::unique_ptr<base::DictionaryValue> manifest =
-      DictionaryBuilder()
-          .Set(keys::kName, "Test extension")
-          .Set(keys::kVersion, "1.0")
-          .Set(keys::kManifestVersion, 2)
-          .Build();
+  base::Value::Dict manifest = DictionaryBuilder()
+                                   .Set(keys::kName, "Test extension")
+                                   .Set(keys::kVersion, "1.0")
+                                   .Set(keys::kManifestVersion, 2)
+                                   .BuildDict();
 
   // Persist manifest file.
   base::FilePath manifest_path = extension_dir.Append(kManifestFilename);
-  JSONFileValueSerializer(manifest_path).Serialize(*manifest);
+  JSONFileValueSerializer(manifest_path).Serialize(manifest);
   EXPECT_TRUE(base::PathExists(manifest_path));
 }
 
@@ -7644,7 +7643,7 @@
   scoped_refptr<const Extension> extension =
       ExtensionBuilder("Shared Module")
           .SetManifestPath("export.resources",
-                           ListBuilder().Append("foo.js").Build())
+                           ListBuilder().Append("foo.js").BuildList())
           .AddFlags(Extension::FROM_WEBSTORE)
           .Build();
 
diff --git a/chrome/browser/extensions/extension_shared_array_buffer_browsertest.cc b/chrome/browser/extensions/extension_shared_array_buffer_browsertest.cc
index 5dd08cc0..97a79dba 100644
--- a/chrome/browser/extensions/extension_shared_array_buffer_browsertest.cc
+++ b/chrome/browser/extensions/extension_shared_array_buffer_browsertest.cc
@@ -123,21 +123,21 @@
   if (is_cross_origin_isolated) {
     builder
         .Set("cross_origin_opener_policy",
-             DictionaryBuilder().Set("value", "same-origin").Build())
+             DictionaryBuilder().Set("value", "same-origin").BuildDict())
         .Set("cross_origin_embedder_policy",
-             DictionaryBuilder().Set("value", "require-corp").Build());
+             DictionaryBuilder().Set("value", "require-corp").BuildDict());
   }
 
   DictionaryBuilder background_builder;
   background_builder.Set("scripts",
-                         ListBuilder().Append("background.js").Build());
+                         ListBuilder().Append("background.js").BuildList());
 
   if (is_platform_app) {
     builder.Set("app", DictionaryBuilder()
-                           .Set("background", background_builder.Build())
-                           .Build());
+                           .Set("background", background_builder.BuildDict())
+                           .BuildDict());
   } else {
-    builder.Set("background", background_builder.Build());
+    builder.Set("background", background_builder.BuildDict());
   }
 
   test_dir().WriteManifest(builder.ToJSON());
diff --git a/chrome/browser/extensions/extension_web_ui_unittest.cc b/chrome/browser/extensions/extension_web_ui_unittest.cc
index cb8a7557..e4ab7b4 100644
--- a/chrome/browser/extensions/extension_web_ui_unittest.cc
+++ b/chrome/browser/extensions/extension_web_ui_unittest.cc
@@ -89,10 +89,10 @@
       .Set(manifest_keys::kVersion, "0.1")
       .Set(manifest_keys::kManifestVersion, 2)
       .Set(api::chrome_url_overrides::ManifestKeys::kChromeUrlOverrides,
-           DictionaryBuilder().Set("bookmarks", kOverrideResource).Build());
+           DictionaryBuilder().Set("bookmarks", kOverrideResource).BuildDict());
   scoped_refptr<const Extension> ext_unpacked(
       ExtensionBuilder()
-          .SetManifest(manifest.Build())
+          .SetManifest(manifest.BuildDict())
           .SetLocation(ManifestLocation::kUnpacked)
           .SetID("abcdefghijabcdefghijabcdefghijaa")
           .Build());
@@ -124,11 +124,12 @@
   manifest2.Set(manifest_keys::kName, "ext2")
       .Set(manifest_keys::kVersion, "0.1")
       .Set(manifest_keys::kManifestVersion, 2)
-      .Set(api::chrome_url_overrides::ManifestKeys::kChromeUrlOverrides,
-           DictionaryBuilder().Set("bookmarks", kOverrideResource2).Build());
+      .Set(
+          api::chrome_url_overrides::ManifestKeys::kChromeUrlOverrides,
+          DictionaryBuilder().Set("bookmarks", kOverrideResource2).BuildDict());
   scoped_refptr<const Extension> ext_component(
       ExtensionBuilder()
-          .SetManifest(manifest2.Build())
+          .SetManifest(manifest2.BuildDict())
           .SetLocation(ManifestLocation::kComponent)
           .SetID("bbabcdefghijabcdefghijabcdefghij")
           .Build());
@@ -265,8 +266,8 @@
 
 TEST_F(ExtensionWebUITest, TestNumExtensionsOverridingURL) {
   auto load_extension_overriding_newtab = [this](const char* name) {
-    std::unique_ptr<base::Value> chrome_url_overrides =
-        DictionaryBuilder().Set("newtab", "newtab.html").Build();
+    base::Value::Dict chrome_url_overrides =
+        DictionaryBuilder().Set("newtab", "newtab.html").BuildDict();
     scoped_refptr<const Extension> extension =
         ExtensionBuilder(name)
             .SetLocation(ManifestLocation::kInternal)
diff --git a/chrome/browser/extensions/forced_extensions/force_installed_metrics_unittest.cc b/chrome/browser/extensions/forced_extensions/force_installed_metrics_unittest.cc
index 5bdc3ab..b6361ed 100644
--- a/chrome/browser/extensions/forced_extensions/force_installed_metrics_unittest.cc
+++ b/chrome/browser/extensions/forced_extensions/force_installed_metrics_unittest.cc
@@ -182,15 +182,15 @@
   }
 
   void SetupExtensionManagementPref() {
-    std::unique_ptr<base::DictionaryValue> extension_entry =
+    base::Value::Dict extension_entry =
         DictionaryBuilder()
             .Set("installation_mode", "allowed")
             .Set(ExternalProviderImpl::kExternalUpdateUrl, kExtensionUpdateUrl)
-            .Build();
+            .BuildDict();
     prefs()->SetManagedPref(pref_names::kExtensionManagement,
                             DictionaryBuilder()
                                 .Set(kExtensionId1, std::move(extension_entry))
-                                .Build());
+                                .BuildDict());
   }
 
   void CreateExtensionService(bool extensions_enabled) {
@@ -1361,8 +1361,8 @@
        NonMisconfigurationFailureNotPresentDisallowedByPolicyTypeError) {
   SetupForceList(ExtensionOrigin::kWebStore);
   // Set TYPE_EXTENSION and TYPE_THEME as the allowed extension types.
-  std::unique_ptr<base::Value> list =
-      ListBuilder().Append("extension").Append("theme").Build();
+  base::Value::List list =
+      ListBuilder().Append("extension").Append("theme").BuildList();
   prefs()->SetManagedPref(pref_names::kAllowedTypes, std::move(list));
 
   scoped_refptr<const Extension> ext1 = CreateNewExtension(
@@ -1391,8 +1391,8 @@
   SetupForceList(ExtensionOrigin::kWebStore);
 
   // Set TYPE_EXTENSION and TYPE_THEME as the allowed extension types.
-  std::unique_ptr<base::Value> list =
-      ListBuilder().Append("extension").Append("theme").Build();
+  base::Value::List list =
+      ListBuilder().Append("extension").Append("theme").BuildList();
   prefs()->SetManagedPref(pref_names::kAllowedTypes, std::move(list));
 
   scoped_refptr<const Extension> ext1 = CreateNewExtension(
diff --git a/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc b/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc
index 44281379..50aaece 100644
--- a/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc
+++ b/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc
@@ -65,17 +65,17 @@
                                      : kOffStoreUpdateUrl;
   list.Append(base::StrCat({kExtensionId1, ";", update_url}));
   list.Append(base::StrCat({kExtensionId2, ";", update_url}));
-  std::unique_ptr<base::Value> dict =
+  base::Value::Dict dict =
       DictionaryBuilder()
           .Set(kExtensionId1,
                DictionaryBuilder()
                    .Set(ExternalProviderImpl::kExternalUpdateUrl, update_url)
-                   .Build())
+                   .BuildDict())
           .Set(kExtensionId2,
                DictionaryBuilder()
                    .Set(ExternalProviderImpl::kExternalUpdateUrl, update_url)
-                   .Build())
-          .Build();
+                   .BuildDict())
+          .BuildDict();
   prefs_->SetManagedPref(pref_names::kInstallForceList, std::move(dict));
 
   EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
@@ -92,7 +92,7 @@
 }
 
 void ForceInstalledTestBase::SetupEmptyForceList() {
-  std::unique_ptr<base::Value> dict = DictionaryBuilder().Build();
+  base::Value::Dict dict = DictionaryBuilder().BuildDict();
   prefs_->SetManagedPref(pref_names::kInstallForceList, std::move(dict));
 
   EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
diff --git a/chrome/browser/extensions/install_verifier_unittest.cc b/chrome/browser/extensions/install_verifier_unittest.cc
index fbe4f6a..110fd8c 100644
--- a/chrome/browser/extensions/install_verifier_unittest.cc
+++ b/chrome/browser/extensions/install_verifier_unittest.cc
@@ -39,11 +39,11 @@
 
   // Adds an extension as being allowed by policy.
   void AddExtensionAsPolicyInstalled(const ExtensionId& id) {
-    std::unique_ptr<base::DictionaryValue> extension_entry =
-        DictionaryBuilder().Set("installation_mode", "allowed").Build();
+    base::Value::Dict extension_entry =
+        DictionaryBuilder().Set("installation_mode", "allowed").BuildDict();
     testing_profile()->GetTestingPrefService()->SetManagedPref(
         pref_names::kExtensionManagement,
-        DictionaryBuilder().Set(id, std::move(extension_entry)).Build());
+        DictionaryBuilder().Set(id, std::move(extension_entry)).BuildDict());
     EXPECT_TRUE(ExtensionManagementFactory::GetForBrowserContext(profile())
                     ->IsInstallationExplicitlyAllowed(id));
   }
diff --git a/chrome/browser/extensions/options_page_apitest.cc b/chrome/browser/extensions/options_page_apitest.cc
index 191e3d1..f3f6d23 100644
--- a/chrome/browser/extensions/options_page_apitest.cc
+++ b/chrome/browser/extensions/options_page_apitest.cc
@@ -84,7 +84,7 @@
           .Set("manifest_version", 2)
           .Set("name", "Extension for options param test")
           .Set("options_ui",
-               DictionaryBuilder().Set("page", "options.html").Build())
+               DictionaryBuilder().Set("page", "options.html").BuildDict())
           .Set("version", "1")
           .ToJSON());
 
diff --git a/chrome/browser/extensions/permissions_updater_unittest.cc b/chrome/browser/extensions/permissions_updater_unittest.cc
index 9cd34ca..1aec0bf0 100644
--- a/chrome/browser/extensions/permissions_updater_unittest.cc
+++ b/chrome/browser/extensions/permissions_updater_unittest.cc
@@ -46,8 +46,8 @@
 namespace {
 
 scoped_refptr<const Extension> CreateExtensionWithOptionalPermissions(
-    std::unique_ptr<base::Value> optional_permissions,
-    std::unique_ptr<base::Value> permissions,
+    base::Value::List optional_permissions,
+    base::Value::List permissions,
     const std::string& name) {
   return ExtensionBuilder()
       .SetLocation(mojom::ManifestLocation::kInternal)
@@ -59,7 +59,7 @@
               .Set("version", "0.1.2.3")
               .Set("permissions", std::move(permissions))
               .Set("optional_permissions", std::move(optional_permissions))
-              .Build())
+              .BuildDict())
       .SetID(crx_file::id_util::GenerateId(name))
       .Build();
 }
@@ -87,7 +87,7 @@
                           ListBuilder()
                               .Append("http://*.c.com/*")
                               .Append("notifications")
-                              .Build())
+                              .BuildList())
           .Build();
 
   {
@@ -223,8 +223,8 @@
     ListBuilder required_permissions;
     required_permissions.Append("topSites");
     scoped_refptr<const Extension> extension =
-        CreateExtensionWithOptionalPermissions(optional_permissions.Build(),
-                                               required_permissions.Build(),
+        CreateExtensionWithOptionalPermissions(optional_permissions.BuildList(),
+                                               required_permissions.BuildList(),
                                                "My Extension");
 
     PermissionsUpdater updater(profile());
@@ -283,8 +283,8 @@
     ListBuilder required_permissions;
     required_permissions.Append("tabs").Append("http://*/*");
     scoped_refptr<const Extension> extension =
-        CreateExtensionWithOptionalPermissions(optional_permissions.Build(),
-                                               required_permissions.Build(),
+        CreateExtensionWithOptionalPermissions(optional_permissions.BuildList(),
+                                               required_permissions.BuildList(),
                                                "ExtensionSettings");
     AddPattern(&default_policy_blocked_hosts, "http://*.google.com/*");
     PermissionsUpdater updater(profile());
@@ -379,7 +379,7 @@
   scoped_refptr<const Extension> extension =
       ExtensionBuilder("extension")
           .SetManifestKey("optional_permissions",
-                          extensions::ListBuilder().Append("tabs").Build())
+                          extensions::ListBuilder().Append("tabs").BuildList())
           .Build();
 
   PermissionsUpdater updater(profile());
@@ -503,8 +503,8 @@
     SCOPED_TRACE(test_name);
     scoped_refptr<const Extension> extension =
         CreateExtensionWithOptionalPermissions(
-            std::make_unique<base::ListValue>(),
-            ListBuilder().Append(test_case.permission).Build(), test_name);
+            base::Value::List(),
+            ListBuilder().Append(test_case.permission).BuildList(), test_name);
     PermissionsUpdater updater(profile());
     updater.InitializePermissions(extension.get());
 
@@ -763,8 +763,9 @@
 
   scoped_refptr<const Extension> extension =
       CreateExtensionWithOptionalPermissions(
-          /*optional=*/ListBuilder().Append("tabs").Build(),
-          /*required=*/ListBuilder().Append("https://example.com/*").Build(),
+          /*optional_permissions=*/ListBuilder().Append("tabs").BuildList(),
+          /*permissions=*/
+          ListBuilder().Append("https://example.com/*").BuildList(),
           "optional grant");
   ASSERT_TRUE(extension);
 
diff --git a/chrome/browser/extensions/process_manager_browsertest.cc b/chrome/browser/extensions/process_manager_browsertest.cc
index 2ff7aeaa..9e25e5f 100644
--- a/chrome/browser/extensions/process_manager_browsertest.cc
+++ b/chrome/browser/extensions/process_manager_browsertest.cc
@@ -221,14 +221,15 @@
              "script-src 'self' 'unsafe-eval'; object-src 'self'")
         .Set("sandbox",
              DictionaryBuilder()
-                 .Set("pages", ListBuilder().Append("sandboxed.html").Build())
-                 .Build())
+                 .Set("pages",
+                      ListBuilder().Append("sandboxed.html").BuildList())
+                 .BuildDict())
         .Set("web_accessible_resources",
-             ListBuilder().Append("*.html").Build());
+             ListBuilder().Append("*.html").BuildList());
 
     if (has_background_process) {
       manifest.Set("background",
-                   DictionaryBuilder().Set("page", "bg.html").Build());
+                   DictionaryBuilder().Set("page", "bg.html").BuildDict());
       dir->WriteFile(FILE_PATH_LITERAL("bg.html"),
                      "<iframe id='bgframe' src='empty.html'></iframe>");
     }
diff --git a/chrome/browser/extensions/shared_module_service_unittest.cc b/chrome/browser/extensions/shared_module_service_unittest.cc
index 24d8826..ec8fb0f7 100644
--- a/chrome/browser/extensions/shared_module_service_unittest.cc
+++ b/chrome/browser/extensions/shared_module_service_unittest.cc
@@ -40,11 +40,11 @@
   if (!import_ids.empty()) {
     ListBuilder import_list;
     for (const std::string& import_id : import_ids)
-      import_list.Append(DictionaryBuilder().Set("id", import_id).Build());
-    builder.Set("import", import_list.Build());
+      import_list.Append(DictionaryBuilder().Set("id", import_id).BuildDict());
+    builder.Set("import", import_list.BuildList());
   }
   return ExtensionBuilder()
-      .SetManifest(builder.Build())
+      .SetManifest(builder.BuildDict())
       .AddFlags(Extension::FROM_WEBSTORE)
       .SetID(id)
       .Build();
@@ -52,16 +52,16 @@
 
 scoped_refptr<const Extension> CreateSharedModule(
     const std::string& module_id) {
-  std::unique_ptr<base::DictionaryValue> manifest =
+  base::Value::Dict manifest =
       DictionaryBuilder()
           .Set("name", "Shared Module")
           .Set("version", "1.0")
           .Set("manifest_version", 2)
           .Set("export",
                DictionaryBuilder()
-                   .Set("resources", ListBuilder().Append("foo.js").Build())
-                   .Build())
-          .Build();
+                   .Set("resources", ListBuilder().Append("foo.js").BuildList())
+                   .BuildDict())
+          .BuildDict();
 
   return ExtensionBuilder()
       .SetManifest(std::move(manifest))
@@ -178,16 +178,16 @@
       CreateSharedModule("shared_module_1");
   EXPECT_TRUE(InstallExtension(shared_module_1.get(), false));
 
-  std::unique_ptr<base::DictionaryValue> manifest_2 =
+  base::Value::Dict manifest_2 =
       DictionaryBuilder()
           .Set("name", "Shared Module 2")
           .Set("version", "1.0")
           .Set("manifest_version", 2)
           .Set("export",
                DictionaryBuilder()
-                   .Set("resources", ListBuilder().Append("foo.js").Build())
-                   .Build())
-          .Build();
+                   .Set("resources", ListBuilder().Append("foo.js").BuildList())
+                   .BuildDict())
+          .BuildDict();
   scoped_refptr<const Extension> shared_module_2 =
       CreateSharedModule("shared_module_2");
   EXPECT_TRUE(InstallExtension(shared_module_2.get(), false));
@@ -237,7 +237,7 @@
   std::string nonallowlisted_id =
       crx_file::id_util::GenerateId("nonallowlisted");
   // Create a module which exports to a restricted allowlist.
-  std::unique_ptr<base::DictionaryValue> manifest =
+  base::Value::Dict manifest =
       DictionaryBuilder()
           .Set("name", "Shared Module")
           .Set("version", "1.0")
@@ -245,10 +245,10 @@
           .Set("export",
                DictionaryBuilder()
                    .Set("allowlist",
-                        ListBuilder().Append(allowlisted_id).Build())
-                   .Set("resources", ListBuilder().Append("*").Build())
-                   .Build())
-          .Build();
+                        ListBuilder().Append(allowlisted_id).BuildList())
+                   .Set("resources", ListBuilder().Append("*").BuildList())
+                   .BuildDict())
+          .BuildDict();
   scoped_refptr<const Extension> shared_module =
       ExtensionBuilder()
           .SetManifest(std::move(manifest))
diff --git a/chrome/browser/extensions/test_extension_environment.cc b/chrome/browser/extensions/test_extension_environment.cc
index cedb4d3..9fdba25 100644
--- a/chrome/browser/extensions/test_extension_environment.cc
+++ b/chrome/browser/extensions/test_extension_environment.cc
@@ -35,17 +35,14 @@
 
 namespace {
 
-std::unique_ptr<base::DictionaryValue> MakeExtensionManifest(
-    const base::Value& manifest_extra) {
-  std::unique_ptr<base::DictionaryValue> manifest =
-      DictionaryBuilder()
-          .Set("name", "Extension")
-          .Set("version", "1.0")
-          .Set("manifest_version", 2)
-          .Build();
-  const base::DictionaryValue* manifest_extra_dict;
-  if (manifest_extra.GetAsDictionary(&manifest_extra_dict)) {
-    manifest->MergeDictionary(manifest_extra_dict);
+base::Value::Dict MakeExtensionManifest(const base::Value& manifest_extra) {
+  base::Value::Dict manifest = DictionaryBuilder()
+                                   .Set("name", "Extension")
+                                   .Set("version", "1.0")
+                                   .Set("manifest_version", 2)
+                                   .BuildDict();
+  if (manifest_extra.is_dict()) {
+    manifest.Merge(manifest_extra.GetDict().Clone());
   } else {
     std::string manifest_json;
     base::JSONWriter::Write(manifest_extra, &manifest_json);
@@ -54,7 +51,7 @@
   return manifest;
 }
 
-std::unique_ptr<base::DictionaryValue> MakePackagedAppManifest() {
+base::Value::Dict MakePackagedAppManifest() {
   return extensions::DictionaryBuilder()
       .Set("name", "Test App Name")
       .Set("version", "2.0")
@@ -64,10 +61,10 @@
                            extensions::DictionaryBuilder()
                                .Set("scripts", extensions::ListBuilder()
                                                    .Append("background.js")
-                                                   .Build())
-                               .Build())
-                      .Build())
-      .Build();
+                                                   .BuildList())
+                               .BuildDict())
+                      .BuildDict())
+      .BuildDict();
 }
 
 }  // namespace
@@ -132,8 +129,7 @@
 
 const Extension* TestExtensionEnvironment::MakeExtension(
     const base::Value& manifest_extra) {
-  std::unique_ptr<base::DictionaryValue> manifest =
-      MakeExtensionManifest(manifest_extra);
+  base::Value::Dict manifest = MakeExtensionManifest(manifest_extra);
   scoped_refptr<const Extension> result =
       ExtensionBuilder().SetManifest(std::move(manifest)).Build();
   GetExtensionService()->AddExtension(result.get());
@@ -143,8 +139,7 @@
 const Extension* TestExtensionEnvironment::MakeExtension(
     const base::Value& manifest_extra,
     const std::string& id) {
-  std::unique_ptr<base::DictionaryValue> manifest =
-      MakeExtensionManifest(manifest_extra);
+  base::Value::Dict manifest = MakeExtensionManifest(manifest_extra);
   scoped_refptr<const Extension> result =
       ExtensionBuilder().SetManifest(std::move(manifest)).SetID(id).Build();
   GetExtensionService()->AddExtension(result.get());
diff --git a/chrome/browser/extensions/update_install_gate_unittest.cc b/chrome/browser/extensions/update_install_gate_unittest.cc
index 3e73e5d8..ad5c04e 100644
--- a/chrome/browser/extensions/update_install_gate_unittest.cc
+++ b/chrome/browser/extensions/update_install_gate_unittest.cc
@@ -62,10 +62,10 @@
                                 DictionaryBuilder()
                                     .Set("scripts", ListBuilder()
                                                         .Append("background.js")
-                                                        .Build())
-                                    .Build())
-                           .Build())
-                  .Build())
+                                                        .BuildList())
+                                    .BuildDict())
+                           .BuildDict())
+                  .BuildDict())
           .SetID(extension_id)
           .Build();
   return app;
@@ -84,8 +84,8 @@
                   .Set("background", DictionaryBuilder()
                                          .Set("page", "background.html")
                                          .Set("persistent", persistent)
-                                         .Build())
-                  .Build())
+                                         .BuildDict())
+                  .BuildDict())
           .SetID(extension_id)
           .Build();
   return extension;
diff --git a/chrome/browser/extensions/webstore_installer_browsertest.cc b/chrome/browser/extensions/webstore_installer_browsertest.cc
index 6326f7dff..e27b75d2 100644
--- a/chrome/browser/extensions/webstore_installer_browsertest.cc
+++ b/chrome/browser/extensions/webstore_installer_browsertest.cc
@@ -66,9 +66,8 @@
   base::OnceClosure deleted_closure_;
 };
 
-class WebstoreInstallerBrowserTest
-    : public WebstoreInstallerTest,
-      public WebstoreInstaller::Delegate {
+class WebstoreInstallerBrowserTest : public WebstoreInstallerTest,
+                                     public WebstoreInstaller::Delegate {
  public:
   WebstoreInstallerBrowserTest(const std::string& webstore_domain,
                                const std::string& test_data_path,
@@ -184,8 +183,7 @@
           .SetManifest(std::move(manifest))
           .Build();
   extension_service()->OnExtensionInstalled(extension.get(),
-                                            syncer::StringOrdinal(),
-                                            0);
+                                            syncer::StringOrdinal(), 0);
 
   run_loop.Run();
 
diff --git a/chrome/browser/extensions/webstore_reinstaller_browsertest.cc b/chrome/browser/extensions/webstore_reinstaller_browsertest.cc
index 3b2c772..3e01b418 100644
--- a/chrome/browser/extensions/webstore_reinstaller_browsertest.cc
+++ b/chrome/browser/extensions/webstore_reinstaller_browsertest.cc
@@ -72,7 +72,7 @@
                            .Set("description", "Foo")
                            .Set("manifest_version", 2)
                            .Set("version", "1.0")
-                           .Build())
+                           .BuildDict())
           .Build();
   extension_service()->AddExtension(extension.get());
   ExtensionRegistry* registry = ExtensionRegistry::Get(profile());
diff --git a/chrome/common/extensions/extension_unittest.cc b/chrome/common/extensions/extension_unittest.cc
index 9dbcea7..2a81b17 100644
--- a/chrome/common/extensions/extension_unittest.cc
+++ b/chrome/common/extensions/extension_unittest.cc
@@ -104,8 +104,8 @@
       .Set("description", "some description");
   scoped_refptr<const Extension> extension =
       ExtensionBuilder()
-          .SetManifest(manifest.Build())
-          .MergeManifest(DictionaryBuilder().Set("version", "0.1").Build())
+          .SetManifest(manifest.BuildDict())
+          .MergeManifest(DictionaryBuilder().Set("version", "0.1").BuildDict())
           .Build();
   ASSERT_TRUE(extension.get());
   EXPECT_EQ("TestNew lines", extension->name());
@@ -121,8 +121,8 @@
       .Set("description", "some description");
   scoped_refptr<const Extension> extension =
       ExtensionBuilder()
-          .SetManifest(manifest.Build())
-          .MergeManifest(DictionaryBuilder().Set("version", "0.1").Build())
+          .SetManifest(manifest.BuildDict())
+          .MergeManifest(DictionaryBuilder().Set("version", "0.1").BuildDict())
           .Build();
   ASSERT_TRUE(extension.get());
   EXPECT_EQ("Test Whitespace", extension->name());
@@ -139,8 +139,8 @@
       .Set("description", "some description");
   scoped_refptr<const Extension> extension =
       ExtensionBuilder()
-          .SetManifest(manifest1.Build())
-          .MergeManifest(DictionaryBuilder().Set("version", "0.1").Build())
+          .SetManifest(manifest1.BuildDict())
+          .MergeManifest(DictionaryBuilder().Set("version", "0.1").BuildDict())
           .Build();
   ASSERT_TRUE(extension.get());
   EXPECT_EQ("", extension->name());
@@ -151,8 +151,8 @@
       .Set("description", "some description");
   extension =
       ExtensionBuilder()
-          .SetManifest(manifest2.Build())
-          .MergeManifest(DictionaryBuilder().Set("version", "0.1").Build())
+          .SetManifest(manifest2.BuildDict())
+          .MergeManifest(DictionaryBuilder().Set("version", "0.1").BuildDict())
           .Build();
   ASSERT_TRUE(extension.get());
   EXPECT_EQ("", extension->name());
@@ -170,7 +170,7 @@
         .Set("version",
              "0.1");  // <NOTE> Moved this here to avoid the MergeManifest call.
     scoped_refptr<const Extension> extension =
-        ExtensionBuilder().SetManifest(manifest.Build()).Build();
+        ExtensionBuilder().SetManifest(manifest.BuildDict()).Build();
     ASSERT_TRUE(extension);
     const int kResourceId = IDS_EXTENSION_PERMISSIONS_PROMPT_TITLE;
     const std::u16string expected_utf16 = base::WideToUTF16(expected);
diff --git a/chrome/common/extensions/manifest_handlers/settings_overrides_handler_unittest.cc b/chrome/common/extensions/manifest_handlers/settings_overrides_handler_unittest.cc
index 04d6856..aa52b516 100644
--- a/chrome/common/extensions/manifest_handlers/settings_overrides_handler_unittest.cc
+++ b/chrome/common/extensions/manifest_handlers/settings_overrides_handler_unittest.cc
@@ -111,7 +111,7 @@
 using extensions::api::manifest_types::ChromeSettingsOverrides;
 namespace manifest_keys = extensions::manifest_keys;
 
-scoped_refptr<Extension> CreateExtension(const base::DictionaryValue& manifest,
+scoped_refptr<Extension> CreateExtension(const base::Value::Dict& manifest,
                                          std::string* error) {
   scoped_refptr<Extension> extension =
       Extension::Create(base::FilePath(FILE_PATH_LITERAL("//nonexistent")),
@@ -132,12 +132,11 @@
     ADD_FAILURE() << "Manifest isn't a Dictionary";
     return nullptr;
   }
-  return CreateExtension(*static_cast<base::DictionaryValue*>(root.get()),
-                         error);
+  return CreateExtension(root->GetDict(), error);
 }
 
 scoped_refptr<Extension> CreateExtensionWithSearchProvider(
-    std::unique_ptr<base::DictionaryValue> search_provider,
+    base::Value::Dict search_provider,
     std::string* error) {
   DictionaryBuilder manifest;
   manifest.Set("name", "name")
@@ -147,8 +146,8 @@
       .Set("chrome_settings_overrides",
            DictionaryBuilder()
                .Set("search_provider", std::move(search_provider))
-               .Build());
-  return CreateExtension(*manifest.Build(), error);
+               .BuildDict());
+  return CreateExtension(manifest.BuildDict(), error);
 }
 
 TEST(OverrideSettingsTest, ParseManifest) {
@@ -315,18 +314,17 @@
       .Set("is_default", true);
   for (const KeyValue& kv : kMandatorySearchProviderKeyValues)
     search_provider.Set(kv.key, kv.value);
-  std::unique_ptr<base::DictionaryValue> search_provider_with_all_keys_dict =
-      search_provider.Build();
+  base::Value::Dict search_provider_with_all_keys_dict =
+      search_provider.BuildDict();
 
   // Missing all keys from |kMandatorySearchProviderValues|.
   for (const KeyValue& kv : kMandatorySearchProviderKeyValues) {
     SCOPED_TRACE(testing::Message()
                  << "key = " << kv.key << " value = " << kv.value);
     // Build a search provider entry with |kv.key| missing:
-    std::unique_ptr<base::DictionaryValue> provider_with_missing_key =
-        base::DictionaryValue::From(base::Value::ToUniquePtrValue(
-            search_provider_with_all_keys_dict->Clone()));
-    ASSERT_TRUE(provider_with_missing_key->RemovePath(kv.key));
+    base::Value::Dict provider_with_missing_key =
+        search_provider_with_all_keys_dict.Clone();
+    ASSERT_TRUE(provider_with_missing_key.Remove(kv.key));
 
     std::string error;
     scoped_refptr<Extension> extension = CreateExtensionWithSearchProvider(
diff --git a/chrome/common/extensions/permissions/permissions_data_unittest.cc b/chrome/common/extensions/permissions/permissions_data_unittest.cc
index a84d0b6..a01f0352 100644
--- a/chrome/common/extensions/permissions/permissions_data_unittest.cc
+++ b/chrome/common/extensions/permissions/permissions_data_unittest.cc
@@ -86,8 +86,8 @@
                        .Set("description", "an extension")
                        .Set("manifest_version", 2)
                        .Set("version", "1.0.0")
-                       .Set("permissions", permissions.Build())
-                       .Build())
+                       .Set("permissions", permissions.BuildList())
+                       .BuildDict())
       .SetLocation(location)
       .SetID(id)
       .Build();
diff --git a/chrome/renderer/extensions/renderer_permissions_policy_delegate_unittest.cc b/chrome/renderer/extensions/renderer_permissions_policy_delegate_unittest.cc
index 4563c1e..11a467cf 100644
--- a/chrome/renderer/extensions/renderer_permissions_policy_delegate_unittest.cc
+++ b/chrome/renderer/extensions/renderer_permissions_policy_delegate_unittest.cc
@@ -49,13 +49,13 @@
 
 scoped_refptr<const Extension> CreateTestExtension(const std::string& id) {
   return ExtensionBuilder()
-      .SetManifest(
-          DictionaryBuilder()
-              .Set("name", "Extension with ID " + id)
-              .Set("version", "1.0")
-              .Set("manifest_version", 2)
-              .Set("permissions", ListBuilder().Append("<all_urls>").Build())
-              .Build())
+      .SetManifest(DictionaryBuilder()
+                       .Set("name", "Extension with ID " + id)
+                       .Set("version", "1.0")
+                       .Set("manifest_version", 2)
+                       .Set("permissions",
+                            ListBuilder().Append("<all_urls>").BuildList())
+                       .BuildDict())
       .SetID(id)
       .Build();
 }
diff --git a/extensions/common/extension_builder.cc b/extensions/common/extension_builder.cc
index 202d3ec..9207b4d5 100644
--- a/extensions/common/extension_builder.cc
+++ b/extensions/common/extension_builder.cc
@@ -158,8 +158,8 @@
 
 base::Value ExtensionBuilder::BuildManifest() {
   CHECK(manifest_data_ || manifest_value_);
-  return manifest_data_ ? base::Value(manifest_data_->GetValue())
-                        : manifest_value_->Clone();
+  return base::Value(manifest_data_ ? manifest_data_->GetValue()
+                                    : manifest_value_->Clone());
 }
 
 ExtensionBuilder& ExtensionBuilder::AddPermission(
@@ -217,7 +217,7 @@
   CHECK(parsed.has_value())
       << "Failed to parse json for extension '" << manifest_data_->name
       << "':" << parsed.error().message;
-  return MergeManifest(*parsed);
+  return MergeManifest(std::move(*parsed).TakeDict());
 }
 
 ExtensionBuilder& ExtensionBuilder::SetPath(const base::FilePath& path) {
@@ -234,7 +234,7 @@
 ExtensionBuilder& ExtensionBuilder::SetManifest(
     std::unique_ptr<base::DictionaryValue> manifest) {
   CHECK(!manifest_data_);
-  manifest_value_ = std::move(manifest);
+  manifest_value_ = std::move(*manifest).TakeDict();
   return *this;
 }
 
@@ -243,19 +243,18 @@
       std::make_unique<base::Value>(std::move(manifest))));
 }
 
-ExtensionBuilder& ExtensionBuilder::MergeManifest(const base::Value& to_merge) {
-  CHECK(to_merge.is_dict());
+ExtensionBuilder& ExtensionBuilder::MergeManifest(base::Value::Dict to_merge) {
   if (manifest_data_) {
-    manifest_data_->get_extra().Merge(to_merge.GetDict().Clone());
+    manifest_data_->get_extra().Merge(std::move(to_merge));
   } else {
-    manifest_value_->MergeDictionary(&to_merge);
+    manifest_value_->Merge(std::move(to_merge));
   }
   return *this;
 }
 
 ExtensionBuilder& ExtensionBuilder::MergeManifest(
     std::unique_ptr<base::DictionaryValue> manifest) {
-  return MergeManifest(*manifest);
+  return MergeManifest(std::move(*manifest).TakeDict());
 }
 
 ExtensionBuilder& ExtensionBuilder::AddFlags(int init_from_value_flags) {
diff --git a/extensions/common/extension_builder.h b/extensions/common/extension_builder.h
index b2959d6..8df1e75 100644
--- a/extensions/common/extension_builder.h
+++ b/extensions/common/extension_builder.h
@@ -18,6 +18,7 @@
 #include "extensions/common/manifest.h"
 #include "extensions/common/mojom/manifest.mojom-shared.h"
 #include "extensions/common/value_builder.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace extensions {
 class Extension;
@@ -170,7 +171,7 @@
 
   // Merge another manifest into the current manifest, with new keys taking
   // precedence.
-  ExtensionBuilder& MergeManifest(const base::Value& manifest);
+  ExtensionBuilder& MergeManifest(base::Value::Dict manifest);
   ExtensionBuilder& MergeManifest(
       std::unique_ptr<base::DictionaryValue> manifest);
 
@@ -192,7 +193,7 @@
   // manifest which will be used to construct it, or the dictionary itself. Only
   // one will be present.
   std::unique_ptr<ManifestData> manifest_data_;
-  std::unique_ptr<base::DictionaryValue> manifest_value_;
+  absl::optional<base::Value::Dict> manifest_value_;
 
   base::FilePath path_;
   mojom::ManifestLocation location_;