138 lines
2.9 KiB
HTML
138 lines
2.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<style>
|
|
* {
|
|
color: black;
|
|
}
|
|
#id1 target {
|
|
color: rgb(1, 1, 1);
|
|
}
|
|
|
|
#id2 > inert target {
|
|
color: rgb(2, 2, 2);
|
|
}
|
|
|
|
#id3 {
|
|
color: rgb(3, 3, 3);
|
|
}
|
|
|
|
#id4 {
|
|
color: rgb(4, 4, 4);
|
|
}
|
|
|
|
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<root>
|
|
<!-- With renderer -->
|
|
<inert>
|
|
<inert>
|
|
<inert></inert>
|
|
<target>
|
|
<inert></inert>
|
|
<target></target>
|
|
</target>
|
|
</inert>
|
|
<target></target>
|
|
<inert></inert>
|
|
</inert>
|
|
</root>
|
|
<root style="display:none;">
|
|
<!-- Without renderer -->
|
|
<inert>
|
|
<inert>
|
|
<inert></inert>
|
|
<target>
|
|
<inert></inert>
|
|
<target></target>
|
|
</target>
|
|
</inert>
|
|
<target></target>
|
|
<inert></inert>
|
|
</inert>
|
|
</root>
|
|
</body>
|
|
<script>
|
|
|
|
description('Test basic style invalidation optimization on id mutation');
|
|
|
|
function testStyleChangeType(tag, type)
|
|
{
|
|
var elements = document.querySelectorAll(tag);
|
|
for (var i = 0; i < elements.length; ++i) {
|
|
debug(window.internals.styleChangeType(elements[i]));
|
|
if (window.internals.styleChangeType(elements[i]) != type)
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function testStyleInvalidation(expectedDescendantStyleChange) {
|
|
shouldBeTrue('testStyleChangeType("root", "' + expectedDescendantStyleChange +'")');
|
|
}
|
|
|
|
function setId(name) {
|
|
debug("Setting id " + name);
|
|
var allRoots = document.querySelectorAll("root");
|
|
allRoots[0].id = name;
|
|
allRoots[1].id = name
|
|
}
|
|
|
|
function checkStyle(n) {
|
|
document.documentElement.offsetTop;
|
|
|
|
hasExpectedStyle = true;
|
|
expectedColor = 'rgb('+n+', '+n+', '+n+')';
|
|
var targets = document.querySelectorAll("target");
|
|
for (var i = 0; i < targets.length; ++i) {
|
|
hasExpectedStyle = getComputedStyle(targets[i]).color == expectedColor;
|
|
if (!hasExpectedStyle)
|
|
break;
|
|
}
|
|
shouldBeTrue("hasExpectedStyle");
|
|
}
|
|
|
|
checkStyle(0);
|
|
testStyleInvalidation("NoStyleChange");
|
|
|
|
setId('NotThere');
|
|
testStyleInvalidation("NoStyleChange");
|
|
|
|
setId('id1');
|
|
testStyleInvalidation("FullStyleChange");
|
|
checkStyle(1);
|
|
|
|
setId('id2');
|
|
testStyleInvalidation("FullStyleChange");
|
|
checkStyle(2);
|
|
|
|
setId('id1');
|
|
testStyleInvalidation("FullStyleChange");
|
|
checkStyle(1);
|
|
|
|
setId('id3');
|
|
testStyleInvalidation("FullStyleChange");
|
|
checkStyle(0);
|
|
|
|
setId('id4');
|
|
testStyleInvalidation("InlineStyleChange");
|
|
checkStyle(0);
|
|
|
|
setId('id4');
|
|
testStyleInvalidation("NoStyleChange");
|
|
checkStyle(0);
|
|
|
|
setId('NotThere');
|
|
testStyleInvalidation("InlineStyleChange");
|
|
|
|
setId('id1');
|
|
testStyleInvalidation("FullStyleChange");
|
|
checkStyle(1);
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</html>
|