summaryrefslogtreecommitdiffstats
path: root/tools/lint/eslint/eslint-plugin-mozilla/lib/rules/import-content-task-globals.js
blob: b8545b45f808578a12b70f38ad117b8534801d6a (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
/**
 * @fileoverview For ContentTask.spawn, this will automatically declare the
 *               frame script variables in the global scope.
 *               Note: due to the way ESLint works, it appears it is only
 *               easy to declare these variables on a file-global scope, rather
 *               than function global.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

"use strict";

// -----------------------------------------------------------------------------
// Rule Definition
// -----------------------------------------------------------------------------

var helpers = require("../helpers");
var frameScriptEnv = require("../environments/frame-script");

// The global environment of SpecialPowers.spawn tasks is
// controlled by the Sandbox environment created by
// SpecialPowersSandbox.jsm. This list should be kept in sync with
// that module.
var sandboxGlobals = [
  "Assert",
  "Blob",
  "BrowsingContext",
  "ChromeUtils",
  "ContentTaskUtils",
  "EventUtils",
  "Services",
  "TextDecoder",
  "TextEncoder",
  "URL",
  "assert",
  "info",
  "is",
  "isnot",
  "ok",
  "todo",
  "todo_is",
];

module.exports = function(context) {
  // ---------------------------------------------------------------------------
  // Public
  // ---------------------------------------------------------------------------

  return {
    "CallExpression[callee.object.name='ContentTask'][callee.property.name='spawn']": function(
      node
    ) {
      for (let global in frameScriptEnv.globals) {
        helpers.addVarToScope(
          global,
          context.getScope(),
          frameScriptEnv.globals[global]
        );
      }
    },
    "CallExpression[callee.object.name='SpecialPowers'][callee.property.name='spawn']": function(
      node
    ) {
      let globals = [...sandboxGlobals, "SpecialPowers", "content", "docShell"];
      for (let global of globals) {
        helpers.addVarToScope(global, context.getScope(), false);
      }
    },
    "CallExpression[callee.object.name='SpecialPowers'][callee.property.name='spawnChrome']": function(
      node
    ) {
      let globals = [
        ...sandboxGlobals,
        "browsingContext",
        "windowGlobalParent",
      ];
      for (let global of globals) {
        helpers.addVarToScope(global, context.getScope(), false);
      }
    },
  };
};