|  | // Copyright 2022 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CONTENT_BROWSER_INTEREST_GROUP_SUBRESOURCE_URL_BUILDER_H_ | 
|  | #define CONTENT_BROWSER_INTEREST_GROUP_SUBRESOURCE_URL_BUILDER_H_ | 
|  |  | 
|  | #include "base/containers/flat_map.h" | 
|  | #include "content/common/content_export.h" | 
|  | #include "third_party/abseil-cpp/absl/types/optional.h" | 
|  | #include "third_party/blink/public/common/interest_group/auction_config.h" | 
|  | #include "url/gurl.h" | 
|  | #include "url/origin.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | // Produces and stores the BundleSubresourceInfo for each signal in | 
|  | // DirectFromSellerSignals. | 
|  | class CONTENT_EXPORT SubresourceUrlBuilder { | 
|  | public: | 
|  | // Holds all the information needed to request a subresource from the browser | 
|  | // process, except the renderer process ID (which is held by the | 
|  | // AuctionURLLoaderFactoryProxy, since it is per-frame). | 
|  | // | 
|  | // TODO(crbug.com/1355887): Once subresource bundles support shared ownership | 
|  | // handle types, replace this class with that handle type. That way, this | 
|  | // struct will also hold shared ownership of all the subresource bundles. | 
|  | struct CONTENT_EXPORT BundleSubresourceInfo { | 
|  | BundleSubresourceInfo( | 
|  | const GURL& subresource_url, | 
|  | const blink::DirectFromSellerSignalsSubresource& info_from_renderer); | 
|  | ~BundleSubresourceInfo(); | 
|  |  | 
|  | BundleSubresourceInfo(const BundleSubresourceInfo&); | 
|  | BundleSubresourceInfo& operator=(const BundleSubresourceInfo&); | 
|  | BundleSubresourceInfo(BundleSubresourceInfo&&); | 
|  | BundleSubresourceInfo& operator=(BundleSubresourceInfo&&); | 
|  |  | 
|  | // The subresource URL, as constructed by the browser using the prefix + | 
|  | // suffix, as described in the DirectFromSellerSignals mojom comments. | 
|  | GURL subresource_url; | 
|  |  | 
|  | // The bundle_url and token from the renderer process. | 
|  | blink::DirectFromSellerSignalsSubresource info_from_renderer; | 
|  | }; | 
|  |  | 
|  | explicit SubresourceUrlBuilder( | 
|  | const absl::optional<blink::DirectFromSellerSignals>& | 
|  | direct_from_seller_signals); | 
|  | ~SubresourceUrlBuilder(); | 
|  |  | 
|  | SubresourceUrlBuilder(const SubresourceUrlBuilder&) = delete; | 
|  | SubresourceUrlBuilder& operator=(const SubresourceUrlBuilder&) = delete; | 
|  |  | 
|  | const absl::optional<BundleSubresourceInfo>& seller_signals() const { | 
|  | return seller_signals_; | 
|  | } | 
|  |  | 
|  | const absl::optional<BundleSubresourceInfo>& auction_signals() const { | 
|  | return auction_signals_; | 
|  | } | 
|  |  | 
|  | const base::flat_map<url::Origin, BundleSubresourceInfo>& per_buyer_signals() | 
|  | const { | 
|  | return per_buyer_signals_; | 
|  | } | 
|  |  | 
|  | private: | 
|  | const absl::optional<BundleSubresourceInfo> seller_signals_; | 
|  | const absl::optional<BundleSubresourceInfo> auction_signals_; | 
|  | const base::flat_map<url::Origin, BundleSubresourceInfo> per_buyer_signals_; | 
|  | }; | 
|  |  | 
|  | bool CONTENT_EXPORT | 
|  | operator==(const SubresourceUrlBuilder::BundleSubresourceInfo& a, | 
|  | const SubresourceUrlBuilder::BundleSubresourceInfo& b); | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_INTEREST_GROUP_SUBRESOURCE_URL_BUILDER_H_ |