<html> <head> <script> function writeMessageToLog(message) { document.getElementById("console").innerText += message + "\n"; } var setupStatements = [ "CREATE TABLE IF NOT EXISTS PrivateTest1 (randomData)", "INSERT INTO PrivateTest1 VALUES ('somedata')" ]; var privateBrowsingStatements = [ "CREATE TABLE IF NOT EXISTS PrivateTest2 (randomData)", "DELETE FROM PrivateTest1", "DROP TABLE PrivateTest1", "INSERT INTO PrivateTest1 VALUES ('somedata')", "SELECT * FROM PrivateTest1" ]; var completed = 0; var theTransaction; function setupSuccessFunction(tx, result) { ++completed; writeMessageToLog("Setup statement " + completed + " completed successfully"); checkSetupComplete(); } function setupErrorFunction(tx, error) { ++completed; writeMessageToLog("Setup statement " + completed + " completed with an error\n" + error.message); checkSetupComplete(); } function privateBrowsingSuccessFunction(tx, result) { ++completed; writeMessageToLog("Private browsing statement " + completed + " completed successfully"); } function privateBrowsingErrorFunction(tx, error) { ++completed; writeMessageToLog("Private browsing statement " + completed + " completed with an error\n" + error.message); return false; } function runSetup(transaction) { theTransaction = transaction; for (i in setupStatements) theTransaction.executeSql(setupStatements[i], [], setupSuccessFunction, setupErrorFunction); } function checkSetupComplete() { if (completed == setupStatements.length) runPrivateBrowsingTests(); } function runPrivateBrowsingTests() { completed = 0; if (window.layoutTestController) layoutTestController.setPrivateBrowsingEnabled(true); for (i in privateBrowsingStatements) theTransaction.executeSql(privateBrowsingStatements[i], [], privateBrowsingSuccessFunction, privateBrowsingErrorFunction); } function endTest() { writeMessageToLog("Test ended"); if (window.layoutTestController) layoutTestController.notifyDone(); } function runTest() { if (window.layoutTestController) { layoutTestController.dumpAsText(); layoutTestController.waitUntilDone(); } var database = openDatabase("PrivateBrowsingNoReadNoWriteTest", "1.0", "Test private browsing no read/write safety", 1); database.transaction(runSetup, endTest, endTest); } </script> </head> <body onload="runTest();"> This test makes sure that attempts to change the database during private browsing fail.<br> <div id="console"></div> </body> </html>