reporting-arguments.https.window.js (12280B)
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-5 8 // META: variant=?6-10 9 // META: variant=?11-15 10 // META: variant=?16-last 11 12 "use strict"; 13 14 // Simplified version of reportTest() for validating arguments to reporting 15 // methods. Only takes expressions to check in reporting methods. "uuid" is 16 // optional, and one is generated if not passed one. 17 async function runReportArgumentValidationTest( 18 test, reportResultSuccessCondition, reportWinSuccessCondition, uuid) { 19 if (!uuid) 20 uuid = generateUuid(test); 21 await runReportTest( 22 test, uuid, 23 { reportResultSuccessCondition: 24 reportResultSuccessCondition, 25 reportResult: 26 `sendReportTo('${createSellerReportURL(uuid)}');`, 27 reportWinSuccessCondition: 28 reportWinSuccessCondition, 29 reportWin: 30 `sendReportTo('${createBidderReportURL(uuid)}');` }, 31 [createSellerReportURL(uuid), createBidderReportURL(uuid)] 32 ); 33 } 34 35 ///////////////////////////////////////////////////////////////////// 36 // reportResult() to reportWin() message passing tests 37 ///////////////////////////////////////////////////////////////////// 38 39 subsetTest(promise_test, async test => { 40 const uuid = generateUuid(test); 41 await runReportTest( 42 test, uuid, 43 { reportResult: 44 `sendReportTo('${createSellerReportURL(uuid)}'); 45 return 45;`, 46 reportWinSuccessCondition: 47 'sellerSignals === 45', 48 reportWin: 49 `sendReportTo('${createBidderReportURL(uuid)}');` }, 50 // expectedReportURLs: 51 [createSellerReportURL(uuid), createBidderReportURL(uuid)] 52 ); 53 }, 'Seller passes number to bidder.'); 54 55 subsetTest(promise_test, async test => { 56 const uuid = generateUuid(test); 57 await runReportTest( 58 test, uuid, 59 { reportResult: 60 `sendReportTo('${createSellerReportURL(uuid)}'); 61 return 'foo';`, 62 reportWinSuccessCondition: 63 'sellerSignals === "foo"', 64 reportWin: 65 `sendReportTo('${createBidderReportURL(uuid)}');` }, 66 // expectedReportURLs: 67 [createSellerReportURL(uuid), createBidderReportURL(uuid)] 68 ); 69 }, 'Seller passes string to bidder.'); 70 71 subsetTest(promise_test, async test => { 72 const uuid = generateUuid(test); 73 await runReportTest( 74 test, uuid, 75 { reportResult: 76 `sendReportTo('${createSellerReportURL(uuid)}'); 77 return [3, 1, 2];`, 78 reportWinSuccessCondition: 79 'JSON.stringify(sellerSignals) === "[3,1,2]"', 80 reportWin: 81 `sendReportTo('${createBidderReportURL(uuid)}');` }, 82 // expectedReportURLs: 83 [createSellerReportURL(uuid), createBidderReportURL(uuid)] 84 ); 85 }, 'Seller passes array to bidder.'); 86 87 subsetTest(promise_test, async test => { 88 const uuid = generateUuid(test); 89 await runReportTest( 90 test, uuid, 91 { reportResult: 92 `sendReportTo('${createSellerReportURL(uuid)}'); 93 return {a: 4, b:['c', null, {}]};`, 94 reportWinSuccessCondition: 95 `JSON.stringify(sellerSignals) === '{"a":4,"b":["c",null,{}]}'`, 96 reportWin: 97 `sendReportTo('${createBidderReportURL(uuid)}');` }, 98 // expectedReportURLs: 99 [createSellerReportURL(uuid), createBidderReportURL(uuid)] 100 ); 101 }, 'Seller passes object to bidder.'); 102 103 ///////////////////////////////////////////////////////////////////// 104 // reportResult() / reportWin() browserSignals tests. 105 ///////////////////////////////////////////////////////////////////// 106 107 subsetTest(promise_test, async test => { 108 await runReportArgumentValidationTest( 109 test, 110 // reportResultSuccessCondition: 111 `browserSignals.topWindowHostname === "${window.location.hostname}"`, 112 // reportWinSuccessCondition: 113 `browserSignals.topWindowHostname === "${window.location.hostname}"` 114 ); 115 }, 'browserSignals.topWindowHostname test.'); 116 117 subsetTest(promise_test, async test => { 118 await runReportArgumentValidationTest( 119 test, 120 // reportResultSuccessCondition: 121 `browserSignals.seller === undefined`, 122 // reportWinSuccessCondition: 123 `browserSignals.seller === "${window.location.origin}"` 124 ); 125 }, 'browserSignals.seller test.'); 126 127 subsetTest(promise_test, async test => { 128 await runReportArgumentValidationTest( 129 test, 130 // reportResultSuccessCondition: 131 `browserSignals.topLevelSeller === undefined && 132 browserSignals.componentSeller === undefined`, 133 // reportWinSuccessCondition: 134 `browserSignals.topLevelSeller === undefined && 135 browserSignals.componentSeller === undefined` 136 ); 137 }, 'browserSignals.topLevelSeller and browserSignals.componentSeller test.'); 138 139 subsetTest(promise_test, async test => { 140 const uuid = generateUuid(test); 141 await runReportArgumentValidationTest( 142 test, 143 // reportResultSuccessCondition: 144 `browserSignals.renderURL === "${createRenderURL(uuid)}"`, 145 // reportWinSuccessCondition: 146 `browserSignals.renderURL === "${createRenderURL(uuid)}"`, 147 uuid 148 ); 149 }, 'browserSignals.renderURL test.'); 150 151 subsetTest(promise_test, async test => { 152 await runReportArgumentValidationTest( 153 test, 154 // reportResultSuccessCondition: 155 `browserSignals.bid === 9`, 156 // reportWinSuccessCondition: 157 `browserSignals.bid === 9` 158 ); 159 }, 'browserSignals.bid test.'); 160 161 subsetTest(promise_test, async test => { 162 await runReportArgumentValidationTest( 163 test, 164 // reportResultSuccessCondition: 165 `browserSignals.desirability === 18`, 166 // reportWinSuccessCondition: 167 `browserSignals.desirability === undefined` 168 ); 169 }, 'browserSignals.desirability test.'); 170 171 subsetTest(promise_test, async test => { 172 await runReportArgumentValidationTest( 173 test, 174 // reportResultSuccessCondition: 175 `browserSignals.topLevelSellerSignals === undefined`, 176 // reportWinSuccessCondition: 177 `browserSignals.topLevelSellerSignals === undefined` 178 ); 179 }, 'browserSignals.topLevelSellerSignals test.'); 180 181 subsetTest(promise_test, async test => { 182 await runReportArgumentValidationTest( 183 test, 184 // reportResultSuccessCondition: 185 `browserSignals.dataVersion === undefined`, 186 // reportWinSuccessCondition: 187 `browserSignals.dataVersion === undefined` 188 ); 189 }, 'browserSignals.dataVersion test.'); 190 191 subsetTest(promise_test, async test => { 192 await runReportArgumentValidationTest( 193 test, 194 // reportResultSuccessCondition: 195 `browserSignals.modifiedBid === undefined`, 196 // reportWinSuccessCondition: 197 `browserSignals.modifiedBid === undefined` 198 ); 199 }, 'browserSignals.modifiedBid test.'); 200 201 subsetTest(promise_test, async test => { 202 const uuid = generateUuid(test); 203 await runReportArgumentValidationTest( 204 test, 205 // reportResultSuccessCondition: 206 `browserSignals.highestScoringOtherBid === 0`, 207 // reportWinSuccessCondition: 208 `browserSignals.highestScoringOtherBid === 0`, 209 uuid 210 ); 211 }, 'browserSignals.highestScoringOtherBid with no other interest groups test.'); 212 213 subsetTest(promise_test, async test => { 214 const uuid = generateUuid(test); 215 await joinInterestGroup(test, uuid, 216 { 217 biddingLogicURL: createBiddingScriptURL({ bid: -2 }), 218 name: 'other interest group 1' }); 219 await joinInterestGroup(test, uuid, 220 { 221 biddingLogicURL: createBiddingScriptURL({ bid: -1 }), 222 name: 'other interest group 2' }); 223 await runReportArgumentValidationTest( 224 test, 225 // reportResultSuccessCondition: 226 `browserSignals.highestScoringOtherBid === 0`, 227 // reportWinSuccessCondition: 228 `browserSignals.highestScoringOtherBid === 0`, 229 uuid 230 ); 231 }, 'browserSignals.highestScoringOtherBid with other groups that do not bid.'); 232 233 subsetTest(promise_test, async test => { 234 const uuid = generateUuid(test); 235 await joinInterestGroup(test, uuid, 236 { 237 biddingLogicURL: createBiddingScriptURL({ bid: 2 }), 238 name: 'other interest group 1' }); 239 await joinInterestGroup(test, uuid, 240 { 241 biddingLogicURL: createBiddingScriptURL({ bid: 5 }), 242 name: 'other interest group 2' }); 243 await joinInterestGroup(test, uuid, 244 { 245 biddingLogicURL: createBiddingScriptURL({ bid: 2 }), 246 name: 'other interest group 3' }); 247 await runReportArgumentValidationTest( 248 test, 249 // reportResultSuccessCondition: 250 `browserSignals.highestScoringOtherBid === 5`, 251 // reportWinSuccessCondition: 252 `browserSignals.highestScoringOtherBid === 5`, 253 uuid 254 ); 255 }, 'browserSignals.highestScoringOtherBid with other bids.'); 256 257 subsetTest(promise_test, async test => { 258 await runReportArgumentValidationTest( 259 test, 260 // reportResultSuccessCondition: 261 `browserSignals.interestGroupName === undefined`, 262 // reportWinSuccessCondition: 263 `browserSignals.interestGroupName === 'default name'` 264 ); 265 }, 'browserSignals.interestGroupName test.'); 266 267 subsetTest(promise_test, async test => { 268 await runReportArgumentValidationTest( 269 test, 270 // reportResultSuccessCondition: 271 `browserSignals.madeHighestScoringOtherBid === undefined`, 272 // reportWinSuccessCondition: 273 `browserSignals.madeHighestScoringOtherBid === false` 274 ); 275 }, 'browserSignals.madeHighestScoringOtherBid with no other bids.'); 276 277 subsetTest(promise_test, async test => { 278 const uuid = generateUuid(test); 279 await joinInterestGroup(test, uuid, 280 { 281 biddingLogicURL: createBiddingScriptURL({ bid: -1 }), 282 name: 'other interest group 2' }); 283 await runReportArgumentValidationTest( 284 test, 285 // reportResultSuccessCondition: 286 `browserSignals.madeHighestScoringOtherBid === undefined`, 287 // reportWinSuccessCondition: 288 `browserSignals.madeHighestScoringOtherBid === false` 289 ); 290 }, 'browserSignals.madeHighestScoringOtherBid with group that did not bid.'); 291 292 subsetTest(promise_test, async test => { 293 const uuid = generateUuid(test); 294 await joinInterestGroup(test, uuid, 295 { 296 biddingLogicURL: createBiddingScriptURL({ bid: 1 }), 297 name: 'other interest group 2' }); 298 await runReportArgumentValidationTest( 299 test, 300 // reportResultSuccessCondition: 301 `browserSignals.madeHighestScoringOtherBid === undefined`, 302 // reportWinSuccessCondition: 303 `browserSignals.madeHighestScoringOtherBid === true`, 304 uuid 305 ); 306 }, 'browserSignals.madeHighestScoringOtherBid with other bid.'); 307 308 subsetTest(promise_test, async test => { 309 const uuid = generateUuid(test); 310 await runReportTest( 311 test, uuid, 312 { reportResultSuccessCondition: 313 `browserSignals.reportingTimeout === undefined`, 314 reportResult: 315 `sendReportTo('${createSellerReportURL(uuid)}');`, 316 reportWinSuccessCondition: 317 'browserSignals.reportingTimeout === 100', 318 reportWin: 319 `sendReportTo('${createBidderReportURL(uuid)}');` }, 320 // expectedReportURLs: 321 [createSellerReportURL(uuid), createBidderReportURL(uuid)], 322 // renderURLOverride 323 null, 324 // auctionConfigOverrides 325 {reportingTimeout: 100}); 326 }, 'browserSignals.reportingTimeout with custom value from auction config.'); 327 328 subsetTest(promise_test, async test => { 329 const uuid = generateUuid(test); 330 await runReportTest( 331 test, uuid, 332 { reportResultSuccessCondition: 333 `browserSignals.reportingTimeout === undefined`, 334 reportResult: 335 `sendReportTo('${createSellerReportURL(uuid)}');`, 336 reportWinSuccessCondition: 337 'browserSignals.reportingTimeout === 5000', 338 reportWin: 339 `sendReportTo('${createBidderReportURL(uuid)}');` }, 340 // expectedReportURLs: 341 [createSellerReportURL(uuid), createBidderReportURL(uuid)], 342 // renderURLOverride 343 null, 344 // auctionConfigOverrides 345 {reportingTimeout: 1234567890}); 346 }, 'browserSignals.reportingTimeout above the cap value.'); 347 348 subsetTest(promise_test, async test => { 349 await runReportArgumentValidationTest( 350 test, 351 // reportResultSuccessCondition: 352 `browserSignals.reportingTimeout === undefined`, 353 // reportWinSuccessCondition: 354 `browserSignals.reportingTimeout === 50` 355 ); 356 }, 'browserSignals.reportingTimeout default value.');