0

Add render_url alias for renderURL to prevWins in FLEDGE

Bug: 1432707
Change-Id: Ie243a0a09550688ba25868066e39b80784f7009b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4580612
Auto-Submit: Russ Hamilton <behamilton@google.com>
Reviewed-by: Caleb Raitto <caraitto@chromium.org>
Commit-Queue: Caleb Raitto <caraitto@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1152160}
This commit is contained in:
Russ Hamilton
2023-06-01 21:55:36 +00:00
committed by Chromium LUCI CQ
parent 38a60db3c2
commit 81a62e5b68
2 changed files with 35 additions and 17 deletions
content/services/auction_worklet

@ -50,20 +50,35 @@ v8::MaybeLocal<v8::Value> CreatePrevWinsArray(
}
DCHECK(win_values[1]->IsObject());
v8::Local<v8::Object> prev_ad = win_values[1].As<v8::Object>();
v8::Local<v8::Value> serialized_metadata;
v8::Local<v8::Value> metadata;
// TODO(crbug.com/1448936): Remove this condition logic when we can assume
// it is true (30 days after switching to a Chrome version at least this
// recent).
// If prev_ad has "renderURL" instead of "render_url" it must be the newer
// version. In that version the metadata is still kept as serialized JSON
// and needs to be parsed again. If it has metadata, parse it.
if (prev_ad->Has(context, render_url_key).FromMaybe(false) &&
prev_ad->Get(context, metadata_key).ToLocal(&serialized_metadata) &&
serialized_metadata->IsString()) {
if (!v8::JSON::Parse(context, serialized_metadata.As<v8::String>())
.ToLocal(&metadata) ||
!prev_ad->Set(context, metadata_key, metadata).FromMaybe(false)) {
// We also need to provide the render URL in a "render_url" field for
// backward compatibility.
// TODO(crbug.com/1441988): Remove render_url alias when it is no longer
// needed for compatibility.
if (prev_ad->Has(context, render_url_key).FromMaybe(false)) {
v8::Local<v8::Value> serialized_metadata;
v8::Local<v8::Value> metadata;
if (prev_ad->Get(context, metadata_key).ToLocal(&serialized_metadata) &&
serialized_metadata->IsString()) {
if (!v8::JSON::Parse(context, serialized_metadata.As<v8::String>())
.ToLocal(&metadata) ||
!prev_ad->Set(context, metadata_key, metadata).FromMaybe(false)) {
return v8::MaybeLocal<v8::Value>();
}
}
// For compatibility we need to provide the render URL as the "render_url"
// attribute in addition to the "renderURL" attribute.
v8::Local<v8::Value> render_url;
if (!prev_ad->Get(context, render_url_key).ToLocal(&render_url) ||
!prev_ad
->Set(context, v8_helper->CreateStringFromLiteral("render_url"),
render_url)
.FromMaybe(false)) {
return v8::MaybeLocal<v8::Value>();
}
}

@ -3721,40 +3721,43 @@ TEST_F(BidderWorkletTest, GenerateBidPrevWins) {
{
CreateWinList(win1),
"browserSignals.prevWins",
R"([[200,{"renderURL":"ad1"}]])",
R"([[200,{"renderURL":"ad1","render_url":"ad1"}]])",
},
// Make sure it's passed on as an object and not a string.
{
CreateWinList(win1),
"browserSignals.prevWins[0]",
R"([200,{"renderURL":"ad1"}])",
R"([200,{"renderURL":"ad1","render_url":"ad1"}])",
},
// Test rounding.
{
CreateWinList(win2),
"browserSignals.prevWins",
R"([[100,{"renderURL":"ad2","metadata":{"key":"value"}}]])",
R"([[100,{"renderURL":"ad2",)"
R"("metadata":{"key":"value"},"render_url":"ad2"}]])",
},
// Multiple previous wins.
{
CreateWinList(win1, win2),
"browserSignals.prevWins",
R"([[200,{"renderURL":"ad1"}],)"
R"([100,{"renderURL":"ad2","metadata":{"key":"value"}}]])",
R"([[200,{"renderURL":"ad1","render_url":"ad1"}],)"
R"([100,{"renderURL":"ad2",)"
R"("metadata":{"key":"value"},"render_url":"ad2"}]])",
},
// Times are trimmed at 0.
{
CreateWinList(future_win),
"browserSignals.prevWins",
R"([[0,{"renderURL":"future_ad"}]])",
R"([[0,{"renderURL":"future_ad","render_url":"future_ad"}]])",
},
// Out of order wins should be sorted.
{
CreateWinList(win2, future_win, win1),
"browserSignals.prevWins",
R"([[200,{"renderURL":"ad1"}],)"
R"([100,{"renderURL":"ad2","metadata":{"key":"value"}}],)"
R"([0,{"renderURL":"future_ad"}]])",
R"([[200,{"renderURL":"ad1","render_url":"ad1"}],)"
R"([100,{"renderURL":"ad2",)"
R"("metadata":{"key":"value"},"render_url":"ad2"}],)"
R"([0,{"renderURL":"future_ad","render_url":"future_ad"}]])",
},
};