Remove deprecated base::Value APIs

[Code Health Rotation] Update tracing controller to remove deprecated base::Value APIs.

Bug: 1351415
Change-Id: Ide68cfc150ba133d2433967df82ec440d5f35b34
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3819806
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Iman Saboori <isaboori@google.com>
Reviewed-by: Siddhartha S <ssid@chromium.org>
Reviewed-by: Nate Fischer <ntfschr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1034650}
diff --git a/android_webview/browser/tracing/aw_tracing_delegate.cc b/android_webview/browser/tracing/aw_tracing_delegate.cc
index d270791b..322dce22 100644
--- a/android_webview/browser/tracing/aw_tracing_delegate.cc
+++ b/android_webview/browser/tracing/aw_tracing_delegate.cc
@@ -92,9 +92,9 @@
   return true;
 }
 
-absl::optional<base::Value> AwTracingDelegate::GenerateMetadataDict() {
-  base::Value metadata_dict(base::Value::Type::DICTIONARY);
-  metadata_dict.SetStringKey("revision", version_info::GetLastChange());
+absl::optional<base::Value::Dict> AwTracingDelegate::GenerateMetadataDict() {
+  base::Value::Dict metadata_dict;
+  metadata_dict.Set("revision", version_info::GetLastChange());
   return metadata_dict;
 }
 
diff --git a/android_webview/browser/tracing/aw_tracing_delegate.h b/android_webview/browser/tracing/aw_tracing_delegate.h
index 5972f48..b943d09a 100644
--- a/android_webview/browser/tracing/aw_tracing_delegate.h
+++ b/android_webview/browser/tracing/aw_tracing_delegate.h
@@ -31,7 +31,7 @@
       const content::BackgroundTracingConfig& config,
       bool requires_anonymized_data,
       bool is_crash_scenario) override;
-  absl::optional<base::Value> GenerateMetadataDict() override;
+  absl::optional<base::Value::Dict> GenerateMetadataDict() override;
 };
 
 }  // namespace android_webview
diff --git a/chrome/browser/tracing/chrome_tracing_delegate.cc b/chrome/browser/tracing/chrome_tracing_delegate.cc
index 4ba6f3d..88dbb61 100644
--- a/chrome/browser/tracing/chrome_tracing_delegate.cc
+++ b/chrome/browser/tracing/chrome_tracing_delegate.cc
@@ -267,8 +267,9 @@
 #endif
 }
 
-absl::optional<base::Value> ChromeTracingDelegate::GenerateMetadataDict() {
-  base::Value metadata_dict(base::Value::Type::DICTIONARY);
+absl::optional<base::Value::Dict>
+ChromeTracingDelegate::GenerateMetadataDict() {
+  base::Value::Dict metadata_dict;
   std::vector<std::string> variations;
   variations::GetFieldTrialActiveGroupIdsAsStrings(base::StringPiece(),
                                                    &variations);
@@ -277,7 +278,7 @@
   for (const auto& it : variations)
     variations_list.Append(it);
 
-  metadata_dict.SetKey("field-trials", std::move(variations_list));
-  metadata_dict.SetStringKey("revision", version_info::GetLastChange());
+  metadata_dict.Set("field-trials", std::move(variations_list));
+  metadata_dict.Set("revision", version_info::GetLastChange());
   return metadata_dict;
 }
diff --git a/chrome/browser/tracing/chrome_tracing_delegate.h b/chrome/browser/tracing/chrome_tracing_delegate.h
index 2b9730bd..28276fa 100644
--- a/chrome/browser/tracing/chrome_tracing_delegate.h
+++ b/chrome/browser/tracing/chrome_tracing_delegate.h
@@ -53,7 +53,7 @@
 
   bool IsSystemWideTracingEnabled() override;
 
-  absl::optional<base::Value> GenerateMetadataDict() override;
+  absl::optional<base::Value::Dict> GenerateMetadataDict() override;
 
  private:
   FRIEND_TEST_ALL_PREFIXES(ChromeTracingDelegateBrowserTest,
diff --git a/content/browser/tracing/background_tracing_active_scenario.cc b/content/browser/tracing/background_tracing_active_scenario.cc
index 6b125594..26dcd3f 100644
--- a/content/browser/tracing/background_tracing_active_scenario.cc
+++ b/content/browser/tracing/background_tracing_active_scenario.cc
@@ -559,7 +559,7 @@
   return nullptr;
 }
 
-base::Value BackgroundTracingActiveScenario::GenerateMetadataDict() {
+base::Value::Dict BackgroundTracingActiveScenario::GenerateMetadataDict() {
   base::Value::Dict metadata_dict;
   metadata_dict.Set("config", config_->ToDict());
   metadata_dict.Set("scenario_name", config_->scenario_name());
@@ -568,7 +568,7 @@
     metadata_dict.Set("last_triggered_rule", last_triggered_rule_->ToDict());
   }
 
-  return base::Value(std::move(metadata_dict));
+  return metadata_dict;
 }
 
 void BackgroundTracingActiveScenario::GenerateMetadataProto(
diff --git a/content/browser/tracing/background_tracing_active_scenario.h b/content/browser/tracing/background_tracing_active_scenario.h
index ff8ebe4..4639a84f 100644
--- a/content/browser/tracing/background_tracing_active_scenario.h
+++ b/content/browser/tracing/background_tracing_active_scenario.h
@@ -41,7 +41,7 @@
   void AbortScenario();
 
   CONTENT_EXPORT const BackgroundTracingConfigImpl* GetConfig() const;
-  base::Value GenerateMetadataDict();
+  base::Value::Dict GenerateMetadataDict();
   void GenerateMetadataProto(
       perfetto::protos::pbzero::ChromeMetadataPacket* metadata);
   State state() const { return scenario_state_; }
diff --git a/content/browser/tracing/background_tracing_manager_impl.cc b/content/browser/tracing/background_tracing_manager_impl.cc
index d653402..efa00bf 100644
--- a/content/browser/tracing/background_tracing_manager_impl.cc
+++ b/content/browser/tracing/background_tracing_manager_impl.cc
@@ -450,7 +450,7 @@
               is_crash_scenario));
 }
 
