661 lines
26 KiB
JavaScript
661 lines
26 KiB
JavaScript
// META: script=/resources/testdriver.js
|
|
// META: script=/resources/testdriver-vendor.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-4
|
|
// META: variant=?5-8
|
|
// META: variant=?9-12
|
|
// META: variant=?13-16
|
|
// META: variant=?17-20
|
|
// META: variant=?21-24
|
|
// META: variant=?25-28
|
|
// META: variant=?29-32
|
|
// META: variant=?33-36
|
|
|
|
"use strict";
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/ null,
|
|
/*expectedAuctionSignals=*/ null, /*expectedPerBuyerSignals=*/ null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{directFromSellerSignalsHeaderAdSlot: 'adSlot/0'});
|
|
}, 'Test directFromSellerSignals with empty Ad-Auction-Signals header.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/1',
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
|
|
);
|
|
}, 'Test directFromSellerSignals with only sellerSignals.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
'auctionSignals/2', /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/2' }
|
|
);
|
|
}, 'Test directFromSellerSignals with only auctionSignals.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
/*expectedAuctionSignals=*/null, 'perBuyerSignals/3'),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/3' }
|
|
);
|
|
}, 'Test directFromSellerSignals with only perBuyerSignals.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/4',
|
|
'auctionSignals/4', 'perBuyerSignals/4'),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/4' }
|
|
);
|
|
}, 'Test directFromSellerSignals with sellerSignals, auctionSignals and perBuyerSignals.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/1',
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
|
|
);
|
|
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
'auctionSignals/2', /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/2' }
|
|
);
|
|
}, 'Test directFromSellerSignals with single fetch and multiple auctions');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
const ad_slot = Promise.resolve('adSlot/4');
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/4',
|
|
'auctionSignals/4', 'perBuyerSignals/4'),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: ad_slot }
|
|
);
|
|
}, 'Test directFromSellerSignals with resolved promise ad slot.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await joinInterestGroup(test, uuid);
|
|
|
|
const adSlot = Promise.reject(new Error('This is a rejected promise.'));
|
|
let auctionConfig =
|
|
{ seller: window.location.origin,
|
|
interestGroupBuyers: [window.location.origin],
|
|
resolveToConfig: true,
|
|
decisionLogicURL: createDecisionScriptURL(uuid),
|
|
directFromSellerSignalsHeaderAdSlot: adSlot };
|
|
|
|
try {
|
|
await navigator.runAdAuction(auctionConfig);
|
|
} catch(e) {
|
|
assert_true(e instanceof TypeError);
|
|
return;
|
|
}
|
|
throw "Exception unexpectedly not thrown.";
|
|
}, 'Test directFromSellerSignals with rejected promise ad slot.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
const validator = directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/4',
|
|
'auctionSignals/4', 'perBuyerSignals/4');
|
|
let reportResult = `if (!(${validator.reportResultSuccessCondition})) {
|
|
sendReportTo('${createSellerReportURL(uuid, 'error')}');
|
|
return false;
|
|
}
|
|
${validator.reportResult}`;
|
|
let reportWin = `if (!(${validator.reportWinSuccessCondition})) {
|
|
sendReportTo('${createBidderReportURL(uuid, 'error')}');
|
|
return false;
|
|
}
|
|
${validator.reportWin}`;
|
|
let decisionScriptURLParams = { scoreAd : validator.scoreAd,
|
|
reportResult : reportResult };
|
|
let biddingScriptURLParams = { generateBid : validator.generateBid,
|
|
reportWin : reportWin };
|
|
let interestGroupOverrides =
|
|
{ biddingLogicURL: createBiddingScriptURL(biddingScriptURLParams) };
|
|
await joinInterestGroup(test, uuid, interestGroupOverrides);
|
|
|
|
let adSlotResolve = null;
|
|
const adSlotPromise = new Promise((resolve, reject) => { adSlotResolve = resolve });
|
|
let auctionConfig =
|
|
{ seller: window.location.origin,
|
|
interestGroupBuyers: [window.location.origin],
|
|
resolveToConfig: true,
|
|
decisionLogicURL: createDecisionScriptURL(uuid, decisionScriptURLParams),
|
|
directFromSellerSignalsHeaderAdSlot: adSlotPromise };
|
|
let resultPromise = navigator.runAdAuction(auctionConfig);
|
|
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
adSlotResolve('adSlot/4');
|
|
let result = await resultPromise;
|
|
createAndNavigateFencedFrame(test, result);
|
|
await waitForObservedRequests(uuid, [createSellerReportURL(uuid), createBidderReportURL(uuid)]);
|
|
}, 'Test directFromSellerSignals that runAdAuction will wait until the promise of fetch is resolved.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/5',
|
|
'auctionSignals/5', /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/5' }
|
|
);
|
|
}, 'Test directFromSellerSignals with mismatched perBuyerSignals.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': '*' });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/5',
|
|
'auctionSignals/5', /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/5' }
|
|
);
|
|
}, 'Test directFromSellerSignals does not support wildcard for buyerOrigin of perBuyerSignals.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/non-exist' }
|
|
);
|
|
}, 'Test directFromSellerSignals with non-existent adSlot.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: null }
|
|
);
|
|
}, 'Test directFromSellerSignals with null directFromSellerSignalsHeaderAdSlot.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)]
|
|
);
|
|
}, 'Test directFromSellerSignals with no directFromSellerSignalsHeaderAdSlot.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Negative-Test-Option': 'HTTP Error' });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot' }
|
|
);
|
|
}, 'Test directFromSellerSignals with HTTP error.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Negative-Test-Option': 'No Ad-Auction-Signals Header' });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot' }
|
|
);
|
|
}, 'Test directFromSellerSignals with no returned Ad-Auction-Signals Header.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Negative-Test-Option': 'Invalid Json' });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot' }
|
|
);
|
|
}, 'Test directFromSellerSignals with invalid json in Ad-Auction-Signals header.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
let codeToInsert = directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null);
|
|
codeToInsert.decisionScriptURLOrigin = OTHER_ORIGIN1;
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test, uuid, codeToInsert,
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/4',
|
|
seller: OTHER_ORIGIN1 }
|
|
);
|
|
}, 'Test directFromSellerSignals with different fetch and seller origins.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
let codeToInsert = directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/4',
|
|
'auctionSignals/4', 'perBuyerSignals/4');
|
|
codeToInsert.decisionScriptURLOrigin = OTHER_ORIGIN1;
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin }, OTHER_ORIGIN1);
|
|
await runReportTest(
|
|
test, uuid, codeToInsert,
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/4',
|
|
seller: OTHER_ORIGIN1 }
|
|
);
|
|
}, 'Test directFromSellerSignals with same fetch and seller origins.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
let iframe = await createIframe(test, OTHER_ORIGIN1);
|
|
await runInFrame(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': OTHER_ORIGIN1 });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/4',
|
|
'auctionSignals/4', 'perBuyerSignals/4'),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid, '1', OTHER_ORIGIN1)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/4',
|
|
interestGroupBuyers: [OTHER_ORIGIN1] }
|
|
);
|
|
}, 'Test directFromSellerSignals different interest group owner origin from top frame.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
let iframe = await createIframe(test, OTHER_ORIGIN1, "join-ad-interest-group; run-ad-auction");
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': OTHER_ORIGIN1 }, OTHER_ORIGIN1);
|
|
await runInFrame(
|
|
test, iframe,
|
|
`await runReportTest(
|
|
test_instance, "${uuid}",
|
|
directFromSellerSignalsValidatorCode(
|
|
"${uuid}", 'sellerSignals/4', 'auctionSignals/4', 'perBuyerSignals/4'),
|
|
// expectedReportURLs
|
|
[createSellerReportURL("${uuid}"), createBidderReportURL("${uuid}")],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/4' })`);
|
|
}, 'Test directFromSellerSignals with fetching in top frame and running auction in iframe.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
let iframe = await createIframe(test, OTHER_ORIGIN1, "join-ad-interest-group; run-ad-auction");
|
|
await runInFrame(
|
|
test, iframe,
|
|
`await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await runReportTest(
|
|
test_instance, "${uuid}",
|
|
directFromSellerSignalsValidatorCode(
|
|
"${uuid}", 'sellerSignals/4',
|
|
'auctionSignals/4', 'perBuyerSignals/4'),
|
|
// expectedReportURLs
|
|
[createSellerReportURL("${uuid}"), createBidderReportURL("${uuid}")],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/4' })`);
|
|
}, 'Test directFromSellerSignals with fetching and running auction in the same iframe.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
let iframe1 = await createIframe(test, OTHER_ORIGIN1);
|
|
let iframe2 = await createIframe(test, OTHER_ORIGIN2, "join-ad-interest-group; run-ad-auction");
|
|
await runInFrame(
|
|
test, iframe1,
|
|
`await fetchDirectFromSellerSignals({ 'Buyer-Origin': OTHER_ORIGIN2 }, OTHER_ORIGIN2);`);
|
|
await runInFrame(
|
|
test, iframe2,
|
|
`await runReportTest(
|
|
test_instance, "${uuid}",
|
|
directFromSellerSignalsValidatorCode(
|
|
"${uuid}", 'sellerSignals/4',
|
|
'auctionSignals/4', 'perBuyerSignals/4'),
|
|
// expectedReportURLs
|
|
[createSellerReportURL("${uuid}"), createBidderReportURL("${uuid}")],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/4' })`);
|
|
}, 'Test directFromSellerSignals with fetching in iframe 1 and running auction in iframe 2.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
let iframe = await createIframe(test, OTHER_ORIGIN1);
|
|
await runInFrame(
|
|
test, iframe,
|
|
`await fetchDirectFromSellerSignals(
|
|
{ 'Buyer-Origin': "${window.location.origin}" }, "${window.location.origin}");`);
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/4',
|
|
'auctionSignals/4', 'perBuyerSignals/4'),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/4'}
|
|
);
|
|
}, 'Test directFromSellerSignals with fetching in iframe and running auction in top frame.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Negative-Test-Option': 'Network Error' });
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals',
|
|
'auctionSignals', /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot' }
|
|
);
|
|
}, 'Test directFromSellerSignals with network error.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
let dfss = false;
|
|
navigator.runAdAuction({
|
|
get directFromSellerSignalsHeaderAdSlot() { dfss = true; }
|
|
}).catch((e) => {});
|
|
assert_true(dfss);
|
|
}, 'Test directFromSellerSignals feature detection.');
|
|
|
|
// The version of directFromSellerSignals based on web bundles preceded the
|
|
// header-based version -- the web bundle version has been deprecated and
|
|
// removed.
|
|
subsetTest(promise_test, async test => {
|
|
let dfss = false;
|
|
navigator.runAdAuction({
|
|
get directFromSellerSignals() { dfss = true; }
|
|
}).catch((e) => {});
|
|
assert_false(dfss);
|
|
}, 'Negative test for deprecated and removed web-bundle directFromSellerSignals.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await fetchDirectFromSellerSignals(
|
|
{ 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Overwrite adSlot/1'});
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'altSellerSignals/1',
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
|
|
);
|
|
}, 'Test directFromSellerSignals with 2 responses -- the later overwrites the former.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await fetchDirectFromSellerSignals(
|
|
{ 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Overwrite adSlot/1'});
|
|
await fetchDirectFromSellerSignals(
|
|
{ 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Overwrite adSlot/1 v2'});
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'altV2SellerSignals/1',
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
|
|
);
|
|
}, 'Test directFromSellerSignals with 3 responses -- the last response overwrites the former responses.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
|
|
await fetchDirectFromSellerSignals(
|
|
{ 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Overwrite adSlot/1'});
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/null,
|
|
'auctionSignals/2', /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/2' }
|
|
);
|
|
}, 'Test directFromSellerSignals with 2 responses -- old non-overwritten ad slot remains.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals(
|
|
{ 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Duplicate adSlot/1'});
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'firstSellerSignals/1',
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
|
|
);
|
|
}, 'Test invalid directFromSellerSignals with duplicate adSlot in response -- the second is ignored.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals(
|
|
{ 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Duplicate adSlot/1'});
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'nonDupSellerSignals/2',
|
|
/*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/2' }
|
|
);
|
|
}, 'Test invalid directFromSellerSignals with duplicate adSlot in response, selecting a non duplicated adSlot.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals(
|
|
{ 'Buyer-Origin': window.location.origin,
|
|
'Alternative-Response': 'Two keys with same values'});
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sameSellerSignals',
|
|
'sameAuctionSignals', 'samePerBuyerSignals'),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{ directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
|
|
);
|
|
}, 'Test invalid directFromSellerSignals with duplicate values in response.');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({'Buyer-Origin': window.location.origin});
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, 'sellerSignals/null',
|
|
/*expectedAuctionSignals=*/ null, /*expectedPerBuyerSignals=*/ null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{directFromSellerSignalsHeaderAdSlot: 'null'});
|
|
}, 'directFromSellerSignals slot named "null"');
|
|
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
await fetchDirectFromSellerSignals({'Buyer-Origin': window.location.origin});
|
|
await runReportTest(
|
|
test, uuid,
|
|
directFromSellerSignalsValidatorCode(
|
|
uuid, /*expectedSellerSignals=*/ null,
|
|
/*expectedAuctionSignals=*/ null, /*expectedPerBuyerSignals=*/ null),
|
|
// expectedReportURLs
|
|
[createSellerReportURL(uuid), createBidderReportURL(uuid)],
|
|
// renderURLOverride
|
|
null,
|
|
// auctionConfigOverrides
|
|
{directFromSellerSignalsHeaderAdSlot: null});
|
|
}, 'null directFromSellerSignals slot');
|