Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/**
* Any copyright is dedicated to the Public Domain.
*/
/**
* This test verifies that group and origin strings for URIs with special
* characters are consistent between calling
* EnsureQuotaForOringin/EnsureOriginIsInitailized and GetQuotaObject in
* PrepareDatastoreOp, so writing to local storage won't cause a crash because
* of a null quota object. See bug 1516333.
*/
add_task(async function testSteps() {
/**
* The edge cases are specified in this array of origins. Each edge case must
* contain two properties uri and path (origin directory path relative to the
* profile directory).
*/
const origins = [
{
path: "storage/default/file++++test'.html",
},
{
uri: "file:///test>.html",
path: "storage/default/file++++test%3E.html",
},
];
info("Setting prefs");
Services.prefs.setBoolPref(
"dom.storage.enable_unsupported_legacy_implementation",
false
);
for (let origin of origins) {
const principal = getPrincipal(origin.uri);
let originDir = getRelativeFile(origin.path);
info("Checking the origin directory existence");
ok(
!originDir.exists(),
`The origin directory ${origin.path} should not exists`
);
info("Getting storage");
let storage = getLocalStorage(principal);
info("Adding item");
storage.setItem("foo", "bar");
info("Resetting origin");
// This forces any pending changes to be flushed to disk (including origin
// directory creation).
let request = resetOrigin(principal);
await requestFinished(request);
info("Checking the origin directory existence");
ok(originDir.exists(), `The origin directory ${origin.path} should exist`);
}
});