summaryrefslogtreecommitdiffstats
path: root/dom/quota/test/xpcshell/test_validOrigins.js
blob: 4c758d6bf5a5897692c45de0242605430ecffb41 (plain)
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
/**
 * 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));
      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");
    ok(
      origin.dirName === dir.leafName,
      `Origin ${origin.dirName} was created expectedly`
    );
  }

  request = clear();
  await requestFinished(request);
}