blob: 1de82365a4f1cd9b5dd209bec08a223d53a2e2f4 [file] [log] [blame]
(async function(testRunner) {
const base = 'https://a.test:8443/inspector-protocol/resources/'
const bp = testRunner.browserP();
const {page, session, dp} = await testRunner.startBlank(
'Tracing of FLEDGE worklets.', {url: base + 'fledge_join.html?40'});
const TracingHelper =
await testRunner.loadScript('../resources/tracing-test.js');
const tracingHelper = new TracingHelper(testRunner, session);
await tracingHelper.startTracing(
'fledge,disabled-by-default-devtools.timeline');
function handleUrn(input) {
if (typeof input === 'string' && input.startsWith('urn:uuid:'))
return 'urn:uuid:(randomized)';
return input;
}
function verifyAuctionProcessEventData(data) {
if (data.type !== 'bidder' && data.type !== 'seller') {
testRunner.log(
'Weird AuctionWorkletRunningInProcess event type:' + data.type);
}
if (isNaN(parseInt(data.pid))) {
testRunner.log(
'Weird AuctionWorkletRunningInProcess event pid:' + data.pid);
}
if (!('target' in data)) {
testRunner.log('AuctionWorkletRunningInProcess event missing target');
}
}
const auctionJs = `
navigator.runAdAuction({
decisionLogicUrl: "${base}fledge_decision_logic.js.php",
seller: "https://a.test:8443",
interestGroupBuyers: ["https://a.test:8443"]})`;
const winner = await session.evaluateAsync(auctionJs);
testRunner.log('Auction winner:' + handleUrn(winner));
const devtoolsEvents =
await tracingHelper.stopTracing(/fledge|devtools.timeline/);
let sawBidders = 0;
let sawSellers = 0;
// For process ones, we don't count them since the particulars depend on
// whether this is on Android or not.
let sawBidderRunningInProcess = 'nope';
let sawSellerRunningInProcess = 'nope';
let sawBidderDoneWithProcess = 'nope';
for (ev of devtoolsEvents) {
if (ev.name === 'AuctionWorkletRunningInProcess') {
let data = ev.args.data;
if (data.type === 'bidder') {
sawBidderRunningInProcess = data.host;
} else if (data.type === 'seller') {
sawSellerRunningInProcess = data.host;
}
verifyAuctionProcessEventData(data);
}
if (ev.name === 'AuctionWorkletDoneWithProcess') {
let data = ev.args.data;
if (data.type === 'bidder') {
sawBidderDoneWithProcess = data.host;
}
// Note that seller unload is not guaranteed to be observed, as it can
// happen after auction completion.
verifyAuctionProcessEventData(data);
}
if (ev.name === 'generate_bid')
++sawBidders;
if (ev.name === 'score_ad')
++sawSellers;
}
if (sawBidders >= 30) {
testRunner.log('Saw enough bidders');
} else {
testRunner.log('Saw too few bidders:' + sawBidders);
}
if (sawSellers >= 30) {
testRunner.log('Saw enough sellers');
} else {
testRunner.log('Saw too few sellers:' + sawSellers);
}
testRunner.log(
'Saw process assignment for bidder for host:' +
sawBidderRunningInProcess);
testRunner.log(
'Saw process assignment for seller for host:' +
sawSellerRunningInProcess);
testRunner.log(
'Saw process release for bidder for host:' + sawBidderDoneWithProcess);
// Note that seller unload is not guaranteed to be observed, as it can happen
// after auction completion.
testRunner.completeTest();
})