fast/dom/Window/timer-resume-on-navigation-back.html is flaky
authorap@apple.com <ap@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Apr 2015 05:28:29 +0000 (05:28 +0000)
committerap@apple.com <ap@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Apr 2015 05:28:29 +0000 (05:28 +0000)
https://bugs.webkit.org/show_bug.cgi?id=33685

Reviewed by Brady Eidson.

If the timer fired before navigation, the test passed without going down the code
path that it was supposed to test. If it fired when navigation was in provisional
state, then dumping results was delayed until the navigation was finished, and
thus the intermediate page got dumped, and the test failed.

* fast/dom/Window/timer-resume-on-navigation-back.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@182838 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/dom/Window/timer-resume-on-navigation-back.html

index 30171ce..3cf6059 100644 (file)
@@ -1,3 +1,17 @@
+2015-04-14  Alexey Proskuryakov  <ap@apple.com>
+
+        fast/dom/Window/timer-resume-on-navigation-back.html is flaky
+        https://bugs.webkit.org/show_bug.cgi?id=33685
+
+        Reviewed by Brady Eidson.
+
+        If the timer fired before navigation, the test passed without going down the code
+        path that it was supposed to test. If it fired when navigation was in provisional
+        state, then dumping results was delayed until the navigation was finished, and
+        thus the intermediate page got dumped, and the test failed.
+
+        * fast/dom/Window/timer-resume-on-navigation-back.html:
+
 2015-04-14  Zalan Bujtas  <zalan@apple.com>
 
         Make inline continuation style change logic consistent.
index 8559fe8..e0905af 100644 (file)
@@ -2,8 +2,20 @@
 <script>
 var timeoutValue = 100; //ms
 
+var restoredFromPageCache = false;
+onpageshow = function(event) {
+    if (event.persisted)
+        restoredFromPageCache = true;
+}
+
 var timestamp;
 function verify() {
+    if (!restoredFromPageCache) {
+      // The timer fired too early, we haven't navigated yet.
+      window.setTimeout(verify, timeoutValue);
+      timestamp = new Date().getTime();
+      return;
+    }
     var actualTimerDelay =  new Date().getTime() - timestamp;
     document.getElementById("result").innerHTML =
         actualTimerDelay >= timeoutValue ? 'PASS' : 'FAIL with ' + actualTimerDelay + ' ms delay.';