haikuwebkit/LayoutTests/storage/indexeddb/modern/opendatabase-after-storage-...

81 lines
2.5 KiB
HTML

<script src="../../../resources/js-test.js"></script>
<script src="../resources/shared.js"></script>
<body>
This test verifies when storage process crashes, indexedDB operation should not hang indefinitely.
</body>
<script>
var dbname = setDBNameFromPath() + Date();
var storageKey = "opendatabase-after-storage-crash.html";
function continueTest()
{
var request = window.indexedDB.open(dbname, 2);
request.onupgradeneeded = function(e) {
document.body.innerHTML = "Unexpected upgradeneeded after storage process termination. Database: name " + dbname + ", version 2.";
if (window.testRunner)
testRunner.notifyDone();
}
request.onerror = function(e) {
// Good, we received an expected error.
// Now reload to see if a new document connects successfully
if (localStorage[storageKey]) {
document.body.innerHTML = "Received error more than once unexpectedly. Database: name " + dbname + ", version 2.";
if (window.testRunner)
testRunner.notifyDone();
return;
}
localStorage[storageKey] = "Made it";
location.reload();
}
request.onsuccess = function(e) {
document.body.innerHTML = "Unexpected upgradeneeded after storage process termination. Database: name " + dbname + ", version 2. localStorage value: " + sessionStorage[storageKey] + ".";
if (window.testRunner)
testRunner.notifyDone();
}
}
var versionToOpen = localStorage.doneFirstLoad ? 3 : 1;
var request = window.indexedDB.open(dbname, versionToOpen);
request.onupgradeneeded = function(e) {
if (localStorage.doneFirstLoad) {
document.body.innerHTML = "Successfully opened database with version " + versionToOpen + ".";
shouldBeEqualToString('localStorage[storageKey]', 'Made it');
if (window.testRunner) {
testRunner.notifyDone();
return;
}
}
localStorage.doneFirstLoad = true;
// Set an error handler on the database connection so once the storage process terminates we know to continue the test
e.target.result.onerror = function(e) {
setTimeout(continueTest, 0);
}
if (window.testRunner) {
testRunner.waitUntilDone();
// Make sure localStorage is flushed to disk before crashing network process.
testRunner.syncLocalStorage();
testRunner.terminateNetworkProcess();
}
}
request.onerror = function(e) {
if (versionToOpen == 1)
document.body.innerHTML = "Error on opening reuqest for database version 1. (FAIL: test should stop at opening version 3.)";
}
request.onsuccess = function(e) {
if (versionToOpen == 1)
document.body.innerHTML = "Success on opening reuqest for database version 1. (FAIL: test should stop at opening version 3.)";
}
</script>