132 lines
3.5 KiB
JavaScript
132 lines
3.5 KiB
JavaScript
/* import-globals-from head.js */
|
|
|
|
/* eslint-disable mozilla/no-comparison-or-assignment-inside-ok */
|
|
|
|
const principalInfos = [
|
|
{ url: "http://example.com", attrs: {} },
|
|
|
|
{ url: "http://origin.test", attrs: {} },
|
|
|
|
{ url: "http://prefix.test", attrs: {} },
|
|
{ url: "http://prefix.test", attrs: { userContextId: 10 } },
|
|
|
|
{ url: "http://pattern.test", attrs: { userContextId: 15 } },
|
|
{ url: "http://pattern.test:8080", attrs: { userContextId: 15 } },
|
|
{ url: "https://pattern.test", attrs: { userContextId: 15 } },
|
|
];
|
|
|
|
const surrogate = String.fromCharCode(0xdc00);
|
|
const replacement = String.fromCharCode(0xfffd);
|
|
const beginning = "beginning";
|
|
const ending = "ending";
|
|
const complexValue = beginning + surrogate + surrogate + ending;
|
|
const corruptedValue = beginning + replacement + replacement + ending;
|
|
|
|
function enableNextGenLocalStorage() {
|
|
info("Setting pref");
|
|
|
|
Services.prefs.setBoolPref(
|
|
"dom.storage.enable_unsupported_legacy_implementation",
|
|
false
|
|
);
|
|
}
|
|
|
|
function disableNextGenLocalStorage() {
|
|
info("Setting pref");
|
|
|
|
Services.prefs.setBoolPref(
|
|
"dom.storage.enable_unsupported_legacy_implementation",
|
|
true
|
|
);
|
|
}
|
|
|
|
function storeData() {
|
|
for (let i = 0; i < principalInfos.length; i++) {
|
|
let principalInfo = principalInfos[i];
|
|
let principal = getPrincipal(principalInfo.url, principalInfo.attrs);
|
|
|
|
info("Getting storage");
|
|
|
|
let storage = getLocalStorage(principal);
|
|
|
|
info("Adding data");
|
|
|
|
storage.setItem("key0", "value0");
|
|
storage.clear();
|
|
storage.setItem("key1", "value1");
|
|
storage.removeItem("key1");
|
|
storage.setItem("key2", "value2");
|
|
storage.setItem("complexKey", complexValue);
|
|
|
|
info("Closing storage");
|
|
|
|
storage.close();
|
|
}
|
|
}
|
|
|
|
function exportShadowDatabase(name) {
|
|
info("Verifying shadow database");
|
|
|
|
let profileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
|
|
let shadowDatabase = profileDir.clone();
|
|
shadowDatabase.append("webappsstore.sqlite");
|
|
|
|
let exists = shadowDatabase.exists();
|
|
ok(exists, "Shadow database does exist");
|
|
|
|
info("Copying shadow database");
|
|
|
|
let currentDir = Services.dirsvc.get("CurWorkD", Ci.nsIFile);
|
|
shadowDatabase.copyTo(currentDir, name);
|
|
}
|
|
|
|
function importShadowDatabase(name) {
|
|
info("Verifying shadow database");
|
|
|
|
let currentDir = Services.dirsvc.get("CurWorkD", Ci.nsIFile);
|
|
let shadowDatabase = currentDir.clone();
|
|
shadowDatabase.append(name);
|
|
|
|
let exists = shadowDatabase.exists();
|
|
if (!exists) {
|
|
return false;
|
|
}
|
|
|
|
info("Copying shadow database");
|
|
|
|
let profileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
|
|
shadowDatabase.copyTo(profileDir, "webappsstore.sqlite");
|
|
|
|
return true;
|
|
}
|
|
|
|
function verifyData(clearedOrigins, migrated = false) {
|
|
for (let i = 0; i < principalInfos.length; i++) {
|
|
let principalInfo = principalInfos[i];
|
|
let principal = getPrincipal(principalInfo.url, principalInfo.attrs);
|
|
|
|
info("Getting storage");
|
|
|
|
let storage = getLocalStorage(principal);
|
|
|
|
info("Verifying data");
|
|
|
|
if (clearedOrigins.includes(i)) {
|
|
ok(storage.getItem("key2") == null, "Correct value");
|
|
ok(storage.getItem("complexKey") == null, "Correct value");
|
|
} else {
|
|
ok(storage.getItem("key0") == null, "Correct value");
|
|
ok(storage.getItem("key1") == null, "Correct value");
|
|
is(storage.getItem("key2"), "value2", "Correct value");
|
|
is(
|
|
storage.getItem("complexKey"),
|
|
migrated ? corruptedValue : complexValue,
|
|
"Correct value"
|
|
);
|
|
}
|
|
|
|
info("Closing storage");
|
|
|
|
storage.close();
|
|
}
|
|
}
|