Bug 1367232 - Clean up various ESLint global definitions in toolkit/. r?Mossop draft
authorMark Banner <standard8@mozilla.com>
Fri, 19 May 2017 09:22:48 +0100
changeset 583266 6b970bca3e40ada28b797faa0ca7862ba65aa9a1
parent 583025 6dfa56094f0cc291945dd3c24d0a4c2682d80ec7
child 630012 f9b60aa3491724542c651b7364f5d0b91598f5bf
push id60345
push userbmo:standard8@mozilla.com
push dateTue, 23 May 2017 21:31:20 +0000
reviewersMossop
bugs1367232
milestone55.0a1
Bug 1367232 - Clean up various ESLint global definitions in toolkit/. r?Mossop MozReview-Commit-ID: Hhm4YBansg1
toolkit/components/aboutcheckerboard/content/aboutCheckerboard.js
toolkit/components/extensions/ExtensionStorageSync.jsm
toolkit/components/extensions/ExtensionUtils.jsm
toolkit/components/extensions/Schemas.jsm
toolkit/components/extensions/ext-browser-content.js
toolkit/components/extensions/ext-c-identity.js
toolkit/components/lz4/lz4_internal.js
toolkit/components/narrate/test/.eslintrc.js
toolkit/components/narrate/test/browser_narrate.js
toolkit/components/narrate/test/browser_narrate_disable.js
toolkit/components/narrate/test/browser_narrate_language.js
toolkit/components/narrate/test/browser_voiceselect.js
toolkit/components/narrate/test/browser_word_highlight.js
toolkit/components/narrate/test/head.js
toolkit/components/passwordmgr/nsLoginManager.js
toolkit/content/aboutwebrtc/aboutWebrtc.js
toolkit/modules/subprocess/.eslintrc.js
toolkit/modules/subprocess/subprocess_common.jsm
toolkit/modules/subprocess/subprocess_shared_unix.js
toolkit/modules/subprocess/subprocess_shared_win.js
toolkit/modules/subprocess/subprocess_unix.jsm
toolkit/modules/subprocess/subprocess_win.jsm
toolkit/modules/subprocess/subprocess_worker_common.js
toolkit/modules/subprocess/subprocess_worker_unix.js
toolkit/modules/subprocess/subprocess_worker_win.js
tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
--- a/toolkit/components/aboutcheckerboard/content/aboutCheckerboard.js
+++ b/toolkit/components/aboutcheckerboard/content/aboutCheckerboard.js
@@ -1,15 +1,12 @@
 /* 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/. */
 
