diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/tests/mochitest/localstorage/test_bug600307-DBOps.html | |
parent | Initial commit. (diff) | |
download | firefox-upstream/124.0.1.tar.xz firefox-upstream/124.0.1.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/tests/mochitest/localstorage/test_bug600307-DBOps.html')
-rw-r--r-- | dom/tests/mochitest/localstorage/test_bug600307-DBOps.html | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/dom/tests/mochitest/localstorage/test_bug600307-DBOps.html b/dom/tests/mochitest/localstorage/test_bug600307-DBOps.html new file mode 100644 index 0000000000..cfce270d5d --- /dev/null +++ b/dom/tests/mochitest/localstorage/test_bug600307-DBOps.html @@ -0,0 +1,178 @@ +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title>bug 600307</title> + +<script src="/tests/SimpleTest/SimpleTest.js"></script> +<script type="text/javascript" src="localStorageCommon.js"></script> +<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> + +<script type="text/javascript"> + +/* eslint-disable max-nested-callbacks */ + +/* +This is strictly implementation specific test for dom storage code from bug 600307. +It exercises code for asynchronous data flushing with regard to cache life time and its preload. + +"flush + reload" means to tell the database to store all pending data then wipe the cached content and reload it from the db + +"reload" only means to simulate situation when there is a pending flush for an origin but a new cache is about to preload +which is a corner case happening rarely ; this helps check the next preload operation will load correct data from the database anyway + +Case 1: set | flush + reload | remove | set | remove | flush + reload | get ?= null + checks coalescing optimization for single key changes does work correctly for repeated removals of a key + +Case 2: set | set | clear | flush + reload | count ?= 0 + checks whether clear operation superseeds setting keys, the database must be empty for the origin + +Case 3: set | set | clear | reload | count ?= 0 + check the corner case when a data clear flush is pending but a new cache is about to preload +*/ + +function startTest() +{ + // Enable testing observer notifications + localStorageEnableTestingMode(function() { + + // Have an untouched land + localStorage.clear(); + + // Initial flush + localStorageFlush(function() { + is(localStorage.length, 0, "localStorage empty at the test start"); + + // Basic test 1 (set a key, check presence after reload): + localStorage.setItem("item", "value"); + localStorageFlushAndReload(function() { + is(localStorage.getItem("item"), "value", "Basic persistance works"); + is(localStorage.length, 1, "1 item in localStorage"); + + // Basic test 2 (set a key twice, check presence of the last value): + localStorage.setItem("item", "value2"); + localStorage.setItem("item", "value3"); + localStorageFlushAndReload(function() { + is(localStorage.getItem("item"), "value3", "Basic persistance 2 works"); + + // Basic test 3 (remove a key, check it has been deleted): + localStorage.removeItem("item"); + localStorageFlushAndReload(function() { + is(localStorage.getItem("item"), null, "Basic delete works"); + + // Basic test 4 (set and remove a key, check it is not present): + localStorage.setItem("item", "value4"); + localStorage.removeItem("item"); + localStorageFlushAndReload(function() { + is(localStorage.getItem("item"), null, "Basic delete 2 works"); + + + // Case 1: + localStorage.setItem("item", "value"); + localStorageFlushAndReload(function() { + localStorage.removeItem("item"); + localStorage.setItem("item", "value2"); + localStorage.removeItem("item"); + localStorageFlushAndReload(function() { + is(localStorage.getItem("item"), null, "Item deleted in case 1"); + + // Case 2: + localStorage.setItem("item", "value"); + localStorage.setItem("item2", "value2"); + localStorage.clear(); + localStorageFlushAndReload(function() { + is(localStorage.length, 0, "localStorage clean in case 2"); + + // Case 3: + localStorageFlush(function() { + localStorage.setItem("item", "value"); + localStorage.setItem("item2", "value2"); + localStorage.clear(); + localStorageReload(function() { + is(localStorage.length, 0, "localStorage clean in case 4"); + + if (!SpecialPowers.Services.domStorageManager.nextGenLocalStorageEnabled && + SpecialPowers.Cc["@mozilla.org/xre/app-info;1"].getService( + SpecialPowers.Ci.nsIXULRuntime).processType != SpecialPowers.Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT) { + // Following tests cannot be run in a child/plugin process type + SimpleTest.finish(); + return; + } + + // Cookies clean 1 + localStorageFlush(function() { + localStorage.setItem("item", "value"); + localStorageClearAll(function() { + is(localStorage.length, 0, "localStorage clean after cookies deletion"); + localStorage.setItem("item2", "value2"); + is(localStorage.getItem("item"), null, "Unexpected key 1, cookies delete"); + is(localStorage.getItem("item2"), "value2", "Expected key 2, cookies delete"); + localStorageFlushAndReload(function() { + is(localStorage.getItem("item"), null, "Unexpected key 1, cookies delete"); + is(localStorage.getItem("item2"), "value2", "Expected key 2, cookies delete"); + + // Cookies clean 2 + localStorage.clear(); + localStorageFlush(function() { + localStorage.setItem("item", "value"); + localStorageClearAll(function() { + is(localStorage.length, 0, "localStorage clean after cookies deletion 2"); + localStorageFlushAndReload(function() { + is(localStorage.length, 0, "localStorage clean after cookies deletion 2"); + + + // Domain clean 1 + localStorageFlush(function() { + localStorage.setItem("item", "value"); + localStorageClearDomain("test", function() { + is(localStorage.length, 0, "localStorage clean after domain deletion"); + localStorage.setItem("item2", "value2"); + is(localStorage.getItem("item"), null, "Unexpected key 1, domain delete"); + is(localStorage.getItem("item2"), "value2", "Expected key 2, domain delete"); + localStorageFlushAndReload(function() { + is(localStorage.getItem("item"), null, "Unexpected key 1, domain delete"); + is(localStorage.getItem("item2"), "value2", "Expected key 2, domain delete"); + + // Domain clean 2 + localStorage.clear(); + localStorageFlush(function() { + localStorage.setItem("item", "value"); + localStorageClearDomain("test", function() { + is(localStorage.length, 0, "localStorage clean after domain deletion 2"); + localStorageFlushAndReload(function() { + is(localStorage.length, 0, "localStorage clean after domain deletion 2"); + + SimpleTest.finish(); + + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); + }); +} + +SimpleTest.waitForExplicitFinish(); + +</script> + +</head> + +<body onload="startTest();"> +</body> +</html> |