blob: a3aa6850a52ef7e8eff31e06c958dd3201cdba4a [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/js-test.js"></script>
<script src="resources/shared.js"></script>
<script>
description("Confirm that IndexedDB can store an empty File from the Filesystem API");
function prepareDatabase()
{
db = event.target.result;
var trans = event.target.transaction;
evalAndLog("store = db.createObjectStore('storeName')");
evalAndLog("store.put('value', 'key')");
trans.onerror = unexpectedErrorCallback;
trans.onabort = unexpectedAbortCallback;
}
var fileValidation = ".size == 0";
function testEmptyFilesystemFile()
{
preamble();
evalAndLog("file = window.emptyFile");
validateResult("file", fileValidation, cleanupFs);
}
function validateResult(variable, validation, onSuccess)
{
var keyName = variable + "key";
debug("");
debug("validateResult(" + variable + "):");
shouldBeTrue(variable + validation);
evalAndLog("transaction = db.transaction('storeName', 'readwrite')");
evalAndLog("store = transaction.objectStore('storeName')");
evalAndLog("store.put(" + variable + ", '" + keyName + "')");
transaction.onerror = unexpectedErrorCallback;
transaction.onabort = unexpectedAbortCallback;
var onGetSuccess = function (e) {
shouldBeTrue("event.target.result" + validation);
onSuccess();
}
transaction.oncomplete = function () {
doRead(keyName, onGetSuccess);
}
}
function doRead(keyName, onSuccess)
{
evalAndLog("transaction = db.transaction('storeName', 'readwrite')");
evalAndLog("store = transaction.objectStore('storeName')");
evalAndLog("request = store.get('" + keyName + "')");
request.onsuccess = onSuccess;
transaction.onerror = unexpectedErrorCallback;
transaction.onabort = unexpectedAbortCallback;
}
function fsError(error)
{
debug("Filesystem error:" + error.name);
cleanupFs();
}
function fsCreated(fs)
{
debug("Got FileSystem:" + fs.name);
window.fileSystem = fs;
fs.root.getFile("empty.txt", {create: true}, function(entry) {
entry.file(function(file) {
window.emptyFile = file;
indexedDBTest(prepareDatabase, testEmptyFilesystemFile);
});
}, fsError);
}
if (window.webkitRequestFileSystem)
window.webkitRequestFileSystem(TEMPORARY, 100, fsCreated, fsError);
else
alert("This test requires the FileSystem API");
function cleanupFs()
{
if (window.fileSystem) {
var fs = window.fileSystem;
// cleanupFs shouldn't get called again if an error occurs below.
window.fileSystem = null;
fs.root.getFile("empty.txt", {create: false}, function (entry) {
entry.remove(finishJSTest, fsError);
}, fsError);
}
}
</script>