blob: fa1b7afe8905322e0d0331ca18da5c3f7ba12c3c [file] [log] [blame]
// 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.
#include "content/browser/interest_group/subresource_url_builder.h"
#include <optional>
#include "base/unguessable_token.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/common/interest_group/auction_config.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace content {
namespace {
using BundleSubresourceInfo = SubresourceUrlBuilder::BundleSubresourceInfo;
blink::DirectFromSellerSignalsSubresource CreateSubresource(
const GURL& bundle_url) {
blink::DirectFromSellerSignalsSubresource subresource;
subresource.bundle_url = bundle_url;
return subresource;
}
TEST(SubresourceUrlBuilderTest, NoSignals) {
SubresourceUrlBuilder builder(std::nullopt);
EXPECT_FALSE(builder.seller_signals());
EXPECT_FALSE(builder.auction_signals());
EXPECT_EQ(0u, builder.per_buyer_signals().size());
}
TEST(SubresourceUrlBuilderTest, Empty) {
// All fields construct to empty / nullopt.
blink::DirectFromSellerSignals direct_from_seller_signals;
SubresourceUrlBuilder builder(direct_from_seller_signals);
EXPECT_FALSE(builder.seller_signals());
EXPECT_FALSE(builder.auction_signals());
EXPECT_EQ(0u, builder.per_buyer_signals().size());
}
TEST(SubresourceUrlBuilderTest, AllFieldsPopulated) {
const url::Origin buyer1_origin =
url::Origin::Create(GURL("https://buyer1.test"));
const url::Origin buyer2_origin =
url::Origin::Create(GURL("https://buyer2.test"));
const GURL bundle_url1 = GURL("https://seller.test/bundle1");
const GURL bundle_url2 = GURL("https://seller.test/bundle2");
blink::DirectFromSellerSignals direct_from_seller_signals;
direct_from_seller_signals.prefix = GURL("https://seller.test/signals");
blink::DirectFromSellerSignalsSubresource buyer1_signals =
CreateSubresource(bundle_url1);
direct_from_seller_signals.per_buyer_signals[buyer1_origin] = buyer1_signals;
blink::DirectFromSellerSignalsSubresource buyer2_signals =
CreateSubresource(bundle_url2);
direct_from_seller_signals.per_buyer_signals[buyer2_origin] = buyer2_signals;
blink::DirectFromSellerSignalsSubresource seller_signals =
CreateSubresource(bundle_url1);
direct_from_seller_signals.seller_signals = seller_signals;
blink::DirectFromSellerSignalsSubresource auction_signals =
CreateSubresource(bundle_url2);
direct_from_seller_signals.auction_signals = auction_signals;
SubresourceUrlBuilder builder(direct_from_seller_signals);
ASSERT_TRUE(builder.seller_signals());
EXPECT_EQ(GURL("https://seller.test/signals?sellerSignals"),
builder.seller_signals()->subresource_url);
EXPECT_EQ(bundle_url1,
builder.seller_signals()->info_from_renderer.bundle_url);
EXPECT_EQ(seller_signals.token,
builder.seller_signals()->info_from_renderer.token);
ASSERT_TRUE(builder.auction_signals());
EXPECT_EQ(GURL("https://seller.test/signals?auctionSignals"),
builder.auction_signals()->subresource_url);
EXPECT_EQ(bundle_url2,
builder.auction_signals()->info_from_renderer.bundle_url);
EXPECT_EQ(auction_signals.token,
builder.auction_signals()->info_from_renderer.token);
ASSERT_EQ(2u, builder.per_buyer_signals().size());
const BundleSubresourceInfo& buyer1_full_info =
builder.per_buyer_signals().at(buyer1_origin);
EXPECT_EQ(GURL("https://seller.test/"
"signals?perBuyerSignals=https%3A%2F%2Fbuyer1.test"),
buyer1_full_info.subresource_url);
EXPECT_EQ(bundle_url1, buyer1_full_info.info_from_renderer.bundle_url);
EXPECT_EQ(buyer1_signals.token, buyer1_full_info.info_from_renderer.token);
const BundleSubresourceInfo& buyer2_full_info =
builder.per_buyer_signals().at(buyer2_origin);
EXPECT_EQ(GURL("https://seller.test/"
"signals?perBuyerSignals=https%3A%2F%2Fbuyer2.test"),
buyer2_full_info.subresource_url);
EXPECT_EQ(bundle_url2, buyer2_full_info.info_from_renderer.bundle_url);
EXPECT_EQ(buyer2_signals.token, buyer2_full_info.info_from_renderer.token);
}
} // namespace
} // namespace content