// META: script=/resources/testdriver.js
// META: script=/common/utils.js
// META: script=resources/fledge-util.sub.js
// META: timeout=long
"use strict;"
promise_test(async test => {
const uuid = generateUuid(test);
// To minimize the risk of the auction completing before the abort signal,
// make the bid script hand, and increase the per-buyer script timeout.
await joinInterestGroup(
test, uuid,
createBiddingScriptURL({generateBid: 'while(1);'}));
let abortController = new AbortController();
let promise = runBasicFledgeAuction(
test, uuid,
{ signal: abortController.signal,
perBuyerTimeouts: {'*': 1000}
});
abortController.abort('reason');
try {
await promise;
} catch (e) {
assert_equals(e, 'reason');
return;
}
throw 'Exception unexpectedly not thrown';
}, 'Abort auction.');
promise_test(async test => {
const uuid = generateUuid(test);
await joinInterestGroup(test, uuid);
let abortController = new AbortController();
abortController.abort('reason');
try {
await runBasicFledgeAuction(test, uuid, {signal: abortController.signal});
} catch (e) {
assert_equals(e, 'reason');
return;
}
throw 'Exception unexpectedly not thrown';
}, 'Abort triggered before auction started.');
promise_test(async test => {
const uuid = generateUuid(test);
// This doesn't have the header to be loaded in a fenced frame, but can still
// check that it was requested, which is all this test needs.
let trackingRenderURL =
createTrackerURL(origin, uuid, `track_get`, `tracking_render_url`);
await joinInterestGroup(
test, uuid,
{ads: [{renderURL: trackingRenderURL}]});
let abortController = new AbortController();
let fencedFrameConfig = await runBasicFledgeTestExpectingWinner(
test, uuid, {signal: abortController.signal});
// Aborting now should have no effect - in particular, it should still be
// possible to navigate to the winning ad, and it should still send reports.
abortController.abort('reason');
// Load the fencedFrameConfig in a fenced frame, and make sure reports are
// still sent and the render URL still loaded.
createAndNavigateFencedFrame(test, fencedFrameConfig);
await waitForObservedRequests(
uuid,
[trackingRenderURL, createBidderReportURL(uuid), createSellerReportURL(uuid)]);
}, 'Abort signalled after auction completes.');
promise_test(async test => {
const uuid = generateUuid(test);
await joinInterestGroup(
test, uuid,
{ biddingLogicURL: createBiddingScriptURL(
{ allowComponentAuction: true })});
let abortController = new AbortController();
let componentAuctionConfig = {
seller: window.location.origin,
decisionLogicURL: createDecisionScriptURL(uuid),
interestGroupBuyers: [window.location.origin],
signal: abortController.signal
};
let auctionConfigOverrides = {
decisionLogicURL: createDecisionScriptURL(uuid),
interestGroupBuyers: [],
componentAuctions: [componentAuctionConfig]
};
abortController.abort();
// Aborting a component auction has no effect.
await runBasicFledgeTestExpectingWinner(test, uuid, auctionConfigOverrides);
}, 'Abort component auction.');