1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
// Use initOrigin to test the operation of the origin parser on a list of URLs
// we should support. If the origin doesn't parse, then initOrigin will throw an
// exception (and potentially MOZ_ASSERT under debug builds). Handling of
// obsolete or invalid origins is handled in other test files.
async function testSteps() {
const basePath = "storage/default/";
const longExampleOriginSubstring = "a".repeat(
255 - "https://example..com".length
);
const origins = [
// General
{
dirName: "https+++example.com",
url: "https://example.com",
},
{
dirName: "https+++smaug----.github.io",
url: "https://smaug----.github.io/",
},
// About
{
dirName: "about+home",
url: "about:home",
},
{
dirName: "about+reader",
url: "about:reader",
},
// IPv6
{
dirName: "https+++[++]",
url: "https://[::]",
},
{
dirName: "https+++[ffff+ffff+ffff+ffff+ffff+ffff+ffff+ffff]",
url: "https://[ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]",
},
{
dirName: "http+++[2010+836b+4179++836b+4179]",
url: "http://[2010:836B:4179::836B:4179]:80",
},
{
dirName: "https+++[++ffff+8190+3426]",
url: "https://[::FFFF:129.144.52.38]",
},
// MAX_PATH on Windows (260); storage/default/https+++example.{a....a}.com
// should have already exceeded the MAX_PATH limitation on Windows.
// There is a limitation (255) for each component on Windows so that we can
// only let the component be 255 chars and expect the wwhole path to be
// greater then 260.
{
dirName: `https+++example.${longExampleOriginSubstring}.com`,
url: `https://example.${longExampleOriginSubstring}.com`,
},
// EndingWithPeriod
{
dirName: "https+++example.com.",
url: "https://example.com.",
},
];
info("Initializing");
let request = init();
await requestFinished(request);
info("Initializing temporary storage");
request = initTemporaryStorage();
await requestFinished(request);
for (let origin of origins) {
info(`Testing ${origin.url}`);
try {
request = initTemporaryOrigin(
"default",
getPrincipal(origin.url),
/* createIfNonExistent */ true
);
await requestFinished(request);
ok(true, "Should not have thrown");
} catch (ex) {
ok(false, "Should not have thrown");
}
let dir = getRelativeFile(basePath + origin.dirName);
ok(dir.exists(), "Origin was created");
Assert.strictEqual(
origin.dirName,
dir.leafName,
`Origin ${origin.dirName} was created expectedly`
);
}
request = clear();
await requestFinished(request);
}
|