Skip to content

Commit

Permalink
FLEDGE: Handle creative scanning info in TrustedSignalsRequestManager
Browse files Browse the repository at this point in the history
See WICG/turtledove#792 (comment) for more context.

Bug: 383513677
Change-Id: I9df5d3ca4f03e1d57a162e7981bab824331c2460
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6165448
Reviewed-by: mmenke <mmenke@chromium.org>
Commit-Queue: Maks Orlovich <morlovich@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1406780}
  • Loading branch information
Maks Orlovich authored and Chromium LUCI CQ committed Jan 15, 2025
1 parent 83ff481 commit ac14ccf
Show file tree
Hide file tree
Showing 10 changed files with 522 additions and 175 deletions.
1 change: 1 addition & 0 deletions content/services/auction_worklet/bidder_worklet.cc
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,7 @@ BidderWorklet::BidderWorklet(
/*automatically_send_requests=*/false, top_window_origin,
*trusted_bidding_signals_url, experiment_group_id,
trusted_bidding_signals_slot_size_param, std::move(public_key),
/*send_creative_scanning_metadata=*/false,
v8_helpers_[GetNextThreadIndex()].get())
: nullptr);

Expand Down
16 changes: 12 additions & 4 deletions content/services/auction_worklet/seller_worklet.cc
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,7 @@ SellerWorklet::SellerWorklet(
/*experiment_group_id=*/experiment_group_id,
/*trusted_bidding_signals_slot_size_param=*/std::string(),
std::move(public_key),
/*send_creative_scanning_metadata=*/false,
v8_helpers_[get_next_thread_index_callback_.Run()].get())
: nullptr);
trusted_signals_relation_ = ClassifyTrustedSignals(
Expand Down Expand Up @@ -2152,23 +2153,30 @@ void SellerWorklet::StartFetchingSignalsForTask(
SignalsOriginRelation::kPermittedCrossOriginSignals);

score_ad_task->waiting_for_signals_fetch = true;
TrustedSignals::CreativeInfo main_ad;
main_ad.ad_descriptor.url = score_ad_task->browser_signal_render_url;
std::set<TrustedSignals::CreativeInfo> component_ads;
for (const auto& component_url :
score_ad_task->browser_signal_ad_components) {
TrustedSignals::CreativeInfo component_info;
component_info.ad_descriptor.url = GURL(component_url);
component_ads.insert(std::move(component_info));
}
if (trusted_signals_request_manager_->HasPublicKey()) {
DCHECK(base::FeatureList::IsEnabled(
blink::features::kFledgeTrustedSignalsKVv2Support));

score_ad_task->trusted_scoring_signals_request =
trusted_signals_request_manager_->RequestKVv2ScoringSignals(
score_ad_task->browser_signal_render_url,
score_ad_task->browser_signal_ad_components,
std::move(main_ad), std::move(component_ads),
score_ad_task->browser_signal_interest_group_owner,
score_ad_task->bidder_joining_origin,
base::BindOnce(&SellerWorklet::OnTrustedScoringSignalsDownloaded,
base::Unretained(this), score_ad_task));
} else {
score_ad_task->trusted_scoring_signals_request =
trusted_signals_request_manager_->RequestScoringSignals(
score_ad_task->browser_signal_render_url,
score_ad_task->browser_signal_ad_components,
std::move(main_ad), std::move(component_ads),
score_ad_task->auction_ad_config_non_shared_params
.max_trusted_scoring_signals_url_length,
base::BindOnce(&SellerWorklet::OnTrustedScoringSignalsDownloaded,
Expand Down
42 changes: 23 additions & 19 deletions content/services/auction_worklet/trusted_signals.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include "content/services/auction_worklet/trusted_signals.h"

#include <algorithm>
#include <cstddef>
#include <functional>
#include <memory>
Expand All @@ -20,7 +21,6 @@
#include "base/memory/ptr_util.h"
#include "base/memory/scoped_refptr.h"
#include "base/metrics/histogram_functions.h"
#include "base/ranges/algorithm.h"
#include "base/strings/escape.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
Expand Down Expand Up @@ -375,8 +375,11 @@ TrustedSignals::CreativeInfo::CreativeInfo(
TrustedSignals::CreativeInfo::~CreativeInfo() = default;

TrustedSignals::CreativeInfo::CreativeInfo(CreativeInfo&&) = default;
TrustedSignals::CreativeInfo::CreativeInfo(const CreativeInfo&) = default;
TrustedSignals::CreativeInfo& TrustedSignals::CreativeInfo::operator=(
CreativeInfo&&) = default;
TrustedSignals::CreativeInfo& TrustedSignals::CreativeInfo::operator=(
const CreativeInfo&) = default;

bool TrustedSignals::CreativeInfo::operator<(
const TrustedSignals::CreativeInfo& other) const {
Expand Down Expand Up @@ -478,18 +481,6 @@ GURL TrustedSignals::BuildTrustedScoringSignalsURL(
return full_signals_url;
}

// static
std::set<TrustedSignals::CreativeInfo> TrustedSignals::ConvertToCreativeInfoSet(
const std::set<std::string>& urls) {
std::set<TrustedSignals::CreativeInfo> result;
for (const auto& url : urls) {
TrustedSignals::CreativeInfo entry;
entry.ad_descriptor.url = GURL(url);
result.insert(std::move(entry));
}
return result;
}

std::unique_ptr<TrustedSignals> TrustedSignals::LoadBiddingSignals(
network::mojom::URLLoaderFactory* url_loader_factory,
mojo::PendingRemote<auction_worklet::mojom::AuctionNetworkEventsHandler>
Expand Down Expand Up @@ -529,19 +520,32 @@ std::unique_ptr<TrustedSignals> TrustedSignals::LoadScoringSignals(
network::mojom::URLLoaderFactory* url_loader_factory,
mojo::PendingRemote<auction_worklet::mojom::AuctionNetworkEventsHandler>
auction_network_events_handler,
std::set<std::string> render_urls,
std::set<std::string> ad_component_render_urls,
std::set<CreativeInfo> ads,
std::set<CreativeInfo> ad_components,
const std::string& hostname,
const GURL& trusted_scoring_signals_url,
std::optional<uint16_t> experiment_group_id,
bool send_creative_scanning_metadata,
scoped_refptr<AuctionV8Helper> v8_helper,
LoadSignalsCallback load_signals_callback) {
DCHECK(!render_urls.empty());
DCHECK(!ads.empty());

auto extract_render_url = [](const CreativeInfo& c) {
return c.ad_descriptor.url.spec();
};

std::set<std::string> render_urls;
std::ranges::transform(ads, std::inserter(render_urls, render_urls.end()),
extract_render_url);
std::set<std::string> ad_component_render_urls;
std::ranges::transform(
ad_components,
std::inserter(ad_component_render_urls, ad_component_render_urls.end()),
extract_render_url);

GURL full_signals_url = BuildTrustedScoringSignalsURL(
/*send_creative_scanning_metadata=*/false, hostname,
trusted_scoring_signals_url, ConvertToCreativeInfoSet(render_urls),
ConvertToCreativeInfoSet(ad_component_render_urls), experiment_group_id);
send_creative_scanning_metadata, hostname, trusted_scoring_signals_url,
ads, ad_components, experiment_group_id);

std::unique_ptr<TrustedSignals> trusted_signals =
base::WrapUnique(new TrustedSignals(
Expand Down
12 changes: 5 additions & 7 deletions content/services/auction_worklet/trusted_signals.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,9 @@ class CONTENT_EXPORT TrustedSignals {
~CreativeInfo();

CreativeInfo(CreativeInfo&&);
CreativeInfo(const CreativeInfo&);
CreativeInfo& operator=(CreativeInfo&&);
CreativeInfo& operator=(const CreativeInfo&);

bool operator<(const CreativeInfo& other) const;

Expand Down Expand Up @@ -208,11 +210,6 @@ class CONTENT_EXPORT TrustedSignals {
const std::set<CreativeInfo>& component_ads,
std::optional<uint16_t> experiment_group_id);

// This is a transitional method while we're migrating to a new signature
// for loading scoring signals.
static std::set<CreativeInfo> ConvertToCreativeInfoSet(
const std::set<std::string>& urls);

// Constructs a TrustedSignals for fetching bidding signals, and starts
// the fetch. `trusted_bidding_signals_url` must be the base URL (no query
// params added). Callback will be invoked asynchronously once the data
Expand Down Expand Up @@ -245,11 +242,12 @@ class CONTENT_EXPORT TrustedSignals {
network::mojom::URLLoaderFactory* url_loader_factory,
mojo::PendingRemote<auction_worklet::mojom::AuctionNetworkEventsHandler>
auction_network_events_handler,
std::set<std::string> render_urls,
std::set<std::string> ad_component_render_urls,
std::set<CreativeInfo> ads,
std::set<CreativeInfo> ad_components,
const std::string& hostname,
const GURL& trusted_scoring_signals_url,
std::optional<uint16_t> experiment_group_id,
bool send_creative_scanning_metadata,
scoped_refptr<AuctionV8Helper> v8_helper,
LoadSignalsCallback load_signals_callback);

Expand Down
Loading

0 comments on commit ac14ccf

Please sign in to comment.