tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

direct-from-seller-signals.https.window.js (26666B)


      1 // META: script=/resources/testdriver.js
      2 // META: script=/resources/testdriver-vendor.js
      3 // META: script=/common/utils.js
      4 // META: script=resources/fledge-util.sub.js
      5 // META: script=/common/subset-tests.js
      6 // META: timeout=long
      7 // META: variant=?1-4
      8 // META: variant=?5-8
      9 // META: variant=?9-12
     10 // META: variant=?13-16
     11 // META: variant=?17-20
     12 // META: variant=?21-24
     13 // META: variant=?25-28
     14 // META: variant=?29-32
     15 // META: variant=?33-36
     16 
     17 "use strict";
     18 
     19 subsetTest(promise_test, async test => {
     20  const uuid = generateUuid(test);
     21  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
     22  await runReportTest(
     23      test, uuid,
     24      directFromSellerSignalsValidatorCode(
     25          uuid, /*expectedSellerSignals=*/ null,
     26          /*expectedAuctionSignals=*/ null, /*expectedPerBuyerSignals=*/ null),
     27      // expectedReportURLs
     28      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
     29      // renderURLOverride
     30      null,
     31      // auctionConfigOverrides
     32      {directFromSellerSignalsHeaderAdSlot: 'adSlot/0'});
     33 }, 'Test directFromSellerSignals with empty Ad-Auction-Signals header.');
     34 
     35 subsetTest(promise_test, async test => {
     36  const uuid = generateUuid(test);
     37  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
     38  await runReportTest(
     39      test, uuid,
     40      directFromSellerSignalsValidatorCode(
     41          uuid, 'sellerSignals/1',
     42          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
     43      // expectedReportURLs
     44      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
     45      // renderURLOverride
     46      null,
     47      // auctionConfigOverrides
     48      { directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
     49  );
     50 }, 'Test directFromSellerSignals with only sellerSignals.');
     51 
     52 subsetTest(promise_test, async test => {
     53  const uuid = generateUuid(test);
     54  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
     55  await runReportTest(
     56      test, uuid,
     57      directFromSellerSignalsValidatorCode(
     58          uuid, /*expectedSellerSignals=*/null,
     59          'auctionSignals/2', /*expectedPerBuyerSignals=*/null),
     60      // expectedReportURLs
     61      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
     62      // renderURLOverride
     63      null,
     64      // auctionConfigOverrides
     65      { directFromSellerSignalsHeaderAdSlot: 'adSlot/2' }
     66  );
     67 }, 'Test directFromSellerSignals with only auctionSignals.');
     68 
     69 subsetTest(promise_test, async test => {
     70  const uuid = generateUuid(test);
     71  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
     72  await runReportTest(
     73      test, uuid,
     74      directFromSellerSignalsValidatorCode(
     75          uuid, /*expectedSellerSignals=*/null,
     76          /*expectedAuctionSignals=*/null, 'perBuyerSignals/3'),
     77      // expectedReportURLs
     78      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
     79      // renderURLOverride
     80      null,
     81      // auctionConfigOverrides
     82      { directFromSellerSignalsHeaderAdSlot: 'adSlot/3' }
     83  );
     84 }, 'Test directFromSellerSignals with only perBuyerSignals.');
     85 
     86 subsetTest(promise_test, async test => {
     87  const uuid = generateUuid(test);
     88  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
     89  await runReportTest(
     90      test, uuid,
     91      directFromSellerSignalsValidatorCode(
     92          uuid, 'sellerSignals/4',
     93          'auctionSignals/4', 'perBuyerSignals/4'),
     94      // expectedReportURLs
     95      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
     96      // renderURLOverride
     97      null,
     98      // auctionConfigOverrides
     99      { directFromSellerSignalsHeaderAdSlot: 'adSlot/4' }
    100  );
    101 }, 'Test directFromSellerSignals with sellerSignals, auctionSignals and perBuyerSignals.');
    102 
    103 subsetTest(promise_test, async test => {
    104  const uuid = generateUuid(test);
    105  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    106  await runReportTest(
    107      test, uuid,
    108      directFromSellerSignalsValidatorCode(
    109          uuid, 'sellerSignals/1',
    110          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    111      // expectedReportURLs
    112      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    113      // renderURLOverride
    114      null,
    115      // auctionConfigOverrides
    116    { directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
    117  );
    118 
    119  await runReportTest(
    120      test, uuid,
    121      directFromSellerSignalsValidatorCode(
    122          uuid, /*expectedSellerSignals=*/null,
    123          'auctionSignals/2', /*expectedPerBuyerSignals=*/null),
    124      // expectedReportURLs
    125      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    126      // renderURLOverride
    127      null,
    128      // auctionConfigOverrides
    129      { directFromSellerSignalsHeaderAdSlot: 'adSlot/2' }
    130  );
    131 }, 'Test directFromSellerSignals with single fetch and multiple auctions');
    132 
    133 subsetTest(promise_test, async test => {
    134  const uuid = generateUuid(test);
    135  const ad_slot = Promise.resolve('adSlot/4');
    136  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    137  await runReportTest(
    138      test, uuid,
    139      directFromSellerSignalsValidatorCode(
    140          uuid, 'sellerSignals/4',
    141          'auctionSignals/4', 'perBuyerSignals/4'),
    142      // expectedReportURLs
    143      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    144      // renderURLOverride
    145      null,
    146      // auctionConfigOverrides
    147      { directFromSellerSignalsHeaderAdSlot: ad_slot }
    148  );
    149 }, 'Test directFromSellerSignals with resolved promise ad slot.');
    150 
    151 subsetTest(promise_test, async test => {
    152  const uuid = generateUuid(test);
    153  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    154  await joinInterestGroup(test, uuid);
    155 
    156  const adSlot = Promise.reject(new Error('This is a rejected promise.'));
    157  let auctionConfig =
    158      { seller: window.location.origin,
    159        interestGroupBuyers: [window.location.origin],
    160        resolveToConfig: true,
    161        decisionLogicURL: createDecisionScriptURL(uuid),
    162        directFromSellerSignalsHeaderAdSlot: adSlot };
    163 
    164  try {
    165    await navigator.runAdAuction(auctionConfig);
    166  } catch(e) {
    167    assert_true(e instanceof TypeError);
    168    return;
    169  }
    170  throw "Exception unexpectedly not thrown.";
    171 }, 'Test directFromSellerSignals with rejected promise ad slot.');
    172 
    173 subsetTest(promise_test, async test => {
    174  const uuid = generateUuid(test);
    175  const validator = directFromSellerSignalsValidatorCode(
    176      uuid, 'sellerSignals/4',
    177      'auctionSignals/4', 'perBuyerSignals/4');
    178  let reportResult = `if (!(${validator.reportResultSuccessCondition})) {
    179                        sendReportTo('${createSellerReportURL(uuid, 'error')}');
    180                        return false;
    181                      }
    182                      ${validator.reportResult}`;
    183  let reportWin = `if (!(${validator.reportWinSuccessCondition})) {
    184                     sendReportTo('${createBidderReportURL(uuid, 'error')}');
    185                     return false;
    186                   }
    187                   ${validator.reportWin}`;
    188  let decisionScriptURLParams = { scoreAd : validator.scoreAd,
    189                                  reportResult : reportResult };
    190  let biddingScriptURLParams = { generateBid : validator.generateBid,
    191                                 reportWin : reportWin };
    192  let interestGroupOverrides =
    193      { biddingLogicURL: createBiddingScriptURL(biddingScriptURLParams) };
    194  await joinInterestGroup(test, uuid, interestGroupOverrides);
    195 
    196  let adSlotResolve = null;
    197  const adSlotPromise = new Promise((resolve, reject) => { adSlotResolve = resolve });
    198  let auctionConfig =
    199      { seller: window.location.origin,
    200        interestGroupBuyers: [window.location.origin],
    201        resolveToConfig: true,
    202        decisionLogicURL: createDecisionScriptURL(uuid, decisionScriptURLParams),
    203        directFromSellerSignalsHeaderAdSlot: adSlotPromise };
    204  let resultPromise = navigator.runAdAuction(auctionConfig);
    205 
    206  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    207  adSlotResolve('adSlot/4');
    208  let result = await resultPromise;
    209  createAndNavigateFencedFrame(test, result);
    210  await waitForObservedRequests(uuid, [createSellerReportURL(uuid), createBidderReportURL(uuid)]);
    211 }, 'Test directFromSellerSignals that runAdAuction will wait until the promise of fetch is resolved.');
    212 
    213 subsetTest(promise_test, async test => {
    214  const uuid = generateUuid(test);
    215  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    216  await runReportTest(
    217      test, uuid,
    218      directFromSellerSignalsValidatorCode(
    219          uuid, 'sellerSignals/5',
    220          'auctionSignals/5', /*expectedPerBuyerSignals=*/null),
    221      // expectedReportURLs
    222      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    223      // renderURLOverride
    224      null,
    225      // auctionConfigOverrides
    226      { directFromSellerSignalsHeaderAdSlot: 'adSlot/5' }
    227  );
    228 }, 'Test directFromSellerSignals with mismatched perBuyerSignals.');
    229 
    230 subsetTest(promise_test, async test => {
    231  const uuid = generateUuid(test);
    232  await fetchDirectFromSellerSignals({ 'Buyer-Origin': '*' });
    233  await runReportTest(
    234      test, uuid,
    235      directFromSellerSignalsValidatorCode(
    236        uuid, 'sellerSignals/5',
    237        'auctionSignals/5', /*expectedPerBuyerSignals=*/null),
    238      // expectedReportURLs
    239      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    240      // renderURLOverride
    241      null,
    242      // auctionConfigOverrides
    243      { directFromSellerSignalsHeaderAdSlot: 'adSlot/5' }
    244  );
    245 }, 'Test directFromSellerSignals does not support wildcard for buyerOrigin of perBuyerSignals.');
    246 
    247 subsetTest(promise_test, async test => {
    248  const uuid = generateUuid(test);
    249  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    250  await runReportTest(
    251      test, uuid,
    252      directFromSellerSignalsValidatorCode(
    253          uuid, /*expectedSellerSignals=*/null,
    254          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    255      // expectedReportURLs
    256      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    257      // renderURLOverride
    258      null,
    259      // auctionConfigOverrides
    260      { directFromSellerSignalsHeaderAdSlot: 'adSlot/non-exist' }
    261  );
    262 }, 'Test directFromSellerSignals with non-existent adSlot.');
    263 
    264 subsetTest(promise_test, async test => {
    265  const uuid = generateUuid(test);
    266  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    267  await runReportTest(
    268      test, uuid,
    269      directFromSellerSignalsValidatorCode(
    270          uuid, /*expectedSellerSignals=*/null,
    271          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    272      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    273      // renderURLOverride
    274      null,
    275      // auctionConfigOverrides
    276      { directFromSellerSignalsHeaderAdSlot: null }
    277  );
    278 }, 'Test directFromSellerSignals with null directFromSellerSignalsHeaderAdSlot.');
    279 
    280 subsetTest(promise_test, async test => {
    281  const uuid = generateUuid(test);
    282  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    283  await runReportTest(
    284      test, uuid,
    285      directFromSellerSignalsValidatorCode(
    286          uuid, /*expectedSellerSignals=*/null,
    287          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    288      [createSellerReportURL(uuid), createBidderReportURL(uuid)]
    289  );
    290 }, 'Test directFromSellerSignals with no directFromSellerSignalsHeaderAdSlot.');
    291 
    292 subsetTest(promise_test, async test => {
    293  const uuid = generateUuid(test);
    294  await fetchDirectFromSellerSignals({ 'Negative-Test-Option': 'HTTP Error' });
    295  await runReportTest(
    296      test, uuid,
    297      directFromSellerSignalsValidatorCode(
    298          uuid, /*expectedSellerSignals=*/null,
    299          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    300      // expectedReportURLs
    301      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    302      // renderURLOverride
    303      null,
    304      // auctionConfigOverrides
    305      { directFromSellerSignalsHeaderAdSlot: 'adSlot' }
    306  );
    307 }, 'Test directFromSellerSignals with HTTP error.');
    308 
    309 subsetTest(promise_test, async test => {
    310  const uuid = generateUuid(test);
    311  await fetchDirectFromSellerSignals({ 'Negative-Test-Option': 'No Ad-Auction-Signals Header' });
    312  await runReportTest(
    313      test, uuid,
    314      directFromSellerSignalsValidatorCode(
    315          uuid, /*expectedSellerSignals=*/null,
    316          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    317      // expectedReportURLs
    318      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    319      // renderURLOverride
    320      null,
    321      // auctionConfigOverrides
    322      { directFromSellerSignalsHeaderAdSlot: 'adSlot' }
    323  );
    324 }, 'Test directFromSellerSignals with no returned Ad-Auction-Signals Header.');
    325 
    326 subsetTest(promise_test, async test => {
    327  const uuid = generateUuid(test);
    328  await fetchDirectFromSellerSignals({ 'Negative-Test-Option': 'Invalid Json' });
    329  await runReportTest(
    330      test, uuid,
    331      directFromSellerSignalsValidatorCode(
    332          uuid, /*expectedSellerSignals=*/null,
    333          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    334      // expectedReportURLs
    335      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    336      // renderURLOverride
    337      null,
    338      // auctionConfigOverrides
    339      { directFromSellerSignalsHeaderAdSlot: 'adSlot' }
    340  );
    341 }, 'Test directFromSellerSignals with invalid json in Ad-Auction-Signals header.');
    342 
    343 subsetTest(promise_test, async test => {
    344  const uuid = generateUuid(test);
    345  let codeToInsert = directFromSellerSignalsValidatorCode(
    346      uuid, /*expectedSellerSignals=*/null,
    347      /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null);
    348  codeToInsert.decisionScriptURLOrigin = OTHER_ORIGIN1;
    349  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    350  await runReportTest(
    351      test, uuid, codeToInsert,
    352      // expectedReportURLs
    353      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    354      // renderURLOverride
    355      null,
    356      // auctionConfigOverrides
    357      { directFromSellerSignalsHeaderAdSlot: 'adSlot/4',
    358        seller: OTHER_ORIGIN1 }
    359  );
    360 }, 'Test directFromSellerSignals with different fetch and seller origins.');
    361 
    362 subsetTest(promise_test, async test => {
    363  const uuid = generateUuid(test);
    364  let codeToInsert = directFromSellerSignalsValidatorCode(
    365      uuid, 'sellerSignals/4',
    366      'auctionSignals/4', 'perBuyerSignals/4');
    367  codeToInsert.decisionScriptURLOrigin = OTHER_ORIGIN1;
    368  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin }, OTHER_ORIGIN1);
    369  await runReportTest(
    370      test, uuid, codeToInsert,
    371      // expectedReportURLs
    372      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    373      // renderURLOverride
    374      null,
    375      // auctionConfigOverrides
    376      { directFromSellerSignalsHeaderAdSlot: 'adSlot/4',
    377        seller: OTHER_ORIGIN1 }
    378  );
    379 }, 'Test directFromSellerSignals with same fetch and seller origins.');
    380 
    381 subsetTest(promise_test, async test => {
    382  const uuid = generateUuid(test);
    383  let iframe = await createIframe(test, OTHER_ORIGIN1);
    384  await runInFrame(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`);
    385  await fetchDirectFromSellerSignals({ 'Buyer-Origin': OTHER_ORIGIN1 });
    386  await runReportTest(
    387      test, uuid,
    388      directFromSellerSignalsValidatorCode(
    389        uuid, 'sellerSignals/4',
    390        'auctionSignals/4', 'perBuyerSignals/4'),
    391      // expectedReportURLs
    392      [createSellerReportURL(uuid), createBidderReportURL(uuid, '1', OTHER_ORIGIN1)],
    393      // renderURLOverride
    394      null,
    395      // auctionConfigOverrides
    396      { directFromSellerSignalsHeaderAdSlot: 'adSlot/4',
    397        interestGroupBuyers: [OTHER_ORIGIN1] }
    398  );
    399 }, 'Test directFromSellerSignals different interest group owner origin from top frame.');
    400 
    401 subsetTest(promise_test, async test => {
    402  const uuid = generateUuid(test);
    403  let iframe = await createIframe(test, OTHER_ORIGIN1, "join-ad-interest-group; run-ad-auction");
    404  await fetchDirectFromSellerSignals({ 'Buyer-Origin': OTHER_ORIGIN1 }, OTHER_ORIGIN1);
    405  await runInFrame(
    406      test, iframe,
    407      `await runReportTest(
    408          test_instance, "${uuid}",
    409          directFromSellerSignalsValidatorCode(
    410              "${uuid}", 'sellerSignals/4', 'auctionSignals/4', 'perBuyerSignals/4'),
    411          // expectedReportURLs
    412          [createSellerReportURL("${uuid}"), createBidderReportURL("${uuid}")],
    413          // renderURLOverride
    414          null,
    415          // auctionConfigOverrides
    416          { directFromSellerSignalsHeaderAdSlot: 'adSlot/4' })`);
    417 }, 'Test directFromSellerSignals with fetching in top frame and running auction in iframe.');
    418 
    419 subsetTest(promise_test, async test => {
    420  const uuid = generateUuid(test);
    421  let iframe = await createIframe(test, OTHER_ORIGIN1, "join-ad-interest-group; run-ad-auction");
    422  await runInFrame(
    423      test, iframe,
    424      `await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    425       await runReportTest(
    426          test_instance, "${uuid}",
    427          directFromSellerSignalsValidatorCode(
    428              "${uuid}", 'sellerSignals/4',
    429              'auctionSignals/4', 'perBuyerSignals/4'),
    430          // expectedReportURLs
    431          [createSellerReportURL("${uuid}"), createBidderReportURL("${uuid}")],
    432          // renderURLOverride
    433          null,
    434          // auctionConfigOverrides
    435          { directFromSellerSignalsHeaderAdSlot: 'adSlot/4' })`);
    436 }, 'Test directFromSellerSignals with fetching and running auction in the same iframe.');
    437 
    438 subsetTest(promise_test, async test => {
    439  const uuid = generateUuid(test);
    440  let iframe1 = await createIframe(test, OTHER_ORIGIN1);
    441  let iframe2 = await createIframe(test, OTHER_ORIGIN2, "join-ad-interest-group; run-ad-auction");
    442  await runInFrame(
    443      test, iframe1,
    444      `await fetchDirectFromSellerSignals({ 'Buyer-Origin': OTHER_ORIGIN2 }, OTHER_ORIGIN2);`);
    445  await runInFrame(
    446      test, iframe2,
    447      `await runReportTest(
    448          test_instance, "${uuid}",
    449          directFromSellerSignalsValidatorCode(
    450              "${uuid}", 'sellerSignals/4',
    451              'auctionSignals/4', 'perBuyerSignals/4'),
    452          // expectedReportURLs
    453          [createSellerReportURL("${uuid}"), createBidderReportURL("${uuid}")],
    454          // renderURLOverride
    455          null,
    456          // auctionConfigOverrides
    457          { directFromSellerSignalsHeaderAdSlot: 'adSlot/4' })`);
    458 }, 'Test directFromSellerSignals with fetching in iframe 1 and running auction in iframe 2.');
    459 
    460 subsetTest(promise_test, async test => {
    461  const uuid = generateUuid(test);
    462  let iframe = await createIframe(test, OTHER_ORIGIN1);
    463  await runInFrame(
    464      test, iframe,
    465      `await fetchDirectFromSellerSignals(
    466          { 'Buyer-Origin': "${window.location.origin}" }, "${window.location.origin}");`);
    467  await runReportTest(
    468      test, uuid,
    469      directFromSellerSignalsValidatorCode(
    470          uuid, 'sellerSignals/4',
    471          'auctionSignals/4', 'perBuyerSignals/4'),
    472      // expectedReportURLs
    473      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    474      // renderURLOverride
    475      null,
    476      // auctionConfigOverrides
    477      { directFromSellerSignalsHeaderAdSlot: 'adSlot/4'}
    478  );
    479 }, 'Test directFromSellerSignals with fetching in iframe and running auction in top frame.');
    480 
    481 subsetTest(promise_test, async test => {
    482  const uuid = generateUuid(test);
    483  await fetchDirectFromSellerSignals({ 'Negative-Test-Option': 'Network Error' });
    484  await runReportTest(
    485      test, uuid,
    486      directFromSellerSignalsValidatorCode(
    487          uuid, 'sellerSignals',
    488          'auctionSignals', /*expectedPerBuyerSignals=*/null),
    489      // expectedReportURLs
    490      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    491      // renderURLOverride
    492      null,
    493      // auctionConfigOverrides
    494      { directFromSellerSignalsHeaderAdSlot: 'adSlot' }
    495  );
    496 }, 'Test directFromSellerSignals with network error.');
    497 
    498 subsetTest(promise_test, async test => {
    499  let dfss = false;
    500  navigator.runAdAuction({
    501      get directFromSellerSignalsHeaderAdSlot() { dfss = true; }
    502  }).catch((e) => {});
    503  assert_true(dfss);
    504 }, 'Test directFromSellerSignals feature detection.');
    505 
    506 // The version of directFromSellerSignals based on web bundles preceded the
    507 // header-based version -- the web bundle version has been deprecated and
    508 // removed.
    509 subsetTest(promise_test, async test => {
    510  let dfss = false;
    511  navigator.runAdAuction({
    512      get directFromSellerSignals() { dfss = true; }
    513  }).catch((e) => {});
    514  assert_false(dfss);
    515 }, 'Negative test for deprecated and removed web-bundle directFromSellerSignals.');
    516 
    517 subsetTest(promise_test, async test => {
    518  const uuid = generateUuid(test);
    519  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    520  await fetchDirectFromSellerSignals(
    521      { 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Overwrite adSlot/1'});
    522  await runReportTest(
    523      test, uuid,
    524      directFromSellerSignalsValidatorCode(
    525          uuid, 'altSellerSignals/1',
    526          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    527      // expectedReportURLs
    528      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    529      // renderURLOverride
    530      null,
    531      // auctionConfigOverrides
    532      { directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
    533  );
    534 }, 'Test directFromSellerSignals with 2 responses -- the later overwrites the former.');
    535 
    536 subsetTest(promise_test, async test => {
    537  const uuid = generateUuid(test);
    538  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    539  await fetchDirectFromSellerSignals(
    540      { 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Overwrite adSlot/1'});
    541  await fetchDirectFromSellerSignals(
    542      { 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Overwrite adSlot/1 v2'});
    543  await runReportTest(
    544      test, uuid,
    545      directFromSellerSignalsValidatorCode(
    546          uuid, 'altV2SellerSignals/1',
    547          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    548      // expectedReportURLs
    549      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    550      // renderURLOverride
    551      null,
    552      // auctionConfigOverrides
    553      { directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
    554  );
    555 }, 'Test directFromSellerSignals with 3 responses -- the last response overwrites the former responses.');
    556 
    557 subsetTest(promise_test, async test => {
    558  const uuid = generateUuid(test);
    559  await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin });
    560  await fetchDirectFromSellerSignals(
    561      { 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Overwrite adSlot/1'});
    562  await runReportTest(
    563      test, uuid,
    564      directFromSellerSignalsValidatorCode(
    565          uuid, /*expectedSellerSignals=*/null,
    566          'auctionSignals/2', /*expectedPerBuyerSignals=*/null),
    567      // expectedReportURLs
    568      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    569      // renderURLOverride
    570      null,
    571      // auctionConfigOverrides
    572      { directFromSellerSignalsHeaderAdSlot: 'adSlot/2' }
    573  );
    574 }, 'Test directFromSellerSignals with 2 responses -- old non-overwritten ad slot remains.');
    575 
    576 subsetTest(promise_test, async test => {
    577  const uuid = generateUuid(test);
    578  await fetchDirectFromSellerSignals(
    579      { 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Duplicate adSlot/1'});
    580  await runReportTest(
    581      test, uuid,
    582      directFromSellerSignalsValidatorCode(
    583          uuid, 'firstSellerSignals/1',
    584          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    585      // expectedReportURLs
    586      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    587      // renderURLOverride
    588      null,
    589      // auctionConfigOverrides
    590      { directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
    591  );
    592 }, 'Test invalid directFromSellerSignals with duplicate adSlot in response -- the second is ignored.');
    593 
    594 subsetTest(promise_test, async test => {
    595  const uuid = generateUuid(test);
    596  await fetchDirectFromSellerSignals(
    597      { 'Buyer-Origin': window.location.origin, 'Alternative-Response': 'Duplicate adSlot/1'});
    598  await runReportTest(
    599      test, uuid,
    600      directFromSellerSignalsValidatorCode(
    601          uuid, 'nonDupSellerSignals/2',
    602          /*expectedAuctionSignals=*/null, /*expectedPerBuyerSignals=*/null),
    603      // expectedReportURLs
    604      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    605      // renderURLOverride
    606      null,
    607      // auctionConfigOverrides
    608      { directFromSellerSignalsHeaderAdSlot: 'adSlot/2' }
    609  );
    610 }, 'Test invalid directFromSellerSignals with duplicate adSlot in response, selecting a non duplicated adSlot.');
    611 
    612 subsetTest(promise_test, async test => {
    613  const uuid = generateUuid(test);
    614  await fetchDirectFromSellerSignals(
    615      { 'Buyer-Origin': window.location.origin,
    616        'Alternative-Response': 'Two keys with same values'});
    617  await runReportTest(
    618      test, uuid,
    619      directFromSellerSignalsValidatorCode(
    620          uuid, 'sameSellerSignals',
    621          'sameAuctionSignals', 'samePerBuyerSignals'),
    622      // expectedReportURLs
    623      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    624      // renderURLOverride
    625      null,
    626      // auctionConfigOverrides
    627      { directFromSellerSignalsHeaderAdSlot: 'adSlot/1' }
    628  );
    629 }, 'Test invalid directFromSellerSignals with duplicate values in response.');
    630 
    631 subsetTest(promise_test, async test => {
    632  const uuid = generateUuid(test);
    633  await fetchDirectFromSellerSignals({'Buyer-Origin': window.location.origin});
    634  await runReportTest(
    635      test, uuid,
    636      directFromSellerSignalsValidatorCode(
    637          uuid, 'sellerSignals/null',
    638          /*expectedAuctionSignals=*/ null, /*expectedPerBuyerSignals=*/ null),
    639      // expectedReportURLs
    640      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    641      // renderURLOverride
    642      null,
    643      // auctionConfigOverrides
    644      {directFromSellerSignalsHeaderAdSlot: 'null'});
    645 }, 'directFromSellerSignals slot named "null"');
    646 
    647 subsetTest(promise_test, async test => {
    648  const uuid = generateUuid(test);
    649  await fetchDirectFromSellerSignals({'Buyer-Origin': window.location.origin});
    650  await runReportTest(
    651      test, uuid,
    652      directFromSellerSignalsValidatorCode(
    653          uuid, /*expectedSellerSignals=*/ null,
    654          /*expectedAuctionSignals=*/ null, /*expectedPerBuyerSignals=*/ null),
    655      // expectedReportURLs
    656      [createSellerReportURL(uuid), createBidderReportURL(uuid)],
    657      // renderURLOverride
    658      null,
    659      // auctionConfigOverrides
    660      {directFromSellerSignalsHeaderAdSlot: null});
    661 }, 'null directFromSellerSignals slot');