/** * 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(); }