fast/files/blob-network-process-crash.html is flaky
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Aug 2018 05:51:34 +0000 (05:51 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Aug 2018 05:51:34 +0000 (05:51 +0000)
https://bugs.webkit.org/show_bug.cgi?id=188911

Reviewed by Saam Barati.

The flakiness appears to come from the web content process not getting notified of
the termination of the network process in time. Wait for the network process to
relaunch after terminating one by continuously fetch'ing itself with an increasing
time interval until it succeeds.

* fast/files/blob-network-process-crash.html:

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

LayoutTests/ChangeLog
LayoutTests/fast/files/blob-network-process-crash.html

index eef3db1..0b491b4 100644 (file)
@@ -1,5 +1,19 @@
 2018-08-23  Ryosuke Niwa  <rniwa@webkit.org>
 
+        fast/files/blob-network-process-crash.html is flaky
+        https://bugs.webkit.org/show_bug.cgi?id=188911
+
+        Reviewed by Saam Barati.
+
+        The flakiness appears to come from the web content process not getting notified of
+        the termination of the network process in time. Wait for the network process to
+        relaunch after terminating one by continuously fetch'ing itself with an increasing
+        time interval until it succeeds.
+
+        * fast/files/blob-network-process-crash.html:
+
+2018-08-23  Ryosuke Niwa  <rniwa@webkit.org>
+
         Add a flaky failing test expectation to fast/files/blob-network-process-crash.html
         while we investigate the root cause in webkit.org/b/188911.
 
index 78851de..03fab3d 100644 (file)
@@ -7,7 +7,11 @@ WebKit should not hit a debug assertion in the network process.</p>
 
 if (!window.testRunner)
     document.write('This test requires testRunner and GCController');
-else {
+else
+    runTest();
+
+async function runTest()
+{
     testRunner.dumpAsText();
     testRunner.waitUntilDone();
 
@@ -20,19 +24,28 @@ else {
 
     testRunner.terminateNetworkProcess();
 
-    // FIXME: If we don't store the timer, timer sometimes never fires.
-    window.timer = setTimeout(() => {
-        const newBlob = new Blob(["some text"]);
-        for (let i = 0; i < 100; i++) {
-            for (let j = 0; j < 10; j++)
-                blobs[i][j] = { };
-        }
-        blobs = null;
-        GCController.collect();
-        fetch('blob-network-process-crash.html').then(() => {
-            testRunner.notifyDone();
-        });
-    }, 0);
+    await waitForNetworkProcessToRelaunch();
+    const newBlob = new Blob(["some text"]);
+    for (let i = 0; i < 100; i++) {
+        for (let j = 0; j < 10; j++)
+            blobs[i][j] = { };
+    }
+    blobs = null;
+    GCController.collect();
+
+    await fetch('blob-network-process-crash.html');
+
+    testRunner.notifyDone();
+}
+
+let waitTime = 10;
+function waitForNetworkProcessToRelaunch() {
+    return fetch('blob-network-process-crash.html').catch(() => {
+        return new Promise((resolve, reject) => {
+            waitTime *= 1.2;
+            setTimeout(() => waitForNetworkProcessToRelaunch().then(resolve), waitTime);
+        })
+    });
 }
 
 </script>