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);
}
},
};
};
|