| Index: LayoutTests/fast/dynamic/position-change-to-absolute-with-positioned-child-crash.html
|
| diff --git a/LayoutTests/fast/dynamic/position-change-to-absolute-with-positioned-child-crash.html b/LayoutTests/fast/dynamic/position-change-to-absolute-with-positioned-child-crash.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..891e8198c4b70d85ce5dad88331228b1f78338b5
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/dynamic/position-change-to-absolute-with-positioned-child-crash.html
|
| @@ -0,0 +1,129 @@
|
| +<!DOCTYPE HTML>
|
| +<script src="../../resources/testharness.js"></script>
|
| +<script src="../../resources/testharnessreport.js"></script>
|
| +<div id="log"></div>
|
| +<div id="container">
|
| +<p id="description">
|
| + This tests that changing the container's position from fixed or relative to absolute is safe,<br>
|
| + when child container with fixed position is present.<br>
|
| + PASS, if no crash or assert in debug.
|
| +</p>
|
| +</div>
|
| +<script>
|
| +var valueList = ["static", "relative", "absolute", "fixed"]
|
| +for (var outerValue of valueList) {
|
| + for (var innerValue of valueList) {
|
| + for (var afterValue of valueList) {
|
| + var tests = [];
|
| + var outerElement, innerElement, midElement;
|
| + if (outerValue !== afterValue) {
|
| + outerElement = document.createElement("div");
|
| + innerElement = document.createElement("div");
|
| + outerElement.style.position = outerValue;
|
| + innerElement.style.position = innerValue;
|
| + outerElement.appendChild(innerElement);
|
| + container.appendChild(outerElement);
|
| + tests.push(["position:" + outerValue + " with a " + innerValue + " child to " + afterValue, function () {
|
| + outerElement.style.position = afterValue;
|
| + }]);
|
| +
|
| + outerElement = document.createElement("div");
|
| + innerElement = document.createElement("div");
|
| + outerElement.style.position = outerValue;
|
| + outerElement.style.transform = "rotate(3deg)";
|
| + innerElement.style.position = innerValue;
|
| + outerElement.appendChild(innerElement);
|
| + container.appendChild(outerElement);
|
| + tests.push(["position:" + outerValue + " with a " + innerValue + " child to " + afterValue, function () {
|
| + outerElement.style.position = afterValue;
|
| + }]);
|
| +
|
| + outerElement = document.createElement("div");
|
| + innerElement = document.createElement("div");
|
| + outerElement.style.position = outerValue;
|
| + outerElement.style.transform = "rotate(3deg)";
|
| + innerElement.style.position = innerValue;
|
| + outerElement.appendChild(innerElement);
|
| + container.appendChild(outerElement);
|
| + tests.push(["position:" + outerValue + " and transform with a " + innerValue + " child to " + afterValue + " without transform", function () {
|
| + outerElement.style.position = afterValue;
|
| + outerElement.style.transform = "none";
|
| + innerElement.style.width = "50%";
|
| + }]);
|
| + }
|
| +
|
| + outerElement = document.createElement("div");
|
| + midElement = document.createElement("div");
|
| + innerElement = document.createElement("div");
|
| + outerElement.style.position = outerValue;
|
| + innerElement.style.position = innerValue;
|
| + outerElement.appendChild(midElement);
|
| + midElement.appendChild(innerElement);
|
| + container.appendChild(outerElement);
|
| + tests.push(["position:static with a " + outerValue + " parent and a " + innerValue + " child to " + afterValue, function () {
|
| + midElement.style.position = afterValue;
|
| + innerElement.style.width = "50%";
|
| + }]);
|
| + }
|
| +
|
| + outerElement = document.createElement("div");
|
| + midElement = document.createElement("div");
|
| + innerElement = document.createElement("div");
|
| + outerElement.style.position = outerValue;
|
| + innerElement.style.position = innerValue;
|
| + outerElement.appendChild(midElement);
|
| + midElement.appendChild(innerElement);
|
| + container.appendChild(outerElement);
|
| + tests.push(["position:static with a " + outerValue + " parent and a " + innerValue + " child to transform", function () {
|
| + midElement.style.transform = "translateX(0)";
|
| + innerElement.style.width = "50%";
|
| + }]);
|
| +
|
| + outerElement = document.createElement("div");
|
| + midElement = document.createElement("div");
|
| + innerElement = document.createElement("div");
|
| + outerElement.style.position = outerValue;
|
| + midElement.style.transform = "translateX(0)";
|
| + innerElement.style.position = innerValue;
|
| + outerElement.appendChild(midElement);
|
| + midElement.appendChild(innerElement);
|
| + container.appendChild(outerElement);
|
| + tests.push(["position:static and transform with a " + outerValue + " parent and a " + innerValue + " child to without transform", function () {
|
| + midElement.style.transform = "none";
|
| + innerElement.style.width = "50%";
|
| + }]);
|
| +
|
| + outerElement = document.createElement("div");
|
| + innerElement = document.createElement("div");
|
| + outerElement.style.position = outerValue;
|
| + innerElement.style.position = innerValue;
|
| + outerElement.appendChild(innerElement);
|
| + container.appendChild(outerElement);
|
| + tests.push(["Add transform position:" + outerValue + " with a " + innerValue + " child", function () {
|
| + outerElement.style.transform = "rotate(3deg)";
|
| + innerElement.style.width = "50%";
|
| + }]);
|
| +
|
| + outerElement = document.createElement("div");
|
| + innerElement = document.createElement("div");
|
| + outerElement.style.position = outerValue;
|
| + outerElement.style.transform = "rotate(3deg)";
|
| + innerElement.style.position = innerValue;
|
| + outerElement.appendChild(innerElement);
|
| + container.appendChild(outerElement);
|
| + tests.push(["Remove transform from position:" + outerValue + " and transform with a " + innerValue + " child", function () {
|
| + outerElement.style.transform = "none";
|
| + innerElement.style.width = "50%";
|
| + }]);
|
| +
|
| + document.body.offsetHeight;
|
| + for (var t of tests) {
|
| + test(function () {
|
| + t[1]();
|
| + // No assert() are needed, we just check layout hits no ASSERT nor crash.
|
| + document.body.offsetHeight;
|
| + }, t[0]);
|
| + }
|
| + }
|
| +}
|
| +</script>
|
|
|