<!-- Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ --> <html> <head> <title>Indexed Database Blob Worker Crash Test</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> <script type="text/javascript;version=1.7"> /* * This tests ensures that if the last live reference to a Blob is on the * worker and the database has already been shutdown, that there is no crash * when the owning page gets cleaned up which causes the termination of the * worker which in turn garbage collects during its shutdown. * * We do the IndexedDB stuff in the iframe so we can kill it as part of our * test. Doing it out here is no good. */ function testSteps() { info("Open iframe, wait for it to do its IndexedDB stuff."); let iframe = document.getElementById("iframe1"); window.addEventListener("message", grabEventAndContinueHandler, false); // Put it in a different origin to be safe iframe.src = //"http://example.org" + window.location.pathname.replace( "test_blob_worker_crash.html", "blob_worker_crash_iframe.html"); let event = yield unexpectedSuccessHandler; is(event.data.result, "ready", "worker initialized correctly"); info("Trigger a GC to clean-up the iframe's main-thread IndexedDB"); scheduleGC(); yield undefined; info("Kill the iframe, forget about it, trigger a GC."); iframe.parentNode.removeChild(iframe); iframe = null; scheduleGC(); yield undefined; info("If we are still alive, then we win!"); ok('Did not crash / trigger an assert!'); finishTest(); yield undefined; } </script> <script type="text/javascript;version=1.7" src="helpers.js"></script> </head> <body onload="runTest();"></body> <iframe id="iframe1"></iframe> </html>