/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
/* exported testGenerator, disableWorkerTest */
var disableWorkerTest =
"Need a way to set temporary prefs from a worker";
var testGenerator = testSteps();
function* testSteps() {
const name =
this.window
? window.location.pathname
:
"test_view_put_get_values.js";
const objectStoreName =
"Views";
const viewData = { key: 1, view: getRandomView(100000) };
const tests = [
{
external:
false,
preprocessing:
false,
},
{
external:
true,
preprocessing:
false,
},
{
external:
true,
preprocessing:
true,
},
];
for (let test of tests) {
if (test.external) {
if (
this.window) {
info(
"Setting data threshold pref");
SpecialPowers.pushPrefEnv(
{ set: [[
"dom.indexedDB.dataThreshold", 0]] },
continueToNextStep
);
yield undefined;
}
else {
setDataThreshold(0);
}
}
if (test.preprocessing) {
if (
this.window) {
info(
"Setting preprocessing pref");
SpecialPowers.pushPrefEnv(
{ set: [[
"dom.indexedDB.preprocessing",
true]] },
continueToNextStep
);
yield undefined;
}
else {
enablePreprocessing();
}
}
info(
"Opening database");
let request = indexedDB.open(name);
request.onerror = errorHandler;
request.onupgradeneeded = continueToNextStepSync;
request.onsuccess = unexpectedSuccessHandler;
yield undefined;
// upgradeneeded
request.onupgradeneeded = unexpectedSuccessHandler;
request.onsuccess = continueToNextStepSync;
info(
"Creating objectStore");
request.result.createObjectStore(objectStoreName);
yield undefined;
// success
let db = request.result;
db.onerror = errorHandler;
info(
"Storing view");
let objectStore = db
.transaction([objectStoreName],
"readwrite")
.objectStore(objectStoreName);
request = objectStore.add(viewData.view, viewData.key);
request.onsuccess = continueToNextStepSync;
yield undefined;
is(request.result, viewData.key,
"Got correct key");
info(
"Getting view");
request = objectStore.get(viewData.key);
request.onsuccess = continueToNextStepSync;
yield undefined;
verifyView(request.result, viewData.view);
yield undefined;
info(
"Getting view in new transaction");
request = db
.transaction([objectStoreName])
.objectStore(objectStoreName)
.get(viewData.key);
request.onsuccess = continueToNextStepSync;
yield undefined;
verifyView(request.result, viewData.view);
yield undefined;
getCurrentUsage(grabFileUsageAndContinueHandler);
let fileUsage = yield undefined;
if (test.external) {
ok(fileUsage > 0,
"File usage is not zero");
}
else {
ok(fileUsage == 0,
"File usage is zero");
}
db.close();
request = indexedDB.deleteDatabase(name);
request.onerror = errorHandler;
request.onsuccess = continueToNextStepSync;
yield undefined;
if (
this.window) {
info(
"Resetting prefs");
SpecialPowers.popPrefEnv(continueToNextStep);
yield undefined;
}
else {
if (test.external) {
resetDataThreshold();
}
if (test.preprocessing) {
resetPreprocessing();
}
}
}
finishTest();
}