-absl::optional<base::Value>
+absl::optional<base::Value::Dict>
 BackgroundTracingManagerImpl::GenerateMetadataDict() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!active_scenario_)
diff --git a/content/browser/tracing/background_tracing_manager_impl.h b/content/browser/tracing/background_tracing_manager_impl.h
index 805c976..1fd336d 100644
--- a/content/browser/tracing/background_tracing_manager_impl.h
+++ b/content/browser/tracing/background_tracing_manager_impl.h
@@ -166,7 +166,7 @@
   ~BackgroundTracingManagerImpl() override;
 
   bool IsSupportedConfig(BackgroundTracingConfigImpl* config);
-  absl::optional<base::Value> GenerateMetadataDict();
+  absl::optional<base::Value::Dict> GenerateMetadataDict();
   void GenerateMetadataProto(
       perfetto::protos::pbzero::ChromeMetadataPacket* metadata,
       bool privacy_filtering_enabled);
diff --git a/content/browser/tracing/tracing_controller_browsertest.cc b/content/browser/tracing/tracing_controller_browsertest.cc
index cda3e2b..1bbee268 100644
--- a/content/browser/tracing/tracing_controller_browsertest.cc
+++ b/content/browser/tracing/tracing_controller_browsertest.cc
@@ -126,7 +126,7 @@
     EXPECT_TRUE(NavigateToURL(shell, GetTestUrl("", "title1.html")));
   }
 
-  absl::optional<base::Value> GenerateMetadataDict() {
+  absl::optional<base::Value::Dict> GenerateMetadataDict() {
     return std::move(metadata_);
   }
 
@@ -244,8 +244,8 @@
       scoped_refptr<TracingController::TraceDataEndpoint> trace_data_endpoint =
           TracingController::CreateStringEndpoint(std::move(callback));
 
-      metadata_ = base::Value(base::Value::Type::DICTIONARY);
-      metadata_->SetStringKey("not-whitelisted", "this_not_found");
+      metadata_ = base::Value::Dict();
+      metadata_->Set("not-whitelisted", "this_not_found");
       tracing::TraceEventAgent::GetInstance()->AddMetadataGeneratorFunction(
           base::BindRepeating(&TracingControllerTest::GenerateMetadataDict,
                               base::Unretained(this)));
@@ -336,7 +336,7 @@
   int enable_recording_done_callback_count_;
   int disable_recording_done_callback_count_;
   base::FilePath last_actual_recording_file_path_;
-  absl::optional<base::Value> metadata_;
+  absl::optional<base::Value::Dict> metadata_;
   std::unique_ptr<std::string> last_data_;
 };
 
