From 036cfb187ca92b0352e034f24d45e25b306a2e28 Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Tue, 10 Mar 2026 21:34:24 +0100 Subject: [PATCH] chore: Run lint and fund dependencies, p=#12718 --- .github/workflows/code-linter.yml | 4 +- .github/workflows/pr-test.yml | 4 +- .github/workflows/sync-upstream.yml | 7 + package-lock.json | 168 +- package.json | 9 +- src/-prettierignore.patch | 17 + src/-stylelintignore.patch | 13 +- src/eslint-ignores-config-mjs.patch | 7 +- src/tools/lint/eslint/__init__-py.patch | 13 + src/zen/@types/lib.gecko.darwin.d.ts | 38 +- src/zen/@types/lib.gecko.dom.d.ts | 2827 +++++++++++++---- src/zen/@types/lib.gecko.glean.d.ts | 1250 ++++++-- src/zen/@types/lib.gecko.linux.d.ts | 6 +- src/zen/@types/lib.gecko.nsresult.d.ts | 3 +- src/zen/@types/lib.gecko.tweaks.d.ts | 8 +- src/zen/@types/lib.gecko.win32.d.ts | 61 +- src/zen/@types/lib.gecko.xpcom.d.ts | 2136 ++++++++++--- src/zen/@types/zen.d.ts | 33 +- src/zen/common/emojis/ZenEmojiPicker.mjs | 24 +- src/zen/common/modules/ZenCommonUtils.mjs | 26 +- src/zen/common/modules/ZenHasPolyfill.mjs | 33 +- src/zen/common/modules/ZenMenubar.mjs | 27 +- src/zen/common/modules/ZenSessionStore.mjs | 2 +- .../common/modules/ZenSidebarNotification.mjs | 27 +- src/zen/common/modules/ZenStartup.mjs | 26 +- src/zen/common/modules/ZenUIManager.mjs | 323 +- src/zen/common/modules/ZenUpdates.mjs | 9 +- src/zen/common/sys/ZenCustomizableUI.sys.mjs | 27 +- src/zen/common/sys/ZenUIMigration.sys.mjs | 53 +- src/zen/common/zen-sets.js | 280 +- src/zen/common/zenThemeModifier.js | 46 +- src/zen/compact-mode/ZenCompactMode.mjs | 187 +- src/zen/downloads/ZenDownloadAnimation.mjs | 71 +- src/zen/drag-and-drop/ZenDragAndDrop.js | 354 ++- src/zen/folders/ZenFolder.mjs | 29 +- src/zen/folders/ZenFolders.mjs | 285 +- src/zen/glance/ZenGlanceManager.mjs | 196 +- src/zen/glance/actors/ZenGlanceChild.sys.mjs | 8 +- src/zen/glance/actors/ZenGlanceParent.sys.mjs | 12 +- src/zen/glance/tests/GlanceTestUtils.sys.mjs | 4 +- src/zen/kbs/ZenKeyboardShortcuts.mjs | 116 +- src/zen/live-folders/ZenLiveFolder.sys.mjs | 30 +- .../ZenLiveFoldersManager.sys.mjs | 49 +- src/zen/live-folders/ZenLiveFoldersUI.mjs | 29 +- .../providers/GithubLiveFolder.sys.mjs | 22 +- .../providers/RssLiveFolder.sys.mjs | 61 +- src/zen/media/ZenMediaController.mjs | 184 +- src/zen/mods/ZenMods.mjs | 125 +- .../actors/ZenModsMarketplaceChild.sys.mjs | 36 +- .../actors/ZenModsMarketplaceParent.sys.mjs | 4 +- .../sessionstore/ZenSessionManager.sys.mjs | 176 +- src/zen/sessionstore/ZenWindowSync.sys.mjs | 307 +- src/zen/split-view/ZenViewSplitter.mjs | 433 ++- src/zen/tabs/ZenPinnedTabManager.mjs | 222 +- .../browser_compact_mode_width.js | 10 +- .../browser_container_auto_switch.js | 13 +- .../browser_container_specific_essentials.js | 16 +- .../tests/folders/browser_folder_density.js | 24 +- .../tests/folders/browser_folder_empty_tab.js | 15 +- .../folders/browser_folder_issue_9885.js | 5 +- .../folders/browser_folder_issue_9981.js | 33 +- .../folders/browser_folder_max_subfolders.js | 9 +- .../folders/browser_folder_multiselected.js | 17 +- .../folders/browser_folder_owner_tabs.js | 8 +- .../folders/browser_folder_reset_button.js | 35 +- .../folders/browser_folder_visible_tabs.js | 10 +- src/zen/tests/folders/head.js | 6 +- src/zen/tests/glance/browser_glance_basic.js | 2 +- src/zen/tests/glance/browser_glance_close.js | 4 +- .../glance/browser_glance_close_select.js | 14 +- src/zen/tests/glance/browser_glance_expand.js | 55 +- .../tests/glance/browser_glance_next_tab.js | 15 +- .../tests/glance/browser_glance_prev_tab.js | 15 +- .../glance/browser_glance_select_parent.js | 13 +- .../browser_github_live_folder.js | 23 +- .../tests/live-folders/browser_live_folder.js | 26 +- .../live-folders/browser_rss_live_folder.js | 12 +- src/zen/tests/pinned/browser_issue_8726.js | 10 +- .../tests/pinned/browser_pinned_changed.js | 44 +- src/zen/tests/pinned/browser_pinned_close.js | 27 +- .../tests/pinned/browser_pinned_created.js | 15 +- .../pinned/browser_pinned_nounload_reset.js | 62 +- .../pinned/browser_pinned_reset_noswitch.js | 62 +- src/zen/tests/pinned/browser_pinned_switch.js | 60 +- .../pinned/browser_pinned_to_essential.js | 11 +- .../pinned/browser_pinned_unload_changed.js | 66 +- .../pinned/browser_pinned_unload_noreset.js | 60 +- .../split_view/browser_basic_split_view.js | 3 +- .../browser_split_browser_duplication.js | 48 +- .../tests/split_view/browser_split_groups.js | 37 +- .../split_view/browser_split_inset_checks.js | 18 +- .../split_view/browser_split_view_empty.js | 12 +- .../browser_split_view_with_folders.js | 29 +- .../browser_split_view_with_glance.js | 21 +- src/zen/tests/split_view/head.js | 8 +- .../tests/tabs/browser_drag_drop_vertical.js | 24 +- .../tabs/browser_tabs_cycle_by_attribute.js | 29 +- .../tests/tabs/browser_tabs_empty_checks.js | 15 +- src/zen/tests/tabs/head.js | 141 +- .../ub-actions/browser_ub_actions_search.js | 12 +- .../tests/urlbar/browser_floating_urlbar.js | 5 +- src/zen/tests/urlbar/browser_issue_7385.js | 6 +- src/zen/tests/urlbar/head.js | 10 +- src/zen/tests/welcome/browser_welcome.js | 40 +- src/zen/tests/welcome/head.js | 4 +- .../window_sync/browser_sync_tab_label.js | 6 +- .../window_sync/browser_sync_tab_open.js | 6 +- src/zen/tests/window_sync/head.js | 10 +- .../workspaces/browser_basic_workspaces.js | 6 +- .../workspaces/browser_change_to_empty.js | 6 +- .../workspaces/browser_double_click_newtab.js | 12 +- .../tests/workspaces/browser_issue_10455.js | 11 +- .../tests/workspaces/browser_issue_8699.js | 21 +- .../tests/workspaces/browser_issue_9900.js | 12 +- .../workspaces/browser_overflow_scrollbox.js | 39 +- .../browser_private_mode_startup.js | 2 +- .../workspaces/browser_workspace_bookmarks.js | 26 +- .../workspaces/browser_workspace_unload.js | 35 +- src/zen/tests/workspaces/head.js | 75 +- src/zen/urlbar/ZenSiteDataPanel.sys.mjs | 138 +- src/zen/urlbar/ZenUBActionsProvider.sys.mjs | 85 +- src/zen/urlbar/ZenUBGlobalActions.sys.mjs | 51 +- src/zen/urlbar/ZenUBProvider.sys.mjs | 3 +- src/zen/urlbar/ZenUBResultsLearner.sys.mjs | 4 +- src/zen/welcome/ZenWelcome.mjs | 104 +- src/zen/workspaces/ZenGradientGenerator.mjs | 419 ++- src/zen/workspaces/ZenWorkspace.mjs | 91 +- .../ZenWorkspaceBookmarksStorage.js | 6 +- src/zen/workspaces/ZenWorkspaceCreation.mjs | 55 +- src/zen/workspaces/ZenWorkspaceIcons.mjs | 17 +- src/zen/workspaces/ZenWorkspaces.mjs | 756 +++-- 131 files changed, 10249 insertions(+), 3453 deletions(-) create mode 100644 src/-prettierignore.patch create mode 100644 src/tools/lint/eslint/__init__-py.patch diff --git a/.github/workflows/code-linter.yml b/.github/workflows/code-linter.yml index 04ee4408d..51dbfc2c1 100644 --- a/.github/workflows/code-linter.yml +++ b/.github/workflows/code-linter.yml @@ -33,9 +33,9 @@ jobs: - name: Restore Surfer engine cache id: surfer-engine-cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: - path: .surfer/engine/*.tar + path: .surfer/engine/ key: surfer-engine-${{ hashFiles('surfer.json') }} - name: Setup Git diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 5cc2bd6ae..c23a051a1 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -30,9 +30,9 @@ jobs: - name: Restore Surfer engine cache id: surfer-engine-cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: - path: .surfer/engine/*.tar + path: .surfer/engine/ key: surfer-engine-${{ hashFiles('surfer.json') }} - name: Setup Git diff --git a/.github/workflows/sync-upstream.yml b/.github/workflows/sync-upstream.yml index fd479e3e8..066be05d1 100644 --- a/.github/workflows/sync-upstream.yml +++ b/.github/workflows/sync-upstream.yml @@ -60,6 +60,13 @@ jobs: npm run surfer -- ci --brand release fi + - name: Restore Surfer engine cache + id: surfer-engine-cache + uses: actions/cache@v5 + with: + path: .surfer/engine/ + key: surfer-engine-${{ hashFiles('surfer.json') }} + - name: Download Firefox and dependencies if: steps.check-upstream-branch.outputs.branch_exists == 'false' run: npm run download diff --git a/package-lock.json b/package-lock.json index fde4e3044..279cdb9e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "license": "MPL-2.0", "devDependencies": { "@babel/preset-typescript": "^7.27.0", - "@zen-browser/surfer": "^1.13.1", + "@zen-browser/prettier": "^3.9.3", + "@zen-browser/surfer": "^1.13.4", "formal-git": "^1.2.9", "globals": "^16.3.0", "husky": "^9.1.7", @@ -564,55 +565,55 @@ } }, "node_modules/@oozcitak/dom": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", - "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-2.0.2.tgz", + "integrity": "sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==", "dev": true, "license": "MIT", "dependencies": { - "@oozcitak/infra": "1.0.8", - "@oozcitak/url": "1.0.4", - "@oozcitak/util": "8.3.8" + "@oozcitak/infra": "^2.0.2", + "@oozcitak/url": "^3.0.0", + "@oozcitak/util": "^10.0.0" }, "engines": { - "node": ">=8.0" + "node": ">=20.0" } }, "node_modules/@oozcitak/infra": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", - "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-2.0.2.tgz", + "integrity": "sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==", "dev": true, "license": "MIT", "dependencies": { - "@oozcitak/util": "8.3.8" + "@oozcitak/util": "^10.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=20.0" } }, "node_modules/@oozcitak/url": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", - "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-3.0.0.tgz", + "integrity": "sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==", "dev": true, "license": "MIT", "dependencies": { - "@oozcitak/infra": "1.0.8", - "@oozcitak/util": "8.3.8" + "@oozcitak/infra": "^2.0.2", + "@oozcitak/util": "^10.0.0" }, "engines": { - "node": ">=8.0" + "node": ">=20.0" } }, "node_modules/@oozcitak/util": { - "version": "8.3.8", - "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", - "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-10.0.0.tgz", + "integrity": "sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.0" + "node": ">=20.0" } }, "node_modules/@resvg/resvg-js": { @@ -850,10 +851,26 @@ "dev": true, "license": "MIT" }, + "node_modules/@zen-browser/prettier": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@zen-browser/prettier/-/prettier-3.9.3.tgz", + "integrity": "sha512-+kdkatStC4kxDe7CZC4W3Xt3B7S9UsrpltaWdk9PnXQx0IMIjOJ6P1apWI3CQGyweDagBFu4ljA1wkxcbrJTqw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@zen-browser/surfer": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.13.1.tgz", - "integrity": "sha512-IMi/A+ee/z5tfwblvP/melZEzqczLhA7hU2hzQajW1bS7HLIvJN2vjfl1oT0TElmIHC6amrWNGl8HI3k4pgWog==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.13.4.tgz", + "integrity": "sha512-rpwceHYN3k1kaZP+IhAiZ5ksLgedqGv8uo8kqACFR4dDX/DO5P7XoCQtooOPrEyrxcI7uu/gI/xtuldfOBKUkQ==", "dev": true, "license": "MPL-2.0", "dependencies": { @@ -878,7 +895,7 @@ "semver": "^7.3.7", "sharp": "^0.32.6", "tiny-glob": "^0.2.9", - "xmlbuilder2": "^3.0.2" + "xmlbuilder2": "^4.0.3" }, "bin": { "surfer": "dist/index.js" @@ -929,6 +946,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -981,14 +1005,14 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", + "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, @@ -1722,20 +1746,6 @@ "node": ">=6" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", @@ -1913,9 +1923,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { @@ -2379,6 +2389,19 @@ "dev": true, "license": "MIT" }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -3631,13 +3654,6 @@ "dev": true, "license": "MIT" }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/stack-base-iterator": { "version": "1.1.20", "resolved": "https://registry.npmjs.org/stack-base-iterator/-/stack-base-iterator-1.1.20.tgz", @@ -4124,43 +4140,19 @@ "license": "ISC" }, "node_modules/xmlbuilder2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", - "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-4.0.3.tgz", + "integrity": "sha512-bx8Q1STctnNaaDymWnkfQLKofs0mGNN7rLLapJlGuV3VlvegD7Ls4ggMjE3aUSWItCCzU0PEv45lI87iSigiCA==", "dev": true, "license": "MIT", "dependencies": { - "@oozcitak/dom": "1.15.10", - "@oozcitak/infra": "1.0.8", - "@oozcitak/util": "8.3.8", - "js-yaml": "3.14.1" + "@oozcitak/dom": "^2.0.2", + "@oozcitak/infra": "^2.0.2", + "@oozcitak/util": "^10.0.0", + "js-yaml": "^4.1.1" }, "engines": { - "node": ">=12.0" - } - }, - "node_modules/xmlbuilder2/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/xmlbuilder2/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "node": ">=20.0" } }, "node_modules/xtend": { diff --git a/package.json b/package.json index a34cc5117..a9d156ad1 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "sync:raw": "surfer update", "sync:rc": "python3 scripts/update_ff.py --rc", "sync:l10n": "python3 scripts/update_ff.py --just-l10n", - "lint": "cd engine && ./mach lint zen/", + "lint": "cd engine && ./mach lint zen", "lint:fix": "npm run lint -- --fix", "prepare": "husky", "reset-ff": "surfer reset", @@ -50,11 +50,14 @@ "homepage": "https://github.com/zen-browser/desktop#readme", "devDependencies": { "@babel/preset-typescript": "^7.27.0", - "@zen-browser/surfer": "^1.13.1", + "@zen-browser/prettier": "^3.9.3", + "@zen-browser/surfer": "^1.13.4", "formal-git": "^1.2.9", "globals": "^16.3.0", "husky": "^9.1.7", "lint-staged": "^15.3.0", "typescript": "^5.9.3" - } + }, + "notes(private)": "We don't want to publish to npm, so this is marked as private", + "private": true } diff --git a/src/-prettierignore.patch b/src/-prettierignore.patch new file mode 100644 index 000000000..edcc3a185 --- /dev/null +++ b/src/-prettierignore.patch @@ -0,0 +1,17 @@ +diff --git a/.prettierignore b/.prettierignore +index cbca8bb4b36cecc44e6b498e9ef15bc4bdc21871..8f3a14e14a2d58875bdd6f04bd31f57e23073148 100644 +--- a/.prettierignore ++++ b/.prettierignore +@@ -1795,3 +1795,12 @@ tools/ts/test/baselines/ + try_task_config.json + xpcom/idl-parser/xpidl/fixtures/xpctest.d.json + **/package-lock.json ++ ++ ++*.bundle.min.js ++*.min.js ++*.min.mjs ++*.inc ++*/mochitests/* ++*.svg ++ diff --git a/src/-stylelintignore.patch b/src/-stylelintignore.patch index 154a04f45..3e44aac53 100644 --- a/src/-stylelintignore.patch +++ b/src/-stylelintignore.patch @@ -1,19 +1,13 @@ diff --git a/.stylelintignore b/.stylelintignore -index 185490999507b8a5032977237af50f5e61c71df1..36f760f473b857e851134ceb62c837cb8d29c966 100644 +index 185490999507b8a5032977237af50f5e61c71df1..e887fafa90b881e852a287ed8898638c995861ab 100644 --- a/.stylelintignore +++ b/.stylelintignore -@@ -106,3 +106,26 @@ build/pgo/blueprint/**/*.css +@@ -106,3 +106,19 @@ build/pgo/blueprint/**/*.css # under our control or we don't want to modify at this point: testing/web-platform/mozilla/ testing/web-platform/tests/ + -+**/*.bundle.min.js -+**/*.min.js -+**/*.min.mjs -+ -+**/*.svg -+ -+**/*.inc.css ++*.inc.css + +zen/tests/mochitests/* + @@ -22,7 +16,6 @@ index 185490999507b8a5032977237af50f5e61c71df1..36f760f473b857e851134ceb62c837cb +zen/tabs/zen-tabs.css +zen/common/styles/zen-theme.css +zen/compact-mode/zen-compact-mode.css -+zen/common/ZenEmojis.mjs + +zen/split-view/zen-decks.css +zen/workspaces/zen-workspaces.css diff --git a/src/eslint-ignores-config-mjs.patch b/src/eslint-ignores-config-mjs.patch index 42d5a8aa2..cd4d8a22c 100644 --- a/src/eslint-ignores-config-mjs.patch +++ b/src/eslint-ignores-config-mjs.patch @@ -1,12 +1,13 @@ diff --git a/eslint-ignores.config.mjs b/eslint-ignores.config.mjs -index 0cfd7e02ad58c331f48f1ba8e1588777e1ce2595..d85b95b18a7195b6794083af71cbe1947d9f2f9c 100644 +index 0cfd7e02ad58c331f48f1ba8e1588777e1ce2595..888674b5ed2b68dbe77eb177ba0947f94ed57c80 100644 --- a/eslint-ignores.config.mjs +++ b/eslint-ignores.config.mjs -@@ -312,4 +312,7 @@ export default [ +@@ -312,4 +312,8 @@ export default [ // Test files for circular import in modules. "dom/base/test/jsmodules/import_circular.mjs", "dom/base/test/jsmodules/import_circular_1.mjs", + -+ "**/*.min.mjs", ++ "zen/common/emojis/ZenEmojisData.min.mjs", + "zen/tests/**", ++ "zen/vendor/**", ]; diff --git a/src/tools/lint/eslint/__init__-py.patch b/src/tools/lint/eslint/__init__-py.patch new file mode 100644 index 000000000..880dae2c6 --- /dev/null +++ b/src/tools/lint/eslint/__init__-py.patch @@ -0,0 +1,13 @@ +diff --git a/tools/lint/eslint/__init__.py b/tools/lint/eslint/__init__.py +index cd45822500a8b5e1112efad81ed34e01c0dbcc19..9f47b4a46bf1c36db06b45e047a939ae08bcb703 100644 +--- a/tools/lint/eslint/__init__.py ++++ b/tools/lint/eslint/__init__.py +@@ -114,7 +114,7 @@ def lint(paths, config, binary=None, fix=None, rules=[], setup=None, **lintargs) + [ + binary, + os.path.join( +- module_path, "node_modules", "prettier", "bin", "prettier.cjs" ++ module_path, "..", "node_modules", "@zen-browser", "prettier", "bin", "prettier.cjs" + ), + "--list-different", + "--no-error-on-unmatched-pattern", diff --git a/src/zen/@types/lib.gecko.darwin.d.ts b/src/zen/@types/lib.gecko.darwin.d.ts index 209fd23ae..e83a0f0d2 100644 --- a/src/zen/@types/lib.gecko.darwin.d.ts +++ b/src/zen/@types/lib.gecko.darwin.d.ts @@ -53,9 +53,15 @@ declare global { dockMenu: nsIStandaloneNativeMenu; activateApplication(aIgnoreOtherApplications: boolean): void; badgeText: string; - setBadgeImage(aBadgeImage: imgIContainer, aPaintContext?: nsISVGPaintContext): void; + setBadgeImage( + aBadgeImage: imgIContainer, + aPaintContext?: nsISVGPaintContext + ): void; readonly isAppInDock: boolean; - ensureAppIsPinnedToDock(aAppPath?: string, aAppToReplacePath?: string): boolean; + ensureAppIsPinnedToDock( + aAppPath?: string, + aAppToReplacePath?: string + ): boolean; launchAppBundle( aAppBundle: nsIFile, aArgs: string[], @@ -70,7 +76,10 @@ declare global { }>; interface nsIMacFinderProgress extends nsISupports { - init(path: string, canceledCallback: nsIMacFinderProgressCanceledCallback): void; + init( + path: string, + canceledCallback: nsIMacFinderProgressCanceledCallback + ): void; updateProgress(currentProgress: u64, totalProgress: u64): void; end(): void; } @@ -86,7 +95,11 @@ declare global { // https://searchfox.org/mozilla-central/source/widget/nsIMacUserActivityUpdater.idl interface nsIMacUserActivityUpdater extends nsISupports { - updateLocation(pageUrl: string, pageTitle: string, window: nsIBaseWindow): void; + updateLocation( + pageUrl: string, + pageTitle: string, + window: nsIBaseWindow + ): void; } // https://searchfox.org/mozilla-central/source/widget/nsIMacWebAppUtils.idl @@ -120,7 +133,11 @@ declare global { readonly STATE_ERROR?: 3; readonly STATE_PAUSED?: 4; - setProgressState(state: nsTaskbarProgressState, currentValue?: u64, maxValue?: u64): void; + setProgressState( + state: nsTaskbarProgressState, + currentValue?: u64, + maxValue?: u64 + ): void; } // https://searchfox.org/mozilla-central/source/widget/nsITouchBarHelper.idl @@ -157,11 +174,18 @@ declare global { // https://searchfox.org/mozilla-central/source/widget/nsITouchBarUpdater.idl interface nsITouchBarUpdater extends nsISupports { - updateTouchBarInputs(aWindow: nsIBaseWindow, aInputs: nsITouchBarInput[]): void; + updateTouchBarInputs( + aWindow: nsIBaseWindow, + aInputs: nsITouchBarInput[] + ): void; enterCustomizeMode(): void; isTouchBarInitialized(): boolean; setTouchBarInitialized(aIsInitialized: boolean): void; - showPopover(aWindow: nsIBaseWindow, aPopover: nsITouchBarInput, aShowing: boolean): void; + showPopover( + aWindow: nsIBaseWindow, + aPopover: nsITouchBarInput, + aShowing: boolean + ): void; } // https://searchfox.org/mozilla-central/source/xpcom/base/nsIMacPreferencesReader.idl diff --git a/src/zen/@types/lib.gecko.dom.d.ts b/src/zen/@types/lib.gecko.dom.d.ts index b35a25143..49cad66a9 100644 --- a/src/zen/@types/lib.gecko.dom.d.ts +++ b/src/zen/@types/lib.gecko.dom.d.ts @@ -1603,7 +1603,8 @@ interface InferenceSessionSessionOptions { logSeverityLevel?: number; logVerbosityLevel?: number; optimizedModelFilePath?: string; - preferredOutputLocation?: TensorDataLocation | Record; + preferredOutputLocation?: + TensorDataLocation | Record; profileFilePrefix?: string; } @@ -4577,7 +4578,8 @@ interface sendAbuseReportOptions { authorization?: string | null; } -type EventListener = ((event: Event) => void) | { handleEvent(event: Event): void }; +type EventListener = + ((event: Event) => void) | { handleEvent(event: Event): void }; type MessageListener = | ((argument: ReceiveMessageArgument) => any) @@ -4612,7 +4614,8 @@ type ObserverCallback = | ((observer: FetchObserver) => void) | { handleEvent(observer: FetchObserver): void }; -type UncaughtRejectionObserver = ((p: any) => boolean) | { onLeftUncaught(p: any): boolean }; +type UncaughtRejectionObserver = + ((p: any) => boolean) | { onLeftUncaught(p: any): boolean }; type UniFFICallbackHandler = | (( @@ -4633,7 +4636,12 @@ type XPathNSResolver = | { lookupNamespaceURI(prefix: string | null): string | null }; interface ANGLE_instanced_arrays { - drawArraysInstancedANGLE(mode: GLenum, first: GLint, count: GLsizei, primcount: GLsizei): void; + drawArraysInstancedANGLE( + mode: GLenum, + first: GLint, + count: GLsizei, + primcount: GLsizei + ): void; drawElementsInstancedANGLE( mode: GLenum, count: GLsizei, @@ -4930,7 +4938,10 @@ declare var AnalyserNode: { }; interface Animatable { - animate(keyframes: any, options?: UnrestrictedDoubleOrKeyframeAnimationOptions): Animation; + animate( + keyframes: any, + options?: UnrestrictedDoubleOrKeyframeAnimationOptions + ): Animation; getAnimations(options?: GetAnimationsOptions): Animation[]; } @@ -4989,7 +5000,10 @@ interface Animation extends EventTarget { declare var Animation: { prototype: Animation; - new (effect?: AnimationEffect | null, timeline?: AnimationTimeline | null): Animation; + new ( + effect?: AnimationEffect | null, + timeline?: AnimationTimeline | null + ): Animation; isInstance: IsInstance; }; @@ -5029,7 +5043,10 @@ interface AnimationPlaybackEvent extends Event { declare var AnimationPlaybackEvent: { prototype: AnimationPlaybackEvent; - new (type: string, eventInitDict?: AnimationPlaybackEventInit): AnimationPlaybackEvent; + new ( + type: string, + eventInitDict?: AnimationPlaybackEventInit + ): AnimationPlaybackEvent; isInstance: IsInstance; }; @@ -5074,8 +5091,16 @@ interface AudioBuffer { readonly length: number; readonly numberOfChannels: number; readonly sampleRate: number; - copyFromChannel(destination: Float32Array, channelNumber: number, startInChannel?: number): void; - copyToChannel(source: Float32Array, channelNumber: number, startInChannel?: number): void; + copyFromChannel( + destination: Float32Array, + channelNumber: number, + startInChannel?: number + ): void; + copyToChannel( + source: Float32Array, + channelNumber: number, + startInChannel?: number + ): void; getChannelData(channel: number): Float32Array; } @@ -5085,7 +5110,8 @@ declare var AudioBuffer: { isInstance: IsInstance; }; -interface AudioBufferSourceNode extends AudioScheduledSourceNode, AudioNodePassThrough { +interface AudioBufferSourceNode + extends AudioScheduledSourceNode, AudioNodePassThrough { buffer: AudioBuffer | null; readonly detune: AudioParam; loop: boolean; @@ -5095,7 +5121,10 @@ interface AudioBufferSourceNode extends AudioScheduledSourceNode, AudioNodePassT start(when?: number, grainOffset?: number, grainDuration?: number): void; addEventListener( type: K, - listener: (this: AudioBufferSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, + listener: ( + this: AudioBufferSourceNode, + ev: AudioScheduledSourceNodeEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -5105,7 +5134,10 @@ interface AudioBufferSourceNode extends AudioScheduledSourceNode, AudioNodePassT ): void; removeEventListener( type: K, - listener: (this: AudioBufferSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, + listener: ( + this: AudioBufferSourceNode, + ev: AudioScheduledSourceNodeEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -5117,7 +5149,10 @@ interface AudioBufferSourceNode extends AudioScheduledSourceNode, AudioNodePassT declare var AudioBufferSourceNode: { prototype: AudioBufferSourceNode; - new (context: BaseAudioContext, options?: AudioBufferSourceOptions): AudioBufferSourceNode; + new ( + context: BaseAudioContext, + options?: AudioBufferSourceOptions + ): AudioBufferSourceNode; isInstance: IsInstance; }; @@ -5125,10 +5160,14 @@ interface AudioContext extends BaseAudioContext { readonly baseLatency: number; readonly outputLatency: number; close(): Promise; - createMediaElementSource(mediaElement: HTMLMediaElement): MediaElementAudioSourceNode; + createMediaElementSource( + mediaElement: HTMLMediaElement + ): MediaElementAudioSourceNode; createMediaStreamDestination(): MediaStreamAudioDestinationNode; createMediaStreamSource(mediaStream: MediaStream): MediaStreamAudioSourceNode; - createMediaStreamTrackSource(mediaStreamTrack: MediaStreamTrack): MediaStreamTrackAudioSourceNode; + createMediaStreamTrackSource( + mediaStreamTrack: MediaStreamTrack + ): MediaStreamTrackAudioSourceNode; getOutputTimestamp(): AudioTimestamp; suspend(): Promise; addEventListener( @@ -5169,7 +5208,10 @@ interface AudioData { allocationSize(options: AudioDataCopyToOptions): number; clone(): AudioData; close(): void; - copyTo(destination: AllowSharedBufferSource, options: AudioDataCopyToOptions): void; + copyTo( + destination: AllowSharedBufferSource, + options: AudioDataCopyToOptions + ): void; } declare var AudioData: { @@ -5275,7 +5317,14 @@ declare var AudioEncoder: { }; interface AudioListener { - setOrientation(x: number, y: number, z: number, xUp: number, yUp: number, zUp: number): void; + setOrientation( + x: number, + y: number, + z: number, + xUp: number, + yUp: number, + zUp: number + ): void; setPosition(x: number, y: number, z: number): void; } @@ -5325,7 +5374,11 @@ interface AudioParam { cancelScheduledValues(startTime: number): AudioParam; exponentialRampToValueAtTime(value: number, endTime: number): AudioParam; linearRampToValueAtTime(value: number, endTime: number): AudioParam; - setTargetAtTime(target: number, startTime: number, timeConstant: number): AudioParam; + setTargetAtTime( + target: number, + startTime: number, + timeConstant: number + ): AudioParam; setValueAtTime(value: number, startTime: number): AudioParam; setValueCurveAtTime( values: number[] | Float32Array, @@ -5376,7 +5429,10 @@ interface AudioScheduledSourceNode extends AudioNode { stop(when?: number): void; addEventListener( type: K, - listener: (this: AudioScheduledSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, + listener: ( + this: AudioScheduledSourceNode, + ev: AudioScheduledSourceNodeEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -5386,7 +5442,10 @@ interface AudioScheduledSourceNode extends AudioNode { ): void; removeEventListener( type: K, - listener: (this: AudioScheduledSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, + listener: ( + this: AudioScheduledSourceNode, + ev: AudioScheduledSourceNodeEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -5573,7 +5632,11 @@ interface BaseAudioContext extends EventTarget { readonly state: AudioContextState; createAnalyser(): AnalyserNode; createBiquadFilter(): BiquadFilterNode; - createBuffer(numberOfChannels: number, length: number, sampleRate: number): AudioBuffer; + createBuffer( + numberOfChannels: number, + length: number, + sampleRate: number + ): AudioBuffer; createBufferSource(): AudioBufferSourceNode; createChannelMerger(numberOfInputs?: number): ChannelMergerNode; createChannelSplitter(numberOfOutputs?: number): ChannelSplitterNode; @@ -5701,7 +5764,10 @@ interface BiquadFilterNode extends AudioNode, AudioNodePassThrough { declare var BiquadFilterNode: { prototype: BiquadFilterNode; - new (context: BaseAudioContext, options?: BiquadFilterOptions): BiquadFilterNode; + new ( + context: BaseAudioContext, + options?: BiquadFilterOptions + ): BiquadFilterNode; isInstance: IsInstance; }; @@ -5940,7 +6006,11 @@ interface CSSColor extends CSSColorValue { declare var CSSColor: { prototype: CSSColor; - new (colorSpace: CSSKeywordish, channels: CSSColorPercent[], alpha?: CSSNumberish): CSSColor; + new ( + colorSpace: CSSKeywordish, + channels: CSSColorPercent[], + alpha?: CSSNumberish + ): CSSColor; isInstance: IsInstance; }; @@ -6074,7 +6144,12 @@ interface CSSHSL extends CSSColorValue { declare var CSSHSL: { prototype: CSSHSL; - new (h: CSSColorAngle, s: CSSColorPercent, l: CSSColorPercent, alpha?: CSSColorPercent): CSSHSL; + new ( + h: CSSColorAngle, + s: CSSColorPercent, + l: CSSColorPercent, + alpha?: CSSColorPercent + ): CSSHSL; isInstance: IsInstance; }; @@ -6087,7 +6162,12 @@ interface CSSHWB extends CSSColorValue { declare var CSSHWB: { prototype: CSSHWB; - new (h: CSSNumericValue, w: CSSNumberish, b: CSSNumberish, alpha?: CSSNumberish): CSSHWB; + new ( + h: CSSNumericValue, + w: CSSNumberish, + b: CSSNumberish, + alpha?: CSSNumberish + ): CSSHWB; isInstance: IsInstance; }; @@ -6159,7 +6239,12 @@ interface CSSLCH extends CSSColorValue { declare var CSSLCH: { prototype: CSSLCH; - new (l: CSSColorPercent, c: CSSColorPercent, h: CSSColorAngle, alpha?: CSSColorPercent): CSSLCH; + new ( + l: CSSColorPercent, + c: CSSColorPercent, + h: CSSColorAngle, + alpha?: CSSColorPercent + ): CSSLCH; isInstance: IsInstance; }; @@ -6172,7 +6257,12 @@ interface CSSLab extends CSSColorValue { declare var CSSLab: { prototype: CSSLab; - new (l: CSSColorPercent, a: CSSColorNumber, b: CSSColorNumber, alpha?: CSSColorPercent): CSSLab; + new ( + l: CSSColorPercent, + a: CSSColorNumber, + b: CSSColorNumber, + alpha?: CSSColorPercent + ): CSSLab; isInstance: IsInstance; }; @@ -6215,7 +6305,11 @@ interface CSSMathClamp extends CSSMathValue { declare var CSSMathClamp: { prototype: CSSMathClamp; - new (lower: CSSNumberish, value: CSSNumberish, upper: CSSNumberish): CSSMathClamp; + new ( + lower: CSSNumberish, + value: CSSNumberish, + upper: CSSNumberish + ): CSSMathClamp; isInstance: IsInstance; }; @@ -6295,7 +6389,10 @@ interface CSSMatrixComponent extends CSSTransformComponent { declare var CSSMatrixComponent: { prototype: CSSMatrixComponent; - new (matrix: DOMMatrixReadOnly, options?: CSSMatrixComponentOptions): CSSMatrixComponent; + new ( + matrix: DOMMatrixReadOnly, + options?: CSSMatrixComponentOptions + ): CSSMatrixComponent; isInstance: IsInstance; }; @@ -6341,7 +6438,11 @@ declare var CSSNestedDeclarations: { interface CSSNumericArray { readonly length: number; forEach( - callbackfn: (value: CSSNumericValue, key: number, parent: CSSNumericArray) => void, + callbackfn: ( + value: CSSNumericValue, + key: number, + parent: CSSNumericArray + ) => void, thisArg?: any ): void; [index: number]: CSSNumericValue; @@ -6382,7 +6483,12 @@ interface CSSOKLCH extends CSSColorValue { declare var CSSOKLCH: { prototype: CSSOKLCH; - new (l: CSSColorPercent, c: CSSColorPercent, h: CSSColorAngle, alpha?: CSSColorPercent): CSSOKLCH; + new ( + l: CSSColorPercent, + c: CSSColorPercent, + h: CSSColorAngle, + alpha?: CSSColorPercent + ): CSSOKLCH; isInstance: IsInstance; }; @@ -6395,7 +6501,12 @@ interface CSSOKLab extends CSSColorValue { declare var CSSOKLab: { prototype: CSSOKLab; - new (l: CSSColorPercent, a: CSSColorNumber, b: CSSColorNumber, alpha?: CSSColorPercent): CSSOKLab; + new ( + l: CSSColorPercent, + a: CSSColorNumber, + b: CSSColorNumber, + alpha?: CSSColorPercent + ): CSSOKLab; isInstance: IsInstance; }; @@ -6516,7 +6627,12 @@ interface CSSRGB extends CSSColorValue { declare var CSSRGB: { prototype: CSSRGB; - new (r: CSSColorRGBComp, g: CSSColorRGBComp, b: CSSColorRGBComp, alpha?: CSSColorPercent): CSSRGB; + new ( + r: CSSColorRGBComp, + g: CSSColorRGBComp, + b: CSSColorRGBComp, + alpha?: CSSColorPercent + ): CSSRGB; isInstance: IsInstance; }; @@ -6530,7 +6646,12 @@ interface CSSRotate extends CSSTransformComponent { declare var CSSRotate: { prototype: CSSRotate; new (angle: CSSNumericValue): CSSRotate; - new (x: CSSNumberish, y: CSSNumberish, z: CSSNumberish, angle: CSSNumericValue): CSSRotate; + new ( + x: CSSNumberish, + y: CSSNumberish, + z: CSSNumberish, + angle: CSSNumericValue + ): CSSRotate; isInstance: IsInstance; }; @@ -7267,7 +7388,11 @@ interface CSSTransformValue extends CSSStyleValue { readonly length: number; toMatrix(): DOMMatrix; forEach( - callbackfn: (value: CSSTransformComponent, key: number, parent: CSSTransformValue) => void, + callbackfn: ( + value: CSSTransformComponent, + key: number, + parent: CSSTransformValue + ) => void, thisArg?: any ): void; [index: number]: CSSTransformComponent; @@ -7317,7 +7442,11 @@ interface CSSTranslate extends CSSTransformComponent { declare var CSSTranslate: { prototype: CSSTranslate; - new (x: CSSNumericValue, y: CSSNumericValue, z?: CSSNumericValue): CSSTranslate; + new ( + x: CSSNumericValue, + y: CSSNumericValue, + z?: CSSNumericValue + ): CSSTranslate; isInstance: IsInstance; }; @@ -7335,7 +7464,11 @@ declare var CSSUnitValue: { interface CSSUnparsedValue extends CSSStyleValue { readonly length: number; forEach( - callbackfn: (value: CSSUnparsedSegment, key: number, parent: CSSUnparsedValue) => void, + callbackfn: ( + value: CSSUnparsedSegment, + key: number, + parent: CSSUnparsedValue + ) => void, thisArg?: any ): void; [index: number]: CSSUnparsedSegment; @@ -7354,17 +7487,32 @@ interface CSSVariableReferenceValue { declare var CSSVariableReferenceValue: { prototype: CSSVariableReferenceValue; - new (variable: string, fallback?: CSSUnparsedValue | null): CSSVariableReferenceValue; + new ( + variable: string, + fallback?: CSSUnparsedValue | null + ): CSSVariableReferenceValue; isInstance: IsInstance; }; interface Cache { add(request: RequestInfo | URL): Promise; addAll(requests: RequestInfo[]): Promise; - delete(request: RequestInfo | URL, options?: CacheQueryOptions): Promise; - keys(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise; - match(request: RequestInfo | URL, options?: CacheQueryOptions): Promise; - matchAll(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise; + delete( + request: RequestInfo | URL, + options?: CacheQueryOptions + ): Promise; + keys( + request?: RequestInfo | URL, + options?: CacheQueryOptions + ): Promise; + match( + request: RequestInfo | URL, + options?: CacheQueryOptions + ): Promise; + matchAll( + request?: RequestInfo | URL, + options?: CacheQueryOptions + ): Promise; put(request: RequestInfo | URL, response: Response): Promise; } @@ -7378,7 +7526,10 @@ interface CacheStorage { delete(cacheName: string): Promise; has(cacheName: string): Promise; keys(): Promise; - match(request: RequestInfo | URL, options?: MultiCacheQueryOptions): Promise; + match( + request: RequestInfo | URL, + options?: MultiCacheQueryOptions + ): Promise; open(cacheName: string): Promise; } @@ -7431,7 +7582,11 @@ interface CanonicalBrowsingContext extends BrowsingContext { aRequireUserInteraction?: boolean, aUserActivation?: boolean ): void; - goToIndex(aIndex: number, aCancelContentJSEpoch?: number, aUserActivation?: boolean): void; + goToIndex( + aIndex: number, + aCancelContentJSEpoch?: number, + aUserActivation?: boolean + ): void; loadURI(aURI: URI, aOptions?: LoadURIOptions): void; notifyMediaMutedChanged(muted: boolean): void; notifyStartDelayedAutoplayMedia(): void; @@ -7460,7 +7615,10 @@ interface CanvasCaptureMediaStream extends MediaStream { requestFrame(): void; addEventListener( type: K, - listener: (this: CanvasCaptureMediaStream, ev: MediaStreamEventMap[K]) => any, + listener: ( + this: CanvasCaptureMediaStream, + ev: MediaStreamEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -7470,7 +7628,10 @@ interface CanvasCaptureMediaStream extends MediaStream { ): void; removeEventListener( type: K, - listener: (this: CanvasCaptureMediaStream, ev: MediaStreamEventMap[K]) => any, + listener: ( + this: CanvasCaptureMediaStream, + ev: MediaStreamEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -7494,7 +7655,13 @@ interface CanvasCompositing { interface CanvasDrawImage { contextProperties: CanvasContextProperties; drawImage(image: CanvasImageSource, dx: number, dy: number): void; - drawImage(image: CanvasImageSource, dx: number, dy: number, dw: number, dh: number): void; + drawImage( + image: CanvasImageSource, + dx: number, + dy: number, + dw: number, + dh: number + ): void; drawImage( image: CanvasImageSource, sx: number, @@ -7515,7 +7682,12 @@ interface CanvasDrawPath { fill(winding?: CanvasWindingRule): void; fill(path: Path2D, winding?: CanvasWindingRule): void; isPointInPath(x: number, y: number, winding?: CanvasWindingRule): boolean; - isPointInPath(path: Path2D, x: number, y: number, winding?: CanvasWindingRule): boolean; + isPointInPath( + path: Path2D, + x: number, + y: number, + winding?: CanvasWindingRule + ): boolean; isPointInStroke(x: number, y: number): boolean; isPointInStroke(path: Path2D, x: number, y: number): boolean; stroke(): void; @@ -7526,8 +7698,16 @@ interface CanvasFillStrokeStyles { fillStyle: string | CanvasGradient | CanvasPattern; strokeStyle: string | CanvasGradient | CanvasPattern; createConicGradient(angle: number, cx: number, cy: number): CanvasGradient; - createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient; - createPattern(image: CanvasImageSource, repetition: string | null): CanvasPattern | null; + createLinearGradient( + x0: number, + y0: number, + x1: number, + y1: number + ): CanvasGradient; + createPattern( + image: CanvasImageSource, + repetition: string | null + ): CanvasPattern | null; createRadialGradient( x0: number, y0: number, @@ -7592,7 +7772,14 @@ interface CanvasPathMethods { anticlockwise?: boolean ): void; arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void; - bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void; + bezierCurveTo( + cp1x: number, + cp1y: number, + cp2x: number, + cp2y: number, + x: number, + y: number + ): void; closePath(): void; ellipse( x: number, @@ -7634,7 +7821,8 @@ interface CanvasRect { } interface CanvasRenderingContext2D - extends CanvasCompositing, + extends + CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, @@ -7719,9 +7907,23 @@ interface CanvasTransform { resetTransform(): void; rotate(angle: number): void; scale(x: number, y: number): void; - setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void; + setTransform( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number + ): void; setTransform(transform?: DOMMatrix2DInit): void; - transform(a: number, b: number, c: number, d: number, e: number, f: number): void; + transform( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number + ): void; translate(x: number, y: number): void; } @@ -7756,7 +7958,10 @@ interface CaretStateChangedEvent extends Event { declare var CaretStateChangedEvent: { prototype: CaretStateChangedEvent; - new (type: string, eventInit?: CaretStateChangedEventInit): CaretStateChangedEvent; + new ( + type: string, + eventInit?: CaretStateChangedEventInit + ): CaretStateChangedEvent; isInstance: IsInstance; }; @@ -7764,7 +7969,10 @@ interface ChannelMergerNode extends AudioNode {} declare var ChannelMergerNode: { prototype: ChannelMergerNode; - new (context: BaseAudioContext, options?: ChannelMergerOptions): ChannelMergerNode; + new ( + context: BaseAudioContext, + options?: ChannelMergerOptions + ): ChannelMergerNode; isInstance: IsInstance; }; @@ -7772,7 +7980,10 @@ interface ChannelSplitterNode extends AudioNode {} declare var ChannelSplitterNode: { prototype: ChannelSplitterNode; - new (context: BaseAudioContext, options?: ChannelSplitterOptions): ChannelSplitterNode; + new ( + context: BaseAudioContext, + options?: ChannelSplitterOptions + ): ChannelSplitterNode; isInstance: IsInstance; }; @@ -7825,7 +8036,10 @@ interface ChannelWrapper extends EventTarget { options?: MozRequestMatchOptions ): boolean; redirectTo(url: URI): void; - registerTraceableChannel(extension: WebExtensionPolicy, remoteTab: RemoteTab | null): void; + registerTraceableChannel( + extension: WebExtensionPolicy, + remoteTab: RemoteTab | null + ): void; resume(): void; setRequestHeader(header: string, value: string, merge?: boolean): void; setResponseHeader(header: string, value: string, merge?: boolean): void; @@ -7914,7 +8128,11 @@ interface ChildSHistory { readonly index: number; readonly legacySHistory: nsISHistory; canGo(aOffset: number, aRequireUserInteraction?: boolean): boolean; - go(aOffset: number, aRequireUserInteraction?: boolean, aUserActivation?: boolean): void; + go( + aOffset: number, + aRequireUserInteraction?: boolean, + aUserActivation?: boolean + ): void; reload(aReloadFlags: number): void; } @@ -7924,7 +8142,8 @@ declare var ChildSHistory: { isInstance: IsInstance; }; -interface ChromeMessageBroadcaster extends MessageBroadcaster, FrameScriptLoader {} +interface ChromeMessageBroadcaster + extends MessageBroadcaster, FrameScriptLoader {} declare var ChromeMessageBroadcaster: { prototype: ChromeMessageBroadcaster; @@ -8014,7 +8233,10 @@ interface ClipboardItem { declare var ClipboardItem: { prototype: ClipboardItem; new ( - items: Record>, + items: Record< + string, + ClipboardItemDataType | PromiseLike + >, options?: ClipboardItemOptions ): ClipboardItem; isInstance: IsInstance; @@ -8170,7 +8392,10 @@ interface ConstantSourceNode extends AudioScheduledSourceNode { readonly offset: AudioParam; addEventListener( type: K, - listener: (this: ConstantSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, + listener: ( + this: ConstantSourceNode, + ev: AudioScheduledSourceNodeEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -8180,7 +8405,10 @@ interface ConstantSourceNode extends AudioScheduledSourceNode { ): void; removeEventListener( type: K, - listener: (this: ConstantSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, + listener: ( + this: ConstantSourceNode, + ev: AudioScheduledSourceNodeEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -8192,12 +8420,16 @@ interface ConstantSourceNode extends AudioScheduledSourceNode { declare var ConstantSourceNode: { prototype: ConstantSourceNode; - new (context: BaseAudioContext, options?: ConstantSourceOptions): ConstantSourceNode; + new ( + context: BaseAudioContext, + options?: ConstantSourceOptions + ): ConstantSourceNode; isInstance: IsInstance; }; interface ContentFrameMessageManager - extends EventTarget, + extends + EventTarget, MessageListenerManagerMixin, MessageManagerGlobal, MessageSenderMixin, @@ -8214,7 +8446,8 @@ declare var ContentFrameMessageManager: { }; interface ContentProcessMessageManager - extends MessageListenerManagerMixin, + extends + MessageListenerManagerMixin, MessageManagerGlobal, MessageSenderMixin, SyncMessageSenderMixin { @@ -8406,7 +8639,10 @@ interface CustomElementRegistry { ): void; get(name: string): CustomElementConstructor | undefined; getName(constructor: CustomElementConstructor): string | null; - setElementCreationCallback(name: string, callback: CustomElementCreationCallback): void; + setElementCreationCallback( + name: string, + callback: CustomElementCreationCallback + ): void; upgrade(root: Node): void; whenDefined(name: string): Promise; } @@ -8419,7 +8655,12 @@ declare var CustomElementRegistry: { interface CustomEvent extends Event { readonly detail: any; - initCustomEvent(type: string, canBubble?: boolean, cancelable?: boolean, detail?: any): void; + initCustomEvent( + type: string, + canBubble?: boolean, + cancelable?: boolean, + detail?: any + ): void; } declare var CustomEvent: { @@ -8511,7 +8752,11 @@ interface DOMImplementation { qualifiedName: string | null, doctype?: DocumentType | null ): Document; - createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType; + createDocumentType( + qualifiedName: string, + publicId: string, + systemId: string + ): DocumentType; createHTMLDocument(title?: string): Document; hasFeature(): boolean; } @@ -8572,10 +8817,20 @@ interface DOMMatrix extends DOMMatrixReadOnly { invertSelf(): DOMMatrix; multiplySelf(other?: DOMMatrixInit): DOMMatrix; preMultiplySelf(other?: DOMMatrixInit): DOMMatrix; - rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix; + rotateAxisAngleSelf( + x?: number, + y?: number, + z?: number, + angle?: number + ): DOMMatrix; rotateFromVectorSelf(x?: number, y?: number): DOMMatrix; rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix; - scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; + scale3dSelf( + scale?: number, + originX?: number, + originY?: number, + originZ?: number + ): DOMMatrix; scaleSelf( scaleX?: number, scaleY?: number, @@ -8632,7 +8887,12 @@ interface DOMMatrixReadOnly { inverse(): DOMMatrix; multiply(other?: DOMMatrixInit): DOMMatrix; rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix; - rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix; + rotateAxisAngle( + x?: number, + y?: number, + z?: number, + angle?: number + ): DOMMatrix; rotateFromVector(x?: number, y?: number): DOMMatrix; scale( scaleX?: number, @@ -8642,7 +8902,12 @@ interface DOMMatrixReadOnly { originY?: number, originZ?: number ): DOMMatrix; - scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix; + scale3d( + scale?: number, + originX?: number, + originY?: number, + originZ?: number + ): DOMMatrix; scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix; skewX(sx?: number): DOMMatrix; skewY(sy?: number): DOMMatrix; @@ -8725,7 +8990,12 @@ interface DOMQuad { declare var DOMQuad: { prototype: DOMQuad; - new (p1?: DOMPointInit, p2?: DOMPointInit, p3?: DOMPointInit, p4?: DOMPointInit): DOMQuad; + new ( + p1?: DOMPointInit, + p2?: DOMPointInit, + p3?: DOMPointInit, + p4?: DOMPointInit + ): DOMQuad; new (rect: DOMRectReadOnly): DOMQuad; isInstance: IsInstance; fromQuad(other?: DOMQuadInit): DOMQuad; @@ -8772,7 +9042,12 @@ interface DOMRectReadOnly { declare var DOMRectReadOnly: { prototype: DOMRectReadOnly; - new (x?: number, y?: number, width?: number, height?: number): DOMRectReadOnly; + new ( + x?: number, + y?: number, + width?: number, + height?: number + ): DOMRectReadOnly; isInstance: IsInstance; fromRect(other?: DOMRectInit): DOMRectReadOnly; }; @@ -8810,7 +9085,11 @@ interface DOMTokenList { supports(token: string): boolean; toggle(token: string, force?: boolean): boolean; forEach( - callbackfn: (value: string | null, key: number, parent: DOMTokenList) => void, + callbackfn: ( + value: string | null, + key: number, + parent: DOMTokenList + ) => void, thisArg?: any ): void; [index: number]: string; @@ -8998,7 +9277,10 @@ interface DeviceOrientationEvent extends Event { declare var DeviceOrientationEvent: { prototype: DeviceOrientationEvent; - new (type: string, eventInitDict?: DeviceOrientationEventInit): DeviceOrientationEvent; + new ( + type: string, + eventInitDict?: DeviceOrientationEventInit + ): DeviceOrientationEvent; isInstance: IsInstance; }; @@ -9022,7 +9304,8 @@ declare var Directory: { }; interface DocumentEventMap - extends GlobalEventHandlersEventMap, + extends + GlobalEventHandlersEventMap, OnErrorEventHandlerForNodesEventMap, TouchEventHandlersEventMap { fullscreenchange: Event; @@ -9034,7 +9317,8 @@ interface DocumentEventMap } interface Document - extends Node, + extends + Node, DocumentOrShadowRoot, FontFaceSource, GeometryUtils, @@ -9175,7 +9459,9 @@ interface Document createEvent(eventInterface: "AudioProcessingEvent"): AudioProcessingEvent; createEvent(eventInterface: "BeforeUnloadEvent"): BeforeUnloadEvent; createEvent(eventInterface: "BlobEvent"): BlobEvent; - createEvent(eventInterface: "CSSCustomPropertyRegisteredEvent"): CSSCustomPropertyRegisteredEvent; + createEvent( + eventInterface: "CSSCustomPropertyRegisteredEvent" + ): CSSCustomPropertyRegisteredEvent; createEvent(eventInterface: "CaretStateChangedEvent"): CaretStateChangedEvent; createEvent(eventInterface: "ClipboardEvent"): ClipboardEvent; createEvent(eventInterface: "CloseEvent"): CloseEvent; @@ -9195,7 +9481,9 @@ interface Document createEvent(eventInterface: "FontFaceSetLoadEvent"): FontFaceSetLoadEvent; createEvent(eventInterface: "FormDataEvent"): FormDataEvent; createEvent(eventInterface: "FrameCrashedEvent"): FrameCrashedEvent; - createEvent(eventInterface: "GPUUncapturedErrorEvent"): GPUUncapturedErrorEvent; + createEvent( + eventInterface: "GPUUncapturedErrorEvent" + ): GPUUncapturedErrorEvent; createEvent(eventInterface: "GamepadAxisMoveEvent"): GamepadAxisMoveEvent; createEvent(eventInterface: "GamepadButtonEvent"): GamepadButtonEvent; createEvent(eventInterface: "GamepadEvent"): GamepadEvent; @@ -9209,24 +9497,36 @@ interface Document createEvent(eventInterface: "MediaEncryptedEvent"): MediaEncryptedEvent; createEvent(eventInterface: "MediaKeyMessageEvent"): MediaKeyMessageEvent; createEvent(eventInterface: "MediaQueryListEvent"): MediaQueryListEvent; - createEvent(eventInterface: "MediaRecorderErrorEvent"): MediaRecorderErrorEvent; + createEvent( + eventInterface: "MediaRecorderErrorEvent" + ): MediaRecorderErrorEvent; createEvent(eventInterface: "MediaStreamEvent"): MediaStreamEvent; createEvent(eventInterface: "MediaStreamTrackEvent"): MediaStreamTrackEvent; - createEvent(eventInterface: "MerchantValidationEvent"): MerchantValidationEvent; + createEvent( + eventInterface: "MerchantValidationEvent" + ): MerchantValidationEvent; createEvent(eventInterface: "MessageEvent"): MessageEvent; createEvent(eventInterface: "MouseEvent"): MouseEvent; createEvent(eventInterface: "MouseEvents"): MouseEvent; createEvent(eventInterface: "MouseScrollEvent"): MouseScrollEvent; - createEvent(eventInterface: "MozSharedMapChangeEvent"): MozSharedMapChangeEvent; + createEvent( + eventInterface: "MozSharedMapChangeEvent" + ): MozSharedMapChangeEvent; createEvent(eventInterface: "NavigateEvent"): NavigateEvent; createEvent( eventInterface: "NavigationCurrentEntryChangeEvent" ): NavigationCurrentEntryChangeEvent; createEvent(eventInterface: "NotifyPaintEvent"): NotifyPaintEvent; - createEvent(eventInterface: "OfflineAudioCompletionEvent"): OfflineAudioCompletionEvent; + createEvent( + eventInterface: "OfflineAudioCompletionEvent" + ): OfflineAudioCompletionEvent; createEvent(eventInterface: "PageTransitionEvent"): PageTransitionEvent; - createEvent(eventInterface: "PaymentMethodChangeEvent"): PaymentMethodChangeEvent; - createEvent(eventInterface: "PaymentRequestUpdateEvent"): PaymentRequestUpdateEvent; + createEvent( + eventInterface: "PaymentMethodChangeEvent" + ): PaymentMethodChangeEvent; + createEvent( + eventInterface: "PaymentRequestUpdateEvent" + ): PaymentRequestUpdateEvent; createEvent(eventInterface: "PerformanceEntryEvent"): PerformanceEntryEvent; createEvent(eventInterface: "PluginCrashedEvent"): PluginCrashedEvent; createEvent(eventInterface: "PointerEvent"): PointerEvent; @@ -9238,14 +9538,20 @@ interface Document createEvent(eventInterface: "PromiseRejectionEvent"): PromiseRejectionEvent; createEvent(eventInterface: "RTCDTMFToneChangeEvent"): RTCDTMFToneChangeEvent; createEvent(eventInterface: "RTCDataChannelEvent"): RTCDataChannelEvent; - createEvent(eventInterface: "RTCPeerConnectionIceEvent"): RTCPeerConnectionIceEvent; + createEvent( + eventInterface: "RTCPeerConnectionIceEvent" + ): RTCPeerConnectionIceEvent; createEvent(eventInterface: "RTCTrackEvent"): RTCTrackEvent; createEvent(eventInterface: "RedirectBlockedEvent"): RedirectBlockedEvent; createEvent(eventInterface: "ScrollAreaEvent"): ScrollAreaEvent; - createEvent(eventInterface: "SecurityPolicyViolationEvent"): SecurityPolicyViolationEvent; + createEvent( + eventInterface: "SecurityPolicyViolationEvent" + ): SecurityPolicyViolationEvent; createEvent(eventInterface: "SimpleGestureEvent"): SimpleGestureEvent; createEvent(eventInterface: "SpeechRecognitionEvent"): SpeechRecognitionEvent; - createEvent(eventInterface: "SpeechSynthesisErrorEvent"): SpeechSynthesisErrorEvent; + createEvent( + eventInterface: "SpeechSynthesisErrorEvent" + ): SpeechSynthesisErrorEvent; createEvent(eventInterface: "SpeechSynthesisEvent"): SpeechSynthesisEvent; createEvent(eventInterface: "StorageEvent"): StorageEvent; createEvent(eventInterface: "StreamFilterDataEvent"): StreamFilterDataEvent; @@ -9257,7 +9563,9 @@ interface Document createEvent(eventInterface: "TCPServerSocketEvent"): TCPServerSocketEvent; createEvent(eventInterface: "TCPSocketErrorEvent"): TCPSocketErrorEvent; createEvent(eventInterface: "TCPSocketEvent"): TCPSocketEvent; - createEvent(eventInterface: "TaskPriorityChangeEvent"): TaskPriorityChangeEvent; + createEvent( + eventInterface: "TaskPriorityChangeEvent" + ): TaskPriorityChangeEvent; createEvent(eventInterface: "TextEvent"): TextEvent; createEvent(eventInterface: "TimeEvent"): TimeEvent; createEvent(eventInterface: "ToggleEvent"): ToggleEvent; @@ -9272,13 +9580,22 @@ interface Document createEvent(eventInterface: "WebGLContextEvent"): WebGLContextEvent; createEvent(eventInterface: "WheelEvent"): WheelEvent; createEvent(eventInterface: "XRInputSourceEvent"): XRInputSourceEvent; - createEvent(eventInterface: "XRInputSourcesChangeEvent"): XRInputSourcesChangeEvent; + createEvent( + eventInterface: "XRInputSourcesChangeEvent" + ): XRInputSourcesChangeEvent; createEvent(eventInterface: "XRReferenceSpaceEvent"): XRReferenceSpaceEvent; createEvent(eventInterface: "XRSessionEvent"): XRSessionEvent; createEvent(eventInterface: "XULCommandEvent"): XULCommandEvent; createEvent(eventInterface: string): Event; - createNodeIterator(root: Node, whatToShow?: number, filter?: NodeFilter | null): NodeIterator; - createProcessingInstruction(target: string, data: string): ProcessingInstruction; + createNodeIterator( + root: Node, + whatToShow?: number, + filter?: NodeFilter | null + ): NodeIterator; + createProcessingInstruction( + target: string, + data: string + ): ProcessingInstruction; createRange(): Range; createTextNode(data: string): Text; createTouch( @@ -9299,10 +9616,21 @@ interface Document createTouchList(touch: Touch, ...touches: Touch[]): TouchList; createTouchList(): TouchList; createTouchList(touches: Touch[]): TouchList; - createTreeWalker(root: Node, whatToShow?: number, filter?: NodeFilter | null): TreeWalker; - createXULElement(localName: string, options?: string | ElementCreationOptions): Element; + createTreeWalker( + root: Node, + whatToShow?: number, + filter?: NodeFilter | null + ): TreeWalker; + createXULElement( + localName: string, + options?: string | ElementCreationOptions + ): Element; enableStyleSheetsForSet(name: string | null): void; - execCommand(commandId: string, showUI?: boolean, value?: TrustedHTML | string): boolean; + execCommand( + commandId: string, + showUI?: boolean, + value?: TrustedHTML | string + ): boolean; exitFullscreen(): Promise; exitPointerLock(): void; getConnectedShadowRoots(): ShadowRoot[]; @@ -9322,7 +9650,10 @@ interface Document localName: K ): HTMLCollectionOf; getElementsByTagName(localName: string): HTMLCollectionOf; - getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollection; + getElementsByTagNameNS( + namespace: string | null, + localName: string + ): HTMLCollection; getFailedCertSecurityInfo(): FailedCertSecurityInfo; getNetErrorInfo(): NetErrorInfo; getSelection(): Selection | null; @@ -9333,7 +9664,10 @@ interface Document insertAnonymousContent(): AnonymousContent; isActive(): boolean; mozCancelFullScreen(): Promise; - mozSetImageElement(aImageElementId: string, aImageElement: Element | null): void; + mozSetImageElement( + aImageElementId: string, + aImageElement: Element | null + ): void; notifyUserGestureActivation(): void; open(unused1?: string, unused2?: string): Document; open(url: string, name: string, features: string): WindowProxy | null; @@ -9356,7 +9690,9 @@ interface Document setNotifyFetchSuccess(aShouldNotify: boolean): void; setNotifyFormOrPasswordRemoved(aShouldNotify: boolean): void; setSuppressedEventListener(aListener: EventListener | null): void; - startViewTransition(updateCallback?: ViewTransitionUpdateCallback): ViewTransition; + startViewTransition( + updateCallback?: ViewTransitionUpdateCallback + ): ViewTransition; synchronouslyUpdateRemoteBrowserDimensions(aIncludeInactive?: boolean): void; userInteractionForTesting(): void; write(...text: (TrustedHTML | string)[]): void; @@ -9394,7 +9730,10 @@ declare var Document: { readonly KEYPRESS_EVENT_MODEL_CONFLATED: 2; isInstance: IsInstance; parseHTML(html: string, options?: SetHTMLOptions): Document; - parseHTMLUnsafe(html: TrustedHTML | string, options?: SetHTMLUnsafeOptions): Document; + parseHTMLUnsafe( + html: TrustedHTML | string, + options?: SetHTMLUnsafeOptions + ): Document; }; interface DocumentFragment extends Node, NonElementParentNode, ParentNode {} @@ -9496,7 +9835,10 @@ interface DynamicsCompressorNode extends AudioNode, AudioNodePassThrough { declare var DynamicsCompressorNode: { prototype: DynamicsCompressorNode; - new (context: BaseAudioContext, options?: DynamicsCompressorOptions): DynamicsCompressorNode; + new ( + context: BaseAudioContext, + options?: DynamicsCompressorOptions + ): DynamicsCompressorNode; isInstance: IsInstance; }; @@ -9585,7 +9927,8 @@ interface ElementEventMap { } interface Element - extends Node, + extends + Node, ARIAMixin, Animatable, ChildNode, @@ -9641,7 +9984,10 @@ interface Element getAttributeNS(namespace: string | null, localName: string): string | null; getAttributeNames(): string[]; getAttributeNode(name: string): Attr | null; - getAttributeNodeNS(namespaceURI: string | null, localName: string): Attr | null; + getAttributeNodeNS( + namespaceURI: string | null, + localName: string + ): Attr | null; getBoundingClientRect(): DOMRect; getClientRects(): DOMRectList; getElementsByClassName(classNames: string): HTMLCollection; @@ -9659,7 +10005,10 @@ interface Element localName: K ): HTMLCollectionOf; getElementsByTagName(localName: string): HTMLCollectionOf; - getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollection; + getElementsByTagNameNS( + namespace: string | null, + localName: string + ): HTMLCollection; getElementsWithGrid(): Element[]; getGridFragments(): Grid[]; getHTML(options?: GetHTMLOptions): string; @@ -9694,14 +10043,25 @@ interface Element scrollTo(options?: ScrollToOptions): void; setAttribute(name: string, value: TrustedType | string): void; setAttributeDevtools(name: string, value: string): void; - setAttributeDevtoolsNS(namespace: string | null, name: string, value: string): void; - setAttributeNS(namespace: string | null, name: string, value: TrustedType | string): void; + setAttributeDevtoolsNS( + namespace: string | null, + name: string, + value: string + ): void; + setAttributeNS( + namespace: string | null, + name: string, + value: TrustedType | string + ): void; setAttributeNode(newAttr: Attr): Attr | null; setAttributeNodeNS(newAttr: Attr): Attr | null; setCapture(retargetToElement?: boolean): void; setCaptureAlways(retargetToElement?: boolean): void; setHTML(aInnerHTML: string, options?: SetHTMLOptions): void; - setHTMLUnsafe(html: TrustedHTML | string, options?: SetHTMLUnsafeOptions): void; + setHTMLUnsafe( + html: TrustedHTML | string, + options?: SetHTMLUnsafeOptions + ): void; setPointerCapture(pointerId: number): void; toggleAttribute(name: string, force?: boolean): boolean; webkitMatchesSelector(selector: string): boolean; @@ -9753,7 +10113,11 @@ interface ElementInternals extends ARIAMixin { value: File | string | FormData | null, state?: File | string | FormData | null ): void; - setValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void; + setValidity( + flags?: ValidityStateFlags, + message?: string, + anchor?: HTMLElement + ): void; } declare var ElementInternals: { @@ -10068,8 +10432,14 @@ declare var File: { prototype: File; new (fileBits: BlobPart[], fileName: string, options?: FilePropertyBag): File; isInstance: IsInstance; - createFromFileName(fileName: string, options?: ChromeFilePropertyBag): Promise; - createFromNsIFile(file: nsIFile, options?: ChromeFilePropertyBag): Promise; + createFromFileName( + fileName: string, + options?: ChromeFilePropertyBag + ): Promise; + createFromNsIFile( + file: nsIFile, + options?: ChromeFilePropertyBag + ): Promise; }; interface FileList { @@ -10181,7 +10551,10 @@ interface FileSystemDirectoryHandle extends FileSystemHandle { name: string, options?: FileSystemGetDirectoryOptions ): Promise; - getFileHandle(name: string, options?: FileSystemGetFileOptions): Promise; + getFileHandle( + name: string, + options?: FileSystemGetFileOptions + ): Promise; removeEntry(name: string, options?: FileSystemRemoveOptions): Promise; resolve(possibleDescendant: FileSystemHandle): Promise; } @@ -10198,7 +10571,10 @@ interface FileSystemDirectoryIterator { } interface FileSystemDirectoryReader { - readEntries(successCallback: FileSystemEntriesCallback, errorCallback?: ErrorCallback): void; + readEntries( + successCallback: FileSystemEntriesCallback, + errorCallback?: ErrorCallback + ): void; } declare var FileSystemDirectoryReader: { @@ -10213,7 +10589,10 @@ interface FileSystemEntry { readonly isDirectory: boolean; readonly isFile: boolean; readonly name: string; - getParent(successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void; + getParent( + successCallback?: FileSystemEntryCallback, + errorCallback?: ErrorCallback + ): void; } declare var FileSystemEntry: { @@ -10234,7 +10613,9 @@ declare var FileSystemFileEntry: { /** Available only in secure contexts. */ interface FileSystemFileHandle extends FileSystemHandle { - createWritable(options?: FileSystemCreateWritableOptions): Promise; + createWritable( + options?: FileSystemCreateWritableOptions + ): Promise; getFile(): Promise; } @@ -10320,15 +10701,25 @@ declare var FlexLineValues: { interface FluentBundle { readonly locales: string[]; - addResource(aResource: FluentResource, aOptions?: FluentBundleAddResourceOptions): void; - formatPattern(pattern: FluentPattern, aArgs?: L10nArgs | null, aErrors?: any): string; + addResource( + aResource: FluentResource, + aOptions?: FluentBundleAddResourceOptions + ): void; + formatPattern( + pattern: FluentPattern, + aArgs?: L10nArgs | null, + aErrors?: any + ): string; getMessage(id: string): FluentMessage | null; hasMessage(id: string): boolean; } declare var FluentBundle: { prototype: FluentBundle; - new (aLocales: string | string[], aOptions?: FluentBundleOptions): FluentBundle; + new ( + aLocales: string | string[], + aOptions?: FluentBundleOptions + ): FluentBundle; isInstance: IsInstance; }; @@ -10391,7 +10782,11 @@ interface FontFace { declare var FontFace: { prototype: FontFace; - new (family: string, source: string | BinaryData, descriptors?: FontFaceDescriptors): FontFace; + new ( + family: string, + source: string | BinaryData, + descriptors?: FontFaceDescriptors + ): FontFace; isInstance: IsInstance; }; @@ -10455,7 +10850,10 @@ interface FontFaceSetLoadEvent extends Event { declare var FontFaceSetLoadEvent: { prototype: FontFaceSetLoadEvent; - new (type: string, eventInitDict?: FontFaceSetLoadEventInit): FontFaceSetLoadEvent; + new ( + type: string, + eventInitDict?: FontFaceSetLoadEventInit + ): FontFaceSetLoadEvent; isInstance: IsInstance; }; @@ -10473,7 +10871,11 @@ interface FormData { set(name: string, value: Blob, filename?: string): void; set(name: string, value: string): void; forEach( - callbackfn: (value: FormDataEntryValue, key: string, parent: FormData) => void, + callbackfn: ( + value: FormDataEntryValue, + key: string, + parent: FormData + ) => void, thisArg?: any ): void; } @@ -10550,7 +10952,11 @@ declare var FrameLoader: { interface FrameScriptLoader { getDelayedFrameScripts(): any[][]; - loadFrameScript(url: string, allowDelayedLoad: boolean, runInGlobalScope?: boolean): void; + loadFrameScript( + url: string, + allowDelayedLoad: boolean, + runInGlobalScope?: boolean + ): void; removeDelayedFrameScript(url: string): void; } @@ -10558,7 +10964,9 @@ interface FrameScriptLoader { interface GPU { readonly wgslLanguageFeatures: WGSLLanguageFeatures; getPreferredCanvasFormat(): GPUTextureFormat; - requestAdapter(options?: GPURequestAdapterOptions): Promise; + requestAdapter( + options?: GPURequestAdapterOptions + ): Promise; } declare var GPU: { @@ -10646,7 +11054,11 @@ interface GPUBuffer extends GPUObjectBase { readonly usage: GPUFlagsConstant; destroy(): void; getMappedRange(offset?: GPUSize64, size?: GPUSize64): ArrayBuffer; - mapAsync(mode: GPUMapModeFlags, offset?: GPUSize64, size?: GPUSize64): Promise; + mapAsync( + mode: GPUMapModeFlags, + offset?: GPUSize64, + size?: GPUSize64 + ): Promise; unmap(): void; } @@ -10682,10 +11094,16 @@ declare var GPUCommandBuffer: { /** Available only in secure contexts. */ interface GPUCommandEncoder extends GPUDebugCommandsMixin, GPUObjectBase { - beginComputePass(descriptor?: GPUComputePassDescriptor): GPUComputePassEncoder; + beginComputePass( + descriptor?: GPUComputePassDescriptor + ): GPUComputePassEncoder; beginRenderPass(descriptor: GPURenderPassDescriptor): GPURenderPassEncoder; clearBuffer(buffer: GPUBuffer, offset?: GPUSize64, size?: GPUSize64): void; - copyBufferToBuffer(source: GPUBuffer, destination: GPUBuffer, size?: GPUSize64): void; + copyBufferToBuffer( + source: GPUBuffer, + destination: GPUBuffer, + size?: GPUSize64 + ): void; copyBufferToBuffer( source: GPUBuffer, sourceOffset: GPUSize64, @@ -10753,15 +11171,16 @@ declare var GPUCompilationMessage: { /** Available only in secure contexts. */ interface GPUComputePassEncoder - extends GPUBindingCommandsMixin, - GPUDebugCommandsMixin, - GPUObjectBase { + extends GPUBindingCommandsMixin, GPUDebugCommandsMixin, GPUObjectBase { dispatchWorkgroups( workgroupCountX: GPUSize32, workgroupCountY?: GPUSize32, workgroupCountZ?: GPUSize32 ): void; - dispatchWorkgroupsIndirect(indirectBuffer: GPUBuffer, indirectOffset: GPUSize64): void; + dispatchWorkgroupsIndirect( + indirectBuffer: GPUBuffer, + indirectOffset: GPUSize64 + ): void; end(): void; setPipeline(pipeline: GPUComputePipeline): void; } @@ -10800,21 +11219,39 @@ interface GPUDevice extends EventTarget, GPUObjectBase { onuncapturederror: ((this: GPUDevice, ev: Event) => any) | null; readonly queue: GPUQueue; createBindGroup(descriptor: GPUBindGroupDescriptor): GPUBindGroup; - createBindGroupLayout(descriptor: GPUBindGroupLayoutDescriptor): GPUBindGroupLayout; + createBindGroupLayout( + descriptor: GPUBindGroupLayoutDescriptor + ): GPUBindGroupLayout; createBuffer(descriptor: GPUBufferDescriptor): GPUBuffer; - createCommandEncoder(descriptor?: GPUCommandEncoderDescriptor): GPUCommandEncoder; - createComputePipeline(descriptor: GPUComputePipelineDescriptor): GPUComputePipeline; - createComputePipelineAsync(descriptor: GPUComputePipelineDescriptor): Promise; - createPipelineLayout(descriptor: GPUPipelineLayoutDescriptor): GPUPipelineLayout; + createCommandEncoder( + descriptor?: GPUCommandEncoderDescriptor + ): GPUCommandEncoder; + createComputePipeline( + descriptor: GPUComputePipelineDescriptor + ): GPUComputePipeline; + createComputePipelineAsync( + descriptor: GPUComputePipelineDescriptor + ): Promise; + createPipelineLayout( + descriptor: GPUPipelineLayoutDescriptor + ): GPUPipelineLayout; createQuerySet(descriptor: GPUQuerySetDescriptor): GPUQuerySet; - createRenderBundleEncoder(descriptor: GPURenderBundleEncoderDescriptor): GPURenderBundleEncoder; - createRenderPipeline(descriptor: GPURenderPipelineDescriptor): GPURenderPipeline; - createRenderPipelineAsync(descriptor: GPURenderPipelineDescriptor): Promise; + createRenderBundleEncoder( + descriptor: GPURenderBundleEncoderDescriptor + ): GPURenderBundleEncoder; + createRenderPipeline( + descriptor: GPURenderPipelineDescriptor + ): GPURenderPipeline; + createRenderPipelineAsync( + descriptor: GPURenderPipelineDescriptor + ): Promise; createSampler(descriptor?: GPUSamplerDescriptor): GPUSampler; createShaderModule(descriptor: GPUShaderModuleDescriptor): GPUShaderModule; createTexture(descriptor: GPUTextureDescriptor): GPUTexture; destroy(): void; - importExternalTexture(descriptor: GPUExternalTextureDescriptor): GPUExternalTexture; + importExternalTexture( + descriptor: GPUExternalTextureDescriptor + ): GPUExternalTexture; popErrorScope(): Promise; pushErrorScope(filter: GPUErrorFilter): void; addEventListener( @@ -10977,7 +11414,8 @@ declare var GPURenderBundle: { /** Available only in secure contexts. */ interface GPURenderBundleEncoder - extends GPUBindingCommandsMixin, + extends + GPUBindingCommandsMixin, GPUDebugCommandsMixin, GPUObjectBase, GPURenderCommandsMixin { @@ -11004,7 +11442,10 @@ interface GPURenderCommandsMixin { baseVertex?: GPUSignedOffset32, firstInstance?: GPUSize32 ): void; - drawIndexedIndirect(indirectBuffer: GPUBuffer, indirectOffset: GPUSize64): void; + drawIndexedIndirect( + indirectBuffer: GPUBuffer, + indirectOffset: GPUSize64 + ): void; drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: GPUSize64): void; setIndexBuffer( buffer: GPUBuffer, @@ -11013,12 +11454,18 @@ interface GPURenderCommandsMixin { size?: GPUSize64 ): void; setPipeline(pipeline: GPURenderPipeline): void; - setVertexBuffer(slot: GPUIndex32, buffer: GPUBuffer, offset?: GPUSize64, size?: GPUSize64): void; + setVertexBuffer( + slot: GPUIndex32, + buffer: GPUBuffer, + offset?: GPUSize64, + size?: GPUSize64 + ): void; } /** Available only in secure contexts. */ interface GPURenderPassEncoder - extends GPUBindingCommandsMixin, + extends + GPUBindingCommandsMixin, GPUDebugCommandsMixin, GPUObjectBase, GPURenderCommandsMixin { @@ -11082,7 +11529,11 @@ declare var GPUShaderModule: { /** Available only in secure contexts. */ interface GPUSupportedFeatures { forEach( - callbackfn: (value: string, key: string, parent: GPUSupportedFeatures) => void, + callbackfn: ( + value: string, + key: string, + parent: GPUSupportedFeatures + ) => void, thisArg?: any ): void; } @@ -11224,7 +11675,10 @@ interface GamepadAxisMoveEvent extends GamepadEvent { declare var GamepadAxisMoveEvent: { prototype: GamepadAxisMoveEvent; - new (type: string, eventInitDict?: GamepadAxisMoveEventInit): GamepadAxisMoveEvent; + new ( + type: string, + eventInitDict?: GamepadAxisMoveEventInit + ): GamepadAxisMoveEvent; isInstance: IsInstance; }; @@ -11246,7 +11700,10 @@ interface GamepadButtonEvent extends GamepadEvent { declare var GamepadButtonEvent: { prototype: GamepadButtonEvent; - new (type: string, eventInitDict?: GamepadButtonEventInit): GamepadButtonEvent; + new ( + type: string, + eventInitDict?: GamepadButtonEventInit + ): GamepadButtonEvent; isInstance: IsInstance; }; @@ -11860,7 +12317,8 @@ interface GlobalEventHandlers { onclick: ((this: GlobalEventHandlers, ev: Event) => any) | null; onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null; oncommand: ((this: GlobalEventHandlers, ev: Event) => any) | null; - oncontentvisibilityautostatechange: ((this: GlobalEventHandlers, ev: Event) => any) | null; + oncontentvisibilityautostatechange: + ((this: GlobalEventHandlers, ev: Event) => any) | null; oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null; oncontextmenu: ((this: GlobalEventHandlers, ev: Event) => any) | null; oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null; @@ -11921,7 +12379,8 @@ interface GlobalEventHandlers { onresize: ((this: GlobalEventHandlers, ev: Event) => any) | null; onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null; onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null; - onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: Event) => any) | null; + onsecuritypolicyviolation: + ((this: GlobalEventHandlers, ev: Event) => any) | null; onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null; onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null; onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null; @@ -11940,13 +12399,18 @@ interface GlobalEventHandlers { onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null; onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null; onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null; - onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null; - onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null; + onwebkitanimationiteration: + ((this: GlobalEventHandlers, ev: Event) => any) | null; + onwebkitanimationstart: + ((this: GlobalEventHandlers, ev: Event) => any) | null; onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null; onwheel: ((this: GlobalEventHandlers, ev: Event) => any) | null; addEventListener( type: K, - listener: (this: GlobalEventHandlers, ev: GlobalEventHandlersEventMap[K]) => any, + listener: ( + this: GlobalEventHandlers, + ev: GlobalEventHandlersEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -11956,7 +12420,10 @@ interface GlobalEventHandlers { ): void; removeEventListener( type: K, - listener: (this: GlobalEventHandlers, ev: GlobalEventHandlersEventMap[K]) => any, + listener: ( + this: GlobalEventHandlers, + ev: GlobalEventHandlersEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -12252,7 +12719,8 @@ declare var HTMLBaseElement: { isInstance: IsInstance; }; -interface HTMLBodyElementEventMap extends HTMLElementEventMap, WindowEventHandlersEventMap {} +interface HTMLBodyElementEventMap + extends HTMLElementEventMap, WindowEventHandlersEventMap {} interface HTMLBodyElement extends HTMLElement, WindowEventHandlers { aLink: string; @@ -12639,13 +13107,15 @@ declare var HTMLDocument: { }; interface HTMLElementEventMap - extends ElementEventMap, + extends + ElementEventMap, GlobalEventHandlersEventMap, OnErrorEventHandlerForNodesEventMap, TouchEventHandlersEventMap {} interface HTMLElement - extends Element, + extends + Element, ElementCSSInlineStyle, ElementOffsetAttributes, GlobalEventHandlers, @@ -12707,7 +13177,8 @@ declare var HTMLElement: { isInstance: IsInstance; }; -interface HTMLEmbedElement extends HTMLElement, MozFrameLoaderOwner, MozObjectLoadingContent { +interface HTMLEmbedElement + extends HTMLElement, MozFrameLoaderOwner, MozObjectLoadingContent { align: string; height: string; name: string; @@ -12915,14 +13386,18 @@ declare var HTMLFrameElement: { isInstance: IsInstance; }; -interface HTMLFrameSetElementEventMap extends HTMLElementEventMap, WindowEventHandlersEventMap {} +interface HTMLFrameSetElementEventMap + extends HTMLElementEventMap, WindowEventHandlersEventMap {} interface HTMLFrameSetElement extends HTMLElement, WindowEventHandlers { cols: string; rows: string; addEventListener( type: K, - listener: (this: HTMLFrameSetElement, ev: HTMLFrameSetElementEventMap[K]) => any, + listener: ( + this: HTMLFrameSetElement, + ev: HTMLFrameSetElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -12932,7 +13407,10 @@ interface HTMLFrameSetElement extends HTMLElement, WindowEventHandlers { ): void; removeEventListener( type: K, - listener: (this: HTMLFrameSetElement, ev: HTMLFrameSetElementEventMap[K]) => any, + listener: ( + this: HTMLFrameSetElement, + ev: HTMLFrameSetElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -13196,7 +13674,8 @@ declare var HTMLImageElement: { }; interface HTMLInputElement - extends HTMLElement, + extends + HTMLElement, MozEditableElement, MozImageLoadingContent, PopoverInvokerElement { @@ -13595,7 +14074,11 @@ interface HTMLMediaElement extends HTMLElement { readonly videoTracks: VideoTrackList; readonly visiblePlayTime: number; volume: number; - addTextTrack(kind: TextTrackKind, label?: string, language?: string): TextTrack; + addTextTrack( + kind: TextTrackKind, + label?: string, + language?: string + ): TextTrack; canPlayType(type: string): string; fastSeek(time: number): void; hasSuspendTaint(): boolean; @@ -13610,7 +14093,10 @@ interface HTMLMediaElement extends HTMLElement { seekToNextFrame(): Promise; setAudioSinkFailedStartup(): void; setDecodeError(error: string): void; - setFormatDiagnosticsReportForMimeType(mimeType: string, error: DecoderDoctorReportType): void; + setFormatDiagnosticsReportForMimeType( + mimeType: string, + error: DecoderDoctorReportType + ): void; setMediaKeys(mediaKeys: MediaKeys | null): Promise; /** Available only in secure contexts. */ setSinkId(sinkId: string): Promise; @@ -13826,7 +14312,8 @@ declare var HTMLOListElement: { isInstance: IsInstance; }; -interface HTMLObjectElement extends HTMLElement, MozFrameLoaderOwner, MozObjectLoadingContent { +interface HTMLObjectElement + extends HTMLElement, MozFrameLoaderOwner, MozObjectLoadingContent { align: string; archive: string; border: string; @@ -13955,7 +14442,10 @@ declare var HTMLOptionElement: { interface HTMLOptionsCollection extends HTMLCollectionBase { length: number; selectedIndex: number; - add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number | null): void; + add( + element: HTMLOptionElement | HTMLOptGroupElement, + before?: HTMLElement | number | null + ): void; remove(index: number): void; } @@ -14269,7 +14759,10 @@ interface HTMLSelectElement extends HTMLElement { readonly validity: ValidityState; value: string; readonly willValidate: boolean; - add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number | null): void; + add( + element: HTMLOptionElement | HTMLOptGroupElement, + before?: HTMLElement | number | null + ): void; checkValidity(): boolean; getAutocompleteInfo(): AutocompleteInfo; item(index: number): Element | null; @@ -14445,7 +14938,10 @@ interface HTMLTableCaptionElement extends HTMLElement { align: string; addEventListener( type: K, - listener: (this: HTMLTableCaptionElement, ev: HTMLElementEventMap[K]) => any, + listener: ( + this: HTMLTableCaptionElement, + ev: HTMLElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -14455,7 +14951,10 @@ interface HTMLTableCaptionElement extends HTMLElement { ): void; removeEventListener( type: K, - listener: (this: HTMLTableCaptionElement, ev: HTMLElementEventMap[K]) => any, + listener: ( + this: HTMLTableCaptionElement, + ev: HTMLElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -14651,7 +15150,10 @@ interface HTMLTableSectionElement extends HTMLElement { insertRow(index?: number): HTMLElement; addEventListener( type: K, - listener: (this: HTMLTableSectionElement, ev: HTMLElementEventMap[K]) => any, + listener: ( + this: HTMLTableSectionElement, + ev: HTMLElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -14661,7 +15163,10 @@ interface HTMLTableSectionElement extends HTMLElement { ): void; removeEventListener( type: K, - listener: (this: HTMLTableSectionElement, ev: HTMLElementEventMap[K]) => any, + listener: ( + this: HTMLTableSectionElement, + ev: HTMLElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -15011,7 +15516,10 @@ interface Headers { getSetCookie(): string[]; has(name: string): boolean; set(name: string, value: string): void; - forEach(callbackfn: (value: string, key: string, parent: Headers) => void, thisArg?: any): void; + forEach( + callbackfn: (value: string, key: string, parent: Headers) => void, + thisArg?: any + ): void; } declare var Headers: { @@ -15023,7 +15531,11 @@ declare var Headers: { interface HeapSnapshot { readonly creationTime: number | null; computeDominatorTree(): DominatorTree; - computeShortestPaths(start: NodeId, targets: NodeId[], maxNumPaths: number): any; + computeShortestPaths( + start: NodeId, + targets: NodeId[], + maxNumPaths: number + ): any; describeNode(breakdown: any, node: NodeId): any; takeCensus(options: any): any; } @@ -15038,7 +15550,11 @@ interface Highlight { priority: number; type: HighlightType; forEach( - callbackfn: (value: AbstractRange, key: AbstractRange, parent: Highlight) => void, + callbackfn: ( + value: AbstractRange, + key: AbstractRange, + parent: Highlight + ) => void, thisArg?: any ): void; } @@ -15051,7 +15567,11 @@ declare var Highlight: { interface HighlightRegistry { forEach( - callbackfn: (value: Highlight, key: string, parent: HighlightRegistry) => void, + callbackfn: ( + value: Highlight, + key: string, + parent: HighlightRegistry + ) => void, thisArg?: any ): void; } @@ -15124,7 +15644,10 @@ interface IDBDatabase extends EventTarget { onversionchange: ((this: IDBDatabase, ev: Event) => any) | null; readonly version: number; close(): void; - createObjectStore(name: string, options?: IDBObjectStoreParameters): IDBObjectStore; + createObjectStore( + name: string, + options?: IDBObjectStoreParameters + ): IDBObjectStore; deleteObjectStore(name: string): void; transaction( storeNames: string | string[], @@ -15169,7 +15692,11 @@ interface IDBFactory { options?: IDBOpenDBOptions ): IDBOpenDBRequest; open(name: string, version?: number): IDBOpenDBRequest; - openForPrincipal(principal: Principal, name: string, version: number): IDBOpenDBRequest; + openForPrincipal( + principal: Principal, + name: string, + version: number + ): IDBOpenDBRequest; openForPrincipal( principal: Principal, name: string, @@ -15218,7 +15745,12 @@ declare var IDBKeyRange: { prototype: IDBKeyRange; new (): IDBKeyRange; isInstance: IsInstance; - bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange; + bound( + lower: any, + upper: any, + lowerOpen?: boolean, + upperOpen?: boolean + ): IDBKeyRange; lowerBound(lower: any, open?: boolean): IDBKeyRange; only(value: any): IDBKeyRange; upperBound(upper: any, open?: boolean): IDBKeyRange; @@ -15386,7 +15918,10 @@ interface IDBVersionChangeEvent extends Event { declare var IDBVersionChangeEvent: { prototype: IDBVersionChangeEvent; - new (type: string, eventInitDict?: IDBVersionChangeEventInit): IDBVersionChangeEvent; + new ( + type: string, + eventInitDict?: IDBVersionChangeEventInit + ): IDBVersionChangeEvent; isInstance: IsInstance; }; @@ -15766,7 +16301,10 @@ declare var IntersectionObserverEntry: { }; interface IntlUtils { - getDisplayNames(locales: string[], options?: DisplayNameOptions): DisplayNameResult; + getDisplayNames( + locales: string[], + options?: DisplayNameOptions + ): DisplayNameResult; isAppLocaleRTL(): boolean; } @@ -16254,7 +16792,10 @@ interface KeyboardEvent extends UIEvent, KeyEventMixin { declare var KeyboardEvent: { prototype: KeyboardEvent; - new (typeArg: string, keyboardEventInitDict?: KeyboardEventInit): KeyboardEvent; + new ( + typeArg: string, + keyboardEventInitDict?: KeyboardEventInit + ): KeyboardEvent; readonly DOM_KEY_LOCATION_STANDARD: 0x00; readonly DOM_KEY_LOCATION_LEFT: 0x01; readonly DOM_KEY_LOCATION_RIGHT: 0x02; @@ -16502,8 +17043,14 @@ declare var L10nFileSource: { interface L10nRegistry { clearSources(): void; - generateBundles(aLocales: string[], aResourceIds: L10nResourceId[]): FluentBundleAsyncIterator; - generateBundlesSync(aLocales: string[], aResourceIds: L10nResourceId[]): FluentBundleIterator; + generateBundles( + aLocales: string[], + aResourceIds: L10nResourceId[] + ): FluentBundleAsyncIterator; + generateBundlesSync( + aLocales: string[], + aResourceIds: L10nResourceId[] + ): FluentBundleIterator; getAvailableLocales(): string[]; getSource(aName: string): L10nFileSource | null; getSourceNames(): string[]; @@ -16537,7 +17084,11 @@ declare var LargestContentfulPaint: { }; interface LegacyMozTCPSocket { - listen(port: number, options?: ServerSocketOptions, backlog?: number): TCPServerSocket; + listen( + port: number, + options?: ServerSocketOptions, + backlog?: number + ): TCPServerSocket; open(host: string, port: number, options?: SocketOptions): TCPSocket; } @@ -16630,7 +17181,11 @@ declare var Lock: { interface LockManager { query(): Promise; request(name: string, callback: LockGrantedCallback): Promise; - request(name: string, options: LockOptions, callback: LockGrantedCallback): Promise; + request( + name: string, + options: LockOptions, + callback: LockGrantedCallback + ): Promise; } declare var LockManager: { @@ -16684,7 +17239,10 @@ interface MIDIConnectionEvent extends Event { declare var MIDIConnectionEvent: { prototype: MIDIConnectionEvent; - new (type: string, eventInitDict?: MIDIConnectionEventInit): MIDIConnectionEvent; + new ( + type: string, + eventInitDict?: MIDIConnectionEventInit + ): MIDIConnectionEvent; isInstance: IsInstance; }; @@ -16841,13 +17399,17 @@ declare var MIDIPort: { /** Available only in secure contexts. */ interface MLS { deleteState(): Promise; - generateCredential(credentialContent: MLSBytesOrUint8ArrayOrUTF8String): Promise; + generateCredential( + credentialContent: MLSBytesOrUint8ArrayOrUTF8String + ): Promise; generateIdentity(): Promise; generateKeyPackage( clientId: MLSBytesOrUint8Array, credential: MLSBytesOrUint8Array ): Promise; - getGroupEpochFromMessage(message: MLSBytesOrUint8Array): Promise; + getGroupEpochFromMessage( + message: MLSBytesOrUint8Array + ): Promise; getGroupIdFromMessage(message: MLSBytesOrUint8Array): Promise; groupCreate( clientId: MLSBytesOrUint8Array, @@ -16857,7 +17419,10 @@ interface MLS { groupId: MLSBytesOrUint8Array, clientId: MLSBytesOrUint8Array ): Promise; - groupJoin(clientId: MLSBytesOrUint8Array, welcome: MLSBytesOrUint8Array): Promise; + groupJoin( + clientId: MLSBytesOrUint8Array, + welcome: MLSBytesOrUint8Array + ): Promise; } declare var MLS: { @@ -16949,18 +17514,23 @@ interface MatchPatternSet { declare var MatchPatternSet: { prototype: MatchPatternSet; - new (patterns: (string | MatchPattern)[], options?: MatchPatternOptions): MatchPatternSet; + new ( + patterns: (string | MatchPattern)[], + options?: MatchPatternOptions + ): MatchPatternSet; isInstance: IsInstance; }; interface MathMLElementEventMap - extends ElementEventMap, + extends + ElementEventMap, GlobalEventHandlersEventMap, OnErrorEventHandlerForNodesEventMap, TouchEventHandlersEventMap {} interface MathMLElement - extends Element, + extends + Element, ElementCSSInlineStyle, GlobalEventHandlers, HTMLOrForeignElement, @@ -16995,8 +17565,12 @@ declare var MathMLElement: { }; interface MediaCapabilities { - decodingInfo(configuration: MediaDecodingConfiguration): Promise; - encodingInfo(configuration: MediaEncodingConfiguration): Promise; + decodingInfo( + configuration: MediaDecodingConfiguration + ): Promise; + encodingInfo( + configuration: MediaEncodingConfiguration + ): Promise; } declare var MediaCapabilities: { @@ -17088,7 +17662,9 @@ interface MediaDevices extends EventTarget { ondevicechange: ((this: MediaDevices, ev: Event) => any) | null; enumerateDevices(): Promise; /** Available only in secure contexts. */ - getDisplayMedia(constraints?: DisplayMediaStreamConstraints): Promise; + getDisplayMedia( + constraints?: DisplayMediaStreamConstraints + ): Promise; getSupportedConstraints(): MediaTrackSupportedConstraints; getUserMedia(constraints?: MediaStreamConstraints): Promise; /** Available only in secure contexts. */ @@ -17127,7 +17703,10 @@ interface MediaElementAudioSourceNode extends AudioNode, AudioNodePassThrough { declare var MediaElementAudioSourceNode: { prototype: MediaElementAudioSourceNode; - new (context: AudioContext, options: MediaElementAudioSourceOptions): MediaElementAudioSourceNode; + new ( + context: AudioContext, + options: MediaElementAudioSourceOptions + ): MediaElementAudioSourceNode; isInstance: IsInstance; }; @@ -17138,7 +17717,10 @@ interface MediaEncryptedEvent extends Event { declare var MediaEncryptedEvent: { prototype: MediaEncryptedEvent; - new (type: string, eventInitDict?: MediaKeyNeededEventInit): MediaEncryptedEvent; + new ( + type: string, + eventInitDict?: MediaKeyNeededEventInit + ): MediaEncryptedEvent; isInstance: IsInstance; }; @@ -17178,7 +17760,10 @@ interface MediaKeyMessageEvent extends Event { declare var MediaKeyMessageEvent: { prototype: MediaKeyMessageEvent; - new (type: string, eventInitDict: MediaKeyMessageEventInit): MediaKeyMessageEvent; + new ( + type: string, + eventInitDict: MediaKeyMessageEventInit + ): MediaKeyMessageEvent; isInstance: IsInstance; }; @@ -17233,7 +17818,11 @@ interface MediaKeyStatusMap { get(keyId: BufferSource): MediaKeyStatus | undefined; has(keyId: BufferSource): boolean; forEach( - callbackfn: (value: MediaKeyStatus, key: ArrayBuffer, parent: MediaKeyStatusMap) => void, + callbackfn: ( + value: MediaKeyStatus, + key: ArrayBuffer, + parent: MediaKeyStatusMap + ) => void, thisArg?: any ): void; } @@ -17343,7 +17932,10 @@ interface MediaQueryListEvent extends Event { declare var MediaQueryListEvent: { prototype: MediaQueryListEvent; - new (type: string, eventInitDict?: MediaQueryListEventInit): MediaQueryListEvent; + new ( + type: string, + eventInitDict?: MediaQueryListEventInit + ): MediaQueryListEvent; isInstance: IsInstance; }; @@ -17398,7 +17990,11 @@ interface MediaRecorder extends EventTarget { declare var MediaRecorder: { prototype: MediaRecorder; new (stream: MediaStream, options?: MediaRecorderOptions): MediaRecorder; - new (node: AudioNode, output?: number, options?: MediaRecorderOptions): MediaRecorder; + new ( + node: AudioNode, + output?: number, + options?: MediaRecorderOptions + ): MediaRecorder; isInstance: IsInstance; isTypeSupported(type: string): boolean; }; @@ -17409,7 +18005,10 @@ interface MediaRecorderErrorEvent extends Event { declare var MediaRecorderErrorEvent: { prototype: MediaRecorderErrorEvent; - new (type: string, eventInitDict: MediaRecorderErrorEventInit): MediaRecorderErrorEvent; + new ( + type: string, + eventInitDict: MediaRecorderErrorEventInit + ): MediaRecorderErrorEvent; isInstance: IsInstance; }; @@ -17417,7 +18016,10 @@ interface MediaSession { metadata: MediaMetadata | null; playbackState: MediaSessionPlaybackState; notifyHandler(details: MediaSessionActionDetails): void; - setActionHandler(action: MediaSessionAction, handler: MediaSessionActionHandler | null): void; + setActionHandler( + action: MediaSessionAction, + handler: MediaSessionActionHandler | null + ): void; setPositionState(state?: MediaPositionState): void; } @@ -17531,7 +18133,10 @@ interface MediaStreamAudioDestinationNode extends AudioNode { declare var MediaStreamAudioDestinationNode: { prototype: MediaStreamAudioDestinationNode; - new (context: AudioContext, options?: AudioNodeOptions): MediaStreamAudioDestinationNode; + new ( + context: AudioContext, + options?: AudioNodeOptions + ): MediaStreamAudioDestinationNode; isInstance: IsInstance; }; @@ -17541,7 +18146,10 @@ interface MediaStreamAudioSourceNode extends AudioNode, AudioNodePassThrough { declare var MediaStreamAudioSourceNode: { prototype: MediaStreamAudioSourceNode; - new (context: AudioContext, options: MediaStreamAudioSourceOptions): MediaStreamAudioSourceNode; + new ( + context: AudioContext, + options: MediaStreamAudioSourceOptions + ): MediaStreamAudioSourceNode; isInstance: IsInstance; }; @@ -17611,7 +18219,8 @@ declare var MediaStreamTrack: { isInstance: IsInstance; }; -interface MediaStreamTrackAudioSourceNode extends AudioNode, AudioNodePassThrough {} +interface MediaStreamTrackAudioSourceNode + extends AudioNode, AudioNodePassThrough {} declare var MediaStreamTrackAudioSourceNode: { prototype: MediaStreamTrackAudioSourceNode; @@ -17628,7 +18237,10 @@ interface MediaStreamTrackEvent extends Event { declare var MediaStreamTrackEvent: { prototype: MediaStreamTrackEvent; - new (type: string, eventInitDict: MediaStreamTrackEventInit): MediaStreamTrackEvent; + new ( + type: string, + eventInitDict: MediaStreamTrackEventInit + ): MediaStreamTrackEvent; isInstance: IsInstance; }; @@ -17641,7 +18253,10 @@ interface MerchantValidationEvent extends Event { declare var MerchantValidationEvent: { prototype: MerchantValidationEvent; - new (type: string, eventInitDict?: MerchantValidationEventInit): MerchantValidationEvent; + new ( + type: string, + eventInitDict?: MerchantValidationEventInit + ): MerchantValidationEvent; isInstance: IsInstance; }; @@ -17709,7 +18324,10 @@ interface MessageListenerManagerMixin { ): void; addWeakMessageListener(messageName: string, listener: MessageListener): void; removeMessageListener(messageName: string, listener: MessageListener): void; - removeWeakMessageListener(messageName: string, listener: MessageListener): void; + removeWeakMessageListener( + messageName: string, + listener: MessageListener + ): void; } interface MessageManagerGlobal { @@ -17769,7 +18387,11 @@ declare var MessageSender: { interface MessageSenderMixin { readonly processMessageManager: MessageSender | null; readonly remoteType: string; - sendAsyncMessage(messageName?: string | null, obj?: any, transfers?: any): void; + sendAsyncMessage( + messageName?: string | null, + obj?: any, + transfers?: any + ): void; } interface MimeType { @@ -17939,7 +18561,10 @@ interface MozDocumentMatcher { readonly matches: MatchPatternSet; readonly originAttributesPatterns: any; matchesURI(uri: URI): boolean; - matchesWindowGlobal(windowGlobal: WindowGlobalChild, ignorePermissions?: boolean): boolean; + matchesWindowGlobal( + windowGlobal: WindowGlobalChild, + ignorePermissions?: boolean + ): boolean; } declare var MozDocumentMatcher: { @@ -18009,7 +18634,11 @@ interface MozSharedMap extends EventTarget { get(name: string): StructuredClonable; has(name: string): boolean; forEach( - callbackfn: (value: StructuredClonable, key: string, parent: MozSharedMap) => void, + callbackfn: ( + value: StructuredClonable, + key: string, + parent: MozSharedMap + ) => void, thisArg?: any ): void; } @@ -18172,7 +18801,10 @@ interface Navigation extends EventTarget { back(options?: NavigationOptions): NavigationResult; entries(): NavigationHistoryEntry[]; forward(options?: NavigationOptions): NavigationResult; - navigate(url: string | URL, options?: NavigationNavigateOptions): NavigationResult; + navigate( + url: string | URL, + options?: NavigationNavigateOptions + ): NavigationResult; reload(options?: NavigationReloadOptions): NavigationResult; traverseTo(key: string, options?: NavigationOptions): NavigationResult; updateCurrentEntry(options: NavigationUpdateCurrentEntryOptions): void; @@ -18259,7 +18891,10 @@ interface NavigationHistoryEntry extends EventTarget { getState(): any; addEventListener( type: K, - listener: (this: NavigationHistoryEntry, ev: NavigationHistoryEntryEventMap[K]) => any, + listener: ( + this: NavigationHistoryEntry, + ev: NavigationHistoryEntryEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -18269,7 +18904,10 @@ interface NavigationHistoryEntry extends EventTarget { ): void; removeEventListener( type: K, - listener: (this: NavigationHistoryEntry, ev: NavigationHistoryEntryEventMap[K]) => any, + listener: ( + this: NavigationHistoryEntry, + ev: NavigationHistoryEntryEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -18323,7 +18961,8 @@ declare var NavigationTransition: { }; interface Navigator - extends GlobalPrivacyControl, + extends + GlobalPrivacyControl, NavigatorAutomationInformation, NavigatorConcurrentHardware, NavigatorContentUtils, @@ -18415,7 +19054,11 @@ interface NavigatorConcurrentHardware { } interface NavigatorContentUtils { - checkProtocolHandlerAllowed(scheme: string, handlerURI: URI, documentURI: URI): void; + checkProtocolHandlerAllowed( + scheme: string, + handlerURI: URI, + documentURI: URI + ): void; /** Available only in secure contexts. */ registerProtocolHandler(scheme: string, url: string): void; } @@ -18478,7 +19121,10 @@ interface NetworkInformation extends EventTarget { readonly type: ConnectionType; addEventListener( type: K, - listener: (this: NetworkInformation, ev: NetworkInformationEventMap[K]) => any, + listener: ( + this: NetworkInformation, + ev: NetworkInformationEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -18488,7 +19134,10 @@ interface NetworkInformation extends EventTarget { ): void; removeEventListener( type: K, - listener: (this: NetworkInformation, ev: NetworkInformationEventMap[K]) => any, + listener: ( + this: NetworkInformation, + ev: NetworkInformationEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -18700,7 +19349,11 @@ declare var NotifyPaintEvent: { }; interface OES_draw_buffers_indexed { - blendEquationSeparateiOES(buf: GLuint, modeRGB: GLenum, modeAlpha: GLenum): void; + blendEquationSeparateiOES( + buf: GLuint, + modeRGB: GLenum, + modeAlpha: GLenum + ): void; blendEquationiOES(buf: GLuint, mode: GLenum): void; blendFuncSeparateiOES( buf: GLuint, @@ -18710,7 +19363,13 @@ interface OES_draw_buffers_indexed { dstAlpha: GLenum ): void; blendFunciOES(buf: GLuint, src: GLenum, dst: GLenum): void; - colorMaskiOES(buf: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean): void; + colorMaskiOES( + buf: GLuint, + r: GLboolean, + g: GLboolean, + b: GLboolean, + a: GLboolean + ): void; disableiOES(target: GLenum, index: GLuint): void; enableiOES(target: GLenum, index: GLuint): void; } @@ -18762,7 +19421,10 @@ interface OfflineAudioCompletionEvent extends Event { declare var OfflineAudioCompletionEvent: { prototype: OfflineAudioCompletionEvent; - new (type: string, eventInitDict: OfflineAudioCompletionEventInit): OfflineAudioCompletionEvent; + new ( + type: string, + eventInitDict: OfflineAudioCompletionEventInit + ): OfflineAudioCompletionEvent; isInstance: IsInstance; }; @@ -18776,7 +19438,10 @@ interface OfflineAudioContext extends BaseAudioContext { startRendering(): Promise; addEventListener( type: K, - listener: (this: OfflineAudioContext, ev: OfflineAudioContextEventMap[K]) => any, + listener: ( + this: OfflineAudioContext, + ev: OfflineAudioContextEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -18786,7 +19451,10 @@ interface OfflineAudioContext extends BaseAudioContext { ): void; removeEventListener( type: K, - listener: (this: OfflineAudioContext, ev: OfflineAudioContextEventMap[K]) => any, + listener: ( + this: OfflineAudioContext, + ev: OfflineAudioContextEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -18799,7 +19467,11 @@ interface OfflineAudioContext extends BaseAudioContext { declare var OfflineAudioContext: { prototype: OfflineAudioContext; new (contextOptions: OfflineAudioContextOptions): OfflineAudioContext; - new (numberOfChannels: number, length: number, sampleRate: number): OfflineAudioContext; + new ( + numberOfChannels: number, + length: number, + sampleRate: number + ): OfflineAudioContext; isInstance: IsInstance; }; @@ -18849,7 +19521,8 @@ declare var OffscreenCanvas: { }; interface OffscreenCanvasRenderingContext2D - extends CanvasCompositing, + extends + CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, @@ -18942,14 +19615,18 @@ interface OnErrorEventHandlerForWindow { ): void; } -interface OscillatorNode extends AudioScheduledSourceNode, AudioNodePassThrough { +interface OscillatorNode + extends AudioScheduledSourceNode, AudioNodePassThrough { readonly detune: AudioParam; readonly frequency: AudioParam; type: OscillatorType; setPeriodicWave(periodicWave: PeriodicWave): void; addEventListener( type: K, - listener: (this: OscillatorNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, + listener: ( + this: OscillatorNode, + ev: AudioScheduledSourceNodeEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -18959,7 +19636,10 @@ interface OscillatorNode extends AudioScheduledSourceNode, AudioNodePassThrough ): void; removeEventListener( type: K, - listener: (this: OscillatorNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, + listener: ( + this: OscillatorNode, + ev: AudioScheduledSourceNodeEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -18982,7 +19662,10 @@ interface PageTransitionEvent extends Event { declare var PageTransitionEvent: { prototype: PageTransitionEvent; - new (type: string, eventInitDict?: PageTransitionEventInit): PageTransitionEvent; + new ( + type: string, + eventInitDict?: PageTransitionEventInit + ): PageTransitionEvent; isInstance: IsInstance; }; @@ -19056,7 +19739,9 @@ interface ParentNode { querySelector( selectors: K ): HTMLElementTagNameMap[K] | null; - querySelector(selectors: K): SVGElementTagNameMap[K] | null; + querySelector( + selectors: K + ): SVGElementTagNameMap[K] | null; querySelector( selectors: K ): MathMLElementTagNameMap[K] | null; @@ -19078,14 +19763,14 @@ interface ParentNode { querySelectorAll( selectors: K ): NodeListOf; - querySelectorAll(selectors: string): NodeListOf; + querySelectorAll( + selectors: string + ): NodeListOf; replaceChildren(...nodes: (Node | string)[]): void; } interface ParentProcessMessageManager - extends MessageBroadcaster, - GlobalProcessScriptLoader, - ProcessScriptLoader {} + extends MessageBroadcaster, GlobalProcessScriptLoader, ProcessScriptLoader {} declare var ParentProcessMessageManager: { prototype: ParentProcessMessageManager; @@ -19135,7 +19820,10 @@ interface PaymentMethodChangeEvent extends PaymentRequestUpdateEvent { declare var PaymentMethodChangeEvent: { prototype: PaymentMethodChangeEvent; - new (type: string, eventInitDict?: PaymentMethodChangeEventInit): PaymentMethodChangeEvent; + new ( + type: string, + eventInitDict?: PaymentMethodChangeEventInit + ): PaymentMethodChangeEvent; isInstance: IsInstance; }; @@ -19195,12 +19883,17 @@ declare var PaymentRequest: { /** Available only in secure contexts. */ interface PaymentRequestUpdateEvent extends Event { - updateWith(detailsPromise: PaymentDetailsUpdate | PromiseLike): void; + updateWith( + detailsPromise: PaymentDetailsUpdate | PromiseLike + ): void; } declare var PaymentRequestUpdateEvent: { prototype: PaymentRequestUpdateEvent; - new (type: string, eventInitDict?: PaymentRequestUpdateEventInit): PaymentRequestUpdateEvent; + new ( + type: string, + eventInitDict?: PaymentRequestUpdateEventInit + ): PaymentRequestUpdateEvent; isInstance: IsInstance; }; @@ -19268,7 +19961,12 @@ interface PeerConnectionImpl { readonly privacyRequested: boolean; readonly sctp: RTCSctpTransport | null; readonly signalingState: RTCSignalingState; - addIceCandidate(candidate: string, mid: string, ufrag: string, level: number | null): void; + addIceCandidate( + candidate: string, + mid: string, + ufrag: string, + level: number | null + ): void; addTransceiver( init: RTCRtpTransceiverInit, kind: string, @@ -19291,8 +19989,16 @@ interface PeerConnectionImpl { ): RTCDataChannel; createOffer(options?: RTCOfferOptions): void; createdSender(sender: RTCRtpSender): boolean; - disablePacketDump(level: number, type: mozPacketDumpType, sending: boolean): void; - enablePacketDump(level: number, type: mozPacketDumpType, sending: boolean): void; + disablePacketDump( + level: number, + type: mozPacketDumpType, + sending: boolean + ): void; + enablePacketDump( + level: number, + type: mozPacketDumpType, + sending: boolean + ): void; getRemoteStreams(): MediaStream[]; getStats(selector: MediaStreamTrack | null): Promise; getTransceivers(): RTCRtpTransceiver[]; @@ -19325,8 +20031,18 @@ interface PeerConnectionObserver { onCreateAnswerSuccess(answer: string): void; onCreateOfferError(error: PCErrorData): void; onCreateOfferSuccess(offer: string): void; - onIceCandidate(level: number, mid: string, candidate: string, ufrag: string): void; - onPacket(level: number, type: mozPacketDumpType, sending: boolean, packet: ArrayBuffer): void; + onIceCandidate( + level: number, + mid: string, + candidate: string, + ufrag: string + ): void; + onPacket( + level: number, + type: mozPacketDumpType, + sending: boolean, + packet: ArrayBuffer + ): void; onSetDescriptionError(error: PCErrorData): void; onSetDescriptionSuccess(): void; onStateChange(state: PCObserverStateType): void; @@ -19418,7 +20134,10 @@ interface PerformanceEntryEvent extends Event { declare var PerformanceEntryEvent: { prototype: PerformanceEntryEvent; - new (type: string, eventInitDict?: PerformanceEntryEventInit): PerformanceEntryEvent; + new ( + type: string, + eventInitDict?: PerformanceEntryEventInit + ): PerformanceEntryEvent; isInstance: IsInstance; }; @@ -19961,7 +20680,10 @@ interface PluginCrashedEvent extends Event { declare var PluginCrashedEvent: { prototype: PluginCrashedEvent; - new (type: string, eventInitDict?: PluginCrashedEventInit): PluginCrashedEvent; + new ( + type: string, + eventInitDict?: PluginCrashedEventInit + ): PluginCrashedEvent; isInstance: IsInstance; }; @@ -20038,7 +20760,10 @@ interface PositionStateEvent extends Event { declare var PositionStateEvent: { prototype: PositionStateEvent; - new (type: string, eventInitDict?: PositionStateEventInit): PositionStateEvent; + new ( + type: string, + eventInitDict?: PositionStateEventInit + ): PositionStateEvent; isInstance: IsInstance; }; @@ -20114,7 +20839,10 @@ interface PromiseRejectionEvent extends Event { declare var PromiseRejectionEvent: { prototype: PromiseRejectionEvent; - new (type: string, eventInitDict: PromiseRejectionEventInit): PromiseRejectionEvent; + new ( + type: string, + eventInitDict: PromiseRejectionEventInit + ): PromiseRejectionEvent; isInstance: IsInstance; }; @@ -20144,7 +20872,9 @@ declare var PublicKeyCredential: { interface PushManager { getSubscription(): Promise; - permissionState(options?: PushSubscriptionOptionsInit): Promise; + permissionState( + options?: PushSubscriptionOptionsInit + ): Promise; subscribe(options?: PushSubscriptionOptionsInit): Promise; } @@ -20157,7 +20887,9 @@ declare var PushManager: { interface PushManagerImpl { getSubscription(): Promise; - permissionState(options?: PushSubscriptionOptionsInit): Promise; + permissionState( + options?: PushSubscriptionOptionsInit + ): Promise; subscribe(options?: PushSubscriptionOptionsInit): Promise; } @@ -20246,7 +20978,10 @@ interface RTCDTMFToneChangeEvent extends Event { declare var RTCDTMFToneChangeEvent: { prototype: RTCDTMFToneChangeEvent; - new (type: string, eventInitDict?: RTCDTMFToneChangeEventInit): RTCDTMFToneChangeEvent; + new ( + type: string, + eventInitDict?: RTCDTMFToneChangeEventInit + ): RTCDTMFToneChangeEvent; isInstance: IsInstance; }; @@ -20316,7 +21051,10 @@ interface RTCDataChannelEvent extends Event { declare var RTCDataChannelEvent: { prototype: RTCDataChannelEvent; - new (type: string, eventInitDict: RTCDataChannelEventInit): RTCDataChannelEvent; + new ( + type: string, + eventInitDict: RTCDataChannelEventInit + ): RTCDataChannelEvent; isInstance: IsInstance; }; @@ -20457,7 +21195,10 @@ interface RTCIdentityProviderRegistrar { options?: RTCIdentityProviderOptions ): Promise; register(idp: RTCIdentityProvider): void; - validateAssertion(assertion: string, origin: string): Promise; + validateAssertion( + assertion: string, + origin: string + ): Promise; } interface RTCPeerConnectionEventMap { @@ -20488,8 +21229,10 @@ interface RTCPeerConnection extends EventTarget { onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null; ondatachannel: ((this: RTCPeerConnection, ev: Event) => any) | null; onicecandidate: ((this: RTCPeerConnection, ev: Event) => any) | null; - oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null; - onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null; + oniceconnectionstatechange: + ((this: RTCPeerConnection, ev: Event) => any) | null; + onicegatheringstatechange: + ((this: RTCPeerConnection, ev: Event) => any) | null; onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null; onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null; ontrack: ((this: RTCPeerConnection, ev: Event) => any) | null; @@ -20499,7 +21242,9 @@ interface RTCPeerConnection extends EventTarget { readonly remoteDescription: RTCSessionDescription | null; readonly sctp: RTCSctpTransport | null; readonly signalingState: RTCSignalingState; - addIceCandidate(candidate?: RTCIceCandidateInit | RTCIceCandidate): Promise; + addIceCandidate( + candidate?: RTCIceCandidateInit | RTCIceCandidate + ): Promise; addIceCandidate( candidate: RTCIceCandidateInit, successCallback: VoidFunction, @@ -20517,7 +21262,10 @@ interface RTCPeerConnection extends EventTarget { successCallback: RTCSessionDescriptionCallback, failureCallback: RTCPeerConnectionErrorCallback ): Promise; - createDataChannel(label: string, dataChannelDict?: RTCDataChannelInit): RTCDataChannel; + createDataChannel( + label: string, + dataChannelDict?: RTCDataChannelInit + ): RTCDataChannel; createOffer(options?: RTCOfferOptions): Promise; createOffer( successCallback: RTCSessionDescriptionCallback, @@ -20532,14 +21280,27 @@ interface RTCPeerConnection extends EventTarget { getSenders(): RTCRtpSender[]; getStats(selector?: MediaStreamTrack | null): Promise; getTransceivers(): RTCRtpTransceiver[]; - mozDisablePacketDump(level: number, type: mozPacketDumpType, sending: boolean): void; - mozEnablePacketDump(level: number, type: mozPacketDumpType, sending: boolean): void; + mozDisablePacketDump( + level: number, + type: mozPacketDumpType, + sending: boolean + ): void; + mozEnablePacketDump( + level: number, + type: mozPacketDumpType, + sending: boolean + ): void; mozSetPacketCallback(callback: mozPacketCallback): void; removeTrack(sender: RTCRtpSender): void; restartIce(): void; setConfiguration(configuration?: RTCConfiguration): void; - setIdentityProvider(provider: string, options?: RTCIdentityProviderOptions): void; - setLocalDescription(description?: RTCLocalSessionDescriptionInit): Promise; + setIdentityProvider( + provider: string, + options?: RTCIdentityProviderOptions + ): void; + setLocalDescription( + description?: RTCLocalSessionDescriptionInit + ): Promise; setLocalDescription( description: RTCLocalSessionDescriptionInit, successCallback: VoidFunction, @@ -20553,7 +21314,10 @@ interface RTCPeerConnection extends EventTarget { ): Promise; addEventListener( type: K, - listener: (this: RTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, + listener: ( + this: RTCPeerConnection, + ev: RTCPeerConnectionEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -20563,7 +21327,10 @@ interface RTCPeerConnection extends EventTarget { ): void; removeEventListener( type: K, - listener: (this: RTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, + listener: ( + this: RTCPeerConnection, + ev: RTCPeerConnectionEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -20577,7 +21344,9 @@ declare var RTCPeerConnection: { prototype: RTCPeerConnection; new (configuration?: RTCConfiguration): RTCPeerConnection; isInstance: IsInstance; - generateCertificate(keygenAlgorithm: AlgorithmIdentifier): Promise; + generateCertificate( + keygenAlgorithm: AlgorithmIdentifier + ): Promise; }; interface RTCPeerConnectionIceEvent extends Event { @@ -20586,12 +21355,17 @@ interface RTCPeerConnectionIceEvent extends Event { declare var RTCPeerConnectionIceEvent: { prototype: RTCPeerConnectionIceEvent; - new (type: string, eventInitDict?: RTCPeerConnectionIceEventInit): RTCPeerConnectionIceEvent; + new ( + type: string, + eventInitDict?: RTCPeerConnectionIceEventInit + ): RTCPeerConnectionIceEvent; isInstance: IsInstance; }; interface RTCPeerConnectionStatic { - registerPeerConnectionLifecycleCallback(cb: PeerConnectionLifecycleCallback): void; + registerPeerConnectionLifecycleCallback( + cb: PeerConnectionLifecycleCallback + ): void; } declare var RTCPeerConnectionStatic: { @@ -20825,8 +21599,14 @@ interface ReadableStream { readonly locked: boolean; cancel(reason?: any): Promise; getReader(options?: ReadableStreamGetReaderOptions): ReadableStreamReader; - pipeThrough(transform: ReadableWritablePair, options?: StreamPipeOptions): ReadableStream; - pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise; + pipeThrough( + transform: ReadableWritablePair, + options?: StreamPipeOptions + ): ReadableStream; + pipeTo( + destination: WritableStream, + options?: StreamPipeOptions + ): Promise; tee(): ReadableStream[]; } @@ -20899,7 +21679,10 @@ interface RedirectBlockedEvent extends Event { declare var RedirectBlockedEvent: { prototype: RedirectBlockedEvent; - new (type: string, eventInitDict?: RedirectBlockedEventInit): RedirectBlockedEvent; + new ( + type: string, + eventInitDict?: RedirectBlockedEventInit + ): RedirectBlockedEvent; isInstance: IsInstance; }; @@ -20934,7 +21717,10 @@ interface ReportingObserver { declare var ReportingObserver: { prototype: ReportingObserver; - new (callback: ReportingObserverCallback, options?: ReportingObserverOptions): ReportingObserver; + new ( + callback: ReportingObserverCallback, + options?: ReportingObserverOptions + ): ReportingObserver; isInstance: IsInstance; }; @@ -21017,7 +21803,14 @@ interface Response extends Body { declare var Response: { prototype: Response; new ( - body?: Blob | BufferSource | FormData | URLSearchParams | ReadableStream | string | null, + body?: + | Blob + | BufferSource + | FormData + | URLSearchParams + | ReadableStream + | string + | null, init?: ResponseInit ): Response; isInstance: IsInstance; @@ -21092,7 +21885,10 @@ declare var SVGAngle: { interface SVGAnimateElement extends SVGAnimationElement { addEventListener( type: K, - listener: (this: SVGAnimateElement, ev: SVGAnimationElementEventMap[K]) => any, + listener: ( + this: SVGAnimateElement, + ev: SVGAnimationElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21102,7 +21898,10 @@ interface SVGAnimateElement extends SVGAnimationElement { ): void; removeEventListener( type: K, - listener: (this: SVGAnimateElement, ev: SVGAnimationElementEventMap[K]) => any, + listener: ( + this: SVGAnimateElement, + ev: SVGAnimationElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21121,7 +21920,10 @@ declare var SVGAnimateElement: { interface SVGAnimateMotionElement extends SVGAnimationElement { addEventListener( type: K, - listener: (this: SVGAnimateMotionElement, ev: SVGAnimationElementEventMap[K]) => any, + listener: ( + this: SVGAnimateMotionElement, + ev: SVGAnimationElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21131,7 +21933,10 @@ interface SVGAnimateMotionElement extends SVGAnimationElement { ): void; removeEventListener( type: K, - listener: (this: SVGAnimateMotionElement, ev: SVGAnimationElementEventMap[K]) => any, + listener: ( + this: SVGAnimateMotionElement, + ev: SVGAnimationElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21150,7 +21955,10 @@ declare var SVGAnimateMotionElement: { interface SVGAnimateTransformElement extends SVGAnimationElement { addEventListener( type: K, - listener: (this: SVGAnimateTransformElement, ev: SVGAnimationElementEventMap[K]) => any, + listener: ( + this: SVGAnimateTransformElement, + ev: SVGAnimationElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21160,7 +21968,10 @@ interface SVGAnimateTransformElement extends SVGAnimationElement { ): void; removeEventListener( type: K, - listener: (this: SVGAnimateTransformElement, ev: SVGAnimationElementEventMap[K]) => any, + listener: ( + this: SVGAnimateTransformElement, + ev: SVGAnimationElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21333,7 +22144,10 @@ interface SVGAnimationElement extends SVGElement, SVGTests { getStartTime(): number; addEventListener( type: K, - listener: (this: SVGAnimationElement, ev: SVGAnimationElementEventMap[K]) => any, + listener: ( + this: SVGAnimationElement, + ev: SVGAnimationElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21343,7 +22157,10 @@ interface SVGAnimationElement extends SVGElement, SVGTests { ): void; removeEventListener( type: K, - listener: (this: SVGAnimationElement, ev: SVGAnimationElementEventMap[K]) => any, + listener: ( + this: SVGAnimationElement, + ev: SVGAnimationElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21438,7 +22255,10 @@ interface SVGComponentTransferFunctionElement extends SVGElement { readonly SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: 5; addEventListener( type: K, - listener: (this: SVGComponentTransferFunctionElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGComponentTransferFunctionElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21448,7 +22268,10 @@ interface SVGComponentTransferFunctionElement extends SVGElement { ): void; removeEventListener( type: K, - listener: (this: SVGComponentTransferFunctionElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGComponentTransferFunctionElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21529,14 +22352,16 @@ declare var SVGDescElement: { }; interface SVGElementEventMap - extends ElementEventMap, + extends + ElementEventMap, GlobalEventHandlersEventMap, OnErrorEventHandlerForNodesEventMap, TouchEventHandlersEventMap {} // @ts-ignore interface SVGElement - extends Element, + extends + Element, ElementCSSInlineStyle, GlobalEventHandlers, HTMLOrForeignElement, @@ -21608,7 +22433,8 @@ declare var SVGEllipseElement: { isInstance: IsInstance; }; -interface SVGFEBlendElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEBlendElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly in1: SVGAnimatedString; readonly in2: SVGAnimatedString; readonly mode: SVGAnimatedEnumeration; @@ -21674,7 +22500,8 @@ declare var SVGFEBlendElement: { isInstance: IsInstance; }; -interface SVGFEColorMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEColorMatrixElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly in1: SVGAnimatedString; readonly type: SVGAnimatedEnumeration; readonly values: SVGAnimatedNumberList; @@ -21716,11 +22543,15 @@ declare var SVGFEColorMatrixElement: { isInstance: IsInstance; }; -interface SVGFEComponentTransferElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEComponentTransferElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly in1: SVGAnimatedString; addEventListener( type: K, - listener: (this: SVGFEComponentTransferElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEComponentTransferElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21730,7 +22561,10 @@ interface SVGFEComponentTransferElement extends SVGElement, SVGFilterPrimitiveSt ): void; removeEventListener( type: K, - listener: (this: SVGFEComponentTransferElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEComponentTransferElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21746,7 +22580,8 @@ declare var SVGFEComponentTransferElement: { isInstance: IsInstance; }; -interface SVGFECompositeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFECompositeElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly in1: SVGAnimatedString; readonly in2: SVGAnimatedString; readonly k1: SVGAnimatedNumber; @@ -21798,7 +22633,8 @@ declare var SVGFECompositeElement: { isInstance: IsInstance; }; -interface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEConvolveMatrixElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly bias: SVGAnimatedNumber; readonly divisor: SVGAnimatedNumber; readonly edgeMode: SVGAnimatedEnumeration; @@ -21817,7 +22653,10 @@ interface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStand readonly SVG_EDGEMODE_NONE: 3; addEventListener( type: K, - listener: (this: SVGFEConvolveMatrixElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEConvolveMatrixElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21827,7 +22666,10 @@ interface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStand ): void; removeEventListener( type: K, - listener: (this: SVGFEConvolveMatrixElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEConvolveMatrixElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21847,7 +22689,8 @@ declare var SVGFEConvolveMatrixElement: { isInstance: IsInstance; }; -interface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEDiffuseLightingElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly diffuseConstant: SVGAnimatedNumber; readonly in1: SVGAnimatedString; readonly kernelUnitLengthX: SVGAnimatedNumber; @@ -21855,7 +22698,10 @@ interface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStan readonly surfaceScale: SVGAnimatedNumber; addEventListener( type: K, - listener: (this: SVGFEDiffuseLightingElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEDiffuseLightingElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21865,7 +22711,10 @@ interface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStan ): void; removeEventListener( type: K, - listener: (this: SVGFEDiffuseLightingElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEDiffuseLightingElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21881,7 +22730,8 @@ declare var SVGFEDiffuseLightingElement: { isInstance: IsInstance; }; -interface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEDisplacementMapElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly in1: SVGAnimatedString; readonly in2: SVGAnimatedString; readonly scale: SVGAnimatedNumber; @@ -21894,7 +22744,10 @@ interface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStan readonly SVG_CHANNEL_A: 4; addEventListener( type: K, - listener: (this: SVGFEDisplacementMapElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEDisplacementMapElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21904,7 +22757,10 @@ interface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStan ): void; removeEventListener( type: K, - listener: (this: SVGFEDisplacementMapElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEDisplacementMapElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21930,7 +22786,10 @@ interface SVGFEDistantLightElement extends SVGElement { readonly elevation: SVGAnimatedNumber; addEventListener( type: K, - listener: (this: SVGFEDistantLightElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEDistantLightElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -21940,7 +22799,10 @@ interface SVGFEDistantLightElement extends SVGElement { ): void; removeEventListener( type: K, - listener: (this: SVGFEDistantLightElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEDistantLightElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -21956,7 +22818,8 @@ declare var SVGFEDistantLightElement: { isInstance: IsInstance; }; -interface SVGFEDropShadowElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEDropShadowElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly dx: SVGAnimatedNumber; readonly dy: SVGAnimatedNumber; readonly in1: SVGAnimatedString; @@ -21991,7 +22854,8 @@ declare var SVGFEDropShadowElement: { isInstance: IsInstance; }; -interface SVGFEFloodElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEFloodElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { addEventListener( type: K, listener: (this: SVGFEFloodElement, ev: SVGElementEventMap[K]) => any, @@ -22136,14 +23000,18 @@ declare var SVGFEFuncRElement: { isInstance: IsInstance; }; -interface SVGFEGaussianBlurElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEGaussianBlurElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly in1: SVGAnimatedString; readonly stdDeviationX: SVGAnimatedNumber; readonly stdDeviationY: SVGAnimatedNumber; setStdDeviation(stdDeviationX: number, stdDeviationY: number): void; addEventListener( type: K, - listener: (this: SVGFEGaussianBlurElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEGaussianBlurElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -22153,7 +23021,10 @@ interface SVGFEGaussianBlurElement extends SVGElement, SVGFilterPrimitiveStandar ): void; removeEventListener( type: K, - listener: (this: SVGFEGaussianBlurElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFEGaussianBlurElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -22170,9 +23041,7 @@ declare var SVGFEGaussianBlurElement: { }; interface SVGFEImageElement - extends SVGElement, - SVGFilterPrimitiveStandardAttributes, - SVGURIReference { + extends SVGElement, SVGFilterPrimitiveStandardAttributes, SVGURIReference { crossOrigin: string | null; fetchPriority: string; readonly preserveAspectRatio: SVGAnimatedPreserveAspectRatio; @@ -22204,7 +23073,8 @@ declare var SVGFEImageElement: { isInstance: IsInstance; }; -interface SVGFEMergeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEMergeElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { addEventListener( type: K, listener: (this: SVGFEMergeElement, ev: SVGElementEventMap[K]) => any, @@ -22263,7 +23133,8 @@ declare var SVGFEMergeNodeElement: { isInstance: IsInstance; }; -interface SVGFEMorphologyElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEMorphologyElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly in1: SVGAnimatedString; readonly operator: SVGAnimatedEnumeration; readonly radiusX: SVGAnimatedNumber; @@ -22302,7 +23173,8 @@ declare var SVGFEMorphologyElement: { isInstance: IsInstance; }; -interface SVGFEOffsetElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFEOffsetElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly dx: SVGAnimatedNumber; readonly dy: SVGAnimatedNumber; readonly in1: SVGAnimatedString; @@ -22366,7 +23238,8 @@ declare var SVGFEPointLightElement: { isInstance: IsInstance; }; -interface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFESpecularLightingElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly in1: SVGAnimatedString; readonly kernelUnitLengthX: SVGAnimatedNumber; readonly kernelUnitLengthY: SVGAnimatedNumber; @@ -22375,7 +23248,10 @@ interface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveSta readonly surfaceScale: SVGAnimatedNumber; addEventListener( type: K, - listener: (this: SVGFESpecularLightingElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFESpecularLightingElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -22385,7 +23261,10 @@ interface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveSta ): void; removeEventListener( type: K, - listener: (this: SVGFESpecularLightingElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGFESpecularLightingElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -22438,7 +23317,8 @@ declare var SVGFESpotLightElement: { isInstance: IsInstance; }; -interface SVGFETileElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFETileElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly in1: SVGAnimatedString; addEventListener( type: K, @@ -22468,7 +23348,8 @@ declare var SVGFETileElement: { isInstance: IsInstance; }; -interface SVGFETurbulenceElement extends SVGElement, SVGFilterPrimitiveStandardAttributes { +interface SVGFETurbulenceElement + extends SVGElement, SVGFilterPrimitiveStandardAttributes { readonly baseFrequencyX: SVGAnimatedNumber; readonly baseFrequencyY: SVGAnimatedNumber; readonly numOctaves: SVGAnimatedInteger; @@ -22732,7 +23613,8 @@ declare var SVGGraphicsElement: { isInstance: IsInstance; }; -interface SVGImageElement extends SVGGraphicsElement, MozImageLoadingContent, SVGURIReference { +interface SVGImageElement + extends SVGGraphicsElement, MozImageLoadingContent, SVGURIReference { crossOrigin: string | null; decoding: string; fetchPriority: string; @@ -22869,7 +23751,10 @@ interface SVGLinearGradientElement extends SVGGradientElement { readonly y2: SVGAnimatedLength; addEventListener( type: K, - listener: (this: SVGLinearGradientElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGLinearGradientElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -22879,7 +23764,10 @@ interface SVGLinearGradientElement extends SVGGradientElement { ): void; removeEventListener( type: K, - listener: (this: SVGLinearGradientElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGLinearGradientElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -23139,7 +24027,8 @@ interface SVGPathSegment { values: number[] | Float32Array; } -interface SVGPatternElement extends SVGElement, SVGFitToViewBox, SVGURIReference { +interface SVGPatternElement + extends SVGElement, SVGFitToViewBox, SVGURIReference { readonly height: SVGAnimatedLength; readonly patternContentUnits: SVGAnimatedEnumeration; readonly patternTransform: SVGAnimatedTransformList; @@ -23312,7 +24201,10 @@ interface SVGRadialGradientElement extends SVGGradientElement { readonly r: SVGAnimatedLength; addEventListener( type: K, - listener: (this: SVGRadialGradientElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGRadialGradientElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -23322,7 +24214,10 @@ interface SVGRadialGradientElement extends SVGGradientElement { ): void; removeEventListener( type: K, - listener: (this: SVGRadialGradientElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGRadialGradientElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -23386,7 +24281,8 @@ declare var SVGRectElement: { isInstance: IsInstance; }; -interface SVGSVGElement extends SVGGraphicsElement, SVGFitToViewBox, SVGZoomAndPan { +interface SVGSVGElement + extends SVGGraphicsElement, SVGFitToViewBox, SVGZoomAndPan { currentScale: number; readonly currentTranslate: SVGPoint; readonly height: SVGAnimatedLength; @@ -23807,7 +24703,10 @@ interface SVGTextPositioningElement extends SVGTextContentElement { readonly y: SVGAnimatedLengthList; addEventListener( type: K, - listener: (this: SVGTextPositioningElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGTextPositioningElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -23817,7 +24716,10 @@ interface SVGTextPositioningElement extends SVGTextContentElement { ): void; removeEventListener( type: K, - listener: (this: SVGTextPositioningElement, ev: SVGElementEventMap[K]) => any, + listener: ( + this: SVGTextPositioningElement, + ev: SVGElementEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -24025,7 +24927,10 @@ declare var Sanitizer: { }; interface Scheduler { - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask( + callback: SchedulerPostTaskCallback, + options?: SchedulerPostTaskOptions + ): Promise; yield(): Promise; } @@ -24112,7 +25017,10 @@ interface ScreenOrientation extends EventTarget { unlock(): void; addEventListener( type: K, - listener: (this: ScreenOrientation, ev: ScreenOrientationEventMap[K]) => any, + listener: ( + this: ScreenOrientation, + ev: ScreenOrientationEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -24122,7 +25030,10 @@ interface ScreenOrientation extends EventTarget { ): void; removeEventListener( type: K, - listener: (this: ScreenOrientation, ev: ScreenOrientationEventMap[K]) => any, + listener: ( + this: ScreenOrientation, + ev: ScreenOrientationEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -24147,7 +25058,10 @@ interface ScriptProcessorNode extends AudioNode, AudioNodePassThrough { onaudioprocess: ((this: ScriptProcessorNode, ev: Event) => any) | null; addEventListener( type: K, - listener: (this: ScriptProcessorNode, ev: ScriptProcessorNodeEventMap[K]) => any, + listener: ( + this: ScriptProcessorNode, + ev: ScriptProcessorNodeEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -24157,7 +25071,10 @@ interface ScriptProcessorNode extends AudioNode, AudioNodePassThrough { ): void; removeEventListener( type: K, - listener: (this: ScriptProcessorNode, ev: ScriptProcessorNodeEventMap[K]) => any, + listener: ( + this: ScriptProcessorNode, + ev: ScriptProcessorNodeEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -24275,7 +25192,11 @@ interface Selection { aAltBackgroundColor: string ): void; setPosition(node: Node | null, offset?: number): void; - toStringWithFormat(formatType: string, flags: number, wrapColumn: number): string; + toStringWithFormat( + formatType: string, + flags: number, + wrapColumn: number + ): string; toString(): string; } @@ -24335,7 +25256,9 @@ interface ServiceWorkerContainer extends EventTarget { onmessage: ((this: ServiceWorkerContainer, ev: Event) => any) | null; onmessageerror: ((this: ServiceWorkerContainer, ev: Event) => any) | null; readonly ready: Promise; - getRegistration(documentURL?: string | URL): Promise; + getRegistration( + documentURL?: string | URL + ): Promise; getRegistrations(): Promise; register( scriptURL: TrustedScriptURL | string, @@ -24344,7 +25267,10 @@ interface ServiceWorkerContainer extends EventTarget { startMessages(): void; addEventListener( type: K, - listener: (this: ServiceWorkerContainer, ev: ServiceWorkerContainerEventMap[K]) => any, + listener: ( + this: ServiceWorkerContainer, + ev: ServiceWorkerContainerEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -24354,7 +25280,10 @@ interface ServiceWorkerContainer extends EventTarget { ): void; removeEventListener( type: K, - listener: (this: ServiceWorkerContainer, ev: ServiceWorkerContainerEventMap[K]) => any, + listener: ( + this: ServiceWorkerContainer, + ev: ServiceWorkerContainerEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -24390,7 +25319,10 @@ interface ServiceWorkerRegistration extends EventTarget { update(): Promise; addEventListener( type: K, - listener: (this: ServiceWorkerRegistration, ev: ServiceWorkerRegistrationEventMap[K]) => any, + listener: ( + this: ServiceWorkerRegistration, + ev: ServiceWorkerRegistrationEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -24400,7 +25332,10 @@ interface ServiceWorkerRegistration extends EventTarget { ): void; removeEventListener( type: K, - listener: (this: ServiceWorkerRegistration, ev: ServiceWorkerRegistrationEventMap[K]) => any, + listener: ( + this: ServiceWorkerRegistration, + ev: ServiceWorkerRegistrationEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -24460,10 +25395,17 @@ interface ShadowRoot extends DocumentFragment, DocumentOrShadowRoot { createElementAndAppendChildAt(parentNode: Node, localName: string): Node; getElementById(elementId: string): Element | null; getHTML(options?: GetHTMLOptions): string; - importNodeAndAppendChildAt(parentNode: Node, node: Node, deep?: boolean): Node; + importNodeAndAppendChildAt( + parentNode: Node, + node: Node, + deep?: boolean + ): Node; isUAWidget(): boolean; setHTML(aInnerHTML: string, options?: SetHTMLOptions): void; - setHTMLUnsafe(html: TrustedHTML | string, options?: SetHTMLUnsafeOptions): void; + setHTMLUnsafe( + html: TrustedHTML | string, + options?: SetHTMLUnsafeOptions + ): void; setIsUAWidget(): void; addEventListener( type: K, @@ -24519,7 +25461,10 @@ interface SharedWorker extends EventTarget, AbstractWorker { declare var SharedWorker: { prototype: SharedWorker; - new (scriptURL: TrustedScriptURL | string, options?: string | WorkerOptions): SharedWorker; + new ( + scriptURL: TrustedScriptURL | string, + options?: string | WorkerOptions + ): SharedWorker; isInstance: IsInstance; }; @@ -24725,7 +25670,10 @@ interface SpeechRecognition extends EventTarget { stop(): void; addEventListener( type: K, - listener: (this: SpeechRecognition, ev: SpeechRecognitionEventMap[K]) => any, + listener: ( + this: SpeechRecognition, + ev: SpeechRecognitionEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -24735,7 +25683,10 @@ interface SpeechRecognition extends EventTarget { ): void; removeEventListener( type: K, - listener: (this: SpeechRecognition, ev: SpeechRecognitionEventMap[K]) => any, + listener: ( + this: SpeechRecognition, + ev: SpeechRecognitionEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -24769,7 +25720,10 @@ interface SpeechRecognitionError extends Event { declare var SpeechRecognitionError: { prototype: SpeechRecognitionError; - new (type: string, eventInitDict?: SpeechRecognitionErrorInit): SpeechRecognitionError; + new ( + type: string, + eventInitDict?: SpeechRecognitionErrorInit + ): SpeechRecognitionError; isInstance: IsInstance; }; @@ -24782,7 +25736,10 @@ interface SpeechRecognitionEvent extends Event { declare var SpeechRecognitionEvent: { prototype: SpeechRecognitionEvent; - new (type: string, eventInitDict?: SpeechRecognitionEventInit): SpeechRecognitionEvent; + new ( + type: string, + eventInitDict?: SpeechRecognitionEventInit + ): SpeechRecognitionEvent; isInstance: IsInstance; }; @@ -24860,7 +25817,10 @@ interface SpeechSynthesisErrorEvent extends SpeechSynthesisEvent { declare var SpeechSynthesisErrorEvent: { prototype: SpeechSynthesisErrorEvent; - new (type: string, eventInitDict: SpeechSynthesisErrorEventInit): SpeechSynthesisErrorEvent; + new ( + type: string, + eventInitDict: SpeechSynthesisErrorEventInit + ): SpeechSynthesisErrorEvent; isInstance: IsInstance; }; @@ -24874,7 +25834,10 @@ interface SpeechSynthesisEvent extends Event { declare var SpeechSynthesisEvent: { prototype: SpeechSynthesisEvent; - new (type: string, eventInitDict: SpeechSynthesisEventInit): SpeechSynthesisEvent; + new ( + type: string, + eventInitDict: SpeechSynthesisEventInit + ): SpeechSynthesisEvent; isInstance: IsInstance; }; @@ -24909,7 +25872,10 @@ interface SpeechSynthesisUtterance extends EventTarget { volume: number; addEventListener( type: K, - listener: (this: SpeechSynthesisUtterance, ev: SpeechSynthesisUtteranceEventMap[K]) => any, + listener: ( + this: SpeechSynthesisUtterance, + ev: SpeechSynthesisUtteranceEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -24919,7 +25885,10 @@ interface SpeechSynthesisUtterance extends EventTarget { ): void; removeEventListener( type: K, - listener: (this: SpeechSynthesisUtterance, ev: SpeechSynthesisUtteranceEventMap[K]) => any, + listener: ( + this: SpeechSynthesisUtterance, + ev: SpeechSynthesisUtteranceEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -24964,7 +25933,10 @@ interface StereoPannerNode extends AudioNode, AudioNodePassThrough { declare var StereoPannerNode: { prototype: StereoPannerNode; - new (context: BaseAudioContext, options?: StereoPannerOptions): StereoPannerNode; + new ( + context: BaseAudioContext, + options?: StereoPannerOptions + ): StereoPannerNode; isInstance: IsInstance; }; @@ -25083,7 +26055,10 @@ interface StreamFilterDataEvent extends Event { declare var StreamFilterDataEvent: { prototype: StreamFilterDataEvent; - new (type: string, eventInitDict?: StreamFilterDataEventInit): StreamFilterDataEvent; + new ( + type: string, + eventInitDict?: StreamFilterDataEventInit + ): StreamFilterDataEvent; isInstance: IsInstance; }; @@ -25094,7 +26069,12 @@ interface StructuredCloneHolder { declare var StructuredCloneHolder: { prototype: StructuredCloneHolder; - new (name: string, anonymizedName: string | null, data: any, global?: any): StructuredCloneHolder; + new ( + name: string, + anonymizedName: string | null, + data: any, + global?: any + ): StructuredCloneHolder; isInstance: IsInstance; }; @@ -25128,7 +26108,11 @@ interface StylePropertyMapReadOnly { getAll(property: string): CSSStyleValue[]; has(property: string): boolean; forEach( - callbackfn: (value: CSSStyleValue[], key: string, parent: StylePropertyMapReadOnly) => void, + callbackfn: ( + value: CSSStyleValue[], + key: string, + parent: StylePropertyMapReadOnly + ) => void, thisArg?: any ): void; } @@ -25191,7 +26175,10 @@ interface StyleSheetRemovedEvent extends Event { declare var StyleSheetRemovedEvent: { prototype: StyleSheetRemovedEvent; - new (type: string, eventInitDict?: StyleSheetRemovedEventInit): StyleSheetRemovedEvent; + new ( + type: string, + eventInitDict?: StyleSheetRemovedEventInit + ): StyleSheetRemovedEvent; isInstance: IsInstance; }; @@ -25207,7 +26194,11 @@ declare var SubmitEvent: { /** Available only in secure contexts. */ interface SubtleCrypto { - decrypt(algorithm: AlgorithmIdentifier, key: CryptoKey, data: BufferSource): Promise; + decrypt( + algorithm: AlgorithmIdentifier, + key: CryptoKey, + data: BufferSource + ): Promise; deriveBits( algorithm: AlgorithmIdentifier, baseKey: CryptoKey, @@ -25221,7 +26212,11 @@ interface SubtleCrypto { keyUsages: KeyUsage[] ): Promise; digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise; - encrypt(algorithm: AlgorithmIdentifier, key: CryptoKey, data: BufferSource): Promise; + encrypt( + algorithm: AlgorithmIdentifier, + key: CryptoKey, + data: BufferSource + ): Promise; exportKey(format: KeyFormat, key: CryptoKey): Promise; generateKey( algorithm: AlgorithmIdentifier, @@ -25235,7 +26230,11 @@ interface SubtleCrypto { extractable: boolean, keyUsages: KeyUsage[] ): Promise; - sign(algorithm: AlgorithmIdentifier, key: CryptoKey, data: BufferSource): Promise; + sign( + algorithm: AlgorithmIdentifier, + key: CryptoKey, + data: BufferSource + ): Promise; unwrapKey( format: KeyFormat, wrappedKey: BufferSource, @@ -25311,7 +26310,11 @@ interface TCPServerSocket extends EventTarget { declare var TCPServerSocket: { prototype: TCPServerSocket; - new (port: number, options?: ServerSocketOptions, backlog?: number): TCPServerSocket; + new ( + port: number, + options?: ServerSocketOptions, + backlog?: number + ): TCPServerSocket; isInstance: IsInstance; }; @@ -25321,7 +26324,10 @@ interface TCPServerSocketEvent extends Event { declare var TCPServerSocketEvent: { prototype: TCPServerSocketEvent; - new (type: string, eventInitDict?: TCPServerSocketEventInit): TCPServerSocketEvent; + new ( + type: string, + eventInitDict?: TCPServerSocketEventInit + ): TCPServerSocketEvent; isInstance: IsInstance; }; @@ -25389,7 +26395,10 @@ interface TCPSocketErrorEvent extends Event { declare var TCPSocketErrorEvent: { prototype: TCPSocketErrorEvent; - new (type: string, eventInitDict?: TCPSocketErrorEventInit): TCPSocketErrorEvent; + new ( + type: string, + eventInitDict?: TCPSocketErrorEventInit + ): TCPSocketErrorEvent; isInstance: IsInstance; }; @@ -25556,7 +26565,9 @@ interface TestInterfaceAsyncIterableSingle {} declare var TestInterfaceAsyncIterableSingle: { prototype: TestInterfaceAsyncIterableSingle; - new (options?: TestInterfaceAsyncIterableSingleOptions): TestInterfaceAsyncIterableSingle; + new ( + options?: TestInterfaceAsyncIterableSingleOptions + ): TestInterfaceAsyncIterableSingle; isInstance: IsInstance; }; @@ -25573,7 +26584,11 @@ declare var TestInterfaceAsyncIterableSingleWithArgs: { interface TestInterfaceIterableDouble { forEach( - callbackfn: (value: string, key: string, parent: TestInterfaceIterableDouble) => void, + callbackfn: ( + value: string, + key: string, + parent: TestInterfaceIterableDouble + ) => void, thisArg?: any ): void; } @@ -25604,7 +26619,11 @@ declare var TestInterfaceIterableDoubleUnion: { interface TestInterfaceIterableSingle { readonly length: number; forEach( - callbackfn: (value: number, key: number, parent: TestInterfaceIterableSingle) => void, + callbackfn: ( + value: number, + key: number, + parent: TestInterfaceIterableSingle + ) => void, thisArg?: any ): void; [index: number]: number; @@ -25633,8 +26652,12 @@ interface TestInterfaceJS extends EventTarget { getDictionaryAttr(): TestInterfaceJSDictionary; objectSequenceLength(seq: any[]): number; pingPongAny(arg: any): any; - pingPongDictionary(dict?: TestInterfaceJSDictionary): TestInterfaceJSDictionary; - pingPongDictionaryOrLong(dictOrLong?: TestInterfaceJSUnionableDictionary | number): number; + pingPongDictionary( + dict?: TestInterfaceJSDictionary + ): TestInterfaceJSDictionary; + pingPongDictionaryOrLong( + dictOrLong?: TestInterfaceJSUnionableDictionary | number + ): number; pingPongNullableUnion( something: TestInterfaceJS | number | null ): TestInterfaceJS | number | null; @@ -25642,7 +26665,9 @@ interface TestInterfaceJS extends EventTarget { pingPongObjectOrString(objOrString: any): any; pingPongRecord(rec: Record): string; pingPongUnion(something: TestInterfaceJS | number): TestInterfaceJS | number; - pingPongUnionContainingNull(something: TestInterfaceJS | string): string | TestInterfaceJS; + pingPongUnionContainingNull( + something: TestInterfaceJS | string + ): string | TestInterfaceJS; returnBadUnion(): Location | TestInterfaceJS; setDictionaryAttr(dict?: TestInterfaceJSDictionary): void; testPromiseWithDOMExceptionThrowingPromiseInit(): Promise; @@ -25687,7 +26712,11 @@ interface TestInterfaceJS extends EventTarget { declare var TestInterfaceJS: { prototype: TestInterfaceJS; - new (anyArg?: any, objectArg?: any, dictionaryArg?: TestInterfaceJSDictionary): TestInterfaceJS; + new ( + anyArg?: any, + objectArg?: any, + dictionaryArg?: TestInterfaceJSDictionary + ): TestInterfaceJS; isInstance: IsInstance; }; @@ -25706,7 +26735,11 @@ interface TestInterfaceMaplike { hasInternal(aKey: string): boolean; setInternal(aKey: string, aValue: number): void; forEach( - callbackfn: (value: number, key: string, parent: TestInterfaceMaplike) => void, + callbackfn: ( + value: number, + key: string, + parent: TestInterfaceMaplike + ) => void, thisArg?: any ): void; } @@ -25724,7 +26757,11 @@ interface TestInterfaceMaplikeJSObject { hasInternal(aKey: string): boolean; setInternal(aKey: string, aObject: any): void; forEach( - callbackfn: (value: any, key: string, parent: TestInterfaceMaplikeJSObject) => void, + callbackfn: ( + value: any, + key: string, + parent: TestInterfaceMaplikeJSObject + ) => void, thisArg?: any ): void; } @@ -25770,7 +26807,10 @@ interface TestInterfaceObservableArray { interfaceElementAtInternal(index: number): TestInterfaceObservableArray; interfaceLengthInternal(): number; interfaceRemoveLastElementInternal(): void; - interfaceReplaceElementAtInternal(index: number, value: TestInterfaceObservableArray): void; + interfaceReplaceElementAtInternal( + index: number, + value: TestInterfaceObservableArray + ): void; objectAppendElementInternal(value: any): void; objectElementAtInternal(index: number): any; objectLengthInternal(): number; @@ -25786,7 +26826,11 @@ declare var TestInterfaceObservableArray: { interface TestInterfaceSetlike { forEach( - callbackfn: (value: string, key: string, parent: TestInterfaceSetlike) => void, + callbackfn: ( + value: string, + key: string, + parent: TestInterfaceSetlike + ) => void, thisArg?: any ): void; } @@ -25799,7 +26843,11 @@ declare var TestInterfaceSetlike: { interface TestInterfaceSetlikeNode { forEach( - callbackfn: (value: Node, key: Node, parent: TestInterfaceSetlikeNode) => void, + callbackfn: ( + value: Node, + key: Node, + parent: TestInterfaceSetlikeNode + ) => void, thisArg?: any ): void; } @@ -25892,7 +26940,10 @@ declare var TextDecoderStream: { interface TextEncoder extends TextEncoderCommon { encode(input?: string): Uint8Array; - encodeInto(source: JSString, destination: Uint8Array): TextEncoderEncodeIntoResult; + encodeInto( + source: JSString, + destination: Uint8Array + ): TextEncoderEncodeIntoResult; } declare var TextEncoder: { @@ -26192,7 +27243,10 @@ interface TouchEventHandlers { ontouchstart: ((this: TouchEventHandlers, ev: Event) => any) | null; addEventListener( type: K, - listener: (this: TouchEventHandlers, ev: TouchEventHandlersEventMap[K]) => any, + listener: ( + this: TouchEventHandlers, + ev: TouchEventHandlersEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -26202,7 +27256,10 @@ interface TouchEventHandlers { ): void; removeEventListener( type: K, - listener: (this: TouchEventHandlers, ev: TouchEventHandlersEventMap[K]) => any, + listener: ( + this: TouchEventHandlers, + ev: TouchEventHandlersEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -26340,10 +27397,18 @@ declare var TreeContentView: { interface TreeView { readonly rowCount: number; selection: nsITreeSelection | null; - canDrop(row: number, orientation: number, dataTransfer: DataTransfer | null): boolean; + canDrop( + row: number, + orientation: number, + dataTransfer: DataTransfer | null + ): boolean; cycleCell(row: number, column: TreeColumn): void; cycleHeader(column: TreeColumn): void; - drop(row: number, orientation: number, dataTransfer: DataTransfer | null): void; + drop( + row: number, + orientation: number, + dataTransfer: DataTransfer | null + ): void; getCellProperties(row: number, column: TreeColumn): string; getCellText(row: number, column: TreeColumn): string; getCellValue(row: number, column: TreeColumn): string; @@ -26439,14 +27504,21 @@ interface TrustedTypePolicyFactory { readonly defaultPolicy: TrustedTypePolicy | null; readonly emptyHTML: TrustedHTML; readonly emptyScript: TrustedScript; - createPolicy(policyName: string, policyOptions?: TrustedTypePolicyOptions): TrustedTypePolicy; + createPolicy( + policyName: string, + policyOptions?: TrustedTypePolicyOptions + ): TrustedTypePolicy; getAttributeType( tagName: string, attribute: string, elementNs?: string | null, attrNs?: string | null ): string | null; - getPropertyType(tagName: string, property: string, elementNs?: string | null): string | null; + getPropertyType( + tagName: string, + property: string, + elementNs?: string | null + ): string | null; isHTML(value: any): boolean; isScript(value: any): boolean; isScriptURL(value: any): boolean; @@ -26597,7 +27669,11 @@ interface URLPattern { declare var URLPattern: { prototype: URLPattern; - new (input: URLPatternInput, baseURL: string, options?: URLPatternOptions): URLPattern; + new ( + input: URLPatternInput, + baseURL: string, + options?: URLPatternOptions + ): URLPattern; new (input?: URLPatternInput, options?: URLPatternOptions): URLPattern; isInstance: IsInstance; }; @@ -26649,7 +27725,10 @@ interface UserProximityEvent extends Event { declare var UserProximityEvent: { prototype: UserProximityEvent; - new (type: string, eventInitDict?: UserProximityEventInit): UserProximityEvent; + new ( + type: string, + eventInitDict?: UserProximityEventInit + ): UserProximityEvent; isInstance: IsInstance; }; @@ -26804,7 +27883,12 @@ interface VRMockDisplay { downDegree: number, leftDegree: number ): void; - setEyeOffset(eye: VREye, offsetX: number, offsetY: number, offsetZ: number): void; + setEyeOffset( + eye: VREye, + offsetX: number, + offsetY: number, + offsetZ: number + ): void; setEyeResolution(renderWidth: number, renderHeight: number): void; setMounted(mounted: boolean): void; setPose( @@ -26856,7 +27940,11 @@ interface VRServiceTest { stopTimer(): void; timeout(duration: number): void; wait(duration: number): void; - waitHapticIntensity(controllerIdx: number, hapticIdx: number, intensity: number): void; + waitHapticIntensity( + controllerIdx: number, + hapticIdx: number, + intensity: number + ): void; waitPresentationEnd(): void; waitPresentationStart(): void; waitSubmit(): void; @@ -27369,7 +28457,11 @@ interface WEBGL_provoking_vertex { /** Available only in secure contexts. */ interface WGSLLanguageFeatures { forEach( - callbackfn: (value: string, key: string, parent: WGSLLanguageFeatures) => void, + callbackfn: ( + value: string, + key: string, + parent: WGSLLanguageFeatures + ) => void, thisArg?: any ): void; } @@ -27519,7 +28611,8 @@ declare var WebExtensionPolicy: { isRestrictedURI(uri: URI): boolean; }; -interface WebGL2RenderingContext extends WebGL2RenderingContextBase, WebGLRenderingContextBase {} +interface WebGL2RenderingContext + extends WebGL2RenderingContextBase, WebGLRenderingContextBase {} declare var WebGL2RenderingContext: { prototype: WebGL2RenderingContext; @@ -28089,7 +29182,11 @@ declare var WebGL2RenderingContext: { interface WebGL2RenderingContextBase { beginQuery(target: GLenum, query: WebGLQuery): void; beginTransformFeedback(primitiveMode: GLenum): void; - bindBufferBase(target: GLenum, index: GLuint, buffer: WebGLBuffer | null): void; + bindBufferBase( + target: GLenum, + index: GLuint, + buffer: WebGLBuffer | null + ): void; bindBufferRange( target: GLenum, index: GLuint, @@ -28098,7 +29195,10 @@ interface WebGL2RenderingContextBase { size: GLsizeiptr ): void; bindSampler(unit: GLuint, sampler: WebGLSampler | null): void; - bindTransformFeedback(target: GLenum, tf: WebGLTransformFeedback | null): void; + bindTransformFeedback( + target: GLenum, + tf: WebGLTransformFeedback | null + ): void; bindVertexArray(array: WebGLVertexArrayObject | null): void; blitFramebuffer( srcX0: GLint, @@ -28122,7 +29222,11 @@ interface WebGL2RenderingContextBase { srcOffset: GLuint, length?: GLuint ): void; - bufferSubData(target: GLenum, offset: GLintptr, srcData: AllowSharedBufferSource): void; + bufferSubData( + target: GLenum, + offset: GLintptr, + srcData: AllowSharedBufferSource + ): void; bufferSubData( target: GLenum, dstByteOffset: GLintptr, @@ -28130,10 +29234,30 @@ interface WebGL2RenderingContextBase { srcOffset: GLuint, length?: GLuint ): void; - clearBufferfi(buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint): void; - clearBufferfv(buffer: GLenum, drawbuffer: GLint, values: Float32List, srcOffset?: GLuint): void; - clearBufferiv(buffer: GLenum, drawbuffer: GLint, values: Int32List, srcOffset?: GLuint): void; - clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Uint32List, srcOffset?: GLuint): void; + clearBufferfi( + buffer: GLenum, + drawbuffer: GLint, + depth: GLfloat, + stencil: GLint + ): void; + clearBufferfv( + buffer: GLenum, + drawbuffer: GLint, + values: Float32List, + srcOffset?: GLuint + ): void; + clearBufferiv( + buffer: GLenum, + drawbuffer: GLint, + values: Int32List, + srcOffset?: GLuint + ): void; + clearBufferuiv( + buffer: GLenum, + drawbuffer: GLint, + values: Uint32List, + srcOffset?: GLuint + ): void; clientWaitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLuint64): GLenum; compressedTexImage2D( target: GLenum, @@ -28256,7 +29380,12 @@ interface WebGL2RenderingContextBase { deleteSync(sync: WebGLSync | null): void; deleteTransformFeedback(tf: WebGLTransformFeedback | null): void; deleteVertexArray(vertexArray: WebGLVertexArrayObject | null): void; - drawArraysInstanced(mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei): void; + drawArraysInstanced( + mode: GLenum, + first: GLint, + count: GLsizei, + instanceCount: GLsizei + ): void; drawBuffers(buffers: GLenum[]): void; drawElementsInstanced( mode: GLenum, @@ -28283,13 +29412,20 @@ interface WebGL2RenderingContextBase { level: GLint, layer: GLint ): void; - getActiveUniformBlockName(program: WebGLProgram, uniformBlockIndex: GLuint): string | null; + getActiveUniformBlockName( + program: WebGLProgram, + uniformBlockIndex: GLuint + ): string | null; getActiveUniformBlockParameter( program: WebGLProgram, uniformBlockIndex: GLuint, pname: GLenum ): any; - getActiveUniforms(program: WebGLProgram, uniformIndices: GLuint[], pname: GLenum): any; + getActiveUniforms( + program: WebGLProgram, + uniformIndices: GLuint[], + pname: GLenum + ): any; getBufferSubData( target: GLenum, srcByteOffset: GLintptr, @@ -28299,14 +29435,24 @@ interface WebGL2RenderingContextBase { ): void; getFragDataLocation(program: WebGLProgram, name: string): GLint; getIndexedParameter(target: GLenum, index: GLuint): any; - getInternalformatParameter(target: GLenum, internalformat: GLenum, pname: GLenum): any; + getInternalformatParameter( + target: GLenum, + internalformat: GLenum, + pname: GLenum + ): any; getQuery(target: GLenum, pname: GLenum): any; getQueryParameter(query: WebGLQuery, pname: GLenum): any; getSamplerParameter(sampler: WebGLSampler, pname: GLenum): any; getSyncParameter(sync: WebGLSync, pname: GLenum): any; - getTransformFeedbackVarying(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null; + getTransformFeedbackVarying( + program: WebGLProgram, + index: GLuint + ): WebGLActiveInfo | null; getUniformBlockIndex(program: WebGLProgram, uniformBlockName: string): GLuint; - getUniformIndices(program: WebGLProgram, uniformNames: string[]): GLuint[] | null; + getUniformIndices( + program: WebGLProgram, + uniformNames: string[] + ): GLuint[] | null; invalidateFramebuffer(target: GLenum, attachments: GLenum[]): void; invalidateSubFramebuffer( target: GLenum, @@ -28956,7 +30102,11 @@ interface WebGL2RenderingContextBase { srcData: ArrayBufferView | null, srcOffset?: GLuint ): void; - transformFeedbackVaryings(program: WebGLProgram, varyings: string[], bufferMode: GLenum): void; + transformFeedbackVaryings( + program: WebGLProgram, + varyings: string[], + bufferMode: GLenum + ): void; uniform1fv( location: WebGLUniformLocation | null, data: Float32List, @@ -28988,7 +30138,11 @@ interface WebGL2RenderingContextBase { srcOffset?: GLuint, srcLength?: GLuint ): void; - uniform2ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint): void; + uniform2ui( + location: WebGLUniformLocation | null, + v0: GLuint, + v1: GLuint + ): void; uniform2uiv( location: WebGLUniformLocation | null, data: Uint32List, @@ -29007,7 +30161,12 @@ interface WebGL2RenderingContextBase { srcOffset?: GLuint, srcLength?: GLuint ): void; - uniform3ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint, v2: GLuint): void; + uniform3ui( + location: WebGLUniformLocation | null, + v0: GLuint, + v1: GLuint, + v2: GLuint + ): void; uniform3uiv( location: WebGLUniformLocation | null, data: Uint32List, @@ -29110,7 +30269,13 @@ interface WebGL2RenderingContextBase { vertexAttribDivisor(index: GLuint, divisor: GLuint): void; vertexAttribI4i(index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint): void; vertexAttribI4iv(index: GLuint, values: Int32List): void; - vertexAttribI4ui(index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint): void; + vertexAttribI4ui( + index: GLuint, + x: GLuint, + y: GLuint, + z: GLuint, + w: GLuint + ): void; vertexAttribI4uiv(index: GLuint, values: Uint32List): void; vertexAttribIPointer( index: GLuint, @@ -29451,7 +30616,11 @@ interface WebGLRenderingContext extends WebGLRenderingContextBase { bufferData(target: GLenum, size: GLsizeiptr, usage: GLenum): void; bufferData(target: GLenum, data: ArrayBuffer | null, usage: GLenum): void; bufferData(target: GLenum, data: ArrayBufferView, usage: GLenum): void; - bufferSubData(target: GLenum, offset: GLintptr, data: AllowSharedBufferSource): void; + bufferSubData( + target: GLenum, + offset: GLintptr, + data: AllowSharedBufferSource + ): void; compressedTexImage2D( target: GLenum, level: GLint, @@ -29959,19 +31128,32 @@ interface WebGLRenderingContextBase { bindAttribLocation(program: WebGLProgram, index: GLuint, name: string): void; bindBuffer(target: GLenum, buffer: WebGLBuffer | null): void; bindFramebuffer(target: GLenum, framebuffer: WebGLFramebuffer | null): void; - bindRenderbuffer(target: GLenum, renderbuffer: WebGLRenderbuffer | null): void; + bindRenderbuffer( + target: GLenum, + renderbuffer: WebGLRenderbuffer | null + ): void; bindTexture(target: GLenum, texture: WebGLTexture | null): void; blendColor(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat): void; blendEquation(mode: GLenum): void; blendEquationSeparate(modeRGB: GLenum, modeAlpha: GLenum): void; blendFunc(sfactor: GLenum, dfactor: GLenum): void; - blendFuncSeparate(srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void; + blendFuncSeparate( + srcRGB: GLenum, + dstRGB: GLenum, + srcAlpha: GLenum, + dstAlpha: GLenum + ): void; checkFramebufferStatus(target: GLenum): GLenum; clear(mask: GLbitfield): void; clearColor(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat): void; clearDepth(depth: GLclampf): void; clearStencil(s: GLint): void; - colorMask(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean): void; + colorMask( + red: GLboolean, + green: GLboolean, + blue: GLboolean, + alpha: GLboolean + ): void; compileShader(shader: WebGLShader): void; copyTexImage2D( target: GLenum, @@ -30013,7 +31195,12 @@ interface WebGLRenderingContextBase { disable(cap: GLenum): void; disableVertexAttribArray(index: GLuint): void; drawArrays(mode: GLenum, first: GLint, count: GLsizei): void; - drawElements(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr): void; + drawElements( + mode: GLenum, + count: GLsizei, + type: GLenum, + offset: GLintptr + ): void; enable(cap: GLenum): void; enableVertexAttribArray(index: GLuint): void; finish(): void; @@ -30034,14 +31221,21 @@ interface WebGLRenderingContextBase { frontFace(mode: GLenum): void; generateMipmap(target: GLenum): void; getActiveAttrib(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null; - getActiveUniform(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null; + getActiveUniform( + program: WebGLProgram, + index: GLuint + ): WebGLActiveInfo | null; getAttachedShaders(program: WebGLProgram): WebGLShader[] | null; getAttribLocation(program: WebGLProgram, name: string): GLint; getBufferParameter(target: GLenum, pname: GLenum): any; getContextAttributes(): WebGLContextAttributes | null; getError(): GLenum; getExtension(name: string): any; - getFramebufferAttachmentParameter(target: GLenum, attachment: GLenum, pname: GLenum): any; + getFramebufferAttachmentParameter( + target: GLenum, + attachment: GLenum, + pname: GLenum + ): any; getParameter(pname: GLenum): any; getProgramInfoLog(program: WebGLProgram): string | null; getProgramParameter(program: WebGLProgram, pname: GLenum): any; @@ -30056,7 +31250,10 @@ interface WebGLRenderingContextBase { getSupportedExtensions(): string[] | null; getTexParameter(target: GLenum, pname: GLenum): any; getUniform(program: WebGLProgram, location: WebGLUniformLocation): any; - getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation | null; + getUniformLocation( + program: WebGLProgram, + name: string + ): WebGLUniformLocation | null; getVertexAttrib(index: GLuint, pname: GLenum): any; getVertexAttribOffset(index: GLuint, pname: GLenum): GLintptr; hint(target: GLenum, mode: GLenum): void; @@ -30083,19 +31280,43 @@ interface WebGLRenderingContextBase { scissor(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void; shaderSource(shader: WebGLShader, source: string): void; stencilFunc(func: GLenum, ref: GLint, mask: GLuint): void; - stencilFuncSeparate(face: GLenum, func: GLenum, ref: GLint, mask: GLuint): void; + stencilFuncSeparate( + face: GLenum, + func: GLenum, + ref: GLint, + mask: GLuint + ): void; stencilMask(mask: GLuint): void; stencilMaskSeparate(face: GLenum, mask: GLuint): void; stencilOp(fail: GLenum, zfail: GLenum, zpass: GLenum): void; - stencilOpSeparate(face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum): void; + stencilOpSeparate( + face: GLenum, + fail: GLenum, + zfail: GLenum, + zpass: GLenum + ): void; texParameterf(target: GLenum, pname: GLenum, param: GLfloat): void; texParameteri(target: GLenum, pname: GLenum, param: GLint): void; uniform1f(location: WebGLUniformLocation | null, x: GLfloat): void; uniform1i(location: WebGLUniformLocation | null, x: GLint): void; - uniform2f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat): void; + uniform2f( + location: WebGLUniformLocation | null, + x: GLfloat, + y: GLfloat + ): void; uniform2i(location: WebGLUniformLocation | null, x: GLint, y: GLint): void; - uniform3f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat): void; - uniform3i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint): void; + uniform3f( + location: WebGLUniformLocation | null, + x: GLfloat, + y: GLfloat, + z: GLfloat + ): void; + uniform3i( + location: WebGLUniformLocation | null, + x: GLint, + y: GLint, + z: GLint + ): void; uniform4f( location: WebGLUniformLocation | null, x: GLfloat, @@ -30103,7 +31324,13 @@ interface WebGLRenderingContextBase { z: GLfloat, w: GLfloat ): void; - uniform4i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint, w: GLint): void; + uniform4i( + location: WebGLUniformLocation | null, + x: GLint, + y: GLint, + z: GLint, + w: GLint + ): void; useProgram(program: WebGLProgram | null): void; validateProgram(program: WebGLProgram): void; vertexAttrib1f(indx: GLuint, x: GLfloat): void; @@ -30112,7 +31339,13 @@ interface WebGLRenderingContextBase { vertexAttrib2fv(indx: GLuint, values: Float32List): void; vertexAttrib3f(indx: GLuint, x: GLfloat, y: GLfloat, z: GLfloat): void; vertexAttrib3fv(indx: GLuint, values: Float32List): void; - vertexAttrib4f(indx: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void; + vertexAttrib4f( + indx: GLuint, + x: GLfloat, + y: GLfloat, + z: GLfloat, + w: GLfloat + ): void; vertexAttrib4fv(indx: GLuint, values: Float32List): void; vertexAttribPointer( indx: GLuint, @@ -30567,7 +31800,9 @@ interface WebTransport { createBidirectionalStream( options?: WebTransportSendStreamOptions ): Promise; - createUnidirectionalStream(options?: WebTransportSendStreamOptions): Promise; + createUnidirectionalStream( + options?: WebTransportSendStreamOptions + ): Promise; getStats(): Promise; } @@ -30664,7 +31899,8 @@ declare var WheelEvent: { }; interface WindowEventMap - extends GlobalEventHandlersEventMap, + extends + GlobalEventHandlersEventMap, OnErrorEventHandlerForWindowEventMap, TouchEventHandlersEventMap, WindowEventHandlersEventMap { @@ -30682,7 +31918,8 @@ interface WindowEventMap } interface Window - extends EventTarget, + extends + EventTarget, AnimationFrameProvider, GlobalCrypto, GlobalEventHandlers, @@ -30800,8 +32037,14 @@ interface Window focus(): void; getAttention(): void; getAttentionWithCycleCount(aCycleCount: number): void; - getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleProperties | null; - getDefaultComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration | null; + getComputedStyle( + elt: Element, + pseudoElt?: string | null + ): CSSStyleProperties | null; + getDefaultComputedStyle( + elt: Element, + pseudoElt?: string + ): CSSStyleDeclaration | null; getGroupMessageManager(aGroup: string): ChromeMessageBroadcaster; getInterface(iid: any): any; getRegionalPrefsLocales(): string[]; @@ -30816,7 +32059,11 @@ interface Window moveToWorkspace(workspaceID: string): void; mozScrollSnap(): void; notifyDefaultButtonLoaded(defaultButton: Element): void; - open(url?: string | URL, target?: string, features?: string): WindowProxy | null; + open( + url?: string | URL, + target?: string, + features?: string + ): WindowProxy | null; openDialog( url?: string, name?: string, @@ -30831,10 +32078,15 @@ interface Window listener?: nsIWebProgressListener | null, docShellToPreviewInto?: nsIDocShell | null ): WindowProxy | null; - promiseDocumentFlushed(callback: PromiseDocumentFlushedCallback): Promise; + promiseDocumentFlushed( + callback: PromiseDocumentFlushedCallback + ): Promise; prompt(message?: string, _default?: string): string | null; releaseEvents(): void; - requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number; + requestIdleCallback( + callback: IdleRequestCallback, + options?: IdleRequestOptions + ): number; resizeBy(x: number, y: number): void; resizeTo(x: number, y: number): void; restore(): void; @@ -30964,7 +32216,10 @@ interface WindowEventHandlers { onunload: ((this: WindowEventHandlers, ev: Event) => any) | null; addEventListener( type: K, - listener: (this: WindowEventHandlers, ev: WindowEventHandlersEventMap[K]) => any, + listener: ( + this: WindowEventHandlers, + ev: WindowEventHandlersEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -30974,7 +32229,10 @@ interface WindowEventHandlers { ): void; removeEventListener( type: K, - listener: (this: WindowEventHandlers, ev: WindowEventHandlersEventMap[K]) => any, + listener: ( + this: WindowEventHandlers, + ev: WindowEventHandlersEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -31065,7 +32323,10 @@ interface WindowOrWorkerGlobalScope { btoa(btoa: string): string; clearInterval(handle?: number): void; clearTimeout(handle?: number): void; - createImageBitmap(aImage: ImageBitmapSource, aOptions?: ImageBitmapOptions): Promise; + createImageBitmap( + aImage: ImageBitmapSource, + aOptions?: ImageBitmapOptions + ): Promise; createImageBitmap( aImage: ImageBitmapSource, aSx: number, @@ -31078,8 +32339,16 @@ interface WindowOrWorkerGlobalScope { isRFPTargetActive(aTargetName: string): boolean; queueMicrotask(callback: VoidFunction): void; reportError(e: any): void; - setInterval(handler: TimerHandler, timeout?: number, ...unused: any[]): number; - setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; + setInterval( + handler: TimerHandler, + timeout?: number, + ...unused: any[] + ): number; + setTimeout( + handler: TimerHandler, + timeout?: number, + ...arguments: any[] + ): number; structuredClone(value: any, options?: StructuredSerializeOptions): any; } @@ -31320,7 +32589,10 @@ interface XMLHttpRequestEventTarget extends EventTarget { ontimeout: ((this: XMLHttpRequestEventTarget, ev: Event) => any) | null; addEventListener( type: K, - listener: (this: XMLHttpRequestEventTarget, ev: XMLHttpRequestEventTargetEventMap[K]) => any, + listener: ( + this: XMLHttpRequestEventTarget, + ev: XMLHttpRequestEventTargetEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -31330,7 +32602,10 @@ interface XMLHttpRequestEventTarget extends EventTarget { ): void; removeEventListener( type: K, - listener: (this: XMLHttpRequestEventTarget, ev: XMLHttpRequestEventTargetEventMap[K]) => any, + listener: ( + this: XMLHttpRequestEventTarget, + ev: XMLHttpRequestEventTargetEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -31349,7 +32624,10 @@ declare var XMLHttpRequestEventTarget: { interface XMLHttpRequestUpload extends XMLHttpRequestEventTarget { addEventListener( type: K, - listener: (this: XMLHttpRequestUpload, ev: XMLHttpRequestEventTargetEventMap[K]) => any, + listener: ( + this: XMLHttpRequestUpload, + ev: XMLHttpRequestEventTargetEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -31359,7 +32637,10 @@ interface XMLHttpRequestUpload extends XMLHttpRequestEventTarget { ): void; removeEventListener( type: K, - listener: (this: XMLHttpRequestUpload, ev: XMLHttpRequestEventTargetEventMap[K]) => any, + listener: ( + this: XMLHttpRequestUpload, + ev: XMLHttpRequestEventTargetEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -31376,7 +32657,11 @@ declare var XMLHttpRequestUpload: { }; interface XMLSerializer { - serializeToStream(root: Node, stream: OutputStream, charset: string | null): void; + serializeToStream( + root: Node, + stream: OutputStream, + charset: string | null + ): void; serializeToString(root: Node): string; } @@ -31395,7 +32680,10 @@ declare var XPathEvaluator: { }; interface XPathEvaluatorMixin { - createExpression(expression: string, resolver?: XPathNSResolver | null): XPathExpression; + createExpression( + expression: string, + resolver?: XPathNSResolver | null + ): XPathExpression; createNSResolver(nodeResolver: Node): Node; evaluate( expression: string, @@ -31466,7 +32754,10 @@ interface XRBoundedReferenceSpace extends XRReferenceSpace { readonly boundsGeometry: DOMPointReadOnly[]; addEventListener( type: K, - listener: (this: XRBoundedReferenceSpace, ev: XRReferenceSpaceEventMap[K]) => any, + listener: ( + this: XRBoundedReferenceSpace, + ev: XRReferenceSpaceEventMap[K] + ) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener( @@ -31476,7 +32767,10 @@ interface XRBoundedReferenceSpace extends XRReferenceSpace { ): void; removeEventListener( type: K, - listener: (this: XRBoundedReferenceSpace, ev: XRReferenceSpaceEventMap[K]) => any, + listener: ( + this: XRBoundedReferenceSpace, + ev: XRReferenceSpaceEventMap[K] + ) => any, options?: boolean | EventListenerOptions ): void; removeEventListener( @@ -31525,7 +32819,11 @@ declare var XRInputSource: { interface XRInputSourceArray { readonly length: number; forEach( - callbackfn: (value: XRInputSource, key: number, parent: XRInputSourceArray) => void, + callbackfn: ( + value: XRInputSource, + key: number, + parent: XRInputSourceArray + ) => void, thisArg?: any ): void; [index: number]: XRInputSource; @@ -31558,7 +32856,10 @@ interface XRInputSourcesChangeEvent extends Event { declare var XRInputSourcesChangeEvent: { prototype: XRInputSourcesChangeEvent; - new (type: string, eventInitDict: XRInputSourcesChangeEventInit): XRInputSourcesChangeEvent; + new ( + type: string, + eventInitDict: XRInputSourcesChangeEventInit + ): XRInputSourcesChangeEvent; isInstance: IsInstance; }; @@ -31618,7 +32919,10 @@ interface XRReferenceSpaceEvent extends Event { declare var XRReferenceSpaceEvent: { prototype: XRReferenceSpaceEvent; - new (type: string, eventInitDict: XRReferenceSpaceEventInit): XRReferenceSpaceEvent; + new ( + type: string, + eventInitDict: XRReferenceSpaceEventInit + ): XRReferenceSpaceEvent; isInstance: IsInstance; }; @@ -31740,7 +33044,10 @@ interface XRSystemEventMap { interface XRSystem extends EventTarget { ondevicechange: ((this: XRSystem, ev: Event) => any) | null; isSessionSupported(mode: XRSessionMode): Promise; - requestSession(mode: XRSessionMode, options?: XRSessionInit): Promise; + requestSession( + mode: XRSessionMode, + options?: XRSessionInit + ): Promise; addEventListener( type: K, listener: (this: XRSystem, ev: XRSystemEventMap[K]) => any, @@ -31831,11 +33138,18 @@ declare var XRWebGLLayer: { interface XSLTProcessor { flags: number; clearParameters(): void; - getParameter(namespaceURI: string | null, localName: string): XSLTParameterValue | null; + getParameter( + namespaceURI: string | null, + localName: string + ): XSLTParameterValue | null; importStylesheet(style: Node): void; removeParameter(namespaceURI: string | null, localName: string): void; reset(): void; - setParameter(namespaceURI: string | null, localName: string, value: XSLTParameterValue): void; + setParameter( + namespaceURI: string | null, + localName: string, + value: XSLTParameterValue + ): void; transformToDocument(source: Node): Document; transformToFragment(source: Node, output: Document): DocumentFragment; readonly DISABLE_ALL_LOADS: 1; @@ -31879,13 +33193,15 @@ declare var XULCommandEvent: { }; interface XULElementEventMap - extends ElementEventMap, + extends + ElementEventMap, GlobalEventHandlersEventMap, OnErrorEventHandlerForNodesEventMap, TouchEventHandlersEventMap {} interface XULElement - extends Element, + extends + Element, ElementCSSInlineStyle, ElementOffsetAttributes, GlobalEventHandlers, @@ -32150,7 +33466,11 @@ interface XULTreeElement extends XULElement { ensureCellIsVisible(row: number, col: TreeColumn | null): void; ensureRowIsVisible(index: number): void; getCellAt(x: number, y: number): TreeCellInfo; - getCoordsForCellItem(row: number, col: TreeColumn, element: string): DOMRect | null; + getCoordsForCellItem( + row: number, + col: TreeColumn, + element: string + ): DOMRect | null; getFirstVisibleRow(): number; getLastVisibleRow(): number; getPageLength(): number; @@ -32275,19 +33595,29 @@ declare namespace ChromeUtils { var aliveUtilityProcesses: number; var domProcessChild: nsIDOMProcessChild | null; var recentJSDevError: any; - function CreateOriginAttributesFromOriginSuffix(suffix: string): OriginAttributesDictionary; + function CreateOriginAttributesFromOriginSuffix( + suffix: string + ): OriginAttributesDictionary; function addProfilerMarker( name: string, options?: ProfilerMarkerOptions | number, text?: string ): void; function androidMoveTaskToBack(): void; - function base64URLDecode(string: string, options: Base64URLDecodeOptions): ArrayBuffer; - function base64URLEncode(source: BufferSource, options: Base64URLEncodeOptions): string; + function base64URLDecode( + string: string, + options: Base64URLDecodeOptions + ): ArrayBuffer; + function base64URLEncode( + source: BufferSource, + options: Base64URLEncodeOptions + ): string; function callFunctionAndLogException(targetGlobal: any, func: any): any; function clearBfcacheByPrincipal(principal: Principal): void; function clearMessagingLayerSecurityState(): void; - function clearMessagingLayerSecurityStateByPrincipal(principal: Principal): void; + function clearMessagingLayerSecurityStateByPrincipal( + principal: Principal + ): void; function clearMessagingLayerSecurityStateBySite( schemelessSite: string, pattern?: OriginAttributesPatternDictionary @@ -32307,7 +33637,9 @@ declare namespace ChromeUtils { loadingPrincipal: Principal ): ContentSecurityPolicy; function createError(message: string, stack?: any): any; - function createOriginAttributesFromOrigin(origin: string): OriginAttributesDictionary; + function createOriginAttributesFromOrigin( + origin: string + ): OriginAttributesDictionary; function dateNow(): number; function defineESModuleGetters( aTarget: any, @@ -32318,7 +33650,9 @@ declare namespace ChromeUtils { function enableAllPerfStatsFeatures(): void; function encodeURIForSrcset(uri: string): string; function endWheelTransaction(window: WindowProxy): Promise; - function ensureHeadlessContentProcess(aRemoteType: string): Promise; + function ensureHeadlessContentProcess( + aRemoteType: string + ): Promise; function ensureJSOracleStarted(): void; function fillNonDefaultOriginAttributes( originAttrs?: OriginAttributesDictionary @@ -32329,8 +33663,12 @@ declare namespace ChromeUtils { function getBaseDomainFromPartitionKey(partitionKey: string): string; function getCallerLocation(principal: Principal): any; function getClassName(obj: any, unwrap?: boolean): string; - function getFormAutofillConfidences(elements: Element[]): FormAutofillConfidences[]; - function getGMPContentDecryptionModuleInformation(): Promise; + function getFormAutofillConfidences( + elements: Element[] + ): FormAutofillConfidences[]; + function getGMPContentDecryptionModuleInformation(): Promise< + CDMInformation[] + >; function getGlobalWindowCommandEnabled(name: string): boolean | null; function getLibcConstants(): LibcConstants; function getObjectNodeId(obj: any): NodeId; @@ -32340,11 +33678,19 @@ declare namespace ChromeUtils { foreignContext?: boolean ): string; function getPopupControlState(): PopupBlockerState; - function getWMFContentDecryptionModuleInformation(): Promise; + function getWMFContentDecryptionModuleInformation(): Promise< + CDMInformation[] + >; function getXPCOMErrorName(aErrorCode: number): string; function hasReportingHeaderForOrigin(aOrigin: string): boolean; - function idleDispatch(callback: IdleRequestCallback, options?: IdleRequestOptions): void; - function importESModule(aResourceURI: string, aOptions?: ImportESModuleOptionsDictionary): any; + function idleDispatch( + callback: IdleRequestCallback, + options?: IdleRequestOptions + ): void; + function importESModule( + aResourceURI: string, + aOptions?: ImportESModuleOptionsDictionary + ): any; function isClassifierBlockingErrorCode(aError: number): boolean; function isDOMObject(obj: any, unwrap?: boolean): boolean; function isDarkBackground(element: Element): boolean; @@ -32365,11 +33711,19 @@ declare namespace ChromeUtils { originAttrs?: OriginAttributesDictionary, pattern?: OriginAttributesPatternDictionary ): boolean; - function originAttributesToSuffix(originAttrs?: OriginAttributesDictionary): string; + function originAttributesToSuffix( + originAttrs?: OriginAttributesDictionary + ): string; function privateNoteIntentionalCrash(): void; function readHeapSnapshot(filePath: string): HeapSnapshot; - function registerProcessActor(aName: string, aOptions?: ProcessActorOptions): void; - function registerWindowActor(aName: string, aOptions?: WindowActorOptions): void; + function registerProcessActor( + aName: string, + aOptions?: ProcessActorOptions + ): void; + function registerWindowActor( + aName: string, + aOptions?: WindowActorOptions + ): void; function releaseAssert(condition: boolean, message?: string): void; function requestProcInfo(): Promise; function resetLastExternalProtocolIframeAllowed(): void; @@ -32399,7 +33753,10 @@ declare namespace FuzzingFunctions { function memoryPressure(): void; function signalIPCReady(): void; function spinEventLoopFor(aMilliseconds: number): void; - function synthesizeKeyboardEvents(aKeyValue: string, aDictionary?: KeyboardEventInit): void; + function synthesizeKeyboardEvents( + aKeyValue: string, + aDictionary?: KeyboardEventInit + ): void; } declare namespace GPUBufferUsage {} @@ -32415,58 +33772,120 @@ declare namespace GPUTextureUsage {} declare namespace IOUtils { var profileBeforeChange: any; var sendTelemetry: any; - function computeHexDigest(path: string, method: HashAlgorithm): Promise; - function copy(sourcePath: string, destPath: string, options?: CopyOptions): Promise; + function computeHexDigest( + path: string, + method: HashAlgorithm + ): Promise; + function copy( + sourcePath: string, + destPath: string, + options?: CopyOptions + ): Promise; function createUniqueDirectory( parent: string, prefix: string, permissions?: number ): Promise; - function createUniqueFile(parent: string, prefix: string, permissions?: number): Promise; + function createUniqueFile( + parent: string, + prefix: string, + permissions?: number + ): Promise; function delMacXAttr(path: string, attr: string): Promise; function exists(path: string): Promise; - function getChildren(path: string, options?: GetChildrenOptions): Promise; + function getChildren( + path: string, + options?: GetChildrenOptions + ): Promise; function getDirectory(...components: string[]): Promise; function getFile(...components: string[]): Promise; function getMacXAttr(path: string, attr: string): Promise; function getWindowsAttributes(path: string): Promise; - function hasChildren(path: string, options?: HasChildrenOptions): Promise; + function hasChildren( + path: string, + options?: HasChildrenOptions + ): Promise; function hasMacXAttr(path: string, attr: string): Promise; - function makeDirectory(path: string, options?: MakeDirectoryOptions): Promise; - function move(sourcePath: string, destPath: string, options?: MoveOptions): Promise; + function makeDirectory( + path: string, + options?: MakeDirectoryOptions + ): Promise; + function move( + sourcePath: string, + destPath: string, + options?: MoveOptions + ): Promise; function read(path: string, opts?: ReadOptions): Promise; function readJSON(path: string, opts?: ReadUTF8Options): Promise; function readUTF8(path: string, opts?: ReadUTF8Options): Promise; function remove(path: string, options?: RemoveOptions): Promise; function setAccessTime(path: string, access?: number): Promise; - function setMacXAttr(path: string, attr: string, value: Uint8Array): Promise; - function setModificationTime(path: string, modification?: number): Promise; - function setPermissions(path: string, permissions: number, honorUmask?: boolean): Promise; + function setMacXAttr( + path: string, + attr: string, + value: Uint8Array + ): Promise; + function setModificationTime( + path: string, + modification?: number + ): Promise; + function setPermissions( + path: string, + permissions: number, + honorUmask?: boolean + ): Promise; function setWindowsAttributes( path: string, attrs?: WindowsFileAttributes, recursive?: boolean ): Promise; function stat(path: string): Promise; - function write(path: string, data: Uint8Array, options?: WriteOptions): Promise; - function writeJSON(path: string, value: any, options?: WriteOptions): Promise; - function writeUTF8(path: string, string: string, options?: WriteOptions): Promise; + function write( + path: string, + data: Uint8Array, + options?: WriteOptions + ): Promise; + function writeJSON( + path: string, + value: any, + options?: WriteOptions + ): Promise; + function writeUTF8( + path: string, + string: string, + options?: WriteOptions + ): Promise; } declare namespace InspectorUtils { - function addPseudoClassLock(element: Element, pseudoClass: string, enabled?: boolean): void; + function addPseudoClassLock( + element: Element, + pseudoClass: string, + enabled?: boolean + ): void; function clearPseudoClassLocks(element: Element): void; - function colorTo(fromColor: string, toColorSpace: string): InspectorColorToResult | null; + function colorTo( + fromColor: string, + toColorSpace: string + ): InspectorColorToResult | null; function colorToRGBA(colorString: string): InspectorRGBATuple | null; function containingBlockOf(element: Element): Element | null; function cssPropertyIsShorthand(property: string): boolean; - function cssPropertySupportsType(property: string, type: InspectorPropertyType): boolean; - function getAllStyleSheets(document: Document, documentOnly?: boolean): StyleSheet[]; + function cssPropertySupportsType( + property: string, + type: InspectorPropertyType + ): boolean; + function getAllStyleSheets( + document: Document, + documentOnly?: boolean + ): StyleSheet[]; function getBlockLineCounts(element: Element): number[] | null; function getCSSPropertyNames(options?: PropertyNamesOptions): string[]; function getCSSPropertyPrefs(): PropertyPref[]; function getCSSPseudoElementNames(): string[]; - function getCSSRegisteredProperties(document: Document): InspectorCSSPropertyDefinition[]; + function getCSSRegisteredProperties( + document: Document + ): InspectorCSSPropertyDefinition[]; function getCSSRegisteredProperty( document: Document, name: string @@ -32486,8 +33905,14 @@ declare namespace InspectorUtils { withStartingStyle?: boolean ): (CSSRule | InspectorDeclaration)[]; function getOverflowingChildrenOfElement(element: Element): NodeList; - function getParentForNode(node: Node, showingAnonymousContent: boolean): Node | null; - function getRegisteredCssHighlights(document: Document, activeOnly?: boolean): string[]; + function getParentForNode( + node: Node, + showingAnonymousContent: boolean + ): Node | null; + function getRegisteredCssHighlights( + document: Document, + activeOnly?: boolean + ): string[]; function getRelativeRuleLine(rule: CSSRule): number; function getRuleBodyText(initialText: string): string | null; function getRuleColumn(rule: CSSRule): number; @@ -32506,7 +33931,10 @@ declare namespace InspectorUtils { function hasRulesModifiedByCSSOM(sheet: CSSStyleSheet): boolean; function hsvToRgb(h: number, s: number, v: number): number[] | Float32Array; function isBlockContainer(element: Element): boolean; - function isCustomElementName(name: string | null, namespaceURI: string | null): boolean; + function isCustomElementName( + name: string | null, + namespaceURI: string | null + ): boolean; function isElementThemed(element: Element): boolean; function isIgnorableWhitespace(dataNode: CharacterData): boolean; function isInheritedProperty(document: Document, property: string): boolean; @@ -32528,12 +33956,26 @@ declare namespace InspectorUtils { ): string | null; function rgbToColorName(r: number, g: number, b: number): string; function rgbToHsv(r: number, g: number, b: number): number[] | Float32Array; - function rgbToNearestColorName(r: number, g: number, b: number): InspectorNearestColor; + function rgbToNearestColorName( + r: number, + g: number, + b: number + ): InspectorNearestColor; function setContentState(element: Element, state: number): boolean; - function setDynamicToolbarMaxHeight(aContext: BrowsingContext | null, aHeight: number): void; - function setVerticalClipping(aContext: BrowsingContext | null, aOffset: number): void; + function setDynamicToolbarMaxHeight( + aContext: BrowsingContext | null, + aHeight: number + ): void; + function setVerticalClipping( + aContext: BrowsingContext | null, + aOffset: number + ): void; function supports(conditionText: string, options?: SupportsOptions): boolean; - function valueMatchesSyntax(document: Document, value: string, syntax: string): boolean; + function valueMatchesSyntax( + document: Document, + value: string, + syntax: string + ): boolean; } declare namespace L10nOverlays { @@ -32544,7 +33986,10 @@ declare namespace L10nOverlays { } declare namespace MediaControlService { - function generateMediaControlKey(aKey: MediaControlKey, aSeekValue?: number): void; + function generateMediaControlKey( + aKey: MediaControlKey, + aSeekValue?: number + ): void; function getCurrentActiveMediaMetadata(): MediaMetadataInit; function getCurrentMediaSessionPlaybackState(): MediaSessionPlaybackState; } @@ -32571,18 +34016,33 @@ declare namespace PathUtils { function normalize(path: string): string; function parent(path: string, depth?: number): string | null; function split(path: string): string[]; - function splitRelative(path: string, options?: SplitRelativeOptions): string[]; + function splitRelative( + path: string, + options?: SplitRelativeOptions + ): string[]; function toExtendedWindowsPath(path: string): string; function toFileURI(path: string): string; } declare namespace PlacesObservers { var counts: PlacesEventCounts; - function addListener(eventTypes: PlacesEventType[], listener: PlacesEventCallback): void; - function addListener(eventTypes: PlacesEventType[], listener: PlacesWeakCallbackWrapper): void; + function addListener( + eventTypes: PlacesEventType[], + listener: PlacesEventCallback + ): void; + function addListener( + eventTypes: PlacesEventType[], + listener: PlacesWeakCallbackWrapper + ): void; function notifyListeners(events: PlacesEvent[]): void; - function removeListener(eventTypes: PlacesEventType[], listener: PlacesEventCallback): void; - function removeListener(eventTypes: PlacesEventType[], listener: PlacesWeakCallbackWrapper): void; + function removeListener( + eventTypes: PlacesEventType[], + listener: PlacesEventCallback + ): void; + function removeListener( + eventTypes: PlacesEventType[], + listener: PlacesWeakCallbackWrapper + ): void; } declare namespace PromiseDebugging { @@ -32592,7 +34052,9 @@ declare namespace PromiseDebugging { function getPromiseID(p: any): string; function getRejectionStack(p: any): any; function getState(p: any): PromiseDebuggingStateHolder; - function removeUncaughtRejectionObserver(o: UncaughtRejectionObserver): boolean; + function removeUncaughtRejectionObserver( + o: UncaughtRejectionObserver + ): boolean; } declare namespace SessionStoreUtils { @@ -32622,7 +34084,10 @@ declare namespace SessionStoreUtils { useCapture: boolean, mozSystemGroup?: boolean ): void; - function restoreDocShellCapabilities(docShell: nsIDocShell, disallowCapabilities: string): void; + function restoreDocShellCapabilities( + docShell: nsIDocShell, + disallowCapabilities: string + ): void; function restoreDocShellState( browsingContext: CanonicalBrowsingContext, url: string | null, @@ -32653,8 +34118,14 @@ declare namespace UniFFIScaffolding { id: UniFFIFunctionId, ...args: UniFFIScaffoldingValue[] ): UniFFIScaffoldingCallResult; - function deregisterCallbackHandler(interfaceId: UniFFICallbackInterfaceId): void; - function readPointer(id: UniFFIPointerId, buff: ArrayBuffer, position: number): UniFFIPointer; + function deregisterCallbackHandler( + interfaceId: UniFFICallbackInterfaceId + ): void; + function readPointer( + id: UniFFIPointerId, + buff: ArrayBuffer, + position: number + ): UniFFIPointer; function registerCallbackHandler( interfaceId: UniFFICallbackInterfaceId, handler: UniFFICallbackHandler @@ -32680,10 +34151,18 @@ declare namespace WebrtcGlobalInformation { var aecDebugLogDir: string; function clearAllStats(): void; function clearLogging(): void; - function getAllStats(callback: WebrtcGlobalStatisticsCallback, pcIdFilter?: string): void; - function getLogging(pattern: string, callback: WebrtcGlobalLoggingCallback): void; + function getAllStats( + callback: WebrtcGlobalStatisticsCallback, + pcIdFilter?: string + ): void; + function getLogging( + pattern: string, + callback: WebrtcGlobalLoggingCallback + ): void; function getMediaContext(): WebrtcGlobalMediaContext; - function getStatsHistoryPcIds(callback: WebrtcGlobalStatisticsHistoryPcIdsCallback): void; + function getStatsHistoryPcIds( + callback: WebrtcGlobalStatisticsHistoryPcIdsCallback + ): void; function getStatsHistorySince( callback: WebrtcGlobalStatisticsHistoryCallback, pcIdFilter: string, @@ -32862,7 +34341,13 @@ interface OnBeforeUnloadEventHandlerNonNull { } interface OnErrorEventHandlerNonNull { - (event: Event | string, source?: string, lineno?: number, column?: number, error?: any): any; + ( + event: Event | string, + source?: string, + lineno?: number, + column?: number, + error?: any + ): any; } interface PeerConnectionLifecycleCallback { @@ -32993,7 +34478,12 @@ interface XRFrameRequestCallback { } interface mozPacketCallback { - (level: number, type: mozPacketDumpType, sending: boolean, packet: ArrayBuffer): void; + ( + level: number, + type: mozPacketDumpType, + sending: boolean, + packet: ArrayBuffer + ): void; } interface HTMLElementTagNameMap { @@ -33144,7 +34634,10 @@ interface MathMLElementTagNameMap {} /** @deprecated Directly use HTMLElementTagNameMap or SVGElementTagNameMap as appropriate, instead. */ type ElementTagNameMap = HTMLElementTagNameMap & - Pick>; + Pick< + SVGElementTagNameMap, + Exclude + >; declare let Audio: { new (src?: string): HTMLAudioElement; @@ -33212,7 +34705,8 @@ declare let navigator: Navigator; declare let ondevicelight: ((this: Window, ev: Event) => any) | null; declare let ondevicemotion: ((this: Window, ev: Event) => any) | null; declare let ondeviceorientation: ((this: Window, ev: Event) => any) | null; -declare let ondeviceorientationabsolute: ((this: Window, ev: Event) => any) | null; +declare let ondeviceorientationabsolute: + ((this: Window, ev: Event) => any) | null; declare let onorientationchange: ((this: Window, ev: Event) => any) | null; declare let onuserproximity: ((this: Window, ev: Event) => any) | null; declare let onvrdisplayactivate: ((this: Window, ev: Event) => any) | null; @@ -33285,7 +34779,9 @@ declare function getDefaultComputedStyle( elt: Element, pseudoElt?: string ): CSSStyleDeclaration | null; -declare function getGroupMessageManager(aGroup: string): ChromeMessageBroadcaster; +declare function getGroupMessageManager( + aGroup: string +): ChromeMessageBroadcaster; declare function getInterface(iid: any): any; declare function getRegionalPrefsLocales(): string[]; declare function getSelection(): Selection | null; @@ -33299,22 +34795,35 @@ declare function moveTo(x: number, y: number): void; declare function moveToWorkspace(workspaceID: string): void; declare function mozScrollSnap(): void; declare function notifyDefaultButtonLoaded(defaultButton: Element): void; -declare function open(url?: string | URL, target?: string, features?: string): WindowProxy | null; +declare function open( + url?: string | URL, + target?: string, + features?: string +): WindowProxy | null; declare function openDialog( url?: string, name?: string, options?: string, ...extraArguments: any[] ): WindowProxy | null; -declare function postMessage(message: any, targetOrigin: string, transfer?: any[]): void; -declare function postMessage(message: any, options?: WindowPostMessageOptions): void; +declare function postMessage( + message: any, + targetOrigin: string, + transfer?: any[] +): void; +declare function postMessage( + message: any, + options?: WindowPostMessageOptions +): void; declare function print(): void; declare function printPreview( settings?: nsIPrintSettings | null, listener?: nsIWebProgressListener | null, docShellToPreviewInto?: nsIDocShell | null ): WindowProxy | null; -declare function promiseDocumentFlushed(callback: PromiseDocumentFlushedCallback): Promise; +declare function promiseDocumentFlushed( + callback: PromiseDocumentFlushedCallback +): Promise; declare function prompt(message?: string, _default?: string): string | null; declare function releaseEvents(): void; declare function requestIdleCallback( @@ -33334,7 +34843,10 @@ declare function scrollTo(x: number, y: number): void; declare function scrollTo(options?: ScrollToOptions): void; declare function setCursor(cursor: string): void; declare function setResizable(resizable: boolean): void; -declare function setScrollMarks(marks: number[], onHorizontalScrollbar?: boolean): void; +declare function setScrollMarks( + marks: number[], + onHorizontalScrollbar?: boolean +): void; declare function shouldReportForServiceWorkerScope(aScope: string): boolean; declare function sizeToContent(constraints?: SizeToContentConstraints): void; declare function stop(): void; @@ -33372,7 +34884,8 @@ declare let onchange: ((this: Window, ev: Event) => any) | null; declare let onclick: ((this: Window, ev: Event) => any) | null; declare let onclose: ((this: Window, ev: Event) => any) | null; declare let oncommand: ((this: Window, ev: Event) => any) | null; -declare let oncontentvisibilityautostatechange: ((this: Window, ev: Event) => any) | null; +declare let oncontentvisibilityautostatechange: + ((this: Window, ev: Event) => any) | null; declare let oncontextlost: ((this: Window, ev: Event) => any) | null; declare let oncontextmenu: ((this: Window, ev: Event) => any) | null; declare let oncontextrestored: ((this: Window, ev: Event) => any) | null; @@ -33433,7 +34946,8 @@ declare let onreset: ((this: Window, ev: Event) => any) | null; declare let onresize: ((this: Window, ev: Event) => any) | null; declare let onscroll: ((this: Window, ev: Event) => any) | null; declare let onscrollend: ((this: Window, ev: Event) => any) | null; -declare let onsecuritypolicyviolation: ((this: Window, ev: Event) => any) | null; +declare let onsecuritypolicyviolation: + ((this: Window, ev: Event) => any) | null; declare let onseeked: ((this: Window, ev: Event) => any) | null; declare let onseeking: ((this: Window, ev: Event) => any) | null; declare let onselect: ((this: Window, ev: Event) => any) | null; @@ -33452,7 +34966,8 @@ declare let ontransitionstart: ((this: Window, ev: Event) => any) | null; declare let onvolumechange: ((this: Window, ev: Event) => any) | null; declare let onwaiting: ((this: Window, ev: Event) => any) | null; declare let onwebkitanimationend: ((this: Window, ev: Event) => any) | null; -declare let onwebkitanimationiteration: ((this: Window, ev: Event) => any) | null; +declare let onwebkitanimationiteration: + ((this: Window, ev: Event) => any) | null; declare let onwebkitanimationstart: ((this: Window, ev: Event) => any) | null; declare let onwebkittransitionend: ((this: Window, ev: Event) => any) | null; declare let onwheel: ((this: Window, ev: Event) => any) | null; @@ -33504,13 +35019,27 @@ declare function createImageBitmap( aSh: number, aOptions?: ImageBitmapOptions ): Promise; -declare function fetch(input: RequestInfo | URL, init?: RequestInit): Promise; +declare function fetch( + input: RequestInfo | URL, + init?: RequestInit +): Promise; declare function isRFPTargetActive(aTargetName: string): boolean; declare function queueMicrotask(callback: VoidFunction): void; declare function reportError(e: any): void; -declare function setInterval(handler: TimerHandler, timeout?: number, ...unused: any[]): number; -declare function setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; -declare function structuredClone(value: any, options?: StructuredSerializeOptions): any; +declare function setInterval( + handler: TimerHandler, + timeout?: number, + ...unused: any[] +): number; +declare function setTimeout( + handler: TimerHandler, + timeout?: number, + ...arguments: any[] +): number; +declare function structuredClone( + value: any, + options?: StructuredSerializeOptions +): any; declare let sessionStorage: Storage | null; declare function addEventListener( type: K, @@ -33599,10 +35128,7 @@ type GPUBufferUsageFlags = number; type GPUColor = number[] | GPUColorDict; type GPUColorWriteFlags = number; type GPUCopyExternalImageSource = - | ImageBitmap - | HTMLImageElement - | HTMLCanvasElement - | OffscreenCanvas; + ImageBitmap | HTMLImageElement | HTMLCanvasElement | OffscreenCanvas; type GPUDepthBias = number; type GPUExtent3D = GPUIntegerCoordinate[] | GPUExtent3DDict; type GPUFlagsConstant = number; @@ -33625,7 +35151,8 @@ type GPUTextureUsageFlags = number; type GeometryNode = Text | Element | Document; type HTMLOrSVGImageElement = HTMLImageElement | SVGImageElement; type HeadersInit = string[][] | Record; -type ImageBitmapSource = CanvasImageSource | Blob | CanvasRenderingContext2D | ImageData; +type ImageBitmapSource = + CanvasImageSource | Blob | CanvasRenderingContext2D | ImageData; type ImageBufferSource = AllowSharedBufferSource | ReadableStream; type InferenceSessionFeedsType = InferenceSessionTensorMapType; type InferenceSessionReturnType = InferenceSessionTensorMapType; @@ -33669,14 +35196,16 @@ type PolicyContainer = nsIPolicyContainer; type Principal = nsIPrincipal; type PublicKeyCredentialClientCapabilities = Record; type RTCRtpTransform = RTCRtpScriptTransform; -type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader; +type ReadableStreamReader = + ReadableStreamDefaultReader | ReadableStreamBYOBReader; type ReferrerInfo = nsIReferrerInfo; type RemoteTab = nsIRemoteTab; type ReportList = Report[]; type RequestInfo = Request | string; type SanitizerAttribute = string | SanitizerAttributeNamespace; type SanitizerElement = string | SanitizerElementNamespace; -type SanitizerElementWithAttributes = string | SanitizerElementNamespaceWithAttributes; +type SanitizerElementWithAttributes = + string | SanitizerElementNamespaceWithAttributes; type StackFrame = nsIStackFrame; type StringOrOpenPopupOptions = string | OpenPopupOptions; type StructuredClonable = any; @@ -33690,11 +35219,14 @@ type UniFFICallbackObjectHandle = number; type UniFFIFunctionId = number; type UniFFIPointerId = number; type UniFFIScaffoldingValue = number | ArrayBuffer | UniFFIPointer; -type UnrestrictedDoubleOrKeyframeAnimationOptions = number | KeyframeAnimationOptions; +type UnrestrictedDoubleOrKeyframeAnimationOptions = + number | KeyframeAnimationOptions; type VibratePattern = number | number[]; -type XMLHttpRequestBodyInit = Blob | BufferSource | FormData | URLSearchParams | string; +type XMLHttpRequestBodyInit = + Blob | BufferSource | FormData | URLSearchParams | string; type XRWebGLRenderingContext = WebGLRenderingContext | WebGL2RenderingContext; -type XSLTParameterValue = number | boolean | string | Node | Node[] | XPathResult; +type XSLTParameterValue = + number | boolean | string | Node | Node[] | XPathResult; type XULCommandDispatcher = nsIDOMXULCommandDispatcher; type XULControllers = nsIControllers; type nsContentPolicyType = number; @@ -33729,15 +35261,10 @@ type BiquadFilterType = | "peaking"; type BitrateMode = "constant" | "variable"; type CSSBoxType = "border" | "content" | "margin" | "padding"; -type CSSMathOperator = "clamp" | "invert" | "max" | "min" | "negate" | "product" | "sum"; +type CSSMathOperator = + "clamp" | "invert" | "max" | "min" | "negate" | "product" | "sum"; type CSSNumericBaseType = - | "angle" - | "flex" - | "frequency" - | "length" - | "percent" - | "resolution" - | "time"; + "angle" | "flex" | "frequency" | "length" | "percent" | "resolution" | "time"; type CSSStyleSheetParsingMode = "agent" | "author" | "user"; type CacheStorageNamespace = "chrome" | "content"; type CallbackDebuggerNotificationPhase = "post" | "pre"; @@ -33765,8 +35292,10 @@ type CanvasFontVariantCaps = type CanvasLineCap = "butt" | "round" | "square"; type CanvasLineJoin = "bevel" | "miter" | "round"; type CanvasTextAlign = "center" | "end" | "left" | "right" | "start"; -type CanvasTextBaseline = "alphabetic" | "bottom" | "hanging" | "ideographic" | "middle" | "top"; -type CanvasTextRendering = "auto" | "geometricPrecision" | "optimizeLegibility" | "optimizeSpeed"; +type CanvasTextBaseline = + "alphabetic" | "bottom" | "hanging" | "ideographic" | "middle" | "top"; +type CanvasTextRendering = + "auto" | "geometricPrecision" | "optimizeLegibility" | "optimizeSpeed"; type CanvasWindingRule = "evenodd" | "nonzero"; type CaretChangedReason = | "dragcaret" @@ -33785,7 +35314,8 @@ type ColorGamut = "p3" | "rec2020" | "srgb"; type ColorSpaceConversion = "default" | "none"; type CompositeOperation = "accumulate" | "add" | "replace"; type CompressionFormat = "deflate" | "deflate-raw" | "gzip" | "zstd"; -type ConnectionType = "bluetooth" | "cellular" | "ethernet" | "none" | "other" | "unknown" | "wifi"; +type ConnectionType = + "bluetooth" | "cellular" | "ethernet" | "none" | "other" | "unknown" | "wifi"; type ConsoleLevel = "error" | "log" | "warning"; type ConsoleLogLevel = | "All" @@ -33810,7 +35340,8 @@ type ContentScriptCssOrigin = "author" | "user"; type ContentScriptExecutionWorld = "ISOLATED" | "MAIN" | "USER_SCRIPT"; type ContentScriptRunAt = "document_end" | "document_idle" | "document_start"; type CookieSameSite = "lax" | "none" | "strict"; -type CredentialMediationRequirement = "conditional" | "optional" | "required" | "silent"; +type CredentialMediationRequirement = + "conditional" | "optional" | "required" | "silent"; type CredentialProtectionPolicy = | "userVerificationOptional" | "userVerificationOptionalWithCredentialIDList" @@ -33852,19 +35383,16 @@ type EncodedAudioChunkType = "delta" | "key"; type EncodedVideoChunkType = "delta" | "key"; type EndingType = "native" | "transparent"; type EventCallbackDebuggerNotificationType = - | "closewatcher" - | "global" - | "node" - | "websocket" - | "worker" - | "xhr"; -type FetchState = "aborted" | "complete" | "errored" | "requesting" | "responding"; + "closewatcher" | "global" | "node" | "websocket" | "worker" | "xhr"; +type FetchState = + "aborted" | "complete" | "errored" | "requesting" | "responding"; type FileSystemHandleKind = "directory" | "file"; type FileType = "directory" | "other" | "regular"; type FillMode = "auto" | "backwards" | "both" | "forwards" | "none"; type FlexItemClampState = "clamped_to_max" | "clamped_to_min" | "unclamped"; type FlexLineGrowthState = "growing" | "shrinking"; -type FlexPhysicalDirection = "horizontal-lr" | "horizontal-rl" | "vertical-bt" | "vertical-tb"; +type FlexPhysicalDirection = + "horizontal-lr" | "horizontal-rl" | "vertical-bt" | "vertical-tb"; type FontFaceLoadStatus = "error" | "loaded" | "loading" | "unloaded"; type FontFaceSetLoadStatus = "loaded" | "loading"; type ForceMediaDocument = "image" | "none" | "video"; @@ -33885,7 +35413,8 @@ type GPUBlendFactor = | "src-alpha" | "src-alpha-saturated" | "zero"; -type GPUBlendOperation = "add" | "max" | "min" | "reverse-subtract" | "subtract"; +type GPUBlendOperation = + "add" | "max" | "min" | "reverse-subtract" | "subtract"; type GPUBufferBindingType = "read-only-storage" | "storage" | "uniform"; type GPUBufferMapState = "mapped" | "pending" | "unmapped"; type GPUCanvasAlphaMode = "opaque" | "premultiplied"; @@ -34046,8 +35575,10 @@ type GPUTextureFormat = | "rgba8unorm" | "rgba8unorm-srgb" | "stencil8"; -type GPUTextureSampleType = "depth" | "float" | "sint" | "uint" | "unfilterable-float"; -type GPUTextureViewDimension = "1d" | "2d" | "2d-array" | "3d" | "cube" | "cube-array"; +type GPUTextureSampleType = + "depth" | "float" | "sint" | "uint" | "unfilterable-float"; +type GPUTextureViewDimension = + "1d" | "2d" | "2d-array" | "3d" | "cube" | "cube-array"; type GPUVertexFormat = | "float16" | "float16x2" @@ -34095,22 +35626,28 @@ type GamepadHand = "" | "left" | "right"; type GamepadHapticActuatorType = "vibration"; type GamepadLightIndicatorType = "on-off" | "rgb"; type GamepadMappingType = "" | "standard" | "xr-standard"; -type GetUserMediaRequestType = "getusermedia" | "recording-device-stopped" | "selectaudiooutput"; +type GetUserMediaRequestType = + "getusermedia" | "recording-device-stopped" | "selectaudiooutput"; type GridDeclaration = "explicit" | "implicit"; type GridTrackState = "removed" | "repeat" | "static"; -type HDCPVersion = "1.0" | "1.1" | "1.2" | "1.3" | "1.4" | "2.0" | "2.1" | "2.2" | "2.3"; -type HardwareAcceleration = "no-preference" | "prefer-hardware" | "prefer-software"; +type HDCPVersion = + "1.0" | "1.1" | "1.2" | "1.3" | "1.4" | "2.0" | "2.1" | "2.2" | "2.3"; +type HardwareAcceleration = + "no-preference" | "prefer-hardware" | "prefer-software"; type HashAlgorithm = "sha256" | "sha384" | "sha512"; type HdrMetadataType = "smpteSt2086" | "smpteSt2094-10" | "smpteSt2094-40"; -type HeadersGuardEnum = "immutable" | "none" | "request" | "request-no-cors" | "response"; +type HeadersGuardEnum = + "immutable" | "none" | "request" | "request-no-cors" | "response"; type HighlightType = "grammar-error" | "highlight" | "spelling-error"; type IDBCursorDirection = "next" | "nextunique" | "prev" | "prevunique"; type IDBRequestReadyState = "done" | "pending"; type IDBTransactionDurability = "default" | "relaxed" | "strict"; -type IDBTransactionMode = "cleanup" | "readonly" | "readwrite" | "readwriteflush" | "versionchange"; +type IDBTransactionMode = + "cleanup" | "readonly" | "readwrite" | "readwriteflush" | "versionchange"; type IdentityCredentialRequestOptionsMode = "active" | "passive"; type ImageOrientation = "flipY" | "from-image" | "none"; -type ImportESModuleTargetGlobal = "contextual" | "current" | "devtools" | "shared"; +type ImportESModuleTargetGlobal = + "contextual" | "current" | "devtools" | "shared"; type InspectorPropertyType = "color" | "gradient" | "timing-function"; type IterationCompositeOperation = "accumulate" | "replace"; type JSRFPTarget = @@ -34122,7 +35659,8 @@ type JSRFPTarget = type L10nFileSourceHasFileStatus = "missing" | "present" | "unknown"; type LatencyMode = "quality" | "realtime"; type LineAlignSetting = "center" | "end" | "start"; -type LlamaKVCacheDtype = "f16" | "f32" | "q4_0" | "q4_1" | "q5_0" | "q5_1" | "q8_0"; +type LlamaKVCacheDtype = + "f16" | "f32" | "q4_0" | "q4_1" | "q5_0" | "q5_1" | "q8_0"; type LlamaSamplerType = | "dist" | "dry" @@ -34254,11 +35792,13 @@ type MozUrlClassificationFlags = type NavigationFocusReset = "after-transition" | "manual"; type NavigationHistoryBehavior = "auto" | "push" | "replace"; type NavigationScrollBehavior = "after-transition" | "manual"; -type NavigationTimingType = "back_forward" | "navigate" | "prerender" | "reload"; +type NavigationTimingType = + "back_forward" | "navigate" | "prerender" | "reload"; type NavigationType = "push" | "reload" | "replace" | "traverse"; type NotificationDirection = "auto" | "ltr" | "rtl"; type NotificationPermission = "default" | "denied" | "granted"; -type OffscreenRenderingContextId = "2d" | "bitmaprenderer" | "webgl" | "webgl2" | "webgpu"; +type OffscreenRenderingContextId = + "2d" | "bitmaprenderer" | "webgl" | "webgl2" | "webgpu"; type OpusBitstreamFormat = "ogg" | "opus"; type OrientationLockType = | "any" @@ -34277,10 +35817,7 @@ type OrientationType = type OscillatorType = "custom" | "sawtooth" | "sine" | "square" | "triangle"; type OverSampleType = "2x" | "4x" | "none"; type OverridableErrorCategory = - | "domain-mismatch" - | "expired-or-not-yet-valid" - | "trust-error" - | "unset"; + "domain-mismatch" | "expired-or-not-yet-valid" | "trust-error" | "unset"; type PCError = | "InvalidAccessError" | "InvalidCharacterError" @@ -34332,7 +35869,8 @@ type PlacesEventType = | "page-visited" | "pages-rank-changed" | "purge-caches"; -type PlaybackDirection = "alternate" | "alternate-reverse" | "normal" | "reverse"; +type PlaybackDirection = + "alternate" | "alternate-reverse" | "normal" | "reverse"; type PopupBlockerState = | "openAbused" | "openAllowed" @@ -34351,8 +35889,10 @@ type RTCBundlePolicy = "balanced" | "max-bundle" | "max-compat"; type RTCCodecType = "decode" | "encode"; type RTCDataChannelState = "closed" | "closing" | "connecting" | "open"; type RTCDataChannelType = "arraybuffer" | "blob"; -type RTCDegradationPreference = "balanced" | "maintain-framerate" | "maintain-resolution"; -type RTCDtlsTransportState = "closed" | "connected" | "connecting" | "failed" | "new"; +type RTCDegradationPreference = + "balanced" | "maintain-framerate" | "maintain-resolution"; +type RTCDtlsTransportState = + "closed" | "connected" | "connecting" | "failed" | "new"; type RTCEncodedVideoFrameType = "delta" | "empty" | "key"; type RTCIceCandidateType = "host" | "prflx" | "relay" | "srflx"; type RTCIceComponent = "rtcp" | "rtp"; @@ -34384,14 +35924,10 @@ type RTCLifecycleEvent = | "icegatheringstatechange" | "initialized"; type RTCPeerConnectionState = - | "closed" - | "connected" - | "connecting" - | "disconnected" - | "failed" - | "new"; + "closed" | "connected" | "connecting" | "disconnected" | "failed" | "new"; type RTCPriorityType = "high" | "low" | "medium" | "very-low"; -type RTCRtpTransceiverDirection = "inactive" | "recvonly" | "sendonly" | "sendrecv" | "stopped"; +type RTCRtpTransceiverDirection = + "inactive" | "recvonly" | "sendonly" | "sendrecv" | "stopped"; type RTCSctpTransportState = "closed" | "connected" | "connecting"; type RTCSdpType = "answer" | "offer" | "pranswer" | "rollback"; type RTCSignalingState = @@ -34402,12 +35938,7 @@ type RTCSignalingState = | "have-remote-pranswer" | "stable"; type RTCStatsIceCandidatePairState = - | "cancelled" - | "failed" - | "frozen" - | "in-progress" - | "succeeded" - | "waiting"; + "cancelled" | "failed" | "frozen" | "in-progress" | "succeeded" | "waiting"; type RTCStatsType = | "candidate-pair" | "codec" @@ -34470,10 +36001,12 @@ type RequestDestination = type RequestMode = "cors" | "navigate" | "no-cors" | "same-origin"; type RequestPriority = "auto" | "high" | "low"; type RequestRedirect = "error" | "follow" | "manual"; -type ResizeObserverBoxOptions = "border-box" | "content-box" | "device-pixel-content-box"; +type ResizeObserverBoxOptions = + "border-box" | "content-box" | "device-pixel-content-box"; type ResourceCacheTarget = "chrome" | "content"; type ResourceCacheType = "image" | "script" | "stylesheet"; -type ResponseType = "basic" | "cors" | "default" | "error" | "opaque" | "opaqueredirect"; +type ResponseType = + "basic" | "cors" | "default" | "error" | "opaque" | "opaqueredirect"; type SanitizerPresets = "default"; type ScreenColorGamut = "p3" | "rec2020" | "srgb"; type ScrollBehavior = "auto" | "instant" | "smooth"; @@ -34493,7 +36026,8 @@ type ServiceWorkerState = type ServiceWorkerUpdateViaCache = "all" | "imports" | "none"; type ShadowRootMode = "closed" | "open"; type SlotAssignmentMode = "manual" | "named"; -type SocketReadyState = "closed" | "closing" | "halfclosed" | "open" | "opening"; +type SocketReadyState = + "closed" | "closing" | "halfclosed" | "open" | "opening"; type SourceBufferAppendMode = "segments" | "sequence"; type SpeechRecognitionErrorCode = | "aborted" @@ -34534,17 +36068,22 @@ type SupportedType = type TCPReadyState = "closed" | "closing" | "connecting" | "open"; type TCPSocketBinaryType = "arraybuffer" | "string"; type TaskPriority = "background" | "user-blocking" | "user-visible"; -type TensorDataLocation = "cpu" | "cpu-pinned" | "gpu-buffer" | "ml-tensor" | "none" | "texture"; -type TextTrackKind = "captions" | "chapters" | "descriptions" | "metadata" | "subtitles"; +type TensorDataLocation = + "cpu" | "cpu-pinned" | "gpu-buffer" | "ml-tensor" | "none" | "texture"; +type TextTrackKind = + "captions" | "chapters" | "descriptions" | "metadata" | "subtitles"; type TextTrackMode = "disabled" | "hidden" | "showing"; type TouchEventsOverride = "disabled" | "enabled" | "none"; type TransferFunction = "hlg" | "pq" | "srgb"; type UniFFIScaffoldingCallCode = "error" | "internal-error" | "success"; -type VRDisplayEventReason = "mounted" | "navigation" | "requested" | "unmounted"; +type VRDisplayEventReason = + "mounted" | "navigation" | "requested" | "unmounted"; type VREye = "left" | "right"; -type VideoColorPrimaries = "bt2020" | "bt470bg" | "bt709" | "smpte170m" | "smpte432"; +type VideoColorPrimaries = + "bt2020" | "bt470bg" | "bt709" | "smpte170m" | "smpte432"; type VideoEncoderBitrateMode = "constant" | "quantizer" | "variable"; -type VideoMatrixCoefficients = "bt2020-ncl" | "bt470bg" | "bt709" | "rgb" | "smpte170m"; +type VideoMatrixCoefficients = + "bt2020-ncl" | "bt470bg" | "bt709" | "rgb" | "smpte170m"; type VideoPixelFormat = | "BGRA" | "BGRX" @@ -34570,12 +36109,7 @@ type VideoPixelFormat = | "RGBA" | "RGBX"; type VideoTransferCharacteristics = - | "bt709" - | "hlg" - | "iec61966-2-1" - | "linear" - | "pq" - | "smpte170m"; + "bt709" | "hlg" | "iec61966-2-1" | "linear" | "pq" | "smpte170m"; type VisibilityState = "hidden" | "visible"; type WakeLockType = "screen"; type WebGLPowerPreference = "default" | "high-performance" | "low-power"; @@ -34611,15 +36145,18 @@ type WebIDLUtilityActorName = | "windowsUtils"; type WebTransportCongestionControl = "default" | "low-latency" | "throughput"; type WebTransportErrorSource = "session" | "stream"; -type WebTransportReliabilityMode = "pending" | "reliable-only" | "supports-unreliable"; +type WebTransportReliabilityMode = + "pending" | "reliable-only" | "supports-unreliable"; type WireframeRectType = "background" | "image" | "text" | "unknown"; type WorkerType = "classic" | "module"; type WriteCommandType = "seek" | "truncate" | "write"; type WriteMode = "append" | "appendOrCreate" | "create" | "overwrite"; -type XMLHttpRequestResponseType = "" | "arraybuffer" | "blob" | "document" | "json" | "text"; +type XMLHttpRequestResponseType = + "" | "arraybuffer" | "blob" | "document" | "json" | "text"; type XREye = "left" | "none" | "right"; type XRHandedness = "left" | "none" | "right"; -type XRReferenceSpaceType = "bounded-floor" | "local" | "local-floor" | "unbounded" | "viewer"; +type XRReferenceSpaceType = + "bounded-floor" | "local" | "local-floor" | "unbounded" | "viewer"; type XRSessionMode = "immersive-ar" | "immersive-vr" | "inline"; type XRTargetRayMode = "gaze" | "screen" | "tracked-pointer"; type XRVisibilityState = "hidden" | "visible" | "visible-blurred"; @@ -34630,7 +36167,11 @@ type mozPacketDumpType = "rtcp" | "rtp" | "srtcp" | "srtp"; ///////////////////////////// interface AudioParam { - setValueCurveAtTime(values: Iterable, startTime: number, duration: number): AudioParam; + setValueCurveAtTime( + values: Iterable, + startTime: number, + duration: number + ): AudioParam; } interface AudioParamMap extends ReadonlyMap {} @@ -34640,7 +36181,10 @@ interface AudioTrackList { } interface BaseAudioContext { - createIIRFilter(feedforward: Iterable, feedback: Iterable): IIRFilterNode; + createIIRFilter( + feedforward: Iterable, + feedback: Iterable + ): IIRFilterNode; createPeriodicWave( real: Iterable, imag: Iterable, @@ -34852,7 +36396,11 @@ interface Headers { } interface HeapSnapshot { - computeShortestPaths(start: NodeId, targets: Iterable, maxNumPaths: number): any; + computeShortestPaths( + start: NodeId, + targets: Iterable, + maxNumPaths: number + ): any; } interface Highlight extends Set {} @@ -34880,7 +36428,10 @@ interface ImageTrackList { } interface IntlUtils { - getDisplayNames(locales: Iterable, options?: DisplayNameOptions): DisplayNameResult; + getDisplayNames( + locales: Iterable, + options?: DisplayNameOptions + ): DisplayNameResult; } interface L10nRegistry { @@ -34989,7 +36540,10 @@ interface PaintRequestList { } interface PeerConnectionObserver { - fireTrackEvent(receiver: RTCRtpReceiver, streams: Iterable): void; + fireTrackEvent( + receiver: RTCRtpReceiver, + streams: Iterable + ): void; } interface PlacesEventCounts extends ReadonlyMap {} @@ -35130,7 +36684,10 @@ interface TestInterfaceMaplike extends Map {} interface TestInterfaceMaplikeJSObject extends ReadonlyMap {} -interface TestInterfaceMaplikeObject extends ReadonlyMap {} +interface TestInterfaceMaplikeObject extends ReadonlyMap< + string, + TestInterfaceMaplike +> {} interface TestInterfaceSetlike extends Set {} @@ -35197,8 +36754,15 @@ interface WebGL2RenderingContextBase { srcOffset?: GLuint ): void; drawBuffers(buffers: Iterable): void; - getActiveUniforms(program: WebGLProgram, uniformIndices: Iterable, pname: GLenum): any; - getUniformIndices(program: WebGLProgram, uniformNames: Iterable): GLuint[] | null; + getActiveUniforms( + program: WebGLProgram, + uniformIndices: Iterable, + pname: GLenum + ): any; + getUniformIndices( + program: WebGLProgram, + uniformNames: Iterable + ): GLuint[] | null; invalidateFramebuffer(target: GLenum, attachments: Iterable): void; invalidateSubFramebuffer( target: GLenum, @@ -35353,14 +36917,38 @@ interface WebGL2RenderingContextBase { } interface WebGLRenderingContext { - uniform1fv(location: WebGLUniformLocation | null, data: Iterable): void; - uniform1iv(location: WebGLUniformLocation | null, data: Iterable): void; - uniform2fv(location: WebGLUniformLocation | null, data: Iterable): void; - uniform2iv(location: WebGLUniformLocation | null, data: Iterable): void; - uniform3fv(location: WebGLUniformLocation | null, data: Iterable): void; - uniform3iv(location: WebGLUniformLocation | null, data: Iterable): void; - uniform4fv(location: WebGLUniformLocation | null, data: Iterable): void; - uniform4iv(location: WebGLUniformLocation | null, data: Iterable): void; + uniform1fv( + location: WebGLUniformLocation | null, + data: Iterable + ): void; + uniform1iv( + location: WebGLUniformLocation | null, + data: Iterable + ): void; + uniform2fv( + location: WebGLUniformLocation | null, + data: Iterable + ): void; + uniform2iv( + location: WebGLUniformLocation | null, + data: Iterable + ): void; + uniform3fv( + location: WebGLUniformLocation | null, + data: Iterable + ): void; + uniform3iv( + location: WebGLUniformLocation | null, + data: Iterable + ): void; + uniform4fv( + location: WebGLUniformLocation | null, + data: Iterable + ): void; + uniform4iv( + location: WebGLUniformLocation | null, + data: Iterable + ): void; uniformMatrix2fv( location: WebGLUniformLocation | null, transpose: GLboolean, @@ -35386,8 +36974,15 @@ interface WebGLRenderingContextBase { } interface Window { - postMessage(message: any, targetOrigin: string, transfer?: Iterable): void; - setScrollMarks(marks: Iterable, onHorizontalScrollbar?: boolean): void; + postMessage( + message: any, + targetOrigin: string, + transfer?: Iterable + ): void; + setScrollMarks( + marks: Iterable, + onHorizontalScrollbar?: boolean + ): void; } interface Worker { @@ -35402,7 +36997,11 @@ interface XRInputSourceArray { } interface XSLTProcessor { - setParameter(namespaceURI: string | null, localName: string, value: Iterable): void; + setParameter( + namespaceURI: string | null, + localName: string, + value: Iterable + ): void; } ///////////////////////////// @@ -35417,7 +37016,9 @@ interface FileSystemDirectoryHandle { } interface ReadableStream { - [Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): AsyncIterableIterator; + [Symbol.asyncIterator]( + options?: ReadableStreamIteratorOptions + ): AsyncIterableIterator; values(options?: ReadableStreamIteratorOptions): AsyncIterableIterator; } @@ -35444,7 +37045,9 @@ interface TestInterfaceAsyncIterableSingleWithArgs { [Symbol.asyncIterator]( options?: TestInterfaceAsyncIteratorOptions ): AsyncIterableIterator; - values(options?: TestInterfaceAsyncIteratorOptions): AsyncIterableIterator; + values( + options?: TestInterfaceAsyncIteratorOptions + ): AsyncIterableIterator; } declare namespace CSS { diff --git a/src/zen/@types/lib.gecko.glean.d.ts b/src/zen/@types/lib.gecko.glean.d.ts index d08c39cc1..1c76502aa 100644 --- a/src/zen/@types/lib.gecko.glean.d.ts +++ b/src/zen/@types/lib.gecko.glean.d.ts @@ -77,7 +77,10 @@ interface GleanImpl { }; networking: { - captivePortalBannerDisplayTime: Record<"abort" | "dismiss" | "success", GleanCounter>; + captivePortalBannerDisplayTime: Record< + "abort" | "dismiss" | "success", + GleanCounter + >; captivePortalBannerDisplayed: GleanCounter; cacheMetadataFirstReadTime: GleanTimingDistribution; cacheMetadataSecondReadTime: GleanTimingDistribution; @@ -111,10 +114,16 @@ interface GleanImpl { >; cookiePurgeEntryMax: GleanCustomDistribution; cookiePurgeMax: GleanCustomDistribution; - cookieTimestampFixedCount: Record<"creationTime" | "lastAccessed", GleanCounter>; + cookieTimestampFixedCount: Record< + "creationTime" | "lastAccessed", + GleanCounter + >; dnsFailedLookupTime: GleanTimingDistribution; dnsLookupTime: GleanTimingDistribution; - dnsNativeCount: Record<"https_private" | "https_regular" | "private" | "regular", GleanCounter>; + dnsNativeCount: Record< + "https_private" | "https_regular" | "private" | "regular", + GleanCounter + >; dnsNativeHttpsCallTime: GleanTimingDistribution; dnsRenewalTime: GleanTimingDistribution; dnsRenewalTimeForTtl: GleanTimingDistribution; @@ -326,7 +335,10 @@ interface GleanImpl { | "other_5xx", GleanCounter >; - httpResponseVersion: Record<"http_1" | "http_2" | "http_3" | "unknown", GleanCounter>; + httpResponseVersion: Record< + "http_1" | "http_2" | "http_3" | "unknown", + GleanCounter + >; httpToHttpsUpgradeReason: Record< | "already_https" | "csp_uir" @@ -351,7 +363,10 @@ interface GleanImpl { "load_is_http" | "load_is_http_for_local_domain" | "load_is_https", GleanCounter >; - httpsRrPresented: Record<"none" | "presented" | "presented_with_http3", GleanCounter>; + httpsRrPresented: Record< + "none" | "presented" | "presented_with_http3", + GleanCounter + >; localNetworkAccess: Record< | "failure" | "private_to_local_http" @@ -364,7 +379,10 @@ interface GleanImpl { GleanCounter >; localNetworkAccessPort: GleanCustomDistribution; - localNetworkAccessPromptsShown: Record<"local_network" | "localhost", GleanCounter>; + localNetworkAccessPromptsShown: Record< + "local_network" | "localhost", + GleanCounter + >; localNetworkBlockedTracker: GleanCounter; osSocketLimitReached: GleanCounter; prcloseTcpBlockingTimeConnectivityChange: GleanTimingDistribution; @@ -393,13 +411,23 @@ interface GleanImpl { prconnectcontinueBlockingTimeOffline: GleanTimingDistribution; prconnectcontinueBlockingTimeShutdown: GleanTimingDistribution; proxyInfoType: Record< - "direct" | "http" | "https" | "socks4" | "socks4a" | "socks5" | "socks5h" | "unknown", + | "direct" + | "http" + | "https" + | "socks4" + | "socks4a" + | "socks5" + | "socks5h" + | "unknown", GleanCounter >; residualCacheFolderCount: GleanCounter; residualCacheFolderRemoval: Record<"failure" | "success", GleanCounter>; speculativeConnectOutcome: Record< - "aborted_https_not_enabled" | "aborted_socket_fail" | "aborted_socket_limit" | "successful", + | "aborted_https_not_enabled" + | "aborted_socket_fail" + | "aborted_socket_limit" + | "successful", GleanCounter >; sqliteCookiesBlockMainThread: GleanTimingDistribution; @@ -470,7 +498,12 @@ interface GleanImpl { GleanTimingDistribution >; trrFetchDuration: Record< - "h1" | "h1_network_only" | "h2" | "h2_network_only" | "h3" | "h3_network_only", + | "h1" + | "h1_network_only" + | "h2" + | "h2_network_only" + | "h3" + | "h3_network_only", GleanTimingDistribution >; trrFirstSentToLastReceived: Record< @@ -643,13 +676,23 @@ interface GleanImpl { GleanTimingDistribution >; connectionAddressType: Record< - "http_1_ipv4" | "http_1_ipv6" | "http_2_ipv4" | "http_2_ipv6" | "http_3_ipv4" | "http_3_ipv6", + | "http_1_ipv4" + | "http_1_ipv6" + | "http_2_ipv4" + | "http_2_ipv6" + | "http_3_ipv4" + | "http_3_ipv6", GleanCounter >; dataTransferredV3Kb: Record; http3Enabled: GleanBoolean; httpsRecordState: Record< - "all_excluded" | "invalid" | "no_default_alpn" | "others" | "succeeded" | "unmatched_cname", + | "all_excluded" + | "invalid" + | "no_default_alpn" + | "others" + | "succeeded" + | "unmatched_cname", GleanCounter >; httpsRrPrefsUsage: GleanQuantity; @@ -672,9 +715,15 @@ interface GleanImpl { clickFingerprinters: GleanEventNoExtras; clickFullReport: GleanEventNoExtras; clickMilestoneMessage: GleanEventNoExtras; - clickProtectionspopupCfr: GleanEventWithExtras<{ message?: string; value?: string }>; + clickProtectionspopupCfr: GleanEventWithExtras<{ + message?: string; + value?: string; + }>; clickSettings: GleanEventNoExtras; - clickSmartblockembedsToggle: GleanEventWithExtras<{ isBlock?: string; openingReason?: string }>; + clickSmartblockembedsToggle: GleanEventWithExtras<{ + isBlock?: string; + openingReason?: string; + }>; clickSocial: GleanEventNoExtras; clickSubviewSettings: GleanEventWithExtras<{ value?: string }>; clickTrackers: GleanEventNoExtras; @@ -686,7 +735,10 @@ interface GleanImpl { openingReason?: string; smartblockEmbedTogglesShown?: string; }>; - openProtectionspopupCfr: GleanEventWithExtras<{ message?: string; value?: string }>; + openProtectionspopupCfr: GleanEventWithExtras<{ + message?: string; + value?: string; + }>; smartblockembedsShown: GleanCounter; }; @@ -748,7 +800,11 @@ interface GleanImpl { changeLocation: GleanEventNoExtras; compressedArchiveSize: GleanMemoryDistribution; cookiesSize: GleanQuantity; - created: GleanEventWithExtras<{ encrypted?: string; location?: string; size?: string }>; + created: GleanEventWithExtras<{ + encrypted?: string; + location?: string; + size?: string; + }>; credentialsDataSize: GleanQuantity; enabled: GleanBoolean; error: GleanEventWithExtras<{ backup_step?: string; error_code?: string }>; @@ -830,18 +886,31 @@ interface GleanImpl { firefoxview: { cumulativeSearches: Record< - "history" | "opentabs" | "recentbrowsing" | "recentlyclosed" | "syncedtabs", + | "history" + | "opentabs" + | "recentbrowsing" + | "recentlyclosed" + | "syncedtabs", GleanCustomDistribution >; }; firefoxviewNext: { - browserContextMenuTabs: GleanEventWithExtras<{ menu_action?: string; page?: string }>; + browserContextMenuTabs: GleanEventWithExtras<{ + menu_action?: string; + page?: string; + }>; cardCollapsedCardContainer: GleanEventWithExtras<{ data_type?: string }>; cardExpandedCardContainer: GleanEventWithExtras<{ data_type?: string }>; - changePageNavigation: GleanEventWithExtras<{ page?: string; source?: string }>; + changePageNavigation: GleanEventWithExtras<{ + page?: string; + source?: string; + }>; closeOpenTabTabs: GleanEventNoExtras; - contextMenuTabs: GleanEventWithExtras<{ data_type?: string; menu_action?: string }>; + contextMenuTabs: GleanEventWithExtras<{ + data_type?: string; + menu_action?: string; + }>; dismissClosedTabTabs: GleanEventWithExtras<{ delta?: string; page?: string; @@ -852,11 +921,18 @@ interface GleanImpl { fxaMobileSync: GleanEventWithExtras<{ has_devices?: string }>; historyVisits: GleanEventNoExtras; openTabTabs: GleanEventWithExtras<{ page?: string; window?: string }>; - recentlyClosedTabs: GleanEventWithExtras<{ delta?: string; page?: string; position?: string }>; + recentlyClosedTabs: GleanEventWithExtras<{ + delta?: string; + page?: string; + position?: string; + }>; searchInitiatedSearch: GleanEventWithExtras<{ page?: string }>; searchShowAllShowallbutton: GleanEventWithExtras<{ section?: string }>; showAllHistoryTabs: GleanEventNoExtras; - sortHistoryTabs: GleanEventWithExtras<{ search_start?: string; sort_type?: string }>; + sortHistoryTabs: GleanEventWithExtras<{ + search_start?: string; + sort_type?: string; + }>; syncedTabsTabs: GleanEventWithExtras<{ page?: string }>; tabSelectedToolbarbutton: GleanEventNoExtras; }; @@ -872,15 +948,37 @@ interface GleanImpl { contextmenuRemove: GleanEventWithExtras<{ provider?: string }>; enabled: GleanBoolean; experimentCheckboxClick: GleanEventWithExtras<{ enabled?: string }>; - keyboardShortcut: GleanEventWithExtras<{ enabled?: string; sidebar?: string }>; - lengthDisclaimer: GleanEventWithExtras<{ length?: string; provider?: string; type?: string }>; - lengthDisclaimerDismissed: GleanEventWithExtras<{ provider?: string; type?: string }>; + keyboardShortcut: GleanEventWithExtras<{ + enabled?: string; + sidebar?: string; + }>; + lengthDisclaimer: GleanEventWithExtras<{ + length?: string; + provider?: string; + type?: string; + }>; + lengthDisclaimerDismissed: GleanEventWithExtras<{ + provider?: string; + type?: string; + }>; menu: GleanBoolean; onboardingClose: GleanEventWithExtras<{ provider?: string; step?: string }>; - onboardingFinish: GleanEventWithExtras<{ provider?: string; step?: string }>; - onboardingLearnMore: GleanEventWithExtras<{ provider?: string; step?: string }>; - onboardingProviderChoiceDisplayed: GleanEventWithExtras<{ provider?: string; step?: string }>; - onboardingProviderSelection: GleanEventWithExtras<{ provider?: string; step?: string }>; + onboardingFinish: GleanEventWithExtras<{ + provider?: string; + step?: string; + }>; + onboardingLearnMore: GleanEventWithExtras<{ + provider?: string; + step?: string; + }>; + onboardingProviderChoiceDisplayed: GleanEventWithExtras<{ + provider?: string; + step?: string; + }>; + onboardingProviderSelection: GleanEventWithExtras<{ + provider?: string; + step?: string; + }>; onboardingProviderTerms: GleanEventWithExtras<{ provider?: string; step?: string; @@ -896,7 +994,11 @@ interface GleanImpl { source?: string; }>; provider: GleanString; - providerChange: GleanEventWithExtras<{ current?: string; previous?: string; surface?: string }>; + providerChange: GleanEventWithExtras<{ + current?: string; + previous?: string; + surface?: string; + }>; shortcuts: GleanBoolean; shortcutsCheckboxClick: GleanEventWithExtras<{ enabled?: string }>; shortcutsCustom: GleanBoolean; @@ -918,9 +1020,15 @@ interface GleanImpl { }>; sidebar: GleanBoolean; sidebarCloseClick: GleanEventWithExtras<{ provider?: string }>; - sidebarMoreMenuClick: GleanEventWithExtras<{ action?: string; provider?: string }>; + sidebarMoreMenuClick: GleanEventWithExtras<{ + action?: string; + provider?: string; + }>; sidebarMoreMenuDisplay: GleanEventWithExtras<{ provider?: string }>; - sidebarProviderMenuClick: GleanEventWithExtras<{ action?: string; provider?: string }>; + sidebarProviderMenuClick: GleanEventWithExtras<{ + action?: string; + provider?: string; + }>; sidebarToggle: GleanEventWithExtras<{ opened?: string; provider?: string; @@ -939,7 +1047,11 @@ interface GleanImpl { aiOptin: GleanBoolean; cardAiConsent: GleanEventWithExtras<{ option?: string }>; cardClose: GleanEventWithExtras<{ duration?: string; tab?: string }>; - cardLink: GleanEventWithExtras<{ key_points?: string; source?: string; tab?: string }>; + cardLink: GleanEventWithExtras<{ + key_points?: string; + source?: string; + tab?: string; + }>; enabled: GleanBoolean; fetch: GleanEventWithExtras<{ description?: string; @@ -965,13 +1077,21 @@ interface GleanImpl { onboardingCard: GleanEventWithExtras<{ action?: string; type?: string }>; prefChanged: GleanEventWithExtras<{ enabled?: string; pref?: string }>; shortcut: GleanString; - start: GleanEventWithExtras<{ cached?: string; source?: string; tab?: string }>; + start: GleanEventWithExtras<{ + cached?: string; + source?: string; + tab?: string; + }>; }; ipprotection: { clickUpgradeButton: GleanEventNoExtras; enabled: GleanBoolean; - toggled: GleanEventWithExtras<{ duration?: string; enabled?: string; userAction?: string }>; + toggled: GleanEventWithExtras<{ + duration?: string; + enabled?: string; + userAction?: string; + }>; usageRx: GleanMemoryDistribution; usageTx: GleanMemoryDistribution; }; @@ -1047,7 +1167,10 @@ interface GleanImpl { }; browserLaunchedToHandle: { - systemNotification: GleanEventWithExtras<{ action?: string; name?: string }>; + systemNotification: GleanEventWithExtras<{ + action?: string; + name?: string; + }>; }; browserStartup: { @@ -1100,7 +1223,9 @@ interface GleanImpl { value?: string; }>; shadowedHtmlDocumentPropertyAccess: GleanEventWithExtras<{ name?: string }>; - shadowedHtmlFormElementPropertyAccess: GleanEventWithExtras<{ name?: string }>; + shadowedHtmlFormElementPropertyAccess: GleanEventWithExtras<{ + name?: string; + }>; cspViolationInternalPage: GleanEventWithExtras<{ blockeduridetails?: string; blockeduritype?: string; @@ -1113,8 +1238,14 @@ interface GleanImpl { sourcedetails?: string; sourcetype?: string; }>; - evalUsageParentProcess: GleanEventWithExtras<{ fileinfo?: string; value?: string }>; - evalUsageSystemContext: GleanEventWithExtras<{ fileinfo?: string; value?: string }>; + evalUsageParentProcess: GleanEventWithExtras<{ + fileinfo?: string; + value?: string; + }>; + evalUsageSystemContext: GleanEventWithExtras<{ + fileinfo?: string; + value?: string; + }>; httpsOnlyModeUpgradeTime: Record< | "sub_f_aborted" | "sub_f_cxnrefused" @@ -1655,12 +1786,18 @@ interface GleanImpl { addonXpiUsed: GleanBoolean; blockedSponsors: GleanStringList; closed: GleanEventWithExtras<{ newtab_visit_id?: string }>; - featureHighlightDismiss: GleanEventWithExtras<{ feature?: string; newtab_visit_id?: string }>; + featureHighlightDismiss: GleanEventWithExtras<{ + feature?: string; + newtab_visit_id?: string; + }>; featureHighlightImpression: GleanEventWithExtras<{ feature?: string; newtab_visit_id?: string; }>; - featureHighlightOpen: GleanEventWithExtras<{ feature?: string; newtab_visit_id?: string }>; + featureHighlightOpen: GleanEventWithExtras<{ + feature?: string; + newtab_visit_id?: string; + }>; highlightsEnabled: GleanBoolean; homepageCategory: GleanString; inlineSelectionClick: GleanEventWithExtras<{ @@ -1727,7 +1864,10 @@ interface GleanImpl { sovAllocation: GleanStringList; sponsNavTrafficRecvd: GleanMemoryDistribution; sponsNavTrafficSent: GleanMemoryDistribution; - tooltipClick: GleanEventWithExtras<{ feature?: string; newtab_visit_id?: string }>; + tooltipClick: GleanEventWithExtras<{ + feature?: string; + newtab_visit_id?: string; + }>; topicSelectionDismiss: GleanEventWithExtras<{ newtab_visit_id?: string }>; topicSelectionOpen: GleanEventWithExtras<{ newtab_visit_id?: string }>; topicSelectionTopicsSaved: GleanEventWithExtras<{ @@ -1736,8 +1876,14 @@ interface GleanImpl { previous_topics?: string; topics?: string; }>; - trendingSearchDismiss: GleanEventWithExtras<{ newtab_visit_id?: string; variant?: string }>; - trendingSearchImpression: GleanEventWithExtras<{ newtab_visit_id?: string; variant?: string }>; + trendingSearchDismiss: GleanEventWithExtras<{ + newtab_visit_id?: string; + variant?: string; + }>; + trendingSearchImpression: GleanEventWithExtras<{ + newtab_visit_id?: string; + variant?: string; + }>; trendingSearchSuggestionOpen: GleanEventWithExtras<{ newtab_visit_id?: string; variant?: string; @@ -1752,8 +1898,12 @@ interface GleanImpl { newtab_visit_id?: string; selected_wallpaper?: string; }>; - wallpaperHighlightCtaClick: GleanEventWithExtras<{ newtab_visit_id?: string }>; - wallpaperHighlightDismissed: GleanEventWithExtras<{ newtab_visit_id?: string }>; + wallpaperHighlightCtaClick: GleanEventWithExtras<{ + newtab_visit_id?: string; + }>; + wallpaperHighlightDismissed: GleanEventWithExtras<{ + newtab_visit_id?: string; + }>; weatherChangeDisplay: GleanEventWithExtras<{ newtab_visit_id?: string; weather_display_mode?: string; @@ -1773,7 +1923,10 @@ interface GleanImpl { newtab_visit_id?: string; }>; widgetsListsImpression: GleanEventWithExtras<{ newtab_visit_id?: string }>; - widgetsListsUserEvent: GleanEventWithExtras<{ newtab_visit_id?: string; user_action?: string }>; + widgetsListsUserEvent: GleanEventWithExtras<{ + newtab_visit_id?: string; + user_action?: string; + }>; widgetsTimerChangeDisplay: GleanEventWithExtras<{ display_status?: string; newtab_visit_id?: string; @@ -1783,7 +1936,10 @@ interface GleanImpl { display_status?: string; newtab_visit_id?: string; }>; - widgetsTimerUserEvent: GleanEventWithExtras<{ newtab_visit_id?: string; user_action?: string }>; + widgetsTimerUserEvent: GleanEventWithExtras<{ + newtab_visit_id?: string; + user_action?: string; + }>; }; newtabHandoffPreference: { @@ -2014,7 +2170,10 @@ interface GleanImpl { tile_id?: string; topic?: string; }>; - topicClick: GleanEventWithExtras<{ newtab_visit_id?: string; topic?: string }>; + topicClick: GleanEventWithExtras<{ + newtab_visit_id?: string; + topic?: string; + }>; }; topSites: { @@ -2082,7 +2241,10 @@ interface GleanImpl { position?: string; tile_id?: string; }>; - prefChanged: GleanEventWithExtras<{ new_value?: string; pref_name?: string }>; + prefChanged: GleanEventWithExtras<{ + new_value?: string; + pref_name?: string; + }>; rows: GleanQuantity; showPrivacyClick: GleanEventWithExtras<{ advertiser_name?: string; @@ -2113,7 +2275,10 @@ interface GleanImpl { historySidebar: { cumulativeFilterCount: GleanCustomDistribution; cumulativeSearches: GleanCustomDistribution; - filterType: Record<"day" | "dayandsite" | "lastvisited" | "site" | "visited", GleanCounter>; + filterType: Record< + "day" | "dayandsite" | "lastvisited" | "site" | "visited", + GleanCounter + >; lastvisitedTreeQueryTime: GleanTimingDistribution; }; @@ -2213,22 +2378,70 @@ interface GleanImpl { }; securityUiProtections: { - clickLwAboutLink: GleanEventWithExtras<{ category?: string; value?: string }>; - clickLwOpenButton: GleanEventWithExtras<{ category?: string; value?: string }>; - clickLwSyncLink: GleanEventWithExtras<{ category?: string; value?: string }>; - clickMobileAppLink: GleanEventWithExtras<{ category?: string; value?: string }>; - clickMtrAboutLink: GleanEventWithExtras<{ category?: string; value?: string }>; - clickMtrReportLink: GleanEventWithExtras<{ category?: string; value?: string }>; - clickMtrSignupButton: GleanEventWithExtras<{ category?: string; value?: string }>; - clickSettingsLink: GleanEventWithExtras<{ category?: string; value?: string }>; - clickTrackersAboutLink: GleanEventWithExtras<{ category?: string; value?: string }>; - clickVpnAppLinkAndroid: GleanEventWithExtras<{ category?: string; value?: string }>; - clickVpnAppLinkIos: GleanEventWithExtras<{ category?: string; value?: string }>; - clickVpnBannerClose: GleanEventWithExtras<{ category?: string; value?: string }>; - clickVpnBannerLink: GleanEventWithExtras<{ category?: string; value?: string }>; - clickVpnCardLink: GleanEventWithExtras<{ category?: string; value?: string }>; - closeProtectionReport: GleanEventWithExtras<{ category?: string; value?: string }>; - showProtectionReport: GleanEventWithExtras<{ category?: string; value?: string }>; + clickLwAboutLink: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickLwOpenButton: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickLwSyncLink: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickMobileAppLink: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickMtrAboutLink: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickMtrReportLink: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickMtrSignupButton: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickSettingsLink: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickTrackersAboutLink: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickVpnAppLinkAndroid: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickVpnAppLinkIos: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickVpnBannerClose: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickVpnBannerLink: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + clickVpnCardLink: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + closeProtectionReport: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; + showProtectionReport: GleanEventWithExtras<{ + category?: string; + value?: string; + }>; showVpnBanner: GleanEventWithExtras<{ category?: string; value?: string }>; }; @@ -2390,7 +2603,10 @@ interface GleanImpl { source?: string; }>; deprecatedCounts: Record; - searchFormCounts: GleanEventWithExtras<{ provider_id?: string; source?: string }>; + searchFormCounts: GleanEventWithExtras<{ + provider_id?: string; + source?: string; + }>; }; sapImpressionCounts: { @@ -2403,11 +2619,17 @@ interface GleanImpl { }; searchbar: { - selectedResultMethod: Record<"click" | "enter" | "enterSelection", GleanCounter>; + selectedResultMethod: Record< + "click" | "enter" | "enterSelection", + GleanCounter + >; }; serp: { - abandonment: GleanEventWithExtras<{ impression_id?: string; reason?: string }>; + abandonment: GleanEventWithExtras<{ + impression_id?: string; + reason?: string; + }>; adImpression: GleanEventWithExtras<{ ads_hidden?: string; ads_loaded?: string; @@ -2415,7 +2637,10 @@ interface GleanImpl { component?: string; impression_id?: string; }>; - adsBlockedCount: Record<"beyond_viewport" | "hidden_child" | "hidden_parent", GleanCounter>; + adsBlockedCount: Record< + "beyond_viewport" | "hidden_child" | "hidden_parent", + GleanCounter + >; categorization: GleanEventWithExtras<{ app_version?: string; channel?: string; @@ -2440,7 +2665,11 @@ interface GleanImpl { }>; categorizationDuration: GleanTimingDistribution; categorizationNoMapFound: GleanCounter; - engagement: GleanEventWithExtras<{ action?: string; impression_id?: string; target?: string }>; + engagement: GleanEventWithExtras<{ + action?: string; + impression_id?: string; + target?: string; + }>; experimentInfo: GleanObject; impression: GleanEventWithExtras<{ impression_id?: string; @@ -2494,7 +2723,10 @@ interface GleanImpl { readFile: GleanTimingDistribution; restoreWindow: GleanTimingDistribution; shutdownFlushAllOutcomes: Record< - "abnormal_content_shutdown" | "complete" | "oop_frameloader_crashed" | "timed_out", + | "abnormal_content_shutdown" + | "complete" + | "oop_frameloader_crashed" + | "timed_out", GleanCounter >; shutdownOk: Record<"false" | "true", GleanCounter>; @@ -2505,7 +2737,10 @@ interface GleanImpl { shutdownType: Record<"async" | "sync", GleanCounter>; startupInitSession: GleanTimingDistribution; startupOnloadInitialWindow: GleanTimingDistribution; - startupTimeline: Record<"sessionRestoreInitialized" | "sessionRestoreRestoring", GleanQuantity>; + startupTimeline: Record< + "sessionRestoreInitialized" | "sessionRestoreRestoring", + GleanQuantity + >; writeFile: GleanTimingDistribution; }; @@ -2523,7 +2758,10 @@ interface GleanImpl { notificationShown: GleanEventWithExtras<{ notification_detail?: string }>; recordsInteraction: GleanEventWithExtras<{ interaction_type?: string }>; recordsUpdate: GleanEventWithExtras<{ change_type?: string }>; - toolbarAction: GleanEventWithExtras<{ option_name?: string; trigger?: string }>; + toolbarAction: GleanEventWithExtras<{ + option_name?: string; + trigger?: string; + }>; }; extension: { @@ -2547,7 +2785,10 @@ interface GleanImpl { }; sidebar: { - addonIconClick: GleanEventWithExtras<{ addon_id?: string; sidebar_open?: string }>; + addonIconClick: GleanEventWithExtras<{ + addon_id?: string; + sidebar_open?: string; + }>; bookmarksIconClick: GleanEventWithExtras<{ sidebar_open?: string }>; chatbotIconClick: GleanEventWithExtras<{ sidebar_open?: string }>; displaySettings: GleanString; @@ -2556,7 +2797,11 @@ interface GleanImpl { keyboardShortcut: GleanEventWithExtras<{ opened?: string; panel?: string }>; link: Record; positionSettings: GleanString; - resize: GleanEventWithExtras<{ current?: string; percentage?: string; previous?: string }>; + resize: GleanEventWithExtras<{ + current?: string; + percentage?: string; + previous?: string; + }>; search: Record; syncedTabsIconClick: GleanEventWithExtras<{ sidebar_open?: string }>; tabsLayout: GleanString; @@ -2585,9 +2830,18 @@ interface GleanImpl { synced_tabs_loaded?: string; version?: string; }>; - clickFxaAppMenu: GleanEventWithExtras<{ filter?: string; tab_pos?: string }>; - clickFxaAvatarMenu: GleanEventWithExtras<{ filter?: string; tab_pos?: string }>; - clickSyncedTabsSidebar: GleanEventWithExtras<{ filter?: string; tab_pos?: string }>; + clickFxaAppMenu: GleanEventWithExtras<{ + filter?: string; + tab_pos?: string; + }>; + clickFxaAvatarMenu: GleanEventWithExtras<{ + filter?: string; + tab_pos?: string; + }>; + clickSyncedTabsSidebar: GleanEventWithExtras<{ + filter?: string; + tab_pos?: string; + }>; }; browserTabclose: { @@ -2651,7 +2905,9 @@ interface GleanImpl { linkHandling: { openFromExternalApp: GleanEventWithExtras<{ next_to_active_tab?: string }>; - openNextToActiveTabSettingsChange: GleanEventWithExtras<{ checked?: string }>; + openNextToActiveTabSettingsChange: GleanEventWithExtras<{ + checked?: string; + }>; openNextToActiveTabSettingsEnabled: GleanBoolean; }; @@ -2686,7 +2942,12 @@ interface GleanImpl { | "ungroup", GleanCounter >; - reopen: GleanEventWithExtras<{ id?: string; layout?: string; source?: string; type?: string }>; + reopen: GleanEventWithExtras<{ + id?: string; + layout?: string; + source?: string; + type?: string; + }>; save: GleanEventWithExtras<{ id?: string; user_triggered?: string }>; savedGroups: GleanQuantity; smartTab: GleanEventWithExtras<{ enabled?: string }>; @@ -2730,8 +2991,14 @@ interface GleanImpl { | "reorder", GleanCounter >; - tabsPerActiveGroup: Record<"average" | "max" | "median" | "min", GleanQuantity>; - tabsPerSavedGroup: Record<"average" | "max" | "median" | "min", GleanQuantity>; + tabsPerActiveGroup: Record< + "average" | "max" | "median" | "min", + GleanQuantity + >; + tabsPerSavedGroup: Record< + "average" | "max" | "median" | "min", + GleanQuantity + >; ungroup: GleanEventWithExtras<{ source?: string }>; }; @@ -2870,7 +3137,11 @@ interface GleanImpl { }>; exposure: GleanEventWithExtras<{ results?: string; terminal?: string }>; heuristicResultMissing: GleanRate; - keywordExposure: GleanEventWithExtras<{ keyword?: string; result?: string; terminal?: string }>; + keywordExposure: GleanEventWithExtras<{ + keyword?: string; + result?: string; + terminal?: string; + }>; prefMaxResults: GleanQuantity; prefSuggestAll: GleanBoolean; prefSuggestOnlineAvailable: GleanBoolean; @@ -2967,7 +3238,11 @@ interface GleanImpl { }; browserUsage: { - interaction: GleanEventWithExtras<{ flow_id?: string; source?: string; widget_id?: string }>; + interaction: GleanEventWithExtras<{ + flow_id?: string; + source?: string; + widget_id?: string; + }>; }; contextualServices: { @@ -2975,7 +3250,10 @@ interface GleanImpl { }; homepage: { - preferenceIgnore: GleanEventWithExtras<{ value?: string; webExtensionId?: string }>; + preferenceIgnore: GleanEventWithExtras<{ + value?: string; + webExtensionId?: string; + }>; }; installation: { @@ -3155,7 +3433,10 @@ interface GleanImpl { }; devtoolsInspector: { - fonteditorFontTypeDisplayed: Record<"nonvariable" | "variable", GleanCounter>; + fonteditorFontTypeDisplayed: Record< + "nonvariable" | "variable", + GleanCounter + >; newRootToReloadDelay: GleanTimingDistribution; nodeSelectionCount: GleanCounter; numberOfCssGridsInAPage: GleanCustomDistribution; @@ -3218,8 +3499,14 @@ interface GleanImpl { value?: string; width?: string; }>; - addBreakpointDebugger: GleanEventWithExtras<{ session_id?: string; value?: string }>; - blackboxDebugger: GleanEventWithExtras<{ session_id?: string; value?: string }>; + addBreakpointDebugger: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; + blackboxDebugger: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; closeAdbgAboutdebugging: GleanEventWithExtras<{ session_id?: string; value?: string; @@ -3239,7 +3526,10 @@ interface GleanImpl { status?: string; value?: string; }>; - continueDebugger: GleanEventWithExtras<{ session_id?: string; value?: string }>; + continueDebugger: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; deactivateResponsiveDesign: GleanEventWithExtras<{ host?: string; session_id?: string; @@ -3270,8 +3560,14 @@ interface GleanImpl { time_open?: string; value?: string; }>; - editResendNetmonitor: GleanEventWithExtras<{ session_id?: string; value?: string }>; - editRuleRuleview: GleanEventWithExtras<{ session_id?: string; value?: string }>; + editResendNetmonitor: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; + editRuleRuleview: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; enterAccessibility: GleanEventWithExtras<{ cold?: string; host?: string; @@ -3678,9 +3974,18 @@ interface GleanImpl { target_type?: string; value?: string; }>; - jumpToDefinitionWebconsole: GleanEventWithExtras<{ session_id?: string; value?: string }>; - jumpToSourceWebconsole: GleanEventWithExtras<{ session_id?: string; value?: string }>; - objectExpandedWebconsole: GleanEventWithExtras<{ session_id?: string; value?: string }>; + jumpToDefinitionWebconsole: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; + jumpToSourceWebconsole: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; + objectExpandedWebconsole: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; openAdbgAboutdebugging: GleanEventWithExtras<{ session_id?: string; value?: string; @@ -3708,10 +4013,22 @@ interface GleanImpl { session_id?: string; value?: string; }>; - persistChangedNetmonitor: GleanEventWithExtras<{ session_id?: string; value?: string }>; - persistChangedWebconsole: GleanEventWithExtras<{ session_id?: string; value?: string }>; - prettyPrintDebugger: GleanEventWithExtras<{ session_id?: string; value?: string }>; - removeBreakpointDebugger: GleanEventWithExtras<{ session_id?: string; value?: string }>; + persistChangedNetmonitor: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; + persistChangedWebconsole: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; + prettyPrintDebugger: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; + removeBreakpointDebugger: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; reverseSearchWebconsole: GleanEventWithExtras<{ functionality?: string; session_id?: string; @@ -3761,7 +4078,10 @@ interface GleanImpl { session_id?: string; value?: string; }>; - selectWsFrameNetmonitor: GleanEventWithExtras<{ session_id?: string; value?: string }>; + selectWsFrameNetmonitor: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; showProfilerAboutdebugging: GleanEventWithExtras<{ runtime_id?: string; session_id?: string; @@ -3781,7 +4101,10 @@ interface GleanImpl { session_id?: string; value?: string; }>; - startWorkerApplication: GleanEventWithExtras<{ session_id?: string; value?: string }>; + startWorkerApplication: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; throttleChangedNetmonitor: GleanEventWithExtras<{ mode?: string; session_id?: string; @@ -3829,7 +4152,10 @@ interface GleanImpl { time_open?: string; value?: string; }>; - unregisterWorkerApplication: GleanEventWithExtras<{ session_id?: string; value?: string }>; + unregisterWorkerApplication: GleanEventWithExtras<{ + session_id?: string; + value?: string; + }>; updateConnPromptAboutdebugging: GleanEventWithExtras<{ prompt_enabled?: string; runtime_id?: string; @@ -6327,7 +6653,10 @@ interface GleanImpl { mediadrm: { decryption: Record< - "has_hardware_clearlead" | "has_hardware_decryption" | "has_software_clearlead" | "has_wmf", + | "has_hardware_clearlead" + | "has_hardware_decryption" + | "has_software_clearlead" + | "has_wmf", GleanBoolean >; emePlayback: GleanEventWithExtras<{ @@ -6372,7 +6701,11 @@ interface GleanImpl { audiblePlayTimePercent: Record; codecUsed: Record; elementInPageCount: GleanCounter; - error: GleanEventWithExtras<{ error_name?: string; error_type?: string; key_system?: string }>; + error: GleanEventWithExtras<{ + error_name?: string; + error_type?: string; + key_system?: string; + }>; mediaPlayTime: Record; mkvCodecType: Record< | "AudioAac" @@ -6450,7 +6783,10 @@ interface GleanImpl { key_system?: string; mime_type?: string; }>; - deviceHardwareDecoderSupport: Record<"av1" | "h264" | "hevc" | "vp8" | "vp9", GleanBoolean>; + deviceHardwareDecoderSupport: Record< + "av1" | "h264" | "hevc" | "vp8" | "vp9", + GleanBoolean + >; firstFrameLoaded: GleanEventWithExtras<{ buffering_time?: string; decoder_name?: string; @@ -6513,8 +6849,14 @@ interface GleanImpl { mediaMp4Parse: { numSampleDescriptionEntries: GleanCustomDistribution; - sampleDescriptionEntriesHaveMultipleCodecs: Record<"false" | "true", GleanCounter>; - sampleDescriptionEntriesHaveMultipleCrypto: Record<"false" | "true", GleanCounter>; + sampleDescriptionEntriesHaveMultipleCodecs: Record< + "false" | "true", + GleanCounter + >; + sampleDescriptionEntriesHaveMultipleCrypto: Record< + "false" | "true", + GleanCounter + >; }; mfcdm: { @@ -6663,7 +7005,10 @@ interface GleanImpl { fullscreenTransitionBlack: GleanTimingDistribution; gcInProgress: GleanTimingDistribution; gcSliceDuringIdle: GleanCustomDistribution; - scriptLoadingSource: Record<"AltData" | "Inline" | "Source" | "SourceFallback", GleanCounter>; + scriptLoadingSource: Record< + "AltData" | "Inline" | "Source" | "SourceFallback", + GleanCounter + >; slowScriptNoticeCount: GleanCounter; slowScriptPageCount: GleanCounter; storageAccessApiUi: Record< @@ -6774,12 +7119,18 @@ interface GleanImpl { GleanCounter >; insecureContextPermissionRequest: GleanCounter; - permissionOrigin: Record<"first_party" | "nested_first_party" | "third_party", GleanCounter>; + permissionOrigin: Record< + "first_party" | "nested_first_party" | "third_party", + GleanCounter + >; requestPermissionOrigin: Record< "first_party" | "nested_first_party" | "third_party", GleanCounter >; - showOrigin: Record<"first_party" | "nested_first_party" | "third_party", GleanCounter>; + showOrigin: Record< + "first_party" | "nested_first_party" | "third_party", + GleanCounter + >; }; screenwakelock: { @@ -6855,7 +7206,10 @@ interface GleanImpl { mixedContent: { audio: Record< - "AudioNoUpFailure" | "AudioNoUpSuccess" | "AudioUpFailure" | "AudioUpSuccess", + | "AudioNoUpFailure" + | "AudioNoUpSuccess" + | "AudioUpFailure" + | "AudioUpSuccess", GleanCounter >; hsts: GleanCustomDistribution; @@ -6866,7 +7220,10 @@ interface GleanImpl { pageLoad: GleanCustomDistribution; unblockCounter: GleanCustomDistribution; video: Record< - "VideoNoUpFailure" | "VideoNoUpSuccess" | "VideoUpFailure" | "VideoUpSuccess", + | "VideoNoUpFailure" + | "VideoNoUpSuccess" + | "VideoUpFailure" + | "VideoUpSuccess", GleanCounter >; }; @@ -6884,13 +7241,19 @@ interface GleanImpl { scriptAllowedOpened: GleanEventNoExtras; scriptBlocked: GleanEventNoExtras; scriptBlockedOpened: GleanEventNoExtras; - scriptReported: GleanEventWithExtras<{ script_url?: string; user_email?: string }>; + scriptReported: GleanEventWithExtras<{ + script_url?: string; + user_email?: string; + }>; }; serviceWorker: { fetchEventChannelReset: Record; fetchEventDispatch: Record; - fetchEventFinishSynthesizedResponse: Record; + fetchEventFinishSynthesizedResponse: Record< + string, + GleanTimingDistribution + >; fetchInterceptionDuration: Record; isolatedLaunchTime: GleanTimingDistribution; launchTime: GleanTimingDistribution; @@ -6904,14 +7267,20 @@ interface GleanImpl { }; webauthnCreate: { - authenticatorAttachment: Record<"cross-platform" | "platform" | "unknown", GleanCounter>; + authenticatorAttachment: Record< + "cross-platform" | "platform" | "unknown", + GleanCounter + >; failure: GleanCounter; passkey: GleanCounter; success: GleanCounter; }; webauthnGet: { - authenticatorAttachment: Record<"cross-platform" | "platform" | "unknown", GleanCounter>; + authenticatorAttachment: Record< + "cross-platform" | "platform" | "unknown", + GleanCounter + >; failure: GleanCounter; success: GleanCounter; }; @@ -6926,7 +7295,10 @@ interface GleanImpl { htmleditors: { overriddenByBeforeinputListeners: Record<"false" | "true", GleanCounter>; withBeforeinputListeners: Record<"false" | "true", GleanCounter>; - withMutationObserversWithoutBeforeinputListeners: Record<"false" | "true", GleanCounter>; + withMutationObserversWithoutBeforeinputListeners: Record< + "false" | "true", + GleanCounter + >; }; permissions: { @@ -7013,11 +7385,23 @@ interface GleanImpl { gfxContent: { fullPaintTime: GleanTimingDistribution; - largePaintPhaseWeightFull: Record<"dl" | "fb" | "sb" | "wrdl", GleanCustomDistribution>; - largePaintPhaseWeightPartial: Record<"dl" | "fb" | "sb" | "wrdl", GleanCustomDistribution>; + largePaintPhaseWeightFull: Record< + "dl" | "fb" | "sb" | "wrdl", + GleanCustomDistribution + >; + largePaintPhaseWeightPartial: Record< + "dl" | "fb" | "sb" | "wrdl", + GleanCustomDistribution + >; paintTime: GleanTimingDistribution; - smallPaintPhaseWeightFull: Record<"dl" | "fb" | "sb" | "wrdl", GleanCustomDistribution>; - smallPaintPhaseWeightPartial: Record<"dl" | "fb" | "sb" | "wrdl", GleanCustomDistribution>; + smallPaintPhaseWeightFull: Record< + "dl" | "fb" | "sb" | "wrdl", + GleanCustomDistribution + >; + smallPaintPhaseWeightPartial: Record< + "dl" | "fb" | "sb" | "wrdl", + GleanCustomDistribution + >; }; gfxContentFrameTime: { @@ -7061,7 +7445,10 @@ interface GleanImpl { }; gpuProcess: { - crashFallbacks: Record<"decoding_disabled" | "disabled" | "none", GleanCounter>; + crashFallbacks: Record< + "decoding_disabled" | "disabled" | "none", + GleanCounter + >; featureStatus: GleanString; initializationTime: GleanTimingDistribution; launchTime: GleanTimingDistribution; @@ -7114,7 +7501,10 @@ interface GleanImpl { | "unsup_feature", GleanCounter >; - bitDepth: Record<"color_10" | "color_12" | "color_16" | "color_8" | "unknown", GleanCounter>; + bitDepth: Record< + "color_10" | "color_12" | "color_16" | "color_8" | "unknown", + GleanCounter + >; cicpCp: Record< | "bt2020" | "bt470bg" @@ -7231,7 +7621,10 @@ interface GleanImpl { pasp: Record<"absent" | "invalid" | "nonsquare" | "square", GleanCounter>; pixi: Record<"absent" | "bitstream_mismatch" | "valid", GleanCounter>; sequence: Record<"absent" | "present", GleanCounter>; - yuvColorSpace: Record<"bt2020" | "bt601" | "bt709" | "identity" | "unknown", GleanCounter>; + yuvColorSpace: Record< + "bt2020" | "bt601" | "bt709" | "identity" | "unknown", + GleanCounter + >; }; imageDecode: { @@ -7665,7 +8058,10 @@ interface GleanImpl { slowScriptWarning: { notifyDelay: GleanTimingDistribution; - shownBrowser: GleanEventWithExtras<{ hang_duration?: string; uri_type?: string }>; + shownBrowser: GleanEventWithExtras<{ + hang_duration?: string; + uri_type?: string; + }>; shownContent: GleanEventWithExtras<{ end_reason?: string; hang_duration?: string; @@ -7791,14 +8187,29 @@ interface GleanImpl { }; network: { - cacheEntryCount: Record<"SMARTSIZE" | "USERDEFINEDSIZE", GleanCustomDistribution>; + cacheEntryCount: Record< + "SMARTSIZE" | "USERDEFINEDSIZE", + GleanCustomDistribution + >; cacheEntryCountShare: Record< - "IMAGE" | "JAVASCRIPT" | "MEDIA" | "OTHER" | "STYLESHEET" | "UNKNOWN" | "WASM", + | "IMAGE" + | "JAVASCRIPT" + | "MEDIA" + | "OTHER" + | "STYLESHEET" + | "UNKNOWN" + | "WASM", GleanCustomDistribution >; cacheSize: Record<"SMARTSIZE" | "USERDEFINEDSIZE", GleanMemoryDistribution>; cacheSizeShare: Record< - "IMAGE" | "JAVASCRIPT" | "MEDIA" | "OTHER" | "STYLESHEET" | "UNKNOWN" | "WASM", + | "IMAGE" + | "JAVASCRIPT" + | "MEDIA" + | "OTHER" + | "STYLESHEET" + | "UNKNOWN" + | "WASM", GleanCustomDistribution >; cacheV2InputStreamStatus: GleanCustomDistribution; @@ -7826,7 +8237,10 @@ interface GleanImpl { GleanCounter >; alpnMismatchCount: Record; - asyncOpenChildToTransactionPendingExp: Record; + asyncOpenChildToTransactionPendingExp: Record< + string, + GleanTimingDistribution + >; backPressureSuspensionCpType: GleanCustomDistribution; backPressureSuspensionDelayTime: GleanTimingDistribution; backPressureSuspensionRate: Record< @@ -7842,7 +8256,10 @@ interface GleanImpl { completeLoad: GleanTimingDistribution; completeLoadCached: GleanTimingDistribution; completeLoadNet: GleanTimingDistribution; - corsAuthorizationHeader: Record<"allowed" | "covered_by_wildcard" | "disallowed", GleanCounter>; + corsAuthorizationHeader: Record< + "allowed" | "covered_by_wildcard" | "disallowed", + GleanCounter + >; dnsEnd: GleanTimingDistribution; dnsEndToConnectStartExp: Record; dnsStart: GleanTimingDistribution; @@ -7850,27 +8267,47 @@ interface GleanImpl { firstSentToLastReceived: GleanTimingDistribution; fontDownloadEnd: GleanTimingDistribution; http3CompleteLoad: Record< - "supports_http3_page" | "supports_http3_sub" | "uses_http3_page" | "uses_http3_sub", + | "supports_http3_page" + | "supports_http3_sub" + | "uses_http3_page" + | "uses_http3_sub", GleanTimingDistribution >; http3FirstSentToLastReceived: Record< - "supports_http3_page" | "supports_http3_sub" | "uses_http3_page" | "uses_http3_sub", + | "supports_http3_page" + | "supports_http3_sub" + | "uses_http3_page" + | "uses_http3_sub", GleanTimingDistribution >; http3OpenToFirstReceived: Record< - "supports_http3_page" | "supports_http3_sub" | "uses_http3_page" | "uses_http3_sub", + | "supports_http3_page" + | "supports_http3_sub" + | "uses_http3_page" + | "uses_http3_sub", GleanTimingDistribution >; http3OpenToFirstSent: Record< - "supports_http3_page" | "supports_http3_sub" | "uses_http3_page" | "uses_http3_sub", + | "supports_http3_page" + | "supports_http3_sub" + | "uses_http3_page" + | "uses_http3_sub", GleanTimingDistribution >; http3TlsHandshake: Record< - "supports_http3_page" | "supports_http3_sub" | "uses_http3_page" | "uses_http3_sub", + | "supports_http3_page" + | "supports_http3_sub" + | "uses_http3_page" + | "uses_http3_sub", GleanTimingDistribution >; httpFetchDuration: Record< - "h1_cloudflare" | "h1_others" | "h2_cloudflare" | "h2_others" | "h3_cloudflare" | "h3_others", + | "h1_cloudflare" + | "h1_others" + | "h2_cloudflare" + | "h2_others" + | "h3_cloudflare" + | "h3_others", GleanTimingDistribution >; httpRevalidation: GleanTimingDistribution; @@ -8213,7 +8650,10 @@ interface GleanImpl { trrRelevantSkipReasonNativeFailed: Record; trrRelevantSkipReasonNativeSuccess: Record; trrRelevantSkipReasonTrrFirst: Record; - trrRelevantSkipReasonTrrFirstTypeRec: Record; + trrRelevantSkipReasonTrrFirstTypeRec: Record< + string, + GleanCustomDistribution + >; trrSkipReasonNativeFailed: Record; trrSkipReasonNativeSuccess: Record; trrSkipReasonRetryFailed: Record; @@ -8270,7 +8710,14 @@ interface GleanImpl { prefetchIgnoreReason: GleanCustomDistribution; prefetchTime: GleanTimingDistribution; prefetchUseStatus: Record< - "Auth" | "Etag" | "Expired" | "Not200" | "Redirect" | "Used" | "WaitedTooLong" | "WouldVary", + | "Auth" + | "Etag" + | "Expired" + | "Not200" + | "Redirect" + | "Used" + | "WaitedTooLong" + | "WouldVary", GleanCounter >; subresourceDegradation: GleanCustomDistribution; @@ -8296,7 +8743,10 @@ interface GleanImpl { dnsHttpssvcRecordReceivingStage: GleanCustomDistribution; dntUsage: GleanCustomDistribution; echconfigSuccessRate: Record< - "EchConfigFailed" | "EchConfigSucceeded" | "NoEchConfigFailed" | "NoEchConfigSucceeded", + | "EchConfigFailed" + | "EchConfigSucceeded" + | "NoEchConfigFailed" + | "NoEchConfigSucceeded", GleanCounter >; http2FailBeforeSettings: Record<"false" | "true", GleanCounter>; @@ -8370,14 +8820,25 @@ interface GleanImpl { netwerk: { http30rttState: Record< - "conn_closed_by_necko" | "conn_error" | "not_used" | "rejected" | "succeeded", + | "conn_closed_by_necko" + | "conn_error" + | "not_used" + | "rejected" + | "succeeded", GleanCounter >; http30rttStateDuration: Record< - "conn_closed_by_necko" | "conn_error" | "not_used" | "rejected" | "succeeded", + | "conn_closed_by_necko" + | "conn_error" + | "not_used" + | "rejected" + | "succeeded", + GleanTimingDistribution + >; + http3TimeToReuseIdleConnection: Record< + "failed" | "succeeded", GleanTimingDistribution >; - http3TimeToReuseIdleConnection: Record<"failed" | "succeeded", GleanTimingDistribution>; parentConnectTimeout: GleanCounter; }; @@ -8481,7 +8942,12 @@ interface GleanImpl { certVerifier: { certRevocationMechanisms: Record< - "CRLite" | "CachedOCSP" | "OCSP" | "OneCRL" | "ShortValidity" | "StapledOCSP", + | "CRLite" + | "CachedOCSP" + | "OCSP" + | "OneCRL" + | "ShortValidity" + | "StapledOCSP", GleanCounter >; crliteStatus: Record< @@ -8555,7 +9021,10 @@ interface GleanImpl { pkcs11: { externalTrustAnchorModuleLoaded: GleanBoolean; thirdPartyModuleProfileEntries: GleanStringList; - thirdPartyModuleSignatureType: GleanEventWithExtras<{ filename?: string; signature?: string }>; + thirdPartyModuleSignatureType: GleanEventWithExtras<{ + filename?: string; + signature?: string; + }>; thirdPartyModulesLoaded: GleanQuantity; }; @@ -8581,7 +9050,10 @@ interface GleanImpl { sctsOrigin: GleanCustomDistribution; sctsPerConnection: GleanCustomDistribution; sctsVerificationStatus: GleanCustomDistribution; - timeUntilHandshakeFinishedKeyedByKa: Record; + timeUntilHandshakeFinishedKeyedByKa: Record< + string, + GleanTimingDistribution + >; timeUntilReady: GleanTimingDistribution; timeUntilReadyConservative: GleanTimingDistribution; timeUntilReadyEch: GleanTimingDistribution; @@ -8690,8 +9162,16 @@ interface GleanImpl { server_time?: string; stream_id?: string; }>; - connectAccount: GleanEventWithExtras<{ fxa?: string; sync?: string; value?: string }>; - disconnectAccount: GleanEventWithExtras<{ fxa?: string; sync?: string; value?: string }>; + connectAccount: GleanEventWithExtras<{ + fxa?: string; + sync?: string; + value?: string; + }>; + disconnectAccount: GleanEventWithExtras<{ + fxa?: string; + sync?: string; + value?: string; + }>; sendtabReceived: GleanEventWithExtras<{ flow_id?: string; hashed_device_id?: string; @@ -8710,7 +9190,10 @@ interface GleanImpl { syncSettings: { openChooseWhatToSyncMenu: GleanEventWithExtras<{ why?: string }>; - save: GleanEventWithExtras<{ disabled_engines?: string; enabled_engines?: string }>; + save: GleanEventWithExtras<{ + disabled_engines?: string; + enabled_engines?: string; + }>; }; fxaAppMenu: { @@ -8902,7 +9385,10 @@ interface GleanImpl { }; syncMergeDialog: { - clicked: GleanEventWithExtras<{ option_clicked?: string; variant_shown?: string }>; + clicked: GleanEventWithExtras<{ + option_clicked?: string; + variant_shown?: string; + }>; }; syncs: { @@ -8946,10 +9432,16 @@ interface GleanImpl { >; category: GleanQuantity; cookieBehavior: GleanCustomDistribution; - cryptominersBlockedCount: Record<"allowed" | "blocked" | "pageLoad", GleanCounter>; + cryptominersBlockedCount: Record< + "allowed" | "blocked" | "pageLoad", + GleanCounter + >; cryptominingBlockingEnabled: GleanBoolean; emailTrackerCount: Record< - "base_email_webapp" | "base_normal" | "content_email_webapp" | "content_normal", + | "base_email_webapp" + | "base_normal" + | "content_email_webapp" + | "content_normal", GleanCounter >; emailTrackerEmbeddedPerTab: Record< @@ -8961,7 +9453,10 @@ interface GleanImpl { | "content_normal", GleanCustomDistribution >; - fingerprintersBlockedCount: Record<"allowed" | "blocked" | "pageLoad", GleanCounter>; + fingerprintersBlockedCount: Record< + "allowed" | "blocked" | "pageLoad", + GleanCounter + >; fingerprintingBlockingEnabled: GleanBoolean; fontFingerprintingPerTab: Record<"false" | "true", GleanCounter>; queryStrippingCount: Record< @@ -9442,7 +9937,10 @@ interface GleanImpl { cancelCaptureDoorhanger: GleanEventWithExtras<{ value?: string }>; cancelEditDoorhanger: GleanEventWithExtras<{ value?: string }>; cancelUpdateDoorhanger: GleanEventWithExtras<{ value?: string }>; - clearedAddressForm: GleanEventWithExtras<{ field_name?: string; value?: string }>; + clearedAddressForm: GleanEventWithExtras<{ + field_name?: string; + value?: string; + }>; deleteManage: GleanEventWithExtras<{ value?: string }>; detectedAddressForm: GleanEventWithExtras<{ address_level1?: string; @@ -9523,7 +10021,10 @@ interface GleanImpl { learnMoreCaptureDoorhanger: GleanEventWithExtras<{ value?: string }>; learnMoreEditDoorhanger: GleanEventWithExtras<{ value?: string }>; learnMoreUpdateDoorhanger: GleanEventWithExtras<{ value?: string }>; - popupShownAddressForm: GleanEventWithExtras<{ field_name?: string; value?: string }>; + popupShownAddressForm: GleanEventWithExtras<{ + field_name?: string; + value?: string; + }>; prefCaptureDoorhanger: GleanEventWithExtras<{ value?: string }>; prefEditDoorhanger: GleanEventWithExtras<{ value?: string }>; prefUpdateDoorhanger: GleanEventWithExtras<{ value?: string }>; @@ -9664,7 +10165,10 @@ interface GleanImpl { formautofill: { availability: GleanBoolean; formSubmissionHeuristic: Record< - "form-removal-after-fetch" | "form-submit-event" | "iframe-pagehide" | "page-navigation", + | "form-removal-after-fetch" + | "form-submit-event" + | "iframe-pagehide" + | "page-navigation", GleanCounter >; iframeLayoutDetection: GleanEventWithExtras<{ @@ -9677,7 +10181,10 @@ interface GleanImpl { sandboxed?: string; }>; osAuthEnabled: GleanBoolean; - promptShownOsReauth: GleanEventWithExtras<{ result?: string; trigger?: string }>; + promptShownOsReauth: GleanEventWithExtras<{ + result?: string; + trigger?: string; + }>; requireOsReauthToggle: GleanEventWithExtras<{ toggle_state?: string }>; }; @@ -9700,7 +10207,10 @@ interface GleanImpl { initsDuringShutdown: GleanCounter; maxPingsPerMinute: GleanQuantity; subdirEntryErr: Record<"db" | "events" | "pending_pings", GleanCounter>; - subdirEntryMetadataErr: Record<"db" | "events" | "pending_pings", GleanCounter>; + subdirEntryMetadataErr: Record< + "db" | "events" | "pending_pings", + GleanCounter + >; subdirErr: Record<"db" | "events" | "pending_pings", GleanBoolean>; }; @@ -9735,13 +10245,19 @@ interface GleanImpl { keyedMobileOnly: Record; keyedReleaseOptin: Record; keyedReleaseOptout: Record; - mabelsBalloonLabels: Record<"celebratory" | "celebratory_and_snarky", GleanString>; + mabelsBalloonLabels: Record< + "celebratory" | "celebratory_and_snarky", + GleanString + >; mabelsBalloonStrings: Record; mabelsBathroomCounters: Record; mabelsCustomLabelLengths: Record; mabelsKitchenCounters: Record; mabelsLabelMaker: Record; - mabelsLabeledCounters: Record<"1st_counter" | "clean" | "next_to_the_fridge", GleanCounter>; + mabelsLabeledCounters: Record< + "1st_counter" | "clean" | "next_to_the_fridge", + GleanCounter + >; mabelsLikeBalloons: Record; mabelsLikeLabeledBalloons: Record<"birthday_party" | "water", GleanBoolean>; mainOnly: GleanQuantity; @@ -9784,7 +10300,11 @@ interface GleanImpl { aTimingDist: GleanTimingDistribution; aUrl: GleanUrl; aUuid: GleanUuid; - anEvent: GleanEventWithExtras<{ extra1?: string; extra2?: string; value?: string }>; + anEvent: GleanEventWithExtras<{ + extra1?: string; + extra2?: string; + value?: string; + }>; anExternalDenominator: GleanDenominator; anUnorderedBool: GleanBoolean; anUnorderedLabeledBoolean: Record; @@ -9826,38 +10346,128 @@ interface GleanImpl { messagingExperiments: { reachCfr: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFeatureCallout: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsBmbButton: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage1: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage10: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage11: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage12: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage13: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage14: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage15: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage16: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage17: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage18: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage19: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage2: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage20: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage21: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage22: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage23: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage24: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage25: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage3: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage4: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage5: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage6: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage7: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage8: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachFxmsMessage9: GleanEventWithExtras<{ branches?: string; value?: string }>; + reachFeatureCallout: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsBmbButton: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage1: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage10: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage11: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage12: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage13: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage14: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage15: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage16: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage17: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage18: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage19: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage2: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage20: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage21: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage22: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage23: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage24: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage25: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage3: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage4: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage5: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage6: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage7: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage8: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; + reachFxmsMessage9: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; reachInfobar: GleanEventWithExtras<{ branches?: string; value?: string }>; - reachMomentsPage: GleanEventWithExtras<{ branches?: string; value?: string }>; + reachMomentsPage: GleanEventWithExtras<{ + branches?: string; + value?: string; + }>; reachSpotlight: GleanEventWithExtras<{ branches?: string; value?: string }>; - targetingAttributeError: GleanEventWithExtras<{ source?: string; value?: string }>; - targetingAttributeTimeout: GleanEventWithExtras<{ source?: string; value?: string }>; + targetingAttributeError: GleanEventWithExtras<{ + source?: string; + value?: string; + }>; + targetingAttributeTimeout: GleanEventWithExtras<{ + source?: string; + value?: string; + }>; }; firefoxAiRuntime: { @@ -9985,7 +10595,11 @@ interface GleanImpl { nimbusEvents: { databaseWrite: GleanEventWithExtras<{ success?: string }>; - enrollFailed: GleanEventWithExtras<{ branch?: string; experiment?: string; reason?: string }>; + enrollFailed: GleanEventWithExtras<{ + branch?: string; + experiment?: string; + reason?: string; + }>; enrollment: GleanEventWithExtras<{ branch?: string; experiment?: string; @@ -9999,7 +10613,11 @@ interface GleanImpl { slug?: string; status?: string; }>; - exposure: GleanEventWithExtras<{ branch?: string; experiment?: string; feature_id?: string }>; + exposure: GleanEventWithExtras<{ + branch?: string; + experiment?: string; + feature_id?: string; + }>; isReady: GleanEventNoExtras; migration: GleanEventWithExtras<{ enrollments?: string; @@ -10021,7 +10639,10 @@ interface GleanImpl { total_store_count?: string; trigger?: string; }>; - unenrollFailed: GleanEventWithExtras<{ experiment?: string; reason?: string }>; + unenrollFailed: GleanEventWithExtras<{ + experiment?: string; + reason?: string; + }>; unenrollment: GleanEventWithExtras<{ branch?: string; changed_pref?: string; @@ -10430,12 +11051,30 @@ interface GleanImpl { pwmgr: { autocompleteFieldGeneratedpassword: GleanEventNoExtras; autocompleteShownGeneratedpassword: GleanEventNoExtras; - cancelExistingLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; - cancelNewLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; - copyPassword: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; - copyUsername: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; - deleteExistingLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; - deleteNewLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; + cancelExistingLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; + cancelNewLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; + copyPassword: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; + copyUsername: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; + deleteExistingLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; + deleteNewLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; doorhangerSubmittedSave: GleanEventWithExtras<{ did_edit_pw?: string; did_edit_un?: string; @@ -10448,7 +11087,10 @@ interface GleanImpl { did_select_pw?: string; did_select_un?: string; }>; - editExistingLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; + editExistingLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; filledFieldEditedGeneratedpassword: GleanEventNoExtras; filterList: GleanEventNoExtras; formAutofillResult: Record< @@ -10469,13 +11111,19 @@ interface GleanImpl { | "type_no_longer_password", GleanCounter >; - hidePassword: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; + hidePassword: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; importLoginsFromFileCategorical: Record< "added" | "error" | "modified" | "no_change", GleanCounter >; isUsernameOnlyForm: Record<"false" | "true", GleanCounter>; - learnMoreVulnExistingLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; + learnMoreVulnExistingLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; loginPageSafety: GleanCustomDistribution; mgmtMenuItemUsedExport: GleanEventNoExtras; mgmtMenuItemUsedExportComplete: GleanEventNoExtras; @@ -10495,11 +11143,17 @@ interface GleanImpl { openManagementPageinfo: GleanEventNoExtras; openManagementPreferences: GleanEventNoExtras; openManagementSnippet: GleanEventNoExtras; - openSiteExistingLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; + openSiteExistingLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; osAuthEnabled: GleanBoolean; potentiallyBreachedPasswords: GleanQuantity; promptRememberAction: GleanCustomDistribution; - promptShownOsReauth: GleanEventWithExtras<{ result?: string; trigger?: string }>; + promptShownOsReauth: GleanEventWithExtras<{ + result?: string; + trigger?: string; + }>; promptUpdateAction: GleanCustomDistribution; reauthenticateMasterPassword: GleanEventWithExtras<{ auto_admin?: string; @@ -10517,7 +11171,10 @@ interface GleanImpl { operation?: string; run_id?: string; }>; - rustMigrationFailure: GleanEventWithExtras<{ error_message?: string; run_id?: string }>; + rustMigrationFailure: GleanEventWithExtras<{ + error_message?: string; + run_id?: string; + }>; rustMigrationStatus: GleanEventWithExtras<{ duration_ms?: string; had_errors?: string; @@ -10532,34 +11189,64 @@ interface GleanImpl { run_id?: string; status?: string; }>; - saveExistingLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; - saveNewLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; + saveExistingLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; + saveNewLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; savedLoginUsedAuthLogin: GleanEventWithExtras<{ filled?: string }>; savedLoginUsedFormLogin: GleanEventWithExtras<{ filled?: string }>; savedLoginUsedFormPassword: GleanEventWithExtras<{ filled?: string }>; savedLoginUsedPromptLogin: GleanEventWithExtras<{ filled?: string }>; savingEnabled: GleanBoolean; - selectExistingLogin: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; - showPassword: GleanEventWithExtras<{ breached?: string; vulnerable?: string }>; + selectExistingLogin: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; + showPassword: GleanEventWithExtras<{ + breached?: string; + vulnerable?: string; + }>; signupFormDetection: GleanTimingDistribution; sortList: GleanEventWithExtras<{ sort_key?: string }>; }; relayIntegration: { - clickedFillUsername: GleanEventWithExtras<{ error_code?: string; value?: string }>; - clickedOfferRelay: GleanEventWithExtras<{ scenario?: string; value?: string }>; + clickedFillUsername: GleanEventWithExtras<{ + error_code?: string; + value?: string; + }>; + clickedOfferRelay: GleanEventWithExtras<{ + scenario?: string; + value?: string; + }>; disabledOptInPanel: GleanEventWithExtras<{ value?: string }>; disabledPrefChange: GleanEventNoExtras; enabledOptInPanel: GleanEventWithExtras<{ value?: string }>; enabledPrefChange: GleanEventNoExtras; getUnlimitedMasksReusePanel: GleanEventWithExtras<{ value?: string }>; - placedEmailMask: GleanEventWithExtras<{ error_code?: string; value?: string }>; + placedEmailMask: GleanEventWithExtras<{ + error_code?: string; + value?: string; + }>; postponedOptInPanel: GleanEventWithExtras<{ value?: string }>; reuseMaskReusePanel: GleanEventWithExtras<{ value?: string }>; - shownFillUsername: GleanEventWithExtras<{ error_code?: string; value?: string }>; - shownOfferRelay: GleanEventWithExtras<{ scenario?: string; value?: string }>; + shownFillUsername: GleanEventWithExtras<{ + error_code?: string; + value?: string; + }>; + shownOfferRelay: GleanEventWithExtras<{ + scenario?: string; + value?: string; + }>; shownOptInPanel: GleanEventWithExtras<{ value?: string }>; - shownReusePanel: GleanEventWithExtras<{ error_code?: string; value?: string }>; + shownReusePanel: GleanEventWithExtras<{ + error_code?: string; + value?: string; + }>; }; pdfjs: { @@ -10583,7 +11270,10 @@ interface GleanImpl { | "view_bookmark", GleanCounter >; - editing: Record<"freetext" | "ink" | "print" | "save" | "signature" | "stamp", GleanCounter>; + editing: Record< + "freetext" | "ink" | "print" | "save" | "signature" | "stamp", + GleanCounter + >; geckoview: Record< | "download_failed" | "download_succeeded" @@ -10621,8 +11311,14 @@ interface GleanImpl { deleted: GleanCounter; edited: GleanCounter; kind: Record<"free_highlight" | "highlight", GleanCounter>; - method: Record<"context_menu" | "floating_button" | "main_toolbar", GleanCounter>; - numberOfColors: Record<"five" | "four" | "one" | "three" | "two", GleanCounter>; + method: Record< + "context_menu" | "floating_button" | "main_toolbar", + GleanCounter + >; + numberOfColors: Record< + "five" | "four" | "one" | "three" | "two", + GleanCounter + >; print: GleanCounter; save: GleanCounter; thickness: GleanCustomDistribution; @@ -10635,7 +11331,10 @@ interface GleanImpl { added: Record<"with_alt_text" | "without_alt_text", GleanCounter>; altTextEdit: Record<"ai_generation" | "ask_to_edit", GleanBoolean>; iconClick: GleanEventNoExtras; - imageAdded: GleanEventWithExtras<{ alt_text_modal?: string; alt_text_type?: string }>; + imageAdded: GleanEventWithExtras<{ + alt_text_modal?: string; + alt_text_type?: string; + }>; imageSelected: GleanEventWithExtras<{ alt_text_modal?: string }>; }; @@ -10664,7 +11363,10 @@ interface GleanImpl { }; pdfjsSignature: { - added: GleanEventWithExtras<{ has_alt_text?: string; has_no_alt_text?: string }>; + added: GleanEventWithExtras<{ + has_alt_text?: string; + has_no_alt_text?: string; + }>; clear: Record<"draw" | "text" | "type", GleanCounter>; created: GleanEventWithExtras<{ description_changed?: string; @@ -10674,7 +11376,10 @@ interface GleanImpl { }>; deleteSaved: GleanEventWithExtras<{ saved_count?: string }>; editDescription: Record<"saved" | "unsaved", GleanCounter>; - inserted: GleanEventWithExtras<{ has_been_saved?: string; has_description?: string }>; + inserted: GleanEventWithExtras<{ + has_been_saved?: string; + has_description?: string; + }>; }; pictureinpicture: { @@ -10730,7 +11435,11 @@ interface GleanImpl { disableDialog?: string; firstTimeToggle?: string; }>; - resizePlayer: GleanEventWithExtras<{ height?: string; value?: string; width?: string }>; + resizePlayer: GleanEventWithExtras<{ + height?: string; + value?: string; + width?: string; + }>; sawToggleToggle: GleanEventWithExtras<{ firstTime?: string }>; subtitlesShownSubtitles: GleanEventWithExtras<{ webVTTSubtitles?: string }>; toggleEnabled: GleanBoolean; @@ -10813,7 +11522,10 @@ interface GleanImpl { previewOpenedTm: GleanCounter; settingsChanged: Record; silentPrint: GleanCounter; - targetType: Record<"pdf_file" | "pdf_unknown" | "unknown" | "xps_file", GleanCounter>; + targetType: Record< + "pdf_file" | "pdf_unknown" | "unknown" | "xps_file", + GleanCounter + >; }; power: { @@ -10840,7 +11552,12 @@ interface GleanImpl { GleanCounter >; cpuTimePerTrackerTypeMs: Record< - "ad" | "analytics" | "cryptomining" | "fingerprinting" | "social" | "unknown", + | "ad" + | "analytics" + | "cryptomining" + | "fingerprinting" + | "social" + | "unknown", GleanCounter >; energyPerProcessType: Record< @@ -12350,9 +13067,16 @@ interface GleanImpl { }; applicationReputation: { - binaryArchive: Record<"DmgFile" | "OtherBinaryFile" | "RarFile" | "ZipFile", GleanCounter>; + binaryArchive: Record< + "DmgFile" | "OtherBinaryFile" | "RarFile" | "ZipFile", + GleanCounter + >; binaryType: Record< - "BinaryFile" | "MissingFilename" | "MozNonBinaryFile" | "NonBinaryFile" | "UnknownFile", + | "BinaryFile" + | "MissingFilename" + | "MozNonBinaryFile" + | "NonBinaryFile" + | "UnknownFile", GleanCounter >; local: GleanCustomDistribution; @@ -12874,9 +13598,21 @@ interface GleanImpl { }; telemetryTest: { - test1Object1: GleanEventWithExtras<{ key1?: string; key2?: string; value?: string }>; - test2Object1: GleanEventWithExtras<{ key1?: string; key2?: string; value?: string }>; - test2Object2: GleanEventWithExtras<{ key1?: string; key2?: string; value?: string }>; + test1Object1: GleanEventWithExtras<{ + key1?: string; + key2?: string; + value?: string; + }>; + test2Object1: GleanEventWithExtras<{ + key1?: string; + key2?: string; + value?: string; + }>; + test2Object2: GleanEventWithExtras<{ + key1?: string; + key2?: string; + value?: string; + }>; }; thumbnails: { @@ -12932,16 +13668,25 @@ interface GleanImpl { translationsPanel: { aboutTranslations: GleanEventWithExtras<{ flow_id?: string }>; - alwaysOfferTranslations: GleanEventWithExtras<{ flow_id?: string; toggled_on?: string }>; + alwaysOfferTranslations: GleanEventWithExtras<{ + flow_id?: string; + toggled_on?: string; + }>; alwaysTranslateLanguage: GleanEventWithExtras<{ flow_id?: string; language?: string; toggled_on?: string; }>; cancelButton: GleanEventWithExtras<{ flow_id?: string }>; - changeFromLanguage: GleanEventWithExtras<{ flow_id?: string; language?: string }>; + changeFromLanguage: GleanEventWithExtras<{ + flow_id?: string; + language?: string; + }>; changeSourceLanguageButton: GleanEventWithExtras<{ flow_id?: string }>; - changeToLanguage: GleanEventWithExtras<{ flow_id?: string; language?: string }>; + changeToLanguage: GleanEventWithExtras<{ + flow_id?: string; + language?: string; + }>; close: GleanEventWithExtras<{ flow_id?: string }>; closeFromLanguageMenu: GleanEventWithExtras<{ flow_id?: string }>; closeSettingsMenu: GleanEventWithExtras<{ flow_id?: string }>; @@ -12954,7 +13699,10 @@ interface GleanImpl { language?: string; toggled_on?: string; }>; - neverTranslateSite: GleanEventWithExtras<{ flow_id?: string; toggled_on?: string }>; + neverTranslateSite: GleanEventWithExtras<{ + flow_id?: string; + toggled_on?: string; + }>; open: GleanEventWithExtras<{ auto_show?: string; document_language?: string; @@ -12978,7 +13726,10 @@ interface GleanImpl { language?: string; previous_language?: string; }>; - changeToLanguage: GleanEventWithExtras<{ flow_id?: string; language?: string }>; + changeToLanguage: GleanEventWithExtras<{ + flow_id?: string; + language?: string; + }>; close: GleanEventWithExtras<{ flow_id?: string }>; copyButton: GleanEventWithExtras<{ flow_id?: string }>; doneButton: GleanEventWithExtras<{ flow_id?: string }>; @@ -13230,7 +13981,9 @@ interface GleanImpl { fetchTime: GleanTimingDistribution; homeRegion: GleanString; storeRegionResult: Record< - "ignoredUnitedStatesIncorrectTimezone" | "setForRestOfWorld" | "setForUnitedStates", + | "ignoredUnitedStatesIncorrectTimezone" + | "setForRestOfWorld" + | "setForUnitedStates", GleanCounter >; }; @@ -13260,7 +14013,11 @@ interface GleanImpl { }; serviceRequest: { - bypassProxyInfo: GleanEventWithExtras<{ source?: string; type?: string; value?: string }>; + bypassProxyInfo: GleanEventWithExtras<{ + source?: string; + type?: string; + value?: string; + }>; }; defaultagent: { @@ -13355,7 +14112,10 @@ interface GleanImpl { step?: string; updated_from?: string; }>; - xpistatesWriteErrors: GleanEventWithExtras<{ error_type?: string; profile_state?: string }>; + xpistatesWriteErrors: GleanEventWithExtras<{ + error_type?: string; + profile_state?: string; + }>; disableDictionary: GleanEventWithExtras<{ blocklist_state?: string; method?: string; @@ -13875,7 +14635,9 @@ interface GleanImpl { lateStack: GleanText; parses: GleanTimingDistribution; rebuilds: Record< - "XPIDB_rebuildBadJSON_MS" | "XPIDB_rebuildReadFailed_MS" | "XPIDB_rebuildUnreadableDB_MS", + | "XPIDB_rebuildBadJSON_MS" + | "XPIDB_rebuildReadFailed_MS" + | "XPIDB_rebuildUnreadableDB_MS", GleanTimingDistribution >; startupError: GleanString; @@ -14172,7 +14934,9 @@ interface GleanPingsImpl { topSites: GleanPingNoReason; profiles: GleanPingNoReason; searchWith: GleanPingNoReason; - serpCategorization: GleanPingWithReason<"inactivity" | "startup" | "threshold_reached">; + serpCategorization: GleanPingWithReason< + "inactivity" | "startup" | "threshold_reached" + >; quickSuggest: GleanPingNoReason; quickSuggestDeletionRequest: GleanPingNoReason; urlbarKeywordExposure: GleanPingNoReason; @@ -14214,7 +14978,11 @@ interface GleanPingsImpl { } type GleanEventNoExtras = Omit & { record(_?: never) }; -type GleanEventWithExtras = Omit & { record(extras: T) }; +type GleanEventWithExtras = Omit & { + record(extras: T); +}; type GleanPingNoReason = Omit & { submit(_?: never) }; -type GleanPingWithReason = Omit & { submit(reason: T) }; +type GleanPingWithReason = Omit & { + submit(reason: T); +}; diff --git a/src/zen/@types/lib.gecko.linux.d.ts b/src/zen/@types/lib.gecko.linux.d.ts index 7308bb544..e83ac5907 100644 --- a/src/zen/@types/lib.gecko.linux.d.ts +++ b/src/zen/@types/lib.gecko.linux.d.ts @@ -51,7 +51,11 @@ declare global { readonly STATE_ERROR?: 3; readonly STATE_PAUSED?: 4; - setProgressState(state: nsTaskbarProgressState, currentValue?: u64, maxValue?: u64): void; + setProgressState( + state: nsTaskbarProgressState, + currentValue?: u64, + maxValue?: u64 + ): void; } interface nsIXPCComponents_Interfaces { diff --git a/src/zen/@types/lib.gecko.nsresult.d.ts b/src/zen/@types/lib.gecko.nsresult.d.ts index 450bac34b..09ce3bd26 100644 --- a/src/zen/@types/lib.gecko.nsresult.d.ts +++ b/src/zen/@types/lib.gecko.nsresult.d.ts @@ -705,4 +705,5 @@ interface nsIXPCComponents_Results { NS_ERROR_DOM_QM_CLIENT_INIT_ORIGIN_UNINITIALIZED: 0x80730001; } -type nsIXPCComponents_Values = nsIXPCComponents_Results[keyof nsIXPCComponents_Results]; +type nsIXPCComponents_Values = + nsIXPCComponents_Results[keyof nsIXPCComponents_Results]; diff --git a/src/zen/@types/lib.gecko.tweaks.d.ts b/src/zen/@types/lib.gecko.tweaks.d.ts index 9e3b512ba..a98c0bb27 100644 --- a/src/zen/@types/lib.gecko.tweaks.d.ts +++ b/src/zen/@types/lib.gecko.tweaks.d.ts @@ -33,11 +33,15 @@ interface Document { } type nsIGleanPingNoReason = { - [K in keyof nsIGleanPing]: K extends "submit" ? (_?: never) => void : nsIGleanPing[K]; + [K in keyof nsIGleanPing]: K extends "submit" + ? (_?: never) => void + : nsIGleanPing[K]; }; type nsIGleanPingWithReason = { - [K in keyof nsIGleanPing]: K extends "submit" ? (reason: T) => void : nsIGleanPing[K]; + [K in keyof nsIGleanPing]: K extends "submit" + ? (reason: T) => void + : nsIGleanPing[K]; }; interface MessageListenerManagerMixin { diff --git a/src/zen/@types/lib.gecko.win32.d.ts b/src/zen/@types/lib.gecko.win32.d.ts index 2a8cddafd..586573ecb 100644 --- a/src/zen/@types/lib.gecko.win32.d.ts +++ b/src/zen/@types/lib.gecko.win32.d.ts @@ -56,14 +56,18 @@ declare global { } interface nsIWindowsAlertNotification - extends nsIAlertNotification, + extends + nsIAlertNotification, Enums { imagePlacement: nsIWindowsAlertNotification.ImagePlacement; } interface nsIWindowsAlertsService extends nsIAlertsService { handleWindowsTag(aWindowsTag: string): Promise; - getXmlStringForWindowsAlert(aAlert: nsIAlertNotification, aWindowsTag?: string): string; + getXmlStringForWindowsAlert( + aAlert: nsIAlertNotification, + aWindowsTag?: string + ): string; removeAllNotificationsForInstall(): void; } @@ -86,9 +90,18 @@ declare global { aNotificationAction: string, daysSinceLastAppLaunch: u32 ): void; - setDefaultBrowserUserChoice(aAumid: string, aExtraFileExtensions: string[]): void; - setDefaultBrowserUserChoiceAsync(aAumid: string, aExtraFileExtensions: string[]): Promise; - setDefaultExtensionHandlersUserChoice(aAumid: string, aFileExtensions: string[]): void; + setDefaultBrowserUserChoice( + aAumid: string, + aExtraFileExtensions: string[] + ): void; + setDefaultBrowserUserChoiceAsync( + aAumid: string, + aExtraFileExtensions: string[] + ): Promise; + setDefaultExtensionHandlersUserChoice( + aAumid: string, + aFileExtensions: string[] + ): void; agentDisabled(): boolean; } @@ -124,11 +137,13 @@ declare enum nsIWindowsShellService_LaunchOnLoginEnabledEnumerator { declare global { namespace nsIWindowsShellService { - type LaunchOnLoginEnabledEnumerator = nsIWindowsShellService_LaunchOnLoginEnabledEnumerator; + type LaunchOnLoginEnabledEnumerator = + nsIWindowsShellService_LaunchOnLoginEnabledEnumerator; } interface nsIWindowsShellService - extends nsIShellService, + extends + nsIShellService, Enums { createShortcut( aBinary: nsIFile, @@ -149,13 +164,19 @@ declare global { pinCurrentAppToTaskbarAsync(aPrivateBrowsing: boolean): Promise; checkPinCurrentAppToTaskbarAsync(aPrivateBrowsing: boolean): Promise; isCurrentAppPinnedToTaskbarAsync(aumid: string): Promise; - pinShortcutToTaskbar(aAppUserModelId: string, aShortcutPath: string): Promise; + pinShortcutToTaskbar( + aAppUserModelId: string, + aShortcutPath: string + ): Promise; createWindowsIcon(aFile: nsIFile, aContainer: imgIContainer): Promise; unpinShortcutFromTaskbar(aShortcutPath: string): void; getTaskbarTabShortcutPath(aShortcutName: string): string; getTaskbarTabPins(): string[]; classifyShortcut(aPath: string): string; - hasPinnableShortcut(aAUMID: string, aPrivateBrowsing: boolean): Promise; + hasPinnableShortcut( + aAUMID: string, + aPrivateBrowsing: boolean + ): Promise; canSetDefaultBrowserUserChoice(): boolean; checkAllProgIDsExist(): boolean; checkBrowserUserChoiceHashes(): boolean; @@ -241,7 +262,11 @@ declare global { readonly height: u32; readonly thumbnailAspectRatio: float; requestPreview(aCallback: nsITaskbarPreviewCallback): void; - requestThumbnail(aCallback: nsITaskbarPreviewCallback, width: u32, height: u32): void; + requestThumbnail( + aCallback: nsITaskbarPreviewCallback, + width: u32, + height: u32 + ): void; onClose(): void; onActivate(): boolean; onClick(button: nsITaskbarPreviewButton): void; @@ -256,7 +281,11 @@ declare global { readonly STATE_ERROR?: 3; readonly STATE_PAUSED?: 4; - setProgressState(state: nsTaskbarProgressState, currentValue?: u64, maxValue?: u64): void; + setProgressState( + state: nsTaskbarProgressState, + currentValue?: u64, + maxValue?: u64 + ): void; } // https://searchfox.org/mozilla-central/source/widget/nsITaskbarTabPreview.idl @@ -288,7 +317,9 @@ declare global { ): nsITaskbarTabPreview; getTaskbarWindowPreview(shell: nsIDocShell): nsITaskbarWindowPreview; getTaskbarProgress(shell: nsIDocShell): nsITaskbarProgress; - getOverlayIconController(shell: nsIDocShell): nsITaskbarOverlayIconController; + getOverlayIconController( + shell: nsIDocShell + ): nsITaskbarOverlayIconController; createJumpListBuilder(aPrivateBrowsing: boolean): nsIJumpListBuilder; getGroupIdForWindow(aParent: mozIDOMWindow): string; setGroupIdForWindow(aParent: mozIDOMWindow, aIdentifier: string): void; @@ -304,7 +335,11 @@ declare global { aSmallIcon: imgIContainer, aLargeIcon: imgIContainer ): void; - setWindowIconFromExe(aWindow: mozIDOMWindowProxy, aExe: string, aIndex: u16): void; + setWindowIconFromExe( + aWindow: mozIDOMWindowProxy, + aExe: string, + aIndex: u16 + ): void; setWindowIconNoData(aWindow: mozIDOMWindowProxy): void; readonly inWin10TabletMode: boolean; readonly inWin11TabletMode: boolean; diff --git a/src/zen/@types/lib.gecko.xpcom.d.ts b/src/zen/@types/lib.gecko.xpcom.d.ts index 84facb30b..b1629155c 100644 --- a/src/zen/@types/lib.gecko.xpcom.d.ts +++ b/src/zen/@types/lib.gecko.xpcom.d.ts @@ -143,7 +143,10 @@ declare global { interface nsIBitsRequest extends nsIRequest { readonly bitsId: string; readonly transferError: nsBitsErrorType; - changeMonitorInterval(monitorIntervalMs: u32, callback: nsIBitsCallback): void; + changeMonitorInterval( + monitorIntervalMs: u32, + callback: nsIBitsCallback + ): void; cancelAsync(status: nsresult, callback: nsIBitsCallback): void; setPriorityHigh(callback: nsIBitsCallback): void; setPriorityLow(callback: nsIBitsCallback): void; @@ -193,7 +196,10 @@ declare global { getAccessibleFromCache(aNode: Node): nsIAccessible; setCacheDomains(aCacheDomains: u64): void; createAccessiblePivot(aRoot: nsIAccessible): nsIAccessiblePivot; - createTextLeafPoint(aAccessible: nsIAccessible, aOffset: i32): nsIAccessibleTextLeafPoint; + createTextLeafPoint( + aAccessible: nsIAccessible, + aOffset: i32 + ): nsIAccessibleTextLeafPoint; setLogging(aModules: string): void; isLogged(aModule: string): boolean; getConsumers(): string; @@ -835,7 +841,11 @@ declare global { startOffset: OutParam, endOffset: OutParam ): void; - setSelectionBounds(selectionNum: i32, startOffset: i32, endOffset: i32): void; + setSelectionBounds( + selectionNum: i32, + startOffset: i32, + endOffset: i32 + ): void; addSelection(startOffset: i32, endOffset: i32): void; removeSelection(selectionNum: i32): void; scrollSubstringTo(startIndex: i32, endIndex: i32, scrollType: u32): void; @@ -1033,7 +1043,10 @@ declare global { aInitialWidth: i32, aInitialHeight: i32 ): nsIAppWindow; - createWindowlessBrowser(aIsChrome?: boolean, aChromeMask?: u32): nsIWindowlessBrowser; + createWindowlessBrowser( + aIsChrome?: boolean, + aChromeMask?: u32 + ): nsIWindowlessBrowser; readonly hiddenWindow: nsIAppWindow; readonly hiddenDOMWindow: mozIDOMWindowProxy; registerTopLevelWindow(aWindow: nsIAppWindow): void; @@ -1058,7 +1071,10 @@ declare global { lockAspectRatio(aShouldLock: boolean): void; chromeFlags: u32; assumeChromeFlagsAreFrozen(): void; - createNewWindow(aChromeFlags: i32, aOpenWindowInfo: nsIOpenWindowInfo): nsIAppWindow; + createNewWindow( + aChromeFlags: i32, + aOpenWindowInfo: nsIOpenWindowInfo + ): nsIAppWindow; XULBrowserWindow: nsIXULBrowserWindow; readonly initialOpenWindowInfo: nsIOpenWindowInfo; needFastSnaphot(): void; @@ -1070,7 +1086,10 @@ declare global { interface nsIWindowMediator extends nsISupports { getEnumerator(aWindowType: string): nsISimpleEnumerator; getAppWindowEnumerator(aWindowType: string): nsISimpleEnumerator; - getZOrderAppWindowEnumerator(aWindowType: string, aFrontToBack: boolean): nsISimpleEnumerator; + getZOrderAppWindowEnumerator( + aWindowType: string, + aFrontToBack: boolean + ): nsISimpleEnumerator; getMostRecentWindow(aWindowType: string): mozIDOMWindowProxy; getMostRecentBrowserWindow(): mozIDOMWindowProxy; getMostRecentNonPBWindow(aWindowType: string): mozIDOMWindowProxy; @@ -1100,7 +1119,13 @@ declare global { interface nsIXULBrowserWindow extends nsISupports { setOverLink(link: string): void; - showTooltip(x: i32, y: i32, tooltip: string, direction: string, browser: Element): void; + showTooltip( + x: i32, + y: i32, + tooltip: string, + direction: string, + browser: Element + ): void; hideTooltip(): void; } @@ -1124,7 +1149,8 @@ declare global { type IDLShutdownPhase = nsIAppStartup_IDLShutdownPhase; } - interface nsIAppStartup extends nsISupports, Enums { + interface nsIAppStartup + extends nsISupports, Enums { readonly eConsiderQuit?: 1; readonly eAttemptQuit?: 2; readonly eForceQuit?: 3; @@ -1282,7 +1308,10 @@ declare global { } interface nsIAutoCompleteObserver extends nsISupports { - onSearchResult(search: nsIAutoCompleteSearch, result: nsIAutoCompleteResult): void; + onSearchResult( + search: nsIAutoCompleteSearch, + result: nsIAutoCompleteResult + ): void; } // https://searchfox.org/mozilla-central/source/toolkit/components/autocomplete/nsIAutoCompleteSimpleResult.idl @@ -1367,7 +1396,11 @@ declare global { getExtensionPageCSP(aAddonId: string): string; getGeneratedBackgroundPageUrl(aAddonId: string): string; addonHasPermission(aAddonId: string, aPerm: string): boolean; - addonMayLoadURI(aAddonId: string, aURI: nsIURI, aExplicit?: boolean): boolean; + addonMayLoadURI( + aAddonId: string, + aURI: nsIURI, + aExplicit?: boolean + ): boolean; getExtensionName(aAddonId: string): string; sourceMayLoadExtensionURI( aSourceURI: nsIURI, @@ -1442,7 +1475,10 @@ declare global { isURIInList(list: string): boolean; isContentAccessibleAboutURI(): boolean; isSameOrigin(otherURI: nsIURI): boolean; - hasFirstpartyStorageAccess(aWindow: mozIDOMWindow, rejectedReason: OutParam): boolean; + hasFirstpartyStorageAccess( + aWindow: mozIDOMWindow, + rejectedReason: OutParam + ): boolean; readonly localStorageQuotaKey: string; readonly isOriginPotentiallyTrustworthy: boolean; readonly isLoopbackHost: boolean; @@ -1498,13 +1534,30 @@ declare global { flags?: u32, innerWindowID?: u64 ): void; - checkLoadURIStrWithPrincipalXPCOM(aPrincipal: nsIPrincipal, uri: string, flags: u32): void; - checkLoadURIStrWithPrincipal(aPrincipal: nsIPrincipal, uri: string, flags?: u32): void; + checkLoadURIStrWithPrincipalXPCOM( + aPrincipal: nsIPrincipal, + uri: string, + flags: u32 + ): void; + checkLoadURIStrWithPrincipal( + aPrincipal: nsIPrincipal, + uri: string, + flags?: u32 + ): void; inFileURIAllowlist(aUri: nsIURI): boolean; getSystemPrincipal(): nsIPrincipal; - getLoadContextContentPrincipal(uri: nsIURI, loadContext: nsILoadContext): nsIPrincipal; - getDocShellContentPrincipal(uri: nsIURI, docShell: nsIDocShell): nsIPrincipal; - principalWithOA(principal: nsIPrincipal, originAttributes: any): nsIPrincipal; + getLoadContextContentPrincipal( + uri: nsIURI, + loadContext: nsILoadContext + ): nsIPrincipal; + getDocShellContentPrincipal( + uri: nsIURI, + docShell: nsIDocShell + ): nsIPrincipal; + principalWithOA( + principal: nsIPrincipal, + originAttributes: any + ): nsIPrincipal; createContentPrincipal(uri: nsIURI, originAttributes: any): nsIPrincipal; createContentPrincipalFromOrigin(origin: string): nsIPrincipal; principalToJSON(principal: nsIPrincipal): string; @@ -1538,7 +1591,10 @@ declare global { } interface nsICaptivePortalDetector extends nsISupports { - checkCaptivePortal(ifname: string, callback: nsICaptivePortalCallback): void; + checkCaptivePortal( + ifname: string, + callback: nsICaptivePortalCallback + ): void; abort(ifname: string): void; cancelLogin(eventId: string): void; finishPreparation(ifname: string): void; @@ -1579,10 +1635,22 @@ declare global { // https://searchfox.org/mozilla-central/source/dom/commandhandler/nsICommandManager.idl interface nsICommandManager extends nsISupports { - addCommandObserver(aCommandObserver: nsIObserver, aCommandToObserve: string): void; - removeCommandObserver(aCommandObserver: nsIObserver, aCommandObserved: string): void; - isCommandSupported(aCommandName: string, aTargetWindow: mozIDOMWindowProxy): boolean; - isCommandEnabled(aCommandName: string, aTargetWindow: mozIDOMWindowProxy): boolean; + addCommandObserver( + aCommandObserver: nsIObserver, + aCommandToObserve: string + ): void; + removeCommandObserver( + aCommandObserver: nsIObserver, + aCommandObserved: string + ): void; + isCommandSupported( + aCommandName: string, + aTargetWindow: mozIDOMWindowProxy + ): boolean; + isCommandEnabled( + aCommandName: string, + aTargetWindow: mozIDOMWindowProxy + ): boolean; getCommandState( aCommandName: string, aTargetWindow: mozIDOMWindowProxy, @@ -1807,7 +1875,8 @@ declare global { } interface nsIDocShell - extends nsIDocShellTreeItem, + extends + nsIDocShellTreeItem, Enums< typeof nsIDocShell_DocShellEnumeratorDirection & typeof nsIDocShell_AppType & @@ -1933,7 +2002,10 @@ declare global { // https://searchfox.org/mozilla-central/source/docshell/base/nsIDocShellTreeOwner.idl interface nsIDocShellTreeOwner extends nsISupports { - contentShellAdded(aContentShell: nsIDocShellTreeItem, aPrimary: boolean): void; + contentShellAdded( + aContentShell: nsIDocShellTreeItem, + aPrimary: boolean + ): void; contentShellRemoved(aContentShell: nsIDocShellTreeItem): void; readonly primaryContentShell: nsIDocShellTreeItem; remoteTabAdded(aTab: nsIRemoteTab, aPrimary: boolean): void; @@ -1999,9 +2071,11 @@ declare global { } interface nsIDocumentViewer - extends nsISupports, + extends + nsISupports, Enums< - typeof nsIDocumentViewer_PermitUnloadAction & typeof nsIDocumentViewer_PermitUnloadResult + typeof nsIDocumentViewer_PermitUnloadAction & + typeof nsIDocumentViewer_PermitUnloadResult > { readonly eDelayResize?: 1; @@ -2021,7 +2095,10 @@ declare global { sticky: boolean; open(aState: nsISupports, aSHEntry: nsISHEntry): void; clearHistoryEntry(): void; - setPageModeForTesting(aPageMode: boolean, aPrintSettings: nsIPrintSettings): void; + setPageModeForTesting( + aPageMode: boolean, + aPrintSettings: nsIPrintSettings + ): void; readonly historyEntry: nsISHEntry; readonly isTabModalPromptAllowed: boolean; isHidden: boolean; @@ -2087,7 +2164,10 @@ declare global { interface nsIReflowObserver extends nsISupports { reflow(start: DOMHighResTimeStamp, end: DOMHighResTimeStamp): void; - reflowInterruptible(start: DOMHighResTimeStamp, end: DOMHighResTimeStamp): void; + reflowInterruptible( + start: DOMHighResTimeStamp, + end: DOMHighResTimeStamp + ): void; } // https://searchfox.org/mozilla-central/source/docshell/base/nsIRefreshURI.idl @@ -2102,14 +2182,23 @@ declare global { // https://searchfox.org/mozilla-central/source/docshell/base/nsITooltipListener.idl interface nsITooltipListener extends nsISupports { - onShowTooltip(aXCoords: i32, aYCoords: i32, aTipText: string, aTipDir: string): void; + onShowTooltip( + aXCoords: i32, + aYCoords: i32, + aTipText: string, + aTipDir: string + ): void; onHideTooltip(): void; } // https://searchfox.org/mozilla-central/source/docshell/base/nsITooltipTextProvider.idl interface nsITooltipTextProvider extends nsISupports { - getNodeText(aNode: Node, aText: OutParam, aDirection: OutParam): boolean; + getNodeText( + aNode: Node, + aText: OutParam, + aDirection: OutParam + ): boolean; } // https://searchfox.org/mozilla-central/source/docshell/base/nsIURIFixup.idl @@ -2136,9 +2225,16 @@ declare global { getFixupURIInfo(aURIText: string, aFixupFlags?: u32): nsIURIFixupInfo; webNavigationFlagsToFixupFlags(aURIText: string, aDocShellFlags: u32): u32; - keywordToURI(aKeyword: string, aIsPrivateContext?: boolean): nsIURIFixupInfo; + keywordToURI( + aKeyword: string, + aIsPrivateContext?: boolean + ): nsIURIFixupInfo; forceHttpFixup(aUriString: string): nsIURIFixupInfo; - checkHost(aURI: nsIURI, aListener: nsIDNSListener, aOriginAttributes?: any): void; + checkHost( + aURI: nsIURI, + aListener: nsIDNSListener, + aOriginAttributes?: any + ): void; isDomainKnown(aDomain: string): boolean; } @@ -2178,7 +2274,10 @@ declare global { readonly canGoBackIgnoringUserInteraction: boolean; readonly canGoForward: boolean; goBack(aRequireUserInteraction?: boolean, aUserActivation?: boolean): void; - goForward(aRequireUserInteraction?: boolean, aUserActivation?: boolean): void; + goForward( + aRequireUserInteraction?: boolean, + aUserActivation?: boolean + ): void; gotoIndex(index: i32, aUserActivation?: boolean): void; loadURI(aURI: nsIURI, aLoadURIOptions: any): void; fixupAndLoadURIString(aURIString: string, aLoadURIOptions: any): void; @@ -2288,8 +2387,7 @@ declare global { } interface nsIContentPolicy - extends nsISupports, - Enums { + extends nsISupports, Enums { readonly REJECT_REQUEST?: -1; readonly REJECT_TYPE?: -2; readonly REJECT_SERVER?: -3; @@ -2311,8 +2409,15 @@ declare global { interface nsIDroppedLinkHandler extends nsISupports { canDropLink(aEvent: DragEvent, aAllowSameDocument: boolean): boolean; - dropLinks(aEvent: DragEvent, aDisallowInherit?: boolean): nsIDroppedLinkItem[]; - validateURIsForDrop(aEvent: DragEvent, aURIs: string[], aDisallowInherit?: boolean): void; + dropLinks( + aEvent: DragEvent, + aDisallowInherit?: boolean + ): nsIDroppedLinkItem[]; + validateURIsForDrop( + aEvent: DragEvent, + aURIs: string[], + aDisallowInherit?: boolean + ): void; queryLinks(aDataTransfer: DataTransfer): nsIDroppedLinkItem[]; getTriggeringPrincipal(aEvent: DragEvent): nsIPrincipal; getPolicyContainer(aEvent: DragEvent): nsIPolicyContainer; @@ -2334,8 +2439,14 @@ declare global { } interface nsIEventSourceEventService extends nsISupports { - addListener(aInnerWindowID: u64, aListener: nsIEventSourceEventListener): void; - removeListener(aInnerWindowID: u64, aListener: nsIEventSourceEventListener): void; + addListener( + aInnerWindowID: u64, + aListener: nsIEventSourceEventListener + ): void; + removeListener( + aInnerWindowID: u64, + aListener: nsIEventSourceEventListener + ): void; hasListenerFor(aInnerWindowID: u64): boolean; } @@ -2381,10 +2492,17 @@ declare global { } interface nsIScriptableContentIterator - extends nsISupports, + extends + nsISupports, Enums { - initWithRootNode(aType: nsIScriptableContentIterator.IteratorType, aRoot: Node): void; - initWithRange(aType: nsIScriptableContentIterator.IteratorType, aRange: Range): void; + initWithRootNode( + aType: nsIScriptableContentIterator.IteratorType, + aRoot: Node + ): void; + initWithRange( + aType: nsIScriptableContentIterator.IteratorType, + aRange: Range + ): void; initWithRangeAllowCrossShadowBoundary( aType: nsIScriptableContentIterator.IteratorType, aRange: Range @@ -2424,7 +2542,8 @@ declare global { } interface nsISelectionController - extends nsISelectionDisplay, + extends + nsISelectionDisplay, Enums { readonly SELECTION_NONE?: 0; readonly SELECTION_NORMAL?: 1; @@ -2516,7 +2635,12 @@ declare global { readonly NO_AMOUNT?: 7; readonly PARAGRAPH_AMOUNT?: 8; - notifySelectionChanged(doc: Document, sel: Selection, reason: i16, amount: i32): void; + notifySelectionChanged( + doc: Document, + sel: Selection, + reason: i16, + amount: i32 + ): void; } // https://searchfox.org/mozilla-central/source/dom/base/nsISlowScriptDebug.idl @@ -2625,7 +2749,11 @@ declare global { readonly referrerInfo: nsIReferrerInfo; isNavigating: boolean; mayEnableCharacterEncodingMenu: boolean; - updateForStateChange(aCharset: string, aDocumentURI: nsIURI, aContentType: string): void; + updateForStateChange( + aCharset: string, + aDocumentURI: nsIURI, + aContentType: string + ): void; updateWebNavigationForLocationChange( aCanGoBack: boolean, aCanGoBackIgnoringUserInteraction: boolean, @@ -2755,14 +2883,27 @@ declare global { // https://searchfox.org/mozilla-central/source/dom/interfaces/base/nsIContentPrefService2.idl interface nsIContentPrefObserver extends nsISupports { - onContentPrefSet(aGroup: string, aName: string, aValue: nsIVariant, aIsPrivate?: boolean): void; - onContentPrefRemoved(aGroup: string, aName: string, aIsPrivate?: boolean): void; + onContentPrefSet( + aGroup: string, + aName: string, + aValue: nsIVariant, + aIsPrivate?: boolean + ): void; + onContentPrefRemoved( + aGroup: string, + aName: string, + aIsPrivate?: boolean + ): void; } interface nsIContentPrefService2 extends nsISupports { readonly GROUP_NAME_MAX_LENGTH?: 2000; - getByName(name: string, context: nsILoadContext, callback: nsIContentPrefCallback2): void; + getByName( + name: string, + context: nsILoadContext, + callback: nsIContentPrefCallback2 + ): void; getByDomainAndName( domain: string, name: string, @@ -2775,8 +2916,16 @@ declare global { context: nsILoadContext, callback: nsIContentPrefCallback2 ): void; - getGlobal(name: string, context: nsILoadContext, callback: nsIContentPrefCallback2): void; - getCachedByDomainAndName(domain: string, name: string, context: nsILoadContext): nsIContentPref; + getGlobal( + name: string, + context: nsILoadContext, + callback: nsIContentPrefCallback2 + ): void; + getCachedByDomainAndName( + domain: string, + name: string, + context: nsILoadContext + ): nsIContentPref; getCachedBySubdomainAndName( domain: string, name: string, @@ -2808,7 +2957,11 @@ declare global { context: nsILoadContext, callback?: nsIContentPrefCallback2 ): void; - removeGlobal(name: string, context: nsILoadContext, callback?: nsIContentPrefCallback2): void; + removeGlobal( + name: string, + context: nsILoadContext, + callback?: nsIContentPrefCallback2 + ): void; removeByDomain( domain: string, context: nsILoadContext, @@ -2819,14 +2972,24 @@ declare global { context: nsILoadContext, callback?: nsIContentPrefCallback2 ): void; - removeByName(name: string, context: nsILoadContext, callback?: nsIContentPrefCallback2): void; - removeAllDomains(context: nsILoadContext, callback?: nsIContentPrefCallback2): void; + removeByName( + name: string, + context: nsILoadContext, + callback?: nsIContentPrefCallback2 + ): void; + removeAllDomains( + context: nsILoadContext, + callback?: nsIContentPrefCallback2 + ): void; removeAllDomainsSince( since: u64, context: nsILoadContext, callback?: nsIContentPrefCallback2 ): void; - removeAllGlobals(context: nsILoadContext, callback?: nsIContentPrefCallback2): void; + removeAllGlobals( + context: nsILoadContext, + callback?: nsIContentPrefCallback2 + ): void; addObserverForName(name: string, observer: nsIContentPrefObserver): void; removeObserverForName(name: string, observer: nsIContentPrefObserver): void; extractDomain(str: string): string; @@ -2875,8 +3038,7 @@ declare global { } interface nsIDOMWindowUtils - extends nsISupports, - Enums { + extends nsISupports, Enums { readonly MODIFIER_ALT?: 1; readonly MODIFIER_CONTROL?: 2; readonly MODIFIER_SHIFT?: 4; @@ -3000,7 +3162,10 @@ declare global { readonly docCharsetIsForced: boolean; readonly physicalMillimeterInCSSPixels: float; getDocumentMetadata(aName: string): string; - getLastOverWindowPointerLocationInCSSPixels(aX: OutParam, aY: OutParam): void; + getLastOverWindowPointerLocationInCSSPixels( + aX: OutParam, + aY: OutParam + ): void; updateLayerTree(): void; readonly lastTransactionId: u64; getViewportInfo( @@ -3015,8 +3180,15 @@ declare global { aAutoSize: OutParam ): void; getViewportFitInfo(): string; - getDocumentViewerSize(aDisplayWidth: OutParam, aDisplayHeight: OutParam): void; - setMousewheelAutodir(aElement: Element, aEnabled: boolean, aHonourRoot: boolean): void; + getDocumentViewerSize( + aDisplayWidth: OutParam, + aDisplayHeight: OutParam + ): void; + setMousewheelAutodir( + aElement: Element, + aEnabled: boolean, + aHonourRoot: boolean + ): void; setDisplayPortForElement( aXPx: float, aYPx: float, @@ -3047,7 +3219,11 @@ declare global { ): void; setResolutionAndScaleTo(aResolution: float): void; getResolution(): float; - setRestoreResolution(aResolution: float, aDisplayWidth: u32, aDisplayHeight: u32): void; + setRestoreResolution( + aResolution: float, + aDisplayWidth: u32, + aDisplayHeight: u32 + ): void; isFirstPaint: boolean; getPresShellId(): u32; isCORSSafelistedRequestHeader(name: string, value: string): boolean; @@ -3174,7 +3350,11 @@ declare global { aCallback?: nsISynthesizedEventCallback, aElement?: Element ): void; - sendNativeTouchpadDoubleTap(aScreenX: i32, aScreenY: i32, aModifierFlags: i32): void; + sendNativeTouchpadDoubleTap( + aScreenX: i32, + aScreenY: i32, + aModifierFlags: i32 + ): void; sendNativeTouchpadPan( aEventPhase: u32, aScreenX: i32, @@ -3231,25 +3411,56 @@ declare global { readonly isInputTaskManagerSuspended: boolean; suppressEventHandling(aSuppress: boolean): void; disableNonTestMouseEvents(aDisable: boolean): void; - getScrollXY(aFlushLayout: boolean, aScrollX: OutParam, aScrollY: OutParam): void; + getScrollXY( + aFlushLayout: boolean, + aScrollX: OutParam, + aScrollY: OutParam + ): void; getScrollXYFloat( aFlushLayout: boolean, aScrollX: OutParam, aScrollY: OutParam ): void; - getScrollbarSize(aFlushLayout: boolean, aWidth: OutParam, aHeight: OutParam): void; + getScrollbarSize( + aFlushLayout: boolean, + aWidth: OutParam, + aHeight: OutParam + ): void; getBoundsWithoutFlushing(aElement: Element): DOMRect; getWidgetOpaqueRegion(): DOMRect[]; - scrollToVisual(aOffsetX: float, aOffsetY: float, aUpdateType: i32, aScrollMode: i32): void; + scrollToVisual( + aOffsetX: float, + aOffsetY: float, + aUpdateType: i32, + aScrollMode: i32 + ): void; getVisualViewportOffsetRelativeToLayoutViewport( aOffsetX: OutParam, aOffsetY: OutParam ): void; - getVisualViewportOffset(aOffsetX: OutParam, aOffsetY: OutParam): void; - transformRectLayoutToVisual(aX: float, aY: float, aWidth: float, aHeight: float): DOMRect; - toScreenRectInCSSUnits(aX: float, aY: float, aWidth: float, aHeight: float): DOMRect; + getVisualViewportOffset( + aOffsetX: OutParam, + aOffsetY: OutParam + ): void; + transformRectLayoutToVisual( + aX: float, + aY: float, + aWidth: float, + aHeight: float + ): DOMRect; + toScreenRectInCSSUnits( + aX: float, + aY: float, + aWidth: float, + aHeight: float + ): DOMRect; toScreenRect(aX: float, aY: float, aWidth: float, aHeight: float): DOMRect; - toTopLevelWidgetRect(aX: float, aY: float, aWidth: float, aHeight: float): DOMRect; + toTopLevelWidgetRect( + aX: float, + aY: float, + aWidth: float, + aHeight: float + ): DOMRect; convertFromParentProcessWidgetToLocal( aX: float, aY: float, @@ -3265,7 +3476,10 @@ declare global { readonly inputContextURI: nsIURI; readonly inputContextOrigin: u32; readonly nodeObservedByIMEContentObserver: Node; - dispatchDOMEventViaPresShellForTesting(aTarget: Node, aEvent: Event): boolean; + dispatchDOMEventViaPresShellForTesting( + aTarget: Node, + aEvent: Event + ): boolean; dispatchEventToChromeOnly(aTarget: EventTarget, aEvent: Event): boolean; getClassName(aObject: any): string; sendContentCommandEvent( @@ -3288,7 +3502,11 @@ declare global { remoteFrameFullscreenReverted(): void; handleFullscreenRequests(): boolean; exitFullscreen(aDontRestoreViewSize?: boolean): void; - sendSelectionSetEvent(aOffset: u32, aLength: u32, aAdditionalFlags?: u32): boolean; + sendSelectionSetEvent( + aOffset: u32, + aLength: u32, + aAdditionalFlags?: u32 + ): boolean; selectAtPoint(aX: float, aY: float, aSelectBehavior: u32): boolean; getVisitedDependentComputedStyle( aElement: Element, @@ -3373,7 +3591,11 @@ declare global { allowScriptsToClose(): void; readonly isParentWindowMainWidgetVisible: boolean; isNodeDisabledForEvents(aNode: Node): boolean; - getOMTAStyle(aElement: Element, aProperty: string, aPseudoElement?: string): string; + getOMTAStyle( + aElement: Element, + aProperty: string, + aPseudoElement?: string + ): string; setHandlingUserInput(aHandlingInput: boolean): nsIJSRAIIHelper; isKeyboardEventUserActivity(aKeyboardEvent: Event): boolean; getContentAPZTestData(aElement?: Element): any; @@ -3540,7 +3762,8 @@ declare global { type NavigationType = nsIRemoteTab_NavigationType; } - interface nsIRemoteTab extends nsISupports, Enums { + interface nsIRemoteTab + extends nsISupports, Enums { renderLayers: boolean; readonly hasLayers: boolean; priorityHint: boolean; @@ -3630,9 +3853,15 @@ declare global { interface nsIServiceWorkerManager extends nsISupports { reloadRegistrationsForTest(): void; - registerForTest(aPrincipal: nsIPrincipal, aScope: string, aScriptURL: string): Promise; + registerForTest( + aPrincipal: nsIPrincipal, + aScope: string, + aScriptURL: string + ): Promise; registerForAddonPrincipal(aPrincipal: nsIPrincipal): Promise; - getRegistrationForAddonPrincipal(aPrincipal: nsIPrincipal): nsIServiceWorkerRegistrationInfo; + getRegistrationForAddonPrincipal( + aPrincipal: nsIPrincipal + ): nsIServiceWorkerRegistrationInfo; wakeForExtensionAPIEvent( aExtensionBaseURL: string, aAPINamespace: string, @@ -3655,7 +3884,11 @@ declare global { aCallback: nsIServiceWorkerUnregisterCallback, aScope: string ): void; - sendPushEvent(aOriginAttributes: string, aScope: string, aDataBytes?: u8[]): void; + sendPushEvent( + aOriginAttributes: string, + aScope: string, + aDataBytes?: u8[] + ): void; sendPushSubscriptionChangeEvent( aOriginAttributes: string, scope: string, @@ -3709,14 +3942,25 @@ declare global { setCaretInPendingComposition(aOffset: u32): void; flushPendingComposition(aKeyboardEvent?: Event, aKeyFlags?: u32): boolean; commitComposition(aKeyboardEvent?: Event, aKeyFlags?: u32): void; - commitCompositionWith(aCommitString: string, aKeyboardEvent?: Event, aKeyFlags?: u32): boolean; + commitCompositionWith( + aCommitString: string, + aKeyboardEvent?: Event, + aKeyFlags?: u32 + ): boolean; cancelComposition(aKeyboardEvent?: Event, aKeyFlags?: u32): void; keydown(aKeyboardEvent: Event, aKeyFlags?: u32): u32; keyup(aKeyboardEvent: Event, aKeyFlags?: u32): boolean; - insertTextWithKeyPress(aString: string, aKeyboardEvent?: Event, aKeyFlags?: u32): boolean; + insertTextWithKeyPress( + aString: string, + aKeyboardEvent?: Event, + aKeyFlags?: u32 + ): boolean; getModifierState(aModifierKey: string): boolean; shareModifierStateOf(aOther: nsITextInputProcessor): void; - computeCodeValueOfNonPrintableKey(aKeyValue: string, aLocation?: any): string; + computeCodeValueOfNonPrintableKey( + aKeyValue: string, + aLocation?: any + ): string; guessCodeValueOfPrintableKeyInUSEnglishKeyboardLayout( aKeyValue: string, aLocation?: any @@ -3869,11 +4113,22 @@ declare global { interface nsICredentialChooserService extends nsISupports { fetchImageToDataURI(window: mozIDOMWindow, uri: nsIURI): Promise; - fetchWellKnown(uri: nsIURI, triggeringPrincipal: nsIPrincipal): Promise; + fetchWellKnown( + uri: nsIURI, + triggeringPrincipal: nsIPrincipal + ): Promise; fetchConfig(uri: nsIURI, triggeringPrincipal: nsIPrincipal): Promise; fetchAccounts(uri: nsIURI, triggeringPrincipal: nsIPrincipal): Promise; - fetchToken(uri: nsIURI, body: string, triggeringPrincipal: nsIPrincipal): Promise; - fetchDisconnect(uri: nsIURI, body: string, triggeringPrincipal: nsIPrincipal): Promise; + fetchToken( + uri: nsIURI, + body: string, + triggeringPrincipal: nsIPrincipal + ): Promise; + fetchDisconnect( + uri: nsIURI, + body: string, + triggeringPrincipal: nsIPrincipal + ): Promise; } // https://searchfox.org/mozilla-central/source/toolkit/components/credentialmanagement/nsICredentialChosenCallback.idl @@ -3916,7 +4171,11 @@ declare global { registered: OutParam, allowLogout: OutParam ): void; - delete(rpPrincipal: nsIPrincipal, idpPrincipal: nsIPrincipal, credentialID: string): void; + delete( + rpPrincipal: nsIPrincipal, + idpPrincipal: nsIPrincipal, + credentialID: string + ): void; connected( rpPrincipal: nsIPrincipal, idpPrincipal: nsIPrincipal, @@ -4069,7 +4328,11 @@ declare global { }>; interface nsINotificationStorage extends nsISupports { - put(aOrigin: string, aEntry: nsINotificationStorageEntry, aScope: string): void; + put( + aOrigin: string, + aEntry: nsINotificationStorageEntry, + aScope: string + ): void; get( origin: string, scope: string, @@ -4362,14 +4625,24 @@ declare global { interface nsIPushNotifier extends nsISupports { notifyPush(scope: string, principal: nsIPrincipal, messageId: string): void; - notifyPushWithData(scope: string, principal: nsIPrincipal, messageId: string, data: u8[]): void; + notifyPushWithData( + scope: string, + principal: nsIPrincipal, + messageId: string, + data: u8[] + ): void; notifySubscriptionChange( scope: string, principal: nsIPrincipal, oldSubscription?: nsIPushSubscription ): void; notifySubscriptionModified(scope: string, principal: nsIPrincipal): void; - notifyError(scope: string, principal: nsIPrincipal, message: string, flags: u32): void; + notifyError( + scope: string, + principal: nsIPrincipal, + message: string, + flags: u32 + ): void; } interface nsIPushData extends nsISupports { @@ -4398,7 +4671,10 @@ declare global { } type nsIPushSubscriptionCallback = Callable<{ - onPushSubscription(status: nsresult, subscription: nsIPushSubscription): void; + onPushSubscription( + status: nsresult, + subscription: nsIPushSubscription + ): void; }>; type nsIUnsubscribeResultCallback = Callable<{ @@ -4413,7 +4689,11 @@ declare global { readonly pushTopic: string; readonly subscriptionChangeTopic: string; readonly subscriptionModifiedTopic: string; - subscribe(scope: string, principal: nsIPrincipal, callback: nsIPushSubscriptionCallback): void; + subscribe( + scope: string, + principal: nsIPrincipal, + callback: nsIPushSubscriptionCallback + ): void; subscribeWithKey( scope: string, principal: nsIPrincipal, @@ -4435,7 +4715,10 @@ declare global { originAttributesPattern: any, callback: nsIPushClearResultCallback ): void; - clearForPrincipal(principal: nsIPrincipal, callback: nsIPushClearResultCallback): void; + clearForPrincipal( + principal: nsIPrincipal, + callback: nsIPushClearResultCallback + ): void; } interface nsIPushQuotaManager extends nsISupports { @@ -4459,8 +4742,7 @@ declare global { } interface nsIQuotaArtificialFailure - extends nsISupports, - Enums {} + extends nsISupports, Enums {} // https://searchfox.org/mozilla-central/source/dom/quota/nsIQuotaCallbacks.idl @@ -4481,7 +4763,10 @@ declare global { temporaryStorageInitialized(): nsIQuotaRequest; temporaryGroupInitialized(aPrincipal: nsIPrincipal): nsIQuotaRequest; persistentOriginInitialized(aPrincipal: nsIPrincipal): nsIQuotaRequest; - temporaryOriginInitialized(aPersistenceType: string, aPrincipal: nsIPrincipal): nsIQuotaRequest; + temporaryOriginInitialized( + aPersistenceType: string, + aPrincipal: nsIPrincipal + ): nsIQuotaRequest; init(): nsIQuotaRequest; initializePersistentStorage(): nsIQuotaRequest; initTemporaryStorage(): nsIQuotaRequest; @@ -4493,15 +4778,24 @@ declare global { aPrincipal: nsIPrincipal, aCreateIfNonExistent?: boolean ): nsIQuotaRequest; - initializePersistentClient(aPrincipal: nsIPrincipal, aClientType: string): nsIQuotaRequest; + initializePersistentClient( + aPrincipal: nsIPrincipal, + aClientType: string + ): nsIQuotaRequest; initializeTemporaryClient( aPersistenceType: string, aPrincipal: nsIPrincipal, aClientType: string, aCreateIfNonExistent?: boolean ): nsIQuotaRequest; - getFullOriginMetadata(aPersistenceType: string, aPrincipal: nsIPrincipal): nsIQuotaRequest; - getUsage(aCallback: nsIQuotaUsageCallback, aGetAll?: boolean): nsIQuotaUsageRequest; + getFullOriginMetadata( + aPersistenceType: string, + aPrincipal: nsIPrincipal + ): nsIQuotaRequest; + getUsage( + aCallback: nsIQuotaUsageCallback, + aGetAll?: boolean + ): nsIQuotaUsageRequest; getUsageForPrincipal( aPrincipal: nsIPrincipal, aCallback: nsIQuotaUsageCallback @@ -4512,7 +4806,10 @@ declare global { clear(): nsIQuotaRequest; clearStoragesForPrivateBrowsing(): nsIQuotaRequest; clearStoragesForOriginAttributesPattern(aPattern: string): nsIQuotaRequest; - clearStoragesForPrincipal(aPrincipal: nsIPrincipal, aPersistenceType?: string): nsIQuotaRequest; + clearStoragesForPrincipal( + aPrincipal: nsIPrincipal, + aPersistenceType?: string + ): nsIQuotaRequest; clearStoragesForClient( aPrincipal: nsIPrincipal, aClientType: string, @@ -4523,7 +4820,10 @@ declare global { aPersistenceType?: string ): nsIQuotaRequest; reset(): nsIQuotaRequest; - resetStoragesForPrincipal(aPrincipal: nsIPrincipal, aPersistenceType?: string): nsIQuotaRequest; + resetStoragesForPrincipal( + aPrincipal: nsIPrincipal, + aPersistenceType?: string + ): nsIQuotaRequest; resetStoragesForClient( aPrincipal: nsIPrincipal, aClientType: string, @@ -4661,7 +4961,8 @@ declare global { } interface nsIContentSecurityPolicy - extends nsISerializable, + extends + nsISerializable, Enums< typeof nsIContentSecurityPolicy_CSPDirective & typeof nsIContentSecurityPolicy_RequireTrustedTypesForDirectiveState @@ -4674,7 +4975,11 @@ declare global { readonly upgradeInsecureRequests: boolean; readonly blockAllMixedContent: boolean; readonly enforcesFrameAncestors: boolean; - appendPolicy(policyString: string, reportOnly: boolean, deliveredViaMetaTag: boolean): void; + appendPolicy( + policyString: string, + reportOnly: boolean, + deliveredViaMetaTag: boolean + ): void; readonly requireTrustedTypesForDirectiveState: nsIContentSecurityPolicy.RequireTrustedTypesForDirectiveState; getAllowsInline( aDirective: nsIContentSecurityPolicy.CSPDirective, @@ -4764,8 +5069,7 @@ declare global { } interface nsIReferrerInfo - extends nsISerializable, - Enums { + extends nsISerializable, Enums { readonly originalReferrer: nsIURI; readonly referrerPolicy: nsIReferrerInfo.ReferrerPolicyIDL; getReferrerPolicyString(): string; @@ -4897,7 +5201,10 @@ declare global { // https://searchfox.org/mozilla-central/source/dom/interfaces/storage/nsIDOMStorageManager.idl interface nsIDOMStorageManager extends nsISupports { - precacheStorage(aPrincipal: nsIPrincipal, aStoragePrincipal: nsIPrincipal): Storage; + precacheStorage( + aPrincipal: nsIPrincipal, + aStoragePrincipal: nsIPrincipal + ): Storage; createStorage( aWindow: mozIDOMWindow, aPrincipal: nsIPrincipal, @@ -4937,7 +5244,10 @@ declare global { readonly PERMISSION_STATE_DENIED?: 2; readonly PERMISSION_STATE_AUTHORIZED?: 3; - getMediaCapturePermissionState(aVideo: OutParam, aAudio: OutParam): void; + getMediaCapturePermissionState( + aVideo: OutParam, + aAudio: OutParam + ): void; getAudioCapturePermissionState(aAudio: OutParam): void; getVideoCapturePermissionState(aVideo: OutParam): void; getScreenCapturePermissionState(aScreen: OutParam): void; @@ -5032,7 +5342,12 @@ declare global { dispatchPause(aElapsedTime: float, aCharIndex: u32): void; dispatchResume(aElapsedTime: float, aCharIndex: u32): void; dispatchError(aElapsedTime: float, aCharIndex: u32): void; - dispatchBoundary(aName: string, aElapsedTime: float, aCharIndex: u32, aCharLength?: u32): void; + dispatchBoundary( + aName: string, + aElapsedTime: float, + aCharIndex: u32, + aCharLength?: u32 + ): void; dispatchMark(aName: string, aElapsedTime: float, aCharIndex: u32): void; } @@ -5131,7 +5446,12 @@ declare global { // https://searchfox.org/mozilla-central/source/dom/xslt/xslt/txIEXSLTFunctions.idl interface txIEXSLTFunctions extends nsISupports { - match(str: string, regex: string, flags: string, doc: Document): DocumentFragment; + match( + str: string, + regex: string, + flags: string, + doc: Document + ): DocumentFragment; replace(str: string, regex: string, flags: string, replace: string): string; test(str: string, regex: string, flags: string): boolean; } @@ -5272,7 +5592,12 @@ declare global { interface nsIEditActionListener extends nsISupports { DidDeleteNode(aChild: Node, aResult: nsresult): void; - DidInsertText(aTextNode: CharacterData, aOffset: i32, aString: string, aResult: nsresult): void; + DidInsertText( + aTextNode: CharacterData, + aOffset: i32, + aString: string, + aResult: nsresult + ): void; WillDeleteText(aTextNode: CharacterData, aOffset: i32, aLength: i32): void; WillDeleteRanges(aRangesToDelete: Range[]): void; } @@ -5354,10 +5679,19 @@ declare global { selectAll(): void; beginningOfDocument(): void; endOfDocument(): void; - setAttribute(aElement: Element, attributestr: string, attvalue: string): void; + setAttribute( + aElement: Element, + attributestr: string, + attvalue: string + ): void; removeAttribute(aElement: Element, aAttribute: string): void; cloneAttributes(aDestElement: Element, aSourceElement: Element): void; - insertNode(node: Node, parent: Node, aPosition: u32, aPreserveSelection?: boolean): void; + insertNode( + node: Node, + parent: Node, + aPosition: u32, + aPreserveSelection?: boolean + ): void; deleteNode(child: Node, aPreserveSelection?: boolean): void; outputToString(formatType: string, flags: u32): string; addEditActionListener(listener: nsIEditActionListener): void; @@ -5381,7 +5715,11 @@ declare global { // https://searchfox.org/mozilla-central/source/editor/nsIEditorMailSupport.idl interface nsIEditorMailSupport extends nsISupports { - insertAsCitedQuotation(aQuotedText: string, aCitation: string, aInsertHTML: boolean): Node; + insertAsCitedQuotation( + aQuotedText: string, + aCitation: string, + aInsertHTML: boolean + ): Node; rewrap(aRespectNewlines: boolean): void; insertTextWithQuotations(aStringToInsert: string): void; wrapWidth: i32; @@ -5403,7 +5741,11 @@ declare global { GetSuggestedWord(): string; CheckCurrentWord(suggestedWord: string): boolean; suggest(aCheckingWorkd: string, aMaxCount: u32): Promise; - ReplaceWord(misspelledWord: string, replaceWord: string, allOccurrences: boolean): void; + ReplaceWord( + misspelledWord: string, + replaceWord: string, + allOccurrences: boolean + ): void; IgnoreWordAllOccurrences(word: string): void; AddWordToDictionary(word: string): void; RemoveWordFromDictionary(word: string): void; @@ -5436,7 +5778,11 @@ declare global { readonly eRight?: 2; readonly eJustify?: 3; - setInlineProperty(aProperty: string, aAttribute: string, aValue: string): void; + setInlineProperty( + aProperty: string, + aAttribute: string, + aValue: string + ): void; getInlinePropertyWithAttrValue( aProperty: string, aAttribute: string, @@ -5448,7 +5794,10 @@ declare global { removeInlineProperty(aProperty: string, aAttribute: string): void; nodeIsBlock(aNode: Node): boolean; insertHTML(aInputString: string): void; - insertElementAtSelection(aElement: Element, aDeleteSelection: boolean): void; + insertElementAtSelection( + aElement: Element, + aDeleteSelection: boolean + ): void; updateBaseURL(): void; selectElement(aElement: Element): void; getParagraphState(aMixed: OutParam): string; @@ -5467,7 +5816,11 @@ declare global { aDD: OutParam ): void; getAlignment(aMixed: OutParam, aAlign: OutParam): void; - makeOrChangeList(aListType: string, entireList: boolean, aBulletType: string): void; + makeOrChangeList( + aListType: string, + entireList: boolean, + aBulletType: string + ): void; removeList(aListType: string): void; getElementOrParentByTagName(aTagName: string, aNode: Node): Element; getSelectedElement(aTagName: string): nsISupports; @@ -5511,9 +5864,18 @@ declare global { readonly ePreviousColumn?: 1; readonly ePreviousRow?: 2; - insertTableCell(aNumberOfColumnsToInsert: i32, aInsertAfterSelectedCell: boolean): void; - insertTableColumn(aNumberOfColumnsToInsert: i32, aInsertAfterSelectedCell: boolean): void; - insertTableRow(aNumberOfRowsToInsert: i32, aInsertAfterSelectedCell: boolean): void; + insertTableCell( + aNumberOfColumnsToInsert: i32, + aInsertAfterSelectedCell: boolean + ): void; + insertTableColumn( + aNumberOfColumnsToInsert: i32, + aInsertAfterSelectedCell: boolean + ): void; + insertTableRow( + aNumberOfRowsToInsert: i32, + aInsertAfterSelectedCell: boolean + ): void; deleteTable(): void; deleteTableCellContents(): void; deleteTableCell(aNumberOfCellsToDelete: i32): void; @@ -5538,7 +5900,11 @@ declare global { aRowCount: OutParam, aColCount: OutParam ): void; - getCellAt(aTableElement: Element, aRowIndex: i32, aColumnIndex: i32): Element; + getCellAt( + aTableElement: Element, + aRowIndex: i32, + aColumnIndex: i32 + ): Element; getCellDataAt( aTableElement: Element, aRowIndex: i32, @@ -5553,9 +5919,15 @@ declare global { aIsSelected: OutParam ): void; getFirstRow(aTableElement: Element): Element; - getSelectedOrParentTableElement(aTagName: OutParam, aCount: OutParam): Element; + getSelectedOrParentTableElement( + aTagName: OutParam, + aCount: OutParam + ): Element; getSelectedCellsType(aElement: Element): u32; - getFirstSelectedCellInTable(aRowIndex: OutParam, aColIndex: OutParam): Element; + getFirstSelectedCellInTable( + aRowIndex: OutParam, + aColIndex: OutParam + ): Element; getSelectedCells(): Element[]; } @@ -5628,7 +6000,10 @@ declare global { aForceSave: boolean, aWindowContext?: nsIInterfaceRequestor ): nsIStreamListener; - applyDecodingForExtension(aExtension: string, aEncodingType: string): boolean; + applyDecodingForExtension( + aExtension: string, + aEncodingType: string + ): boolean; getPreferredDownloadsDirectory(): nsIFile; } @@ -5664,7 +6039,10 @@ declare global { aProtocolScheme: string, aFound: OutParam ): nsIHandlerInfo; - setProtocolHandlerDefaults(aHandlerInfo: nsIHandlerInfo, aOSHandlerExists: boolean): void; + setProtocolHandlerDefaults( + aHandlerInfo: nsIHandlerInfo, + aOSHandlerExists: boolean + ): void; loadURI( aURI: nsIURI, aTriggeringPrincipal?: nsIPrincipal, @@ -5734,7 +6112,12 @@ declare global { readonly FIND_PENDING?: 3; init(aDocShell: nsIDocShell): void; - find(aSearchString: string, aLinksOnly: boolean, aMode: u32, aDontIterateFrames: boolean): u16; + find( + aSearchString: string, + aLinksOnly: boolean, + aMode: u32, + aDontIterateFrames: boolean + ): u16; getFoundRange(): Range; setDocShell(aDocShell: nsIDocShell): void; setSelectionModeAndRepaint(toggle: i16): void; @@ -5762,7 +6145,11 @@ declare global { setLogPings(aEnableLogPings: boolean): void; setTagPings(aDebugTag: string): void; sendPing(aPingName: string): void; - setExperimentActive(aExperimentId: string, aBranch: string, aExtra?: any): void; + setExperimentActive( + aExperimentId: string, + aBranch: string, + aExtra?: any + ): void; setExperimentInactive(aExperimentId: string): void; testGetExperimentData(aExperimentId: string): any; applyServerKnobsConfig(aJsonConfig: string): void; @@ -5903,8 +6290,16 @@ declare global { ): void; HandleCharacterData(aData: string, aLength: u32): void; HandleProcessingInstruction(aTarget: string, aData: string): void; - HandleXMLDeclaration(aVersion: string, aEncoding: string, aStandalone: i32): void; - ReportError(aErrorText: string, aSourceText: string, aError: nsIScriptError): boolean; + HandleXMLDeclaration( + aVersion: string, + aEncoding: string, + aStandalone: i32 + ): void; + ReportError( + aErrorText: string, + aSourceText: string, + aError: nsIScriptError + ): boolean; } // https://searchfox.org/mozilla-central/source/netwerk/base/http-sfv/nsIStructuredFieldValues.idl @@ -6005,7 +6400,10 @@ declare global { interface imgICache extends nsISupports { clearCache(chrome?: any): void; removeEntriesFromPrincipalInAllProcesses(aPrincipal: nsIPrincipal): void; - removeEntriesFromSiteInAllProcesses(aBaseDomain: string, OriginAttributesPattern: any): void; + removeEntriesFromSiteInAllProcesses( + aBaseDomain: string, + OriginAttributesPattern: any + ): void; findEntryProperties(uri: nsIURI, doc?: Document): nsIProperties; respectPrivacyNotifications(): void; } @@ -6024,7 +6422,8 @@ declare global { type DecodeResult = imgIContainer_DecodeResult; } - interface imgIContainer extends nsISupports, Enums { + interface imgIContainer + extends nsISupports, Enums { readonly TYPE_RASTER?: 0; readonly TYPE_VECTOR?: 1; readonly TYPE_REQUEST?: 2; @@ -6088,7 +6487,12 @@ declare global { outputOptions: string, randomizationKey: string ): void; - startImageEncode(width: u32, height: u32, inputFormat: u32, outputOptions: string): void; + startImageEncode( + width: u32, + height: u32, + inputFormat: u32, + outputOptions: string + ): void; addImageFrame( data: u8[], length: u32, @@ -6200,8 +6604,15 @@ declare global { // https://searchfox.org/mozilla-central/source/image/imgITools.idl interface imgITools extends nsISupports { - decodeImageFromBuffer(aBuffer: string, aSize: u32, aMimeType: string): imgIContainer; - decodeImageFromArrayBuffer(aArrayBuffer: any, aMimeType: string): imgIContainer; + decodeImageFromBuffer( + aBuffer: string, + aSize: u32, + aMimeType: string + ): imgIContainer; + decodeImageFromArrayBuffer( + aArrayBuffer: any, + aMimeType: string + ): imgIContainer; decodeImageFromChannelAsync( aURI: nsIURI, aChannel: nsIChannel, @@ -6237,7 +6648,9 @@ declare global { aHeight: i32, outputOptions?: string ): nsIInputStream; - createScriptedObserver(aObserver: imgIScriptedNotificationObserver): imgINotificationObserver; + createScriptedObserver( + aObserver: imgIScriptedNotificationObserver + ): imgINotificationObserver; } type imgIContainerCallback = Callable<{ @@ -6368,9 +6781,12 @@ declare global { } interface nsIKeyValueService - extends nsISupports, - Enums { - getOrCreate(callback: nsIKeyValueDatabaseCallback, path: string, name: string): void; + extends nsISupports, Enums { + getOrCreate( + callback: nsIKeyValueDatabaseCallback, + path: string, + name: string + ): void; getOrCreateWithOptions( callback: nsIKeyValueDatabaseCallback, path: string, @@ -6405,8 +6821,12 @@ declare global { } interface nsIKeyValueImporter - extends nsIKeyValueImportSourceSpec, - Enums { + extends + nsIKeyValueImportSourceSpec, + Enums< + typeof nsIKeyValueImporter_ConflictPolicy & + typeof nsIKeyValueImporter_CleanupPolicy + > { readonly type: string; addPath(path: string): nsIKeyValueImportSourceSpec; import(callback: nsIKeyValueVoidCallback): void; @@ -6425,14 +6845,33 @@ declare global { isEmpty(callback: nsIKeyValueVariantCallback): void; count(callback: nsIKeyValueVariantCallback): void; size(callback: nsIKeyValueVariantCallback): void; - put(callback: nsIKeyValueVoidCallback, key: string, value: nsIVariant): void; - writeMany(callback: nsIKeyValueVoidCallback, pairs: nsIKeyValuePair[]): void; - get(callback: nsIKeyValueVariantCallback, key: string, defaultValue?: nsIVariant): void; + put( + callback: nsIKeyValueVoidCallback, + key: string, + value: nsIVariant + ): void; + writeMany( + callback: nsIKeyValueVoidCallback, + pairs: nsIKeyValuePair[] + ): void; + get( + callback: nsIKeyValueVariantCallback, + key: string, + defaultValue?: nsIVariant + ): void; has(callback: nsIKeyValueVariantCallback, key: string): void; delete(callback: nsIKeyValueVoidCallback, key: string): void; - deleteRange(callback: nsIKeyValueVoidCallback, fromKey?: string, toKey?: string): void; + deleteRange( + callback: nsIKeyValueVoidCallback, + fromKey?: string, + toKey?: string + ): void; clear(callback: nsIKeyValueVoidCallback): void; - enumerate(callback: nsIKeyValueEnumeratorCallback, fromKey?: string, toKey?: string): void; + enumerate( + callback: nsIKeyValueEnumeratorCallback, + fromKey?: string, + toKey?: string + ): void; close(callback: nsIKeyValueVoidCallback): void; } @@ -6622,7 +7061,11 @@ declare global { readonly systemLocales: string[]; readonly regionalPrefsLocales: string[]; readonly systemLocale: string; - getDateTimePattern(timeFormatStyle: i32, dateFormatStyle: i32, locale?: string): string; + getDateTimePattern( + timeFormatStyle: i32, + dateFormatStyle: i32, + locale?: string + ): string; } // https://searchfox.org/mozilla-central/source/toolkit/components/passwordmgr/nsILoginInfo.idl @@ -6681,8 +7124,16 @@ declare global { getAllDisabledHosts(): string[]; getLoginSavingEnabled(aHost: string): boolean; setLoginSavingEnabled(aHost: string, isEnabled: boolean): void; - findLogins(aOrigin: string, aActionOrigin: string, aHttpRealm: string): nsILoginInfo[]; - countLogins(aOrigin: string, aActionOrigin: string, aHttpRealm: string): u32; + findLogins( + aOrigin: string, + aActionOrigin: string, + aHttpRealm: string + ): nsILoginInfo[]; + countLogins( + aOrigin: string, + aActionOrigin: string, + aHttpRealm: string + ): u32; searchLoginsAsync(matchData: any): Promise; searchLogins(matchData: nsIPropertyBag): nsILoginInfo[]; getSyncID(): Promise; @@ -6880,7 +7331,11 @@ declare global { aOriginalURI: nsIURI, aFlags: u32 ): string; - validateFileNameForSaving(aFileName: string, aType: string, aFlags: u32): string; + validateFileNameForSaving( + aFileName: string, + aType: string, + aFlags: u32 + ): string; } // https://searchfox.org/mozilla-central/source/toolkit/components/ml/nsIMLUtils.idl @@ -6899,7 +7354,12 @@ declare global { caseSensitive: boolean; entireWord: boolean; matchDiacritics: boolean; - Find(aPatText: string, aSearchRange: Range, aStartPoint: Range, aEndPoint: Range): Range; + Find( + aPatText: string, + aSearchRange: Range, + aStartPoint: Range, + aEndPoint: Range + ): Range; } // https://searchfox.org/mozilla-central/source/toolkit/components/find/nsIFindService.idl @@ -7000,7 +7460,10 @@ declare global { aCloseSource: boolean, aCloseSink: boolean ): void; - asyncCopy(aObserver: nsIRequestObserver, aObserverContext: nsISupports): void; + asyncCopy( + aObserver: nsIRequestObserver, + aObserverContext: nsISupports + ): void; } // https://searchfox.org/mozilla-central/source/netwerk/base/nsIAsyncStreamCopier2.idl @@ -7014,7 +7477,10 @@ declare global { aCloseSource: boolean, aCloseSink: boolean ): void; - asyncCopy(aObserver: nsIRequestObserver, aObserverContext: nsISupports): void; + asyncCopy( + aObserver: nsIRequestObserver, + aObserverContext: nsISupports + ): void; } // https://searchfox.org/mozilla-central/source/netwerk/base/nsIAsyncVerifyRedirectCallback.idl @@ -7097,7 +7563,11 @@ declare global { readonly LEVEL_PW_ENCRYPTED?: 1; readonly LEVEL_SECURE?: 2; - promptAuth(aChannel: nsIChannel, level: u32, authInfo: nsIAuthInformation): boolean; + promptAuth( + aChannel: nsIChannel, + level: u32, + authInfo: nsIAuthInformation + ): boolean; asyncPromptAuth( aChannel: nsIChannel, aCallback: nsIAuthPromptCallback, @@ -7200,7 +7670,8 @@ declare global { } interface nsICacheInfoChannel - extends nsISupports, + extends + nsISupports, Enums< typeof nsICacheInfoChannel_PreferredAlternativeDataDeliveryType & typeof nsICacheInfoChannel_CacheDisposition @@ -7222,7 +7693,10 @@ declare global { readonly alternativeDataType: string; readonly alternativeDataInputStream: nsIInputStream; getOriginalInputStream(aReceiver: nsIInputStreamReceiver): void; - openAlternativeOutputStream(type: string, predictedSize: i64): nsIAsyncOutputStream; + openAlternativeOutputStream( + type: string, + predictedSize: i64 + ): nsIAsyncOutputStream; getCacheDisposition(): nsICacheInfoChannel.CacheDisposition; } @@ -7343,7 +7817,8 @@ declare global { type FetchPriority = nsIClassOfService_FetchPriority; } - interface nsIClassOfService extends nsISupports, Enums { + interface nsIClassOfService + extends nsISupports, Enums { readonly Leader?: 1; readonly Follower?: 2; readonly Speculative?: 4; @@ -7395,7 +7870,8 @@ declare global { } interface nsIClassifiedChannel - extends nsISupports, + extends + nsISupports, Enums { setMatchedInfo(aList: string, aProvider: string, aFullHash: string): void; readonly matchedList: string; @@ -7414,7 +7890,11 @@ declare global { // https://searchfox.org/mozilla-central/source/netwerk/base/nsIContentSniffer.idl interface nsIContentSniffer extends nsISupports { - getMIMETypeFromContent(aRequest: nsIRequest, aData: u8[], aLength: u32): string; + getMIMETypeFromContent( + aRequest: nsIRequest, + aData: u8[], + aLength: u32 + ): string; } // https://searchfox.org/mozilla-central/source/netwerk/base/nsIDHCPClient.idl @@ -7514,7 +7994,10 @@ declare global { } interface nsIAsyncFileMetadata extends nsIFileMetadata { - asyncFileMetadataWait(aCallback: nsIFileMetadataCallback, aEventTarget: nsIEventTarget): void; + asyncFileMetadataWait( + aCallback: nsIFileMetadataCallback, + aEventTarget: nsIEventTarget + ): void; } type nsIFileMetadataCallback = Callable<{ @@ -7555,7 +8038,10 @@ declare global { aSecurityFlags: u32, aContentPolicyType: nsContentPolicyType ): nsIChannel; - newChannelFromURIWithLoadInfo(aURI: nsIURI, aLoadInfo: nsILoadInfo): nsIChannel; + newChannelFromURIWithLoadInfo( + aURI: nsIURI, + aLoadInfo: nsILoadInfo + ): nsIChannel; newChannel( aSpec: string, aOriginCharset: string, @@ -7566,7 +8052,9 @@ declare global { aSecurityFlags: u32, aContentPolicyType: nsContentPolicyType ): nsIChannel; - newSuspendableChannelWrapper(innerChannel: nsIChannel): nsISuspendableChannelWrapper; + newSuspendableChannelWrapper( + innerChannel: nsIChannel + ): nsISuspendableChannelWrapper; newWebTransport(): nsIWebTransport; originAttributesForNetworkState(aChannel: nsIChannel): any; offline: boolean; @@ -7689,7 +8177,10 @@ declare global { readonly private: nsILoadContextInfo; readonly anonymous: nsILoadContextInfo; custom(aAnonymous: boolean, aOriginAttributes: any): nsILoadContextInfo; - fromLoadContext(aLoadContext: nsILoadContext, aAnonymous: boolean): nsILoadContextInfo; + fromLoadContext( + aLoadContext: nsILoadContext, + aAnonymous: boolean + ): nsILoadContextInfo; fromWindow(aWindow: nsIDOMWindow, aAnonymous: boolean): nsILoadContextInfo; } @@ -7699,7 +8190,11 @@ declare global { groupObserver: nsIRequestObserver; defaultLoadRequest: nsIRequest; addRequest(aRequest: nsIRequest, aContext: nsISupports): void; - removeRequest(aRequest: nsIRequest, aContext: nsISupports, aStatus: nsresult): void; + removeRequest( + aRequest: nsIRequest, + aContext: nsISupports, + aStatus: nsresult + ): void; readonly requests: nsISimpleEnumerator; totalKeepAliveBytes: u64; readonly activeCount: u32; @@ -7785,7 +8280,8 @@ declare global { } interface nsILoadInfo - extends nsISupports, + extends + nsISupports, Enums< typeof nsILoadInfo_StoragePermissionState & typeof nsILoadInfo_IPAddressSpace & @@ -7931,7 +8427,10 @@ declare global { originAttributes: any; initialSecurityCheckDone: boolean; loadTriggeredFromExternal: boolean; - appendRedirectHistoryEntry(channelToDeriveFrom: nsIChannel, isInternalRedirect: boolean): void; + appendRedirectHistoryEntry( + channelToDeriveFrom: nsIChannel, + isInternalRedirect: boolean + ): void; readonly redirectChainIncludingInternalRedirects: any; readonly redirectChain: any; readonly forcePreflight: boolean; @@ -8089,7 +8588,8 @@ declare global { } interface nsINetworkConnectivityService - extends nsISupports, + extends + nsISupports, Enums { DNSv4: nsINetworkConnectivityService.ConnectivityState; DNSv6: nsINetworkConnectivityService.ConnectivityState; @@ -8265,7 +8765,11 @@ declare global { type: string, permission: u32 ): void; - addDefaultFromPrincipal(principal: nsIPrincipal, type: string, permission: u32): void; + addDefaultFromPrincipal( + principal: nsIPrincipal, + type: string, + permission: u32 + ): void; removeFromPrincipal(principal: nsIPrincipal, type: string): void; removePermission(perm: nsIPermission): void; removeAll(): void; @@ -8273,11 +8777,21 @@ declare global { removeByType(type: string): void; removeAllExceptTypes(typeExceptions: string[]): void; removeByTypeSince(type: string, since: i64): void; - removeAllSinceWithTypeExceptions(since: i64, typeExceptions: string[]): void; + removeAllSinceWithTypeExceptions( + since: i64, + typeExceptions: string[] + ): void; testPermissionFromPrincipal(principal: nsIPrincipal, type: string): u32; - testExactPermissionFromPrincipal(principal: nsIPrincipal, type: string): u32; + testExactPermissionFromPrincipal( + principal: nsIPrincipal, + type: string + ): u32; testExactPermanentPermission(principal: nsIPrincipal, type: string): u32; - getPermissionObject(principal: nsIPrincipal, type: string, exactHost: boolean): nsIPermission; + getPermissionObject( + principal: nsIPrincipal, + type: string, + exactHost: boolean + ): nsIPermission; readonly all: nsIPermission[]; removePermissionsWithAttributes( patternAsJSON: string, @@ -8360,7 +8874,11 @@ declare global { checkMsg: string, checkValue: InOutParam ): boolean; - promptPassword(dialogTitle: string, text: string, password: InOutParam): boolean; + promptPassword( + dialogTitle: string, + text: string, + password: InOutParam + ): boolean; promptUsernameAndPassword( dialogTitle: string, text: string, @@ -8432,7 +8950,11 @@ declare global { } interface nsIProtocolProxyFilter extends nsISupports { - applyFilter(aURI: nsIURI, aProxy: nsIProxyInfo, aCallback: nsIProxyProtocolFilterResult): void; + applyFilter( + aURI: nsIURI, + aProxy: nsIProxyInfo, + aCallback: nsIProxyProtocolFilterResult + ): void; } interface nsIProtocolProxyChannelFilter extends nsISupports { @@ -8498,9 +9020,16 @@ declare global { aFailoverTimeout: u32, aFailoverProxy: nsIProxyInfo ): nsIProxyInfo; - getFailoverForProxy(aProxyInfo: nsIProxyInfo, aURI: nsIURI, aReason: nsresult): nsIProxyInfo; + getFailoverForProxy( + aProxyInfo: nsIProxyInfo, + aURI: nsIURI, + aReason: nsresult + ): nsIProxyInfo; registerFilter(aFilter: nsIProtocolProxyFilter, aPosition: u32): void; - registerChannelFilter(aFilter: nsIProtocolProxyChannelFilter, aPosition: u32): void; + registerChannelFilter( + aFilter: nsIProtocolProxyChannelFilter, + aPosition: u32 + ): void; unregisterFilter(aFilter: nsIProtocolProxyFilter): void; unregisterChannelFilter(aFilter: nsIProtocolProxyChannelFilter): void; readonly hasProxyFilterRegistered: boolean; @@ -8702,7 +9231,11 @@ declare global { init(aPort: i32, aLoopbackOnly: boolean, aBackLog: i32): void; initIPv6(aPort: i32, aLoopbackOnly: boolean, aBackLog: i32): void; initDualStack(aPort: i32, aBackLog: i32): void; - initSpecialConnection(aPort: i32, aFlags: nsServerSocketFlag, aBackLog: i32): void; + initSpecialConnection( + aPort: i32, + aFlags: nsServerSocketFlag, + aBackLog: i32 + ): void; initWithFilename(aPath: nsIFile, aPermissions: u32, aBacklog: i32): void; initWithAbstractAddress(aName: string, aBacklog: i32): void; close(): void; @@ -8711,7 +9244,10 @@ declare global { } interface nsIServerSocketListener extends nsISupports { - onSocketAccepted(aServ: nsIServerSocket, aTransport: nsISocketTransport): void; + onSocketAccepted( + aServ: nsIServerSocket, + aTransport: nsISocketTransport + ): void; onStopListening(aServ: nsIServerSocket, aStatus: nsresult): void; } @@ -8894,7 +9430,10 @@ declare global { } interface nsIStreamLoader extends nsIThreadRetargetableStreamListener { - init(aStreamObserver: nsIStreamLoaderObserver, aRequestObserver?: nsIRequestObserver): void; + init( + aStreamObserver: nsIStreamLoaderObserver, + aRequestObserver?: nsIRequestObserver + ): void; readonly numBytesRead: u32; readonly request: nsIRequest; } @@ -8902,7 +9441,10 @@ declare global { // https://searchfox.org/mozilla-central/source/netwerk/base/nsIStreamTransportService.idl interface nsIStreamTransportService extends nsISupports { - createInputTransport(aStream: nsIInputStream, aCloseWhenDone: boolean): nsITransport; + createInputTransport( + aStream: nsIInputStream, + aCloseWhenDone: boolean + ): nsITransport; } // https://searchfox.org/mozilla-central/source/netwerk/base/nsISuspendableChannelWrapper.idl @@ -8920,9 +9462,19 @@ declare global { interface nsISystemProxySettings extends nsISupports { readonly mainThreadOnly: boolean; readonly PACURI: string; - getProxyForURI(testSpec: string, testScheme: string, testHost: string, testPort: i32): string; + getProxyForURI( + testSpec: string, + testScheme: string, + testHost: string, + testPort: i32 + ): string; readonly systemWPADSetting: boolean; - setSystemProxyInfo(host: string, port: i32, pacFileUrl: string, exclusionList: string[]): void; + setSystemProxyInfo( + host: string, + port: i32, + pacFileUrl: string, + exclusionList: string[] + ): void; } // https://searchfox.org/mozilla-central/source/netwerk/base/nsITLSServerSocket.idl @@ -8962,7 +9514,10 @@ declare global { } interface nsITLSServerSecurityObserver extends nsISupports { - onHandshakeDone(aServer: nsITLSServerSocket, aStatus: nsITLSClientStatus): void; + onHandshakeDone( + aServer: nsITLSServerSocket, + aStatus: nsITLSClientStatus + ): void; } // https://searchfox.org/mozilla-central/source/netwerk/base/nsIThreadRetargetableRequest.idl @@ -9008,7 +9563,8 @@ declare global { type BodyInfoAccess = nsITimedChannel_BodyInfoAccess; } - interface nsITimedChannel extends nsISupports, Enums { + interface nsITimedChannel + extends nsISupports, Enums { redirectCount: u8; internalRedirectCount: u8; initiatorType: string; @@ -9054,10 +9610,21 @@ declare global { readonly STATUS_READING?: 4915208; readonly STATUS_WRITING?: 4915209; - openInputStream(aFlags: u32, aSegmentSize: u32, aSegmentCount: u32): nsIInputStream; - openOutputStream(aFlags: u32, aSegmentSize: u32, aSegmentCount: u32): nsIOutputStream; + openInputStream( + aFlags: u32, + aSegmentSize: u32, + aSegmentCount: u32 + ): nsIInputStream; + openOutputStream( + aFlags: u32, + aSegmentSize: u32, + aSegmentCount: u32 + ): nsIOutputStream; close(aReason: nsresult): void; - setEventSink(aSink: nsITransportEventSink, aEventTarget: nsIEventTarget): void; + setEventSink( + aSink: nsITransportEventSink, + aEventTarget: nsIEventTarget + ): void; } interface nsITransportEventSink extends nsISupports { @@ -9078,7 +9645,12 @@ declare global { aPrincipal: nsIPrincipal, aAddressReuse?: boolean ): void; - init2(aAddr: string, aPort: i32, aPrincipal: nsIPrincipal, aAddressReuse?: boolean): void; + init2( + aAddr: string, + aPort: i32, + aPrincipal: nsIPrincipal, + aAddressReuse?: boolean + ): void; close(): void; asyncListen(aListener: nsIUDPSocketListener): void; readonly localAddr: nsINetAddr; @@ -9257,7 +9829,11 @@ declare global { // https://searchfox.org/mozilla-central/source/netwerk/base/nsIUploadChannel.idl interface nsIUploadChannel extends nsISupports { - setUploadStream(aStream: nsIInputStream, aContentType: string, aContentLength: i64): void; + setUploadStream( + aStream: nsIInputStream, + aContentType: string, + aContentLength: i64 + ): void; readonly uploadStream: nsIInputStream; } @@ -9353,7 +9929,10 @@ declare global { readonly dataSize: i64; readonly altDataSize: i64; readonly altDataType: string; - openAlternativeOutputStream(type: string, predictedSize: i64): nsIAsyncOutputStream; + openAlternativeOutputStream( + type: string, + predictedSize: i64 + ): nsIAsyncOutputStream; openAlternativeInputStream(type: string): nsIInputStream; readonly loadContextInfo: nsILoadContextInfo; setBypassWriterLock(aBypass: boolean): void; @@ -9378,7 +9957,11 @@ declare global { readonly ENTRY_NOT_WANTED?: 3; onCacheEntryCheck(aEntry: nsICacheEntry): u32; - onCacheEntryAvailable(aEntry: nsICacheEntry, aNew: boolean, aResult: nsresult): void; + onCacheEntryAvailable( + aEntry: nsICacheEntry, + aNew: boolean, + aResult: nsresult + ): void; } // https://searchfox.org/mozilla-central/source/netwerk/cache2/nsICachePurgeLock.idl @@ -9423,9 +10006,16 @@ declare global { aHasAltData: OutParam, aSizeInKB: OutParam ): void; - asyncDoomURI(aURI: nsIURI, aIdExtension: string, aCallback: nsICacheEntryDoomCallback): void; + asyncDoomURI( + aURI: nsIURI, + aIdExtension: string, + aCallback: nsICacheEntryDoomCallback + ): void; asyncEvictStorage(aCallback: nsICacheEntryDoomCallback): void; - asyncVisitStorage(aVisitor: nsICacheStorageVisitor, aVisitEntries: boolean): void; + asyncVisitStorage( + aVisitor: nsICacheStorageVisitor, + aVisitEntries: boolean + ): void; } // https://searchfox.org/mozilla-central/source/netwerk/cache2/nsICacheStorageService.idl @@ -9446,8 +10036,13 @@ declare global { clearAllOriginDictionaries(): void; purgeFromMemory(aWhat: u32): void; readonly ioTarget: nsIEventTarget; - asyncGetDiskConsumption(aObserver: nsICacheStorageConsumptionObserver): void; - asyncVisitAllStorages(aVisitor: nsICacheStorageVisitor, aVisitEntries: boolean): void; + asyncGetDiskConsumption( + aObserver: nsICacheStorageConsumptionObserver + ): void; + asyncVisitAllStorages( + aVisitor: nsICacheStorageVisitor, + aVisitEntries: boolean + ): void; } interface nsICacheStorageConsumptionObserver extends nsISupports { @@ -9551,7 +10146,12 @@ declare global { readonly cookies: nsICookie[]; readonly sessionCookies: nsICookie[]; getCookieBehavior(aIsPrivate: boolean): u32; - remove(aHost: string, aName: string, aPath: string, aOriginAttributes: any): void; + remove( + aHost: string, + aName: string, + aPath: string, + aOriginAttributes: any + ): void; add( aHost: string, aPath: string, @@ -9580,9 +10180,18 @@ declare global { aSchemeMap: nsICookie.schemeType, aIsPartitioned?: boolean ): nsICookieValidation; - cookieExists(aHost: string, aPath: string, aName: string, aOriginAttributes: any): boolean; + cookieExists( + aHost: string, + aPath: string, + aName: string, + aOriginAttributes: any + ): boolean; countCookiesFromHost(aHost: string): u32; - getCookiesFromHost(aHost: string, aOriginAttributes: any, aSorted?: boolean): nsICookie[]; + getCookiesFromHost( + aHost: string, + aOriginAttributes: any, + aSorted?: boolean + ): nsICookie[]; getCookiesWithOriginAttributes( aPattern: string, aHost?: string, @@ -9592,7 +10201,9 @@ declare global { removeCookiesFromExactHost(aHost: string, aPattern: string): void; removeAllSince(aSinceWhen: i64): Promise; getCookiesSince(aSinceWhen: i64): nsICookie[]; - addThirdPartyCookieBlockingExceptions(aExcpetions: nsIThirdPartyCookieExceptionEntry[]): void; + addThirdPartyCookieBlockingExceptions( + aExcpetions: nsIThirdPartyCookieExceptionEntry[] + ): void; removeThirdPartyCookieBlockingExceptions( aExceptions: nsIThirdPartyCookieExceptionEntry[] ): void; @@ -9616,7 +10227,8 @@ declare global { type Action = nsICookieNotification_Action; } - interface nsICookieNotification extends nsISupports, Enums { + interface nsICookieNotification + extends nsISupports, Enums { readonly action: nsICookieNotification.Action; readonly cookie: nsICookie; readonly baseDomain: string; @@ -9652,7 +10264,11 @@ declare global { readonly BEHAVIOR_LAST?: 5; getCookieStringFromHttp(aURI: nsIURI, aChannel: nsIChannel): string; - setCookieStringFromHttp(aURI: nsIURI, aCookie: string, aChannel: nsIChannel): void; + setCookieStringFromHttp( + aURI: nsIURI, + aCookie: string, + aChannel: nsIChannel + ): void; runInTransaction(aCallback: nsICookieTransactionCallback): void; } @@ -9684,8 +10300,7 @@ declare global { } interface nsICookieValidation - extends nsISupports, - Enums { + extends nsISupports, Enums { readonly result: nsICookieValidation.ValidationError; readonly errorString: string; } @@ -9779,13 +10394,21 @@ declare global { aAllRecordsHaveEchConfig: OutParam, aAllRecordsInH3ExcludedList: OutParam ): nsISVCBRecord[]; - GetAllRecords(aNoHttp2: boolean, aNoHttp3: boolean, aCName: string): nsISVCBRecord[]; + GetAllRecords( + aNoHttp2: boolean, + aNoHttp3: boolean, + aCName: string + ): nsISVCBRecord[]; } // https://searchfox.org/mozilla-central/source/netwerk/dns/nsIDNSListener.idl interface nsIDNSListener extends nsISupports { - onLookupComplete(aRequest: nsICancelable, aRecord: nsIDNSRecord, aStatus: nsresult): void; + onLookupComplete( + aRequest: nsICancelable, + aRecord: nsIDNSRecord, + aStatus: nsresult + ): void; } // https://searchfox.org/mozilla-central/source/netwerk/dns/nsIDNSRecord.idl @@ -9867,7 +10490,8 @@ declare global { } interface nsIDNSService - extends nsISupports, + extends + nsISupports, Enums< typeof nsIDNSService_ResolveType & typeof nsIDNSService_ResolverMode & @@ -10014,7 +10638,8 @@ declare global { type value = nsITRRSkipReason_value; } - interface nsITRRSkipReason extends nsISupports, Enums {} + interface nsITRRSkipReason + extends nsISupports, Enums {} // https://searchfox.org/mozilla-central/source/netwerk/dns/nsPIDNSService.idl @@ -10095,7 +10720,11 @@ declare global { // https://searchfox.org/mozilla-central/source/netwerk/protocol/http/nsIEarlyHintObserver.idl interface nsIEarlyHintObserver extends nsISupports { - earlyHint(linkHeader: string, referrerPolicy: string, cspHeader: string): void; + earlyHint( + linkHeader: string, + referrerPolicy: string, + cspHeader: string + ): void; } // https://searchfox.org/mozilla-central/source/netwerk/protocol/http/nsIHttpActivityObserver.idl @@ -10212,7 +10841,10 @@ declare global { getResponseHeader(header: string): string; setResponseHeader(header: string, value: string, merge: boolean): void; visitResponseHeaders(aVisitor: nsIHttpHeaderVisitor): void; - getOriginalResponseHeader(aHeader: string, aVisitor: nsIHttpHeaderVisitor): void; + getOriginalResponseHeader( + aHeader: string, + aVisitor: nsIHttpHeaderVisitor + ): void; visitOriginalResponseHeaders(aVisitor: nsIHttpHeaderVisitor): void; isNoStoreResponse(): boolean; isNoCacheResponse(): boolean; @@ -10220,7 +10852,11 @@ declare global { upgradeToSecure(): void; topLevelContentWindowId: u64; browserId: u64; - logBlockedCORSRequest(aMessage: string, aCategory: string, aIsWarning: boolean): void; + logBlockedCORSRequest( + aMessage: string, + aCategory: string, + aIsWarning: boolean + ): void; logMimeTypeMismatch( aMessageName: string, aWarning: boolean, @@ -10305,7 +10941,9 @@ declare global { setEarlyHintObserver(aObserver: nsIEarlyHintObserver): void; earlyHintPreloaderId: u64; readonly isProxyUsed: boolean; - setWebTransportSessionEventListener(aListener: WebTransportSessionEventListener): void; + setWebTransportSessionEventListener( + aListener: WebTransportSessionEventListener + ): void; earlyHintLinkType: u32; isUserAgentHeaderModified: boolean; setResponseOverride(aReplacedHttpResponse: nsIReplacedHttpResponse): void; @@ -10366,14 +11004,24 @@ declare global { } interface nsIObliviousHttp extends nsISupports { - encapsulateRequest(encodedConfig: u8[], request: u8[]): nsIObliviousHttpClientRequest; + encapsulateRequest( + encodedConfig: u8[], + request: u8[] + ): nsIObliviousHttpClientRequest; server(): nsIObliviousHttpServer; decodeConfigList(encodedConfigList: u8[]): u8[][]; } interface nsIObliviousHttpService extends nsISupports { - newChannel(relayURI: nsIURI, targetURI: nsIURI, encodedConfig: u8[]): nsIChannel; - getTRRSettings(relayURI: OutParam, encodedConfig: OutParam): void; + newChannel( + relayURI: nsIURI, + targetURI: nsIURI, + encodedConfig: u8[] + ): nsIChannel; + getTRRSettings( + relayURI: OutParam, + encodedConfig: OutParam + ): void; clearTRRConfig(): void; } @@ -10601,7 +11249,10 @@ declare global { pingInterval: u32; pingTimeout: u32; serial: u32; - setServerParameters(aProvider: nsITransportProvider, aNegotiatedExtensions: string): void; + setServerParameters( + aProvider: nsITransportProvider, + aNegotiatedExtensions: string + ): void; } // https://searchfox.org/mozilla-central/source/netwerk/protocol/websocket/nsIWebSocketEventService.idl @@ -10630,7 +11281,11 @@ declare global { readonly TYPE_BLOB?: 1; readonly TYPE_ARRAYBUFFER?: 2; - webSocketCreated(aWebSocketSerialID: u32, aURI: string, aProtocols: string): void; + webSocketCreated( + aWebSocketSerialID: u32, + aURI: string, + aProtocols: string + ): void; webSocketOpened( aWebSocketSerialID: u32, aEffectiveURI: string, @@ -10638,16 +11293,31 @@ declare global { aExtensions: string, aHttpChannelId: u64 ): void; - webSocketMessageAvailable(aWebSocketSerialID: u32, aMessage: string, aType: u16): void; - webSocketClosed(aWebSocketSerialID: u32, aWasClean: boolean, aCode: u16, aReason: string): void; + webSocketMessageAvailable( + aWebSocketSerialID: u32, + aMessage: string, + aType: u16 + ): void; + webSocketClosed( + aWebSocketSerialID: u32, + aWasClean: boolean, + aCode: u16, + aReason: string + ): void; frameReceived(aWebSocketSerialID: u32, aFrame: nsIWebSocketFrame): void; frameSent(aWebSocketSerialID: u32, aFrame: nsIWebSocketFrame): void; } interface nsIWebSocketEventService extends nsISupports { sendMessage(aWebSocketSerialID: u32, aMessage: string): void; - addListener(aInnerWindowID: u64, aListener: nsIWebSocketEventListener): void; - removeListener(aInnerWindowID: u64, aListener: nsIWebSocketEventListener): void; + addListener( + aInnerWindowID: u64, + aListener: nsIWebSocketEventListener + ): void; + removeListener( + aInnerWindowID: u64, + aListener: nsIWebSocketEventListener + ): void; hasListenerFor(aInnerWindowID: u64): boolean; } @@ -10689,8 +11359,12 @@ declare global { } interface nsIWebTransport - extends nsISupports, - Enums { + extends + nsISupports, + Enums< + typeof nsIWebTransport_WebTransportError & + typeof nsIWebTransport_HTTPVersion + > { asyncConnect( aURI: nsIURI, aDedicated: boolean, @@ -10702,8 +11376,12 @@ declare global { ): void; getStats(): void; closeSession(aErrorCode: u32, aReason: string): void; - createOutgoingBidirectionalStream(aListener: nsIWebTransportStreamCallback): void; - createOutgoingUnidirectionalStream(aListener: nsIWebTransportStreamCallback): void; + createOutgoingBidirectionalStream( + aListener: nsIWebTransportStreamCallback + ): void; + createOutgoingUnidirectionalStream( + aListener: nsIWebTransportStreamCallback + ): void; sendDatagram(aData: u8[], aTrackingId: u64): void; getMaxDatagramSize(): void; } @@ -10721,12 +11399,17 @@ declare global { } interface WebTransportSessionEventListener - extends nsISupports, + extends + nsISupports, Enums { onSessionReady(aSessionId: u64): void; onSessionClosed(aCleanly: boolean, aErrorCode: u32, aReason: string): void; - onIncomingBidirectionalStreamAvailable(aStream: nsIWebTransportBidirectionalStream): void; - onIncomingUnidirectionalStreamAvailable(aStream: nsIWebTransportReceiveStream): void; + onIncomingBidirectionalStreamAvailable( + aStream: nsIWebTransportBidirectionalStream + ): void; + onIncomingUnidirectionalStreamAvailable( + aStream: nsIWebTransportReceiveStream + ): void; onStopSending(aStreamId: u64, aError: nsresult): void; onResetReceived(aStreamId: u64, aError: nsresult): void; onDatagramReceived(aData: u8[]): void; @@ -10738,7 +11421,9 @@ declare global { } interface nsIWebTransportStreamCallback extends nsISupports { - onBidirectionalStreamReady(aStream: nsIWebTransportBidirectionalStream): void; + onBidirectionalStreamReady( + aStream: nsIWebTransportBidirectionalStream + ): void; onUnidirectionalStreamReady(aStream: nsIWebTransportSendStream): void; onError(aError: u8): void; } @@ -10845,7 +11530,12 @@ declare global { readonly blockFileDownloadsEnabled: boolean; isAllowed(aAction: i16, aUri?: nsIURI): boolean; readonly loggingEnabled: boolean; - log(aEntryType: i16, aFlag: boolean, aSource: nsIURI, aTarget?: nsIFile): void; + log( + aEntryType: i16, + aFlag: boolean, + aSource: nsIURI, + aTarget?: nsIFile + ): void; } // https://searchfox.org/mozilla-central/source/dom/media/bridge/IPeerConnection.idl @@ -10919,10 +11609,16 @@ declare global { aCert: nsIX509Cert, aIsTemporary: OutParam ): boolean; - clearValidityOverride(aHostName: string, aPort: i32, aOriginAttributes: any): void; + clearValidityOverride( + aHostName: string, + aPort: i32, + aOriginAttributes: any + ): void; clearAllOverrides(): void; getOverrides(): nsICertOverride[]; - setDisableAllSecurityChecksAndLetAttackersInterceptMyData(aDisable: boolean): void; + setDisableAllSecurityChecksAndLetAttackersInterceptMyData( + aDisable: boolean + ): void; setDisableAllSecurityChecksAndLetAttackersInterceptMyDataForUserContext( aUserContextId: u32, aDisable: boolean @@ -10974,14 +11670,29 @@ declare global { readonly TRUST_ANCHOR?: 1; hasPriorData(type: u8, callback: nsICertStorageCallback): void; - setRevocations(revocations: nsIRevocationState[], callback: nsICertStorageCallback): void; - getRevocationState(issuer: u8[], serial: u8[], subject: u8[], pubkey: u8[]): i16; + setRevocations( + revocations: nsIRevocationState[], + callback: nsICertStorageCallback + ): void; + getRevocationState( + issuer: u8[], + serial: u8[], + subject: u8[], + pubkey: u8[] + ): i16; setFullCRLiteFilter(filter: u8[], callback: nsICertStorageCallback): void; - addCRLiteDelta(delta: u8[], filename: string, callback: nsICertStorageCallback): void; + addCRLiteDelta( + delta: u8[], + filename: string, + callback: nsICertStorageCallback + ): void; testNoteCRLiteUpdateTime(callback: nsICertStorageCallback): void; addCerts(certs: nsICertInfo[], callback: nsICertStorageCallback): void; TestHelperAddCert(cert: string, subject: string, trust: i16): void; - removeCertsByHashes(hashes: string[], callback: nsICertStorageCallback): void; + removeCertsByHashes( + hashes: string[], + callback: nsICertStorageCallback + ): void; findCertsBySubject(subject: u8[]): u8[][]; hasAllCertsByHash(hashes: u8[][]): boolean; findCertByHash(cert_hash: u8[]): u8[]; @@ -11009,8 +11720,14 @@ declare global { cert: nsIX509Cert, trust: OutParam ): boolean; - setPKCS12FilePassword(ctx: nsIInterfaceRequestor, password: OutParam): boolean; - getPKCS12FilePassword(ctx: nsIInterfaceRequestor, password: OutParam): boolean; + setPKCS12FilePassword( + ctx: nsIInterfaceRequestor, + password: OutParam + ): boolean; + getPKCS12FilePassword( + ctx: nsIInterfaceRequestor, + password: OutParam + ): boolean; } // https://searchfox.org/mozilla-central/source/security/manager/ssl/nsIClientAuthDialogService.idl @@ -11053,8 +11770,7 @@ declare global { } interface nsIClientAuthRememberService - extends nsISupports, - Enums { + extends nsISupports, Enums { forgetRememberedDecision(key: string): void; getDecisions(): nsIClientAuthRememberRecord[]; rememberDecisionScriptable( @@ -11120,8 +11836,7 @@ declare global { } interface nsIDataStorageManager - extends nsISupports, - Enums { + extends nsISupports, Enums { get(dataStorage: nsIDataStorageManager.DataStorage): nsIDataStorage; } } // global @@ -11137,7 +11852,8 @@ declare global { type DataType = nsIDataStorage_DataType; } - interface nsIDataStorage extends nsISupports, Enums { + interface nsIDataStorage + extends nsISupports, Enums { get(key: string, type: nsIDataStorage.DataType): string; put(key: string, value: string, type: nsIDataStorage.DataType): void; remove(key: string, type: nsIDataStorage.DataType): void; @@ -11337,8 +12053,7 @@ declare global { } interface nsISiteSecurityService - extends nsISupports, - Enums { + extends nsISupports, Enums { readonly Success?: 0; readonly ERROR_UNKNOWN?: 1; readonly ERROR_COULD_NOT_PARSE_HEADER?: 3; @@ -11390,7 +12105,11 @@ declare global { readonly earlyDataAccepted: boolean; driveHandshake(): void; joinConnection(npnProtocol: string, hostname: string, port: i32): boolean; - testJoinConnection(npnProtocol: string, hostname: string, port: i32): boolean; + testJoinConnection( + npnProtocol: string, + hostname: string, + port: i32 + ): boolean; isAcceptableForHost(hostname: string): boolean; readonly KEAUsed: i16; readonly KEAKeyBits: u32; @@ -11428,11 +12147,13 @@ declare enum nsITransportSecurityInfo_OverridableErrorCategory { declare global { namespace nsITransportSecurityInfo { - type OverridableErrorCategory = nsITransportSecurityInfo_OverridableErrorCategory; + type OverridableErrorCategory = + nsITransportSecurityInfo_OverridableErrorCategory; } interface nsITransportSecurityInfo - extends nsISupports, + extends + nsISupports, Enums { readonly SSL_VERSION_3?: 0; readonly TLS_VERSION_1?: 1; @@ -11519,8 +12240,7 @@ declare global { } interface nsIAppSignatureInfo - extends nsISupports, - Enums { + extends nsISupports, Enums { readonly signerCert: nsIX509Cert; readonly signatureAlgorithm: nsIAppSignatureInfo.SignatureAlgorithm; } @@ -11576,7 +12296,8 @@ declare global { } interface nsIX509CertDB - extends nsISupports, + extends + nsISupports, Enums< typeof nsIX509CertDB_VerifyUsage & typeof nsIX509CertDB_QWACType & @@ -11601,16 +12322,33 @@ declare global { readonly FLAG_MUST_BE_EV?: 2; findCertByDBKey(aDBkey: string): nsIX509Cert; - importCertificates(data: u8[], length: u32, type: u32, ctx: nsIInterfaceRequestor): void; - importEmailCertificate(data: u8[], length: u32, ctx: nsIInterfaceRequestor): void; - importUserCertificate(data: u8[], length: u32, ctx: nsIInterfaceRequestor): void; + importCertificates( + data: u8[], + length: u32, + type: u32, + ctx: nsIInterfaceRequestor + ): void; + importEmailCertificate( + data: u8[], + length: u32, + ctx: nsIInterfaceRequestor + ): void; + importUserCertificate( + data: u8[], + length: u32, + ctx: nsIInterfaceRequestor + ): void; deleteCertificate(aCert: nsIX509Cert): void; setCertTrust(cert: nsIX509Cert, type: u32, trust: u32): void; setCertTrustFromString(cert: nsIX509Cert, trustString: string): void; isCertTrusted(cert: nsIX509Cert, certType: u32, trustType: u32): boolean; importCertsFromFile(aFile: nsIFile, aType: u32): void; importPKCS12File(aFile: nsIFile, aPassword: string): u32; - exportPKCS12File(aFile: nsIFile, aCerts: nsIX509Cert[], aPassword: string): u32; + exportPKCS12File( + aFile: nsIFile, + aCerts: nsIX509Cert[], + aPassword: string + ): u32; constructX509FromBase64(base64: string): nsIX509Cert; constructX509(certDER: u8[]): nsIX509Cert; openSignedAppFileAsync( @@ -11718,9 +12456,11 @@ declare global { } interface mozIPlacesAutoComplete - extends nsISupports, + extends + nsISupports, Enums< - typeof mozIPlacesAutoComplete_MatchBehaviors & typeof mozIPlacesAutoComplete_SearchBehaviors + typeof mozIPlacesAutoComplete_MatchBehaviors & + typeof mozIPlacesAutoComplete_SearchBehaviors > {} // https://searchfox.org/mozilla-central/source/toolkit/components/places/mozIPlacesPendingOperation.idl @@ -11732,8 +12472,18 @@ declare global { // https://searchfox.org/mozilla-central/source/toolkit/components/places/mozISyncedBookmarksMirror.idl interface mozISyncedBookmarksMirrorProgressListener extends nsISupports { - onFetchLocalTree(took: i64, itemCount: i64, deletedCount: i64, problems: nsIPropertyBag): void; - onFetchRemoteTree(took: i64, itemCount: i64, deletedCount: i64, problems: nsIPropertyBag): void; + onFetchLocalTree( + took: i64, + itemCount: i64, + deletedCount: i64, + problems: nsIPropertyBag + ): void; + onFetchRemoteTree( + took: i64, + itemCount: i64, + deletedCount: i64, + problems: nsIPropertyBag + ): void; onMerge(took: i64, counts: nsIPropertyBag): void; onApply(took: i64): void; } @@ -11765,7 +12515,8 @@ declare global { } interface mozISyncedBookmarksMerger - extends nsISupports, + extends + nsISupports, Enums< typeof mozISyncedBookmarksMerger_SyncedItemKinds & typeof mozISyncedBookmarksMerger_SyncedItemValidity @@ -11801,7 +12552,11 @@ declare global { isRichIcon?: boolean ): Promise; getFaviconForPage(aPageURI: nsIURI, aPreferredWidth?: u16): Promise; - tryCopyFavicons(aFromPageURI: nsIURI, aToPageURI: nsIURI, aFaviconLoadType: u32): Promise; + tryCopyFavicons( + aFromPageURI: nsIURI, + aToPageURI: nsIURI, + aFaviconLoadType: u32 + ): Promise; } interface nsIFavicon extends nsISupports { @@ -11838,9 +12593,11 @@ declare global { } interface nsINavBookmarksService - extends nsISupports, + extends + nsISupports, Enums< - typeof nsINavBookmarksService_BookmarkType & typeof nsINavBookmarksService_ChangeSource + typeof nsINavBookmarksService_BookmarkType & + typeof nsINavBookmarksService_ChangeSource > { readonly DEFAULT_INDEX?: -1; readonly SYNC_STATUS_UNKNOWN?: 0; @@ -11858,10 +12615,20 @@ declare global { aSource?: u16 ): i64; removeItem(aItemId: i64, aSource?: u16): void; - createFolder(aParentFolder: i64, name: string, index: i32, aGuid?: string, aSource?: u16): i64; + createFolder( + aParentFolder: i64, + name: string, + index: i32, + aGuid?: string, + aSource?: u16 + ): i64; setItemTitle(aItemId: i64, aTitle: string, aSource?: u16): void; getItemTitle(aItemId: i64): string; - setItemLastModified(aItemId: i64, aLastModified: PRTime, aSource?: u16): void; + setItemLastModified( + aItemId: i64, + aLastModified: PRTime, + aSource?: u16 + ): void; } // https://searchfox.org/mozilla-central/source/toolkit/components/places/nsINavHistoryService.idl @@ -11881,8 +12648,7 @@ declare global { } interface nsINavHistoryResultNode - extends nsISupports, - Enums { + extends nsISupports, Enums { readonly parent: nsINavHistoryContainerResultNode; readonly parentResult: nsINavHistoryResult; readonly uri: string; @@ -11951,9 +12717,18 @@ declare global { aOldAccessCount: u32 ): void; nodeTagsChanged(aNode: nsINavHistoryResultNode): void; - nodeKeywordChanged(aNode: nsINavHistoryResultNode, aNewKeyword: string): void; - nodeDateAddedChanged(aNode: nsINavHistoryResultNode, aNewValue: PRTime): void; - nodeLastModifiedChanged(aNode: nsINavHistoryResultNode, aNewValue: PRTime): void; + nodeKeywordChanged( + aNode: nsINavHistoryResultNode, + aNewKeyword: string + ): void; + nodeDateAddedChanged( + aNode: nsINavHistoryResultNode, + aNewValue: PRTime + ): void; + nodeLastModifiedChanged( + aNode: nsINavHistoryResultNode, + aNewValue: PRTime + ): void; containerStateChanged( aContainerNode: nsINavHistoryContainerResultNode, aOldState: u32, @@ -11968,7 +12743,10 @@ declare global { interface nsINavHistoryResult extends nsISupports { sortingMode: u16; suppressNotifications: boolean; - addObserver(aObserver: nsINavHistoryResultObserver, aOwnsWeak?: boolean): void; + addObserver( + aObserver: nsINavHistoryResultObserver, + aOwnsWeak?: boolean + ): void; removeObserver(aObserver: nsINavHistoryResultObserver): void; readonly root: nsINavHistoryContainerResultNode; onBeginUpdateBatch(): void; @@ -12048,9 +12826,11 @@ declare global { } interface nsINavHistoryQueryOptions - extends nsISupports, + extends + nsISupports, Enums< - typeof nsINavHistoryQueryOptions_SortByType & typeof nsINavHistoryQueryOptions_ResultType + typeof nsINavHistoryQueryOptions_SortByType & + typeof nsINavHistoryQueryOptions_ResultType > { readonly QUERY_TYPE_HISTORY?: 0; readonly QUERY_TYPE_BOOKMARKS?: 1; @@ -12086,8 +12866,7 @@ declare global { } interface nsINavHistoryService - extends nsISupports, - Enums { + extends nsISupports, Enums { readonly DATABASE_SCHEMA_VERSION?: 82; readonly DATABASE_STATUS_OK?: 0; readonly DATABASE_STATUS_CREATE?: 1; @@ -12115,10 +12894,17 @@ declare global { aQuery: OutParam, options: OutParam ): void; - queryToQueryString(aQuery: nsINavHistoryQuery, options: nsINavHistoryQueryOptions): string; + queryToQueryString( + aQuery: nsINavHistoryQuery, + options: nsINavHistoryQueryOptions + ): string; readonly historyDisabled: boolean; makeGuid(): string; - pageFrecencyThreshold(aVisitAgeInDays: i32, aNumVisits: i32, aBookmarked: boolean): i64; + pageFrecencyThreshold( + aVisitAgeInDays: i32, + aNumVisits: i32, + aBookmarked: boolean + ): i64; hashURL(aSpec: string, aMode?: string): u64; isFrecencyDecaying: boolean; readonly isAlternativeFrecencyEnabled: boolean; @@ -12166,7 +12952,10 @@ declare global { setStringPref(aPrefName: string, aValue: string): void; getIntPref(aPrefName: string, aDefaultValue?: i32): i32; setIntPref(aPrefName: string, aValue: i32): void; - getComplexValue(aPrefName: string, aType: T): nsQIResult; + getComplexValue( + aPrefName: string, + aType: T + ): nsQIResult; setComplexValue(aPrefName: string, aType: nsID, aValue: nsISupports): void; clearUserPref(aPrefName: string): void; lockPref(aPrefName: string): void; @@ -12177,7 +12966,11 @@ declare global { unlockPref(aPrefName: string): void; deleteBranch(aStartingAt: string): void; getChildList(aStartingAt: string): string[]; - addObserver(aDomain: string, aObserver: nsIObserver, aHoldWeak?: boolean): void; + addObserver( + aDomain: string, + aObserver: nsIObserver, + aHoldWeak?: boolean + ): void; removeObserver(aDomain: string, aObserver: nsIObserver): void; } @@ -12206,7 +12999,13 @@ declare global { isSticky: boolean, isLocked: boolean ): void; - onIntPref(kind: string, name: string, value: i32, isSticky: boolean, isLocked: boolean): void; + onIntPref( + kind: string, + name: string, + value: i32, + isSticky: boolean, + isLocked: boolean + ): void; onBoolPref( kind: string, name: string, @@ -12220,7 +13019,10 @@ declare global { interface nsIPrefService extends nsISupports { resetPrefs(): void; savePrefFile(aFile: nsIFile): void; - backupPrefFile(aFile: nsIFile, aOverrideMap?: nsIPrefOverrideMap): Promise; + backupPrefFile( + aFile: nsIFile, + aOverrideMap?: nsIPrefOverrideMap + ): Promise; getBranch(aPrefRoot: string): nsIPrefBranch; getDefaultBranch(aPrefRoot: string): nsIPrefBranch; readonly dirty: boolean; @@ -12228,7 +13030,11 @@ declare global { readUserPrefsFromFile(aFile: nsIFile): void; readStats(callback: nsIPrefStatsCallback): void; resetStats(): void; - parsePrefsFromBuffer(bytes: u8[], observer: nsIPrefObserver, pathLabel?: string): void; + parsePrefsFromBuffer( + bytes: u8[], + observer: nsIPrefObserver, + pathLabel?: string + ): void; readonly userPrefsFileLastModifiedAtStartup: PRTime; readonly prefsJsPreamble: string; } @@ -12306,7 +13112,10 @@ declare global { getProfileDataAsync(aSinceTime?: double): Promise; getProfileDataAsArrayBuffer(aSinceTime?: double): Promise; getProfileDataAsGzippedArrayBuffer(aSinceTime?: double): Promise; - dumpProfileToFileAsync(aFilename: string, aSinceTime?: double): Promise; + dumpProfileToFileAsync( + aFilename: string, + aSinceTime?: double + ): Promise; dumpProfileToFile(aFilename: string): void; IsActive(): boolean; ClearAllPages(): void; @@ -12410,12 +13219,21 @@ declare global { readonly storageVersion: i32; readonly allowSkippedRecord: boolean; getLastSync(callback: mozIBridgedSyncEngineCallback): void; - setLastSync(lastSyncMillis: i64, callback: mozIBridgedSyncEngineCallback): void; + setLastSync( + lastSyncMillis: i64, + callback: mozIBridgedSyncEngineCallback + ): void; getSyncId(callback: mozIBridgedSyncEngineCallback): void; resetSyncId(callback: mozIBridgedSyncEngineCallback): void; - ensureCurrentSyncId(newSyncId: string, callback: mozIBridgedSyncEngineCallback): void; + ensureCurrentSyncId( + newSyncId: string, + callback: mozIBridgedSyncEngineCallback + ): void; syncStarted(callback: mozIBridgedSyncEngineCallback): void; - storeIncoming(incomingEnvelopesAsJSON: string[], callback: mozIBridgedSyncEngineCallback): void; + storeIncoming( + incomingEnvelopesAsJSON: string[], + callback: mozIBridgedSyncEngineCallback + ): void; apply(callback: mozIBridgedSyncEngineApplyCallback): void; setUploaded( newTimestampMillis: i64, @@ -12461,15 +13279,29 @@ declare global { scroll: string; addTextField(aIsXPath: boolean, aIdOrXPath: string, aValue: string): void; addCheckbox(aIsXPath: boolean, aIdOrXPath: string, aValue: boolean): void; - addFileList(aIsXPath: boolean, aIdOrXPath: string, aType: string, aFileList: string[]): void; + addFileList( + aIsXPath: boolean, + aIdOrXPath: string, + aType: string, + aFileList: string[] + ): void; addSingleSelect( aIsXPath: boolean, aIdOrXPath: string, aSelectedIndex: u32, aValue: string ): void; - addMultipleSelect(aIsXPath: boolean, aIdOrXPath: string, aValues: string[]): void; - addCustomElement(aIsXPath: boolean, aIdOrXPath: string, aValue: any, aState: any): void; + addMultipleSelect( + aIsXPath: boolean, + aIdOrXPath: string, + aValues: string[] + ): void; + addCustomElement( + aIsXPath: boolean, + aIdOrXPath: string, + aValue: any, + aState: any + ): void; addChild(aChild: nsISessionStoreRestoreData, aIndex: u32): void; } @@ -12485,7 +13317,11 @@ declare global { isDefaultBrowser(aForAllTypes?: boolean): boolean; setDefaultBrowser(aForAllUsers: boolean): void; - setDesktopBackground(aElement: Element, aPosition: i32, aImageName: string): void; + setDesktopBackground( + aElement: Element, + aPosition: i32, + aImageName: string + ): void; desktopBackgroundColor: u32; } @@ -12548,7 +13384,11 @@ declare global { abandonBFCacheEntry(): void; sharesDocumentWith(aEntry: nsISHEntry): boolean; setLoadTypeAsHistory(): void; - AddChild(aChild: nsISHEntry, aOffset: i32, aUseRemoteSubframes?: boolean): void; + AddChild( + aChild: nsISHEntry, + aOffset: i32, + aUseRemoteSubframes?: boolean + ): void; GetChildAt(aIndex: i32): nsISHEntry; readonly bfcacheID: u64; wireframe: any; @@ -12639,7 +13479,10 @@ declare global { variableLimit: i32; readonly transactionInProgress: boolean; asyncClose(aCallback?: mozIStorageCompletionCallback): void; - asyncClone(aReadOnly: boolean, aCallback: mozIStorageCompletionCallback): void; + asyncClone( + aReadOnly: boolean, + aCallback: mozIStorageCompletionCallback + ): void; readonly databaseFile: nsIFile; interrupt(): void; asyncVacuum( @@ -12656,8 +13499,15 @@ declare global { aSQLStatement: string, aCallback?: mozIStorageStatementCallback ): mozIStoragePendingStatement; - loadExtension(aExtensionName: string, aCallback?: mozIStorageCompletionCallback): void; - createFunction(aFunctionName: string, aNumArguments: i32, aFunction: mozIStorageFunction): void; + loadExtension( + aExtensionName: string, + aCallback?: mozIStorageCompletionCallback + ): void; + createFunction( + aFunctionName: string, + aNumArguments: i32, + aFunction: mozIStorageFunction + ): void; removeFunction(aFunctionName: string): void; setProgressHandler( aGranularity: i32, @@ -12686,7 +13536,9 @@ declare global { finalize(): void; bindParameters(aParameters: mozIStorageBindingParamsArray): void; newBindingParamsArray(): mozIStorageBindingParamsArray; - executeAsync(aCallback?: mozIStorageStatementCallback): mozIStoragePendingStatement; + executeAsync( + aCallback?: mozIStorageStatementCallback + ): mozIStoragePendingStatement; readonly state: i32; escapeStringForLIKE(aValue: string, aEscapeChar: string): string; escapeUTF8StringForLIKE(aValue: string, aEscapeChar: string): string; @@ -12835,8 +13687,14 @@ declare global { aName?: string, aConnectionFlags?: u32 ): mozIStorageConnection; - openDatabase(aDatabaseFile: nsIFile, aConnectionFlags?: u32): mozIStorageConnection; - openUnsharedDatabase(aDatabaseFile: nsIFile, aConnectionFlags?: u32): mozIStorageConnection; + openDatabase( + aDatabaseFile: nsIFile, + aConnectionFlags?: u32 + ): mozIStorageConnection; + openUnsharedDatabase( + aDatabaseFile: nsIFile, + aConnectionFlags?: u32 + ): mozIStorageConnection; openDatabaseWithFileURL( aFileURL: nsIFileURL, aTelemetryFilename?: string, @@ -12955,7 +13813,11 @@ declare global { aClearStore?: boolean, aFilterTest?: boolean ): any; - getSnapshotForScalars(aStoreName?: string, aClearStore?: boolean, aFilterTest?: boolean): any; + getSnapshotForScalars( + aStoreName?: string, + aClearStore?: boolean, + aFilterTest?: boolean + ): any; getSnapshotForKeyedScalars( aStoreName?: string, aClearStore?: boolean, @@ -13001,7 +13863,11 @@ declare global { start_ipv6(port: i32): void; start_dualStack(port: i32): void; stop(callback: nsIHttpServerStoppedCallback): void; - registerFile(path: string, file: nsIFile, handler?: nsIHttpRequestHandler): void; + registerFile( + path: string, + file: nsIFile, + handler?: nsIHttpRequestHandler + ): void; registerPathHandler(path: string, handler: nsIHttpRequestHandler): void; registerPrefixHandler(prefix: string, handler: nsIHttpRequestHandler): void; registerErrorHandler(code: u32, handler: nsIHttpRequestHandler): void; @@ -13051,7 +13917,11 @@ declare global { } interface nsIHttpResponse extends nsISupports { - setStatusLine(httpVersion: string, statusCode: u16, description: string): void; + setStatusLine( + httpVersion: string, + statusCode: u16, + description: string + ): void; setHeader(name: string, value: string, merge?: boolean): void; setHeaderNoCheck(name: string, value: string): void; readonly bodyOutputStream: nsIOutputStream; @@ -13104,10 +13974,12 @@ declare global { } interface nsIBounceTrackingProtection - extends nsISupports, - Enums { + extends nsISupports, Enums { clearAll(): void; - clearBySiteHostAndOriginAttributes(aSiteHost: string, originAttributes: any): void; + clearBySiteHostAndOriginAttributes( + aSiteHost: string, + originAttributes: any + ): void; clearBySiteHostAndOriginAttributesPattern( aSiteHost: string, aOriginAttributesPattern: any @@ -13120,22 +13992,34 @@ declare global { testGetSiteHostExceptions(): string[]; testRunPurgeBounceTrackers(): Promise; testClearExpiredUserActivations(): void; - testGetBounceTrackerCandidateHosts(originAttributes: any): nsIBounceTrackingMapEntry[]; - testGetUserActivationHosts(originAttributes: any): nsIBounceTrackingMapEntry[]; + testGetBounceTrackerCandidateHosts( + originAttributes: any + ): nsIBounceTrackingMapEntry[]; + testGetUserActivationHosts( + originAttributes: any + ): nsIBounceTrackingMapEntry[]; testAddBounceTrackerCandidate( originAttributes: any, aSiteHost: string, aBounceTime: PRTime ): void; - testAddUserActivation(originAttributes: any, aSiteHost: string, aActivationTime: PRTime): void; - testGetRecentlyPurgedTrackers(originAttributes: any): nsIBounceTrackingPurgeEntry[]; + testAddUserActivation( + originAttributes: any, + aSiteHost: string, + aActivationTime: PRTime + ): void; + testGetRecentlyPurgedTrackers( + originAttributes: any + ): nsIBounceTrackingPurgeEntry[]; testMaybeMigrateUserInteractionPermissions(): void; } // https://searchfox.org/mozilla-central/source/toolkit/components/antitracking/nsIContentBlockingAllowList.idl interface nsIContentBlockingAllowList extends nsISupports { - computeContentBlockingAllowListPrincipal(aPrincipal: nsIPrincipal): nsIPrincipal; + computeContentBlockingAllowListPrincipal( + aPrincipal: nsIPrincipal + ): nsIPrincipal; } // https://searchfox.org/mozilla-central/source/toolkit/components/antitracking/nsIPartitioningExceptionListService.idl @@ -13145,8 +14029,12 @@ declare global { }>; interface nsIPartitioningExceptionListService extends nsISupports { - registerAndRunExceptionListObserver(aObserver: nsIPartitioningExceptionListObserver): void; - unregisterExceptionListObserver(aObserver: nsIPartitioningExceptionListObserver): void; + registerAndRunExceptionListObserver( + aObserver: nsIPartitioningExceptionListObserver + ): void; + unregisterExceptionListObserver( + aObserver: nsIPartitioningExceptionListObserver + ): void; } // https://searchfox.org/mozilla-central/source/toolkit/components/antitracking/nsIPurgeTrackerService.idl @@ -13200,9 +14088,13 @@ declare global { interface nsIURLQueryStrippingListService extends nsISupports { registerAndRunObserver(aObserver: nsIURLQueryStrippingListObserver): void; - registerAndRunObserverStripOnShare(aObserver: nsIURLQueryStrippingListObserver): void; + registerAndRunObserverStripOnShare( + aObserver: nsIURLQueryStrippingListObserver + ): void; unregisterObserver(aObserver: nsIURLQueryStrippingListObserver): void; - unregisterStripOnShareObserver(aObserver: nsIURLQueryStrippingListObserver): void; + unregisterStripOnShareObserver( + aObserver: nsIURLQueryStrippingListObserver + ): void; clearLists(): void; testWaitForInit(): Promise; testSetList(testFile: any): Promise; @@ -13262,7 +14154,10 @@ declare global { // https://searchfox.org/mozilla-central/source/toolkit/components/backgroundtasks/nsIBackgroundTasksManager.idl interface nsIBackgroundTasksManager extends nsICommandLineHandler { - runBackgroundTaskNamed(aTaskName: string, aCommandLine: nsICommandLine): void; + runBackgroundTaskNamed( + aTaskName: string, + aCommandLine: nsICommandLine + ): void; } // https://searchfox.org/mozilla-central/source/toolkit/components/backgroundtasks/nsIBackgroundTasksRunner.idl @@ -13376,7 +14271,10 @@ declare global { aFrom?: PRTime, aCallback?: nsIClearDataCallback ): void; - cleanupAfterDeletionAtShutdown(aFlags: u32, aCallback: nsIClearDataCallback): void; + cleanupAfterDeletionAtShutdown( + aFlags: u32, + aCallback: nsIClearDataCallback + ): void; hostMatchesSite( aHost: string, aOriginAttributes: any, @@ -13413,7 +14311,8 @@ declare global { } interface nsIContentAnalysisAcknowledgement - extends nsISupports, + extends + nsISupports, Enums< typeof nsIContentAnalysisAcknowledgement_Result & typeof nsIContentAnalysisAcknowledgement_FinalAction @@ -13453,9 +14352,11 @@ declare global { } interface nsIContentAnalysisResponse - extends nsIContentAnalysisResult, + extends + nsIContentAnalysisResult, Enums< - typeof nsIContentAnalysisResponse_Action & typeof nsIContentAnalysisResponse_CancelError + typeof nsIContentAnalysisResponse_Action & + typeof nsIContentAnalysisResponse_CancelError > { readonly action: nsIContentAnalysisResponse.Action; readonly cancelError: nsIContentAnalysisResponse.CancelError; @@ -13515,7 +14416,8 @@ declare global { } interface nsIContentAnalysisRequest - extends nsISupports, + extends + nsISupports, Enums< typeof nsIContentAnalysisRequest_AnalysisType & typeof nsIContentAnalysisRequest_Reason & @@ -13622,7 +14524,8 @@ declare global { type RunContext = nsIClickRule_RunContext; } - interface nsIClickRule extends nsISupports, Enums { + interface nsIClickRule + extends nsISupports, Enums { readonly presence: string; readonly skipPresenceVisibilityCheck: boolean; readonly runContext: nsIClickRule.RunContext; @@ -13689,16 +14592,26 @@ declare global { type Modes = nsICookieBannerService_Modes; } - interface nsICookieBannerService extends nsISupports, Enums { + interface nsICookieBannerService + extends nsISupports, Enums { readonly isEnabled: boolean; readonly rules: nsICookieBannerRule[]; resetRules(doImport?: boolean): void; - getCookiesForURI(aURI: nsIURI, aIsPrivateBrowsing: boolean): nsICookieRule[]; - getClickRulesForDomain(aDomain: string, aIsTopLevel: boolean): nsIClickRule[]; + getCookiesForURI( + aURI: nsIURI, + aIsPrivateBrowsing: boolean + ): nsICookieRule[]; + getClickRulesForDomain( + aDomain: string, + aIsTopLevel: boolean + ): nsIClickRule[]; insertRule(aRule: nsICookieBannerRule): void; removeRule(aRule: nsICookieBannerRule): void; hasRuleForBrowsingContextTree(aBrowsingContext: BrowsingContext): boolean; - getDomainPref(aTopLevelURI: nsIURI, aIsPrivate: boolean): nsICookieBannerService.Modes; + getDomainPref( + aTopLevelURI: nsIURI, + aIsPrivate: boolean + ): nsICookieBannerService.Modes; setDomainPref( aTopLevelURI: nsIURI, aMode: nsICookieBannerService.Modes, @@ -13715,7 +14628,11 @@ declare global { aIsTopLevel: boolean, aIsPrivate: boolean ): boolean; - markSiteExecuted(aSite: string, aIsTopLevel: boolean, aIsPrivate: boolean): void; + markSiteExecuted( + aSite: string, + aIsTopLevel: boolean, + aIsPrivate: boolean + ): void; removeExecutedRecordForSite(aSite: string, aIsPrivate: boolean): void; removeAllExecutedRecords(aIsPrivate: boolean): void; } @@ -13845,7 +14762,10 @@ declare global { } interface nsISearchEngine extends nsISupports { - getSubmission(searchTerms: string, responseType?: string): nsISearchSubmission; + getSubmission( + searchTerms: string, + responseType?: string + ): nsISearchSubmission; readonly searchURLWithNoTerms: nsIURI; searchTermFromResult(uri: nsIURI): string; readonly searchUrlQueryParamName: string; @@ -13912,7 +14832,8 @@ declare global { } interface nsISearchService - extends nsISupports, + extends + nsISupports, Enums< typeof nsISearchService_OpenSearchInstallErrors & typeof nsISearchService_DefaultEngineChangeReason @@ -13923,7 +14844,11 @@ declare global { readonly hasSuccessfullyInitialized: boolean; runBackgroundChecks(): Promise; resetToAppDefaultEngine(): void; - addOpenSearchEngine(engineURL: string, iconURL: string, originAttributes?: any): Promise; + addOpenSearchEngine( + engineURL: string, + iconURL: string, + originAttributes?: any + ): Promise; addUserEngine(formInfo: any): Promise; addEnginesFromExtension(extension: any): Promise; restoreDefaultEngines(): void; @@ -13988,7 +14913,11 @@ declare global { } interface nsIProfileMigrator extends nsISupports { - migrate(aStartup: nsIProfileStartup, aKey: string, aProfileName?: string): void; + migrate( + aStartup: nsIProfileStartup, + aKey: string, + aProfileName?: string + ): void; } // https://searchfox.org/mozilla-central/source/toolkit/profile/nsIProfileUnlocker.idl @@ -14046,7 +14975,8 @@ declare global { } interface nsIToolkitProfileService - extends nsISupports, + extends + nsISupports, Enums< typeof nsIToolkitProfileService_downgradeUIFlags & typeof nsIToolkitProfileService_downgradeUIChoice & @@ -14069,12 +14999,19 @@ declare global { getProfileByName(aName: string): nsIToolkitProfile; getProfileByDir(aRootDir: nsIFile, aLocalDir?: nsIFile): nsIToolkitProfile; createProfile(aRootDir: nsIFile, aName: string): nsIToolkitProfile; - createUniqueProfile(aRootDir: nsIFile, aNamePrefix: string): nsIToolkitProfile; + createUniqueProfile( + aRootDir: nsIFile, + aNamePrefix: string + ): nsIToolkitProfile; readonly profileCount: u32; flush(): void; asyncFlush(): Promise; asyncFlushCurrentProfile(): Promise; - removeProfileFilesByPath(aRootDir: nsIFile, aLocalDir: nsIFile, aTimeout: u32): Promise; + removeProfileFilesByPath( + aRootDir: nsIFile, + aLocalDir: nsIFile, + aTimeout: u32 + ): Promise; } // https://searchfox.org/mozilla-central/source/toolkit/components/remote/nsIRemoteService.idl @@ -14153,7 +15090,12 @@ declare global { // https://searchfox.org/mozilla-central/source/toolkit/components/timermanager/nsIUpdateTimerManager.idl interface nsIUpdateTimerManager extends nsISupports { - registerTimer(id: string, callback: nsITimerCallback, interval: u32, skipFirst?: boolean): void; + registerTimer( + id: string, + callback: nsITimerCallback, + interval: u32, + skipFirst?: boolean + ): void; unregisterTimer(id: string): void; } @@ -14392,7 +15334,10 @@ declare global { aRequest: nsIRequest, aContentHandler: OutParam ): boolean; - isPreferred(aContentType: string, aDesiredContentType: OutParam): boolean; + isPreferred( + aContentType: string, + aDesiredContentType: OutParam + ): boolean; canHandleContent( aContentType: string, aIsContentPreferred: boolean, @@ -14411,7 +15356,11 @@ declare global { registerContentListener(aContentListener: nsIURIContentListener): void; unRegisterContentListener(aContentListener: nsIURIContentListener): void; - openURI(aChannel: nsIChannel, aFlags: u32, aWindowContext: nsIInterfaceRequestor): void; + openURI( + aChannel: nsIChannel, + aFlags: u32, + aWindowContext: nsIInterfaceRequestor + ): void; openChannel( aChannel: nsIChannel, aFlags: u32, @@ -14436,7 +15385,10 @@ declare global { readonly NOTIFY_CONTENT_BLOCKING?: 512; readonly NOTIFY_ALL?: 1023; - addProgressListener(aListener: nsIWebProgressListener, aNotifyMask: u32): void; + addProgressListener( + aListener: nsIWebProgressListener, + aNotifyMask: u32 + ): void; removeProgressListener(aListener: nsIWebProgressListener): void; readonly browsingContext: BrowsingContext; readonly DOMWindow: mozIDOMWindowProxy; @@ -14539,8 +15491,16 @@ declare global { aStatus: nsresult, aMessage: string ): void; - onSecurityChange(aWebProgress: nsIWebProgress, aRequest: nsIRequest, aState: u32): void; - onContentBlockingEvent(aWebProgress: nsIWebProgress, aRequest: nsIRequest, aEvent: u32): void; + onSecurityChange( + aWebProgress: nsIWebProgress, + aRequest: nsIRequest, + aState: u32 + ): void; + onContentBlockingEvent( + aWebProgress: nsIWebProgress, + aRequest: nsIRequest, + aEvent: u32 + ): void; } // https://searchfox.org/mozilla-central/source/uriloader/base/nsIWebProgressListener2.idl @@ -14599,7 +15559,10 @@ declare global { }>; interface nsIURIClassifier extends nsISupports { - classify(aPrincipal: nsIPrincipal, aCallback: nsIURIClassifierCallback): boolean; + classify( + aPrincipal: nsIPrincipal, + aCallback: nsIURIClassifierCallback + ): boolean; asyncClassifyLocalWithFeatures( aURI: nsIURI, aFeatures: nsIUrlClassifierFeature[], @@ -14633,7 +15596,11 @@ declare global { interface nsIUrlClassifierExceptionList extends nsISupports { init(aFeature: string): void; addEntry(aEntry: nsIUrlClassifierExceptionListEntry): void; - matches(aURI: nsIURI, aTopLevelURI: nsIURI, aIsPrivateBrowsing: boolean): boolean; + matches( + aURI: nsIURI, + aTopLevelURI: nsIURI, + aIsPrivateBrowsing: boolean + ): boolean; testGetEntries(): nsIUrlClassifierExceptionListEntry[]; } @@ -14652,7 +15619,8 @@ declare global { } interface nsIUrlClassifierExceptionListEntry - extends nsISupports, + extends + nsISupports, Enums { init( aCategory: nsIUrlClassifierExceptionListEntry.Category, @@ -14662,7 +15630,11 @@ declare global { aFilterContentBlockingCategories: string[], aClassifierFeatures: string[] ): void; - matches(aURI: nsIURI, aTopLevelURI: nsIURI, aIsPrivateBrowsing: boolean): boolean; + matches( + aURI: nsIURI, + aTopLevelURI: nsIURI, + aIsPrivateBrowsing: boolean + ): boolean; readonly category: nsIUrlClassifierExceptionListEntry.Category; readonly urlPattern: string; readonly topLevelUrlPattern: string; @@ -14712,8 +15684,12 @@ declare global { } interface nsIUrlClassifierFeature - extends nsISupports, - Enums { + extends + nsISupports, + Enums< + typeof nsIUrlClassifierFeature_listType & + typeof nsIUrlClassifierFeature_URIType + > { readonly name: string; readonly exceptionList: nsIUrlClassifierExceptionList; } @@ -14779,11 +15755,22 @@ declare global { } interface nsIUrlClassifierDBService extends nsISupports { - lookup(principal: nsIPrincipal, tables: string, c: nsIUrlClassifierCallback): void; + lookup( + principal: nsIPrincipal, + tables: string, + c: nsIUrlClassifierCallback + ): void; getTables(c: nsIUrlClassifierCallback): void; - setHashCompleter(tableName: string, completer: nsIUrlClassifierHashCompleter): void; + setHashCompleter( + tableName: string, + completer: nsIUrlClassifierHashCompleter + ): void; clearLastResults(): void; - beginUpdate(updater: nsIUrlClassifierUpdateObserver, tables: string, provider: string): void; + beginUpdate( + updater: nsIUrlClassifierUpdateObserver, + tables: string, + provider: string + ): void; beginStream(table: string): void; updateStream(updateChunk: string): void; finishStream(): void; @@ -14845,7 +15832,10 @@ declare global { }>; interface nsIUrlClassifierInfo extends nsISupports { - getCacheInfo(table: string, callback: nsIUrlClassifierGetCacheCallback): void; + getCacheInfo( + table: string, + callback: nsIUrlClassifierGetCacheCallback + ): void; } // https://searchfox.org/mozilla-central/source/toolkit/components/url-classifier/nsIUrlClassifierPrefixSet.idl @@ -14918,7 +15908,11 @@ declare global { aPrefixes: string[] ): string; makeFindFullHashRequestV5(aHashPrefixes: string[]): string; - makeThreatHitReport(aChannel: nsIChannel, aListName: string, aHashBase64: string): string; + makeThreatHitReport( + aChannel: nsIChannel, + aListName: string, + aHashBase64: string + ): string; parseFindFullHashResponseV4( aResponse: string, aCallback: nsIUrlClassifierParseFindFullHashCallback @@ -15104,7 +16098,11 @@ declare global { interface nsIWebBrowserPersistURIMap extends nsISupports { readonly numMappedURIs: u32; - getURIMapping(aIndex: u32, aMapFrom: OutParam, aMapTo: OutParam): void; + getURIMapping( + aIndex: u32, + aMapFrom: OutParam, + aMapTo: OutParam + ): void; readonly targetBaseURI: string; } @@ -15144,7 +16142,10 @@ declare global { aDocument: nsIWebBrowserPersistDocument, aSubDocument: nsIWebBrowserPersistDocument ): void; - visitBrowsingContext(aDocument: nsIWebBrowserPersistDocument, aContext: BrowsingContext): void; + visitBrowsingContext( + aDocument: nsIWebBrowserPersistDocument, + aContext: BrowsingContext + ): void; endVisit(aDocument: nsIWebBrowserPersistDocument, aStatus: nsresult): void; } @@ -15165,7 +16166,11 @@ declare global { // https://searchfox.org/mozilla-central/source/toolkit/components/extensions/extIWebNavigation.idl interface extIWebNavigation extends nsISupports { - onDocumentChange(bc: BrowsingContext, transitionData: any, location: nsIURI): void; + onDocumentChange( + bc: BrowsingContext, + transitionData: any, + location: nsIURI + ): void; onHistoryChange( bc: BrowsingContext, transitionData: any, @@ -15173,8 +16178,17 @@ declare global { isHistoryStateUpdated: boolean, isReferenceFragmentUpdated: boolean ): void; - onStateChange(bc: BrowsingContext, requestURI: nsIURI, status: nsresult, stateFlags: u32): void; - onCreatedNavigationTarget(bc: BrowsingContext, sourceBC: BrowsingContext, url: string): void; + onStateChange( + bc: BrowsingContext, + requestURI: nsIURI, + status: nsresult, + stateFlags: u32 + ): void; + onCreatedNavigationTarget( + bc: BrowsingContext, + sourceBC: BrowsingContext, + url: string + ): void; onDOMContentLoaded(bc: BrowsingContext, documentURI: nsIURI): void; } @@ -15205,7 +16219,8 @@ declare global { } interface mozIExtensionListenerCallOptions - extends nsISupports, + extends + nsISupports, Enums< typeof mozIExtensionListenerCallOptions_APIObjectType & typeof mozIExtensionListenerCallOptions_CallbackType @@ -15217,7 +16232,10 @@ declare global { } interface mozIExtensionEventListener extends nsISupports { - callListener(args: any[], listenerCallOptions?: mozIExtensionListenerCallOptions): Promise; + callListener( + args: any[], + listenerCallOptions?: mozIExtensionListenerCallOptions + ): Promise; } } // global @@ -15236,8 +16254,7 @@ declare global { } interface mozIExtensionAPIRequest - extends nsISupports, - Enums { + extends nsISupports, Enums { toString(): string; readonly requestType: string; readonly apiNamespace: string; @@ -15263,7 +16280,8 @@ declare global { } interface mozIExtensionAPIRequestResult - extends nsISupports, + extends + nsISupports, Enums { readonly type: mozIExtensionAPIRequestResult.ResultType; readonly value: any; @@ -15278,8 +16296,14 @@ declare global { extension: nsISupports, serviceWorkerInfo: mozIExtensionServiceWorkerInfo ): void; - onExtensionWorkerLoaded(extension: nsISupports, serviceWorkerDescriptorId: u64): void; - onExtensionWorkerDestroyed(extension: nsISupports, serviceWorkerDescriptorId: u64): void; + onExtensionWorkerLoaded( + extension: nsISupports, + serviceWorkerDescriptorId: u64 + ): void; + onExtensionWorkerDestroyed( + extension: nsISupports, + serviceWorkerDescriptorId: u64 + ): void; } // https://searchfox.org/mozilla-central/source/toolkit/components/extensions/mozIExtensionProcessScript.idl @@ -15290,7 +16314,11 @@ declare global { contentScript: WebExtensionContentScript, window: mozIDOMWindow ): Promise; - initExtensionDocument(extension: nsISupports, doc: Document, privileged: boolean): void; + initExtensionDocument( + extension: nsISupports, + doc: Document, + privileged: boolean + ): void; } // https://searchfox.org/mozilla-central/source/toolkit/components/extensions/nsINativeMessagingPortal.idl @@ -15300,7 +16328,11 @@ declare global { readonly available: Promise; createSession(aApplication: string): Promise; closeSession(aHandle: string): Promise; - getManifest(aHandle: string, aName: string, aExtension: string): Promise; + getManifest( + aHandle: string, + aName: string, + aExtension: string + ): Promise; start(aHandle: string, aName: string, aExtension: string): Promise; } @@ -15320,7 +16352,10 @@ declare global { flush(): void; watch(callback: nsIWebVTTListener): void; cancel(): void; - convertCueToDOMTree(window: mozIDOMWindow, cue: nsISupports): DocumentFragment; + convertCueToDOMTree( + window: mozIDOMWindow, + cue: nsISupports + ): DocumentFragment; processCues( window: mozIDOMWindow, cues: nsIVariant, @@ -15380,7 +16415,10 @@ declare global { interface nsIClipboardDataSnapshot extends nsISupports { readonly valid: boolean; readonly flavorList: string[]; - getData(aTransferable: nsITransferable, aCallback: nsIAsyncClipboardRequestCallback): void; + getData( + aTransferable: nsITransferable, + aCallback: nsIAsyncClipboardRequestCallback + ): void; getDataSync(aTransferable: nsITransferable): void; } @@ -15402,7 +16440,8 @@ declare global { type ClipboardType = nsIClipboard_ClipboardType; } - interface nsIClipboard extends nsISupports, Enums { + interface nsIClipboard + extends nsISupports, Enums { setData( aTransferable: nsITransferable, anOwner: nsIClipboardOwner, @@ -15436,7 +16475,9 @@ declare global { aFlavorList: string[], aWhichClipboard: nsIClipboard.ClipboardType ): boolean; - isClipboardTypeSupported(aWhichClipboard: nsIClipboard.ClipboardType): boolean; + isClipboardTypeSupported( + aWhichClipboard: nsIClipboard.ClipboardType + ): boolean; } // https://searchfox.org/mozilla-central/source/widget/nsIClipboardHelper.idl @@ -15452,7 +16493,8 @@ declare global { type SensitiveData = nsIClipboardHelper_SensitiveData; } - interface nsIClipboardHelper extends nsISupports, Enums { + interface nsIClipboardHelper + extends nsISupports, Enums { copyStringToClipboard( aString: string, aClipboardID: nsIClipboard.ClipboardType, @@ -15506,7 +16548,10 @@ declare global { readonly DRAGDROP_ACTION_UNINITIALIZED?: 64; getCurrentSession(aWidgetProvider?: nsISupports): nsIDragSession; - startDragSessionForTests(aWidgetProvider: nsISupports, aAllowedEffect: u32): void; + startDragSessionForTests( + aWidgetProvider: nsISupports, + aAllowedEffect: u32 + ): void; suppress(): void; unsuppress(): void; getMockDragController(): nsIMockDragServiceController; @@ -15574,7 +16619,8 @@ declare global { } interface nsIFilePicker - extends nsISupports, + extends + nsISupports, Enums< typeof nsIFilePicker_Mode & typeof nsIFilePicker_ResultCode & @@ -15592,7 +16638,11 @@ declare global { readonly filterVideo?: 512; readonly filterPDF?: 1024; - init(browsingContext: BrowsingContext, title: string, mode: nsIFilePicker.Mode): void; + init( + browsingContext: BrowsingContext, + title: string, + mode: nsIFilePicker.Mode + ): void; isModeSupported(mode: nsIFilePicker.Mode): Promise; appendFilters(filterMask: i32): void; appendFilter(title: string, filter: string): void; @@ -15663,11 +16713,13 @@ declare enum nsIGfxInfo_FontVisibilityDeviceDetermination { declare global { namespace nsIGfxInfo { - type FontVisibilityDeviceDetermination = nsIGfxInfo_FontVisibilityDeviceDetermination; + type FontVisibilityDeviceDetermination = + nsIGfxInfo_FontVisibilityDeviceDetermination; } interface nsIGfxInfo - extends nsISupports, + extends + nsISupports, Enums { readonly DWriteEnabled: boolean; readonly EmbeddedInFirefoxReality: boolean; @@ -15710,7 +16762,10 @@ declare global { getMonitors(): any; getFailures(indices: OutParam): string[]; getFeatureStatus(aFeature: i32, aFailureId?: OutParam): i32; - getFeatureStatusStr(aFeature: string, aFailureId?: OutParam): string; + getFeatureStatusStr( + aFeature: string, + aFailureId?: OutParam + ): string; getFeatureSuggestedDriverVersion(aFeature: i32): string; getFeatureSuggestedDriverVersionStr(aFeature: string): string; getInfo(): any; @@ -15729,8 +16784,17 @@ declare global { spoofDeviceID(aDeviceID: string): void; spoofDriverVersion(aDriverVersion: string): void; spoofOSVersion(aVersion: u32): void; - spoofOSVersionEx(aMajor: u32, aMinor: u32, aBuild: u32, aRevision: u32): void; - spoofMonitorInfo(aScreenCount: u32, aMinRefreshRate: i32, aMaxRefreshRate: i32): void; + spoofOSVersionEx( + aMajor: u32, + aMinor: u32, + aBuild: u32, + aRevision: u32 + ): void; + spoofMonitorInfo( + aScreenCount: u32, + aMinRefreshRate: i32, + aMaxRefreshRate: i32 + ): void; } // https://searchfox.org/mozilla-central/source/widget/nsIMockDragServiceController.idl @@ -15752,8 +16816,7 @@ declare global { } interface nsIMockDragServiceController - extends nsISupports, - Enums { + extends nsISupports, Enums { readonly mockDragService: nsIDragService; sendEvent( aBC: BrowsingContext, @@ -15793,7 +16856,10 @@ declare global { aHaveSelection: boolean, aPrintSettings: nsIPrintSettings ): void; - showPageSetupDialog(aParent: mozIDOMWindowProxy, aPrintSettings: nsIPrintSettings): void; + showPageSetupDialog( + aParent: mozIDOMWindowProxy, + aPrintSettings: nsIPrintSettings + ): void; } // https://searchfox.org/mozilla-central/source/widget/nsIPrintSettings.idl @@ -15811,8 +16877,7 @@ declare global { } interface nsIPrintSettings - extends nsISupports, - Enums { + extends nsISupports, Enums { readonly kInitSaveHeaderLeft?: 2; readonly kInitSaveHeaderCenter?: 4; readonly kInitSaveHeaderRight?: 8; @@ -15851,7 +16916,10 @@ declare global { readonly kDuplexFlipOnLongEdge?: 1; readonly kDuplexFlipOnShortEdge?: 2; - GetEffectivePageSize(aWidth: OutParam, aHeight: OutParam): void; + GetEffectivePageSize( + aWidth: OutParam, + aHeight: OutParam + ): void; clone(): nsIPrintSettings; assign(aPS: nsIPrintSettings): void; equivalentTo(aPrintSettings: nsIPrintSettings): boolean; @@ -15912,13 +16980,19 @@ declare global { interface nsIPrintSettingsService extends nsISupports { createNewPrintSettings(): nsIPrintSettings; readonly lastUsedPrinterName: string; - initPrintSettingsFromPrinter(aPrinterName: string, aPrintSettings: nsIPrintSettings): void; + initPrintSettingsFromPrinter( + aPrinterName: string, + aPrintSettings: nsIPrintSettings + ): void; initPrintSettingsFromPrefs( aPrintSettings: nsIPrintSettings, aUsePrinterNamePrefix: boolean, aFlags: u32 ): void; - maybeSavePrintSettingsToPrefs(aPrintSettings: nsIPrintSettings, aFlags: u32): void; + maybeSavePrintSettingsToPrefs( + aPrintSettings: nsIPrintSettings, + aFlags: u32 + ): void; maybeSaveLastUsedPrinterNameToPrefs(aPrinterName: string): void; } @@ -15943,7 +17017,10 @@ declare global { // https://searchfox.org/mozilla-central/source/widget/nsIPrinterList.idl interface nsIPrinterList extends nsISupports { - initPrintSettingsFromPrinter(aPrinterName: string, aPrintSettings: nsIPrintSettings): void; + initPrintSettingsFromPrinter( + aPrinterName: string, + aPrintSettings: nsIPrintSettings + ): void; readonly systemDefaultPrinterName: string; getPrinterByName(aPrinterName: string): Promise; getPrinterBySystemName(aPrinterName: string): Promise; @@ -16043,7 +17120,10 @@ declare global { init(aContext: nsILoadContext): void; flavorsTransferableCanExport(): string[]; getTransferData(aFlavor: string, aData: OutParam): void; - getAnyTransferData(aFlavor: OutParam, aData: OutParam): void; + getAnyTransferData( + aFlavor: OutParam, + aData: OutParam + ): void; flavorsTransferableCanImport(): string[]; setTransferData(aFlavor: string, aData: nsISupports): void; clearAllData(): void; @@ -16113,13 +17193,19 @@ declare global { interface nsIPromptCollection extends nsISupports { asyncBeforeUnloadCheck(aBrowsingContext: BrowsingContext): Promise; confirmRepost(aBrowsingContext: BrowsingContext): boolean; - confirmFolderUpload(aBrowsingContext: BrowsingContext, aDirectoryName: string): boolean; + confirmFolderUpload( + aBrowsingContext: BrowsingContext, + aDirectoryName: string + ): boolean; } // https://searchfox.org/mozilla-central/source/toolkit/components/windowwatcher/nsIPromptFactory.idl interface nsIPromptFactory extends nsISupports { - getPrompt(aParent: mozIDOMWindowProxy, iid: T): nsQIResult; + getPrompt( + aParent: mozIDOMWindowProxy, + iid: T + ): nsQIResult; } // https://searchfox.org/mozilla-central/source/toolkit/components/windowwatcher/nsIPromptService.idl @@ -16151,7 +17237,11 @@ declare global { readonly MODAL_TYPE_WINDOW?: 3; readonly MODAL_TYPE_INTERNAL_WINDOW?: 4; - alert(aParent: mozIDOMWindowProxy, aDialogTitle: string, aText: string): void; + alert( + aParent: mozIDOMWindowProxy, + aDialogTitle: string, + aText: string + ): void; alertBC( aBrowsingContext: BrowsingContext, modalType: u32, @@ -16187,7 +17277,11 @@ declare global { aCheckMsg: string, aCheckState: boolean ): Promise; - confirm(aParent: mozIDOMWindowProxy, aDialogTitle: string, aText: string): boolean; + confirm( + aParent: mozIDOMWindowProxy, + aDialogTitle: string, + aText: string + ): boolean; confirmBC( aBrowsingContext: BrowsingContext, modalType: u32, @@ -16443,9 +17537,13 @@ declare global { type OutputMode = nsIConsoleService_OutputMode; } - interface nsIConsoleService extends nsISupports, Enums { + interface nsIConsoleService + extends nsISupports, Enums { logMessage(message: nsIConsoleMessage): void; - logMessageWithMode(message: nsIConsoleMessage, mode: nsIConsoleService.OutputMode): void; + logMessageWithMode( + message: nsIConsoleMessage, + mode: nsIConsoleService.OutputMode + ): void; logStringMessage(message: string): void; getMessageArray(): nsIConsoleMessage[]; registerListener(listener: nsIConsoleListener): void; @@ -16457,7 +17555,11 @@ declare global { // https://searchfox.org/mozilla-central/source/xpcom/base/nsICycleCollectorListener.idl interface nsICycleCollectorHandler extends nsISupports { - noteRefCountedObject(aAddress: string, aRefCount: u32, aObjectDescription: string): void; + noteRefCountedObject( + aAddress: string, + aRefCount: u32, + aObjectDescription: string + ): void; noteGCedObject( aAddress: string, aMarked: boolean, @@ -16556,7 +17658,10 @@ declare global { aDumpChildProcesses: boolean, aCallback: nsIDumpGCAndCCLogsCallback ): void; - dumpGCAndCCLogsToSink(aDumpAllTraces: boolean, aSink: nsICycleCollectorLogSink): void; + dumpGCAndCCLogsToSink( + aDumpAllTraces: boolean, + aSink: nsICycleCollectorLogSink + ): void; } // https://searchfox.org/mozilla-central/source/xpcom/base/nsIMemoryReporter.idl @@ -16582,7 +17687,11 @@ declare global { readonly UNITS_COUNT_CUMULATIVE?: 2; readonly UNITS_PERCENTAGE?: 3; - collectReports(callback: nsIHandleReportCallback, data: nsISupports, anonymize: boolean): void; + collectReports( + callback: nsIHandleReportCallback, + data: nsISupports, + anonymize: boolean + ): void; } type nsIFinishReportingCallback = Callable<{ @@ -16705,7 +17814,11 @@ declare global { aPersist: boolean, aReplace: boolean ): string; - deleteCategoryEntry(aCategory: string, aEntry: string, aPersist: boolean): void; + deleteCategoryEntry( + aCategory: string, + aEntry: string, + aPersist: boolean + ): void; deleteCategory(aCategory: string): void; enumerateCategory(aCategory: string): nsISimpleEnumerator; enumerateCategories(): nsISimpleEnumerator; @@ -16730,7 +17843,10 @@ declare global { interface nsIComponentManager extends nsISupports { getClassObject(aClass: nsID, aIID: T): nsQIResult; - getClassObjectByContractID(aContractID: string, aIID: T): nsQIResult; + getClassObjectByContractID( + aContractID: string, + aIID: T + ): nsQIResult; getManifestLocations(): nsIArray; getComponentESModules(): nsIUTF8StringEnumerator; } @@ -16762,7 +17878,10 @@ declare global { interface nsIServiceManager extends nsISupports { getService(aClass: nsID, aIID: T): nsQIResult; - getServiceByContractID(aContractID: string, aIID: T): nsQIResult; + getServiceByContractID( + aContractID: string, + aIID: T + ): nsQIResult; isServiceInstantiated(aClass: nsID, aIID: nsID): boolean; isServiceInstantiatedByContractID(aContractID: string, aIID: nsID): boolean; } @@ -16822,9 +17941,17 @@ declare global { // https://searchfox.org/mozilla-central/source/xpcom/ds/nsIObserverService.idl interface nsIObserverService extends nsISupports { - addObserver(anObserver: nsIObserver, aTopic: string, ownsWeak?: boolean): void; + addObserver( + anObserver: nsIObserver, + aTopic: string, + ownsWeak?: boolean + ): void; removeObserver(anObserver: nsIObserver, aTopic: string): void; - notifyObservers(aSubject: nsISupports, aTopic: string, someData?: string): void; + notifyObservers( + aSubject: nsISupports, + aTopic: string, + someData?: string + ): void; enumerateObservers(aTopic: string): nsISimpleEnumerator; } @@ -16879,7 +18006,10 @@ declare global { getPropertyAsACString(prop: string): string; getPropertyAsAUTF8String(prop: string): string; getPropertyAsBool(prop: string): boolean; - getPropertyAsInterface(prop: string, iid: T): nsQIResult; + getPropertyAsInterface( + prop: string, + iid: T + ): nsQIResult; get(prop: string): nsIVariant; hasKey(prop: string): boolean; } @@ -17217,7 +18347,12 @@ declare global { readonly DEFAULT_REPLACEMENT_CHARACTER?: 65533; readonly ERRORS_ARE_FATAL?: 0; - init(aStream: nsIInputStream, aCharset: string, aBufferSize: i32, aReplacementChar: u16): void; + init( + aStream: nsIInputStream, + aCharset: string, + aBufferSize: i32, + aReplacementChar: u16 + ): void; } // https://searchfox.org/mozilla-central/source/xpcom/io/nsIConverterOutputStream.idl @@ -17376,7 +18511,11 @@ declare global { interface nsIObjectOutputStream extends nsIBinaryOutputStream { writeObject(aObject: nsISupports, aIsStrongRef: boolean): void; writeSingleRefObject(aObject: nsISupports): void; - writeCompoundObject(aObject: nsISupports, aIID: nsID, aIsStrongRef: boolean): void; + writeCompoundObject( + aObject: nsISupports, + aIID: nsID, + aIsStrongRef: boolean + ): void; writeID(aID: nsID): void; } @@ -17698,7 +18837,8 @@ declare global { } interface nsIXULRuntime - extends nsISupports, + extends + nsISupports, Enums< typeof nsIXULRuntime_ExperimentStatus & typeof nsIXULRuntime_ContentWin32kLockdownState & @@ -17786,7 +18926,8 @@ declare global { type DispatchFlags = nsIEventTarget_DispatchFlags; } - interface nsIEventTarget extends nsISupports, Enums { + interface nsIEventTarget + extends nsISupports, Enums { isOnCurrentThread(): boolean; dispatch(event: nsIRunnable, flags: nsIEventTarget.DispatchFlags): void; } @@ -17805,9 +18946,19 @@ declare global { init(executable: nsIFile): void; kill(): void; run(blocking: boolean, args: string[], count: u32): void; - runAsync(args: string[], count: u32, observer?: nsIObserver, holdWeak?: boolean): void; + runAsync( + args: string[], + count: u32, + observer?: nsIObserver, + holdWeak?: boolean + ): void; runw(blocking: boolean, args: string[], count: u32): void; - runwAsync(args: string[], count: u32, observer?: nsIObserver, holdWeak?: boolean): void; + runwAsync( + args: string[], + count: u32, + observer?: nsIObserver, + holdWeak?: boolean + ): void; startHidden: boolean; noShell: boolean; readonly pid: u32; @@ -17865,7 +19016,8 @@ declare global { type QoSPriority = nsIThread_QoSPriority; } - interface nsIThread extends nsISerialEventTarget, Enums { + interface nsIThread + extends nsISerialEventTarget, Enums { shutdown(): void; hasPendingEvents(): boolean; hasPendingHighPriorityEvents(): boolean; @@ -17926,7 +19078,11 @@ declare global { readonly TYPE_ONE_SHOT_LOW_PRIORITY?: 5; init(aObserver: nsIObserver, aDelayInMs: u32, aType: u32): void; - initWithCallback(aCallback: nsITimerCallback, aDelayInMs: u32, aType: u32): void; + initWithCallback( + aCallback: nsITimerCallback, + aDelayInMs: u32, + aType: u32 + ): void; cancel(): void; delay: u32; type: u32; @@ -18014,7 +19170,11 @@ declare global { intentionallyLeak(): void; getJSTestingFunctions(): any; getFunctionSourceLocation(func: any): any; - callFunctionWithAsyncStack(func: any, stack: nsIStackFrame, asyncCause: string): any; + callFunctionWithAsyncStack( + func: any, + stack: nsIStackFrame, + asyncCause: string + ): any; getGlobalForObject(obj: any): any; isProxy(vobject: any): boolean; exportFunction(vfunction: any, vscope: any, voptions?: any): any; @@ -18048,7 +19208,11 @@ declare global { readUTF8File(file: nsIFile): string; readUTF8URI(url: nsIURI): string; createSpellChecker(): nsIEditorSpellCheck; - createCommandLine(args: string[], workingDir: nsIFile, state: u32): nsISupports; + createCommandLine( + args: string[], + workingDir: nsIFile, + state: u32 + ): nsISupports; createCommandParams(): nsICommandParams; createLoadContext(): nsILoadContext; createPrivateLoadContext(): nsILoadContext; @@ -18099,11 +19263,25 @@ declare global { interface nsIXPCTestBug809674 extends nsISupports { addArgs(x: u32, y: u32): u32; - addSubMulArgs(x: u32, y: u32, subOut: OutParam, mulOut: OutParam): u32; + addSubMulArgs( + x: u32, + y: u32, + subOut: OutParam, + mulOut: OutParam + ): u32; addVals(x: any, y: any): any; methodNoArgs(): u32; methodNoArgsNoRetVal(): void; - addMany(x1: u32, x2: u32, x3: u32, x4: u32, x5: u32, x6: u32, x7: u32, x8: u32): u32; + addMany( + x1: u32, + x2: u32, + x3: u32, + x4: u32, + x5: u32, + x6: u32, + x7: u32, + x8: u32 + ): u32; valProperty: any; uintProperty: u32; methodWithOptionalArgc(): void; @@ -18138,8 +19316,12 @@ declare global { } interface nsIXPCTestCEnums - extends nsISupports, - Enums { + extends + nsISupports, + Enums< + typeof nsIXPCTestCEnums_testFlagsExplicit & + typeof nsIXPCTestCEnums_testFlagsImplicit + > { readonly testConst?: 1; testCEnumInput(abc: nsIXPCTestCEnums.testFlagsExplicit): void; @@ -18251,7 +19433,10 @@ declare global { ): any[]; testOutAString(o: OutParam): void; testStringArrayOptionalSize(a: string[], aLength?: u32): string; - testOmittedOptionalOut(aJSObj: nsIXPCTestParams, aOut?: OutParam): void; + testOmittedOptionalOut( + aJSObj: nsIXPCTestParams, + aOut?: OutParam + ): void; readonly testNaN: double; } @@ -18277,7 +19462,9 @@ declare global { }>; interface nsIXPCTestUtils extends nsISupports { - doubleWrapFunction(f: nsIXPCTestFunctionInterface): nsIXPCTestFunctionInterface; + doubleWrapFunction( + f: nsIXPCTestFunctionInterface + ): nsIXPCTestFunctionInterface; } interface nsIXPCTestTypeScript extends nsISupports { @@ -18305,8 +19492,14 @@ declare global { } interface nsICommandController extends nsISupports { - getCommandStateWithParams(command: string, aCommandParams: nsICommandParams): void; - doCommandWithParams(command: string, aCommandParams: nsICommandParams): void; + getCommandStateWithParams( + command: string, + aCommandParams: nsICommandParams + ): void; + doCommandWithParams( + command: string, + aCommandParams: nsICommandParams + ): void; getSupportedCommands(): string[]; } @@ -18354,8 +19547,17 @@ declare global { open(aFile: nsIFile, aIoFlags: i32): void; getEntry(aZipEntry: string): nsIZipEntry; hasEntry(aZipEntry: string): boolean; - addEntryDirectory(aZipEntry: string, aModTime: PRTime, aQueue: boolean): void; - addEntryFile(aZipEntry: string, aCompression: i32, aFile: nsIFile, aQueue: boolean): void; + addEntryDirectory( + aZipEntry: string, + aModTime: PRTime, + aQueue: boolean + ): void; + addEntryFile( + aZipEntry: string, + aCompression: i32, + aFile: nsIFile, + aQueue: boolean + ): void; addEntryChannel( aZipEntry: string, aModTime: PRTime, @@ -18424,7 +19626,10 @@ declare global { nsIWindowMediatorListener: nsJSIID; nsIWindowlessBrowser: nsJSIID; nsIXULBrowserWindow: nsJSIID; - nsIAppStartup: nsJSIID; + nsIAppStartup: nsJSIID< + nsIAppStartup, + typeof nsIAppStartup_IDLShutdownPhase + >; nsIAutoCompleteController: nsJSIID; nsIAutoCompleteInput: nsJSIID; nsIAutoCompletePopup: nsJSIID; @@ -18474,7 +19679,8 @@ declare global { nsIDocumentLoaderFactory: nsJSIID; nsIDocumentViewer: nsJSIID< nsIDocumentViewer, - typeof nsIDocumentViewer_PermitUnloadAction & typeof nsIDocumentViewer_PermitUnloadResult + typeof nsIDocumentViewer_PermitUnloadAction & + typeof nsIDocumentViewer_PermitUnloadResult >; nsIDocumentViewerEdit: nsJSIID; nsILoadContext: nsJSIID; @@ -18491,7 +19697,10 @@ declare global { nsIWebPageDescriptor: nsJSIID; mozIDOMWindow: nsJSIID; mozIDOMWindowProxy: nsJSIID; - nsIContentPolicy: nsJSIID; + nsIContentPolicy: nsJSIID< + nsIContentPolicy, + typeof nsIContentPolicy_nsContentPolicyType + >; nsIDroppedLinkItem: nsJSIID; nsIDroppedLinkHandler: nsJSIID; nsIEventSourceEventListener: nsJSIID; @@ -18536,7 +19745,10 @@ declare global { nsIDOMGlobalPropertyInitializer: nsJSIID; nsIDOMWindow: nsJSIID; nsISynthesizedEventCallback: nsJSIID; - nsIDOMWindowUtils: nsJSIID; + nsIDOMWindowUtils: nsJSIID< + nsIDOMWindowUtils, + typeof nsIDOMWindowUtils_AsyncEnabledOption + >; nsITranslationNodeList: nsJSIID; nsIJSRAIIHelper: nsJSIID; nsIFocusManager: nsJSIID; @@ -18637,7 +19849,10 @@ declare global { nsICSPEventListener: nsJSIID; nsIIntegrityPolicy: nsJSIID; nsIPolicyContainer: nsJSIID; - nsIReferrerInfo: nsJSIID; + nsIReferrerInfo: nsJSIID< + nsIReferrerInfo, + typeof nsIReferrerInfo_ReferrerPolicyIDL + >; nsIHttpsOnlyModePermission: nsJSIID; nsIDocumentEncoderNodeFixup: nsJSIID; nsIDocumentEncoder: nsJSIID; @@ -18744,11 +19959,15 @@ declare global { nsIZipReaderCache: nsJSIID; IJSDebugger: nsJSIID; nsIJSInspector: nsJSIID; - nsIKeyValueService: nsJSIID; + nsIKeyValueService: nsJSIID< + nsIKeyValueService, + typeof nsIKeyValueService_RecoveryStrategy + >; nsIKeyValueImportSourceSpec: nsJSIID; nsIKeyValueImporter: nsJSIID< nsIKeyValueImporter, - typeof nsIKeyValueImporter_ConflictPolicy & typeof nsIKeyValueImporter_CleanupPolicy + typeof nsIKeyValueImporter_ConflictPolicy & + typeof nsIKeyValueImporter_CleanupPolicy >; nsIKeyValueDatabaseImportOptions: nsJSIID; nsIKeyValueDatabase: nsJSIID; @@ -18822,7 +20041,10 @@ declare global { nsIIdentChannel: nsJSIID; nsIChannelEventSink: nsJSIID; nsIChildChannel: nsJSIID; - nsIClassOfService: nsJSIID; + nsIClassOfService: nsJSIID< + nsIClassOfService, + typeof nsIClassOfService_FetchPriority + >; nsIClassifiedChannel: nsJSIID< nsIClassifiedChannel, typeof nsIClassifiedChannel_ClassificationFlags @@ -18945,7 +20167,10 @@ declare global { nsIInputChannelThrottleQueue: nsJSIID; nsIThrottledInputChannel: nsJSIID; nsIServerTiming: nsJSIID; - nsITimedChannel: nsJSIID; + nsITimedChannel: nsJSIID< + nsITimedChannel, + typeof nsITimedChannel_BodyInfoAccess + >; nsITraceableChannel: nsJSIID; nsITransport: nsJSIID; nsITransportEventSink: nsJSIID; @@ -18977,11 +20202,17 @@ declare global { nsICookie: nsJSIID; nsICookieJarSettings: nsJSIID; nsICookieManager: nsJSIID; - nsICookieNotification: nsJSIID; + nsICookieNotification: nsJSIID< + nsICookieNotification, + typeof nsICookieNotification_Action + >; nsICookiePermission: nsJSIID; nsICookieTransactionCallback: nsJSIID; nsICookieService: nsJSIID; - nsICookieValidation: nsJSIID; + nsICookieValidation: nsJSIID< + nsICookieValidation, + typeof nsICookieValidation_ValidationError + >; nsIThirdPartyCookieBlockingExceptionListService: nsJSIID; nsIThirdPartyCookieExceptionEntry: nsJSIID; nsIDNSAdditionalInfo: nsJSIID; @@ -19061,7 +20292,8 @@ declare global { nsIWebSocketListener: nsJSIID; nsIWebTransport: nsJSIID< nsIWebTransport, - typeof nsIWebTransport_WebTransportError & typeof nsIWebTransport_HTTPVersion + typeof nsIWebTransport_WebTransportError & + typeof nsIWebTransport_HTTPVersion >; WebTransportSessionEventListener: nsJSIID< WebTransportSessionEventListener, @@ -19102,7 +20334,10 @@ declare global { >; nsIContentSignatureVerifier: nsJSIID; nsICryptoHash: nsJSIID; - nsIDataStorageManager: nsJSIID; + nsIDataStorageManager: nsJSIID< + nsIDataStorageManager, + typeof nsIDataStorageManager_DataStorage + >; nsIDataStorage: nsJSIID; nsIDataStorageItem: nsJSIID; nsINSSComponent: nsJSIID; @@ -19150,7 +20385,8 @@ declare global { mozIAsyncHistory: nsJSIID; mozIPlacesAutoComplete: nsJSIID< mozIPlacesAutoComplete, - typeof mozIPlacesAutoComplete_MatchBehaviors & typeof mozIPlacesAutoComplete_SearchBehaviors + typeof mozIPlacesAutoComplete_MatchBehaviors & + typeof mozIPlacesAutoComplete_SearchBehaviors >; mozIPlacesPendingOperation: nsJSIID; mozISyncedBookmarksMirrorProgressListener: nsJSIID; @@ -19164,7 +20400,8 @@ declare global { nsIFavicon: nsJSIID; nsINavBookmarksService: nsJSIID< nsINavBookmarksService, - typeof nsINavBookmarksService_BookmarkType & typeof nsINavBookmarksService_ChangeSource + typeof nsINavBookmarksService_BookmarkType & + typeof nsINavBookmarksService_ChangeSource >; nsINavHistoryResultNode: nsJSIID< nsINavHistoryResultNode, @@ -19177,9 +20414,13 @@ declare global { nsINavHistoryQuery: nsJSIID; nsINavHistoryQueryOptions: nsJSIID< nsINavHistoryQueryOptions, - typeof nsINavHistoryQueryOptions_SortByType & typeof nsINavHistoryQueryOptions_ResultType + typeof nsINavHistoryQueryOptions_SortByType & + typeof nsINavHistoryQueryOptions_ResultType + >; + nsINavHistoryService: nsJSIID< + nsINavHistoryService, + typeof nsINavHistoryService_TransitionType >; - nsINavHistoryService: nsJSIID; nsIPlacesPreviewsHelperService: nsJSIID; nsITaggingService: nsJSIID; nsIPrefBranch: nsJSIID; @@ -19278,7 +20519,8 @@ declare global { nsIContentAnalysisResult: nsJSIID; nsIContentAnalysisResponse: nsJSIID< nsIContentAnalysisResponse, - typeof nsIContentAnalysisResponse_Action & typeof nsIContentAnalysisResponse_CancelError + typeof nsIContentAnalysisResponse_Action & + typeof nsIContentAnalysisResponse_CancelError >; nsIClientDownloadResource: nsJSIID; nsIContentAnalysisRequest: nsJSIID< @@ -19293,7 +20535,10 @@ declare global { nsIClickRule: nsJSIID; nsICookieBannerListService: nsJSIID; nsICookieBannerRule: nsJSIID; - nsICookieBannerService: nsJSIID; + nsICookieBannerService: nsJSIID< + nsICookieBannerService, + typeof nsICookieBannerService_Modes + >; nsICookieBannerTelemetryService: nsJSIID; nsICookieRule: nsJSIID; nsICrashService: nsJSIID; @@ -19374,7 +20619,8 @@ declare global { nsIUrlClassifierExceptionListService: nsJSIID; nsIUrlClassifierFeature: nsJSIID< nsIUrlClassifierFeature, - typeof nsIUrlClassifierFeature_listType & typeof nsIUrlClassifierFeature_URIType + typeof nsIUrlClassifierFeature_listType & + typeof nsIUrlClassifierFeature_URIType >; nsIUrlClassifierFeatureResult: nsJSIID; nsIUrlClassifierFeatureCallback: nsJSIID; @@ -19436,7 +20682,10 @@ declare global { nsIClipboardDataSnapshot: nsJSIID; nsIClipboardGetDataSnapshotCallback: nsJSIID; nsIClipboard: nsJSIID; - nsIClipboardHelper: nsJSIID; + nsIClipboardHelper: nsJSIID< + nsIClipboardHelper, + typeof nsIClipboardHelper_SensitiveData + >; nsIClipboardOwner: nsJSIID; nsIColorPickerShownCallback: nsJSIID; nsIColorPicker: nsJSIID; @@ -19451,7 +20700,10 @@ declare global { >; nsIFilePickerShownCallback: nsJSIID; nsIFormatConverter: nsJSIID; - nsIGfxInfo: nsJSIID; + nsIGfxInfo: nsJSIID< + nsIGfxInfo, + typeof nsIGfxInfo_FontVisibilityDeviceDetermination + >; nsIGfxInfoDebug: nsJSIID; nsIMockDragServiceController: nsJSIID< nsIMockDragServiceController, @@ -19460,7 +20712,10 @@ declare global { nsIPaper: nsJSIID; nsIPaperMargin: nsJSIID; nsIPrintDialogService: nsJSIID; - nsIPrintSettings: nsJSIID; + nsIPrintSettings: nsJSIID< + nsIPrintSettings, + typeof nsIPrintSettings_OutputDestinationType + >; nsIPrintSettingsService: nsJSIID; nsIPrinterInfo: nsJSIID; nsIPrinter: nsJSIID; @@ -19486,7 +20741,10 @@ declare global { nsIAvailableMemoryWatcherBase: nsJSIID; nsIConsoleListener: nsJSIID; nsIConsoleMessage: nsJSIID; - nsIConsoleService: nsJSIID; + nsIConsoleService: nsJSIID< + nsIConsoleService, + typeof nsIConsoleService_OutputMode + >; nsICycleCollectorHandler: nsJSIID; nsICycleCollectorLogSink: nsJSIID; nsICycleCollectorListener: nsJSIID; @@ -19620,7 +20878,10 @@ declare global { typeof nsIXULRuntime_FissionDecisionStatus >; nsIEnvironment: nsJSIID; - nsIEventTarget: nsJSIID; + nsIEventTarget: nsJSIID< + nsIEventTarget, + typeof nsIEventTarget_DispatchFlags + >; nsINamed: nsJSIID; nsIProcess: nsJSIID; nsIRunnable: nsJSIID; @@ -19652,7 +20913,8 @@ declare global { nsIXPCTestBug809674: nsJSIID; nsIXPCTestCEnums: nsJSIID< nsIXPCTestCEnums, - typeof nsIXPCTestCEnums_testFlagsExplicit & typeof nsIXPCTestCEnums_testFlagsImplicit + typeof nsIXPCTestCEnums_testFlagsExplicit & + typeof nsIXPCTestCEnums_testFlagsImplicit >; nsIXPCTestInterfaceA: nsJSIID; nsIXPCTestInterfaceB: nsJSIID; diff --git a/src/zen/@types/zen.d.ts b/src/zen/@types/zen.d.ts index e677a5e55..2a063614b 100644 --- a/src/zen/@types/zen.d.ts +++ b/src/zen/@types/zen.d.ts @@ -88,7 +88,9 @@ declare namespace MockedExports { * * Then add the file path to the KnownModules above. */ - importESModule: (module: S) => KnownModules[S]; + importESModule: ( + module: S + ) => KnownModules[S]; defineESModuleGetters: (target: any, mappings: any) => void; } @@ -160,7 +162,11 @@ declare namespace MockedExports { setIntPref: SetPref; getBoolPref: GetPref; setBoolPref: SetPref; - addObserver: (aDomain: string, aObserver: PrefObserver, aHoldWeak?: boolean) => void; + addObserver: ( + aDomain: string, + aObserver: PrefObserver, + aHoldWeak?: boolean + ) => void; removeObserver: (aDomain: string, aObserver: PrefObserver) => void; }; @@ -299,7 +305,11 @@ declare namespace MockedExports { class nsIFilePicker {} interface FilePicker { - init: (browsingContext: BrowsingContext, title: string, mode: number) => void; + init: ( + browsingContext: BrowsingContext, + title: string, + mode: number + ) => void; open: (callback: (rv: number) => unknown) => void; // The following are enum values. modeGetFolder: number; @@ -330,7 +340,11 @@ declare namespace MockedExports { * This function sets the attributes data-l10n-id and possibly data-l10n-args * on the element. */ - setAttributes(target: Element, id?: string, args?: Record): void; + setAttributes( + target: Element, + id?: string, + args?: Record + ): void; } } @@ -365,7 +379,8 @@ declare interface ChromeDocument extends Document { * Create a XUL element of a specific type. Right now this function * only refines iframes, but more tags could be added. */ - createXULElement: ((type: "iframe") => XULIframeElement) & ((type: string) => XULElement); + createXULElement: ((type: "iframe") => XULIframeElement) & + ((type: string) => XULElement); /** * This is a fluent instance connected to this document. @@ -406,7 +421,9 @@ declare interface Window { userContextId: number; forceNonPrivate: boolean; relatedToCurrent: boolean; - resolveOnContentBrowserCreated: (contentBrowser: MockedExports.ChromeBrowser) => unknown; + resolveOnContentBrowserCreated: ( + contentBrowser: MockedExports.ChromeBrowser + ) => unknown; }> ) => void; openTrustedLinkIn: ( @@ -417,7 +434,9 @@ declare interface Window { userContextId: number; forceNonPrivate: boolean; relatedToCurrent: boolean; - resolveOnContentBrowserCreated: (contentBrowser: MockedExports.ChromeBrowser) => unknown; + resolveOnContentBrowserCreated: ( + contentBrowser: MockedExports.ChromeBrowser + ) => unknown; }> ) => void; } diff --git a/src/zen/common/emojis/ZenEmojiPicker.mjs b/src/zen/common/emojis/ZenEmojiPicker.mjs index c734f91a0..cf651e23c 100644 --- a/src/zen/common/emojis/ZenEmojiPicker.mjs +++ b/src/zen/common/emojis/ZenEmojiPicker.mjs @@ -63,7 +63,9 @@ class nsZenEmojiPicker extends nsZenDOMOperatedFeature { case "command": if (event.target.id === "PanelUI-zen-emojis-picker-none") { this.#selectEmoji(null); - } else if (event.target.id === "PanelUI-zen-emojis-picker-change-emojis") { + } else if ( + event.target.id === "PanelUI-zen-emojis-picker-change-emojis" + ) { this.#changePage(false); } else if (event.target.id === "PanelUI-zen-emojis-picker-change-svg") { this.#changePage(true); @@ -104,7 +106,9 @@ class nsZenEmojiPicker extends nsZenDOMOperatedFeature { #changePage(toSvg = false) { const itemToScroll = toSvg ? this.svgList - : document.getElementById("PanelUI-zen-emojis-picker-pages").querySelector('[emojis="true"]'); + : document + .getElementById("PanelUI-zen-emojis-picker-pages") + .querySelector('[emojis="true"]'); itemToScroll.scrollIntoView({ behavior: "smooth", block: "nearest", @@ -137,15 +141,19 @@ class nsZenEmojiPicker extends nsZenDOMOperatedFeature { const value = input.value.trim().toLowerCase(); // search for emojis.tags and order by emojis.order const filteredEmojis = this.#emojis - .filter((emoji) => { - return emoji.tags.some((tag) => tag.toLowerCase().includes(value)); + .filter(emoji => { + return emoji.tags.some(tag => tag.toLowerCase().includes(value)); }) .sort((a, b) => a.order - b.order); for (const button of this.emojiList.children) { const buttonEmoji = button.getAttribute("label"); - const emojiObject = filteredEmojis.find((emoji) => emoji.emoji === buttonEmoji); + const emojiObject = filteredEmojis.find( + emoji => emoji.emoji === buttonEmoji + ); if (emojiObject) { - button.hidden = !emojiObject.tags.some((tag) => tag.toLowerCase().includes(value)); + button.hidden = !emojiObject.tags.some(tag => + tag.toLowerCase().includes(value) + ); button.style.order = emojiObject.order; } else { button.hidden = true; @@ -205,7 +213,9 @@ class nsZenEmojiPicker extends nsZenDOMOperatedFeature { this.svgList.innerHTML = ""; if (!this.#hasSelection) { - this.#currentPromiseReject?.(new Error("Emoji picker closed without selection")); + this.#currentPromiseReject?.( + new Error("Emoji picker closed without selection") + ); } else if (!this.#closeOnSelect) { this.#currentPromiseResolve?.(this.#lastSelectedEmoji); } diff --git a/src/zen/common/modules/ZenCommonUtils.mjs b/src/zen/common/modules/ZenCommonUtils.mjs index f4e7b8867..6376c9618 100644 --- a/src/zen/common/modules/ZenCommonUtils.mjs +++ b/src/zen/common/modules/ZenCommonUtils.mjs @@ -78,7 +78,9 @@ export class nsZenDOMOperatedFeature { export class nsZenPreloadedFeature { constructor() { var initBound = this.init.bind(this); - document.addEventListener("MozBeforeInitialXULLayout", initBound, { once: true }); + document.addEventListener("MozBeforeInitialXULLayout", initBound, { + once: true, + }); } } @@ -92,7 +94,7 @@ window.gZenCommonActions = { if (Services.zen.canShare() && displaySpec.startsWith("http")) { button = { id: "zen-copy-current-url-button", - command: (event) => { + command: event => { const buttonRect = event.target.getBoundingClientRect(); /* eslint-disable mozilla/valid-services */ Services.zen.share( @@ -107,7 +109,10 @@ window.gZenCommonActions = { }, }; } - gZenUIManager.showToast("zen-copy-current-url-confirmation", { button, timeout: 3000 }); + gZenUIManager.showToast("zen-copy-current-url-confirmation", { + button, + timeout: 3000, + }); }, copyCurrentURLAsMarkdownToClipboard() { @@ -115,7 +120,9 @@ window.gZenCommonActions = { const tabTitle = gBrowser.selectedTab.label; const markdownLink = `[${tabTitle}](${currentUrl.displaySpec})`; ClipboardHelper.copyString(markdownLink); - gZenUIManager.showToast("zen-copy-current-url-as-markdown-confirmation", { timeout: 3000 }); + gZenUIManager.showToast("zen-copy-current-url-as-markdown-confirmation", { + timeout: 3000, + }); }, throttle(f, delay) { @@ -134,10 +141,17 @@ window.gZenCommonActions = { * @returns {boolean} True if the tab should be closed on back */ shouldCloseTabOnBack() { - if (!Services.prefs.getBoolPref("zen.tabs.close-on-back-with-no-history", true)) { + if ( + !Services.prefs.getBoolPref( + "zen.tabs.close-on-back-with-no-history", + true + ) + ) { return false; } const tab = gBrowser.selectedTab; - return Boolean(tab.owner && !tab.pinned && !tab.hasAttribute("zen-empty-tab")); + return Boolean( + tab.owner && !tab.pinned && !tab.hasAttribute("zen-empty-tab") + ); }, }; diff --git a/src/zen/common/modules/ZenHasPolyfill.mjs b/src/zen/common/modules/ZenHasPolyfill.mjs index 9b4e2c3dd..986559d7f 100644 --- a/src/zen/common/modules/ZenHasPolyfill.mjs +++ b/src/zen/common/modules/ZenHasPolyfill.mjs @@ -14,7 +14,12 @@ class nsHasPolyfill { * @param {string} stateAttribute * @param {Array} attributeFilter */ - observeSelectorExistence(element, descendantSelectors, stateAttribute, attributeFilter = []) { + observeSelectorExistence( + element, + descendantSelectors, + stateAttribute, + attributeFilter = [] + ) { const updateState = () => { const exists = descendantSelectors.some(({ selector }) => { let selected = element.querySelector(selector); @@ -26,10 +31,18 @@ class nsHasPolyfill { const { exists: shouldExist = true } = descendantSelectors; if (exists === shouldExist) { if (!element.hasAttribute(stateAttribute)) { - gZenCompactModeManager._setElementExpandAttribute(element, true, stateAttribute); + gZenCompactModeManager._setElementExpandAttribute( + element, + true, + stateAttribute + ); } } else if (element.hasAttribute(stateAttribute)) { - gZenCompactModeManager._setElementExpandAttribute(element, false, stateAttribute); + gZenCompactModeManager._setElementExpandAttribute( + element, + false, + stateAttribute + ); } }; @@ -46,31 +59,35 @@ class nsHasPolyfill { } disconnectObserver(observerId) { - const index = this.observers.findIndex((o) => o.id === observerId); + const index = this.observers.findIndex(o => o.id === observerId); if (index !== -1) { this.observers[index].observer.disconnect(); } } connectObserver(observerId) { - const observer = this.observers.find((o) => o.id === observerId); + const observer = this.observers.find(o => o.id === observerId); if (observer) { observer.observer.observe(observer.element, { childList: true, subtree: true, attributes: true, - attributeFilter: observer.attributeFilter.length ? observer.attributeFilter : undefined, + attributeFilter: observer.attributeFilter.length + ? observer.attributeFilter + : undefined, }); } } destroy() { - this.observers.forEach((observer) => observer.observer.disconnect()); + this.observers.forEach(observer => observer.observer.disconnect()); this.observers = []; } } const hasPolyfillInstance = new nsHasPolyfill(); -window.addEventListener("unload", () => hasPolyfillInstance.destroy(), { once: true }); +window.addEventListener("unload", () => hasPolyfillInstance.destroy(), { + once: true, +}); window.ZenHasPolyfill = hasPolyfillInstance; diff --git a/src/zen/common/modules/ZenMenubar.mjs b/src/zen/common/modules/ZenMenubar.mjs index ae7d872f7..9616d0228 100644 --- a/src/zen/common/modules/ZenMenubar.mjs +++ b/src/zen/common/modules/ZenMenubar.mjs @@ -38,7 +38,7 @@ export class nsZenMenuBar { `); const menu = appearanceMenu.querySelector("menu"); - menu.addEventListener("command", (event) => { + menu.addEventListener("command", event => { const type = event.target.getAttribute("data-type"); const schemeValue = WINDOW_SCHEME_MAPPING[type]; Services.prefs.setIntPref(WINDOW_SCHEME_PREF, schemeValue); @@ -97,15 +97,17 @@ export class nsZenMenuBar { `); document.getElementById("view-menu").after(spacesMenubar); - document.getElementById("zen-spaces-menubar").addEventListener("popupshowing", () => { - if (AppConstants.platform === "linux") { - // On linux, there seems to be a bug where the menu freezes up and makes the browser - // suppiciously unresponsive if we try to update the menu while it's opening. - // See https://github.com/zen-browser/desktop/issues/12024 - return; - } - gZenWorkspaces.updateWorkspacesChangeContextMenu(); - }); + document + .getElementById("zen-spaces-menubar") + .addEventListener("popupshowing", () => { + if (AppConstants.platform === "linux") { + // On linux, there seems to be a bug where the menu freezes up and makes the browser + // suppiciously unresponsive if we try to update the menu while it's opening. + // See https://github.com/zen-browser/desktop/issues/12024 + return; + } + gZenWorkspaces.updateWorkspacesChangeContextMenu(); + }); } #initAppMenu() { @@ -133,7 +135,10 @@ export class nsZenMenuBar { if (!Services.prefs.getBoolPref("zen.window-sync.enabled", true)) { return; } - const itemsToHide = ["appMenuRecentlyClosedWindows", "historyUndoWindowMenu"]; + const itemsToHide = [ + "appMenuRecentlyClosedWindows", + "historyUndoWindowMenu", + ]; for (const id of itemsToHide) { const element = PanelMultiView.getViewNode(document, id); element.setAttribute("hidden", "true"); diff --git a/src/zen/common/modules/ZenSessionStore.mjs b/src/zen/common/modules/ZenSessionStore.mjs index 4f5674f55..8c276614c 100644 --- a/src/zen/common/modules/ZenSessionStore.mjs +++ b/src/zen/common/modules/ZenSessionStore.mjs @@ -9,7 +9,7 @@ class ZenSessionStore extends nsZenPreloadedFeature { this.#waitAndCleanup(); } - promiseInitialized = new Promise((resolve) => { + promiseInitialized = new Promise(resolve => { this._resolveInitialized = resolve; }); diff --git a/src/zen/common/modules/ZenSidebarNotification.mjs b/src/zen/common/modules/ZenSidebarNotification.mjs index e40d4c340..f5e134ffa 100644 --- a/src/zen/common/modules/ZenSidebarNotification.mjs +++ b/src/zen/common/modules/ZenSidebarNotification.mjs @@ -47,19 +47,24 @@ class ZenSidebarNotification extends MozLitElement { return html` + href="chrome://browser/content/zen-styles/zen-sidebar-notification.css" + />
-
this.remove()}> + data-l10n-id=${this.headingL10nId} + > +
this.remove()} + >
${this.links.map( - (link) => html` + link => html` ` )} diff --git a/src/zen/common/modules/ZenStartup.mjs b/src/zen/common/modules/ZenStartup.mjs index 5c40363f2..d64378d3b 100644 --- a/src/zen/common/modules/ZenStartup.mjs +++ b/src/zen/common/modules/ZenStartup.mjs @@ -45,7 +45,9 @@ class ZenStartup { } // Fix notification deck - const deckTemplate = document.getElementById("tab-notification-deck-template"); + const deckTemplate = document.getElementById( + "tab-notification-deck-template" + ); if (deckTemplate) { document.getElementById("zen-appcontent-wrapper").prepend(deckTemplate); } @@ -88,7 +90,9 @@ class ZenStartup { // Just in case we didn't get the right size. gZenUIManager.updateTabsToolbar(); this.closeWatermark(); - document.getElementById("tabbrowser-arrowscrollbox").setAttribute("orient", "vertical"); + document + .getElementById("tabbrowser-arrowscrollbox") + .setAttribute("orient", "vertical"); this.isReady = true; }); } @@ -106,10 +110,14 @@ class ZenStartup { closeWatermark() { document.documentElement.removeAttribute("zen-before-loaded"); if (this.#shouldUseWatermark) { - let elementsToIgnore = this.#watermarkIgnoreElements.map((id) => "#" + id).join(", "); + let elementsToIgnore = this.#watermarkIgnoreElements + .map(id => "#" + id) + .join(", "); gZenUIManager.motion .animate( - "#browser > *:not(" + elementsToIgnore + "), #urlbar, #tabbrowser-tabbox > *", + "#browser > *:not(" + + elementsToIgnore + + "), #urlbar, #tabbrowser-tabbox > *", { opacity: [0, 1], }, @@ -148,8 +156,14 @@ class ZenStartup { #checkForWelcomePage() { if (!Services.prefs.getBoolPref("zen.welcome-screen.seen", false)) { Services.prefs.setBoolPref("zen.welcome-screen.seen", true); - Services.prefs.setStringPref("zen.updates.last-build-id", Services.appinfo.appBuildID); - Services.prefs.setStringPref("zen.updates.last-version", Services.appinfo.version); + Services.prefs.setStringPref( + "zen.updates.last-build-id", + Services.appinfo.appBuildID + ); + Services.prefs.setStringPref( + "zen.updates.last-version", + Services.appinfo.version + ); Services.scriptloader.loadSubScript( "chrome://browser/content/zen-components/ZenWelcome.mjs", window diff --git a/src/zen/common/modules/ZenUIManager.mjs b/src/zen/common/modules/ZenUIManager.mjs index fbac93493..0178322ec 100644 --- a/src/zen/common/modules/ZenUIManager.mjs +++ b/src/zen/common/modules/ZenUIManager.mjs @@ -10,7 +10,10 @@ window.gZenUIManager = { _hoverPausedForExpand: false, _hasLoadedDOM: false, testingEnabled: Services.prefs.getBoolPref("zen.testing.enabled", false), - profilingEnabled: Services.prefs.getBoolPref("zen.testing.profiling.enabled", false), + profilingEnabled: Services.prefs.getBoolPref( + "zen.testing.profiling.enabled", + false + ), _lastClickPosition: null, @@ -22,7 +25,11 @@ window.gZenUIManager = { document.addEventListener("popupshowing", this.onPopupShowing.bind(this)); document.addEventListener("popuphidden", this.onPopupHidden.bind(this)); - document.addEventListener("mousedown", this.handleMouseDown.bind(this), true); + document.addEventListener( + "mousedown", + this.handleMouseDown.bind(this), + true + ); ChromeUtils.defineLazyGetter(this, "motion", () => { Services.scriptloader.loadSubScript( @@ -40,7 +47,9 @@ window.gZenUIManager = { new ResizeObserver( gZenCommonActions.throttle( - gZenCompactModeManager.getAndApplySidebarWidth.bind(gZenCompactModeManager), + gZenCompactModeManager.getAndApplySidebarWidth.bind( + gZenCompactModeManager + ), Services.prefs.getIntPref("zen.view.sidebar-height-throttle", 500) ) ).observe(gNavToolbox); @@ -82,7 +91,10 @@ window.gZenUIManager = { rawKeyframes = { ...rawKeyframes }; // Convert 'y' property to 'transform' with translateY and 'x' to translateX, // and 'scale' to 'transform' with scale. - if ((rawKeyframes.y || rawKeyframes.x || rawKeyframes.scale) && !rawKeyframes.transform) { + if ( + (rawKeyframes.y || rawKeyframes.x || rawKeyframes.scale) && + !rawKeyframes.transform + ) { const yValues = rawKeyframes.y || []; const xValues = rawKeyframes.x || []; const scaleValues = rawKeyframes.scale || []; @@ -90,14 +102,23 @@ window.gZenUIManager = { delete rawKeyframes.x; delete rawKeyframes.scale; rawKeyframes.transform = []; - if (yValues.length !== 0 && xValues.length !== 0 && yValues.length !== xValues.length) { + if ( + yValues.length !== 0 && + xValues.length !== 0 && + yValues.length !== xValues.length + ) { console.error("y and x keyframes must have the same length"); } - const keyframeLength = Math.max(yValues.length, xValues.length, scaleValues.length); + const keyframeLength = Math.max( + yValues.length, + xValues.length, + scaleValues.length + ); for (let i = 0; i < keyframeLength; i++) { const y = yValues[i] !== undefined ? `translateY(${yValues[i]}px)` : ""; const x = xValues[i] !== undefined ? `translateX(${xValues[i]}px)` : ""; - const scale = scaleValues[i] !== undefined ? `scale(${scaleValues[i]})` : ""; + const scale = + scaleValues[i] !== undefined ? `scale(${scaleValues[i]})` : ""; rawKeyframes.transform.push(`${x} ${y} ${scale}`.trim()); } } @@ -109,7 +130,7 @@ window.gZenUIManager = { } keyframes.push(frame); } - return await new Promise((resolve) => { + return await new Promise(resolve => { const animation = element.animate(keyframes, ...args); animation.onfinish = () => resolve(); }); @@ -117,10 +138,19 @@ window.gZenUIManager = { _addNewCustomizableButtonsIfNeeded() { const kPref = "zen.ui.migration.compact-mode-button-added"; - let navbarPlacements = CustomizableUI.getWidgetIdsInArea("zen-sidebar-top-buttons"); + let navbarPlacements = CustomizableUI.getWidgetIdsInArea( + "zen-sidebar-top-buttons" + ); try { - if (!navbarPlacements.length && !Services.prefs.getBoolPref(kPref, false)) { - CustomizableUI.addWidgetToArea("zen-toggle-compact-mode", "zen-sidebar-top-buttons", 0); + if ( + !navbarPlacements.length && + !Services.prefs.getBoolPref(kPref, false) + ) { + CustomizableUI.addWidgetToArea( + "zen-toggle-compact-mode", + "zen-sidebar-top-buttons", + 0 + ); gZenVerticalTabsManager._topButtonsSeparatorElement.before( document.getElementById("zen-toggle-compact-mode") ); @@ -138,7 +168,7 @@ window.gZenUIManager = { // is ran before this function. document.documentElement.setAttribute("zen-has-bookmarks", "true"); } - bookmarkToolbar.addEventListener("toolbarvisibilitychange", (event) => { + bookmarkToolbar.addEventListener("toolbarvisibilitychange", event => { const visible = event.detail.visible; if (visible) { document.documentElement.setAttribute("zen-has-bookmarks", "true"); @@ -223,8 +253,13 @@ window.gZenUIManager = { "--zen-urlbar-top", `${window.innerHeight / 2 - Math.max(kUrlbarHeight, window.windowUtils.getBoundsWithoutFlushing(gURLBar).height) / 2}px` ); - gURLBar.style.setProperty("--zen-urlbar-width", `${Math.min(window.innerWidth / 2, 750)}px`); - gZenVerticalTabsManager.actualWindowButtons.removeAttribute("zen-has-hover"); + gURLBar.style.setProperty( + "--zen-urlbar-width", + `${Math.min(window.innerWidth / 2, 750)}px` + ); + gZenVerticalTabsManager.actualWindowButtons.removeAttribute( + "zen-has-hover" + ); gZenVerticalTabsManager.recalculateURLBarHeight(true); if (!this._preventToolbarRebuild) { setTimeout(() => { @@ -256,7 +291,10 @@ window.gZenUIManager = { openAndChangeToTab(url, options) { if (window.ownerGlobal.parent) { - const tab = window.ownerGlobal.parent.gBrowser.addTrustedTab(url, options); + const tab = window.ownerGlobal.parent.gBrowser.addTrustedTab( + url, + options + ); window.ownerGlobal.parent.gBrowser.selectedTab = tab; return tab; } @@ -270,7 +308,10 @@ window.gZenUIManager = { }, createValidXULText(text) { - return text.replace(/&/g, "&").replace(//g, ">"); + return text + .replace(/&/g, "&") + .replace(//g, ">"); }, /** @@ -302,7 +343,11 @@ window.gZenUIManager = { continue; } document.removeEventListener("mousemove", this.__removeHasPopupAttribute); - gZenCompactModeManager._setElementExpandAttribute(el, true, "has-popup-menu"); + gZenCompactModeManager._setElementExpandAttribute( + el, + true, + "has-popup-menu" + ); this.__currentPopup = showEvent.target; this.__currentPopupTrackElement = el; break; @@ -315,11 +360,21 @@ window.gZenUIManager = { } const element = this.__currentPopupTrackElement; if (document.getElementById("main-window").matches(":hover")) { - gZenCompactModeManager._setElementExpandAttribute(element, false, "has-popup-menu"); + gZenCompactModeManager._setElementExpandAttribute( + element, + false, + "has-popup-menu" + ); } else { this.__removeHasPopupAttribute = () => - gZenCompactModeManager._setElementExpandAttribute(element, false, "has-popup-menu"); - document.addEventListener("mousemove", this.__removeHasPopupAttribute, { once: true }); + gZenCompactModeManager._setElementExpandAttribute( + element, + false, + "has-popup-menu" + ); + document.addEventListener("mousemove", this.__removeHasPopupAttribute, { + once: true, + }); } this.__currentPopup = null; this.__currentPopupTrackElement = null; @@ -347,9 +402,11 @@ window.gZenUIManager = { const input = gURLBar; if (gURLBar.hasAttribute("breakout-extend") && !this._animatingSearchMode) { this._animatingSearchMode = true; - this.motion.animate(input, { scale: [1, 0.98, 1] }, { duration: 0.25 }).then(() => { - delete this._animatingSearchMode; - }); + this.motion + .animate(input, { scale: [1, 0.98, 1] }, { duration: 0.25 }) + .then(() => { + delete this._animatingSearchMode; + }); if (searchMode) { gURLBar.setAttribute("animate-searchmode", "true"); this._animatingSearchModeTimeout = setTimeout(() => { @@ -416,7 +473,12 @@ window.gZenUIManager = { return true; }, - handleNewTab(werePassedURL, searchClipboard, where, overridePreferance = false) { + handleNewTab( + werePassedURL, + searchClipboard, + where, + overridePreferance = false + ) { // Validate browser state first if (!this._validateBrowserState()) { console.warn("Browser state invalid for new tab operation"); @@ -548,7 +610,9 @@ window.gZenUIManager = { if (isFocusedBefore) { setTimeout(() => { window.dispatchEvent( - new CustomEvent("ZenURLBarClosed", { detail: { onSwitch, onElementPicked } }) + new CustomEvent("ZenURLBarClosed", { + detail: { onSwitch, onElementPicked }, + }) ); gURLBar.view.close({ elementPicked: onElementPicked }); gURLBar.updateTextOverflow(); @@ -559,8 +623,15 @@ window.gZenUIManager = { // Ensure tab and browser are valid before updating state const selectedTab = gBrowser.selectedTab; - if (selectedTab && selectedTab.linkedBrowser && !selectedTab.closing && onSwitch) { - const browserState = gURLBar.getBrowserState(selectedTab.linkedBrowser); + if ( + selectedTab && + selectedTab.linkedBrowser && + !selectedTab.closing && + onSwitch + ) { + const browserState = gURLBar.getBrowserState( + selectedTab.linkedBrowser + ); if (browserState) { browserState.urlbarFocused = false; } @@ -574,7 +645,10 @@ window.gZenUIManager = { if (gURLBar.hasAttribute("breakout-extend")) { return aURL; } - if (gZenVerticalTabsManager._hasSetSingleToolbar && this.urlbarShowDomainOnly) { + if ( + gZenVerticalTabsManager._hasSetSingleToolbar && + this.urlbarShowDomainOnly + ) { let url = BrowserUIUtils.removeSingleTrailingSlashFromURL(aURL); return url.startsWith("https://") ? url.split("/")[2] : url; } @@ -639,7 +713,11 @@ window.gZenUIManager = { return; } this.motion - .animate(toast, { opacity: [1, 0], scale: [1, 0.5] }, { duration: 0.2, bounce: 0 }) + .animate( + toast, + { opacity: [1, 0], scale: [1, 0.5] }, + { duration: 0.2, bounce: 0 } + ) .then(() => { toast.remove(); if (this._toastContainer.children.length === 0) { @@ -648,7 +726,11 @@ window.gZenUIManager = { }); }; if (reused) { - await this.motion.animate(toast, { scale: 0.2 }, { duration: 0.1, bounce: 0 }); + await this.motion.animate( + toast, + { scale: 0.2 }, + { duration: 0.1, bounce: 0 } + ); } else { toast.addEventListener("mouseover", () => { if (this._toastTimeouts[messageId]) { @@ -659,17 +741,27 @@ window.gZenUIManager = { if (this._toastTimeouts[messageId]) { clearTimeout(this._toastTimeouts[messageId]); } - this._toastTimeouts[messageId] = setTimeout(timeoutFunction, options.timeout || 2000); + this._toastTimeouts[messageId] = setTimeout( + timeoutFunction, + options.timeout || 2000 + ); }); } if (!toast.style.transform) { toast.style.transform = "scale(0)"; } - await this.motion.animate(toast, { scale: 1 }, { type: "spring", bounce: 0.2, duration: 0.5 }); + await this.motion.animate( + toast, + { scale: 1 }, + { type: "spring", bounce: 0.2, duration: 0.5 } + ); if (this._toastTimeouts[messageId]) { clearTimeout(this._toastTimeouts[messageId]); } - this._toastTimeouts[messageId] = setTimeout(timeoutFunction, options.timeout || 2000); + this._toastTimeouts[messageId] = setTimeout( + timeoutFunction, + options.timeout || 2000 + ); }, panelUIPosition(panel, anchor) { @@ -722,10 +814,12 @@ window.gZenUIManager = { block = "topleft"; } if ( - (gZenVerticalTabsManager._hasSetSingleToolbar && gZenVerticalTabsManager._prefsRightSide) || + (gZenVerticalTabsManager._hasSetSingleToolbar && + gZenVerticalTabsManager._prefsRightSide) || (panel?.id === "zen-unified-site-data-panel" && !gZenVerticalTabsManager._hasSetSingleToolbar) || - (panel?.id === "unified-extensions-panel" && gZenVerticalTabsManager._hasSetSingleToolbar) + (panel?.id === "unified-extensions-panel" && + gZenVerticalTabsManager._hasSetSingleToolbar) ) { block = "bottomright"; inline = "topright"; @@ -787,14 +881,20 @@ window.gZenVerticalTabsManager = { return !( window.AppConstants.platform === "macosx" || window.matchMedia("(-moz-gtk-csd-reversed-placement)").matches || - Services.prefs.getBoolPref("zen.view.experimental-force-window-controls-left") + Services.prefs.getBoolPref( + "zen.view.experimental-force-window-controls-left" + ) ); }); ChromeUtils.defineLazyGetter(this, "hidesTabsToolbar", () => { return ( - document.documentElement.getAttribute("chromehidden")?.includes("toolbar") || - document.documentElement.getAttribute("chromehidden")?.includes("menubar") + document.documentElement + .getAttribute("chromehidden") + ?.includes("toolbar") || + document.documentElement + .getAttribute("chromehidden") + ?.includes("menubar") ); }); @@ -808,22 +908,35 @@ window.gZenVerticalTabsManager = { var onPrefChange = this._onPrefChange.bind(this); this.initializePreferences(onPrefChange); - this._toolbarOriginalParent = document.getElementById("nav-bar").parentElement; + this._toolbarOriginalParent = + document.getElementById("nav-bar").parentElement; gZenCompactModeManager.addEventListener(updateEvent); this.initRightSideOrderContextMenu(); - window.addEventListener("customizationstarting", this._preCustomize.bind(this)); - window.addEventListener("aftercustomization", this._postCustomize.bind(this)); + window.addEventListener( + "customizationstarting", + this._preCustomize.bind(this) + ); + window.addEventListener( + "aftercustomization", + this._postCustomize.bind(this) + ); this._updateEvent(); if (!this.isWindowsStyledButtons) { - document.documentElement.setAttribute("zen-window-buttons-reversed", true); + document.documentElement.setAttribute( + "zen-window-buttons-reversed", + true + ); } this._renameTabHalt = this.renameTabHalt.bind(this); - gBrowser.tabContainer.addEventListener("dblclick", this.renameTabStart.bind(this)); + gBrowser.tabContainer.addEventListener( + "dblclick", + this.renameTabStart.bind(this) + ); }, toggleExpand() { @@ -896,7 +1009,7 @@ window.gZenVerticalTabsManager = { } ) .then(() => {}) - .catch((err) => { + .catch(err => { console.error(err); }) .finally(() => { @@ -905,7 +1018,8 @@ window.gZenVerticalTabsManager = { aItem.style.removeProperty("opacity"); }); const itemLabel = - aItem.querySelector(".tab-group-label-container") || aItem.querySelector(".tab-content"); + aItem.querySelector(".tab-group-label-container") || + aItem.querySelector(".tab-content"); gZenUIManager.motion .animate( itemLabel, @@ -918,7 +1032,7 @@ window.gZenVerticalTabsManager = { } ) .then(() => {}) - .catch((err) => { + .catch(err => { console.error(err); }) .finally(() => { @@ -971,7 +1085,7 @@ window.gZenVerticalTabsManager = { }, async _preCustomize() { - await this._multiWindowFeature.foreachWindowAsActive(async (browser) => { + await this._multiWindowFeature.foreachWindowAsActive(async browser => { browser.gZenVerticalTabsManager._updateEvent({ forCustomizableMode: true, dontRebuildAreas: true, @@ -984,7 +1098,7 @@ window.gZenVerticalTabsManager = { _postCustomize() { // No need to use `await` here, because the customization is already done - this._multiWindowFeature.foreachWindowAsActive(async (browser) => { + this._multiWindowFeature.foreachWindowAsActive(async browser => { browser.gZenVerticalTabsManager._updateEvent({ dontRebuildAreas: true }); }); }, @@ -1028,7 +1142,7 @@ window.gZenVerticalTabsManager = { }, _initWaitPromise() { - this._waitPromise = new Promise((resolve) => { + this._waitPromise = new Promise(resolve => { this._resolveWaitPromise = resolve; }); }, @@ -1037,8 +1151,12 @@ window.gZenVerticalTabsManager = { this._resolveWaitPromise(); // only run if we are in the active window - await this._multiWindowFeature.foreachWindowAsActive(async (browser) => { - if (browser.gZenVerticalTabsManager._multiWindowFeature.windowIsActive(browser)) { + await this._multiWindowFeature.foreachWindowAsActive(async browser => { + if ( + browser.gZenVerticalTabsManager._multiWindowFeature.windowIsActive( + browser + ) + ) { return; } await browser.gZenVerticalTabsManager._waitPromise; @@ -1089,17 +1207,22 @@ window.gZenVerticalTabsManager = { } const topButtons = document.getElementById("zen-sidebar-top-buttons"); - const isCompactMode = gZenCompactModeManager.preference && !forCustomizableMode; + const isCompactMode = + gZenCompactModeManager.preference && !forCustomizableMode; const isVerticalTabs = this._prefsVerticalTabs || forCustomizableMode; const isSidebarExpanded = this._prefsSidebarExpanded || !isVerticalTabs; const isRightSide = this._prefsRightSide && isVerticalTabs; const isSingleToolbar = - ((this._prefsUseSingleToolbar && isVerticalTabs && isSidebarExpanded) || !isVerticalTabs) && + ((this._prefsUseSingleToolbar && isVerticalTabs && isSidebarExpanded) || + !isVerticalTabs) && !forCustomizableMode && !this.hidesTabsToolbar; const titlebar = document.getElementById("titlebar"); - gBrowser.tabContainer.setAttribute("orient", isVerticalTabs ? "vertical" : "horizontal"); + gBrowser.tabContainer.setAttribute( + "orient", + isVerticalTabs ? "vertical" : "horizontal" + ); gBrowser.tabContainer.arrowScrollbox.setAttribute( "orient", isVerticalTabs ? "vertical" : "horizontal" @@ -1110,7 +1233,9 @@ window.gZenVerticalTabsManager = { isVerticalTabs ? "vertical" : "horizontal" ); - const buttonsTarget = document.getElementById("zen-sidebar-top-buttons-customization-target"); + const buttonsTarget = document.getElementById( + "zen-sidebar-top-buttons-customization-target" + ); if (isRightSide) { this.navigatorToolbox.setAttribute("zen-right-side", "true"); document.documentElement.setAttribute("zen-right-side", "true"); @@ -1121,7 +1246,9 @@ window.gZenVerticalTabsManager = { delete this._hadSidebarCollapse; if (isSidebarExpanded) { - this._hadSidebarCollapse = !document.documentElement.hasAttribute("zen-sidebar-expanded"); + this._hadSidebarCollapse = !document.documentElement.hasAttribute( + "zen-sidebar-expanded" + ); this.navigatorToolbox.setAttribute("zen-sidebar-expanded", "true"); document.documentElement.setAttribute("zen-sidebar-expanded", "true"); gBrowser.tabContainer.setAttribute("expanded", "true"); @@ -1131,8 +1258,12 @@ window.gZenVerticalTabsManager = { gBrowser.tabContainer.removeAttribute("expanded"); } - const appContentNavbarContaienr = document.getElementById("zen-appcontent-navbar-container"); - const appContentNavbarWrapper = document.getElementById("zen-appcontent-navbar-wrapper"); + const appContentNavbarContaienr = document.getElementById( + "zen-appcontent-navbar-container" + ); + const appContentNavbarWrapper = document.getElementById( + "zen-appcontent-navbar-wrapper" + ); appContentNavbarWrapper.style.transition = "none"; let shouldHide = false; if ( @@ -1148,12 +1279,16 @@ window.gZenVerticalTabsManager = { } // Check if the sidebar is in hover mode - if (!this.navigatorToolbox.hasAttribute("zen-right-side") && !isCompactMode) { + if ( + !this.navigatorToolbox.hasAttribute("zen-right-side") && + !isCompactMode + ) { this.navigatorToolbox.prepend(topButtons); } let windowButtons = this.actualWindowButtons; - let doNotChangeWindowButtons = !isCompactMode && isRightSide && this.isWindowsStyledButtons; + let doNotChangeWindowButtons = + !isCompactMode && isRightSide && this.isWindowsStyledButtons; const navBar = document.getElementById("nav-bar"); if (isSingleToolbar) { @@ -1169,11 +1304,15 @@ window.gZenVerticalTabsManager = { for (const button of elements) { this._topButtonsSeparatorElement.after(button); } - buttonsTarget.prepend(document.getElementById("unified-extensions-button")); + buttonsTarget.prepend( + document.getElementById("unified-extensions-button") + ); const panelUIButton = document.getElementById("PanelUI-button"); buttonsTarget.prepend(panelUIButton); panelUIButton.setAttribute("overflows", "false"); - buttonsTarget.parentElement.append(document.getElementById("nav-bar-overflow-button")); + buttonsTarget.parentElement.append( + document.getElementById("nav-bar-overflow-button") + ); if (this.isWindowsStyledButtons && !doNotChangeWindowButtons) { appContentNavbarContaienr.append(windowButtons); } @@ -1194,7 +1333,9 @@ window.gZenVerticalTabsManager = { '#zen-sidebar-top-buttons-customization-target > :is([cui-areatype="toolbar"], .chromeclass-toolbar-additional)' ); for (const button of elements) { - document.getElementById("nav-bar-customization-target").append(button); + document + .getElementById("nav-bar-customization-target") + .append(button); } this._topButtonsSeparatorElement.remove(); document.documentElement.removeAttribute("zen-single-toolbar"); @@ -1227,7 +1368,9 @@ window.gZenVerticalTabsManager = { topButtons.prepend(windowButtons); } - const canHideTabBarPref = Services.prefs.getBoolPref("zen.view.compact.hide-tabbar"); + const canHideTabBarPref = Services.prefs.getBoolPref( + "zen.view.compact.hide-tabbar" + ); const captionsShouldStayOnSidebar = !canHideTabBarPref && ((!this.isWindowsStyledButtons && !isRightSide) || @@ -1240,7 +1383,12 @@ window.gZenVerticalTabsManager = { } // Case: single toolbar, compact mode, right side and windows styled buttons - if (isSingleToolbar && isCompactMode && isRightSide && this.isWindowsStyledButtons) { + if ( + isSingleToolbar && + isCompactMode && + isRightSide && + this.isWindowsStyledButtons + ) { topButtons.prepend(windowButtons); } @@ -1286,9 +1434,15 @@ window.gZenVerticalTabsManager = { this._hasSetSingleToolbar && Services.prefs.getBoolPref("zen.view.overflow-webext-toolbar", true) ) { - topButtons.setAttribute("addon-webext-overflowtarget", "zen-overflow-extensions-list"); + topButtons.setAttribute( + "addon-webext-overflowtarget", + "zen-overflow-extensions-list" + ); } else { - topButtons.setAttribute("addon-webext-overflowtarget", "overflowed-extensions-list"); + topButtons.setAttribute( + "addon-webext-overflowtarget", + "overflowed-extensions-list" + ); } gZenCompactModeManager.updateCompactModeContext(isSingleToolbar); @@ -1321,11 +1475,15 @@ window.gZenVerticalTabsManager = { }, rebuildAreas() { - CustomizableUI.zenInternalCU._rebuildRegisteredAreas(/* zenDontRebuildCollapsed */ true); + CustomizableUI.zenInternalCU._rebuildRegisteredAreas( + /* zenDontRebuildCollapsed */ true + ); }, _updateMaxWidth() { - const maxWidth = Services.prefs.getIntPref("zen.view.sidebar-expanded.max-width"); + const maxWidth = Services.prefs.getIntPref( + "zen.view.sidebar-expanded.max-width" + ); const toolbox = gNavToolbox; if (!this._prefsCompactMode) { toolbox.style.maxWidth = `${maxWidth}px`; @@ -1398,7 +1556,9 @@ window.gZenVerticalTabsManager = { ); } - const editorContainer = this._tabEdited.querySelector(".tab-editor-container"); + const editorContainer = this._tabEdited.querySelector( + ".tab-editor-container" + ); if (editorContainer) { editorContainer.remove(); } @@ -1426,21 +1586,30 @@ window.gZenVerticalTabsManager = { ) { return; } - if (isTab && !target.closest(".tab-label-container") && event.type === "dblclick") { + if ( + isTab && + !target.closest(".tab-label-container") && + event.type === "dblclick" + ) { return; } this._tabEdited = target.closest(".tabbrowser-tab") || target.closest(".zen-current-workspace-indicator-name") || (event.explicit && target.closest(".tab-group-label")); - if (!this._tabEdited || (this._tabEdited.hasAttribute("zen-essential") && isTab)) { + if ( + !this._tabEdited || + (this._tabEdited.hasAttribute("zen-essential") && isTab) + ) { this._tabEdited = null; return; } gZenFolders.cancelPopupTimer(); event.stopPropagation?.(); document.documentElement.setAttribute("zen-renaming-tab", "true"); - const label = isTab ? this._tabEdited.querySelector(".tab-label-container") : this._tabEdited; + const label = isTab + ? this._tabEdited.querySelector(".tab-label-container") + : this._tabEdited; label.classList.add("tab-label-container-editing"); if (isTab) { @@ -1457,7 +1626,9 @@ window.gZenVerticalTabsManager = { input.addEventListener("keydown", this.renameTabKeydown.bind(this)); if (isTab) { - const containerHtml = this._tabEdited.querySelector(".tab-editor-container"); + const containerHtml = this._tabEdited.querySelector( + ".tab-editor-container" + ); containerHtml.appendChild(input); } else { this._tabEdited.after(input); @@ -1473,7 +1644,9 @@ window.gZenVerticalTabsManager = { return; } document.documentElement.removeAttribute("zen-renaming-tab"); - const editorContainer = this._tabEdited.querySelector(".tab-editor-container"); + const editorContainer = this._tabEdited.querySelector( + ".tab-editor-container" + ); let input = document.getElementById("tab-label-input"); input.remove(); if (editorContainer) { diff --git a/src/zen/common/modules/ZenUpdates.mjs b/src/zen/common/modules/ZenUpdates.mjs index 298f2a66a..867bbd53f 100644 --- a/src/zen/common/modules/ZenUpdates.mjs +++ b/src/zen/common/modules/ZenUpdates.mjs @@ -17,12 +17,17 @@ export default function checkForZenUpdates() { !gZenUIManager.testingEnabled && Services.prefs.getBoolPref(ZEN_UPDATE_SHOW, true) ) { - const updateUrl = Services.prefs.getStringPref("app.releaseNotesURL.prompt", ""); + const updateUrl = Services.prefs.getStringPref( + "app.releaseNotesURL.prompt", + "" + ); createSidebarNotification({ headingL10nId: "zen-sidebar-notification-updated-heading", links: [ { - url: Services.urlFormatter.formatURL(updateUrl.replace("%VERSION%", version)), + url: Services.urlFormatter.formatURL( + updateUrl.replace("%VERSION%", version) + ), l10nId: "zen-sidebar-notification-updated", special: true, icon: "chrome://browser/skin/zen-icons/heart-circle-fill.svg", diff --git a/src/zen/common/sys/ZenCustomizableUI.sys.mjs b/src/zen/common/sys/ZenCustomizableUI.sys.mjs index 4adc45706..7a48b7f5c 100644 --- a/src/zen/common/sys/ZenCustomizableUI.sys.mjs +++ b/src/zen/common/sys/ZenCustomizableUI.sys.mjs @@ -8,7 +8,11 @@ export const ZenCustomizableUI = new (class { constructor() {} TYPE_TOOLBAR = "toolbar"; - defaultSidebarIcons = ["downloads-button", "zen-workspaces-button", "zen-create-new-button"]; + defaultSidebarIcons = [ + "downloads-button", + "zen-workspaces-button", + "zen-create-new-button", + ]; startup(CustomizableUIInternal) { CustomizableUIInternal.registerArea( @@ -39,7 +43,8 @@ export const ZenCustomizableUI = new (class { } #addSidebarButtons(window) { - const kDefaultSidebarWidth = AppConstants.platform === "macosx" ? "230px" : "186px"; + const kDefaultSidebarWidth = + AppConstants.platform === "macosx" ? "230px" : "186px"; const toolbox = window.gNavToolbox; // Set a splitter to navigator-toolbox @@ -81,7 +86,7 @@ export const ZenCustomizableUI = new (class { `); toolbox.prepend(sidebarBox); - new window.MutationObserver((e) => { + new window.MutationObserver(e => { if (e[0].type !== "attributes" || e[0].attributeName !== "width") { return; } @@ -96,7 +101,7 @@ export const ZenCustomizableUI = new (class { toolbox.style.width = width; toolbox.setAttribute("width", width); - splitter.addEventListener("dblclick", (e) => { + splitter.addEventListener("dblclick", e => { if (e.button !== 0) { return; } @@ -104,7 +109,9 @@ export const ZenCustomizableUI = new (class { toolbox.setAttribute("width", kDefaultSidebarWidth); }); - const newTab = window.document.getElementById("vertical-tabs-newtab-button"); + const newTab = window.document.getElementById( + "vertical-tabs-newtab-button" + ); newTab.classList.add("zen-sidebar-action-button"); for (let id of this.defaultSidebarIcons) { @@ -124,7 +131,7 @@ export const ZenCustomizableUI = new (class { // If we use "mousedown" event for private windows (which open a new tab on "click"), we might end up with // the urlbar flicking and therefore we use "command" event to avoid that. let isPrivateMode = window.gZenWorkspaces.privateWindowOrDisabled; - button.addEventListener(isPrivateMode ? "command" : "mousedown", (event) => { + button.addEventListener(isPrivateMode ? "command" : "mousedown", event => { if (isPrivateMode) { window.document.getElementById("cmd_newNavigatorTab").doCommand(); return; @@ -146,7 +153,9 @@ export const ZenCustomizableUI = new (class { } #moveWindowButtons(window) { - const windowControls = window.document.getElementsByClassName("titlebar-buttonbox-container"); + const windowControls = window.document.getElementsByClassName( + "titlebar-buttonbox-container" + ); const toolboxIcons = window.document.getElementById( "zen-sidebar-top-buttons-customization-target" ); @@ -173,7 +182,9 @@ export const ZenCustomizableUI = new (class { wrapper.prepend(elem); } } - window.document.getElementById("stop-reload-button").removeAttribute("overflows"); + window.document + .getElementById("stop-reload-button") + .removeAttribute("overflows"); } _dispatchResizeEvent(window) { diff --git a/src/zen/common/sys/ZenUIMigration.sys.mjs b/src/zen/common/sys/ZenUIMigration.sys.mjs index 1c6cac68e..d025d97df 100644 --- a/src/zen/common/sys/ZenUIMigration.sys.mjs +++ b/src/zen/common/sys/ZenUIMigration.sys.mjs @@ -24,7 +24,9 @@ class nsZenUIMigration { } this.clearVariables(); if (this.shouldRestart) { - Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart); + Services.startup.quit( + Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart + ); } } @@ -61,13 +63,24 @@ class nsZenUIMigration { userContentFile.append("userContent.css"); Services.prefs.setBoolPref( "zen.workspaces.separate-essentials", - Services.prefs.getBoolPref("zen.workspaces.container-specific-essentials-enabled", false) + Services.prefs.getBoolPref( + "zen.workspaces.container-specific-essentials-enabled", + false + ) + ); + const theme = Services.prefs.getIntPref( + "layout.css.prefers-color-scheme.content-override", + 0 ); - const theme = Services.prefs.getIntPref("layout.css.prefers-color-scheme.content-override", 0); Services.prefs.setIntPref("zen.view.window.scheme", theme); if (userChromeFile.exists() || userContentFile.exists()) { - Services.prefs.setBoolPref("toolkit.legacyUserProfileCustomizations.stylesheets", true); - console.warn("ZenUIMigration: User stylesheets detected, enabling legacy stylesheets."); + Services.prefs.setBoolPref( + "toolkit.legacyUserProfileCustomizations.stylesheets", + true + ); + console.warn( + "ZenUIMigration: User stylesheets detected, enabling legacy stylesheets." + ); this.shouldRestart = true; } } @@ -79,7 +92,11 @@ class nsZenUIMigration { } _migrateV3() { - if (Services.prefs.getStringPref("zen.theme.accent-color", "").startsWith("system")) { + if ( + Services.prefs + .getStringPref("zen.theme.accent-color", "") + .startsWith("system") + ) { Services.prefs.setStringPref("zen.theme.accent-color", "AccentColor"); } } @@ -100,20 +117,23 @@ class nsZenUIMigration { lazy.SessionStore.promiseAllWindowsRestored.then(() => { const win = Services.wm.getMostRecentWindow("navigator:browser"); win.setTimeout(async () => { - const [title, message, learnMore, accept] = await win.document.l10n.formatMessages([ - "zen-window-sync-migration-dialog-title", - "zen-window-sync-migration-dialog-message", - "zen-window-sync-migration-dialog-learn-more", - "zen-window-sync-migration-dialog-accept", - ]); + const [title, message, learnMore, accept] = + await win.document.l10n.formatMessages([ + "zen-window-sync-migration-dialog-title", + "zen-window-sync-migration-dialog-message", + "zen-window-sync-migration-dialog-learn-more", + "zen-window-sync-migration-dialog-accept", + ]); // buttonPressed will be 0 for cancel, 1 for "more info" let buttonPressed = Services.prompt.confirmEx( win, title.value, message.value, - Services.prompt.BUTTON_POS_0 * Services.prompt.BUTTON_TITLE_IS_STRING + - Services.prompt.BUTTON_POS_1 * Services.prompt.BUTTON_TITLE_IS_STRING, + Services.prompt.BUTTON_POS_0 * + Services.prompt.BUTTON_TITLE_IS_STRING + + Services.prompt.BUTTON_POS_1 * + Services.prompt.BUTTON_TITLE_IS_STRING, learnMore.value, accept.value, null, @@ -122,7 +142,10 @@ class nsZenUIMigration { ); // User has clicked on "Learn More" if (buttonPressed === 0) { - win.openTrustedLinkIn("https://docs.zen-browser.app/user-manual/window-sync", "tab"); + win.openTrustedLinkIn( + "https://docs.zen-browser.app/user-manual/window-sync", + "tab" + ); } }, 1000); }); diff --git a/src/zen/common/zen-sets.js b/src/zen/common/zen-sets.js index bc87d6625..c2959fd16 100644 --- a/src/zen/common/zen-sets.js +++ b/src/zen/common/zen-sets.js @@ -6,146 +6,152 @@ document.addEventListener( "MozBeforeInitialXULLayout", () => { // defined in browser-sets.inc - // eslint-disable-next-line complexity - document.getElementById("zenCommandSet").addEventListener("command", (event) => { - switch (event.target.id) { - case "cmd_zenCompactModeToggle": - gZenCompactModeManager.toggle(); - break; - case "cmd_toggleCompactModeIgnoreHover": - gZenCompactModeManager.toggle(true); - break; - case "cmd_zenCompactModeShowSidebar": - gZenCompactModeManager.toggleSidebar(); - break; - case "cmd_zenWorkspaceForward": - gZenWorkspaces.changeWorkspaceShortcut(); - break; - case "cmd_zenWorkspaceBackward": - gZenWorkspaces.changeWorkspaceShortcut(-1); - break; - case "cmd_zenSplitViewGrid": - gZenViewSplitter.toggleShortcut("grid"); - break; - case "cmd_zenSplitViewVertical": - gZenViewSplitter.toggleShortcut("vsep"); - break; - case "cmd_zenSplitViewHorizontal": - gZenViewSplitter.toggleShortcut("hsep"); - break; - case "cmd_zenSplitViewUnsplit": - gZenViewSplitter.toggleShortcut("unsplit"); - break; - case "cmd_zenSplitViewContextMenu": - gZenViewSplitter.contextSplitTabs(); - break; - case "cmd_zenCopyCurrentURLMarkdown": - gZenCommonActions.copyCurrentURLAsMarkdownToClipboard(); - break; - case "cmd_zenCopyCurrentURL": - gZenCommonActions.copyCurrentURLToClipboard(); - break; - case "cmd_zenPinnedTabReset": - gZenPinnedTabManager.resetPinnedTab(gBrowser.selectedTab); - break; - case "cmd_zenPinnedTabResetNoTab": - gZenPinnedTabManager.resetPinnedTab(); - break; - case "cmd_zenToggleSidebar": - gZenVerticalTabsManager.toggleExpand(); - break; - case "cmd_zenOpenZenThemePicker": - gZenThemePicker.openThemePicker(event); - break; - case "cmd_zenChangeWorkspaceTab": - gZenWorkspaces.changeTabWorkspace( - event.sourceEvent.target.getAttribute("zen-workspace-id") - ); - break; - case "cmd_zenToggleTabsOnRight": - gZenVerticalTabsManager.toggleTabsOnRight(); - break; - case "cmd_zenSplitViewLinkInNewTab": - gZenViewSplitter.splitLinkInNewTab(); - break; - case "cmd_zenNewEmptySplit": - setTimeout(() => { - gZenViewSplitter.createEmptySplit(); - }, 0); - break; - case "cmd_zenReplacePinnedUrlWithCurrent": - gZenPinnedTabManager.replacePinnedUrlWithCurrent(); - break; - case "cmd_contextZenAddToEssentials": - gZenPinnedTabManager.addToEssentials(); - break; - case "cmd_contextZenRemoveFromEssentials": - gZenPinnedTabManager.removeEssentials(); - break; - case "cmd_zenCtxDeleteWorkspace": - gZenWorkspaces.contextDeleteWorkspace(event); - break; - case "cmd_zenChangeWorkspaceName": - gZenVerticalTabsManager.renameTabStart({ - target: gZenWorkspaces.activeWorkspaceIndicator.querySelector( - ".zen-current-workspace-indicator-name" - ), - }); - break; - case "cmd_zenChangeWorkspaceIcon": - gZenWorkspaces.changeWorkspaceIcon(); - break; - case "cmd_zenReorderWorkspaces": - gZenUIManager.showToast("zen-workspaces-how-to-reorder-title", { - timeout: 9000, - descriptionId: "zen-workspaces-how-to-reorder-desc", - }); - break; - case "cmd_zenOpenWorkspaceCreation": - gZenWorkspaces.openWorkspaceCreation(event); - break; - case "cmd_zenOpenFolderCreation": - gZenFolders.createFolder([], { - renameFolder: true, - }); - break; - case "cmd_zenTogglePinTab": { - const currentTab = gBrowser.selectedTab; - if (currentTab && !currentTab.hasAttribute("zen-empty-tab")) { - if (currentTab.pinned) { - gBrowser.unpinTab(currentTab); - } else { - gBrowser.pinTab(currentTab); + document + .getElementById("zenCommandSet") + // eslint-disable-next-line complexity + .addEventListener("command", event => { + switch (event.target.id) { + case "cmd_zenCompactModeToggle": + gZenCompactModeManager.toggle(); + break; + case "cmd_toggleCompactModeIgnoreHover": + gZenCompactModeManager.toggle(true); + break; + case "cmd_zenCompactModeShowSidebar": + gZenCompactModeManager.toggleSidebar(); + break; + case "cmd_zenWorkspaceForward": + gZenWorkspaces.changeWorkspaceShortcut(); + break; + case "cmd_zenWorkspaceBackward": + gZenWorkspaces.changeWorkspaceShortcut(-1); + break; + case "cmd_zenSplitViewGrid": + gZenViewSplitter.toggleShortcut("grid"); + break; + case "cmd_zenSplitViewVertical": + gZenViewSplitter.toggleShortcut("vsep"); + break; + case "cmd_zenSplitViewHorizontal": + gZenViewSplitter.toggleShortcut("hsep"); + break; + case "cmd_zenSplitViewUnsplit": + gZenViewSplitter.toggleShortcut("unsplit"); + break; + case "cmd_zenSplitViewContextMenu": + gZenViewSplitter.contextSplitTabs(); + break; + case "cmd_zenCopyCurrentURLMarkdown": + gZenCommonActions.copyCurrentURLAsMarkdownToClipboard(); + break; + case "cmd_zenCopyCurrentURL": + gZenCommonActions.copyCurrentURLToClipboard(); + break; + case "cmd_zenPinnedTabReset": + gZenPinnedTabManager.resetPinnedTab(gBrowser.selectedTab); + break; + case "cmd_zenPinnedTabResetNoTab": + gZenPinnedTabManager.resetPinnedTab(); + break; + case "cmd_zenToggleSidebar": + gZenVerticalTabsManager.toggleExpand(); + break; + case "cmd_zenOpenZenThemePicker": + gZenThemePicker.openThemePicker(event); + break; + case "cmd_zenChangeWorkspaceTab": + gZenWorkspaces.changeTabWorkspace( + event.sourceEvent.target.getAttribute("zen-workspace-id") + ); + break; + case "cmd_zenToggleTabsOnRight": + gZenVerticalTabsManager.toggleTabsOnRight(); + break; + case "cmd_zenSplitViewLinkInNewTab": + gZenViewSplitter.splitLinkInNewTab(); + break; + case "cmd_zenNewEmptySplit": + setTimeout(() => { + gZenViewSplitter.createEmptySplit(); + }, 0); + break; + case "cmd_zenReplacePinnedUrlWithCurrent": + gZenPinnedTabManager.replacePinnedUrlWithCurrent(); + break; + case "cmd_contextZenAddToEssentials": + gZenPinnedTabManager.addToEssentials(); + break; + case "cmd_contextZenRemoveFromEssentials": + gZenPinnedTabManager.removeEssentials(); + break; + case "cmd_zenCtxDeleteWorkspace": + gZenWorkspaces.contextDeleteWorkspace(event); + break; + case "cmd_zenChangeWorkspaceName": + gZenVerticalTabsManager.renameTabStart({ + target: gZenWorkspaces.activeWorkspaceIndicator.querySelector( + ".zen-current-workspace-indicator-name" + ), + }); + break; + case "cmd_zenChangeWorkspaceIcon": + gZenWorkspaces.changeWorkspaceIcon(); + break; + case "cmd_zenReorderWorkspaces": + gZenUIManager.showToast("zen-workspaces-how-to-reorder-title", { + timeout: 9000, + descriptionId: "zen-workspaces-how-to-reorder-desc", + }); + break; + case "cmd_zenOpenWorkspaceCreation": + gZenWorkspaces.openWorkspaceCreation(event); + break; + case "cmd_zenOpenFolderCreation": + gZenFolders.createFolder([], { + renameFolder: true, + }); + break; + case "cmd_zenTogglePinTab": { + const currentTab = gBrowser.selectedTab; + if (currentTab && !currentTab.hasAttribute("zen-empty-tab")) { + if (currentTab.pinned) { + gBrowser.unpinTab(currentTab); + } else { + gBrowser.pinTab(currentTab); + } } + break; } - break; - } - case "cmd_zenCloseUnpinnedTabs": - gZenWorkspaces.closeAllUnpinnedTabs(); - break; - case "cmd_zenUnloadWorkspace": { - gZenWorkspaces.unloadWorkspace(); - break; - } - case "cmd_zenNewNavigatorUnsynced": - OpenBrowserWindow({ zenSyncedWindow: false }); - break; - case "cmd_zenNewLiveFolder": { - const { ZenLiveFoldersManager } = ChromeUtils.importESModule( - "resource:///modules/zen/ZenLiveFoldersManager.sys.mjs" - ); - ZenLiveFoldersManager.handleEvent(event); - break; - } - default: - gZenGlanceManager.handleMainCommandSet(event); - if (event.target.id.startsWith("cmd_zenWorkspaceSwitch")) { - const index = parseInt(event.target.id.replace("cmd_zenWorkspaceSwitch", ""), 10) - 1; - gZenWorkspaces.shortcutSwitchTo(index); + case "cmd_zenCloseUnpinnedTabs": + gZenWorkspaces.closeAllUnpinnedTabs(); + break; + case "cmd_zenUnloadWorkspace": { + gZenWorkspaces.unloadWorkspace(); + break; } - break; - } - }); + case "cmd_zenNewNavigatorUnsynced": + OpenBrowserWindow({ zenSyncedWindow: false }); + break; + case "cmd_zenNewLiveFolder": { + const { ZenLiveFoldersManager } = ChromeUtils.importESModule( + "resource:///modules/zen/ZenLiveFoldersManager.sys.mjs" + ); + ZenLiveFoldersManager.handleEvent(event); + break; + } + default: + gZenGlanceManager.handleMainCommandSet(event); + if (event.target.id.startsWith("cmd_zenWorkspaceSwitch")) { + const index = + parseInt( + event.target.id.replace("cmd_zenWorkspaceSwitch", ""), + 10 + ) - 1; + gZenWorkspaces.shortcutSwitchTo(index); + } + break; + } + }); }, { once: true } ); diff --git a/src/zen/common/zenThemeModifier.js b/src/zen/common/zenThemeModifier.js index 7cc3eeff3..40845b827 100644 --- a/src/zen/common/zenThemeModifier.js +++ b/src/zen/common/zenThemeModifier.js @@ -38,7 +38,8 @@ * begin listening to changes in preferred color scheme. */ init() { - this._inMainBrowserWindow = window.location.href == "chrome://browser/content/browser.xhtml"; + this._inMainBrowserWindow = + window.location.href == "chrome://browser/content/browser.xhtml"; this.listenForEvents(); this.updateAllThemeBasics(); }, @@ -91,14 +92,23 @@ }, updateBorderRadius() { - const borderRadius = Services.prefs.getIntPref("zen.theme.border-radius", -1); + const borderRadius = Services.prefs.getIntPref( + "zen.theme.border-radius", + -1 + ); // -1 is the default value, will use platform-native values // otherwise, use the custom value if (borderRadius == -1) { if (AppConstants.platform == "macosx") { - const targetRadius = window.matchMedia("(-moz-mac-tahoe-theme)").matches ? 16 : 10; - document.documentElement.style.setProperty("--zen-border-radius", targetRadius + "px"); + const targetRadius = window.matchMedia("(-moz-mac-tahoe-theme)") + .matches + ? 16 + : 10; + document.documentElement.style.setProperty( + "--zen-border-radius", + targetRadius + "px" + ); } else if (AppConstants.platform == "linux") { // Linux uses GTK CSD titlebar radius, default to 8px document.documentElement.style.setProperty( @@ -107,11 +117,17 @@ ); } else { // Windows defaults to 8px - document.documentElement.style.setProperty("--zen-border-radius", "8px"); + document.documentElement.style.setProperty( + "--zen-border-radius", + "8px" + ); } } else { // Use the overridden value - document.documentElement.style.setProperty("--zen-border-radius", borderRadius + "px"); + document.documentElement.style.setProperty( + "--zen-border-radius", + borderRadius + "px" + ); } }, @@ -121,14 +137,19 @@ if ( document.documentElement.hasAttribute("inFullscreen") && window.gZenCompactModeManager?.preference && - !document.getElementById("tabbrowser-tabbox")?.hasAttribute("zen-split-view") && + !document + .getElementById("tabbrowser-tabbox") + ?.hasAttribute("zen-split-view") && Services.prefs.getBoolPref("zen.view.borderless-fullscreen", true) ) { separation = 0; } // In order to still use it on fullscreen, even if it's 0px, add .1px (almost invisible) separation = Math.max(kMinElementSeparation, separation); - document.documentElement.style.setProperty("--zen-element-separation", separation + "px"); + document.documentElement.style.setProperty( + "--zen-element-separation", + separation + "px" + ); if (separation == kMinElementSeparation) { document.documentElement.setAttribute("zen-no-padding", true); } else { @@ -147,8 +168,13 @@ * Update the accent color. */ updateAccentColor() { - const accentColor = Services.prefs.getStringPref("zen.theme.accent-color"); - document.documentElement.style.setProperty("--zen-primary-color", accentColor); + const accentColor = Services.prefs.getStringPref( + "zen.theme.accent-color" + ); + document.documentElement.style.setProperty( + "--zen-primary-color", + accentColor + ); }, }; diff --git a/src/zen/compact-mode/ZenCompactMode.mjs b/src/zen/compact-mode/ZenCompactMode.mjs index 4f22e74cd..3e5dfb0db 100644 --- a/src/zen/compact-mode/ZenCompactMode.mjs +++ b/src/zen/compact-mode/ZenCompactMode.mjs @@ -44,14 +44,20 @@ window.gZenCompactModeManager = { _removeHoverFrames: {}, // Delay to avoid flickering when hovering over the sidebar - HOVER_HACK_DELAY: Services.prefs.getIntPref("zen.view.compact.hover-hack-delay", 0), + HOVER_HACK_DELAY: Services.prefs.getIntPref( + "zen.view.compact.hover-hack-delay", + 0 + ), preInit() { this._wasInCompactMode = Services.prefs.getBoolPref( "zen.view.compact.enable-at-startup", false ); - this._canDebugLog = Services.prefs.getBoolPref("zen.view.compact.debug", false); + this._canDebugLog = Services.prefs.getBoolPref( + "zen.view.compact.debug", + false + ); this.addContextMenu(); }, @@ -60,12 +66,18 @@ window.gZenCompactModeManager = { this.addMouseActions(); const tabIsRightObserver = this._updateSidebarIsOnRight.bind(this); - Services.prefs.addObserver("zen.tabs.vertical.right-side", tabIsRightObserver); + Services.prefs.addObserver( + "zen.tabs.vertical.right-side", + tabIsRightObserver + ); window.addEventListener( "unload", () => { - Services.prefs.removeObserver("zen.tabs.vertical.right-side", tabIsRightObserver); + Services.prefs.removeObserver( + "zen.tabs.vertical.right-side", + tabIsRightObserver + ); }, { once: true } ); @@ -78,7 +90,9 @@ window.gZenCompactModeManager = { this.addHasPolyfillObserver(); // Clear hover states when window state changes (minimize, maximize, etc.) - window.addEventListener("sizemodechange", () => this._clearAllHoverStates()); + window.addEventListener("sizemodechange", () => + this._clearAllHoverStates() + ); this._canShowBackgroundTabToast = Services.prefs.getBoolPref( "zen.view.compact.show-background-tab-toast", @@ -86,7 +100,7 @@ window.gZenCompactModeManager = { ); if (AppConstants.platform == "macosx") { - window.addEventListener("mouseover", (event) => { + window.addEventListener("mouseover", event => { const buttons = gZenVerticalTabsManager.actualWindowButtons; if (event.target.closest(".titlebar-buttonbox-container") === buttons) { return; @@ -112,7 +126,9 @@ window.gZenCompactModeManager = { }, get shouldBeCompact() { - return !document.documentElement.getAttribute("chromehidden")?.includes("toolbar"); + return !document.documentElement + .getAttribute("chromehidden") + ?.includes("toolbar"); }, set preference(value) { @@ -147,7 +163,9 @@ window.gZenCompactModeManager = { if (typeof this._sidebarIsOnRight !== "undefined") { return this._sidebarIsOnRight; } - this._sidebarIsOnRight = Services.prefs.getBoolPref("zen.tabs.vertical.right-side"); + this._sidebarIsOnRight = Services.prefs.getBoolPref( + "zen.tabs.vertical.right-side" + ); return this._sidebarIsOnRight; }, @@ -156,7 +174,12 @@ window.gZenCompactModeManager = { }, addHasPolyfillObserver() { - const attributes = ["panelopen", "open", "breakout-extend", "zen-floating-urlbar"]; + const attributes = [ + "panelopen", + "open", + "breakout-extend", + "zen-floating-urlbar", + ]; this.sidebarObserverId = ZenHasPolyfill.observeSelectorExistence( this.sidebar, [ @@ -230,7 +253,9 @@ window.gZenCompactModeManager = { updateCompactModeContext(isSingleToolbar) { const isIllegalState = this.checkIfIllegalState(); - const menuitem = document.getElementById("zen-context-menu-compact-mode-toggle"); + const menuitem = document.getElementById( + "zen-context-menu-compact-mode-toggle" + ); const menu = document.getElementById("zen-context-menu-compact-mode"); if (!menu) { return; @@ -292,7 +317,8 @@ window.gZenCompactModeManager = { // on macos: collapsed + left side + only toolbar // on windows: collapsed + right side + only toolbar const closelyIllegalState = - (isLeftSideButtons && !isRightSidebar) || (!isLeftSideButtons && isRightSidebar); + (isLeftSideButtons && !isRightSidebar) || + (!isLeftSideButtons && isRightSidebar); if (closelyIllegalState && canHideToolbar && !canHideSidebar) { // This state is illegal Services.prefs.setBoolPref("zen.view.compact.hide-tabbar", true); @@ -304,7 +330,7 @@ window.gZenCompactModeManager = { }, callAllEventListeners() { - this._eventListeners.forEach((callback) => callback()); + this._eventListeners.forEach(callback => callback()); }, addEventListener(callback) { @@ -338,7 +364,9 @@ window.gZenCompactModeManager = { } else { ZenHasPolyfill.disconnectObserver(this.sidebarObserverId); } - window.dispatchEvent(new CustomEvent("ZenCompactMode:Toggled", { detail: this.preference })); + window.dispatchEvent( + new CustomEvent("ZenCompactMode:Toggled", { detail: this.preference }) + ); }, // NOTE: Dont actually use event, it's just so we make sure @@ -350,14 +378,20 @@ window.gZenCompactModeManager = { } let sidebarWidth = this.sidebar.getBoundingClientRect().width; const shouldRecalculate = - this.preference || document.documentElement.hasAttribute("zen-creating-workspace"); - const sidebarExpanded = document.documentElement.hasAttribute("zen-sidebar-expanded"); + this.preference || + document.documentElement.hasAttribute("zen-creating-workspace"); + const sidebarExpanded = document.documentElement.hasAttribute( + "zen-sidebar-expanded" + ); if (sidebarWidth > 1) { if (shouldRecalculate && sidebarExpanded) { sidebarWidth = Math.max(sidebarWidth, 150); } // Second variable to get the genuine width of the sidebar - this.sidebar.style.setProperty("--actual-zen-sidebar-width", `${sidebarWidth}px`); + this.sidebar.style.setProperty( + "--actual-zen-sidebar-width", + `${sidebarWidth}px` + ); window.dispatchEvent(new window.Event("resize")); // To recalculate the layout if ( event && @@ -368,7 +402,10 @@ window.gZenCompactModeManager = { return; } delete gZenVerticalTabsManager._hadSidebarCollapse; - this.sidebar.style.setProperty("--zen-sidebar-width", `${sidebarWidth}px`); + this.sidebar.style.setProperty( + "--zen-sidebar-width", + `${sidebarWidth}px` + ); } return sidebarWidth; }, @@ -390,14 +427,16 @@ window.gZenCompactModeManager = { animateCompactMode() { // Get the splitter width before hiding it (we need to hide it before animating on right) document.documentElement.setAttribute("zen-compact-animating", "true"); - return new Promise((resolve) => { + return new Promise(resolve => { // We need to set the splitter width before hiding it let splitterWidth = document .getElementById("zen-sidebar-splitter") .getBoundingClientRect().width; const isCompactMode = this.preference; const canHideSidebar = this.canHideSidebar; - let canAnimate = lazy.COMPACT_MODE_CAN_ANIMATE_SIDEBAR && !this.isSidebarPotentiallyOpen(); + let canAnimate = + lazy.COMPACT_MODE_CAN_ANIMATE_SIDEBAR && + !this.isSidebarPotentiallyOpen(); if (typeof this._wasInCompactMode !== "undefined") { canAnimate = false; delete this._wasInCompactMode; @@ -443,8 +482,14 @@ window.gZenCompactModeManager = { .animate( this.sidebar, { - marginRight: [0, this.sidebarIsOnRight ? `-${sidebarWidth}px` : 0], - marginLeft: [0, this.sidebarIsOnRight ? 0 : `-${sidebarWidth}px`], + marginRight: [ + 0, + this.sidebarIsOnRight ? `-${sidebarWidth}px` : 0, + ], + marginLeft: [ + 0, + this.sidebarIsOnRight ? 0 : `-${sidebarWidth}px`, + ], }, { ease: "easeIn", @@ -511,7 +556,9 @@ window.gZenCompactModeManager = { ) .then(() => { this.sidebar.removeAttribute("animate"); - document.getElementById("browser").style.removeProperty("overflow"); + document + .getElementById("browser") + .style.removeProperty("overflow"); this.sidebar.style.transition = "none"; this.sidebar.style.removeProperty("margin-right"); this.sidebar.style.removeProperty("margin-left"); @@ -533,7 +580,9 @@ window.gZenCompactModeManager = { }, updateContextMenu() { - const toggle = document.getElementById("zen-context-menu-compact-mode-toggle"); + const toggle = document.getElementById( + "zen-context-menu-compact-mode-toggle" + ); if (!toggle) { return; } @@ -569,7 +618,9 @@ window.gZenCompactModeManager = { }, _updateSidebarIsOnRight() { - this._sidebarIsOnRight = Services.prefs.getBoolPref("zen.tabs.vertical.right-side"); + this._sidebarIsOnRight = Services.prefs.getBoolPref( + "zen.tabs.vertical.right-side" + ); }, toggleSidebar() { @@ -580,7 +631,9 @@ window.gZenCompactModeManager = { if (this._hideAfterHoverDuration) { return this._hideAfterHoverDuration; } - return Services.prefs.getIntPref("zen.view.compact.toolbar-hide-after-hover.duration"); + return Services.prefs.getIntPref( + "zen.view.compact.toolbar-hide-after-hover.duration" + ); }, get hoverableElements() { @@ -613,7 +666,9 @@ window.gZenCompactModeManager = { if (this._flashTimeouts[id]) { clearTimeout(this._flashTimeouts[id]); } else { - requestAnimationFrame(() => this._setElementExpandAttribute(element, true, attrName)); + requestAnimationFrame(() => + this._setElementExpandAttribute(element, true, attrName) + ); } this._flashTimeouts[id] = setTimeout(() => { window.requestAnimationFrame(() => { @@ -629,11 +684,18 @@ window.gZenCompactModeManager = { }, _setElementExpandAttribute(element, value, attr = "zen-has-hover") { - const kVerifiedAttributes = ["zen-has-hover", "has-popup-menu", "zen-compact-mode-active"]; + const kVerifiedAttributes = [ + "zen-has-hover", + "has-popup-menu", + "zen-compact-mode-active", + ]; const isToolbar = element.id === "zen-appcontent-navbar-wrapper"; this.log("Setting", attr, "to", value, "on element", element?.id); if (value) { - if (attr === "zen-has-hover" && element !== gZenVerticalTabsManager.actualWindowButtons) { + if ( + attr === "zen-has-hover" && + element !== gZenVerticalTabsManager.actualWindowButtons + ) { element.setAttribute("zen-has-implicit-hover", "true"); if (!lazy.COMPACT_MODE_SHOW_SIDEBAR_AND_TOOLBAR_ON_HOVER) { return; @@ -659,7 +721,9 @@ window.gZenCompactModeManager = { // Only remove if none of the verified attributes are present if ( isToolbar && - !kVerifiedAttributes.some((verifiedAttr) => element.hasAttribute(verifiedAttr)) + !kVerifiedAttributes.some(verifiedAttr => + element.hasAttribute(verifiedAttr) + ) ) { gBrowser.tabpanels.removeAttribute("has-toolbar-hovered"); } @@ -667,11 +731,14 @@ window.gZenCompactModeManager = { }, addMouseActions() { - gURLBar.addEventListener("mouseenter", (event) => { + gURLBar.addEventListener("mouseenter", event => { this.log("Mouse entered URL bar:", event.target); if (event.target.closest("#urlbar[zen-floating-urlbar]")) { window.requestAnimationFrame(() => { - this._setElementExpandAttribute(gZenVerticalTabsManager.actualWindowButtons, false); + this._setElementExpandAttribute( + gZenVerticalTabsManager.actualWindowButtons, + false + ); }); this._hasHoveredUrlbar = true; } @@ -685,7 +752,7 @@ window.gZenCompactModeManager = { this._setElementExpandAttribute(target, true); } - const onEnter = (event) => { + const onEnter = event => { setTimeout(() => { if (event.type === "mouseenter" && !event.target.matches(":hover")) { return; @@ -697,7 +764,9 @@ window.gZenCompactModeManager = { this.clearFlashTimeout("has-hover" + target.id); window.requestAnimationFrame(() => { if ( - document.documentElement.getAttribute("supress-primary-adjustment") === "true" || + document.documentElement.getAttribute( + "supress-primary-adjustment" + ) === "true" || this._hasHoveredUrlbar || this._ignoreNextHover || target.hasAttribute("zen-has-hover") @@ -709,9 +778,10 @@ window.gZenCompactModeManager = { }, this.HOVER_HACK_DELAY); }; - const onLeave = (event) => { + const onLeave = event => { if (AppConstants.platform == "macosx") { - const buttonRect = gZenVerticalTabsManager.actualWindowButtons.getBoundingClientRect(); + const buttonRect = + gZenVerticalTabsManager.actualWindowButtons.getBoundingClientRect(); const MAC_WINDOW_BUTTONS_X_BORDER = buttonRect.width + buttonRect.x; const MAC_WINDOW_BUTTONS_Y_BORDER = buttonRect.height + buttonRect.y; if ( @@ -734,8 +804,12 @@ window.gZenCompactModeManager = { } if ( - event.explicitOriginalTarget?.closest?.("#urlbar[zen-floating-urlbar]") || - (document.documentElement.getAttribute("supress-primary-adjustment") === "true" && + event.explicitOriginalTarget?.closest?.( + "#urlbar[zen-floating-urlbar]" + ) || + (document.documentElement.getAttribute( + "supress-primary-adjustment" + ) === "true" && gZenVerticalTabsManager._hasSetSingleToolbar) || this._hasHoveredUrlbar || this._ignoreNextHover || @@ -758,8 +832,8 @@ window.gZenCompactModeManager = { "zen-has-hover" ); } else { - this._removeHoverFrames[target.id] = window.requestAnimationFrame(() => - this._setElementExpandAttribute(target, false) + this._removeHoverFrames[target.id] = window.requestAnimationFrame( + () => this._setElementExpandAttribute(target, false) ); } }, this.HOVER_HACK_DELAY); @@ -772,9 +846,12 @@ window.gZenCompactModeManager = { target.addEventListener("dragleave", onLeave); } - document.documentElement.addEventListener("mouseleave", (event) => { + document.documentElement.addEventListener("mouseleave", event => { setTimeout(() => { - const screenEdgeCrossed = this._getCrossedEdge(event.pageX, event.pageY); + const screenEdgeCrossed = this._getCrossedEdge( + event.pageX, + event.pageY + ); if (!screenEdgeCrossed) { return; } @@ -783,8 +860,19 @@ window.gZenCompactModeManager = { continue; } const target = entry.element; - const boundAxis = entry.screenEdge === "right" || entry.screenEdge === "left" ? "y" : "x"; - if (!this._positionInBounds(boundAxis, target, event.pageX, event.pageY, 7)) { + const boundAxis = + entry.screenEdge === "right" || entry.screenEdge === "left" + ? "y" + : "x"; + if ( + !this._positionInBounds( + boundAxis, + target, + event.pageX, + event.pageY, + 7 + ) + ) { continue; } window.cancelAnimationFrame(this._removeHoverFrames[target.id]); @@ -821,7 +909,12 @@ window.gZenCompactModeManager = { }); }, - _getCrossedEdge(posX, posY, element = document.documentElement, maxDistance = 10) { + _getCrossedEdge( + posX, + posY, + element = document.documentElement, + maxDistance = 10 + ) { const targetBox = element.getBoundingClientRect(); posX = Math.max(targetBox.left, Math.min(posX, targetBox.right)); posY = Math.max(targetBox.top, Math.min(posY, targetBox.bottom)); @@ -843,7 +936,11 @@ window.gZenCompactModeManager = { // Clear hover attributes from all hoverable elements for (let entry of this.hoverableElements) { const target = entry.element; - if (target && !target.matches(":hover") && target.hasAttribute("zen-has-hover")) { + if ( + target && + !target.matches(":hover") && + target.hasAttribute("zen-has-hover") + ) { this._setElementExpandAttribute(target, false); this.clearFlashTimeout("has-hover" + target.id); } diff --git a/src/zen/downloads/ZenDownloadAnimation.mjs b/src/zen/downloads/ZenDownloadAnimation.mjs index 84c36a052..8ef63f2bf 100644 --- a/src/zen/downloads/ZenDownloadAnimation.mjs +++ b/src/zen/downloads/ZenDownloadAnimation.mjs @@ -86,7 +86,9 @@ class nsZenDownloadAnimationElement extends HTMLElement { ); this.shadowRoot.appendChild(link); } catch (error) { - console.error(`[${nsZenDownloadAnimationElement.name}] Error loading arc styles: ${error}`); + console.error( + `[${nsZenDownloadAnimationElement.name}] Error loading arc styles: ${error}` + ); } } @@ -99,7 +101,8 @@ class nsZenDownloadAnimationElement extends HTMLElement { } // Determine animation target position - const { endPosition, isDownloadButtonVisible } = this.#determineEndPosition(); + const { endPosition, isDownloadButtonVisible } = + this.#determineEndPosition(); const areTabsPositionedRight = this.#areTabsOnRightSide(); // Create and prepare the arc animation element @@ -131,7 +134,10 @@ class nsZenDownloadAnimationElement extends HTMLElement { } #areTabsOnRightSide() { - const position = Services.prefs.getIntPref("zen.downloads.icon-popup-position", 0); + const position = Services.prefs.getIntPref( + "zen.downloads.icon-popup-position", + 0 + ); if (position === 1) { return false; } @@ -143,7 +149,8 @@ class nsZenDownloadAnimationElement extends HTMLElement { #determineEndPosition() { const downloadsButton = document.getElementById("downloads-button"); - const isDownloadButtonVisible = downloadsButton && this.#isElementVisible(downloadsButton); + const isDownloadButtonVisible = + downloadsButton && this.#isElementVisible(downloadsButton); let endPosition = { clientX: 0, clientY: 0 }; @@ -161,7 +168,9 @@ class nsZenDownloadAnimationElement extends HTMLElement { const wrapperRect = wrapper.getBoundingClientRect(); endPosition = { - clientX: areTabsPositionedRight ? wrapperRect.right - 42 : wrapperRect.left + 42, + clientX: areTabsPositionedRight + ? wrapperRect.right - 42 + : wrapperRect.left + 42, clientY: wrapperRect.bottom - 40, }; } @@ -179,7 +188,9 @@ class nsZenDownloadAnimationElement extends HTMLElement { `; const fragment = window.MozXULElement.parseXULToFragment(arcAnimationHTML); - const animationElement = fragment.querySelector(".zen-download-arc-animation"); + const animationElement = fragment.querySelector( + ".zen-download-arc-animation" + ); Object.assign(animationElement.style, { left: `${startPosition.clientX}px`, @@ -194,7 +205,10 @@ class nsZenDownloadAnimationElement extends HTMLElement { #calculateOptimalArc(startPosition, endPosition, distance) { // Calculate available space for the arc - const availableTopSpace = Math.min(startPosition.clientY, endPosition.clientY); + const availableTopSpace = Math.min( + startPosition.clientY, + endPosition.clientY + ); const viewportHeight = window.innerHeight; const availableBottomSpace = viewportHeight - Math.max(startPosition.clientY, endPosition.clientY); @@ -203,7 +217,9 @@ class nsZenDownloadAnimationElement extends HTMLElement { const shouldArcDownward = availableBottomSpace > availableTopSpace; // Use the space in the direction we're arcing - const availableSpace = shouldArcDownward ? availableBottomSpace : availableTopSpace; + const availableSpace = shouldArcDownward + ? availableBottomSpace + : availableTopSpace; // Limit arc height to a percentage of the available space const arcHeight = Math.min( @@ -233,19 +249,30 @@ class nsZenDownloadAnimationElement extends HTMLElement { } await gZenUIManager.motion.animate(arcAnimationElement, sequence, { - duration: Services.prefs.getIntPref("zen.downloads.download-animation-duration") / 1000, + duration: + Services.prefs.getIntPref( + "zen.downloads.download-animation-duration" + ) / 1000, easing: "cubic-bezier(0.37, 0, 0.63, 1)", fill: "forwards", }); this.#cleanArcAnimation(arcAnimationElement); } catch (error) { - console.error("[nsZenDownloadAnimationElement] Error in animation sequence:", error); + console.error( + "[nsZenDownloadAnimationElement] Error in animation sequence:", + error + ); this.#cleanArcAnimation(arcAnimationElement); } } - #createArcAnimationSequence(distanceX, distanceY, arcHeight, shouldArcDownward) { + #createArcAnimationSequence( + distanceX, + distanceY, + arcHeight, + shouldArcDownward + ) { const sequence = { offset: [], opacity: [], transform: [] }; const arcDirection = shouldArcDownward ? 1 : -1; @@ -284,7 +311,9 @@ class nsZenDownloadAnimationElement extends HTMLElement { // Position on arc const x = distanceX * eased; - const y = distanceY * eased + arcDirection * arcHeight * (1 - (2 * eased - 1) ** 2); + const y = + distanceY * eased + + arcDirection * arcHeight * (1 - (2 * eased - 1) ** 2); // Calculate rotation to point in the direction of movement let rotation = previousRotation; @@ -293,10 +322,12 @@ class nsZenDownloadAnimationElement extends HTMLElement { const prevX = distanceX * prevEased; const prevAdjustedProgress = prevEased * 2 - 1; - const prevVerticalOffset = arcDirection * arcHeight * (1 - prevAdjustedProgress * 2); + const prevVerticalOffset = + arcDirection * arcHeight * (1 - prevAdjustedProgress * 2); const prevY = distanceY * prevEased + prevVerticalOffset; - const targetRotation = Math.atan2(y - prevY, x - prevX) * (180 / Math.PI); + const targetRotation = + Math.atan2(y - prevY, x - prevX) * (180 / Math.PI); rotation += (targetRotation - previousRotation) * 0.01; previousRotation = rotation; @@ -353,8 +384,11 @@ class nsZenDownloadAnimationElement extends HTMLElement { const sideProp = areTabsPositionedRight ? "right" : "left"; - const fragment = window.MozXULElement.parseXULToFragment(boxAnimationHTML); - this.#boxAnimationElement = fragment.querySelector(".zen-download-box-animation"); + const fragment = + window.MozXULElement.parseXULToFragment(boxAnimationHTML); + this.#boxAnimationElement = fragment.querySelector( + ".zen-download-box-animation" + ); Object.assign(this.#boxAnimationElement.style, { bottom: "24px", @@ -405,7 +439,10 @@ class nsZenDownloadAnimationElement extends HTMLElement { } #getBoxAnimationDurationMs() { - return Services.prefs.getIntPref("zen.downloads.download-animation-duration") + 200; + return ( + Services.prefs.getIntPref("zen.downloads.download-animation-duration") + + 200 + ); } async #finishBoxAnimation(areTabsPositionedRight) { diff --git a/src/zen/drag-and-drop/ZenDragAndDrop.js b/src/zen/drag-and-drop/ZenDragAndDrop.js index 9cc6f9f91..7534706b9 100644 --- a/src/zen/drag-and-drop/ZenDragAndDrop.js +++ b/src/zen/drag-and-drop/ZenDragAndDrop.js @@ -8,9 +8,10 @@ // Wrap in a block to prevent leaking to window scope. { - const isTab = (element) => gBrowser.isTab(element); - const isTabGroupLabel = (element) => gBrowser.isTabGroupLabel(element); - const isEssentialsPromo = (element) => element?.tagName.toUpperCase() == "ZEN-ESSENTIALS-PROMO"; + const isTab = element => gBrowser.isTab(element); + const isTabGroupLabel = element => gBrowser.isTabGroupLabel(element); + const isEssentialsPromo = element => + element?.tagName.toUpperCase() == "ZEN-ESSENTIALS-PROMO"; /** * The elements in the tab strip from `this.ariaFocusableItems` that contain @@ -34,7 +35,7 @@ * @param {MozTabbrowserTab|typeof MozTabbrowserTabGroup.labelElement} element * @returns {MozTabbrowserTab|vbox} */ - const elementToMove = (element) => { + const elementToMove = element => { if ( !element || element.closest(".zen-current-workspace-indicator") || @@ -118,9 +119,13 @@ init() { super.init(); this.handle_windowDragEnter = this.handle_windowDragEnter.bind(this); - window.addEventListener("dragleave", this.handle_windowDragLeave.bind(this), { - capture: true, - }); + window.addEventListener( + "dragleave", + this.handle_windowDragLeave.bind(this), + { + capture: true, + } + ); } startTabDrag(event, tab, ...args) { @@ -133,7 +138,11 @@ tab = tab.group; } const draggingTabs = tab.multiselected ? gBrowser.selectedTabs : [tab]; - const { offsetX, offsetY } = this.#getDragImageOffset(event, tab, draggingTabs); + const { offsetX, offsetY } = this.#getDragImageOffset( + event, + tab, + draggingTabs + ); const dragImage = this.#createDragImageForTabs(draggingTabs); this.originalDragImageArgs = [dragImage, offsetX, offsetY]; dt.setDragImage(...this.originalDragImageArgs); @@ -146,7 +155,9 @@ const periphery = gZenWorkspaces.activeWorkspaceElement.querySelector( "#tabbrowser-arrowscrollbox-periphery" ); - const tabRect = window.windowUtils.getBoundsWithoutFlushing(movingTabs[0]); + const tabRect = window.windowUtils.getBoundsWithoutFlushing( + movingTabs[0] + ); const wrapper = document.createElement("div"); let movingTabsCount = Math.min(movingTabs.length, 3); wrapper.style.width = tabRect.width + "px"; @@ -160,7 +171,8 @@ if (tab.hasAttribute("zen-essential")) { const rect = tab.getBoundingClientRect(); tabClone.style.minWidth = tabClone.style.maxWidth = `${rect.width}px`; - tabClone.style.minHeight = tabClone.style.maxHeight = `${rect.height}px`; + tabClone.style.minHeight = + tabClone.style.maxHeight = `${rect.height}px`; if (tabClone.hasAttribute("visuallyselected")) { tabClone.style.transform = "translate(-50%, -50%)"; } @@ -181,9 +193,16 @@ if (isTab(tabClone)) { // We need to limit the label content so the drag image doesn't grow too big. const label = tabClone.textLabel; - const tabLabelParentWidth = label.parentElement.getBoundingClientRect().width; - label.textContent = label.textContent.slice(0, Math.floor(tabLabelParentWidth / 6)); - } else if (gBrowser.isTabGroup(tabClone) && tabClone.hasAttribute("split-view-group")) { + const tabLabelParentWidth = + label.parentElement.getBoundingClientRect().width; + label.textContent = label.textContent.slice( + 0, + Math.floor(tabLabelParentWidth / 6) + ); + } else if ( + gBrowser.isTabGroup(tabClone) && + tabClone.hasAttribute("split-view-group") + ) { let tabs = tab.tabs; for (let j = 0; j < tabs.length; j++) { const tabInGroup = tabs[j]; @@ -220,7 +239,10 @@ // eslint-disable-next-line complexity _animateTabMove(event) { let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0); - if (event.target.closest("#zen-essentials") && !isEssentialsPromo(event.target)) { + if ( + event.target.closest("#zen-essentials") && + !isEssentialsPromo(event.target) + ) { if (!isTab(draggedTab)) { this.clearDragOverVisuals(); return; @@ -242,7 +264,9 @@ tabs = [...movingTabs]; } - let screen = this._tabbrowserTabs.verticalMode ? event.screenY : event.screenX; + let screen = this._tabbrowserTabs.verticalMode + ? event.screenY + : event.screenX; if (screen == dragData.animLastScreenPos) { return; } @@ -255,9 +279,11 @@ tabs.reverse(); } - let bounds = (ele) => window.windowUtils.getBoundsWithoutFlushing(ele); + let bounds = ele => window.windowUtils.getBoundsWithoutFlushing(ele); let logicalForward = screenForward != this._rtlMode; - let screenAxis = this._tabbrowserTabs.verticalMode ? "screenY" : "screenX"; + let screenAxis = this._tabbrowserTabs.verticalMode + ? "screenY" + : "screenX"; let size = this._tabbrowserTabs.verticalMode ? "height" : "width"; let { width: tabWidth, height: tabHeight } = bounds(draggedTab); let tabSize = this._tabbrowserTabs.verticalMode ? tabHeight : tabWidth; @@ -275,7 +301,7 @@ ); let lastMovingTab = movingTabs.at(-1); let firstMovingTab = movingTabs[0]; - let endEdge = (ele) => ele[screenAxis] + bounds(ele)[size]; + let endEdge = ele => ele[screenAxis] + bounds(ele)[size]; let lastMovingTabScreen = endEdge(lastMovingTab); let firstMovingTabScreen = firstMovingTab[screenAxis]; let shiftSize = lastMovingTabScreen - firstMovingTabScreen; @@ -298,7 +324,8 @@ // Center the tab under the cursor if the tab is not under the cursor while dragging let draggedTabScreenAxis = draggedTab[screenAxis] + translate; if ( - (screen < draggedTabScreenAxis || screen > draggedTabScreenAxis + tabSize) && + (screen < draggedTabScreenAxis || + screen > draggedTabScreenAxis + tabSize) && draggedTabScreenAxis + tabSize < endBound && draggedTabScreenAxis > startBound ) { @@ -309,7 +336,7 @@ dragData.translatePos = translate; - tabs = tabs.filter((t) => !movingTabsSet.has(t) || t == draggedTab); + tabs = tabs.filter(t => !movingTabsSet.has(t) || t == draggedTab); /** * When the `draggedTab` is just starting to move, the `draggedTab` is in @@ -333,16 +360,23 @@ * @returns {number} */ let getTabShift = (item, dropElementIndex) => { - if (item.elementIndex < draggedTab.elementIndex && item.elementIndex >= dropElementIndex) { + if ( + item.elementIndex < draggedTab.elementIndex && + item.elementIndex >= dropElementIndex + ) { return this._rtlMode ? -shiftSize : shiftSize; } - if (item.elementIndex > draggedTab.elementIndex && item.elementIndex < dropElementIndex) { + if ( + item.elementIndex > draggedTab.elementIndex && + item.elementIndex < dropElementIndex + ) { return this._rtlMode ? shiftSize : -shiftSize; } return 0; }; - let oldDropElementIndex = dragData.animDropElementIndex ?? movingTabs[0].elementIndex; + let oldDropElementIndex = + dragData.animDropElementIndex ?? movingTabs[0].elementIndex; /** * Returns the higher % by which one element overlaps another @@ -423,7 +457,9 @@ * time. */ let getOverlappedElement = () => { - let point = (screenForward ? lastMovingTabScreen : firstMovingTabScreen) + translate; + let point = + (screenForward ? lastMovingTabScreen : firstMovingTabScreen) + + translate; let low = 0; let high = tabs.length - 1; while (low <= high) { @@ -433,7 +469,9 @@ } let element = tabs[mid]; let elementForSize = elementToMove(element); - screen = elementForSize[screenAxis] + getTabShift(element, oldDropElementIndex); + screen = + elementForSize[screenAxis] + + getTabShift(element, oldDropElementIndex); if (screen > point) { high = mid - 1; @@ -489,11 +527,18 @@ // 4) we just started dragging and the `oldDropElementIndex` has its default // valuë of `movingTabs[0].elementIndex`. In this case, the drop element // shouldn't be a moving tab, so keep it `undefined`. - let lastPossibleDropElement = this._rtlMode ? tabs.find((t) => t != draggedTab) : undefined; - let maxElementIndexForDropElement = lastPossibleDropElement?.elementIndex; + let lastPossibleDropElement = this._rtlMode + ? tabs.find(t => t != draggedTab) + : undefined; + let maxElementIndexForDropElement = + lastPossibleDropElement?.elementIndex; if (Number.isInteger(maxElementIndexForDropElement)) { - let index = Math.min(oldDropElementIndex, maxElementIndexForDropElement); - let oldDropElementCandidate = this._tabbrowserTabs.ariaFocusableItems.at(index); + let index = Math.min( + oldDropElementIndex, + maxElementIndexForDropElement + ); + let oldDropElementCandidate = + this._tabbrowserTabs.ariaFocusableItems.at(index); if (!movingTabsSet.has(oldDropElementCandidate)) { dropElement = oldDropElementCandidate; } @@ -507,7 +552,8 @@ let dropElementForOverlap = elementToMove(dropElement); let dropElementScreen = dropElementForOverlap[screenAxis]; - let dropElementPos = dropElementScreen + getTabShift(dropElement, oldDropElementIndex); + let dropElementPos = + dropElementScreen + getTabShift(dropElement, oldDropElementIndex); let dropElementSize = bounds(dropElementForOverlap)[size]; let firstMovingTabPos = firstMovingTabScreen + translate; overlapPercent = greatestOverlap( @@ -518,7 +564,9 @@ ); moveOverThreshold = gBrowser._tabGroupsEnabled - ? Services.prefs.getIntPref("browser.tabs.dragDrop.moveOverThresholdPercent") / 100 + ? Services.prefs.getIntPref( + "browser.tabs.dragDrop.moveOverThresholdPercent" + ) / 100 : 0.5; moveOverThreshold = Math.min(1, Math.max(0, moveOverThreshold)); let shouldMoveOver = overlapPercent > moveOverThreshold; @@ -536,7 +584,8 @@ // Recalculate the overlap with the updated drop index for when the // drop element moves over. - dropElementPos = dropElementScreen + getTabShift(dropElement, newDropElementIndex); + dropElementPos = + dropElementScreen + getTabShift(dropElement, newDropElementIndex); overlapPercent = greatestOverlap( firstMovingTabPos, shiftSize, @@ -611,17 +660,25 @@ } #shouldSwitchSpace(event) { - const padding = Services.prefs.getIntPref("zen.workspaces.dnd-switch-padding"); + const padding = Services.prefs.getIntPref( + "zen.workspaces.dnd-switch-padding" + ); // If we are hovering over the edges of the gNavToolbox or the splitter, we // can change the workspace after a short delay. const splitter = document.getElementById("zen-sidebar-splitter"); let rect = window.windowUtils.getBoundsWithoutFlushing(gNavToolbox); - if (!(gZenCompactModeManager.preference && gZenCompactModeManager.canHideSidebar)) { - rect.width += window.windowUtils.getBoundsWithoutFlushing(splitter).width; + if (!( + gZenCompactModeManager.preference && + gZenCompactModeManager.canHideSidebar + )) { + rect.width += + window.windowUtils.getBoundsWithoutFlushing(splitter).width; } const { clientX } = event; - const isNearLeftEdge = clientX >= rect.left - padding && clientX <= rect.left + padding; - const isNearRightEdge = clientX >= rect.right - padding && clientX <= rect.right + padding; + const isNearLeftEdge = + clientX >= rect.left - padding && clientX <= rect.left + padding; + const isNearRightEdge = + clientX >= rect.right - padding && clientX <= rect.right + padding; return { isNearLeftEdge, isNearRightEdge }; } @@ -639,14 +696,19 @@ this.clearSpaceSwitchTimer(); return; } - const { isNearLeftEdge, isNearRightEdge } = this.#shouldSwitchSpace(event); + const { isNearLeftEdge, isNearRightEdge } = + this.#shouldSwitchSpace(event); if (isNearLeftEdge || isNearRightEdge) { if (!this.#changeSpaceTimer) { this.#changeSpaceTimer = setTimeout(() => { this.clearDragOverVisuals(); gZenWorkspaces - .changeWorkspaceShortcut(isNearLeftEdge ? -1 : 1, false, /* Disable wrapping */ true) - .then((spaceChanged) => { + .changeWorkspaceShortcut( + isNearLeftEdge ? -1 : 1, + false, + /* Disable wrapping */ true + ) + .then(spaceChanged => { if (AppConstants.platform !== "macosx") { // See the hack in #createDragImageForTabs for more details which // explains why we need to do this on non-macOS platforms. @@ -654,7 +716,9 @@ } let tabs = this.originalDragImageArgs[0].children; const { isDarkMode, isExplicitMode } = - gZenThemePicker.getGradientForWorkspace(spaceChanged, { getGradient: false }); + gZenThemePicker.getGradientForWorkspace(spaceChanged, { + getGradient: false, + }); for (let tab of tabs) { if (isExplicitMode) { tab.style.colorScheme = isDarkMode ? "dark" : "light"; @@ -725,7 +789,10 @@ const edgeZoneThreshold = this._dndSplitThreshold / 100; const overlapRatioY = (clientY - targetTop) / targetHeight; - if (overlapRatioY < edgeZoneThreshold || overlapRatioY > 1 - edgeZoneThreshold) { + if ( + overlapRatioY < edgeZoneThreshold || + overlapRatioY > 1 - edgeZoneThreshold + ) { this._clearDragOverSplit(); return; } @@ -815,7 +882,10 @@ return; } const { innerWidth: winWidth, innerHeight: winHeight } = window; - let allowedMargin = Services.prefs.getIntPref("zen.tabs.dnd-outside-window-margin", 5); + let allowedMargin = Services.prefs.getIntPref( + "zen.tabs.dnd-outside-window-margin", + 5 + ); const isOutOfWindow = clientX <= allowedMargin || clientX >= winWidth - allowedMargin || @@ -881,7 +951,9 @@ gBrowser.selectedTab = draggedTab; } else if (isTabGroupLabel(draggedTab)) { draggedTab = draggedTab.group; - gZenFolders.changeFolderToSpace(draggedTab, activeWorkspace, { hasDndSwitch: true }); + gZenFolders.changeFolderToSpace(draggedTab, activeWorkspace, { + hasDndSwitch: true, + }); } } } @@ -922,7 +994,8 @@ } if ( isTabGroupLabel(draggedTab) || - (isTab(draggedTab) && draggedTab.group?.hasAttribute("split-view-group")) + (isTab(draggedTab) && + draggedTab.group?.hasAttribute("split-view-group")) ) { draggedTab = draggedTab.group; } @@ -939,7 +1012,8 @@ !dropElement || dropElement.hasAttribute("zen-essential") || draggedTab.hasAttribute("zen-essential") || - draggedTab.getAttribute("zen-workspace-id") != gZenWorkspaces.activeWorkspace || + draggedTab.getAttribute("zen-workspace-id") != + gZenWorkspaces.activeWorkspace || !dropElement.visible || !draggedTab.visible || draggedTab.ownerGlobal !== window @@ -949,7 +1023,7 @@ this.#isAnimatingTabMove = true; const animateElement = (ele, translateY) => { ele.style.transform = `translateY(${translateY}px)`; - let animateInternal = (resolve) => { + let animateInternal = resolve => { const clearStyles = () => { ele.style.transform = ""; ele.style.zIndex = ""; @@ -960,7 +1034,11 @@ return; } gZenUIManager - .elementAnimate(ele, { y: [translateY, 0] }, { duration: 100, easing: "ease-out" }) + .elementAnimate( + ele, + { y: [translateY, 0] }, + { duration: 100, easing: "ease-out" } + ) .then(() => { clearStyles(); }) @@ -969,7 +1047,7 @@ // Wait for the next event loop tick to ensure the initial transform style is applied. // We need to ensure the element has already been moved in the DOM before starting the animation. animations.push( - new Promise((resolve) => + new Promise(resolve => setTimeout(() => { setTimeout(() => animateInternal(resolve), 0); }) @@ -1025,7 +1103,9 @@ : -rect.height * tabsInBetween.length; draggedTabTranslateY += extraTranslate * - (focusableDraggedTab.elementIndex > focusableDropElement.elementIndex ? 1 : -1); + (focusableDraggedTab.elementIndex > focusableDropElement.elementIndex + ? 1 + : -1); draggedTab.style.zIndex = "9"; animateElement(draggedTab, draggedTabTranslateY); } catch (e) { @@ -1043,7 +1123,8 @@ let ownerGlobal = draggedTab?.ownerGlobal; draggedTab.style.visibility = ""; let thisFromGlobal = ownerGlobal?.gBrowser.tabContainer.tabDragAndDrop; - let currentEssenialContainer = ownerGlobal.gZenWorkspaces.getCurrentEssentialsContainer(); + let currentEssenialContainer = + ownerGlobal.gZenWorkspaces.getCurrentEssentialsContainer(); if (currentEssenialContainer?.essentialsPromo) { currentEssenialContainer.essentialsPromo.remove(); } @@ -1057,9 +1138,13 @@ thisFromGlobal._clearDragOverSplit(); this.#maybeClearVerticalPinnedGridDragOver(); thisFromGlobal.originalDragImageArgs = []; - window.removeEventListener("dragenter", thisFromGlobal.handle_windowDragEnter, { - capture: true, - }); + window.removeEventListener( + "dragenter", + thisFromGlobal.handle_windowDragEnter, + { + capture: true, + } + ); this.#isOutOfWindow = false; if (thisFromGlobal._browserDragImageWrapper) { thisFromGlobal._browserDragImageWrapper.remove(); @@ -1119,8 +1204,13 @@ return true; } if (folder.isLiveFolder) { - const liveFolderItemId = draggedTab.getAttribute("zen-live-folder-item-id"); - if (!liveFolderItemId || !liveFolderItemId.startsWith(`${folder.id}:`)) { + const liveFolderItemId = draggedTab.getAttribute( + "zen-live-folder-item-id" + ); + if ( + !liveFolderItemId || + !liveFolderItemId.startsWith(`${folder.id}:`) + ) { return false; } } @@ -1144,12 +1234,16 @@ let hoveringPeriphery = !!event.target.closest( ":is(#tabbrowser-arrowscrollbox-periphery, .pinned-tabs-container-separator)" ); - if (event.target.classList.contains("zen-workspace-empty-space") || hoveringPeriphery) { + if ( + event.target.classList.contains("zen-workspace-empty-space") || + hoveringPeriphery + ) { let lastTab = gBrowser.tabs.at(-1); let pinnedTabsCount = gBrowser._numVisiblePinTabsWithoutCollapsed; // Only if there are no normal tabs to drop after - showIndicatorUnderNewTabButton = lastTab.hasAttribute("zen-empty-tab"); + showIndicatorUnderNewTabButton = + lastTab.hasAttribute("zen-empty-tab"); let useLastPinnd = (hoveringPeriphery || (showIndicatorUnderNewTabButton && @@ -1187,12 +1281,18 @@ let possibleFolderElement = dropElement.parentElement; let isZenFolder = possibleFolderElement?.isZenFolder; let canHightlightGroup = - gZenFolders.highlightGroupOnDragOver(possibleFolderElement, movingTabs) || !isZenFolder; + gZenFolders.highlightGroupOnDragOver( + possibleFolderElement, + movingTabs + ) || !isZenFolder; let rect = window.windowUtils.getBoundsWithoutFlushing(dropElement); const overlapPercent = (event.clientY - rect.top) / rect.height; // We wan't to leave a small threshold (20% for example) so we can drag tabs below and above // a folder label without dragging into the folder. - let threshold = Services.prefs.getIntPref("zen.tabs.folder-dragover-threshold-percent") / 100; + let threshold = + Services.prefs.getIntPref( + "zen.tabs.folder-dragover-threshold-percent" + ) / 100; let dropIntoFolder = isZenFolder && (overlapPercent < threshold || @@ -1211,7 +1311,8 @@ if ( isTabGroupLabel(draggedTab) && draggedTab.group?.isZenFolder && - (((isTab(dropElement) || dropElement.hasAttribute("split-view-group")) && + (((isTab(dropElement) || + dropElement.hasAttribute("split-view-group")) && (!dropElement.pinned || dropElement.hasAttribute("zen-essential"))) || showIndicatorUnderNewTabButton) ) { @@ -1226,12 +1327,16 @@ dropElement.hasAttribute("split-view-group") ) { if (showIndicatorUnderNewTabButton) { - rect = window.windowUtils.getBoundsWithoutFlushing(this.#dragShiftableItems.at(-1)); + rect = window.windowUtils.getBoundsWithoutFlushing( + this.#dragShiftableItems.at(-1) + ); } const indicator = gZenPinnedTabManager.dragIndicator; let top = 0; threshold = - Services.prefs.getIntPref("browser.tabs.dragDrop.moveOverThresholdPercent") / 100; + Services.prefs.getIntPref( + "browser.tabs.dragDrop.moveOverThresholdPercent" + ) / 100; if (overlapPercent > threshold || showIndicatorUnderNewTabButton) { top = Math.round(rect.top + rect.height) + "px"; dropBefore = false; @@ -1243,23 +1348,36 @@ shouldPlayHapticFeedback = true; } indicator.setAttribute("orientation", "horizontal"); - indicator.style.setProperty("--indicator-left", rect.left + separation / 2 + "px"); - indicator.style.setProperty("--indicator-width", rect.width - separation + "px"); + indicator.style.setProperty( + "--indicator-left", + rect.left + separation / 2 + "px" + ); + indicator.style.setProperty( + "--indicator-width", + rect.width - separation + "px" + ); indicator.style.top = top; indicator.style.removeProperty("left"); this.#removeDragOverBackground(); if (!isTab(dropElement) && dropElement?.parentElement?.isZenFolder) { dropElement = dropElement.parentElement; } - } else if (dropElement.classList.contains("zen-drop-target") && canHightlightGroup) { + } else if ( + dropElement.classList.contains("zen-drop-target") && + canHightlightGroup + ) { shouldPlayHapticFeedback = - this.#applyDragOverBackground(dropElement) && !gZenPinnedTabManager._dragIndicator; + this.#applyDragOverBackground(dropElement) && + !gZenPinnedTabManager._dragIndicator; gZenPinnedTabManager.removeTabContainersDragoverClass(); dropElement = dropElement.parentElement?.labelElement || dropElement; if (dropElement.classList.contains("zen-current-workspace-indicator")) { dropElement = - elementToMove(this._tabbrowserTabs.ariaFocusableItems.at(gBrowser._numZenEssentials)) || - dropElement; + elementToMove( + this._tabbrowserTabs.ariaFocusableItems.at( + gBrowser._numZenEssentials + ) + ) || dropElement; dropBefore = true; } } @@ -1305,12 +1423,17 @@ if (!this._fakeEssentialTab) { const numEssentials = gBrowser._numZenEssentials; - let pinnedTabs = this._tabbrowserTabs.ariaFocusableItems.slice(0, numEssentials); + let pinnedTabs = this._tabbrowserTabs.ariaFocusableItems.slice( + 0, + numEssentials + ); this._fakeEssentialTab = document.createXULElement("vbox"); this._fakeEssentialTab.elementIndex = numEssentials; delete dragData.animDropElementIndex; if (!draggedTab.hasAttribute("zen-essential")) { - event.target.closest(".zen-essentials-container").appendChild(this._fakeEssentialTab); + event.target + .closest(".zen-essentials-container") + .appendChild(this._fakeEssentialTab); gZenWorkspaces.updateTabsContainers(); pinnedTabs.push(this._fakeEssentialTab); this._fakeEssentialTab.getBoundingClientRect(); // Initialize layout @@ -1318,8 +1441,9 @@ this.#makeDragImageEssential(event); let tabsPerRow = 0; let position = RTL_UI - ? window.windowUtils.getBoundsWithoutFlushing(this._tabbrowserTabs.pinnedTabsContainer) - .right + ? window.windowUtils.getBoundsWithoutFlushing( + this._tabbrowserTabs.pinnedTabsContainer + ).right : 0; for (let pinnedTab of pinnedTabs) { let tabPosition; @@ -1341,13 +1465,19 @@ this.#maxTabsPerRow = tabsPerRow; } let usingFakeElement = !!this._fakeEssentialTab.parentElement; - let elementMoving = usingFakeElement ? this._fakeEssentialTab : draggedTab; + let elementMoving = usingFakeElement + ? this._fakeEssentialTab + : draggedTab; if (usingFakeElement) { movingTabs = [this._fakeEssentialTab]; } - let dragDataScreenX = usingFakeElement ? this._fakeEssentialTab.screenX : dragData.screenX; - let dragDataScreenY = usingFakeElement ? this._fakeEssentialTab.screenY : dragData.screenY; + let dragDataScreenX = usingFakeElement + ? this._fakeEssentialTab.screenX + : dragData.screenX; + let dragDataScreenY = usingFakeElement + ? this._fakeEssentialTab.screenY + : dragData.screenY; dragData.animLastScreenX ??= dragDataScreenX; dragData.animLastScreenY ??= dragDataScreenY; @@ -1355,11 +1485,17 @@ let screenX = event.screenX; let screenY = event.screenY; - if (screenY == dragData.animLastScreenY && screenX == dragData.animLastScreenX) { + if ( + screenY == dragData.animLastScreenY && + screenX == dragData.animLastScreenX + ) { return; } - let tabs = this._tabbrowserTabs.visibleTabs.slice(0, gBrowser._numZenEssentials); + let tabs = this._tabbrowserTabs.visibleTabs.slice( + 0, + gBrowser._numZenEssentials + ); if (usingFakeElement) { tabs.push(this._fakeEssentialTab); } @@ -1369,7 +1505,8 @@ dragData.animLastScreenY = screenY; dragData.animLastScreenX = screenX; - let { width: tabWidth, height: tabHeight } = elementMoving.getBoundingClientRect(); + let { width: tabWidth, height: tabHeight } = + elementMoving.getBoundingClientRect(); tabWidth += 4; // Add 6px to account for the gap tabHeight += 4; let shiftSizeX = tabWidth; @@ -1383,11 +1520,16 @@ let lastTab = tabs.at(-1); if (RTL_UI) { firstTabInRow = - tabs.length >= this.#maxTabsPerRow ? tabs[this.#maxTabsPerRow - 1] : lastTab; + tabs.length >= this.#maxTabsPerRow + ? tabs[this.#maxTabsPerRow - 1] + : lastTab; lastTabInRow = tabs[0]; } else { firstTabInRow = tabs[0]; - lastTabInRow = tabs.length >= this.#maxTabsPerRow ? tabs[this.#maxTabsPerRow - 1] : lastTab; + lastTabInRow = + tabs.length >= this.#maxTabsPerRow + ? tabs[this.#maxTabsPerRow - 1] + : lastTab; } let lastMovingTabScreenX = movingTabs.at(-1).screenX; let lastMovingTabScreenY = movingTabs.at(-1).screenY; @@ -1436,7 +1578,7 @@ // * We're doing a binary search in order to reduce the amount of // tabs we need to check. - tabs = tabs.filter((t) => !movingTabs.includes(t) || t == elementMoving); + tabs = tabs.filter(t => !movingTabs.includes(t) || t == elementMoving); let firstTabCenterX = firstMovingTabScreenX + translateX + tabWidth / 2; let lastTabCenterX = lastMovingTabScreenX + translateX + tabWidth / 2; let tabCenterX = directionX ? lastTabCenterX : firstTabCenterX; @@ -1447,25 +1589,37 @@ let shiftNumber = this.#maxTabsPerRow - movingTabs.length; let getTabShift = (tab, dropIndex) => { - if (tab.elementIndex < elementMoving.elementIndex && tab.elementIndex >= dropIndex) { + if ( + tab.elementIndex < elementMoving.elementIndex && + tab.elementIndex >= dropIndex + ) { // If tab is at the end of a row, shift back and down let tabRow = Math.ceil((tab.elementIndex + 1) / this.#maxTabsPerRow); let shiftedTabRow = Math.ceil( (tab.elementIndex + 1 + movingTabs.length) / this.#maxTabsPerRow ); if (tab.elementIndex && tabRow != shiftedTabRow) { - return [RTL_UI ? tabWidth * shiftNumber : -tabWidth * shiftNumber, shiftSizeY]; + return [ + RTL_UI ? tabWidth * shiftNumber : -tabWidth * shiftNumber, + shiftSizeY, + ]; } return [RTL_UI ? -shiftSizeX : shiftSizeX, 0]; } - if (tab.elementIndex > elementMoving.elementIndex && tab.elementIndex < dropIndex) { + if ( + tab.elementIndex > elementMoving.elementIndex && + tab.elementIndex < dropIndex + ) { // If tab is not index 0 and at the start of a row, shift across and up let tabRow = Math.floor(tab.elementIndex / this.#maxTabsPerRow); let shiftedTabRow = Math.floor( (tab.elementIndex - movingTabs.length) / this.#maxTabsPerRow ); if (tab.elementIndex && tabRow != shiftedTabRow) { - return [RTL_UI ? -tabWidth * shiftNumber : tabWidth * shiftNumber, -shiftSizeY]; + return [ + RTL_UI ? -tabWidth * shiftNumber : tabWidth * shiftNumber, + -shiftSizeY, + ]; } return [RTL_UI ? shiftSizeX : -shiftSizeX, 0]; } @@ -1475,7 +1629,8 @@ let low = 0; let high = tabs.length - 1; let newIndex = -1; - let oldIndex = dragData.animDropElementIndex ?? movingTabs[0].elementIndex; + let oldIndex = + dragData.animDropElementIndex ?? movingTabs[0].elementIndex; while (low <= high) { let mid = Math.floor((low + high) / 2); if (tabs[mid] == elementMoving && ++mid > high) { @@ -1489,9 +1644,13 @@ low = mid + 1; } else if (screenY > tabCenterY) { high = mid - 1; - } else if (RTL_UI ? screenX + tabWidth < tabCenterX : screenX > tabCenterX) { + } else if ( + RTL_UI ? screenX + tabWidth < tabCenterX : screenX > tabCenterX + ) { high = mid - 1; - } else if (RTL_UI ? screenX > tabCenterX : screenX + tabWidth < tabCenterX) { + } else if ( + RTL_UI ? screenX > tabCenterX : screenX + tabWidth < tabCenterX + ) { low = mid + 1; } else { newIndex = tabs[mid].elementIndex; @@ -1523,7 +1682,8 @@ for (let tab of tabs) { if (tab != draggedTab) { let [shiftX, shiftY] = getTabShift(tab, newIndex); - tab.style.transform = shiftX || shiftY ? `translate(${shiftX}px, ${shiftY}px)` : ""; + tab.style.transform = + shiftX || shiftY ? `translate(${shiftX}px, ${shiftY}px)` : ""; } } } @@ -1532,7 +1692,10 @@ if (this._fakeEssentialTab) { this._fakeEssentialTab.remove(); delete this._fakeEssentialTab; - for (let tab of this._tabbrowserTabs.visibleTabs.slice(0, gBrowser._numZenEssentials)) { + for (let tab of this._tabbrowserTabs.visibleTabs.slice( + 0, + gBrowser._numZenEssentials + )) { tab.style.transform = ""; } gZenWorkspaces.updateTabsContainers(); @@ -1551,8 +1714,13 @@ tab.setAttribute("zen-essential", "true"); tab.setAttribute("pinned", "true"); tab.setAttribute("selected", "true"); - const draggedTabRect = window.windowUtils.getBoundsWithoutFlushing(this._fakeEssentialTab); - tab.style.minWidth = tab.style.maxWidth = wrapper.style.width = draggedTabRect.width + "px"; + const draggedTabRect = window.windowUtils.getBoundsWithoutFlushing( + this._fakeEssentialTab + ); + tab.style.minWidth = + tab.style.maxWidth = + wrapper.style.width = + draggedTabRect.width + "px"; tab.style.minHeight = tab.style.maxHeight = wrapper.style.height = diff --git a/src/zen/folders/ZenFolder.mjs b/src/zen/folders/ZenFolder.mjs index 992a8c9c2..abd7e162e 100644 --- a/src/zen/folders/ZenFolder.mjs +++ b/src/zen/folders/ZenFolder.mjs @@ -4,7 +4,8 @@ const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { - ZenLiveFoldersManager: "resource:///modules/zen/ZenLiveFoldersManager.sys.mjs", + ZenLiveFoldersManager: + "resource:///modules/zen/ZenLiveFoldersManager.sys.mjs", }); export class nsZenFolder extends MozTabbrowserTabGroup { @@ -77,7 +78,7 @@ export class nsZenFolder extends MozTabbrowserTabGroup { this.labelElement.parentElement.setAttribute("context", "zenFolderActions"); - this.labelElement.onRenameFinished = (newLabel) => { + this.labelElement.onRenameFinished = newLabel => { this.name = newLabel.trim() || "Folder"; const event = new CustomEvent("ZenFolderRenamed", { bubbles: true, @@ -127,7 +128,9 @@ export class nsZenFolder extends MozTabbrowserTabGroup { get childActiveGroups() { if (this.tagName === "zen-workspace-collapsible-pins") { - return Array.from(this.parentElement.querySelectorAll("zen-folder[has-active]")); + return Array.from( + this.parentElement.querySelectorAll("zen-folder[has-active]") + ); } return Array.from(this.querySelectorAll("zen-folder[has-active]")); } @@ -193,7 +196,7 @@ export class nsZenFolder extends MozTabbrowserTabGroup { get allItems() { return [...this.groupContainer.children].filter( - (child) => + child => !( child.classList.contains("zen-tab-group-start") || child.classList.contains("pinned-tabs-container-separator") @@ -227,7 +230,9 @@ export class nsZenFolder extends MozTabbrowserTabGroup { } else { const folders = new Map(); for (let tab of this._activeTabs) { - const group = tab?.group?.hasAttribute("split-view-group") ? tab?.group?.group : tab?.group; + const group = tab?.group?.hasAttribute("split-view-group") + ? tab?.group?.group + : tab?.group; if (!folders.has(group?.id)) { folders.set(group?.id, group?.activeGroups?.at(-1)); } @@ -247,7 +252,10 @@ export class nsZenFolder extends MozTabbrowserTabGroup { } get resetButton() { - return this.labelElement.parentElement?.querySelector(".tab-reset-button") ?? null; + return ( + this.labelElement.parentElement?.querySelector(".tab-reset-button") ?? + null + ); } unloadAllTabs(event) { @@ -280,8 +288,13 @@ export class nsZenFolder extends MozTabbrowserTabGroup { addTabs(tabs) { super.addTabs(tabs); - if (this.collapsed && !gZenFolders._sessionRestoring && this.isLiveFolder && tabs.length) { - tabs.forEach((tab) => { + if ( + this.collapsed && + !gZenFolders._sessionRestoring && + this.isLiveFolder && + tabs.length + ) { + tabs.forEach(tab => { tab.setAttribute("folder-active", "true"); }); gZenFolders.animateCollapse(this); diff --git a/src/zen/folders/ZenFolders.mjs b/src/zen/folders/ZenFolders.mjs index 48df746df..31d3cbf41 100644 --- a/src/zen/folders/ZenFolders.mjs +++ b/src/zen/folders/ZenFolders.mjs @@ -36,7 +36,10 @@ function groupIsCollapsiblePins(group) { } class nsZenFolders extends nsZenDOMOperatedFeature { - #ZEN_MAX_SUBFOLDERS = Services.prefs.getIntPref("zen.folders.max-subfolders", 5); + #ZEN_MAX_SUBFOLDERS = Services.prefs.getIntPref( + "zen.folders.max-subfolders", + 5 + ); #popup = null; #popupTimer = null; @@ -69,10 +72,12 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const contextMenuItemsToolbar = window.MozXULElement.parseXULToFragment( `` ); - document.getElementById("toolbar-context-openANewTab").after(contextMenuItemsToolbar); + document + .getElementById("toolbar-context-openANewTab") + .after(contextMenuItemsToolbar); const folderActionsMenu = document.getElementById("zenFolderActions"); - folderActionsMenu.addEventListener("popupshowing", (event) => { + folderActionsMenu.addEventListener("popupshowing", event => { const target = event.explicitOriginalTarget; let folder; if (gBrowser.isTabGroupLabel(target)) { @@ -93,7 +98,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { this.#lastFolderContextMenu = folder; gZenLiveFoldersUI.buildContextMenu(folder); - const newSubfolderItem = document.getElementById("context_zenFolderNewSubfolder"); + const newSubfolderItem = document.getElementById( + "context_zenFolderNewSubfolder" + ); newSubfolderItem.setAttribute( "disabled", folder.level >= this.#ZEN_MAX_SUBFOLDERS - 1 ? "true" : "false" @@ -105,7 +112,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { changeFolderSpace.innerHTML = ""; for (const workspace of [...gZenWorkspaces.getWorkspaces()].reverse()) { const item = gZenWorkspaces.generateMenuItemForWorkspace(workspace); - item.addEventListener("command", (event) => { + item.addEventListener("command", event => { if (!this.#lastFolderContextMenu) { return; } @@ -120,7 +127,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { folderActionsMenu.addEventListener( "popuphidden", - (event) => { + event => { if (event.target === folderActionsMenu) { this.#lastFolderContextMenu = null; } @@ -128,7 +135,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { { once: true } ); - folderActionsMenu.addEventListener("command", (event) => { + folderActionsMenu.addEventListener("command", event => { if (!this.#lastFolderContextMenu) { return; } @@ -198,12 +205,17 @@ class nsZenFolders extends nsZenDOMOperatedFeature { window.addEventListener("TabSelect", this); window.addEventListener("TabOpen", this); const onNewFolder = this.#onNewFolder.bind(this); - document.getElementById("zen-context-menu-new-folder").addEventListener("command", onNewFolder); + document + .getElementById("zen-context-menu-new-folder") + .addEventListener("command", onNewFolder); document .getElementById("zen-context-menu-new-folder-toolbar") .addEventListener("command", onNewFolder); SessionStore.promiseInitialized.then(() => { - gBrowser.tabContainer.addEventListener("dragstart", this.cancelPopupTimer.bind(this)); + gBrowser.tabContainer.addEventListener( + "dragstart", + this.cancelPopupTimer.bind(this) + ); }); } @@ -234,7 +246,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } } - if (group.hasAttribute("split-view-group") && group.hasAttribute("zen-pinned-changed")) { + if ( + group.hasAttribute("split-view-group") && + group.hasAttribute("zen-pinned-changed") + ) { // zen-pinned-changed remove it and set it to had-zen-pinned-changed to keep // track of the original pinned state group.removeAttribute("zen-pinned-changed"); @@ -258,9 +273,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const isActiveFolder = parentFolder?.activeGroups?.length > 0; const isSplitView = folder.hasAttribute("split-view-group"); if (isActiveFolder && isSplitView) { - parentFolder.activeTabs = [...new Set([...parentFolder.activeTabs, ...folder.tabs])].sort( - (a, b) => a._tPos > b._tPos - ); + parentFolder.activeTabs = [ + ...new Set([...parentFolder.activeTabs, ...folder.tabs]), + ].sort((a, b) => a._tPos > b._tPos); } parentFolder.collapsed = isActiveFolder; } @@ -314,7 +329,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { async on_TabUngrouped(event) { const tab = event.detail; const group = event.target; - if (group.hasAttribute("split-view-group") && tab.hasAttribute("had-zen-pinned-changed")) { + if ( + group.hasAttribute("split-view-group") && + tab.hasAttribute("had-zen-pinned-changed") + ) { tab.setAttribute("zen-pinned-changed", true); tab.removeAttribute("had-zen-pinned-changed"); } @@ -381,7 +399,8 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } #onNewFolder(event) { - const isFromToolbar = event.target.id === "zen-context-menu-new-folder-toolbar"; + const isFromToolbar = + event.target.id === "zen-context-menu-new-folder-toolbar"; const contextMenu = event.target.parentElement; let tabs = TabContextMenu.contextTab?.multiselected ? gBrowser.selectedTabs @@ -401,7 +420,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } // Prevent create folder inside Live Folder - const thereIsOneLiveFolderTab = tabs?.some((tab) => + const thereIsOneLiveFolderTab = tabs?.some(tab => tab.hasAttribute("zen-live-folder-item-id") ); if (thereIsOneLiveFolderTab) { @@ -423,7 +442,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { async #convertFolderToSpace(folder) { const currentWorkspace = gZenWorkspaces.getActiveWorkspaceFromCache(); - let selectedTab = folder.tabs.find((tab) => tab.selected); + let selectedTab = folder.tabs.find(tab => tab.selected); const icon = folder.icon?.querySelector("svg .icon image"); const newSpace = await gZenWorkspaces.createAndSaveWorkspace( @@ -432,20 +451,23 @@ class nsZenFolders extends nsZenDOMOperatedFeature { /* dontChange= */ false, currentWorkspace.containerTabId, { - beforeChangeCallback: async (newWorkspace) => { - await new Promise((resolve) => { + beforeChangeCallback: async newWorkspace => { + await new Promise(resolve => { requestAnimationFrame(async () => { const workspacePinnedContainer = gZenWorkspaces.workspaceElement( newWorkspace.uuid ).pinnedTabsContainer; - const tabs = folder.allItems.filter((tab) => !tab.hasAttribute("zen-empty-tab")); + const tabs = folder.allItems.filter( + tab => !tab.hasAttribute("zen-empty-tab") + ); workspacePinnedContainer.append(...tabs); await folder.delete(); gBrowser.tabContainer._invalidateCachedTabs(); if (selectedTab) { selectedTab.setAttribute("zen-workspace-id", newWorkspace.uuid); selectedTab.removeAttribute("folder-active"); - gZenWorkspaces.lastSelectedWorkspaceTabs[newWorkspace.uuid] = selectedTab; + gZenWorkspaces.lastSelectedWorkspaceTabs[newWorkspace.uuid] = + selectedTab; } resolve(); }); @@ -461,7 +483,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { tab.style.height = ""; } gBrowser.TabStateFlusher.flush(tab.linkedBrowser); - if (gZenWorkspaces.lastSelectedWorkspaceTabs[currentWorkspace.uuid] === tab) { + if ( + gZenWorkspaces.lastSelectedWorkspaceTabs[currentWorkspace.uuid] === tab + ) { // This tab is no longer the last selected tab in the previous workspace because it's being moved to // the current workspace delete gZenWorkspaces.lastSelectedWorkspaceTabs[currentWorkspace.uuid]; @@ -496,7 +520,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } } - folder.dispatchEvent(new CustomEvent("ZenFolderChangedWorkspace", { bubbles: true })); + folder.dispatchEvent( + new CustomEvent("ZenFolderChangedWorkspace", { bubbles: true }) + ); if (!hasDndSwitch) { gZenWorkspaces.changeWorkspaceWithID(workspaceId).then(() => { @@ -513,8 +539,8 @@ class nsZenFolders extends nsZenDOMOperatedFeature { createFolder(tabs = [], options = {}) { const filteredTabs = tabs - .filter((tab) => !tab.hasAttribute("zen-essential")) - .map((tab) => { + .filter(tab => !tab.hasAttribute("zen-essential")) + .map(tab => { gBrowser.pinTab(tab); if (tab?.group?.hasAttribute("split-view-group")) { tab = tab.group; @@ -526,9 +552,12 @@ class nsZenFolders extends nsZenDOMOperatedFeature { options.workspaceId )?.pinnedTabsContainer; const pinnedContainer = - options.workspaceId && workspacePinned ? workspacePinned : gZenWorkspaces.pinnedTabsContainer; + options.workspaceId && workspacePinned + ? workspacePinned + : gZenWorkspaces.pinnedTabsContainer; const insertBefore = - options.insertBefore || pinnedContainer.querySelector(".pinned-tabs-container-separator"); + options.insertBefore || + pinnedContainer.querySelector(".pinned-tabs-container-separator"); const emptyTab = gBrowser.addTab("about:blank", { skipAnimation: true, pinned: true, @@ -557,7 +586,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { // deliberate user action indicating the tab has importance for the user. // Without this, it is not possible to save and close a tab group with // a short lifetime. - folder.tabs.forEach((tab) => { + folder.tabs.forEach(tab => { gBrowser.TabStateFlusher.flush(tab.linkedBrowser); }); @@ -572,7 +601,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } _createFolderNode(options = {}) { - const folder = document.createXULElement("zen-folder", { is: "zen-folder" }); + const folder = document.createXULElement("zen-folder", { + is: "zen-folder", + }); let id = options.id; if (!id) { // Note: If this changes, make sure to also update the @@ -587,14 +618,17 @@ class nsZenFolders extends nsZenDOMOperatedFeature { folder.color = "zen-workspace-color"; folder.isLiveFolder = options.isLiveFolder; - folder.setAttribute("zen-workspace-id", options.workspaceId || gZenWorkspaces.activeWorkspace); + folder.setAttribute( + "zen-workspace-id", + options.workspaceId || gZenWorkspaces.activeWorkspace + ); // note: We set if the folder is collapsed some time after creation. // we do this to ensure marginBottom is set correctly in the case // that we want it to initially be collapsed. setTimeout( // eslint-disable-next-line no-shadow - (folder) => { + folder => { folder.collapsed = !!options.collapsed; }, 0, @@ -618,7 +652,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { gBrowser.pinTab(otherTab); } this._piningFolder = false; - gBrowser.pinnedTabsContainer.insertBefore(group, gBrowser.pinnedTabsContainer.lastChild); + gBrowser.pinnedTabsContainer.insertBefore( + group, + gBrowser.pinnedTabsContainer.lastChild + ); gBrowser.tabContainer._invalidateCachedTabs(); return true; } @@ -649,13 +686,18 @@ class nsZenFolders extends nsZenDOMOperatedFeature { openTabsPopup(event) { event.stopPropagation(); - if (document.documentElement.getAttribute("zen-renaming-tab") || gURLBar.focused) { + if ( + document.documentElement.getAttribute("zen-renaming-tab") || + gURLBar.focused + ) { return; } const activeGroup = event.target.parentElement; if ( - activeGroup.tabs.filter((tab) => this.#shouldAppearOnTabSearch(tab, activeGroup)).length === 0 + activeGroup.tabs.filter(tab => + this.#shouldAppearOnTabSearch(tab, activeGroup) + ).length === 0 ) { // If the group has no tabs, we don't show the popup return; @@ -679,31 +721,38 @@ class nsZenFolders extends nsZenDOMOperatedFeature { foundTabs++; } } - document.getElementById("zen-folder-tabs-search-no-results").hidden = foundTabs > 0; + document.getElementById("zen-folder-tabs-search-no-results").hidden = + foundTabs > 0; }; search.addEventListener("input", onSearchInput); - const onKeyDown = (event) => { + const onKeyDown = event => { // Arrow down and up to navigate through the list if (event.key === "ArrowDown" || event.key === "ArrowUp") { event.preventDefault(); - const items = Array.from(tabsList.children).filter((item) => !item.hidden); + const items = Array.from(tabsList.children).filter( + item => !item.hidden + ); if (items.length === 0) { return; } - let index = items.indexOf(tabsList.querySelector(".folders-tabs-list-item[selected]")); + let index = items.indexOf( + tabsList.querySelector(".folders-tabs-list-item[selected]") + ); if (event.key === "ArrowDown") { index = (index + 1) % items.length; } else if (event.key === "ArrowUp") { index = (index - 1 + items.length) % items.length; } - items.forEach((item) => item.removeAttribute("selected")); + items.forEach(item => item.removeAttribute("selected")); const targetItem = items[index]; targetItem.setAttribute("selected", "true"); targetItem.scrollIntoView({ block: "start", behavior: "smooth" }); } else if (event.key === "Enter") { // Enter to select the currently highlighted item - const highlightedItem = tabsList.querySelector(".folders-tabs-list-item[selected]"); + const highlightedItem = tabsList.querySelector( + ".folders-tabs-list-item[selected]" + ); if (highlightedItem) { highlightedItem.click(); } @@ -714,7 +763,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const target = event.target; target.setAttribute("open", true); - const handlePopupHidden = (event) => { + const handlePopupHidden = event => { if (event.target !== this.#popup) { return; } @@ -733,14 +782,19 @@ class nsZenFolders extends nsZenDOMOperatedFeature { { once: true } ); - this.#popup.addEventListener("popuphidden", handlePopupHidden, { once: true }); + this.#popup.addEventListener("popuphidden", handlePopupHidden, { + once: true, + }); this.#popup.openPopup(target, this.#searchPopupOptions); } get #searchPopupOptions() { const isRightSide = gZenVerticalTabsManager._prefsRightSide; const position = isRightSide ? "topleft topright" : "topright topleft"; - let size = Math.min(this.#popup.querySelector("#zen-folder-tabs-list").children.length, 6); + let size = Math.min( + this.#popup.querySelector("#zen-folder-tabs-list").children.length, + 6 + ); size *= 48; return { position, @@ -756,7 +810,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { // account for the visibility of the tab itself, it's just a literal // representation of the `hidden` attribute. const tabIsInActiveGroup = group.activeTabs.includes(tab); - return !tabIsInActiveGroup && !(tab.hidden || tab.hasAttribute("zen-empty-tab")); + return ( + !tabIsInActiveGroup && !(tab.hidden || tab.hasAttribute("zen-empty-tab")) + ); } #populateTabsList(group) { @@ -786,7 +842,8 @@ class nsZenFolders extends nsZenDOMOperatedFeature { // We don't need to do anything if the URL is invalid. e.g. about:blank } let tabLabel = tab.label || ""; - let iconURL = gBrowser.getIcon(tab) || PlacesUtils.favicons.defaultFavicon.spec; + let iconURL = + gBrowser.getIcon(tab) || PlacesUtils.favicons.defaultFavicon.spec; icon.src = iconURL; @@ -809,7 +866,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { item.setAttribute("selected", "true"); } - item.setAttribute("data-label", `${tabLabel.toLowerCase()} ${tabURL.toLowerCase()}`); + item.setAttribute( + "data-label", + `${tabLabel.toLowerCase()} ${tabURL.toLowerCase()}` + ); item.addEventListener("click", () => { gBrowser.selectedTab = tab; @@ -846,11 +906,17 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } // eslint-disable-next-line complexity - setFolderIndentation(tabs, groupElem = undefined, forCollapse = true, animate = true) { + setFolderIndentation( + tabs, + groupElem = undefined, + forCollapse = true, + animate = true + ) { if (!gZenPinnedTabManager.expandedSidebarMode) { return; } - const isSpaceCollapsed = gZenWorkspaces.activeWorkspaceElement?.hasCollapsedPinnedTabs; + const isSpaceCollapsed = + gZenWorkspaces.activeWorkspaceElement?.hasCollapsedPinnedTabs; let tab = tabs[0]; let isTab = false; @@ -863,7 +929,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } if ( gBrowser.isTab(groupElem) && - (!(groupElem.hasAttribute("zen-empty-tab") && groupElem.group === tab.group) || + (!( + groupElem.hasAttribute("zen-empty-tab") && groupElem.group === tab.group + ) || groupElem?.hasAttribute("zen-empty-tab")) ) { groupElem = groupElem.group; @@ -893,7 +961,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } } for (const tabItem of tabs) { - if (gBrowser.isTabGroupLabel(tabItem) || tabItem.group?.hasAttribute("split-view-group")) { + if ( + gBrowser.isTabGroupLabel(tabItem) || + tabItem.group?.hasAttribute("split-view-group") + ) { tabItem.group.style.setProperty("--zen-folder-indent", `${spacing}px`); continue; } @@ -915,9 +986,11 @@ class nsZenFolders extends nsZenDOMOperatedFeature { onlySvgIcons: true, allowNone: Boolean(group.iconURL), closeOnSelect: false, - onSelect: (icon) => { + onSelect: icon => { this.setFolderUserIcon(group, icon); - group.dispatchEvent(new CustomEvent("TabGroupUpdate", { bubbles: true })); + group.dispatchEvent( + new CustomEvent("TabGroupUpdate", { bubbles: true }) + ); }, }); } @@ -948,7 +1021,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const labelContainer = group.querySelector(".tab-group-label-container"); // Setup mouseenter/mouseleave events for the folder - labelContainer.addEventListener("mouseenter", (event) => { + labelContainer.addEventListener("mouseenter", event => { if ( !group.collapsed || !Services.prefs.getBoolPref("zen.folders.search.enabled") || @@ -977,7 +1050,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } storeDataForSessionStore() { - const folders = Array.from(gBrowser.tabContainer.querySelectorAll("zen-folder")); + const folders = Array.from( + gBrowser.tabContainer.querySelectorAll("zen-folder") + ); const splitGroups = Array.from( gBrowser.tabContainer.querySelectorAll("tab-group[split-view-group]") ); @@ -1004,8 +1079,8 @@ class nsZenFolders extends nsZenDOMOperatedFeature { continue; } const emptyFolderTabs = folder.tabs - .filter((tab) => tab.hasAttribute("zen-empty-tab")) - .map((tab) => tab.getAttribute("id")); + .filter(tab => tab.hasAttribute("zen-empty-tab")) + .map(tab => tab.getAttribute("id")); let prevSiblingInfo = null; const prevSibling = folder.previousElementSibling; @@ -1014,7 +1089,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { if (prevSibling) { if (gBrowser.isTabGroup(prevSibling)) { prevSiblingInfo = { type: "group", id: prevSibling.id }; - } else if (gBrowser.isTab(prevSibling) && prevSibling.hasAttribute("id")) { + } else if ( + gBrowser.isTab(prevSibling) && + prevSibling.hasAttribute("id") + ) { prevSiblingInfo = { type: "tab", id: prevSibling.getAttribute("id") }; } else { prevSiblingInfo = { type: "start", id: null }; @@ -1061,8 +1139,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { tabFolderWorkingData.set(folderData.id, workingData); const oldGroup = document.getElementById(folderData.id); - folderData.emptyTabIds.forEach((id) => { - oldGroup?.querySelector(`tab[id="${id}"]`)?.setAttribute("zen-empty-tab", true); + folderData.emptyTabIds.forEach(id => { + oldGroup + ?.querySelector(`tab[id="${id}"]`) + ?.setAttribute("zen-empty-tab", true); }); if (gBrowser.isTabGroup(oldGroup)) { if (!folderData.splitViewGroup) { @@ -1097,7 +1177,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } } - for (const { node, containingTabsFragment } of tabFolderWorkingData.values()) { + for (const { + node, + containingTabsFragment, + } of tabFolderWorkingData.values()) { if (node) { node.appendChild(containingTabsFragment); } @@ -1111,7 +1194,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { switch (stateData?.prevSiblingInfo?.type) { case "tab": case "group": { - const item = document.getElementById(stateData.prevSiblingInfo.id); + const item = document.getElementById( + stateData.prevSiblingInfo.id + ); if (item) { item.after(node); break; @@ -1124,7 +1209,8 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } default: { // Should insert after zen-empty-tab - const start = parentWorkingData.node.groupStartElement.nextElementSibling; + const start = + parentWorkingData.node.groupStartElement.nextElementSibling; start.after(node); } } @@ -1161,10 +1247,11 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } if ( folder?.isZenFolder && - (!folder.hasAttribute("split-view-group") || !folder.hasAttribute("selected")) && + (!folder.hasAttribute("split-view-group") || + !folder.hasAttribute("selected")) && !( folder.level >= this.#ZEN_MAX_SUBFOLDERS && - movingTabs?.some((t) => gBrowser.isTabGroupLabel(t)) + movingTabs?.some(t => gBrowser.isTabGroupLabel(t)) ) ) { if (folder.collapsed) { @@ -1189,8 +1276,8 @@ class nsZenFolders extends nsZenDOMOperatedFeature { #normalizeGroupItems(items) { return items - .filter((item) => !item.hasAttribute("zen-empty-tab")) - .map((item) => { + .filter(item => !item.hasAttribute("zen-empty-tab")) + .map(item => { if (gBrowser.isTabGroup(item)) { item = item.firstChild; } else if (gBrowser.isTabGroupLabel(item)) { @@ -1217,11 +1304,15 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } #collectGroupItems(group, opts = {}) { - const { selectedTabs = [], splitViewIds = new Set(), activeFoldersIds = new Set() } = opts; + const { + selectedTabs = [], + splitViewIds = new Set(), + activeFoldersIds = new Set(), + } = opts; const folders = new Map(); return group.childGroupsAndTabs - .filter((item) => !item.hasAttribute("zen-empty-tab")) - .map((item) => { + .filter(item => !item.hasAttribute("zen-empty-tab")) + .map(item => { const isSplitView = item.group?.hasAttribute?.("split-view-group"); const itemGroup = isSplitView ? item.group.group : item.group; if (!folders.has(itemGroup?.id)) { @@ -1255,7 +1346,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { #createAnimation(items, targetState, opts, callback = () => {}) { items = Array.isArray(items) ? items : [items]; - return items.map((item) => + return items.map(item => gZenUIManager.motion.animate(item, targetState, opts).then(callback) ); } @@ -1265,7 +1356,8 @@ class nsZenFolders extends nsZenDOMOperatedFeature { if (selectedTabs.length) { return heightShift; } - heightShift += window.windowUtils.getBoundsWithoutFlushing(tabsContainer).height; + heightShift += + window.windowUtils.getBoundsWithoutFlushing(tabsContainer).height; if (tabsContainer.separatorElement) { heightShift -= window.windowUtils.getBoundsWithoutFlushing( tabsContainer.separatorElement @@ -1296,7 +1388,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { splitViewIds, activeFoldersIds, }); - const collapsedHeight = this.#calculateHeightShift(tabsContainer, selectedTabs); + const collapsedHeight = this.#calculateHeightShift( + tabsContainer, + selectedTabs + ); if (selectedTabs.length) { for (let i = 0; i < groupItems.length; i++) { @@ -1316,7 +1411,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { if (activeFolderId && activeFoldersIds.has(activeFolderId)) { // If item is tab-group-label-container we should hide it. // Other items between tab-group-labe-container and folder-active tab should be visible cuz they are hidden by margin-top - if (item.parentElement.id !== activeFolderId && !item.hasAttribute("folder-active")) { + if ( + item.parentElement.id !== activeFolderId && + !item.hasAttribute("folder-active") + ) { continue; } } @@ -1329,7 +1427,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { group.setAttribute("has-active", "true"); group.activeTabs = selectedTabs; - selectedTabs.forEach((tab) => { + selectedTabs.forEach(tab => { this.setFolderIndentation([tab], group, /* for collapse = */ true); }); } @@ -1346,7 +1444,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { ...this.#createAnimation( groupStart, { - marginTop: -(collapsedHeight + 4 * (selectedTabs.length === 0 ? 1 : 0)), + marginTop: -( + collapsedHeight + + 4 * (selectedTabs.length === 0 ? 1 : 0) + ), }, { duration, ease: "easeInOut" } ) @@ -1438,7 +1539,11 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } let activeGroup = folders.get(tabGroup?.id); if (activeGroup) { - this.setFolderIndentation([tab], activeGroup, /* for collapse = */ true); + this.setFolderIndentation( + [tab], + activeGroup, + /* for collapse = */ true + ); } else { // Since the folder is now expanded, we should remove active attribute // to the tab that was previously visible @@ -1536,7 +1641,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { async animateUnload(group, tabToUnload, ungroup = false) { const isSplitView = tabToUnload.group?.hasAttribute("split-view-group"); - if ((!group?.isZenFolder || !isSplitView) && !tabToUnload.hasAttribute("folder-active")) { + if ( + (!group?.isZenFolder || !isSplitView) && + !tabToUnload.hasAttribute("folder-active") + ) { return; } const animations = []; @@ -1544,7 +1652,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const activeGroups = group.activeGroups; for (const folder of activeGroups) { - folder.activeTabs = folder.activeTabs.filter((tab) => tab !== tabToUnload); + folder.activeTabs = folder.activeTabs.filter(tab => tab !== tabToUnload); if (folder.activeTabs.length === 0) { lastTab = true; @@ -1561,7 +1669,10 @@ class nsZenFolders extends nsZenDOMOperatedFeature { // the correct container size in the DOM tabsContainer.offsetHeight; tabsContainer.setAttribute("hidden", true); - const collapsedHeight = this.#calculateHeightShift(tabsContainer, []); + const collapsedHeight = this.#calculateHeightShift( + tabsContainer, + [] + ); groupStart.style.marginTop = `${-(collapsedHeight + 4)}px`; }; @@ -1612,7 +1723,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { // Await the tab unload animation first await Promise.all(tabUnloadAnimations); - await Promise.all(animations.map((item) => (typeof item === "function" ? item() : item))); + await Promise.all( + animations.map(item => (typeof item === "function" ? item() : item)) + ); this.#animationCount -= 1; gBrowser.tabContainer._invalidateCachedTabs(); } @@ -1639,7 +1752,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { ? tab.group.group : tab?.group; while (currentGroup) { - const activeTabs = selectedTabs.filter((t) => currentGroup.tabs.includes(t)); + const activeTabs = selectedTabs.filter(t => + currentGroup.tabs.includes(t) + ); if (activeTabs.length) { if (currentGroup.collapsed) { if (currentGroup.hasAttribute("has-active")) { @@ -1717,7 +1832,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { // FIXME: This is a hack to fix the animations not working properly this.styleCleanup(itemsToShow); - itemsToHide.forEach((item) => { + itemsToHide.forEach(item => { item.style.opacity = 0; item.style.height = 0; }); @@ -1764,7 +1879,9 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } const groupStart = group.groupStartElement; const tabsContainer = group.groupContainer; - const heightContainer = expand ? 0 : this.#calculateHeightShift(tabsContainer, []); + const heightContainer = expand + ? 0 + : this.#calculateHeightShift(tabsContainer, []); tabsContainer.style.overflow = "clip"; this.#createAnimation( @@ -1777,7 +1894,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } styleCleanup(items) { - items.forEach((item) => { + items.forEach(item => { item.style.removeProperty("opacity"); item.style.removeProperty("height"); }); diff --git a/src/zen/glance/ZenGlanceManager.mjs b/src/zen/glance/ZenGlanceManager.mjs index d33740cf0..1013fbe88 100644 --- a/src/zen/glance/ZenGlanceManager.mjs +++ b/src/zen/glance/ZenGlanceManager.mjs @@ -37,7 +37,8 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { ARC_HEIGHT_RATIO: 0.2, // Arc height = distance * ratio (capped at MAX_ARC_HEIGHT) }); - #GLANCE_ANIMATION_DURATION = Services.prefs.getIntPref("zen.glance.animation-duration") / 1000; + #GLANCE_ANIMATION_DURATION = + Services.prefs.getIntPref("zen.glance.animation-duration") / 1000; init() { this.#setupEventListeners(); @@ -74,9 +75,13 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { menuitem.setAttribute("hidden", "true"); menuitem.setAttribute("data-l10n-id", "zen-open-link-in-glance"); - menuitem.addEventListener("command", () => this.openGlance({ url: gContextMenu.linkURL })); + menuitem.addEventListener("command", () => + this.openGlance({ url: gContextMenu.linkURL }) + ); - document.getElementById("context-sep-open").insertAdjacentElement("beforebegin", menuitem); + document + .getElementById("context-sep-open") + .insertAdjacentElement("beforebegin", menuitem); } /** @@ -175,7 +180,8 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { currentTab._selected = true; const newTab = - existingTab ?? gBrowser.addTrustedTab(Services.io.newURI(url).spec, newTabOptions); + existingTab ?? + gBrowser.addTrustedTab(Services.io.newURI(url).spec, newTabOptions); this.#configureNewTab(newTab, currentTab, newUUID); this.#registerGlance(newTab, currentTab, newUUID); @@ -355,7 +361,11 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { this.#setAnimationState(true); const currentTab = ownerTab ?? gBrowser.selectedTab; - const browserElement = this.#createBrowserElement(data.url, currentTab, existingTab); + const browserElement = this.#createBrowserElement( + data.url, + currentTab, + existingTab + ); this.fillOverlay(browserElement); this.overlay.classList.add("zen-glance-overlay"); @@ -386,7 +396,7 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { // until a better solution is found). If we do it inside the requestAnimationFrame, // we see flashing and if we do it directly, the animation does not play at all. // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve) => { + return new Promise(async resolve => { // Recalculate location. When opening from pinned tabs, // view splitter doesn't catch if the tab is a glance tab or not. gZenViewSplitter.onLocationChange(browserElement); @@ -496,7 +506,8 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { const imageDataElement = this.#createGlancePreviewElement(data.elementData); this.browserWrapper.prepend(imageDataElement); - this.#glances.get(this.#currentGlanceID).elementImageData = data.elementData; + this.#glances.get(this.#currentGlanceID).elementImageData = + data.elementData; gZenUIManager.motion.animate( imageDataElement, @@ -518,7 +529,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { * @param {Browser} browserElement - The browser element */ #configureBrowserElement(browserElement) { - const rect = window.windowUtils.getBoundsWithoutFlushing(this.browserWrapper.parentElement); + const rect = window.windowUtils.getBoundsWithoutFlushing( + this.browserWrapper.parentElement + ); const minWidth = rect.width * 0.85; const minHeight = rect.height * 0.85; @@ -574,7 +587,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { this.#animateParentBackground(); gZenUIManager.motion .animate(this.browserWrapper, arcSequence, { - duration: gZenUIManager.testingEnabled ? 0 : this.#GLANCE_ANIMATION_DURATION, + duration: gZenUIManager.testingEnabled + ? 0 + : this.#GLANCE_ANIMATION_DURATION, ease: "easeInOut", }) .then(() => { @@ -595,7 +610,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { // Calculate start and end positions based on direction let startPosition, endPosition; - const tabPanelsRect = window.windowUtils.getBoundsWithoutFlushing(gBrowser.tabpanels); + const tabPanelsRect = window.windowUtils.getBoundsWithoutFlushing( + gBrowser.tabpanels + ); const widthPercent = 0.85; if (direction === "opening") { @@ -658,12 +675,17 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { // First, create the main animation steps for (let i = 0; i <= steps; i++) { const progress = i / steps; - const eased = direction === "opening" ? easeOutBack(progress) : easeOutCubic(progress); + const eased = + direction === "opening" + ? easeOutBack(progress) + : easeOutCubic(progress); // Calculate size interpolation - const currentWidth = startPosition.width + (endPosition.width - startPosition.width) * eased; + const currentWidth = + startPosition.width + (endPosition.width - startPosition.width) * eased; const currentHeight = - startPosition.height + (endPosition.height - startPosition.height) * eased; + startPosition.height + + (endPosition.height - startPosition.height) * eased; // Calculate position on arc const distanceX = endPosition.x - startPosition.x; @@ -671,7 +693,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { const x = startPosition.x + distanceX * eased; const y = - startPosition.y + distanceY * eased + arcDirection * arcHeight * (1 - (2 * eased - 1) ** 2); + startPosition.y + + distanceY * eased + + arcDirection * arcHeight * (1 - (2 * eased - 1) ** 2); sequence.top.push(`${y}px`); sequence.left.push(`${x}px`); @@ -707,13 +731,16 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { // Calculate available space for the arc const availableTopSpace = Math.min(startPosition.y, endPosition.y); const viewportHeight = window.innerHeight; - const availableBottomSpace = viewportHeight - Math.max(startPosition.y, endPosition.y); + const availableBottomSpace = + viewportHeight - Math.max(startPosition.y, endPosition.y); // Determine if we should arc downward or upward based on available space const shouldArcDownward = availableBottomSpace > availableTopSpace; // Use the space in the direction we're arcing - const availableSpace = shouldArcDownward ? availableBottomSpace : availableTopSpace; + const availableSpace = shouldArcDownward + ? availableBottomSpace + : availableTopSpace; // Limit arc height to a percentage of the available space const arcHeight = Math.min( @@ -792,12 +819,17 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { return; } - const browserSidebarContainer = this.#currentParentTab?.linkedBrowser?.closest( - ".browserSidebarContainer" + const browserSidebarContainer = + this.#currentParentTab?.linkedBrowser?.closest( + ".browserSidebarContainer" + ); + const sidebarButtons = this.browserWrapper.querySelector( + ".zen-glance-sidebar-container" ); - const sidebarButtons = this.browserWrapper.querySelector(".zen-glance-sidebar-container"); - if (this.#handleConfirmationTimeout(onTabClose, hasFocused, sidebarButtons)) { + if ( + this.#handleConfirmationTimeout(onTabClose, hasFocused, sidebarButtons) + ) { return; } @@ -851,8 +883,15 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { * @returns {boolean} True if should return early */ #handleConfirmationTimeout(onTabClose, hasFocused, sidebarButtons) { - if (onTabClose && hasFocused && !this.#confirmationTimeout && sidebarButtons) { - const cancelButton = sidebarButtons.querySelector(".zen-glance-sidebar-close"); + if ( + onTabClose && + hasFocused && + !this.#confirmationTimeout && + sidebarButtons + ) { + const cancelButton = sidebarButtons.querySelector( + ".zen-glance-sidebar-close" + ); cancelButton.setAttribute("waitconfirmation", true); this.#confirmationTimeout = setTimeout(() => { cancelButton.removeAttribute("waitconfirmation"); @@ -871,7 +910,12 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { * @param {Element} sidebarButtons - The sidebar buttons * @param {string} setNewID - New glance ID to set */ - #animateGlanceClosing(onTabClose, browserSidebarContainer, sidebarButtons, setNewID) { + #animateGlanceClosing( + onTabClose, + browserSidebarContainer, + sidebarButtons, + setNewID + ) { if (this.closingGlance) { return; } @@ -976,14 +1020,19 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { * @returns {Promise} Promise that resolves when complete */ #executeClosingAnimation(setNewID, onTabClose) { - return new Promise((resolve) => { - const originalPosition = this.#glances.get(this.#currentGlanceID).originalPosition; - const elementImageData = this.#glances.get(this.#currentGlanceID).elementImageData; + return new Promise(resolve => { + const originalPosition = this.#glances.get( + this.#currentGlanceID + ).originalPosition; + const elementImageData = this.#glances.get( + this.#currentGlanceID + ).elementImageData; this.#addElementPreview(elementImageData); // Create curved closing animation sequence - const closingData = this.#createClosingDataFromOriginalPosition(originalPosition); + const closingData = + this.#createClosingDataFromOriginalPosition(originalPosition); const arcSequence = this.#createGlanceArcSequence(closingData, "closing"); gZenUIManager.motion @@ -993,7 +1042,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { }) .then(() => { // Remove element preview after closing animation - const elementPreview = this.browserWrapper.querySelector(".zen-glance-element-preview"); + const elementPreview = this.browserWrapper.querySelector( + ".zen-glance-element-preview" + ); if (elementPreview) { elementPreview.remove(); } @@ -1031,7 +1082,8 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { */ #addElementPreview(elementImageData) { if (elementImageData) { - const imageDataElement = this.#createGlancePreviewElement(elementImageData); + const imageDataElement = + this.#createGlancePreviewElement(elementImageData); this.browserWrapper.prepend(imageDataElement); } } @@ -1081,7 +1133,10 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { this.overlay.classList.remove("zen-glance-overlay"); gBrowser ._getSwitcher() - .setTabStateNoAction(lastCurrentTab, gBrowser.AsyncTabSwitcher.STATE_UNLOADED); + .setTabStateNoAction( + lastCurrentTab, + gBrowser.AsyncTabSwitcher.STATE_UNLOADED + ); if (!this.#currentParentTab.selected) { this.#currentParentTab._visuallySelected = false; @@ -1107,7 +1162,10 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { this.#ignoreClose = true; lastCurrentTab.dispatchEvent(new Event("GlanceClose", { bubbles: true })); - gBrowser.removeTab(lastCurrentTab, { animate: true, skipPermitUnload: true }); + gBrowser.removeTab(lastCurrentTab, { + animate: true, + skipPermitUnload: true, + }); gBrowser.tabContainer._invalidateCachedTabs(); } @@ -1192,7 +1250,12 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { this.#removeParentBackground(parentHasBrowser, browserContainer); if (!justAnimateParent && this.overlay) { - this.#resetGlanceStates(closeCurrentTab, closeParentTab, parentHasBrowser, browserContainer); + this.#resetGlanceStates( + closeCurrentTab, + closeParentTab, + parentHasBrowser, + browserContainer + ); } if (clearID) { @@ -1220,8 +1283,16 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { * @param {boolean} parentHasBrowser - Whether parent has browser * @param {Element} browserContainer - The browser container */ - #resetGlanceStates(closeCurrentTab, closeParentTab, parentHasBrowser, browserContainer) { - if (parentHasBrowser && !this.#currentParentTab.hasAttribute("split-view")) { + #resetGlanceStates( + closeCurrentTab, + closeParentTab, + parentHasBrowser, + browserContainer + ) { + if ( + parentHasBrowser && + !this.#currentParentTab.hasAttribute("split-view") + ) { if (closeParentTab) { browserContainer.classList.remove("deck-selected"); } @@ -1258,7 +1329,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { this.quickOpenGlance(); if (prevTab && prevTab.linkedBrowser) { prevTab.linkedBrowser.docShellIsActive = false; - prevTab.linkedBrowser.closest(".browserSidebarContainer").classList.remove("deck-selected"); + prevTab.linkedBrowser + .closest(".browserSidebarContainer") + .classList.remove("deck-selected"); } } } @@ -1284,7 +1357,10 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { return; } - if (this.#currentGlanceID && this.#currentGlanceID !== tab.getAttribute("glance-id")) { + if ( + this.#currentGlanceID && + this.#currentGlanceID !== tab.getAttribute("glance-id") + ) { this.quickCloseGlance(); } @@ -1375,7 +1451,11 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { * @returns {boolean} True if valid */ #isValidGlanceUrl(urlSpec) { - return urlSpec.startsWith("http") || urlSpec.startsWith("https") || urlSpec.startsWith("file"); + return ( + urlSpec.startsWith("http") || + urlSpec.startsWith("https") || + urlSpec.startsWith("file") + ); } /** @@ -1465,10 +1545,14 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { this.#handleZenFolderPinning(); gBrowser.moveTabAfter(this.#currentTab, this.#currentParentTab); - const browserRect = window.windowUtils.getBoundsWithoutFlushing(this.browserWrapper); + const browserRect = window.windowUtils.getBoundsWithoutFlushing( + this.browserWrapper + ); this.#prepareTabForFullOpen(); - const sidebarButtons = this.browserWrapper.querySelector(".zen-glance-sidebar-container"); + const sidebarButtons = this.browserWrapper.querySelector( + ".zen-glance-sidebar-container" + ); if (sidebarButtons) { sidebarButtons.remove(); } @@ -1493,7 +1577,10 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { */ #handleZenFolderPinning() { const isZenFolder = this.#currentParentTab?.group?.isZenFolder; - if (Services.prefs.getBoolPref("zen.folders.owned-tabs-in-folder") && isZenFolder) { + if ( + Services.prefs.getBoolPref("zen.folders.owned-tabs-in-folder") && + isZenFolder + ) { gBrowser.pinTab(this.#currentTab); } } @@ -1551,7 +1638,10 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { * @param {Event} event - The bookmark click event */ openGlanceForBookmark(event) { - const activationMethod = Services.prefs.getStringPref("zen.glance.activation-method", "ctrl"); + const activationMethod = Services.prefs.getStringPref( + "zen.glance.activation-method", + "ctrl" + ); if (!this.#isActivationKeyPressed(event, activationMethod)) { return; @@ -1590,7 +1680,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { */ #createGlanceDataFromBookmark(event) { const rect = window.windowUtils.getBoundsWithoutFlushing(event.target); - const tabPanelRect = window.windowUtils.getBoundsWithoutFlushing(gBrowser.tabpanels); + const tabPanelRect = window.windowUtils.getBoundsWithoutFlushing( + gBrowser.tabpanels + ); // the bookmark is most likely outisde the tabpanel, so we need to give a negative number // so it can be corrected later // eslint-disable-next-line no-shadow @@ -1631,7 +1723,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { gZenViewSplitter.splitTabs([currentTab, currentParentTab], "vsep", 1); - const browserContainer = currentTab.linkedBrowser?.closest(".browserSidebarContainer"); + const browserContainer = currentTab.linkedBrowser?.closest( + ".browserSidebarContainer" + ); if (!gReduceMotion && browserContainer) { gZenViewSplitter.animateBrowserDrop(browserContainer); } @@ -1644,7 +1738,10 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { */ #handleZenFolderPinningForSplit(parentTab) { const isZenFolder = parentTab?.group?.isZenFolder; - if (Services.prefs.getBoolPref("zen.folders.owned-tabs-in-folder") && isZenFolder) { + if ( + Services.prefs.getBoolPref("zen.folders.owned-tabs-in-folder") && + isZenFolder + ) { gBrowser.pinTab(this.#currentTab); } } @@ -1657,7 +1754,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { */ getTabOrGlanceParent(tab) { if (tab?.hasAttribute("glance-id") && this.#glances) { - const parentTab = this.#glances.get(tab.getAttribute("glance-id"))?.parentTab; + const parentTab = this.#glances.get( + tab.getAttribute("glance-id") + )?.parentTab; if (parentTab) { return parentTab; } @@ -1702,7 +1801,8 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { if (currentGlanceID && oldGlanceID) { return ( - currentGlanceID === oldGlanceID && oldPanel.classList.contains("zen-glance-background") + currentGlanceID === oldGlanceID && + oldPanel.classList.contains("zen-glance-background") ); } @@ -1752,7 +1852,9 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { * @param {Tab} parentTab - Parent tab */ #openGlanceForSearch(currentTab, parentTab) { - const browserRect = window.windowUtils.getBoundsWithoutFlushing(gBrowser.tabbox); + const browserRect = window.windowUtils.getBoundsWithoutFlushing( + gBrowser.tabbox + ); const clickPosition = gZenUIManager._lastClickPosition || { clientX: browserRect.width / 2, clientY: browserRect.height / 2, diff --git a/src/zen/glance/actors/ZenGlanceChild.sys.mjs b/src/zen/glance/actors/ZenGlanceChild.sys.mjs index be742b247..6583c9ef2 100644 --- a/src/zen/glance/actors/ZenGlanceChild.sys.mjs +++ b/src/zen/glance/actors/ZenGlanceChild.sys.mjs @@ -17,7 +17,9 @@ export class ZenGlanceChild extends JSWindowActorChild { } async #initActivationMethod() { - this.#activationMethod = await this.sendQuery("ZenGlance:GetActivationMethod"); + this.#activationMethod = await this.sendQuery( + "ZenGlance:GetActivationMethod" + ); } #ensureOnlyKeyModifiers(event) { @@ -114,7 +116,9 @@ export class ZenGlanceChild extends JSWindowActorChild { return; } this.sendAsyncMessage("ZenGlance:CloseGlance", { - hasFocused: this.contentWindow.document.activeElement !== this.contentWindow.document.body, + hasFocused: + this.contentWindow.document.activeElement !== + this.contentWindow.document.body, }); } diff --git a/src/zen/glance/actors/ZenGlanceParent.sys.mjs b/src/zen/glance/actors/ZenGlanceParent.sys.mjs index 9c2aa9278..e5a366867 100644 --- a/src/zen/glance/actors/ZenGlanceParent.sys.mjs +++ b/src/zen/glance/actors/ZenGlanceParent.sys.mjs @@ -12,7 +12,10 @@ export class ZenGlanceParent extends JSWindowActorParent { async receiveMessage(message) { switch (message.name) { case "ZenGlance:GetActivationMethod": { - return Services.prefs.getStringPref("zen.glance.activation-method", "ctrl"); + return Services.prefs.getStringPref( + "zen.glance.activation-method", + "ctrl" + ); } case "ZenGlance:OpenGlance": { this.openGlance(this.browsingContext.topChromeWindow, message.data); @@ -23,11 +26,14 @@ export class ZenGlanceParent extends JSWindowActorParent { onTabClose: true, ...message.data, }; - this.browsingContext.topChromeWindow.gZenGlanceManager.closeGlance(params); + this.browsingContext.topChromeWindow.gZenGlanceManager.closeGlance( + params + ); break; } case "ZenGlance:RecordLinkClickData": { - this.browsingContext.topChromeWindow.gZenGlanceManager.lastLinkClickData = message.data; + this.browsingContext.topChromeWindow.gZenGlanceManager.lastLinkClickData = + message.data; break; } default: diff --git a/src/zen/glance/tests/GlanceTestUtils.sys.mjs b/src/zen/glance/tests/GlanceTestUtils.sys.mjs index 97bebf25f..e6d907908 100644 --- a/src/zen/glance/tests/GlanceTestUtils.sys.mjs +++ b/src/zen/glance/tests/GlanceTestUtils.sys.mjs @@ -4,7 +4,7 @@ export function openGlanceOnTab(window, callback, close = true) { // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve) => { + return new Promise(async resolve => { window.gZenGlanceManager .openGlance({ url: "https://example.com", @@ -13,7 +13,7 @@ export function openGlanceOnTab(window, callback, close = true) { width: 0, height: 0, }) - .then(async (glanceTab) => { + .then(async glanceTab => { await callback(glanceTab); if (close) { window.gZenGlanceManager diff --git a/src/zen/kbs/ZenKeyboardShortcuts.mjs b/src/zen/kbs/ZenKeyboardShortcuts.mjs index ef3a916cf..bceb9e66b 100644 --- a/src/zen/kbs/ZenKeyboardShortcuts.mjs +++ b/src/zen/kbs/ZenKeyboardShortcuts.mjs @@ -111,16 +111,15 @@ const defaultKeyboardGroups = { "zen-bidi-switch-direction-shortcut", "zen-screenshot-shortcut", ], - devTools: [ - /*Filled automatically*/ - ], + devTools: [/*Filled automatically*/], }; const fixedL10nIds = { cmd_findPrevious: "zen-search-find-again-shortcut-prev", "Browser:ReloadSkipCache": "zen-nav-reload-shortcut-skip-cache", cmd_close: "zen-close-tab-shortcut", - "History:RestoreLastClosedTabOrWindowOrSession": "zen-restore-last-closed-tab-shortcut", + "History:RestoreLastClosedTabOrWindowOrSession": + "zen-restore-last-closed-tab-shortcut", }; const ZEN_MAIN_KEYSET_ID = "mainKeyset"; @@ -191,7 +190,13 @@ export class nsKeyShortcutModifiers { } // used to avoid any future changes to the object - static fromObject({ ctrl = false, alt = false, shift = false, meta = false, accel = false }) { + static fromObject({ + ctrl = false, + alt = false, + shift = false, + meta = false, + accel = false, + }) { return new nsKeyShortcutModifiers(ctrl, alt, shift, meta, accel); } @@ -270,7 +275,9 @@ export class nsKeyShortcutModifiers { } areAnyActive() { - return this.#control || this.#alt || this.#shift || this.#meta || this.#accel; + return ( + this.#control || this.#alt || this.#shift || this.#meta || this.#accel + ); } get control() { @@ -385,7 +392,9 @@ class KeyShortcut { KeyShortcut.sanitizeL10nId(key.getAttribute("data-l10n-id")), key.getAttribute("id") ), - nsKeyShortcutModifiers.parseFromXHTMLAttribute(key.getAttribute("modifiers")), + nsKeyShortcutModifiers.parseFromXHTMLAttribute( + key.getAttribute("modifiers") + ), key.getAttribute("command"), key.getAttribute("data-l10n-id"), key.getAttribute("disabled") == "true", @@ -589,7 +598,11 @@ class KeyShortcut { } isUserEditable() { - if (!this.#id || this.#internal || (this.#group == FIREFOX_SHORTCUTS_GROUP && this.#disabled)) { + if ( + !this.#id || + this.#internal || + (this.#group == FIREFOX_SHORTCUTS_GROUP && this.#disabled) + ) { return false; } return true; @@ -653,10 +666,14 @@ class nsZenKeyboardShortcutsLoader { let keySet = document.getElementById(ZEN_MAIN_KEYSET_ID); let newShortcutList = []; - const correctDefaultShortcut = (shortcut) => { + const correctDefaultShortcut = shortcut => { if (shortcut.getID() === "key_savePage") { shortcut.setModifiers( - nsKeyShortcutModifiers.fromObject({ accel: true, alt: true, shift: true }) + nsKeyShortcutModifiers.fromObject({ + accel: true, + alt: true, + shift: true, + }) ); } }; @@ -801,7 +818,10 @@ class nsZenKeyboardShortcutsLoader { } let parsed = KeyShortcut.parseFromXHTML(key, { group: "devTools" }); // Move "inspector" shortcut to use "L" key instead of "I" - if (parsed.getID() == "key_inspector" || parsed.getID() == "key_inspectorMac") { + if ( + parsed.getID() == "key_inspector" || + parsed.getID() == "key_inspectorMac" + ) { parsed.setNewBinding("L"); } newShortcutList.push(parsed); @@ -869,7 +889,7 @@ class nsZenKeyboardShortcutsVersioner { fillDefaultIfNotPresent(data) { for (let shortcut of nsZenKeyboardShortcutsLoader.zenGetDefaultShortcuts()) { // If it has an ID and we dont find it in the data, we add it - if (shortcut.getID() && !data.find((s) => s.getID() == shortcut.getID())) { + if (shortcut.getID() && !data.find(s => s.getID() == shortcut.getID())) { data.push(shortcut); } } @@ -919,7 +939,8 @@ class nsZenKeyboardShortcutsVersioner { // detection for internal keys was not working properly, so every internal // shortcut was being saved as a user-editable shortcut. // This migration will fix this issue. - const defaultShortcuts = nsZenKeyboardShortcutsLoader.zenGetDefaultShortcuts(); + const defaultShortcuts = + nsZenKeyboardShortcutsLoader.zenGetDefaultShortcuts(); // Get the default shortcut, compare the id and set the internal flag if needed for (let shortcut of data) { for (let defaultShortcut of defaultShortcuts) { @@ -933,7 +954,7 @@ class nsZenKeyboardShortcutsVersioner { // Migrate from 3 to 4 // In this new version, we are just removing the 'zen-toggle-sidebar' shortcut // since it's not used anymore. - data = data.filter((shortcut) => shortcut.getID() != "zen-toggle-sidebar"); + data = data.filter(shortcut => shortcut.getID() != "zen-toggle-sidebar"); } if (version < 5) { // Migrate from 4 to 5 @@ -968,11 +989,14 @@ class nsZenKeyboardShortcutsVersioner { if (version < 7) { // Migrate from 6 to 7 // In this new version, we add the devtools shortcuts - const listener = (event) => { + const listener = event => { event.stopPropagation(); - const devToolsShortcuts = nsZenKeyboardShortcutsLoader.zenGetDefaultDevToolsShortcuts(); - gZenKeyboardShortcutsManager.updatedDefaultDevtoolsShortcuts(devToolsShortcuts); + const devToolsShortcuts = + nsZenKeyboardShortcutsLoader.zenGetDefaultDevToolsShortcuts(); + gZenKeyboardShortcutsManager.updatedDefaultDevtoolsShortcuts( + devToolsShortcuts + ); window.removeEventListener("zen-devtools-keyset-added", listener); }; @@ -991,7 +1015,11 @@ class nsZenKeyboardShortcutsVersioner { "C", "", ZEN_OTHER_SHORTCUTS_GROUP, - nsKeyShortcutModifiers.fromObject({ accel: true, shift: true, alt: true }), + nsKeyShortcutModifiers.fromObject({ + accel: true, + shift: true, + alt: true, + }), "cmd_zenCopyCurrentURLMarkdown", "zen-text-action-copy-url-markdown-shortcut" ) @@ -1001,7 +1029,9 @@ class nsZenKeyboardShortcutsVersioner { // Migrate from version 8 to 9 // Due to security concerns, replace "code:" actions with corresponding IDs // we also remove 'zen-toggle-web-panel' since it's not used anymore - data = data.filter((shortcut) => shortcut.getID() != "zen-toggle-web-panel"); + data = data.filter( + shortcut => shortcut.getID() != "zen-toggle-web-panel" + ); for (let shortcut of data) { if (shortcut.getAction()?.startsWith("code:")) { const id = shortcut.getID(); @@ -1084,7 +1114,11 @@ class nsZenKeyboardShortcutsVersioner { // - Remove the built-in "Open File" keybinding; menu item remains available // - Remove default "Bookmark All Tabs" keybinding (Ctrl+Shift+D) to avoid conflict // - Remove "Stop" keybinding to avoid conflict with Firefox's built-in binding - const shouldBeEmptyShortcuts = ["openFileKb", "bookmarkAllTabsKb", "key_stop"]; + const shouldBeEmptyShortcuts = [ + "openFileKb", + "bookmarkAllTabsKb", + "key_stop", + ]; for (let shortcut of data) { if (shouldBeEmptyShortcuts.includes(shortcut.getID?.())) { shortcut.shouldBeEmpty = true; @@ -1092,7 +1126,9 @@ class nsZenKeyboardShortcutsVersioner { } // Also remove zen-compact-mode-show-toolbar - data = data.filter((shortcut) => shortcut.getID() != "zen-compact-mode-show-toolbar"); + data = data.filter( + shortcut => shortcut.getID() != "zen-compact-mode-show-toolbar" + ); } if (version < 13) { @@ -1130,7 +1166,10 @@ class nsZenKeyboardShortcutsVersioner { let emptySplitFound = false, undoCloseWindowFound = false; for (let shortcut of data) { - if (shortcut.getID() == "zen-new-empty-split-view" && AppConstants.platform == "macosx") { + if ( + shortcut.getID() == "zen-new-empty-split-view" && + AppConstants.platform == "macosx" + ) { if (shortcut.getKeyName() == "+") { shortcut.setNewBinding("*"); } @@ -1179,7 +1218,10 @@ window.gZenKeyboardShortcutsManager = { "zen.keyboard.shortcuts.disable-mainkeyset-clear", false ); - window.addEventListener("zen-devtools-keyset-added", this._hasAddedDevtoolShortcuts.bind(this)); + window.addEventListener( + "zen-devtools-keyset-added", + this._hasAddedDevtoolShortcuts.bind(this) + ); this.init(); }, @@ -1188,11 +1230,14 @@ window.gZenKeyboardShortcutsManager = { if (this.inBrowserView) { const loadedShortcuts = await this._loadSaved(); - this._currentShortcutList = this.versioner.fixedKeyboardShortcuts(loadedShortcuts); + this._currentShortcutList = + this.versioner.fixedKeyboardShortcuts(loadedShortcuts); this._applyShortcuts(); await this._saveShortcuts(); - window.dispatchEvent(new Event("ZenKeyboardShortcutsReady", { bubbles: true })); + window.dispatchEvent( + new Event("ZenKeyboardShortcutsReady", { bubbles: true }) + ); } }, @@ -1210,12 +1255,16 @@ window.gZenKeyboardShortcutsManager = { try { return KeyShortcut.parseFromSaved(data); } catch (e) { - console.error("Zen CKS: Error parsing saved shortcuts. Resetting to defaults...", e); + console.error( + "Zen CKS: Error parsing saved shortcuts. Resetting to defaults...", + e + ); gNotificationBox.appendNotification( "zen-shortcuts-corrupted", { label: { "l10n-id": "zen-shortcuts-corrupted" }, - image: "chrome://browser/skin/notification-icons/persistent-storage-blocked.svg", + image: + "chrome://browser/skin/notification-icons/persistent-storage-blocked.svg", priority: gNotificationBox.PRIORITY_WARNING_HIGH, }, [] @@ -1325,12 +1374,17 @@ window.gZenKeyboardShortcutsManager = { if (!browser.gZenKeyboardShortcutsManager?._hasToLoadDevtools) { return; } - let devtoolsKeyset = browser.gZenKeyboardShortcutsManager.getZenDevtoolsKeyset(browser); + let devtoolsKeyset = + browser.gZenKeyboardShortcutsManager.getZenDevtoolsKeyset(browser); for (let key of this._currentShortcutList) { if (key.getGroup() != "devTools") { continue; } - if (nsZenKeyboardShortcutsLoader.IGNORED_DEVTOOLS_SHORTCUTS.includes(key.getID())) { + if ( + nsZenKeyboardShortcutsLoader.IGNORED_DEVTOOLS_SHORTCUTS.includes( + key.getID() + ) + ) { continue; } const originalKey = browser.document.getElementById(key.getID()); @@ -1345,7 +1399,9 @@ window.gZenKeyboardShortcutsManager = { } } - const originalDevKeyset = browser.document.getElementById(ZEN_DEVTOOLS_KEYSET_ID); + const originalDevKeyset = browser.document.getElementById( + ZEN_DEVTOOLS_KEYSET_ID + ); originalDevKeyset.after(devtoolsKeyset); }, diff --git a/src/zen/live-folders/ZenLiveFolder.sys.mjs b/src/zen/live-folders/ZenLiveFolder.sys.mjs index 8085b9a26..821a1fb29 100644 --- a/src/zen/live-folders/ZenLiveFolder.sys.mjs +++ b/src/zen/live-folders/ZenLiveFolder.sys.mjs @@ -5,7 +5,8 @@ const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { NetUtil: "resource://gre/modules/NetUtil.sys.mjs", DeferredTask: "resource://gre/modules/DeferredTask.sys.mjs", - NetworkHelper: "resource://devtools/shared/network-observer/NetworkHelper.sys.mjs", + NetworkHelper: + "resource://devtools/shared/network-observer/NetworkHelper.sys.mjs", }); export class nsZenLiveFolderProvider { @@ -135,7 +136,10 @@ export class nsZenLiveFolderProvider { userContextId = space.containerTabId || 0; } } - const principal = Services.scriptSecurityManager.createContentPrincipal(uri, { userContextId }); + const principal = Services.scriptSecurityManager.createContentPrincipal( + uri, + { userContextId } + ); const channel = lazy.NetUtil.newChannel({ uri, @@ -169,7 +173,7 @@ export class nsZenLiveFolderProvider { byteChunks.push(lazy.NetUtil.readInputStream(stream, count)); } }, - onStartRequest: (request) => { + onStartRequest: request => { const http = request.QueryInterface(Ci.nsIHttpChannel); try { @@ -182,7 +186,10 @@ export class nsZenLiveFolderProvider { contentType = http.getResponseHeader("content-type"); } catch (ex) {} - if (contentType && !lazy.NetworkHelper.isTextMimeType(contentType.split(";")[0].trim())) { + if ( + contentType && + !lazy.NetworkHelper.isTextMimeType(contentType.split(";")[0].trim()) + ) { request.cancel(Cr.NS_ERROR_FILE_UNKNOWN_TYPE); } @@ -215,7 +222,9 @@ export class nsZenLiveFolderProvider { let effectiveCharset = "utf-8"; - const mimeType = contentType ? contentType.split(";")[0].trim().toLowerCase() : ""; + const mimeType = contentType + ? contentType.split(";")[0].trim().toLowerCase() + : ""; if (mimeType === "text/html") { effectiveCharset = this.sniffCharset(bytes, headerCharset); } else if (headerCharset) { @@ -252,7 +261,12 @@ export class nsZenLiveFolderProvider { */ sniffCharset(bytes, headerCharset = "") { // 1. BOM detection (highest priority) - if (bytes.length >= 3 && bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) { + if ( + bytes.length >= 3 && + bytes[0] === 0xef && + bytes[1] === 0xbb && + bytes[2] === 0xbf + ) { return "utf-8"; } if (bytes.length >= 2) { @@ -269,7 +283,9 @@ export class nsZenLiveFolderProvider { // is more likely to be correct. try { const headLen = Math.min(bytes.length, 8192); - const head = new TextDecoder("windows-1252").decode(bytes.subarray(0, headLen)); + const head = new TextDecoder("windows-1252").decode( + bytes.subarray(0, headLen) + ); const metaCharsetRegex = / !itemId.startsWith(prefix)) + Array.from(this.dismissedItems).filter( + itemId => !itemId.startsWith(prefix) + ) ); if (deleteFolder) { @@ -351,7 +358,9 @@ class nsZenLiveFoldersManager { } // itemid -> id:itemid - const itemIds = new Set(items.map((item) => this.#makeCompositeId(liveFolder.id, item.id))); + const itemIds = new Set( + items.map(item => this.#makeCompositeId(liveFolder.id, item.id)) + ); const outdatedTabs = []; const existingItemIds = new Set(); @@ -377,7 +386,10 @@ class nsZenLiveFoldersManager { // Remove the dismissed items that are no longer in the given list for (const dismissedItemId of this.dismissedItems) { - if (dismissedItemId.startsWith(`${liveFolder.id}:`) && !itemIds.has(dismissedItemId)) { + if ( + dismissedItemId.startsWith(`${liveFolder.id}:`) && + !itemIds.has(dismissedItemId) + ) { this.dismissedItems.delete(dismissedItemId); } } @@ -392,11 +404,14 @@ class nsZenLiveFoldersManager { // Only add the items that are not already in the folder and was not dismissed by the user const newItems = items - .filter((item) => { + .filter(item => { const compositeId = this.#makeCompositeId(liveFolder.id, item.id); - return !existingItemIds.has(compositeId) && !this.dismissedItems.has(compositeId); + return ( + !existingItemIds.has(compositeId) && + !this.dismissedItems.has(compositeId) + ); }) - .map((item) => { + .map(item => { const tab = this.window.gBrowser.addTrustedTab(item.url, { createLazyBrowser: true, inBackground: true, @@ -418,7 +433,10 @@ class nsZenLiveFoldersManager { }); } } - tab.setAttribute("zen-live-folder-item-id", this.#makeCompositeId(liveFolder.id, item.id)); + tab.setAttribute( + "zen-live-folder-item-id", + this.#makeCompositeId(liveFolder.id, item.id) + ); if (item.subtitle) { tab.setAttribute("zen-show-sublabel", item.subtitle); const tabLabel = tab.querySelector(".zen-tab-sublabel"); @@ -471,7 +489,10 @@ class nsZenLiveFoldersManager { if (!this.window) { return null; } - const folder = lazy.ZenWindowSync.getItemFromWindow(this.window, liveFolder.id); + const folder = lazy.ZenWindowSync.getItemFromWindow( + this.window, + liveFolder.id + ); if (folder?.isZenFolder) { return folder; } @@ -516,7 +537,7 @@ class nsZenLiveFoldersManager { let data = []; for (let [id, liveFolder] of this.liveFolders) { const prefix = `${id}:`; - const dismissedItems = Array.from(this.dismissedItems).filter((itemId) => + const dismissedItems = Array.from(this.dismissedItems).filter(itemId => itemId.startsWith(prefix) ); @@ -568,7 +589,7 @@ class nsZenLiveFoldersManager { continue; } - const folder = folders.find((x) => x.id === entry.id); + const folder = folders.find(x => x.id === entry.id); if (!folder) { // No point restore if the live folder can't find its folder continue; @@ -585,7 +606,7 @@ class nsZenLiveFoldersManager { liveFolder.tabsState = entry.tabsState || []; liveFolder.state.lastErrorId = entry.data.state.lastErrorId; if (entry.dismissedItems && Array.isArray(entry.dismissedItems)) { - entry.dismissedItems.forEach((id) => this.dismissedItems.add(id)); + entry.dismissedItems.forEach(id => this.dismissedItems.add(id)); } liveFolder.start(); diff --git a/src/zen/live-folders/ZenLiveFoldersUI.mjs b/src/zen/live-folders/ZenLiveFoldersUI.mjs index beef84d3f..fa1e1b8bc 100644 --- a/src/zen/live-folders/ZenLiveFoldersUI.mjs +++ b/src/zen/live-folders/ZenLiveFoldersUI.mjs @@ -4,7 +4,8 @@ const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { - ZenLiveFoldersManager: "resource:///modules/zen/ZenLiveFoldersManager.sys.mjs", + ZenLiveFoldersManager: + "resource:///modules/zen/ZenLiveFoldersManager.sys.mjs", }); class nsZenLiveFoldersUI { @@ -13,7 +14,7 @@ class nsZenLiveFoldersUI { .getElementById("context_zenLiveFolderOptions") .querySelector("menupopup"); - popup.addEventListener("command", (event) => { + popup.addEventListener("command", event => { const option = event.target; const folderId = option.getAttribute("option-folder"); @@ -36,7 +37,9 @@ class nsZenLiveFoldersUI { } #restoreUIStateForLiveFolder(liveFolder) { - const folder = window.gZenWorkspaces.allTabGroups.find((x) => x.id === liveFolder.id); + const folder = window.gZenWorkspaces.allTabGroups.find( + x => x.id === liveFolder.id + ); if (!folder) { return; } @@ -47,7 +50,9 @@ class nsZenLiveFoldersUI { } for (const { itemId, label } of liveFolder.tabsState) { - const tab = folder.tabs.find((t) => t.getAttribute("zen-live-folder-item-id") === itemId); + const tab = folder.tabs.find( + t => t.getAttribute("zen-live-folder-item-id") === itemId + ); if (tab && label) { const tabLabel = tab.querySelector(".zen-tab-sublabel"); tab.setAttribute("zen-show-sublabel", label); @@ -122,7 +127,9 @@ class nsZenLiveFoldersUI { } buildContextMenu(folder) { - const optionsElement = document.getElementById("context_zenLiveFolderOptions"); + const optionsElement = document.getElementById( + "context_zenLiveFolderOptions" + ); let hidden = true; if (folder.isLiveFolder) { @@ -141,8 +148,9 @@ class nsZenLiveFoldersUI { intervals.push({ hours }); } - intervals = intervals.map((entry) => { - const ms = "mins" in entry ? entry.mins * MINUTE_MS : entry.hours * HOUR_MS; + intervals = intervals.map(entry => { + const ms = + "mins" in entry ? entry.mins * MINUTE_MS : entry.hours * HOUR_MS; return { l10nId: @@ -162,7 +170,8 @@ class nsZenLiveFoldersUI { const contextMenuItems = [ { key: "lastFetched", - l10nId: liveFolder.state.lastErrorId || "zen-live-folder-last-fetched", + l10nId: + liveFolder.state.lastErrorId || "zen-live-folder-last-fetched", l10nArgs: { time: this.#timeAgo(liveFolder.state.lastFetched) }, disabled: true, }, @@ -194,7 +203,9 @@ class nsZenLiveFoldersUI { return "-"; } - const rtf = new Intl.RelativeTimeFormat(Services.locale.appLocaleAsBCP47, { numeric: "auto" }); + const rtf = new Intl.RelativeTimeFormat(Services.locale.appLocaleAsBCP47, { + numeric: "auto", + }); const secondsDiff = (date - Date.now()) / 1000; const absSeconds = Math.abs(secondsDiff); diff --git a/src/zen/live-folders/providers/GithubLiveFolder.sys.mjs b/src/zen/live-folders/providers/GithubLiveFolder.sys.mjs index 4667905c0..bd8074fea 100644 --- a/src/zen/live-folders/providers/GithubLiveFolder.sys.mjs +++ b/src/zen/live-folders/providers/GithubLiveFolder.sys.mjs @@ -47,9 +47,15 @@ export class nsGithubLiveFolderProvider extends nsZenLiveFolderProvider { const activeRepos = new Set(); if (issues.length) { - const authors = document.querySelectorAll("a[class^=IssueItem-module__authorCreatedLink]"); - const titles = document.querySelectorAll("div[class^=Title-module__container]"); - const links = document.querySelectorAll('[data-testid="issue-pr-title-link"]'); + const authors = document.querySelectorAll( + "a[class^=IssueItem-module__authorCreatedLink]" + ); + const titles = document.querySelectorAll( + "div[class^=Title-module__container]" + ); + const links = document.querySelectorAll( + '[data-testid="issue-pr-title-link"]' + ); for (let i = 0; i < issues.length; i++) { const [rawRepo, rawNumber] = issues[i].childNodes; @@ -131,7 +137,7 @@ export class nsGithubLiveFolderProvider extends nsZenLiveFolderProvider { let outputString = ""; for (const option of options) { if (Array.isArray(option)) { - const enabledOptions = option.filter((x) => x.enabled).map((x) => x.value); + const enabledOptions = option.filter(x => x.enabled).map(x => x.value); if (enabledOptions.length) { outputString += ` (${enabledOptions.join(" OR ")}) `; } @@ -151,7 +157,7 @@ export class nsGithubLiveFolderProvider extends nsZenLiveFolderProvider { const excluded = this.state.options.repoExcludes; const repoOptions = Array.from(this.state.repos.union(excluded)) .sort((a, b) => a.localeCompare(b)) - .map((repo) => ({ + .map(repo => ({ l10nId: "zen-live-folder-github-option-repo", l10nArgs: { repo }, @@ -204,7 +210,7 @@ export class nsGithubLiveFolderProvider extends nsZenLiveFolderProvider { const key = option.getAttribute("option-key"); const checked = option.getAttribute("checked") === "true"; - if (!this.options.some((x) => x.key === key)) { + if (!this.options.some(x => x.key === key)) { return; } @@ -235,7 +241,9 @@ export class nsGithubLiveFolderProvider extends nsZenLiveFolderProvider { switch (errorId) { case "zen-live-folder-github-no-auth": { - const tab = this.manager.window.gBrowser.addTrustedTab("https://github.com/login"); + const tab = this.manager.window.gBrowser.addTrustedTab( + "https://github.com/login" + ); this.manager.window.gBrowser.selectedTab = tab; break; } diff --git a/src/zen/live-folders/providers/RssLiveFolder.sys.mjs b/src/zen/live-folders/providers/RssLiveFolder.sys.mjs index 95367798f..eff6bed3c 100644 --- a/src/zen/live-folders/providers/RssLiveFolder.sys.mjs +++ b/src/zen/live-folders/providers/RssLiveFolder.sys.mjs @@ -39,29 +39,35 @@ export class nsRssLiveFolderProvider extends nsZenLiveFolderProvider { const elements = doc.querySelectorAll(selector); const items = Array.from(elements) - .map((item) => { + .map(item => { const title = item.querySelector("title")?.textContent || ""; const linkNode = item.querySelector("link"); const url = - isAtom && linkNode ? linkNode.getAttribute("href") : linkNode?.textContent || ""; + isAtom && linkNode + ? linkNode.getAttribute("href") + : linkNode?.textContent || ""; const guid = item.querySelector(isAtom ? "id" : "guid")?.textContent; const id = guid || url; - const dateStr = item.querySelector(isAtom ? "updated" : "pubDate")?.textContent; + const dateStr = item.querySelector( + isAtom ? "updated" : "pubDate" + )?.textContent; const date = dateStr ? new Date(dateStr) : null; return { title, url, id, date }; }) - .filter((item) => { + .filter(item => { if (!item.url || !item.date) { return false; } if (!this.state.timeRange) { return true; } - return !isNaN(item.date.getTime()) && item.date.getTime() >= cutoffTime; + return ( + !isNaN(item.date.getTime()) && item.date.getTime() >= cutoffTime + ); }) .slice(0, this.state.maxItems); for (let item of items) { @@ -99,7 +105,7 @@ export class nsRssLiveFolderProvider extends nsZenLiveFolderProvider { _buildItemLimitOptions() { const entries = [5, 10, 25, 50]; - return entries.map((entry) => { + return entries.map(entry => { return this._buildRadioOption({ key: "maxItems", value: entry, @@ -128,13 +134,15 @@ export class nsRssLiveFolderProvider extends nsZenLiveFolderProvider { l10nId: "zen-live-folder-time-range-all-time", }), { type: "separator" }, - ...entries.map((entry) => { + ...entries.map(entry => { const isDays = "days" in entry; return this._buildRadioOption({ key: "timeRange", value: entry.ms, - l10nId: isDays ? "zen-live-folder-time-range-days" : "zen-live-folder-time-range-hours", + l10nId: isDays + ? "zen-live-folder-time-range-days" + : "zen-live-folder-time-range-hours", l10nArgs: isDays ? { days: entry.days } : { hours: entry.hours }, }); }), @@ -165,7 +173,10 @@ export class nsRssLiveFolderProvider extends nsZenLiveFolderProvider { try { const response = await fetch(url); if (!response.ok) { - return { label: "", icon: window.gZenEmojiPicker.getSVGURL("logo-rss.svg") }; + return { + label: "", + icon: window.gZenEmojiPicker.getSVGURL("logo-rss.svg"), + }; } const text = await response.text(); @@ -175,14 +186,20 @@ export class nsRssLiveFolderProvider extends nsZenLiveFolderProvider { const title = ( isAtom ? doc.querySelector("feed > title")?.textContent - : doc.querySelector("rss > channel > title, channel > title")?.textContent + : doc.querySelector("rss > channel > title, channel > title") + ?.textContent )?.trim(); const linkNode = isAtom - ? doc.querySelector("feed > link[rel='alternate'][href], feed > link[href]") + ? doc.querySelector( + "feed > link[rel='alternate'][href], feed > link[href]" + ) : doc.querySelector("rss > channel > link, channel > link"); const feedLink = - (isAtom ? linkNode?.getAttribute("href") : linkNode?.textContent)?.trim() || ""; + (isAtom + ? linkNode?.getAttribute("href") + : linkNode?.textContent + )?.trim() || ""; const faviconPageUrl = feedLink ? new URL(feedLink, url).href : url; let favicon = await lazy.PlacesUtils.favicons.getFaviconForPage( @@ -191,16 +208,23 @@ export class nsRssLiveFolderProvider extends nsZenLiveFolderProvider { return { label: title || "", - icon: favicon?.dataURI.spec || window.gZenEmojiPicker.getSVGURL("logo-rss.svg"), + icon: + favicon?.dataURI.spec || + window.gZenEmojiPicker.getSVGURL("logo-rss.svg"), }; } catch (e) { - return { label: "", icon: window.gZenEmojiPicker.getSVGURL("logo-rss.svg") }; + return { + label: "", + icon: window.gZenEmojiPicker.getSVGURL("logo-rss.svg"), + }; } } static async promptForFeedUrl(window, initialUrl = "") { const input = { value: initialUrl }; - const [prompt] = await lazy.l10n.formatValues(["zen-live-folder-rss-prompt-feed-url"]); + const [prompt] = await lazy.l10n.formatValues([ + "zen-live-folder-rss-prompt-feed-url", + ]); const promptOk = Services.prompt.prompt(window, prompt, null, input, null, { value: null, }); @@ -228,7 +252,10 @@ export class nsRssLiveFolderProvider extends nsZenLiveFolderProvider { } async getMetadata() { - return nsRssLiveFolderProvider.getMetadata(this.state.url, this.manager.window); + return nsRssLiveFolderProvider.getMetadata( + this.state.url, + this.manager.window + ); } async onOptionTrigger(option) { @@ -237,7 +264,7 @@ export class nsRssLiveFolderProvider extends nsZenLiveFolderProvider { const key = option.getAttribute("option-key"); const value = option.getAttribute("option-value"); - if (!this.options.some((x) => x.key === key)) { + if (!this.options.some(x => x.key === key)) { return; } diff --git a/src/zen/media/ZenMediaController.mjs b/src/zen/media/ZenMediaController.mjs index 9a396fc84..bb91a97a9 100644 --- a/src/zen/media/ZenMediaController.mjs +++ b/src/zen/media/ZenMediaController.mjs @@ -43,12 +43,16 @@ class nsZenMediaController { this.mediaTitle = document.querySelector("#zen-media-title"); this.mediaArtist = document.querySelector("#zen-media-artist"); - this.mediaControlBar = document.querySelector("#zen-media-controls-toolbar"); + this.mediaControlBar = document.querySelector( + "#zen-media-controls-toolbar" + ); this.mediaProgressBar = document.querySelector("#zen-media-progress-bar"); this.mediaCurrentTime = document.querySelector("#zen-media-current-time"); this.mediaDuration = document.querySelector("#zen-media-duration"); this.mediaFocusButton = document.querySelector("#zen-media-focus-button"); - this.mediaProgressBarContainer = document.querySelector("#zen-media-progress-hbox"); + this.mediaProgressBarContainer = document.querySelector( + "#zen-media-progress-hbox" + ); this.onPositionstateChange = this._onPositionstateChange.bind(this); this.onPlaybackstateChange = this._onPlaybackstateChange.bind(this); @@ -61,14 +65,14 @@ class nsZenMediaController { } #initEventListeners() { - this.mediaControlBar.addEventListener("mousedown", (event) => { + this.mediaControlBar.addEventListener("mousedown", event => { if (event.target.closest(":is(toolbarbutton,#zen-media-progress-hbox)")) { return; } this.onMediaFocus(); }); - this.mediaControlBar.addEventListener("command", (event) => { + this.mediaControlBar.addEventListener("command", event => { const button = event.target.closest("toolbarbutton"); if (!button) { return; @@ -104,10 +108,16 @@ class nsZenMediaController { } }); - this.mediaProgressBar.addEventListener("input", this.onMediaSeekDrag.bind(this)); - this.mediaProgressBar.addEventListener("change", this.onMediaSeekComplete.bind(this)); + this.mediaProgressBar.addEventListener( + "input", + this.onMediaSeekDrag.bind(this) + ); + this.mediaProgressBar.addEventListener( + "change", + this.onMediaSeekComplete.bind(this) + ); - window.addEventListener("TabSelect", (event) => { + window.addEventListener("TabSelect", event => { if (this.isSharing) { return; } @@ -140,7 +150,7 @@ class nsZenMediaController { window.addEventListener("TabClose", onTabDiscardedOrClosed); window.addEventListener("TabBrowserDiscarded", onTabDiscardedOrClosed); - window.addEventListener("DOMAudioPlaybackStarted", (event) => { + window.addEventListener("DOMAudioPlaybackStarted", event => { setTimeout(() => { if ( this._currentMediaController?.isPlaying && @@ -154,15 +164,21 @@ class nsZenMediaController { } }, 1000); - this.activateMediaControls(event.target.browsingContext.mediaController, event.target); + this.activateMediaControls( + event.target.browsingContext.mediaController, + event.target + ); }); - window.addEventListener("DOMAudioPlaybackStopped", () => this.updateMuteState()); + window.addEventListener("DOMAudioPlaybackStopped", () => + this.updateMuteState() + ); } onTabDiscardedOrClosed(event) { const { linkedBrowser } = event.target; - const isCurrentBrowser = linkedBrowser?.browserId === this._currentBrowser?.browserId; + const isCurrentBrowser = + linkedBrowser?.browserId === this._currentBrowser?.browserId; if (isCurrentBrowser) { this.isSharing = false; @@ -186,11 +202,26 @@ class nsZenMediaController { shouldHide = true ) { if (shouldForget && mediaController) { - mediaController.removeEventListener("pictureinpicturemodechange", this.onPipModeChange); - mediaController.removeEventListener("positionstatechange", this.onPositionstateChange); - mediaController.removeEventListener("playbackstatechange", this.onPlaybackstateChange); - mediaController.removeEventListener("supportedkeyschange", this.onSupportedKeysChange); - mediaController.removeEventListener("metadatachange", this.onMetadataChange); + mediaController.removeEventListener( + "pictureinpicturemodechange", + this.onPipModeChange + ); + mediaController.removeEventListener( + "positionstatechange", + this.onPositionstateChange + ); + mediaController.removeEventListener( + "playbackstatechange", + this.onPlaybackstateChange + ); + mediaController.removeEventListener( + "supportedkeyschange", + this.onSupportedKeysChange + ); + mediaController.removeEventListener( + "metadatachange", + this.onMetadataChange + ); mediaController.removeEventListener("deactivated", this.onDeactivated); this.mediaControllersMap.delete(mediaController.id); @@ -219,7 +250,10 @@ class nsZenMediaController { set isSharing(value) { if (this._currentBrowser?.browsingContext && !value) { - const webRTC = this._currentBrowser.browsingContext.currentWindowGlobal.getActor("WebRTC"); + const webRTC = + this._currentBrowser.browsingContext.currentWindowGlobal.getActor( + "WebRTC" + ); webRTC.sendAsyncMessage("webrtc:UnmuteMicrophone"); webRTC.sendAsyncMessage("webrtc:UnmuteCamera"); } @@ -281,7 +315,9 @@ class nsZenMediaController { this.mediaControlBar.removeAttribute("hidden"); window.requestAnimationFrame(() => { this.mediaControlBar.style.height = - this.mediaControlBar.querySelector("toolbaritem").getBoundingClientRect().height + "px"; + this.mediaControlBar + .querySelector("toolbaritem") + .getBoundingClientRect().height + "px"; this.mediaControlBar.style.opacity = 0; gZenUIManager.updateTabsToolbar(); gZenUIManager.motion.animate( @@ -326,7 +362,8 @@ class nsZenMediaController { } const iconURL = - this._currentBrowser.mIconURL || `page-icon:${this._currentBrowser.currentURI.spec}`; + this._currentBrowser.mIconURL || + `page-icon:${this._currentBrowser.currentURI.spec}`; this.mediaFocusButton.style.listStyleImage = `url(${iconURL})`; this.mediaTitle.textContent = metadata.title || ""; @@ -341,8 +378,11 @@ class nsZenMediaController { this.updateMediaPosition(); for (const key of this.supportedKeys) { - const button = this.mediaControlBar.querySelector(`#zen-media-${key}-button`); - button.disabled = !this._currentMediaController.supportedKeys.includes(key); + const button = this.mediaControlBar.querySelector( + `#zen-media-${key}-button` + ); + button.disabled = + !this._currentMediaController.supportedKeys.includes(key); } } @@ -350,7 +390,10 @@ class nsZenMediaController { this.updateMuteState(); this.switchController(); - if (!mediaController.isActive || this._currentBrowser?.browserId === browser.browserId) { + if ( + !mediaController.isActive || + this._currentBrowser?.browserId === browser.browserId + ) { return; } @@ -370,21 +413,36 @@ class nsZenMediaController { this.setupMediaControlUI(metadata, positionState); } - mediaController.addEventListener("pictureinpicturemodechange", this.onPipModeChange); - mediaController.addEventListener("positionstatechange", this.onPositionstateChange); - mediaController.addEventListener("playbackstatechange", this.onPlaybackstateChange); - mediaController.addEventListener("supportedkeyschange", this.onSupportedKeysChange); + mediaController.addEventListener( + "pictureinpicturemodechange", + this.onPipModeChange + ); + mediaController.addEventListener( + "positionstatechange", + this.onPositionstateChange + ); + mediaController.addEventListener( + "playbackstatechange", + this.onPlaybackstateChange + ); + mediaController.addEventListener( + "supportedkeyschange", + this.onSupportedKeysChange + ); mediaController.addEventListener("metadatachange", this.onMetadataChange); mediaController.addEventListener("deactivated", this.onDeactivated); } activateMediaDeviceControls(browser) { - if (browser?.browsingContext.currentWindowGlobal.hasActivePeerConnections()) { + if ( + browser?.browsingContext.currentWindowGlobal.hasActivePeerConnections() + ) { this.mediaControlBar.removeAttribute("can-pip"); this._currentBrowser = browser; const tab = window.gBrowser.getTabForBrowser(browser); - const iconURL = browser.mIconURL || `page-icon:${browser.currentURI.spec}`; + const iconURL = + browser.mIconURL || `page-icon:${browser.currentURI.spec}`; this.isSharing = true; @@ -401,14 +459,16 @@ class nsZenMediaController { for (const browser of window.gBrowser.browsers) { const isMatch = browser.innerWindowID === windowId; - const isCurrentBrowser = this._currentBrowser?.browserId === browser.browserId; + const isCurrentBrowser = + this._currentBrowser?.browserId === browser.browserId; const shouldShow = showCameraIndicator || showMicrophoneIndicator; if (!isMatch) { continue; } if (shouldShow && !(isCurrentBrowser && this.isSharing)) { - const webRTC = browser.browsingContext.currentWindowGlobal.getActor("WebRTC"); + const webRTC = + browser.browsingContext.currentWindowGlobal.getActor("WebRTC"); webRTC.sendAsyncMessage("webrtc:UnmuteMicrophone"); webRTC.sendAsyncMessage("webrtc:UnmuteCamera"); @@ -417,9 +477,11 @@ class nsZenMediaController { } if (this._currentMediaController) { this._currentMediaController.pause(); - this.deinitMediaController(this._currentMediaController, true, true).then(() => - this.activateMediaDeviceControls(browser) - ); + this.deinitMediaController( + this._currentMediaController, + true, + true + ).then(() => this.activateMediaDeviceControls(browser)); } else { this.activateMediaDeviceControls(browser); } @@ -457,7 +519,9 @@ class nsZenMediaController { return; } for (const key of this.supportedKeys) { - const button = this.mediaControlBar.querySelector(`#zen-media-${key}-button`); + const button = this.mediaControlBar.querySelector( + `#zen-media-${key}-button` + ); button.disabled = !event.target.supportedKeys.includes(key); } } @@ -505,7 +569,7 @@ class nsZenMediaController { if (!this._currentMediaController?.isPlaying || force) { const nextController = Array.from(this.mediaControllersMap.values()) .filter( - (ctrl) => + ctrl => ctrl.controller.isPlaying && gBrowser.selectedBrowser.browserId !== ctrl.browser.browserId && ctrl.controller.id !== this._currentMediaController?.id @@ -514,13 +578,23 @@ class nsZenMediaController { .shift(); if (nextController) { - this.deinitMediaController(this._currentMediaController, false, true).then(() => { - this.setupMediaController(nextController.controller, nextController.browser); - const elapsedTime = Math.floor((Date.now() - nextController.lastUpdated) / 1000); + this.deinitMediaController( + this._currentMediaController, + false, + true + ).then(() => { + this.setupMediaController( + nextController.controller, + nextController.browser + ); + const elapsedTime = Math.floor( + (Date.now() - nextController.lastUpdated) / 1000 + ); this.setupMediaControlUI(nextController.controller.getMetadata(), { position: - nextController.position + (nextController.controller.isPlaying ? elapsedTime : 0), + nextController.position + + (nextController.controller.isPlaying ? elapsedTime : 0), duration: nextController.duration, playbackRate: nextController.playbackRate, }); @@ -550,9 +624,14 @@ class nsZenMediaController { return; } - this.mediaCurrentTime.textContent = this.formatSecondsToTime(this._currentPosition); - this.mediaDuration.textContent = this.formatSecondsToTime(this._currentDuration); - this.mediaProgressBar.value = (this._currentPosition / this._currentDuration) * 100; + this.mediaCurrentTime.textContent = this.formatSecondsToTime( + this._currentPosition + ); + this.mediaDuration.textContent = this.formatSecondsToTime( + this._currentDuration + ); + this.mediaProgressBar.value = + (this._currentPosition / this._currentDuration) * 100; this._mediaUpdateInterval = setInterval(() => { if (this._currentMediaController?.isPlaying) { @@ -560,8 +639,11 @@ class nsZenMediaController { if (this._currentPosition > this._currentDuration) { this._currentPosition = this._currentDuration; } - this.mediaCurrentTime.textContent = this.formatSecondsToTime(this._currentPosition); - this.mediaProgressBar.value = (this._currentPosition / this._currentDuration) * 100; + this.mediaCurrentTime.textContent = this.formatSecondsToTime( + this._currentPosition + ); + this.mediaProgressBar.value = + (this._currentPosition / this._currentDuration) * 100; } else { clearInterval(this._mediaUpdateInterval); this._mediaUpdateInterval = null; @@ -730,7 +812,10 @@ class nsZenMediaController { if (!this._currentBrowser) { return; } - this.mediaControlBar.toggleAttribute("muted", this._currentBrowser.audioMuted); + this.mediaControlBar.toggleAttribute( + "muted", + this._currentBrowser.audioMuted + ); } updatePipButton() { @@ -741,10 +826,11 @@ class nsZenMediaController { return; } - const { totalPipCount, totalPipDisabled } = PictureInPicture.getEligiblePipVideoCount( - this._currentBrowser - ); - const canPip = totalPipCount === 1 || (totalPipDisabled > 0 && lazy.RESPECT_PIP_DISABLED); + const { totalPipCount, totalPipDisabled } = + PictureInPicture.getEligiblePipVideoCount(this._currentBrowser); + const canPip = + totalPipCount === 1 || + (totalPipDisabled > 0 && lazy.RESPECT_PIP_DISABLED); this.mediaControlBar.toggleAttribute("can-pip", canPip); } diff --git a/src/zen/mods/ZenMods.mjs b/src/zen/mods/ZenMods.mjs index c22c17890..a050c92d3 100644 --- a/src/zen/mods/ZenMods.mjs +++ b/src/zen/mods/ZenMods.mjs @@ -38,7 +38,9 @@ class nsZenMods extends nsZenPreloadedFeature { get #modsBackend() { if (!this.#_modsBackend) { - this.#_modsBackend = Cc["@mozilla.org/zen/mods-backend;1"].getService(Ci.nsIZenModsBackend); + this.#_modsBackend = Cc["@mozilla.org/zen/mods-backend;1"].getService( + Ci.nsIZenModsBackend + ); } return this.#_modsBackend; } @@ -78,7 +80,7 @@ class nsZenMods extends nsZenPreloadedFeature { await this.#writeStylesheet(mods); const modsWithPreferences = await Promise.all( - mods.map(async (mod) => { + mods.map(async mod => { const preferences = await this.getModPreferences(mod); return { @@ -103,7 +105,7 @@ class nsZenMods extends nsZenPreloadedFeature { } const modsObject = await this.getMods(); const mods = Object.values(modsObject).filter( - (mod) => mod.enabled === undefined || mod.enabled + mod => mod.enabled === undefined || mod.enabled ); // eslint-disable-next-line no-shadow @@ -131,9 +133,13 @@ class nsZenMods extends nsZenPreloadedFeature { } const getProperty = - type === "checkbox" ? Services.prefs.getBoolPref : Services.prefs.getStringPref; + type === "checkbox" + ? Services.prefs.getBoolPref + : Services.prefs.getStringPref; const setProperty = - type === "checkbox" ? Services.prefs.setBoolPref : Services.prefs.setStringPref; + type === "checkbox" + ? Services.prefs.setBoolPref + : Services.prefs.setStringPref; try { getProperty(property); @@ -155,7 +161,9 @@ class nsZenMods extends nsZenPreloadedFeature { setProperty( property, - typeof defaultValue === "boolean" ? defaultValue : defaultValue.toString() + typeof defaultValue === "boolean" + ? defaultValue + : defaultValue.toString() ); } } @@ -175,10 +183,14 @@ class nsZenMods extends nsZenPreloadedFeature { element.remove(); } - for (const { property } of preferences.filter(({ type }) => type !== "checkbox")) { + for (const { property } of preferences.filter( + ({ type }) => type !== "checkbox" + )) { const sanitizedProperty = property?.replaceAll(/\./g, "-"); - browser.document.querySelector(":root").style.removeProperty(`--${sanitizedProperty}`); + browser.document + .querySelector(":root") + .style.removeProperty(`--${sanitizedProperty}`); } continue; @@ -303,7 +315,9 @@ class nsZenMods extends nsZenPreloadedFeature { const response = await fetch(url); if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status} for url: ${url}`); + throw new Error( + `HTTP error! status: ${response.status} for url: ${url}` + ); } const data = await response.text(); @@ -316,14 +330,18 @@ class nsZenMods extends nsZenPreloadedFeature { } catch (e) { attempt++; if (attempt >= maxRetries) { - console.error("[ZenMods]: Error downloading file after retries", url, e); + console.error( + "[ZenMods]: Error downloading file after retries", + url, + e + ); } else { console.warn( `[ZenMods]: Download failed (attempt ${attempt} of ${maxRetries}), retrying in ${retryDelayMs}ms...`, url, e ); - await new Promise((res) => setTimeout(res, retryDelayMs)); + await new Promise(res => setTimeout(res, retryDelayMs)); } } } @@ -409,7 +427,11 @@ class nsZenMods extends nsZenPreloadedFeature { } async getModPreferences(mod) { - const modPath = PathUtils.join(this.modsRootPath, mod.id, "preferences.json"); + const modPath = PathUtils.join( + this.modsRootPath, + mod.id, + "preferences.json" + ); if (!(await IOUtils.exists(modPath)) || !mod.preferences) { return []; @@ -419,10 +441,15 @@ class nsZenMods extends nsZenPreloadedFeature { const preferences = await IOUtils.readJSON(modPath); return preferences.filter(({ disabledOn = [] }) => { - return !disabledOn.includes(gZenOperatingSystemCommonUtils.currentOperatingSystem); + return !disabledOn.includes( + gZenOperatingSystemCommonUtils.currentOperatingSystem + ); }); } catch (e) { - console.error(`[ZenMods]: Error reading mod preferences for ${mod.name}:`, e); + console.error( + `[ZenMods]: Error reading mod preferences for ${mod.name}:`, + e + ); return []; } } @@ -443,7 +470,7 @@ class nsZenMods extends nsZenPreloadedFeature { const mods = await this.#getEnabledMods(); const modsWithPreferences = await Promise.all( - mods.map(async (mod) => { + mods.map(async mod => { const preferences = await this.getModPreferences(mod); return { @@ -475,21 +502,38 @@ class nsZenMods extends nsZenPreloadedFeature { console.error("[ZenMods]: Error loading Zen Mods:", e); } - Services.prefs.addObserver(this.updatePref, this.#rebuildModsStylesheet.bind(this)); - Services.prefs.addObserver("zen.themes.disable-all", this.#handleDisableMods.bind(this)); + Services.prefs.addObserver( + this.updatePref, + this.#rebuildModsStylesheet.bind(this) + ); + Services.prefs.addObserver( + "zen.themes.disable-all", + this.#handleDisableMods.bind(this) + ); } #setNewMilestoneIfNeeded() { - const previousMilestone = Services.prefs.getStringPref("zen.mods.milestone", ""); + const previousMilestone = Services.prefs.getStringPref( + "zen.mods.milestone", + "" + ); if (previousMilestone != Services.appinfo.version) { - Services.prefs.setStringPref("zen.mods.milestone", Services.appinfo.version); + Services.prefs.setStringPref( + "zen.mods.milestone", + Services.appinfo.version + ); Services.prefs.clearUserPref("zen.mods.last-update"); } } #shouldAutoUpdate() { - const daysBeforeUpdate = Services.prefs.getIntPref("zen.mods.auto-update-days"); - const lastUpdatedSec = Services.prefs.getIntPref("zen.mods.last-update", -1); + const daysBeforeUpdate = Services.prefs.getIntPref( + "zen.mods.auto-update-days" + ); + const lastUpdatedSec = Services.prefs.getIntPref( + "zen.mods.last-update", + -1 + ); const nowSec = Math.floor(Date.now() / 1000); const daysSinceUpdate = (nowSec - lastUpdatedSec) / (60 * 60 * 24); @@ -504,7 +548,7 @@ class nsZenMods extends nsZenPreloadedFeature { const mods = await this.getMods(); const updates = await Promise.all( - Object.values(mods).map(async (currentMod) => { + Object.values(mods).map(async currentMod => { try { const possibleNewModVersion = await this.requestMod(currentMod.id); @@ -513,7 +557,10 @@ class nsZenMods extends nsZenPreloadedFeature { } if ( - !this.#compareVersions(possibleNewModVersion.version, currentMod.version ?? "0.0.0") && + !this.#compareVersions( + possibleNewModVersion.version, + currentMod.version ?? "0.0.0" + ) && possibleNewModVersion.version != currentMod.version ) { console.warn( @@ -539,8 +586,11 @@ class nsZenMods extends nsZenPreloadedFeature { ); await this.updateMods(mods); - Services.prefs.setIntPref("zen.mods.last-update", Math.floor(Date.now() / 1000)); - return updates.filter((update) => { + Services.prefs.setIntPref( + "zen.mods.last-update", + Math.floor(Date.now() / 1000) + ); + return updates.filter(update => { return update !== null; }); } @@ -595,7 +645,10 @@ class nsZenMods extends nsZenPreloadedFeature { } triggerModsUpdate() { - Services.prefs.setBoolPref(this.updatePref, !Services.prefs.getBoolPref(this.updatePref)); + Services.prefs.setBoolPref( + this.updatePref, + !Services.prefs.getBoolPref(this.updatePref) + ); } async installMod(mod) { @@ -603,11 +656,20 @@ class nsZenMods extends nsZenPreloadedFeature { const modPath = PathUtils.join(this.modsRootPath, mod.id); await IOUtils.makeDirectory(modPath, { ignoreExisting: true }); - await this.#downloadUrlToFile(mod.style, PathUtils.join(modPath, "chrome.css")); - await this.#downloadUrlToFile(mod.readme, PathUtils.join(modPath, "readme.md")); + await this.#downloadUrlToFile( + mod.style, + PathUtils.join(modPath, "chrome.css") + ); + await this.#downloadUrlToFile( + mod.readme, + PathUtils.join(modPath, "readme.md") + ); if (mod.preferences) { - await this.#downloadUrlToFile(mod.preferences, PathUtils.join(modPath, "preferences.json")); + await this.#downloadUrlToFile( + mod.preferences, + PathUtils.join(modPath, "preferences.json") + ); } } catch (e) { console.error("[ZenMods]: Error installing mod", mod.id, e); @@ -652,7 +714,10 @@ class nsZenMods extends nsZenPreloadedFeature { console.error(`[ZenMods]: Error parsing mod ${modId} info:`, e); } } else { - console.error(`[ZenMods]: Error fetching mod ${modId} info:`, data.status); + console.error( + `[ZenMods]: Error fetching mod ${modId} info:`, + data.status + ); } return null; diff --git a/src/zen/mods/actors/ZenModsMarketplaceChild.sys.mjs b/src/zen/mods/actors/ZenModsMarketplaceChild.sys.mjs index abfc10aed..ac409fed5 100644 --- a/src/zen/mods/actors/ZenModsMarketplaceChild.sys.mjs +++ b/src/zen/mods/actors/ZenModsMarketplaceChild.sys.mjs @@ -45,11 +45,15 @@ export class ZenModsMarketplaceChild extends JSWindowActorChild { } get actionButtonUninstall() { - return this.contentWindow.document.getElementById("install-theme-uninstall"); + return this.contentWindow.document.getElementById( + "install-theme-uninstall" + ); } async isThemeInstalled(themeId) { - return await this.sendQuery("ZenModsMarketplace:IsModInstalled", { themeId }); + return await this.sendQuery("ZenModsMarketplace:IsModInstalled", { + themeId, + }); } async receiveMessage(message) { @@ -79,7 +83,9 @@ export class ZenModsMarketplaceChild extends JSWindowActorChild { const updates = message.data.updates; this.contentWindow.document.dispatchEvent( - new CustomEvent("ZenModsMarketplace:CheckForUpdatesFinished", { detail: { updates } }) + new CustomEvent("ZenModsMarketplace:CheckForUpdatesFinished", { + detail: { updates }, + }) ); break; @@ -88,15 +94,21 @@ export class ZenModsMarketplaceChild extends JSWindowActorChild { } injectMarketplaceAPI() { - Cu.exportFunction(this.handleModInstallationEvent.bind(this), this.contentWindow, { - defineAs: "ZenInstallMod", - }); + Cu.exportFunction( + this.handleModInstallationEvent.bind(this), + this.contentWindow, + { + defineAs: "ZenInstallMod", + } + ); } async addButtons() { const actionButton = this.actionButton; const actionButtonUninstall = this.actionButtonUninstall; - const errorMessage = this.contentWindow.document.getElementById("install-theme-error"); + const errorMessage = this.contentWindow.document.getElementById( + "install-theme-error" + ); if (!actionButton || !actionButtonUninstall) { return; } @@ -110,8 +122,14 @@ export class ZenModsMarketplaceChild extends JSWindowActorChild { actionButton.classList.remove("hidden"); } - actionButton.addEventListener("click", this.handleModInstallationEvent.bind(this)); - actionButtonUninstall.addEventListener("click", this.handleModUninstallEvent.bind(this)); + actionButton.addEventListener( + "click", + this.handleModInstallationEvent.bind(this) + ); + actionButtonUninstall.addEventListener( + "click", + this.handleModUninstallEvent.bind(this) + ); } async handleModUninstallEvent(event) { diff --git a/src/zen/mods/actors/ZenModsMarketplaceParent.sys.mjs b/src/zen/mods/actors/ZenModsMarketplaceParent.sys.mjs index 19f73dac7..305254de3 100644 --- a/src/zen/mods/actors/ZenModsMarketplaceParent.sys.mjs +++ b/src/zen/mods/actors/ZenModsMarketplaceParent.sys.mjs @@ -46,7 +46,9 @@ export class ZenModsMarketplaceParent extends JSWindowActorParent { } case "ZenModsMarketplace:CheckForUpdates": { const updates = await this.modsManager.checkForModsUpdates(); - this.sendAsyncMessage("ZenModsMarketplace:CheckForUpdatesFinished", { updates }); + this.sendAsyncMessage("ZenModsMarketplace:CheckForUpdatesFinished", { + updates, + }); break; } diff --git a/src/zen/sessionstore/ZenSessionManager.sys.mjs b/src/zen/sessionstore/ZenSessionManager.sys.mjs index fcd443d80..7b854e437 100644 --- a/src/zen/sessionstore/ZenSessionManager.sys.mjs +++ b/src/zen/sessionstore/ZenSessionManager.sys.mjs @@ -8,7 +8,8 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs"; const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { - ZenLiveFoldersManager: "resource:///modules/zen/ZenLiveFoldersManager.sys.mjs", + ZenLiveFoldersManager: + "resource:///modules/zen/ZenLiveFoldersManager.sys.mjs", PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs", SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs", SessionStartup: "resource:///modules/sessionstore/SessionStartup.sys.mjs", @@ -17,7 +18,12 @@ ChromeUtils.defineESModuleGetters(lazy, { DeferredTask: "resource://gre/modules/DeferredTask.sys.mjs", }); -XPCOMUtils.defineLazyPreferenceGetter(lazy, "gShouldLog", "zen.session-store.log", true); +XPCOMUtils.defineLazyPreferenceGetter( + lazy, + "gShouldLog", + "zen.session-store.log", + true +); XPCOMUtils.defineLazyPreferenceGetter( lazy, "gMaxSessionBackups", @@ -31,7 +37,10 @@ XPCOMUtils.defineLazyPreferenceGetter( 3 ); -const SHOULD_BACKUP_FILE = Services.prefs.getBoolPref("zen.session-store.backup-file", true); +const SHOULD_BACKUP_FILE = Services.prefs.getBoolPref( + "zen.session-store.backup-file", + true +); const FILE_NAME = "zen-sessions.jsonlz4"; const LAST_BUILD_ID_PREF = "zen.session-store.last-build-id"; @@ -120,7 +129,7 @@ export class nsZenSessionManager { try { let files = await IOUtils.getChildren(this.#backupFolderPath); files = files - .filter((file) => file.startsWith(prefix)) + .filter(file => file.startsWith(prefix)) .sort() .reverse(); backupFiles.push(files[0]); @@ -142,9 +151,11 @@ export class nsZenSessionManager { ); const db = await PlacesUtils.promiseDBConnection(); let data = {}; - let rows = await db.execute("SELECT * FROM zen_workspaces ORDER BY created_at ASC"); + let rows = await db.execute( + "SELECT * FROM zen_workspaces ORDER BY created_at ASC" + ); try { - data.spaces = rows.map((row) => ({ + data.spaces = rows.map(row => ({ uuid: row.getResultByName("uuid"), name: row.getResultByName("name"), icon: row.getResultByName("icon"), @@ -162,11 +173,14 @@ export class nsZenSessionManager { })); } catch (e) { /* ignore errors reading spaces data, as it is not critical and we want to migrate even if we fail to read it */ - console.error("Failed to read spaces data from database during migration", e); + console.error( + "Failed to read spaces data from database during migration", + e + ); } try { rows = await db.execute("SELECT * FROM zen_pins ORDER BY position ASC"); - data.pins = rows.map((row) => ({ + data.pins = rows.map(row => ({ uuid: row.getResultByName("uuid"), title: row.getResultByName("title"), url: row.getResultByName("url"), @@ -178,11 +192,16 @@ export class nsZenSessionManager { parentUuid: row.getResultByName("folder_parent_uuid"), editedTitle: Boolean(row.getResultByName("edited_title")), folderIcon: row.getResultByName("folder_icon"), - isFolderCollapsed: Boolean(row.getResultByName("is_folder_collapsed")), + isFolderCollapsed: Boolean( + row.getResultByName("is_folder_collapsed") + ), })); } catch (e) { /* ignore errors reading pins data, as it is not critical and we want to migrate even if we fail to read it */ - console.error("Failed to read pins data from database during migration", e); + console.error( + "Failed to read pins data from database during migration", + e + ); } try { data.recoveryData = await IOUtils.readJSON( @@ -263,14 +282,19 @@ export class nsZenSessionManager { } this.#sidebar = this._dataFromFile || {}; if (!this.#sidebar.spaces?.length && !this._shouldRunMigration) { - this.log("No spaces data found in session file, running migration", this.#sidebar); + this.log( + "No spaces data found in session file, running migration", + this.#sidebar + ); // If we have no spaces data, we should run migration // to restore them from the database. Note we also do a // check if we already planned to run migration for optimization. this._shouldRunMigration = true; await this.#getDataFromDBForMigration(); } - if (Services.prefs.getBoolPref("zen.session-store.log-tab-entries", false)) { + if ( + Services.prefs.getBoolPref("zen.session-store.log-tab-entries", false) + ) { for (const tab of this.#sidebar.tabs || []) { this.log("Tab entry in session file:", tab); } @@ -285,15 +309,19 @@ export class nsZenSessionManager { if (buildIdChanged) { // If the build ID has changed since the last session, it means the user has updated the app, // so we should not remove the unpinned tabs as they might want to keep them after the update. - this.log("Build ID has changed since last session, not restoring only pinned tabs", { - buildId, - lastBuildId, - }); + this.log( + "Build ID has changed since last session, not restoring only pinned tabs", + { + buildId, + lastBuildId, + } + ); Services.prefs.setStringPref(LAST_BUILD_ID_PREF, buildId); return false; } return ( - Services.prefs.getIntPref("browser.startup.page", 1) !== BROWSER_STARTUP_RESUME_SESSION || + Services.prefs.getIntPref("browser.startup.page", 1) !== + BROWSER_STARTUP_RESUME_SESSION || lazy.PrivateBrowsingUtils.permanentPrivateBrowsing ); } @@ -325,7 +353,7 @@ export class nsZenSessionManager { this.log("Window sync disabled, restoring only pinned tabs"); for (let i = 0; i < initialState.windows.length; i++) { let winData = initialState.windows[i]; - winData.tabs = (winData.tabs || []).filter((tab) => tab.pinned); + winData.tabs = (winData.tabs || []).filter(tab => tab.pinned); } } return initialState; @@ -335,7 +363,7 @@ export class nsZenSessionManager { true ); if (initialState?.windows?.length && !allowRestoreUnsynced) { - initialState.windows = initialState.windows.filter((win) => { + initialState.windows = initialState.windows.filter(win => { if (win.isZenUnsynced) { this.log("Skipping unsynced window during restore"); } @@ -348,7 +376,11 @@ export class nsZenSessionManager { // This would happen on first run after having a single private window // open when quitting the app, for example. let normalWindowsExist = initialState?.windows?.some( - (win) => !win.isPrivate && !win.isPopup && !win.isTaskbarTab && !win.isZenUnsynced + win => + !win.isPrivate && + !win.isPopup && + !win.isTaskbarTab && + !win.isZenUnsynced ); if (!initialState?.windows?.length || !normalWindowsExist) { this.log("No windows found in initial state, creating an empty one"); @@ -376,20 +408,31 @@ export class nsZenSessionManager { } // When we don't have browser.startup.page set to resume session, // we only want to restore the pinned tabs into the new windows. - if (this.#shouldRestoreOnlyPinned && !this.#shouldRestoreFromCrash && this.#sidebar?.tabs) { + if ( + this.#shouldRestoreOnlyPinned && + !this.#shouldRestoreFromCrash && + this.#sidebar?.tabs + ) { this.log("Restoring only pinned tabs into windows"); const sidebar = this.#sidebar; - sidebar.tabs = (sidebar.tabs || []).filter((tab) => tab.pinned); + sidebar.tabs = (sidebar.tabs || []).filter(tab => tab.pinned); this.#sidebar = sidebar; } // Restore all windows with the same sidebar object, this will // guarantee that all tabs, groups, folders and split view data // are properly synced across all windows. if (!this._shouldRunMigration) { - this.log(`Restoring Zen session data into ${initialState.windows?.length || 0} windows`); + this.log( + `Restoring Zen session data into ${initialState.windows?.length || 0} windows` + ); for (let i = 0; i < initialState.windows.length; i++) { let winData = initialState.windows[i]; - if (winData.isZenUnsynced || winData.isPrivate || winData.isPopup || winData.isTaskbarTab) { + if ( + winData.isZenUnsynced || + winData.isPrivate || + winData.isPopup || + winData.isTaskbarTab + ) { continue; } this.#restoreWindowData(winData); @@ -441,7 +484,9 @@ export class nsZenSessionManager { !initialState?.windows?.length && (initialState?.lastSessionState || initialState?.deferredInitialState) ) { - initialState = { ...(initialState.lastSessionState || initialState.deferredInitialState) }; + initialState = { + ...(initialState.lastSessionState || initialState.deferredInitialState), + }; } // There might be cases where there are no windows in the // initial state, for example if the user had 'restore previous @@ -449,7 +494,7 @@ export class nsZenSessionManager { // to restore the last closed normal window. if (!initialState?.windows?.length) { let normalClosedWindow = initialState?._closedWindows?.find( - (win) => !win.isPopup && !win.isTaskbarTab && !win.isPrivate + win => !win.isPopup && !win.isTaskbarTab && !win.isPrivate ); if (normalClosedWindow) { initialState.windows = [Cu.cloneInto(normalClosedWindow, {})]; @@ -466,15 +511,21 @@ export class nsZenSessionManager { } for (const winData of initialState?.windows || []) { winData.spaces = - (winData.spaces?.length ? winData.spaces : this._migrationData?.spaces) || []; + (winData.spaces?.length + ? winData.spaces + : this._migrationData?.spaces) || []; if (winData.tabs) { for (const tabData of winData.tabs) { let storeId = tabData.zenSyncId || tabData.zenPinnedId; - const pinData = this._migrationData?.pins?.find((pin) => pin.uuid === storeId); + const pinData = this._migrationData?.pins?.find( + pin => pin.uuid === storeId + ); // We need to migrate the static label from the pin data as this information // was not stored in the session file before. if (pinData) { - tabData.zenStaticLabel = pinData.editedTitle ? pinData.title : undefined; + tabData.zenStaticLabel = pinData.editedTitle + ? pinData.title + : undefined; } } } @@ -497,8 +548,8 @@ export class nsZenSessionManager { * @param {object} aWindow - The window data object to filter. */ #filterUnpinnedTabs(aWindow) { - aWindow.tabs = aWindow.tabs.filter((tab) => tab.pinned); - aWindow.groups = aWindow.groups?.filter((group) => group.pinned); + aWindow.tabs = aWindow.tabs.filter(tab => tab.pinned); + aWindow.groups = aWindow.groups?.filter(group => group.pinned); } /** @@ -508,7 +559,9 @@ export class nsZenSessionManager { * @returns {boolean} True if the window is saveable, false otherwise. */ #isWindowSaveable(aWinData) { - return !aWinData.isPopup && !aWinData.isTaskbarTab && !aWinData.isZenUnsynced; + return ( + !aWinData.isPopup && !aWinData.isTaskbarTab && !aWinData.isZenUnsynced + ); } /** @@ -521,17 +574,19 @@ export class nsZenSessionManager { */ saveState(state, soon = false) { let windows = state?.windows || []; - windows = windows.filter((win) => this.#isWindowSaveable(win)); + windows = windows.filter(win => this.#isWindowSaveable(win)); if (!windows.length) { // Don't save (or even collect) anything in permanent private // browsing mode. We also don't want to save if there are no windows. return; } const cleanPath = PathUtils.join(this.#backupFolderPath, "clean.jsonlz4"); - IOUtils.copy(this.#storeFilePath, cleanPath, { recursive: true }).catch(() => { - /* ignore errors creating clean backup, as it is not critical and - * we want to save the session even if we fail to create it */ - }); + IOUtils.copy(this.#storeFilePath, cleanPath, { recursive: true }).catch( + () => { + /* ignore errors creating clean backup, as it is not critical and + * we want to save the session even if we fail to create it */ + } + ); this.#collectWindowData(windows); // This would save the data to disk asynchronously or when quitting the app. let sidebar = this.#sidebar; @@ -591,19 +646,24 @@ export class nsZenSessionManager { const todayFilePath = PathUtils.join(backupFolder, todayFileName); const sessionFilePath = this.#file.path; this.log(`Backing up session file to ${todayFileName}`); - await IOUtils.copy(sessionFilePath, todayFilePath, { noOverwrite: false }); + await IOUtils.copy(sessionFilePath, todayFilePath, { + noOverwrite: false, + }); // Now we need to check if we have exceeded the maximum // number of backups allowed, and delete the oldest ones // if needed. let prefix = PathUtils.join(backupFolder, "zen-sessions-"); let files = await IOUtils.getChildren(backupFolder); - files = files.filter((file) => file.startsWith(prefix)).sort(); + files = files.filter(file => file.startsWith(prefix)).sort(); for (let i = 0; i < files.length - lazy.gMaxSessionBackups; i++) { this.log(`Deleting old backup file ${files[i]}`); await IOUtils.remove(files[i]); } } catch (e) { - console.error("ZenSessionManager: Failed to create session file backups", e); + console.error( + "ZenSessionManager: Failed to create session file backups", + e + ); } } @@ -618,7 +678,12 @@ export class nsZenSessionManager { // We only want to save the *last* normal window that is closed. // If its not the last window, we can still update the sidebar object // based on other open windows. - if (aWinData.isPopup || aWinData.isTaskbarTab || aWinData.isZenUnsynced || !isLastWindow) { + if ( + aWinData.isPopup || + aWinData.isTaskbarTab || + aWinData.isZenUnsynced || + !isLastWindow + ) { return; } this.log("Saving closed window session data into Zen session store"); @@ -652,7 +717,7 @@ export class nsZenSessionManager { * @returns {Array} The filtered array of tab data objects. */ #filterUnusedTabs(tabs) { - return tabs.filter((tab) => { + return tabs.filter(tab => { // We need to ignore empty tabs with no group association // as they are not useful to restore. return !(tab.zenIsEmpty && !tab.groupId); @@ -673,13 +738,18 @@ export class nsZenSessionManager { // state when multiple windows are open. Note that if we a tab without // this flag set in any other window, we just add it anyway. for (const tabData of window.tabs || []) { - if (!tabIdRelationMap.has(tabData.zenSyncId) || tabData._zenIsActiveTab) { + if ( + !tabIdRelationMap.has(tabData.zenSyncId) || + tabData._zenIsActiveTab + ) { tabIdRelationMap.set(tabData.zenSyncId, tabData); } } } - sidebarData.tabs = this.#filterUnusedTabs(Array.from(tabIdRelationMap.values())); + sidebarData.tabs = this.#filterUnusedTabs( + Array.from(tabIdRelationMap.values()) + ); let firstWindow = aStateWindows[0]; sidebarData.folders = firstWindow.folders; @@ -704,10 +774,10 @@ export class nsZenSessionManager { // tabs in the window data and keep the pinned tabs from the window data, // as they should be the same as the ones in the sidebar. if (lazy.gSyncOnlyPinnedTabs) { - let pinnedTabs = (sidebar.tabs || []).filter((tab) => tab.pinned); + let pinnedTabs = (sidebar.tabs || []).filter(tab => tab.pinned); let unpinedWindowTabs = []; if (!this.#shouldRestoreOnlyPinned) { - unpinedWindowTabs = (aWindowData.tabs || []).filter((tab) => !tab.pinned); + unpinedWindowTabs = (aWindowData.tabs || []).filter(tab => !tab.pinned); } aWindowData.tabs = [...pinnedTabs, ...unpinedWindowTabs]; @@ -719,7 +789,10 @@ export class nsZenSessionManager { ]; // Same thing with groups, we restore all the groups from the sidebar, if they don't have any // existing tabs in the window, they should be a no-op. - aWindowData.groups = [...(sidebar.groups || []), ...(aWindowData.groups || [])]; + aWindowData.groups = [ + ...(sidebar.groups || []), + ...(aWindowData.groups || []), + ]; } else { aWindowData.tabs = sidebar.tabs || []; aWindowData.splitViewData = sidebar.splitViewData; @@ -755,11 +828,16 @@ export class nsZenSessionManager { this.log("Restoring new window with Zen session data"); const state = lazy.SessionStore.getCurrentState(true); const windows = (state.windows || []).filter( - (win) => !win.isPrivate && !win.isPopup && !win.isTaskbarTab && !win.isZenUnsynced + win => + !win.isPrivate && + !win.isPopup && + !win.isTaskbarTab && + !win.isZenUnsynced ); let windowToClone = windows[0] || {}; let newWindow = Cu.cloneInto(windowToClone, {}); - let shouldRestoreOnlyPinned = !lazy.gWindowSyncEnabled || lazy.gSyncOnlyPinnedTabs; + let shouldRestoreOnlyPinned = + !lazy.gWindowSyncEnabled || lazy.gSyncOnlyPinnedTabs; if (windows.length < 2) { // We only want to restore the sidebar object if we found // only one normal window to clone from (which is the one diff --git a/src/zen/sessionstore/ZenWindowSync.sys.mjs b/src/zen/sessionstore/ZenWindowSync.sys.mjs index bdd249a7b..22a53199f 100644 --- a/src/zen/sessionstore/ZenWindowSync.sys.mjs +++ b/src/zen/sessionstore/ZenWindowSync.sys.mjs @@ -19,16 +19,29 @@ ChromeUtils.defineESModuleGetters(lazy, { RunState: "resource:///modules/sessionstore/RunState.sys.mjs", }); -XPCOMUtils.defineLazyPreferenceGetter(lazy, "gWindowSyncEnabled", "zen.window-sync.enabled", true); +XPCOMUtils.defineLazyPreferenceGetter( + lazy, + "gWindowSyncEnabled", + "zen.window-sync.enabled", + true +); XPCOMUtils.defineLazyPreferenceGetter( lazy, "gSyncOnlyPinnedTabs", "zen.window-sync.sync-only-pinned-tabs", true ); -XPCOMUtils.defineLazyPreferenceGetter(lazy, "gShouldLog", "zen.window-sync.log", true); +XPCOMUtils.defineLazyPreferenceGetter( + lazy, + "gShouldLog", + "zen.window-sync.log", + true +); -const OBSERVING = ["browser-window-before-show", "sessionstore-windows-restored"]; +const OBSERVING = [ + "browser-window-before-show", + "sessionstore-windows-restored", +]; const INSTANT_EVENTS = ["SSWindowClosing", "TabSelect", "focus"]; const UNSYNCED_WINDOW_EVENTS = ["TabOpen"]; const EVENTS = [ @@ -131,7 +144,11 @@ class nsZenWindowSync { #browserWindows = { *[Symbol.iterator]() { for (let window of lazy.BrowserWindowTracker.orderedWindows) { - if (window.__SSi && !window.closed && !window.gZenWorkspaces?.privateWindowOrDisabled) { + if ( + window.__SSi && + !window.closed && + !window.gZenWorkspaces?.privateWindowOrDisabled + ) { yield window; } } @@ -223,8 +240,13 @@ class nsZenWindowSync { aWindow.arguments.length > 1 && !!this.#browserWindowsList.length)) ) { - this.log("Not syncing new window due to unsynced argument or existing synced windows"); - aWindow.document.documentElement.setAttribute("zen-unsynced-window", "true"); + this.log( + "Not syncing new window due to unsynced argument or existing synced windows" + ); + aWindow.document.documentElement.setAttribute( + "zen-unsynced-window", + "true" + ); for (let eventName of UNSYNCED_WINDOW_EVENTS) { aWindow.addEventListener(eventName, this, true); } @@ -244,7 +266,7 @@ class nsZenWindowSync { // assign one and sync it to other windows. // This should only happen really when updating from an older version // that didn't have this feature. - await this.#runOnAllWindowsAsync(null, async (aWindow) => { + await this.#runOnAllWindowsAsync(null, async aWindow => { const { gZenWorkspaces } = aWindow; this.#onWindowBeforeShow(aWindow); await gZenWorkspaces.promiseInitialized; @@ -255,7 +277,10 @@ class nsZenWindowSync { if (tab.pinned && !tab._zenPinnedInitialState) { await this.setPinnedTabState(tab); } - if (!lazy.gWindowSyncEnabled || (lazy.gSyncOnlyPinnedTabs && !tab.pinned)) { + if ( + !lazy.gWindowSyncEnabled || + (lazy.gSyncOnlyPinnedTabs && !tab.pinned) + ) { tab._zenContentsVisible = true; } } @@ -331,14 +356,20 @@ class nsZenWindowSync { ) { return; } - if (!lazy.gWindowSyncEnabled && !UNSYNCED_WINDOW_EVENTS.includes(aEvent.type)) { + if ( + !lazy.gWindowSyncEnabled && + !UNSYNCED_WINDOW_EVENTS.includes(aEvent.type) + ) { return; } if (INSTANT_EVENTS.includes(aEvent.type)) { this.#handleNextEventInternal(aEvent); return; } - if (this.#eventHandlingContext.window && this.#eventHandlingContext.window !== window) { + if ( + this.#eventHandlingContext.window && + this.#eventHandlingContext.window !== window + ) { // We're already handling an event for another window. // To avoid re-entrancy issues, we skip this event. return; @@ -347,7 +378,7 @@ class nsZenWindowSync { this.#eventHandlingContext.eventCount++; this.#eventHandlingContext.window = window; let resolveNewPromise; - this.#eventHandlingContext.lastHandlerPromise = new Promise((resolve) => { + this.#eventHandlingContext.lastHandlerPromise = new Promise(resolve => { resolveNewPromise = resolve; }); // Wait for the last handler to finish before processing the next event. @@ -433,7 +464,10 @@ class nsZenWindowSync { */ #maybeSyncAttributeChange(aOriginalItem, aTargetItem, aAttributeName) { if (aOriginalItem.hasAttribute(aAttributeName)) { - aTargetItem.setAttribute(aAttributeName, aOriginalItem.getAttribute(aAttributeName)); + aTargetItem.setAttribute( + aAttributeName, + aOriginalItem.getAttribute(aAttributeName) + ); } else { aTargetItem.removeAttribute(aAttributeName); } @@ -475,12 +509,24 @@ class nsZenWindowSync { } } if (flags & SYNC_FLAG_MOVE && !aTargetItem.hasAttribute("zen-empty-tab")) { - this.#maybeSyncAttributeChange(aOriginalItem, aTargetItem, "zen-workspace-id"); + this.#maybeSyncAttributeChange( + aOriginalItem, + aTargetItem, + "zen-workspace-id" + ); this.#syncItemPosition(aOriginalItem, aTargetItem, aWindow); } if (aOriginalItem.hasAttribute("zen-live-folder-item-id")) { - this.#maybeSyncAttributeChange(aOriginalItem, aTargetItem, "zen-live-folder-item-id"); - this.#maybeSyncAttributeChange(aOriginalItem, aTargetItem, "zen-show-sublabel"); + this.#maybeSyncAttributeChange( + aOriginalItem, + aTargetItem, + "zen-live-folder-item-id" + ); + this.#maybeSyncAttributeChange( + aOriginalItem, + aTargetItem, + "zen-show-sublabel" + ); this.#syncTabSubtitle(aWindow, aOriginalItem, aTargetItem); } else if (aTargetItem.hasAttribute("zen-live-folder-item-id")) { aTargetItem.removeAttribute("zen-live-folder-item-id"); @@ -527,7 +573,10 @@ class nsZenWindowSync { if (originalIsEssential) { gZenPinnedTabManager.addToEssentials(aTargetItem); } else { - gZenPinnedTabManager.removeEssentials(aTargetItem, /* unpin= */ !targetIsPinned); + gZenPinnedTabManager.removeEssentials( + aTargetItem, + /* unpin= */ !targetIsPinned + ); } } else if (originalIsPinned !== targetIsPinned) { if (originalIsPinned) { @@ -556,7 +605,12 @@ class nsZenWindowSync { * @param {boolean} options.isEssential - Indicates if the item is essential. * @param {boolean} options.isPinned - Indicates if the item is pinned. */ - #moveItemToMatchOriginal(aOriginalItem, aTargetItem, aWindow, { isEssential, isPinned }) { + #moveItemToMatchOriginal( + aOriginalItem, + aTargetItem, + aWindow, + { isEssential, isPinned } + ) { const { gBrowser, gZenWorkspaces } = aWindow; let originalSibling = aOriginalItem.previousElementSibling; if (originalSibling?.classList.contains("space-fake-collapsible-start")) { @@ -564,9 +618,13 @@ class nsZenWindowSync { originalSibling = originalSibling.previousElementSibling; } let isFirstTab = true; - if (gBrowser.isTabGroup(originalSibling) || gBrowser.isTab(originalSibling)) { + if ( + gBrowser.isTabGroup(originalSibling) || + gBrowser.isTab(originalSibling) + ) { isFirstTab = - !originalSibling.hasAttribute("id") || originalSibling.hasAttribute("zen-empty-tab"); + !originalSibling.hasAttribute("id") || + originalSibling.hasAttribute("zen-empty-tab"); } gBrowser.zenHandleTabMove(aTargetItem, () => { @@ -574,7 +632,10 @@ class nsZenWindowSync { let container; const parentGroup = aOriginalItem.group; if (parentGroup?.hasAttribute("id")) { - container = this.getItemFromWindow(aWindow, parentGroup.getAttribute("id")); + container = this.getItemFromWindow( + aWindow, + parentGroup.getAttribute("id") + ); if (container) { if (container?.tabs?.length) { // First tab in folders is the empty tab placeholder. @@ -622,8 +683,13 @@ class nsZenWindowSync { */ #syncItemForAllWindows(aItem, flags = 0) { const window = aItem.ownerGlobal; - this.#runOnAllWindows(window, (win) => { - this.#syncItemWithOriginal(aItem, this.getItemFromWindow(win, aItem.id), win, flags); + this.#runOnAllWindows(window, win => { + this.#syncItemWithOriginal( + aItem, + this.getItemFromWindow(win, aItem.id), + win, + flags + ); }); } @@ -678,7 +744,12 @@ class nsZenWindowSync { // Restore the listeners for the swapped in tab. if (!onClose && filter) { - tabListener = new otherTabBrowser.zenTabProgressListener(aTab, otherBrowser, true, false); + tabListener = new otherTabBrowser.zenTabProgressListener( + aTab, + otherBrowser, + true, + false + ); otherTabBrowser._tabListeners.set(aTab, tabListener); const notifyAll = Ci.nsIWebProgress.NOTIFY_ALL; @@ -702,7 +773,10 @@ class nsZenWindowSync { return true; } // Can't swap between chrome and content processes. - if (aOurTab.linkedBrowser.isRemoteBrowser != aOtherTab.linkedBrowser.isRemoteBrowser) { + if ( + aOurTab.linkedBrowser.isRemoteBrowser != + aOtherTab.linkedBrowser.isRemoteBrowser + ) { return false; } return true; @@ -717,7 +791,11 @@ class nsZenWindowSync { * @param {boolean} options.focus - Indicates if the tab should be focused after the swap. * @param {boolean} options.onClose - Indicates if the swap is done during a tab close operation. */ - #swapBrowserDocShellsInner(aOurTab, aOtherTab, { focus = true, onClose = false } = {}) { + #swapBrowserDocShellsInner( + aOurTab, + aOtherTab, + { focus = true, onClose = false } = {} + ) { // Can't swap between chrome and content processes. if (!this.#canSwapBrowsers(aOurTab, aOtherTab)) { this.log( @@ -732,7 +810,11 @@ class nsZenWindowSync { aOtherTab, () => { this.log(`Swapping docshells between windows for tab ${aOurTab.id}`); - aOurTab.ownerGlobal.gBrowser.swapBrowsersAndCloseOther(aOurTab, aOtherTab, false); + aOurTab.ownerGlobal.gBrowser.swapBrowsersAndCloseOther( + aOurTab, + aOtherTab, + false + ); // Swap permanent keys if (!onClose) { @@ -764,16 +846,25 @@ class nsZenWindowSync { (aOtherTab.linkedBrowser?.currentURI.spec !== "about:blank" || aOtherTab.hasAttribute("busy")) ) { - this.log(`Loading about:blank in our tab ${aOtherTab.id} before swap`); + this.log( + `Loading about:blank in our tab ${aOtherTab.id} before swap` + ); aOtherTab.linkedBrowser.loadURI(Services.io.newURI("about:blank"), { - triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), + triggeringPrincipal: + Services.scriptSecurityManager.getSystemPrincipal(), loadFlags: Ci.nsIWebNavigation.LOAD_FLAGS_REPLACE_HISTORY, }); } }, onClose ); - const kAttributesToRemove = ["muted", "soundplaying", "sharing", "pictureinpicture", "busy"]; + const kAttributesToRemove = [ + "muted", + "soundplaying", + "sharing", + "pictureinpicture", + "busy", + ]; // swapBrowsersAndCloseOther already takes care of transferring attributes like 'muted', // but we need to manually remove some attributes from the other tab. for (let attr of kAttributesToRemove) { @@ -799,16 +890,17 @@ class nsZenWindowSync { const ourBrowser = aOurTab.linkedBrowser; const otherBrowser = aOtherTab.linkedBrowser; // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve) => { + return new Promise(async resolve => { if (callback) { - const browserBlob = await aOtherTab.ownerGlobal.PageThumbs.captureToBlob( - aOtherTab.linkedBrowser, - { - fullScale: true, - fullViewport: true, - backgroundColor: "transparent", - } - ); + const browserBlob = + await aOtherTab.ownerGlobal.PageThumbs.captureToBlob( + aOtherTab.linkedBrowser, + { + fullScale: true, + fullViewport: true, + backgroundColor: "transparent", + } + ); let mySrc = await new Promise((r, re) => { const reader = new FileReader(); @@ -851,7 +943,7 @@ class nsZenWindowSync { const img = doc.createElement("img"); img.className = "zen-pseudo-browser-image"; img.src = aSrc; - let promise = new Promise((resolve) => { + let promise = new Promise(resolve => { if (img.complete) { resolve(); return; @@ -874,9 +966,11 @@ class nsZenWindowSync { * @param {object} aBrowser - The browser element to remove the pseudo image for. */ #maybeRemovePseudoImageForBrowser(aBrowser) { - const elements = aBrowser.parentNode?.querySelectorAll(".zen-pseudo-browser-image"); + const elements = aBrowser.parentNode?.querySelectorAll( + ".zen-pseudo-browser-image" + ); if (elements) { - elements.forEach((element) => element.remove()); + elements.forEach(element => element.remove()); } } @@ -889,8 +983,12 @@ class nsZenWindowSync { * @param {Function} filter - A function to filter the tabs. * @returns {object | null} The active tab from other windows if found, otherwise null. */ - #getActiveTabFromOtherWindows(aWindow, aTabId, filter = (tab) => tab?._zenContentsVisible) { - return this.#runOnAllWindows(aWindow, (win) => { + #getActiveTabFromOtherWindows( + aWindow, + aTabId, + filter = tab => tab?._zenContentsVisible + ) { + return this.#runOnAllWindows(aWindow, win => { const tab = this.getItemFromWindow(win, aTabId); if (filter(tab)) { return tab; @@ -905,13 +1003,16 @@ class nsZenWindowSync { * @param {Window} aWindow - The window to move active tabs from. */ #moveAllActiveTabsToOtherWindowsForClose(aWindow) { - const mostRecentWindow = this.#browserWindowsList.find((win) => win !== aWindow); + const mostRecentWindow = this.#browserWindowsList.find( + win => win !== aWindow + ); if (!mostRecentWindow || !aWindow.gZenWorkspaces) { return; } - const activeTabsOnClosedWindow = aWindow.gZenWorkspaces.allStoredTabs.filter( - (tab) => tab._zenContentsVisible - ); + const activeTabsOnClosedWindow = + aWindow.gZenWorkspaces.allStoredTabs.filter( + tab => tab._zenContentsVisible + ); for (let tab of activeTabsOnClosedWindow) { const targetTab = this.getItemFromWindow(mostRecentWindow, tab.id); if (targetTab) { @@ -925,7 +1026,10 @@ class nsZenWindowSync { focus: targetTab.selected, onClose: true, }); - this.#swapedTabsEntriesForWC.set(tab.linkedBrowser.permanentKey, targetTab); + this.#swapedTabsEntriesForWC.set( + tab.linkedBrowser.permanentKey, + targetTab + ); // We can animate later, whats important is to always stay on the same // process and avoid async operations here to avoid the closed window // being unloaded before the swap is done. @@ -942,16 +1046,24 @@ class nsZenWindowSync { */ async #onTabSwitchOrWindowFocus(aWindow, aPreviousTab = null) { let activeBrowsers = aWindow.gBrowser.selectedBrowsers; - let activeTabs = activeBrowsers.map((browser) => aWindow.gBrowser.getTabForBrowser(browser)); + let activeTabs = activeBrowsers.map(browser => + aWindow.gBrowser.getTabForBrowser(browser) + ); // Ignore previous tabs that are still "active". These scenarios could happen for example, // when selecting on a split view tab that was already active. - if (aPreviousTab?._zenContentsVisible && !activeTabs.includes(aPreviousTab)) { + if ( + aPreviousTab?._zenContentsVisible && + !activeTabs.includes(aPreviousTab) + ) { let tabsToSwap = aPreviousTab.group?.hasAttribute("split-view-group") ? aPreviousTab.group.tabs : [aPreviousTab]; for (const tab of tabsToSwap) { - const otherTabToShow = this.#getActiveTabFromOtherWindows(aWindow, tab.id, (t) => - t?.splitView ? t.group.tabs.some((st) => st.selected) : t?.selected + const otherTabToShow = this.#getActiveTabFromOtherWindows( + aWindow, + tab.id, + t => + t?.splitView ? t.group.tabs.some(st => st.selected) : t?.selected ); if (otherTabToShow) { otherTabToShow._zenContentsVisible = true; @@ -962,14 +1074,22 @@ class nsZenWindowSync { } let promises = []; for (const selectedTab of activeTabs) { - if (selectedTab._zenContentsVisible || selectedTab.hasAttribute("zen-empty-tab")) { + if ( + selectedTab._zenContentsVisible || + selectedTab.hasAttribute("zen-empty-tab") + ) { continue; } - const otherSelectedTab = this.#getActiveTabFromOtherWindows(aWindow, selectedTab.id); + const otherSelectedTab = this.#getActiveTabFromOtherWindows( + aWindow, + selectedTab.id + ); selectedTab._zenContentsVisible = true; if (otherSelectedTab) { delete otherSelectedTab._zenContentsVisible; - promises.push(this.#swapBrowserDocShellsAsync(selectedTab, otherSelectedTab)); + promises.push( + this.#swapBrowserDocShellsAsync(selectedTab, otherSelectedTab) + ); } } await Promise.all(promises); @@ -1000,7 +1120,9 @@ class nsZenWindowSync { if (aTab.linkedBrowser) { cachedState = lazy.TabStateCache.get(aTab.linkedBrowser.permanentKey); } - return cachedState?.history?.entries ? Cu.cloneInto(cachedState.history, {}) : { entries: [] }; + return cachedState?.history?.entries + ? Cu.cloneInto(cachedState.history, {}) + : { entries: [] }; } /** @@ -1028,7 +1150,8 @@ class nsZenWindowSync { return this.#maybeFlushTabState(aTab).finally(() => { this.log(`Setting pinned initial state for tab ${aTab.id}`); let { entries, index } = this.#getTabEntriesFromCache(aTab); - let image = aTab.getAttribute("image") || aTab.ownerGlobal.gBrowser.getIcon(aTab); + let image = + aTab.getAttribute("image") || aTab.ownerGlobal.gBrowser.getIcon(aTab); let activeIndex = typeof index === "number" ? index : entries.length; // Tab state cache gives us the index starting from 1 instead of 0. activeIndex--; @@ -1038,7 +1161,7 @@ class nsZenWindowSync { entry: (entries[activeIndex] || entries[0]) ?? null, image, }; - this.#runOnAllWindows(null, (win) => { + this.#runOnAllWindows(null, win => { const targetTab = this.getItemFromWindow(win, aTab.id); if (targetTab) { targetTab._zenPinnedInitialState = initialState; @@ -1053,7 +1176,7 @@ class nsZenWindowSync { * @param {Array} aWorkspaces - The workspaces to propagate. */ propagateWorkspacesToAllWindows(aWorkspaces) { - this.#runOnAllWindows(null, (win) => { + this.#runOnAllWindows(null, win => { win.gZenWorkspaces.propagateWorkspaces(aWorkspaces); }); } @@ -1067,7 +1190,7 @@ class nsZenWindowSync { */ moveTabsToSyncedWorkspace(aWindow, aWorkspaceId) { const tabsToMove = aWindow.gZenWorkspaces.allStoredTabs.filter( - (tab) => !tab.hasAttribute("zen-empty-tab") + tab => !tab.hasAttribute("zen-empty-tab") ); const selectedTab = aWindow.gBrowser.selectedTab; let win = this.firstSyncedWindow; @@ -1093,7 +1216,11 @@ class nsZenWindowSync { }; if (!win) { this.log("No synced window found, creating a new one"); - win = aWindow.gBrowser.replaceTabWithWindow(selectedTab, {}, /* zenForceSync = */ true); + win = aWindow.gBrowser.replaceTabWithWindow( + selectedTab, + {}, + /* zenForceSync = */ true + ); win.gZenWorkspaces.promiseInitialized.then(() => { moveAllTabsToWindow(); }); @@ -1111,8 +1238,9 @@ class nsZenWindowSync { if (!aTab?._zenPinnedInitialState || aTab._zenPinnedInitialState.image) { return; } - let image = aTab.getAttribute("image") || aTab.ownerGlobal.gBrowser.getIcon(aTab); - this.#runOnAllWindows(null, (win) => { + let image = + aTab.getAttribute("image") || aTab.ownerGlobal.gBrowser.getIcon(aTab); + this.#runOnAllWindows(null, win => { const targetTab = this.getItemFromWindow(win, aTab.id); if (targetTab) { targetTab._zenPinnedInitialState.image = image; @@ -1138,7 +1266,7 @@ class nsZenWindowSync { if (isUnsyncedWindow || !lazy.gWindowSyncEnabled) { return; } - this.#runOnAllWindows(window, (win) => { + this.#runOnAllWindows(window, win => { const newTab = win.gBrowser.addTrustedTab("about:blank", { animate: true, createLazyBrowser: true, @@ -1180,7 +1308,7 @@ class nsZenWindowSync { if (lazy.gSyncOnlyPinnedTabs && !tab.pinned) { return; } - this.#runOnAllWindows(window, (win) => { + this.#runOnAllWindows(window, win => { const targetTab = this.getItemFromWindow(win, tab.id); if (targetTab) { targetTab.ownerGlobal.gBrowser.hideTab(targetTab); @@ -1194,7 +1322,7 @@ class nsZenWindowSync { if (lazy.gSyncOnlyPinnedTabs && !tab.pinned) { return; } - this.#runOnAllWindows(window, (win) => { + this.#runOnAllWindows(window, win => { const targetTab = this.getItemFromWindow(win, tab.id); if (targetTab) { targetTab.ownerGlobal.gBrowser.showTab(targetTab); @@ -1228,7 +1356,7 @@ class nsZenWindowSync { on_TabUnpinned(aEvent) { const tab = aEvent.target; - this.#runOnAllWindows(null, (win) => { + this.#runOnAllWindows(null, win => { const targetTab = this.getItemFromWindow(win, tab.id); if (targetTab) { delete targetTab._zenPinnedInitialState; @@ -1252,7 +1380,7 @@ class nsZenWindowSync { on_TabClose(aEvent) { const tab = aEvent.target; const window = tab.ownerGlobal; - this.#runOnAllWindows(window, (win) => { + this.#runOnAllWindows(window, win => { const targetTab = this.getItemFromWindow(win, tab.id); if (targetTab) { win.gBrowser.removeTab(targetTab, { animate: true }); @@ -1278,7 +1406,7 @@ class nsZenWindowSync { this.#lastFocusedWindow = new WeakRef(window); this.#lastSelectedTab = new WeakRef(window.gBrowser.selectedTab); // eslint-disable-next-line no-async-promise-executor - this.#docShellSwitchPromise = new Promise(async (resolve) => { + this.#docShellSwitchPromise = new Promise(async resolve => { await promise; await this.#onTabSwitchOrWindowFocus(window); resolve(); @@ -1294,7 +1422,7 @@ class nsZenWindowSync { const previousTab = aEvent.detail.previousTab; let promise = this.#docShellSwitchPromise; // eslint-disable-next-line no-async-promise-executor - this.#docShellSwitchPromise = new Promise(async (resolve) => { + this.#docShellSwitchPromise = new Promise(async resolve => { await promise; await this.#onTabSwitchOrWindowFocus(tab.ownerGlobal, previousTab); resolve(); @@ -1332,7 +1460,9 @@ class nsZenWindowSync { // flush the tab state, the title might not be correct. if (activePageData && win?.gBrowser) { win.gBrowser.setInitialTabTitle(tab, activePageData.title, { - isContentTitle: activePageData.title && activePageData.title != activePageData.url, + isContentTitle: + activePageData.title && + activePageData.title != activePageData.url, }); } } catch (e) { @@ -1359,7 +1489,7 @@ class nsZenWindowSync { return; // Split view groups are synced via ZenSplitViewTabsSplit event. } // Tab groups already have an ID upon creation. - this.#runOnAllWindows(window, (win) => { + this.#runOnAllWindows(window, win => { // Check if a group with this ID already exists in the target window. const existingGroup = this.getItemFromWindow(win, tabGroup.id); if (existingGroup) { @@ -1386,7 +1516,7 @@ class nsZenWindowSync { on_TabGroupRemoved(aEvent) { const tabGroup = aEvent.target; const window = tabGroup.ownerGlobal; - this.#runOnAllWindows(window, (win) => { + this.#runOnAllWindows(window, win => { const targetGroup = this.getItemFromWindow(win, tabGroup.id); if (targetGroup) { if (targetGroup.isZenFolder) { @@ -1403,7 +1533,10 @@ class nsZenWindowSync { } on_TabGroupUpdate(aEvent) { - return this.#delegateGenericSyncEvent(aEvent, SYNC_FLAG_ICON | SYNC_FLAG_LABEL); + return this.#delegateGenericSyncEvent( + aEvent, + SYNC_FLAG_ICON | SYNC_FLAG_LABEL + ); } on_TabUngrouped() { @@ -1417,7 +1550,7 @@ class nsZenWindowSync { on_ZenTabRemovedFromSplit(aEvent) { const tab = aEvent.target; const window = tab.ownerGlobal; - this.#runOnAllWindows(window, (win) => { + this.#runOnAllWindows(window, win => { const targetTab = this.getItemFromWindow(win, tab.id); if (targetTab && win.gZenViewSplitter) { win.gZenViewSplitter.removeTabFromGroup(targetTab); @@ -1429,23 +1562,33 @@ class nsZenWindowSync { const tabGroup = aEvent.target; const window = tabGroup.ownerGlobal; const tabs = tabGroup.tabs; - this.#runOnAllWindows(window, (win) => { + this.#runOnAllWindows(window, win => { const otherWindowTabs = tabs - .map((tab) => this.getItemFromWindow(win, tab.id)) + .map(tab => this.getItemFromWindow(win, tab.id)) .filter(Boolean); if (otherWindowTabs.length && win.gZenViewSplitter) { - const group = win.gZenViewSplitter.splitTabs(otherWindowTabs, undefined, -1, { - groupFetchId: tabGroup.id, - }); + const group = win.gZenViewSplitter.splitTabs( + otherWindowTabs, + undefined, + -1, + { + groupFetchId: tabGroup.id, + } + ); if (group) { let otherTabGroup = group.tabs[0].group; otherTabGroup.id = tabGroup.id; - this.#syncItemWithOriginal(aEvent.target, otherTabGroup, win, SYNC_FLAG_MOVE); + this.#syncItemWithOriginal( + aEvent.target, + otherTabGroup, + win, + SYNC_FLAG_MOVE + ); } } }); - return new Promise((resolve) => { + return new Promise(resolve => { lazy.setTimeout(() => { this.#onTabSwitchOrWindowFocus(window, null).finally(resolve); }, 0); diff --git a/src/zen/split-view/ZenViewSplitter.mjs b/src/zen/split-view/ZenViewSplitter.mjs index d1cd28fef..e6a7206ce 100644 --- a/src/zen/split-view/ZenViewSplitter.mjs +++ b/src/zen/split-view/ZenViewSplitter.mjs @@ -51,7 +51,7 @@ class nsSplitNode extends nsSplitLeafNode { set children(children) { if (children) { - children.forEach((c) => (c.parent = this)); + children.forEach(c => (c.parent = this)); } this._children = children; } @@ -111,7 +111,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { ); window.addEventListener("TabClose", this.handleTabClose.bind(this)); - window.addEventListener("TabBrowserDiscarded", this.handleTabBrowserDiscarded.bind(this)); + window.addEventListener( + "TabBrowserDiscarded", + this.handleTabBrowserDiscarded.bind(this) + ); window.addEventListener("TabSelect", this.onTabSelect.bind(this)); this.initializeContextMenu(); this.insertIntoContextMenu(); @@ -127,7 +130,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { // Add drag over listener to the browser view if (Services.prefs.getBoolPref("zen.splitView.enable-tab-drop")) { const tabBox = document.getElementById("tabbrowser-tabbox"); - tabBox.addEventListener("dragover", this.onBrowserDragOverToSplit.bind(this)); + tabBox.addEventListener( + "dragover", + this.onBrowserDragOverToSplit.bind(this) + ); this.onBrowserDragEndToSplit = this.onBrowserDragEndToSplit.bind(this); } } @@ -151,7 +157,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { if (tab === this._lastOpenedTab) { this._lastOpenedTab = null; } - const groupIndex = this._data.findIndex((group) => group.tabs.includes(tab)); + const groupIndex = this._data.findIndex(group => group.tabs.includes(tab)); if (groupIndex < 0) { return; } @@ -206,7 +212,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { { forUnsplit = false, dontRebuildGrid = false, changeTab = true } = {} ) { if (typeof groupIndex === "undefined") { - groupIndex = this._data.findIndex((group) => group.tabs.includes(tab)); + groupIndex = this._data.findIndex(group => group.tabs.includes(tab)); } // If groupIndex === -1, so `this._data.findIndex` couldn't find the split group if (groupIndex < 0) { @@ -232,7 +238,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { this.removeGroup(groupIndex); if (changeTab) { gBrowser.selectedTab = remainingTabs[remainingTabs.length - 1]; - document.getElementById("cmd_zenNewEmptySplit").removeAttribute("disabled"); + document + .getElementById("cmd_zenNewEmptySplit") + .removeAttribute("disabled"); } } else { const node = this.getSplitNodeFromTab(tab); @@ -272,10 +280,22 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { const quarterHeight = height / 4; const edges = [ - { side: "left", dist: clientX - panelsRect.left, threshold: quarterWidth }, - { side: "right", dist: panelsRect.right - clientX, threshold: quarterWidth }, + { + side: "left", + dist: clientX - panelsRect.left, + threshold: quarterWidth, + }, + { + side: "right", + dist: panelsRect.right - clientX, + threshold: quarterWidth, + }, { side: "top", dist: clientY - panelsRect.top, threshold: quarterHeight }, - { side: "bottom", dist: panelsRect.bottom - clientY, threshold: quarterHeight }, + { + side: "bottom", + dist: panelsRect.bottom - clientY, + threshold: quarterHeight, + }, ]; let closestEdge = null; @@ -309,7 +329,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { ) { return; } - gBrowser.tabContainer.tabDragAndDrop.finishMoveTogetherSelectedTabs(draggedTab); + gBrowser.tabContainer.tabDragAndDrop.finishMoveTogetherSelectedTabs( + draggedTab + ); } else { return; } @@ -326,7 +348,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { if (!draggedTab || this._canDrop || this._hasAnimated || this.fakeBrowser) { return; } - if (draggedTab.splitView || draggedTab.hasAttribute("zen-live-folder-item-id")) { + if ( + draggedTab.splitView || + draggedTab.hasAttribute("zen-live-folder-item-id") + ) { return; } const currentView = this._data[this._lastOpenedTab.splitViewValue]; @@ -349,19 +374,18 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { return; } // first quarter or last quarter of the screen, but not the middle - if ( - !( - event.clientX < panelsRect.left + panelsWidth / 4 || - event.clientX > panelsRect.left + (panelsWidth / 4) * 3 || - event.clientY < panelsRect.top + panelsHeight / 4 || - event.clientY > panelsRect.top + (panelsHeight / 4) * 3 - ) - ) { + if (!( + event.clientX < panelsRect.left + panelsWidth / 4 || + event.clientX > panelsRect.left + (panelsWidth / 4) * 3 || + event.clientY < panelsRect.top + panelsHeight / 4 || + event.clientY > panelsRect.top + (panelsHeight / 4) * 3 + )) { return; } dt.mozCursor = "default"; if (!this._dndElement) { - const originalDNDArgs = gBrowser.tabContainer.tabDragAndDrop.originalDragImageArgs; + const originalDNDArgs = + gBrowser.tabContainer.tabDragAndDrop.originalDragImageArgs; requestAnimationFrame(() => { dt.updateDragImage( this.#getDragImageForSplit(draggedTab), @@ -397,7 +421,8 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { if (!browser) { continue; } - const { width: browserWidth, height: browserHeight } = browser.getBoundingClientRect(); + const { width: browserWidth, height: browserHeight } = + browser.getBoundingClientRect(); // Only apply it to the left side because if we add it to the right side, // we wont be able to move the element to the left. // FIXME: This is a workaround, we should find a better way to do this @@ -411,7 +436,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { } } this.fakeBrowser = document.createXULElement("vbox"); - window.addEventListener("dragend", this.onBrowserDragEndToSplit, { once: true }); + window.addEventListener("dragend", this.onBrowserDragEndToSplit, { + once: true, + }); const padding = ZenThemeModifier.elementSeparation; this.fakeBrowser.setAttribute("flex", "1"); this.fakeBrowser.id = "zen-split-view-fake-browser"; @@ -479,7 +506,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { .closest(".browserSidebarContainer") .classList.remove("deck-selected"); } - this.fakeBrowser.addEventListener("dragleave", this.onBrowserDragEndToSplit); + this.fakeBrowser.addEventListener( + "dragleave", + this.onBrowserDragEndToSplit + ); this._canDrop = true; }); } @@ -490,7 +520,8 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { return; } const panelsRect = gBrowser.tabbox.getBoundingClientRect(); - const fakeBrowserRect = this.fakeBrowser && this.fakeBrowser.getBoundingClientRect(); + const fakeBrowserRect = + this.fakeBrowser && this.fakeBrowser.getBoundingClientRect(); if ( ((fakeBrowserRect && event.clientX > fakeBrowserRect.left && @@ -595,7 +626,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { parent.children.splice(childIndex, 1); if (parent.children.length !== 1) { const otherNodeIncrease = 100 / (100 - toRemove.sizeInParent); - parent.children.forEach((c) => (c.sizeInParent *= otherNodeIncrease)); + parent.children.forEach(c => (c.sizeInParent *= otherNodeIncrease)); return parent; } // node that is not a leaf cannot have less than 2 children, this makes for better resizing @@ -609,7 +640,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { parent.parent.children[idx] = leftOverChild; } else { // node cannot have same direction as it's parent - leftOverChild.children.forEach((c) => { + leftOverChild.children.forEach(c => { c.sizeInParent *= leftOverChild.sizeInParent / 100; c.parent = parent.parent; }); @@ -619,7 +650,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { this._removeNodeSplitters(parent, false); return parent.parent; } - const viewData = Object.values(this._data).find((s) => s.layoutTree === parent); + const viewData = Object.values(this._data).find( + s => s.layoutTree === parent + ); viewData.layoutTree = leftOverChild; leftOverChild.positionToRoot = null; leftOverChild.parent = null; @@ -632,13 +665,13 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { * @private */ _removeNodeSplitters(node, recursive) { - this.getSplitters(node)?.forEach((s) => s.remove()); + this.getSplitters(node)?.forEach(s => s.remove()); this._splitNodeToSplitters.delete(node); if (!recursive) { return; } if (node && node.children) { - node.children.forEach((c) => this._removeNodeSplitters(c)); + node.children.forEach(c => this._removeNodeSplitters(c)); } } @@ -666,20 +699,28 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { this._thumnailCanvas.width = 280 * devicePixelRatio; this._thumnailCanvas.height = 140 * devicePixelRatio; } - const browsers = this._data[this.currentView].tabs.map((t) => t.linkedBrowser); - browsers.forEach((b) => { + const browsers = this._data[this.currentView].tabs.map( + t => t.linkedBrowser + ); + browsers.forEach(b => { b.style.pointerEvents = "none"; b.style.opacity = ".85"; }); if (!tabDrag) { - this.tabBrowserPanel.addEventListener("dragstart", this.onBrowserDragStart); + this.tabBrowserPanel.addEventListener( + "dragstart", + this.onBrowserDragStart + ); this.tabBrowserPanel.addEventListener("dragend", this.onBrowserDragEnd); } this.tabBrowserPanel.addEventListener("dragover", this.onBrowserDragOver); this.tabBrowserPanel.addEventListener("drop", this.onBrowserDrop); - this.tabBrowserPanel.addEventListener("click", this.disableTabRearrangeView); + this.tabBrowserPanel.addEventListener( + "click", + this.disableTabRearrangeView + ); window.addEventListener("keydown", this.disableTabRearrangeView); } @@ -704,13 +745,24 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { return; } - this.tabBrowserPanel.removeEventListener("dragstart", this.onBrowserDragStart); - this.tabBrowserPanel.removeEventListener("dragover", this.onBrowserDragOver); + this.tabBrowserPanel.removeEventListener( + "dragstart", + this.onBrowserDragStart + ); + this.tabBrowserPanel.removeEventListener( + "dragover", + this.onBrowserDragOver + ); this.tabBrowserPanel.removeEventListener("drop", this.onBrowserDrop); - this.tabBrowserPanel.removeEventListener("click", this.disableTabRearrangeView); + this.tabBrowserPanel.removeEventListener( + "click", + this.disableTabRearrangeView + ); window.removeEventListener("keydown", this.disableTabRearrangeView); - const browsers = this._data[this.rearrangeViewView].tabs.map((t) => t.linkedBrowser); - browsers.forEach((b) => { + const browsers = this._data[this.rearrangeViewView].tabs.map( + t => t.linkedBrowser + ); + browsers.forEach(b => { b.style.pointerEvents = ""; b.style.opacity = ""; }); @@ -718,7 +770,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { this.rearrangeViewView = null; }; - onBrowserDragStart = (event) => { + onBrowserDragStart = event => { if (!this.splitViewActive) { return; } @@ -726,7 +778,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { let browser; let isSplitHeaderDrag = false; - const container = event.target.closest(".browserSidebarContainer[zen-split]"); + const container = event.target.closest( + ".browserSidebarContainer[zen-split]" + ); if (container && event.target.closest(".zen-tab-rearrange-button")) { // Split tab header drag case const containerRect = container.getBoundingClientRect(); @@ -765,14 +819,20 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { } browser.style.opacity = ".2"; - event.dataTransfer.setData("text/plain", browser.closest(".browserSidebarContainer").id); + event.dataTransfer.setData( + "text/plain", + browser.closest(".browserSidebarContainer").id + ); this._draggingTab = tab; // Canvas setup for drag image let scale = window.devicePixelRatio; let canvas = this._dndCanvas; if (!canvas) { - this._dndCanvas = canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); + this._dndCanvas = canvas = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "canvas" + ); canvas.style.width = "100%"; canvas.style.height = "100%"; } @@ -792,7 +852,11 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { // using updateDragImage. On Linux, we can use a panel. if (platform === "win" || platform === "macosx") { captureListener = () => { - event.dataTransfer.updateDragImage(canvas, dragImageOffset, dragImageOffset); + event.dataTransfer.updateDragImage( + canvas, + dragImageOffset, + dragImageOffset + ); }; } else { // Create a panel to use it in setDragImage @@ -803,7 +867,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { this._dndPanel = document.createXULElement("panel"); this._dndPanel.className = "dragfeedback-tab"; this._dndPanel.setAttribute("type", "drag"); - let wrapper = document.createElementNS("http://www.w3.org/1999/xhtml", "div"); + let wrapper = document.createElementNS( + "http://www.w3.org/1999/xhtml", + "div" + ); wrapper.style.width = "160px"; wrapper.style.height = "90px"; wrapper.appendChild(canvas); @@ -816,18 +883,18 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { // since we can update the image during the dnd. PageThumbs.captureToCanvas(browser, canvas) .then(captureListener) - .catch((e) => console.error(e)); + .catch(e => console.error(e)); } else { // For the non e10s case we can just use PageThumbs // sync, so let's use the canvas for setDragImage. - PageThumbs.captureToCanvas(browser, canvas).catch((e) => console.error(e)); + PageThumbs.captureToCanvas(browser, canvas).catch(e => console.error(e)); dragImageOffset = dragImageOffset * scale; } event.dataTransfer.setDragImage(toDrag, dragImageOffset, dragImageOffset); return true; }; - onBrowserDragOver = (event) => { + onBrowserDragOver = event => { event.preventDefault(); const browser = event.target.querySelector("browser"); if (!browser) { @@ -850,23 +917,32 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { const posToRoot = { ...splitNode.positionToRoot }; const browserRect = browser.getBoundingClientRect(); - const hoverSide = this.calculateHoverSide(event.clientX, event.clientY, browserRect); + const hoverSide = this.calculateHoverSide( + event.clientX, + event.clientY, + browserRect + ); if (hoverSide !== "center") { const isVertical = hoverSide === "top" || hoverSide === "bottom"; const browserSize = - 100 - (isVertical ? posToRoot.top + posToRoot.bottom : posToRoot.right + posToRoot.left); + 100 - + (isVertical + ? posToRoot.top + posToRoot.bottom + : posToRoot.right + posToRoot.left); const reduce = browserSize * 0.5; posToRoot[this._oppositeSide(hoverSide)] += reduce; } const newInset = `${posToRoot.top}% ${posToRoot.right}% ${posToRoot.bottom}% ${posToRoot.left}%`; if (this.dropZone.style.inset !== newInset) { - window.requestAnimationFrame(() => (this.dropZone.style.inset = newInset)); + window.requestAnimationFrame( + () => (this.dropZone.style.inset = newInset) + ); } }; - onBrowserDragEnd = (event) => { + onBrowserDragEnd = event => { this.dropZone?.removeAttribute("enabled"); // If we don't have drag state, just clean up what we can @@ -908,8 +984,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { } calculateHoverSide(x, y, elementRect) { - const hPixelHoverSize = ((elementRect.right - elementRect.left) * this._edgeHoverSize) / 100; - const vPixelHoverSize = ((elementRect.bottom - elementRect.top) * this._edgeHoverSize) / 100; + const hPixelHoverSize = + ((elementRect.right - elementRect.left) * this._edgeHoverSize) / 100; + const vPixelHoverSize = + ((elementRect.bottom - elementRect.top) * this._edgeHoverSize) / 100; if (x <= elementRect.left + hPixelHoverSize) { return "left"; } @@ -925,7 +1003,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { return "center"; } - onBrowserDrop = (event) => { + onBrowserDrop = event => { const browserDroppedOn = event.target.querySelector("browser"); if (!browserDroppedOn) { return; @@ -935,7 +1013,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { if (!droppedTab) { return; } - const droppedOnTab = gBrowser.getTabForBrowser(event.target.querySelector("browser")); + const droppedOnTab = gBrowser.getTabForBrowser( + event.target.querySelector("browser") + ); if (droppedTab === droppedOnTab) { return; } @@ -981,7 +1061,8 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { * @param {number} sizeOfInsertedNode percentage of node width or height that nodeToInsert will take */ splitIntoNode(node, nodeToInsert, side, sizeOfInsertedNode) { - const splitDirection = side === "left" || side === "right" ? "row" : "column"; + const splitDirection = + side === "left" || side === "right" ? "row" : "column"; const splitPosition = side === "left" || side === "top" ? 0 : 1; let nodeSize; @@ -997,7 +1078,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { const nodeIndex = node.parent.children.indexOf(node); node.parent.children[nodeIndex] = newParent; } else { - const viewData = Object.values(this._data).find((s) => s.layoutTree === node); + const viewData = Object.values(this._data).find( + s => s.layoutTree === node + ); viewData.layoutTree = newParent; } newParent.addChild(node); @@ -1084,7 +1167,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { const tabCountInfo = JSON.stringify({ tabCount: window.gBrowser.selectedTabs.length, }); - document.getElementById("context_zenSplitTabs").setAttribute("data-l10n-args", tabCountInfo); + document + .getElementById("context_zenSplitTabs") + .setAttribute("data-l10n-args", tabCountInfo); const splitTabs = document.getElementById("context_zenSplitTabs"); if (!this.contextCanSplitTabs()) { splitTabs.setAttribute("hidden", "true"); @@ -1137,7 +1222,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { window.gContextMenu.mediaURL || window.gContextMenu.contentData.docLocation || window.gContextMenu.target.ownerDocument.location.href; - const currentTab = gZenGlanceManager.getTabOrGlanceParent(window.gBrowser.selectedTab); + const currentTab = gZenGlanceManager.getTabOrGlanceParent( + window.gBrowser.selectedTab + ); const newTab = this.openAndSwitchToTab(url, { inBackground: false }); this.splitTabs([currentTab, newTab], undefined, 1); } @@ -1199,7 +1286,8 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { } this._maybeRemoveFakeBrowser(); { - const shouldDisableEmptySplits = tab.hasAttribute("zen-empty-tab") || tab.splitView; + const shouldDisableEmptySplits = + tab.hasAttribute("zen-empty-tab") || tab.splitView; const command = document.getElementById("cmd_zenNewEmptySplit"); if (shouldDisableEmptySplits) { command.setAttribute("disabled", "true"); @@ -1245,21 +1333,23 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { const tabIndexToUse = Math.max(0, initialIndex); return this.#withoutSplitViewTransition(() => { // TODO: Add support for splitting essential tabs - tabs = tabs.filter((t) => !t.hidden && !t.hasAttribute("zen-empty-tab")); + tabs = tabs.filter(t => !t.hidden && !t.hasAttribute("zen-empty-tab")); if (tabs.length < 2 || tabs.length > this.MAX_TABS) { return; } - const existingSplitTab = tabs.find((tab) => tab.splitView); + const existingSplitTab = tabs.find(tab => tab.splitView); let shouldActivateSplit = (initialIndex >= 0 || tabs.includes(window.gBrowser.selectedTab)) && !this._sessionRestoring; if (existingSplitTab) { this._moveTabsToContainer(tabs, tabs[tabIndexToUse]); - const groupIndex = this._data.findIndex((group) => group.tabs.includes(existingSplitTab)); + const groupIndex = this._data.findIndex(group => + group.tabs.includes(existingSplitTab) + ); const group = this._data[groupIndex]; const gridTypeChange = gridType && group.gridType !== gridType; - const newTabsAdded = tabs.find((t) => !group.tabs.includes(t)); + const newTabsAdded = tabs.find(t => !group.tabs.includes(t)); if (group.tabs.length >= this.MAX_TABS) { return; } @@ -1275,7 +1365,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { for (let i = 0; i < tabs.length; i++) { const tab = tabs[i]; if (!group.tabs.includes(tab)) { - gBrowser.moveTabToExistingGroup(tab, this._getSplitViewGroup(tabs, groupFetchId)); + gBrowser.moveTabToExistingGroup( + tab, + this._getSplitViewGroup(tabs, groupFetchId) + ); group.tabs.push(tab); this.addTabToSplit(tab, group.layoutTree, false); tab.splitView = true; @@ -1294,12 +1387,20 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { // We are here if none of the tabs have been previously split // If there's ANY pinned tab on the list, we clone the pinned tab // state to all the tabs - const allArePinned = tabs.every((tab) => tab.pinned); - const thereIsOnePinned = tabs.some((tab) => tab.pinned); - const thereIsOneEssential = tabs.some((tab) => tab.hasAttribute("zen-essential")); - const thereIsOneLiveFolder = tabs.some((tab) => tab.hasAttribute("zen-live-folder-item-id")); + const allArePinned = tabs.every(tab => tab.pinned); + const thereIsOnePinned = tabs.some(tab => tab.pinned); + const thereIsOneEssential = tabs.some(tab => + tab.hasAttribute("zen-essential") + ); + const thereIsOneLiveFolder = tabs.some(tab => + tab.hasAttribute("zen-live-folder-item-id") + ); - if (thereIsOneEssential || (thereIsOnePinned && !allArePinned) || thereIsOneLiveFolder) { + if ( + thereIsOneEssential || + (thereIsOnePinned && !allArePinned) || + thereIsOneLiveFolder + ) { for (let i = 0; i < tabs.length; i++) { const tab = tabs[i]; if (tab.pinned) { @@ -1345,7 +1446,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { addTabToSplit(tab, splitNode, prepend = true) { const reduce = splitNode.children.length / (splitNode.children.length + 1); - splitNode.children.forEach((c) => (c.sizeInParent *= reduce)); + splitNode.children.forEach(c => (c.sizeInParent *= reduce)); splitNode.addChild(new nsSplitLeafNode(tab, (1 - reduce) * 100), prepend); } @@ -1356,7 +1457,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { */ updateSplitView(tab) { const oldView = this.currentView; - const newView = this._data.findIndex((group) => group.tabs.includes(tab)); + const newView = this._data.findIndex(group => group.tabs.includes(tab)); if (newView === oldView && oldView < 0) { return; @@ -1386,11 +1487,15 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { } this.removeSplitters(); this.tabBrowserPanel.removeAttribute("zen-split-view"); - document.getElementById("tabbrowser-tabbox").removeAttribute("zen-split-view"); + document + .getElementById("tabbrowser-tabbox") + .removeAttribute("zen-split-view"); this.currentView = -1; this.toggleWrapperDisplay(false); this.maybeDisableOpeningTabOnSplitView(); - window.dispatchEvent(new CustomEvent("ZenViewSplitter:SplitViewDeactivated")); + window.dispatchEvent( + new CustomEvent("ZenViewSplitter:SplitViewDeactivated") + ); } /** @@ -1409,7 +1514,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { if (reset) { this.removeSplitters(); } - splitData.tabs.forEach((tab) => { + splitData.tabs.forEach(tab => { if (tab.hasAttribute("pending")) { gBrowser.getBrowserForTab(tab).reload(); } @@ -1422,7 +1527,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { this.applyGridToTabs(splitData.tabs); this.tabBrowserPanel.setAttribute("zen-split-view", "true"); - document.getElementById("tabbrowser-tabbox").setAttribute("zen-split-view", "true"); + document + .getElementById("tabbrowser-tabbox") + .setAttribute("zen-split-view", "true"); this.applyGridLayout(splitData.layoutTree); this.setTabsDocShellState(splitData.tabs, true); @@ -1434,10 +1541,14 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { let rootNode; if (gridType === "vsep" || (tabs.length === 2 && gridType === "grid")) { rootNode = new nsSplitNode("row"); - rootNode.children = tabs.map((tab) => new nsSplitLeafNode(tab, 100 / tabs.length)); + rootNode.children = tabs.map( + tab => new nsSplitLeafNode(tab, 100 / tabs.length) + ); } else if (gridType === "hsep") { rootNode = new nsSplitNode("column"); - rootNode.children = tabs.map((tab) => new nsSplitLeafNode(tab, 100 / tabs.length)); + rootNode.children = tabs.map( + tab => new nsSplitLeafNode(tab, 100 / tabs.length) + ); } else if (gridType === "grid") { rootNode = new nsSplitNode("row"); const rowWidth = 100 / Math.ceil(tabs.length / 2); @@ -1450,7 +1561,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { rootNode.addChild(columnNode, false); } if (tabs.length % 2 !== 0) { - rootNode.addChild(new nsSplitLeafNode(tabs[tabs.length - 1], rowWidth), false); + rootNode.addChild( + new nsSplitLeafNode(tabs[tabs.length - 1], rowWidth), + false + ); } } @@ -1463,7 +1577,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { * @param {Tab[]} tabs - The tabs to apply the grid layout to. */ applyGridToTabs(tabs) { - tabs.forEach((tab) => { + tabs.forEach(tab => { tab.splitView = true; tab.splitViewValue = this.currentView; tab.setAttribute("split-view", "true"); @@ -1496,7 +1610,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { header.classList.add("zen-view-splitter-header"); const removeButton = document.createXULElement("toolbarbutton"); removeButton.classList.add("zen-tab-unsplit-button"); - removeButton.addEventListener("click", (event) => { + removeButton.addEventListener("click", event => { this.removeTabFromSplit(event, container); }); const rearrangeButton = document.createXULElement("toolbarbutton"); @@ -1508,7 +1622,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { } _removeHeader(container) { - const header = container.querySelector(".zen-view-splitter-header-container"); + const header = container.querySelector( + ".zen-view-splitter-header-container" + ); if (header) { header.remove(); } @@ -1525,14 +1641,18 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { } const nodeRootPosition = splitNode.positionToRoot; if (!splitNode.children) { - const browserContainer = splitNode.tab.linkedBrowser.closest(".browserSidebarContainer"); + const browserContainer = splitNode.tab.linkedBrowser.closest( + ".browserSidebarContainer" + ); browserContainer.style.inset = `${nodeRootPosition.top}% ${nodeRootPosition.right}% ${nodeRootPosition.bottom}% ${nodeRootPosition.left}%`; this._tabToSplitNode.set(splitNode.tab, splitNode); return; } - const rootToNodeWidthRatio = (100 - nodeRootPosition.right - nodeRootPosition.left) / 100; - const rootToNodeHeightRatio = (100 - nodeRootPosition.bottom - nodeRootPosition.top) / 100; + const rootToNodeWidthRatio = + (100 - nodeRootPosition.right - nodeRootPosition.left) / 100; + const rootToNodeHeightRatio = + (100 - nodeRootPosition.bottom - nodeRootPosition.top) / 100; const splittersNeeded = splitNode.children.length - 1; const currentSplitters = this.getSplitters(splitNode, splittersNeeded); @@ -1542,8 +1662,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { splitNode.children.forEach((childNode, i) => { const childRootPosition = { top: topOffset, - right: 100 - (leftOffset + childNode.widthInParent * rootToNodeWidthRatio), - bottom: 100 - (topOffset + childNode.heightInParent * rootToNodeHeightRatio), + right: + 100 - (leftOffset + childNode.widthInParent * rootToNodeWidthRatio), + bottom: + 100 - (topOffset + childNode.heightInParent * rootToNodeHeightRatio), left: leftOffset, }; childNode.positionToRoot = childRootPosition; @@ -1604,7 +1726,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { currentSplitters[i].parentSplitNode = parentNode; } if (currentSplitters.length > splittersNeeded) { - currentSplitters.slice(splittersNeeded - currentSplitters.length).forEach((s) => s.remove()); + currentSplitters + .slice(splittersNeeded - currentSplitters.length) + .forEach(s => s.remove()); currentSplitters = currentSplitters.slice(0, splittersNeeded); } this._splitNodeToSplitters.set(parentNode, currentSplitters); @@ -1613,8 +1737,8 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { removeSplitters() { [...this.overlay.children] - .filter((c) => c.classList.contains("zen-split-view-splitter")) - .forEach((s) => s.remove()); + .filter(c => c.classList.contains("zen-split-view-splitter")) + .forEach(s => s.remove()); this._splitNodeToSplitters.clear(); } @@ -1640,20 +1764,20 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { * * @param {Event} event - The event. */ - _handleTabEvent = (event) => { + _handleTabEvent = event => { if (this.rearrangeViewEnabled) { return; } const container = event.currentTarget.closest(".browserSidebarContainer"); const tab = window.gBrowser.tabs.find( - (t) => t.linkedBrowser?.closest(".browserSidebarContainer") === container + t => t.linkedBrowser?.closest(".browserSidebarContainer") === container ); if (tab) { window.gBrowser.selectedTab = tab; } }; - handleSplitterMouseDown = (event) => { + handleSplitterMouseDown = event => { this.tabBrowserPanel.setAttribute("zen-split-resizing", true); const isVertical = event.target.getAttribute("orient") === "vertical"; const dimension = isVertical ? "width" : "height"; @@ -1664,15 +1788,21 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { const splitNode = event.target.parentSplitNode; let rootToNodeSize; if (isVertical) { - rootToNodeSize = 100 / (100 - splitNode.positionToRoot.right - splitNode.positionToRoot.left); + rootToNodeSize = + 100 / + (100 - splitNode.positionToRoot.right - splitNode.positionToRoot.left); } else { - rootToNodeSize = 100 / (100 - splitNode.positionToRoot.bottom - splitNode.positionToRoot.top); + rootToNodeSize = + 100 / + (100 - splitNode.positionToRoot.bottom - splitNode.positionToRoot.top); } - const originalSizes = splitNode.children.map((c) => c.sizeInParent); + const originalSizes = splitNode.children.map(c => c.sizeInParent); - const dragFunc = (dEvent) => { + const dragFunc = dEvent => { requestAnimationFrame(() => { - originalSizes.forEach((s, i) => (splitNode.children[i].sizeInParent = s)); // reset changes + originalSizes.forEach( + (s, i) => (splitNode.children[i].sizeInParent = s) + ); // reset changes const movement = dEvent[clientAxis] - startPosition; let movementPercent = @@ -1687,7 +1817,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { i += movementPercent < 0 ? -1 : 1 ) { const current = originalSizes[i]; - const newSize = Math.max(this.minResizeWidth, current - reducingMovement); + const newSize = Math.max( + this.minResizeWidth, + current - reducingMovement + ); splitNode.children[i].sizeInParent = newSize; const amountReduced = current - newSize; reducingMovement -= amountReduced; @@ -1695,7 +1828,8 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { break; } } - const increasingMovement = Math.max(movementPercent, -movementPercent) - reducingMovement; + const increasingMovement = + Math.max(movementPercent, -movementPercent) - reducingMovement; const increaseIndex = gridIdx + (movementPercent < 0 ? 1 : 0); splitNode.children[increaseIndex].sizeInParent = originalSizes[increaseIndex] + increasingMovement; @@ -1772,9 +1906,14 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { */ updatePanelUI(panel) { for (const gridType of ["hsep", "vsep", "grid", "unsplit"]) { - const selector = panel.querySelector(`.zen-split-view-modifier-preview.${gridType}`); + const selector = panel.querySelector( + `.zen-split-view-modifier-preview.${gridType}` + ); selector.classList.remove("active"); - if (this.currentView >= 0 && this._data[this.currentView].gridType === gridType) { + if ( + this.currentView >= 0 && + this._data[this.currentView].gridType === gridType + ) { selector.classList.add("active"); } } @@ -1818,13 +1957,13 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { let nextTabIndex = tabs.indexOf(gBrowser.selectedTab) + 1; if (nextTabIndex >= tabs.length) { // Find the first non-hidden tab - nextTabIndex = tabs.findIndex((tab) => !tab.hidden); + nextTabIndex = tabs.findIndex(tab => !tab.hidden); } else if (nextTabIndex < 0) { // reverse find the first non-hidden tab nextTabIndex = tabs .slice() .reverse() - .findIndex((tab) => !tab.hidden); + .findIndex(tab => !tab.hidden); } const selected_tabs = gBrowser.selectedTab.multiselected ? gBrowser.selectedTabs @@ -1834,7 +1973,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { if (this.currentView >= 0) { const splitViewId = this._data[this.currentView].groupId; const sameSplitView = selected_tabs.every( - (tab) => !tab?.group || tab.group.id === splitViewId + tab => !tab?.group || tab.group.id === splitViewId ); if (!sameSplitView) { return; @@ -1854,7 +1993,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { if (browser) { const tab = gBrowser.getTabForBrowser(browser); if (tab) { - const groupIndex = this._data.findIndex((group) => group.tabs.includes(tab)); + const groupIndex = this._data.findIndex(group => + group.tabs.includes(tab) + ); this.deactivateCurrentSplitView(); if (groupIndex >= 0) { this.removeTabFromGroup(tab, groupIndex, { forUnsplit: true }); @@ -1948,7 +2089,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { return false; } - let droppedOnTab = gZenGlanceManager.getTabOrGlanceParent(gBrowser.getTabForBrowser(browser)); + let droppedOnTab = gZenGlanceManager.getTabOrGlanceParent( + gBrowser.getTabForBrowser(browser) + ); if (droppedOnTab === this._draggingTab) { this.createEmptySplit(dropSide); return true; @@ -1956,7 +2099,9 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { gBrowser.selectedTab = this._draggingTab; this._draggingTab = null; - const browserContainer = draggedTab.linkedBrowser?.closest(".browserSidebarContainer"); + const browserContainer = draggedTab.linkedBrowser?.closest( + ".browserSidebarContainer" + ); if (browserContainer) { browserContainer.style.opacity = "0"; } @@ -1971,9 +2116,11 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { // If there's ANY pinned tab on the list, we clone the pinned tab // state to all the tabs let tempTabs = [draggedTab, droppedOnTab]; - const allArePinned = tempTabs.every((tab) => tab.pinned); - const thereIsOnePinned = tempTabs.some((tab) => tab.pinned); - const thereIsOneEssential = tempTabs.some((tab) => tab.hasAttribute("zen-essential")); + const allArePinned = tempTabs.every(tab => tab.pinned); + const thereIsOnePinned = tempTabs.some(tab => tab.pinned); + const thereIsOneEssential = tempTabs.some(tab => + tab.hasAttribute("zen-essential") + ); if (thereIsOneEssential || (thereIsOnePinned && !allArePinned)) { for (let i = 0; i < tempTabs.length; i++) { @@ -1988,13 +2135,21 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { if (droppedOnTab.splitView) { // Add to existing split view - const groupIndex = this._data.findIndex((group) => group.tabs.includes(droppedOnTab)); + const groupIndex = this._data.findIndex(group => + group.tabs.includes(droppedOnTab) + ); const group = this._data[groupIndex]; - if (!group.tabs.includes(draggedTab) && group.tabs.length < this.MAX_TABS) { + if ( + !group.tabs.includes(draggedTab) && + group.tabs.length < this.MAX_TABS + ) { // First move the tab to the split view group let splitGroup = droppedOnTab.group; - if (splitGroup && (!draggedTab.group || draggedTab.group !== splitGroup)) { + if ( + splitGroup && + (!draggedTab.group || draggedTab.group !== splitGroup) + ) { this._moveTabsToContainer([draggedTab], droppedOnTab); gBrowser.moveTabToExistingGroup(draggedTab, splitGroup); if (hoverSide === "left" || hoverSide === "top") { @@ -2012,7 +2167,8 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { // If dropping on a side, wrap entire layout in a new split at the root level if (hoverSide !== "center") { - const splitDirection = hoverSide === "left" || hoverSide === "right" ? "row" : "column"; + const splitDirection = + hoverSide === "left" || hoverSide === "right" ? "row" : "column"; const rootNode = group.layoutTree; const prepend = hoverSide === "left" || hoverSide === "top"; @@ -2021,7 +2177,12 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { this.addTabToSplit(draggedTab, rootNode, prepend); } else { // Different direction, wrap root in a new split node - this.splitIntoNode(rootNode, new nsSplitLeafNode(draggedTab, 50), hoverSide, 0.5); + this.splitIntoNode( + rootNode, + new nsSplitLeafNode(draggedTab, 50), + hoverSide, + 0.5 + ); } } else { this.addTabToSplit(draggedTab, group.layoutTree); @@ -2031,7 +2192,8 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { } } else { // Create new split view with layout based on drop position - const gridType = dropSide === "top" || dropSide === "bottom" ? "hsep" : "vsep"; + const gridType = + dropSide === "top" || dropSide === "bottom" ? "hsep" : "vsep"; const topOrLeft = dropSide === "top" || dropSide === "left"; // Put tabs always as if it was dropped from the left @@ -2112,12 +2274,14 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { * @returns {TabGroup} The tab group for split view tabs */ _getSplitViewGroup(tabs, id = null) { - if (tabs.some((tab) => tab.hasAttribute("zen-essential"))) { + if (tabs.some(tab => tab.hasAttribute("zen-essential"))) { return null; } // Try to find an existing split view group - let splitGroup = tabs?.find((tab) => tab.group?.hasAttribute("split-view-group"))?.group; + let splitGroup = tabs?.find(tab => + tab.group?.hasAttribute("split-view-group") + )?.group; if (splitGroup) { return splitGroup; } @@ -2138,7 +2302,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { } storeDataForSessionStore() { - const serializeNode = (node) => { + const serializeNode = node => { if (node.tab) { return { type: "leaf", @@ -2151,17 +2315,17 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { type: "splitter", direction: node.direction, sizeInParent: node.sizeInParent, - children: node._children.map((child) => serializeNode(child)), + children: node._children.map(child => serializeNode(child)), }; }; - return this._data.map((group) => { + return this._data.map(group => { const serializedTree = serializeNode(group.layoutTree); return { groupId: group.groupId, gridType: group.gridType, layoutTree: serializedTree, - tabs: group.tabs.map((tab) => tab.id), + tabs: group.tabs.map(tab => tab.id), }; }); } @@ -2188,7 +2352,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { return; } - const deserializeNode = (nodeData) => { + const deserializeNode = nodeData => { if (nodeData.type === "leaf") { const tab = document.getElementById(nodeData.tabId); if (!tab) { @@ -2197,7 +2361,10 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { return new nsSplitLeafNode(tab, nodeData.sizeInParent); } - const splitter = new nsSplitNode(nodeData.direction, nodeData.sizeInParent); + const splitter = new nsSplitNode( + nodeData.direction, + nodeData.sizeInParent + ); splitter._children = []; for (const childData of nodeData.children) { @@ -2291,9 +2458,11 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { setTimeout(() => { window.addEventListener( "ZenURLBarClosed", - (event) => { + event => { const { onElementPicked, onSwitch } = event.detail; - const groupIndex = this._data.findIndex((group) => group.tabs.includes(emptyTab)); + const groupIndex = this._data.findIndex(group => + group.tabs.includes(emptyTab) + ); const newSelectedTab = gBrowser.selectedTab; const cleanup = () => { this.removeTabFromGroup(emptyTab, groupIndex, { @@ -2313,11 +2482,15 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { cleanup(); return; } - this.removeTabFromGroup(emptyTab, groupIndex, { forUnsplit: true }); + this.removeTabFromGroup(emptyTab, groupIndex, { + forUnsplit: true, + }); gBrowser.selectedTab = selectedTab; this.resetTabState(emptyTab, false); this.splitTabs( - topOrLeft ? [newSelectedTab, selectedTab] : [selectedTab, newSelectedTab], + topOrLeft + ? [newSelectedTab, selectedTab] + : [selectedTab, newSelectedTab], gridType, topOrLeft ? 0 : 1 ); @@ -2336,7 +2509,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { if (this.currentView < 0) { return []; } - return this._data[this.currentView].tabs.map((tab) => tab.linkedBrowser); + return this._data[this.currentView].tabs.map(tab => tab.linkedBrowser); } } diff --git a/src/zen/tabs/ZenPinnedTabManager.mjs b/src/zen/tabs/ZenPinnedTabManager.mjs index ae994feb5..e25742191 100644 --- a/src/zen/tabs/ZenPinnedTabManager.mjs +++ b/src/zen/tabs/ZenPinnedTabManager.mjs @@ -67,7 +67,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { if (!this.enabled) { return; } - this._canLog = Services.prefs.getBoolPref("zen.pinned-tab-manager.debug", false); + this._canLog = Services.prefs.getBoolPref( + "zen.pinned-tab-manager.debug", + false + ); this.observer = new ZenPinnedTabsObserver(); this._initClosePinnedTabShortcut(); this._insertItemsIntoTabContextMenu(); @@ -97,7 +100,9 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } onTabIconChanged(tab, url = null) { - tab.dispatchEvent(new CustomEvent("ZenTabIconChanged", { bubbles: true, detail: { tab } })); + tab.dispatchEvent( + new CustomEvent("ZenTabIconChanged", { bubbles: true, detail: { tab } }) + ); if (tab.hasAttribute("zen-essential")) { this.setEssentialTabIcon(tab, url); } @@ -158,7 +163,9 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { const tab = e.target?.closest("tab"); if (e.button === 1 && tab) { await this.onCloseTabShortcut(e, tab, { - closeIfPending: Services.prefs.getBoolPref("zen.pinned-tab-manager.wheel-close-if-pending"), + closeIfPending: Services.prefs.getBoolPref( + "zen.pinned-tab-manager.wheel-close-if-pending" + ), }); } } @@ -211,13 +218,13 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { const pinnedTabs = [ ...new Set( tabs - .flatMap((tab) => { + .flatMap(tab => { if (tab.group?.hasAttribute("split-view-group")) { return tab.group.tabs; } return tab; }) - .filter((tab) => tab?.pinned) + .filter(tab => tab?.pinned) ), ]; @@ -225,7 +232,7 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { return; } - const selectedTabs = pinnedTabs.filter((tab) => tab.selected); + const selectedTabs = pinnedTabs.filter(tab => tab.selected); event.stopPropagation(); event.preventDefault(); @@ -234,8 +241,13 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { behavior = "unload-switch"; } - if (alwaysUnload && ["close", "reset", "switch", "reset-switch"].includes(behavior)) { - behavior = behavior.contains("reset") ? "reset-unload-switch" : "unload-switch"; + if ( + alwaysUnload && + ["close", "reset", "switch", "reset-switch"].includes(behavior) + ) { + behavior = behavior.contains("reset") + ? "reset-unload-switch" + : "unload-switch"; } switch (behavior) { @@ -256,19 +268,23 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { // before we used to just ignore it but now we need to fully close // it as well. gZenGlanceManager.manageTabClose(tab.glanceTab); - await new Promise((resolve) => { + await new Promise(resolve => { let hasRan = false; const onGlanceClose = () => { hasRan = true; resolve(); }; - window.addEventListener("GlanceClose", onGlanceClose, { once: true }); + window.addEventListener("GlanceClose", onGlanceClose, { + once: true, + }); // Set a timeout to resolve the promise if the event doesn't fire. // We do this to prevent any future issues where glance woudnt close such as // glance requering to ask for permit unload. setTimeout(() => { if (!hasRan) { - console.warn("GlanceClose event did not fire within 3 seconds"); + console.warn( + "GlanceClose event did not fire within 3 seconds" + ); resolve(); } }, 3000); @@ -285,11 +301,15 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { await gZenFolders.animateUnloadAll(folderToUnload); } const allAreUnloaded = pinnedTabs.every( - (tab) => tab.hasAttribute("pending") && !tab.hasAttribute("zen-essential") + tab => + tab.hasAttribute("pending") && + !tab.hasAttribute("zen-essential") ); for (const tabItem of pinnedTabs) { if (allAreUnloaded && closeIfPending) { - await this.onCloseTabShortcut(event, tabItem, { behavior: "close" }); + await this.onCloseTabShortcut(event, tabItem, { + behavior: "close", + }); return; } } @@ -323,10 +343,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { if (selectedTab !== gBrowser.selectedTab) { return; } - const findNextTab = (direction) => + const findNextTab = direction => gBrowser.tabContainer.findNextTab(selectedTab, { direction, - filter: (tab) => !tab.hidden && !tab.pinned, + filter: tab => !tab.hidden && !tab.pinned, }); let nextTab = findNextTab(1) || findNextTab(-1); @@ -441,8 +461,14 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { // eslint-disable-next-line no-shadow const tab = tabs[i]; tab.removeAttribute("zen-essential"); - if (gZenWorkspaces.workspaceEnabled && gZenWorkspaces.getActiveWorkspaceFromCache().uuid) { - tab.setAttribute("zen-workspace-id", gZenWorkspaces.getActiveWorkspaceFromCache().uuid); + if ( + gZenWorkspaces.workspaceEnabled && + gZenWorkspaces.getActiveWorkspaceFromCache().uuid + ) { + tab.setAttribute( + "zen-workspace-id", + gZenWorkspaces.getActiveWorkspaceFromCache().uuid + ); } if (unpin) { gBrowser.unpinTab(tab); @@ -500,28 +526,32 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { `); document.getElementById("context_pinTab")?.before(element); - document.getElementById("context_zen-edit-tab-title").addEventListener("command", (event) => { - gZenVerticalTabsManager.renameTabStart(event); - }); - document.getElementById("context_zen-edit-tab-icon").addEventListener("command", () => { - const tab = TabContextMenu.contextTab; - gZenEmojiPicker.open(tab.iconImage, { - emojiAsSVG: true, - closeOnSelect: false, - allowNone: Boolean(tab.zenStaticIcon), - onSelect: (icon) => { - if (icon) { - tab.zenStaticIcon = icon; - } else { - delete tab.zenStaticIcon; - } - gBrowser.setIcon(tab, icon); - lazy.TabStateCache.update(tab.permanentKey, { - image: null, - }); - }, + document + .getElementById("context_zen-edit-tab-title") + .addEventListener("command", event => { + gZenVerticalTabsManager.renameTabStart(event); + }); + document + .getElementById("context_zen-edit-tab-icon") + .addEventListener("command", () => { + const tab = TabContextMenu.contextTab; + gZenEmojiPicker.open(tab.iconImage, { + emojiAsSVG: true, + closeOnSelect: false, + allowNone: Boolean(tab.zenStaticIcon), + onSelect: icon => { + if (icon) { + tab.zenStaticIcon = icon; + } else { + delete tab.zenStaticIcon; + } + gBrowser.setIcon(tab, icon); + lazy.TabStateCache.update(tab.permanentKey, { + image: null, + }); + }, + }); }); - }); } updatePinnedTabContextMenu(contextTab) { @@ -531,12 +561,16 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } const isVisible = contextTab.pinned && !contextTab.multiselected; const isEssential = contextTab.getAttribute("zen-essential"); - const zenAddEssential = document.getElementById("context_zen-add-essential"); - const zenResetPinnedTab = document.getElementById("context_zen-reset-pinned-tab"); + const zenAddEssential = document.getElementById( + "context_zen-add-essential" + ); + const zenResetPinnedTab = document.getElementById( + "context_zen-reset-pinned-tab" + ); const zenReplacePinnedUrl = document.getElementById( "context_zen-replace-pinned-url-with-current" ); - [zenResetPinnedTab, zenReplacePinnedUrl].forEach((element) => { + [zenResetPinnedTab, zenReplacePinnedUrl].forEach(element => { if (element) { element.hidden = !isVisible; document.l10n.setArgs(element, { isEssential }); @@ -548,19 +582,23 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { num: gBrowser._numZenEssentials, max: this.maxEssentialTabs, }) - .then((badgeText) => { + .then(badgeText => { zenAddEssential.setAttribute("badge", badgeText); }); document .getElementById("cmd_contextZenAddToEssentials") .setAttribute("disabled", !this.canEssentialBeAdded(contextTab)); - document.getElementById("context_closeTab").hidden = contextTab.hasAttribute("zen-essential"); - document.getElementById("context_zen-remove-essential").hidden = !isEssential; + document.getElementById("context_closeTab").hidden = + contextTab.hasAttribute("zen-essential"); + document.getElementById("context_zen-remove-essential").hidden = + !isEssential; document.getElementById("context_unpinTab").hidden = document.getElementById("context_unpinTab").hidden || isEssential; document.getElementById("context_unpinSelectedTabs").hidden = - document.getElementById("context_unpinSelectedTabs").hidden || isEssential; - document.getElementById("context_zen-pinned-tab-separator").hidden = !isVisible; + document.getElementById("context_unpinSelectedTabs").hidden || + isEssential; + document.getElementById("context_zen-pinned-tab-separator").hidden = + !isVisible; document.getElementById("context_zen-edit-tab-title").hidden = isEssential || !Services.prefs.getBoolPref("zen.tabs.rename-tabs") || @@ -568,12 +606,17 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } // eslint-disable-next-line complexity - moveToAnotherTabContainerIfNecessary(event, draggedTab, movingTabs, dropIndex) { + moveToAnotherTabContainerIfNecessary( + event, + draggedTab, + movingTabs, + dropIndex + ) { let newIndex = dropIndex; let fromDifferentWindow = false; movingTabs = Array.from(movingTabs || draggedTab) .reverse() - .map((tab) => { + .map(tab => { if (!gBrowser.isTab(tab)) { return tab; } @@ -582,13 +625,12 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { fromDifferentWindow = true; if ( !tab.hasAttribute("zen-essential") && - tab.getAttribute("zen-workspace-id") != gZenWorkspaces.activeWorkspace + tab.getAttribute("zen-workspace-id") != + gZenWorkspaces.activeWorkspace ) { workspaceId = gZenWorkspaces.activeWorkspace; - tab.ownerGlobal.gBrowser.selectedTab = tab.ownerGlobal.gBrowser._findTabToBlurTo( - tab, - movingTabs - ); + tab.ownerGlobal.gBrowser.selectedTab = + tab.ownerGlobal.gBrowser._findTabToBlurTo(tab, movingTabs); tab.ownerGlobal.gZenWorkspaces.moveTabToWorkspace(tab, workspaceId); } // Move the tabs into this window. To avoid multiple tab-switches in @@ -617,14 +659,17 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { const pinnedTabsTarget = event.target.closest( ":is(.zen-current-workspace-indicator, .zen-workspace-pinned-tabs-section)" ); - const essentialTabsTarget = event.target.closest(".zen-essentials-container"); + const essentialTabsTarget = event.target.closest( + ".zen-essentials-container" + ); const tabsTarget = !pinnedTabsTarget; - let currentEssenialContainer = gZenWorkspaces.getCurrentEssentialsContainer(); + let currentEssenialContainer = + gZenWorkspaces.getCurrentEssentialsContainer(); if (currentEssenialContainer?.essentialsPromo) { currentEssenialContainer.essentialsPromo.remove(); } - movingTabs = movingTabs.filter((tab) => + movingTabs = movingTabs.filter(tab => gBrowser.isTabGroupLabel(tab) && tab.group?.isZenFolder ? !tabsTarget && !essentialTabsTarget : true @@ -651,7 +696,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { let isRegularTabs = false; // Check for essentials container if (essentialTabsTarget) { - if (!tab.hasAttribute("zen-essential") && !tab?.group?.hasAttribute("split-view-group")) { + if ( + !tab.hasAttribute("zen-essential") && + !tab?.group?.hasAttribute("split-view-group") + ) { moved = true; isVertical = false; hasActuallyMoved = this.addToEssentials(tab); @@ -775,7 +823,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } else { tab.setAttribute("zen-pinned-changed", "true"); } - tab.style.setProperty("--zen-original-tab-icon", `url(${tab._zenPinnedInitialState.image})`); + tab.style.setProperty( + "--zen-original-tab-icon", + `url(${tab._zenPinnedInitialState.image})` + ); } removeTabContainersDragoverClass(hideIndicator = true) { @@ -796,7 +847,9 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } get expandedSidebarMode() { - return document.documentElement.getAttribute("zen-sidebar-expanded") === "true"; + return ( + document.documentElement.getAttribute("zen-sidebar-expanded") === "true" + ); } canEssentialBeAdded(tab) { @@ -823,16 +876,24 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { this.removeTabContainersDragoverClass(); return; } - const pinnedTabsTarget = event.target.closest(".zen-workspace-pinned-tabs-section"); - const essentialTabsTarget = event.target.closest(".zen-essentials-container"); - const tabsTarget = event.target.closest(".zen-workspace-normal-tabs-section"); + const pinnedTabsTarget = event.target.closest( + ".zen-workspace-pinned-tabs-section" + ); + const essentialTabsTarget = event.target.closest( + ".zen-essentials-container" + ); + const tabsTarget = event.target.closest( + ".zen-workspace-normal-tabs-section" + ); const folderTarget = event.target.closest("zen-folder"); let targetTab = event.target.closest(".tabbrowser-tab"); targetTab = targetTab?.group || targetTab; draggedTab = draggedTab?.group?.hasAttribute("split-view-group") ? draggedTab.group : draggedTab; - const isHoveringIndicator = !!event.target.closest(".zen-current-workspace-indicator"); + const isHoveringIndicator = !!event.target.closest( + ".zen-current-workspace-indicator" + ); if (isHoveringIndicator) { this.removeTabContainersDragoverClass(false); gZenWorkspaces.activeWorkspaceIndicator?.setAttribute("open", true); @@ -848,7 +909,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { // Decide whether we should show a dragover class for the given target if (essentialTabsTarget) { - if (!draggedTab.hasAttribute("zen-essential") && this.canEssentialBeAdded(draggedTab)) { + if ( + !draggedTab.hasAttribute("zen-essential") && + this.canEssentialBeAdded(draggedTab) + ) { shouldAddDragOverElement = true; isVertical = false; } @@ -862,7 +926,11 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } } - if (!shouldAddDragOverElement || (!targetTab && !folderTarget) || !targetTab) { + if ( + !shouldAddDragOverElement || + (!targetTab && !folderTarget) || + !targetTab + ) { this.removeTabContainersDragoverClass(!isHoveringIndicator); return; } @@ -885,8 +953,14 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { shouldPlayHapticFeedback = true; } indicator.setAttribute("orientation", "horizontal"); - indicator.style.setProperty("--indicator-left", rect.left + separation / 2 + "px"); - indicator.style.setProperty("--indicator-width", rect.width - separation + "px"); + indicator.style.setProperty( + "--indicator-left", + rect.left + separation / 2 + "px" + ); + indicator.style.setProperty( + "--indicator-width", + rect.width - separation + "px" + ); indicator.style.top = top; indicator.style.removeProperty("left"); } else { @@ -903,8 +977,14 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { shouldPlayHapticFeedback = true; } indicator.setAttribute("orientation", "vertical"); - indicator.style.setProperty("--indicator-top", rect.top + separation / 2 + "px"); - indicator.style.setProperty("--indicator-height", rect.height - separation + "px"); + indicator.style.setProperty( + "--indicator-top", + rect.top + separation / 2 + "px" + ); + indicator.style.setProperty( + "--indicator-height", + rect.height - separation + "px" + ); indicator.style.left = left; indicator.style.removeProperty("top"); } @@ -915,7 +995,9 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } onTabLabelChanged(tab) { - tab.dispatchEvent(new CustomEvent("ZenTabLabelChanged", { bubbles: true, detail: { tab } })); + tab.dispatchEvent( + new CustomEvent("ZenTabLabelChanged", { bubbles: true, detail: { tab } }) + ); } } diff --git a/src/zen/tests/compact_mode/browser_compact_mode_width.js b/src/zen/tests/compact_mode/browser_compact_mode_width.js index cb5896a73..39707b5e2 100644 --- a/src/zen/tests/compact_mode/browser_compact_mode_width.js +++ b/src/zen/tests/compact_mode/browser_compact_mode_width.js @@ -5,7 +5,7 @@ function goToRightSideTabs(callback) { // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve) => { + return new Promise(async resolve => { await SpecialPowers.pushPrefEnv({ set: [["zen.tabs.vertical.right-side", true]], }); @@ -23,13 +23,13 @@ function goToRightSideTabs(callback) { async function testSidebarWidth() { let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); let hasRan = false; const ogSize = gNavToolbox.getBoundingClientRect().width; - const onCompactChanged = (_event) => { + const onCompactChanged = _event => { if (hasRan) { // eslint-disable-next-line mozilla/no-arbitrary-setTimeout setTimeout(() => { @@ -40,7 +40,9 @@ async function testSidebarWidth() { } // eslint-disable-next-line mozilla/no-arbitrary-setTimeout setTimeout(() => { - const newSize = gNavToolbox.style.getPropertyValue("--zen-sidebar-width").replace("px", ""); + const newSize = gNavToolbox.style + .getPropertyValue("--zen-sidebar-width") + .replace("px", ""); Assert.equal( newSize, ogSize, diff --git a/src/zen/tests/container_essentials/browser_container_auto_switch.js b/src/zen/tests/container_essentials/browser_container_auto_switch.js index c29a2aad6..62728a5ea 100644 --- a/src/zen/tests/container_essentials/browser_container_auto_switch.js +++ b/src/zen/tests/container_essentials/browser_container_auto_switch.js @@ -4,7 +4,12 @@ "use strict"; add_task(async function test_Container_Essentials_Auto_Swithc() { - await gZenWorkspaces.createAndSaveWorkspace("Container Profile 1", undefined, false, 1); + await gZenWorkspaces.createAndSaveWorkspace( + "Container Profile 1", + undefined, + false, + 1 + ); const workspaces = gZenWorkspaces.getWorkspaces(); Assert.strictEqual(workspaces.length, 2, "Two workspaces should exist."); @@ -15,12 +20,14 @@ add_task(async function test_Container_Essentials_Auto_Swithc() { ok(newTab, "New tab should be opened."); gZenPinnedTabManager.addToEssentials(newTab); ok( - newTab.hasAttribute("zen-essential") && newTab.parentNode.getAttribute("container") == "1", + newTab.hasAttribute("zen-essential") && + newTab.parentNode.getAttribute("container") == "1", "New tab should be marked as essential." ); ok( gBrowser.tabs.find( - (t) => t.hasAttribute("zen-essential") && t.getAttribute("usercontextid") == 1 + t => + t.hasAttribute("zen-essential") && t.getAttribute("usercontextid") == 1 ), "New tab should be marked as essential." ); diff --git a/src/zen/tests/container_essentials/browser_container_specific_essentials.js b/src/zen/tests/container_essentials/browser_container_specific_essentials.js index 75974498d..4097e4027 100644 --- a/src/zen/tests/container_essentials/browser_container_specific_essentials.js +++ b/src/zen/tests/container_essentials/browser_container_specific_essentials.js @@ -4,7 +4,12 @@ "use strict"; add_task(async function test_Check_Creation() { - await gZenWorkspaces.createAndSaveWorkspace("Container Profile 1", undefined, false, 1); + await gZenWorkspaces.createAndSaveWorkspace( + "Container Profile 1", + undefined, + false, + 1 + ); const workspaces = gZenWorkspaces.getWorkspaces(); Assert.strictEqual(workspaces.length, 2, "Two workspaces should exist."); @@ -16,12 +21,14 @@ add_task(async function test_Check_Creation() { ok(newTab, "New tab should be opened."); gZenPinnedTabManager.addToEssentials(newTab); ok( - newTab.hasAttribute("zen-essential") && newTab.parentNode.getAttribute("container") == "1", + newTab.hasAttribute("zen-essential") && + newTab.parentNode.getAttribute("container") == "1", "New tab should be marked as essential." ); ok( gBrowser.tabs.find( - (t) => t.hasAttribute("zen-essential") && t.getAttribute("usercontextid") == 1 + t => + t.hasAttribute("zen-essential") && t.getAttribute("usercontextid") == 1 ), "New tab should be marked as essential." ); @@ -31,7 +38,8 @@ add_task(async function test_Check_Creation() { await gZenWorkspaces.changeWorkspace(workspaces[0]); ok( !gBrowser.tabs.find( - (t) => t.hasAttribute("zen-essential") && t.getAttribute("usercontextid") == 1 + t => + t.hasAttribute("zen-essential") && t.getAttribute("usercontextid") == 1 ), "No essential tabs should be found in the original workspace." ); diff --git a/src/zen/tests/folders/browser_folder_density.js b/src/zen/tests/folders/browser_folder_density.js index 3a726559f..ca8b497ef 100644 --- a/src/zen/tests/folders/browser_folder_density.js +++ b/src/zen/tests/folders/browser_folder_density.js @@ -11,15 +11,31 @@ add_task(async function test_Folder_Density() { let tabRect = tab.getBoundingClientRect(); let folderRect = folder.labelElement.parentElement.getBoundingClientRect(); - Assert.equal(tabRect.height, folderRect.height, "Folder height matches tab height"); - Assert.equal(tabRect.width, folderRect.width, "Folder width matches tab width"); + Assert.equal( + tabRect.height, + folderRect.height, + "Folder height matches tab height" + ); + Assert.equal( + tabRect.width, + folderRect.width, + "Folder width matches tab width" + ); gUIDensity.update(gUIDensity.MODE_TOUCH); tabRect = tab.getBoundingClientRect(); folderRect = folder.getBoundingClientRect(); - Assert.equal(tabRect.height, folderRect.height, "Folder height matches tab height"); - Assert.equal(tabRect.width, folderRect.width, "Folder width matches tab width"); + Assert.equal( + tabRect.height, + folderRect.height, + "Folder height matches tab height" + ); + Assert.equal( + tabRect.width, + folderRect.width, + "Folder width matches tab width" + ); gUIDensity.update(); await removeFolder(folder); diff --git a/src/zen/tests/folders/browser_folder_empty_tab.js b/src/zen/tests/folders/browser_folder_empty_tab.js index a1fe7760f..b14809b60 100644 --- a/src/zen/tests/folders/browser_folder_empty_tab.js +++ b/src/zen/tests/folders/browser_folder_empty_tab.js @@ -4,17 +4,26 @@ "use strict"; add_task(async function test_Empty_Tab_First() { - const [tab1, tab2] = await Promise.all([addTabTo(gBrowser), addTabTo(gBrowser)]); + const [tab1, tab2] = await Promise.all([ + addTabTo(gBrowser), + addTabTo(gBrowser), + ]); const folder = await gZenFolders.createFolder([tab1], { renameFolder: false, }); Assert.equal(folder.tabs.length, 2, "Folder should contain the original tab"); - ok(folder.tabs[0].hasAttribute("zen-empty-tab"), "First tab should be an empty tab"); + ok( + folder.tabs[0].hasAttribute("zen-empty-tab"), + "First tab should be an empty tab" + ); folder.appendChild(tab2); Assert.equal(folder.tabs.length, 3, "Folder should contain the second tab"); - ok(folder.tabs[0].hasAttribute("zen-empty-tab"), "First tab should be an empty tab"); + ok( + folder.tabs[0].hasAttribute("zen-empty-tab"), + "First tab should be an empty tab" + ); await removeFolder(folder); }); diff --git a/src/zen/tests/folders/browser_folder_issue_9885.js b/src/zen/tests/folders/browser_folder_issue_9885.js index 9d30e6aae..a5b7d9087 100644 --- a/src/zen/tests/folders/browser_folder_issue_9885.js +++ b/src/zen/tests/folders/browser_folder_issue_9885.js @@ -21,7 +21,10 @@ add_task(async function test_Issue_9885() { subfolder.labelElement.click(); ok(subfolder.collapsed, "Subfolder should be collapsed after clicking on it"); - ok(!parent.collapsed, "Parent folder should be collapsed after clicking on subfolder"); + ok( + !parent.collapsed, + "Parent folder should be collapsed after clicking on subfolder" + ); await removeFolder(subfolder); await removeFolder(parent); diff --git a/src/zen/tests/folders/browser_folder_issue_9981.js b/src/zen/tests/folders/browser_folder_issue_9981.js index b09114d0f..aacd01d14 100644 --- a/src/zen/tests/folders/browser_folder_issue_9981.js +++ b/src/zen/tests/folders/browser_folder_issue_9981.js @@ -14,10 +14,17 @@ add_task(async function test_Issue_9981() { gBrowser.addRangeToMultiSelectedTabs(tab1, tab2); ok(tab1.multiselected, "Tab 1 should be multiselected"); ok(tab2.multiselected, "Tab 2 should be multiselected"); - Assert.equal(gBrowser.multiSelectedTabsCount, 2, "There should be 2 multiselected tabs"); - await new Promise((resolve) => setTimeout(resolve, 0)); + Assert.equal( + gBrowser.multiSelectedTabsCount, + 2, + "There should be 2 multiselected tabs" + ); + await new Promise(resolve => setTimeout(resolve, 0)); - const collapseEvent = BrowserTestUtils.waitForEvent(window, "TabGroupCollapse"); + const collapseEvent = BrowserTestUtils.waitForEvent( + window, + "TabGroupCollapse" + ); EventUtils.synthesizeMouseAtCenter(folder.labelElement, {}); await collapseEvent; @@ -26,15 +33,27 @@ add_task(async function test_Issue_9981() { Assert.equal(folder.activeTabs.length, 2, "Folder should have 2 active tabs"); - ok(tab1.hasAttribute("folder-active"), "Tab 1 should be in the active folder"); - ok(tab2.hasAttribute("folder-active"), "Tab 2 should be in the active folder"); + ok( + tab1.hasAttribute("folder-active"), + "Tab 1 should be in the active folder" + ); + ok( + tab2.hasAttribute("folder-active"), + "Tab 2 should be in the active folder" + ); const tab2ResetButton = tab2.querySelector(".tab-reset-button"); tab2ResetButton.style.display = "flex"; EventUtils.synthesizeMouseAtCenter(tab2ResetButton, {}); - ok(tab1.hasAttribute("folder-active"), "Tab 1 should be in the active folder"); - ok(!tab2.hasAttribute("folder-active"), "Tab 2 should not be in the active folder"); + ok( + tab1.hasAttribute("folder-active"), + "Tab 1 should be in the active folder" + ); + ok( + !tab2.hasAttribute("folder-active"), + "Tab 2 should not be in the active folder" + ); await removeFolder(folder); }); diff --git a/src/zen/tests/folders/browser_folder_max_subfolders.js b/src/zen/tests/folders/browser_folder_max_subfolders.js index 16725e2aa..62b3b9a22 100644 --- a/src/zen/tests/folders/browser_folder_max_subfolders.js +++ b/src/zen/tests/folders/browser_folder_max_subfolders.js @@ -11,7 +11,9 @@ add_task(async function test_Max_Subfolders() { renameFolder: false, }); - const subfolderItem = document.getElementById("context_zenFolderNewSubfolder"); + const subfolderItem = document.getElementById( + "context_zenFolderNewSubfolder" + ); let currentFolder = folder; for (let i = 1; i < TEST_MAX_FOLDERS; i++) { await openFolderContextMenu(currentFolder); @@ -20,7 +22,10 @@ add_task(async function test_Max_Subfolders() { "true", `Subfolder item should be enabled` ); - const folderCreateEvent = BrowserTestUtils.waitForEvent(window, "TabGroupCreate"); + const folderCreateEvent = BrowserTestUtils.waitForEvent( + window, + "TabGroupCreate" + ); EventUtils.synthesizeMouseAtCenter(subfolderItem, {}); await folderCreateEvent; const items = currentFolder.allItems; diff --git a/src/zen/tests/folders/browser_folder_multiselected.js b/src/zen/tests/folders/browser_folder_multiselected.js index 6a31a5384..b8017d47b 100644 --- a/src/zen/tests/folders/browser_folder_multiselected.js +++ b/src/zen/tests/folders/browser_folder_multiselected.js @@ -12,14 +12,25 @@ add_task(async function test_Folder_Multiselected_Tabs() { gBrowser.addRangeToMultiSelectedTabs(tab1, tab2); ok(tab1.multiselected, "Tab 1 should be multiselected"); ok(tab2.multiselected, "Tab 2 should be multiselected"); - Assert.greater(gBrowser.multiSelectedTabsCount, 1, "There should be 2 multiselected tabs"); + Assert.greater( + gBrowser.multiSelectedTabsCount, + 1, + "There should be 2 multiselected tabs" + ); - const collapseEvent = BrowserTestUtils.waitForEvent(window, "TabGroupCollapse"); + const collapseEvent = BrowserTestUtils.waitForEvent( + window, + "TabGroupCollapse" + ); folder.collapsed = true; await collapseEvent; ok(tab2.multiselected, "Tab 2 should not be multiselected"); - Assert.equal(gBrowser.multiSelectedTabsCount, 3, "There should be 3 multiselected tabs"); + Assert.equal( + gBrowser.multiSelectedTabsCount, + 3, + "There should be 3 multiselected tabs" + ); for (const t of [tab1, tab2]) { BrowserTestUtils.removeTab(t); diff --git a/src/zen/tests/folders/browser_folder_owner_tabs.js b/src/zen/tests/folders/browser_folder_owner_tabs.js index 01d0c1320..7d3f8dc99 100644 --- a/src/zen/tests/folders/browser_folder_owner_tabs.js +++ b/src/zen/tests/folders/browser_folder_owner_tabs.js @@ -13,7 +13,8 @@ add_task(async function test_Duplicate_Tab_Inside_Folder() { renameFolder: false, }); gBrowser.selectedTab = tab; - const triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal(); + const triggeringPrincipal = + Services.scriptSecurityManager.getSystemPrincipal(); gBrowser.addTab("https://example.com", { tabIndex: undefined, relatedToCurrent: true, @@ -28,7 +29,7 @@ add_task(async function test_Duplicate_Tab_Inside_Folder() { ); /* eslint-disable mozilla/no-arbitrary-setTimeout */ - await new Promise((resolve) => setTimeout(resolve, 100)); + await new Promise(resolve => setTimeout(resolve, 100)); for (const t of folder.tabs) { ok(t.pinned, "All tabs in the folder should be pinned"); @@ -49,7 +50,8 @@ add_task(async function test_Duplicate_Tab_Inside_Folder_Unpinned() { renameFolder: false, }); gBrowser.selectedTab = tab; - const triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal(); + const triggeringPrincipal = + Services.scriptSecurityManager.getSystemPrincipal(); let newTab = gBrowser.addTab("https://example.com", { tabIndex: undefined, relatedToCurrent: true, diff --git a/src/zen/tests/folders/browser_folder_reset_button.js b/src/zen/tests/folders/browser_folder_reset_button.js index 256d27f21..6ef988773 100644 --- a/src/zen/tests/folders/browser_folder_reset_button.js +++ b/src/zen/tests/folders/browser_folder_reset_button.js @@ -14,10 +14,17 @@ add_task(async function test_Issue_() { gBrowser.addRangeToMultiSelectedTabs(tab1, tab2); ok(tab1.multiselected, "Tab 1 should be multiselected"); ok(tab2.multiselected, "Tab 2 should be multiselected"); - Assert.equal(gBrowser.multiSelectedTabsCount, 2, "There should be 2 multiselected tabs"); - await new Promise((resolve) => setTimeout(resolve, 0)); + Assert.equal( + gBrowser.multiSelectedTabsCount, + 2, + "There should be 2 multiselected tabs" + ); + await new Promise(resolve => setTimeout(resolve, 0)); - const collapseEvent = BrowserTestUtils.waitForEvent(window, "TabGroupCollapse"); + const collapseEvent = BrowserTestUtils.waitForEvent( + window, + "TabGroupCollapse" + ); EventUtils.synthesizeMouseAtCenter(folder.labelElement, {}); await collapseEvent; @@ -26,16 +33,28 @@ add_task(async function test_Issue_() { Assert.equal(folder.activeTabs.length, 2, "Folder should have 2 active tabs"); - ok(tab1.hasAttribute("folder-active"), "Tab 1 should be in the active folder"); - ok(tab2.hasAttribute("folder-active"), "Tab 2 should be in the active folder"); + ok( + tab1.hasAttribute("folder-active"), + "Tab 1 should be in the active folder" + ); + ok( + tab2.hasAttribute("folder-active"), + "Tab 2 should be in the active folder" + ); EventUtils.synthesizeMouseAtCenter(folder.resetButton, {}); - await new Promise((resolve) => + await new Promise(resolve => /* eslint-disable mozilla/no-arbitrary-setTimeout */ setTimeout(() => { - ok(!tab1.hasAttribute("folder-active"), "Tab 1 should not be in the active folder"); - ok(!tab2.hasAttribute("folder-active"), "Tab 2 should not be in the active folder"); + ok( + !tab1.hasAttribute("folder-active"), + "Tab 1 should not be in the active folder" + ); + ok( + !tab2.hasAttribute("folder-active"), + "Tab 2 should not be in the active folder" + ); resolve(); }, 500) ); diff --git a/src/zen/tests/folders/browser_folder_visible_tabs.js b/src/zen/tests/folders/browser_folder_visible_tabs.js index 99beb7d35..2cba246fb 100644 --- a/src/zen/tests/folders/browser_folder_visible_tabs.js +++ b/src/zen/tests/folders/browser_folder_visible_tabs.js @@ -33,7 +33,10 @@ add_task(async function test_Visible_Selected() { gBrowser.selectedTab = tab; folder.collapsed = true; ok(tab.visible, "Tab is visible in the folder when collapsed"); - ok(tab.hasAttribute("folder-active"), "Tab is marked as active in the folder when selected"); + ok( + tab.hasAttribute("folder-active"), + "Tab is marked as active in the folder when selected" + ); ok( tab.group.hasAttribute("has-active"), "Tab group is marked as active when the tab is selected" @@ -63,7 +66,10 @@ add_task(async function test_Visible_Not_Selected() { folder.collapsed = true; gBrowser.selectedTab = originalTab; ok(tab.visible, "Tab is visible in the folder when collapsed"); - ok(tab.hasAttribute("folder-active"), "Tab is marked as active in the folder when selected"); + ok( + tab.hasAttribute("folder-active"), + "Tab is marked as active in the folder when selected" + ); ok( tab.group.hasAttribute("has-active"), "Tab group is marked as active when the tab is selected" diff --git a/src/zen/tests/folders/head.js b/src/zen/tests/folders/head.js index a5fbc5f12..e3d14953d 100644 --- a/src/zen/tests/folders/head.js +++ b/src/zen/tests/folders/head.js @@ -21,7 +21,11 @@ async function openFolderContextMenu(folder) { await menuEvent; } -async function addTabTo(targetBrowser, url = "http://mochi.test:8888/", params = {}) { +async function addTabTo( + targetBrowser, + url = "http://mochi.test:8888/", + params = {} +) { params.skipAnimation = true; const tab = BrowserTestUtils.addTab(targetBrowser, url, params); const browser = targetBrowser.getBrowserForTab(tab); diff --git a/src/zen/tests/glance/browser_glance_basic.js b/src/zen/tests/glance/browser_glance_basic.js index 1e055eb19..8977ba02d 100644 --- a/src/zen/tests/glance/browser_glance_basic.js +++ b/src/zen/tests/glance/browser_glance_basic.js @@ -4,7 +4,7 @@ "use strict"; add_task(async function test_Glance_Basic_Open() { - await openGlanceOnTab(async (glanceTab) => { + await openGlanceOnTab(async glanceTab => { ok( glanceTab.hasAttribute("zen-glance-tab"), "The glance tab should have the zen-glance-tab attribute" diff --git a/src/zen/tests/glance/browser_glance_close.js b/src/zen/tests/glance/browser_glance_close.js index 5c65a0ee9..f638db1f2 100644 --- a/src/zen/tests/glance/browser_glance_close.js +++ b/src/zen/tests/glance/browser_glance_close.js @@ -5,13 +5,13 @@ add_task(async function test_Glance_Basic_Close() { const currentTab = gBrowser.selectedTab; - await openGlanceOnTab(async (glanceTab) => { + await openGlanceOnTab(async glanceTab => { ok( currentTab.hasAttribute("glance-id"), "The glance tab should have the zen-glance-tab attribute" ); await BrowserTestUtils.removeTab(glanceTab); - await new Promise((resolve) => { + await new Promise(resolve => { /* eslint-disable mozilla/no-arbitrary-setTimeout */ setTimeout(() => { resolve(); diff --git a/src/zen/tests/glance/browser_glance_close_select.js b/src/zen/tests/glance/browser_glance_close_select.js index 7e43720c3..b6e2df55c 100644 --- a/src/zen/tests/glance/browser_glance_close_select.js +++ b/src/zen/tests/glance/browser_glance_close_select.js @@ -4,7 +4,7 @@ "use strict"; async function openAndCloseGlance() { - await openGlanceOnTab(async (glanceTab) => { + await openGlanceOnTab(async glanceTab => { ok( glanceTab.hasAttribute("zen-glance-tab"), "The glance tab should have the zen-glance-tab attribute" @@ -15,7 +15,11 @@ async function openAndCloseGlance() { add_task(async function test_Glance_Close_No_Tabs() { const currentTab = gBrowser.selectedTab; await openAndCloseGlance(); - Assert.equal(gBrowser.selectedTab, currentTab, "The original tab should be selected"); + Assert.equal( + gBrowser.selectedTab, + currentTab, + "The original tab should be selected" + ); ok(currentTab.selected, "The original tab should be visually selected"); }); @@ -27,7 +31,11 @@ add_task(async function test_Glance_Close_With_Next_Tab() { const selectedTab = gBrowser.selectedTab; Assert.notEqual(selectedTab, originalTab, "A new tab should be selected"); await openAndCloseGlance(); - Assert.equal(gBrowser.selectedTab, selectedTab, "The new tab should still be selected"); + Assert.equal( + gBrowser.selectedTab, + selectedTab, + "The new tab should still be selected" + ); ok(selectedTab.selected, "The new tab should be visually selected"); gBrowser.selectedTab = originalTab; diff --git a/src/zen/tests/glance/browser_glance_expand.js b/src/zen/tests/glance/browser_glance_expand.js index 0c29cb70a..74c3ca660 100644 --- a/src/zen/tests/glance/browser_glance_expand.js +++ b/src/zen/tests/glance/browser_glance_expand.js @@ -5,14 +5,14 @@ add_task(async function test_Glance_Basic_Open() { const selectedTab = gBrowser.selectedTab; - await openGlanceOnTab(async (glanceTab) => { + await openGlanceOnTab(async glanceTab => { await gZenGlanceManager.fullyOpenGlance(); ok( !glanceTab.hasAttribute("zen-glance-tab"), "The glance tab should not have the zen-glance-tab attribute" ); Assert.strictEqual( - gBrowser.tabs.filter((tab) => tab.hasAttribute("zen-glance-tab")).length, + gBrowser.tabs.filter(tab => tab.hasAttribute("zen-glance-tab")).length, 0, "There should be no zen-glance-tab attribute on any tab" ); @@ -28,14 +28,18 @@ add_task(async function test_Glance_Basic_Open() { add_task(async function test_Glance_Open_Sibling() { const tabsToRemove = []; for (let i = 0; i < 5; i++) { - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "https://example.com/", true); + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "https://example.com/", + true + ); tabsToRemove.push(gBrowser.selectedTab); } gBrowser.selectedTab = gBrowser.tabs[2]; const selectedTab = gBrowser.selectedTab; - await openGlanceOnTab(async (glanceTab) => { + await openGlanceOnTab(async glanceTab => { await gZenGlanceManager.fullyOpenGlance(); Assert.equal( glanceTab._tPos, @@ -53,18 +57,22 @@ add_task(async function test_Glance_Open_Sibling() { add_task(async function test_Glance_Basic_Open() { const tabsToRemove = []; for (let i = 0; i < 3; i++) { - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "https://example.com/", true); + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "https://example.com/", + true + ); gBrowser.pinTab(gBrowser.selectedTab); tabsToRemove.push(gBrowser.selectedTab); } - gBrowser.selectedTab = gBrowser.tabs.find((tab) => tab.pinned); + gBrowser.selectedTab = gBrowser.tabs.find(tab => tab.pinned); - await openGlanceOnTab(async (glanceTab) => { + await openGlanceOnTab(async glanceTab => { await gZenGlanceManager.fullyOpenGlance(); Assert.equal( glanceTab, - gBrowser.visibleTabs.find((tab) => !tab.pinned), + gBrowser.visibleTabs.find(tab => !tab.pinned), "The glance tab should be the first normal tab (Ignoring empty tabs)" ); BrowserTestUtils.removeTab(glanceTab); @@ -79,18 +87,21 @@ add_task(async function test_Glance_New_From_essential() { ok(true, "todo:"); return; // TODO: Fix this test, it currently fails /* eslint-disable no-unreachable, no-unused-vars */ - await BrowserTestUtils.withNewTab({ gBrowser, url: "https://example.com/" }, async (browser) => { - const selectedTab = gBrowser.selectedTab; - gZenPinnedTabManager.addToEssentials(selectedTab); - await openGlanceOnTab(async (glanceTab) => { - await gZenGlanceManager.fullyOpenGlance(); - ok(!glanceTab.pinned, "The glance tab should not be pinned"); - ok( - !glanceTab.parentNode.hasAttribute("container"), - "The glance tab should not be in an essentials container" - ); - await BrowserTestUtils.removeTab(gBrowser.selectedTab); - await BrowserTestUtils.removeTab(glanceTab); - }, false); - }); + await BrowserTestUtils.withNewTab( + { gBrowser, url: "https://example.com/" }, + async browser => { + const selectedTab = gBrowser.selectedTab; + gZenPinnedTabManager.addToEssentials(selectedTab); + await openGlanceOnTab(async glanceTab => { + await gZenGlanceManager.fullyOpenGlance(); + ok(!glanceTab.pinned, "The glance tab should not be pinned"); + ok( + !glanceTab.parentNode.hasAttribute("container"), + "The glance tab should not be in an essentials container" + ); + await BrowserTestUtils.removeTab(gBrowser.selectedTab); + await BrowserTestUtils.removeTab(glanceTab); + }, false); + } + ); }); diff --git a/src/zen/tests/glance/browser_glance_next_tab.js b/src/zen/tests/glance/browser_glance_next_tab.js index 50e102a60..e891927fd 100644 --- a/src/zen/tests/glance/browser_glance_next_tab.js +++ b/src/zen/tests/glance/browser_glance_next_tab.js @@ -5,14 +5,19 @@ add_task(async function test_Glance_Next_Tab() { const tabToCheck = gBrowser.selectedTab; - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "https://example.com/", true, { - skipAnimation: true, - }); - await openGlanceOnTab(async (glanceTab) => { + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "https://example.com/", + true, + { + skipAnimation: true, + } + ); + await openGlanceOnTab(async glanceTab => { gBrowser.tabContainer.advanceSelectedTab(1); const nextTab = gBrowser.selectedTab; gBrowser.selectedTab = glanceTab; - await new Promise((resolve) => { + await new Promise(resolve => { setTimeout(() => { Assert.equal(nextTab, tabToCheck, "Next glance tab should equal"); resolve(); diff --git a/src/zen/tests/glance/browser_glance_prev_tab.js b/src/zen/tests/glance/browser_glance_prev_tab.js index d669b721b..c69c34a5c 100644 --- a/src/zen/tests/glance/browser_glance_prev_tab.js +++ b/src/zen/tests/glance/browser_glance_prev_tab.js @@ -4,16 +4,21 @@ "use strict"; add_task(async function test_Glance_Prev_Tab() { - await openGlanceOnTab(async (glanceTab) => { - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "https://example.com/", true, { - skipAnimation: true, - }); + await openGlanceOnTab(async glanceTab => { + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "https://example.com/", + true, + { + skipAnimation: true, + } + ); const tabToCheck = gBrowser.selectedTab; gBrowser.selectedTab = glanceTab; gBrowser.tabContainer.advanceSelectedTab(-1); const prevTab = gBrowser.selectedTab; gBrowser.selectedTab = glanceTab; - await new Promise((resolve) => { + await new Promise(resolve => { setTimeout(() => { Assert.equal(prevTab, tabToCheck, "Previous glance tab should equal"); resolve(); diff --git a/src/zen/tests/glance/browser_glance_select_parent.js b/src/zen/tests/glance/browser_glance_select_parent.js index 7f6d6a3e5..48a519419 100644 --- a/src/zen/tests/glance/browser_glance_select_parent.js +++ b/src/zen/tests/glance/browser_glance_select_parent.js @@ -4,14 +4,19 @@ "use strict"; add_task(async function test_Glance_Select_Parent() { - await openGlanceOnTab(async (glanceTab) => { + await openGlanceOnTab(async glanceTab => { ok( glanceTab.hasAttribute("zen-glance-tab"), "The glance tab should have the zen-glance-tab attribute" ); - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "https://example.com/", true, { - skipAnimation: true, - }); + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "https://example.com/", + true, + { + skipAnimation: true, + } + ); const tabToRemove = gBrowser.selectedTab; gBrowser.selectedTab = gZenGlanceManager.getTabOrGlanceParent(glanceTab); await BrowserTestUtils.waitForCondition(() => { diff --git a/src/zen/tests/live-folders/browser_github_live_folder.js b/src/zen/tests/live-folders/browser_github_live_folder.js index d318ad940..ded5e5116 100644 --- a/src/zen/tests/live-folders/browser_github_live_folder.js +++ b/src/zen/tests/live-folders/browser_github_live_folder.js @@ -5,7 +5,8 @@ ChromeUtils.defineESModuleGetters(this, { sinon: "resource://testing-common/Sinon.sys.mjs", - nsGithubLiveFolderProvider: "resource:///modules/zen/GithubLiveFolder.sys.mjs", + nsGithubLiveFolderProvider: + "resource:///modules/zen/GithubLiveFolder.sys.mjs", }); function getGithubProviderForTest(sandbox, customOptions = {}) { @@ -39,7 +40,9 @@ function getGithubProviderForTest(sandbox, customOptions = {}) { } add_task(async function test_fetch_items_url_construction() { - info("should construct the correct GitHub search URL based on default options"); + info( + "should construct the correct GitHub search URL based on default options" + ); let sandbox = sinon.createSandbox(); @@ -69,7 +72,10 @@ add_task(async function test_fetch_items_url_construction() { Assert.ok(query.includes("is:pr"), "Should include is:PR"); Assert.ok(query.includes("author:@me"), "Should include author:@me"); Assert.ok(!query.includes("assignee:@me"), "Should NOT include assignee:@me"); - Assert.ok(!query.includes("review-requested:@me"), "Should NOT include review-requested"); + Assert.ok( + !query.includes("review-requested:@me"), + "Should NOT include review-requested" + ); sandbox.restore(); }); @@ -97,7 +103,10 @@ add_task(async function test_fetch_items_url_complex_options() { Assert.ok(query.includes("author:@me"), "Should include author"); Assert.ok(query.includes("assignee:@me"), "Should include assignee"); - Assert.ok(query.includes("review-requested:@me"), "Should include review-requested"); + Assert.ok( + query.includes("review-requested:@me"), + "Should include review-requested" + ); Assert.ok(query.includes(" OR "), "Should contain OR operators"); sandbox.restore(); @@ -159,7 +168,11 @@ add_task(async function test_fetch_network_error() { instance.fetch.rejects(new Error("Network down")); const errorId = await instance.fetchItems(); - Assert.equal(errorId, "zen-live-folder-failed-fetch", "Should return an error on failed fetch"); + Assert.equal( + errorId, + "zen-live-folder-failed-fetch", + "Should return an error on failed fetch" + ); sandbox.restore(); }); diff --git a/src/zen/tests/live-folders/browser_live_folder.js b/src/zen/tests/live-folders/browser_live_folder.js index 5aee5f92b..366374839 100644 --- a/src/zen/tests/live-folders/browser_live_folder.js +++ b/src/zen/tests/live-folders/browser_live_folder.js @@ -9,7 +9,7 @@ ChromeUtils.defineESModuleGetters(this, { }); function sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); + return new Promise(resolve => setTimeout(resolve, ms)); } describe("Zen Live Folder Scheduling", () => { @@ -64,7 +64,11 @@ describe("Zen Live Folder Scheduling", () => { const startSpy = sandbox.spy(instance, "start"); await sleep(INTERVAL + INTERVAL_OFFSET); - Assert.equal(fetchStub.callCount, 1, "Should have fetched once after the first interval"); + Assert.equal( + fetchStub.callCount, + 1, + "Should have fetched once after the first interval" + ); await sleep(INTERVAL + INTERVAL_OFFSET); Assert.equal(fetchStub.callCount, 2, "Should have fetched 2 times"); @@ -107,7 +111,11 @@ describe("Zen Live Folder Scheduling", () => { Assert.equal(fetchStub.callCount, 1, "Should have fetched once"); await sleep(INTERVAL + INTERVAL_OFFSET); - Assert.equal(fetchStub.callCount, 2, "Should have fetched once with normal interval"); + Assert.equal( + fetchStub.callCount, + 2, + "Should have fetched once with normal interval" + ); }); it("should re-start the timer if interval was changed", async () => { @@ -121,7 +129,11 @@ describe("Zen Live Folder Scheduling", () => { sinon.assert.notCalled(fetchStub); await sleep(INTERVAL + INTERVAL_OFFSET); - Assert.equal(fetchStub.callCount, 1, "Should have fetched once after the first interval"); + Assert.equal( + fetchStub.callCount, + 1, + "Should have fetched once after the first interval" + ); const NEW_INTERVAL = 500; instance.state.interval = NEW_INTERVAL; @@ -130,6 +142,10 @@ describe("Zen Live Folder Scheduling", () => { instance.start(); await sleep(NEW_INTERVAL + INTERVAL_OFFSET); - Assert.equal(fetchStub.callCount, 2, "Should have once after the new interval"); + Assert.equal( + fetchStub.callCount, + 2, + "Should have once after the new interval" + ); }); }); diff --git a/src/zen/tests/live-folders/browser_rss_live_folder.js b/src/zen/tests/live-folders/browser_rss_live_folder.js index ad2ceb60b..aef39b9da 100644 --- a/src/zen/tests/live-folders/browser_rss_live_folder.js +++ b/src/zen/tests/live-folders/browser_rss_live_folder.js @@ -210,7 +210,11 @@ add_task(async function test_invalid_dates() { const items = await instance.fetchItems(); - Assert.equal(items.length, 0, "Items with invalid/missing dates should be filtered"); + Assert.equal( + items.length, + 0, + "Items with invalid/missing dates should be filtered" + ); sandbox.restore(); }); @@ -223,7 +227,11 @@ add_task(async function test_fetch_network_error() { instance.fetch.rejects(new Error("Network down")); const items = await instance.fetchItems(); - Assert.equal(items, "zen-live-folder-failed-fetch", "Should return an error on failed fetch"); + Assert.equal( + items, + "zen-live-folder-failed-fetch", + "Should return an error on failed fetch" + ); sandbox.restore(); }); diff --git a/src/zen/tests/pinned/browser_issue_8726.js b/src/zen/tests/pinned/browser_issue_8726.js index 433a2baed..38d522944 100644 --- a/src/zen/tests/pinned/browser_issue_8726.js +++ b/src/zen/tests/pinned/browser_issue_8726.js @@ -8,7 +8,10 @@ const { TabStateFlusher } = ChromeUtils.importESModule( ); async function makeNewEmptyTab() { - let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank"); + let tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "about:blank" + ); gBrowser.selectedTab = tab; return tab; } @@ -55,7 +58,10 @@ add_task(async function test_Restore_Essential_Tab() { await TabStateFlusher.flushWindow(window); SessionWindowUI.restoreLastClosedTabOrWindowOrSession(window); tab = gBrowser.selectedTab; - ok(tab.hasAttribute("zen-essential"), "The tab should be marked as essential after restore"); + ok( + tab.hasAttribute("zen-essential"), + "The tab should be marked as essential after restore" + ); ok( tab.parentElement.closest(".zen-essentials-container"), "The tab should be in the essentials tabs section after restore" diff --git a/src/zen/tests/pinned/browser_pinned_changed.js b/src/zen/tests/pinned/browser_pinned_changed.js index 5cf1ff7fb..008744e99 100644 --- a/src/zen/tests/pinned/browser_pinned_changed.js +++ b/src/zen/tests/pinned/browser_pinned_changed.js @@ -5,28 +5,38 @@ add_task(async function test_Changed_Pinned() { let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); - await BrowserTestUtils.withNewTab({ gBrowser, url: "https://example.com/1" }, async (browser) => { - const tab = gBrowser.getTabForBrowser(browser); - gBrowser.pinTab(tab); + await BrowserTestUtils.withNewTab( + { gBrowser, url: "https://example.com/1" }, + async browser => { + const tab = gBrowser.getTabForBrowser(browser); + gBrowser.pinTab(tab); - ok(tab.pinned, "The tab should be pinned after calling gBrowser.pinTab()"); - - await gBrowser.TabStateFlusher.flush(browser); - await new Promise((r) => setTimeout(r, 500)); - BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); - await BrowserTestUtils.browserLoaded(browser, false, "https://example.com/2"); - setTimeout(() => { ok( - tab.hasAttribute("zen-pinned-changed"), - "The tab should have a zen-pinned-changed attribute after being pinned" + tab.pinned, + "The tab should be pinned after calling gBrowser.pinTab()" ); - resolvePromise(); - }, 500); - await promise; - }); + await gBrowser.TabStateFlusher.flush(browser); + await new Promise(r => setTimeout(r, 500)); + BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); + await BrowserTestUtils.browserLoaded( + browser, + false, + "https://example.com/2" + ); + setTimeout(() => { + ok( + tab.hasAttribute("zen-pinned-changed"), + "The tab should have a zen-pinned-changed attribute after being pinned" + ); + resolvePromise(); + }, 500); + + await promise; + } + ); }); diff --git a/src/zen/tests/pinned/browser_pinned_close.js b/src/zen/tests/pinned/browser_pinned_close.js index 55b56fc8e..b20b56e0b 100644 --- a/src/zen/tests/pinned/browser_pinned_close.js +++ b/src/zen/tests/pinned/browser_pinned_close.js @@ -9,20 +9,23 @@ add_task(async function test_Unload_NoReset_Pinned() { }); let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); - await BrowserTestUtils.withNewTab({ gBrowser, url: "https://example.com/1" }, async (browser) => { - const tab = gBrowser.getTabForBrowser(browser); - gBrowser.pinTab(tab); + await BrowserTestUtils.withNewTab( + { gBrowser, url: "https://example.com/1" }, + async browser => { + const tab = gBrowser.getTabForBrowser(browser); + gBrowser.pinTab(tab); - document.getElementById("cmd_close").doCommand(); - // eslint-disable-next-line mozilla/no-arbitrary-setTimeout - setTimeout(() => { - ok(tab.closing, "The tab should be closing after being closed"); - resolvePromise(); - }, 100); - await promise; - }); + document.getElementById("cmd_close").doCommand(); + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + setTimeout(() => { + ok(tab.closing, "The tab should be closing after being closed"); + resolvePromise(); + }, 100); + await promise; + } + ); }); diff --git a/src/zen/tests/pinned/browser_pinned_created.js b/src/zen/tests/pinned/browser_pinned_created.js index 221f27548..184889034 100644 --- a/src/zen/tests/pinned/browser_pinned_created.js +++ b/src/zen/tests/pinned/browser_pinned_created.js @@ -5,11 +5,15 @@ add_task(async function test_Create_Pinned() { let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "https://example.com/", true); + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "https://example.com/", + true + ); const newTab = gBrowser.selectedTab; gBrowser.pinTab(newTab); @@ -17,9 +21,12 @@ add_task(async function test_Create_Pinned() { ok(newTab.pinned, "The tab should be pinned after calling gBrowser.pinTab()"); - await new Promise((r) => setTimeout(r, 500)); + await new Promise(r => setTimeout(r, 500)); const pinObject = newTab._zenPinnedInitialState; - ok(pinObject, "The pin object should be created in the tab's _zenPinnedInitialState"); + ok( + pinObject, + "The pin object should be created in the tab's _zenPinnedInitialState" + ); Assert.equal( pinObject.entry.url, "https://example.com/", diff --git a/src/zen/tests/pinned/browser_pinned_nounload_reset.js b/src/zen/tests/pinned/browser_pinned_nounload_reset.js index 062f72d15..2e6395411 100644 --- a/src/zen/tests/pinned/browser_pinned_nounload_reset.js +++ b/src/zen/tests/pinned/browser_pinned_nounload_reset.js @@ -9,38 +9,48 @@ add_task(async function test_NoUnload_Changed_Pinned() { }); let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); - await BrowserTestUtils.withNewTab({ gBrowser, url: "https://example.com/1" }, async (browser) => { - const tab = gBrowser.getTabForBrowser(browser); - gBrowser.pinTab(tab); + await BrowserTestUtils.withNewTab( + { gBrowser, url: "https://example.com/1" }, + async browser => { + const tab = gBrowser.getTabForBrowser(browser); + gBrowser.pinTab(tab); - BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); - await BrowserTestUtils.browserLoaded(browser, false, "https://example.com/2"); - await gBrowser.TabStateFlusher.flush(browser); - setTimeout(() => { - ok( - tab.hasAttribute("zen-pinned-changed"), - "The tab should have a zen-pinned-changed attribute after being pinned" + BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); + await BrowserTestUtils.browserLoaded( + browser, + false, + "https://example.com/2" ); - document.getElementById("cmd_close").doCommand(); - // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + await gBrowser.TabStateFlusher.flush(browser); setTimeout(() => { ok( - !tab.hasAttribute("zen-pinned-changed"), - "The tab should not have a zen-pinned-changed attribute after being closed" + tab.hasAttribute("zen-pinned-changed"), + "The tab should have a zen-pinned-changed attribute after being pinned" ); - ok(!tab.hasAttribute("discarded"), "The tab should not be discarded after being closed"); - Assert.notEqual( - tab, - gBrowser.selectedTab, - "The tab should not be selected after being closed" - ); - resolvePromise(); - }, 100); - }, 0); - await promise; - }); + document.getElementById("cmd_close").doCommand(); + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + setTimeout(() => { + ok( + !tab.hasAttribute("zen-pinned-changed"), + "The tab should not have a zen-pinned-changed attribute after being closed" + ); + ok( + !tab.hasAttribute("discarded"), + "The tab should not be discarded after being closed" + ); + Assert.notEqual( + tab, + gBrowser.selectedTab, + "The tab should not be selected after being closed" + ); + resolvePromise(); + }, 100); + }, 0); + await promise; + } + ); }); diff --git a/src/zen/tests/pinned/browser_pinned_reset_noswitch.js b/src/zen/tests/pinned/browser_pinned_reset_noswitch.js index 236d5bca9..87bc3342b 100644 --- a/src/zen/tests/pinned/browser_pinned_reset_noswitch.js +++ b/src/zen/tests/pinned/browser_pinned_reset_noswitch.js @@ -9,38 +9,48 @@ add_task(async function test_Unload_NoReset_Pinned() { }); let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); - await BrowserTestUtils.withNewTab({ gBrowser, url: "https://example.com/1" }, async (browser) => { - const tab = gBrowser.getTabForBrowser(browser); - gBrowser.pinTab(tab); + await BrowserTestUtils.withNewTab( + { gBrowser, url: "https://example.com/1" }, + async browser => { + const tab = gBrowser.getTabForBrowser(browser); + gBrowser.pinTab(tab); - BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); - await BrowserTestUtils.browserLoaded(browser, false, "https://example.com/2"); - await gBrowser.TabStateFlusher.flush(browser); - setTimeout(() => { - ok( - tab.hasAttribute("zen-pinned-changed"), - "The tab should have a zen-pinned-changed attribute after being pinned" + BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); + await BrowserTestUtils.browserLoaded( + browser, + false, + "https://example.com/2" ); - document.getElementById("cmd_close").doCommand(); - // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + await gBrowser.TabStateFlusher.flush(browser); setTimeout(() => { ok( - !tab.hasAttribute("zen-pinned-changed"), - "The tab should not have a zen-pinned-changed attribute after being closed" + tab.hasAttribute("zen-pinned-changed"), + "The tab should have a zen-pinned-changed attribute after being pinned" ); - ok(!tab.hasAttribute("discarded"), "The tab should not be discarded after being closed"); - Assert.strictEqual( - tab, - gBrowser.selectedTab, - "The tab should not be selected after being closed" - ); - resolvePromise(); - }, 100); - }, 0); - await promise; - }); + document.getElementById("cmd_close").doCommand(); + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + setTimeout(() => { + ok( + !tab.hasAttribute("zen-pinned-changed"), + "The tab should not have a zen-pinned-changed attribute after being closed" + ); + ok( + !tab.hasAttribute("discarded"), + "The tab should not be discarded after being closed" + ); + Assert.strictEqual( + tab, + gBrowser.selectedTab, + "The tab should not be selected after being closed" + ); + resolvePromise(); + }, 100); + }, 0); + await promise; + } + ); }); diff --git a/src/zen/tests/pinned/browser_pinned_switch.js b/src/zen/tests/pinned/browser_pinned_switch.js index 39a575110..c2e89e843 100644 --- a/src/zen/tests/pinned/browser_pinned_switch.js +++ b/src/zen/tests/pinned/browser_pinned_switch.js @@ -9,38 +9,48 @@ add_task(async function test_Unload_NoReset_Pinned() { }); let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); - await BrowserTestUtils.withNewTab({ gBrowser, url: "https://example.com/1" }, async (browser) => { - const tab = gBrowser.getTabForBrowser(browser); - gBrowser.pinTab(tab); + await BrowserTestUtils.withNewTab( + { gBrowser, url: "https://example.com/1" }, + async browser => { + const tab = gBrowser.getTabForBrowser(browser); + gBrowser.pinTab(tab); - BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); - await BrowserTestUtils.browserLoaded(browser, false, "https://example.com/2"); - await gBrowser.TabStateFlusher.flush(browser); - setTimeout(() => { - ok( - tab.hasAttribute("zen-pinned-changed"), - "The tab should have a zen-pinned-changed attribute after being pinned" + BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); + await BrowserTestUtils.browserLoaded( + browser, + false, + "https://example.com/2" ); - document.getElementById("cmd_close").doCommand(); - // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + await gBrowser.TabStateFlusher.flush(browser); setTimeout(() => { ok( tab.hasAttribute("zen-pinned-changed"), - "The tab should not have a zen-pinned-changed attribute after being closed" + "The tab should have a zen-pinned-changed attribute after being pinned" ); - ok(!tab.hasAttribute("discarded"), "The tab should not be discarded after being closed"); - Assert.notEqual( - tab, - gBrowser.selectedTab, - "The tab should not be selected after being closed" - ); - resolvePromise(); - }, 100); - }, 0); - await promise; - }); + document.getElementById("cmd_close").doCommand(); + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + setTimeout(() => { + ok( + tab.hasAttribute("zen-pinned-changed"), + "The tab should not have a zen-pinned-changed attribute after being closed" + ); + ok( + !tab.hasAttribute("discarded"), + "The tab should not be discarded after being closed" + ); + Assert.notEqual( + tab, + gBrowser.selectedTab, + "The tab should not be selected after being closed" + ); + resolvePromise(); + }, 100); + }, 0); + await promise; + } + ); }); diff --git a/src/zen/tests/pinned/browser_pinned_to_essential.js b/src/zen/tests/pinned/browser_pinned_to_essential.js index 9833ab6be..acdadaad3 100644 --- a/src/zen/tests/pinned/browser_pinned_to_essential.js +++ b/src/zen/tests/pinned/browser_pinned_to_essential.js @@ -5,11 +5,15 @@ add_task(async function test_Pinned_To_Essential() { let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "https://example.com/", true); + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "https://example.com/", + true + ); const newTab = gBrowser.selectedTab; gBrowser.pinTab(newTab); @@ -18,7 +22,8 @@ add_task(async function test_Pinned_To_Essential() { gZenPinnedTabManager.addToEssentials(newTab); ok( - newTab.hasAttribute("zen-essential") && newTab.parentNode.getAttribute("container") == "0", + newTab.hasAttribute("zen-essential") && + newTab.parentNode.getAttribute("container") == "0", "New tab should be marked as essential." ); diff --git a/src/zen/tests/pinned/browser_pinned_unload_changed.js b/src/zen/tests/pinned/browser_pinned_unload_changed.js index 6c9ae4c54..b2e0a1979 100644 --- a/src/zen/tests/pinned/browser_pinned_unload_changed.js +++ b/src/zen/tests/pinned/browser_pinned_unload_changed.js @@ -5,43 +5,55 @@ add_task(async function test_Unload_Changed_Pinned() { await SpecialPowers.pushPrefEnv({ - set: [["zen.pinned-tab-manager.close-shortcut-behavior", "reset-unload-switch"]], + set: [ + ["zen.pinned-tab-manager.close-shortcut-behavior", "reset-unload-switch"], + ], }); let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); - await BrowserTestUtils.withNewTab({ gBrowser, url: "https://example.com/1" }, async (browser) => { - const tab = gBrowser.getTabForBrowser(browser); - gBrowser.pinTab(tab); + await BrowserTestUtils.withNewTab( + { gBrowser, url: "https://example.com/1" }, + async browser => { + const tab = gBrowser.getTabForBrowser(browser); + gBrowser.pinTab(tab); - BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); - await BrowserTestUtils.browserLoaded(browser, false, "https://example.com/2"); - await gBrowser.TabStateFlusher.flush(browser); - setTimeout(() => { - ok( - tab.hasAttribute("zen-pinned-changed"), - "The tab should have a zen-pinned-changed attribute after being pinned" + BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); + await BrowserTestUtils.browserLoaded( + browser, + false, + "https://example.com/2" ); - document.getElementById("cmd_close").doCommand(); - // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + await gBrowser.TabStateFlusher.flush(browser); setTimeout(() => { ok( - !tab.hasAttribute("zen-pinned-changed"), - "The tab should not have a zen-pinned-changed attribute after being closed" + tab.hasAttribute("zen-pinned-changed"), + "The tab should have a zen-pinned-changed attribute after being pinned" ); + document.getElementById("cmd_close").doCommand(); + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + setTimeout(() => { + ok( + !tab.hasAttribute("zen-pinned-changed"), + "The tab should not have a zen-pinned-changed attribute after being closed" + ); - ok(tab.hasAttribute("discarded"), "The tab should not be discarded after being closed"); - Assert.notEqual( - tab, - gBrowser.selectedTab, - "The tab should not be selected after being closed" - ); - resolvePromise(); - }, 100); - }, 0); - await promise; - }); + ok( + tab.hasAttribute("discarded"), + "The tab should not be discarded after being closed" + ); + Assert.notEqual( + tab, + gBrowser.selectedTab, + "The tab should not be selected after being closed" + ); + resolvePromise(); + }, 100); + }, 0); + await promise; + } + ); }); diff --git a/src/zen/tests/pinned/browser_pinned_unload_noreset.js b/src/zen/tests/pinned/browser_pinned_unload_noreset.js index 099222447..308fde46d 100644 --- a/src/zen/tests/pinned/browser_pinned_unload_noreset.js +++ b/src/zen/tests/pinned/browser_pinned_unload_noreset.js @@ -9,39 +9,49 @@ add_task(async function test_Unload_NoReset_Pinned() { }); let resolvePromise; - const promise = new Promise((resolve) => { + const promise = new Promise(resolve => { resolvePromise = resolve; }); - await BrowserTestUtils.withNewTab({ gBrowser, url: "https://example.com/1" }, async (browser) => { - const tab = gBrowser.getTabForBrowser(browser); - gBrowser.pinTab(tab); + await BrowserTestUtils.withNewTab( + { gBrowser, url: "https://example.com/1" }, + async browser => { + const tab = gBrowser.getTabForBrowser(browser); + gBrowser.pinTab(tab); - BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); - await BrowserTestUtils.browserLoaded(browser, false, "https://example.com/2"); - await gBrowser.TabStateFlusher.flush(browser); - /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */ - setTimeout(() => { - ok( - tab.hasAttribute("zen-pinned-changed"), - "The tab should have a zen-pinned-changed attribute after being pinned" + BrowserTestUtils.startLoadingURIString(browser, "https://example.com/2"); + await BrowserTestUtils.browserLoaded( + browser, + false, + "https://example.com/2" ); - document.getElementById("cmd_close").doCommand(); + await gBrowser.TabStateFlusher.flush(browser); /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */ setTimeout(() => { ok( tab.hasAttribute("zen-pinned-changed"), - "The tab should not have a zen-pinned-changed attribute after being closed" + "The tab should have a zen-pinned-changed attribute after being pinned" ); - ok(tab.hasAttribute("discarded"), "The tab should not be discarded after being closed"); - Assert.notEqual( - tab, - gBrowser.selectedTab, - "The tab should not be selected after being closed" - ); - resolvePromise(); - }, 100); - }, 0); - await promise; - }); + document.getElementById("cmd_close").doCommand(); + /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */ + setTimeout(() => { + ok( + tab.hasAttribute("zen-pinned-changed"), + "The tab should not have a zen-pinned-changed attribute after being closed" + ); + ok( + tab.hasAttribute("discarded"), + "The tab should not be discarded after being closed" + ); + Assert.notEqual( + tab, + gBrowser.selectedTab, + "The tab should not be selected after being closed" + ); + resolvePromise(); + }, 100); + }, 0); + await promise; + } + ); }); diff --git a/src/zen/tests/split_view/browser_basic_split_view.js b/src/zen/tests/split_view/browser_basic_split_view.js index c1c39d480..2784052a7 100644 --- a/src/zen/tests/split_view/browser_basic_split_view.js +++ b/src/zen/tests/split_view/browser_basic_split_view.js @@ -19,7 +19,8 @@ add_task(async function test_Basic_Split_View() { add_task(async function test_Browser_Elements_Attributes() { await basicSplitNTabs(() => { Assert.equal( - document.querySelectorAll('.browserSidebarContainer[zen-split="true"]').length, + document.querySelectorAll('.browserSidebarContainer[zen-split="true"]') + .length, 2, "There should be two split browser sidebars" ); diff --git a/src/zen/tests/split_view/browser_split_browser_duplication.js b/src/zen/tests/split_view/browser_split_browser_duplication.js index 4355e2b0a..0b98821d1 100644 --- a/src/zen/tests/split_view/browser_split_browser_duplication.js +++ b/src/zen/tests/split_view/browser_split_browser_duplication.js @@ -17,20 +17,29 @@ add_task(async function test_Basic_Split_View_Duplication() { "There should be four tabs after pinning the second tab" ); await createSplitView([normal, pinned], "grid"); - ok(!pinned.group, "The pinned tab should not be in a split group after duplication"); + ok( + !pinned.group, + "The pinned tab should not be in a split group after duplication" + ); ok( normal.group.hasAttribute("split-view-group"), "The normal tab should be in a split group after duplication" ); const group = normal.group; for (const tab of group.tabs) { - Assert.ok(!tab.pinned, "All tabs in the split group should not be pinned after duplication"); + Assert.ok( + !tab.pinned, + "All tabs in the split group should not be pinned after duplication" + ); Assert.ok( tab.splitView, "All tabs in the split group should be in a split view after duplication" ); } - Assert.ok(!group.pinned, "The split group should not be pinned after duplication"); + Assert.ok( + !group.pinned, + "The split group should not be pinned after duplication" + ); for (const tab of [pinned, ...group.tabs]) { await BrowserTestUtils.removeTab(tab); } @@ -46,9 +55,16 @@ add_task(async function test_Split_View_Duplication_Both_Pinned() { gBrowser.pinTab(tab1); gBrowser.pinTab(tab2); await Promise.all([pinEvent1, pinEvent2]); - Assert.strictEqual(gBrowser.tabs.length, 4, "There should be four tabs after pinning both tabs"); + Assert.strictEqual( + gBrowser.tabs.length, + 4, + "There should be four tabs after pinning both tabs" + ); await createSplitView([tab1, tab2], "grid"); - ok(tab1.group, "The first pinned tab should be in a split group after duplication"); + ok( + tab1.group, + "The first pinned tab should be in a split group after duplication" + ); Assert.strictEqual( tab2.group, tab1.group, @@ -60,13 +76,19 @@ add_task(async function test_Split_View_Duplication_Both_Pinned() { "There should not be any duplicate tabs after pinning both tabs" ); for (const tab of tab1.group.tabs) { - Assert.ok(tab.pinned, "All tabs in the split group should be pinned after duplication"); + Assert.ok( + tab.pinned, + "All tabs in the split group should be pinned after duplication" + ); Assert.ok( tab.splitView, "All tabs in the split group should be in a split view after duplication" ); } - Assert.ok(tab1.group.pinned, "The split group should be pinned after duplication of both tabs"); + Assert.ok( + tab1.group.pinned, + "The split group should be pinned after duplication of both tabs" + ); for (const tab of tab1.group.tabs) { await BrowserTestUtils.removeTab(tab); } @@ -116,7 +138,7 @@ add_task(async function test_Split_View_Duplication_Essential() { const essentials = await Promise.all( [...Array(2)].map((_, i) => addTabTo(gBrowser, getUrlForNthTab(i + 1))) ); - essentials.forEach((tab) => { + essentials.forEach(tab => { gZenPinnedTabManager.addToEssentials(tab); }); Assert.strictEqual( @@ -131,8 +153,14 @@ add_task(async function test_Split_View_Duplication_Essential() { "There should be six tabs after creating a split view with two essential tabs" ); for (const tab of essentials) { - ok(!tab.group, "Each essential tab should not be in a split group after duplication"); - ok(!tab.splitView, "Each essential tab should not be in a split view after duplication"); + ok( + !tab.group, + "Each essential tab should not be in a split group after duplication" + ); + ok( + !tab.splitView, + "Each essential tab should not be in a split view after duplication" + ); } for (const tab of gBrowser.tabs) { if (existingTabs.includes(tab)) { diff --git a/src/zen/tests/split_view/browser_split_groups.js b/src/zen/tests/split_view/browser_split_groups.js index 7ba57d239..a3874c076 100644 --- a/src/zen/tests/split_view/browser_split_groups.js +++ b/src/zen/tests/split_view/browser_split_groups.js @@ -4,21 +4,34 @@ "use strict"; add_task(async function test_Basic_Split_Groups() { - await basicSplitNTabs(async (tabs) => { - ok(tabs[0].group.hasAttribute("split-view-group"), "The first tab should be in a split group"); - Assert.equal(tabs[0].group.tabs.length, 2, "The first split group should contain two tabs"); + await basicSplitNTabs(async tabs => { + ok( + tabs[0].group.hasAttribute("split-view-group"), + "The first tab should be in a split group" + ); + Assert.equal( + tabs[0].group.tabs.length, + 2, + "The first split group should contain two tabs" + ); }); }); add_task(async function test_Basic_Split_Groups_Pinning() { - await basicSplitNTabs(async (tabs) => { + await basicSplitNTabs(async tabs => { const group = tabs[0].group; - ok(group.hasAttribute("split-view-group"), "The first tab should be in a split group"); + ok( + group.hasAttribute("split-view-group"), + "The first tab should be in a split group" + ); const pinEvent = BrowserTestUtils.waitForEvent(tabs[0], "TabPinned"); gBrowser.pinTab(tabs[0]); await pinEvent; for (const tab of tabs) { - ok(tab.pinned, "All tabs in the split group should be pinned after pinning the first tab"); + ok( + tab.pinned, + "All tabs in the split group should be pinned after pinning the first tab" + ); Assert.strictEqual( tab.group, group, @@ -40,15 +53,21 @@ add_task(async function test_Basic_Split_Groups_Pinning() { "All tabs in the split group should remain in the same group after unpinning" ); } - ok(!group.pinned, "The split group should be unpinned after unpinning a tab"); + ok( + !group.pinned, + "The split group should be unpinned after unpinning a tab" + ); }); }); add_task(async function test_Basic_Unsplit_Group_Removed() { let group; - await basicSplitNTabs(async (tabs) => { + await basicSplitNTabs(async tabs => { group = tabs[0].group; }); ok(group, "The split group should exist"); - ok(!group.parentNode, "The split group should be removed from the DOM after unsplitting"); + ok( + !group.parentNode, + "The split group should be removed from the DOM after unsplitting" + ); }); diff --git a/src/zen/tests/split_view/browser_split_inset_checks.js b/src/zen/tests/split_view/browser_split_inset_checks.js index 30c544c34..e1e829681 100644 --- a/src/zen/tests/split_view/browser_split_inset_checks.js +++ b/src/zen/tests/split_view/browser_split_inset_checks.js @@ -6,7 +6,9 @@ add_task(async function test_Basic_Split_View_Inset() { let viewsToCheck = []; await basicSplitNTabs(() => { - viewsToCheck = document.querySelectorAll('.browserSidebarContainer[zen-split="true"]'); + viewsToCheck = document.querySelectorAll( + '.browserSidebarContainer[zen-split="true"]' + ); ok(viewsToCheck.length, "There should be split views present"); Assert.equal( viewsToCheck[0].style.inset, @@ -20,13 +22,19 @@ add_task(async function test_Basic_Split_View_Inset() { ); }); for (const view of viewsToCheck) { - Assert.equal(view.style.inset, "", "The unsplit view should not have correct inset style"); + Assert.equal( + view.style.inset, + "", + "The unsplit view should not have correct inset style" + ); } }); add_task(async function test_Horizontal_Split_Inset() { await basicSplitNTabs(() => { - const viewsToCheck = document.querySelectorAll('.browserSidebarContainer[zen-split="true"]'); + const viewsToCheck = document.querySelectorAll( + '.browserSidebarContainer[zen-split="true"]' + ); ok(viewsToCheck.length, "There should be split views present"); Assert.equal( viewsToCheck[0].style.inset, @@ -44,7 +52,9 @@ add_task(async function test_Horizontal_Split_Inset() { add_task(async function test_3_Splits_Grid_Inset() { await basicSplitNTabs( () => { - const viewsToCheck = document.querySelectorAll('.browserSidebarContainer[zen-split="true"]'); + const viewsToCheck = document.querySelectorAll( + '.browserSidebarContainer[zen-split="true"]' + ); ok(viewsToCheck.length, "There should be split views present"); Assert.equal( viewsToCheck[0].style.inset, diff --git a/src/zen/tests/split_view/browser_split_view_empty.js b/src/zen/tests/split_view/browser_split_view_empty.js index 1abe7342d..6fbddbd74 100644 --- a/src/zen/tests/split_view/browser_split_view_empty.js +++ b/src/zen/tests/split_view/browser_split_view_empty.js @@ -25,7 +25,7 @@ add_task(async function test_Split_View_Empty() { let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 0); EventUtils.synthesizeMouseAtCenter(result.element.row, {}); await waitForActivationPromise; - await new Promise((resolve) => { + await new Promise(resolve => { /* eslint-disable mozilla/no-arbitrary-setTimeout */ setTimeout(async () => { resolve(); @@ -36,8 +36,14 @@ add_task(async function test_Split_View_Empty() { gBrowser.tabpanels.hasAttribute("zen-split-view"), "The split view should not have crashed with two tabs in it" ); - ok(!gZenWorkspaces._emptyTab.splitView, "The empty tab should not be in split view"); - ok(!gZenWorkspaces._emptyTab.group, "The empty tab should not be in a group"); + ok( + !gZenWorkspaces._emptyTab.splitView, + "The empty tab should not be in split view" + ); + ok( + !gZenWorkspaces._emptyTab.group, + "The empty tab should not be in a group" + ); ok(selectedTab.splitView, "The selected tab should be in split view"); ok(originalTab.splitView, "The original tab should be in split view"); Assert.equal( diff --git a/src/zen/tests/split_view/browser_split_view_with_folders.js b/src/zen/tests/split_view/browser_split_view_with_folders.js index 2558d6980..6f2887819 100644 --- a/src/zen/tests/split_view/browser_split_view_with_folders.js +++ b/src/zen/tests/split_view/browser_split_view_with_folders.js @@ -13,13 +13,25 @@ add_task(async function test_Split_View_Inside_Folder() { gBrowser.pinTab(tab1); gBrowser.pinTab(tab2); await Promise.all([pinEvent1, pinEvent2]); - Assert.strictEqual(gBrowser.tabs.length, 4, "There should be four tabs after pinning both tabs"); + Assert.strictEqual( + gBrowser.tabs.length, + 4, + "There should be four tabs after pinning both tabs" + ); const folder = await gZenFolders.createFolder([tab1, tab2], { renameFolder: false, label: "test", }); - Assert.equal(tab1.group, folder, "The first pinned tab should be in the folder group"); - Assert.equal(tab2.group, folder, "The second pinned tab should be in the folder group"); + Assert.equal( + tab1.group, + folder, + "The first pinned tab should be in the folder group" + ); + Assert.equal( + tab2.group, + folder, + "The second pinned tab should be in the folder group" + ); await createSplitView([tab1, tab2], "grid"); Assert.strictEqual( tab2.group, @@ -30,8 +42,15 @@ add_task(async function test_Split_View_Inside_Folder() { tab1.group.hasAttribute("split-view-group"), "The first pinned tab should be in a split group after duplication" ); - Assert.ok(tab1.group.pinned, "The split group should be pinned after duplication of both tabs"); - Assert.equal(tab1.group.group, folder, "The split group should be the folder after duplication"); + Assert.ok( + tab1.group.pinned, + "The split group should be pinned after duplication of both tabs" + ); + Assert.equal( + tab1.group.group, + folder, + "The split group should be the folder after duplication" + ); const removeEvent = BrowserTestUtils.waitForEvent(window, "TabGroupRemoved"); folder.delete(); await removeEvent; diff --git a/src/zen/tests/split_view/browser_split_view_with_glance.js b/src/zen/tests/split_view/browser_split_view_with_glance.js index 3752f1a69..ced3d6bcd 100644 --- a/src/zen/tests/split_view/browser_split_view_with_glance.js +++ b/src/zen/tests/split_view/browser_split_view_with_glance.js @@ -9,7 +9,7 @@ const { openGlanceOnTab } = ChromeUtils.importESModule( add_task(async function test_Basic_Split_View_Glance() { await basicSplitNTabs(async () => { - await openGlanceOnTab(window, async (glanceTab) => { + await openGlanceOnTab(window, async glanceTab => { ok( glanceTab.hasAttribute("zen-glance-tab"), "The glance tab should have the zen-glance-tab attribute" @@ -23,23 +23,28 @@ add_task(async function test_Basic_Split_View_Glance() { }); add_task(async function test_Basic_Split_View_Glance_Expand() { - await basicSplitNTabs(async (tabs) => { + await basicSplitNTabs(async tabs => { await openGlanceOnTab( window, - async (glanceTab) => { + async glanceTab => { await gZenGlanceManager.fullyOpenGlance(); ok( !glanceTab.hasAttribute("zen-glance-tab"), "The glance tab should not have the zen-glance-tab attribute after expanding" ); - ok(!glanceTab.group, "The glance tab should not be in a split group after expanding"); + ok( + !glanceTab.group, + "The glance tab should not be in a split group after expanding" + ); for (const tab of tabs) { ok( tab.group.hasAttribute("split-view-group"), "All tabs in the split view should still be in a split group after expanding glance" ); } - const selectedBrowser = document.querySelectorAll(".browserSidebarContainer.deck-selected"); + const selectedBrowser = document.querySelectorAll( + ".browserSidebarContainer.deck-selected" + ); Assert.equal( selectedBrowser.length, 1, @@ -57,7 +62,9 @@ add_task(async function test_Basic_Split_View_Glance_No_More_Split() { async () => { await openGlanceOnTab(window, () => { Assert.strictEqual( - document.getElementById("cmd_zenGlanceSplit").getAttribute("disabled"), + document + .getElementById("cmd_zenGlanceSplit") + .getAttribute("disabled"), "true", "The split command should be disabled when glance is open" ); @@ -73,7 +80,7 @@ add_task(async function test_Basic_Split_View_Glance_Split() { gBrowser.selectedTab = tab; await openGlanceOnTab( window, - async (glanceTab) => { + async glanceTab => { const waitForSplitPromise = BrowserTestUtils.waitForEvent( window, "ZenViewSplitter:SplitViewActivated" diff --git a/src/zen/tests/split_view/head.js b/src/zen/tests/split_view/head.js index 47d7fe7c8..39549ad2a 100644 --- a/src/zen/tests/split_view/head.js +++ b/src/zen/tests/split_view/head.js @@ -3,7 +3,11 @@ "use strict"; -async function addTabTo(targetBrowser, url = "http://mochi.test:8888/", params = {}) { +async function addTabTo( + targetBrowser, + url = "http://mochi.test:8888/", + params = {} +) { params.skipAnimation = true; const tab = BrowserTestUtils.addTab(targetBrowser, url, params); const browser = targetBrowser.getBrowserForTab(tab); @@ -22,7 +26,7 @@ async function createSplitView(tabs, type = "grid") { ); gZenViewSplitter.splitTabs(tabs, type); await waitForActivationPromise; - await new Promise((resolve) => { + await new Promise(resolve => { setTimeout(async () => { resolve(); }, 100); diff --git a/src/zen/tests/tabs/browser_drag_drop_vertical.js b/src/zen/tests/tabs/browser_drag_drop_vertical.js index fcaa72f4c..5a2eb476f 100644 --- a/src/zen/tests/tabs/browser_drag_drop_vertical.js +++ b/src/zen/tests/tabs/browser_drag_drop_vertical.js @@ -9,8 +9,12 @@ const URL3 = "data:text/plain,tab3"; const threshold = Math.min( 1.0, - Math.max(0.5, Services.prefs.getIntPref("browser.tabs.dragDrop.moveOverThresholdPercent") / 100) + - 0.01 + Math.max( + 0.5, + Services.prefs.getIntPref( + "browser.tabs.dragDrop.moveOverThresholdPercent" + ) / 100 + ) + 0.01 ); /** @@ -36,7 +40,7 @@ async function drop(source, target, clientX, clientY, win) { * @param {Element} el * @returns {DOMRect} */ -const bounds = (el) => window.windowUtils.getBoundsWithoutFlushing(el); +const bounds = el => window.windowUtils.getBoundsWithoutFlushing(el); /** * Virtually drag and drop one tab strip item after another. @@ -71,7 +75,9 @@ async function dropBefore(itemToDrag, itemToDropBefore, win) { const midline = rect.left + 0.5 * rect.width; // Point where top edge of `itemToDrag` overlaps `itemToDropBefore` enough // for `itemToDrag` to come before. - const beforePoint = Math.floor(rect.top + (1 - threshold - 0.5) * rect.height); + const beforePoint = Math.floor( + rect.top + (1 - threshold - 0.5) * rect.height + ); const dragTo = beforePoint + sourceRect.height / 2; await drop(itemToDrag, itemToDropBefore, midline, dragTo, win); } @@ -81,7 +87,9 @@ async function dropBefore(itemToDrag, itemToDropBefore, win) { */ async function ensureNotOverflowing() { const tabHeight = Number.parseFloat( - getComputedStyle(gBrowser.tabs[0]).getPropertyValue("--tab-height-with-margin-padding") + getComputedStyle(gBrowser.tabs[0]).getPropertyValue( + "--tab-height-with-margin-padding" + ) ); const requiredTabSpace = tabHeight * gBrowser.tabs.length; const scrollboxWidth = gBrowser.tabContainer.arrowScrollbox.scrollSize; @@ -118,7 +126,11 @@ add_setup(async () => { BrowserTestUtils.removeTab(tabToRemove); const emptyTab = gBrowser.tabs[0]; - Assert.deepEqual(gBrowser.tabs, [emptyTab, tab1, tab2, tab3], "confirm tabs' starting order"); + Assert.deepEqual( + gBrowser.tabs, + [emptyTab, tab1, tab2, tab3], + "confirm tabs' starting order" + ); await ensureNotOverflowing(); diff --git a/src/zen/tests/tabs/browser_tabs_cycle_by_attribute.js b/src/zen/tests/tabs/browser_tabs_cycle_by_attribute.js index 5e7934134..acd73939c 100644 --- a/src/zen/tests/tabs/browser_tabs_cycle_by_attribute.js +++ b/src/zen/tests/tabs/browser_tabs_cycle_by_attribute.js @@ -16,7 +16,10 @@ const URL6 = "data:text/plain,tab6"; * @param {MozTabbrowserTab} tab - tab to select */ async function selectTab(tab) { - const onSelect = BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "TabSelect"); + const onSelect = BrowserTestUtils.waitForEvent( + gBrowser.tabContainer, + "TabSelect" + ); gBrowser.selectedTab = tab; await onSelect; } @@ -37,22 +40,29 @@ add_setup(async () => { gZenPinnedTabManager.addToEssentials(tabs.slice(0, 3)); await BrowserTestUtils.waitForCondition( - () => tabs.slice(0, 3).every((tab) => tab.hasAttribute("zen-essential")), + () => tabs.slice(0, 3).every(tab => tab.hasAttribute("zen-essential")), "all essentials ready" ); - const essentialTabs = gBrowser.tabs.filter((tab) => tab.hasAttribute("zen-essential")); + const essentialTabs = gBrowser.tabs.filter(tab => + tab.hasAttribute("zen-essential") + ); Assert.equal(essentialTabs.length, 3, "3 essential tabs created"); const workspaceTabs = gBrowser.tabs.filter( - (tab) => !tab.hasAttribute("zen-essential") && !tab.hasAttribute("zen-empty-tab") + tab => + !tab.hasAttribute("zen-essential") && !tab.hasAttribute("zen-empty-tab") + ); + Assert.equal( + workspaceTabs.length, + 3, + "3 workspace tabs created, excluding empty tab" ); - Assert.equal(workspaceTabs.length, 3, "3 workspace tabs created, excluding empty tab"); registerCleanupFunction(async () => { // replace the default new tab in the test window addTabTo(gBrowser, "about:blank"); - tabs.forEach((element) => { + tabs.forEach(element => { BrowserTestUtils.removeTab(element); }); await SpecialPowers.popPrefEnv(); @@ -64,7 +74,9 @@ add_task(async function cycleTabsByAttribute() { set: [["zen.tabs.ctrl-tab.ignore-essential-tabs", true]], }); - const essentialTabs = gBrowser.tabs.filter((tab) => tab.hasAttribute("zen-essential")); + const essentialTabs = gBrowser.tabs.filter(tab => + tab.hasAttribute("zen-essential") + ); await selectTab(essentialTabs[0]); gBrowser.tabContainer.advanceSelectedTab(1, true); @@ -77,7 +89,8 @@ add_task(async function cycleTabsByAttribute() { ); const workspaceTabs = gBrowser.tabs.filter( - (tab) => !tab.hasAttribute("zen-essential") && !tab.hasAttribute("zen-empty-tab") + tab => + !tab.hasAttribute("zen-essential") && !tab.hasAttribute("zen-empty-tab") ); await selectTab(workspaceTabs[0]); diff --git a/src/zen/tests/tabs/browser_tabs_empty_checks.js b/src/zen/tests/tabs/browser_tabs_empty_checks.js index 0694275dc..f383b5330 100644 --- a/src/zen/tests/tabs/browser_tabs_empty_checks.js +++ b/src/zen/tests/tabs/browser_tabs_empty_checks.js @@ -7,7 +7,10 @@ add_task(async function test_Empty_Tab_Transparent() { const emptyTab = gZenWorkspaces._emptyTab; ok(emptyTab, "Empty tab should exist"); ok(emptyTab.parentElement, "Empty tab should be in the DOM"); - ok(emptyTab.hasAttribute("zen-empty-tab"), "Empty tab should have the zen-empty-tab attribute"); + ok( + emptyTab.hasAttribute("zen-empty-tab"), + "Empty tab should have the zen-empty-tab attribute" + ); ok( emptyTab.linkedBrowser.hasAttribute("transparent"), "Empty tab should have the transparent attribute" @@ -15,14 +18,20 @@ add_task(async function test_Empty_Tab_Transparent() { }); add_task(async function test_Empty_Tab_Always_First() { - ok(gBrowser.tabs[0].hasAttribute("zen-empty-tab"), "First tab should be the empty tab"); + ok( + gBrowser.tabs[0].hasAttribute("zen-empty-tab"), + "First tab should be the empty tab" + ); await BrowserTestUtils.withNewTab( { gBrowser, url: "https://example.com", }, async () => { - ok(gBrowser.tabs[0].hasAttribute("zen-empty-tab"), "First tab should be the empty tab"); + ok( + gBrowser.tabs[0].hasAttribute("zen-empty-tab"), + "First tab should be the empty tab" + ); } ); }); diff --git a/src/zen/tests/tabs/head.js b/src/zen/tests/tabs/head.js index 61d6a9aa5..76104f295 100644 --- a/src/zen/tests/tabs/head.js +++ b/src/zen/tests/tabs/head.js @@ -37,7 +37,11 @@ function updateTabContextMenu(tab) { var evt = new Event(""); tab.dispatchEvent(evt); menu.openPopup(tab, "end_after", 0, 0, true, false, evt); - is(window.TabContextMenu.contextTab, tab, "TabContextMenu context is the expected tab"); + is( + window.TabContextMenu.contextTab, + tab, + "TabContextMenu context is the expected tab" + ); menu.hidePopup(); } @@ -63,7 +67,11 @@ async function addTab(url = "http://mochi.test:8888/", params) { return addTabTo(gBrowser, url, params); } -async function addTabTo(targetBrowser, url = "http://mochi.test:8888/", params = {}) { +async function addTabTo( + targetBrowser, + url = "http://mochi.test:8888/", + params = {} +) { params.skipAnimation = true; const tab = BrowserTestUtils.addTab(targetBrowser, url, params); const browser = targetBrowser.getBrowserForTab(tab); @@ -106,7 +114,7 @@ async function wait_for_tab_playing_event(tab, expectPlaying) { ok(true, "The tab should " + (expectPlaying ? "" : "not ") + "be playing"); return true; } - return BrowserTestUtils.waitForEvent(tab, "TabAttrModified", false, (event) => { + return BrowserTestUtils.waitForEvent(tab, "TabAttrModified", false, event => { if (event.detail.changed.includes("soundplaying")) { is( tab.hasAttribute("soundplaying"), @@ -126,20 +134,29 @@ async function wait_for_tab_playing_event(tab, expectPlaying) { async function wait_for_tab_media_blocked_event(tab, expectMediaBlocked) { if (tab.activeMediaBlocked == expectMediaBlocked) { - ok(true, "The tab should " + (expectMediaBlocked ? "" : "not ") + "be activemedia-blocked"); + ok( + true, + "The tab should " + + (expectMediaBlocked ? "" : "not ") + + "be activemedia-blocked" + ); return true; } - return BrowserTestUtils.waitForEvent(tab, "TabAttrModified", false, (event) => { + return BrowserTestUtils.waitForEvent(tab, "TabAttrModified", false, event => { if (event.detail.changed.includes("activemedia-blocked")) { is( tab.hasAttribute("activemedia-blocked"), expectMediaBlocked, - "The tab should " + (expectMediaBlocked ? "" : "not ") + "be activemedia-blocked" + "The tab should " + + (expectMediaBlocked ? "" : "not ") + + "be activemedia-blocked" ); is( tab.activeMediaBlocked, expectMediaBlocked, - "The tab should " + (expectMediaBlocked ? "" : "not ") + "be activemedia-blocked" + "The tab should " + + (expectMediaBlocked ? "" : "not ") + + "be activemedia-blocked" ); return true; } @@ -212,7 +229,7 @@ function leave_icon(icon) { let everMutedTabs = new WeakSet(); function get_wait_for_mute_promise(tab, expectMuted) { - return BrowserTestUtils.waitForEvent(tab, "TabAttrModified", false, (event) => { + return BrowserTestUtils.waitForEvent(tab, "TabAttrModified", false, event => { if ( event.detail.changed.includes("muted") || event.detail.changed.includes("activemedia-blocked") @@ -232,7 +249,11 @@ function get_wait_for_mute_promise(tab, expectMuted) { everMutedTabs.add(tab); is(tab.muteReason, null, "The tab should have a null muteReason value"); } else { - is(tab.muteReason, undefined, "The tab should have an undefined muteReason value"); + is( + tab.muteReason, + undefined, + "The tab should have an undefined muteReason value" + ); } return true; } @@ -306,7 +327,10 @@ async function dragAndDrop( return tab1.elementIndex != originalIndex; }, "Waiting for tab position to be updated"); } else if (destWindow != origWindow) { - await BrowserTestUtils.waitForCondition(() => tab1.closing, "Waiting for tab closing"); + await BrowserTestUtils.waitForCondition( + () => tab1.closing, + "Waiting for tab closing" + ); } } @@ -360,7 +384,8 @@ function test_url_for_process_types({ const CHROME_PROCESS = E10SUtils.NOT_REMOTE; const WEB_CONTENT_PROCESS = E10SUtils.WEB_REMOTE_TYPE; const PRIVILEGEDABOUT_CONTENT_PROCESS = E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE; - const PRIVILEGEDMOZILLA_CONTENT_PROCESS = E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE; + const PRIVILEGEDMOZILLA_CONTENT_PROCESS = + E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE; const EXTENSION_PROCESS = E10SUtils.EXTENSION_REMOTE_TYPE; is( @@ -369,33 +394,57 @@ function test_url_for_process_types({ "Check URL in chrome process." ); is( - E10SUtils.canLoadURIInRemoteType(url, /* fission */ false, WEB_CONTENT_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url, + /* fission */ false, + WEB_CONTENT_PROCESS + ), webContentResult, "Check URL in web content process." ); is( - E10SUtils.canLoadURIInRemoteType(url, /* fission */ false, PRIVILEGEDABOUT_CONTENT_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url, + /* fission */ false, + PRIVILEGEDABOUT_CONTENT_PROCESS + ), privilegedAboutContentResult, "Check URL in privileged about content process." ); is( - E10SUtils.canLoadURIInRemoteType(url, /* fission */ false, PRIVILEGEDMOZILLA_CONTENT_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url, + /* fission */ false, + PRIVILEGEDMOZILLA_CONTENT_PROCESS + ), privilegedMozillaContentResult, "Check URL in privileged mozilla content process." ); is( - E10SUtils.canLoadURIInRemoteType(url, /* fission */ false, EXTENSION_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url, + /* fission */ false, + EXTENSION_PROCESS + ), extensionProcessResult, "Check URL in extension process." ); is( - E10SUtils.canLoadURIInRemoteType(url + "#foo", /* fission */ false, CHROME_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url + "#foo", + /* fission */ false, + CHROME_PROCESS + ), chromeResult, "Check URL with ref in chrome process." ); is( - E10SUtils.canLoadURIInRemoteType(url + "#foo", /* fission */ false, WEB_CONTENT_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url + "#foo", + /* fission */ false, + WEB_CONTENT_PROCESS + ), webContentResult, "Check URL with ref in web content process." ); @@ -418,18 +467,30 @@ function test_url_for_process_types({ "Check URL with ref in privileged mozilla content process." ); is( - E10SUtils.canLoadURIInRemoteType(url + "#foo", /* fission */ false, EXTENSION_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url + "#foo", + /* fission */ false, + EXTENSION_PROCESS + ), extensionProcessResult, "Check URL with ref in extension process." ); is( - E10SUtils.canLoadURIInRemoteType(url + "?foo", /* fission */ false, CHROME_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url + "?foo", + /* fission */ false, + CHROME_PROCESS + ), chromeResult, "Check URL with query in chrome process." ); is( - E10SUtils.canLoadURIInRemoteType(url + "?foo", /* fission */ false, WEB_CONTENT_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url + "?foo", + /* fission */ false, + WEB_CONTENT_PROCESS + ), webContentResult, "Check URL with query in web content process." ); @@ -452,18 +513,30 @@ function test_url_for_process_types({ "Check URL with query in privileged mozilla content process." ); is( - E10SUtils.canLoadURIInRemoteType(url + "?foo", /* fission */ false, EXTENSION_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url + "?foo", + /* fission */ false, + EXTENSION_PROCESS + ), extensionProcessResult, "Check URL with query in extension process." ); is( - E10SUtils.canLoadURIInRemoteType(url + "?foo#bar", /* fission */ false, CHROME_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url + "?foo#bar", + /* fission */ false, + CHROME_PROCESS + ), chromeResult, "Check URL with query and ref in chrome process." ); is( - E10SUtils.canLoadURIInRemoteType(url + "?foo#bar", /* fission */ false, WEB_CONTENT_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url + "?foo#bar", + /* fission */ false, + WEB_CONTENT_PROCESS + ), webContentResult, "Check URL with query and ref in web content process." ); @@ -486,7 +559,11 @@ function test_url_for_process_types({ "Check URL with query and ref in privileged mozilla content process." ); is( - E10SUtils.canLoadURIInRemoteType(url + "?foo#bar", /* fission */ false, EXTENSION_PROCESS), + E10SUtils.canLoadURIInRemoteType( + url + "?foo#bar", + /* fission */ false, + EXTENSION_PROCESS + ), extensionProcessResult, "Check URL with query and ref in extension process." ); @@ -505,7 +582,10 @@ function fileURL(filename) { * Get a http URL for the local file name. */ function httpURL(filename, host = "https://example.com/") { - let root = getRootDirectory(gTestPath).replace("chrome://mochitests/content/", host); + let root = getRootDirectory(gTestPath).replace( + "chrome://mochitests/content/", + host + ); return root + filename; } @@ -533,9 +613,16 @@ async function getContextMenu(triggerNode, contextMenuId) { let win = triggerNode.ownerGlobal; triggerNode.scrollIntoView({ behavior: "instant" }); const contextMenu = win.document.getElementById(contextMenuId); - const contextMenuShown = BrowserTestUtils.waitForPopupEvent(contextMenu, "shown"); + const contextMenuShown = BrowserTestUtils.waitForPopupEvent( + contextMenu, + "shown" + ); - EventUtils.synthesizeMouseAtCenter(triggerNode, { type: "contextmenu", button: 2 }, win); + EventUtils.synthesizeMouseAtCenter( + triggerNode, + { type: "contextmenu", button: 2 }, + win + ); await contextMenuShown; return contextMenu; } diff --git a/src/zen/tests/ub-actions/browser_ub_actions_search.js b/src/zen/tests/ub-actions/browser_ub_actions_search.js index ba961eab2..82e2f7b69 100644 --- a/src/zen/tests/ub-actions/browser_ub_actions_search.js +++ b/src/zen/tests/ub-actions/browser_ub_actions_search.js @@ -20,10 +20,16 @@ add_task(async function test_Ub_Actions_Search() { waitForFocus, value: label, }); - await new Promise((resolve) => + await new Promise(resolve => setTimeout(async () => { - let index = typeof action.suggestedIndex === "number" ? action.suggestedIndex : Infinity; - let { result } = await UrlbarTestUtils.getRowAt(window, Math.min(index, 1)); + let index = + typeof action.suggestedIndex === "number" + ? action.suggestedIndex + : Infinity; + let { result } = await UrlbarTestUtils.getRowAt( + window, + Math.min(index, 1) + ); Assert.equal(result.providerName, "ZenUrlbarProviderGlobalActions"); Assert.equal(result.payload.title, label); resolve(); diff --git a/src/zen/tests/urlbar/browser_floating_urlbar.js b/src/zen/tests/urlbar/browser_floating_urlbar.js index 02c52ce26..303ad0c7c 100644 --- a/src/zen/tests/urlbar/browser_floating_urlbar.js +++ b/src/zen/tests/urlbar/browser_floating_urlbar.js @@ -18,7 +18,10 @@ add_task(async function test_Floating_Urlbar() { value: "https://example.com/", }); - ok(gURLBar.textbox.hasAttribute("zen-floating-urlbar"), "URL bar should be in floating mode"); + ok( + gURLBar.textbox.hasAttribute("zen-floating-urlbar"), + "URL bar should be in floating mode" + ); }); add_task(async function test_Click_Shoudnt_FLoat_Urlbar() { diff --git a/src/zen/tests/urlbar/browser_issue_7385.js b/src/zen/tests/urlbar/browser_issue_7385.js index 991d1931f..b77187e9d 100644 --- a/src/zen/tests/urlbar/browser_issue_7385.js +++ b/src/zen/tests/urlbar/browser_issue_7385.js @@ -21,7 +21,11 @@ add_task(async function test_Selection_Remains_Double_Toolbar() { await selectWithMouseDrag(100, 200); Assert.greater(gURLBar.selectionStart, 0, "Selection start is positive."); - Assert.greater(gURLBar.selectionEnd, gURLBar.selectionStart, "Selection is not empty."); + Assert.greater( + gURLBar.selectionEnd, + gURLBar.selectionStart, + "Selection is not empty." + ); Assert.equal(gURLBar.value, untrimmedValue, `Value should be untrimmed`); diff --git a/src/zen/tests/urlbar/head.js b/src/zen/tests/urlbar/head.js index cb89787fa..29eaebf2c 100644 --- a/src/zen/tests/urlbar/head.js +++ b/src/zen/tests/urlbar/head.js @@ -35,13 +35,19 @@ function selectWithMouseDrag(fromX, toX, win = window) { { type: "mousemove" }, target.ownerGlobal ); - EventUtils.synthesizeMouse(target, toX, rect.height / 2, { type: "mouseup" }, target.ownerGlobal); + EventUtils.synthesizeMouse( + target, + toX, + rect.height / 2, + { type: "mouseup" }, + target.ownerGlobal + ); return promise; } function goToMultipleLayouts(callback) { // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve) => { + return new Promise(async resolve => { await SpecialPowers.pushPrefEnv({ set: [["zen.view.use-single-toolbar", false]], }); diff --git a/src/zen/tests/welcome/browser_welcome.js b/src/zen/tests/welcome/browser_welcome.js index c9f773050..5e8e48540 100644 --- a/src/zen/tests/welcome/browser_welcome.js +++ b/src/zen/tests/welcome/browser_welcome.js @@ -7,7 +7,7 @@ add_task(async function test_Welcome_Steps() { const selectedTab = gBrowser.selectedTab; - await new Promise((resolve) => { + await new Promise(resolve => { setTimeout(async () => { await waitForFocus(); await EventUtils.synthesizeMouseAtCenter( @@ -28,7 +28,9 @@ add_task(async function test_Welcome_Steps() { const welcomeContent = document.getElementById("zen-welcome-page-content"); - for (const button of document.querySelectorAll("#zen-welcome-page-sidebar-buttons button")) { + for (const button of document.querySelectorAll( + "#zen-welcome-page-sidebar-buttons button" + )) { Assert.notStrictEqual( getComputedStyle(button).pointerEvents, "none", @@ -54,11 +56,14 @@ add_task(async function test_Welcome_Steps() { await EventUtils.synthesizeMouseAtCenter(welcomeContent.children[1], {}); - await new Promise((resolve) => { + await new Promise(resolve => { setTimeout(async () => { let engineName = await Services.search.getDefault(); const selectedLabel = welcomeContent.children[1]; - ok(selectedLabel.querySelector("input").checked, "The selected label should be checked"); + ok( + selectedLabel.querySelector("input").checked, + "The selected label should be checked" + ); Assert.equal( engineName.name, selectedLabel.querySelector("label").textContent.trim(), @@ -71,7 +76,7 @@ add_task(async function test_Welcome_Steps() { await goNextWelcomePage("zen-generic-next"); ok(true, "Welcome Search Step Test Finished"); - await new Promise((resolve) => { + await new Promise(resolve => { setTimeout(async () => { const essentials = welcomeContent.querySelector( "#zen-welcome-initial-essentials-browser-sidebar-essentials" @@ -102,12 +107,15 @@ add_task(async function test_Welcome_Steps() { essentials[2].getAttribute("data-url"), ]; for (const url of urlsToCheck) { - ok(url.startsWith("https://"), `The URL "${url}" should start with "https://"`); + ok( + url.startsWith("https://"), + `The URL "${url}" should start with "https://"` + ); } await goNextWelcomePage("zen-generic-next"); - await new Promise((r) => { + await new Promise(r => { setTimeout(async () => { for (const url of urlsToCheck) { ok( @@ -128,7 +136,7 @@ add_task(async function test_Welcome_Steps() { await goNextWelcomePage("zen-welcome-start-browsing"); ok(true, "Welcome Finish Step Test Finished"); - await new Promise((resolve) => { + await new Promise(resolve => { setTimeout(async () => { Assert.greater( gBrowser._numZenEssentials, @@ -136,14 +144,20 @@ add_task(async function test_Welcome_Steps() { "There should be more than 3 Zen Essentials after the welcome process" ); Assert.equal( - gBrowser.tabs.filter((tab) => tab.pinned && !tab.hasAttribute("zen-essential")).length, + gBrowser.tabs.filter( + tab => tab.pinned && !tab.hasAttribute("zen-essential") + ).length, 3, "There should be 3 pinned tabs after the welcome process" ); gBrowser.selectedTab = selectedTab; const groups = gBrowser.tabGroups; - Assert.equal(groups.length, 1, "There should be one tab group after the welcome process"); + Assert.equal( + groups.length, + 1, + "There should be one tab group after the welcome process" + ); const group = groups[0]; Assert.equal( group.tabs.length, @@ -165,7 +179,11 @@ add_task(async function test_Welcome_Steps() { tab.hasAttribute("zen-workspace-id"), "Pinned tabs should have a zen-workspace-id attribute" ); - Assert.equal(tab.group, group, "Pinned tabs should belong to the first tab group"); + Assert.equal( + tab.group, + group, + "Pinned tabs should belong to the first tab group" + ); } } } diff --git a/src/zen/tests/welcome/head.js b/src/zen/tests/welcome/head.js index 0ac97496d..f5ad262ae 100644 --- a/src/zen/tests/welcome/head.js +++ b/src/zen/tests/welcome/head.js @@ -4,7 +4,7 @@ async function goNextWelcomePage(l10nId) { /* eslint-disable-next-line no-async-promise-executor */ - await new Promise(async (resolve) => { + await new Promise(async resolve => { const button = document.querySelector( `#zen-welcome-page-sidebar-buttons button[data-l10n-id="${l10nId}"]` ); @@ -21,5 +21,5 @@ async function goNextWelcomePage(l10nId) { } async function waitForFocus(...args) { - await new Promise((resolve) => SimpleTest.waitForFocus(resolve, ...args)); + await new Promise(resolve => SimpleTest.waitForFocus(resolve, ...args)); } diff --git a/src/zen/tests/window_sync/browser_sync_tab_label.js b/src/zen/tests/window_sync/browser_sync_tab_label.js index 9e89f0690..731922093 100644 --- a/src/zen/tests/window_sync/browser_sync_tab_label.js +++ b/src/zen/tests/window_sync/browser_sync_tab_label.js @@ -10,7 +10,11 @@ add_task(async function test_SimpleLabelChange() { await runSyncAction( () => { gBrowser._setTabLabel(newTab, newLabel); - Assert.equal(newTab.label, newLabel, "The original tab label should be changed"); + Assert.equal( + newTab.label, + newLabel, + "The original tab label should be changed" + ); }, async () => { Assert.equal( diff --git a/src/zen/tests/window_sync/browser_sync_tab_open.js b/src/zen/tests/window_sync/browser_sync_tab_open.js index e92d1eebf..7dddf1834 100644 --- a/src/zen/tests/window_sync/browser_sync_tab_open.js +++ b/src/zen/tests/window_sync/browser_sync_tab_open.js @@ -9,6 +9,10 @@ add_task(async function test_SimpleTabOpen() { let otherTab = gZenWindowSync.getItemFromWindow(win, tabId); Assert.ok(otherTab, "The opened tab should be found in the synced window"); Assert.ok(newTab._zenContentsVisible, "The opened tab should be visible"); - Assert.equal(otherTab.id, tabId, "The opened tab ID should match the synced tab ID"); + Assert.equal( + otherTab.id, + tabId, + "The opened tab ID should match the synced tab ID" + ); }); }); diff --git a/src/zen/tests/window_sync/head.js b/src/zen/tests/window_sync/head.js index cc0e06b94..036d6c585 100644 --- a/src/zen/tests/window_sync/head.js +++ b/src/zen/tests/window_sync/head.js @@ -11,7 +11,7 @@ async function withNewSyncedWindow(action) { } async function runSyncAction(action, callback, type) { - await new Promise((resolve) => { + await new Promise(resolve => { window.gZenWindowSync.addSyncHandler(async function handler(aEvent) { if (aEvent.type === type) { window.gZenWindowSync.removeSyncHandler(handler); @@ -29,12 +29,14 @@ function getTabState(tab) { async function withNewTabAndWindow(action) { let newTab = null; - await withNewSyncedWindow(async (win) => { + await withNewSyncedWindow(async win => { await runSyncAction( () => { - newTab = gBrowser.addTrustedTab("https://example.com/", { inBackground: true }); + newTab = gBrowser.addTrustedTab("https://example.com/", { + inBackground: true, + }); }, - async (aEvent) => { + async aEvent => { Assert.equal(aEvent.type, "TabOpen", "Event type should be TabOpen"); await action(newTab, win); }, diff --git a/src/zen/tests/workspaces/browser_basic_workspaces.js b/src/zen/tests/workspaces/browser_basic_workspaces.js index 8c63657ae..e3ec5f6e3 100644 --- a/src/zen/tests/workspaces/browser_basic_workspaces.js +++ b/src/zen/tests/workspaces/browser_basic_workspaces.js @@ -25,7 +25,11 @@ add_task(async function test_Check_Creation() { await gZenWorkspaces.removeWorkspace(gZenWorkspaces.activeWorkspace); const workspacesAfterRemove = gZenWorkspaces.getWorkspaces(); - Assert.strictEqual(workspacesAfterRemove.workspaces.length, 1, "One workspace should exist."); + Assert.strictEqual( + workspacesAfterRemove.workspaces.length, + 1, + "One workspace should exist." + ); Assert.strictEqual( workspacesAfterRemove[0].uuid, currentWorkspaceUUID, diff --git a/src/zen/tests/workspaces/browser_change_to_empty.js b/src/zen/tests/workspaces/browser_change_to_empty.js index 0f4ca68bf..558500d33 100644 --- a/src/zen/tests/workspaces/browser_change_to_empty.js +++ b/src/zen/tests/workspaces/browser_change_to_empty.js @@ -25,6 +25,10 @@ add_task(async function test_Change_To_Empty() { ); const workspacesAfterRemove = gZenWorkspaces.getWorkspaces(); - Assert.strictEqual(workspacesAfterRemove.length, 1, "One workspace should exist."); + Assert.strictEqual( + workspacesAfterRemove.length, + 1, + "One workspace should exist." + ); Assert.strictEqual(gBrowser.tabs.length, 2, "There should be two tabs."); }); diff --git a/src/zen/tests/workspaces/browser_double_click_newtab.js b/src/zen/tests/workspaces/browser_double_click_newtab.js index 024d114f1..422ddde01 100644 --- a/src/zen/tests/workspaces/browser_double_click_newtab.js +++ b/src/zen/tests/workspaces/browser_double_click_newtab.js @@ -14,12 +14,16 @@ add_setup(async function () { }); add_task(async function test_Check_Creation() { - const placeToDoubleClick = gZenWorkspaces.activeWorkspaceElement.querySelector( - ".zen-workspace-empty-space" - ); + const placeToDoubleClick = + gZenWorkspaces.activeWorkspaceElement.querySelector( + ".zen-workspace-empty-space" + ); ok(placeToDoubleClick, "We should have found the place to double click."); EventUtils.sendMouseEvent({ type: "dblclick" }, placeToDoubleClick, window); - await TestUtils.waitForCondition(() => gBrowser.tabs.length === 3, "New tab should be opened."); + await TestUtils.waitForCondition( + () => gBrowser.tabs.length === 3, + "New tab should be opened." + ); ok(true, "New tab should be opened."); await BrowserTestUtils.removeTab(gBrowser.tabs[1]); Assert.strictEqual(gBrowser.tabs.length, 2, "There should be one tab."); diff --git a/src/zen/tests/workspaces/browser_issue_10455.js b/src/zen/tests/workspaces/browser_issue_10455.js index 7deefcee8..a4cf4115d 100644 --- a/src/zen/tests/workspaces/browser_issue_10455.js +++ b/src/zen/tests/workspaces/browser_issue_10455.js @@ -36,8 +36,15 @@ add_task(async function test_Issue_10455_Dont_Close() { ); newWindow.BrowserCommands.closeTabOrWindow(); - Assert.strictEqual(newWindow.gBrowser.tabs.length, 1, "Window should still have one tab"); - ok(newWindow.gBrowser.selectedTab.hasAttribute("zen-empty-tab"), "Tab should be a zen empty tab"); + Assert.strictEqual( + newWindow.gBrowser.tabs.length, + 1, + "Window should still have one tab" + ); + ok( + newWindow.gBrowser.selectedTab.hasAttribute("zen-empty-tab"), + "Tab should be a zen empty tab" + ); ok(!newWindow.closing, "Window should be closing"); await BrowserTestUtils.closeWindow(newWindow); diff --git a/src/zen/tests/workspaces/browser_issue_8699.js b/src/zen/tests/workspaces/browser_issue_8699.js index ae71c2a73..70e48df7b 100644 --- a/src/zen/tests/workspaces/browser_issue_8699.js +++ b/src/zen/tests/workspaces/browser_issue_8699.js @@ -26,13 +26,17 @@ add_task(async function test_Restore_Closed_Tabs() { gBrowser.removeTabs(tabsToClose); gBrowser.selectedTab = selected; await TabStateFlusher.flushWindow(window); - await new Promise((resolve) => { + await new Promise(resolve => { Assert.equal( gBrowser.selectedTab, selected, "Current tab should still be selected after closing tabs" ); - Assert.equal(gBrowser.tabs.length, 2, "There should be one tab left after closing all tabs"); + Assert.equal( + gBrowser.tabs.length, + 2, + "There should be one tab left after closing all tabs" + ); SessionWindowUI.restoreLastClosedTabOrWindowOrSession(window); ok(!selected.selected, "Current tab should not be selected after restore"); Assert.equal( @@ -42,10 +46,15 @@ add_task(async function test_Restore_Closed_Tabs() { ); resolve(); }); - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "about:blank", true, { - skipAnimation: true, - }); - for (const tab of gBrowser.tabs.filter((t) => !tabsToIgnore.includes(t))) { + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "about:blank", + true, + { + skipAnimation: true, + } + ); + for (const tab of gBrowser.tabs.filter(t => !tabsToIgnore.includes(t))) { await BrowserTestUtils.removeTab(tab); } }); diff --git a/src/zen/tests/workspaces/browser_issue_9900.js b/src/zen/tests/workspaces/browser_issue_9900.js index b0fdc3518..aca2c4a74 100644 --- a/src/zen/tests/workspaces/browser_issue_9900.js +++ b/src/zen/tests/workspaces/browser_issue_9900.js @@ -16,7 +16,11 @@ add_task(async function test_Invalid_Workspace_Emoji() { name: "👍 test test", }; const icon = gZenWorkspaces.getWorkspaceIcon(fakeWorkspace); - Assert.equal(icon, "👍", "Emoji icon should match the first character of the workspace name"); + Assert.equal( + icon, + "👍", + "Emoji icon should match the first character of the workspace name" + ); }); add_task(async function test_Invalid_Workspace_Name() { @@ -24,7 +28,11 @@ add_task(async function test_Invalid_Workspace_Name() { name: "my workspace", }; const icon = gZenWorkspaces.getWorkspaceIcon(fakeWorkspace); - Assert.equal(icon, "M", "Icon should match the first character of the workspace name"); + Assert.equal( + icon, + "M", + "Icon should match the first character of the workspace name" + ); }); add_task(async function test_Invalid_Workspace_Name() { diff --git a/src/zen/tests/workspaces/browser_overflow_scrollbox.js b/src/zen/tests/workspaces/browser_overflow_scrollbox.js index f177350ec..2d39b4a33 100644 --- a/src/zen/tests/workspaces/browser_overflow_scrollbox.js +++ b/src/zen/tests/workspaces/browser_overflow_scrollbox.js @@ -9,33 +9,56 @@ add_task(async function test_Check_ScrollBox_Overflow() { const selectedTab = gBrowser.selectedTab; const tabsToRemove = []; while (!scrollbox.overflowing) { - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "https://example.com/", true); + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "https://example.com/", + true + ); tabsToRemove.push(gBrowser.selectedTab); } // An extra tab to ensure the scrollbox is overflowing - await BrowserTestUtils.openNewForegroundTab(window.gBrowser, "https://example.com/", true); + await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + "https://example.com/", + true + ); tabsToRemove.push(gBrowser.selectedTab); - ok(scrollbox.overflowing, "The scrollbox should be overflowing after opening enough tabs"); + ok( + scrollbox.overflowing, + "The scrollbox should be overflowing after opening enough tabs" + ); - Assert.strictEqual(scrollbox.scrollPosition, 0, "The scrollbox should be scrolled to the top"); + Assert.strictEqual( + scrollbox.scrollPosition, + 0, + "The scrollbox should be scrolled to the top" + ); gBrowser.selectedTab = gBrowser.tabs[gBrowser.tabs.length - 1]; - await new Promise((resolve) => { + await new Promise(resolve => { /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */ setTimeout(() => { - Assert.greater(scrollbox.scrollPosition, 0, "The scrollbox should be scrolled to the bottom"); + Assert.greater( + scrollbox.scrollPosition, + 0, + "The scrollbox should be scrolled to the bottom" + ); resolve(); }, 200); }); gBrowser.selectedTab = gBrowser.visibleTabs[0]; - await new Promise((resolve) => { + await new Promise(resolve => { /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */ setTimeout(() => { // TODO: Use a real scroll position check instead of a hardcoded value - Assert.less(scrollbox.scrollPosition, 60, "The scrollbox should be scrolled to the top"); + Assert.less( + scrollbox.scrollPosition, + 60, + "The scrollbox should be scrolled to the top" + ); resolve(); }, 200); }); diff --git a/src/zen/tests/workspaces/browser_private_mode_startup.js b/src/zen/tests/workspaces/browser_private_mode_startup.js index 4e0224b71..b6bad1984 100644 --- a/src/zen/tests/workspaces/browser_private_mode_startup.js +++ b/src/zen/tests/workspaces/browser_private_mode_startup.js @@ -8,7 +8,7 @@ add_task(async function test_Private_Mode_Startup() { private: true, }); await privateWindow.gZenWorkspaces.promiseInitialized; - await new Promise((resolve) => { + await new Promise(resolve => { /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */ setTimeout(() => { Assert.equal( diff --git a/src/zen/tests/workspaces/browser_workspace_bookmarks.js b/src/zen/tests/workspaces/browser_workspace_bookmarks.js index 1c83dbf42..b3c7f2749 100644 --- a/src/zen/tests/workspaces/browser_workspace_bookmarks.js +++ b/src/zen/tests/workspaces/browser_workspace_bookmarks.js @@ -19,7 +19,8 @@ function getToolbarNodeForItemGuid(aItemTitle) { } function isToolbarVisible(aToolbar) { - let hidingAttribute = aToolbar.getAttribute("type") == "menubar" ? "autohide" : "collapsed"; + let hidingAttribute = + aToolbar.getAttribute("type") == "menubar" ? "autohide" : "collapsed"; let hidingValue = aToolbar.getAttribute(hidingAttribute)?.toLowerCase(); // Check for both collapsed="true" and collapsed="collapsed" return hidingValue !== "true" && hidingValue !== hidingAttribute; @@ -27,7 +28,9 @@ function isToolbarVisible(aToolbar) { function promiseSetToolbarVisibility(aToolbar, aVisible) { if (isToolbarVisible(aToolbar) != aVisible) { - let visibilityChanged = TestUtils.waitForCondition(() => aToolbar.collapsed != aVisible); + let visibilityChanged = TestUtils.waitForCondition( + () => aToolbar.collapsed != aVisible + ); setToolbarVisibility(aToolbar, aVisible, undefined, false); return visibilityChanged; } @@ -41,14 +44,19 @@ async function changeWorkspaceForBookmark(aBookmark, aWorkspace) { false, async function openPropertiesDialog() { let placesContext = document.getElementById("placesContext"); - let promisePopup = BrowserTestUtils.waitForEvent(placesContext, "popupshown"); + let promisePopup = BrowserTestUtils.waitForEvent( + placesContext, + "popupshown" + ); EventUtils.synthesizeMouseAtCenter(toolbarNode, { button: 2, type: "contextmenu", }); await promisePopup; - let properties = document.getElementById("placesContext_show_bookmark:info"); + let properties = document.getElementById( + "placesContext_show_bookmark:info" + ); placesContext.activateItem(properties, {}); }, async function test(dialogWin) { @@ -63,7 +71,9 @@ async function changeWorkspaceForBookmark(aBookmark, aWorkspace) { openWorkspaceSelectorButton.click(); await setTimeout(() => {}, 100); - const checkbox = dialogWin.document.querySelector(`input[value="${aWorkspace.uuid}"]`); + const checkbox = dialogWin.document.querySelector( + `input[value="${aWorkspace.uuid}"]` + ); // Check the checkbox for the workspace. checkbox.click(); @@ -128,7 +138,7 @@ add_task(async function test_workspace_bookmark() { await changeWorkspaceForBookmark(bookmark1, firstWorkspace); - await new Promise((resolve) => setTimeout(resolve, 100)); + await new Promise(resolve => setTimeout(resolve, 100)); const bookmark2 = await PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.toolbarGuid, title: "workspace2", @@ -138,14 +148,14 @@ add_task(async function test_workspace_bookmark() { await changeWorkspaceForBookmark(bookmark2, secondWorkspace); await gZenWorkspaces.changeWorkspace(secondWorkspace); - await new Promise((resolve) => setTimeout(resolve, 100)); + await new Promise(resolve => setTimeout(resolve, 100)); const toolbarNode1 = getToolbarNodeForItemGuid(bookmark1.title); const toolbarNode2 = getToolbarNodeForItemGuid(bookmark2.title); ok(!toolbarNode1, "Bookmark1 should not be in the toolbar"); ok(toolbarNode2, "Bookmark2 should be in the toolbar"); await gZenWorkspaces.changeWorkspace(firstWorkspace); - await new Promise((resolve) => setTimeout(resolve, 100)); + await new Promise(resolve => setTimeout(resolve, 100)); const toolbarNode3 = getToolbarNodeForItemGuid(bookmark1.title); const toolbarNode4 = getToolbarNodeForItemGuid(bookmark2.title); ok(toolbarNode3, "Bookmark1 should be in the toolbar"); diff --git a/src/zen/tests/workspaces/browser_workspace_unload.js b/src/zen/tests/workspaces/browser_workspace_unload.js index 7497a0ef1..ec3954962 100644 --- a/src/zen/tests/workspaces/browser_workspace_unload.js +++ b/src/zen/tests/workspaces/browser_workspace_unload.js @@ -5,7 +5,8 @@ // verify that workspace unloading works add_task(async function test_UnloadWorkspace_WithMultipleTabs() { - const workspaceId = await gZenWorkspaces.createAndSaveWorkspace("Test Workspace 1"); + const workspaceId = + await gZenWorkspaces.createAndSaveWorkspace("Test Workspace 1"); const tabs = []; for (let i = 0; i < 3; i++) { const tab = await BrowserTestUtils.openNewForegroundTab( @@ -35,7 +36,8 @@ add_task(async function test_UnloadWorkspace_WithMultipleTabs() { // verify that essential tabs are not unloaded add_task(async function test_UnloadWorkspace_WithEssentialTabs() { - const workspaceId = await gZenWorkspaces.createAndSaveWorkspace("Test Workspace 2"); + const workspaceId = + await gZenWorkspaces.createAndSaveWorkspace("Test Workspace 2"); const regularTab = await BrowserTestUtils.openNewForegroundTab( window.gBrowser, @@ -59,7 +61,10 @@ add_task(async function test_UnloadWorkspace_WithEssentialTabs() { ok(regularTab.hasAttribute("pending"), "Regular tab should be unloaded"); ok(!regularTab.linkedPanel, "Regular tab should not have linked panel"); - ok(!essentialTab.hasAttribute("pending"), "Essential tab should not be unloaded"); + ok( + !essentialTab.hasAttribute("pending"), + "Essential tab should not be unloaded" + ); ok(essentialTab.linkedPanel, "Essential tab should still have linked panel"); await gZenWorkspaces.removeWorkspace(workspaceId); @@ -70,7 +75,9 @@ add_task(async function test_UnloadWorkspace_TargetedWorkspaceIsolation() { const inActiveWorkspaceId = await gZenWorkspaces.createAndSaveWorkspace( "Test In-Active Workspace" ); - const activeWorkspaceId = await gZenWorkspaces.createAndSaveWorkspace("Test Active Workspace"); + const activeWorkspaceId = await gZenWorkspaces.createAndSaveWorkspace( + "Test Active Workspace" + ); const inActiveWorkspaceTabs = []; for (let i = 0; i < 2; i++) { @@ -99,13 +106,25 @@ add_task(async function test_UnloadWorkspace_TargetedWorkspaceIsolation() { await gZenWorkspaces.unloadWorkspace(); // this unloads the latest created workspace -> activeWorkspaceId for (const tab of activeWorkspaceTabs) { - ok(tab.hasAttribute("pending"), "Active workspace tab should be pending after unload"); - ok(!tab.linkedPanel, "Active workspace tab should not have linked panel after unload"); + ok( + tab.hasAttribute("pending"), + "Active workspace tab should be pending after unload" + ); + ok( + !tab.linkedPanel, + "Active workspace tab should not have linked panel after unload" + ); } for (const tab of inActiveWorkspaceTabs) { - ok(!tab.hasAttribute("pending"), "In-Active workspace tab should NOT be pending after unload"); - ok(tab.linkedPanel, "In-Active workspace tab should still have linked panel after unload"); + ok( + !tab.hasAttribute("pending"), + "In-Active workspace tab should NOT be pending after unload" + ); + ok( + tab.linkedPanel, + "In-Active workspace tab should still have linked panel after unload" + ); } await gZenWorkspaces.removeWorkspace(inActiveWorkspaceId); diff --git a/src/zen/tests/workspaces/head.js b/src/zen/tests/workspaces/head.js index 4f0f97f8a..d8d160c20 100644 --- a/src/zen/tests/workspaces/head.js +++ b/src/zen/tests/workspaces/head.js @@ -8,8 +8,14 @@ const TAB_STATE_NEEDS_RESTORE = 1; const TAB_STATE_RESTORING = 2; const ROOT = getRootDirectory(gTestPath); -const HTTPROOT = ROOT.replace("chrome://mochitests/content/", "https://example.com/"); -const HTTPSROOT = ROOT.replace("chrome://mochitests/content/", "https://example.com/"); +const HTTPROOT = ROOT.replace( + "chrome://mochitests/content/", + "https://example.com/" +); +const HTTPSROOT = ROOT.replace( + "chrome://mochitests/content/", + "https://example.com/" +); const { SessionSaver } = ChromeUtils.importESModule( "resource:///modules/sessionstore/SessionSaver.sys.mjs" @@ -102,13 +108,13 @@ function promiseTabState(tab, state) { } function promiseWindowRestoring(win) { - return new Promise((resolve) => + return new Promise(resolve => win.addEventListener("SSWindowRestoring", resolve, { once: true }) ); } function promiseWindowRestored(win) { - return new Promise((resolve) => + return new Promise(resolve => win.addEventListener("SSWindowRestored", resolve, { once: true }) ); } @@ -119,7 +125,11 @@ async function setBrowserState(state, win = window) { } async function setWindowState(win, state, overwrite = false) { - ss.setWindowState(win, typeof state != "string" ? JSON.stringify(state) : state, overwrite); + ss.setWindowState( + win, + typeof state != "string" ? JSON.stringify(state) : state, + overwrite + ); await promiseWindowRestored(win); } @@ -164,12 +174,13 @@ function waitForTopic(aTopic, aTimeout, aCallback) { * otherwise, it is passed |false|. */ function waitForSaveState(aCallback) { - let timeout = 100 + Services.prefs.getIntPref("browser.sessionstore.interval"); + let timeout = + 100 + Services.prefs.getIntPref("browser.sessionstore.interval"); return waitForTopic("sessionstore-state-write-complete", timeout, aCallback); } function promiseSaveState() { return new Promise((resolve, reject) => { - waitForSaveState((isSuccessful) => { + waitForSaveState(isSuccessful => { if (!isSuccessful) { reject(new Error("Save state timeout")); } else { @@ -208,7 +219,11 @@ var promiseForEachSessionRestoreFile = async function (cb) { } }; -function promiseBrowserLoaded(aBrowser, ignoreSubFrames = true, wantLoad = null) { +function promiseBrowserLoaded( + aBrowser, + ignoreSubFrames = true, + wantLoad = null +) { return BrowserTestUtils.browserLoaded(aBrowser, !ignoreSubFrames, wantLoad); } @@ -224,7 +239,7 @@ function whenWindowLoaded(aWindow, aCallback) { ); } function promiseWindowLoaded(aWindow) { - return new Promise((resolve) => whenWindowLoaded(aWindow, resolve)); + return new Promise(resolve => whenWindowLoaded(aWindow, resolve)); } var gUniqueCounter = 0; @@ -357,12 +372,12 @@ function forgetClosedTabs(win) { function forgetSavedTabGroups() { const tabGroups = ss.getSavedTabGroups(); - tabGroups.forEach((tabGroup) => ss.forgetSavedTabGroup(tabGroup.id)); + tabGroups.forEach(tabGroup => ss.forgetSavedTabGroup(tabGroup.id)); } function forgetClosedTabGroups(win) { const tabGroups = ss.getClosedTabGroups(win); - tabGroups.forEach((tabGroup) => ss.forgetClosedTabGroup(win, tabGroup.id)); + tabGroups.forEach(tabGroup => ss.forgetClosedTabGroup(win, tabGroup.id)); } /** @@ -385,10 +400,15 @@ function whenNewWindowLoaded(aOptions, aCallback) { url = "about:privatebrowsing"; } - let win = openDialog(AppConstants.BROWSER_CHROME_URL, "", "chrome,all,dialog=no" + features, url); + let win = openDialog( + AppConstants.BROWSER_CHROME_URL, + "", + "chrome,all,dialog=no" + features, + url + ); let delayedStartup = promiseDelayedStartupFinished(win); - let browserLoaded = new Promise((resolve) => { + let browserLoaded = new Promise(resolve => { if (url == "about:blank") { resolve(); return; @@ -407,7 +427,7 @@ function whenNewWindowLoaded(aOptions, aCallback) { Promise.all([delayedStartup, browserLoaded]).then(() => aCallback(win)); } function promiseNewWindowLoaded(aOptions) { - return new Promise((resolve) => whenNewWindowLoaded(aOptions, resolve)); + return new Promise(resolve => whenNewWindowLoaded(aOptions, resolve)); } /** @@ -427,7 +447,7 @@ function whenDelayedStartupFinished(aWindow, aCallback) { }, "browser-delayed-startup-finished"); } function promiseDelayedStartupFinished(aWindow) { - return new Promise((resolve) => whenDelayedStartupFinished(aWindow, resolve)); + return new Promise(resolve => whenDelayedStartupFinished(aWindow, resolve)); } function promiseTabRestored(tab) { @@ -462,7 +482,7 @@ function modifySessionStorage(browser, storageData, storageOptions = {}) { let isClearing = !keys.size; let storage = frame.sessionStorage; - return new Promise((resolve) => { + return new Promise(resolve => { docShell.chromeEventHandler.addEventListener( "MozSessionStorageChanged", function onStorageChanged(event) { @@ -504,7 +524,7 @@ function popPrefs() { function setScrollPosition(bc, x, y) { return SpecialPowers.spawn(bc, [x, y], (childX, childY) => { - return new Promise((resolve) => { + return new Promise(resolve => { content.addEventListener( "mozvisualscroll", function onScroll(event) { @@ -563,7 +583,7 @@ function setPropertyOfFormField(browserContext, selector, propName, newValue) { } function promiseOnHistoryReplaceEntry(browser) { - return new Promise((resolve) => { + return new Promise(resolve => { let sessionHistory = browser.browsingContext?.sessionHistory; if (sessionHistory) { var historyListener = { @@ -578,7 +598,10 @@ function promiseOnHistoryReplaceEntry(browser) { resolve(); }, - QueryInterface: ChromeUtils.generateQI(["nsISHistoryListener", "nsISupportsWeakReference"]), + QueryInterface: ChromeUtils.generateQI([ + "nsISHistoryListener", + "nsISupportsWeakReference", + ]), }; sessionHistory.addSHistoryListener(historyListener); @@ -622,7 +645,7 @@ function openAndCloseTab(window, url) { */ function promiseSessionStoreLoads(numberOfLoads) { let loadsSeen = 0; - return new Promise((resolve) => { + return new Promise(resolve => { Services.obs.addObserver(function obs(browser) { loadsSeen++; if (loadsSeen == numberOfLoads) { @@ -652,7 +675,11 @@ async function openTabMenuFor(tab) { let tabMenu = tab.ownerDocument.getElementById("tabContextMenu"); let tabMenuShown = BrowserTestUtils.waitForEvent(tabMenu, "popupshown"); - EventUtils.synthesizeMouseAtCenter(tab, { type: "contextmenu" }, tab.ownerGlobal); + EventUtils.synthesizeMouseAtCenter( + tab, + { type: "contextmenu" }, + tab.ownerGlobal + ); await tabMenuShown; return tabMenu; @@ -670,9 +697,9 @@ var withBookmarksDialog = async function (autoCancel, openFn, taskFn, closeFn) { isSubDialog: true, }); } else { - dialogPromise = BrowserTestUtils.domWindowOpenedAndLoaded(null, (win) => { + dialogPromise = BrowserTestUtils.domWindowOpenedAndLoaded(null, win => { return win.document.documentURI.startsWith(dialogUrl); - }).then((win) => { + }).then(win => { ok( win.location.href.startsWith(dialogUrl), "The bookmark properties dialog is open: " + win.location.href @@ -681,7 +708,7 @@ var withBookmarksDialog = async function (autoCancel, openFn, taskFn, closeFn) { return SimpleTest.promiseFocus(win).then(() => win); }); } - let dialogClosePromise = dialogPromise.then((win) => { + let dialogClosePromise = dialogPromise.then(win => { if (!hasDialogBox) { return BrowserTestUtils.domWindowClosed(win); } diff --git a/src/zen/urlbar/ZenSiteDataPanel.sys.mjs b/src/zen/urlbar/ZenSiteDataPanel.sys.mjs index 608d5a858..9bb07bf3d 100644 --- a/src/zen/urlbar/ZenSiteDataPanel.sys.mjs +++ b/src/zen/urlbar/ZenSiteDataPanel.sys.mjs @@ -34,7 +34,9 @@ export class nsZenSiteDataPanel { this.window.gUnifiedExtensions._panel = this.unifiedPanel; // Remove the old permissions dialog - this.document.getElementById("unified-extensions-panel-template")?.remove(); + this.document + .getElementById("unified-extensions-panel-template") + ?.remove(); } else { this.extensionsPanel = this.#initExtensionsPanel(); } @@ -52,7 +54,9 @@ export class nsZenSiteDataPanel { this.anchor = button.querySelector("#zen-site-data-icon-button"); this.document.getElementById("identity-icon-box").before(button); - this.extensionsPanelButton = this.document.getElementById("unified-extensions-button"); + this.extensionsPanelButton = this.document.getElementById( + "unified-extensions-button" + ); this.window.gUnifiedExtensions._button = ADDONS_BUTTONS_HIDDEN ? this.anchor : this.extensionsPanelButton; @@ -69,8 +73,12 @@ export class nsZenSiteDataPanel { #initEventListeners() { this.unifiedPanel.addEventListener("popupshowing", this); - this.document.getElementById("zen-site-data-manage-addons").addEventListener("click", this); - this.document.getElementById("zen-site-data-settings-more").addEventListener("click", this); + this.document + .getElementById("zen-site-data-manage-addons") + .addEventListener("click", this); + this.document + .getElementById("zen-site-data-settings-more") + .addEventListener("click", this); this.anchor.addEventListener("click", this); const kCommandIDs = [ "zen-site-data-header-share", @@ -126,7 +134,7 @@ export class nsZenSiteDataPanel { #initContextMenuEventListener() { const kCommands = { - context_zenClearSiteData: (event) => { + context_zenClearSiteData: event => { this.window.gIdentityHandler.clearSiteData(event); }, context_zenOpenGetAddons: () => { @@ -195,8 +203,11 @@ export class nsZenSiteDataPanel { #setSiteHeader() { { - const button = this.document.getElementById("zen-site-data-header-reader-mode"); - const urlbarButton = this.window.document.getElementById("reader-mode-button"); + const button = this.document.getElementById( + "zen-site-data-header-reader-mode" + ); + const urlbarButton = + this.window.document.getElementById("reader-mode-button"); const isActive = urlbarButton?.hasAttribute("readeractive"); const isVisible = !urlbarButton?.hidden || isActive; @@ -206,10 +217,15 @@ export class nsZenSiteDataPanel { } else { button.classList.remove("active"); } - this.document.l10n.setAttributes(button, urlbarButton?.getAttribute("data-l10n-id")); + this.document.l10n.setAttributes( + button, + urlbarButton?.getAttribute("data-l10n-id") + ); } { - const button = this.document.getElementById("zen-site-data-header-bookmark"); + const button = this.document.getElementById( + "zen-site-data-header-bookmark" + ); const isPageBookmarked = this.#currentPageIsBookmarked; if (isPageBookmarked) { @@ -253,7 +269,10 @@ export class nsZenSiteDataPanel { let identity; if (gIdentityHandler._pageExtensionPolicy) { - this.document.l10n.setAttributes(button, "zen-site-data-security-info-extension"); + this.document.l10n.setAttributes( + button, + "zen-site-data-security-info-extension" + ); identity = "extension"; } else if ( gIdentityHandler._uriHasHost && @@ -262,10 +281,16 @@ export class nsZenSiteDataPanel { !gIdentityHandler._isCertErrorPage && !gIdentityHandler._isAboutHttpsOnlyErrorPage ) { - this.document.l10n.setAttributes(button, "zen-site-data-security-info-secure"); + this.document.l10n.setAttributes( + button, + "zen-site-data-security-info-secure" + ); identity = "secure"; } else { - this.document.l10n.setAttributes(button, "zen-site-data-security-info-not-secure"); + this.document.l10n.setAttributes( + button, + "zen-site-data-security-info-not-secure" + ); identity = "not-secure"; } @@ -279,14 +304,18 @@ export class nsZenSiteDataPanel { const section = list.closest(".zen-site-data-section"); // show permission icons - let permissions = SitePermissions.getAllPermissionDetailsForBrowser(gBrowser.selectedBrowser); + let permissions = SitePermissions.getAllPermissionDetailsForBrowser( + gBrowser.selectedBrowser + ); // Don't display origin-keyed 3rdPartyStorage permissions that are covered by // site-keyed 3rdPartyFrameStorage permissions. let thirdPartyStorageSites = new Set( permissions .map(function (permission) { - let [id, key] = permission.id.split(SitePermissions.PERM_KEY_DELIMITER); + let [id, key] = permission.id.split( + SitePermissions.PERM_KEY_DELIMITER + ); if (id == "3rdPartyFrameStorage" || id == "3rdPartyStorage") { return key; } @@ -313,7 +342,7 @@ export class nsZenSiteDataPanel { this._sharingState = gBrowser.selectedTab._sharingState; if (this._sharingState?.geo) { - let geoPermission = permissions.find((perm) => perm.id === "geo"); + let geoPermission = permissions.find(perm => perm.id === "geo"); if (!geoPermission) { permissions.push({ id: "geo", @@ -325,7 +354,7 @@ export class nsZenSiteDataPanel { } if (this._sharingState?.xr) { - let xrPermission = permissions.find((perm) => perm.id === "xr"); + let xrPermission = permissions.find(perm => perm.id === "xr"); if (!xrPermission) { permissions.push({ id: "xr", @@ -344,7 +373,9 @@ export class nsZenSiteDataPanel { if (webrtcState[id]) { let found = false; for (let permission of permissions) { - let [permId] = permission.id.split(SitePermissions.PERM_KEY_DELIMITER); + let [permId] = permission.id.split( + SitePermissions.PERM_KEY_DELIMITER + ); if (permId != id || permission.state != SitePermissions.ALLOW) { continue; } @@ -374,7 +405,9 @@ export class nsZenSiteDataPanel { ) { permissions.push({ id: "site-protection", - state: gProtectionsHandler.hasException ? SitePermissions.BLOCK : SitePermissions.ALLOW, + state: gProtectionsHandler.hasException + ? SitePermissions.BLOCK + : SitePermissions.ALLOW, scope: SitePermissions.SCOPE_PERSISTENT, }); } @@ -398,7 +431,11 @@ export class nsZenSiteDataPanel { continue; } - let [item, isCrossSiteCookie] = this.#createPermissionItem(id, key, permission); + let [item, isCrossSiteCookie] = this.#createPermissionItem( + id, + key, + permission + ); if (item) { if (isCrossSiteCookie) { crossSiteCookieElements.push(item); @@ -415,7 +452,8 @@ export class nsZenSiteDataPanel { separator.after(elem); } - separator.hidden = !settingElements.length || !crossSiteCookieElements.length; + separator.hidden = + !settingElements.length || !crossSiteCookieElements.length; section.hidden = list.childElementCount < 2; // only the separator } @@ -453,10 +491,16 @@ export class nsZenSiteDataPanel { container.setAttribute("align", "center"); container.setAttribute("role", "group"); - container.setAttribute("state", permission.state == SitePermissions.ALLOW ? "allow" : "block"); + container.setAttribute( + "state", + permission.state == SitePermissions.ALLOW ? "allow" : "block" + ); let img = this.document.createXULElement("toolbarbutton"); - img.classList.add("permission-popup-permission-icon", "zen-site-data-permission-icon"); + img.classList.add( + "permission-popup-permission-icon", + "zen-site-data-permission-icon" + ); img.setAttribute("closemenu", "none"); if (this.#iconMap[id]) { img.classList.add(`zen-permission-${this.#iconMap[id]}-icon`); @@ -472,24 +516,36 @@ export class nsZenSiteDataPanel { nameLabel.setAttribute("flex", "1"); nameLabel.setAttribute("class", "permission-popup-permission-label"); if (isCrossSiteCookie) { - this.document.l10n.setAttributes(nameLabel, "zen-site-data-setting-cross-site"); + this.document.l10n.setAttributes( + nameLabel, + "zen-site-data-setting-cross-site" + ); } else { let label = SitePermissions.getPermissionLabel(permission.id); if (label) { nameLabel.textContent = label; } else { - this.document.l10n.setAttributes(nameLabel, "zen-site-data-setting-" + idNoSuffix); + this.document.l10n.setAttributes( + nameLabel, + "zen-site-data-setting-" + idNoSuffix + ); } } labelContainer.appendChild(nameLabel); let stateLabel = this.document.createXULElement("label"); - stateLabel.setAttribute("class", "zen-permission-popup-permission-state-label"); + stateLabel.setAttribute( + "class", + "zen-permission-popup-permission-state-label" + ); if (isCrossSiteCookie) { // The key should be the site for cross-site cookies. stateLabel.textContent = key; } else { - stateLabel.setAttribute("data-l10n-id", this.#getPermissionStateLabelId(permission)); + stateLabel.setAttribute( + "data-l10n-id", + this.#getPermissionStateLabelId(permission) + ); } labelContainer.appendChild(stateLabel); @@ -502,7 +558,9 @@ export class nsZenSiteDataPanel { #openGetAddons() { const { switchToTabHavingURI } = this.window; - let amoUrl = Services.urlFormatter.formatURLPref("extensions.getAddons.link.url"); + let amoUrl = Services.urlFormatter.formatURLPref( + "extensions.getAddons.link.url" + ); switchToTabHavingURI(amoUrl, true); } @@ -585,16 +643,26 @@ export class nsZenSiteDataPanel { gProtectionsHandler.enableForCurrentPage(); } } else { - SitePermissions.setForPrincipal(gBrowser.contentPrincipal, permission.id, newState); + SitePermissions.setForPrincipal( + gBrowser.contentPrincipal, + permission.id, + newState + ); } const isCrossSiteCookie = permission.id.startsWith("3rdPartyStorage"); - label.parentNode.setAttribute("state", newState == SitePermissions.ALLOW ? "allow" : "block"); + label.parentNode.setAttribute( + "state", + newState == SitePermissions.ALLOW ? "allow" : "block" + ); label._permission.state = newState; if (!isCrossSiteCookie) { label .querySelector(".zen-permission-popup-permission-state-label") - .setAttribute("data-l10n-id", this.#getPermissionStateLabelId(label._permission)); + .setAttribute( + "data-l10n-id", + this.#getPermissionStateLabelId(label._permission) + ); } } @@ -627,7 +695,9 @@ export class nsZenSiteDataPanel { if (!item) { break; } - const label = item.querySelector(".permission-popup-permission-label-container"); + const label = item.querySelector( + ".permission-popup-permission-label-container" + ); if (label?._permission) { this.#onPermissionClick(label); } @@ -659,13 +729,15 @@ export class nsZenSiteDataPanel { Services.prefs.setBoolPref(kPref, false); const { gBrowser, gZenWorkspaces } = this.window; await gZenWorkspaces.promiseInitialized; - await new Promise((resolve) => { + await new Promise(resolve => { const checkEmptyTab = () => { if (!gBrowser.selectedTab.hasAttribute("zen-empty-tab")) { resolve(); return; } - this.window.addEventListener("TabSelect", checkEmptyTab, { once: true }); + this.window.addEventListener("TabSelect", checkEmptyTab, { + once: true, + }); }; checkEmptyTab(); }); diff --git a/src/zen/urlbar/ZenUBActionsProvider.sys.mjs b/src/zen/urlbar/ZenUBActionsProvider.sys.mjs index 0f9a1a9e0..8adf50107 100644 --- a/src/zen/urlbar/ZenUBActionsProvider.sys.mjs +++ b/src/zen/urlbar/ZenUBActionsProvider.sys.mjs @@ -80,7 +80,12 @@ function payloadAndSimpleHighlights(tokens, payloadInfo) { payload[name] = valueOrValues; } } - if (!payload.title && !payload.fallbackTitle && payload.url && typeof payload.url == "string") { + if ( + !payload.title && + !payload.fallbackTitle && + payload.url && + typeof payload.url == "string" + ) { // If there's no title, show the domain as the title. Not all valid URLs // have a domain. highlightTypes.title = UrlbarUtils.HIGHLIGHT.TYPED; @@ -107,7 +112,9 @@ function payloadAndSimpleHighlights(tokens, payloadInfo) { for (let [name, highlightType] of Object.entries(highlightTypes)) { let value = payload[name]; let highlights = Array.isArray(value) - ? value.map((subval) => UrlbarUtils.getTokenMatches(tokens, subval, highlightType)) + ? value.map(subval => + UrlbarUtils.getTokenMatches(tokens, subval, highlightType) + ) : UrlbarUtils.getTokenMatches(tokens, value || "", highlightType); if (highlights.length) { payloadHighlights[name] = highlights; @@ -148,7 +155,8 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { */ async isActive(queryContext) { return ( - queryContext.searchMode?.source == UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS || + queryContext.searchMode?.source == + UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS || (lazy.enabledPref && queryContext.searchString && queryContext.searchString.length < UrlbarUtils.MAX_TEXT_LENGTH && @@ -196,12 +204,14 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { } return addons .filter( - (addon) => + addon => addon.isActive && !addon.isSystem && - window.gUnifiedExtensions.browserActionFor(window.WebExtensionPolicy.getByID(addon.id)) + window.gUnifiedExtensions.browserActionFor( + window.WebExtensionPolicy.getByID(addon.id) + ) ) - .map((addon) => { + .map(addon => { return { icon: "chrome://browser/skin/zen-icons/extension.svg", label: "Extension", @@ -221,7 +231,7 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { */ async #getAvailableActions(window) { return globalActions - .filter((a) => a.isAvailable(window)) + .filter(a => a.isAvailable(window)) .concat(this.#getWorkspaceActions(window)) .concat(await this.#getExtensionActions(window)); } @@ -243,7 +253,10 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { } const label = action.extraPayload?.prettyName || action.label; const score = this.#calculateFuzzyScore(label, query); - if (score > (isPrefixed ? MINIMUM_PREFIXED_QUERY_SCORE : MINIMUM_QUERY_SCORE)) { + if ( + score > + (isPrefixed ? MINIMUM_PREFIXED_QUERY_SCORE : MINIMUM_QUERY_SCORE) + ) { results.push({ score, action, @@ -253,9 +266,9 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { results.sort((a, b) => b.score - a.score); // We must show all we can when prefixed, to avoid showing no results. if (isPrefixed) { - return results.map((r) => r.action); + return results.map(r => r.action); } - return results.slice(0, MAX_RECENT_ACTIONS).map((r) => r.action); + return results.slice(0, MAX_RECENT_ACTIONS).map(r => r.action); } /** @@ -294,10 +307,16 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { let lastMatchIndex = -1; let consecutiveMatches = 0; for (let targetIndex = 0; targetIndex < targetLen; targetIndex++) { - if (queryIndex < queryLen && targetLower[targetIndex] === queryLower[queryIndex]) { + if ( + queryIndex < queryLen && + targetLower[targetIndex] === queryLower[queryIndex] + ) { let bonus = 10; // Bonus for matching at the beginning of a word - if (targetIndex === 0 || [" ", "-", "_"].includes(targetLower[targetIndex - 1])) { + if ( + targetIndex === 0 || + [" ", "-", "_"].includes(targetLower[targetIndex - 1]) + ) { bonus += 15; } // Bonus for consecutive matches @@ -322,7 +341,8 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { async startQuery(queryContext, addCallback) { const query = queryContext.trimmedLowerCaseSearchString; - const isPrefixed = queryContext.searchMode?.source == UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS; + const isPrefixed = + queryContext.searchMode?.source == UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS; if (!query && !isPrefixed) { return; } @@ -341,17 +361,21 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { zenCommand: action.command, dynamicType: DYNAMIC_TYPE_NAME, zenAction: true, - query: isPrefixed ? action.label.trimStart() : queryContext.searchString, + query: isPrefixed + ? action.label.trimStart() + : queryContext.searchString, icon: action.icon, - shortcutContent: ownerGlobal.gZenKeyboardShortcutsManager.getShortcutDisplayFromCommand( - action.command - ), + shortcutContent: + ownerGlobal.gZenKeyboardShortcutsManager.getShortcutDisplayFromCommand( + action.command + ), keywords: action.label.split(" "), ...action.extraPayload, }); const shouldBePrioritized = - zenUrlbarResultsLearner.shouldPrioritize(action.commandId) && !isPrefixed; + zenUrlbarResultsLearner.shouldPrioritize(action.commandId) && + !isPrefixed; let result = new lazy.UrlbarResult({ type: UrlbarUtils.RESULT_TYPE.DYNAMIC, source: UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS, @@ -371,14 +395,16 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { finalResults.push(result); } let i = 0; - zenUrlbarResultsLearner.sortCommandsByPriority(finalResults).forEach((result) => { - if (isPrefixed && i === 0 && query.length > 1) { - result.heuristic = true; - delete result.suggestedIndex; - } - addCallback(this, result); - i++; - }); + zenUrlbarResultsLearner + .sortCommandsByPriority(finalResults) + .forEach(result => { + if (isPrefixed && i === 0 && query.length > 1) { + result.heuristic = true; + delete result.suggestedIndex; + } + addCallback(this, result); + i++; + }); } /** @@ -401,7 +427,8 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { getViewUpdate(result) { const prettyIconIsSvg = result.payload.prettyIcon && - (result.payload.prettyIcon.endsWith(".svg") || result.payload.prettyIcon.endsWith(".png")); + (result.payload.prettyIcon.endsWith(".svg") || + result.payload.prettyIcon.endsWith(".png")); return { icon: { attributes: { @@ -495,7 +522,9 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider { if (details?.provider === this.name) { usedCommand = details.result?.commandId; } - zenUrlbarResultsLearner.recordExecution(usedCommand, [...this.#seenCommands]); + zenUrlbarResultsLearner.recordExecution(usedCommand, [ + ...this.#seenCommands, + ]); } this.#seenCommands = new Set(); } diff --git a/src/zen/urlbar/ZenUBGlobalActions.sys.mjs b/src/zen/urlbar/ZenUBGlobalActions.sys.mjs index f8dbbb71c..607b05ada 100644 --- a/src/zen/urlbar/ZenUBGlobalActions.sys.mjs +++ b/src/zen/urlbar/ZenUBGlobalActions.sys.mjs @@ -6,7 +6,12 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs"; const lazy = {}; -XPCOMUtils.defineLazyPreferenceGetter(lazy, "currentTheme", "zen.view.window.scheme", 2); +XPCOMUtils.defineLazyPreferenceGetter( + lazy, + "currentTheme", + "zen.view.window.scheme", + 2 +); function isNotEmptyTab(window) { return !window.gBrowser.selectedTab.hasAttribute("zen-empty-tab"); @@ -40,7 +45,7 @@ const globalActionsTemplate = [ }, { label: "Settings", - command: (window) => window.openPreferences(), + command: window => window.openPreferences(), icon: "chrome://browser/skin/zen-icons/settings.svg", }, { @@ -62,7 +67,7 @@ const globalActionsTemplate = [ label: "Pin Tab", command: "cmd_zenTogglePinTab", icon: "chrome://browser/skin/zen-icons/pin.svg", - isAvailable: (window) => { + isAvailable: window => { const tab = window.gBrowser.selectedTab; return !tab.hasAttribute("zen-empty-tab") && !tab.pinned; }, @@ -71,7 +76,7 @@ const globalActionsTemplate = [ label: "Unpin Tab", command: "cmd_zenTogglePinTab", icon: "chrome://browser/skin/zen-icons/unpin.svg", - isAvailable: (window) => { + isAvailable: window => { const tab = window.gBrowser.selectedTab; return !tab.hasAttribute("zen-empty-tab") && tab.pinned; }, @@ -80,7 +85,7 @@ const globalActionsTemplate = [ label: "Next Space", command: "cmd_zenWorkspaceForward", icon: "chrome://browser/skin/zen-icons/forward.svg", - isAvailable: (window) => { + isAvailable: window => { return window.gZenWorkspaces._workspaceCache.length > 1; }, }, @@ -88,7 +93,7 @@ const globalActionsTemplate = [ label: "Previous Space", command: "cmd_zenWorkspaceBackward", icon: "chrome://browser/skin/zen-icons/back.svg", - isAvailable: (window) => { + isAvailable: window => { // This also covers the case of being in private mode return window.gZenWorkspaces._workspaceCache.length > 1; }, @@ -97,7 +102,7 @@ const globalActionsTemplate = [ label: "Close Tab", command: "cmd_close", icon: "chrome://browser/skin/zen-icons/close.svg", - isAvailable: (window) => { + isAvailable: window => { return isNotEmptyTab(window); }, }, @@ -125,7 +130,7 @@ const globalActionsTemplate = [ label: "Capture Screenshot", command: "Browser:Screenshot", icon: "chrome://browser/skin/zen-icons/screenshot.svg", - isAvailable: (window) => { + isAvailable: window => { return isNotEmptyTab(window); }, }, @@ -136,26 +141,30 @@ const globalActionsTemplate = [ }, { label: "Add to Essentials", - command: (window) => window.gZenPinnedTabManager.addToEssentials(window.gBrowser.selectedTab), - isAvailable: (window) => { + command: window => + window.gZenPinnedTabManager.addToEssentials(window.gBrowser.selectedTab), + isAvailable: window => { return ( - window.gZenPinnedTabManager.canEssentialBeAdded(window.gBrowser.selectedTab) && - !window.gBrowser.selectedTab.hasAttribute("zen-essential") + window.gZenPinnedTabManager.canEssentialBeAdded( + window.gBrowser.selectedTab + ) && !window.gBrowser.selectedTab.hasAttribute("zen-essential") ); }, icon: "chrome://browser/skin/zen-icons/essential-add.svg", }, { label: "Remove from Essentials", - command: (window) => window.gZenPinnedTabManager.removeEssentials(window.gBrowser.selectedTab), - isAvailable: (window) => window.gBrowser.selectedTab.hasAttribute("zen-essential"), + command: window => + window.gZenPinnedTabManager.removeEssentials(window.gBrowser.selectedTab), + isAvailable: window => + window.gBrowser.selectedTab.hasAttribute("zen-essential"), icon: "chrome://browser/skin/zen-icons/essential-remove.svg", }, { label: "Find in Page", command: "cmd_find", icon: "chrome://browser/skin/zen-icons/search-page.svg", - isAvailable: (window) => { + isAvailable: window => { return isNotEmptyTab(window); }, }, @@ -192,15 +201,19 @@ const globalActionsTemplate = [ label: "Print", command: "cmd_print", icon: "chrome://browser/skin/zen-icons/print.svg", - isAvailable: (window) => { + isAvailable: window => { return isNotEmptyTab(window); }, }, ]; -export const globalActions = globalActionsTemplate.map((action) => ({ - isAvailable: (window) => { - return window.document.getElementById(action.command)?.getAttribute("disabled") !== "true"; +export const globalActions = globalActionsTemplate.map(action => ({ + isAvailable: window => { + return ( + window.document + .getElementById(action.command) + ?.getAttribute("disabled") !== "true" + ); }, commandId: typeof action.command === "string" diff --git a/src/zen/urlbar/ZenUBProvider.sys.mjs b/src/zen/urlbar/ZenUBProvider.sys.mjs index 2b6210d3f..cd1d65c1e 100644 --- a/src/zen/urlbar/ZenUBProvider.sys.mjs +++ b/src/zen/urlbar/ZenUBProvider.sys.mjs @@ -7,7 +7,8 @@ import { UrlbarProvidersManager } from "moz-src:///browser/components/urlbar/Url const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { /* eslint-disable mozilla/valid-lazy */ - ZenUrlbarProviderGlobalActions: "resource:///modules/ZenUBActionsProvider.sys.mjs", + ZenUrlbarProviderGlobalActions: + "resource:///modules/ZenUBActionsProvider.sys.mjs", }); export function registerZenUrlbarProviders() { diff --git a/src/zen/urlbar/ZenUBResultsLearner.sys.mjs b/src/zen/urlbar/ZenUBResultsLearner.sys.mjs index 473503085..c4d92fe85 100644 --- a/src/zen/urlbar/ZenUBResultsLearner.sys.mjs +++ b/src/zen/urlbar/ZenUBResultsLearner.sys.mjs @@ -111,7 +111,9 @@ class ZenUrlbarResultsLearner { */ sortCommandsByPriority(commands) { const db = this.database; - return commands.sort((a, b) => (db[b.commandId] || 0) - (db[a.commandId] || 0)); + return commands.sort( + (a, b) => (db[b.commandId] || 0) - (db[a.commandId] || 0) + ); } } diff --git a/src/zen/welcome/ZenWelcome.mjs b/src/zen/welcome/ZenWelcome.mjs index ebe9ae990..59806986b 100644 --- a/src/zen/welcome/ZenWelcome.mjs +++ b/src/zen/welcome/ZenWelcome.mjs @@ -5,7 +5,10 @@ { let _tabsToPinEssentials = []; - const kZenElementsToIgnore = ["zen-browser-background", "zen-toast-container"]; + const kZenElementsToIgnore = [ + "zen-browser-background", + "zen-toast-container", + ]; function clearBrowserElements() { for (const element of document.getElementById("browser").children) { @@ -63,7 +66,7 @@ } const blob = await response.blob(); const reader = new FileReader(); - const data = await new Promise((resolve) => { + const data = await new Promise(resolve => { reader.onloadend = () => { const base64Data = reader.result.split(",")[1]; _iconToData[iconURL] = `data:${blob.type};base64,${base64Data}`; @@ -89,12 +92,19 @@ document.getElementById("zen-welcome-pages").style.display = "flex"; document.getElementById("zen-welcome-start").remove(); window.maximize(); - animate("#zen-welcome-pages", { opacity: [0, 1] }, { delay: 0.2, duration: 0.1 }); + animate( + "#zen-welcome-pages", + { opacity: [0, 1] }, + { delay: 0.2, duration: 0.1 } + ); } async fadeInTitles(page) { - const [title1, description1, description2] = await document.l10n.formatValues(page.text); - const titleElement = document.getElementById("zen-welcome-page-sidebar-content"); + const [title1, description1, description2] = + await document.l10n.formatValues(page.text); + const titleElement = document.getElementById( + "zen-welcome-page-sidebar-content" + ); /* eslint-disable no-unsanitized/property */ titleElement.innerHTML = `${title1}${description1}` + @@ -111,7 +121,9 @@ } async fadeInButtons(page) { - const buttons = document.getElementById("zen-welcome-page-sidebar-buttons"); + const buttons = document.getElementById( + "zen-welcome-page-sidebar-buttons" + ); let i = 0; const insertedButtons = []; for (const button of page.buttons) { @@ -167,8 +179,10 @@ delay: getMotion().stagger(0.1, { startDelay: 0.4 }), } ); - document.getElementById("zen-welcome-page-sidebar-buttons").innerHTML = ""; - document.getElementById("zen-welcome-page-sidebar-content").innerHTML = ""; + document.getElementById("zen-welcome-page-sidebar-buttons").innerHTML = + ""; + document.getElementById("zen-welcome-page-sidebar-content").innerHTML = + ""; } async fadeOutTitles() { @@ -213,7 +227,10 @@ this.finish(); return; } - await Promise.all([this.fadeInTitles(currentPage), this.fadeInButtons(currentPage)]); + await Promise.all([ + this.fadeInTitles(currentPage), + this.fadeInButtons(currentPage), + ]); await currentPage.fadeIn(); await this.fadeInContent(); } @@ -221,7 +238,11 @@ async finish() { _iconToData = undefined; // Unload icon data gZenWorkspaces.reorganizeTabsAfterWelcome(); - await animate("#zen-welcome-page-content", { x: [0, "100%"] }, { bounce: 0 }); + await animate( + "#zen-welcome-page-content", + { x: [0, "100%"] }, + { bounce: 0 } + ); document.getElementById("zen-welcome-page-content").remove(); await this.animHeart(); await this.#pinRemainingTabs(); @@ -236,8 +257,12 @@ element.style.removeProperty("display"); } gZenUIManager.updateTabsToolbar(); - let elementsToIgnore = kZenElementsToIgnore.map((id) => `#${id}`).join(", "); - await animate(`#browser > *:not(${elementsToIgnore})`, { opacity: [0, 1] }); + let elementsToIgnore = kZenElementsToIgnore + .map(id => `#${id}`) + .join(", "); + await animate(`#browser > *:not(${elementsToIgnore})`, { + opacity: [0, 1], + }); gZenUIManager.showToast("zen-welcome-finished"); } @@ -290,7 +315,7 @@ getEngines() { return this._engines.filter( - (engine) => + engine => !( engine.name.toLowerCase().includes("wikipedia") || engine.name.toLowerCase().includes("ebay") @@ -310,7 +335,7 @@ } getEngineByName(aName) { - return this._engines.find((engine) => engine.name == aName); + return this._engines.find(engine => engine.name == aName); } _cloneEngine(aEngine) { @@ -359,8 +384,12 @@ MigrationUtils.showMigrationWizard(window, { isStartupMigration: true, }); - document.querySelector("#zen-welcome-page-sidebar-buttons button").remove(); - const newButton = document.querySelector("#zen-welcome-page-sidebar-buttons button"); + document + .querySelector("#zen-welcome-page-sidebar-buttons button") + .remove(); + const newButton = document.querySelector( + "#zen-welcome-page-sidebar-buttons button" + ); newButton.classList.add("primary"); document.l10n.setAttributes(newButton, "zen-generic-next"); return false; @@ -385,7 +414,9 @@ `; const fragment = window.MozXULElement.parseXULToFragment(xul); - document.getElementById("zen-welcome-page-content").appendChild(fragment); + document + .getElementById("zen-welcome-page-content") + .appendChild(fragment); }, async fadeOut() { const shouldSetDefault = document.getElementById( @@ -431,7 +462,7 @@ const defaultEngine = await Services.search.getDefault(); const promises = []; - engineStore.getEngines().forEach((engine) => { + engineStore.getEngines().forEach(engine => { const label = document.createElement("label"); const engineId = engine.name.replace(/\s+/g, "-").toLowerCase(); label.setAttribute("for", engineId); @@ -449,7 +480,10 @@ const icon = document.createElement("img"); promises.push( (async () => { - icon.setAttribute("src", await engine.originalEngine.getIconURL()); + icon.setAttribute( + "src", + await engine.originalEngine.getIconURL() + ); })() ); icon.setAttribute("width", "32"); @@ -468,7 +502,9 @@ await Promise.all(promises); }, async fadeOut() { - document.getElementById("zen-welcome-page-content").removeAttribute("select-engine"); + document + .getElementById("zen-welcome-page-content") + .removeAttribute("select-engine"); }, }, { @@ -553,10 +589,14 @@ `; const fragment = window.MozXULElement.parseXULToFragment(xul); - document.getElementById("zen-welcome-page-content").appendChild(fragment); document - .getElementById("zen-welcome-initial-essentials-browser-sidebar-essentials") - .addEventListener("click", async (event) => { + .getElementById("zen-welcome-page-content") + .appendChild(fragment); + document + .getElementById( + "zen-welcome-initial-essentials-browser-sidebar-essentials" + ) + .addEventListener("click", async event => { const tab = event.target.closest(".tabbrowser-tab"); if (!tab) { return; @@ -566,12 +606,14 @@ }, async fadeOut() { const selectedTabs = document - .getElementById("zen-welcome-initial-essentials-browser-sidebar-essentials") + .getElementById( + "zen-welcome-initial-essentials-browser-sidebar-essentials" + ) .querySelectorAll(".tabbrowser-tab[visuallyselected]"); if (selectedTabs.length) { await PlacesUtils.history.insertMany( - [...selectedTabs].map((tab) => ({ + [...selectedTabs].map(tab => ({ url: tab.getAttribute("data-url"), visits: [ { @@ -591,9 +633,13 @@ inBackground: true, createLazyBrowser: true, }); - let essentialIconUrl = tab.style.getPropertyValue("--zen-essential-tab-icon"); + let essentialIconUrl = tab.style.getPropertyValue( + "--zen-essential-tab-icon" + ); // Remove url() from the icon URL - essentialIconUrl = essentialIconUrl.replace(/url\(['"]?/, "").replace(/['"]?\)/, ""); + essentialIconUrl = essentialIconUrl + .replace(/url\(['"]?/, "") + .replace(/['"]?\)/, ""); essentialIconUrl = await getIconData(essentialIconUrl); // Update the persistent tab state cache with |tabData| information. TabStateCache.update(createdTab.linkedBrowser.permanentKey, { @@ -625,7 +671,9 @@ fadeIn() { const anchor = document.createElement("div"); anchor.id = "zen-welcome-workspace-colors-anchor"; - document.getElementById("zen-welcome-page-content").appendChild(anchor); + document + .getElementById("zen-welcome-page-content") + .appendChild(anchor); gZenThemePicker.panel.setAttribute("noautohide", "true"); gZenThemePicker.panel.setAttribute("consumeoutsideclicks", "false"); gZenThemePicker.panel.setAttribute("nonnativepopover", "true"); diff --git a/src/zen/workspaces/ZenGradientGenerator.mjs b/src/zen/workspaces/ZenGradientGenerator.mjs index 78d1c7961..885141ae6 100644 --- a/src/zen/workspaces/ZenGradientGenerator.mjs +++ b/src/zen/workspaces/ZenGradientGenerator.mjs @@ -11,7 +11,7 @@ function parseSinePath(pathStr) { return points; } - commands.forEach((command) => { + commands.forEach(command => { const type = command.charAt(0); const coordsStr = command.slice(1).trim(); const coords = coordsStr.split(/[\s,]+/).map(Number); @@ -46,11 +46,15 @@ function parseSinePath(pathStr) { const lazy = {}; ChromeUtils.defineLazyGetter(lazy, "MAX_OPACITY", () => { - return parseFloat(document.getElementById("PanelUI-zen-gradient-generator-opacity").max); + return parseFloat( + document.getElementById("PanelUI-zen-gradient-generator-opacity").max + ); }); ChromeUtils.defineLazyGetter(lazy, "MIN_OPACITY", () => { - return parseFloat(document.getElementById("PanelUI-zen-gradient-generator-opacity").min); + return parseFloat( + document.getElementById("PanelUI-zen-gradient-generator-opacity").min + ); }); ChromeUtils.defineLazyGetter(lazy, "browserBackgroundElement", () => { @@ -76,7 +80,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { useAlgo = ""; #currentLightness = 50; - #allowTransparencyOnSidebar = Services.prefs.getBoolPref("zen.theme.acrylic-elements", false); + #allowTransparencyOnSidebar = Services.prefs.getBoolPref( + "zen.theme.acrylic-elements", + false + ); #linePath = `M 51.373 27.395 L 367.037 27.395`; #sinePath = `M 51.373 27.395 C 60.14 -8.503 68.906 -8.503 77.671 27.395 C 86.438 63.293 95.205 63.293 103.971 27.395 C 112.738 -8.503 121.504 -8.503 130.271 27.395 C 139.037 63.293 147.803 63.293 156.57 27.395 C 165.335 -8.503 174.101 -8.503 182.868 27.395 C 191.634 63.293 200.4 63.293 209.167 27.395 C 217.933 -8.503 226.7 -8.503 235.467 27.395 C 244.233 63.293 252.999 63.293 261.765 27.395 C 270.531 -8.503 279.297 -8.503 288.064 27.395 C 296.83 63.293 305.596 63.293 314.363 27.395 C 323.13 -8.503 331.896 -8.503 340.662 27.395 M 314.438 27.395 C 323.204 -8.503 331.97 -8.503 340.737 27.395 C 349.503 63.293 358.27 63.293 367.037 27.395`; @@ -88,20 +95,26 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { constructor() { super(); - if (!gZenWorkspaces.shouldHaveWorkspaces || gZenWorkspaces.privateWindowOrDisabled) { + if ( + !gZenWorkspaces.shouldHaveWorkspaces || + gZenWorkspaces.privateWindowOrDisabled + ) { return; } - this.promiseInitialized = new Promise((resolve) => { + this.promiseInitialized = new Promise(resolve => { this._resolveInitialized = resolve; }); this.dragStartPosition = null; - this.isLegacyVersion = Services.prefs.getIntPref("zen.theme.gradient-legacy-version", 1) === 0; + this.isLegacyVersion = + Services.prefs.getIntPref("zen.theme.gradient-legacy-version", 1) === 0; ChromeUtils.defineLazyGetter(this, "panel", () => document.getElementById("PanelUI-zen-gradient-generator") ); - ChromeUtils.defineLazyGetter(this, "toolbox", () => document.getElementById("TabsToolbar")); + ChromeUtils.defineLazyGetter(this, "toolbox", () => + document.getElementById("TabsToolbar") + ); ChromeUtils.defineLazyGetter(this, "customColorInput", () => document.getElementById("PanelUI-zen-gradient-generator-custom-input") ); @@ -110,11 +123,19 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { ); ChromeUtils.defineLazyGetter(this, "sliderWavePath", () => - document.getElementById("PanelUI-zen-gradient-slider-wave").querySelector("path") + document + .getElementById("PanelUI-zen-gradient-slider-wave") + .querySelector("path") ); - this.panel.addEventListener("popupshowing", this.handlePanelOpen.bind(this)); - this.panel.addEventListener("popuphidden", this.handlePanelClose.bind(this)); + this.panel.addEventListener( + "popupshowing", + this.handlePanelOpen.bind(this) + ); + this.panel.addEventListener( + "popuphidden", + this.handlePanelClose.bind(this) + ); this.panel.addEventListener("command", this.handlePanelCommand.bind(this)); document @@ -134,7 +155,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { this.initColorPages(); const darkModeChange = this.handleDarkModeChange.bind(this); - window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", darkModeChange); + window + .matchMedia("(prefers-color-scheme: dark)") + .addEventListener("change", darkModeChange); XPCOMUtils.defineLazyPreferenceGetter( this, @@ -144,7 +167,12 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { darkModeChange ); - XPCOMUtils.defineLazyPreferenceGetter(this, "darkModeBias", "zen.theme.dark-mode-bias", "0.5"); + XPCOMUtils.defineLazyPreferenceGetter( + this, + "darkModeBias", + "zen.theme.dark-mode-bias", + "0.5" + ); } handleDarkModeChange() { @@ -199,7 +227,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } initCustomColorInput() { - this.customColorInput.addEventListener("change", (event) => { + this.customColorInput.addEventListener("change", event => { // Prevent the popup from closing when the input is focused this.openThemePicker(event); }); @@ -208,7 +236,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { initPredefinedColors() { document .getElementById("PanelUI-zen-gradient-generator-color-pages") - .addEventListener("click", async (event) => { + .addEventListener("click", async event => { const target = event.target; const rawPosition = target.getAttribute("data-position"); if (!rawPosition) { @@ -223,9 +251,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } this.dots = this.dots.slice(0, numDots); } - const type = target.getAttribute("data-type") || EXPLICIT_LIGHTNESS_TYPE; + const type = + target.getAttribute("data-type") || EXPLICIT_LIGHTNESS_TYPE; // Generate new gradient from the single color given - const [x, y] = rawPosition.split(",").map((pos) => parseInt(pos)); + const [x, y] = rawPosition.split(",").map(pos => parseInt(pos)); let dots = [ { ID: 0, @@ -252,40 +281,53 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } initColorPages() { - const leftButton = document.getElementById("PanelUI-zen-gradient-generator-color-page-left"); - const rightButton = document.getElementById("PanelUI-zen-gradient-generator-color-page-right"); - const pagesWrapper = document.getElementById("PanelUI-zen-gradient-generator-color-pages"); + const leftButton = document.getElementById( + "PanelUI-zen-gradient-generator-color-page-left" + ); + const rightButton = document.getElementById( + "PanelUI-zen-gradient-generator-color-page-right" + ); + const pagesWrapper = document.getElementById( + "PanelUI-zen-gradient-generator-color-pages" + ); const pages = pagesWrapper.children; - pagesWrapper.addEventListener("wheel", (event) => { + pagesWrapper.addEventListener("wheel", event => { event.preventDefault(); event.stopPropagation(); }); leftButton.addEventListener("command", () => { this.#colorPage = (this.#colorPage - 1 + pages.length) % pages.length; // Scroll to the next page, by using scrollLeft - pagesWrapper.scrollLeft = (this.#colorPage * pagesWrapper.scrollWidth) / pages.length; + pagesWrapper.scrollLeft = + (this.#colorPage * pagesWrapper.scrollWidth) / pages.length; rightButton.disabled = false; leftButton.disabled = this.#colorPage === 0; }); rightButton.addEventListener("command", () => { this.#colorPage = (this.#colorPage + 1) % pages.length; // Scroll to the next page, by using scrollLeft - pagesWrapper.scrollLeft = (this.#colorPage * pagesWrapper.scrollWidth) / pages.length; + pagesWrapper.scrollLeft = + (this.#colorPage * pagesWrapper.scrollWidth) / pages.length; leftButton.disabled = false; rightButton.disabled = this.#colorPage === pages.length - 1; }); } initSchemeButtons() { - const buttons = document.getElementById("PanelUI-zen-gradient-generator-scheme"); - buttons.addEventListener("click", (event) => { + const buttons = document.getElementById( + "PanelUI-zen-gradient-generator-scheme" + ); + buttons.addEventListener("click", event => { const target = event.target.closest(".subviewbutton"); if (!target) { return; } event.preventDefault(); event.stopPropagation(); - const scheme = target.id.replace("PanelUI-zen-gradient-generator-scheme-", ""); + const scheme = target.id.replace( + "PanelUI-zen-gradient-generator-scheme-", + "" + ); if (!scheme) { return; } @@ -302,8 +344,11 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } initTextureInput() { - const wrapper = document.getElementById("PanelUI-zen-gradient-generator-texture-wrapper"); - const wrapperWidth = window.windowUtils.getBoundsWithoutFlushing(wrapper).width; + const wrapper = document.getElementById( + "PanelUI-zen-gradient-generator-texture-wrapper" + ); + const wrapperWidth = + window.windowUtils.getBoundsWithoutFlushing(wrapper).width; // Add elements in a circular pattern, where the center is the center of the wrapper for (let i = 0; i < 16; i++) { const dot = document.createElement("div"); @@ -315,7 +360,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } this._textureHandler = document.createElement("div"); this._textureHandler.id = "PanelUI-zen-gradient-generator-texture-handler"; - this._textureHandler.addEventListener("mousedown", this.onTextureHandlerMouseDown.bind(this)); + this._textureHandler.addEventListener( + "mousedown", + this.onTextureHandlerMouseDown.bind(this) + ); wrapper.appendChild(this._textureHandler); } @@ -329,7 +377,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { onTextureMouseMove(event) { event.preventDefault(); - const wrapper = document.getElementById("PanelUI-zen-gradient-generator-texture-wrapper"); + const wrapper = document.getElementById( + "PanelUI-zen-gradient-generator-texture-wrapper" + ); const wrapperRect = window.windowUtils.getBoundsWithoutFlushing(wrapper); // Determine how much rotation there is based on the mouse position and the center of the wrapper const rotation = Math.atan2( @@ -471,8 +521,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { const [hue, saturation] = this.rgbToHsl(r, g, b); const angle = (hue / 360) * 2 * Math.PI; // Convert to radians const normalizedSaturation = saturation / 100; // Convert to [0, 1] - const x = centerX + radius * normalizedSaturation * Math.cos(angle) - padding; - const y = centerY + radius * normalizedSaturation * Math.sin(angle) - padding; + const x = + centerX + radius * normalizedSaturation * Math.cos(angle) - padding; + const y = + centerY + radius * normalizedSaturation * Math.sin(angle) - padding; return { x, y }; } @@ -510,7 +562,11 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { saturation = 0; lightness = Math.round((1 - normalizedDistance) * 100); } - const [r, g, b] = this.hslToRgb(hue / 360, saturation / 100, lightness / 100); + const [r, g, b] = this.hslToRgb( + hue / 360, + saturation / 100, + lightness / 100 + ); return [ Math.min(255, Math.max(0, r)), Math.min(255, Math.max(0, g)), @@ -537,7 +593,8 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { dot.style.opacity = 0; dot.style.setProperty("--zen-theme-picker-dot-color", color.c); } else { - const { x, y } = color.position || this.calculateInitialPosition([r, g, b]); + const { x, y } = + color.position || this.calculateInitialPosition([r, g, b]); const dotPad = this.panel.querySelector(".zen-theme-picker-gradient"); dot.classList.add("zen-theme-picker-dot"); @@ -552,7 +609,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { dotPad.appendChild(dot); let id = this.dots.length; - dot.style.setProperty("--zen-theme-picker-dot-color", `rgb(${r}, ${g}, ${b})`); + dot.style.setProperty( + "--zen-theme-picker-dot-color", + `rgb(${r}, ${g}, ${b})` + ); dot.setAttribute("data-position", this.getJSONPos(x, y)); dot.setAttribute("data-type", color.type); @@ -577,11 +637,15 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { `); - listItems.querySelector(".zen-theme-picker-custom-list-item").setAttribute("data-color", color); + listItems + .querySelector(".zen-theme-picker-custom-list-item") + .setAttribute("data-color", color); listItems .querySelector(".zen-theme-picker-dot") .style.setProperty("--zen-theme-picker-dot-color", color); - listItems.querySelector(".zen-theme-picker-custom-list-item-label").textContent = color; + listItems.querySelector( + ".zen-theme-picker-custom-list-item-label" + ).textContent = color; listItems .querySelector(".zen-theme-picker-custom-list-item-remove") .addEventListener("command", this.removeCustomColor.bind(this)); @@ -597,7 +661,8 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } let colorOpacity = - document.getElementById("PanelUI-zen-gradient-generator-custom-opacity")?.value ?? 1; + document.getElementById("PanelUI-zen-gradient-generator-custom-opacity") + ?.value ?? 1; // Convert the opacity into a hex value if it's not already if (colorOpacity < 1) { // e.g. if opacity is 1, we add to the color FF, if it's 0.5 we add 80, etc. @@ -624,9 +689,13 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { dot.classList.add("zen-theme-picker-dot", "hidden", "custom"); dot.style.opacity = 0; dot.style.setProperty("--zen-theme-picker-dot-color", color); - this.panel.querySelector("#PanelUI-zen-gradient-generator-custom-list").prepend(dot); + this.panel + .querySelector("#PanelUI-zen-gradient-generator-custom-list") + .prepend(dot); this.customColorInput.value = ""; - document.getElementById("PanelUI-zen-gradient-generator-custom-opacity").value = 1; + document.getElementById( + "PanelUI-zen-gradient-generator-custom-opacity" + ).value = 1; this.updateCurrentWorkspace(); } @@ -663,7 +732,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { id = 0; dot.classList.add("primary"); - const existingPrimaryDot = this.dots.find((d) => d.ID === 0); + const existingPrimaryDot = this.dots.find(d => d.ID === 0); if (existingPrimaryDot) { existingPrimaryDot.ID = this.dots.length; existingPrimaryDot.element.classList.remove("primary"); @@ -679,7 +748,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { "--zen-theme-picker-dot-color", `rgb(${colorFromPos[0]}, ${colorFromPos[1]}, ${colorFromPos[2]})` ); - dot.setAttribute("data-position", this.getJSONPos(relativePosition.x, relativePosition.y)); + dot.setAttribute( + "data-position", + this.getJSONPos(relativePosition.x, relativePosition.y) + ); dot.setAttribute("data-type", dotData.type); this.dots.push({ @@ -701,20 +773,24 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { /* eslint-disable no-shadow */ function getColorHarmonyType(numDots, dots) { if (useHarmony !== "") { - const selectedHarmony = colorHarmonies.find((harmony) => harmony.type === useHarmony); + const selectedHarmony = colorHarmonies.find( + harmony => harmony.type === useHarmony + ); if (selectedHarmony) { if (action === "remove") { if (dots.length !== 0) { return colorHarmonies.find( - (harmony) => harmony.angles.length === selectedHarmony.angles.length - 1 + harmony => + harmony.angles.length === selectedHarmony.angles.length - 1 ); } return { type: "floating", angles: [] }; } if (action === "add") { return colorHarmonies.find( - (harmony) => harmony.angles.length === selectedHarmony.angles.length + 1 + harmony => + harmony.angles.length === selectedHarmony.angles.length + 1 ); } if (action === "update") { @@ -724,19 +800,19 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } if (action === "remove") { - let harmony = colorHarmonies.find((h) => h.angles.length === numDots); + let harmony = colorHarmonies.find(h => h.angles.length === numDots); // If we are coming from 3 analogous dots, we should now go to singleAnalogous if // there are 2 dots left if (harmony.type === "analogous" && numDots === 1) { - harmony = colorHarmonies.find((h) => h.type === "singleAnalogous"); + harmony = colorHarmonies.find(h => h.type === "singleAnalogous"); } return harmony; } if (action === "add") { - return colorHarmonies.find((h) => h.angles.length + 1 === numDots); + return colorHarmonies.find(h => h.angles.length + 1 === numDots); } if (action === "update") { - return colorHarmonies.find((h) => h.angles.length + 1 === numDots); + return colorHarmonies.find(h => h.angles.length + 1 === numDots); } return null; } @@ -771,7 +847,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { return dots; } - let primaryDot = dots.find((dot) => dot.ID === 0); + let primaryDot = dots.find(dot => dot.ID === 0); if (!primaryDot) { return []; } @@ -822,8 +898,8 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { Services.prefs.setIntPref("zen.theme.gradient-legacy-version", 1); } - colorPositions.forEach((dotPosition) => { - const existingDot = this.dots.find((dot) => dot.ID === dotPosition.ID); + colorPositions.forEach(dotPosition => { + const existingDot = this.dots.find(dot => dot.ID === dotPosition.ID); if (existingDot) { existingDot.type = dotPosition.type; @@ -849,7 +925,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { existingDot.element, { left: existingDot.element.style.left - ? [existingDot.element.style.left, `${dotPosition.position.x}px`] + ? [ + existingDot.element.style.left, + `${dotPosition.position.x}px`, + ] : `${dotPosition.position.x}px`, top: existingDot.element.style.top ? [existingDot.element.style.top, `${dotPosition.position.y}px`] @@ -887,7 +966,11 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { if (this.dots.length >= nsZenThemePicker.MAX_DOTS) { return; } - let colorPositions = this.calculateCompliments(this.dots, "add", this.useAlgo); + let colorPositions = this.calculateCompliments( + this.dots, + "add", + this.useAlgo + ); this.handleColorPositions(colorPositions); this.updateCurrentWorkspace(); @@ -914,17 +997,28 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { this.handleColorPositions(colorPositions); this.updateCurrentWorkspace(); return; - } else if (target.id === "PanelUI-zen-gradient-generator-color-toggle-algo") { + } else if ( + target.id === "PanelUI-zen-gradient-generator-color-toggle-algo" + ) { const applicableHarmonies = this.colorHarmonies.filter( - (harmony) => harmony.angles.length + 1 === this.dots.length + harmony => harmony.angles.length + 1 === this.dots.length ); - let currentIndex = applicableHarmonies.findIndex((harmony) => harmony.type === this.useAlgo); + let currentIndex = applicableHarmonies.findIndex( + harmony => harmony.type === this.useAlgo + ); - const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % applicableHarmonies.length; + const nextIndex = + currentIndex === -1 + ? 0 + : (currentIndex + 1) % applicableHarmonies.length; this.useAlgo = applicableHarmonies[nextIndex].type; - let colorPositions = this.calculateCompliments(this.dots, "update", this.useAlgo); + let colorPositions = this.calculateCompliments( + this.dots, + "update", + this.useAlgo + ); this.handleColorPositions(colorPositions); this.updateCurrentWorkspace(); return; @@ -946,9 +1040,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { const clickedElement = event.target; let clickedDot = null; - const existingPrimaryDot = this.dots.find((d) => d.ID === 0); + const existingPrimaryDot = this.dots.find(d => d.ID === 0); - clickedDot = this.dots.find((dot) => dot.element === clickedElement); + clickedDot = this.dots.find(dot => dot.element === clickedElement); if (clickedDot) { // TODO: this doesnt work and needs to be fixed @@ -956,12 +1050,18 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { clickedDot.ID = 0; clickedDot.element.style.zIndex = 999; - let colorPositions = this.calculateCompliments(this.dots, "update", this.useAlgo); + let colorPositions = this.calculateCompliments( + this.dots, + "update", + this.useAlgo + ); this.handleColorPositions(colorPositions); return; } - const distance = Math.sqrt((pixelX - centerX) ** 2 + (pixelY - centerY) ** 2); + const distance = Math.sqrt( + (pixelX - centerX) ** 2 + (pixelY - centerY) ** 2 + ); if (distance > radius) { const angle = Math.atan2(pixelY - centerY, pixelX - centerX); pixelX = centerX + Math.cos(angle) * radius; @@ -981,7 +1081,11 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { y: relativeY, }; - let colorPositions = this.calculateCompliments(this.dots, "update", this.useAlgo); + let colorPositions = this.calculateCompliments( + this.dots, + "update", + this.useAlgo + ); this.handleColorPositions(colorPositions); this.updateCurrentWorkspace(true); @@ -1004,7 +1108,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { if (event.button === 2) { return; } - const draggedDot = this.dots.find((dot) => dot.element === event.target); + const draggedDot = this.dots.find(dot => dot.element === event.target); if (draggedDot) { event.preventDefault(); this.dragging = true; @@ -1027,7 +1131,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { if (!event.target.classList.contains("zen-theme-picker-dot")) { return; } - this.dots = this.dots.filter((dot) => dot.element !== event.target); + this.dots = this.dots.filter(dot => dot.element !== event.target); event.target.remove(); this.dots.sort((a, b) => a.ID - b.ID); @@ -1067,7 +1171,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { onDotMouseMove(event) { if (this.dragging) { event.preventDefault(); - const rect = window.windowUtils.getBoundsWithoutFlushing(this.panel.querySelector(".zen-theme-picker-gradient")); + const rect = window.windowUtils.getBoundsWithoutFlushing( + this.panel.querySelector(".zen-theme-picker-gradient") + ); const padding = 0; // each side // do NOT let the ball be draged outside of an imaginary circle. You can drag it anywhere inside the circle // if the distance between the center of the circle and the dragged ball is bigger than the radius, then the ball @@ -1078,7 +1184,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { const radius = (rect.width - padding) / 2; let pixelX = event.clientX; let pixelY = event.clientY; - const distance = Math.sqrt((pixelX - centerX) ** 2 + (pixelY - centerY) ** 2); + const distance = Math.sqrt( + (pixelX - centerX) ** 2 + (pixelY - centerY) ** 2 + ); if (distance > radius) { const angle = Math.atan2(pixelY - centerY, pixelX - centerX); pixelX = centerX + Math.cos(angle) * radius; @@ -1089,14 +1197,18 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { const relativeX = pixelX - rect.left; const relativeY = pixelY - rect.top; - const draggedDot = this.dots.find((dot) => dot.element === this.draggedDot); + const draggedDot = this.dots.find(dot => dot.element === this.draggedDot); draggedDot.element.style.left = `${relativeX}px`; draggedDot.element.style.top = `${relativeY}px`; draggedDot.position = { x: relativeX, y: relativeY, }; - let colorPositions = this.calculateCompliments(this.dots, "update", this.useAlgo); + let colorPositions = this.calculateCompliments( + this.dots, + "update", + this.useAlgo + ); this.handleColorPositions(colorPositions); this.updateCurrentWorkspace(); @@ -1154,7 +1266,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { if (colorToBlend) { const blendedAlpha = Math.min( 1, - opacity + lazy.MIN_OPACITY + colorToBlendOpacity * (1 - (opacity + lazy.MIN_OPACITY)) + opacity + + lazy.MIN_OPACITY + + colorToBlendOpacity * (1 - (opacity + lazy.MIN_OPACITY)) ); baseColor = this.blendColors(baseColor, colorToBlend, blendedAlpha * 100); if (AppConstants.platform !== "macosx") { @@ -1192,7 +1306,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { luminance([r, g, b]) { // These magic numbers are extracted from the wikipedia article on relative luminance // https://en.wikipedia.org/wiki/Relative_luminance - var a = [r, g, b].map((v) => { + var a = [r, g, b].map(v => { v /= 255; return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); }); @@ -1234,9 +1348,11 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { return this.getSingleRGBColor(themedColors[0], forToolbar); } // If there are custom colors, we just return a linear gradient with all colors - if (themedColors.find((color) => color.isCustom)) { + if (themedColors.find(color => color.isCustom)) { // Just return a linear gradient with all colors - const gradientColors = themedColors.map((color) => this.getSingleRGBColor(color, forToolbar)); + const gradientColors = themedColors.map(color => + this.getSingleRGBColor(color, forToolbar) + ); // Divide all colors evenly in the gradient const colorStops = gradientColors .map((color, index) => { @@ -1295,8 +1411,16 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } // Composite text color over background - darkText = this.blendColors(bg, darkText.slice(0, 3), (1 - darkText[3]) * 100); - lightText = this.blendColors(bg, lightText.slice(0, 3), (1 - lightText[3]) * 100); + darkText = this.blendColors( + bg, + darkText.slice(0, 3), + (1 - darkText[3]) * 100 + ); + lightText = this.blendColors( + bg, + lightText.slice(0, 3), + (1 - lightText[3]) * 100 + ); const darkContrast = this.contrastRatio(bg, darkText); const lightContrast = this.contrastRatio(bg, lightText); @@ -1307,14 +1431,17 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { static getTheme(colors = [], opacity = 0.5, texture = 0) { return { type: "gradient", - gradientColors: colors ? colors.filter((color) => color) : [], // remove undefined + gradientColors: colors ? colors.filter(color => color) : [], // remove undefined opacity, texture, }; } updateNoise(texture) { - document.documentElement.style.setProperty("--zen-grainy-background-opacity", texture); + document.documentElement.style.setProperty( + "--zen-grainy-background-opacity", + texture + ); document.documentElement.setAttribute( "zen-show-grainy-background", texture > 0 ? "true" : "false" @@ -1328,7 +1455,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { if (hex.length === 3) { hex = hex .split("") - .map((char) => char + char) + .map(char => char + char) .join(""); } return [ @@ -1376,7 +1503,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { let workspaceTheme = theme || workspace.theme; /* eslint-disable complexity */ - this.forEachWindowSync((browser) => { + this.forEachWindowSync(browser => { if (!browser.gZenThemePicker?.promiseInitialized) { return; } @@ -1400,30 +1527,39 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { const docElement = browser.document.documentElement; if (!skipUpdate) { - for (const dot of browser.gZenThemePicker.panel.querySelectorAll(".zen-theme-picker-dot")) { + for (const dot of browser.gZenThemePicker.panel.querySelectorAll( + ".zen-theme-picker-dot" + )) { dot.remove(); } } if (theme) { - const workspaceElement = browser.gZenWorkspaces.workspaceElement(windowWorkspace.uuid); + const workspaceElement = browser.gZenWorkspaces.workspaceElement( + windowWorkspace.uuid + ); if (workspaceElement) { workspaceElement.clearThemeStyles(); } } if (!skipUpdate) { - let backgroundElement = browser.gZenThemePicker.browserBackgroundElement; + let backgroundElement = + browser.gZenThemePicker.browserBackgroundElement; let toolbarElement = browser.gZenThemePicker.toolbarBackgroundElement; backgroundElement.style.setProperty( "--zen-main-browser-background-old", - backgroundElement.style.getPropertyValue("--zen-main-browser-background") + backgroundElement.style.getPropertyValue( + "--zen-main-browser-background" + ) ); toolbarElement.style.setProperty( "--zen-main-browser-background-toolbar-old", - toolbarElement.style.getPropertyValue("--zen-main-browser-background-toolbar") + toolbarElement.style.getPropertyValue( + "--zen-main-browser-background-toolbar" + ) ); - [backgroundElement, toolbarElement].forEach((element) => { + [backgroundElement, toolbarElement].forEach(element => { element.style.setProperty( "--zen-background-opacity", browser.gZenThemePicker.previousBackgroundOpacity ?? 1 @@ -1440,7 +1576,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { browser.gZenThemePicker.currentOpacity = workspaceTheme.opacity ?? 0.5; browser.gZenThemePicker.currentTexture = workspaceTheme.texture ?? 0; - let dominantColor = this.getMostDominantColor(workspaceTheme.gradientColors); + let dominantColor = this.getMostDominantColor( + workspaceTheme.gradientColors + ); const isDefaultTheme = !dominantColor; if (isDefaultTheme) { dominantColor = this.getNativeAccentColor(); @@ -1463,7 +1601,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } else if (opacity > lazy.MAX_OPACITY) { opacity = 1; } else { - opacity = (opacity - lazy.MIN_OPACITY) / (lazy.MAX_OPACITY - lazy.MIN_OPACITY); + opacity = + (opacity - lazy.MIN_OPACITY) / + (lazy.MAX_OPACITY - lazy.MIN_OPACITY); } if (isDefaultTheme) { opacity = 1; // If it's the default theme, we want the wave to be @@ -1476,8 +1616,14 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { thirdStop.setAttribute("offset", `${opacity * 100}%`); const interpolatedPath = this.#interpolateWavePath(opacity); svg.setAttribute("d", interpolatedPath); - opacitySlider.style.setProperty("--zen-thumb-height", `${40 + opacity * 15}px`); - opacitySlider.style.setProperty("--zen-thumb-width", `${10 + opacity * 15}px`); + opacitySlider.style.setProperty( + "--zen-thumb-height", + `${40 + opacity * 15}px` + ); + opacitySlider.style.setProperty( + "--zen-thumb-width", + `${10 + opacity * 15}px` + ); svg.style.stroke = interpolatedPath === this.#linePath ? thirdStop.getAttribute("stop-color") @@ -1510,7 +1656,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { const textureSelectWrapper = browser.document.getElementById( "PanelUI-zen-gradient-generator-texture-wrapper" ); - const textureWrapperWidth = browser.windowUtils.getBoundsWithoutFlushing(textureSelectWrapper).width; + const textureWrapperWidth = + browser.windowUtils.getBoundsWithoutFlushing( + textureSelectWrapper + ).width; // Dont show when hidden if (textureWrapperWidth) { // rotate and trasnform relative to the wrapper width depending on the texture value @@ -1521,12 +1670,16 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { // add top and left to center the texture handler in relation with textureWrapperWidth // based on the rotation /* eslint-disable no-shadow */ - let top = Math.sin((rotation * Math.PI) / 180) * (textureWrapperWidth / 2) - 6; - let left = Math.cos((rotation * Math.PI) / 180) * (textureWrapperWidth / 2) - 3; + let top = + Math.sin((rotation * Math.PI) / 180) * (textureWrapperWidth / 2) - 6; + let left = + Math.cos((rotation * Math.PI) / 180) * (textureWrapperWidth / 2) - 3; textureHandler.style.top = `${textureWrapperWidth / 2 + top}px`; textureHandler.style.left = `${textureWrapperWidth / 2 + left}px`; // Highlight the 16 buttons based on the texture value - let buttons = browser.document.querySelectorAll(".zen-theme-picker-texture-dot"); + let buttons = browser.document.querySelectorAll( + ".zen-theme-picker-texture-dot" + ); let i = 4; for (const button of buttons) { button.classList.toggle("active", i / 16 <= textureValue); @@ -1538,7 +1691,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } } - const gradient = browser.gZenThemePicker.getGradient(workspaceTheme.gradientColors); + const gradient = browser.gZenThemePicker.getGradient( + workspaceTheme.gradientColors + ); const gradientToolbar = browser.gZenThemePicker.getGradient( workspaceTheme.gradientColors, true @@ -1552,12 +1707,14 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } } - browser.gZenThemePicker.toolbarBackgroundElement - .style - .setProperty("--zen-main-browser-background-toolbar", gradientToolbar); - browser.gZenThemePicker.browserBackgroundElement - .style - .setProperty("--zen-main-browser-background", gradient); + browser.gZenThemePicker.toolbarBackgroundElement.style.setProperty( + "--zen-main-browser-background-toolbar", + gradientToolbar + ); + browser.gZenThemePicker.browserBackgroundElement.style.setProperty( + "--zen-main-browser-background", + gradient + ); const isDarkModeWindow = browser.gZenThemePicker.isDarkMode; if (isDefaultTheme) { docElement.setAttribute("zen-default-theme", "true"); @@ -1571,7 +1728,8 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { // Should be set to `this.isLegacyVersion` but for some reason it is set to undefined if we open a private window, // so instead get the pref value directly. browser.gZenThemePicker.isLegacyVersion = - Services.prefs.getIntPref("zen.theme.gradient-legacy-version", 1) === 0; + Services.prefs.getIntPref("zen.theme.gradient-legacy-version", 1) === + 0; let isDarkMode = isDarkModeWindow; if (!isDefaultTheme && !this.isLegacyVersion) { @@ -1582,7 +1740,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } else { docElement.removeAttribute("zen-should-be-dark-mode"); if (!this.isLegacyVersion) { - browser.gZenThemePicker.panel.setAttribute("invalidate-controls", "true"); + browser.gZenThemePicker.panel.setAttribute( + "invalidate-controls", + "true" + ); } } // Set `--toolbox-textcolor` to have a contrast with the primary color @@ -1602,7 +1763,10 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { fixTheme(theme) { // add a primary color if there isn't one - if (!theme.gradientColors.find((color) => color.isPrimary) && theme.gradientColors.length) { + if ( + !theme.gradientColors.find(color => color.isPrimary) && + theme.gradientColors.length + ) { theme.gradientColors[0].isPrimary = true; } return theme; @@ -1612,7 +1776,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { let accentColor = Services.prefs.getStringPref("zen.theme.accent-color"); let rgb; if (accentColor === "AccentColor") { - const rawRgb = window.getComputedStyle(lazy.browserBackgroundElement).color; + const rawRgb = window.getComputedStyle( + lazy.browserBackgroundElement + ).color; rgb = rawRgb.match(/\d+/g).map(Number); // Match our theme a bit more, since we can't always expect the OS // to give us a color matching our theme scheme @@ -1640,7 +1806,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { const color = target.getAttribute("data-color"); const dots = this.panel.querySelectorAll(".zen-theme-picker-dot"); for (const dot of dots) { - if (dot.style.getPropertyValue("--zen-theme-picker-dot-color") === color) { + if ( + dot.style.getPropertyValue("--zen-theme-picker-dot-color") === color + ) { dot.remove(); break; } @@ -1650,7 +1818,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } getPrimaryColor(colors) { - const primaryColor = colors.find((color) => color.isPrimary); + const primaryColor = colors.find(color => color.isPrimary); if (primaryColor) { return primaryColor.c; } @@ -1671,9 +1839,13 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { this.updated = skipSave; const dots = this.panel.querySelectorAll(".zen-theme-picker-dot"); const colors = Array.from(dots) - .sort((a, b) => a.getAttribute("data-index") - b.getAttribute("data-index")) - .map((dot) => { - const color = dot.style.getPropertyValue("--zen-theme-picker-dot-color"); + .sort( + (a, b) => a.getAttribute("data-index") - b.getAttribute("data-index") + ) + .map(dot => { + const color = dot.style.getPropertyValue( + "--zen-theme-picker-dot-color" + ); const isPrimary = dot.classList.contains("primary"); if (color === "undefined") { @@ -1682,7 +1854,8 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { const isCustom = dot.classList.contains("custom"); const algorithm = this.useAlgo; const position = - dot.getAttribute("data-position") && JSON.parse(dot.getAttribute("data-position")); + dot.getAttribute("data-position") && + JSON.parse(dot.getAttribute("data-position")); const type = dot.getAttribute("data-type"); return { c: isCustom ? color : color.match(/\d+/g).map(Number), @@ -1694,8 +1867,12 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { type, }; }) - .filter((color) => Boolean(color)); // remove nulls - const gradient = nsZenThemePicker.getTheme(colors, this.currentOpacity, this.currentTexture); + .filter(color => Boolean(color)); // remove nulls + const gradient = nsZenThemePicker.getTheme( + colors, + this.currentOpacity, + this.currentTexture + ); let currentWorkspace = gZenWorkspaces.getActiveWorkspace(); if (!skipSave) { @@ -1703,7 +1880,11 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { gZenWorkspaces.saveWorkspace(currentWorkspace); } - this.onWorkspaceChange(currentWorkspace, skipSave, skipSave ? gradient : null); + this.onWorkspaceChange( + currentWorkspace, + skipSave, + skipSave ? gradient : null + ); } handlePanelClose() { @@ -1735,7 +1916,7 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { } const t = progress; let newPathData = ""; - this.#sinePoints.forEach((p) => { + this.#sinePoints.forEach(p => { switch (p.type) { case "M": { const interpolatedY = referenceY + (p.y - referenceY) * t; @@ -1759,7 +1940,9 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { invalidateGradientCache(uuid) { delete this.#gradientsCache[uuid]; - window.dispatchEvent(new Event("ZenGradientCacheChanged", { bubbles: true })); + window.dispatchEvent( + new Event("ZenGradientCacheChanged", { bubbles: true }) + ); } getGradientForWorkspace(workspace, { getGradient = true } = {}) { @@ -1776,8 +1959,8 @@ export class nsZenThemePicker extends nsZenMultiWindowFeature { let gradient; let toolbarGradient; if (getGradient) { - gradient = this.getGradient(theme.gradientColors); - toolbarGradient = this.getGradient(theme.gradientColors, true); + gradient = this.getGradient(theme.gradientColors); + toolbarGradient = this.getGradient(theme.gradientColors, true); } let dominantColor = this.getMostDominantColor(theme.gradientColors); const isDefaultTheme = !dominantColor; diff --git a/src/zen/workspaces/ZenWorkspace.mjs b/src/zen/workspaces/ZenWorkspace.mjs index 883e12358..d024ded06 100644 --- a/src/zen/workspaces/ZenWorkspace.mjs +++ b/src/zen/workspaces/ZenWorkspace.mjs @@ -22,7 +22,9 @@ class nsZenCollapsiblePins extends nsZenFolder { get groupStartElement() { // Fetch this instead of the tab-group-start since it is not guaranteed this // element will be the first child of the pinned tabs container. - return this.#spaceElement.pinnedTabsContainer.querySelector(".space-fake-collapsible-start"); + return this.#spaceElement.pinnedTabsContainer.querySelector( + ".space-fake-collapsible-start" + ); } get collapsed() { @@ -114,12 +116,17 @@ export class nsZenWorkspace extends MozXULElement { this.#hasConnected = true; this.appendChild(this.constructor.fragment); - this.tabsContainer = this.querySelector(".zen-workspace-normal-tabs-section"); - this.indicator = this.querySelector(".zen-current-workspace-indicator"); - this.pinnedTabsContainer = this.querySelector(".zen-workspace-pinned-tabs-section"); - this.pinnedTabsContainer.separatorElement = this.pinnedTabsContainer.querySelector( - ".pinned-tabs-container-separator" + this.tabsContainer = this.querySelector( + ".zen-workspace-normal-tabs-section" ); + this.indicator = this.querySelector(".zen-current-workspace-indicator"); + this.pinnedTabsContainer = this.querySelector( + ".zen-workspace-pinned-tabs-section" + ); + this.pinnedTabsContainer.separatorElement = + this.pinnedTabsContainer.querySelector( + ".pinned-tabs-container-separator" + ); this.initializeAttributeInheritance(); this.scrollbox = this.querySelector("arrowscrollbox"); @@ -132,9 +139,11 @@ export class nsZenWorkspace extends MozXULElement { this.scrollbox.addEventListener("underflow", this); this.scrollbox.addEventListener("overflow", this); - const indicatorName = this.indicator.querySelector(".zen-current-workspace-indicator-name"); + const indicatorName = this.indicator.querySelector( + ".zen-current-workspace-indicator-name" + ); indicatorName.onRenameFinished = this.onIndicatorRenameFinished.bind(this); - indicatorName.addEventListener("dblclick", (event) => { + indicatorName.addEventListener("dblclick", event => { if (this.hasPinnedTabs) { // Prevent renaming when there are pinned tabs event.stopPropagation(); @@ -142,7 +151,8 @@ export class nsZenWorkspace extends MozXULElement { }); this.pinnedTabsContainer.scrollbox = this.scrollbox; - this.#initialPinnedElementChildrenCount = this.pinnedTabsContainer.children.length; + this.#initialPinnedElementChildrenCount = + this.pinnedTabsContainer.children.length; if (document.documentElement.hasAttribute("zen-unsynced-window")) { this.indicator.removeAttribute("context"); @@ -154,7 +164,7 @@ export class nsZenWorkspace extends MozXULElement { this.indicator .querySelector(".zen-current-workspace-indicator-icon") - .addEventListener("dblclick", (event) => { + .addEventListener("dblclick", event => { if (this.hasPinnedTabs) { return; } @@ -162,7 +172,7 @@ export class nsZenWorkspace extends MozXULElement { gZenWorkspaces.changeWorkspaceIcon(); }); - this.indicator.addEventListener("click", (event) => { + this.indicator.addEventListener("click", event => { if (this.hasPinnedTabs && event.button === 0) { event.stopPropagation(); this.collapsiblePins.toggle(); @@ -170,27 +180,36 @@ export class nsZenWorkspace extends MozXULElement { }); if (!gZenWorkspaces.currentWindowIsSyncing) { - let actionsButton = this.indicator.querySelector(".zen-workspaces-actions"); + let actionsButton = this.indicator.querySelector( + ".zen-workspaces-actions" + ); const moveTabToFragment = window.MozXULElement.parseXULToFragment( nsZenWorkspace.moveTabToButtonMarkup ); actionsButton.after(moveTabToFragment); actionsButton.setAttribute("hidden", "true"); actionsButton = actionsButton.nextElementSibling; - actionsButton.addEventListener("command", (event) => { + actionsButton.addEventListener("command", event => { event.stopPropagation(); this.#openMoveTabsToWorkspacePanel(event.target); }); } this.scrollbox._getScrollableElements = () => { - const children = [...this.pinnedTabsContainer.children, ...this.tabsContainer.children]; - if (Services.prefs.getBoolPref("zen.view.show-newtab-button-top", false)) { + const children = [ + ...this.pinnedTabsContainer.children, + ...this.tabsContainer.children, + ]; + if ( + Services.prefs.getBoolPref("zen.view.show-newtab-button-top", false) + ) { // Move the perifery to the first non-pinned tab - const periphery = this.tabsContainer.querySelector("#tabbrowser-arrowscrollbox-periphery"); + const periphery = this.tabsContainer.querySelector( + "#tabbrowser-arrowscrollbox-periphery" + ); if (periphery) { const firstNonPinnedTabIndex = children.findIndex( - (child) => gBrowser.isTab(child) && !child.pinned + child => gBrowser.isTab(child) && !child.pinned ); if (firstNonPinnedTabIndex > -1) { // Change to new location and remove from the old one on the list @@ -209,7 +228,7 @@ export class nsZenWorkspace extends MozXULElement { ); }; - this.scrollbox._canScrollToElement = (element) => { + this.scrollbox._canScrollToElement = element => { if (gBrowser.isTab(element)) { return ( !element.hasAttribute("zen-essential") && @@ -242,13 +261,18 @@ export class nsZenWorkspace extends MozXULElement { this.tabsContainer.setAttribute("zen-workspace-id", this.id); this.pinnedTabsContainer.setAttribute("zen-workspace-id", this.id); - this.collapsiblePins = document.createXULElement("zen-workspace-collapsible-pins"); + this.collapsiblePins = document.createXULElement( + "zen-workspace-collapsible-pins" + ); this.prepend(this.collapsiblePins); this.#updateOverflow(); this.onGradientCacheChanged = this.#onGradientCacheChanged.bind(this); - window.addEventListener("ZenGradientCacheChanged", this.onGradientCacheChanged); + window.addEventListener( + "ZenGradientCacheChanged", + this.onGradientCacheChanged + ); this.pinnedTabsContainer.addEventListener("TabPinned", () => { // If a tab is pinned and the pinned tabs section is collapsed, uncollapse it. @@ -263,7 +287,7 @@ export class nsZenWorkspace extends MozXULElement { this.addEventListener("TabPinned", tabPinCallback); this.addEventListener("TabUnpinned", tabPinCallback); - this.addEventListener("TabClose", (event) => { + this.addEventListener("TabClose", event => { if (event.target.pinned) { tabPinCallback(); } @@ -271,7 +295,10 @@ export class nsZenWorkspace extends MozXULElement { } disconnectedCallback() { - window.removeEventListener("ZenGradientCacheChanged", this.onGradientCacheChanged); + window.removeEventListener( + "ZenGradientCacheChanged", + this.onGradientCacheChanged + ); } get active() { @@ -329,10 +356,14 @@ export class nsZenWorkspace extends MozXULElement { return; } let workspaces = gZenWorkspaces.getWorkspaces(); - let workspaceData = workspaces.find((workspace) => workspace.uuid === this.workspaceUuid); + let workspaceData = workspaces.find( + workspace => workspace.uuid === this.workspaceUuid + ); workspaceData.name = newName; await gZenWorkspaces.saveWorkspace(workspaceData); - this.indicator.querySelector(".zen-current-workspace-indicator-name").textContent = newName; + this.indicator.querySelector( + ".zen-current-workspace-indicator-name" + ).textContent = newName; gZenUIManager.showToast("zen-workspace-renamed-toast"); } @@ -342,7 +373,7 @@ export class nsZenWorkspace extends MozXULElement { const target = event.target; target.setAttribute("open", "true"); this.indicator.setAttribute("open", "true"); - const handlePopupHidden = (event) => { + const handlePopupHidden = event => { if (event.target !== popup) { return; } @@ -369,12 +400,18 @@ export class nsZenWorkspace extends MozXULElement { } else { this.style.colorScheme = ""; } - this.style.setProperty("--toolbox-textcolor", `rgb(${toolbarColor.join(",")})`); + this.style.setProperty( + "--toolbox-textcolor", + `rgb(${toolbarColor.join(",")})` + ); this.style.setProperty("--zen-primary-color", primaryColor); } checkPinsExistence() { - if (this.pinnedTabsContainer.children.length > this.#initialPinnedElementChildrenCount) { + if ( + this.pinnedTabsContainer.children.length > + this.#initialPinnedElementChildrenCount + ) { this.setAttribute("haspinnedtabs", "true"); } else { this.removeAttribute("haspinnedtabs"); diff --git a/src/zen/workspaces/ZenWorkspaceBookmarksStorage.js b/src/zen/workspaces/ZenWorkspaceBookmarksStorage.js index 547ed5783..e9d94e06c 100644 --- a/src/zen/workspaces/ZenWorkspaceBookmarksStorage.js +++ b/src/zen/workspaces/ZenWorkspaceBookmarksStorage.js @@ -19,7 +19,7 @@ window.ZenWorkspaceBookmarksStorage = { async _ensureTable() { await this.lazy.PlacesUtils.withConnectionWrapper( "ZenWorkspaceBookmarksStorage.init", - async (db) => { + async db => { // Create table using GUIDs instead of IDs await db.execute(` CREATE TABLE IF NOT EXISTS zen_bookmarks_workspaces ( @@ -102,7 +102,7 @@ window.ZenWorkspaceBookmarksStorage = { { bookmark_guid: bookmarkGuid } ); - return rows.map((row) => row.getResultByName("workspace_uuid")); + return rows.map(row => row.getResultByName("workspace_uuid")); }, /** @@ -164,7 +164,7 @@ window.ZenWorkspaceBookmarksStorage = { async clearChangedIDs() { await this.lazy.PlacesUtils.withConnectionWrapper( "ZenWorkspaceBookmarksStorage.clearChangedIDs", - async (db) => { + async db => { await db.execute(`DELETE FROM zen_bookmarks_workspaces_changes`); } ); diff --git a/src/zen/workspaces/ZenWorkspaceCreation.mjs b/src/zen/workspaces/ZenWorkspaceCreation.mjs index 98904dd09..69b8316cf 100644 --- a/src/zen/workspaces/ZenWorkspaceCreation.mjs +++ b/src/zen/workspaces/ZenWorkspaceCreation.mjs @@ -5,7 +5,7 @@ class nsZenWorkspaceCreation extends MozXULElement { #wasInCollapsedMode = false; - promiseInitialized = new Promise((resolve) => { + promiseInitialized = new Promise(resolve => { this.resolveInitialized = resolve; }); @@ -96,8 +96,12 @@ class nsZenWorkspaceCreation extends MozXULElement { this.inputName = this.querySelector(".zen-workspace-creation-name"); this.inputIcon = this.querySelector(".zen-workspace-creation-icon-label"); this.inputProfile = this.querySelector(".zen-workspace-creation-profile"); - this.createButton = this.querySelector(".zen-workspace-creation-create-button"); - this.cancelButton = this.querySelector(".zen-workspace-creation-cancel-button"); + this.createButton = this.querySelector( + ".zen-workspace-creation-create-button" + ); + this.cancelButton = this.querySelector( + ".zen-workspace-creation-cancel-button" + ); for (const element of this.elementsToAnimate) { element.style.opacity = 0; @@ -114,7 +118,8 @@ class nsZenWorkspaceCreation extends MozXULElement { .getInterface(Ci.nsIAppWindow) .rollupAllPopups(); - this.handleZenWorkspacesChangeBind = this.handleZenWorkspacesChange.bind(this); + this.handleZenWorkspacesChangeBind = + this.handleZenWorkspacesChange.bind(this); for (const element of this.parentElement.children) { if (element !== this) { @@ -130,8 +135,14 @@ class nsZenWorkspaceCreation extends MozXULElement { } } - this.createButton.addEventListener("command", this.onCreateButtonCommand.bind(this)); - this.cancelButton.addEventListener("command", this.onCancelButtonCommand.bind(this)); + this.createButton.addEventListener( + "command", + this.onCreateButtonCommand.bind(this) + ); + this.cancelButton.addEventListener( + "command", + this.onCancelButtonCommand.bind(this) + ); this.inputName.addEventListener("input", () => { this.createButton.disabled = !this.inputName.value.trim(); @@ -139,12 +150,23 @@ class nsZenWorkspaceCreation extends MozXULElement { this.inputIcon.addEventListener("command", this.onIconCommand.bind(this)); - this.profilesPopup = this.querySelector(".zen-workspace-creation-profiles-popup"); + this.profilesPopup = this.querySelector( + ".zen-workspace-creation-profiles-popup" + ); if (gZenWorkspaces.shouldShowContainers) { - this.inputProfile.addEventListener("command", this.onProfileCommand.bind(this)); - this.profilesPopup.addEventListener("popupshown", this.onProfilePopupShown.bind(this)); - this.profilesPopup.addEventListener("command", this.onProfilePopupCommand.bind(this)); + this.inputProfile.addEventListener( + "command", + this.onProfileCommand.bind(this) + ); + this.profilesPopup.addEventListener( + "popupshown", + this.onProfilePopupShown.bind(this) + ); + this.profilesPopup.addEventListener( + "command", + this.onProfilePopupCommand.bind(this) + ); this.currentProfile = { id: 0, @@ -154,7 +176,8 @@ class nsZenWorkspaceCreation extends MozXULElement { this.inputProfile.parentNode.hidden = true; } - document.getElementById("zen-sidebar-splitter").style.pointerEvents = "none"; + document.getElementById("zen-sidebar-splitter").style.pointerEvents = + "none"; gZenUIManager.motion .animate( @@ -220,7 +243,7 @@ class nsZenWorkspaceCreation extends MozXULElement { onIconCommand(event) { gZenEmojiPicker.open(event.target, { closeOnSelect: false, - onSelect: async (icon) => { + onSelect: async icon => { const isSvg = icon && icon.endsWith(".svg"); if (isSvg) { this.inputIcon.label = ""; @@ -256,7 +279,9 @@ class nsZenWorkspaceCreation extends MozXULElement { } onProfilePopupCommand(event) { - let userContextId = parseInt(event.target.getAttribute("data-usercontextid")); + let userContextId = parseInt( + event.target.getAttribute("data-usercontextid") + ); if (isNaN(userContextId)) { return; } @@ -267,7 +292,9 @@ class nsZenWorkspaceCreation extends MozXULElement { } finishSetup() { - gZenWorkspaces.addChangeListeners(this.handleZenWorkspacesChangeBind, { once: true }); + gZenWorkspaces.addChangeListeners(this.handleZenWorkspacesChangeBind, { + once: true, + }); } async handleZenWorkspacesChange() { diff --git a/src/zen/workspaces/ZenWorkspaceIcons.mjs b/src/zen/workspaces/ZenWorkspaceIcons.mjs index d9c88f1c2..a15bcc083 100644 --- a/src/zen/workspaces/ZenWorkspaceIcons.mjs +++ b/src/zen/workspaces/ZenWorkspaceIcons.mjs @@ -14,7 +14,7 @@ class nsZenWorkspaceIcons extends MozXULElement { window.addEventListener("ZenWorkspacesUIUpdate", this, true); this.initDragAndDrop(); - this.addEventListener("mouseover", (e) => { + this.addEventListener("mouseover", e => { if (this.isReorderMode) { return; } @@ -29,13 +29,14 @@ class nsZenWorkspaceIcons extends MozXULElement { let dragStart = 0; let draggedTab = null; - this.addEventListener("mousedown", (e) => { + this.addEventListener("mousedown", e => { const target = e.target.closest("toolbarbutton[zen-workspace-id]"); if (!target || e.button != 0 || e.ctrlKey || e.shiftKey || e.altKey) { return; } - const isVertical = document.documentElement.getAttribute("zen-sidebar-expanded") != "true"; + const isVertical = + document.documentElement.getAttribute("zen-sidebar-expanded") != "true"; const clientPos = isVertical ? "clientY" : "clientX"; this.isReorderMode = false; @@ -45,7 +46,7 @@ class nsZenWorkspaceIcons extends MozXULElement { e.stopPropagation(); - const mouseMoveHandler = (moveEvent) => { + const mouseMoveHandler = moveEvent => { if (Math.abs(moveEvent[clientPos] - dragStart) > 5) { this.isReorderMode = true; } @@ -66,7 +67,8 @@ class nsZenWorkspaceIcons extends MozXULElement { const nextSibling = draggedTab.nextSibling; if ( mouse < - rect[isVertical ? "top" : "left"] + rect[isVertical ? "height" : "width"] / 2 + rect[isVertical ? "top" : "left"] + + rect[isVertical ? "height" : "width"] / 2 ) { this.insertBefore(draggedTab, tab); } else { @@ -87,7 +89,10 @@ class nsZenWorkspaceIcons extends MozXULElement { draggedTab.removeAttribute("dragged"); - this.reorderWorkspaceToIndex(draggedTab, Array.from(this.children).indexOf(draggedTab)); + this.reorderWorkspaceToIndex( + draggedTab, + Array.from(this.children).indexOf(draggedTab) + ); draggedTab = null; this.isReorderMode = false; diff --git a/src/zen/workspaces/ZenWorkspaces.mjs b/src/zen/workspaces/ZenWorkspaces.mjs index 3dc0ab192..fbe5a4e9e 100644 --- a/src/zen/workspaces/ZenWorkspaces.mjs +++ b/src/zen/workspaces/ZenWorkspaces.mjs @@ -58,11 +58,11 @@ class nsZenWorkspaces { "BMB_mobileBookmarks", ]; - promisePinnedInitialized = new Promise((resolve) => { + promisePinnedInitialized = new Promise(resolve => { this._resolvePinnedInitialized = resolve; }); - promiseInitialized = new Promise((resolve) => { + promiseInitialized = new Promise(resolve => { this._resolveInitialized = resolve; }); @@ -70,7 +70,10 @@ class nsZenWorkspaces { if (this.privateWindowOrDisabled) { return; } - await Promise.all([this.promisePinnedInitialized, SessionStore.promiseAllWindowsRestored]); + await Promise.all([ + this.promisePinnedInitialized, + SessionStore.promiseAllWindowsRestored, + ]); } async init() { @@ -86,7 +89,9 @@ class nsZenWorkspaces { if (!this.shouldHaveWorkspaces) { this._resolveInitialized(); - console.warn("gZenWorkspaces: !!! gZenWorkspaces is disabled in hidden windows !!!"); + console.warn( + "gZenWorkspaces: !!! gZenWorkspaces is disabled in hidden windows !!!" + ); return; // We are in a hidden window, don't initialize gZenWorkspaces } @@ -131,7 +136,10 @@ class nsZenWorkspaces { ChromeUtils.defineLazyGetter(this, "workspaceIcons", () => document.getElementById("zen-workspaces-button") ); - this.#activeWorkspace ||= Services.prefs.getStringPref("zen.workspaces.active", ""); + this.#activeWorkspace ||= Services.prefs.getStringPref( + "zen.workspaces.active", + "" + ); if (this.isPrivateWindow) { document.documentElement.setAttribute("zen-private-window", "true"); @@ -155,7 +163,10 @@ class nsZenWorkspaces { }; Services.obs.addObserver(observerFunction, "workspace-bookmarks-updated"); window.addEventListener("unload", () => { - Services.obs.removeObserver(observerFunction, "workspace-bookmarks-updated"); + Services.obs.removeObserver( + observerFunction, + "workspace-bookmarks-updated" + ); }); } } @@ -216,11 +227,15 @@ class nsZenWorkspaces { // Check if we need to debounce const now = Date.now(); - const timeSinceLastSelection = now - this._tabSelectionState.lastSelectionTime; + const timeSinceLastSelection = + now - this._tabSelectionState.lastSelectionTime; if (timeSinceLastSelection < this._tabSelectionState.debounceTime) { - await new Promise((resolve) => - setTimeout(resolve, this._tabSelectionState.debounceTime - timeSinceLastSelection) + await new Promise(resolve => + setTimeout( + resolve, + this._tabSelectionState.debounceTime - timeSinceLastSelection + ) ); } @@ -269,7 +284,9 @@ class nsZenWorkspaces { } // Fall back to creating a new tab - const newTabUrl = newTabTarget || Services.prefs.getStringPref("browser.startup.homepage"); + const newTabUrl = + newTabTarget || + Services.prefs.getStringPref("browser.startup.homepage"); let tab = gZenUIManager.openAndChangeToTab(newTabUrl); // Set workspace ID if available @@ -340,7 +357,10 @@ class nsZenWorkspaces { } get activeScrollbox() { - return this.activeWorkspaceElement?.scrollbox ?? gBrowser.tabContainer.arrowScrollbox; + return ( + this.activeWorkspaceElement?.scrollbox ?? + gBrowser.tabContainer.arrowScrollbox + ); } get tabboxChildren() { @@ -348,7 +368,9 @@ class nsZenWorkspaces { } get tabboxChildrenWithoutEmpty() { - return this.tabboxChildren.filter((child) => !child.hasAttribute("zen-empty-tab")); + return this.tabboxChildren.filter( + child => !child.hasAttribute("zen-empty-tab") + ); } get shouldAnimateEssentials() { @@ -370,7 +392,9 @@ class nsZenWorkspaces { } #initializeTabsStripSections() { - const perifery = document.getElementById("tabbrowser-arrowscrollbox-periphery"); + const perifery = document.getElementById( + "tabbrowser-arrowscrollbox-periphery" + ); perifery.setAttribute("hidden", "true"); const tabs = gBrowser.tabContainer.allTabs; const workspaces = this.getWorkspaces(); @@ -378,12 +402,12 @@ class nsZenWorkspaces { this.#createWorkspaceTabsSection(workspace, tabs); } if (tabs.length) { - const defaultSelectedContainer = this.workspaceElement(this.activeWorkspace)?.querySelector( - ".zen-workspace-normal-tabs-section" - ); - const pinnedContainer = this.workspaceElement(this.activeWorkspace)?.querySelector( - ".zen-workspace-pinned-tabs-section" - ); + const defaultSelectedContainer = this.workspaceElement( + this.activeWorkspace + )?.querySelector(".zen-workspace-normal-tabs-section"); + const pinnedContainer = this.workspaceElement( + this.activeWorkspace + )?.querySelector(".zen-workspace-pinned-tabs-section"); // New profile with no workspaces does not have a default selected container if (defaultSelectedContainer) { for (const tab of tabs) { @@ -395,7 +419,10 @@ class nsZenWorkspaces { continue; } // before to the last child (perifery) - defaultSelectedContainer.insertBefore(tab, defaultSelectedContainer.lastChild); + defaultSelectedContainer.insertBefore( + tab, + defaultSelectedContainer.lastChild + ); } } gBrowser.tabContainer._invalidateCachedTabs(); @@ -418,10 +445,13 @@ class nsZenWorkspaces { ); if (!essentialsContainer) { essentialsContainer = document.createXULElement("hbox"); - essentialsContainer.className = "zen-essentials-container zen-workspace-tabs-section"; + essentialsContainer.className = + "zen-essentials-container zen-workspace-tabs-section"; essentialsContainer.setAttribute("flex", "1"); essentialsContainer.setAttribute("container", container); - document.getElementById("zen-essentials").appendChild(essentialsContainer); + document + .getElementById("zen-essentials") + .appendChild(essentialsContainer); // Set an initial hidden state if the essentials section is not supposed // to be shown on the current workspace @@ -466,12 +496,12 @@ class nsZenWorkspaces { let section = spaceElement.tabsContainer; let pinnedSection = spaceElement.pinnedTabsContainer; const workspaceTabs = Array.from(tabs).filter( - (tab) => + tab => tab.getAttribute("zen-workspace-id") === workspace.uuid && !tab.hasAttribute("zen-essential") ); let folders = new Set(); - const getFolderRoot = (tab) => { + const getFolderRoot = tab => { let root = tab?.group; while (root?.group) { root = root?.group; @@ -516,7 +546,11 @@ class nsZenWorkspaces { window.removeEventListener("AppCommand", HandleAppCommandEvent, true); // Add our handler first - window.addEventListener("AppCommand", this._handleAppCommand.bind(this), true); + window.addEventListener( + "AppCommand", + this._handleAppCommand.bind(this), + true + ); // Re-add original handler window.addEventListener("AppCommand", HandleAppCommandEvent, true); @@ -561,7 +595,7 @@ class nsZenWorkspaces { toolbox.addEventListener( "wheel", - (event) => { + event => { if (this.privateWindowOrDisabled) { return; } @@ -617,7 +651,9 @@ class nsZenWorkspaces { const elements = [ gNavToolbox, // event handlers do not work on elements inside shadow DOM so we need to attach them directly - document.getElementById("tabbrowser-arrowscrollbox").shadowRoot.querySelector("scrollbox"), + document + .getElementById("tabbrowser-arrowscrollbox") + .shadowRoot.querySelector("scrollbox"), ]; // Attach gesture handlers to each element @@ -630,13 +666,29 @@ class nsZenWorkspaces { } attachGestureHandlers(element) { - element.addEventListener("MozSwipeGestureMayStart", this._handleSwipeMayStart.bind(this), true); - element.addEventListener("MozSwipeGestureStart", this._handleSwipeStart.bind(this), true); - element.addEventListener("MozSwipeGestureUpdate", this._handleSwipeUpdate.bind(this), true); + element.addEventListener( + "MozSwipeGestureMayStart", + this._handleSwipeMayStart.bind(this), + true + ); + element.addEventListener( + "MozSwipeGestureStart", + this._handleSwipeStart.bind(this), + true + ); + element.addEventListener( + "MozSwipeGestureUpdate", + this._handleSwipeUpdate.bind(this), + true + ); // Use MozSwipeGesture instead of MozSwipeGestureEnd because MozSwipeGestureEnd is fired after animation ends, // while MozSwipeGesture is fired immediately after swipe ends. - element.addEventListener("MozSwipeGesture", this._handleSwipeEnd.bind(this), true); + element.addEventListener( + "MozSwipeGesture", + this._handleSwipeEnd.bind(this), + true + ); element.addEventListener( "MozSwipeGestureEnd", @@ -644,12 +696,16 @@ class nsZenWorkspaces { Services.prefs.setBoolPref("zen.swipe.is-fast-swipe", false); document.documentElement.removeAttribute("swipe-gesture"); gZenUIManager.tabsWrapper.style.removeProperty("scrollbar-width"); - [lazy.browserBackgroundElement, lazy.toolbarBackgroundElement].forEach((element) => { - element.style.setProperty("--zen-background-opacity", "1"); - }); + [lazy.browserBackgroundElement, lazy.toolbarBackgroundElement].forEach( + element => { + element.style.setProperty("--zen-background-opacity", "1"); + } + ); delete this._hasAnimatedBackgrounds; this.updateTabsContainers(); - document.removeEventListener("popupshown", this.popupOpenHandler, { once: true }); + document.removeEventListener("popupshown", this.popupOpenHandler, { + once: true, + }); }, true ); @@ -677,7 +733,10 @@ class nsZenWorkspaces { } // Only handle horizontal swipes - if (event.direction === event.DIRECTION_LEFT || event.direction === event.DIRECTION_RIGHT) { + if ( + event.direction === event.DIRECTION_LEFT || + event.direction === event.DIRECTION_RIGHT + ) { event.preventDefault(); event.stopPropagation(); @@ -694,7 +753,9 @@ class nsZenWorkspaces { gZenFolders.cancelPopupTimer(); document.documentElement.setAttribute("swipe-gesture", "true"); - document.addEventListener("popupshown", this.popupOpenHandler, { once: true }); + document.addEventListener("popupshown", this.popupOpenHandler, { + once: true, + }); event.preventDefault(); event.stopPropagation(); @@ -716,14 +777,19 @@ class nsZenWorkspaces { const delta = event.delta * 300; const stripWidth = - window.windowUtils.getBoundsWithoutFlushing(document.getElementById("navigator-toolbox")) - .width + - window.windowUtils.getBoundsWithoutFlushing(document.getElementById("zen-sidebar-splitter")) - .width * + window.windowUtils.getBoundsWithoutFlushing( + document.getElementById("navigator-toolbox") + ).width + + window.windowUtils.getBoundsWithoutFlushing( + document.getElementById("zen-sidebar-splitter") + ).width * 2; let translateX = this._swipeState.lastDelta + delta; // Add a force multiplier as we are translating the strip depending on how close to the edge we are - let forceMultiplier = Math.min(1, 1 - Math.abs(translateX) / (stripWidth * 4.5)); // 4.5 instead of 4 to add a bit of a buffer + let forceMultiplier = Math.min( + 1, + 1 - Math.abs(translateX) / (stripWidth * 4.5) + ); // 4.5 instead of 4 to add a bit of a buffer if (forceMultiplier > 0.5) { translateX *= forceMultiplier; this._swipeState.lastDelta = delta + (translateX - delta) * 0.5; @@ -747,7 +813,8 @@ class nsZenWorkspaces { event.preventDefault(); event.stopPropagation(); const isRTL = document.documentElement.matches(":-moz-locale-dir(rtl)"); - const moveForward = (event.direction === SimpleGestureEvent.DIRECTION_RIGHT) !== isRTL; + const moveForward = + (event.direction === SimpleGestureEvent.DIRECTION_RIGHT) !== isRTL; const rawDirection = moveForward ? 1 : -1; const direction = this.naturalScroll ? -1 : 1; @@ -767,7 +834,7 @@ class nsZenWorkspaces { set activeWorkspace(value) { const spaces = this.getWorkspaces(); - if (!spaces.some((ws) => ws.uuid === value)) { + if (!spaces.some(ws => ws.uuid === value)) { value = spaces[0]?.uuid || ""; } if (value === this.#activeWorkspace) { @@ -789,7 +856,10 @@ class nsZenWorkspaces { chromeFlags & Ci.nsIWebBrowserChrome.CHROME_TOOLBAR || chromeFlags & Ci.nsIWebBrowserChrome.CHROME_MENUBAR; } - return this._shouldHaveWorkspaces && !document.documentElement.hasAttribute("taskbartab"); + return ( + this._shouldHaveWorkspaces && + !document.documentElement.hasAttribute("taskbartab") + ); } get isPrivateWindow() { @@ -818,7 +888,7 @@ class nsZenWorkspaces { getWorkspaceFromId(id) { try { - return this.getWorkspaces().find((workspace) => workspace.uuid === id); + return this.getWorkspaces().find(workspace => workspace.uuid === id); } catch { return null; } @@ -886,7 +956,8 @@ class nsZenWorkspaces { this._workspaceCache = spacesFromStore.length ? [...spacesFromStore] : [this.#createWorkspaceData("Space", undefined)]; - this.activeWorkspace = aWinData.activeZenSpace || this._workspaceCache[0].uuid; + this.activeWorkspace = + aWinData.activeZenSpace || this._workspaceCache[0].uuid; let promise = this.#initializeWorkspaces(); for (const workspace of spacesFromStore) { const element = this.workspaceElement(workspace.uuid); @@ -944,7 +1015,10 @@ class nsZenWorkspaces { window.addEventListener("TabUnpinned", tabUpdateListener); window.addEventListener("aftercustomization", tabUpdateListener); window.addEventListener("TabSelect", this.onLocationChange.bind(this)); - window.addEventListener("TabBrowserInserted", this.onTabBrowserInserted.bind(this)); + window.addEventListener( + "TabBrowserInserted", + this.onTabBrowserInserted.bind(this) + ); this.updateWorkspacesChangeContextMenu(); })(); @@ -957,7 +1031,7 @@ class nsZenWorkspaces { await this.promiseInitialized; let showed = false; let resolveSelectPromise; - let selectPromise = new Promise((resolve) => { + let selectPromise = new Promise(resolve => { resolveSelectPromise = resolve; }); @@ -975,18 +1049,27 @@ class nsZenWorkspaces { ) { gBrowser.selectedTab = this._initialTab; this.moveTabToWorkspace(this._initialTab, this.activeWorkspace); - gBrowser.moveTabTo(this._initialTab, { forceUngrouped: true, tabIndex: 0 }); + gBrowser.moveTabTo(this._initialTab, { + forceUngrouped: true, + tabIndex: 0, + }); removedEmptyTab = true; delete this._initialTab; } - if (this._tabToRemoveForEmpty && !removedEmptyTab && !this._shouldOverrideTabs) { - const tabs = gBrowser.tabs.filter((tab) => !tab.collapsed); + if ( + this._tabToRemoveForEmpty && + !removedEmptyTab && + !this._shouldOverrideTabs + ) { + const tabs = gBrowser.tabs.filter(tab => !tab.collapsed); if ( typeof this._tabToSelect === "number" && this._tabToSelect >= 0 && tabs[this._tabToSelect] && - (await this.#shouldShowTabInCurrentWorkspace(tabs[this._tabToSelect])) && + (await this.#shouldShowTabInCurrentWorkspace( + tabs[this._tabToSelect] + )) && tabs[this._tabToSelect] !== this._tabToRemoveForEmpty ) { this.log(`Found tab to select: ${this._tabToSelect}, ${tabs.length}`); @@ -1048,9 +1131,12 @@ class nsZenWorkspaces { ) { // Go through each tab and see if there's another tab with the same startup URL. // If we do find one, remove it. - const newTabUrl = Services.prefs.getStringPref("browser.startup.homepage"); + const newTabUrl = Services.prefs.getStringPref( + "browser.startup.homepage" + ); const tabs = gBrowser.tabs.filter( - (tab) => !tab.collapsed && !tab.hasAttribute("zen-empty-tab") && !tab.pinned + tab => + !tab.collapsed && !tab.hasAttribute("zen-empty-tab") && !tab.pinned ); for (const tab of tabs) { if (tab._originalUrl === newTabUrl && tab !== gBrowser.selectedTab) { @@ -1061,7 +1147,9 @@ class nsZenWorkspaces { } } - window.dispatchEvent(new CustomEvent("AfterWorkspacesSessionRestore", { bubbles: true })); + window.dispatchEvent( + new CustomEvent("AfterWorkspacesSessionRestore", { bubbles: true }) + ); } handleInitialTab(tab, isEmpty) { @@ -1069,7 +1157,10 @@ class nsZenWorkspaces { return; } // note: We cant access `gZenVerticalTabsManager._canReplaceNewTab` this early - if (isEmpty && Services.prefs.getBoolPref("zen.urlbar.replace-newtab", true)) { + if ( + isEmpty && + Services.prefs.getBoolPref("zen.urlbar.replace-newtab", true) + ) { tab._markedForReplacement = true; this._tabToRemoveForEmpty = tab; } else { @@ -1085,7 +1176,8 @@ class nsZenWorkspaces { if (this.#contextMenuData?.workspaceId) { anchor = this.#contextMenuData.originalTarget; } - const workspaceId = this.#contextMenuData?.workspaceId || this.activeWorkspace; + const workspaceId = + this.#contextMenuData?.workspaceId || this.activeWorkspace; if (!anchor) { return; } @@ -1097,7 +1189,7 @@ class nsZenWorkspaces { gZenEmojiPicker.open(anchor, { closeOnSelect: false, allowNone: hasNoIcon, - onSelect: async (icon) => { + onSelect: async icon => { const workspace = this.getWorkspaceFromId(workspaceId); if (!workspace) { console.warn("No active workspace found to change icon"); @@ -1125,7 +1217,7 @@ class nsZenWorkspaces { if ( (workspaceID && !tab.hasAttribute("zen-essential") && - !workspaces.find((workspace) => workspace.uuid === workspaceID)) || + !workspaces.find(workspace => workspace.uuid === workspaceID)) || // Also remove empty tabs that are supposed to be from parent folders but // they dont exist anymore (tab.pinned && tab.hasAttribute("zen-empty-tab") && !tab.group) @@ -1142,7 +1234,11 @@ class nsZenWorkspaces { } handleTabBeforeClose(tab, closeWindowWithLastTab) { - if (!this.workspaceEnabled || this.__contextIsDelete || this._removedByStartupPage) { + if ( + !this.workspaceEnabled || + this.__contextIsDelete || + this._removedByStartupPage + ) { return null; } @@ -1153,10 +1249,12 @@ class nsZenWorkspaces { let tabs = gBrowser.visibleTabs; let tabsPinned = tabs.filter( - (t) => !this.shouldOpenNewTabIfLastUnpinnedTabIsClosed || !t.pinned + t => !this.shouldOpenNewTabIfLastUnpinnedTabIsClosed || !t.pinned ); const shouldCloseWindow = - closeWindowWithLastTab != null ? closeWindowWithLastTab : this.shouldCloseWindow(); + closeWindowWithLastTab != null + ? closeWindowWithLastTab + : this.shouldCloseWindow(); if (tabs.length === 1 && tabs[0] === tab) { if (shouldCloseWindow) { // We've already called beforeunload on all the relevant tabs if we get here, @@ -1186,7 +1284,10 @@ class nsZenWorkspaces { addPopupListeners() { const workspaceActions = document.getElementById("zenWorkspaceMoreActions"); - workspaceActions.addEventListener("popupshowing", this.updateWorkspaceActionsMenu.bind(this)); + workspaceActions.addEventListener( + "popupshowing", + this.updateWorkspaceActionsMenu.bind(this) + ); workspaceActions.addEventListener("popuphidden", () => { setTimeout(() => { setTimeout(() => { @@ -1256,10 +1357,14 @@ class nsZenWorkspaces { originalTarget: target, }; const workspaceName = document.getElementById("context_zenEditWorkspace"); - const themePicker = document.getElementById("context_zenChangeWorkspaceTheme"); + const themePicker = document.getElementById( + "context_zenChangeWorkspaceTheme" + ); /* We can't show the rename input properly in collapsed state, so hide the workspace edit input */ - const isCollapsed = !Services.prefs.getBoolPref("zen.view.sidebar-expanded"); + const isCollapsed = !Services.prefs.getBoolPref( + "zen.view.sidebar-expanded" + ); workspaceName.hidden = isCollapsed || (this.#contextMenuData.workspaceId && @@ -1268,15 +1373,19 @@ class nsZenWorkspaces { this.#contextMenuData.workspaceId && this.#contextMenuData.workspaceId !== this.activeWorkspace; const separator = document.getElementById("context_zenWorkspacesSeparator"); - for (const item of event.target.querySelectorAll(".zen-workspace-context-menu-item")) { + for (const item of event.target.querySelectorAll( + ".zen-workspace-context-menu-item" + )) { item.remove(); } if (!this.#contextMenuData.workspaceId) { separator.hidden = false; for (const workspace of this.getWorkspaces().reverse()) { const item = this.generateMenuItemForWorkspace(workspace); - item.addEventListener("command", (e) => { - this.changeWorkspaceWithID(e.target.closest("menuitem").getAttribute("zen-workspace-id")); + item.addEventListener("command", e => { + this.changeWorkspaceWithID( + e.target.closest("menuitem").getAttribute("zen-workspace-id") + ); }); separator.after(item); } @@ -1312,7 +1421,9 @@ class nsZenWorkspaces { return; } const workspacesData = this._workspaceCache; - const index = workspacesData.findIndex((ws) => ws.uuid === workspaceData.uuid); + const index = workspacesData.findIndex( + ws => ws.uuid === workspaceData.uuid + ); if (index !== -1) { workspacesData[index] = workspaceData; } else { @@ -1324,7 +1435,9 @@ class nsZenWorkspaces { removeWorkspace(windowID) { let workspacesData = this.getWorkspaces(); // Remove the workspace from the cache - workspacesData = workspacesData.filter((workspace) => workspace.uuid !== windowID); + workspacesData = workspacesData.filter( + workspace => workspace.uuid !== windowID + ); this.#propagateWorkspaceData(workspacesData); } @@ -1345,7 +1458,10 @@ class nsZenWorkspaces { return workspace.icon; } try { - return new Intl.Segmenter().segment(workspace.name).containing().segment.toUpperCase(); + return new Intl.Segmenter() + .segment(workspace.name) + .containing() + .segment.toUpperCase(); } catch { return Array.from(workspace.name)[0]?.toUpperCase(); } @@ -1362,8 +1478,12 @@ class nsZenWorkspaces { if (!this.#hasInitialized || this.privateWindowOrDisabled) { return; } - window.dispatchEvent(new CustomEvent("ZenWorkspaceDataChanged"), { bubbles: true }); - window.gZenWindowSync.propagateWorkspacesToAllWindows(aSpaceData ?? this._workspaceCache); + window.dispatchEvent(new CustomEvent("ZenWorkspaceDataChanged"), { + bubbles: true, + }); + window.gZenWindowSync.propagateWorkspacesToAllWindows( + aSpaceData ?? this._workspaceCache + ); } propagateWorkspaces(aWorkspaces) { @@ -1374,13 +1494,13 @@ class nsZenWorkspaces { for (const previousWorkspace of previousWorkspaces) { if ( this.workspaceElement(previousWorkspace.uuid) && - !aWorkspaces.find((w) => w.uuid === previousWorkspace.uuid) + !aWorkspaces.find(w => w.uuid === previousWorkspace.uuid) ) { let promise = Promise.resolve(); if (this.isWorkspaceActive(previousWorkspace)) { // If the removed workspace was active, switch to another one const newActiveWorkspace = - aWorkspaces.find((w) => w.uuid !== previousWorkspace.uuid) || null; + aWorkspaces.find(w => w.uuid !== previousWorkspace.uuid) || null; promise = this.changeWorkspace(newActiveWorkspace); } promise = promise.then(() => { @@ -1405,10 +1525,16 @@ class nsZenWorkspaces { const workspaceElement = this.workspaceElement(workspace.uuid); if (workspaceElement) { if (previousElement === null) { - arrowScrollbox.moveBefore(workspaceElement, arrowScrollbox.firstChild); + arrowScrollbox.moveBefore( + workspaceElement, + arrowScrollbox.firstChild + ); hasChanged = true; } else if (previousElement.nextSibling !== workspaceElement) { - arrowScrollbox.moveBefore(workspaceElement, previousElement.nextSibling); + arrowScrollbox.moveBefore( + workspaceElement, + previousElement.nextSibling + ); hasChanged = true; } previousElement = workspaceElement; @@ -1430,7 +1556,7 @@ class nsZenWorkspaces { return; } const workspaces = this._workspaceCache; - const workspace = workspaces.find((w) => w.uuid === id); + const workspace = workspaces.find(w => w.uuid === id); if (!workspace) { console.warn(`Workspace with ID ${id} not found for reordering.`); return; @@ -1444,7 +1570,9 @@ class nsZenWorkspaces { workspaces.splice(currentIndex, 1); // Insert the workspace at the new position if (newPosition < 0 || newPosition > workspaces.length) { - console.warn(`Invalid position ${newPosition} for reordering workspace with ID ${id}.`); + console.warn( + `Invalid position ${newPosition} for reordering workspace with ID ${id}.` + ); return; } workspaces.splice(newPosition, 0, workspace); @@ -1459,10 +1587,13 @@ class nsZenWorkspaces { const previousWorkspace = this.getActiveWorkspace(); document.documentElement.setAttribute("zen-creating-workspace", "true"); await this.createAndSaveWorkspace("Space", undefined, false, 0, { - beforeChangeCallback: async (workspace) => { + beforeChangeCallback: async workspace => { createForm = document.createXULElement("zen-workspace-creation"); createForm.setAttribute("workspace-id", workspace.uuid); - createForm.setAttribute("previous-workspace-id", previousWorkspace?.uuid || ""); + createForm.setAttribute( + "previous-workspace-id", + previousWorkspace?.uuid || "" + ); gBrowser.tabContainer.after(createForm); await createForm.promiseInitialized; }, @@ -1472,13 +1603,21 @@ class nsZenWorkspaces { #unpinnedTabsInWorkspace(workspaceID) { return Array.from(this.allStoredTabs).filter( - (tab) => tab.getAttribute("zen-workspace-id") === workspaceID && tab.visible && !tab.pinned + tab => + tab.getAttribute("zen-workspace-id") === workspaceID && + tab.visible && + !tab.pinned ); } #getClosableTabs(tabs) { - const remainingTabs = tabs.filter((tab) => { - const attributes = ["selected", "multiselected", "pictureinpicture", "soundplaying"]; + const remainingTabs = tabs.filter(tab => { + const attributes = [ + "selected", + "multiselected", + "pictureinpicture", + "soundplaying", + ]; for (const attr of attributes) { if (tab.hasAttribute(attr)) { return false; @@ -1506,10 +1645,11 @@ class nsZenWorkspaces { } async unloadWorkspace() { - const workspaceId = this.#contextMenuData?.workspaceId || this.activeWorkspace; + const workspaceId = + this.#contextMenuData?.workspaceId || this.activeWorkspace; const tabsToUnload = this.allStoredTabs.filter( - (tab) => + tab => tab.getAttribute("zen-workspace-id") === workspaceId && !tab.hasAttribute("zen-empty-tab") && !tab.hasAttribute("zen-essential") && @@ -1574,7 +1714,11 @@ class nsZenWorkspaces { let tabCount = 0; for (let tab of gBrowser.tabs) { const isEssential = tab.getAttribute("zen-essential") === "true"; - if (!tab.hasAttribute("zen-workspace-id") && !tab.pinned && !isEssential) { + if ( + !tab.hasAttribute("zen-workspace-id") && + !tab.pinned && + !isEssential + ) { this.moveTabToWorkspace(tab, space.uuid); tabCount++; } @@ -1600,7 +1744,9 @@ class nsZenWorkspaces { if (!this._changeListeners) { return; } - this._changeListeners = this._changeListeners.filter((listener) => listener.func !== func); + this._changeListeners = this._changeListeners.filter( + listener => listener.func !== func + ); } async changeWorkspaceWithID(workspaceID, ...args) { @@ -1633,7 +1779,11 @@ class nsZenWorkspaces { const previousWorkspace = this.getActiveWorkspace(); alwaysChange = alwaysChange || onInit; this.activeWorkspace = workspace.uuid; - if (previousWorkspace && previousWorkspace.uuid === workspace.uuid && !alwaysChange) { + if ( + previousWorkspace && + previousWorkspace.uuid === workspace.uuid && + !alwaysChange + ) { this._cancelSwipeAnimation(); return; } @@ -1649,7 +1799,8 @@ class nsZenWorkspaces { // note: We are calling this even though it is also called in `updateTabsContainers`. This is mostly // due to a race condition where the workspace strip is not updated before the tabs are moved. this.makeSureEmptyTabIsFirst(); - gBrowser.pinnedTabsContainer = this.pinnedTabsContainer || gBrowser.pinnedTabsContainer; + gBrowser.pinnedTabsContainer = + this.pinnedTabsContainer || gBrowser.pinnedTabsContainer; gBrowser.tabContainer.pinnedTabsContainer = this.pinnedTabsContainer || gBrowser.tabContainer.pinnedTabsContainer; @@ -1660,13 +1811,19 @@ class nsZenWorkspaces { // Second pass: Handle tab selection this.tabContainer._invalidateCachedTabs(); - const tabToSelect = await this._handleTabSelection(workspace, onInit, previousWorkspace.uuid); + const tabToSelect = await this._handleTabSelection( + workspace, + onInit, + previousWorkspace.uuid + ); if (tabToSelect.linkedBrowser) { gBrowser.warmupTab(tabToSelect); } // Update UI and state - const previousWorkspaceIndex = workspaces.findIndex((w) => w.uuid === previousWorkspace.uuid); + const previousWorkspaceIndex = workspaces.findIndex( + w => w.uuid === previousWorkspace.uuid + ); await this.#updateWorkspaceState(workspace, onInit, tabToSelect, { previousWorkspaceIndex, previousWorkspace, @@ -1698,7 +1855,7 @@ class nsZenWorkspaces { const usedGroups = new Set(); let tPos = 0; // _tPos is used for the session store, not needed for folders let pPos = 0; // _pPos is used for the pinned tabs manager - const recurseFolder = (tab) => { + const recurseFolder = tab => { if (tab.group) { recurseFolder(tab.group); if (!usedGroups.has(tab.group.id)) { @@ -1716,10 +1873,18 @@ class nsZenWorkspaces { } } - #updatePaddingTopOnTabs(workspaceElement, essentialContainer, forAnimation = false) { + #updatePaddingTopOnTabs( + workspaceElement, + essentialContainer, + forAnimation = false + ) { if ( workspaceElement && - !(this.#inChangingWorkspace && !forAnimation && !this._alwaysAnimatePaddingTop) + !( + this.#inChangingWorkspace && + !forAnimation && + !this._alwaysAnimatePaddingTop + ) ) { delete this._alwaysAnimatePaddingTop; const essentialsHeight = @@ -1730,14 +1895,18 @@ class nsZenWorkspaces { } } - _organizeWorkspaceStripLocations(workspace, justMove = false, offsetPixels = 0) { + _organizeWorkspaceStripLocations( + workspace, + justMove = false, + offsetPixels = 0 + ) { if (document.documentElement.hasAttribute("zen-creating-workspace")) { // If we are creating a workspace, we don't want to animate the strip return; } this._organizingWorkspaceStrip = true; const workspaces = this.getWorkspaces(); - let workspaceIndex = workspaces.findIndex((w) => w.uuid === workspace.uuid); + let workspaceIndex = workspaces.findIndex(w => w.uuid === workspace.uuid); if (!justMove) { this._fixIndicatorsNames(workspaces); } @@ -1749,7 +1918,8 @@ class nsZenWorkspaces { workspaces[workspaceIndex + (offsetPixels > 0 ? -1 : 1)]?.containerTabId; for (const otherWorkspace of workspaces) { const element = this.workspaceElement(otherWorkspace.uuid); - const newTransform = -(workspaceIndex - workspaces.indexOf(otherWorkspace)) * 100; + const newTransform = + -(workspaceIndex - workspaces.indexOf(otherWorkspace)) * 100; element.style.transform = `translateX(${newTransform + offsetPixels / 2}%)`; } // Hide other essentials with different containerTabId @@ -1783,18 +1953,25 @@ class nsZenWorkspaces { } if (offsetPixels) { // Find the next workspace we are scrolling to - const nextWorkspace = workspaces[workspaceIndex + (offsetPixels > 0 ? -1 : 1)]; + const nextWorkspace = + workspaces[workspaceIndex + (offsetPixels > 0 ? -1 : 1)]; if (nextWorkspace) { const { gradient: nextGradient, grain: nextGrain, toolbarGradient: nextToolbarGradient, } = gZenThemePicker.getGradientForWorkspace(nextWorkspace); - const existingGrain = gZenThemePicker.getGradientForWorkspace(workspace).grain; + const existingGrain = + gZenThemePicker.getGradientForWorkspace(workspace).grain; const percentage = Math.abs(offsetPixels) / 200; - [lazy.browserBackgroundElement, lazy.toolbarBackgroundElement].forEach((element) => { - element.style.setProperty("--zen-background-opacity", 1 - percentage); - }); + [lazy.browserBackgroundElement, lazy.toolbarBackgroundElement].forEach( + element => { + element.style.setProperty( + "--zen-background-opacity", + 1 - percentage + ); + } + ); if (!this._hasAnimatedBackgrounds) { this._hasAnimatedBackgrounds = true; lazy.browserBackgroundElement.style.setProperty( @@ -1815,7 +1992,8 @@ class nsZenWorkspaces { const maxGrain = Math.max(existingGrain, nextGrain); const grainValue = minGrain + - (maxGrain - minGrain) * (existingGrain > nextGrain ? 1 - percentage : percentage); + (maxGrain - minGrain) * + (existingGrain > nextGrain ? 1 - percentage : percentage); if (!this.#inChangingWorkspace) { gZenThemePicker.updateNoise(grainValue); } @@ -1830,9 +2008,15 @@ class nsZenWorkspaces { if (!workspaceIndicator) { return; } - const indicatorName = workspaceIndicator.querySelector(".zen-current-workspace-indicator-name"); - const indicatorIcon = workspaceIndicator.querySelector(".zen-current-workspace-indicator-icon"); - const iconStack = workspaceIndicator.querySelector(".zen-current-workspace-indicator-stack"); + const indicatorName = workspaceIndicator.querySelector( + ".zen-current-workspace-indicator-name" + ); + const indicatorIcon = workspaceIndicator.querySelector( + ".zen-current-workspace-indicator-icon" + ); + const iconStack = workspaceIndicator.querySelector( + ".zen-current-workspace-indicator-stack" + ); if (this.workspaceHasIcon(currentWorkspace)) { indicatorIcon.removeAttribute("no-icon"); @@ -1855,7 +2039,9 @@ class nsZenWorkspaces { _fixIndicatorsNames(workspaces) { for (const workspace of workspaces) { - const workspaceIndicator = this.workspaceElement(workspace.uuid)?.indicator; + const workspaceIndicator = this.workspaceElement( + workspace.uuid + )?.indicator; this.updateWorkspaceIndicator(workspace, workspaceIndicator); } } @@ -1865,22 +2051,35 @@ class nsZenWorkspaces { newWorkspace, shouldAnimate, tabToSelect = null, - { previousWorkspaceIndex = null, previousWorkspace = null, onInit = false } = {} + { + previousWorkspaceIndex = null, + previousWorkspace = null, + onInit = false, + } = {} ) { gZenUIManager.tabsWrapper.style.scrollbarWidth = "none"; const kGlobalAnimationDuration = 0.2; this._animatingChange = true; const animations = []; const workspaces = this.getWorkspaces(); - const newWorkspaceIndex = workspaces.findIndex((w) => w.uuid === newWorkspace.uuid); + const newWorkspaceIndex = workspaces.findIndex( + w => w.uuid === newWorkspace.uuid + ); const isGoingLeft = newWorkspaceIndex <= previousWorkspaceIndex; const clonedEssentials = []; if (shouldAnimate && this.shouldAnimateEssentials && previousWorkspace) { for (const workspace of workspaces) { - const essentialsContainer = this.getEssentialsSection(workspace.containerTabId); - if (clonedEssentials[clonedEssentials.length - 1]?.contextId == workspace.containerTabId) { + const essentialsContainer = this.getEssentialsSection( + workspace.containerTabId + ); + if ( + clonedEssentials[clonedEssentials.length - 1]?.contextId == + workspace.containerTabId + ) { clonedEssentials[clonedEssentials.length - 1].repeat++; - clonedEssentials[clonedEssentials.length - 1].workspaces.push(workspace); + clonedEssentials[clonedEssentials.length - 1].workspaces.push( + workspace + ); continue; } essentialsContainer.setAttribute("hidden", "true"); @@ -1898,9 +2097,10 @@ class nsZenWorkspaces { } document.documentElement.setAttribute("animating-background", "true"); if (shouldAnimate && previousWorkspace) { - let previousBackgroundOpacity = lazy.browserBackgroundElement.style.getPropertyValue( - "--zen-background-opacity" - ); + let previousBackgroundOpacity = + lazy.browserBackgroundElement.style.getPropertyValue( + "--zen-background-opacity" + ); try { // Prevent NaN from being set if (previousBackgroundOpacity) { @@ -1915,8 +2115,11 @@ class nsZenWorkspaces { previousBackgroundOpacity = 1 - previousBackgroundOpacity; } gZenThemePicker.previousBackgroundOpacity = previousBackgroundOpacity; - let elements = [lazy.browserBackgroundElement, lazy.toolbarBackgroundElement]; - elements.forEach((element) => { + let elements = [ + lazy.browserBackgroundElement, + lazy.toolbarBackgroundElement, + ]; + elements.forEach(element => { element.style.setProperty( "--zen-background-opacity", previousBackgroundOpacity @@ -1942,7 +2145,9 @@ class nsZenWorkspaces { } const existingTransform = element.style.transform; const elementWorkspaceId = element.id; - const elementWorkspaceIndex = workspaces.findIndex((w) => w.uuid === elementWorkspaceId); + const elementWorkspaceIndex = workspaces.findIndex( + w => w.uuid === elementWorkspaceId + ); const offset = -(newWorkspaceIndex - elementWorkspaceIndex) * 100; const newTransform = `translateX(${offset}%)`; if (shouldAnimate) { @@ -1951,7 +2156,9 @@ class nsZenWorkspaces { gZenUIManager.motion.animate( element, { - transform: existingTransform ? [existingTransform, newTransform] : newTransform, + transform: existingTransform + ? [existingTransform, newTransform] + : newTransform, paddingTop: existingTransform ? [existingPaddingTop, existingPaddingTop] : existingPaddingTop, @@ -1973,15 +2180,19 @@ class nsZenWorkspaces { } if (this.shouldAnimateEssentials && previousWorkspace) { // Animate essentials - const newWorkspaceEssentialsContainer = clonedEssentials.find((cloned) => - cloned.workspaces.some((w) => w.uuid === newWorkspace.uuid) + const newWorkspaceEssentialsContainer = clonedEssentials.find(cloned => + cloned.workspaces.some(w => w.uuid === newWorkspace.uuid) ); // Get a list of essentials containers that are in between the first and last workspace - const essentialsContainersInBetween = clonedEssentials.filter((cloned) => { + const essentialsContainersInBetween = clonedEssentials.filter(cloned => { const essentialsWorkspaces = cloned.workspaces; - const firstIndex = workspaces.findIndex((w) => w.uuid === essentialsWorkspaces[0].uuid); + const firstIndex = workspaces.findIndex( + w => w.uuid === essentialsWorkspaces[0].uuid + ); const lastIndex = workspaces.findIndex( - (w) => w.uuid === essentialsWorkspaces[essentialsWorkspaces.length - 1].uuid + w => + w.uuid === + essentialsWorkspaces[essentialsWorkspaces.length - 1].uuid ); const [start, end] = [ @@ -2010,10 +2221,12 @@ class nsZenWorkspaces { // Get the index from first and last workspace const firstWorkspaceIndex = workspaces.findIndex( - (w) => w.uuid === essentialsWorkspaces[0].uuid + w => w.uuid === essentialsWorkspaces[0].uuid ); const lastWorkspaceIndex = workspaces.findIndex( - (w) => w.uuid === essentialsWorkspaces[essentialsWorkspaces.length - 1].uuid + w => + w.uuid === + essentialsWorkspaces[essentialsWorkspaces.length - 1].uuid ); cloned.originalContainer.style.removeProperty("transform"); // Check if the container is even going to appear on the screen, to save on animation @@ -2024,10 +2237,14 @@ class nsZenWorkspaces { // so we need to check if any of the workspaces in the container are between the // first and last workspace. !essentialsContainersInBetween.find( - (ce) => - ce.workspaces.some((w) => w.uuid === essentialsWorkspaces[0].uuid) && + ce => ce.workspaces.some( - (w) => w.uuid === essentialsWorkspaces[essentialsWorkspaces.length - 1].uuid + w => w.uuid === essentialsWorkspaces[0].uuid + ) && + ce.workspaces.some( + w => + w.uuid === + essentialsWorkspaces[essentialsWorkspaces.length - 1].uuid ) ) ) { @@ -2035,12 +2252,16 @@ class nsZenWorkspaces { } cloned.originalContainer.parentNode.appendChild(container); let stepsInBetween = - Math.abs(newWorkspaceIndex - (isGoingLeft ? firstWorkspaceIndex : lastWorkspaceIndex)) + - 1; + Math.abs( + newWorkspaceIndex - + (isGoingLeft ? firstWorkspaceIndex : lastWorkspaceIndex) + ) + 1; const usingSameContainer = - newWorkspaceEssentialsContainer?.workspaces.some((w) => w.uuid === newWorkspace.uuid) && newWorkspaceEssentialsContainer?.workspaces.some( - (w) => w.uuid === previousWorkspace.uuid + w => w.uuid === newWorkspace.uuid + ) && + newWorkspaceEssentialsContainer?.workspaces.some( + w => w.uuid === previousWorkspace.uuid ); let newOffset = -( @@ -2060,8 +2281,8 @@ class nsZenWorkspaces { // we can simply not animate the essentials if ( usingSameContainer && - essentialsWorkspaces.some((w) => w.uuid === newWorkspace.uuid) && - essentialsWorkspaces.some((w) => w.uuid === previousWorkspace.uuid) + essentialsWorkspaces.some(w => w.uuid === newWorkspace.uuid) && + essentialsWorkspaces.some(w => w.uuid === previousWorkspace.uuid) ) { newOffset = 0; existingOffset = 0; @@ -2089,12 +2310,20 @@ class nsZenWorkspaces { } // Special case: going forward from single reused container to a new one - if (!usingSameContainer && !isGoingLeft && lastWorkspaceIndex === newWorkspaceIndex - 1) { + if ( + !usingSameContainer && + !isGoingLeft && + lastWorkspaceIndex === newWorkspaceIndex - 1 + ) { existingOffset = 0; newOffset = -100; stepsInBetween = 1; } - if (!usingSameContainer && isGoingLeft && firstWorkspaceIndex === newWorkspaceIndex + 1) { + if ( + !usingSameContainer && + isGoingLeft && + firstWorkspaceIndex === newWorkspaceIndex + 1 + ) { existingOffset = 0; newOffset = 100; stepsInBetween = 1; @@ -2109,7 +2338,11 @@ class nsZenWorkspaces { newOffset = 0; stepsInBetween = 1; } - if (!usingSameContainer && !isGoingLeft && firstWorkspaceIndex === newWorkspaceIndex) { + if ( + !usingSameContainer && + !isGoingLeft && + firstWorkspaceIndex === newWorkspaceIndex + ) { existingOffset = 100; newOffset = 0; stepsInBetween = 1; @@ -2145,13 +2378,15 @@ class nsZenWorkspaces { gZenUIManager._preventToolbarRebuild = true; gZenUIManager.updateTabsToolbar(); } - let promiseTimeout = new Promise((resolve) => + let promiseTimeout = new Promise(resolve => setTimeout(resolve, kGlobalAnimationDuration * 1000 + 50) ); // See issue https://github.com/zen-browser/desktop/issues/9334, we need to add // some sort of timeout to the animation promise, just in case it gets stuck. // We are doing a race between the timeout and the animations finishing. - await Promise.race([Promise.all(animations), promiseTimeout]).catch(console.error); + await Promise.race([Promise.all(animations), promiseTimeout]).catch( + console.error + ); document.documentElement.removeAttribute("animating-background"); if (shouldAnimate) { for (const cloned of clonedEssentials) { @@ -2160,7 +2395,9 @@ class nsZenWorkspaces { this._alwaysAnimatePaddingTop = true; this.updateTabsContainers(); } - const essentialsContainer = this.getEssentialsSection(newWorkspace.containerTabId); + const essentialsContainer = this.getEssentialsSection( + newWorkspace.containerTabId + ); essentialsContainer.removeAttribute("hidden"); essentialsContainer.style.transform = "none"; gBrowser.tabContainer._invalidateCachedTabs(); @@ -2213,7 +2450,9 @@ class nsZenWorkspaces { return ( !tabContextId || tabContextId === "0" || - !workspaces.some((workspace) => workspace.containerTabId === parseInt(tabContextId, 10)) + !workspaces.some( + workspace => workspace.containerTabId === parseInt(tabContextId, 10) + ) ); } @@ -2246,13 +2485,18 @@ class nsZenWorkspaces { // Try last selected tab if it is visible if ( lastSelectedTab && - this._shouldShowTab(lastSelectedTab, workspace.uuid, containerId, workspaces) + this._shouldShowTab( + lastSelectedTab, + workspace.uuid, + containerId, + workspaces + ) ) { tabToSelect = lastSelectedTab; } // Find first suitable tab else { - tabToSelect = gBrowser.visibleTabs.find((tab) => !tab.pinned); + tabToSelect = gBrowser.visibleTabs.find(tab => !tab.pinned); if (!tabToSelect && gBrowser.visibleTabs.length) { tabToSelect = gBrowser.visibleTabs[gBrowser.visibleTabs.length - 1]; } @@ -2289,7 +2533,11 @@ class nsZenWorkspaces { document.documentElement.setAttribute("zen-workspace-id", workspace.uuid); // Recalculate new tab observers - gBrowser.tabContainer.observe(null, "nsPref:changed", "privacy.userContext.enabled"); + gBrowser.tabContainer.observe( + null, + "nsPref:changed", + "privacy.userContext.enabled" + ); gBrowser.tabContainer.arrowScrollbox = this.activeScrollbox; @@ -2300,11 +2548,16 @@ class nsZenWorkspaces { gZenUIManager.tabsWrapper.scrollbarWidth = "none"; this.workspaceIcons.activeIndex = workspace.uuid; - await this._animateTabs(workspace, !onInit && !this._animatingChange, tabToSelect, { - previousWorkspaceIndex, - previousWorkspace, - onInit, - }); + await this._animateTabs( + workspace, + !onInit && !this._animatingChange, + tabToSelect, + { + previousWorkspaceIndex, + previousWorkspace, + onInit, + } + ); this._organizeWorkspaceStripLocations(workspace, true); gZenUIManager.tabsWrapper.style.scrollbarWidth = ""; @@ -2336,7 +2589,10 @@ class nsZenWorkspaces { gBrowser.showTab(tab); } for (const tab of gBrowser.tabs) { - if (!tab.hasAttribute("zen-workspace-id") && !tab.hasAttribute("zen-workspace-id")) { + if ( + !tab.hasAttribute("zen-workspace-id") && + !tab.hasAttribute("zen-workspace-id") + ) { tab.setAttribute("zen-workspace-id", workspace.uuid); } } @@ -2390,7 +2646,9 @@ class nsZenWorkspaces { let itemsToFill = [menubar.querySelector("menupopup"), menuPopup]; for (const popup of itemsToFill) { let isMoveTabPopup = popup.id === menuPopupID; - for (const item of popup.querySelectorAll(".zen-workspace-context-menu-item")) { + for (const item of popup.querySelectorAll( + ".zen-workspace-context-menu-item" + )) { item.remove(); } const separator = document.createXULElement("menuseparator"); @@ -2401,7 +2659,9 @@ class nsZenWorkspaces { popup.appendChild(separator); } let i = 0; - for (let workspace of isMoveTabPopup ? workspaces.reverse() : workspaces) { + for (let workspace of isMoveTabPopup + ? workspaces.reverse() + : workspaces) { const menuItem = this.generateMenuItemForWorkspace( workspace, /* disableCurrent = */ isMoveTabPopup @@ -2425,8 +2685,11 @@ class nsZenWorkspaces { #createWorkspaceData(name, icon, containerTabId = 0) { if (!this.currentWindowIsSyncing) { - containerTabId = parseInt(gBrowser.selectedTab.getAttribute("usercontextid")) || 0; - let label = ContextualIdentityService.getUserContextLabel(containerTabId) || "Default"; + containerTabId = + parseInt(gBrowser.selectedTab.getAttribute("usercontextid")) || 0; + let label = + ContextualIdentityService.getUserContextLabel(containerTabId) || + "Default"; name = this.isPrivateWindow ? "Incognito" : label; if (this.isPrivateWindow) { icon = gZenEmojiPicker.getSVGURL("eye.svg"); @@ -2453,8 +2716,10 @@ class nsZenWorkspaces { return null; } // get extra tabs remaning (e.g. on new profiles) and just move them to the new workspace - const extraTabs = Array.from(gBrowser.tabContainer.arrowScrollbox.children).filter( - (child) => + const extraTabs = Array.from( + gBrowser.tabContainer.arrowScrollbox.children + ).filter( + child => gBrowser.isTab(child) && !child.hasAttribute("zen-workspace-id") && !child.hasAttribute("zen-empty-tab") && @@ -2498,12 +2763,22 @@ class nsZenWorkspaces { this.onPinnedTabsResize( // This is what happens when we join a resize observer, an event listener // while using it as a method. - [{ target: (target?.target ? target.target : target) ?? this.pinnedTabsContainer }], + [ + { + target: + (target?.target ? target.target : target) ?? + this.pinnedTabsContainer, + }, + ], forAnimation ); } - updateShouldHideSeparator(arrowScrollbox, pinnedContainer, fromTabSelection = false) { + updateShouldHideSeparator( + arrowScrollbox, + pinnedContainer, + fromTabSelection = false + ) { const visibleTabsFound = () => { let count = 0; for (const child of arrowScrollbox.children) { @@ -2532,7 +2807,9 @@ class nsZenWorkspaces { const workspaceID = pinnedContainer.getAttribute("zen-workspace-id"); const tabs = this.#unpinnedTabsInWorkspace(workspaceID); const closableTabs = this.#getClosableTabs(tabs); - const button = pinnedContainer.querySelector(".zen-workspace-close-unpinned-tabs-button"); + const button = pinnedContainer.querySelector( + ".zen-workspace-close-unpinned-tabs-button" + ); if (tabs.length === closableTabs.length) { button.setAttribute("can-close", "true"); } else { @@ -2559,14 +2836,19 @@ class nsZenWorkspaces { for (const entry of entries) { let originalWorkspaceId = entry.target.getAttribute("zen-workspace-id"); if (!originalWorkspaceId) { - originalWorkspaceId = entry.target.closest("zen-workspace")?.id || this.activeWorkspace; + originalWorkspaceId = + entry.target.closest("zen-workspace")?.id || this.activeWorkspace; } const workspacesIds = []; if (entry.target.closest("#zen-essentials")) { // Get all workspaces that have the same userContextId - const userContextId = parseInt(entry.target.getAttribute("container") || "0"); - const workspaces = this.getWorkspaces().filter((w) => w.containerTabId === userContextId); - workspacesIds.push(...workspaces.map((w) => w.uuid)); + const userContextId = parseInt( + entry.target.getAttribute("container") || "0" + ); + const workspaces = this.getWorkspaces().filter( + w => w.containerTabId === userContextId + ); + workspacesIds.push(...workspaces.map(w => w.uuid)); } else { workspacesIds.push(originalWorkspaceId); } @@ -2574,12 +2856,17 @@ class nsZenWorkspaces { const workspaceElement = this.workspaceElement(workspaceId); const workspaceObject = this.getWorkspaceFromId(workspaceId); if (!workspaceElement || !workspaceObject) { - console.warn("Workspace element or object not found for id", workspaceId); + console.warn( + "Workspace element or object not found for id", + workspaceId + ); continue; } const arrowScrollbox = workspaceElement.tabsContainer; const pinnedContainer = workspaceElement.pinnedTabsContainer; - const essentialContainer = this.getEssentialsSection(workspaceObject.containerTabId); + const essentialContainer = this.getEssentialsSection( + workspaceObject.containerTabId + ); const essentialNumChildren = essentialContainer.children.length; let essentialHackType = 0; if (essentialNumChildren === 6 || essentialNumChildren === 9) { @@ -2594,7 +2881,11 @@ class nsZenWorkspaces { } else { essentialContainer.removeAttribute("data-hack-type"); } - this.#updatePaddingTopOnTabs(workspaceElement, essentialContainer, forAnimation); + this.#updatePaddingTopOnTabs( + workspaceElement, + essentialContainer, + forAnimation + ); this.updateShouldHideSeparator(arrowScrollbox, pinnedContainer); } } @@ -2610,8 +2901,12 @@ class nsZenWorkspaces { } if (workspaceID) { - if (tab.hasAttribute("change-workspace") && this.moveTabToWorkspace(tab, workspaceID)) { - this.lastSelectedWorkspaceTabs[workspaceID] = gZenGlanceManager.getTabOrGlanceParent(tab); + if ( + tab.hasAttribute("change-workspace") && + this.moveTabToWorkspace(tab, workspaceID) + ) { + this.lastSelectedWorkspaceTabs[workspaceID] = + gZenGlanceManager.getTabOrGlanceParent(tab); tab.removeAttribute("change-workspace"); const workspace = this.getWorkspaceFromId(workspaceID); setTimeout(() => { @@ -2636,14 +2931,21 @@ class nsZenWorkspaces { #changeToEmptyTab() { const isEmpty = gBrowser.selectedTab.hasAttribute("zen-empty-tab"); - gZenCompactModeManager.sidebar.toggleAttribute("zen-has-empty-tab", isEmpty); + gZenCompactModeManager.sidebar.toggleAttribute( + "zen-has-empty-tab", + isEmpty + ); document.documentElement.setAttribute("zen-has-empty-tab", isEmpty); } async onLocationChange(event) { let tab = event.target; this.#changeToEmptyTab(); - if (!this.workspaceEnabled || this.#inChangingWorkspace || this._isClosingWindow) { + if ( + !this.workspaceEnabled || + this.#inChangingWorkspace || + this._isClosingWindow + ) { return; } @@ -2666,11 +2968,16 @@ class nsZenWorkspaces { // Only update last selected tab for non-essential tabs in their workspace if (workspaceID === activeWorkspace.uuid) { - this.lastSelectedWorkspaceTabs[workspaceID] = gZenGlanceManager.getTabOrGlanceParent(tab); + this.lastSelectedWorkspaceTabs[workspaceID] = + gZenGlanceManager.getTabOrGlanceParent(tab); } // Switch workspace if needed - if (workspaceID && workspaceID !== activeWorkspace.uuid && this._hasInitializedTabsStrip) { + if ( + workspaceID && + workspaceID !== activeWorkspace.uuid && + this._hasInitializedTabsStrip + ) { const workspaceToChange = this.getWorkspaceFromId(workspaceID); if (!workspaceToChange) { return; @@ -2685,15 +2992,19 @@ class nsZenWorkspaces { this._organizingWorkspaceStrip = true; let workspaces = this.getWorkspaces(); let workspace = workspaces.find( - (w) => w.uuid === (this.#contextMenuData?.workspaceId || this.activeWorkspace) + w => + w.uuid === (this.#contextMenuData?.workspaceId || this.activeWorkspace) + ); + let userContextId = parseInt( + event.target.getAttribute("data-usercontextid") ); - let userContextId = parseInt(event.target.getAttribute("data-usercontextid")); workspace.containerTabId = userContextId + 0; // +0 to convert to number this.saveWorkspace(workspace); } async closeAllUnpinnedTabs() { - const workspaceId = this.#contextMenuData?.workspaceId || this.activeWorkspace; + const workspaceId = + this.#contextMenuData?.workspaceId || this.activeWorkspace; const unpinnedTabs = this.#unpinnedTabsInWorkspace(workspaceId); const closableTabs = this.#getClosableTabs(unpinnedTabs); @@ -2702,9 +3013,10 @@ class nsZenWorkspaces { } this.#deleteAllUnpinnedTabsInWorkspace(closableTabs); - const restoreClosedTabsShortcut = gZenKeyboardShortcutsManager.getShortcutDisplayFromCommand( - "History:RestoreLastClosedTabOrWindowOrSession" - ); + const restoreClosedTabsShortcut = + gZenKeyboardShortcutsManager.getShortcutDisplayFromCommand( + "History:RestoreLastClosedTabOrWindowOrSession" + ); gZenUIManager.showToast("zen-workspaces-close-all-unpinned-tabs-toast", { l10nArgs: { @@ -2714,7 +3026,8 @@ class nsZenWorkspaces { } async contextDeleteWorkspace() { - const workspaceId = this.#contextMenuData?.workspaceId || this.activeWorkspace; + const workspaceId = + this.#contextMenuData?.workspaceId || this.activeWorkspace; const [title, body] = await document.l10n.formatValues([ { id: "zen-workspaces-delete-workspace-title" }, { @@ -2734,7 +3047,11 @@ class nsZenWorkspaces { return tab; } - async changeWorkspaceShortcut(offset = 1, whileScrolling = false, disableWrap = false) { + async changeWorkspaceShortcut( + offset = 1, + whileScrolling = false, + disableWrap = false + ) { // Cycle through workspaces let workspaces = this.getWorkspaces(); let activeWorkspace = this.getActiveWorkspace(); @@ -2762,7 +3079,7 @@ class nsZenWorkspaces { "cmd_zenOpenWorkspaceCreation", "zen-context-menu-new-folder-toolbar", ]; - commandsToDisable.forEach((cmd) => { + commandsToDisable.forEach(cmd => { const element = document.getElementById(cmd); if (element) { element.setAttribute("disabled", true); @@ -2776,7 +3093,8 @@ class nsZenWorkspaces { ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; document.getElementById("tabContextMenu").hidePopup(); - const previousWorkspaceID = document.documentElement.getAttribute("zen-workspace-id"); + const previousWorkspaceID = + document.documentElement.getAttribute("zen-workspace-id"); for (let tab of tabs) { this.moveTabToWorkspace(tab, workspaceID); if (this.lastSelectedWorkspaceTabs[previousWorkspaceID] === tab) { @@ -2786,11 +3104,12 @@ class nsZenWorkspaces { } } // Make sure we select the last tab in the new workspace - this.lastSelectedWorkspaceTabs[workspaceID] = gZenGlanceManager.getTabOrGlanceParent( - tabs[tabs.length - 1] - ); + this.lastSelectedWorkspaceTabs[workspaceID] = + gZenGlanceManager.getTabOrGlanceParent(tabs[tabs.length - 1]); const workspaces = this.getWorkspaces(); - await this.changeWorkspace(workspaces.find((workspace) => workspace.uuid === workspaceID)); + await this.changeWorkspace( + workspaces.find(workspace => workspace.uuid === workspaceID) + ); } // Tab browser utilities @@ -2808,7 +3127,7 @@ class nsZenWorkspaces { ) { // Find all workspaces that match the given userContextId const matchingWorkspaces = this._workspaceCache.filter( - (workspace) => workspace.containerTabId === userContextId + workspace => workspace.containerTabId === userContextId ); // Check if exactly one workspace matches @@ -2838,9 +3157,13 @@ class nsZenWorkspaces { const containerId = aTab.getAttribute("usercontextid") ?? "0"; // Return all tabs that are not on the same workspace return gBrowser.tabs.filter( - (tab) => - !this._shouldShowTab(tab, tabWorkspaceId, containerId, this._workspaceCache) && - !tab.hasAttribute("zen-empty-tab") + tab => + !this._shouldShowTab( + tab, + tabWorkspaceId, + containerId, + this._workspaceCache + ) && !tab.hasAttribute("zen-empty-tab") ); } @@ -2900,7 +3223,11 @@ class nsZenWorkspaces { // Make the active workspace first workspaces = workspaces.sort((a, b) => /* eslint-disable no-nested-ternary */ - a.uuid === this.activeWorkspace ? -1 : b.uuid === this.activeWorkspace ? 1 : 0 + a.uuid === this.activeWorkspace + ? -1 + : b.uuid === this.activeWorkspace + ? 1 + : 0 ); for (const workspace of workspaces) { const container = this.workspaceElement(workspace.uuid); @@ -2910,7 +3237,11 @@ class nsZenWorkspaces { } } } - const containers = [...essentialsContainer, ...pinnedContainers, ...normalContainers]; + const containers = [ + ...essentialsContainer, + ...pinnedContainers, + ...normalContainers, + ]; for (const container of containers) { if (container.hasAttribute("cloned")) { continue; @@ -2939,7 +3270,7 @@ class nsZenWorkspaces { get allTabGroups() { if (!this._hasInitializedTabsStrip) { let children = this.tabboxChildren; - return children.filter((node) => gBrowser.isTabGroup(node)); + return children.filter(node => gBrowser.isTabGroup(node)); } const pinnedContainers = []; const normalContainers = []; @@ -2983,7 +3314,9 @@ class nsZenWorkspaces { reorganizeTabsAfterWelcome() { const children = gBrowser.tabContainer.arrowScrollbox.children; - const remainingTabs = Array.from(children).filter((child) => gBrowser.isTab(child)); + const remainingTabs = Array.from(children).filter(child => + gBrowser.isTab(child) + ); for (const tab of remainingTabs) { this.moveTabToWorkspace(tab, this.activeWorkspace); } @@ -3007,7 +3340,12 @@ class nsZenWorkspaces { } // Validate tab state - if (tab.closing || !tab.ownerGlobal || tab.ownerGlobal.closed || !tab.linkedBrowser) { + if ( + tab.closing || + !tab.ownerGlobal || + tab.ownerGlobal.closed || + !tab.linkedBrowser + ) { console.warn("Tab is no longer valid, cannot select it"); return; } @@ -3018,25 +3356,32 @@ class nsZenWorkspaces { if ( (tab.getAttribute("zen-workspace-id") !== this.activeWorkspace && !tab.hasAttribute("zen-essential")) || - (currentWorkspace.containerTabId !== parseInt(tab.parentNode.getAttribute("container")) && + (currentWorkspace.containerTabId !== + parseInt(tab.parentNode.getAttribute("container")) && this.containerSpecificEssentials) ) { // Use a mutex-like approach to prevent concurrent workspace changes if (this._workspaceChangeInProgress) { - console.warn("Workspace change already in progress, deferring tab switch"); + console.warn( + "Workspace change already in progress, deferring tab switch" + ); return; } let workspaceToSwitch = undefined; if (tab.hasAttribute("zen-essential")) { // Find first workspace with the same container - const containerTabId = parseInt(tab.parentNode.getAttribute("container")); + const containerTabId = parseInt( + tab.parentNode.getAttribute("container") + ); // +0 to convert to number workspaceToSwitch = this._workspaceCache.find( - (workspace) => workspace.containerTabId + 0 === containerTabId + workspace => workspace.containerTabId + 0 === containerTabId ); } else { - workspaceToSwitch = this.getWorkspaceFromId(tab.getAttribute("zen-workspace-id")); + workspaceToSwitch = this.getWorkspaceFromId( + tab.getAttribute("zen-workspace-id") + ); } if (!workspaceToSwitch) { console.error("No workspace found for tab, cannot switch"); @@ -3070,7 +3415,7 @@ class nsZenWorkspaces { return 0; } const activeWorkspace = this.activeWorkspace; - const workspace = workspaces.find((w) => w.uuid === activeWorkspace); + const workspace = workspaces.find(w => w.uuid === activeWorkspace); return workspace.containerTabId; } @@ -3114,7 +3459,8 @@ class nsZenWorkspaces { // Set the width of each icon to the maximum size they can fit on const widthPerButton = Math.max( - (parent.clientWidth - separation * (parent.children.length - 1)) / parent.children.length, + (parent.clientWidth - separation * (parent.children.length - 1)) / + parent.children.length, minButtonSize ); for (const icon of parent.children) {