test_file_delete.html (3916B)
1 <!-- 2 Any copyright is dedicated to the Public Domain. 3 http://creativecommons.org/publicdomain/zero/1.0/ 4 --> 5 <html> 6 <head> 7 <title>Indexed Database Property Test</title> 8 9 <script src="/tests/SimpleTest/SimpleTest.js"></script> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 11 12 <script type="text/javascript"> 13 function* testSteps() 14 { 15 const READ_WRITE = "readwrite"; 16 17 const name = window.location.pathname; 18 19 const objectStoreName = "Blobs"; 20 21 const fileData1 = { key: 1, file: getRandomFile("random1.bin", 110000) }; 22 const fileData2 = { key: 2, file: getRandomFile("random2.bin", 120000) }; 23 const fileData3 = { key: 3, file: getRandomFile("random3.bin", 130000) }; 24 25 SpecialPowers.pushPrefEnv({ set: [["dom.indexedDB.dataThreshold", -1]] }, 26 continueToNextStep); 27 yield undefined; 28 29 { 30 let request = indexedDB.open(name, 1); 31 request.onerror = errorHandler; 32 request.onupgradeneeded = grabEventAndContinueHandler; 33 request.onsuccess = grabEventAndContinueHandler; 34 let event = yield undefined; 35 36 is(event.type, "upgradeneeded", "Got correct event type"); 37 38 let db = event.target.result; 39 db.onerror = errorHandler; 40 41 let objectStore = db.createObjectStore(objectStoreName, { }); 42 43 objectStore.add(fileData1.file, fileData1.key); 44 objectStore.add(fileData2.file, fileData2.key); 45 objectStore.add(fileData3.file, fileData3.key); 46 47 event = yield undefined; 48 49 is(event.type, "success", "Got correct event type"); 50 51 let trans = db.transaction([objectStoreName], READ_WRITE); 52 trans.objectStore(objectStoreName).delete(fileData1.key); 53 trans.oncomplete = grabEventAndContinueHandler; 54 event = yield undefined; 55 56 is(event.type, "complete", "Got correct event type"); 57 58 is(getFileDBRefCount(name, 1), 0, "Correct db ref count"); 59 60 fileData1.file = null; 61 fileData2.file = null; 62 fileData3.file = null; 63 } 64 65 yield* assertEventuallyHasNoFileInfo(name, 1); 66 yield* assertEventuallyHasFileInfo(name, 2); 67 yield* assertEventuallyHasFileInfo(name, 3); 68 69 { 70 let request = indexedDB.open(name, 1); 71 request.onerror = errorHandler; 72 request.onsuccess = grabEventAndContinueHandler; 73 let event = yield undefined; 74 75 is(event.type, "success", "Got correct event type"); 76 77 let db = event.target.result; 78 db.onerror = errorHandler; 79 80 let trans = db.transaction([objectStoreName], READ_WRITE); 81 let objectStore = trans.objectStore(objectStoreName); 82 83 request = objectStore.get(fileData2.key); 84 request.onsuccess = grabEventAndContinueHandler; 85 event = yield undefined; 86 87 let result = event.target.result; 88 ok(result, "Got result"); 89 90 objectStore.delete(fileData2.key); 91 92 trans.oncomplete = grabEventAndContinueHandler; 93 event = yield undefined; 94 95 is(event.type, "complete", "Got correct event type"); 96 97 is(getFileDBRefCount(name, 2), 0, "Correct db ref count"); 98 99 100 trans = db.transaction([objectStoreName], READ_WRITE); 101 objectStore = trans.objectStore(objectStoreName); 102 103 objectStore.delete(fileData3.key); 104 105 trans.oncomplete = grabEventAndContinueHandler; 106 event = yield undefined; 107 108 is(event.type, "complete", "Got correct event type"); 109 110 yield *assertEventuallyWithGC(() => -1 == getFileDBRefCount(name, 3), 111 "Correct db ref count"); 112 113 event = null; 114 result = null; 115 } 116 117 yield* assertEventuallyHasNoFileInfo(name, 1); 118 yield* assertEventuallyHasNoFileInfo(name, 2); 119 yield* assertEventuallyHasNoFileInfo(name, 3); 120 121 finishTest(); 122 } 123 </script> 124 <script type="text/javascript" src="file.js"></script> 125 <script type="text/javascript" src="helpers.js"></script> 126 127 </head> 128 129 <body onload="runTest();"></body> 130 131 </html>