summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/mochitest/chrome_cleanup_script.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/mochitest/chrome_cleanup_script.js')
-rw-r--r--toolkit/components/extensions/test/mochitest/chrome_cleanup_script.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/mochitest/chrome_cleanup_script.js b/toolkit/components/extensions/test/mochitest/chrome_cleanup_script.js
new file mode 100644
index 0000000000..9afa95f302
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/chrome_cleanup_script.js
@@ -0,0 +1,65 @@
+/* eslint-env mozilla/chrome-script */
+
+"use strict";
+
+const { AppConstants } = ChromeUtils.importESModule(
+ "resource://gre/modules/AppConstants.sys.mjs"
+);
+
+let listener = msg => {
+ void (msg instanceof Ci.nsIConsoleMessage);
+ dump(`Console message: ${msg}\n`);
+};
+
+Services.console.registerListener(listener);
+
+let getBrowserApp, getTabBrowser;
+if (AppConstants.MOZ_BUILD_APP === "mobile/android") {
+ getBrowserApp = win => win.BrowserApp;
+ getTabBrowser = tab => tab.browser;
+} else {
+ getBrowserApp = win => win.gBrowser;
+ getTabBrowser = tab => tab.linkedBrowser;
+}
+
+function* iterBrowserWindows() {
+ for (let win of Services.wm.getEnumerator("navigator:browser")) {
+ if (!win.closed && getBrowserApp(win)) {
+ yield win;
+ }
+ }
+}
+
+let initialTabs = new Map();
+for (let win of iterBrowserWindows()) {
+ initialTabs.set(win, new Set(getBrowserApp(win).tabs));
+}
+
+addMessageListener("check-cleanup", extensionId => {
+ Services.console.unregisterListener(listener);
+
+ let results = {
+ extraWindows: [],
+ extraTabs: [],
+ };
+
+ for (let win of iterBrowserWindows()) {
+ if (initialTabs.has(win)) {
+ let tabs = initialTabs.get(win);
+
+ for (let tab of getBrowserApp(win).tabs) {
+ if (!tabs.has(tab)) {
+ results.extraTabs.push(getTabBrowser(tab).currentURI.spec);
+ }
+ }
+ } else {
+ results.extraWindows.push(
+ Array.from(win.gBrowser.tabs, tab => getTabBrowser(tab).currentURI.spec)
+ );
+ }
+ }
+
+ initialTabs = null;
+
+ sendAsyncMessage("cleanup-results", results);
+});