test_eviction.js (2243B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 6 add_task(async function testSteps() { 7 const globalLimitKB = 5 * 1024; 8 9 const data = {}; 10 data.sizeKB = 1 * 1024; 11 data.key = "A"; 12 data.value = repeatChar(data.sizeKB * 1024 - data.key.length, "."); 13 data.urlCount = globalLimitKB / data.sizeKB; 14 15 function getSpec(index) { 16 return "http://example" + index + ".com"; 17 } 18 19 info("Setting prefs"); 20 21 Services.prefs.setBoolPref( 22 "dom.storage.enable_unsupported_legacy_implementation", 23 false 24 ); 25 Services.prefs.setBoolPref("dom.storage.snapshot_reusing", false); 26 27 info("Setting limits"); 28 29 setGlobalLimit(globalLimitKB); 30 31 let request = clear(); 32 await requestFinished(request); 33 34 info("Getting storages"); 35 36 let storages = []; 37 for (let i = 0; i < data.urlCount; i++) { 38 let storage = getLocalStorage(getPrincipal(getSpec(i))); 39 storages.push(storage); 40 } 41 42 info("Filling up entire default storage"); 43 44 for (let i = 0; i < data.urlCount; i++) { 45 storages[i].setItem(data.key, data.value); 46 await returnToEventLoop(); 47 } 48 49 info("Verifying no more data can be written"); 50 51 for (let i = 0; i < data.urlCount; i++) { 52 try { 53 storages[i].setItem("B", ""); 54 ok(false, "Should have thrown"); 55 } catch (ex) { 56 ok(true, "Did throw"); 57 ok(DOMException.isInstance(ex), "Threw DOMException"); 58 is(ex.name, "QuotaExceededError", "Threw right DOMException"); 59 is(ex.code, NS_ERROR_DOM_QUOTA_EXCEEDED_ERR, "Threw with right code"); 60 } 61 } 62 63 info("Closing first origin"); 64 65 storages[0].close(); 66 67 let principal = getPrincipal("http://example0.com"); 68 69 request = resetClient(principal); 70 await requestFinished(request); 71 72 info("Getting usage for first origin"); 73 74 request = getOriginUsage(principal); 75 await requestFinished(request); 76 77 is(request.result.usage, data.sizeKB * 1024, "Correct usage"); 78 79 info("Verifying more data data can be written"); 80 81 for (let i = 1; i < data.urlCount; i++) { 82 storages[i].setItem("B", ""); 83 } 84 85 info("Getting usage for first origin"); 86 87 request = getOriginUsage(principal); 88 await requestFinished(request); 89 90 is(request.result.usage, 0, "Zero usage"); 91 });