blob: 997cce6f2fdf0c70755503d475ecdabd041e42ca [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test for Advanced Telemetry Generation</title>
<script src="/js-test-resources/js-test.js"></script>
<script src="resources/util.js"></script>
</head>
<body>
<script>
testRunner.setUseITPDatabase(true);
description("Tests that advanced telemetry for prevalent resources in the SQLite Database is calculated correctly.");
jsTestIsAsync = true;
const topFrameUrl = "http://127.0.0.5:8000/temp";
const topResourceUrl = "http://127.0.0.6:8000/temp";
const toUniqueRedirectUrl = "http://127.0.0.7:8000/temp";
const topFrameUrl1 = "http://127.0.0.1:8000/temp";
const topFrameUrl2 = "http://127.0.0.2:8000/temp";
const topFrameUrl3 = "http://127.0.0.3:8000/temp";
const topFrameUrl4 = "http://127.0.0.4:8000/temp";
const url1 = "http://127.0.1.1:8000/temp";
const url2 = "http://127.0.1.2:8000/temp";
const url3 = "http://127.0.1.3:8000/temp";
const url4 = "http://127.0.1.4:8000/temp";
const url5 = "http://127.0.1.5:8000/temp";
const twoDaysOld = Math.round((new Date()).getTime() / 1000) - 180000;
function checkClassificationAndContinue() {
if (!testRunner.isStatisticsPrevalentResource(url1)) {
testFailed("Host 1 did not get classified as prevalent resource.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsPrevalentResource(url2)) {
testFailed("Host 2 did not get classified as prevalent resource.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsPrevalentResource(url3)) {
testFailed("Host 3 did not get classified as prevalent resource.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsPrevalentResource(url4)) {
testFailed("Host 4 did not get classified as prevalent resource.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsPrevalentResource(url5)) {
testFailed("Host 5 did not get classified as prevalent resource.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsHasHadUserInteraction(url1)) {
testFailed("Host 1 did not get classified as having user interaction.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsHasHadUserInteraction(url2)) {
testFailed("Host 2 did not get classified as having user interaction.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsRegisteredAsSubFrameUnder(url1, topFrameUrl)) {
testFailed("Host 1 did not get set as subframe.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsRegisteredAsSubresourceUnder(url1, topResourceUrl)) {
testFailed("Host 1 did not get set as subresource.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsRegisteredAsSubFrameUnder(url2, topFrameUrl)) {
testFailed("Host 2 did not get set as subframe.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsRegisteredAsSubFrameUnder(url3, topFrameUrl)) {
testFailed("Host 3 did not get set as subframe.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsRegisteredAsSubresourceUnder(url3, topResourceUrl)) {
testFailed("Host 3 did not get set as subresource.");
setEnableFeature(false, finishJSTest);
} else if (!testRunner.isStatisticsRegisteredAsSubFrameUnder(url4, topFrameUrl)) {
testFailed("Host 4 did not get set as subframe.");
setEnableFeature(false, finishJSTest);
} else {
testPassed("Hosts classified correctly.");
runTelemetryAndContinue();
}
}
function makeUrlPrevalent(prevalentResourceUrl) {
testRunner.setStatisticsSubframeUnderTopFrameOrigin(prevalentResourceUrl, topFrameUrl1);
testRunner.setStatisticsSubframeUnderTopFrameOrigin(prevalentResourceUrl, topFrameUrl2);
testRunner.setStatisticsSubframeUnderTopFrameOrigin(prevalentResourceUrl, topFrameUrl3);
testRunner.setStatisticsSubframeUnderTopFrameOrigin(prevalentResourceUrl, topFrameUrl4);
testRunner.setStatisticsSubresourceUniqueRedirectTo(prevalentResourceUrl, topFrameUrl1);
testRunner.setStatisticsSubresourceUniqueRedirectTo(prevalentResourceUrl, topFrameUrl2);
testRunner.setStatisticsSubresourceUniqueRedirectTo(prevalentResourceUrl, topFrameUrl3);
testRunner.setStatisticsSubresourceUniqueRedirectTo(prevalentResourceUrl, topFrameUrl4);
testRunner.setStatisticsSubresourceUnderTopFrameOrigin(prevalentResourceUrl, topFrameUrl1);
testRunner.setStatisticsSubresourceUnderTopFrameOrigin(prevalentResourceUrl, topFrameUrl2);
testRunner.setStatisticsSubresourceUnderTopFrameOrigin(prevalentResourceUrl, topFrameUrl3);
testRunner.setStatisticsSubresourceUnderTopFrameOrigin(prevalentResourceUrl, topFrameUrl4);
}
function setUpStatisticsAndContinue() {
// merge statistic arguments: hostName, topFrameDomain, lastSeen, hadUserInteraction, mostRecentUserInteraction, isGrandfathered, isPrevalent, isVeryPrevalent, dataRecordsRemoved
makeUrlPrevalent(url1);
testRunner.setStatisticsSubframeUnderTopFrameOrigin(url1, topFrameUrl);
testRunner.setStatisticsSubresourceUnderTopFrameOrigin(url1, topResourceUrl);
testRunner.setStatisticsSubresourceUniqueRedirectTo(url1, toUniqueRedirectUrl);
makeUrlPrevalent(url2);
testRunner.setStatisticsSubframeUnderTopFrameOrigin(url2, topFrameUrl);
testRunner.setStatisticsSubresourceUniqueRedirectTo(url2, toUniqueRedirectUrl);
makeUrlPrevalent(url3);
testRunner.setStatisticsSubframeUnderTopFrameOrigin(url3, topFrameUrl);
testRunner.setStatisticsSubresourceUnderTopFrameOrigin(url3, topResourceUrl);
testRunner.setStatisticsSubresourceUniqueRedirectTo(url3, toUniqueRedirectUrl);
makeUrlPrevalent(url4);
testRunner.setStatisticsSubframeUnderTopFrameOrigin(url4, topFrameUrl);
testRunner.setStatisticsSubresourceUnderTopFrameOrigin(url4, topResourceUrl);
makeUrlPrevalent(url5);
// set URLs 1 and 2 to have user interaction. UI for url 2 will be set to be 2 days old.
testRunner.setStatisticsHasHadUserInteraction(url1, true, function() {
testRunner.setStatisticsMergeStatistic(url2, topFrameUrl, "", twoDaysOld, true, twoDaysOld, false, true, false, 0, function() {
testRunner.installStatisticsDidScanDataRecordsCallback(checkClassificationAndContinue);
testRunner.installStatisticsDidRunTelemetryCallback(checkTelemetry);
testRunner.statisticsProcessStatisticsAndDataRecords();
});
});
}
function runTelemetryAndContinue() {
testRunner.statisticsSubmitTelemetry();
}
var testResult;
function checkTelemetry(result) {
testResult = result;
shouldBe("testResult.numberOfPrevalentResources", "5");
shouldBe("testResult.numberOfPrevalentResourcesWithUserInteraction", "2");
shouldBe("testResult.numberOfPrevalentResourcesWithoutUserInteraction", "3");
shouldBe("testResult.topPrevalentResourceWithUserInteractionDaysSinceUserInteraction", "0");
shouldBe("testResult.medianDaysSinceUserInteractionPrevalentResourceWithUserInteraction", "1");
shouldBe("testResult.top3NumberOfPrevalentResourcesWithUI", "2");
shouldBe("testResult.top3MedianSubFrameWithoutUI", "5");
shouldBe("testResult.top3MedianSubResourceWithoutUI", "5");
shouldBe("testResult.top3MedianUniqueRedirectsWithoutUI", "4");
shouldBe("testResult.top3MedianDataRecordsRemovedWithoutUI", "0");
setEnableFeature(false, finishJSTest);
}
if (window.testRunner) {
setEnableFeature(true, function() {
testRunner.setStatisticsNotifyPagesWhenTelemetryWasCaptured(true);
setUpStatisticsAndContinue();
});
}
</script>
</body>
</html>