/**
* Test for Bug 493881: Changes to legacy HTML color properties before the BODY is loaded
* should be ignored. Additionally, after BODY loads, setting any of these properties to undefined
* should cause them to be returned as the string "undefined".
*/
SimpleTest.waitForExplicitFinish();
var legacyProps = [
"fgColor",
"bgColor",
"linkColor",
"vlinkColor",
"alinkColor",
];
var testColors = ["blue", "silver", "green", "orange", "red"];
var rgbTestColors = [
"rgb(255, 0, 0)",
"rgb(192, 192, 192)",
"rgb(0, 128, 0)",
"rgb(255, 165, 0)",
"rgb(255, 0, 0)",
];
var idPropList = [
{ id: "plaintext", prop: "color" },
{ id: "body", prop: "background-color" },
{ id: "nonvisitedlink", prop: "color" },
{ id: "visitedlink", prop: "color" },
];
var initialValues = [];
function setAndTestProperty(prop, color) {
var initial = document[prop];
document[prop] = color;
is(document[prop], initial, "document[" + prop + "] not ignored before body");
return initial;
}
/**
* Attempt to set legacy color properties before BODY exists, and verify that such
* attempts are ignored.
*/
for (let i = 0; i < legacyProps.length; i++) {
initialValues[i] = setAndTestProperty(legacyProps[i], testColors[i]);
}
/**
* After BODY loads, run some more tests.
*/
addLoadEvent(function() {
// Verify that the legacy color properties still have their original values.
for (let i = 0; i < legacyProps.length; i++) {
is(
document[legacyProps[i]],
initialValues[i],
"document[" + legacyProps[i] + "] altered after body load"
);
}
// Verify that legacy color properties applied before BODY are really ignored when rendering.
// Save current computed style colors for later use.
for (let i = 0; i < idPropList.length; i++) {
var style = window.getComputedStyle(
document.getElementById(idPropList[i].id)
);
var color = style.getPropertyValue(idPropList[i].prop);
idPropList[i].initialComputedColor = color;
isnot(color, rgbTestColors[i], "element rendered using before-body style");
}
// XXX: Can't get links to visually activate via script events, so can't verify
// that the alinkColor property was not applied.
// Verify that setting legacy color props to undefined after BODY loads will cause them
// to be read as the string "undefined".
for (let i = 0; i < legacyProps.length; i++) {
document[legacyProps[i]] = undefined;
is(
document[legacyProps[i]],
"undefined",
"Unexpected value of " + legacyProps[i] + " after setting to undefined"
);
}
// Verify that setting legacy color props to undefined led to result
// of parsing undefined as a color.
for (let i = 0; i < idPropList.length; i++) {
var style = window.getComputedStyle(
document.getElementById(idPropList[i].id)
);
var color = style.getPropertyValue(idPropList[i].prop);
is(
color,
"rgb(0, 239, 14)",
"element's style should get result of parsing undefined as a color"
);
}
// Mark the test as finished.
setTimeout(SimpleTest.finish, 0);
});