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');