119 lines
3.2 KiB
JavaScript
119 lines
3.2 KiB
JavaScript
var DB_UPDATE_INTERVAL = 100;
|
|
var SEND_XHR_INTERVAL = 100;
|
|
var BACK_INTERVAL = 100;
|
|
var CREATE_HEALTH_TABLE = 'CREATE TABLE IF NOT EXISTS health (key VARCHAR(16) PRIMARY KEY);';
|
|
var UPDATE_DATA = 'REPLACE INTO health VALUES("health-check-key");';
|
|
|
|
var db = openDatabaseWithSuffix('bug25710', '1.0', 'LayoutTest for bug 25710', 102400);
|
|
var backIterations;
|
|
var xhrFctIntervalId;
|
|
var backFctIntervalId;
|
|
var successCheckIntervalId;
|
|
var dbFctIntervalId;
|
|
var successes;
|
|
var databaseUpdates;
|
|
var stoppedIntervals;
|
|
|
|
function stopIntervals()
|
|
{
|
|
stoppedIntervals = true;
|
|
clearInterval(dbFctIntervalId);
|
|
clearInterval(xhrFctIntervalId);
|
|
clearInterval(backFctIntervalId);
|
|
}
|
|
|
|
function stopTest(message)
|
|
{
|
|
if (!stoppedIntervals)
|
|
stopIntervals();
|
|
|
|
log(message);
|
|
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
|
|
function updateDatabase()
|
|
{
|
|
databaseUpdates++;
|
|
db.transaction(function(transaction) {
|
|
transaction.executeSql(UPDATE_DATA, [], function() {}, errorHandler);
|
|
}, errorHandler, function() {
|
|
successes++;
|
|
});
|
|
}
|
|
|
|
function checkForSuccess()
|
|
{
|
|
if (successes == databaseUpdates) {
|
|
stopTest('Test Complete, SUCCESS');
|
|
clearInterval(successCheckIntervalId);
|
|
}
|
|
}
|
|
|
|
function errorHandler(tx, error)
|
|
{
|
|
log('DB error, code: ' + error.code + ', msg: ' + error.message);
|
|
stopTest('Test Complete, FAILED');
|
|
}
|
|
|
|
function sendXhr()
|
|
{
|
|
xhr = new XMLHttpRequest();
|
|
xhr.open('GET', location.href, true);
|
|
xhr.send('');
|
|
}
|
|
|
|
function invokeBack()
|
|
{
|
|
backIterations--;
|
|
if (backIterations) {
|
|
history.back();
|
|
} else {
|
|
stopIntervals();
|
|
// Allow a little time for all the database transactions to complete now we've stopped making them.
|
|
successCheckIntervalId = setInterval(checkForSuccess, 250);
|
|
// If we don't finish before this time, then we consider the test failed.
|
|
setTimeout(function() { stopTest('Timed out waiting for transactions to complete. FAILED'); }, 20000);
|
|
|
|
}
|
|
}
|
|
|
|
function runTest()
|
|
{
|
|
// Location changes need to happen outside the onload handler to generate history entries.
|
|
setTimeout(runTestsInner, 0);
|
|
}
|
|
|
|
function runTestsInner()
|
|
{
|
|
backIterations = 10;
|
|
consecutiveFailures = 0;
|
|
successes = 0;
|
|
databaseUpdates = 0;
|
|
stoppedIntervals = false;
|
|
|
|
// Create some hashes so we can call history.back().
|
|
log('Changing the hash to create history entries.');
|
|
for (var i = 0; i < backIterations; i++) {
|
|
setLocationHash(i);
|
|
}
|
|
|
|
// Init the database.
|
|
db.transaction(function(transaction) {
|
|
transaction.executeSql(CREATE_HEALTH_TABLE, [], function() {}, errorHandler);
|
|
}, errorHandler, function() {
|
|
// Give a little for the database to 'warm up' before making xhr requests
|
|
// and calling history.back().
|
|
setTimeout(function() {
|
|
log('Db is warmed up');
|
|
|
|
// NOTE: If we don't make any xhr requests, then the test
|
|
// successfully passes (comment this line out).
|
|
xhrFctIntervalId = setInterval(sendXhr, SEND_XHR_INTERVAL);
|
|
backFctIntervalId = setInterval(invokeBack, BACK_INTERVAL);
|
|
dbFctIntervalId = setInterval(updateDatabase, DB_UPDATE_INTERVAL);
|
|
}, 500);
|
|
});
|
|
}
|