89 lines
2.1 KiB
JavaScript
89 lines
2.1 KiB
JavaScript
if (this.importScripts) {
|
|
importScripts('../../../resources/js-test.js');
|
|
importScripts('shared.js');
|
|
}
|
|
|
|
description("Ensure IndexedDB's write operations invalidate cursor prefetch caches");
|
|
|
|
indexedDBTest(prepareDatabase, onOpenSuccess);
|
|
function prepareDatabase(evt)
|
|
{
|
|
preamble(evt);
|
|
evalAndLog("db = event.target.result");
|
|
evalAndLog("store = db.createObjectStore('store')");
|
|
}
|
|
|
|
function onOpenSuccess(evt)
|
|
{
|
|
preamble(evt);
|
|
evalAndLog("db = event.target.result");
|
|
|
|
var steps = [
|
|
deleteRange,
|
|
clearStore
|
|
];
|
|
|
|
(function nextStep() {
|
|
var step = steps.shift();
|
|
if (step) {
|
|
doPrefetchInvalidationTest(step, nextStep);
|
|
} else {
|
|
finishJSTest();
|
|
return;
|
|
}
|
|
}());
|
|
}
|
|
|
|
function doPrefetchInvalidationTest(operation, callback)
|
|
{
|
|
debug("");
|
|
debug("-------------------------------------------");
|
|
preamble();
|
|
evalAndLog("store = db.transaction('store', 'readwrite').objectStore('store')");
|
|
debug("Populate the store with 100 records.");
|
|
for (var i = 0; i < 100; ++i)
|
|
store.put(i, i);
|
|
evalAndLog("cursorRequest = store.openCursor()");
|
|
continue50Times(operation, callback);
|
|
}
|
|
|
|
function continue50Times(operation, callback)
|
|
{
|
|
preamble();
|
|
var count = 0;
|
|
|
|
cursorRequest.onsuccess = function() {
|
|
var cursor = cursorRequest.result;
|
|
++count;
|
|
if (count < 50) {
|
|
cursor.continue();
|
|
return;
|
|
}
|
|
shouldBeNonNull("cursorRequest.result");
|
|
doOperationAndContinue(operation, callback);
|
|
}
|
|
}
|
|
|
|
function doOperationAndContinue(operation, callback)
|
|
{
|
|
preamble();
|
|
operation();
|
|
evalAndLog("cursor = cursorRequest.result");
|
|
evalAndLog("cursor.continue()")
|
|
cursorRequest.onsuccess = function onContinueSuccess() {
|
|
preamble();
|
|
shouldBeNull("cursorRequest.result");
|
|
callback();
|
|
};
|
|
}
|
|
|
|
function deleteRange()
|
|
{
|
|
return evalAndLog("store.delete(IDBKeyRange.bound(-Infinity, +Infinity))");
|
|
}
|
|
|
|
function clearStore()
|
|
{
|
|
return evalAndLog("store.clear()");
|
|
}
|