summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/fledge/tentative/additional-bids.https.window.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/fledge/tentative/additional-bids.https.window.js')
-rw-r--r--testing/web-platform/tests/fledge/tentative/additional-bids.https.window.js146
1 files changed, 146 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fledge/tentative/additional-bids.https.window.js b/testing/web-platform/tests/fledge/tentative/additional-bids.https.window.js
new file mode 100644
index 0000000000..0e1d22c261
--- /dev/null
+++ b/testing/web-platform/tests/fledge/tentative/additional-bids.https.window.js
@@ -0,0 +1,146 @@
+// META: script=/resources/testdriver.js
+// META: script=/common/utils.js
+// META: script=resources/fledge-util.sub.js
+// META: script=/common/subset-tests.js
+// META: timeout=long
+// META: variant=?1-last
+
+"use strict;"
+
+// This file contains tests for additional bids and negative targeting.
+//
+// TODO:
+// - test that an negatively targeted additional bid is suppressed.
+// - test that an incorrectly signed additional bid is not negative targeted.
+// - test that an missing-signature additional bid is not negative targeted.
+// - test that an additional bid with some correct signatures can be negative.
+// negative targeted for those negative interest groups whose signatures
+// match.
+// - test an additional bid with multiple negative interest groups.
+// - test that multiple negative interest groups with mismatched joining origins
+// is not negative targeted.
+// - test that additional bids can be fetched using an iframe navigation.
+// - test that additional bids are not fetched using an iframe navigation for
+// which the `adAuctionHeaders=true` attribute is not specified.
+// - test that additional bids are not fetched using a Fetch request for which
+// `adAuctionHeaders: true` is not specified.
+// - test that an additional bid with an incorrect auction nonce is not used
+// included in an auction. Same for seller and top-level seller.
+// - test that correctly formatted additional bids are included in an auction
+// when fetched alongside malformed additional bid headers by a Fetch
+// request.
+// - test that correctly formatted additional bids are included in an auction
+// when fetched alongside malformed additional bid headers by an iframe
+// navigation.
+// - test that reportWin is not used for reporting an additional bid win.
+// - test that additional bids can *not* be fetched from iframe subresource
+// requests.
+// - test that an auction nonce can only be used once, and a second auction
+// trying to reuse an auction immediately fails.
+// - test that an auction nonce must be created in the same window/tab as the
+// call to runAdAuction.
+// - test reportAdditionalBidWin with each of no metadata, null metadata, and
+// an object metadata.
+// - test that an auction running in one tab can't see an additional bid loaded
+// in a new tab.
+// - test that two auctions running with different nonces only get the
+// additional bids fetched with their auction nonce.
+// - test that two auctions running with different nonces only get the
+// additional bids fetched with their auction nonce, when both additional
+// bids are retrieved with one fetch.
+// - test that a multiseller auction with two component auctions can direct
+// additional bids to the correct component auctions.
+// - test that two auctions running with different nonces only get the
+// additional bids fetched with their auction nonce.
+// - test that two auctions running with different nonces only get the
+// additional bids fetched with their auction nonce, when both additional
+// bids are retrieved with one fetch.
+// - test that an additional bid can compete against an interest group bid and
+// lose.
+// - test that an additional bid can compete against an interest group bid and
+// win.
+// - test that a malformed additional bid causes that one additional bid to be
+// ignored, but the rest of the auction (and other additional bids, even
+// from the same fetch) continue on.
+// - test (in join-leave-ad-interest-group.https.window.js) that an IG that
+// provides `additionalBidKey` fails if the key fails to decode, or if
+// that IG also provides `ads`, or if it provides `updateURL`.
+// - test that an IG update cannot cause a regular interest group (one that
+// does not provide `additionalBidKey`) to become a negative interest
+// group (one that does provide `additionalBidKey`).
+// - test (in auction-config-passed-to-worklets.https.window.js) that a
+// multi-seller auction fails if the top-level auction provides
+// a value for `additionalBids`.
+// - test (in auction-config-passed-to-worklets.https.window.js) that an auction
+// fails if it provides `additionalBids` but not `auctionNonce`, or if it
+// provides `additionalBids` but not `interestGroupBuyers`.
+
+// The auction is run with the seller being the same as the document origin.
+// The request to fetch additional bids must be issued to the seller's origin
+// for ad auction headers interception to associate it with this auction.
+const SINGLE_SELLER_AUCTION_SELLER = window.location.origin;
+
+// Single-seller auction with a single buyer who places a single additional
+// bid. As the only bid, this wins.
+subsetTest(promise_test, async test => {
+ const uuid = generateUuid(test);
+ const auctionNonce = await navigator.createAuctionNonce();
+ const seller = SINGLE_SELLER_AUCTION_SELLER;
+
+ const buyer = OTHER_ORIGIN1;
+ const additionalBid = createAdditionalBid(
+ uuid, auctionNonce, seller, buyer, 'horses', 1.99);
+
+ await runAdditionalBidTest(
+ test, uuid, [buyer], auctionNonce,
+ fetchAdditionalBids(seller, [additionalBid]),
+ /*highestScoringOtherBid=*/0,
+ /*winningAdditionalBidId=*/'horses');
+}, 'single valid additional bid');
+
+// Single-seller auction with a two buyers competing with additional bids.
+subsetTest(promise_test, async test => {
+ const uuid = generateUuid(test);
+ const auctionNonce = await navigator.createAuctionNonce();
+ const seller = SINGLE_SELLER_AUCTION_SELLER;
+
+ const buyer1 = OTHER_ORIGIN1;
+ const additionalBid1 = createAdditionalBid(
+ uuid, auctionNonce, seller, buyer1, 'horses', 1.99);
+
+ const buyer2 = OTHER_ORIGIN2;
+ const additionalBid2 = createAdditionalBid(
+ uuid, auctionNonce, seller, buyer2, 'planes', 2.99);
+
+ await runAdditionalBidTest(
+ test, uuid, [buyer1, buyer2], auctionNonce,
+ fetchAdditionalBids(seller, [additionalBid1, additionalBid2]),
+ /*highestScoringOtherBid=*/1.99,
+ /*winningAdditionalBidId=*/'planes');
+}, 'two valid additional bids');
+
+// Same as the test above, except that this uses two Fetch requests instead of
+// one to retrieve the additional bids.
+subsetTest(promise_test, async test => {
+ const uuid = generateUuid(test);
+ const auctionNonce = await navigator.createAuctionNonce();
+ const seller = SINGLE_SELLER_AUCTION_SELLER;
+
+ const buyer1 = OTHER_ORIGIN1;
+ const additionalBid1 = createAdditionalBid(
+ uuid, auctionNonce, seller, buyer1, 'horses', 1.99);
+
+ const buyer2 = OTHER_ORIGIN2;
+ const additionalBid2 = createAdditionalBid(
+ uuid, auctionNonce, seller, buyer2, 'planes', 2.99);
+
+
+ await runAdditionalBidTest(
+ test, uuid, [buyer1, buyer2], auctionNonce,
+ Promise.all([
+ fetchAdditionalBids(seller, [additionalBid1]),
+ fetchAdditionalBids(seller, [additionalBid2])
+ ]),
+ /*highestScoringOtherBid=*/1.99,
+ /*winningAdditionalBidId=*/'planes');
+}, 'two valid additional bids from two distinct Fetch requests');