Diff
Modified: trunk/LayoutTests/ChangeLog (185268 => 185269)
--- trunk/LayoutTests/ChangeLog 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/ChangeLog 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,3 +1,29 @@
+2015-06-05 Chris Dumez <[email protected]>
+
+ Regression(r176212): Broke app switching on iCloud.com
+ https://bugs.webkit.org/show_bug.cgi?id=145708
+ <rdar://problem/21235277>
+
+ Reviewed by Simon Fraser.
+
+ Remove layout tests covering DOM Timer throttling.
+
+ * fast/canvas/canvas-outside-viewport-timer-throttling-expected.txt: Removed.
+ * fast/canvas/canvas-outside-viewport-timer-throttling.html: Removed.
+ * fast/dom/nested-timer-display-none-element-throttling-expected.txt: Removed.
+ * fast/dom/nested-timer-display-none-element-throttling.html: Removed.
+ * fast/dom/repeating-timer-display-none-element-throttling-expected.txt: Removed.
+ * fast/dom/repeating-timer-display-none-element-throttling.html: Removed.
+ * fast/dom/repeating-timer-element-overflow-hidden-throttling-expected.txt: Removed.
+ * fast/dom/repeating-timer-element-overflow-hidden-throttling.html: Removed.
+ * fast/dom/resources/timer-throttling-iframe.html: Removed.
+ * fast/dom/timer-throttle-on-scrolling-iframe-away-expected.txt: Removed.
+ * fast/dom/timer-throttle-on-scrolling-iframe-away.html: Removed.
+ * fast/dom/timer-unthrottle-on-layout-expected.txt: Removed.
+ * fast/dom/timer-unthrottle-on-layout.html: Removed.
+ * fast/dom/timer-unthrottle-on-scroll-expected.txt: Removed.
+ * fast/dom/timer-unthrottle-on-scroll.html: Removed.
+
2015-06-05 Myles C. Maxfield <[email protected]>
[iOS] Emoji overlap preceeding lines
Deleted: trunk/LayoutTests/fast/canvas/canvas-outside-viewport-timer-throttling-expected.txt (185268 => 185269)
--- trunk/LayoutTests/fast/canvas/canvas-outside-viewport-timer-throttling-expected.txt 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/canvas/canvas-outside-viewport-timer-throttling-expected.txt 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,13 +0,0 @@
-Test that a DOM timer drawing on a canvas outside viewport gets throttled.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-The timer should initially not be throttled.
-PASS internals.isTimerThrottled(timeoutId) is false
-The timer should now be throttled as it is drawing on a canvas outside viewport.
-PASS internals.isTimerThrottled(timeoutId) is true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
Deleted: trunk/LayoutTests/fast/canvas/canvas-outside-viewport-timer-throttling.html (185268 => 185269)
--- trunk/LayoutTests/fast/canvas/canvas-outside-viewport-timer-throttling.html 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/canvas/canvas-outside-viewport-timer-throttling.html 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src=""
-<script>
-var i = 0;
-var context;
-var timeoutId;
-var wasThrottled;
-
-function loop()
-{
- i = (i + 1) % 255;
- context.fillStyle = "rgb(" + i + ", 0, 0)";
- context.fillRect(0, 0, 150, 150);
-
- // 5 iterations should suffice to throttle the timer.
- if (i == 5) {
- debug("The timer should now be throttled as it is drawing on a canvas outside viewport.");
- shouldBeTrue("internals.isTimerThrottled(timeoutId)");
- clearInterval(timeoutId);
- finishJSTest();
- }
-}
-
-function runTest() {
- context = document.getElementById("canvas").getContext('2d');
-
- timeoutId = setInterval(loop, 5);
- debug("The timer should initially not be throttled.");
- shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-}
-</script>
-</head>
-<body _onload_="runTest();">
-<script>
-description("Test that a DOM timer drawing on a canvas outside viewport gets throttled.");
-jsTestIsAsync = true;
-</script>
-<div style="position: relative; width: 1600px; height: 2400px;">
- <canvas id="canvas" width=150 height=150 style="position:absolute; left: 600px; top: 800px;"></canvas>
-</div>
-<script src=""
-</body>
-</html>
Deleted: trunk/LayoutTests/fast/dom/nested-timer-display-none-element-throttling-expected.txt (185268 => 185269)
--- trunk/LayoutTests/fast/dom/nested-timer-display-none-element-throttling-expected.txt 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/nested-timer-display-none-element-throttling-expected.txt 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,18 +0,0 @@
-Tests that a nested timer changing the style of a display:none element gets throttled.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-The timer should initially not be throttled.
-PASS internals.isTimerThrottled(timeoutId) is false
-5th iteration, timer should have been throttled.
-PASS wasThrottled is true
-6th iteration, timer should still be throttled.
-PASS internals.isTimerThrottled(timeoutId) is true
-Timer mutated the DOM tree.
-7th iteration, timer should no longer be throttled.
-PASS internals.isTimerThrottled(timeoutId) is false
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
Deleted: trunk/LayoutTests/fast/dom/nested-timer-display-none-element-throttling.html (185268 => 185269)
--- trunk/LayoutTests/fast/dom/nested-timer-display-none-element-throttling.html 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/nested-timer-display-none-element-throttling.html 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,58 +0,0 @@
-<!DOCTYPE html>
-<body>
-<script src=""
-<div id="testElement" style="display: none">Test</div>
-<script>
-description("Tests that a nested timer changing the style of a display:none element gets throttled.");
-jsTestIsAsync = true;
-
-var iterationCount = 0;
-var timeoutId;
-var testElement = document.getElementById("testElement");
-var wasThrottled = false;
-
-function checkTimerThrottleState()
-{
- if (iterationCount == 5) {
- // Do not use shouldBeTrue() here because it would cause a DOM tree mutation and
- // unthrottle the DOM Timer.
- wasThrottled = internals.isTimerThrottled(timeoutId);
- } else if (iterationCount == 6) {
- debug("5th iteration, timer should have been throttled.");
- shouldBeTrue("wasThrottled");
- debug("6th iteration, timer should still be throttled.");
- shouldBeTrue("internals.isTimerThrottled(timeoutId)");
- } else if (iterationCount >= 6) {
- // Timer should be unthrottled due to the DOM tree mutation caused by shouldBeTrue() in
- // the previous iteration.
- debug("" + iterationCount + "th iteration, timer should no longer be throttled.");
- shouldBeFalse("internals.isTimerThrottled(timeoutId)");
- clearTimeout(timeoutId);
- finishJSTest();
- }
-}
-
-function timerCallback()
-{
- ++iterationCount;
- // Interact with the style of the element.
- testElement.style["left"] = "" + iterationCount + "px";
-
- // 5 iterations should be sufficient to throttle the timer.
- if (iterationCount >= 5) {
- setTimeout(checkTimerThrottleState, 0);
- if (iterationCount == 7) {
- // The call to debug() mutates the DOM tree.
- debug("Timer mutated the DOM tree.");
- }
- }
-
- timeoutId = setTimeout(timerCallback, 0);
-}
-
-timeoutId = setTimeout(timerCallback, 0);
-debug("The timer should initially not be throttled.");
-shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-</script>
-<script src=""
-</body>
Deleted: trunk/LayoutTests/fast/dom/repeating-timer-display-none-element-throttling-expected.txt (185268 => 185269)
--- trunk/LayoutTests/fast/dom/repeating-timer-display-none-element-throttling-expected.txt 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/repeating-timer-display-none-element-throttling-expected.txt 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,18 +0,0 @@
-Tests that a repeating timer changing the style of a display:none element gets throttled.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-The timer should initially not be throttled.
-PASS internals.isTimerThrottled(timeoutId) is false
-5th iteration, timer should have been throttled.
-PASS wasThrottled is true
-6th iteration, timer should still be throttled.
-PASS internals.isTimerThrottled(timeoutId) is true
-Timer mutated the DOM tree.
-7th iteration, timer should no longer be throttled.
-PASS internals.isTimerThrottled(timeoutId) is false
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
Deleted: trunk/LayoutTests/fast/dom/repeating-timer-display-none-element-throttling.html (185268 => 185269)
--- trunk/LayoutTests/fast/dom/repeating-timer-display-none-element-throttling.html 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/repeating-timer-display-none-element-throttling.html 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-<body>
-<script src=""
-<div id="testElement" style="display: none">Test</div>
-<script>
-description("Tests that a repeating timer changing the style of a display:none element gets throttled.");
-jsTestIsAsync = true;
-
-var iterationCount = 0;
-var timeoutId;
-var testElement = document.getElementById("testElement");
-var wasThrottled = false;
-
-function timerCallback()
-{
- ++iterationCount;
- // Interact with the style of the element.
- testElement.style["left"] = "" + iterationCount + "px";
-
- // 5 iterations should suffice to throttle the timer.
- if (iterationCount == 5) {
- // Do not use shouldBeTrue() here because it would cause a DOM tree mutation and
- // unthrottle the DOM Timer.
- wasThrottled = internals.isTimerThrottled(timeoutId);
- } else if (iterationCount == 6) {
- debug("5th iteration, timer should have been throttled.");
- shouldBeTrue("wasThrottled");
- debug("6th iteration, timer should still be throttled.");
- shouldBeTrue("internals.isTimerThrottled(timeoutId)");
- debug("Timer mutated the DOM tree.");
- } else if (iterationCount >= 6) {
- // Timer should be unthrottled due to the DOM tree mutation caused by shouldBeTrue() in
- // the previous iteration.
- debug("" + iterationCount + "th iteration, timer should no longer be throttled.");
- shouldBeFalse("internals.isTimerThrottled(timeoutId)");
- clearInterval(timeoutId);
- finishJSTest();
- }
-}
-
-timeoutId = setInterval(timerCallback, 0);
-debug("The timer should initially not be throttled.");
-shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-</script>
-<script src=""
-</body>
Deleted: trunk/LayoutTests/fast/dom/repeating-timer-element-overflow-hidden-throttling-expected.txt (185268 => 185269)
--- trunk/LayoutTests/fast/dom/repeating-timer-element-overflow-hidden-throttling-expected.txt 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/repeating-timer-element-overflow-hidden-throttling-expected.txt 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,16 +0,0 @@
-Tests that a repeating timer changing the style of an element with 0 height and hidden overflow content that have their own layer gets throttled.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS testElement.offsetHeight is 0
-The timer should initially not be throttled.
-PASS internals.isTimerThrottled(timeoutId) is false
-5th iteration, timer should have been throttled.
-PASS wasThrottled is true
-6th iteration, timer should still be unthrottled.
-PASS internals.isTimerThrottled(timeoutId) is true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
Deleted: trunk/LayoutTests/fast/dom/repeating-timer-element-overflow-hidden-throttling.html (185268 => 185269)
--- trunk/LayoutTests/fast/dom/repeating-timer-element-overflow-hidden-throttling.html 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/repeating-timer-element-overflow-hidden-throttling.html 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<body>
-<script src=""
-<div id="testElement" style="height: 0; overflow: hidden;">
-<div style="-webkit-transform: translateX(0);">test1</div>
-<div style="-webkit-transform: translateX(0);">test2</div>
-</div>
-<script>
-description("Tests that a repeating timer changing the style of an element with 0 height and hidden overflow content that have their own layer gets throttled.");
-jsTestIsAsync = true;
-
-var iterationCount = 0;
-var timeoutId;
-var testElement = document.getElementById("testElement");
-var wasThrottled = false;
-
-function timerCallback()
-{
- ++iterationCount;
- // Interact with the style of the element.
- testElement.style["left"] = "" + iterationCount + "px";
-
- // 5 iterations should suffice to throttle the timer.
- if (iterationCount == 5) {
- // Do not use shouldBeTrue() here because it would cause a DOM tree mutation and
- // unthrottle the DOM Timer.
- wasThrottled = internals.isTimerThrottled(timeoutId);
- } else if (iterationCount == 6) {
- debug("5th iteration, timer should have been throttled.");
- shouldBeTrue("wasThrottled");
- debug("6th iteration, timer should still be unthrottled.");
- shouldBeTrue("internals.isTimerThrottled(timeoutId)");
- clearInterval(timeoutId);
- finishJSTest();
- }
-}
-
-shouldBe("testElement.offsetHeight", "0");
-
-timeoutId = setInterval(timerCallback, 0);
-debug("The timer should initially not be throttled.");
-shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-</script>
-<script src=""
-</body>
Deleted: trunk/LayoutTests/fast/dom/resources/timer-throttling-iframe.html (185268 => 185269)
--- trunk/LayoutTests/fast/dom/resources/timer-throttling-iframe.html 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/resources/timer-throttling-iframe.html 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<body>
-<div id="testElement">TEST</div>
-<script>
-var testElement = document.getElementById("testElement");
-var iterationCount = 0;
-var timeoutId;
-
-function timerCallback() {
- ++iterationCount;
-
- // Change style of Element.
- testElement.style["opacity"] = "" + (iterationCount / 10.);
-
- parent.timerFired(iterationCount, internals.isTimerThrottled(timeoutId));
-
- if (iterationCount == 7)
- clearInterval(timeoutId);
-}
-
-timeoutId = setInterval(timerCallback, 0);
-</script>
-</body>
Deleted: trunk/LayoutTests/fast/dom/timer-throttle-on-scrolling-iframe-away-expected.txt (185268 => 185269)
--- trunk/LayoutTests/fast/dom/timer-throttle-on-scrolling-iframe-away-expected.txt 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/timer-throttle-on-scrolling-iframe-away-expected.txt 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,14 +0,0 @@
-Tests that a repeating timer in an iframe changing the style of an element gets throttled when scrolling the frame out of view.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-Frame is inside viewport, timer should not be throttled
-PASS isTimerThrottledBeforeScroll is false
-Scrolling frame out of view.
-Frame is outside viewport, timer should now be throttled
-PASS isTimerThrottledAfterScroll is true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
Deleted: trunk/LayoutTests/fast/dom/timer-throttle-on-scrolling-iframe-away.html (185268 => 185269)
--- trunk/LayoutTests/fast/dom/timer-throttle-on-scrolling-iframe-away.html 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/timer-throttle-on-scrolling-iframe-away.html 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<body>
-<script src=""
-<script>
-description("Tests that a repeating timer in an iframe changing the style of an element gets throttled when scrolling the frame out of view.");
-jsTestIsAsync = true;
-
-function scrollFrameOutOfView()
-{
- debug("Scrolling frame out of view.");
- window.scrollBy(0,800);
-}
-
-function timerFired(iterationCount, isThrottled) {
- // 5 iterations should suffice to throttle the timer.
- if (iterationCount == 5) {
- debug("Frame is inside viewport, timer should not be throttled");
- isTimerThrottledBeforeScroll = isThrottled;
- shouldBeFalse("isTimerThrottledBeforeScroll");
- scrollFrameOutOfView();
- } else if (iterationCount == 7) {
- debug("Frame is outside viewport, timer should now be throttled");
- isTimerThrottledAfterScroll = isThrottled;
- shouldBeTrue("isTimerThrottledAfterScroll");
- finishJSTest();
- }
-}
-
-</script>
-<div style="position: relative; width: 1600px; height: 2400px; background-color: green;">
- <iframe id="testFrame" src="" style="width: 100px; height: 100px;"></iframe>
-</div>
-<script src=""
-</body>
Deleted: trunk/LayoutTests/fast/dom/timer-unthrottle-on-layout-expected.txt (185268 => 185269)
--- trunk/LayoutTests/fast/dom/timer-unthrottle-on-layout-expected.txt 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/timer-unthrottle-on-layout-expected.txt 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,19 +0,0 @@
-Tests that a repeating timer changing the style of an element outside viewport gets unthrottled if the elements is inside the viewport after layout.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS internals.isTimerThrottled(timeoutId) is false
-5th iteration, timer should be throttled as the element is outside the viewport.
-PASS wasThrottled is true
-Timer should still be throttled before layout.
-PASS internals.isTimerThrottled(timeoutId) is true
-Forcing layout
-Timer should no longer be throttled
-PASS internals.isTimerThrottled(timeoutId) is false
-6th iteration, timer should still be unthrottled.
-PASS internals.isTimerThrottled(timeoutId) is false
-PASS successfullyParsed is true
-
-TEST COMPLETE
-TEST
Deleted: trunk/LayoutTests/fast/dom/timer-unthrottle-on-layout.html (185268 => 185269)
--- trunk/LayoutTests/fast/dom/timer-unthrottle-on-layout.html 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/timer-unthrottle-on-layout.html 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,62 +0,0 @@
-<!DOCTYPE html>
-<body>
-<script src=""
-<div style="position: relative; width: 1600px; height: 2400px; background-color: green;">
- <div id="parentDiv" style="position:absolute; left: 600px; top: 800px;">
- <div id="testElement">TEST</div>
- </div>
-</div>
-<script>
-description("Tests that a repeating timer changing the style of an element outside viewport gets unthrottled if the elements is inside the viewport after layout.");
-jsTestIsAsync = true;
-
-var testElement = document.getElementById('testElement');
-var iterationCount = 0;
-var wasThrottled = false;
-var wasThrottledBeforeScroll = false;
-var timeoutId;
-
-function moveElementInsideViewport()
-{
- debug("5th iteration, timer should be throttled as the element is outside the viewport.");
- shouldBeTrue("wasThrottled");
-
- var parentDiv = document.getElementById("parentDiv");
- parentDiv.style["top"] = "100px";
-
- debug("Timer should still be throttled before layout.");
- shouldBeTrue("internals.isTimerThrottled(timeoutId)");
-
- debug("Forcing layout");
- parentDiv.offsetTop;
-
- debug("Timer should no longer be throttled");
- shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-}
-
-function timerCallback()
-{
- ++iterationCount;
- // Change the style of the element while it is outside viewport.
- testElement.style["opacity"] = "" + (iterationCount / 10.);
-
- // 5 iterations should be sufficient to throttle the timer.
- if (iterationCount == 5) {
- // Do not use shouldBeTrue() because it would cause a DOM tree mutation
- // and unthrottle the timer.
- wasThrottled = internals.isTimerThrottled(timeoutId);
- setTimeout(moveElementInsideViewport, 0);
- } else if (iterationCount == 6) {
- debug("6th iteration, timer should still be unthrottled.");
- shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-
- clearInterval(timeoutId);
- finishJSTest();
- }
-}
-
-timeoutId = setInterval(timerCallback, 0);
-shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-</script>
-<script src=""
-</body>
Deleted: trunk/LayoutTests/fast/dom/timer-unthrottle-on-scroll-expected.txt (185268 => 185269)
--- trunk/LayoutTests/fast/dom/timer-unthrottle-on-scroll-expected.txt 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/timer-unthrottle-on-scroll-expected.txt 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,19 +0,0 @@
-Tests that a repeating timer changing the style of an element outside viewport gets unthrottled when scrolling the element into view.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS internals.isTimerThrottled(timeoutId) is false
-5th iteration, timer should be throttled as the element is outside the viewport.
-PASS wasThrottled is true
-Timer should still be throttled before scrolling.
-PASS internals.isTimerThrottled(timeoutId) is true
-Scrolling element into view.
-Timer should no longer be throttled
-PASS internals.isTimerThrottled(timeoutId) is false
-6th iteration, timer should still be unthrottled.
-PASS internals.isTimerThrottled(timeoutId) is false
-PASS successfullyParsed is true
-
-TEST COMPLETE
-TEST
Deleted: trunk/LayoutTests/fast/dom/timer-unthrottle-on-scroll.html (185268 => 185269)
--- trunk/LayoutTests/fast/dom/timer-unthrottle-on-scroll.html 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/LayoutTests/fast/dom/timer-unthrottle-on-scroll.html 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<body>
-<script src=""
-<div style="position: relative; width: 1600px; height: 2400px; background-color: green;">
- <div style="position:absolute; left: 600px; top: 800px;">
- <div id="testElement">TEST</div>
- </div>
-</div>
-<script>
-description("Tests that a repeating timer changing the style of an element outside viewport gets unthrottled when scrolling the element into view.");
-jsTestIsAsync = true;
-
-var testElement = document.getElementById('testElement');
-var iterationCount = 0;
-var wasThrottled = false;
-var wasThrottledBeforeScroll = false;
-var timeoutId;
-
-function scrollElementIntoView()
-{
- debug("5th iteration, timer should be throttled as the element is outside the viewport.");
- shouldBeTrue("wasThrottled");
-
- debug("Timer should still be throttled before scrolling.");
- shouldBeTrue("internals.isTimerThrottled(timeoutId)");
-
- debug("Scrolling element into view.");
- window.internals.scrollElementToRect(testElement, 0, 0, 300, 300);
-
- debug("Timer should no longer be throttled");
- shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-}
-
-function timerCallback()
-{
- ++iterationCount;
- // Change the style of the element while it is outside viewport.
- testElement.style["opacity"] = "" + (iterationCount / 10.);
-
- // 5 iterations should be sufficient to throttle the timer.
- if (iterationCount == 5) {
- // Do not use shouldBeTrue() because it would cause a DOM tree mutation
- // and unthrottle the timer.
- wasThrottled = internals.isTimerThrottled(timeoutId);
- setTimeout(scrollElementIntoView, 0);
- } else if (iterationCount == 6) {
- debug("6th iteration, timer should still be unthrottled.");
- shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-
- clearInterval(timeoutId);
- finishJSTest();
- }
-}
-
-timeoutId = setInterval(timerCallback, 0);
-shouldBeFalse("internals.isTimerThrottled(timeoutId)");
-</script>
-<script src=""
-</body>
Modified: trunk/Source/WebCore/ChangeLog (185268 => 185269)
--- trunk/Source/WebCore/ChangeLog 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/ChangeLog 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1,3 +1,42 @@
+2015-06-05 Chris Dumez <[email protected]>
+
+ Regression(r176212): Broke app switching on iCloud.com
+ https://bugs.webkit.org/show_bug.cgi?id=145708
+ <rdar://problem/21235277>
+
+ Reviewed by Simon Fraser.
+
+ Roll out r176212 and follow-up fixes for now, to fix iCloud.com.
+ We can reconsider later how to do this in a safer way.
+
+ * bindings/js/JSCSSStyleDeclarationCustom.cpp:
+ (WebCore::JSCSSStyleDeclaration::putDelegate): Deleted.
+ (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames): Deleted.
+ * dom/Element.cpp:
+ * dom/Element.h:
+ * dom/ElementRareData.cpp:
+ * dom/ElementRareData.h:
+ (WebCore::ElementRareData::ElementRareData):
+ (WebCore::ElementRareData::~ElementRareData): Deleted.
+ * dom/Node.cpp:
+ (WebCore::Node::materializeRareData):
+ * html/HTMLCanvasElement.cpp:
+ (WebCore::HTMLCanvasElement::notifyObserversCanvasChanged): Deleted.
+ * page/DOMTimer.cpp:
+ (WebCore::DOMTimerFireState::scriptMadeNonUserObservableChanges): Deleted.
+ (WebCore::DOMTimerFireState::scriptMadeUserObservableChanges): Deleted.
+ (WebCore::NestedTimersMap::instanceForContext): Deleted.
+ (WebCore::DOMTimer::install): Deleted.
+ (WebCore::DOMTimer::fired): Deleted.
+ (WebCore::DOMTimer::alignedFireTime): Deleted.
+ (WebCore::DOMTimer::activeDOMObjectName): Deleted.
+ * page/DOMTimer.h:
+ * page/FrameView.cpp:
+ (WebCore::FrameView::reset): Deleted.
+ (WebCore::FrameView::viewportContentsChanged): Deleted.
+ (WebCore::FrameView::autoSizeIfEnabled): Deleted.
+ * page/FrameView.h:
+
2015-06-05 Myles C. Maxfield <[email protected]>
[iOS] Emoji overlap preceeding lines
Modified: trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp (185268 => 185269)
--- trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp 2015-06-05 22:10:19 UTC (rev 185269)
@@ -320,23 +320,6 @@
return true;
}
-// We only throttle DOM timers if they animate CSS properties that will only
-// cause the current element (or its descendants) to be repainted.
-static inline bool propertyChangeMayRepaintNonDescendants(CSSPropertyID propertyID)
-{
- switch (propertyID) {
- case CSSPropertyBottom:
- case CSSPropertyLeft:
- case CSSPropertyOpacity:
- case CSSPropertyRight:
- case CSSPropertyTop:
- case CSSPropertyTransform:
- return false;
- default:
- return true;
- }
-}
-
bool JSCSSStyleDeclaration::putDelegate(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&)
{
CSSPropertyInfo propertyInfo = cssPropertyIDForJSCSSPropertyName(propertyName);
@@ -361,10 +344,6 @@
impl().setPropertyInternal(propertyID, propValue, important, ec);
setDOMException(exec, ec);
- // Choke point for interaction with style of element; notify DOMTimer of the event.
- if (auto* element = impl().parentElement())
- DOMTimer::scriptDidCauseElementRepaint(*element, propertyChangeMayRepaintNonDescendants(propertyID));
-
return true;
}
Modified: trunk/Source/WebCore/dom/Element.cpp (185268 => 185269)
--- trunk/Source/WebCore/dom/Element.cpp 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/dom/Element.cpp 2015-06-05 22:10:19 UTC (rev 185269)
@@ -1374,11 +1374,6 @@
return document().completeURL(stripLeadingAndTrailingHTMLSpaces(linkAttribute));
}
-WeakPtr<Element> Element::createWeakPtr()
-{
- return ensureElementRareData().weakPtrFactory().createWeakPtr();
-}
-
// Returns true is the given attribute is an event handler.
// We consider an event handler any attribute that begins with "on".
// It is a simple solution that has the advantage of not requiring any
Modified: trunk/Source/WebCore/dom/Element.h (185268 => 185269)
--- trunk/Source/WebCore/dom/Element.h 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/dom/Element.h 2015-06-05 22:10:19 UTC (rev 185269)
@@ -483,7 +483,6 @@
void clearHoverAndActiveStatusBeforeDetachingRenderer();
WEBCORE_EXPORT URL absoluteLinkURL() const;
- WeakPtr<Element> createWeakPtr();
protected:
Element(const QualifiedName&, Document&, ConstructionType);
Modified: trunk/Source/WebCore/dom/ElementRareData.cpp (185268 => 185269)
--- trunk/Source/WebCore/dom/ElementRareData.cpp 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/dom/ElementRareData.cpp 2015-06-05 22:10:19 UTC (rev 185269)
@@ -39,7 +39,7 @@
RegionOversetState regionOversetState;
LayoutSize sizeForResizing;
IntSize scrollOffset;
- void* pointers[8];
+ void* pointers[7];
};
static_assert(sizeof(ElementRareData) == sizeof(SameSizeAsElementRareData), "ElementRareData should stay small");
Modified: trunk/Source/WebCore/dom/ElementRareData.h (185268 => 185269)
--- trunk/Source/WebCore/dom/ElementRareData.h 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/dom/ElementRareData.h 2015-06-05 22:10:19 UTC (rev 185269)
@@ -35,7 +35,7 @@
class ElementRareData : public NodeRareData {
public:
- ElementRareData(Element&, RenderElement*);
+ explicit ElementRareData(RenderElement*);
~ElementRareData();
void setBeforePseudoElement(RefPtr<PseudoElement>&&);
@@ -113,8 +113,6 @@
bool hasPendingResources() const { return m_hasPendingResources; }
void setHasPendingResources(bool has) { m_hasPendingResources = has; }
- WeakPtrFactory<Element>& weakPtrFactory() { return m_weakPtrFactory; }
-
private:
short m_tabIndex;
unsigned short m_childIndex;
@@ -148,7 +146,6 @@
RefPtr<PseudoElement> m_beforePseudoElement;
RefPtr<PseudoElement> m_afterPseudoElement;
- WeakPtrFactory<Element> m_weakPtrFactory;
void releasePseudoElement(PseudoElement*);
};
@@ -158,7 +155,7 @@
return IntSize(LayoutUnit::max(), LayoutUnit::max());
}
-inline ElementRareData::ElementRareData(Element& element, RenderElement* renderer)
+inline ElementRareData::ElementRareData(RenderElement* renderer)
: NodeRareData(renderer)
, m_tabIndex(0)
, m_childIndex(0)
@@ -177,7 +174,6 @@
, m_childrenAffectedByPropertyBasedBackwardPositionalRules(false)
, m_regionOversetState(RegionUndefined)
, m_minimumSizeForResizing(defaultMinimumSizeForResizing())
- , m_weakPtrFactory(&element)
{
}
Modified: trunk/Source/WebCore/dom/Node.cpp (185268 => 185269)
--- trunk/Source/WebCore/dom/Node.cpp 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/dom/Node.cpp 2015-06-05 22:10:19 UTC (rev 185269)
@@ -354,7 +354,7 @@
{
NodeRareData* data;
if (is<Element>(*this))
- data = "" downcast<RenderElement>(m_data.m_renderer)).release();
+ data = ""
else
data = ""
ASSERT(data);
Modified: trunk/Source/WebCore/html/HTMLCanvasElement.cpp (185268 => 185269)
--- trunk/Source/WebCore/html/HTMLCanvasElement.cpp 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.cpp 2015-06-05 22:10:19 UTC (rev 185269)
@@ -274,9 +274,6 @@
void HTMLCanvasElement::notifyObserversCanvasChanged(const FloatRect& rect)
{
- // Choke point for canvas drawing; notify DOMTimer of the event.
- DOMTimer::scriptDidCauseElementRepaint(*this);
-
for (auto it = m_observers.begin(), end = m_observers.end(); it != end; ++it)
(*it)->canvasChanged(*this, rect);
}
Modified: trunk/Source/WebCore/page/DOMTimer.cpp (185268 => 185269)
--- trunk/Source/WebCore/page/DOMTimer.cpp 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/page/DOMTimer.cpp 2015-06-05 22:10:19 UTC (rev 185269)
@@ -27,7 +27,6 @@
#include "config.h"
#include "DOMTimer.h"
-#include "FrameView.h"
#include "HTMLPlugInElement.h"
#include "InspectorInstrumentation.h"
#include "Logging.h"
@@ -82,11 +81,6 @@
void setScriptMadeUserObservableChanges() { m_scriptMadeUserObservableChanges = true; }
void setScriptMadeNonUserObservableChanges() { m_scriptMadeNonUserObservableChanges = true; }
- void setScriptMadeNonUserObservableChangesToElement(Element& element)
- {
- m_scriptMadeNonUserObservableChanges = true;
- m_elementsChangedOutsideViewport.set(&element, element.createWeakPtr());
- }
bool scriptMadeNonUserObservableChanges() const { return m_scriptMadeNonUserObservableChanges; }
bool scriptMadeUserObservableChanges() const
@@ -99,24 +93,12 @@
return document && document->domTreeVersion() != m_initialDOMTreeVersion;
}
- void elementsChangedOutsideViewport(Vector<WeakPtr<Element>>& elements) const
- {
- ASSERT(elements.isEmpty());
- elements.reserveCapacity(m_elementsChangedOutsideViewport.size());
- for (auto& element : m_elementsChangedOutsideViewport.values()) {
- if (element)
- elements.uncheckedAppend(element);
- }
- elements.shrinkToFit();
- }
-
static DOMTimerFireState* current;
private:
ScriptExecutionContext& m_context;
uint64_t m_initialDOMTreeVersion;
DOMTimerFireState* m_previous;
- HashMap<Element*, WeakPtr<Element>> m_elementsChangedOutsideViewport;
bool m_contextIsDocument;
bool m_scriptMadeNonUserObservableChanges { false };
bool m_scriptMadeUserObservableChanges { false };
@@ -210,10 +192,6 @@
DOMTimer::~DOMTimer()
{
- // If the ScriptExecutionContext has already been destroyed, there is
- // no need to stop listening for viewport changes.
- if (scriptExecutionContext() && isIntervalDependentOnViewport())
- unregisterForViewportChanges();
}
int DOMTimer::install(ScriptExecutionContext& context, std::unique_ptr<ScheduledAction> action, int timeout, bool singleShot)
@@ -284,7 +262,6 @@
}
if (fireState.scriptMadeUserObservableChanges()) {
- ASSERT(m_elementsCausingThrottling.isEmpty());
if (m_throttleState != ShouldNotThrottle) {
m_throttleState = ShouldNotThrottle;
updateTimerIntervalIfNecessary();
@@ -294,11 +271,6 @@
m_throttleState = ShouldThrottle;
updateTimerIntervalIfNecessary();
}
- // Update our vector of Elements causing throttling and register
- // for viewport changes if the vector is not empty.
- fireState.elementsChangedOutsideViewport(m_elementsCausingThrottling);
- if (isIntervalDependentOnViewport())
- registerForViewportChanges();
}
}
@@ -313,17 +285,6 @@
DOMTimerFireState::current->setScriptMadeNonUserObservableChanges();
}
-void DOMTimer::scriptDidCauseElementRepaint(Element& element, bool mayRepaintNonDescendants)
-{
- if (!DOMTimerFireState::current)
- return;
-
- if (mayRepaintNonDescendants || element.mayCauseRepaintInsideViewport())
- DOMTimerFireState::current->setScriptMadeUserObservableChanges();
- else
- DOMTimerFireState::current->setScriptMadeNonUserObservableChangesToElement(element);
-}
-
void DOMTimer::fired()
{
// Retain this - if the timer is cancelled while this function is on the stack (implicitly and always
@@ -335,10 +296,6 @@
ScriptExecutionContext& context = *scriptExecutionContext();
DOMTimerFireState fireState(context);
- if (isIntervalDependentOnViewport()) {
- // We re-evaluate if the timer interval is dependent on the viewport every time it fires.
- unregisterForViewportChanges();
- }
#if PLATFORM(IOS)
Document* document = nullptr;
@@ -431,22 +388,6 @@
m_action = nullptr;
}
-void DOMTimer::registerForViewportChanges()
-{
- ASSERT(isIntervalDependentOnViewport());
- if (auto* frameView = downcast<Document>(*scriptExecutionContext()).view())
- frameView->registerThrottledDOMTimer(this);
-}
-
-void DOMTimer::unregisterForViewportChanges()
-{
- ASSERT(scriptExecutionContext());
- if (auto* frameView = downcast<Document>(*scriptExecutionContext()).view())
- frameView->unregisterThrottledDOMTimer(this);
-
- m_elementsCausingThrottling.clear();
-}
-
void DOMTimer::updateTimerIntervalIfNecessary()
{
ASSERT(m_nestingLevel <= maxTimerNestingLevel);
@@ -467,26 +408,6 @@
}
}
-void DOMTimer::updateThrottlingStateAfterViewportChange(const IntRect& visibleRect)
-{
- ASSERT(isIntervalDependentOnViewport());
- // Check if the elements that caused this timer to be throttled are still outside the viewport.
- for (auto& weakElementPtr : m_elementsCausingThrottling) {
- Element* element = weakElementPtr.get();
- // Skip elements that were removed from the document.
- if (!element || !element->inDocument())
- continue;
-
- if (element->mayCauseRepaintInsideViewport(&visibleRect)) {
- LOG(DOMTimers, "%p - Script is changing style of an element that is now inside the viewport, unthrottling the timer.", this);
- m_throttleState = ShouldNotThrottle;
- unregisterForViewportChanges();
- updateTimerIntervalIfNecessary();
- break;
- }
- }
-}
-
double DOMTimer::intervalClampedToMinimum() const
{
ASSERT(scriptExecutionContext());
Modified: trunk/Source/WebCore/page/DOMTimer.h (185268 => 185269)
--- trunk/Source/WebCore/page/DOMTimer.h 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/page/DOMTimer.h 2015-06-05 22:10:19 UTC (rev 185269)
@@ -29,9 +29,7 @@
#include "SuspendableTimer.h"
#include <memory>
-#include <wtf/HashSet.h>
#include <wtf/RefCounted.h>
-#include <wtf/WeakPtr.h>
namespace WebCore {
@@ -60,10 +58,8 @@
// Notify that the interval may need updating (e.g. because the minimum interval
// setting for the context has changed).
void updateTimerIntervalIfNecessary();
- void updateThrottlingStateAfterViewportChange(const IntRect& visibleRect);
static void scriptDidInteractWithPlugin(HTMLPlugInElement&);
- static void scriptDidCauseElementRepaint(Element&, bool mayRepaintNonDescendants = false);
private:
DOMTimer(ScriptExecutionContext&, std::unique_ptr<ScheduledAction>, int interval, bool singleShot);
@@ -72,10 +68,6 @@
double intervalClampedToMinimum() const;
bool isDOMTimersThrottlingEnabled(Document&) const;
- bool isIntervalDependentOnViewport() const { return m_throttleState == ShouldThrottle && !m_elementsCausingThrottling.isEmpty(); }
- void registerForViewportChanges();
- void unregisterForViewportChanges();
-
void updateThrottlingStateIfNecessary(const DOMTimerFireState&);
// SuspendableTimer
@@ -99,10 +91,6 @@
TimerThrottleState m_throttleState;
double m_currentTimerInterval;
bool m_shouldForwardUserGesture;
- // Use WeakPtrs because we don't want to keep the elements alive but we
- // still need to handle cases where the elements get destroyed after
- // the timer has fired.
- Vector<WeakPtr<Element>> m_elementsCausingThrottling;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/page/FrameView.cpp (185268 => 185269)
--- trunk/Source/WebCore/page/FrameView.cpp 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/page/FrameView.cpp 2015-06-05 22:10:19 UTC (rev 185269)
@@ -291,7 +291,6 @@
m_isVisuallyNonEmpty = false;
m_firstVisuallyNonEmptyLayoutCallbackPending = true;
m_maintainScrollPositionAnchor = nullptr;
- m_throttledTimers.clear();
}
void FrameView::removeFromAXObjectCache()
@@ -1806,7 +1805,6 @@
// check if we should resume animated images or unthrottle DOM timers.
applyRecursivelyWithVisibleRect([] (FrameView& frameView, const IntRect& visibleRect) {
frameView.resumeVisibleImageAnimations(visibleRect);
- frameView.updateThrottledDOMTimersState(visibleRect);
frameView.updateScriptedAnimationsAndTimersThrottlingState(visibleRect);
});
}
@@ -3122,29 +3120,6 @@
performPostLayoutTasks();
}
-void FrameView::registerThrottledDOMTimer(DOMTimer* timer)
-{
- m_throttledTimers.add(timer);
-}
-
-void FrameView::unregisterThrottledDOMTimer(DOMTimer* timer)
-{
- m_throttledTimers.remove(timer);
-}
-
-void FrameView::updateThrottledDOMTimersState(const IntRect& visibleRect)
-{
- if (m_throttledTimers.isEmpty())
- return;
-
- // Do not iterate over the HashSet because calling DOMTimer::updateThrottlingStateAfterViewportChange()
- // may cause timers to remove themselves from it while we are iterating.
- Vector<DOMTimer*> timers;
- copyToVector(m_throttledTimers, timers);
- for (auto* timer : timers)
- timer->updateThrottlingStateAfterViewportChange(visibleRect);
-}
-
void FrameView::autoSizeIfEnabled()
{
if (!m_shouldAutoSize)
Modified: trunk/Source/WebCore/page/FrameView.h (185268 => 185269)
--- trunk/Source/WebCore/page/FrameView.h 2015-06-05 22:03:50 UTC (rev 185268)
+++ trunk/Source/WebCore/page/FrameView.h 2015-06-05 22:10:19 UTC (rev 185269)
@@ -43,7 +43,6 @@
namespace WebCore {
class AXObjectCache;
-class DOMTimer;
class Element;
class FloatSize;
class Frame;
@@ -316,9 +315,6 @@
void postLayoutTimerFired();
- void registerThrottledDOMTimer(DOMTimer*);
- void unregisterThrottledDOMTimer(DOMTimer*);
-
WEBCORE_EXPORT bool wasScrolledByUser() const;
WEBCORE_EXPORT void setWasScrolledByUser(bool);
@@ -604,7 +600,6 @@
void autoSizeIfEnabled();
void applyRecursivelyWithVisibleRect(const std::function<void (FrameView& frameView, const IntRect& visibleRect)>&);
- void updateThrottledDOMTimersState(const IntRect& visibleRect);
void resumeVisibleImageAnimations(const IntRect& visibleRect);
void updateScriptedAnimationsAndTimersThrottlingState(const IntRect& visibleRect);
@@ -789,8 +784,6 @@
std::unique_ptr<ScrollableAreaSet> m_scrollableAreas;
std::unique_ptr<ViewportConstrainedObjectSet> m_viewportConstrainedObjects;
- HashSet<DOMTimer*> m_throttledTimers;
-
int m_headerHeight;
int m_footerHeight;