-// Global in the DOM for privileged code only.
-/* global CheckerboardReportService */
-
 "use strict";
 
 var trace;
 var service;
 var reports;
 
 function onLoad() {
   trace = document.getElementById("trace");
--- a/toolkit/components/extensions/ExtensionStorageSync.jsm
+++ b/toolkit/components/extensions/ExtensionStorageSync.jsm
@@ -12,18 +12,16 @@
 this.EXPORTED_SYMBOLS = ["ExtensionStorageSync", "extensionStorageSync"];
 
 const Ci = Components.interfaces;
 const Cc = Components.classes;
 const Cu = Components.utils;
 const Cr = Components.results;
 const global = this;
 
-/* globals atob, btoa */
-
 Cu.importGlobalProperties(["atob", "btoa"]);
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
 const KINTO_PROD_SERVER_URL = "https://webextensions.settings.services.mozilla.com/v1";
 const KINTO_DEFAULT_SERVER_URL = KINTO_PROD_SERVER_URL;
 
 const STORAGE_SYNC_ENABLED_PREF = "webextensions.storage.sync.enabled";
 const STORAGE_SYNC_SERVER_URL_PREF = "webextensions.storage.sync.serverURL";
@@ -83,18 +81,16 @@ XPCOMUtils.defineLazyPreferenceGetter(th
                                       STORAGE_SYNC_ENABLED_PREF, true);
 XPCOMUtils.defineLazyPreferenceGetter(this, "prefStorageSyncServerURL",
                                       STORAGE_SYNC_SERVER_URL_PREF,
                                       KINTO_DEFAULT_SERVER_URL);
 const {
   runSafeSyncWithoutClone,
 } = ExtensionUtils;
 
-/* globals prefPermitsStorageSync, prefStorageSyncServerURL */
-
 // Map of Extensions to Set<Contexts> to track contexts that are still
 // "live" and use storage.sync.
 const extensionContexts = new Map();
 // Borrow logger from Sync.
 const log = Log.repository.getLogger("Sync.Engine.Extension-Storage");
 
 // A global that is fxAccounts, or null if (as on android) fxAccounts
 // isn't available.
--- a/toolkit/components/extensions/ExtensionUtils.jsm
+++ b/toolkit/components/extensions/ExtensionUtils.jsm
@@ -32,18 +32,16 @@ XPCOMUtils.defineLazyModuleGetter(this, 
                                   "resource://gre/modules/Preferences.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "Schemas",
                                   "resource://gre/modules/Schemas.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "styleSheetService",
                                    "@mozilla.org/content/style-sheet-service;1",
                                    "nsIStyleSheetService");
 
-/* globals IDBKeyRange */
-
 function getConsole() {
   return new ConsoleAPI({
     maxLogLevelPref: "extensions.webextensions.log.level",
     prefix: "WebExtensions",
   });
 }
 
 XPCOMUtils.defineLazyGetter(this, "console", getConsole);
@@ -932,17 +930,17 @@ class MessageManagerProxy {
    *        Arguments to be passed verbatim to the underlying
    *        sendAsyncMessage method.
    * @returns {undefined}
    */
   sendAsyncMessage(...args) {
     if (this.messageManager) {
       return this.messageManager.sendAsyncMessage(...args);
     }
-    /* globals uneval */
+
     Cu.reportError(`Cannot send message: Other side disconnected: ${uneval(args)}`);
   }
 
   get isDisconnected() {
     return !this.messageManager;
   }
 
   /**
--- a/toolkit/components/extensions/Schemas.jsm
+++ b/toolkit/components/extensions/Schemas.jsm
@@ -32,18 +32,16 @@ XPCOMUtils.defineLazyServiceGetter(this,
                                    "nsIAddonContentPolicy");
 
 this.EXPORTED_SYMBOLS = ["Schemas"];
 
 const {DEBUG} = AppConstants;
 
 const isParentProcess = Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_DEFAULT;
 
-/* globals Schemas, URL */
-
 function readJSON(url) {
   return new Promise((resolve, reject) => {
     NetUtil.asyncFetch({uri: url, loadUsingSystemPrincipal: true}, (inputStream, status) => {
       if (!Components.isSuccessCode(status)) {
         // Convert status code to a string
         let e = Components.Exception("", status);
         reject(new Error(`Error while loading '${url}' (${e.name})`));
         return;
--- a/toolkit/components/extensions/ext-browser-content.js
+++ b/toolkit/components/extensions/ext-browser-content.js
@@ -17,17 +17,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
                                   "resource://gre/modules/Timer.jsm");
 
 Cu.import("resource://gre/modules/ExtensionUtils.jsm");
 const {
   getWinUtils,
   stylesheetMap,
 } = ExtensionUtils;
 
-/* globals addMessageListener, addEventListener, content, docShell, removeEventListener, sendAsyncMessage */
+/* eslint-env mozilla/frame-script */
 
 // Minimum time between two resizes.
 const RESIZE_TIMEOUT = 100;
 
 /**
  * Check if the provided color is fully opaque.
  *
  * @param   {string} color
--- a/toolkit/components/extensions/ext-c-identity.js
+++ b/toolkit/components/extensions/ext-c-identity.js
@@ -1,26 +1,23 @@
 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set sts=2 sw=2 et tw=80: */
-/* global redirectDomain */
 "use strict";
 
 var {Constructor: CC} = Components;
 
 XPCOMUtils.defineLazyModuleGetter(this, "Services",
                                   "resource://gre/modules/Services.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "CommonUtils",
                                   "resource://services-common/utils.js");
 XPCOMUtils.defineLazyPreferenceGetter(this, "redirectDomain",
                                       "extensions.webextensions.identity.redirectDomain");
 
 let CryptoHash = CC("@mozilla.org/security/hash;1", "nsICryptoHash", "initWithString");
 
-/* globals URL, XMLHttpRequest */
-
 Cu.importGlobalProperties(["URL", "XMLHttpRequest", "TextEncoder"]);
 
 var {
   promiseDocumentLoaded,
 } = ExtensionUtils;
 
 function computeHash(str) {
   let byteArr = new TextEncoder().encode(str);
--- a/toolkit/components/lz4/lz4_internal.js
+++ b/toolkit/components/lz4/lz4_internal.js
@@ -15,17 +15,16 @@ if (typeof Components != "undefined") {
   Cu.import("resource://gre/modules/osfile/osfile_shared_allthreads.jsm", SharedAll);
 
   this.EXPORTED_SYMBOLS = [
     "Primitives"
   ];
   this.Primitives = Primitives;
   this.exports = {};
 } else if (typeof module != "undefined" && typeof require != "undefined") {
-  /* global require:false */
   SharedAll = require("resource://gre/modules/osfile/osfile_shared_allthreads.jsm");
 } else {
   throw new Error("Please load this module with Component.utils.import or with require()");
 }
 
 var libxul = new SharedAll.Library("libxul", SharedAll.Constants.Path.libxul);
 var Type = SharedAll.Type;
 
@@ -52,17 +51,16 @@ libxul.declareLazyFFI(Primitives, "decom
 libxul.declareLazyFFI(Primitives, "maxCompressedSize",
   "workerlz4_maxCompressedSize",
   null,
   /* return*/ Type.size_t,
   /* inputSize*/ Type.size_t
 );
 
 if (typeof module != "undefined") {
-  /* global module:false */
   module.exports = {
     get compress() {
       return Primitives.compress;
     },
     get decompress() {
       return Primitives.decompress;
     },
     get maxCompressedSize() {
--- a/toolkit/components/narrate/test/.eslintrc.js
+++ b/toolkit/components/narrate/test/.eslintrc.js
@@ -1,23 +1,7 @@
 "use strict";
 
-module.exports = { // eslint-disable-line no-undef
+module.exports = {
   "extends": [
-    "../.eslintrc.js"
-  ],
-
-  "globals": {
-    "is": true,
-    "isnot": true,
-    "ok": true,
-    "NarrateTestUtils": true,
-    "content": true,
-    "ContentTaskUtils": true,
-    "ContentTask": true,
-    "BrowserTestUtils": true,
-    "gBrowser": true,
-  },
-
-  "rules": {
-    "mozilla/import-headjs-globals": "warn"
-  }
+    "plugin:mozilla/browser-test"
+  ]
 };
--- a/toolkit/components/narrate/test/browser_narrate.js
+++ b/toolkit/components/narrate/test/browser_narrate.js
@@ -1,14 +1,12 @@
 /* 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/. */
 
-/* globals is, isnot, registerCleanupFunction, add_task */
-
 "use strict";
 
 registerCleanupFunction(teardown);
 
 add_task(async function testNarrate() {
   setup();
 
   await spawnInNewReaderTab(TEST_ARTICLE, async function() {
--- a/toolkit/components/narrate/test/browser_narrate_disable.js
+++ b/toolkit/components/narrate/test/browser_narrate_disable.js
@@ -1,14 +1,12 @@
 /* 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/. */
 
-/* globals registerCleanupFunction, add_task */
-
 "use strict";
 
 const ENABLE_PREF = "narrate.enabled";
 
 registerCleanupFunction(() => {
   clearUserPref(ENABLE_PREF);
   teardown();
 });
--- a/toolkit/components/narrate/test/browser_narrate_language.js
+++ b/toolkit/components/narrate/test/browser_narrate_language.js
@@ -1,14 +1,12 @@
 /* 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/. */
 
-/* globals is, isnot, registerCleanupFunction, add_task */
-
 "use strict";
 
 registerCleanupFunction(teardown);
 
 add_task(async function testVoiceselectDropdownAutoclose() {
   setup("automatic", true);
 
   await spawnInNewReaderTab(TEST_ARTICLE, async function() {
--- a/toolkit/components/narrate/test/browser_voiceselect.js
+++ b/toolkit/components/narrate/test/browser_voiceselect.js
@@ -1,14 +1,12 @@
 /* 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/. */
 
-/* globals registerCleanupFunction, add_task, is, isnot */
-
 "use strict";
 
 registerCleanupFunction(teardown);
 
 add_task(async function testVoiceselectDropdownAutoclose() {
   setup();
 
   await spawnInNewReaderTab(TEST_ARTICLE, async function() {
--- a/toolkit/components/narrate/test/browser_word_highlight.js
+++ b/toolkit/components/narrate/test/browser_word_highlight.js
@@ -1,14 +1,12 @@
 /* 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/. */
 
-/* globals is, isnot, registerCleanupFunction, add_task */
-
 "use strict";
 
 registerCleanupFunction(teardown);
 
 add_task(async function testNarrate() {
   setup("urn:moz-tts:fake-indirect:teresa");
 
   await spawnInNewReaderTab(TEST_ARTICLE, async function() {
--- a/toolkit/components/narrate/test/head.js
+++ b/toolkit/components/narrate/test/head.js
@@ -59,16 +59,19 @@ function teardown() {
 }
 
 function spawnInNewReaderTab(url, func) {
   return BrowserTestUtils.withNewTab(
     { gBrowser,
       url: `about:reader?url=${encodeURIComponent(url)}` },
       async function(browser) {
         await ContentTask.spawn(browser, null, async function() {
+          // This imports the test utils for all tests, so we'll declare it as
+          // a global here which will make it ESLint happy.
+          /* global NarrateTestUtils */
           Components.utils.import("chrome://mochitests/content/browser/" +
             "toolkit/components/narrate/test/NarrateTestUtils.jsm");
 
           await NarrateTestUtils.getReaderReadyPromise(content);
         });
 
         await ContentTask.spawn(browser, null, func);
       });
--- a/toolkit/components/passwordmgr/nsLoginManager.js
+++ b/toolkit/components/passwordmgr/nsLoginManager.js
@@ -7,17 +7,17 @@
 const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
 
 const PERMISSION_SAVE_LOGINS = "login-saving";
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Timer.jsm");
-Cu.import("resource://gre/modules/LoginManagerContent.jsm"); /* global UserAutoCompleteResult */
+Cu.import("resource://gre/modules/LoginManagerContent.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "Promise",
                                   "resource://gre/modules/Promise.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "BrowserUtils",
                                   "resource://gre/modules/BrowserUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "LoginHelper",
                                   "resource://gre/modules/LoginHelper.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "LoginFormFactory",
--- a/toolkit/content/aboutwebrtc/aboutWebrtc.js
+++ b/toolkit/content/aboutwebrtc/aboutWebrtc.js
@@ -1,15 +1,13 @@
 /* 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";
 
-/* global WebrtcGlobalInformation, document */
-
 var Cu = Components.utils;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "FileUtils",
                                   "resource://gre/modules/FileUtils.jsm");
 XPCOMUtils.defineLazyServiceGetter(this, "FilePicker",
--- a/toolkit/modules/subprocess/.eslintrc.js
+++ b/toolkit/modules/subprocess/.eslintrc.js
@@ -1,28 +1,13 @@
 "use strict";
 
 module.exports = {
   "extends": "../../components/extensions/.eslintrc.js",
 
   "env": {
-    "worker": true,
-  },
-
-  "globals": {
-    "ChromeWorker": false,
-    "Components": false,
-    "LIBC": true,
-    "Library": true,
-    "OS": false,
-    "Services": false,
-    "SubprocessConstants": true,
-    "ctypes": false,
-    "debug": true,
-    "dump": false,
-    "libc": true,
-    "unix": true,
+    "mozilla/chrome-worker": true,
   },
 
   "rules": {
     "no-console": "off",
   },
 };
--- a/toolkit/modules/subprocess/subprocess_common.jsm
+++ b/toolkit/modules/subprocess/subprocess_common.jsm
@@ -17,16 +17,17 @@ Cu.importGlobalProperties(["TextDecoder"
 
 XPCOMUtils.defineLazyModuleGetter(this, "AsyncShutdown",
                                   "resource://gre/modules/AsyncShutdown.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "setTimeout",
                                   "resource://gre/modules/Timer.jsm");
 
 Services.scriptloader.loadSubScript("resource://gre/modules/subprocess/subprocess_shared.js", this);
 
+/* global SubprocessConstants */
 var EXPORTED_SYMBOLS = ["BaseProcess", "PromiseWorker", "SubprocessConstants"];
 
 const BUFFER_SIZE = 4096;
 
 let nextResponseId = 0;
 
 /**
  * Wraps a ChromeWorker so that messages sent to it return a promise which
--- a/toolkit/modules/subprocess/subprocess_shared_unix.js
+++ b/toolkit/modules/subprocess/subprocess_shared_unix.js
@@ -2,16 +2,19 @@
 /* vim: set sts=2 sw=2 et tw=80: */
 /* 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";
 
 /* exported libc */
 
+// This file is loaded into the same scope as subprocess_unix.jsm
+/* import-globals-from subprocess_unix.jsm */
+
 const LIBC = OS.Constants.libc;
 
 const LIBC_CHOICES = ["libc.so", "libSystem.B.dylib", "a.out"];
 
 const unix = {
   pid_t: ctypes.int32_t,
 
   pollfd: new ctypes.StructType("pollfd", [
--- a/toolkit/modules/subprocess/subprocess_shared_win.js
+++ b/toolkit/modules/subprocess/subprocess_shared_win.js
@@ -2,16 +2,19 @@
 /* vim: set sts=2 sw=2 et tw=80: */
 /* 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";
 
 /* exported LIBC, Win, createPipe, libc */
 
+// This file is loaded into the same scope as subprocess_win.jsm
+/* import-globals-from subprocess_win.jsm */
+
 const LIBC = OS.Constants.libc;
 
 const Win = OS.Constants.Win;
 
 const LIBC_CHOICES = ["kernel32.dll"];
 
 var win32 = {
   // On Windows 64, winapi_abi is an alias for default_abi.
--- a/toolkit/modules/subprocess/subprocess_unix.jsm
+++ b/toolkit/modules/subprocess/subprocess_unix.jsm
@@ -4,29 +4,29 @@
  * 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";
 
 /* eslint-disable mozilla/balanced-listeners */
 
 /* exported SubprocessImpl */
 
-/* globals BaseProcess, PromiseWorker */
-
 var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 Cu.importGlobalProperties(["TextDecoder"]);
 
 var EXPORTED_SYMBOLS = ["SubprocessImpl"];
 
 Cu.import("resource://gre/modules/ctypes.jsm");
 Cu.import("resource://gre/modules/osfile.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/subprocess/subprocess_common.jsm");
 
+/* import-globals-from subprocess_shared.js */
+/* import-globals-from subprocess_shared_unix.js */
 Services.scriptloader.loadSubScript("resource://gre/modules/subprocess/subprocess_shared.js", this);
 Services.scriptloader.loadSubScript("resource://gre/modules/subprocess/subprocess_shared_unix.js", this);
 
 class UnixPromiseWorker extends PromiseWorker {
   constructor(...args) {
     super(...args);
 
     let fds = ctypes.int.array(2)();
--- a/toolkit/modules/subprocess/subprocess_win.jsm
+++ b/toolkit/modules/subprocess/subprocess_win.jsm
@@ -4,31 +4,31 @@
  * 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";
 
 /* eslint-disable mozilla/balanced-listeners */
 
 /* exported SubprocessImpl */
 
-/* globals BaseProcess, PromiseWorker */
-
 var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 var EXPORTED_SYMBOLS = ["SubprocessImpl"];
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/ctypes.jsm");
 Cu.import("resource://gre/modules/osfile.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/subprocess/subprocess_common.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "env", "@mozilla.org/process/environment;1", "nsIEnvironment");
 
+/* import-globals-from subprocess_shared.js */
+/* import-globals-from subprocess_shared_win.js */
 Services.scriptloader.loadSubScript("resource://gre/modules/subprocess/subprocess_shared.js", this);
 Services.scriptloader.loadSubScript("resource://gre/modules/subprocess/subprocess_shared_win.js", this);
 
 class WinPromiseWorker extends PromiseWorker {
   constructor(...args) {
     super(...args);
 
     this.signalEvent = libc.CreateSemaphoreW(null, 0, 32, null);
--- a/toolkit/modules/subprocess/subprocess_worker_common.js
+++ b/toolkit/modules/subprocess/subprocess_worker_common.js
@@ -1,17 +1,20 @@
 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set sts=2 sw=2 et tw=80: */
 /* 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";
 
+// This file is loaded into the same context as subprocess_worker_unix.js
+// and subprocess_worker_win.js
+/* import-globals-from subprocess_worker_unix.js */
+
 /* exported BasePipe, BaseProcess, debug */
-/* globals Process, io */
 
 function debug(message) {
   self.postMessage({msg: "debug", message});
 }
 
 class BasePipe {
   constructor() {
     this.closing = false;
--- a/toolkit/modules/subprocess/subprocess_worker_unix.js
+++ b/toolkit/modules/subprocess/subprocess_worker_unix.js
@@ -1,18 +1,20 @@
 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set sts=2 sw=2 et tw=80: */
 /* 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";
 
 /* exported Process */
-/* globals BaseProcess, BasePipe */
 
+/* import-globals-from subprocess_shared.js */
+/* import-globals-from subprocess_shared_unix.js */
+/* import-globals-from subprocess_worker_common.js */
 importScripts("resource://gre/modules/subprocess/subprocess_shared.js",
               "resource://gre/modules/subprocess/subprocess_shared_unix.js",
               "resource://gre/modules/subprocess/subprocess_worker_common.js");
 
 const POLL_TIMEOUT = 5000;
 
 let io;
 
--- a/toolkit/modules/subprocess/subprocess_worker_win.js
+++ b/toolkit/modules/subprocess/subprocess_worker_win.js
@@ -1,18 +1,20 @@
 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set sts=2 sw=2 et tw=80: */
 /* 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";
 
 /* exported Process */
-/* globals BaseProcess, BasePipe, win32 */
 
+/* import-globals-from subprocess_shared.js */
+/* import-globals-from subprocess_shared_win.js */
+/* import-globals-from subprocess_worker_common.js */
 importScripts("resource://gre/modules/subprocess/subprocess_shared.js",
               "resource://gre/modules/subprocess/subprocess_shared_win.js",
               "resource://gre/modules/subprocess/subprocess_worker_common.js");
 
 const POLL_TIMEOUT = 5000;
 
 // The exit code that we send when we forcibly terminate a process.
 const TERMINATE_EXIT_CODE = 0x7f;
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
@@ -6,16 +6,17 @@ module.exports = {
     "es6": true
   },
 
   "globals": {
     "BroadcastChannel": false,
     "BrowserFeedWriter": false,
     "CSSPrimitiveValue": false,
     "CSSValueList": false,
+    "CheckerboardReportService": false,
     // Specific to Firefox (Chrome code only).
     "ChromeUtils": false,
     "ChromeWindow": false,
     "ChromeWorker": false,
     "Components": false,
     "DOMRequest": false,
     "DedicatedWorkerGlobalScope": false,
     "IDBFileRequest": false,
@@ -32,16 +33,17 @@ module.exports = {
     // Specific to Firefox (Chrome code only).
     "MozSelfSupport": false,
     "SharedArrayBuffer": false,
     "SimpleGestureEvent": false,
     // Note: StopIteration will likely be removed as part of removing legacy
     // generators, see bug 968038.
     "StopIteration": false,
     "WebAssembly": false,
+    "WebrtcGlobalInformation": false,
     // Non-standard, specific to Firefox.
     "XULElement": false,
     "dump": true,
     "openDialog": false,
     "sizeToContent": false,
     // Specific to Firefox
     // eslint-disable-next-line max-len
     // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/uneval