blob: e167df7fe684e9ef3492e1b085e4ee05f72a6016 [file] [log] [blame]
<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<script src="/js-test-resources/js-test.js"></script>
<script src="/js-test-resources/ui-helper.js"></script>
<style>
.wide-link {
width: 150px;
display: inline-block;
}
</style>
</head>
<body onload="runAllTests()">
<div id="description"></div>
<div id="output"></div><br>
<div id="console"></div>
<script>
description("Test for validity of private click measurement attributes on anchor tags.");
jsTestIsAsync = true;
function createPrivateClickMeasurementAnchorElement(elementID, sourceID, destination) {
let anchorElement = document.createElement("a");
anchorElement.id = elementID;
anchorElement.classList.add("wide-link");
if (sourceID !== null)
anchorElement.attributionSourceId = sourceID;
if (destination !== null)
anchorElement.attributionDestination = destination;
anchorElement.href = "#";
anchorElement.innerText = "Link" + currentTest;
return anchorElement;
}
function activateElement(elementID, callback) {
UIHelper.activateElement(document.getElementById(elementID)).then(
function () {
callback();
},
function () {
testFailed("Promise rejected.");
finishJSTest();
}
);
}
let currentTest = 0;
function runOneTest(sourceID, destination, callback) {
const currentElementID = "test" + currentTest++;
const anchorElement = createPrivateClickMeasurementAnchorElement(currentElementID, sourceID, destination);
output.appendChild(anchorElement);
activateElement(currentElementID, callback);
}
const validSourceID = 3;
const validDestination = "https://webkit.org";
const sameSite = document.location.origin;
const testCases = [
[ validSourceID, validDestination ],
[ 298, validDestination ], // Too high source ID.
[ null, validDestination ], // No source ID.
[ validSourceID, "webkit.org" ], // Missing destination protocol.
[ validSourceID, "://webkit.org" ], // Partially missing destination protocol.
[ validSourceID, "" ], // Non-ASCII characters as destination.
[ validSourceID, "" ], // Empty destination.
[ validSourceID, sameSite ], // Same-site destination.
[ validSourceID, null ] // No destination.
];
function runAllTests() {
if (currentTest < testCases.length)
runOneTest(testCases[currentTest][0], testCases[currentTest][1], runAllTests);
else {
document.body.removeChild(output);
finishJSTest();
}
}
</script>
</body>
</html>