diff --git a/content/browser/tracing/tracing_controller_impl.cc b/content/browser/tracing/tracing_controller_impl.cc
index 6b9633a..2044c41c0 100644
--- a/content/browser/tracing/tracing_controller_impl.cc
+++ b/content/browser/tracing/tracing_controller_impl.cc
@@ -248,16 +248,17 @@
 }
 
 // Can be called on any thread.
-absl::optional<base::Value> TracingControllerImpl::GenerateMetadataDict() {
+absl::optional<base::Value::Dict>
+TracingControllerImpl::GenerateMetadataDict() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  base::Value metadata_dict(base::Value::Type::DICTIONARY);
+  base::Value::Dict metadata_dict;
 
-  metadata_dict.SetStringKey("network-type", GetNetworkTypeString());
-  metadata_dict.SetStringKey("product-version",
-                             GetContentClient()->browser()->GetProduct());
-  metadata_dict.SetStringKey("v8-version", V8_VERSION_STRING);
-  metadata_dict.SetStringKey("user-agent",
-                             GetContentClient()->browser()->GetUserAgent());
+  metadata_dict.Set("network-type", GetNetworkTypeString());
+  metadata_dict.Set("product-version",
+                    GetContentClient()->browser()->GetProduct());
+  metadata_dict.Set("v8-version", V8_VERSION_STRING);
+  metadata_dict.Set("user-agent",
+                    GetContentClient()->browser()->GetUserAgent());
 
 #if BUILDFLAG(IS_ANDROID)
   // The library name is used for symbolizing heap profiles. This cannot be
@@ -267,53 +268,50 @@
   absl::optional<base::StringPiece> soname =
       base::debug::ReadElfLibraryName(&__ehdr_start);
   if (soname)
-    metadata_dict.SetStringKey("chrome-library-name", *soname);
-  metadata_dict.SetStringKey("clock-offset-since-epoch",
-                             GetClockOffsetSinceEpoch());
+    metadata_dict.Set("chrome-library-name", *soname);
+  metadata_dict.Set("clock-offset-since-epoch", GetClockOffsetSinceEpoch());
 #endif  // BUILDFLAG(IS_ANDROID)
-  metadata_dict.SetIntKey("chrome-bitness", 8 * sizeof(uintptr_t));
+  metadata_dict.Set("chrome-bitness", static_cast<int>(8 * sizeof(uintptr_t)));
 
 #if DCHECK_IS_ON()
-  metadata_dict.SetIntKey("chrome-dcheck-on", 1);
+  metadata_dict.Set("chrome-dcheck-on", 1);
 #endif
 
   // OS
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-  metadata_dict.SetStringKey("os-name", "CrOS");
+  metadata_dict.Set("os-name", "CrOS");
   if (are_statistics_loaded_)
-    metadata_dict.SetStringKey("hardware-class", hardware_class_);
+    metadata_dict.Set("hardware-class", hardware_class_);
 #else
-  metadata_dict.SetStringKey("os-name", base::SysInfo::OperatingSystemName());
+  metadata_dict.Set("os-name", base::SysInfo::OperatingSystemName());
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-  metadata_dict.SetStringKey("os-version",
-                             base::SysInfo::OperatingSystemVersion());
+  metadata_dict.Set("os-version", base::SysInfo::OperatingSystemVersion());
 #if BUILDFLAG(IS_WIN)
   if (base::win::OSInfo::GetArchitecture() ==
       base::win::OSInfo::X64_ARCHITECTURE) {
     if (base::win::OSInfo::GetInstance()->IsWowX86OnAMD64()) {
-      metadata_dict.SetStringKey("os-wow64", "enabled");
+      metadata_dict.Set("os-wow64", "enabled");
     } else {
-      metadata_dict.SetStringKey("os-wow64", "disabled");
+      metadata_dict.Set("os-wow64", "disabled");
     }
   }
 
-  metadata_dict.SetStringKey(
-      "os-session", base::win::IsCurrentSessionRemote() ? "remote" : "local");
+  metadata_dict.Set("os-session",
+                    base::win::IsCurrentSessionRemote() ? "remote" : "local");
 #endif
 
-  metadata_dict.SetStringKey("os-arch",
-                             base::SysInfo::OperatingSystemArchitecture());
+  metadata_dict.Set("os-arch", base::SysInfo::OperatingSystemArchitecture());
 
   // CPU
   base::CPU cpu;
-  metadata_dict.SetIntKey("cpu-family", cpu.family());
-  metadata_dict.SetIntKey("cpu-model", cpu.model());
-  metadata_dict.SetIntKey("cpu-stepping", cpu.stepping());
-  metadata_dict.SetIntKey("num-cpus", base::SysInfo::NumberOfProcessors());
-  metadata_dict.SetIntKey("physical-memory",
-                          base::SysInfo::AmountOfPhysicalMemoryMB());
+  metadata_dict.Set("cpu-family", cpu.family());
+  metadata_dict.Set("cpu-model", cpu.model());
+  metadata_dict.Set("cpu-stepping", cpu.stepping());
+  metadata_dict.Set("num-cpus", base::SysInfo::NumberOfProcessors());
+  metadata_dict.Set("physical-memory",
+                    base::SysInfo::AmountOfPhysicalMemoryMB());
 
-  metadata_dict.SetStringKey("cpu-brand", cpu.cpu_brand());
+  metadata_dict.Set("cpu-brand", cpu.cpu_brand());
 
   // GPU
   const gpu::GPUInfo gpu_info =
@@ -321,32 +319,31 @@
   const gpu::GPUInfo::GPUDevice& active_gpu = gpu_info.active_gpu();
 
 #if !BUILDFLAG(IS_ANDROID)
-  metadata_dict.SetIntKey("gpu-venid", active_gpu.vendor_id);
-  metadata_dict.SetIntKey("gpu-devid", active_gpu.device_id);
+  metadata_dict.Set("gpu-venid", static_cast<int>(active_gpu.vendor_id));
+  metadata_dict.Set("gpu-devid", static_cast<int>(active_gpu.device_id));
 #endif
 
-  metadata_dict.SetStringKey("gpu-driver", active_gpu.driver_version);
-  metadata_dict.SetStringKey("gpu-psver", gpu_info.pixel_shader_version);
-  metadata_dict.SetStringKey("gpu-vsver", gpu_info.vertex_shader_version);
+  metadata_dict.Set("gpu-driver", active_gpu.driver_version);
+  metadata_dict.Set("gpu-psver", gpu_info.pixel_shader_version);
+  metadata_dict.Set("gpu-vsver", gpu_info.vertex_shader_version);
 
 #if BUILDFLAG(IS_MAC)
-  metadata_dict.SetStringKey("gpu-glver", gpu_info.gl_version);
+  metadata_dict.Set("gpu-glver", gpu_info.gl_version);
 #elif BUILDFLAG(IS_POSIX)
-  metadata_dict.SetStringKey("gpu-gl-vendor", gpu_info.gl_vendor);
-  metadata_dict.SetStringKey("gpu-gl-renderer", gpu_info.gl_renderer);
+  metadata_dict.Set("gpu-gl-vendor", gpu_info.gl_vendor);
+  metadata_dict.Set("gpu-gl-renderer", gpu_info.gl_renderer);
 #endif
-  metadata_dict.SetKey("gpu-features", GetFeatureStatus());
+  metadata_dict.Set("gpu-features", GetFeatureStatus());
 
-  metadata_dict.SetStringKey("clock-domain", GetClockString());
-  metadata_dict.SetBoolKey("highres-ticks",
-                           base::TimeTicks::IsHighResolution());
+  metadata_dict.Set("clock-domain", GetClockString());
+  metadata_dict.Set("highres-ticks", base::TimeTicks::IsHighResolution());
 
   base::CommandLine::StringType command_line =
       base::CommandLine::ForCurrentProcess()->GetCommandLineString();
 #if BUILDFLAG(IS_WIN)
-  metadata_dict.SetStringKey("command_line", base::WideToUTF16(command_line));
+  metadata_dict.Set("command_line", base::WideToUTF16(command_line));
 #else
-  metadata_dict.SetStringKey("command_line", command_line);
+  metadata_dict.Set("command_line", command_line);
 #endif
 
   base::Time::Exploded ctime;
@@ -354,7 +351,7 @@
   std::string time_string = base::StringPrintf(
       "%u-%u-%u %d:%d:%d", ctime.year, ctime.month, ctime.day_of_month,
       ctime.hour, ctime.minute, ctime.second);
-  metadata_dict.SetStringKey("trace-capture-datetime", time_string);
+  metadata_dict.Set("trace-capture-datetime", time_string);
 
   // TODO(crbug.com/737049): The central controller doesn't know about
   // metadata filters, so we temporarily filter here as the controller is
@@ -366,7 +363,7 @@
   }
 
   if (!metadata_filter.is_null()) {
-    for (auto it : metadata_dict.DictItems()) {
+    for (auto it : metadata_dict) {
       if (!metadata_filter.Run(it.first)) {
         it.second = base::Value("__stripped__");
       }
diff --git a/content/browser/tracing/tracing_controller_impl.h b/content/browser/tracing/tracing_controller_impl.h
index 229498f..9dba804 100644
--- a/content/browser/tracing/tracing_controller_impl.h
+++ b/content/browser/tracing/tracing_controller_impl.h
@@ -14,6 +14,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/task/task_traits.h"
 #include "base/timer/timer.h"
+#include "base/values.h"
 #include "build/chromeos_buildflags.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/tracing_controller.h"
@@ -37,7 +38,6 @@
 class TraceConfig;
 }  // namespace trace_event
 
-class Value;
 }  // namespace base
 
 namespace tracing {
@@ -95,7 +95,7 @@
   ~TracingControllerImpl() override;
   void AddAgents();
   void ConnectToServiceIfNeeded();
-  absl::optional<base::Value> GenerateMetadataDict();
+  absl::optional<base::Value::Dict> GenerateMetadataDict();
   void GenerateMetadataPacket(perfetto::protos::pbzero::TracePacket* packet,
                               bool privacy_filtering_enabled);
 
diff --git a/content/public/browser/tracing_delegate.cc b/content/public/browser/tracing_delegate.cc
index 765bda0c..06cd3d7 100644
--- a/content/public/browser/tracing_delegate.cc
+++ b/content/public/browser/tracing_delegate.cc
@@ -26,7 +26,7 @@
   return false;
 }
 
-absl::optional<base::Value> TracingDelegate::GenerateMetadataDict() {
+absl::optional<base::Value::Dict> TracingDelegate::GenerateMetadataDict() {
   return absl::nullopt;
 }
 
diff --git a/content/public/browser/tracing_delegate.h b/content/public/browser/tracing_delegate.h
index 86365093..774930a3 100644
--- a/content/public/browser/tracing_delegate.h
+++ b/content/public/browser/tracing_delegate.h
@@ -5,16 +5,11 @@
 #ifndef CONTENT_PUBLIC_BROWSER_TRACING_DELEGATE_H_
 #define CONTENT_PUBLIC_BROWSER_TRACING_DELEGATE_H_
 
-#include <memory>
-
 #include "base/callback.h"
+#include "base/values.h"
 #include "content/common/content_export.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
-namespace base {
-class Value;
-}  // namespace base
-
 namespace content {
 class BackgroundTracingConfig;
 
@@ -39,7 +34,7 @@
   virtual bool IsSystemWideTracingEnabled();
 
   // Used to add any additional metadata to traces.
-  virtual absl::optional<base::Value> GenerateMetadataDict();
+  virtual absl::optional<base::Value::Dict> GenerateMetadataDict();
 };
 
 }  // namespace content
diff --git a/services/tracing/public/cpp/trace_event_agent.cc b/services/tracing/public/cpp/trace_event_agent.cc
index 3477d0a..c697868 100644
--- a/services/tracing/public/cpp/trace_event_agent.cc
+++ b/services/tracing/public/cpp/trace_event_agent.cc
@@ -70,7 +70,16 @@
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   metadata_generator_functions_.push_back(generator);
 
-  TraceEventMetadataSource::GetInstance()->AddGeneratorFunction(generator);
+  TraceEventMetadataSource::GetInstance()->AddGeneratorFunction(
+      base::BindRepeating(
+          [](MetadataGeneratorFunction const& generator)
+              -> absl::optional<base::Value> {
+            if (auto rv = generator.Run()) {
+              return base::Value(std::move(rv.value()));
+            }
+            return absl::nullopt;
+          },
+          std::move(generator)));
 }
 
 }  // namespace tracing
diff --git a/services/tracing/public/cpp/trace_event_agent.h b/services/tracing/public/cpp/trace_event_agent.h
index b505185..be02428 100644
--- a/services/tracing/public/cpp/trace_event_agent.h
+++ b/services/tracing/public/cpp/trace_event_agent.h
@@ -32,7 +32,7 @@
   void GetCategories(std::set<std::string>* category_set) override;
 
   using MetadataGeneratorFunction =
-      base::RepeatingCallback<absl::optional<base::Value>()>;
+      base::RepeatingCallback<absl::optional<base::Value::Dict>()>;
   void AddMetadataGeneratorFunction(MetadataGeneratorFunction generator);
 
  private: