Fenced Frames: [2/N] Fledge `runAdAuction()` yields a FencedFrameConfig

This CL typemaps the following:
 - blink.mojom.Opaque
 - blink.mojom.AdAuctionData
 - blink.SharedStorageBudgetMetadata

All in preparation of typemapping the blink.mojom.PotentiallyOpaque[Foo]
structs so that we can pass blink.mojom.RedactedFencedFrameConfig
directly into Blink IPCs. This will enable FLEDGE's `runAdAuction()`
web API to return a Promise<FencedFrameConfig>.

Bug: 1347953
Change-Id: I990d4687793904299608df0ad4c0e01084b32d27
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4085208
Commit-Queue: Dominic Farolino <dom@chromium.org>
Reviewed-by: Garrett Tanzer <gtanzer@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1081699}
diff --git a/third_party/blink/common/fenced_frame/redacted_fenced_frame_config_mojom_traits.cc b/third_party/blink/common/fenced_frame/redacted_fenced_frame_config_mojom_traits.cc
index ade96c9..c86eb25 100644
--- a/third_party/blink/common/fenced_frame/redacted_fenced_frame_config_mojom_traits.cc
+++ b/third_party/blink/common/fenced_frame/redacted_fenced_frame_config_mojom_traits.cc
@@ -10,6 +10,31 @@
 namespace mojo {
 
 // static
+blink::mojom::Opaque
+EnumTraits<blink::mojom::Opaque, blink::FencedFrame::Opaque>::ToMojom(
+    blink::FencedFrame::Opaque input) {
+  switch (input) {
+    case blink::FencedFrame::Opaque::kOpaque:
+      return blink::mojom::Opaque::kOpaque;
+  }
+  NOTREACHED();
+  return blink::mojom::Opaque::kOpaque;
+}
+
+// static
+bool EnumTraits<blink::mojom::Opaque, blink::FencedFrame::Opaque>::FromMojom(
+    blink::mojom::Opaque input,
+    blink::FencedFrame::Opaque* out) {
+  switch (input) {
+    case blink::mojom::Opaque::kOpaque:
+      *out = blink::FencedFrame::Opaque::kOpaque;
+      return true;
+  }
+  NOTREACHED();
+  return false;
+}
+
+// static
 blink::mojom::ReportingDestination
 EnumTraits<blink::mojom::ReportingDestination,
            blink::FencedFrame::ReportingDestination>::
@@ -71,6 +96,58 @@
   return false;
 }
 
+// static
+const url::Origin& StructTraits<blink::mojom::AdAuctionDataDataView,
+                                blink::FencedFrame::AdAuctionData>::
+    interest_group_owner(const blink::FencedFrame::AdAuctionData& input) {
+  return input.interest_group_owner;
+}
+// static
+const std::string& StructTraits<blink::mojom::AdAuctionDataDataView,
+                                blink::FencedFrame::AdAuctionData>::
+    interest_group_name(const blink::FencedFrame::AdAuctionData& input) {
+  return input.interest_group_name;
+}
+
+// static
+bool StructTraits<blink::mojom::AdAuctionDataDataView,
+                  blink::FencedFrame::AdAuctionData>::
+    Read(blink::mojom::AdAuctionDataDataView data,
+         blink::FencedFrame::AdAuctionData* out_data) {
+  if (!data.ReadInterestGroupOwner(&out_data->interest_group_owner) ||
+      !data.ReadInterestGroupName(&out_data->interest_group_name)) {
+    return false;
+  }
+  return true;
+}
+
+// static
+const url::Origin&
+StructTraits<blink::mojom::SharedStorageBudgetMetadataDataView,
+             blink::FencedFrame::SharedStorageBudgetMetadata>::
+    origin(const blink::FencedFrame::SharedStorageBudgetMetadata& input) {
+  return input.origin;
+}
+// static
+double StructTraits<blink::mojom::SharedStorageBudgetMetadataDataView,
+                    blink::FencedFrame::SharedStorageBudgetMetadata>::
+    budget_to_charge(
+        const blink::FencedFrame::SharedStorageBudgetMetadata& input) {
+  return input.budget_to_charge;
+}
+
+// static
+bool StructTraits<blink::mojom::SharedStorageBudgetMetadataDataView,
+                  blink::FencedFrame::SharedStorageBudgetMetadata>::
+    Read(blink::mojom::SharedStorageBudgetMetadataDataView data,
+         blink::FencedFrame::SharedStorageBudgetMetadata* out_data) {
+  if (!data.ReadOrigin(&out_data->origin)) {
+    return false;
+  }
+  out_data->budget_to_charge = data.budget_to_charge();
+  return true;
+}
+
 blink::mojom::PotentiallyOpaqueURLPtr
 StructTraits<blink::mojom::FencedFrameConfigDataView,
              blink::FencedFrame::RedactedFencedFrameConfig>::
@@ -80,7 +157,7 @@
   }
   if (!config.mapped_url_->potentially_opaque_value.has_value()) {
     return blink::mojom::PotentiallyOpaqueURL::NewOpaque(
-        blink::mojom::Opaque::kOpaque);
+        blink::FencedFrame::Opaque::kOpaque);
   }
   return blink::mojom::PotentiallyOpaqueURL::NewTransparent(
       *config.mapped_url_->potentially_opaque_value);
@@ -96,14 +173,10 @@
   }
   if (!config.ad_auction_data_->potentially_opaque_value.has_value()) {
     return blink::mojom::PotentiallyOpaqueAdAuctionData::NewOpaque(
-        blink::mojom::Opaque::kOpaque);
+        blink::FencedFrame::Opaque::kOpaque);
   }
   return blink::mojom::PotentiallyOpaqueAdAuctionData::NewTransparent(
-      blink::mojom::AdAuctionData::New(
-          config.ad_auction_data_->potentially_opaque_value
-              ->interest_group_owner,
-          config.ad_auction_data_->potentially_opaque_value
-              ->interest_group_name));
+      *config.ad_auction_data_->potentially_opaque_value);
 }
 
 blink::mojom::PotentiallyOpaqueConfigVectorPtr
@@ -116,7 +189,7 @@
   }
   if (!config.nested_configs_->potentially_opaque_value.has_value()) {
     return blink::mojom::PotentiallyOpaqueConfigVector::NewOpaque(
-        blink::mojom::Opaque::kOpaque);
+        blink::FencedFrame::Opaque::kOpaque);
   }
   auto nested_config_vector =
       blink::mojom::PotentiallyOpaqueConfigVector::NewTransparent({});
@@ -138,14 +211,11 @@
   if (!config.shared_storage_budget_metadata_->potentially_opaque_value
            .has_value()) {
     return blink::mojom::PotentiallyOpaqueSharedStorageBudgetMetadata::
-        NewOpaque(blink::mojom::Opaque::kOpaque);
+        NewOpaque(blink::FencedFrame::Opaque::kOpaque);
   }
   return blink::mojom::PotentiallyOpaqueSharedStorageBudgetMetadata::
-      NewTransparent(blink::mojom::SharedStorageBudgetMetadata::New(
-          config.shared_storage_budget_metadata_->potentially_opaque_value
-              ->origin,
-          config.shared_storage_budget_metadata_->potentially_opaque_value
-              ->budget_to_charge));
+      NewTransparent(
+          *config.shared_storage_budget_metadata_->potentially_opaque_value);
 }
 
 blink::mojom::PotentiallyOpaqueReportingMetadataPtr
@@ -158,7 +228,7 @@
   }
   if (!config.reporting_metadata_->potentially_opaque_value.has_value()) {
     return blink::mojom::PotentiallyOpaqueReportingMetadata::NewOpaque(
-        blink::mojom::Opaque::kOpaque);
+        blink::FencedFrame::Opaque::kOpaque);
   }
   return blink::mojom::PotentiallyOpaqueReportingMetadata::NewTransparent(
       *config.reporting_metadata_->potentially_opaque_value);
@@ -193,9 +263,7 @@
   if (ad_auction_data) {
     if (ad_auction_data->is_transparent()) {
       out_config->ad_auction_data_.emplace(
-          absl::make_optional(blink::FencedFrame::AdAuctionData{
-              ad_auction_data->get_transparent()->interest_group_owner,
-              ad_auction_data->get_transparent()->interest_group_name}));
+          absl::make_optional(ad_auction_data->get_transparent()));
     } else {
       out_config->ad_auction_data_.emplace(absl::nullopt);
     }
@@ -214,11 +282,8 @@
   }
   if (shared_storage_budget_metadata) {
     if (shared_storage_budget_metadata->is_transparent()) {
-      out_config->shared_storage_budget_metadata_.emplace(
-          absl::make_optional(blink::FencedFrame::SharedStorageBudgetMetadata{
-              shared_storage_budget_metadata->get_transparent()->origin,
-              shared_storage_budget_metadata->get_transparent()
-                  ->budget_to_charge}));
+      out_config->shared_storage_budget_metadata_.emplace(absl::make_optional(
+          shared_storage_budget_metadata->get_transparent()));
     } else {
       out_config->shared_storage_budget_metadata_.emplace(absl::nullopt);
     }
@@ -244,7 +309,7 @@
   }
   if (!properties.mapped_url_->potentially_opaque_value.has_value()) {
     return blink::mojom::PotentiallyOpaqueURL::NewOpaque(
-        blink::mojom::Opaque::kOpaque);
+        blink::FencedFrame::Opaque::kOpaque);
   }
   return blink::mojom::PotentiallyOpaqueURL::NewTransparent(
       *properties.mapped_url_->potentially_opaque_value);
@@ -260,14 +325,10 @@
   }
   if (!properties.ad_auction_data_->potentially_opaque_value.has_value()) {
     return blink::mojom::PotentiallyOpaqueAdAuctionData::NewOpaque(
-        blink::mojom::Opaque::kOpaque);
+        blink::FencedFrame::Opaque::kOpaque);
   }
   return blink::mojom::PotentiallyOpaqueAdAuctionData::NewTransparent(
-      blink::mojom::AdAuctionData::New(
-          properties.ad_auction_data_->potentially_opaque_value
-              ->interest_group_owner,
-          properties.ad_auction_data_->potentially_opaque_value
-              ->interest_group_name));
+      *properties.ad_auction_data_->potentially_opaque_value);
 }
 
 blink::mojom::PotentiallyOpaqueURNConfigVectorPtr
@@ -281,7 +342,7 @@
   if (!properties.nested_urn_config_pairs_->potentially_opaque_value
            .has_value()) {
     return blink::mojom::PotentiallyOpaqueURNConfigVector::NewOpaque(
-        blink::mojom::Opaque::kOpaque);
+        blink::FencedFrame::Opaque::kOpaque);
   }
   auto nested_urn_config_vector =
       blink::mojom::PotentiallyOpaqueURNConfigVector::NewTransparent({});
@@ -305,14 +366,11 @@
   if (!properties.shared_storage_budget_metadata_->potentially_opaque_value
            .has_value()) {
     return blink::mojom::PotentiallyOpaqueSharedStorageBudgetMetadata::
-        NewOpaque(blink::mojom::Opaque::kOpaque);
+        NewOpaque(blink::FencedFrame::Opaque::kOpaque);
   }
   return blink::mojom::PotentiallyOpaqueSharedStorageBudgetMetadata::
-      NewTransparent(blink::mojom::SharedStorageBudgetMetadata::New(
-          properties.shared_storage_budget_metadata_->potentially_opaque_value
-              ->origin,
-          properties.shared_storage_budget_metadata_->potentially_opaque_value
-              ->budget_to_charge));
+      NewTransparent(*properties.shared_storage_budget_metadata_
+                          ->potentially_opaque_value);
 }
 
 blink::mojom::PotentiallyOpaqueReportingMetadataPtr
@@ -325,7 +383,7 @@
   }
   if (!properties.reporting_metadata_->potentially_opaque_value.has_value()) {
     return blink::mojom::PotentiallyOpaqueReportingMetadata::NewOpaque(
-        blink::mojom::Opaque::kOpaque);
+        blink::FencedFrame::Opaque::kOpaque);
   }
   return blink::mojom::PotentiallyOpaqueReportingMetadata::NewTransparent(
       *properties.reporting_metadata_->potentially_opaque_value);
@@ -359,9 +417,7 @@
   if (ad_auction_data) {
     if (ad_auction_data->is_transparent()) {
       out_properties->ad_auction_data_.emplace(
-          absl::make_optional(blink::FencedFrame::AdAuctionData{
-              ad_auction_data->get_transparent()->interest_group_owner,
-              ad_auction_data->get_transparent()->interest_group_name}));
+          absl::make_optional(ad_auction_data->get_transparent()));
     } else {
       out_properties->ad_auction_data_.emplace(absl::nullopt);
     }
@@ -384,10 +440,8 @@
   if (shared_storage_budget_metadata) {
     if (shared_storage_budget_metadata->is_transparent()) {
       out_properties->shared_storage_budget_metadata_.emplace(
-          absl::make_optional(blink::FencedFrame::SharedStorageBudgetMetadata{
-              shared_storage_budget_metadata->get_transparent()->origin,
-              shared_storage_budget_metadata->get_transparent()
-                  ->budget_to_charge}));
+          absl::make_optional(
+              shared_storage_budget_metadata->get_transparent()));
     } else {
       out_properties->shared_storage_budget_metadata_.emplace(absl::nullopt);
     }
diff --git a/third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config.h b/third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config.h
index 636a251..17381b5 100644
--- a/third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config.h
+++ b/third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config.h
@@ -26,6 +26,12 @@
 
 namespace blink::FencedFrame {
 
+// This is used to represent the "opaque" union variant of "PotentiallyOpaque"
+// mojom types.
+enum class Opaque {
+  kOpaque,
+};
+
 enum ReportingDestination {
   kBuyer,
   kSeller,
@@ -43,7 +49,7 @@
       metadata;
 };
 
-struct AdAuctionData {
+struct BLINK_COMMON_EXPORT AdAuctionData {
   url::Origin interest_group_owner;
   std::string interest_group_name;
 };
diff --git a/third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config_mojom_traits.h b/third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config_mojom_traits.h
index e29d4d1..123301cc 100644
--- a/third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config_mojom_traits.h
+++ b/third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config_mojom_traits.h
@@ -5,6 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_FENCED_FRAME_REDACTED_FENCED_FRAME_CONFIG_MOJOM_TRAITS_H_
 #define THIRD_PARTY_BLINK_PUBLIC_COMMON_FENCED_FRAME_REDACTED_FENCED_FRAME_CONFIG_MOJOM_TRAITS_H_
 
+#include "mojo/public/cpp/bindings/enum_traits.h"
 #include "third_party/blink/public/common/common_export.h"
 #include "third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config.h"
 #include "third_party/blink/public/mojom/fenced_frame/fenced_frame_config.mojom-forward.h"
@@ -13,6 +14,14 @@
 
 template <>
 struct BLINK_COMMON_EXPORT
+    EnumTraits<blink::mojom::Opaque, blink::FencedFrame::Opaque> {
+  static blink::mojom::Opaque ToMojom(blink::FencedFrame::Opaque input);
+  static bool FromMojom(blink::mojom::Opaque input,
+                        blink::FencedFrame::Opaque* out);
+};
+
+template <>
+struct BLINK_COMMON_EXPORT
     EnumTraits<blink::mojom::ReportingDestination,
                blink::FencedFrame::ReportingDestination> {
   static blink::mojom::ReportingDestination ToMojom(
@@ -34,6 +43,31 @@
 };
 
 template <>
+struct BLINK_COMMON_EXPORT StructTraits<blink::mojom::AdAuctionDataDataView,
+                                        blink::FencedFrame::AdAuctionData> {
+  static const url::Origin& interest_group_owner(
+      const blink::FencedFrame::AdAuctionData& input);
+  static const std::string& interest_group_name(
+      const blink::FencedFrame::AdAuctionData& input);
+
+  static bool Read(blink::mojom::AdAuctionDataDataView data,
+                   blink::FencedFrame::AdAuctionData* out_data);
+};
+
+template <>
+struct BLINK_COMMON_EXPORT
+    StructTraits<blink::mojom::SharedStorageBudgetMetadataDataView,
+                 blink::FencedFrame::SharedStorageBudgetMetadata> {
+  static const url::Origin& origin(
+      const blink::FencedFrame::SharedStorageBudgetMetadata& input);
+  static double budget_to_charge(
+      const blink::FencedFrame::SharedStorageBudgetMetadata& input);
+
+  static bool Read(blink::mojom::SharedStorageBudgetMetadataDataView data,
+                   blink::FencedFrame::SharedStorageBudgetMetadata* out_data);
+};
+
+template <>
 struct BLINK_COMMON_EXPORT
     StructTraits<blink::mojom::FencedFrameConfigDataView,
                  blink::FencedFrame::RedactedFencedFrameConfig> {
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn
index 19798ef9..f869087 100644
--- a/third_party/blink/public/mojom/BUILD.gn
+++ b/third_party/blink/public/mojom/BUILD.gn
@@ -599,6 +599,18 @@
     {
       types = [
         {
+          mojom = "blink.mojom.Opaque"
+          cpp = "::blink::FencedFrame::Opaque"
+        },
+        {
+          mojom = "blink.mojom.AdAuctionData"
+          cpp = "::blink::FencedFrame::AdAuctionData"
+        },
+        {
+          mojom = "blink.mojom.SharedStorageBudgetMetadata"
+          cpp = "::blink::FencedFrame::SharedStorageBudgetMetadata"
+        },
+        {
           mojom = "blink.mojom.ReportingDestination"
           cpp = "::blink::FencedFrame::ReportingDestination"
         },