738 lines
24 KiB
JavaScript
738 lines
24 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-5
|
|
// META: variant=?6-10
|
|
// META: variant=?11-15
|
|
// META: variant=?16-20
|
|
// META: variant=?21-25
|
|
// META: variant=?26-30
|
|
// META: variant=?31-35
|
|
// META: variant=?36-40
|
|
// META: variant=?41-45
|
|
// META: variant=?46-50
|
|
// META: variant=?51-55
|
|
// META: variant=?56-60
|
|
// META: variant=?61-65
|
|
// META: variant=?66-70
|
|
// META: variant=?71-75
|
|
// META: variant=?76-80
|
|
// META: variant=?81-85
|
|
|
|
"use strict";
|
|
|
|
// These tests focus on making sure InterestGroup fields are passed to generateBid(),
|
|
// and are normalized if necessary. This test does not check the behaviors of the
|
|
// fields.
|
|
|
|
// Modifies "ads". Replaces "REPLACE_WITH_UUID" in all "renderURL" fields of
|
|
// objects in "ads" array with "uuid". Generated ad URLs have embedded
|
|
// UUIDs to prevent InterestGroups unexpectedly left over from one test from
|
|
// messing up another test, but these tests need ad URLs before the UUID is
|
|
// generated. To get around that, "REPLACE_WITH_UUID" is used in place of UUIDs
|
|
// and then this is used to replace them with the real UUID.
|
|
function updateAdRenderURLs(ads, uuid) {
|
|
for (let i = 0; i < ads.length; ++i) {
|
|
let ad = ads[i];
|
|
ad.renderURL = ad.renderURL.replace('REPLACE_WITH_UUID', uuid);
|
|
}
|
|
}
|
|
|
|
const makeTest = ({
|
|
// Test name.
|
|
name,
|
|
// InterestGroup field name.
|
|
fieldName,
|
|
// InterestGroup field value, both expected in worklets and the value used
|
|
// when joining the interest group. If undefined, value will not be set in
|
|
// interestGroup, and will be expected to also not be set in the
|
|
// interestGroup passed to generateBid().
|
|
fieldValue,
|
|
// Additional values to use in the InterestGroup passed to joinInterestGroup().
|
|
// If it contains a value for the key specified in `fieldName`, takes
|
|
// precedent over `fieldValue`.
|
|
interestGroupOverrides = {}
|
|
}) => {
|
|
subsetTest(promise_test, async test => {
|
|
const uuid = generateUuid(test);
|
|
|
|
// It's not strictly necessary to replace UUIDs in "adComponents", but do it for consistency.
|
|
if (fieldName === 'ads' || fieldName === 'adComponents' && fieldValue) {
|
|
updateAdRenderURLs(fieldValue, uuid);
|
|
}
|
|
|
|
if (interestGroupOverrides.ads) {
|
|
updateAdRenderURLs(interestGroupOverrides.ads, uuid);
|
|
}
|
|
|
|
if (interestGroupOverrides.adComponents) {
|
|
updateAdRenderURLs(interestGroupOverrides.adComponents, uuid);
|
|
}
|
|
|
|
if (!(fieldName in interestGroupOverrides) && fieldValue !== undefined)
|
|
interestGroupOverrides[fieldName] = fieldValue;
|
|
|
|
let comparison = `deepEquals(interestGroup["${fieldName}"], ${JSON.stringify(fieldValue)})`;
|
|
// In the case it's undefined, require value not to be set.
|
|
if (fieldValue === undefined)
|
|
comparison = `!("${fieldName}" in interestGroup)`;
|
|
|
|
// Prefer to use `interestGroupOverrides.owner` if present. Treat it as a URL
|
|
// and then convert it to an origin because one test passes in a URL.
|
|
let origin = location.origin;
|
|
if (interestGroupOverrides.owner)
|
|
origin = new URL(interestGroupOverrides.owner).origin;
|
|
|
|
interestGroupOverrides.biddingLogicURL =
|
|
createBiddingScriptURL(
|
|
{ origin: origin,
|
|
generateBid:
|
|
`// Delete deprecated "renderUrl" fields from ads and adComponents, if
|
|
// present.
|
|
for (let field in interestGroup) {
|
|
if (field === "ads" || field === "adComponents") {
|
|
for (let i = 0; i < interestGroup[field].length; ++i) {
|
|
let ad = interestGroup[field][i];
|
|
delete ad.renderUrl;
|
|
}
|
|
}
|
|
}
|
|
if (!${comparison})
|
|
throw "Unexpected value: " + JSON.stringify(interestGroup["${fieldName}"]);`
|
|
});
|
|
if (origin !== location.origin) {
|
|
await joinCrossOriginInterestGroup(test, uuid, origin, interestGroupOverrides);
|
|
} else {
|
|
await joinInterestGroup(test, uuid, interestGroupOverrides);
|
|
}
|
|
|
|
await runBasicFledgeTestExpectingWinner(test, uuid, {interestGroupBuyers: [origin]});
|
|
}, name);
|
|
};
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.owner.',
|
|
fieldName: 'owner',
|
|
fieldValue: OTHER_ORIGIN1
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.owner with non-normalized origin.',
|
|
fieldName: 'owner',
|
|
fieldValue: OTHER_ORIGIN1,
|
|
interestGroupOverrides: {owner: ` ${OTHER_ORIGIN1.toUpperCase()} `}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.owner is URL.',
|
|
fieldName: 'owner',
|
|
fieldValue: OTHER_ORIGIN1,
|
|
interestGroupOverrides: {owner: OTHER_ORIGIN1 + '/Foopy'}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.name.',
|
|
fieldName: 'name',
|
|
fieldValue: 'Jim'
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.name with unicode characters.',
|
|
fieldName: 'name',
|
|
fieldValue: '\u2665'
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.name with empty name.',
|
|
fieldName: 'name',
|
|
fieldValue: ''
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.name with unpaired surrogate characters, which should be replaced with "\\uFFFD".',
|
|
fieldName: 'name',
|
|
fieldValue: '\uFFFD,\uFFFD',
|
|
interestGroupOverrides: {name: '\uD800,\uDBF0'}
|
|
});
|
|
|
|
// Since "biddingLogicURL" contains the script itself inline, can't include the entire URL
|
|
// in the script for an equality check. Instead, replace the "generateBid" query parameter
|
|
// in the URL with an empty value before comparing it. This doesn't just delete the entire
|
|
// query parameter to make sure that's correctly passed in.
|
|
subsetTest(promise_test,async test => {
|
|
const uuid = generateUuid(test);
|
|
|
|
let biddingScriptBaseURL = createBiddingScriptURL({origin: OTHER_ORIGIN1, generateBid: ''});
|
|
let biddingLogicURL = createBiddingScriptURL(
|
|
{ origin: OTHER_ORIGIN1,
|
|
generateBid:
|
|
`let biddingScriptBaseURL =
|
|
interestGroup.biddingLogicURL.replace(/generateBid=[^&]*/, "generateBid=");
|
|
if (biddingScriptBaseURL !== "${biddingScriptBaseURL}")
|
|
throw "Wrong bidding script URL: " + interestGroup.biddingLogicURL`
|
|
});
|
|
|
|
await joinCrossOriginInterestGroup(test, uuid, OTHER_ORIGIN1,
|
|
{ biddingLogicURL: biddingLogicURL });
|
|
|
|
await runBasicFledgeTestExpectingWinner(test, uuid, {interestGroupBuyers: [OTHER_ORIGIN1]});
|
|
}, 'InterestGroup.biddingLogicURL.');
|
|
|
|
// Much like above test, but use a relative URL that points to bidding script.
|
|
subsetTest(promise_test,async test => {
|
|
const uuid = generateUuid(test);
|
|
|
|
let biddingScriptBaseURL = createBiddingScriptURL({generateBid: ''});
|
|
let biddingLogicURL = createBiddingScriptURL(
|
|
{ generateBid:
|
|
`let biddingScriptBaseURL =
|
|
interestGroup.biddingLogicURL.replace(/generateBid=[^&]*/, "generateBid=");
|
|
if (biddingScriptBaseURL !== "${biddingScriptBaseURL}")
|
|
throw "Wrong bidding script URL: " + interestGroup.biddingLogicURL`
|
|
});
|
|
biddingLogicURL = biddingLogicURL.replace(BASE_URL, 'foo/../');
|
|
|
|
await joinInterestGroup(test, uuid, { biddingLogicURL: biddingLogicURL });
|
|
|
|
await runBasicFledgeTestExpectingWinner(test, uuid);
|
|
}, 'InterestGroup.biddingLogicURL with relative URL.');
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.lifetimeMs should not be passed in.',
|
|
fieldName: 'lifetimeMs',
|
|
fieldValue: undefined,
|
|
interestGroupOverrides: { lifetimeMs: "120000" }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.priority should not be passed in, since it can be changed by auctions.',
|
|
fieldName: 'priority',
|
|
fieldValue: undefined,
|
|
interestGroupOverrides: { priority: 500 }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.priorityVector undefined.',
|
|
fieldName: 'priorityVector',
|
|
fieldValue: undefined
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.priorityVector empty.',
|
|
fieldName: 'priorityVector',
|
|
fieldValue: {}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.priorityVector.',
|
|
fieldName: 'priorityVector',
|
|
fieldValue: { 'a': -1, 'b': 2 }
|
|
});
|
|
|
|
// TODO: This is currently using USVString internally, so doesn't allow unpaired
|
|
// surrogates, but the spec says it should.
|
|
makeTest({
|
|
name: 'InterestGroup.priorityVector with unpaired surrogate character.',
|
|
fieldName: 'priorityVector',
|
|
fieldValue: { '\uFFFD': -1 },
|
|
interestGroupOverrides: { prioritySignalsOverrides: { '\uD800': -1 } }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.prioritySignalsOverrides should not be passed in, since it can be changed by auctions.',
|
|
fieldName: 'prioritySignalsOverrides',
|
|
fieldValue: undefined,
|
|
interestGroupOverrides: { prioritySignalsOverrides: { 'a': 1, 'b': 2 } }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.enableBiddingSignalsPrioritization not set.',
|
|
fieldName: 'enableBiddingSignalsPrioritization',
|
|
fieldValue: false,
|
|
interestGroupOverrides: { enableBiddingSignalsPrioritization: undefined }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.enableBiddingSignalsPrioritization unrecognized.',
|
|
fieldName: 'enableBiddingSignalsPrioritization',
|
|
// Non-empty strings are treated as true by Javascript. This test is serves
|
|
// to make sure that the 'foo' isn't preserved.
|
|
fieldValue: true,
|
|
interestGroupOverrides: { enableBiddingSignalsPrioritization: 'foo' }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.enableBiddingSignalsPrioritization false.',
|
|
fieldName: 'enableBiddingSignalsPrioritization',
|
|
fieldValue: false
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.enableBiddingSignalsPrioritization true.',
|
|
fieldName: 'enableBiddingSignalsPrioritization',
|
|
fieldValue: true
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.biddingWasmHelperURL not set.',
|
|
fieldName: 'biddingWasmHelperURL',
|
|
fieldValue: undefined
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.biddingWasmHelperURL.',
|
|
fieldName: 'biddingWasmHelperURL',
|
|
fieldValue: `${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py`,
|
|
interestGroupOverrides: {owner: OTHER_ORIGIN1}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.biddingWasmHelperURL with non-normalized value.',
|
|
fieldName: 'biddingWasmHelperURL',
|
|
fieldValue: `${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py`,
|
|
interestGroupOverrides: {
|
|
owner: OTHER_ORIGIN1,
|
|
biddingWasmHelperURL:
|
|
`${OTHER_ORIGIN1.toUpperCase()}${RESOURCE_PATH}wasm-helper.py`
|
|
}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.biddingWasmHelperURL with relative URL.',
|
|
fieldName: 'biddingWasmHelperURL',
|
|
fieldValue: `${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py`,
|
|
interestGroupOverrides: {
|
|
owner: OTHER_ORIGIN1,
|
|
biddingWasmHelperURL: 'foo/../resources/wasm-helper.py'
|
|
}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.biddingWasmHelperURL with unpaired surrogate characters, which should be replaced with "\\uFFFD".',
|
|
fieldName: 'biddingWasmHelperURL',
|
|
fieldValue: (new URL(`${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py?\uFFFD.\uFFFD`)).href,
|
|
interestGroupOverrides: {
|
|
owner: OTHER_ORIGIN1,
|
|
biddingWasmHelperURL: `${OTHER_ORIGIN1}${RESOURCE_PATH}wasm-helper.py?\uD800.\uDBF0`
|
|
}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.updateURL not set.',
|
|
fieldName: 'updateURL',
|
|
fieldValue: undefined
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.updateURL.',
|
|
fieldName: 'updateURL',
|
|
fieldValue: `${OTHER_ORIGIN1}${BASE_PATH}This-File-Does-Not-Exist.json`,
|
|
interestGroupOverrides: {owner: OTHER_ORIGIN1}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.updateURL with non-normalized value.',
|
|
fieldName: 'updateURL',
|
|
fieldValue: `${OTHER_ORIGIN1}${BASE_PATH}This-File-Does-Not-Exist.json`,
|
|
interestGroupOverrides: {
|
|
owner: OTHER_ORIGIN1,
|
|
updateURL: `${OTHER_ORIGIN1.toUpperCase()}${BASE_PATH}This-File-Does-Not-Exist.json`
|
|
}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.updateURL with relative URL.',
|
|
fieldName: 'updateURL',
|
|
fieldValue: (new URL(`${OTHER_ORIGIN1}${BASE_PATH}../This-File-Does-Not-Exist.json`)).href,
|
|
interestGroupOverrides: {
|
|
owner: OTHER_ORIGIN1,
|
|
updateURL: '../This-File-Does-Not-Exist.json'
|
|
}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.updateURL with unpaired surrogate characters, which should be replaced with "\\uFFFD".',
|
|
fieldName: 'updateURL',
|
|
fieldValue: (new URL(`${BASE_URL}\uFFFD.\uFFFD`)).href,
|
|
interestGroupOverrides: {
|
|
updateURL: `${BASE_URL}\uD800.\uDBF0`
|
|
}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.executionMode not present.',
|
|
fieldName: 'executionMode',
|
|
fieldValue: 'compatibility',
|
|
interestGroupOverrides: { executionMode: undefined }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.executionMode compatibility.',
|
|
fieldName: 'executionMode',
|
|
fieldValue: 'compatibility'
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.executionMode frozen-context.',
|
|
fieldName: 'executionMode',
|
|
fieldValue: 'frozen-context'
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.executionMode group-by-origin.',
|
|
fieldName: 'executionMode',
|
|
fieldValue: 'group-by-origin'
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.executionMode has non-standard string.',
|
|
fieldName: 'executionMode',
|
|
fieldValue: 'compatibility',
|
|
interestGroupOverrides: { executionMode: 'foo' }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsURL not set.',
|
|
fieldName: 'trustedBiddingSignalsURL',
|
|
fieldValue: undefined
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsURL.',
|
|
fieldName: 'trustedBiddingSignalsURL',
|
|
fieldValue: `${OTHER_ORIGIN1}${BASE_PATH}This-File-Does-Not-Exist.json`,
|
|
interestGroupOverrides: {owner: OTHER_ORIGIN1}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsURL with non-normalized value.',
|
|
fieldName: 'trustedBiddingSignalsURL',
|
|
fieldValue: `${OTHER_ORIGIN1}${BASE_PATH}This-File-Does-Not-Exist.json`,
|
|
interestGroupOverrides: {
|
|
owner: OTHER_ORIGIN1,
|
|
trustedBiddingSignalsURL:
|
|
`${OTHER_ORIGIN1.toUpperCase()}${BASE_PATH}This-File-Does-Not-Exist.json`
|
|
}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsURL with relative URL.',
|
|
fieldName: 'trustedBiddingSignalsURL',
|
|
fieldValue: (new URL(`${OTHER_ORIGIN1}${BASE_PATH}../This-File-Does-Not-Exist.json`)).href,
|
|
interestGroupOverrides: {
|
|
owner: OTHER_ORIGIN1,
|
|
trustedBiddingSignalsURL: '../This-File-Does-Not-Exist.json'
|
|
}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsURL with unpaired surrogate characters, which should be replaced with "\\uFFFD".',
|
|
fieldName: 'trustedBiddingSignalsURL',
|
|
fieldValue: (new URL(`${BASE_URL}\uFFFD.\uFFFD`)).href,
|
|
interestGroupOverrides: {
|
|
trustedBiddingSignalsURL: `${BASE_URL}\uD800.\uDBF0`
|
|
}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsKeys not set.',
|
|
fieldName: 'trustedBiddingSignalsKeys',
|
|
fieldValue: undefined
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsKeys.',
|
|
fieldName: 'trustedBiddingSignalsKeys',
|
|
fieldValue: ['a', ' b ', 'c', '1', '%20', '3', '\u2665']
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsKeys with non-normalized values.',
|
|
fieldName: 'trustedBiddingSignalsKeys',
|
|
fieldValue: ['1', '2', '3'],
|
|
interestGroupOverrides: { trustedBiddingSignalsKeys: [1, 0x2, '3'] }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsKeys unpaired surrogate characters, which should be replaced with "\\uFFFD".',
|
|
fieldName: 'trustedBiddingSignalsKeys',
|
|
fieldValue: ['\uFFFD', '\uFFFD', '\uFFFD.\uFFFD'],
|
|
interestGroupOverrides: { trustedBiddingSignalsKeys: ['\uD800', '\uDBF0', '\uD800.\uDBF0'] }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode empty.',
|
|
fieldName: 'trustedBiddingSignalsSlotSizeMode',
|
|
fieldValue: 'none',
|
|
interestGroupOverrides: { trustedBiddingSignalsSlotSizeMode: undefined }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode none.',
|
|
fieldName: 'trustedBiddingSignalsSlotSizeMode',
|
|
fieldValue: 'none'
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode slot-size.',
|
|
fieldName: 'trustedBiddingSignalsSlotSizeMode',
|
|
fieldValue: 'slot-size'
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode all-slots-requested-sizes.',
|
|
fieldName: 'trustedBiddingSignalsSlotSizeMode',
|
|
fieldValue: 'all-slots-requested-sizes'
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.trustedBiddingSignalsSlotSizeMode unrecognized value.',
|
|
fieldName: 'trustedBiddingSignalsSlotSizeMode',
|
|
fieldValue: 'none',
|
|
interestGroupOverrides: { trustedBiddingSignalsSlotSizeMode: 'unrecognized value' }
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.userBiddingSignals not set.',
|
|
fieldName: 'userBiddingSignals',
|
|
fieldValue: undefined
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.userBiddingSignals is integer.',
|
|
fieldName: 'userBiddingSignals',
|
|
fieldValue: 15
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.userBiddingSignals is array.',
|
|
fieldName: 'userBiddingSignals',
|
|
fieldValue: [1, {a: 'b'}, 'c']
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.userBiddingSignals is object.',
|
|
fieldName: 'userBiddingSignals',
|
|
fieldValue: {a:1, b:32.5, c:['d', 'e']}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.userBiddingSignals unpaired surrogate characters, which should be kept as-is.',
|
|
fieldName: 'userBiddingSignals',
|
|
fieldValue: '\uD800.\uDBF0'
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.userBiddingSignals unpaired surrogate characters in an object, which should be kept as-is.',
|
|
fieldName: 'userBiddingSignals',
|
|
fieldValue: {'\uD800': '\uDBF0', '\uDBF0':['\uD800']}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.nonStandardField.',
|
|
fieldName: 'nonStandardField',
|
|
fieldValue: undefined,
|
|
interestGroupOverrides: {nonStandardField: 'This value should not be passed to worklets'}
|
|
});
|
|
|
|
// Note that all ad tests have a deprecated "renderUrl" field passed to generateBid.
|
|
|
|
// Ad URLs need the right UUID for seller scripts to accept their bids. Since UUID changes
|
|
// for each test, and is not available outside makeTest(), have to use string that will
|
|
// be replaced with the real UUID.
|
|
const AD1_URL = createRenderURL('REPLACE_WITH_UUID', /*script=*/';');
|
|
const AD2_URL = createRenderURL('REPLACE_WITH_UUID', /*script=*/';;');
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.ads with one ad.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL}]
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.ads one ad with metadata object.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL, metadata: {foo: 1, bar: [2, 3], baz: '4'}}]
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.ads one ad with metadata string.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL, metadata: 'foo'}]
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.ads one ad with null metadata.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL, metadata: null}]
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.ads one ad with adRenderId. This field should not be passed to generateBid.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL}],
|
|
interestGroupOverrides: {ads: [{renderURL: AD1_URL, adRenderId: 'twelve chars'}]}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.ads one ad with buyerAndSellerReportingId. This field should not be passed to generateBid.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL}],
|
|
interestGroupOverrides: {ads: [{renderURL: AD1_URL,
|
|
buyerAndSellerReportingId: 'Arbitrary text'}]}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.ads one ad with buyerReportingId. This field should not be passed to generateBid.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL}],
|
|
interestGroupOverrides: {ads: [{renderURL: AD1_URL,
|
|
buyerReportingId: 'Arbitrary text'}]}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.ads one ad with novel field. This field should not be passed to generateBid.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL}],
|
|
interestGroupOverrides: {ads: [{renderURL: AD1_URL, novelField: 'Foo'}]}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.ads with multiple ads.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL, metadata: 1},
|
|
{renderURL: AD2_URL, metadata: [2]}],
|
|
interestGroupOverrides: {ads: [{renderURL: AD1_URL, metadata: 1},
|
|
{renderURL: AD2_URL, metadata: [2]}]}
|
|
});
|
|
|
|
// This should probably be an error. This WPT test serves to encourage there to be a
|
|
// new join-leave WPT test when that is fixed.
|
|
makeTest({
|
|
name: 'InterestGroup.ads duplicate ad.',
|
|
fieldName: 'ads',
|
|
fieldValue: [{renderURL: AD1_URL}, {renderURL: AD1_URL}],
|
|
interestGroupOverrides: {ads: [{renderURL: AD1_URL}, {renderURL: AD1_URL}]}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents is undefined.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: undefined
|
|
});
|
|
|
|
// This one is likely a bug.
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents is empty array.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: undefined,
|
|
interestGroupOverrides: {adComponents: []}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents with one ad.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL}]
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents one ad with metadata object.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL, metadata: {foo: 1, bar: [2, 3], baz: '4'}}]
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents one ad with metadata string.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL, metadata: 'foo'}]
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents one ad with null metadata.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL, metadata: null}]
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents one ad with adRenderId. This field should not be passed to generateBid.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL}],
|
|
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL,
|
|
adRenderId: 'twelve chars'}]}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents one ad with buyerAndSellerReportingId. This field should not be passed to generateBid.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL}],
|
|
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL,
|
|
buyerAndSellerReportingId: 'Arbitrary text'}]}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents one ad with buyerReportingId. This field should not be passed to generateBid.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL}],
|
|
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL,
|
|
buyerReportingId: 'Arbitrary text'}]}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents one ad with novel field. This field should not be passed to generateBid.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL}],
|
|
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL,
|
|
novelField: 'Foo'}]}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents with multiple ads.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL, metadata: 1}, {renderURL: AD2_URL, metadata: [2]}]
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.auctionServerRequestFlags is undefined',
|
|
fieldName: 'auctionServerRequestFlags',
|
|
fieldValue: undefined
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.auctionServerRequestFlags is "omit-ads".',
|
|
fieldName: 'auctionServerRequestFlags',
|
|
fieldValue: undefined,
|
|
interestGroupOverrides: {auctionServerRequestFlags: ['omit-ads']}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.auctionServerRequestFlags is "include-full-ads".',
|
|
fieldName: 'auctionServerRequestFlags',
|
|
fieldValue: undefined,
|
|
interestGroupOverrides: {auctionServerRequestFlags: ['include-full-ads']}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.auctionServerRequestFlags has multiple values.',
|
|
fieldName: 'auctionServerRequestFlags',
|
|
fieldValue: undefined,
|
|
interestGroupOverrides: {auctionServerRequestFlags: ['omit-ads', 'include-full-ads']}
|
|
});
|
|
|
|
makeTest({
|
|
name: 'InterestGroup.auctionServerRequestFlags.',
|
|
fieldName: 'auctionServerRequestFlags',
|
|
fieldValue: undefined,
|
|
interestGroupOverrides: {auctionServerRequestFlags: ['noval value']}
|
|
});
|
|
|
|
// This should probably be an error. This WPT test serves to encourage there to be a
|
|
// new join-leave WPT test when that is fixed.
|
|
makeTest({
|
|
name: 'InterestGroup.adComponents duplicate ad.',
|
|
fieldName: 'adComponents',
|
|
fieldValue: [{renderURL: AD1_URL}, {renderURL: AD1_URL}],
|
|
interestGroupOverrides: {adComponents: [{renderURL: AD1_URL}, {renderURL: AD1_URL}]}
|
|
});
|