1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
<!DOCTYPE html>
<html>
<!--
Copyright 2014 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<head>
<title>IDB Test that blobs use space when created and free up space when deleted</title>
<script src="common.js"></script>
<script>
// Constants.
var store_name = 'blobs_use_space';
var blob_key = 'blob_key';
var blob_size = 4 * 1024 * 1024;
// Shared variables.
var db;
var size_initial;
var size_after_write;
function test() {
indexedDBTest(prepareDatabase, getInitialSize);
}
function prepareDatabase() {
db = event.target.result;
db.createObjectStore(store_name);
}
function getInitialSize() {
getUsage(function(usage) {
size_initial = usage;
putBlob();
});
}
function putBlob() {
debug("Writing blob.");
var trans = db.transaction(store_name, 'readwrite');
trans.onabort = unexpectedAbortCallback;
trans.oncomplete = checkSizeIncreased;
var data = new Array(1 + blob_size).join("X");
var blob = new Blob([data]);
var request = trans.objectStore(store_name).put(blob, blob_key);
request.onerror = unexpectedErrorCallback;
}
function checkSizeIncreased() {
getUsage(function(usage) {
if (usage < size_initial + blob_size)
fail("Size increased by only " + (usage - size_initial) +
" after writing 20MB blob");
size_after_write = usage;
deleteBlob();
});
}
function deleteBlob() {
debug("Deleting blob.");
var trans = db.transaction(store_name, 'readwrite');
trans.onabort = unexpectedAbortCallback;
trans.oncomplete = checkSizeBackToInitial;
var request = trans.objectStore(store_name).delete(blob_key);
request.onerror = unexpectedErrorCallback;
}
function checkSizeBackToInitial() {
getUsage(function(usage) {
if (usage < size_after_write) {
done();
} else {
fail("Size after deleting blob is " + (usage - size_after_write) +
" higher than size after write");
}
});
}
function getUsage(cb) {
navigator.webkitTemporaryStorage.queryUsageAndQuota(
function(usage, quota) {
debug("Current database size is " + usage + "B");
cb(usage);
},
unexpectedErrorCallback);
}
function displaySize(bytes) {
var k = bytes / 1024;
var m = k / 1024;
return bytes + " (" + k + "k) (" + m + "m)";
}
</script>
</head>
<body onLoad="test()">
<div id="status">Starting...<br></div>
</body>
</html>
|