Index: LayoutTests/storage/indexeddb/empty-blob-file.html |
diff --git a/LayoutTests/storage/indexeddb/empty-blob-file.html b/LayoutTests/storage/indexeddb/empty-blob-file.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..599250dd640e9385fbe40090406a71dd1467a142 |
--- /dev/null |
+++ b/LayoutTests/storage/indexeddb/empty-blob-file.html |
@@ -0,0 +1,124 @@ |
+<!DOCTYPE html> |
+<script src="../../resources/js-test.js"></script> |
+<script src="resources/shared.js"></script> |
+<input type="file" id="emptyFileInput"></input> |
+<input type="file" id="emptyFileListInput" multiple></input> |
+<script> |
+ |
+description("Confirm that IndexedDB can store an empty Blob/File/FileList"); |
+ |
+var emptyFileInput = document.getElementById("emptyFileInput"); |
+var emptyFileListInput = document.getElementById("emptyFileListInput"); |
+if (window.eventSender) { |
+ var fileRect = emptyFileInput.getClientRects()[0]; |
+ var targetX = fileRect.left + fileRect.width / 2; |
+ var targetY = fileRect.top + fileRect.height / 2; |
+ eventSender.beginDragWithFiles(['resources/empty.txt']); |
+ eventSender.mouseMoveTo(targetX, targetY); |
+ eventSender.mouseUp(); |
+} |
+ |
+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 blobValidation = ".size == 0"; |
+function testEmptyBlob() |
+{ |
+ preamble(); |
+ evalAndLog("blob = new Blob([])"); |
+ validateResult("blob", blobValidation, testEmptyDataBlob); |
+} |
+function testEmptyDataBlob() |
+{ |
+ preamble(); |
+ evalAndLog("blob = new Blob(['', '', ''])"); |
+ validateResult("blob", blobValidation, testEmptyNestedBlob); |
+} |
+function testEmptyNestedBlob() |
+{ |
+ preamble(); |
+ evalAndLog("blob = new Blob(['', new Blob([]), ''])"); |
+ validateResult("blob", blobValidation, testEmptyNestedDataBlob); |
+} |
+function testEmptyNestedDataBlob() |
+{ |
+ preamble(); |
+ evalAndLog("blob = new Blob(['', new Blob(['']), ''])"); |
+ validateResult("blob", blobValidation, testEmptyFileInsideBlob); |
+} |
+function testEmptyFileInsideBlob() |
+{ |
+ preamble(); |
+ evalAndLog("file = emptyFileInput.files[0]"); |
+ evalAndLog("blob = new Blob(['', file, ''])"); |
+ validateResult("blob", blobValidation, testEmptyFileInsideNestedBlob); |
+} |
+function testEmptyFileInsideNestedBlob() |
+{ |
+ preamble(); |
+ evalAndLog("file = emptyFileInput.files[0]"); |
+ evalAndLog("blob = new Blob(['', new Blob([file]), ''])"); |
+ validateResult("blob", blobValidation, testEmptyFile); |
+} |
+ |
+var fileValidation = ".size == 0"; |
+function testEmptyFile() |
+{ |
+ preamble(); |
+ evalAndLog("file = emptyFileInput.files[0]"); |
+ validateResult("file", fileValidation, testEmptyFileList); |
+} |
+ |
+var fileListValidation = ".length == 0"; |
+function testEmptyFileList() |
+{ |
+ preamble(); |
+ evalAndLog("fileList = emptyFileListInput.files"); |
+ validateResult("fileList", |
+ fileListValidation, finishJSTest); |
+} |
+ |
+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; |
+} |
+ |
+if (window.eventSender) { |
+ indexedDBTest(prepareDatabase, testEmptyBlob); |
+} else { |
+ alert("Select an empty file using the left input control above to initiate the test"); |
+ document.getElementById("emptyFileInput").onchange = function() { indexedDBTest(prepareDatabase, testEmptyBlob); }; |
+} |
+</script> |