1 <html> 2 <head> 3 <script> 4 5 function writeMessageToLog(message) 6 { 7 document.getElementById("console").innerText += message + "\n"; 8 } 9 10 var setupStatements = [ 11 "CREATE TABLE IF NOT EXISTS PrivateTest1 (randomData)", 12 "INSERT INTO PrivateTest1 VALUES ('somedata')" 13 ]; 14 15 var privateBrowsingStatements = [ 16 "CREATE TABLE IF NOT EXISTS PrivateTest2 (randomData)", 17 "DELETE FROM PrivateTest1", 18 "DROP TABLE PrivateTest1", 19 "INSERT INTO PrivateTest1 VALUES ('somedata')", 20 "SELECT * FROM PrivateTest1" 21 ]; 22 23 var completed = 0; 24 var theTransaction; 25 26 function setupSuccessFunction(tx, result) 27 { 28 ++completed; 29 writeMessageToLog("Setup statement " + completed + " completed successfully"); 30 checkSetupComplete(); 31 } 32 33 function setupErrorFunction(tx, error) 34 { 35 ++completed; 36 writeMessageToLog("Setup statement " + completed + " completed with an error\n" + error.message); 37 checkSetupComplete(); 38 } 39 40 function privateBrowsingSuccessFunction(tx, result) 41 { 42 ++completed; 43 writeMessageToLog("Private browsing statement " + completed + " completed successfully"); 44 } 45 46 function privateBrowsingErrorFunction(tx, error) 47 { 48 ++completed; 49 writeMessageToLog("Private browsing statement " + completed + " completed with an error\n" + error.message); 50 return false; 51 } 52 53 function runSetup(transaction) 54 { 55 theTransaction = transaction; 56 for (i in setupStatements) 57 theTransaction.executeSql(setupStatements[i], [], setupSuccessFunction, setupErrorFunction); 58 } 59 60 function checkSetupComplete() 61 { 62 if (completed == setupStatements.length) 63 runPrivateBrowsingTests(); 64 } 65 66 function runPrivateBrowsingTests() 67 { 68 completed = 0; 69 70 if (window.layoutTestController) 71 layoutTestController.setPrivateBrowsingEnabled(true); 72 73 for (i in privateBrowsingStatements) 74 theTransaction.executeSql(privateBrowsingStatements[i], [], privateBrowsingSuccessFunction, privateBrowsingErrorFunction); 75 } 76 77 function endTest() 78 { 79 writeMessageToLog("Test ended"); 80 81 if (window.layoutTestController) 82 layoutTestController.notifyDone(); 83 } 84 85 function runTest() 86 { 87 if (window.layoutTestController) { 88 layoutTestController.dumpAsText(); 89 layoutTestController.waitUntilDone(); 90 } 91 92 var database = openDatabase("PrivateBrowsingNoReadNoWriteTest", "1.0", "Test private browsing no read/write safety", 1); 93 database.transaction(runSetup, endTest, endTest); 94 } 95 96 </script> 97 </head> 98 <body onload="runTest();"> 99 This test makes sure that attempts to change the database during private browsing fail.<br> 100 <div id="console"></div> 101 </body> 102 </html> 103