summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_urlclassification.js
blob: de2d059d966149291495c68e5187647adf2a2dcf (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
"use strict";

const { Schemas } = ChromeUtils.importESModule(
  "resource://gre/modules/Schemas.sys.mjs"
);

/**
 * If this test fails, likely nsIClassifiedChannel has added or changed a
 * CLASSIFIED_* flag.  Those changes must be in sync with
 * ChannelWrapper.webidl/cpp and the web_request.json schema file.
 */
add_task(async function test_webrequest_url_classification_enum() {
  // The startupCache is removed whenever the buildid changes by code that runs
  // during Firefox startup but not during xpcshell startup, remove it by hand
  // before running this test to avoid failures with --conditioned-profile
  let file = PathUtils.join(
    Services.dirsvc.get("ProfLD", Ci.nsIFile).path,
    "startupCache",
    "webext.sc.lz4"
  );
  await IOUtils.remove(file, { ignoreAbsent: true });

  // use normalizeManifest to get the schema loaded.
  await ExtensionTestUtils.normalizeManifest({ permissions: ["webRequest"] });

  let ns = Schemas.getNamespace("webRequest");
  let schema_enum = ns.get("UrlClassificationFlags").enumeration;
  ok(
    !!schema_enum.length,
    `UrlClassificationFlags: ${JSON.stringify(schema_enum)}`
  );

  let prefix = /^(?:CLASSIFIED_)/;
  let entries = 0;
  for (let c of Object.keys(Ci.nsIClassifiedChannel).filter(name =>
    prefix.test(name)
  )) {
    let entry = c.replace(prefix, "").toLowerCase();
    if (!entry.startsWith("socialtracking")) {
      ok(schema_enum.includes(entry), `schema ${entry} is in IDL`);
      entries++;
    }
  }
  equal(schema_enum.length, entries, "same number of entries");
});