| <html><head> |
| <title>Image load in unload handler</title> |
| <script> |
| |
| var testCalled = false; |
| |
| function test() { |
| if (!testCalled) { |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| testCalled = true; |
| return; |
| } |
| // We can't go to check-ping.py directly, since that doesn't start sending |
| // a response until the ping data is detected, but unload handlers (where |
| // we send the ping) are only run once we've begun receiving data from the |
| // page being navigated to. Instead, we go through a dummy redirect page, |
| // to make sure that the onunload handler has run before we get to |
| // check-ping.py. |
| location.assign("resources/image-load-in-unload-handler-2.html"); |
| } |
| |
| function ping() { |
| var img = new Image(1, 1); |
| img.src = "resources/save-ping.py"; |
| } |
| |
| </script> |
| </head> |
| <body onload="test();" onunload="ping();"> |
| <img src="resources/delete-ping.py" onload="test();" onerror="test();"></img> |
| Test case for https://bugs.webkit.org/show_bug.cgi?id=30457. Previously, if an image<br> |
| load was trigger from an unload handler, we would kill it almost immediately due to the<br> |
| navigation stopping all loaders. These loads now happen entirely in the background and detached<br> |
| from the DOM, so they're invisible to the normal resource load callback infrastructure. We generate a<br> |
| timestamp, then in the unload handler, we load an 'image' (actually a php script) that takes the<br> |
| timestamp as a parameter and saves it to a file. The destination page is a php script that checks for<br> |
| the existence of that file and passes the test if the file contains the expected timestamp.<br> |
| </body></html> |