Version in base suite: 115.14.0esr-1~deb12u1 Version in overlay suite: 128.3.1esr-1~deb12u1 Base version: firefox-esr_128.3.1esr-1~deb12u1 Target version: firefox-esr_128.4.0esr-1~deb12u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/f/firefox-esr/firefox-esr_128.3.1esr-1~deb12u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/f/firefox-esr/firefox-esr_128.4.0esr-1~deb12u1.dsc .cargo/config.toml.in | 5 CLOBBER | 2 Cargo.lock | 6 Cargo.toml | 8 accessible/base/EventQueue.cpp | 74 accessible/base/EventQueue.h | 3 accessible/base/NotificationController.cpp | 27 accessible/tests/mochitest/name/markup.js | 2 browser/base/content/test/captivePortal/browser.toml | 2 browser/base/content/test/captivePortal/browser_captivePortal_trr_mode3.js | 190 browser/base/content/test/sanitize/browser.toml | 2 browser/base/content/test/sanitize/browser_sanitize-siteDataExceptAddons.js | 105 browser/components/enterprisepolicies/Policies.sys.mjs | 6 browser/components/places/content/browserPlacesViews.js | 9 browser/components/places/content/places-menupopup.js | 4 browser/components/places/tests/browser/browser.toml | 2 browser/components/places/tests/browser/browser_bookmarks_toolbar_drag_with_chevron.js | 181 browser/components/sessionstore/SessionStore.sys.mjs | 31 browser/components/sessionstore/test/marionette/test_restore_sidebar.py | 55 browser/components/textrecognition/textrecognition.css | 2 browser/config/version.txt | 2 browser/config/version_display.txt | 2 browser/extensions/webcompat/data/injections.js | 260 browser/extensions/webcompat/data/shims.js | 21 browser/extensions/webcompat/data/ua_overrides.js | 248 browser/extensions/webcompat/injections/css/bug1779908-play.google.com-scrollbar-fix.css | 15 browser/extensions/webcompat/injections/css/bug1836872-docs.google.com-font-submenus-inaccessible.css | 18 browser/extensions/webcompat/injections/css/bug1856915-login.yahoo.com-unhide-password-button-fix.css | 15 browser/extensions/webcompat/injections/css/bug1877346-offerup.com-infinite-scroll-fix.css | 20 browser/extensions/webcompat/injections/css/bug1879879-developers.pinterest.com-list-alignment-fix.css | 12 browser/extensions/webcompat/injections/css/bug1882040-disable-pull-to-refresh.css | 14 browser/extensions/webcompat/injections/css/bug1886616-www.six-group.com-select-fix.css | 15 browser/extensions/webcompat/injections/css/bug1895051-www.zhihu.com-broken-button-fix.css | 16 browser/extensions/webcompat/injections/css/bug1895994-softtrans.ro-unlock-scrolling.css | 16 browser/extensions/webcompat/injections/css/bug1896349-vivaldi.com-selected-text-fix.css | 13 browser/extensions/webcompat/injections/css/bug1896571-gracobaby.ca-unlock-scrolling.css | 18 browser/extensions/webcompat/injections/js/bug1841730-www.korg.com-fix-broken-page-loads.js | 35 browser/extensions/webcompat/injections/js/bug1881922-disable-legacy-mutation-events.js | 43 browser/extensions/webcompat/injections/js/bug1889326-office365-email-handling-prompt-autohide.js | 36 browser/extensions/webcompat/injections/js/bug1898952-digits.t-mobile.com.js | 68 browser/extensions/webcompat/injections/js/bug1899937-plus.nhk.jp-request-picture-in-picture.js | 27 browser/extensions/webcompat/injections/js/bug1924500-www.tiktok.com-fix-captcha-slider.js | 71 browser/extensions/webcompat/lib/ua_overrides.js | 7 browser/extensions/webcompat/manifest.json | 3 browser/extensions/webcompat/moz.build | 18 browser/extensions/webcompat/shims/figshare.js | 82 browser/locales/en-US/browser/policies/policies-descriptions.ftl | 2 browser/locales/en-US/chrome/browser/browser.properties | 7 browser/locales/l10n-changesets.json | 208 browser/modules/PermissionUI.sys.mjs | 47 browser/themes/shared/jar.inc.mn | 1 browser/themes/shared/migration/migration-wizard.css | 2 browser/themes/shared/tabbrowser/content-area.css | 7 browser/themes/shared/tabbrowser/hourglass.svg | 9 browser/themes/shared/tabbrowser/tabs.css | 4 browser/themes/shared/urlbar-searchbar.css | 13 build/zstandard_requirements.in | 2 build/zstandard_requirements.txt | 145 config/milestone.txt | 2 debian/changelog | 10 devtools/client/responsive/responsive-browser.css | 2 devtools/server/tests/chrome/test_css-properties.html | 11 docshell/base/BrowsingContext.cpp | 33 docshell/base/BrowsingContext.h | 12 docshell/base/CanonicalBrowsingContext.cpp | 8 docshell/base/nsDocShell.cpp | 56 docshell/base/nsDocShellLoadState.cpp | 5 docshell/base/nsDocShellLoadState.h | 3 docshell/base/nsIWebNavigation.idl | 5 docshell/shistory/ChildSHistory.cpp | 2 docshell/test/navigation/test_rate_limit_location_change.html | 9 dom/base/Location.cpp | 2 dom/base/LocationBase.cpp | 2 dom/base/nsHistory.cpp | 16 dom/base/nsHistory.h | 2 dom/base/nsLineBreaker.cpp | 104 dom/base/nsLineBreaker.h | 7 dom/base/nsObjectLoadingContent.cpp | 63 dom/base/nsObjectLoadingContent.h | 25 dom/base/test/file_location_href_unknown_protocol.html | 5 dom/canvas/WebGLContextVertices.cpp | 1 dom/canvas/WebGLShaderValidator.cpp | 4 dom/canvas/WebGLVertexArray.cpp | 9 dom/canvas/WebGLVertexArray.h | 4 dom/canvas/WebGLVertexArrayFake.cpp | 6 dom/chrome-webidl/BrowsingContext.webidl | 2 dom/console/Console.cpp | 1 dom/geolocation/Geolocation.cpp | 257 dom/geolocation/Geolocation.h | 17 dom/geolocation/GeolocationIPCUtils.h | 64 dom/geolocation/GeolocationSystem.cpp | 24 dom/geolocation/GeolocationSystem.h | 55 dom/geolocation/GeolocationSystemWin.cpp | 351 dom/geolocation/GeolocationUIUtilsWin.sys.mjs | 26 dom/geolocation/components.conf | 12 dom/geolocation/moz.build | 28 dom/geolocation/nsIGeolocationUIUtilsWin.idl | 21 dom/html/HTMLEmbedElement.cpp | 4 dom/html/HTMLObjectElement.cpp | 6 dom/indexedDB/ActorsParent.cpp | 111 dom/indexedDB/DatabaseFileManager.h | 9 dom/indexedDB/SchemaUpgrades.cpp | 3 dom/ipc/ContentParent.cpp | 30 dom/ipc/ContentParent.h | 8 dom/ipc/PContent.ipdl | 12 dom/media/VideoFrameContainer.cpp | 17 dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp | 6 dom/media/platforms/ffmpeg/FFmpegDecoderModule.h | 27 dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp | 11 dom/media/systemservices/CamerasChild.cpp | 2 dom/push/PushCrypto.sys.mjs | 20 dom/svg/SVGPolyElement.cpp | 19 dom/svg/SVGPolygonElement.cpp | 7 dom/svg/SVGPolylineElement.cpp | 7 dom/system/linux/moz.build | 2 dom/webidl/History.webidl | 2 dom/workers/WorkerPrivate.cpp | 14 dom/workers/test/WorkerDebugger.initialize_waiting_debugger.js | 4 gfx/2d/DrawTargetCairo.cpp | 47 gfx/layers/ipc/CanvasChild.cpp | 8 gfx/layers/ipc/CompositorThread.cpp | 6 gfx/thebes/gfxPlatform.cpp | 13 js/src/vm/ArrayBufferViewObject.cpp | 8 l10n-an/browser/browser/confirmationHints.ftl | 5 l10n-an/browser/browser/preferences/preferences.ftl | 30 l10n-ar/browser/browser/aboutLogins.ftl | 1 l10n-ar/browser/browser/colorways.ftl | 16 l10n-ar/browser/browser/components/mozSupportLink.ftl | 2 l10n-ar/browser/browser/featureCallout.ftl | 42 l10n-ar/browser/browser/firefoxView.ftl | 21 l10n-ar/browser/browser/genai.ftl | 47 l10n-ar/browser/browser/originControls.ftl | 36 l10n-ar/browser/browser/profile/default-bookmarks.ftl | 27 l10n-ar/browser/browser/reportBrokenSite.ftl | 36 l10n-ar/browser/browser/shopping.ftl | 102 l10n-ar/browser/browser/sidebar.ftl | 151 l10n-ar/browser/browser/sitePermissions.ftl | 13 l10n-ar/browser/browser/spotlight.ftl | 8 l10n-ar/browser/browser/webProtocolHandler.ftl | 10 l10n-ar/browser/browser/webauthnDialog.ftl | 10 l10n-ar/toolkit/toolkit/about/aboutGlean.ftl | 17 l10n-ar/toolkit/toolkit/about/aboutThirdParty.ftl | 48 l10n-ar/toolkit/toolkit/about/aboutWebauthn.ftl | 78 l10n-ar/toolkit/toolkit/about/aboutWindowsMessages.ftl | 11 l10n-ar/toolkit/toolkit/contentanalysis/contentanalysis.ftl | 24 l10n-ar/toolkit/toolkit/featuregates/features.ftl | 29 l10n-ar/toolkit/toolkit/global/arrowscrollbox.ftl | 18 l10n-ar/toolkit/toolkit/global/cookieBannerHandling.ftl | 2 l10n-ar/toolkit/toolkit/global/datepicker.ftl | 47 l10n-ar/toolkit/toolkit/global/handlerDialog.ftl | 42 l10n-ar/toolkit/toolkit/global/mozSupportLink.ftl | 2 l10n-ar/toolkit/toolkit/global/processTypes.ftl | 31 l10n-ar/toolkit/toolkit/global/run-from-dmg.ftl | 25 l10n-ar/toolkit/toolkit/pdfviewer/viewer.ftl | 25 l10n-ar/toolkit/toolkit/pictureinpicture/pictureinpicture.ftl | 42 l10n-be/browser/browser/aboutDialog.ftl | 11 l10n-be/browser/browser/aboutLogins.ftl | 2 l10n-be/browser/browser/browser.ftl | 6 l10n-be/browser/browser/defaultBrowserNotification.ftl | 2 l10n-be/browser/browser/featureCallout.ftl | 27 l10n-be/browser/browser/genai.ftl | 88 l10n-be/browser/browser/newtab/asrouter.ftl | 12 l10n-be/browser/browser/newtab/newtab.ftl | 42 l10n-be/browser/browser/newtab/onboarding.ftl | 4 l10n-be/browser/browser/sanitize.ftl | 4 l10n-be/browser/browser/screenshots.ftl | 20 l10n-be/browser/browser/shopping.ftl | 4 l10n-be/browser/browser/sidebar.ftl | 151 l10n-be/browser/browser/tabContextMenu.ftl | 13 l10n-be/browser/chrome/browser/browser.properties | 429 - l10n-be/devtools/client/aboutdebugging.ftl | 108 l10n-be/devtools/shared/styleinspector.properties | 198 l10n-be/dom/chrome/appstrings.properties | 68 l10n-be/dom/chrome/layout/css.properties | 95 l10n-be/dom/chrome/security/csp.properties | 10 l10n-be/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-be/toolkit/toolkit/featuregates/features.ftl | 16 l10n-be/toolkit/toolkit/global/antiTracking.ftl | 12 l10n-be/toolkit/toolkit/neterror/netError.ftl | 1 l10n-be/toolkit/toolkit/pdfviewer/viewer.ftl | 95 l10n-bg/browser/branding/official/brand.ftl | 13 l10n-bg/browser/browser/aboutDialog.ftl | 11 l10n-bg/browser/browser/aboutLogins.ftl | 2 l10n-bg/browser/browser/aboutPocket.ftl | 4 l10n-bg/browser/browser/allTabsMenu.ftl | 2 l10n-bg/browser/browser/backgroundtasks/defaultagent.ftl | 1 l10n-bg/browser/browser/browser.ftl | 15 l10n-bg/browser/browser/confirmationHints.ftl | 1 l10n-bg/browser/browser/featureCallout.ftl | 8 l10n-bg/browser/browser/firefoxView.ftl | 5 l10n-bg/browser/browser/fxviewTabList.ftl | 17 l10n-bg/browser/browser/genai.ftl | 58 l10n-bg/browser/browser/menubar.ftl | 3 l10n-bg/browser/browser/migration.ftl | 2 l10n-bg/browser/browser/migrationWizard.ftl | 54 l10n-bg/browser/browser/newtab/asrouter.ftl | 17 l10n-bg/browser/browser/newtab/newtab.ftl | 16 l10n-bg/browser/browser/newtab/onboarding.ftl | 8 l10n-bg/browser/browser/originControls.ftl | 7 l10n-bg/browser/browser/policies/policies-descriptions.ftl | 2 l10n-bg/browser/browser/preferences/permissions.ftl | 3 l10n-bg/browser/browser/preferences/preferences.ftl | 2 l10n-bg/browser/browser/profile/default-bookmarks.ftl | 20 l10n-bg/browser/browser/sanitize.ftl | 29 l10n-bg/browser/browser/screenshots.ftl | 6 l10n-bg/browser/browser/shopping.ftl | 16 l10n-bg/browser/browser/spotlight.ftl | 1 l10n-bg/browser/browser/sync.ftl | 2 l10n-bg/browser/browser/syncedTabs.ftl | 2 l10n-bg/browser/browser/tabbrowser.ftl | 16 l10n-bg/browser/browser/translations.ftl | 7 l10n-bg/browser/browser/unifiedExtensions.ftl | 4 l10n-bg/browser/browser/webauthnDialog.ftl | 24 l10n-bg/browser/chrome/browser/browser.properties | 321 l10n-bg/browser/pdfviewer/viewer.properties | 2 l10n-bg/devtools/client/aboutdebugging.ftl | 16 l10n-bg/devtools/client/netmonitor.properties | 93 l10n-bg/devtools/client/network-throttling.properties | 21 l10n-bg/devtools/client/perftools.ftl | 54 l10n-bg/devtools/client/tooltips.ftl | 15 l10n-bg/devtools/shared/debugger-paused-reasons.ftl | 43 l10n-bg/dom/chrome/dom/dom.properties | 392 l10n-bg/security/manager/security/pippki/pippki.ftl | 2 l10n-bg/toolkit/toolkit/about/aboutAddons.ftl | 8 l10n-bg/toolkit/toolkit/about/aboutGlean.ftl | 10 l10n-bg/toolkit/toolkit/about/aboutNetworking.ftl | 17 l10n-bg/toolkit/toolkit/about/aboutProcesses.ftl | 14 l10n-bg/toolkit/toolkit/about/aboutSupport.ftl | 11 l10n-bg/toolkit/toolkit/about/aboutTelemetry.ftl | 3 l10n-bg/toolkit/toolkit/about/aboutThirdParty.ftl | 2 l10n-bg/toolkit/toolkit/about/aboutWebrtc.ftl | 48 l10n-bg/toolkit/toolkit/about/certviewer.ftl | 8 l10n-bg/toolkit/toolkit/contentanalysis/contentanalysis.ftl | 2 l10n-bg/toolkit/toolkit/global/browser-utils.ftl | 7 l10n-bg/toolkit/toolkit/global/commonDialog.ftl | 1 l10n-bg/toolkit/toolkit/global/datetimebox.ftl | 4 l10n-bg/toolkit/toolkit/global/handlerDialog.ftl | 8 l10n-bg/toolkit/toolkit/global/profileDowngrade.ftl | 3 l10n-bg/toolkit/toolkit/global/run-from-dmg.ftl | 1 l10n-bg/toolkit/toolkit/neterror/netError.ftl | 1 l10n-bg/toolkit/toolkit/payments/payments.ftl | 31 l10n-bg/toolkit/toolkit/pdfviewer/viewer.ftl | 49 l10n-bg/toolkit/toolkit/pictureinpicture/pictureinpicture.ftl | 13 l10n-bg/toolkit/toolkit/printing/printPreview.ftl | 5 l10n-br/browser/browser/aboutDialog.ftl | 11 l10n-br/browser/browser/aboutLogins.ftl | 11 l10n-br/browser/browser/appmenu.ftl | 15 l10n-br/browser/browser/browser.ftl | 10 l10n-br/browser/browser/defaultBrowserNotification.ftl | 1 l10n-br/browser/browser/featureCallout.ftl | 23 l10n-br/browser/browser/firefoxView.ftl | 6 l10n-br/browser/browser/genai.ftl | 19 l10n-br/browser/browser/newtab/asrouter.ftl | 9 l10n-br/browser/browser/newtab/newtab.ftl | 5 l10n-br/browser/browser/newtab/onboarding.ftl | 5 l10n-br/browser/browser/shopping.ftl | 6 l10n-br/browser/browser/sidebar.ftl | 118 l10n-br/browser/browser/sync.ftl | 1 l10n-br/browser/browser/syncedTabs.ftl | 5 l10n-br/browser/browser/tabContextMenu.ftl | 6 l10n-br/browser/browser/tabbrowser.ftl | 4 l10n-br/browser/browser/webrtcIndicator.ftl | 3 l10n-br/browser/extensions/formautofill/formautofill.properties | 20 l10n-br/devtools/client/aboutdebugging.ftl | 3 l10n-br/devtools/client/components.properties | 26 l10n-br/devtools/client/debugger.properties | 888 -- l10n-br/devtools/client/netmonitor.properties | 1157 -- l10n-br/devtools/client/webconsole.properties | 381 l10n-br/devtools/shared/styleinspector.properties | 187 l10n-br/dom/chrome/accessibility/win/accessible.properties | 34 l10n-br/toolkit/chrome/global/narrate.properties | 13 l10n-br/toolkit/crashreporter/crashreporter.ftl | 4 l10n-br/toolkit/toolkit/about/aboutAddons.ftl | 2 l10n-br/toolkit/toolkit/about/aboutReader.ftl | 15 l10n-br/toolkit/toolkit/about/aboutSupport.ftl | 13 l10n-br/toolkit/toolkit/contentanalysis/contentanalysis.ftl | 2 l10n-br/toolkit/toolkit/featuregates/features.ftl | 2 l10n-br/toolkit/toolkit/global/commonDialog.ftl | 5 l10n-br/toolkit/toolkit/global/datepicker.ftl | 2 l10n-br/toolkit/toolkit/global/datetimebox.ftl | 4 l10n-br/toolkit/toolkit/global/mozMessageBar.ftl | 2 l10n-br/toolkit/toolkit/neterror/netError.ftl | 4 l10n-br/toolkit/toolkit/pdfviewer/viewer.ftl | 28 l10n-br/toolkit/toolkit/printing/printPreview.ftl | 4 l10n-br/toolkit/toolkit/updates/elevation.ftl | 4 l10n-bs/browser/browser/preferences/preferences.ftl | 131 l10n-ca/browser/browser/appmenu.ftl | 2 l10n-ca/browser/browser/browserContext.ftl | 2 l10n-ca/browser/browser/menubar.ftl | 2 l10n-ca/browser/browser/translations.ftl | 8 l10n-ca/toolkit/toolkit/about/certviewer.ftl | 6 l10n-ca/toolkit/toolkit/pdfviewer/viewer.ftl | 26 l10n-cak/browser/browser/aboutDialog.ftl | 28 l10n-cak/browser/browser/aboutLogins.ftl | 7 l10n-cs/.gitattributes | 2 l10n-cs/README.md | 17 l10n-cs/browser/browser/aboutDialog.ftl | 11 l10n-cs/browser/browser/aboutLogins.ftl | 2 l10n-cs/browser/browser/addonNotifications.ftl | 5 l10n-cs/browser/browser/allTabsMenu.ftl | 2 l10n-cs/browser/browser/browser.ftl | 14 l10n-cs/browser/browser/defaultBrowserNotification.ftl | 8 l10n-cs/browser/browser/featureCallout.ftl | 27 l10n-cs/browser/browser/genai.ftl | 64 l10n-cs/browser/browser/newtab/asrouter.ftl | 20 l10n-cs/browser/browser/newtab/newtab.ftl | 4 l10n-cs/browser/browser/newtab/onboarding.ftl | 39 l10n-cs/browser/browser/policies/policies-descriptions.ftl | 2 l10n-cs/browser/browser/preferences/preferences.ftl | 2 l10n-cs/browser/browser/sanitize.ftl | 4 l10n-cs/browser/browser/shopping.ftl | 4 l10n-cs/browser/browser/sidebar.ftl | 80 l10n-cs/browser/browser/tabContextMenu.ftl | 16 l10n-cs/browser/browser/tabbrowser.ftl | 14 l10n-cs/browser/chrome/browser/browser.properties | 429 - l10n-cs/devtools/client/aboutdebugging.ftl | 3 l10n-cs/devtools/client/inspector.properties | 404 l10n-cs/devtools/shared/styleinspector.properties | 198 l10n-cs/dom/chrome/appstrings.properties | 68 l10n-cs/dom/chrome/layout/css.properties | 95 l10n-cs/dom/chrome/security/csp.properties | 7 l10n-cs/toolkit/chrome/global/narrate.properties | 4 l10n-cs/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-cs/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-cs/toolkit/toolkit/featuregates/features.ftl | 2 l10n-cs/toolkit/toolkit/global/antiTracking.ftl | 13 l10n-cs/toolkit/toolkit/global/extensions.ftl | 24 l10n-cs/toolkit/toolkit/neterror/netError.ftl | 1 l10n-cs/toolkit/toolkit/neterror/nsserrors.ftl | 7 l10n-cs/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-cy/browser/browser/aboutDialog.ftl | 11 l10n-cy/browser/browser/aboutLogins.ftl | 2 l10n-cy/browser/browser/addonNotifications.ftl | 1 l10n-cy/browser/browser/allTabsMenu.ftl | 2 l10n-cy/browser/browser/browser.ftl | 15 l10n-cy/browser/browser/browserContext.ftl | 2 l10n-cy/browser/browser/featureCallout.ftl | 27 l10n-cy/browser/browser/genai.ftl | 83 l10n-cy/browser/browser/newtab/asrouter.ftl | 12 l10n-cy/browser/browser/newtab/newtab.ftl | 4 l10n-cy/browser/browser/newtab/onboarding.ftl | 40 l10n-cy/browser/browser/policies/policies-descriptions.ftl | 2 l10n-cy/browser/browser/preferences/containers.ftl | 9 l10n-cy/browser/browser/sanitize.ftl | 4 l10n-cy/browser/browser/shopping.ftl | 4 l10n-cy/browser/browser/sidebar.ftl | 75 l10n-cy/browser/browser/tabContextMenu.ftl | 16 l10n-cy/browser/browser/tabbrowser.ftl | 14 l10n-cy/browser/chrome/browser/browser.properties | 429 - l10n-cy/devtools/client/aboutdebugging.ftl | 3 l10n-cy/devtools/client/inspector.properties | 404 l10n-cy/devtools/shared/styleinspector.properties | 198 l10n-cy/dom/chrome/appstrings.properties | 68 l10n-cy/dom/chrome/layout/css.properties | 95 l10n-cy/dom/chrome/security/csp.properties | 7 l10n-cy/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-cy/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-cy/toolkit/toolkit/global/antiTracking.ftl | 15 l10n-cy/toolkit/toolkit/global/extensions.ftl | 26 l10n-cy/toolkit/toolkit/global/textActions.ftl | 4 l10n-cy/toolkit/toolkit/neterror/netError.ftl | 1 l10n-cy/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-da/browser/browser/aboutDialog.ftl | 11 l10n-da/browser/browser/aboutLogins.ftl | 2 l10n-da/browser/browser/addonNotifications.ftl | 1 l10n-da/browser/browser/allTabsMenu.ftl | 2 l10n-da/browser/browser/browser.ftl | 13 l10n-da/browser/browser/defaultBrowserNotification.ftl | 2 l10n-da/browser/browser/featureCallout.ftl | 27 l10n-da/browser/browser/genai.ftl | 130 l10n-da/browser/browser/newtab/asrouter.ftl | 12 l10n-da/browser/browser/newtab/newtab.ftl | 46 l10n-da/browser/browser/newtab/onboarding.ftl | 50 l10n-da/browser/browser/policies/policies-descriptions.ftl | 2 l10n-da/browser/browser/sanitize.ftl | 4 l10n-da/browser/browser/screenshots.ftl | 20 l10n-da/browser/browser/shopping.ftl | 4 l10n-da/browser/browser/sidebar.ftl | 147 l10n-da/browser/browser/tabContextMenu.ftl | 18 l10n-da/browser/browser/tabbrowser.ftl | 14 l10n-da/browser/chrome/browser/browser.properties | 7 l10n-da/browser/chrome/overrides/appstrings.properties | 80 l10n-da/devtools/client/aboutdebugging.ftl | 115 l10n-da/devtools/client/inspector.properties | 404 l10n-da/devtools/shared/styleinspector.properties | 198 l10n-da/dom/chrome/appstrings.properties | 68 l10n-da/dom/chrome/layout/css.properties | 95 l10n-da/dom/chrome/security/csp.properties | 10 l10n-da/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-da/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-da/toolkit/toolkit/featuregates/features.ftl | 16 l10n-da/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-da/toolkit/toolkit/global/extensions.ftl | 22 l10n-da/toolkit/toolkit/neterror/certError.ftl | 32 l10n-da/toolkit/toolkit/neterror/netError.ftl | 1 l10n-da/toolkit/toolkit/pdfviewer/viewer.ftl | 95 l10n-de/browser/browser/aboutDialog.ftl | 11 l10n-de/browser/browser/aboutLogins.ftl | 2 l10n-de/browser/browser/addonNotifications.ftl | 1 l10n-de/browser/browser/allTabsMenu.ftl | 2 l10n-de/browser/browser/browser.ftl | 13 l10n-de/browser/browser/featureCallout.ftl | 27 l10n-de/browser/browser/genai.ftl | 115 l10n-de/browser/browser/newtab/asrouter.ftl | 12 l10n-de/browser/browser/newtab/newtab.ftl | 4 l10n-de/browser/browser/newtab/onboarding.ftl | 48 l10n-de/browser/browser/policies/policies-descriptions.ftl | 2 l10n-de/browser/browser/sanitize.ftl | 4 l10n-de/browser/browser/shopping.ftl | 4 l10n-de/browser/browser/sidebar.ftl | 67 l10n-de/browser/browser/tabContextMenu.ftl | 16 l10n-de/browser/browser/tabbrowser.ftl | 14 l10n-de/browser/chrome/browser/browser.properties | 429 - l10n-de/browser/chrome/overrides/appstrings.properties | 78 l10n-de/devtools/client/aboutdebugging.ftl | 115 l10n-de/devtools/client/inspector.properties | 404 l10n-de/devtools/shared/styleinspector.properties | 198 l10n-de/dom/chrome/appstrings.properties | 68 l10n-de/dom/chrome/layout/css.properties | 95 l10n-de/dom/chrome/security/csp.properties | 10 l10n-de/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-de/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-de/toolkit/toolkit/featuregates/features.ftl | 9 l10n-de/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-de/toolkit/toolkit/global/extensions.ftl | 22 l10n-de/toolkit/toolkit/neterror/certError.ftl | 32 l10n-de/toolkit/toolkit/neterror/netError.ftl | 1 l10n-de/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-dsb/browser/browser/aboutDialog.ftl | 11 l10n-dsb/browser/browser/aboutLogins.ftl | 2 l10n-dsb/browser/browser/addonNotifications.ftl | 2 l10n-dsb/browser/browser/allTabsMenu.ftl | 2 l10n-dsb/browser/browser/browser.ftl | 14 l10n-dsb/browser/browser/featureCallout.ftl | 27 l10n-dsb/browser/browser/genai.ftl | 83 l10n-dsb/browser/browser/newtab/asrouter.ftl | 18 l10n-dsb/browser/browser/newtab/newtab.ftl | 10 l10n-dsb/browser/browser/newtab/onboarding.ftl | 41 l10n-dsb/browser/browser/policies/policies-descriptions.ftl | 1 l10n-dsb/browser/browser/preferences/preferences.ftl | 5 l10n-dsb/browser/browser/sanitize.ftl | 4 l10n-dsb/browser/browser/shopping.ftl | 4 l10n-dsb/browser/browser/sidebar.ftl | 75 l10n-dsb/browser/browser/tabContextMenu.ftl | 16 l10n-dsb/browser/browser/tabbrowser.ftl | 14 l10n-dsb/browser/chrome/browser/browser.properties | 7 l10n-dsb/devtools/client/aboutdebugging.ftl | 3 l10n-dsb/devtools/client/inspector.properties | 404 l10n-dsb/devtools/shared/styleinspector.properties | 198 l10n-dsb/dom/chrome/appstrings.properties | 68 l10n-dsb/dom/chrome/layout/css.properties | 95 l10n-dsb/dom/chrome/security/csp.properties | 7 l10n-dsb/security/manager/chrome/pipnss/nsserrors.properties | 1 l10n-dsb/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-dsb/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-dsb/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-dsb/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-dsb/toolkit/toolkit/featuregates/features.ftl | 2 l10n-dsb/toolkit/toolkit/global/antiTracking.ftl | 13 l10n-dsb/toolkit/toolkit/global/extensions.ftl | 24 l10n-dsb/toolkit/toolkit/neterror/netError.ftl | 1 l10n-dsb/toolkit/toolkit/neterror/nsserrors.ftl | 1 l10n-dsb/toolkit/toolkit/pdfviewer/viewer.ftl | 40 l10n-el/browser/browser/aboutDialog.ftl | 11 l10n-el/browser/browser/aboutLogins.ftl | 2 l10n-el/browser/browser/addonNotifications.ftl | 2 l10n-el/browser/browser/allTabsMenu.ftl | 2 l10n-el/browser/browser/browser.ftl | 14 l10n-el/browser/browser/featureCallout.ftl | 27 l10n-el/browser/browser/firefoxView.ftl | 14 l10n-el/browser/browser/genai.ftl | 71 l10n-el/browser/browser/newtab/asrouter.ftl | 24 l10n-el/browser/browser/newtab/newtab.ftl | 6 l10n-el/browser/browser/newtab/onboarding.ftl | 40 l10n-el/browser/browser/policies/policies-descriptions.ftl | 1 l10n-el/browser/browser/preferences/preferences.ftl | 9 l10n-el/browser/browser/sanitize.ftl | 4 l10n-el/browser/browser/shopping.ftl | 4 l10n-el/browser/browser/sidebar.ftl | 75 l10n-el/browser/browser/tabContextMenu.ftl | 16 l10n-el/browser/browser/tabbrowser.ftl | 14 l10n-el/browser/chrome/browser/browser.properties | 429 - l10n-el/devtools/client/aboutdebugging.ftl | 3 l10n-el/devtools/client/inspector.properties | 404 l10n-el/devtools/shared/styleinspector.properties | 198 l10n-el/dom/chrome/appstrings.properties | 68 l10n-el/dom/chrome/layout/css.properties | 95 l10n-el/dom/chrome/security/csp.properties | 7 l10n-el/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-el/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-el/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-el/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-el/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-el/toolkit/toolkit/branding/brandings.ftl | 6 l10n-el/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-el/toolkit/toolkit/global/extensions.ftl | 23 l10n-el/toolkit/toolkit/neterror/netError.ftl | 1 l10n-el/toolkit/toolkit/neterror/nsserrors.ftl | 1 l10n-el/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-en-CA/browser/browser/aboutDialog.ftl | 11 l10n-en-CA/browser/browser/aboutLogins.ftl | 2 l10n-en-CA/browser/browser/browser.ftl | 4 l10n-en-CA/browser/browser/genai.ftl | 4 l10n-en-CA/browser/browser/preferences/preferences.ftl | 2 l10n-en-CA/browser/browser/sanitize.ftl | 4 l10n-en-CA/browser/browser/shopping.ftl | 4 l10n-en-CA/browser/browser/sidebar.ftl | 32 l10n-en-CA/browser/chrome/browser/browser.properties | 429 - l10n-en-CA/browser/chrome/overrides/appstrings.properties | 78 l10n-en-CA/devtools/shared/styleinspector.properties | 198 l10n-en-CA/dom/chrome/appstrings.properties | 68 l10n-en-CA/dom/chrome/layout/css.properties | 95 l10n-en-CA/dom/chrome/security/csp.properties | 7 l10n-en-CA/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-en-CA/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-en-CA/toolkit/toolkit/neterror/certError.ftl | 1 l10n-en-CA/toolkit/toolkit/neterror/netError.ftl | 1 l10n-en-CA/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-en-GB/browser/browser/aboutDialog.ftl | 11 l10n-en-GB/browser/browser/aboutLogins.ftl | 2 l10n-en-GB/browser/browser/addonNotifications.ftl | 2 l10n-en-GB/browser/browser/allTabsMenu.ftl | 2 l10n-en-GB/browser/browser/browser.ftl | 14 l10n-en-GB/browser/browser/featureCallout.ftl | 27 l10n-en-GB/browser/browser/genai.ftl | 71 l10n-en-GB/browser/browser/newtab/asrouter.ftl | 18 l10n-en-GB/browser/browser/newtab/newtab.ftl | 4 l10n-en-GB/browser/browser/newtab/onboarding.ftl | 40 l10n-en-GB/browser/browser/policies/policies-descriptions.ftl | 1 l10n-en-GB/browser/browser/preferences/preferences.ftl | 7 l10n-en-GB/browser/browser/sanitize.ftl | 4 l10n-en-GB/browser/browser/shopping.ftl | 4 l10n-en-GB/browser/browser/sidebar.ftl | 75 l10n-en-GB/browser/browser/tabContextMenu.ftl | 16 l10n-en-GB/browser/browser/tabbrowser.ftl | 14 l10n-en-GB/browser/chrome/browser/browser.properties | 429 - l10n-en-GB/devtools/client/aboutdebugging.ftl | 3 l10n-en-GB/devtools/client/inspector.properties | 404 l10n-en-GB/devtools/shared/styleinspector.properties | 198 l10n-en-GB/dom/chrome/appstrings.properties | 68 l10n-en-GB/dom/chrome/layout/css.properties | 95 l10n-en-GB/dom/chrome/security/csp.properties | 7 l10n-en-GB/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-en-GB/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-en-GB/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-en-GB/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 8 l10n-en-GB/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-en-GB/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-en-GB/toolkit/toolkit/global/extensions.ftl | 21 l10n-en-GB/toolkit/toolkit/neterror/netError.ftl | 1 l10n-en-GB/toolkit/toolkit/neterror/nsserrors.ftl | 6 l10n-en-GB/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-eo/browser/browser/aboutDialog.ftl | 11 l10n-eo/browser/browser/aboutLogins.ftl | 2 l10n-eo/browser/browser/browser.ftl | 29 l10n-eo/browser/browser/defaultBrowserNotification.ftl | 2 l10n-eo/browser/browser/genai.ftl | 59 l10n-eo/browser/browser/newtab/newtab.ftl | 25 l10n-eo/browser/browser/newtab/onboarding.ftl | 10 l10n-eo/browser/browser/policies/policies-descriptions.ftl | 1 l10n-eo/browser/browser/preferences/preferences.ftl | 10 l10n-eo/browser/browser/sanitize.ftl | 4 l10n-eo/browser/browser/screenshots.ftl | 20 l10n-eo/browser/browser/shopping.ftl | 4 l10n-eo/browser/browser/sidebar.ftl | 112 l10n-eo/browser/browser/tabContextMenu.ftl | 2 l10n-eo/browser/browser/tabbrowser.ftl | 1 l10n-eo/browser/chrome/browser/browser.properties | 7 l10n-eo/browser/chrome/overrides/appstrings.properties | 78 l10n-eo/devtools/client/aboutdebugging.ftl | 112 l10n-eo/devtools/client/debugger.properties | 977 -- l10n-eo/devtools/client/startup.properties | 195 l10n-eo/devtools/client/tooltips.ftl | 8 l10n-eo/devtools/client/webconsole.properties | 419 - l10n-eo/devtools/shared/styleinspector.properties | 198 l10n-eo/dom/chrome/appstrings.properties | 68 l10n-eo/dom/chrome/dom/dom.properties | 609 - l10n-eo/dom/chrome/layout/css.properties | 95 l10n-eo/dom/chrome/security/csp.properties | 45 l10n-eo/netwerk/necko.properties | 142 l10n-eo/toolkit/toolkit/about/aboutProcesses.ftl | 3 l10n-eo/toolkit/toolkit/about/aboutSupport.ftl | 3 l10n-eo/toolkit/toolkit/featuregates/features.ftl | 18 l10n-eo/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-eo/toolkit/toolkit/global/processTypes.ftl | 5 l10n-eo/toolkit/toolkit/neterror/certError.ftl | 32 l10n-eo/toolkit/toolkit/neterror/netError.ftl | 1 l10n-eo/toolkit/toolkit/pdfviewer/viewer.ftl | 89 l10n-eo/toolkit/toolkit/updates/elevation.ftl | 5 l10n-es-AR/browser/browser/aboutDialog.ftl | 11 l10n-es-AR/browser/browser/aboutLogins.ftl | 2 l10n-es-AR/browser/browser/addonNotifications.ftl | 2 l10n-es-AR/browser/browser/allTabsMenu.ftl | 2 l10n-es-AR/browser/browser/browser.ftl | 14 l10n-es-AR/browser/browser/featureCallout.ftl | 27 l10n-es-AR/browser/browser/genai.ftl | 77 l10n-es-AR/browser/browser/newtab/asrouter.ftl | 18 l10n-es-AR/browser/browser/newtab/newtab.ftl | 4 l10n-es-AR/browser/browser/newtab/onboarding.ftl | 40 l10n-es-AR/browser/browser/policies/policies-descriptions.ftl | 1 l10n-es-AR/browser/browser/preferences/preferences.ftl | 5 l10n-es-AR/browser/browser/sanitize.ftl | 4 l10n-es-AR/browser/browser/shopping.ftl | 4 l10n-es-AR/browser/browser/sidebar.ftl | 75 l10n-es-AR/browser/browser/tabContextMenu.ftl | 18 l10n-es-AR/browser/browser/tabbrowser.ftl | 14 l10n-es-AR/browser/chrome/browser/browser.properties | 429 - l10n-es-AR/devtools/client/aboutdebugging.ftl | 3 l10n-es-AR/devtools/client/inspector.properties | 404 l10n-es-AR/devtools/shared/styleinspector.properties | 198 l10n-es-AR/dom/chrome/appstrings.properties | 68 l10n-es-AR/dom/chrome/layout/css.properties | 95 l10n-es-AR/dom/chrome/security/csp.properties | 9 l10n-es-AR/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-es-AR/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-es-AR/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-es-AR/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 8 l10n-es-AR/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-es-AR/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-es-AR/toolkit/toolkit/global/extensions.ftl | 22 l10n-es-AR/toolkit/toolkit/neterror/netError.ftl | 1 l10n-es-AR/toolkit/toolkit/neterror/nsserrors.ftl | 7 l10n-es-AR/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-es-CL/browser/browser/aboutDialog.ftl | 11 l10n-es-CL/browser/browser/aboutLogins.ftl | 2 l10n-es-CL/browser/browser/addonNotifications.ftl | 2 l10n-es-CL/browser/browser/allTabsMenu.ftl | 2 l10n-es-CL/browser/browser/browser.ftl | 14 l10n-es-CL/browser/browser/featureCallout.ftl | 27 l10n-es-CL/browser/browser/genai.ftl | 71 l10n-es-CL/browser/browser/newtab/asrouter.ftl | 18 l10n-es-CL/browser/browser/newtab/newtab.ftl | 4 l10n-es-CL/browser/browser/newtab/onboarding.ftl | 40 l10n-es-CL/browser/browser/policies/policies-descriptions.ftl | 2 l10n-es-CL/browser/browser/preferences/preferences.ftl | 5 l10n-es-CL/browser/browser/sanitize.ftl | 4 l10n-es-CL/browser/browser/shopping.ftl | 4 l10n-es-CL/browser/browser/sidebar.ftl | 75 l10n-es-CL/browser/browser/tabContextMenu.ftl | 16 l10n-es-CL/browser/browser/tabbrowser.ftl | 14 l10n-es-CL/browser/chrome/browser/browser.properties | 429 - l10n-es-CL/devtools/client/aboutdebugging.ftl | 3 l10n-es-CL/devtools/client/inspector.properties | 404 l10n-es-CL/devtools/shared/styleinspector.properties | 198 l10n-es-CL/dom/chrome/appstrings.properties | 68 l10n-es-CL/dom/chrome/layout/css.properties | 95 l10n-es-CL/dom/chrome/security/csp.properties | 7 l10n-es-CL/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-es-CL/security/manager/security/pippki/pippki.ftl | 2 l10n-es-CL/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-es-CL/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-es-CL/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-es-CL/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-es-CL/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-es-CL/toolkit/toolkit/global/extensions.ftl | 22 l10n-es-CL/toolkit/toolkit/neterror/netError.ftl | 1 l10n-es-CL/toolkit/toolkit/neterror/nsserrors.ftl | 6 l10n-es-CL/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-es-ES/browser/browser/aboutDialog.ftl | 11 l10n-es-ES/browser/browser/aboutLogins.ftl | 2 l10n-es-ES/browser/browser/addonNotifications.ftl | 1 l10n-es-ES/browser/browser/allTabsMenu.ftl | 2 l10n-es-ES/browser/browser/browser.ftl | 38 l10n-es-ES/browser/browser/defaultBrowserNotification.ftl | 2 l10n-es-ES/browser/browser/featureCallout.ftl | 27 l10n-es-ES/browser/browser/genai.ftl | 130 l10n-es-ES/browser/browser/newtab/asrouter.ftl | 12 l10n-es-ES/browser/browser/newtab/newtab.ftl | 46 l10n-es-ES/browser/browser/newtab/onboarding.ftl | 52 l10n-es-ES/browser/browser/policies/policies-descriptions.ftl | 3 l10n-es-ES/browser/browser/preferences/preferences.ftl | 7 l10n-es-ES/browser/browser/sanitize.ftl | 4 l10n-es-ES/browser/browser/screenshots.ftl | 20 l10n-es-ES/browser/browser/shopping.ftl | 4 l10n-es-ES/browser/browser/sidebar.ftl | 155 l10n-es-ES/browser/browser/syncedTabs.ftl | 5 l10n-es-ES/browser/browser/tabContextMenu.ftl | 16 l10n-es-ES/browser/browser/tabbrowser.ftl | 14 l10n-es-ES/browser/browser/webrtcIndicator.ftl | 8 l10n-es-ES/browser/chrome/browser/browser.properties | 429 - l10n-es-ES/browser/chrome/overrides/appstrings.properties | 78 l10n-es-ES/devtools/client/aboutdebugging.ftl | 115 l10n-es-ES/devtools/client/debugger.properties | 977 -- l10n-es-ES/devtools/client/inspector.properties | 404 l10n-es-ES/devtools/client/startup.properties | 195 l10n-es-ES/devtools/client/webconsole.properties | 420 - l10n-es-ES/devtools/shared/styleinspector.properties | 198 l10n-es-ES/dom/chrome/appstrings.properties | 68 l10n-es-ES/dom/chrome/layout/css.properties | 95 l10n-es-ES/dom/chrome/security/csp.properties | 21 l10n-es-ES/netwerk/necko.properties | 144 l10n-es-ES/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-es-ES/toolkit/toolkit/about/aboutProcesses.ftl | 3 l10n-es-ES/toolkit/toolkit/featuregates/features.ftl | 30 l10n-es-ES/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-es-ES/toolkit/toolkit/global/extensions.ftl | 22 l10n-es-ES/toolkit/toolkit/global/processTypes.ftl | 5 l10n-es-ES/toolkit/toolkit/neterror/certError.ftl | 32 l10n-es-ES/toolkit/toolkit/neterror/netError.ftl | 1 l10n-es-ES/toolkit/toolkit/pdfviewer/viewer.ftl | 95 l10n-es-ES/toolkit/toolkit/updates/elevation.ftl | 5 l10n-es-MX/browser/browser/aboutDialog.ftl | 11 l10n-es-MX/browser/browser/aboutLogins.ftl | 2 l10n-es-MX/browser/browser/browser.ftl | 12 l10n-es-MX/browser/browser/defaultBrowserNotification.ftl | 11 l10n-es-MX/browser/browser/featureCallout.ftl | 27 l10n-es-MX/browser/browser/firefoxView.ftl | 5 l10n-es-MX/browser/browser/genai.ftl | 130 l10n-es-MX/browser/browser/identityCredentialNotification.ftl | 1 l10n-es-MX/browser/browser/linuxDesktopEntry.ftl | 3 l10n-es-MX/browser/browser/migrationWizard.ftl | 9 l10n-es-MX/browser/browser/newtab/asrouter.ftl | 18 l10n-es-MX/browser/browser/newtab/newtab.ftl | 55 l10n-es-MX/browser/browser/newtab/onboarding.ftl | 24 l10n-es-MX/browser/browser/originControls.ftl | 4 l10n-es-MX/browser/browser/policies/policies-descriptions.ftl | 8 l10n-es-MX/browser/browser/preferences/connection.ftl | 24 l10n-es-MX/browser/browser/preferences/formAutofill.ftl | 4 l10n-es-MX/browser/browser/preferences/permissions.ftl | 2 l10n-es-MX/browser/browser/preferences/preferences.ftl | 95 l10n-es-MX/browser/browser/protectionsPanel.ftl | 13 l10n-es-MX/browser/browser/sanitize.ftl | 30 l10n-es-MX/browser/browser/screenshots.ftl | 2 l10n-es-MX/browser/browser/shopping.ftl | 119 l10n-es-MX/browser/browser/sidebar.ftl | 112 l10n-es-MX/browser/browser/speechDispatcher.ftl | 13 l10n-es-MX/browser/browser/sync.ftl | 10 l10n-es-MX/browser/browser/syncedTabs.ftl | 5 l10n-es-MX/browser/browser/tabContextMenu.ftl | 3 l10n-es-MX/browser/browser/tabbrowser.ftl | 6 l10n-es-MX/browser/browser/translations.ftl | 50 l10n-es-MX/browser/browser/unifiedExtensions.ftl | 7 l10n-es-MX/browser/browser/webProtocolHandler.ftl | 3 l10n-es-MX/browser/browser/webauthnDialog.ftl | 13 l10n-es-MX/browser/browser/webrtcIndicator.ftl | 33 l10n-es-MX/browser/chrome/browser/browser.properties | 429 - l10n-es-MX/browser/chrome/overrides/appstrings.properties | 78 l10n-es-MX/devtools/client/aboutdebugging.ftl | 115 l10n-es-MX/devtools/client/components.properties | 1 l10n-es-MX/devtools/client/debugger.properties | 45 l10n-es-MX/devtools/client/inspector.properties | 409 l10n-es-MX/devtools/client/layout.properties | 93 l10n-es-MX/devtools/client/netmonitor.properties | 11 l10n-es-MX/devtools/client/perftools.ftl | 17 l10n-es-MX/devtools/client/startup.properties | 195 l10n-es-MX/devtools/client/styleeditor.ftl | 7 l10n-es-MX/devtools/client/toolbox-options.ftl | 38 l10n-es-MX/devtools/client/toolbox.properties | 185 l10n-es-MX/devtools/client/tooltips.ftl | 102 l10n-es-MX/devtools/client/webconsole.properties | 11 l10n-es-MX/devtools/shared/styleinspector.properties | 203 l10n-es-MX/devtools/shared/webconsole-commands.ftl | 21 l10n-es-MX/dom/chrome/accessibility/win/accessible.properties | 35 l10n-es-MX/dom/chrome/appstrings.properties | 68 l10n-es-MX/dom/chrome/dom/dom.properties | 588 - l10n-es-MX/dom/chrome/layout/css.properties | 88 l10n-es-MX/dom/chrome/security/csp.properties | 125 l10n-es-MX/dom/chrome/security/security.properties | 169 l10n-es-MX/netwerk/necko.properties | 126 l10n-es-MX/security/manager/security/certificates/certManager.ftl | 47 l10n-es-MX/security/manager/security/pippki/pippki.ftl | 5 l10n-es-MX/toolkit/chrome/global-platform/mac/platformKeys.properties | 27 l10n-es-MX/toolkit/chrome/global-platform/unix/platformKeys.properties | 27 l10n-es-MX/toolkit/chrome/global-platform/win/platformKeys.properties | 27 l10n-es-MX/toolkit/chrome/global/filepicker.properties | 24 l10n-es-MX/toolkit/chrome/global/narrate.properties | 10 l10n-es-MX/toolkit/toolkit/about/aboutAddons.ftl | 6 l10n-es-MX/toolkit/toolkit/about/aboutGlean.ftl | 18 l10n-es-MX/toolkit/toolkit/about/aboutLogging.ftl | 16 l10n-es-MX/toolkit/toolkit/about/aboutSupport.ftl | 75 l10n-es-MX/toolkit/toolkit/about/aboutThirdParty.ftl | 24 l10n-es-MX/toolkit/toolkit/about/aboutWebauthn.ftl | 138 l10n-es-MX/toolkit/toolkit/about/aboutWebrtc.ftl | 67 l10n-es-MX/toolkit/toolkit/branding/brandings.ftl | 5 l10n-es-MX/toolkit/toolkit/contentanalysis/contentanalysis.ftl | 35 l10n-es-MX/toolkit/toolkit/formautofill/formAutofill.ftl | 31 l10n-es-MX/toolkit/toolkit/global/cookieBannerHandling.ftl | 2 l10n-es-MX/toolkit/toolkit/global/handlerDialog.ftl | 42 l10n-es-MX/toolkit/toolkit/global/mozMessageBar.ftl | 2 l10n-es-MX/toolkit/toolkit/global/processTypes.ftl | 21 l10n-es-MX/toolkit/toolkit/global/profileDowngrade.ftl | 4 l10n-es-MX/toolkit/toolkit/global/textActions.ftl | 27 l10n-es-MX/toolkit/toolkit/neterror/netError.ftl | 32 l10n-es-MX/toolkit/toolkit/passwordmgr/passwordmgr.ftl | 3 l10n-es-MX/toolkit/toolkit/pdfviewer/viewer.ftl | 74 l10n-eu/browser/browser/aboutDialog.ftl | 11 l10n-eu/browser/browser/aboutLogins.ftl | 2 l10n-eu/browser/browser/featureCallout.ftl | 25 l10n-eu/browser/browser/firefoxView.ftl | 5 l10n-eu/browser/browser/genai.ftl | 25 l10n-eu/browser/browser/newtab/newtab.ftl | 3 l10n-eu/browser/browser/newtab/onboarding.ftl | 1 l10n-eu/browser/browser/policies/policies-descriptions.ftl | 1 l10n-eu/browser/browser/preferences/preferences.ftl | 2 l10n-eu/browser/browser/sidebar.ftl | 125 l10n-eu/browser/browser/sync.ftl | 2 l10n-eu/browser/browser/syncedTabs.ftl | 5 l10n-eu/browser/browser/tabContextMenu.ftl | 13 l10n-eu/browser/browser/tabbrowser.ftl | 5 l10n-eu/browser/browser/translations.ftl | 21 l10n-eu/browser/chrome/browser/browser.properties | 419 - l10n-eu/devtools/client/netmonitor.properties | 1190 +- l10n-eu/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-eu/toolkit/toolkit/about/aboutSupport.ftl | 1 l10n-eu/toolkit/toolkit/contentanalysis/contentanalysis.ftl | 1 l10n-eu/toolkit/toolkit/pdfviewer/viewer.ftl | 38 l10n-fa/browser/browser/aboutDialog.ftl | 29 l10n-fa/browser/browser/aboutLogins.ftl | 78 l10n-fa/browser/browser/aboutPocket.ftl | 6 l10n-fa/browser/browser/appmenu.ftl | 13 l10n-fa/browser/browser/browserContext.ftl | 7 l10n-fa/browser/browser/firefoxView.ftl | 64 l10n-fa/browser/browser/protections.ftl | 33 l10n-fi/browser/browser/aboutDialog.ftl | 11 l10n-fi/browser/browser/aboutLogins.ftl | 2 l10n-fi/browser/browser/allTabsMenu.ftl | 2 l10n-fi/browser/browser/browser.ftl | 14 l10n-fi/browser/browser/featureCallout.ftl | 27 l10n-fi/browser/browser/genai.ftl | 91 l10n-fi/browser/browser/newtab/asrouter.ftl | 18 l10n-fi/browser/browser/newtab/newtab.ftl | 4 l10n-fi/browser/browser/newtab/onboarding.ftl | 26 l10n-fi/browser/browser/policies/policies-descriptions.ftl | 2 l10n-fi/browser/browser/preferences/preferences.ftl | 5 l10n-fi/browser/browser/shopping.ftl | 4 l10n-fi/browser/browser/sidebar.ftl | 75 l10n-fi/browser/browser/tabContextMenu.ftl | 16 l10n-fi/browser/browser/tabbrowser.ftl | 14 l10n-fi/browser/chrome/browser/browser.properties | 429 - l10n-fi/devtools/client/aboutdebugging.ftl | 3 l10n-fi/devtools/client/inspector.properties | 404 l10n-fi/devtools/shared/styleinspector.properties | 198 l10n-fi/dom/chrome/appstrings.properties | 68 l10n-fi/dom/chrome/dom/dom.properties | 547 - l10n-fi/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-fi/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-fi/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-fi/toolkit/toolkit/about/aboutSupport.ftl | 31 l10n-fi/toolkit/toolkit/contentanalysis/contentanalysis.ftl | 5 l10n-fi/toolkit/toolkit/featuregates/features.ftl | 16 l10n-fi/toolkit/toolkit/neterror/netError.ftl | 1 l10n-fi/toolkit/toolkit/neterror/nsserrors.ftl | 8 l10n-fi/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-fr/browser/browser/aboutDialog.ftl | 11 l10n-fr/browser/browser/aboutLogins.ftl | 2 l10n-fr/browser/browser/addonNotifications.ftl | 2 l10n-fr/browser/browser/allTabsMenu.ftl | 2 l10n-fr/browser/browser/browser.ftl | 14 l10n-fr/browser/browser/featureCallout.ftl | 27 l10n-fr/browser/browser/genai.ftl | 71 l10n-fr/browser/browser/newtab/asrouter.ftl | 18 l10n-fr/browser/browser/newtab/newtab.ftl | 10 l10n-fr/browser/browser/newtab/onboarding.ftl | 46 l10n-fr/browser/browser/policies/policies-descriptions.ftl | 1 l10n-fr/browser/browser/preferences/preferences.ftl | 8 l10n-fr/browser/browser/protectionsPanel.ftl | 13 l10n-fr/browser/browser/reportBrokenSite.ftl | 2 l10n-fr/browser/browser/sanitize.ftl | 4 l10n-fr/browser/browser/screenshots.ftl | 20 l10n-fr/browser/browser/shopping.ftl | 4 l10n-fr/browser/browser/sidebar.ftl | 75 l10n-fr/browser/browser/tabContextMenu.ftl | 16 l10n-fr/browser/browser/tabbrowser.ftl | 14 l10n-fr/browser/chrome/browser/browser.properties | 429 - l10n-fr/browser/chrome/overrides/appstrings.properties | 78 l10n-fr/devtools/client/aboutdebugging.ftl | 115 l10n-fr/devtools/client/debugger.properties | 974 -- l10n-fr/devtools/client/inspector.properties | 404 l10n-fr/devtools/client/layout.properties | 92 l10n-fr/devtools/client/startup.properties | 177 l10n-fr/devtools/client/webconsole.properties | 420 - l10n-fr/devtools/shared/styleinspector.properties | 198 l10n-fr/dom/chrome/appstrings.properties | 68 l10n-fr/dom/chrome/layout/css.properties | 95 l10n-fr/dom/chrome/security/csp.properties | 14 l10n-fr/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-fr/toolkit/toolkit/about/aboutAddons.ftl | 7 l10n-fr/toolkit/toolkit/about/aboutGlean.ftl | 6 l10n-fr/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 8 l10n-fr/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-fr/toolkit/toolkit/featuregates/features.ftl | 1 l10n-fr/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-fr/toolkit/toolkit/global/extensions.ftl | 18 l10n-fr/toolkit/toolkit/neterror/certError.ftl | 32 l10n-fr/toolkit/toolkit/neterror/netError.ftl | 1 l10n-fr/toolkit/toolkit/neterror/nsserrors.ftl | 6 l10n-fr/toolkit/toolkit/pdfviewer/viewer.ftl | 76 l10n-fur/browser/browser/aboutDialog.ftl | 11 l10n-fur/browser/browser/browser.ftl | 4 l10n-fur/browser/browser/sanitize.ftl | 4 l10n-fur/browser/browser/shopping.ftl | 4 l10n-fur/browser/browser/sidebar.ftl | 19 l10n-fur/browser/chrome/browser/browser.properties | 429 - l10n-fur/devtools/shared/styleinspector.properties | 198 l10n-fur/dom/chrome/appstrings.properties | 68 l10n-fur/dom/chrome/layout/css.properties | 95 l10n-fur/dom/chrome/security/csp.properties | 7 l10n-fur/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-fur/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-fur/toolkit/toolkit/neterror/netError.ftl | 1 l10n-fur/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-fy-NL/browser/browser/aboutDialog.ftl | 11 l10n-fy-NL/browser/browser/aboutLogins.ftl | 2 l10n-fy-NL/browser/browser/addonNotifications.ftl | 2 l10n-fy-NL/browser/browser/allTabsMenu.ftl | 2 l10n-fy-NL/browser/browser/browser.ftl | 18 l10n-fy-NL/browser/browser/featureCallout.ftl | 27 l10n-fy-NL/browser/browser/genai.ftl | 77 l10n-fy-NL/browser/browser/newtab/asrouter.ftl | 18 l10n-fy-NL/browser/browser/newtab/newtab.ftl | 4 l10n-fy-NL/browser/browser/newtab/onboarding.ftl | 40 l10n-fy-NL/browser/browser/policies/policies-descriptions.ftl | 2 l10n-fy-NL/browser/browser/preferences/preferences.ftl | 5 l10n-fy-NL/browser/browser/sanitize.ftl | 4 l10n-fy-NL/browser/browser/shopping.ftl | 4 l10n-fy-NL/browser/browser/sidebar.ftl | 85 l10n-fy-NL/browser/browser/tabContextMenu.ftl | 16 l10n-fy-NL/browser/browser/tabbrowser.ftl | 14 l10n-fy-NL/browser/chrome/browser/browser.properties | 429 - l10n-fy-NL/browser/chrome/overrides/appstrings.properties | 78 l10n-fy-NL/devtools/client/aboutdebugging.ftl | 3 l10n-fy-NL/devtools/client/inspector.properties | 404 l10n-fy-NL/devtools/client/startup.properties | 178 l10n-fy-NL/devtools/client/webconsole.properties | 420 - l10n-fy-NL/devtools/shared/styleinspector.properties | 198 l10n-fy-NL/devtools/shared/webconsole-commands.ftl | 12 l10n-fy-NL/dom/chrome/appstrings.properties | 68 l10n-fy-NL/dom/chrome/layout/css.properties | 95 l10n-fy-NL/dom/chrome/security/csp.properties | 7 l10n-fy-NL/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-fy-NL/toolkit/toolkit/about/aboutAddons.ftl | 17 l10n-fy-NL/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-fy-NL/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 8 l10n-fy-NL/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-fy-NL/toolkit/toolkit/featuregates/features.ftl | 4 l10n-fy-NL/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-fy-NL/toolkit/toolkit/global/extensions.ftl | 22 l10n-fy-NL/toolkit/toolkit/neterror/certError.ftl | 32 l10n-fy-NL/toolkit/toolkit/neterror/netError.ftl | 1 l10n-fy-NL/toolkit/toolkit/neterror/nsserrors.ftl | 7 l10n-fy-NL/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-gd/browser/browser/aboutDialog.ftl | 11 l10n-gd/browser/browser/aboutLogins.ftl | 2 l10n-gd/browser/browser/allTabsMenu.ftl | 9 l10n-gd/toolkit/toolkit/pdfviewer/viewer.ftl | 26 l10n-gl/browser/browser/aboutDialog.ftl | 11 l10n-gl/browser/browser/aboutLogins.ftl | 2 l10n-gl/browser/browser/accounts.ftl | 21 l10n-gl/browser/browser/addonNotifications.ftl | 12 l10n-gl/browser/browser/allTabsMenu.ftl | 7 l10n-gl/browser/browser/appmenu.ftl | 7 l10n-gl/browser/browser/browser.ftl | 29 l10n-gl/browser/browser/defaultBrowserNotification.ftl | 8 l10n-gl/browser/browser/featureCallout.ftl | 18 l10n-gl/browser/browser/firefoxView.ftl | 23 l10n-gl/browser/browser/fxviewTabList.ftl | 15 l10n-gl/browser/browser/genai.ftl | 19 l10n-gl/browser/browser/newtab/newtab.ftl | 104 l10n-gl/browser/browser/newtab/onboarding.ftl | 11 l10n-gl/browser/browser/preferences/connection.ftl | 21 l10n-gl/browser/browser/preferences/preferences.ftl | 10 l10n-gl/browser/browser/shopping.ftl | 1 l10n-gl/browser/browser/sidebar.ftl | 63 l10n-gl/toolkit/toolkit/pdfviewer/viewer.ftl | 33 l10n-gn/browser/browser/aboutDialog.ftl | 11 l10n-gn/browser/browser/aboutLogins.ftl | 2 l10n-gn/browser/browser/allTabsMenu.ftl | 2 l10n-gn/browser/browser/browser.ftl | 24 l10n-gn/browser/browser/defaultBrowserNotification.ftl | 1 l10n-gn/browser/browser/featureCallout.ftl | 16 l10n-gn/browser/browser/genai.ftl | 80 l10n-gn/browser/browser/newtab/asrouter.ftl | 11 l10n-gn/browser/browser/newtab/newtab.ftl | 4 l10n-gn/browser/browser/newtab/onboarding.ftl | 38 l10n-gn/browser/browser/policies/policies-descriptions.ftl | 2 l10n-gn/browser/browser/sanitize.ftl | 4 l10n-gn/browser/browser/shopping.ftl | 3 l10n-gn/browser/browser/sidebar.ftl | 75 l10n-gn/browser/browser/tabContextMenu.ftl | 16 l10n-gn/browser/browser/tabbrowser.ftl | 17 l10n-gn/browser/chrome/browser/browser.properties | 7 l10n-gn/browser/chrome/overrides/appstrings.properties | 78 l10n-gn/devtools/client/aboutdebugging.ftl | 5 l10n-gn/devtools/client/inspector.properties | 404 l10n-gn/devtools/client/tooltips.ftl | 4 l10n-gn/devtools/shared/styleinspector.properties | 198 l10n-gn/dom/chrome/appstrings.properties | 68 l10n-gn/dom/chrome/dom/dom.properties | 610 - l10n-gn/dom/chrome/layout/css.properties | 95 l10n-gn/dom/chrome/security/csp.properties | 28 l10n-gn/toolkit/toolkit/about/aboutAddons.ftl | 4 l10n-gn/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-gn/toolkit/toolkit/featuregates/features.ftl | 1 l10n-gn/toolkit/toolkit/global/extensions.ftl | 14 l10n-gn/toolkit/toolkit/neterror/netError.ftl | 1 l10n-gn/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-he/browser/browser/aboutDialog.ftl | 11 l10n-he/browser/browser/aboutLogins.ftl | 2 l10n-he/browser/browser/addonNotifications.ftl | 1 l10n-he/browser/browser/allTabsMenu.ftl | 2 l10n-he/browser/browser/browser.ftl | 13 l10n-he/browser/browser/defaultBrowserNotification.ftl | 1 l10n-he/browser/browser/featureCallout.ftl | 16 l10n-he/browser/browser/firefoxView.ftl | 1 l10n-he/browser/browser/genai.ftl | 70 l10n-he/browser/browser/newtab/asrouter.ftl | 12 l10n-he/browser/browser/newtab/newtab.ftl | 4 l10n-he/browser/browser/newtab/onboarding.ftl | 38 l10n-he/browser/browser/sanitize.ftl | 4 l10n-he/browser/browser/shopping.ftl | 4 l10n-he/browser/browser/sidebar.ftl | 67 l10n-he/browser/browser/tabContextMenu.ftl | 16 l10n-he/browser/browser/tabbrowser.ftl | 14 l10n-he/browser/chrome/browser/browser.properties | 7 l10n-he/devtools/client/inspector.properties | 372 l10n-he/toolkit/crashreporter/crashreporter.ftl | 2 l10n-he/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-he/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-he/toolkit/toolkit/global/extensions.ftl | 18 l10n-he/toolkit/toolkit/neterror/certError.ftl | 32 l10n-he/toolkit/toolkit/neterror/netError.ftl | 1 l10n-he/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-hi-IN/toolkit/toolkit/pdfviewer/viewer.ftl | 26 l10n-hr/browser/browser/aboutDialog.ftl | 11 l10n-hr/browser/browser/aboutLogins.ftl | 4 l10n-hr/browser/browser/aboutPrivateBrowsing.ftl | 10 l10n-hr/browser/browser/aboutUnloads.ftl | 4 l10n-hr/browser/browser/appExtensionFields.ftl | 4 l10n-hr/browser/browser/appMenuNotifications.ftl | 6 l10n-hr/browser/browser/appmenu.ftl | 16 l10n-hr/browser/browser/backgroundtasks/defaultagent.ftl | 2 l10n-hr/browser/browser/browser.ftl | 36 l10n-hr/browser/browser/browserContext.ftl | 2 l10n-hr/browser/browser/contentCrash.ftl | 2 l10n-hr/browser/browser/customizeMode.ftl | 2 l10n-hr/browser/browser/defaultBrowserNotification.ftl | 12 l10n-hr/browser/browser/downloads.ftl | 4 l10n-hr/browser/browser/editBookmarkOverlay.ftl | 2 l10n-hr/browser/browser/genai.ftl | 59 l10n-hr/browser/browser/menubar.ftl | 12 l10n-hr/browser/browser/newtab/asrouter.ftl | 8 l10n-hr/browser/browser/newtab/newtab.ftl | 16 l10n-hr/browser/browser/newtab/onboarding.ftl | 5 l10n-hr/browser/browser/pageInfo.ftl | 10 l10n-hr/browser/browser/places.ftl | 2 l10n-hr/browser/browser/policies/policies-descriptions.ftl | 11 l10n-hr/browser/browser/preferences/formAutofill.ftl | 4 l10n-hr/browser/browser/preferences/fxaPairDevice.ftl | 2 l10n-hr/browser/browser/preferences/moreFromMozilla.ftl | 2 l10n-hr/browser/browser/preferences/permissions.ftl | 10 l10n-hr/browser/browser/preferences/preferences.ftl | 46 l10n-hr/browser/browser/protectionsPanel.ftl | 18 l10n-hr/browser/browser/safeMode.ftl | 6 l10n-hr/browser/browser/shopping.ftl | 4 l10n-hr/browser/browser/sidebar.ftl | 23 l10n-hr/browser/browser/tabbrowser.ftl | 9 l10n-hr/browser/browser/webrtcIndicator.ftl | 8 l10n-hr/browser/chrome/browser/browser.properties | 11 l10n-hr/browser/chrome/browser/downloads/downloads.properties | 2 l10n-hr/browser/chrome/overrides/appstrings.properties | 3 l10n-hr/browser/installer/custom.properties | 2 l10n-hr/browser/pdfviewer/viewer.properties | 10 l10n-hr/devtools/client/aboutdebugging.ftl | 4 l10n-hr/devtools/client/debugger.properties | 27 l10n-hr/devtools/client/memory.properties | 4 l10n-hr/devtools/client/menus.properties | 10 l10n-hr/devtools/client/netmonitor.properties | 2 l10n-hr/devtools/client/perftools.ftl | 3 l10n-hr/devtools/client/responsive.properties | 6 l10n-hr/devtools/client/startup.properties | 6 l10n-hr/devtools/client/toolbox-options.ftl | 26 l10n-hr/devtools/client/toolbox.properties | 171 l10n-hr/devtools/client/webconsole.properties | 5 l10n-hr/dom/chrome/accessibility/AccessFu.properties | 2 l10n-hr/dom/chrome/accessibility/mac/accessible.properties | 2 l10n-hr/dom/chrome/accessibility/win/accessible.properties | 34 l10n-hr/dom/chrome/dom/dom.properties | 7 l10n-hr/dom/chrome/layout/layout_errors.properties | 1 l10n-hr/security/manager/chrome/pipnss/nsserrors.properties | 4 l10n-hr/security/manager/chrome/pippki/pippki.properties | 63 l10n-hr/security/manager/security/certificates/certManager.ftl | 2 l10n-hr/security/manager/security/certificates/deviceManager.ftl | 5 l10n-hr/security/manager/security/pippki/pippki.ftl | 2 l10n-hr/toolkit/chrome/mozapps/update/updates.properties | 4 l10n-hr/toolkit/crashreporter/crashreporter.ftl | 4 l10n-hr/toolkit/crashreporter/crashreporter.ini | 6 l10n-hr/toolkit/toolkit/about/aboutAddons.ftl | 12 l10n-hr/toolkit/toolkit/about/aboutCompat.ftl | 4 l10n-hr/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 6 l10n-hr/toolkit/toolkit/about/aboutReader.ftl | 8 l10n-hr/toolkit/toolkit/about/aboutSupport.ftl | 10 l10n-hr/toolkit/toolkit/about/aboutTelemetry.ftl | 3 l10n-hr/toolkit/toolkit/about/aboutWebauthn.ftl | 4 l10n-hr/toolkit/toolkit/about/aboutWebrtc.ftl | 10 l10n-hr/toolkit/toolkit/about/url-classifier.ftl | 2 l10n-hr/toolkit/toolkit/downloads/downloadUI.ftl | 9 l10n-hr/toolkit/toolkit/downloads/downloadUtils.ftl | 60 l10n-hr/toolkit/toolkit/featuregates/features.ftl | 5 l10n-hr/toolkit/toolkit/global/cookieBannerHandling.ftl | 2 l10n-hr/toolkit/toolkit/global/datetimebox.ftl | 4 l10n-hr/toolkit/toolkit/global/resetProfile.ftl | 3 l10n-hr/toolkit/toolkit/global/videocontrols.ftl | 8 l10n-hr/toolkit/toolkit/neterror/netError.ftl | 2 l10n-hr/toolkit/toolkit/neterror/nsserrors.ftl | 4 l10n-hr/toolkit/toolkit/pdfviewer/viewer.ftl | 70 l10n-hr/toolkit/toolkit/pictureinpicture/pictureinpicture.ftl | 2 l10n-hr/toolkit/toolkit/printing/printUI.ftl | 2 l10n-hsb/browser/browser/aboutDialog.ftl | 11 l10n-hsb/browser/browser/aboutLogins.ftl | 2 l10n-hsb/browser/browser/addonNotifications.ftl | 2 l10n-hsb/browser/browser/allTabsMenu.ftl | 2 l10n-hsb/browser/browser/browser.ftl | 14 l10n-hsb/browser/browser/featureCallout.ftl | 27 l10n-hsb/browser/browser/genai.ftl | 83 l10n-hsb/browser/browser/newtab/asrouter.ftl | 18 l10n-hsb/browser/browser/newtab/newtab.ftl | 10 l10n-hsb/browser/browser/newtab/onboarding.ftl | 41 l10n-hsb/browser/browser/policies/policies-descriptions.ftl | 1 l10n-hsb/browser/browser/preferences/preferences.ftl | 5 l10n-hsb/browser/browser/sanitize.ftl | 4 l10n-hsb/browser/browser/shopping.ftl | 4 l10n-hsb/browser/browser/sidebar.ftl | 75 l10n-hsb/browser/browser/tabContextMenu.ftl | 16 l10n-hsb/browser/browser/tabbrowser.ftl | 14 l10n-hsb/browser/chrome/browser/browser.properties | 429 - l10n-hsb/devtools/client/aboutdebugging.ftl | 3 l10n-hsb/devtools/client/inspector.properties | 404 l10n-hsb/devtools/shared/styleinspector.properties | 198 l10n-hsb/dom/chrome/appstrings.properties | 68 l10n-hsb/dom/chrome/layout/css.properties | 95 l10n-hsb/dom/chrome/security/csp.properties | 7 l10n-hsb/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-hsb/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-hsb/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-hsb/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-hsb/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-hsb/toolkit/toolkit/featuregates/features.ftl | 2 l10n-hsb/toolkit/toolkit/global/antiTracking.ftl | 13 l10n-hsb/toolkit/toolkit/global/extensions.ftl | 24 l10n-hsb/toolkit/toolkit/neterror/netError.ftl | 1 l10n-hsb/toolkit/toolkit/neterror/nsserrors.ftl | 7 l10n-hsb/toolkit/toolkit/pdfviewer/viewer.ftl | 40 l10n-hu/browser/browser/aboutDialog.ftl | 11 l10n-hu/browser/browser/aboutLogins.ftl | 6 l10n-hu/browser/browser/aboutTabCrashed.ftl | 2 l10n-hu/browser/browser/addonNotifications.ftl | 1 l10n-hu/browser/browser/allTabsMenu.ftl | 2 l10n-hu/browser/browser/browser.ftl | 15 l10n-hu/browser/browser/editBookmarkOverlay.ftl | 4 l10n-hu/browser/browser/featureCallout.ftl | 27 l10n-hu/browser/browser/genai.ftl | 90 l10n-hu/browser/browser/menubar.ftl | 2 l10n-hu/browser/browser/newtab/asrouter.ftl | 12 l10n-hu/browser/browser/newtab/newtab.ftl | 14 l10n-hu/browser/browser/newtab/onboarding.ftl | 40 l10n-hu/browser/browser/pageInfo.ftl | 29 l10n-hu/browser/browser/policies/policies-descriptions.ftl | 5 l10n-hu/browser/browser/preferences/addEngine.ftl | 8 l10n-hu/browser/browser/preferences/connection.ftl | 2 l10n-hu/browser/browser/preferences/preferences.ftl | 4 l10n-hu/browser/browser/protectionsPanel.ftl | 17 l10n-hu/browser/browser/reportBrokenSite.ftl | 2 l10n-hu/browser/browser/sanitize.ftl | 4 l10n-hu/browser/browser/shopping.ftl | 4 l10n-hu/browser/browser/sidebar.ftl | 75 l10n-hu/browser/browser/tabContextMenu.ftl | 16 l10n-hu/browser/browser/tabbrowser.ftl | 14 l10n-hu/browser/chrome/browser/browser.properties | 9 l10n-hu/browser/chrome/overrides/appstrings.properties | 2 l10n-hu/devtools/client/aboutdebugging.ftl | 5 l10n-hu/devtools/client/application.ftl | 49 l10n-hu/devtools/client/debugger.properties | 11 l10n-hu/devtools/client/font-inspector.properties | 45 l10n-hu/devtools/client/inspector.properties | 404 l10n-hu/devtools/client/netmonitor.properties | 1191 -- l10n-hu/devtools/client/styleeditor.ftl | 2 l10n-hu/devtools/client/toolbox.properties | 178 l10n-hu/devtools/client/tooltips.ftl | 4 l10n-hu/devtools/client/webconsole.properties | 4 l10n-hu/devtools/shared/styleinspector.properties | 198 l10n-hu/dom/chrome/appstrings.properties | 68 l10n-hu/dom/chrome/dom/dom.properties | 28 l10n-hu/dom/chrome/layout/css.properties | 95 l10n-hu/dom/chrome/layout/htmlparser.properties | 264 l10n-hu/dom/chrome/security/security.properties | 170 l10n-hu/netwerk/necko.properties | 142 l10n-hu/security/manager/chrome/pipnss/nsserrors.properties | 654 - l10n-hu/toolkit/chrome/global/printdialog.properties | 73 l10n-hu/toolkit/chrome/places/places.properties | 44 l10n-hu/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-hu/toolkit/toolkit/about/aboutNetworking.ftl | 2 l10n-hu/toolkit/toolkit/about/aboutProcesses.ftl | 3 l10n-hu/toolkit/toolkit/about/aboutServiceWorkers.ftl | 7 l10n-hu/toolkit/toolkit/about/aboutSupport.ftl | 5 l10n-hu/toolkit/toolkit/about/url-classifier.ftl | 7 l10n-hu/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-hu/toolkit/toolkit/global/extensions.ftl | 22 l10n-hu/toolkit/toolkit/neterror/netError.ftl | 3 l10n-hu/toolkit/toolkit/neterror/nsserrors.ftl | 9 l10n-hu/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-hu/toolkit/toolkit/printing/printDialogs.ftl | 3 l10n-hy-AM/browser/browser/aboutPrivateBrowsing.ftl | 12 l10n-hy-AM/browser/browser/addonNotifications.ftl | 2 l10n-hy-AM/browser/browser/appExtensionFields.ftl | 2 l10n-hy-AM/browser/browser/appMenuNotifications.ftl | 4 l10n-hy-AM/browser/browser/appmenu.ftl | 16 l10n-hy-AM/browser/browser/browser.ftl | 14 l10n-hy-AM/browser/browser/browserContext.ftl | 30 l10n-hy-AM/browser/browser/confirmationHints.ftl | 6 l10n-hy-AM/browser/browser/downloads.ftl | 2 l10n-hy-AM/browser/browser/firefoxRelay.ftl | 2 l10n-hy-AM/browser/browser/firefoxView.ftl | 6 l10n-hy-AM/browser/browser/policies/policies-descriptions.ftl | 10 l10n-hy-AM/browser/browser/preferences/connection.ftl | 4 l10n-hy-AM/browser/browser/preferences/fonts.ftl | 6 l10n-hy-AM/browser/browser/preferences/permissions.ftl | 12 l10n-hy-AM/browser/browser/preferences/preferences.ftl | 65 l10n-hy-AM/browser/browser/protectionsPanel.ftl | 2 l10n-hy-AM/browser/browser/recentlyClosed.ftl | 8 l10n-hy-AM/browser/browser/screenshots.ftl | 20 l10n-hy-AM/browser/browser/toolbarContextMenu.ftl | 3 l10n-hy-AM/browser/chrome/browser/customizableui/customizableWidgets.properties | 15 l10n-hy-AM/browser/chrome/browser/search.properties | 28 l10n-hy-AM/browser/installer/custom.properties | 126 l10n-hy-AM/browser/installer/override.properties | 128 l10n-hy-AM/browser/pdfviewer/viewer.properties | 308 l10n-hy-AM/devtools/client/toolbox-options.ftl | 2 l10n-hy-AM/dom/chrome/accessibility/mac/accessible.properties | 80 l10n-hy-AM/dom/chrome/dom/dom.properties | 474 - l10n-hy-AM/dom/chrome/layout/HtmlForm.properties | 34 l10n-hy-AM/mobile/android/chrome/passwordmgr.properties | 28 l10n-hy-AM/security/manager/chrome/pipnss/pipnss.properties | 127 l10n-hy-AM/toolkit/chrome/passwordmgr/passwordmgr.properties | 29 l10n-hy-AM/toolkit/toolkit/about/aboutAddons.ftl | 12 l10n-hy-AM/toolkit/toolkit/global/videocontrols.ftl | 2 l10n-hy-AM/toolkit/toolkit/neterror/netError.ftl | 4 l10n-hy-AM/toolkit/toolkit/neterror/nsserrors.ftl | 15 l10n-hy-AM/toolkit/toolkit/passwordmgr/passwordmgr.ftl | 2 l10n-hy-AM/toolkit/toolkit/preferences/preferences.ftl | 7 l10n-ia/browser/browser/aboutDialog.ftl | 11 l10n-ia/browser/browser/aboutLogins.ftl | 2 l10n-ia/browser/browser/addonNotifications.ftl | 1 l10n-ia/browser/browser/allTabsMenu.ftl | 2 l10n-ia/browser/browser/browser.ftl | 13 l10n-ia/browser/browser/featureCallout.ftl | 16 l10n-ia/browser/browser/firefoxView.ftl | 2 l10n-ia/browser/browser/genai.ftl | 94 l10n-ia/browser/browser/newtab/asrouter.ftl | 12 l10n-ia/browser/browser/newtab/newtab.ftl | 16 l10n-ia/browser/browser/newtab/onboarding.ftl | 41 l10n-ia/browser/browser/policies/policies-descriptions.ftl | 1 l10n-ia/browser/browser/protectionsPanel.ftl | 13 l10n-ia/browser/browser/sanitize.ftl | 10 l10n-ia/browser/browser/shopping.ftl | 4 l10n-ia/browser/browser/sidebar.ftl | 82 l10n-ia/browser/browser/tabContextMenu.ftl | 16 l10n-ia/browser/browser/tabbrowser.ftl | 14 l10n-ia/browser/chrome/browser/browser.properties | 429 - l10n-ia/browser/chrome/overrides/appstrings.properties | 78 l10n-ia/devtools/client/aboutdebugging.ftl | 3 l10n-ia/devtools/client/components.properties | 39 l10n-ia/devtools/client/inspector.properties | 406 l10n-ia/devtools/shared/styleinspector.properties | 198 l10n-ia/dom/chrome/appstrings.properties | 68 l10n-ia/dom/chrome/layout/css.properties | 95 l10n-ia/dom/chrome/security/csp.properties | 7 l10n-ia/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-ia/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-ia/toolkit/toolkit/featuregates/features.ftl | 3 l10n-ia/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-ia/toolkit/toolkit/global/extensions.ftl | 22 l10n-ia/toolkit/toolkit/neterror/certError.ftl | 32 l10n-ia/toolkit/toolkit/neterror/netError.ftl | 1 l10n-ia/toolkit/toolkit/pdfviewer/viewer.ftl | 73 l10n-id/browser/browser/aboutDialog.ftl | 11 l10n-id/browser/browser/aboutLogins.ftl | 2 l10n-id/browser/browser/browser.ftl | 4 l10n-id/browser/browser/defaultBrowserNotification.ftl | 1 l10n-id/browser/browser/featureCallout.ftl | 20 l10n-id/browser/browser/genai.ftl | 16 l10n-is/browser/browser/aboutDialog.ftl | 11 l10n-is/browser/browser/aboutLogins.ftl | 2 l10n-is/browser/browser/addonNotifications.ftl | 2 l10n-is/browser/browser/allTabsMenu.ftl | 2 l10n-is/browser/browser/browser.ftl | 14 l10n-is/browser/browser/featureCallout.ftl | 27 l10n-is/browser/browser/genai.ftl | 82 l10n-is/browser/browser/newtab/newtab.ftl | 3 l10n-is/browser/browser/newtab/onboarding.ftl | 20 l10n-is/browser/browser/policies/policies-descriptions.ftl | 2 l10n-is/browser/browser/sanitize.ftl | 4 l10n-is/browser/browser/shopping.ftl | 4 l10n-is/browser/browser/sidebar.ftl | 131 l10n-is/browser/browser/tabContextMenu.ftl | 16 l10n-is/browser/browser/tabbrowser.ftl | 6 l10n-is/browser/chrome/browser/browser.properties | 429 - l10n-is/browser/chrome/overrides/appstrings.properties | 78 l10n-is/dom/chrome/appstrings.properties | 68 l10n-is/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-is/toolkit/toolkit/neterror/netError.ftl | 1 l10n-is/toolkit/toolkit/pdfviewer/viewer.ftl | 69 l10n-it/browser/browser/aboutDialog.ftl | 3 l10n-it/browser/browser/aboutLogins.ftl | 2 l10n-it/browser/browser/addonNotifications.ftl | 2 l10n-it/browser/browser/allTabsMenu.ftl | 3 l10n-it/browser/browser/browser.ftl | 13 l10n-it/browser/browser/featureCallout.ftl | 16 l10n-it/browser/browser/genai.ftl | 74 l10n-it/browser/browser/newtab/asrouter.ftl | 22 l10n-it/browser/browser/newtab/newtab.ftl | 4 l10n-it/browser/browser/newtab/onboarding.ftl | 62 l10n-it/browser/browser/policies/policies-descriptions.ftl | 2 l10n-it/browser/browser/preferences/preferences.ftl | 5 l10n-it/browser/browser/sanitize.ftl | 5 l10n-it/browser/browser/shopping.ftl | 5 l10n-it/browser/browser/sidebar.ftl | 123 l10n-it/browser/browser/tabContextMenu.ftl | 16 l10n-it/browser/browser/tabbrowser.ftl | 11 l10n-it/browser/chrome/browser/browser.properties | 6 l10n-it/devtools/client/aboutdebugging.ftl | 4 l10n-it/devtools/client/debugger.properties | 15 l10n-it/devtools/client/inspector.properties | 2 l10n-it/devtools/shared/styleinspector.properties | 3 l10n-it/dom/chrome/security/csp.properties | 7 l10n-it/security/manager/chrome/pipnss/nsserrors.properties | 2 l10n-it/toolkit/toolkit/about/aboutAddons.ftl | 26 l10n-it/toolkit/toolkit/about/aboutGlean.ftl | 6 l10n-it/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 2 l10n-it/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-it/toolkit/toolkit/featuregates/features.ftl | 3 l10n-it/toolkit/toolkit/global/extensions.ftl | 15 l10n-it/toolkit/toolkit/neterror/certError.ftl | 4 l10n-it/toolkit/toolkit/neterror/netError.ftl | 3 l10n-it/toolkit/toolkit/neterror/nsserrors.ftl | 1 l10n-it/toolkit/toolkit/pdfviewer/viewer.ftl | 44 l10n-ja/browser/browser/aboutDialog.ftl | 11 l10n-ja/browser/browser/aboutLogins.ftl | 6 l10n-ja/browser/browser/addonNotifications.ftl | 1 l10n-ja/browser/browser/allTabsMenu.ftl | 2 l10n-ja/browser/browser/browser.ftl | 13 l10n-ja/browser/browser/featureCallout.ftl | 16 l10n-ja/browser/browser/genai.ftl | 71 l10n-ja/browser/browser/newtab/asrouter.ftl | 12 l10n-ja/browser/browser/newtab/newtab.ftl | 4 l10n-ja/browser/browser/newtab/onboarding.ftl | 40 l10n-ja/browser/browser/policies/policies-descriptions.ftl | 2 l10n-ja/browser/browser/preferences/preferences.ftl | 16 l10n-ja/browser/browser/preferences/translation.ftl | 4 l10n-ja/browser/browser/sanitize.ftl | 4 l10n-ja/browser/browser/shopping.ftl | 4 l10n-ja/browser/browser/sidebar.ftl | 67 l10n-ja/browser/browser/tabContextMenu.ftl | 16 l10n-ja/browser/browser/tabbrowser.ftl | 14 l10n-ja/browser/browser/translations.ftl | 4 l10n-ja/browser/browser/webProtocolHandler.ftl | 2 l10n-ja/browser/chrome/browser/browser.properties | 7 l10n-ja/devtools/client/aboutdebugging.ftl | 3 l10n-ja/devtools/client/debugger.properties | 5 l10n-ja/devtools/client/inspector.properties | 3 l10n-ja/devtools/shared/styleinspector.properties | 12 l10n-ja/dom/chrome/appstrings.properties | 2 l10n-ja/dom/chrome/layout/css.properties | 1 l10n-ja/dom/chrome/security/csp.properties | 7 l10n-ja/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-ja/toolkit/toolkit/about/aboutProcesses.ftl | 4 l10n-ja/toolkit/toolkit/featuregates/features.ftl | 2 l10n-ja/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-ja/toolkit/toolkit/global/extensions.ftl | 16 l10n-ja/toolkit/toolkit/neterror/netError.ftl | 1 l10n-ja/toolkit/toolkit/pdfviewer/viewer.ftl | 33 l10n-ka/toolkit/toolkit/pdfviewer/viewer.ftl | 35 l10n-kab/browser/browser/aboutDialog.ftl | 11 l10n-kab/browser/browser/browser.ftl | 11 l10n-kab/browser/browser/defaultBrowserNotification.ftl | 1 l10n-kab/browser/browser/featureCallout.ftl | 26 l10n-kab/browser/browser/genai.ftl | 54 l10n-kab/browser/browser/newtab/asrouter.ftl | 14 l10n-kab/browser/browser/newtab/newtab.ftl | 26 l10n-kab/browser/browser/newtab/onboarding.ftl | 10 l10n-kab/browser/browser/places.ftl | 53 l10n-kab/browser/browser/preferences/connection.ftl | 21 l10n-kab/browser/browser/preferences/formAutofill.ftl | 11 l10n-kab/browser/browser/sanitize.ftl | 4 l10n-kab/browser/browser/screenshots.ftl | 20 l10n-kab/browser/browser/shopping.ftl | 1 l10n-kab/browser/browser/sidebar.ftl | 148 l10n-kab/browser/browser/syncedTabs.ftl | 5 l10n-kab/browser/browser/tabContextMenu.ftl | 13 l10n-kab/browser/browser/translations.ftl | 3 l10n-kab/devtools/shared/styleinspector.properties | 191 l10n-kab/toolkit/toolkit/about/aboutWebauthn.ftl | 41 l10n-kab/toolkit/toolkit/featuregates/features.ftl | 16 l10n-kab/toolkit/toolkit/neterror/netError.ftl | 1 l10n-kab/toolkit/toolkit/pdfviewer/viewer.ftl | 52 l10n-kab/toolkit/toolkit/updates/elevation.ftl | 1 l10n-kk/browser/browser/aboutDialog.ftl | 11 l10n-kk/browser/browser/aboutLogins.ftl | 2 l10n-kk/browser/browser/addonNotifications.ftl | 1 l10n-kk/browser/browser/allTabsMenu.ftl | 2 l10n-kk/browser/browser/browser.ftl | 13 l10n-kk/browser/browser/featureCallout.ftl | 27 l10n-kk/browser/browser/genai.ftl | 71 l10n-kk/browser/browser/newtab/asrouter.ftl | 12 l10n-kk/browser/browser/newtab/newtab.ftl | 4 l10n-kk/browser/browser/newtab/onboarding.ftl | 40 l10n-kk/browser/browser/policies/policies-descriptions.ftl | 1 l10n-kk/browser/browser/sanitize.ftl | 4 l10n-kk/browser/browser/shopping.ftl | 4 l10n-kk/browser/browser/sidebar.ftl | 67 l10n-kk/browser/browser/tabContextMenu.ftl | 16 l10n-kk/browser/browser/tabbrowser.ftl | 14 l10n-kk/browser/chrome/browser/browser.properties | 429 - l10n-kk/devtools/client/aboutdebugging.ftl | 3 l10n-kk/devtools/client/inspector.properties | 404 l10n-kk/devtools/shared/styleinspector.properties | 198 l10n-kk/dom/chrome/appstrings.properties | 68 l10n-kk/dom/chrome/layout/css.properties | 95 l10n-kk/dom/chrome/security/csp.properties | 7 l10n-kk/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-kk/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-kk/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-kk/toolkit/toolkit/global/extensions.ftl | 15 l10n-kk/toolkit/toolkit/neterror/netError.ftl | 1 l10n-kk/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-ko/browser/browser/aboutDialog.ftl | 11 l10n-ko/browser/browser/aboutLogins.ftl | 2 l10n-ko/browser/browser/addonNotifications.ftl | 2 l10n-ko/browser/browser/allTabsMenu.ftl | 2 l10n-ko/browser/browser/browser.ftl | 14 l10n-ko/browser/browser/featureCallout.ftl | 27 l10n-ko/browser/browser/genai.ftl | 73 l10n-ko/browser/browser/newtab/asrouter.ftl | 18 l10n-ko/browser/browser/newtab/newtab.ftl | 6 l10n-ko/browser/browser/newtab/onboarding.ftl | 40 l10n-ko/browser/browser/policies/policies-descriptions.ftl | 1 l10n-ko/browser/browser/preferences/fonts.ftl | 16 l10n-ko/browser/browser/preferences/preferences.ftl | 7 l10n-ko/browser/browser/sanitize.ftl | 4 l10n-ko/browser/browser/shopping.ftl | 4 l10n-ko/browser/browser/sidebar.ftl | 75 l10n-ko/browser/browser/tabContextMenu.ftl | 16 l10n-ko/browser/browser/tabbrowser.ftl | 14 l10n-ko/browser/chrome/browser/browser.properties | 429 - l10n-ko/devtools/client/aboutdebugging.ftl | 3 l10n-ko/devtools/client/inspector.properties | 404 l10n-ko/devtools/shared/styleinspector.properties | 198 l10n-ko/dom/chrome/appstrings.properties | 68 l10n-ko/dom/chrome/layout/css.properties | 95 l10n-ko/dom/chrome/security/csp.properties | 11 l10n-ko/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-ko/toolkit/toolkit/about/aboutAddons.ftl | 17 l10n-ko/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-ko/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 1 l10n-ko/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-ko/toolkit/toolkit/global/antiTracking.ftl | 7 l10n-ko/toolkit/toolkit/global/extensions.ftl | 11 l10n-ko/toolkit/toolkit/intl/languageNames.ftl | 6 l10n-ko/toolkit/toolkit/neterror/netError.ftl | 1 l10n-ko/toolkit/toolkit/neterror/nsserrors.ftl | 1 l10n-ko/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-lv/browser/browser/browser.ftl | 38 l10n-lv/devtools/client/accessibility.ftl | 41 l10n-lv/devtools/client/accessibility.properties | 49 l10n-lv/devtools/client/inspector.properties | 365 l10n-lv/devtools/client/perftools.ftl | 54 l10n-lv/devtools/shared/accessibility.properties | 110 l10n-lv/dom/chrome/dom/dom.properties | 445 - l10n-my/toolkit/toolkit/about/aboutAddons.ftl | 2 l10n-nb-NO/browser/browser/aboutDialog.ftl | 11 l10n-nb-NO/browser/browser/aboutLogins.ftl | 2 l10n-nb-NO/browser/browser/allTabsMenu.ftl | 2 l10n-nb-NO/browser/browser/browser.ftl | 4 l10n-nb-NO/browser/browser/browserContext.ftl | 4 l10n-nb-NO/browser/browser/genai.ftl | 2 l10n-nb-NO/browser/browser/menubar.ftl | 4 l10n-nb-NO/browser/browser/newtab/newtab.ftl | 4 l10n-nb-NO/browser/browser/places.ftl | 4 l10n-nb-NO/browser/browser/preferences/preferences.ftl | 22 l10n-nb-NO/browser/browser/sanitize.ftl | 4 l10n-nb-NO/browser/browser/shopping.ftl | 4 l10n-nb-NO/browser/browser/sidebar.ftl | 36 l10n-nb-NO/browser/browser/syncedTabs.ftl | 2 l10n-nb-NO/browser/browser/tabContextMenu.ftl | 2 l10n-nb-NO/browser/chrome/browser/browser.properties | 429 - l10n-nb-NO/devtools/client/aboutdebugging.ftl | 3 l10n-nb-NO/devtools/client/debugger.properties | 978 -- l10n-nb-NO/devtools/client/inspector.properties | 404 l10n-nb-NO/devtools/shared/styleinspector.properties | 198 l10n-nb-NO/dom/chrome/appstrings.properties | 68 l10n-nb-NO/dom/chrome/layout/css.properties | 95 l10n-nb-NO/dom/chrome/security/csp.properties | 7 l10n-nb-NO/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-nb-NO/toolkit/toolkit/featuregates/features.ftl | 7 l10n-nb-NO/toolkit/toolkit/global/antiTracking.ftl | 7 l10n-nb-NO/toolkit/toolkit/neterror/netError.ftl | 1 l10n-nb-NO/toolkit/toolkit/pdfviewer/viewer.ftl | 89 l10n-ne-NP/browser/browser/aboutDialog.ftl | 11 l10n-ne-NP/browser/browser/browser.ftl | 2 l10n-ne-NP/browser/browser/defaultBrowserNotification.ftl | 2 l10n-ne-NP/browser/browser/firefoxView.ftl | 212 l10n-ne-NP/browser/browser/fxviewTabList.ftl | 45 l10n-ne-NP/browser/browser/genai.ftl | 28 l10n-ne-NP/browser/browser/identityCredentialNotification.ftl | 25 l10n-nl/browser/browser/aboutDialog.ftl | 11 l10n-nl/browser/browser/aboutLogins.ftl | 2 l10n-nl/browser/browser/addonNotifications.ftl | 2 l10n-nl/browser/browser/allTabsMenu.ftl | 2 l10n-nl/browser/browser/browser.ftl | 14 l10n-nl/browser/browser/featureCallout.ftl | 27 l10n-nl/browser/browser/genai.ftl | 75 l10n-nl/browser/browser/newtab/asrouter.ftl | 18 l10n-nl/browser/browser/newtab/newtab.ftl | 6 l10n-nl/browser/browser/newtab/onboarding.ftl | 40 l10n-nl/browser/browser/policies/policies-descriptions.ftl | 2 l10n-nl/browser/browser/preferences/preferences.ftl | 5 l10n-nl/browser/browser/sanitize.ftl | 4 l10n-nl/browser/browser/shopping.ftl | 4 l10n-nl/browser/browser/sidebar.ftl | 75 l10n-nl/browser/browser/tabContextMenu.ftl | 16 l10n-nl/browser/browser/tabbrowser.ftl | 14 l10n-nl/browser/chrome/browser/browser.properties | 429 - l10n-nl/browser/chrome/overrides/appstrings.properties | 78 l10n-nl/devtools/client/aboutdebugging.ftl | 3 l10n-nl/devtools/client/inspector.properties | 404 l10n-nl/devtools/shared/styleinspector.properties | 198 l10n-nl/dom/chrome/appstrings.properties | 68 l10n-nl/dom/chrome/layout/css.properties | 95 l10n-nl/dom/chrome/security/csp.properties | 7 l10n-nl/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-nl/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-nl/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-nl/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-nl/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-nl/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-nl/toolkit/toolkit/global/extensions.ftl | 22 l10n-nl/toolkit/toolkit/neterror/certError.ftl | 32 l10n-nl/toolkit/toolkit/neterror/netError.ftl | 1 l10n-nl/toolkit/toolkit/neterror/nsserrors.ftl | 8 l10n-nl/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-nn-NO/browser/browser/aboutDialog.ftl | 11 l10n-nn-NO/browser/browser/aboutLogins.ftl | 2 l10n-nn-NO/browser/browser/allTabsMenu.ftl | 2 l10n-nn-NO/browser/browser/browser.ftl | 14 l10n-nn-NO/browser/browser/featureCallout.ftl | 26 l10n-nn-NO/browser/browser/genai.ftl | 54 l10n-nn-NO/browser/browser/menubar.ftl | 2 l10n-nn-NO/browser/browser/newtab/asrouter.ftl | 16 l10n-nn-NO/browser/browser/newtab/newtab.ftl | 8 l10n-nn-NO/browser/browser/newtab/onboarding.ftl | 16 l10n-nn-NO/browser/browser/policies/policies-descriptions.ftl | 1 l10n-nn-NO/browser/browser/preferences/preferences.ftl | 2 l10n-nn-NO/browser/browser/sanitize.ftl | 4 l10n-nn-NO/browser/browser/shopping.ftl | 4 l10n-nn-NO/browser/browser/sidebar.ftl | 61 l10n-nn-NO/browser/browser/tabbrowser.ftl | 5 l10n-nn-NO/browser/chrome/browser/browser.properties | 429 - l10n-nn-NO/browser/chrome/browser/customizableui/customizableWidgets.properties | 15 l10n-nn-NO/devtools/client/aboutdebugging.ftl | 3 l10n-nn-NO/devtools/client/inspector.properties | 404 l10n-nn-NO/devtools/shared/styleinspector.properties | 198 l10n-nn-NO/dom/chrome/appstrings.properties | 68 l10n-nn-NO/toolkit/toolkit/about/aboutAddons.ftl | 1 l10n-nn-NO/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-nn-NO/toolkit/toolkit/featuregates/features.ftl | 2 l10n-nn-NO/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-nn-NO/toolkit/toolkit/neterror/netError.ftl | 1 l10n-nn-NO/toolkit/toolkit/pdfviewer/viewer.ftl | 40 l10n-oc/browser/browser/aboutDialog.ftl | 11 l10n-oc/browser/browser/allTabsMenu.ftl | 7 l10n-oc/browser/browser/appmenu.ftl | 2 l10n-oc/browser/browser/browser.ftl | 2 l10n-oc/browser/browser/newtab/newtab.ftl | 40 l10n-oc/browser/browser/preferences/moreFromMozilla.ftl | 1 l10n-oc/browser/browser/preferences/preferences.ftl | 20 l10n-oc/browser/browser/sanitize.ftl | 4 l10n-oc/browser/browser/translations.ftl | 1 l10n-oc/toolkit/toolkit/formautofill/formAutofill.ftl | 2 l10n-pa-IN/browser/browser/aboutDialog.ftl | 11 l10n-pa-IN/browser/browser/aboutLogins.ftl | 2 l10n-pa-IN/browser/browser/addonNotifications.ftl | 1 l10n-pa-IN/browser/browser/allTabsMenu.ftl | 2 l10n-pa-IN/browser/browser/browser.ftl | 13 l10n-pa-IN/browser/browser/featureCallout.ftl | 27 l10n-pa-IN/browser/browser/genai.ftl | 66 l10n-pa-IN/browser/browser/newtab/asrouter.ftl | 12 l10n-pa-IN/browser/browser/newtab/newtab.ftl | 4 l10n-pa-IN/browser/browser/newtab/onboarding.ftl | 20 l10n-pa-IN/browser/browser/pageInfo.ftl | 29 l10n-pa-IN/browser/browser/policies/policies-descriptions.ftl | 2 l10n-pa-IN/browser/browser/reportBrokenSite.ftl | 2 l10n-pa-IN/browser/browser/sanitize.ftl | 4 l10n-pa-IN/browser/browser/shopping.ftl | 4 l10n-pa-IN/browser/browser/sidebar.ftl | 147 l10n-pa-IN/browser/browser/tabContextMenu.ftl | 16 l10n-pa-IN/browser/browser/tabbrowser.ftl | 14 l10n-pa-IN/browser/chrome/browser/browser.properties | 429 - l10n-pa-IN/devtools/client/debugger.properties | 550 - l10n-pa-IN/dom/chrome/appstrings.properties | 68 l10n-pa-IN/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-pa-IN/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-pa-IN/toolkit/toolkit/global/extensions.ftl | 14 l10n-pa-IN/toolkit/toolkit/neterror/netError.ftl | 1 l10n-pa-IN/toolkit/toolkit/pdfviewer/viewer.ftl | 37 l10n-pl/browser/browser/aboutDialog.ftl | 11 l10n-pl/browser/browser/aboutLogins.ftl | 4 l10n-pl/browser/browser/browser.ftl | 4 l10n-pl/browser/browser/defaultBrowserNotification.ftl | 2 l10n-pl/browser/browser/newtab/newtab.ftl | 42 l10n-pl/browser/browser/newtab/onboarding.ftl | 10 l10n-pl/browser/browser/preferences/preferences.ftl | 2 l10n-pl/browser/browser/sanitize.ftl | 4 l10n-pl/browser/browser/screenshots.ftl | 20 l10n-pl/browser/browser/sidebar.ftl | 108 l10n-pl/browser/chrome/browser/browser.properties | 7 l10n-pl/browser/chrome/overrides/appstrings.properties | 78 l10n-pl/devtools/client/aboutdebugging.ftl | 112 l10n-pl/devtools/shared/styleinspector.properties | 198 l10n-pl/dom/chrome/appstrings.properties | 68 l10n-pl/dom/chrome/layout/css.properties | 95 l10n-pl/dom/chrome/security/csp.properties | 10 l10n-pl/toolkit/toolkit/about/aboutProcesses.ftl | 4 l10n-pl/toolkit/toolkit/featuregates/features.ftl | 14 l10n-pl/toolkit/toolkit/global/antiTracking.ftl | 12 l10n-pl/toolkit/toolkit/neterror/certError.ftl | 32 l10n-pl/toolkit/toolkit/neterror/netError.ftl | 1 l10n-pl/toolkit/toolkit/pdfviewer/viewer.ftl | 95 l10n-pt-BR/browser/browser/aboutDialog.ftl | 11 l10n-pt-BR/browser/browser/aboutLogins.ftl | 2 l10n-pt-BR/browser/browser/addonNotifications.ftl | 2 l10n-pt-BR/browser/browser/allTabsMenu.ftl | 2 l10n-pt-BR/browser/browser/browser.ftl | 18 l10n-pt-BR/browser/browser/featureCallout.ftl | 27 l10n-pt-BR/browser/browser/firefoxRelay.ftl | 4 l10n-pt-BR/browser/browser/genai.ftl | 73 l10n-pt-BR/browser/browser/menubar.ftl | 4 l10n-pt-BR/browser/browser/newtab/asrouter.ftl | 18 l10n-pt-BR/browser/browser/newtab/newtab.ftl | 6 l10n-pt-BR/browser/browser/newtab/onboarding.ftl | 40 l10n-pt-BR/browser/browser/policies/policies-descriptions.ftl | 1 l10n-pt-BR/browser/browser/preferences/fxaPairDevice.ftl | 7 l10n-pt-BR/browser/browser/preferences/moreFromMozilla.ftl | 2 l10n-pt-BR/browser/browser/preferences/preferences.ftl | 7 l10n-pt-BR/browser/browser/sanitize.ftl | 6 l10n-pt-BR/browser/browser/shopping.ftl | 4 l10n-pt-BR/browser/browser/sidebar.ftl | 75 l10n-pt-BR/browser/browser/sidebarMenu.ftl | 4 l10n-pt-BR/browser/browser/tabContextMenu.ftl | 16 l10n-pt-BR/browser/browser/tabbrowser.ftl | 18 l10n-pt-BR/browser/browser/touchbar/touchbar.ftl | 7 l10n-pt-BR/browser/browser/translations.ftl | 10 l10n-pt-BR/browser/chrome/browser/browser.properties | 429 - l10n-pt-BR/browser/chrome/browser/customizableui/customizableWidgets.properties | 15 l10n-pt-BR/browser/chrome/browser/shellservice.properties | 17 l10n-pt-BR/browser/pdfviewer/viewer.properties | 394 l10n-pt-BR/devtools/client/aboutdebugging.ftl | 3 l10n-pt-BR/devtools/client/inspector.properties | 404 l10n-pt-BR/devtools/shared/styleinspector.properties | 198 l10n-pt-BR/dom/chrome/appstrings.properties | 68 l10n-pt-BR/dom/chrome/layout/css.properties | 95 l10n-pt-BR/dom/chrome/security/csp.properties | 27 l10n-pt-BR/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-pt-BR/security/manager/security/certificates/certManager.ftl | 48 l10n-pt-BR/toolkit/chrome/global/resetProfile.properties | 10 l10n-pt-BR/toolkit/chrome/mozapps/update/updates.properties | 68 l10n-pt-BR/toolkit/chrome/passwordmgr/passwordmgr.properties | 26 l10n-pt-BR/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-pt-BR/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-pt-BR/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 1 l10n-pt-BR/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-pt-BR/toolkit/toolkit/about/aboutReader.ftl | 21 l10n-pt-BR/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-pt-BR/toolkit/toolkit/global/extensions.ftl | 22 l10n-pt-BR/toolkit/toolkit/neterror/netError.ftl | 7 l10n-pt-BR/toolkit/toolkit/neterror/nsserrors.ftl | 5 l10n-pt-BR/toolkit/toolkit/passwordmgr/passwordmgr.ftl | 2 l10n-pt-BR/toolkit/toolkit/pdfviewer/viewer.ftl | 36 l10n-pt-PT/browser/browser/aboutDialog.ftl | 11 l10n-pt-PT/browser/browser/aboutLogins.ftl | 2 l10n-pt-PT/browser/browser/addonNotifications.ftl | 2 l10n-pt-PT/browser/browser/allTabsMenu.ftl | 2 l10n-pt-PT/browser/browser/browser.ftl | 14 l10n-pt-PT/browser/browser/defaultBrowserNotification.ftl | 2 l10n-pt-PT/browser/browser/featureCallout.ftl | 27 l10n-pt-PT/browser/browser/genai.ftl | 130 l10n-pt-PT/browser/browser/newtab/asrouter.ftl | 18 l10n-pt-PT/browser/browser/newtab/newtab.ftl | 46 l10n-pt-PT/browser/browser/newtab/onboarding.ftl | 52 l10n-pt-PT/browser/browser/policies/policies-descriptions.ftl | 2 l10n-pt-PT/browser/browser/preferences/preferences.ftl | 5 l10n-pt-PT/browser/browser/sanitize.ftl | 4 l10n-pt-PT/browser/browser/screenshots.ftl | 20 l10n-pt-PT/browser/browser/shopping.ftl | 4 l10n-pt-PT/browser/browser/sidebar.ftl | 147 l10n-pt-PT/browser/browser/tabContextMenu.ftl | 16 l10n-pt-PT/browser/browser/tabbrowser.ftl | 11 l10n-pt-PT/browser/chrome/browser/browser.properties | 7 l10n-pt-PT/browser/chrome/overrides/appstrings.properties | 78 l10n-pt-PT/devtools/client/aboutdebugging.ftl | 115 l10n-pt-PT/devtools/client/inspector.properties | 404 l10n-pt-PT/devtools/client/menus.properties | 8 l10n-pt-PT/devtools/shared/styleinspector.properties | 198 l10n-pt-PT/dom/chrome/appstrings.properties | 68 l10n-pt-PT/dom/chrome/layout/css.properties | 95 l10n-pt-PT/dom/chrome/security/csp.properties | 10 l10n-pt-PT/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-pt-PT/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-pt-PT/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-pt-PT/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-pt-PT/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-pt-PT/toolkit/toolkit/featuregates/features.ftl | 16 l10n-pt-PT/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-pt-PT/toolkit/toolkit/global/extensions.ftl | 21 l10n-pt-PT/toolkit/toolkit/neterror/certError.ftl | 32 l10n-pt-PT/toolkit/toolkit/neterror/netError.ftl | 1 l10n-pt-PT/toolkit/toolkit/neterror/nsserrors.ftl | 1 l10n-pt-PT/toolkit/toolkit/pdfviewer/viewer.ftl | 95 l10n-rm/browser/browser/aboutDialog.ftl | 11 l10n-rm/browser/browser/aboutLogins.ftl | 2 l10n-rm/browser/browser/addonNotifications.ftl | 2 l10n-rm/browser/browser/allTabsMenu.ftl | 2 l10n-rm/browser/browser/browser.ftl | 14 l10n-rm/browser/browser/defaultBrowserNotification.ftl | 2 l10n-rm/browser/browser/featureCallout.ftl | 27 l10n-rm/browser/browser/firefoxView.ftl | 2 l10n-rm/browser/browser/genai.ftl | 130 l10n-rm/browser/browser/newtab/asrouter.ftl | 18 l10n-rm/browser/browser/newtab/newtab.ftl | 46 l10n-rm/browser/browser/newtab/onboarding.ftl | 50 l10n-rm/browser/browser/policies/policies-descriptions.ftl | 2 l10n-rm/browser/browser/preferences/preferences.ftl | 5 l10n-rm/browser/browser/sanitize.ftl | 4 l10n-rm/browser/browser/screenshots.ftl | 20 l10n-rm/browser/browser/shopping.ftl | 4 l10n-rm/browser/browser/sidebar.ftl | 147 l10n-rm/browser/browser/tabContextMenu.ftl | 16 l10n-rm/browser/browser/tabbrowser.ftl | 11 l10n-rm/browser/chrome/browser/browser.properties | 429 - l10n-rm/browser/chrome/overrides/appstrings.properties | 78 l10n-rm/devtools/client/aboutdebugging.ftl | 115 l10n-rm/devtools/client/inspector.properties | 404 l10n-rm/devtools/shared/styleinspector.properties | 198 l10n-rm/dom/chrome/appstrings.properties | 68 l10n-rm/dom/chrome/layout/css.properties | 95 l10n-rm/dom/chrome/security/csp.properties | 21 l10n-rm/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-rm/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-rm/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-rm/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-rm/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-rm/toolkit/toolkit/featuregates/features.ftl | 16 l10n-rm/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-rm/toolkit/toolkit/global/extensions.ftl | 22 l10n-rm/toolkit/toolkit/neterror/certError.ftl | 32 l10n-rm/toolkit/toolkit/neterror/netError.ftl | 1 l10n-rm/toolkit/toolkit/neterror/nsserrors.ftl | 8 l10n-rm/toolkit/toolkit/pdfviewer/viewer.ftl | 89 l10n-ru/browser/browser/aboutDialog.ftl | 11 l10n-ru/browser/browser/aboutLogins.ftl | 2 l10n-ru/browser/browser/addonNotifications.ftl | 2 l10n-ru/browser/browser/allTabsMenu.ftl | 2 l10n-ru/browser/browser/browser.ftl | 14 l10n-ru/browser/browser/featureCallout.ftl | 27 l10n-ru/browser/browser/genai.ftl | 71 l10n-ru/browser/browser/newtab/asrouter.ftl | 18 l10n-ru/browser/browser/newtab/newtab.ftl | 4 l10n-ru/browser/browser/newtab/onboarding.ftl | 40 l10n-ru/browser/browser/policies/policies-descriptions.ftl | 1 l10n-ru/browser/browser/preferences/preferences.ftl | 5 l10n-ru/browser/browser/sanitize.ftl | 4 l10n-ru/browser/browser/shopping.ftl | 4 l10n-ru/browser/browser/sidebar.ftl | 75 l10n-ru/browser/browser/tabContextMenu.ftl | 16 l10n-ru/browser/browser/tabbrowser.ftl | 14 l10n-ru/browser/chrome/browser/browser.properties | 429 - l10n-ru/devtools/client/aboutdebugging.ftl | 3 l10n-ru/devtools/client/inspector.properties | 404 l10n-ru/devtools/shared/styleinspector.properties | 12 l10n-ru/dom/chrome/appstrings.properties | 2 l10n-ru/dom/chrome/layout/css.properties | 95 l10n-ru/dom/chrome/security/csp.properties | 7 l10n-ru/security/manager/chrome/pipnss/nsserrors.properties | 1 l10n-ru/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-ru/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-ru/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-ru/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-ru/toolkit/toolkit/global/antiTracking.ftl | 12 l10n-ru/toolkit/toolkit/global/extensions.ftl | 23 l10n-ru/toolkit/toolkit/neterror/netError.ftl | 1 l10n-ru/toolkit/toolkit/neterror/nsserrors.ftl | 1 l10n-ru/toolkit/toolkit/pdfviewer/viewer.ftl | 34 l10n-sat/browser/browser/aboutDialog.ftl | 11 l10n-sat/browser/browser/aboutLogins.ftl | 7 l10n-sat/browser/browser/defaultBrowserNotification.ftl | 7 l10n-sat/browser/browser/editBookmarkOverlay.ftl | 3 l10n-sat/toolkit/toolkit/pdfviewer/viewer.ftl | 26 l10n-sc/browser/browser/aboutSessionRestore.ftl | 12 l10n-sc/browser/browser/browser.ftl | 5 l10n-sc/browser/browser/browserContext.ftl | 2 l10n-sc/browser/browser/newtab/newtab.ftl | 11 l10n-sc/browser/browser/policies/policies-descriptions.ftl | 1 l10n-sc/browser/browser/preferences/preferences.ftl | 4 l10n-sc/browser/browser/syncedTabs.ftl | 5 l10n-sc/dom/chrome/accessibility/mac/accessible.properties | 80 l10n-sc/dom/chrome/accessibility/unix/accessible.properties | 30 l10n-sc/dom/chrome/accessibility/win/accessible.properties | 35 l10n-sc/mobile/android/chrome/browser.properties | 31 l10n-sc/mobile/android/chrome/passwordmgr.properties | 19 l10n-sc/mobile/android/mobile/android/aboutConfig.ftl | 20 l10n-sc/mobile/android/mobile/android/geckoViewConsole.ftl | 13 l10n-sc/toolkit/chrome/mozapps/update/updates.properties | 68 l10n-sc/toolkit/crashreporter/crashreporter.ftl | 13 l10n-sc/toolkit/toolkit/global/processTypes.ftl | 16 l10n-sc/toolkit/toolkit/neterror/netError.ftl | 6 l10n-sc/toolkit/toolkit/pdfviewer/viewer.ftl | 89 l10n-sc/toolkit/toolkit/preferences/preferences.ftl | 3 l10n-si/browser/browser/aboutDialog.ftl | 12 l10n-si/browser/browser/aboutLogins.ftl | 5 l10n-si/browser/browser/appmenu.ftl | 4 l10n-si/browser/browser/browser.ftl | 9 l10n-si/browser/browser/browserContext.ftl | 3 l10n-si/browser/browser/defaultBrowserNotification.ftl | 6 l10n-si/browser/browser/featureCallout.ftl | 25 l10n-si/browser/browser/firefoxView.ftl | 11 l10n-si/browser/browser/fxviewTabList.ftl | 4 l10n-si/browser/browser/genai.ftl | 28 l10n-si/browser/browser/newtab/asrouter.ftl | 14 l10n-si/browser/browser/newtab/newtab.ftl | 69 l10n-si/browser/browser/newtab/onboarding.ftl | 17 l10n-si/browser/extensions/formautofill/formautofill.properties | 2 l10n-si/devtools/client/aboutdebugging.ftl | 93 l10n-si/toolkit/chrome/global/aboutStudies.properties | 6 l10n-si/toolkit/toolkit/about/aboutSupport.ftl | 1 l10n-si/toolkit/toolkit/pdfviewer/viewer.ftl | 26 l10n-sk/browser/browser/aboutDialog.ftl | 11 l10n-sk/browser/browser/aboutLogins.ftl | 2 l10n-sk/browser/browser/addonNotifications.ftl | 1 l10n-sk/browser/browser/allTabsMenu.ftl | 2 l10n-sk/browser/browser/browser.ftl | 13 l10n-sk/browser/browser/featureCallout.ftl | 27 l10n-sk/browser/browser/genai.ftl | 71 l10n-sk/browser/browser/newtab/asrouter.ftl | 12 l10n-sk/browser/browser/newtab/newtab.ftl | 4 l10n-sk/browser/browser/newtab/onboarding.ftl | 40 l10n-sk/browser/browser/policies/policies-descriptions.ftl | 2 l10n-sk/browser/browser/sanitize.ftl | 4 l10n-sk/browser/browser/shopping.ftl | 4 l10n-sk/browser/browser/sidebar.ftl | 77 l10n-sk/browser/browser/tabContextMenu.ftl | 16 l10n-sk/browser/browser/tabbrowser.ftl | 14 l10n-sk/browser/chrome/browser/browser.properties | 429 - l10n-sk/devtools/client/aboutdebugging.ftl | 3 l10n-sk/devtools/client/inspector.properties | 404 l10n-sk/devtools/shared/styleinspector.properties | 198 l10n-sk/dom/chrome/appstrings.properties | 68 l10n-sk/dom/chrome/layout/css.properties | 95 l10n-sk/dom/chrome/security/csp.properties | 7 l10n-sk/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-sk/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-sk/toolkit/toolkit/global/antiTracking.ftl | 13 l10n-sk/toolkit/toolkit/global/extensions.ftl | 46 l10n-sk/toolkit/toolkit/neterror/netError.ftl | 1 l10n-sk/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-skr/browser/browser/aboutDialog.ftl | 11 l10n-skr/browser/browser/aboutLogins.ftl | 9 l10n-skr/browser/browser/addonNotifications.ftl | 2 l10n-skr/browser/browser/allTabsMenu.ftl | 2 l10n-skr/browser/browser/browser.ftl | 33 l10n-skr/browser/browser/defaultBrowserNotification.ftl | 1 l10n-skr/browser/browser/featureCallout.ftl | 26 l10n-skr/browser/browser/genai.ftl | 76 l10n-skr/browser/browser/newtab/asrouter.ftl | 9 l10n-skr/browser/browser/newtab/newtab.ftl | 46 l10n-skr/browser/browser/newtab/onboarding.ftl | 24 l10n-skr/browser/browser/policies/policies-descriptions.ftl | 9 l10n-skr/browser/browser/preferences/connection.ftl | 3 l10n-skr/browser/browser/preferences/preferences.ftl | 26 l10n-skr/browser/browser/sanitize.ftl | 4 l10n-skr/browser/browser/shopping.ftl | 5 l10n-skr/browser/browser/sidebar.ftl | 111 l10n-skr/browser/browser/tabContextMenu.ftl | 16 l10n-skr/browser/browser/tabbrowser.ftl | 19 l10n-skr/browser/browser/translations.ftl | 15 l10n-skr/browser/chrome/browser/browser.properties | 430 - l10n-skr/browser/chrome/overrides/appstrings.properties | 78 l10n-skr/devtools/client/aboutdebugging.ftl | 108 l10n-skr/devtools/client/debugger.properties | 976 -- l10n-skr/devtools/client/startup.properties | 3 l10n-skr/devtools/client/tooltips.ftl | 11 l10n-skr/devtools/client/webconsole.properties | 419 - l10n-skr/devtools/shared/styleinspector.properties | 14 l10n-skr/dom/chrome/appstrings.properties | 68 l10n-skr/dom/chrome/dom/dom.properties | 598 - l10n-skr/dom/chrome/layout/css.properties | 95 l10n-skr/dom/chrome/security/csp.properties | 31 l10n-skr/mobile/android/chrome/browser.properties | 10 l10n-skr/mobile/android/chrome/passwordmgr.properties | 22 l10n-skr/mobile/android/mobile/android/geckoViewConsole.ftl | 5 l10n-skr/netwerk/necko.properties | 138 l10n-skr/toolkit/chrome/global/narrate.properties | 4 l10n-skr/toolkit/toolkit/about/aboutAddons.ftl | 1 l10n-skr/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-skr/toolkit/toolkit/about/aboutReader.ftl | 13 l10n-skr/toolkit/toolkit/about/aboutSupport.ftl | 4 l10n-skr/toolkit/toolkit/contentanalysis/contentanalysis.ftl | 21 l10n-skr/toolkit/toolkit/featuregates/features.ftl | 10 l10n-skr/toolkit/toolkit/global/arrowscrollbox.ftl | 10 l10n-skr/toolkit/toolkit/global/extensions.ftl | 22 l10n-skr/toolkit/toolkit/global/processTypes.ftl | 5 l10n-skr/toolkit/toolkit/neterror/certError.ftl | 32 l10n-skr/toolkit/toolkit/neterror/netError.ftl | 1 l10n-skr/toolkit/toolkit/pdfviewer/viewer.ftl | 73 l10n-sl/browser/branding/official/brand.ftl | 11 l10n-sl/browser/browser/aboutDialog.ftl | 11 l10n-sl/browser/browser/aboutLogins.ftl | 54 l10n-sl/browser/browser/addonNotifications.ftl | 2 l10n-sl/browser/browser/allTabsMenu.ftl | 2 l10n-sl/browser/browser/browser.ftl | 23 l10n-sl/browser/browser/featureCallout.ftl | 27 l10n-sl/browser/browser/genai.ftl | 116 l10n-sl/browser/browser/newtab/asrouter.ftl | 18 l10n-sl/browser/browser/newtab/newtab.ftl | 39 l10n-sl/browser/browser/newtab/onboarding.ftl | 48 l10n-sl/browser/browser/policies/policies-descriptions.ftl | 4 l10n-sl/browser/browser/preferences/preferences.ftl | 33 l10n-sl/browser/browser/sanitize.ftl | 4 l10n-sl/browser/browser/shopping.ftl | 45 l10n-sl/browser/browser/sidebar.ftl | 155 l10n-sl/browser/browser/tabContextMenu.ftl | 16 l10n-sl/browser/browser/tabbrowser.ftl | 14 l10n-sl/browser/browser/webauthnDialog.ftl | 5 l10n-sl/browser/chrome/browser/browser.properties | 429 - l10n-sl/browser/chrome/overrides/appstrings.properties | 78 l10n-sl/devtools/client/aboutdebugging.ftl | 3 l10n-sl/devtools/client/layout.properties | 92 l10n-sl/devtools/client/tooltips.ftl | 9 l10n-sl/devtools/shared/styleinspector.properties | 201 l10n-sl/dom/chrome/appstrings.properties | 68 l10n-sl/dom/chrome/layout/css.properties | 80 l10n-sl/dom/chrome/security/csp.properties | 25 l10n-sl/netwerk/necko.properties | 144 l10n-sl/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-sl/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-sl/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-sl/toolkit/toolkit/about/aboutSupport.ftl | 11 l10n-sl/toolkit/toolkit/about/aboutWebauthn.ftl | 2 l10n-sl/toolkit/toolkit/branding/brandings.ftl | 10 l10n-sl/toolkit/toolkit/contentanalysis/contentanalysis.ftl | 25 l10n-sl/toolkit/toolkit/featuregates/features.ftl | 12 l10n-sl/toolkit/toolkit/global/antiTracking.ftl | 13 l10n-sl/toolkit/toolkit/global/extensions.ftl | 24 l10n-sl/toolkit/toolkit/global/processTypes.ftl | 9 l10n-sl/toolkit/toolkit/neterror/certError.ftl | 32 l10n-sl/toolkit/toolkit/neterror/netError.ftl | 1 l10n-sl/toolkit/toolkit/neterror/nsserrors.ftl | 7 l10n-sl/toolkit/toolkit/pdfviewer/viewer.ftl | 87 l10n-sl/toolkit/toolkit/updates/elevation.ftl | 5 l10n-sq/browser/browser/aboutDialog.ftl | 11 l10n-sq/browser/browser/aboutLogins.ftl | 2 l10n-sq/browser/browser/browser.ftl | 25 l10n-sq/browser/browser/defaultBrowserNotification.ftl | 2 l10n-sq/browser/browser/featureCallout.ftl | 27 l10n-sq/browser/browser/genai.ftl | 127 l10n-sq/browser/browser/newtab/asrouter.ftl | 12 l10n-sq/browser/browser/newtab/newtab.ftl | 7 l10n-sq/browser/browser/newtab/onboarding.ftl | 30 l10n-sq/browser/browser/policies/policies-descriptions.ftl | 1 l10n-sq/browser/browser/preferences/moreFromMozilla.ftl | 4 l10n-sq/browser/browser/preferences/preferences.ftl | 17 l10n-sq/browser/browser/sanitize.ftl | 4 l10n-sq/browser/browser/screenshots.ftl | 20 l10n-sq/browser/browser/shopping.ftl | 4 l10n-sq/browser/browser/sidebar.ftl | 153 l10n-sq/browser/browser/spotlight.ftl | 2 l10n-sq/browser/browser/syncedTabs.ftl | 5 l10n-sq/browser/browser/tabContextMenu.ftl | 10 l10n-sq/browser/chrome/browser/browser.properties | 429 - l10n-sq/browser/chrome/overrides/appstrings.properties | 78 l10n-sq/devtools/client/aboutdebugging.ftl | 2 l10n-sq/devtools/client/debugger.properties | 928 -- l10n-sq/devtools/client/perftools.ftl | 7 l10n-sq/devtools/client/startup.properties | 194 l10n-sq/devtools/client/styleeditor.ftl | 2 l10n-sq/devtools/client/tooltips.ftl | 20 l10n-sq/devtools/client/webconsole.properties | 1 l10n-sq/dom/chrome/appstrings.properties | 68 l10n-sq/dom/chrome/layout/css.properties | 93 l10n-sq/dom/chrome/security/csp.properties | 19 l10n-sq/dom/chrome/xslt/xslt.properties | 31 l10n-sq/netwerk/necko.properties | 137 l10n-sq/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-sq/toolkit/toolkit/featuregates/features.ftl | 22 l10n-sq/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-sq/toolkit/toolkit/intl/languageNames.ftl | 2 l10n-sq/toolkit/toolkit/neterror/certError.ftl | 1 l10n-sq/toolkit/toolkit/neterror/netError.ftl | 1 l10n-sq/toolkit/toolkit/pdfviewer/viewer.ftl | 83 l10n-sq/toolkit/toolkit/updates/elevation.ftl | 5 l10n-sr/toolkit/toolkit/pdfviewer/viewer.ftl | 26 l10n-sv-SE/browser/browser/aboutDialog.ftl | 11 l10n-sv-SE/browser/browser/aboutLogins.ftl | 2 l10n-sv-SE/browser/browser/addonNotifications.ftl | 2 l10n-sv-SE/browser/browser/allTabsMenu.ftl | 2 l10n-sv-SE/browser/browser/browser.ftl | 14 l10n-sv-SE/browser/browser/featureCallout.ftl | 27 l10n-sv-SE/browser/browser/genai.ftl | 71 l10n-sv-SE/browser/browser/newtab/asrouter.ftl | 18 l10n-sv-SE/browser/browser/newtab/newtab.ftl | 4 l10n-sv-SE/browser/browser/newtab/onboarding.ftl | 40 l10n-sv-SE/browser/browser/policies/policies-descriptions.ftl | 6 l10n-sv-SE/browser/browser/preferences/preferences.ftl | 7 l10n-sv-SE/browser/browser/sanitize.ftl | 4 l10n-sv-SE/browser/browser/shopping.ftl | 4 l10n-sv-SE/browser/browser/sidebar.ftl | 75 l10n-sv-SE/browser/browser/tabContextMenu.ftl | 16 l10n-sv-SE/browser/browser/tabbrowser.ftl | 14 l10n-sv-SE/browser/chrome/browser/browser.properties | 429 - l10n-sv-SE/devtools/client/aboutdebugging.ftl | 3 l10n-sv-SE/devtools/client/inspector.properties | 404 l10n-sv-SE/devtools/shared/styleinspector.properties | 198 l10n-sv-SE/dom/chrome/appstrings.properties | 68 l10n-sv-SE/dom/chrome/layout/css.properties | 95 l10n-sv-SE/dom/chrome/security/csp.properties | 7 l10n-sv-SE/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-sv-SE/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-sv-SE/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-sv-SE/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 7 l10n-sv-SE/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-sv-SE/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-sv-SE/toolkit/toolkit/global/extensions.ftl | 21 l10n-sv-SE/toolkit/toolkit/neterror/netError.ftl | 1 l10n-sv-SE/toolkit/toolkit/neterror/nsserrors.ftl | 8 l10n-sv-SE/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-te/browser/browser/aboutLogins.ftl | 20 l10n-te/browser/browser/accounts.ftl | 7 l10n-te/browser/browser/browser.ftl | 18 l10n-te/browser/browser/browserContext.ftl | 72 l10n-te/browser/browser/defaultBrowserNotification.ftl | 7 l10n-te/browser/browser/firefoxView.ftl | 2 l10n-te/browser/browser/fxviewTabList.ftl | 8 l10n-te/browser/browser/genai.ftl | 30 l10n-te/browser/browser/linuxDesktopEntry.ftl | 10 l10n-te/browser/browser/menubar.ftl | 2 l10n-te/browser/browser/migration.ftl | 26 l10n-te/browser/browser/migrationWizard.ftl | 21 l10n-te/browser/browser/newtab/asrouter.ftl | 20 l10n-te/browser/browser/newtab/newtab.ftl | 91 l10n-te/browser/browser/newtab/onboarding.ftl | 45 l10n-tg/browser/browser/aboutDialog.ftl | 11 l10n-tg/browser/browser/aboutLogins.ftl | 2 l10n-tg/browser/browser/addonNotifications.ftl | 2 l10n-tg/browser/browser/allTabsMenu.ftl | 2 l10n-tg/browser/browser/browser.ftl | 14 l10n-tg/browser/browser/featureCallout.ftl | 27 l10n-tg/browser/browser/genai.ftl | 110 l10n-tg/browser/browser/newtab/asrouter.ftl | 16 l10n-tg/browser/browser/newtab/newtab.ftl | 20 l10n-tg/browser/browser/newtab/onboarding.ftl | 31 l10n-tg/browser/browser/pageInfo.ftl | 25 l10n-tg/browser/browser/sanitize.ftl | 4 l10n-tg/browser/browser/shopping.ftl | 3 l10n-tg/browser/browser/sidebar.ftl | 147 l10n-tg/browser/browser/tabContextMenu.ftl | 16 l10n-tg/browser/browser/tabbrowser.ftl | 14 l10n-tg/browser/chrome/browser/browser.properties | 426 - l10n-tg/devtools/client/aboutdebugging.ftl | 113 l10n-tg/devtools/client/debugger.properties | 971 -- l10n-tg/devtools/client/inspector.properties | 404 l10n-tg/devtools/client/startup.properties | 2 l10n-tg/devtools/client/webconsole.properties | 418 - l10n-tg/devtools/shared/styleinspector.properties | 199 l10n-tg/dom/chrome/dom/dom.properties | 606 - l10n-tg/toolkit/toolkit/about/aboutAddons.ftl | 6 l10n-tg/toolkit/toolkit/about/aboutGlean.ftl | 2 l10n-tg/toolkit/toolkit/about/aboutProcesses.ftl | 3 l10n-tg/toolkit/toolkit/featuregates/features.ftl | 9 l10n-tg/toolkit/toolkit/global/processTypes.ftl | 5 l10n-tg/toolkit/toolkit/neterror/netError.ftl | 1 l10n-tg/toolkit/toolkit/pdfviewer/viewer.ftl | 76 l10n-th/browser/browser/aboutDialog.ftl | 11 l10n-th/browser/browser/aboutLogins.ftl | 2 l10n-th/browser/browser/browser.ftl | 4 l10n-th/browser/browser/defaultBrowserNotification.ftl | 2 l10n-th/browser/browser/featureCallout.ftl | 23 l10n-th/browser/browser/genai.ftl | 88 l10n-th/browser/browser/newtab/asrouter.ftl | 9 l10n-th/browser/browser/newtab/newtab.ftl | 42 l10n-th/browser/browser/newtab/onboarding.ftl | 12 l10n-th/browser/browser/preferences/preferences.ftl | 8 l10n-th/browser/browser/sanitize.ftl | 4 l10n-th/browser/browser/screenshots.ftl | 2 l10n-th/browser/browser/shopping.ftl | 1 l10n-th/browser/browser/sidebar.ftl | 127 l10n-th/browser/chrome/browser/browser.properties | 7 l10n-th/browser/chrome/overrides/appstrings.properties | 78 l10n-th/devtools/client/aboutdebugging.ftl | 5 l10n-th/devtools/client/responsive.properties | 111 l10n-th/devtools/client/startup.properties | 2 l10n-th/devtools/client/webconsole.properties | 1 l10n-th/devtools/shared/styleinspector.properties | 12 l10n-th/dom/chrome/appstrings.properties | 68 l10n-th/dom/chrome/layout/css.properties | 95 l10n-th/toolkit/toolkit/featuregates/features.ftl | 11 l10n-th/toolkit/toolkit/global/processTypes.ftl | 5 l10n-th/toolkit/toolkit/neterror/certError.ftl | 1 l10n-th/toolkit/toolkit/neterror/netError.ftl | 1 l10n-th/toolkit/toolkit/pdfviewer/viewer.ftl | 81 l10n-tr/browser/browser/aboutDialog.ftl | 11 l10n-tr/browser/browser/aboutLogins.ftl | 2 l10n-tr/browser/browser/allTabsMenu.ftl | 2 l10n-tr/browser/browser/browser.ftl | 13 l10n-tr/browser/browser/featureCallout.ftl | 27 l10n-tr/browser/browser/genai.ftl | 68 l10n-tr/browser/browser/newtab/asrouter.ftl | 12 l10n-tr/browser/browser/newtab/newtab.ftl | 4 l10n-tr/browser/browser/newtab/onboarding.ftl | 42 l10n-tr/browser/browser/sanitize.ftl | 4 l10n-tr/browser/browser/shopping.ftl | 4 l10n-tr/browser/browser/sidebar.ftl | 75 l10n-tr/browser/browser/tabContextMenu.ftl | 16 l10n-tr/browser/browser/tabbrowser.ftl | 14 l10n-tr/browser/chrome/browser/browser.properties | 429 - l10n-tr/devtools/client/aboutdebugging.ftl | 3 l10n-tr/devtools/client/inspector.properties | 404 l10n-tr/devtools/shared/styleinspector.properties | 198 l10n-tr/dom/chrome/appstrings.properties | 68 l10n-tr/dom/chrome/layout/css.properties | 95 l10n-tr/netwerk/necko.properties | 144 l10n-tr/toolkit/chrome/mozapps/profile/profileSelection.properties | 76 l10n-tr/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-tr/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-tr/toolkit/toolkit/about/aboutProfiles.ftl | 14 l10n-tr/toolkit/toolkit/global/antiTracking.ftl | 11 l10n-tr/toolkit/toolkit/global/extensions.ftl | 15 l10n-tr/toolkit/toolkit/neterror/netError.ftl | 1 l10n-tr/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-uk/browser/browser/aboutDialog.ftl | 11 l10n-uk/browser/browser/aboutLogins.ftl | 2 l10n-uk/browser/browser/accounts.ftl | 13 l10n-uk/browser/browser/addonNotifications.ftl | 3 l10n-uk/browser/browser/allTabsMenu.ftl | 4 l10n-uk/browser/browser/appmenu.ftl | 14 l10n-uk/browser/browser/browser.ftl | 53 l10n-uk/browser/browser/defaultBrowserNotification.ftl | 2 l10n-uk/browser/browser/featureCallout.ftl | 27 l10n-uk/browser/browser/genai.ftl | 130 l10n-uk/browser/browser/identityCredentialNotification.ftl | 2 l10n-uk/browser/browser/newtab/asrouter.ftl | 14 l10n-uk/browser/browser/newtab/newtab.ftl | 108 l10n-uk/browser/browser/newtab/onboarding.ftl | 50 l10n-uk/browser/browser/pageInfo.ftl | 8 l10n-uk/browser/browser/policies/policies-descriptions.ftl | 2 l10n-uk/browser/browser/preferences/connection.ftl | 3 l10n-uk/browser/browser/preferences/preferences.ftl | 32 l10n-uk/browser/browser/sanitize.ftl | 4 l10n-uk/browser/browser/screenshots.ftl | 20 l10n-uk/browser/browser/shopping.ftl | 11 l10n-uk/browser/browser/sidebar.ftl | 147 l10n-uk/browser/browser/syncedTabs.ftl | 5 l10n-uk/browser/browser/tabContextMenu.ftl | 16 l10n-uk/browser/browser/tabbrowser.ftl | 19 l10n-uk/browser/browser/translations.ftl | 10 l10n-uk/browser/chrome/browser/browser.properties | 430 - l10n-uk/browser/chrome/overrides/appstrings.properties | 78 l10n-uk/browser/pdfviewer/viewer.properties | 348 l10n-uk/devtools/client/aboutdebugging.ftl | 100 l10n-uk/devtools/client/debugger.properties | 971 -- l10n-uk/devtools/client/inspector.properties | 404 l10n-uk/devtools/client/perftools.ftl | 16 l10n-uk/devtools/client/startup.properties | 194 l10n-uk/devtools/client/tooltips.ftl | 26 l10n-uk/devtools/client/webconsole.properties | 419 - l10n-uk/devtools/shared/debugger-paused-reasons.ftl | 27 l10n-uk/devtools/shared/styleinspector.properties | 201 l10n-uk/dom/chrome/appstrings.properties | 68 l10n-uk/dom/chrome/dom/dom.properties | 605 - l10n-uk/dom/chrome/layout/css.properties | 95 l10n-uk/dom/chrome/security/csp.properties | 29 l10n-uk/dom/chrome/security/security.properties | 173 l10n-uk/extensions/spellcheck/hunspell/license.txt | 2 l10n-uk/extensions/spellcheck/hunspell/uk.aff | 3 l10n-uk/extensions/spellcheck/hunspell/uk.dic | 2381 ++++- l10n-uk/netwerk/necko.properties | 140 l10n-uk/toolkit/chrome/global/narrate.properties | 7 l10n-uk/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-uk/toolkit/toolkit/about/aboutNetworking.ftl | 1 l10n-uk/toolkit/toolkit/about/aboutPerformance.ftl | 3 l10n-uk/toolkit/toolkit/about/aboutProcesses.ftl | 5 l10n-uk/toolkit/toolkit/about/aboutSupport.ftl | 17 l10n-uk/toolkit/toolkit/about/url-classifier.ftl | 5 l10n-uk/toolkit/toolkit/downloads/downloadUtils.ftl | 2 l10n-uk/toolkit/toolkit/featuregates/features.ftl | 22 l10n-uk/toolkit/toolkit/global/antiTracking.ftl | 12 l10n-uk/toolkit/toolkit/global/extensions.ftl | 23 l10n-uk/toolkit/toolkit/global/processTypes.ftl | 5 l10n-uk/toolkit/toolkit/intl/languageNames.ftl | 1 l10n-uk/toolkit/toolkit/neterror/certError.ftl | 1 l10n-uk/toolkit/toolkit/neterror/netError.ftl | 5 l10n-uk/toolkit/toolkit/pdfviewer/viewer.ftl | 91 l10n-uk/toolkit/toolkit/updates/elevation.ftl | 5 l10n-vi/browser/browser/aboutDialog.ftl | 11 l10n-vi/browser/browser/aboutLogins.ftl | 2 l10n-vi/browser/browser/addonNotifications.ftl | 1 l10n-vi/browser/browser/allTabsMenu.ftl | 2 l10n-vi/browser/browser/browser.ftl | 13 l10n-vi/browser/browser/featureCallout.ftl | 27 l10n-vi/browser/browser/genai.ftl | 71 l10n-vi/browser/browser/newtab/asrouter.ftl | 12 l10n-vi/browser/browser/newtab/newtab.ftl | 4 l10n-vi/browser/browser/newtab/onboarding.ftl | 40 l10n-vi/browser/browser/policies/policies-descriptions.ftl | 4 l10n-vi/browser/browser/preferences/fonts.ftl | 19 l10n-vi/browser/browser/preferences/preferences.ftl | 4 l10n-vi/browser/browser/sanitize.ftl | 4 l10n-vi/browser/browser/shopping.ftl | 4 l10n-vi/browser/browser/sidebar.ftl | 67 l10n-vi/browser/browser/tabContextMenu.ftl | 16 l10n-vi/browser/browser/tabbrowser.ftl | 14 l10n-vi/browser/chrome/browser/browser.properties | 429 - l10n-vi/devtools/client/aboutdebugging.ftl | 3 l10n-vi/devtools/client/inspector.properties | 388 l10n-vi/devtools/client/webconsole.properties | 410 - l10n-vi/devtools/shared/styleinspector.properties | 12 l10n-vi/dom/chrome/appstrings.properties | 68 l10n-vi/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-vi/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-vi/toolkit/toolkit/about/aboutThirdParty.ftl | 4 l10n-vi/toolkit/toolkit/featuregates/features.ftl | 6 l10n-vi/toolkit/toolkit/global/antiTracking.ftl | 10 l10n-vi/toolkit/toolkit/global/extensions.ftl | 18 l10n-vi/toolkit/toolkit/intl/regionNames.ftl | 2 l10n-vi/toolkit/toolkit/neterror/netError.ftl | 1 l10n-vi/toolkit/toolkit/pdfviewer/viewer.ftl | 32 l10n-zh-CN/browser/browser/aboutDialog.ftl | 11 l10n-zh-CN/browser/browser/aboutLogins.ftl | 2 l10n-zh-CN/browser/browser/addonNotifications.ftl | 1 l10n-zh-CN/browser/browser/allTabsMenu.ftl | 2 l10n-zh-CN/browser/browser/browser.ftl | 13 l10n-zh-CN/browser/browser/featureCallout.ftl | 27 l10n-zh-CN/browser/browser/firefoxView.ftl | 2 l10n-zh-CN/browser/browser/genai.ftl | 97 l10n-zh-CN/browser/browser/newtab/asrouter.ftl | 12 l10n-zh-CN/browser/browser/newtab/newtab.ftl | 11 l10n-zh-CN/browser/browser/newtab/onboarding.ftl | 41 l10n-zh-CN/browser/browser/policies/policies-descriptions.ftl | 1 l10n-zh-CN/browser/browser/sanitize.ftl | 4 l10n-zh-CN/browser/browser/shopping.ftl | 4 l10n-zh-CN/browser/browser/sidebar.ftl | 77 l10n-zh-CN/browser/browser/tabContextMenu.ftl | 16 l10n-zh-CN/browser/browser/tabbrowser.ftl | 14 l10n-zh-CN/browser/chrome/browser/browser.properties | 429 - l10n-zh-CN/browser/chrome/overrides/appstrings.properties | 78 l10n-zh-CN/devtools/client/aboutdebugging.ftl | 3 l10n-zh-CN/devtools/client/inspector.properties | 404 l10n-zh-CN/devtools/shared/styleinspector.properties | 198 l10n-zh-CN/dom/chrome/appstrings.properties | 68 l10n-zh-CN/dom/chrome/layout/css.properties | 95 l10n-zh-CN/dom/chrome/security/csp.properties | 7 l10n-zh-CN/toolkit/crashreporter/crashreporter.ftl | 2 l10n-zh-CN/toolkit/crashreporter/crashreporter.ini | 6 l10n-zh-CN/toolkit/toolkit/about/aboutAddons.ftl | 10 l10n-zh-CN/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-zh-CN/toolkit/toolkit/featuregates/features.ftl | 3 l10n-zh-CN/toolkit/toolkit/global/antiTracking.ftl | 7 l10n-zh-CN/toolkit/toolkit/global/extensions.ftl | 13 l10n-zh-CN/toolkit/toolkit/neterror/certError.ftl | 32 l10n-zh-CN/toolkit/toolkit/neterror/netError.ftl | 3 l10n-zh-CN/toolkit/toolkit/pdfviewer/viewer.ftl | 73 l10n-zh-TW/browser/browser/aboutDialog.ftl | 11 l10n-zh-TW/browser/browser/aboutLogins.ftl | 2 l10n-zh-TW/browser/browser/addonNotifications.ftl | 2 l10n-zh-TW/browser/browser/allTabsMenu.ftl | 2 l10n-zh-TW/browser/browser/browser.ftl | 20 l10n-zh-TW/browser/browser/featureCallout.ftl | 27 l10n-zh-TW/browser/browser/genai.ftl | 71 l10n-zh-TW/browser/browser/menubar.ftl | 4 l10n-zh-TW/browser/browser/newtab/asrouter.ftl | 18 l10n-zh-TW/browser/browser/newtab/newtab.ftl | 4 l10n-zh-TW/browser/browser/newtab/onboarding.ftl | 40 l10n-zh-TW/browser/browser/policies/policies-descriptions.ftl | 1 l10n-zh-TW/browser/browser/preferences/permissions.ftl | 2 l10n-zh-TW/browser/browser/preferences/preferences.ftl | 5 l10n-zh-TW/browser/browser/sanitize.ftl | 4 l10n-zh-TW/browser/browser/shopping.ftl | 4 l10n-zh-TW/browser/browser/sidebar.ftl | 77 l10n-zh-TW/browser/browser/tabContextMenu.ftl | 16 l10n-zh-TW/browser/browser/tabbrowser.ftl | 14 l10n-zh-TW/browser/chrome/browser/browser.properties | 429 - l10n-zh-TW/devtools/client/aboutdebugging.ftl | 3 l10n-zh-TW/devtools/client/inspector.properties | 404 l10n-zh-TW/devtools/client/toolbox-options.ftl | 2 l10n-zh-TW/devtools/shared/styleinspector.properties | 198 l10n-zh-TW/dom/chrome/appstrings.properties | 68 l10n-zh-TW/dom/chrome/layout/css.properties | 95 l10n-zh-TW/dom/chrome/security/csp.properties | 25 l10n-zh-TW/security/manager/chrome/pipnss/nsserrors.properties | 655 - l10n-zh-TW/toolkit/toolkit/about/aboutAddons.ftl | 15 l10n-zh-TW/toolkit/toolkit/about/aboutGlean.ftl | 4 l10n-zh-TW/toolkit/toolkit/about/aboutHttpsOnlyError.ftl | 1 l10n-zh-TW/toolkit/toolkit/about/aboutProcesses.ftl | 2 l10n-zh-TW/toolkit/toolkit/about/aboutReader.ftl | 21 l10n-zh-TW/toolkit/toolkit/about/aboutServiceWorkers.ftl | 16 l10n-zh-TW/toolkit/toolkit/global/antiTracking.ftl | 7 l10n-zh-TW/toolkit/toolkit/global/extensions.ftl | 11 l10n-zh-TW/toolkit/toolkit/neterror/netError.ftl | 1 l10n-zh-TW/toolkit/toolkit/neterror/nsserrors.ftl | 7 l10n-zh-TW/toolkit/toolkit/pdfviewer/viewer.ftl | 32 layout/generic/nsColumnSetFrame.cpp | 11 layout/generic/nsTextFrame.cpp | 45 layout/generic/nsTextRunTransformations.cpp | 110 media/libcubeb/0002-disable-crash-reporter-death-test.patch | 36 media/libcubeb/test/test_duplex.cpp | 9 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/data/injections.js | 260 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/data/shims.js | 21 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/data/ua_overrides.js | 248 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1779908-play.google.com-scrollbar-fix.css | 15 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1836872-docs.google.com-font-submenus-inaccessible.css | 18 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1856915-login.yahoo.com-unhide-password-button-fix.css | 15 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1877346-offerup.com-infinite-scroll-fix.css | 20 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1879879-developers.pinterest.com-list-alignment-fix.css | 12 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1882040-disable-pull-to-refresh.css | 14 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1886616-www.six-group.com-select-fix.css | 15 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1895051-www.zhihu.com-broken-button-fix.css | 16 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1895994-softtrans.ro-unlock-scrolling.css | 16 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1896349-vivaldi.com-selected-text-fix.css | 13 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/css/bug1896571-gracobaby.ca-unlock-scrolling.css | 18 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/js/bug1841730-www.korg.com-fix-broken-page-loads.js | 35 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/js/bug1881922-disable-legacy-mutation-events.js | 43 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/js/bug1889326-office365-email-handling-prompt-autohide.js | 36 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/js/bug1898952-digits.t-mobile.com.js | 68 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/js/bug1899937-plus.nhk.jp-request-picture-in-picture.js | 27 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/js/bug1924500-www.tiktok.com-fix-captcha-slider.js | 71 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/lib/ua_overrides.js | 7 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/manifest.json | 3 mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/shims/figshare.js | 82 modules/libpref/init/StaticPrefList.yaml | 46 netwerk/base/nsLoadGroup.cpp | 6 netwerk/base/nsLoadGroup.h | 12 netwerk/build/components.conf | 1 netwerk/cache2/CacheFileIOManager.cpp | 21 netwerk/dns/TRRService.cpp | 7 netwerk/dns/effective_tld_names.dat | 148 netwerk/ipc/DocumentChannel.cpp | 28 netwerk/ipc/DocumentChannelChild.cpp | 1 netwerk/ipc/DocumentChannelParent.cpp | 8 netwerk/ipc/DocumentLoadListener.cpp | 44 netwerk/ipc/DocumentLoadListener.h | 11 netwerk/ipc/NeckoChannelParams.ipdlh | 3 netwerk/ipc/ParentProcessDocumentChannel.cpp | 4 netwerk/protocol/http/HttpBaseChannel.h | 9 netwerk/protocol/http/MicrosoftEntraSSOUtils.h | 23 netwerk/protocol/http/MicrosoftEntraSSOUtils.mm | 351 netwerk/protocol/http/moz.build | 8 netwerk/protocol/http/nsHttpChannel.cpp | 116 netwerk/protocol/http/nsHttpChannel.h | 1 netwerk/protocol/http/nsHttpHandler.cpp | 43 netwerk/protocol/http/nsHttpHandler.h | 12 netwerk/protocol/http/nsIHttpChannelInternal.idl | 5 netwerk/streamconv/converters/nsMultiMixedConv.cpp | 12 netwerk/streamconv/converters/nsMultiMixedConv.h | 10 netwerk/test/unit/test_bug_1918928.js | 157 netwerk/test/unit/test_httpssvc_https_upgrade.js | 2 netwerk/test/unit/test_trr_confirmation.js | 3 netwerk/test/unit/test_use_httpssvc.js | 4 netwerk/test/unit/xpcshell.toml | 6 netwerk/wifi/nsIWifiMonitor.idl | 8 netwerk/wifi/nsWifiMonitor.cpp | 26 netwerk/wifi/nsWifiMonitor.h | 2 netwerk/wifi/win/WinWifiScanner.cpp | 44 netwerk/wifi/win/WinWifiScanner.h | 5 netwerk/wifi/win/WlanLibrary.cpp | 16 python/mozboot/mozboot/util.py | 4 python/mozbuild/mozbuild/action/node.py | 6 python/sites/mach.txt | 2 python/sites/python-test.txt | 2 remote/shared/RecommendedPreferences.sys.mjs | 2 security/manager/ssl/StaticHPKPins.h | 2 security/manager/ssl/nsSTSPreloadList.inc | 4100 ++++------ services/settings/dumps/blocklists/addons-bloomfilters.json | 429 + services/settings/dumps/blocklists/gfx.json | 28 services/settings/dumps/main/devtools-compatibility-browsers.json | 371 services/settings/dumps/main/search-config-v2.json | 294 services/settings/dumps/main/translations-models.json | 488 + services/settings/dumps/security-state/intermediates.json | 1478 --- services/settings/dumps/security-state/onecrl.json | 437 + servo/components/style/properties/shorthands/inherited_text.mako.rs | 13 sourcestamp.txt | 4 taskcluster/android_taskgraph/job.py | 2 taskcluster/kinds/bootstrap/kind.yml | 26 taskcluster/kinds/cron-bouncer-check/kind.yml | 2 taskcluster/kinds/packages/debian.yml | 6 taskcluster/kinds/packages/ubuntu.yml | 12 taskcluster/kinds/release-update-verify-config-next/kind.yml | 98 taskcluster/kinds/release-update-verify-next/kind.yml | 73 testing/cppunittest.toml | 9 testing/marionette/client/marionette_driver/geckoinstance.py | 4 testing/profiles/mochitest/user.js | 5 testing/web-platform/tests/css/css-break/break-inside-avoid-multicol-iframe-crash-print.html | 138 testing/web-platform/tests/css/css-viewport/zoom/svg-ref.html | 5 testing/web-platform/tests/css/css-viewport/zoom/svg.html | 6 testing/web-platform/tests/html/browsers/browsing-the-web/navigating-across-documents/resources/unknown-protocol-reload-crash-frame.html | 15 testing/web-platform/tests/html/browsers/browsing-the-web/navigating-across-documents/unknown-protocol-reload-crash.html | 9 testing/webcompat/client.py | 18 testing/webcompat/interventions/tests/test_1779908_play_google_com.py | 31 testing/webcompat/interventions/tests/test_1836872_docs_google_com.py | 67 testing/webcompat/interventions/tests/test_1856915_login_yahoo_com.py | 44 testing/webcompat/interventions/tests/test_1886616_www_six-group_com.py | 41 testing/webcompat/interventions/tests/test_1896349_vivaldi_com.py | 40 testing/webcompat/interventions/tests/test_1898952_digits_t-mobile_com.py | 23 testing/webcompat/interventions/tests/test_1899937_plus_nhk_jp.py | 36 testing/webcompat/requirements.txt | 1 third_party/rust/neqo-transport/src/connection/mod.rs | 45 third_party/rust/neqo-transport/src/connection/tests/recovery.rs | 35 third_party/rust/neqo-transport/src/recovery/mod.rs | 38 toolkit/actors/BackgroundThumbnailsChild.sys.mjs | 3 toolkit/components/antitracking/test/xpcshell/xpcshell.toml | 4 toolkit/components/cleardata/ClearDataService.sys.mjs | 52 toolkit/components/passwordmgr/LoginHelper.sys.mjs | 2 toolkit/components/prompts/src/CommonDialog.sys.mjs | 7 toolkit/components/prompts/test/chromeScript.js | 14 toolkit/components/prompts/test/test_modal_prompts.html | 54 toolkit/components/search/tests/xpcshell/searchconfigs/head_searchconfig.js | 6 toolkit/components/search/tests/xpcshell/searchconfigs/test_wikipedia.js | 2 toolkit/components/telemetry/Scalars.yaml | 15 toolkit/components/telemetry/app/TelemetryEnvironment.sys.mjs | 4 toolkit/content/tests/widgets/chrome.toml | 2 toolkit/content/tests/widgets/test_panel_item_checkbox.html | 217 toolkit/content/widgets/panel-list/README.stories.md | 22 toolkit/content/widgets/panel-list/panel-item.css | 2 toolkit/content/widgets/panel-list/panel-list.js | 33 toolkit/content/widgets/panel-list/panel-list.stories.mjs | 31 toolkit/content/widgets/popupnotification.js | 20 toolkit/modules/ClipboardContextMenu.sys.mjs | 1 toolkit/mozapps/extensions/content/aboutaddons.html | 3 toolkit/mozapps/handling/content/permissionDialog.js | 59 toolkit/mozapps/update/tests/unit_aus_update/xpcshell.toml | 5 toolkit/themes/shared/icons/loading.svg | 30 toolkit/themes/shared/popupnotification.css | 10 toolkit/xre/dllservices/mozglue/WindowsOleAut32Initialization.cpp | 34 toolkit/xre/dllservices/mozglue/WindowsOleAut32Initialization.h | 20 toolkit/xre/dllservices/mozglue/moz.build | 2 toolkit/xre/dllservices/tests/AssemblyPayloads.h | 2 toolkit/xre/dllservices/tests/TestDllInterceptor.cpp | 54 toolkit/xre/dllservices/tests/TestDllInterceptorCrossProcess.cpp | 6 toolkit/xre/dllservices/tests/TestOleAut32Initialization.cpp | 68 toolkit/xre/dllservices/tests/moz.build | 1 toolkit/xre/nsAppRunner.cpp | 5 tools/@types/lib.gecko.dom.d.ts | 2 tools/profiler/tests/xpcshell/xpcshell.toml | 5 uriloader/base/nsDocLoader.cpp | 9 uriloader/exthandler/tests/mochitest/browser_protocol_ask_dialog_permission.js | 36 widget/cocoa/nsCocoaUtils.mm | 2 xpcom/tests/gtest/TestMozPromise.cpp | 64 xpcom/threads/MozPromise.h | 115 2453 files changed, 78275 insertions(+), 61541 deletions(-) diff -Nru firefox-esr-128.3.1esr/.cargo/config.toml.in firefox-esr-128.4.0esr/.cargo/config.toml.in --- firefox-esr-128.3.1esr/.cargo/config.toml.in 2024-10-08 21:18:24.000000000 +0000 +++ firefox-esr-128.4.0esr/.cargo/config.toml.in 2024-10-21 23:59:48.000000000 +0000 @@ -90,11 +90,6 @@ rev = "a138e40ec1c603615873e524b5b22e11c0ec4820" replace-with = "vendored-sources" -[source."git+https://github.com/mozilla/neqo?tag=v0.7.9"] -git = "https://github.com/mozilla/neqo" -tag = "v0.7.9" -replace-with = "vendored-sources" - [source."git+https://github.com/seanmonstar/warp?rev=9d081461ae1167eb321585ce424f4fef6cf0092b"] git = "https://github.com/seanmonstar/warp" rev = "9d081461ae1167eb321585ce424f4fef6cf0092b" diff -Nru firefox-esr-128.3.1esr/CLOBBER firefox-esr-128.4.0esr/CLOBBER --- firefox-esr-128.3.1esr/CLOBBER 2024-10-08 21:18:24.000000000 +0000 +++ firefox-esr-128.4.0esr/CLOBBER 2024-10-21 23:59:48.000000000 +0000 @@ -22,4 +22,4 @@ # changes to stick? As of bug 928195, this shouldn't be necessary! Please # don't change CLOBBER for WebIDL changes any more. -Merge day clobber 2024-09-02 \ No newline at end of file +Merge day clobber 2024-09-30 \ No newline at end of file diff -Nru firefox-esr-128.3.1esr/Cargo.lock firefox-esr-128.4.0esr/Cargo.lock --- firefox-esr-128.3.1esr/Cargo.lock 2024-10-08 21:18:24.000000000 +0000 +++ firefox-esr-128.4.0esr/Cargo.lock 2024-10-21 23:59:48.000000000 +0000 @@ -3962,7 +3962,6 @@ [[package]] name = "neqo-bin" version = "0.7.9" -source = "git+https://github.com/mozilla/neqo?tag=v0.7.9#121fe683ae4b39a5b694f671abfd397cbd9b4322" dependencies = [ "clap", "clap-verbosity-flag", @@ -3984,7 +3983,6 @@ [[package]] name = "neqo-common" version = "0.7.9" -source = "git+https://github.com/mozilla/neqo?tag=v0.7.9#121fe683ae4b39a5b694f671abfd397cbd9b4322" dependencies = [ "enum-map", "env_logger", @@ -3997,7 +3995,6 @@ [[package]] name = "neqo-crypto" version = "0.7.9" -source = "git+https://github.com/mozilla/neqo?tag=v0.7.9#121fe683ae4b39a5b694f671abfd397cbd9b4322" dependencies = [ "bindgen 0.69.4", "log", @@ -4012,7 +4009,6 @@ [[package]] name = "neqo-http3" version = "0.7.9" -source = "git+https://github.com/mozilla/neqo?tag=v0.7.9#121fe683ae4b39a5b694f671abfd397cbd9b4322" dependencies = [ "enumset", "log", @@ -4029,7 +4025,6 @@ [[package]] name = "neqo-qpack" version = "0.7.9" -source = "git+https://github.com/mozilla/neqo?tag=v0.7.9#121fe683ae4b39a5b694f671abfd397cbd9b4322" dependencies = [ "log", "neqo-common", @@ -4042,7 +4037,6 @@ [[package]] name = "neqo-transport" version = "0.7.9" -source = "git+https://github.com/mozilla/neqo?tag=v0.7.9#121fe683ae4b39a5b694f671abfd397cbd9b4322" dependencies = [ "enum-map", "indexmap 2.2.6", diff -Nru firefox-esr-128.3.1esr/Cargo.toml firefox-esr-128.4.0esr/Cargo.toml --- firefox-esr-128.3.1esr/Cargo.toml 2024-10-08 21:18:24.000000000 +0000 +++ firefox-esr-128.4.0esr/Cargo.toml 2024-10-21 23:59:48.000000000 +0000 @@ -236,3 +236,11 @@ # Patch `gpu-descriptor` 0.3.0 to remove unnecessary `allocator-api2` dep.: # Still waiting for the now-merged to be released. gpu-descriptor = { git = "https://github.com/zakarumych/gpu-descriptor", rev = "7b71a4e47c81903ad75e2c53deb5ab1310f6ff4d" } + +[patch."https://github.com/mozilla/neqo"] +neqo-bin = { path = "third_party/rust/neqo-bin" } +neqo-common = { path = "third_party/rust/neqo-common" } +neqo-crypto = { path = "third_party/rust/neqo-crypto" } +neqo-http3 = { path = "third_party/rust/neqo-http3" } +neqo-qpack = { path = "third_party/rust/neqo-qpack" } +neqo-transport = { path = "third_party/rust/neqo-transport" } diff -Nru firefox-esr-128.3.1esr/accessible/base/EventQueue.cpp firefox-esr-128.4.0esr/accessible/base/EventQueue.cpp --- firefox-esr-128.3.1esr/accessible/base/EventQueue.cpp 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/accessible/base/EventQueue.cpp 2024-10-21 23:59:48.000000000 +0000 @@ -51,6 +51,24 @@ return true; } +bool EventQueue::PushNameOrDescriptionChangeToRelations( + LocalAccessible* aAccessible, RelationType aType) { + MOZ_ASSERT(aType == RelationType::LABEL_FOR || + aType == RelationType::DESCRIPTION_FOR); + + bool pushed = false; + uint32_t eventType = aType == RelationType::LABEL_FOR + ? nsIAccessibleEvent::EVENT_NAME_CHANGE + : nsIAccessibleEvent::EVENT_DESCRIPTION_CHANGE; + Relation rel = aAccessible->RelationByType(aType); + while (LocalAccessible* relTarget = rel.LocalNext()) { + RefPtr nameChangeEvent = new AccEvent(eventType, relTarget); + pushed |= PushEvent(nameChangeEvent); + } + + return pushed; +} + bool EventQueue::PushNameOrDescriptionChange(AccEvent* aOrigEvent) { // Fire name/description change event on parent or related LocalAccessible // being labelled/described given that this event hasn't been coalesced, the @@ -58,14 +76,18 @@ // subtree was changed. LocalAccessible* target = aOrigEvent->mAccessible; // If the text of a text leaf changed without replacing the leaf, the only - // event we get is text inserted on the container. In this case, we might - // need to fire a name change event on the target itself. + // event we get is text inserted on the container. Or, a reorder event may + // change the container's name. In this case, we might need to fire a name + // change event on the target itself. const bool maybeTargetNameChanged = (aOrigEvent->mEventType == nsIAccessibleEvent::EVENT_TEXT_REMOVED || - aOrigEvent->mEventType == nsIAccessibleEvent::EVENT_TEXT_INSERTED) && + aOrigEvent->mEventType == nsIAccessibleEvent::EVENT_TEXT_INSERTED || + aOrigEvent->mEventType == nsIAccessibleEvent::EVENT_REORDER || + aOrigEvent->mEventType == nsIAccessibleEvent::EVENT_INNER_REORDER) && nsTextEquivUtils::HasNameRule(target, eNameFromSubtreeRule); const bool doName = target->HasNameDependent() || maybeTargetNameChanged; const bool doDesc = target->HasDescriptionDependent(); + if (!doName && !doDesc) { return false; } @@ -80,12 +102,34 @@ if (doName) { if (nameCheckAncestor && (maybeTargetNameChanged || parent != target) && nsTextEquivUtils::HasNameRule(parent, eNameFromSubtreeRule)) { - nsAutoString name; - ENameValueFlag nameFlag = parent->Name(name); - // If name is obtained from subtree, fire name change event. // HTML file inputs always get part of their name from the subtree, even // if the author provided a name. - if (nameFlag == eNameFromSubtree || parent->IsHTMLFileInput()) { + bool fireNameChange = parent->IsHTMLFileInput(); + if (!fireNameChange) { + nsAutoString name; + ENameValueFlag nameFlag = parent->Name(name); + switch (nameFlag) { + case eNameOK: + // Descendants of subtree may have been removed, making the name + // void. + fireNameChange = name.IsVoid(); + break; + case eNameFromSubtree: + // If name is obtained from subtree, fire name change event. + fireNameChange = true; + break; + case eNameFromTooltip: + // If the descendants of this accessible were removed, the name + // may be calculated using the tooltip. We can guess that the name + // was obtained from the subtree before. + fireNameChange = true; + break; + default: + MOZ_ASSERT_UNREACHABLE("All name flags not covered!"); + } + } + + if (fireNameChange) { RefPtr nameChangeEvent = new AccEvent(nsIAccessibleEvent::EVENT_NAME_CHANGE, parent); pushed |= PushEvent(nameChangeEvent); @@ -93,21 +137,13 @@ nameCheckAncestor = false; } - Relation rel = parent->RelationByType(RelationType::LABEL_FOR); - while (LocalAccessible* relTarget = rel.LocalNext()) { - RefPtr nameChangeEvent = - new AccEvent(nsIAccessibleEvent::EVENT_NAME_CHANGE, relTarget); - pushed |= PushEvent(nameChangeEvent); - } + pushed |= PushNameOrDescriptionChangeToRelations(parent, + RelationType::LABEL_FOR); } if (doDesc) { - Relation rel = parent->RelationByType(RelationType::DESCRIPTION_FOR); - while (LocalAccessible* relTarget = rel.LocalNext()) { - RefPtr descChangeEvent = new AccEvent( - nsIAccessibleEvent::EVENT_DESCRIPTION_CHANGE, relTarget); - pushed |= PushEvent(descChangeEvent); - } + pushed |= PushNameOrDescriptionChangeToRelations( + parent, RelationType::DESCRIPTION_FOR); } if (parent->IsDoc()) { diff -Nru firefox-esr-128.3.1esr/accessible/base/EventQueue.h firefox-esr-128.4.0esr/accessible/base/EventQueue.h --- firefox-esr-128.3.1esr/accessible/base/EventQueue.h 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/accessible/base/EventQueue.h 2024-10-21 23:59:48.000000000 +0000 @@ -29,6 +29,9 @@ */ bool PushEvent(AccEvent* aEvent); + bool PushNameOrDescriptionChangeToRelations(LocalAccessible* aAccessible, + RelationType aType); + /** * Puts name and/or description change events into the queue, if needed. */ diff -Nru firefox-esr-128.3.1esr/accessible/base/NotificationController.cpp firefox-esr-128.4.0esr/accessible/base/NotificationController.cpp --- firefox-esr-128.3.1esr/accessible/base/NotificationController.cpp 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/accessible/base/NotificationController.cpp 2024-10-21 23:59:48.000000000 +0000 @@ -203,6 +203,20 @@ } } + if (aEvent->GetEventType() == nsIAccessibleEvent::EVENT_HIDE || + aEvent->GetEventType() == nsIAccessibleEvent::EVENT_SHOW) { + LocalAccessible* target = aEvent->GetAccessible(); + // We need to do this here while the relation is still intact. During the + // tick, where we we call PushNameOrDescriptionChange, it will be too late + // since we will already have unparented the label and severed the relation. + if (PushNameOrDescriptionChangeToRelations(target, + RelationType::LABEL_FOR) || + PushNameOrDescriptionChangeToRelations(target, + RelationType::DESCRIPTION_FOR)) { + ScheduleProcessing(); + } + } + // We need to fire a reorder event after all of the events targeted at shown // or hidden children of a container. So either queue a new one, or move an // existing one to the end of the queue if the container already has a @@ -213,12 +227,6 @@ reorder = new AccReorderEvent(container); container->SetReorderEventTarget(true); mMutationMap.PutEvent(reorder); - - // Since this is the first child of container that is changing, the name - // and/or description of dependent Accessibles may be changing. - if (PushNameOrDescriptionChange(aEvent)) { - ScheduleProcessing(); - } } else { AccReorderEvent* event = downcast_accEvent( mMutationMap.GetEvent(container, EventMap::ReorderEvent)); @@ -651,6 +659,13 @@ return; } + // The mutation in the container can change its name, or an ancestor's + // name. A labelled/described by relation would also need to be notified + // if this is the case. + if (PushNameOrDescriptionChange(event)) { + ScheduleProcessing(); + } + LocalAccessible* target = event->GetAccessible(); target->Document()->MaybeNotifyOfValueChange(target); if (!mDocument) { diff -Nru firefox-esr-128.3.1esr/accessible/tests/mochitest/name/markup.js firefox-esr-128.4.0esr/accessible/tests/mochitest/name/markup.js --- firefox-esr-128.3.1esr/accessible/tests/mochitest/name/markup.js 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/accessible/tests/mochitest/name/markup.js 2024-10-21 23:59:48.000000000 +0000 @@ -342,7 +342,7 @@ if (gDumpToConsole) { dump( - "\nProcessed from subtree rule. Wait for reorder event on " + + "\nProcessed from subtree rule. Wait for name change event on " + prettyName(aElm) + "\n" ); diff -Nru firefox-esr-128.3.1esr/browser/base/content/test/captivePortal/browser.toml firefox-esr-128.4.0esr/browser/base/content/test/captivePortal/browser.toml --- firefox-esr-128.3.1esr/browser/base/content/test/captivePortal/browser.toml 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/base/content/test/captivePortal/browser.toml 2024-10-21 23:59:48.000000000 +0000 @@ -14,3 +14,5 @@ ["browser_captivePortal_https_only.js"] ["browser_closeCapPortalTabCanonicalURL.js"] + +["browser_captivePortal_trr_mode3.js"] diff -Nru firefox-esr-128.3.1esr/browser/base/content/test/captivePortal/browser_captivePortal_trr_mode3.js firefox-esr-128.4.0esr/browser/base/content/test/captivePortal/browser_captivePortal_trr_mode3.js --- firefox-esr-128.3.1esr/browser/base/content/test/captivePortal/browser_captivePortal_trr_mode3.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/base/content/test/captivePortal/browser_captivePortal_trr_mode3.js 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,190 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +let gServer; +let gServerURL; +let gRedirectedURL; +let gExpectedText; +let gNavigated = false; +let gExpectedURL; + +const { HttpServer } = ChromeUtils.importESModule( + "resource://testing-common/httpd.sys.mjs" +); + +const gOverride = Cc["@mozilla.org/network/native-dns-override;1"].getService( + Ci.nsINativeDNSResolverOverride +); + +let gCaptivePortalState = "captive-replace"; + +add_setup(async function () { + gOverride.addIPOverride("test1.example.com", "127.0.0.1"); + gOverride.addIPOverride("example.net", "127.0.0.1"); + gServer = new HttpServer(); + gServer.start(-1); + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + gServerURL = `http://test1.example.com:${gServer.identity.primaryPort}/`; + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + gRedirectedURL = `http://example.net:${gServer.identity.primaryPort}/redir`; + gServer.identity.add( + "http", + "test1.example.com", + gServer.identity.primaryPort + ); + gServer.identity.add("http", "example.net", gServer.identity.primaryPort); + gServer.registerPathHandler("/", (request, response) => { + if (gCaptivePortalState == "captive-replace") { + response.setStatusLine(request.httpVersion, 200, "OK"); + response.setHeader("Content-Type", "text/html"); + const BODY = `captive muahahah`; + response.bodyOutputStream.write(BODY, BODY.length); + return; + } + + if (gCaptivePortalState == "captive-redirect") { + response.setStatusLine(request.httpVersion, 302, "Moved Temporarily"); + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + response.setHeader("Location", gRedirectedURL); + response.write("redirecting"); + } + }); + gServer.registerPathHandler("/redir", (request, response) => { + response.setStatusLine(request.httpVersion, 200, "OK"); + response.setHeader("Content-Type", "text/html"); + const BODY = `redirected`; + response.bodyOutputStream.write(BODY, BODY.length); + }); + registerCleanupFunction(async () => { + await gServer.stop(); + gOverride.clearOverrides(); + }); + + await SpecialPowers.pushPrefEnv({ + set: [ + ["captivedetect.canonicalURL", gServerURL], + ["captivedetect.canonicalContent", "stuff"], + ["network.trr.mode", Ci.nsIDNSService.MODE_TRRONLY], + ["network.proxy.no_proxies_on", "test1.example.com,example.net"], + ], + }); +}); + +async function openAndCheck() { + // Open a second window in the background. Later, we'll check that + // when we click the button to open the captive portal tab, the tab + // only opens in the active window and not in the background one. + let secondWindow = await openWindowAndWaitForFocus(); + await SimpleTest.promiseFocus(window); + + await portalDetected(); + + // Check that we didn't open anything in the background window. + ensureNoPortalTab(secondWindow); + + let tab = await openCaptivePortalErrorTab(); + let browser = tab.linkedBrowser; + let portalTabPromise = BrowserTestUtils.waitForNewTab(gBrowser, gExpectedURL); + + await SpecialPowers.spawn(browser, [], async () => { + let doc = content.document; + let loginButton = doc.getElementById("openPortalLoginPageButton"); + await ContentTaskUtils.waitForCondition( + () => ContentTaskUtils.isVisible(loginButton), + "Captive portal error page UI is visible" + ); + + if (!Services.focus.focusedElement == loginButton) { + await ContentTaskUtils.waitForEvent(loginButton, "focus"); + } + + Assert.ok(true, "openPortalLoginPageButton has focus"); + info("Clicking the Open Login Page button"); + await EventUtils.synthesizeMouseAtCenter(loginButton, {}, content); + }); + + let portalTab = await portalTabPromise; + await SpecialPowers.spawn( + portalTab.linkedBrowser, + [gExpectedText], + async text => { + Assert.equal(content.document.body.innerText, text); + } + ); + + is( + gBrowser.selectedTab, + portalTab, + "Login page should be open in a new foreground tab." + ); + + // Check that we didn't open anything in the background window. + ensureNoPortalTab(secondWindow); + + // Make sure clicking the "Open Login Page" button again focuses the existing portal tab. + await BrowserTestUtils.switchTab(gBrowser, tab); + // Passing an empty function to BrowserTestUtils.switchTab lets us wait for an arbitrary + // tab switch. + portalTabPromise = BrowserTestUtils.switchTab(gBrowser, () => {}); + await SpecialPowers.spawn(browser, [], async () => { + info("Clicking the Open Login Page button."); + let loginButton = content.document.getElementById( + "openPortalLoginPageButton" + ); + await EventUtils.synthesizeMouseAtCenter(loginButton, {}, content); + }); + + info("Opening captive portal login page"); + let portalTab2 = await portalTabPromise; + is(portalTab2, portalTab, "The existing portal tab should be focused."); + + // Check that we didn't open anything in the background window. + ensureNoPortalTab(secondWindow); + + let portalTabClosing = BrowserTestUtils.waitForTabClosing(portalTab); + let errorTabReloaded = BrowserTestUtils.waitForErrorPage(browser); + + Services.obs.notifyObservers(null, "captive-portal-login-success"); + info("closing page"); + if (gNavigated) { + // Since it navigated, the tab won't be automatically closed. + await BrowserTestUtils.removeTab(portalTab); + } + + await portalTabClosing; + + info( + "Waiting for error tab to be reloaded after the captive portal was freed." + ); + await errorTabReloaded; + await SpecialPowers.spawn(browser, [], () => { + let doc = content.document; + ok( + !doc.body.classList.contains("captiveportal"), + "Captive portal error page UI is not visible." + ); + }); + + await BrowserTestUtils.removeTab(tab); + await BrowserTestUtils.closeWindow(secondWindow); +} + +add_task(async function checkNoTRRForTab() { + info("Check that the captive portal login tab does not use TRR"); + gExpectedText = `captive muahahah`; + gExpectedURL = gServerURL; + + await openAndCheck(); +}); + +add_task(async function checkNoTRRForTabWithRedirect() { + gCaptivePortalState = "captive-redirect"; + gExpectedText = "redirected"; + gExpectedURL = gRedirectedURL; + gNavigated = true; + info("Check that the captive portal login tab does not use TRR"); + + await openAndCheck(); +}); diff -Nru firefox-esr-128.3.1esr/browser/base/content/test/sanitize/browser.toml firefox-esr-128.4.0esr/browser/base/content/test/sanitize/browser.toml --- firefox-esr-128.3.1esr/browser/base/content/test/sanitize/browser.toml 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/base/content/test/sanitize/browser.toml 2024-10-21 23:59:48.000000000 +0000 @@ -28,6 +28,8 @@ ["browser_sanitize-passwordDisabledHosts.js"] +["browser_sanitize-siteDataExceptAddons.js"] + ["browser_sanitize-sitepermissions.js"] ["browser_sanitize-timespans.js"] diff -Nru firefox-esr-128.3.1esr/browser/base/content/test/sanitize/browser_sanitize-siteDataExceptAddons.js firefox-esr-128.4.0esr/browser/base/content/test/sanitize/browser_sanitize-siteDataExceptAddons.js --- firefox-esr-128.3.1esr/browser/base/content/test/sanitize/browser_sanitize-siteDataExceptAddons.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/base/content/test/sanitize/browser_sanitize-siteDataExceptAddons.js 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,105 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +ChromeUtils.defineESModuleGetters(this, { + PermissionTestUtils: "resource://testing-common/PermissionTestUtils.sys.mjs", +}); + +async function createAddon() { + let extData = { + manifest: { + name: "Test Extension", + permissions: ["unlimitedStorage"], + }, + files: { + "testpage.html": "

Extension Test Page

", + }, + }; + + let extension = ExtensionTestUtils.loadExtension(extData); + await extension.startup(); + + return extension; +} + +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [["privacy.sanitize.useOldClearHistoryDialog", false]], + }); +}); + +async function checkAddonPermissionClearingWithPref(prefs, expectedValue) { + let extension = await createAddon(); + + // Use the extension policy to get the principal object + let policy = WebExtensionPolicy.getByID(extension.id); + let extensionPrincipal = policy.extension.principal; + + // The addon gets a persistent-storage permission because of + // "unlimitedStorage" being present in loadExtension + Assert.equal( + PermissionTestUtils.testExactPermission( + extensionPrincipal, + "persistent-storage" + ), + Services.perms.ALLOW_ACTION, + "Addon persistent permission exists" + ); + + // Add a site permission that is expected to be cleared + let siteURI = Services.io.newURI("https://testdomain.org"); + + PermissionTestUtils.add( + siteURI, + "persistent-storage", + Services.perms.ALLOW_ACTION + ); + + // Lets clear cookies and site data + let clearHistoryDialog = new ClearHistoryDialogHelper(); + + clearHistoryDialog.onload = function () { + this.checkPrefCheckbox("cookiesAndStorage", prefs.cookiesAndStorage); + this.checkPrefCheckbox("siteSettings", prefs.siteSettings); + + this.acceptDialog(); + }; + + clearHistoryDialog.open(); + await clearHistoryDialog.promiseClosed; + + Assert.equal( + PermissionTestUtils.testExactPermission( + extensionPrincipal, + "persistent-storage" + ), + expectedValue, + "Addon permission persists" + ); + + Assert.equal( + PermissionTestUtils.testExactPermission(siteURI, "persistent-storage"), + Services.perms.UNKNOWN_ACTION, + "Site permission removed" + ); + + // cleanup + Services.perms.removeAll(); + await extension.unload(); +} + +add_task(async function test_clearing_cookiesAndStorage() { + await checkAddonPermissionClearingWithPref( + { cookiesAndStorage: true, siteSettings: false }, + Services.perms.ALLOW_ACTION + ); +}); + +add_task(async function test_clearing_siteSettings() { + await checkAddonPermissionClearingWithPref( + { cookiesAndStorage: false, siteSettings: true }, + Services.perms.UNKNOWN_ACTION + ); +}); diff -Nru firefox-esr-128.3.1esr/browser/components/enterprisepolicies/Policies.sys.mjs firefox-esr-128.4.0esr/browser/components/enterprisepolicies/Policies.sys.mjs --- firefox-esr-128.3.1esr/browser/components/enterprisepolicies/Policies.sys.mjs 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/components/enterprisepolicies/Policies.sys.mjs 2024-10-21 23:59:48.000000000 +0000 @@ -1639,6 +1639,12 @@ }, }, + MicrosoftEntraSSO: { + onBeforeAddons(manager, param) { + setAndLockPref("network.http.microsoft-entra-sso.enabled", param); + }, + }, + NetworkPrediction: { onBeforeAddons(manager, param) { setAndLockPref("network.dns.disablePrefetch", !param); diff -Nru firefox-esr-128.3.1esr/browser/components/places/content/browserPlacesViews.js firefox-esr-128.4.0esr/browser/components/places/content/browserPlacesViews.js --- firefox-esr-128.3.1esr/browser/components/places/content/browserPlacesViews.js 2024-10-08 21:18:24.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/components/places/content/browserPlacesViews.js 2024-10-21 23:59:48.000000000 +0000 @@ -933,6 +933,8 @@ this._chevron._placesView.uninit(); } + this._chevronPopup.uninit(); + if (this._otherBookmarks?._placesView) { this._otherBookmarks._placesView.uninit(); } @@ -1619,6 +1621,13 @@ dropPoint.beforeIndex = beforeIndex; } } + } else if (elt == this._chevron) { + // If drop on the chevron, insert after the last bookmark. + dropPoint.ip = new PlacesInsertionPoint({ + parentGuid: PlacesUtils.getConcreteItemGuid(this._resultNode), + orientation: Ci.nsITreeView.DROP_BEFORE, + }); + dropPoint.beforeIndex = -1; } else { dropPoint.ip = new PlacesInsertionPoint({ parentGuid: PlacesUtils.getConcreteItemGuid(this._resultNode), diff -Nru firefox-esr-128.3.1esr/browser/components/places/content/places-menupopup.js firefox-esr-128.4.0esr/browser/components/places/content/places-menupopup.js --- firefox-esr-128.3.1esr/browser/components/places/content/places-menupopup.js 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/components/places/content/places-menupopup.js 2024-10-21 23:59:48.000000000 +0000 @@ -586,6 +586,10 @@ on_dragend() { this._cleanupDragDetails(); } + + uninit() { + this.__rootView = null; + } } customElements.define("places-popup", MozPlacesPopup, { diff -Nru firefox-esr-128.3.1esr/browser/components/places/tests/browser/browser.toml firefox-esr-128.4.0esr/browser/components/places/tests/browser/browser.toml --- firefox-esr-128.3.1esr/browser/components/places/tests/browser/browser.toml 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/components/places/tests/browser/browser.toml 2024-10-21 23:59:48.000000000 +0000 @@ -87,6 +87,8 @@ ["browser_bookmarks_toolbar_context_menu_view_options.js"] +["browser_bookmarks_toolbar_drag_with_chevron.js"] + ["browser_bookmarks_toolbar_telemetry.js"] ["browser_bug427633_no_newfolder_if_noip.js"] diff -Nru firefox-esr-128.3.1esr/browser/components/places/tests/browser/browser_bookmarks_toolbar_drag_with_chevron.js firefox-esr-128.4.0esr/browser/components/places/tests/browser/browser_bookmarks_toolbar_drag_with_chevron.js --- firefox-esr-128.3.1esr/browser/components/places/tests/browser/browser_bookmarks_toolbar_drag_with_chevron.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/components/places/tests/browser/browser_bookmarks_toolbar_drag_with_chevron.js 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,181 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [["browser.toolbars.bookmarks.visibility", "newtab"]], + }); + + info("Open new tab and bookmarks toolbar"); + let { newTab } = await openNewTabAndBookmarksToolbar(); + + info("Add bookmarks until showing chevron menu"); + let chevronMenu = document.getElementById("PlacesChevron"); + let bookmarkCount = 2; + for (; ; bookmarkCount++) { + let url = `https://example.com/${bookmarkCount}`; + await PlacesUtils.bookmarks.insert({ + parentGuid: PlacesUtils.bookmarks.toolbarGuid, + url, + title: url, + }); + + if (BrowserTestUtils.isVisible(chevronMenu)) { + break; + } + } + + info("Add more bookmarks"); + bookmarkCount += 1; + for (let max = bookmarkCount + 2; bookmarkCount < max; bookmarkCount++) { + let url = `https://example.com/${bookmarkCount}`; + await PlacesUtils.bookmarks.insert({ + parentGuid: PlacesUtils.bookmarks.toolbarGuid, + url, + title: url, + }); + } + + BrowserTestUtils.removeTab(newTab); + + registerCleanupFunction(async () => { + await PlacesUtils.bookmarks.eraseEverything(); + await PlacesUtils.history.clear(); + }); +}); + +add_task(async function drop_on_tabbar_from_chevron() { + info("Open new tab and bookmarks toolbar"); + let { newTab, bookmarksToolbar } = await openNewTabAndBookmarksToolbar(); + + info("Check whether DnD from chevron works"); + let chevronMenu = document.getElementById("PlacesChevron"); + await testForDndFromChevron(chevronMenu); + + info("Open not about:newtab page to collapse the bookmark toolbar"); + let contentTab = await BrowserTestUtils.openNewForegroundTab({ + gBrowser, + opening: "https://example.com/", + waitForLoad: false, + }); + await BrowserTestUtils.waitForCondition( + () => bookmarksToolbar.collapsed, + "Wait for toolbar to become invisible" + ); + + info("Select about:newtab tab again"); + gBrowser.selectedTab = newTab; + await BrowserTestUtils.waitForCondition( + () => !bookmarksToolbar.collapsed, + "Wait for toolbar to become visible" + ); + + info("Check whether DnD from chevron works again"); + await testForDndFromChevron(chevronMenu); + + BrowserTestUtils.removeTab(newTab); + BrowserTestUtils.removeTab(contentTab); +}); + +add_task(async function drop_on_chevron_from_identity_box() { + await SpecialPowers.pushPrefEnv({ + set: [["browser.toolbars.bookmarks.visibility", "always"]], + }); + + const TEST_URL = "https://example.com/404_not_found"; + + info("Open new tab and bookmarks toolbar"); + let { newTab } = await openNewTabAndBookmarksToolbar({ + url: TEST_URL, + }); + + info("Start DnD"); + let chevronMenu = document.getElementById("PlacesChevron"); + let identityBox = document.getElementById("identity-box"); + let chevronPopup = document.getElementById("PlacesChevronPopup"); + + let onChevronPopupShown = BrowserTestUtils.waitForPopupEvent( + chevronPopup, + "shown" + ); + await EventUtils.synthesizePlainDragAndDrop({ + srcElement: identityBox, + destElement: chevronMenu, + }); + await onChevronPopupShown; + + info("Check the last bookmark item"); + await BrowserTestUtils.waitForCondition(() => { + let items = [...chevronPopup.children]; + let lastElement = items.findLast( + c => c.nodeName == "menuitem" && BrowserTestUtils.isVisible(c) + ); + return lastElement.label == "404 Not Found"; + }); + Assert.ok(true, "The current page is bookmarked with correct position"); + + chevronPopup.hidePopup(); + BrowserTestUtils.removeTab(newTab); + await SpecialPowers.popPrefEnv(); +}); + +async function testForDndFromChevron(chevronMenu) { + info("Open chevron menu"); + let chevronPopup = document.getElementById("PlacesChevronPopup"); + let onChevronPopupShown = BrowserTestUtils.waitForPopupEvent( + chevronPopup, + "shown" + ); + chevronMenu.click(); + await onChevronPopupShown; + + info("Choose a menu item from chevron menu as drag target"); + let srcElement = await BrowserTestUtils.waitForCondition(() => + [...chevronPopup.children].findLast( + c => + c.label?.startsWith("https://example.com/") && + BrowserTestUtils.isVisible(c) + ) + ); + + let destElement = document.getElementById( + gBrowser.tabContainer.hasAttribute("overflow") + ? "new-tab-button" + : "tabs-newtab-button" + ); + let onNewTabByDnD = BrowserTestUtils.waitForNewTab( + gBrowser, + srcElement.label + ); + + info("Start DnD"); + await EventUtils.synthesizePlainDragAndDrop({ + srcElement, + destElement, + }); + + info("Wait until finishing DnD"); + let dropTab = await onNewTabByDnD; + Assert.ok(dropTab, "DnD was successful"); + BrowserTestUtils.removeTab(dropTab); + chevronPopup.hidePopup(); +} + +async function openNewTabAndBookmarksToolbar({ url } = {}) { + let newTab = await BrowserTestUtils.openNewForegroundTab({ + gBrowser, + opening: url ?? "about:newtab", + waitForLoad: !!url, + }); + + let bookmarksToolbar = document.getElementById("PersonalToolbar"); + await TestUtils.waitForCondition( + () => !bookmarksToolbar.collapsed, + "Wait for toolbar to become visible" + ); + + return { newTab, bookmarksToolbar }; +} diff -Nru firefox-esr-128.3.1esr/browser/components/sessionstore/SessionStore.sys.mjs firefox-esr-128.4.0esr/browser/components/sessionstore/SessionStore.sys.mjs --- firefox-esr-128.3.1esr/browser/components/sessionstore/SessionStore.sys.mjs 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/components/sessionstore/SessionStore.sys.mjs 2024-10-21 23:59:48.000000000 +0000 @@ -4546,12 +4546,13 @@ let sidebarBox = aWindow.document.getElementById("sidebar-box"); let command = sidebarBox.getAttribute("sidebarcommand"); + // Store width and order from sidebar style + winData.sidebar = { style: sidebarBox.style.cssText }; if (command && sidebarBox.getAttribute("checked") == "true") { - winData.sidebar = { + Object.assign(winData.sidebar, { command, positionEnd: sidebarBox.getAttribute("positionend"), - style: sidebarBox.style.cssText, - }; + }); } else if (winData.sidebar?.command) { delete winData.sidebar.command; } @@ -5601,16 +5602,22 @@ * Object containing command (sidebarcommand/category),styles and * positionEnd (reflecting the sidebar.position_start pref) */ - restoreSidebar(aWindow, aSidebar) { - let sidebarBox = aWindow.document.getElementById("sidebar-box"); - if ( - aSidebar?.command && - (sidebarBox.getAttribute("sidebarcommand") != aSidebar.command || - !sidebarBox.getAttribute("checked")) - ) { - aWindow.SidebarController.showInitially(aSidebar.command); + restoreSidebar(aWindow, aSidebar, isPopup) { + if (!aSidebar) { + return; + } + if (!isPopup) { + let sidebarBox = aWindow.document.getElementById("sidebar-box"); + // Always restore sidebar width and order sidebarBox.setAttribute("style", aSidebar.style); - sidebarBox.setAttribute("positionend", !!aSidebar?.positionEnd); + if ( + aSidebar.command && + (sidebarBox.getAttribute("sidebarcommand") != aSidebar.command || + !sidebarBox.getAttribute("checked")) + ) { + aWindow.SidebarController.showInitially(aSidebar.command); + sidebarBox.setAttribute("positionend", !!aSidebar?.positionEnd); + } } }, diff -Nru firefox-esr-128.3.1esr/browser/components/sessionstore/test/marionette/test_restore_sidebar.py firefox-esr-128.4.0esr/browser/components/sessionstore/test/marionette/test_restore_sidebar.py --- firefox-esr-128.3.1esr/browser/components/sessionstore/test/marionette/test_restore_sidebar.py 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/components/sessionstore/test/marionette/test_restore_sidebar.py 2024-10-21 23:59:48.000000000 +0000 @@ -37,7 +37,7 @@ ), ) - def test_restore(self): + def test_restore_sidebar_open(self): self.assertEqual( len(self.marionette.chrome_window_handles), 1, @@ -108,3 +108,56 @@ "viewHistorySidebar", "Correct sidebar category has been restored.", ) + + def test_restore_sidebar_closed(self): + self.marionette.execute_script( + """ + let window = BrowserWindowTracker.getTopWindow() + window.SidebarController.show("viewHistorySidebar"); + let sidebarBox = window.document.getElementById("sidebar-box") + sidebarBox.style.width = "100px"; + window.SidebarController.toggle(); + """ + ) + + self.assertEqual( + self.marionette.execute_script( + """ + let window = BrowserWindowTracker.getTopWindow() + return window.document.getElementById("sidebar-box").hidden; + """ + ), + True, + "Sidebar is hidden before window is closed.", + ) + + self.marionette.restart() + self.marionette.set_context("chrome") + + self.assertEqual( + len(self.marionette.chrome_window_handles), + 1, + msg="Windows from last session have been restored.", + ) + + self.assertEqual( + self.marionette.execute_script( + """ + let window = BrowserWindowTracker.getTopWindow() + return window.document.getElementById("sidebar-box").hidden; + """ + ), + True, + "Sidebar is hidden on session restore.", + ) + + self.assertEqual( + self.marionette.execute_script( + """ + let window = BrowserWindowTracker.getTopWindow() + return window.document.getElementById("sidebar-box").style.width; + """ + ), + "100px", + "Sidebar width has been restored.", + ) diff -Nru firefox-esr-128.3.1esr/browser/components/textrecognition/textrecognition.css firefox-esr-128.4.0esr/browser/components/textrecognition/textrecognition.css --- firefox-esr-128.3.1esr/browser/components/textrecognition/textrecognition.css 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/components/textrecognition/textrecognition.css 2024-10-21 23:59:48.000000000 +0000 @@ -74,7 +74,7 @@ @media (prefers-reduced-motion: reduce) { .textRecognitionThrobber { - background-image: url("chrome://browser/skin/tabbrowser/hourglass.svg"); + background-image: url("chrome://global/skin/icons/loading.svg"); background-position: center; background-repeat: no-repeat; -moz-context-properties: fill; diff -Nru firefox-esr-128.3.1esr/browser/config/version.txt firefox-esr-128.4.0esr/browser/config/version.txt --- firefox-esr-128.3.1esr/browser/config/version.txt 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/config/version.txt 2024-10-21 23:59:49.000000000 +0000 @@ -1 +1 @@ -128.3.1 +128.4.0 diff -Nru firefox-esr-128.3.1esr/browser/config/version_display.txt firefox-esr-128.4.0esr/browser/config/version_display.txt --- firefox-esr-128.3.1esr/browser/config/version_display.txt 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/config/version_display.txt 2024-10-21 23:59:49.000000000 +0000 @@ -1 +1 @@ -128.3.1esr +128.4.0esr diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/data/injections.js firefox-esr-128.4.0esr/browser/extensions/webcompat/data/injections.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/data/injections.js 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/data/injections.js 2024-10-21 23:59:48.000000000 +0000 @@ -290,6 +290,8 @@ "*://www.facebook.com/*", // Bug 1739489 "*://twitter.com/*", // Bug 1776229 "*://mobile.twitter.com/*", // Bug 1776229 + "*://x.com/*", // Bug 1776229 + "*://mobile.x.com/*", // Bug 1776229 "*://*.reddit.com/*", // Bug 1829755 ], js: [ @@ -585,6 +587,7 @@ "*://*.lafoodbank.org/*", // 127006 "*://rutamayacoffee.com/*", // 129353 "*://ottoandspike.com.au/*", // bugzilla 1644602 + "*://give.umrelief.org/give/*", // bugzilla 1916407 ], js: [ { @@ -1002,20 +1005,6 @@ }, }, { - id: "bug1877346", - platform: "android", - domain: "offerup.com", - bug: "1877346", - contentScripts: { - matches: ["*://offerup.com/*"], - css: [ - { - file: "injections/css/bug1877346-offerup.com-infinite-scroll-fix.css", - }, - ], - }, - }, - { id: "bug1884842", platform: "android", domain: "foodora.cz", @@ -1059,15 +1048,108 @@ }, }, { - id: "1882040", + id: "1922175", + platform: "all", + domain: "app.livingsecurity.com", + bug: "1922175", + contentScripts: { + matches: ["*://app.livingsecurity.com/*"], + js: [ + { + file: "injections/js/bug1896383-error-capturestacktrace-shim.js", + }, + ], + }, + }, + { + id: "bug1889326", + platform: "desktop", + domain: "Office 365 email handling prompt", + bug: "1889326", + contentScripts: { + matches: [ + "*://*.live.com/*", + "*://*.office.com/*", + "*://*.office365.com/*", + "*://*.office365.us/*", + "*://*.outlook.cn/*", + "*://*.outlook.com/*", + "*://*.sharepoint.com/*", + ], + js: [ + { + file: "injections/js/bug1889326-office365-email-handling-prompt-autohide.js", + }, + ], + allFrames: true, + }, + }, + { + id: "bug1881922", + platform: "all", + domain: "helpdeskgeek.com", + bug: "1881922", + contentScripts: { + matches: ["*://helpdeskgeek.com/*"], + js: [ + { + file: "injections/js/bug1881922-disable-legacy-mutation-events.js", + }, + ], + }, + }, + { + id: "bug1901780", + platform: "all", + domain: "vanbreda-health.be", + bug: "1901780", + contentScripts: { + matches: ["*://www.vanbreda-health.be/*"], + js: [ + { + file: "injections/js/bug1881922-disable-legacy-mutation-events.js", + }, + ], + }, + }, + { + id: "bug1896571", + platform: "all", + domain: "gracobaby.ca", + bug: "1896571", + contentScripts: { + matches: ["*://www.gracobaby.ca/*"], + css: [ + { + file: "injections/css/bug1896571-gracobaby.ca-unlock-scrolling.css", + }, + ], + }, + }, + { + id: "bug1895994", platform: "android", - domain: "YouTube Shorts", - bug: "1882040", + domain: "www.softrans.ro", + bug: "1895994", contentScripts: { - matches: ["*://m.youtube.com/shorts", "*://m.youtube.com/shorts/*"], + matches: ["*://*.softrans.ro/*"], css: [ { - file: "injections/css/bug1882040-disable-pull-to-refresh.css", + file: "injections/css/bug1895994-softtrans.ro-unlock-scrolling.css", + }, + ], + }, + }, + { + id: "bug1898952", + platform: "desktop", + domain: "digits.t-mobile.com", + bug: "1898952", + contentScripts: { + matches: ["*://digits.t-mobile.com/*"], + js: [ + { + file: "injections/js/bug1898952-digits.t-mobile.com.js", }, ], }, @@ -1094,6 +1176,146 @@ allFrames: true, }, }, + { + id: "bug1899937", + platform: "all", + domain: "plus.nhk.jp", + bug: "1899937", + contentScripts: { + matches: ["*://plus.nhk.jp/*"], + js: [ + { + file: "injections/js/bug1899937-plus.nhk.jp-request-picture-in-picture.js", + }, + ], + }, + }, + { + id: "bug1886616", + platform: "all", + domain: "www.six-group.com", + bug: "1886616", + contentScripts: { + matches: ["*://www.six-group.com/*/market-data/etf/etf-explorer.html*"], + css: [ + { + file: "injections/css/bug1886616-www.six-group.com-select-fix.css", + }, + ], + }, + }, + { + id: "bug1896349", + platform: "all", + domain: "vivaldi.com", + bug: "1896349", + contentScripts: { + matches: ["*://vivaldi.com/*"], + css: [ + { + file: "injections/css/bug1896349-vivaldi.com-selected-text-fix.css", + }, + ], + }, + }, + { + id: "bug1836872", + platform: "desktop", + domain: "docs.google.com", + bug: "1836872", + contentScripts: { + matches: ["*://docs.google.com/document/*"], + css: [ + { + file: "injections/css/bug1836872-docs.google.com-font-submenus-inaccessible.css", + }, + ], + }, + }, + { + id: "bug1779908", + platform: "desktop", + domain: "docs.google.com", + bug: "1779908", + contentScripts: { + matches: ["*://play.google.com/store/*"], + css: [ + { + file: "injections/css/bug1779908-play.google.com-scrollbar-fix.css", + }, + ], + }, + }, + { + id: "bug1879879", + platform: "all", + domain: "developers.pinterest.com", + bug: "1879879", + contentScripts: { + matches: ["*://developers.pinterest.com/docs/*"], + css: [ + { + file: "injections/css/bug1879879-developers.pinterest.com-list-alignment-fix.css", + }, + ], + }, + }, + { + id: "bug1856915", + platform: "android", + domain: "login.yahoo.com", + bug: "1856915", + contentScripts: { + matches: ["*://login.yahoo.com/account/*"], + css: [ + { + file: "injections/css/bug1856915-login.yahoo.com-unhide-password-button-fix.css", + }, + ], + }, + }, + { + id: "bug1841730", + platform: "desktop", + domain: "www.korg.com", + bug: "1841730", + contentScripts: { + matches: ["*://www.korg.com/*/support/download/product/*"], + js: [ + { + file: "injections/js/bug1841730-www.korg.com-fix-broken-page-loads.js", + }, + ], + }, + }, + { + id: "bug1895051", + platform: "all", + domain: "www.zhihu.com", + bug: "1895051", + contentScripts: { + matches: ["*://www.zhihu.com/question/*"], + css: [ + { + file: "injections/css/bug1895051-www.zhihu.com-broken-button-fix.css", + }, + ], + }, + }, + { + id: "bug1924500", + platform: "desktop", + domain: "www.tiktok.com", + bug: "1924500", + contentScripts: { + matches: ["*://www.tiktok.com/*"], + js: [ + { + file: "injections/js/bug1924500-www.tiktok.com-fix-captcha-slider.js", + }, + ], + }, + }, ]; module.exports = AVAILABLE_INJECTIONS; diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/data/shims.js firefox-esr-128.4.0esr/browser/extensions/webcompat/data/shims.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/data/shims.js 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/data/shims.js 2024-10-21 23:59:49.000000000 +0000 @@ -380,6 +380,27 @@ onlyIfBlockedByETP: true, }, { + id: "figshare", + platform: "all", + name: "Figshare", + bug: "1895990", + contentScripts: [ + { + js: "figshare.js", + matches: [ + "*://*.figsharelabs.io/*", + "*://opal.latrobe.edu.au/*", + "*://repository.lboro.ac.uk/*", + "*://portal.sds.ox.ac.uk/*", + "*://curate.nd.edu/*", + "*://kilthub.cmu.edu/*", + ], + runAt: "document_start", + }, + ], + onlyIfDFPIActive: true, + }, + { id: "GoogleAnalyticsAndTagManager", platform: "all", name: "Google Analytics and Tag Manager", diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/data/ua_overrides.js firefox-esr-128.4.0esr/browser/extensions/webcompat/data/ua_overrides.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/data/ua_overrides.js 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/data/ua_overrides.js 2024-10-21 23:59:49.000000000 +0000 @@ -1210,6 +1210,254 @@ }, }, }, + { + /* + * Bug 1842767 - UA override for passport.bilibili.com + * + * Spoofing as Chrome makes the login page use a mobile layout. + */ + id: "bug1842767", + platform: "android", + domain: "passport.bilibili.com", + bug: "1842767", + config: { + matches: ["*://*.passport.bilibili.com/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1896354 - UA override for my.rhinoshield.fr + * + * Sites only supports Chrome, but seems to work with a UA spoof. + */ + id: "bug1896354", + platform: "all", + domain: "my.rhinoshield.fr", + bug: "1896354", + config: { + matches: ["*://my.rhinoshield.fr/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1813177 - UA override for rbi.org.in + * + * The site endlessly redirects for a Firefox mobile UA string. + */ + id: "bug1813177", + platform: "android", + domain: "m.rbi.org.in", + bug: "1813177", + config: { + matches: ["*://m.rbi.org.in/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1903970 - UA override for unimedlitoral.com.br + * Webcompat issue #138342 - https://webcompat.com/issues/138342 + * + * Site blocks Firefox, but seems to work with a UA spoof. + */ + id: "bug1903970", + platform: "all", + domain: "www.unimedlitoral.com.br", + bug: "1903970", + config: { + matches: ["*://www.unimedlitoral.com.br/agendaonline/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1902474 - UA override for lg.jio.com + * Webcompat issue #124681 - https://webcompat.com/issues/124681 + * + * Site incorrectly blocks Firefox on Android. A desktop UA works. + */ + id: "bug1902474", + platform: "android", + domain: "lg.jio.com", + bug: "1902474", + config: { + matches: ["*://lg.jio.com/*"], + uaTransformer: originalUA => { + return originalUA.replace(/ (Mobile|Tablet);/, ""); + }, + }, + }, + { + /* + * Bug 1909448 - UA override for fire.honeywell.com + * + * Site doesn't load on Firefox, but works fine with a UA spoof. + */ + id: "bug1909448", + platform: "all", + domain: "fire.honeywell.com", + bug: "1909448", + config: { + matches: ["*://fire.honeywell.com/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1899937 - UA override for plus.nhk.jp + * Webcompat issue #103463 - https://webcompat.com/issues/103463 + * + * Site blocks Firefox, so a UA spoof and an intervention is needed. + */ + id: "bug1899937-ua", + platform: "all", + domain: "plus.nhk.jp", + bug: "1899937", + config: { + matches: ["*://plus.nhk.jp/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1897724 - UA override for app.homewyse.com + * Webcompat issue #137164 - https://webcompat.com/issues/137164 + * + * Site blocks Firefox, but seems to work with a UA spoof. + */ + id: "bug1897724", + platform: "all", + domain: "app.homewyse.com", + bug: "1897724", + config: { + matches: ["*://app.homewyse.com/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1898923 - UA override for trade-in.vodafone.com + * Webcompat issue #127158 - https://webcompat.com/issues/127158 + * + * Site blocks Firefox, but seems to work with a UA spoof. + */ + id: "bug1898923", + platform: "all", + domain: "trade-in.vodafone.com", + bug: "1898923", + config: { + matches: ["*://trade-in.vodafone.com/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1899067 - UA override for game.granbluefantasy.jp + * Webcompat issue #43155 - https://webcompat.com/issues/43155 + * + * Site blocks Firefox, but seems to work with a UA spoof. + */ + id: "bug1899067", + platform: "desktop", + domain: "game.granbluefantasy.jp", + bug: "1899067", + config: { + matches: ["*://game.granbluefantasy.jp/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1898941 - UA override for events.webinar.ru + * Webcompat issue #121871 - https://webcompat.com/issues/121871 + * + * Site blocks Firefox, but seems to work with a UA spoof. + */ + id: "bug1898941", + platform: "all", + domain: "events.webinar.ru", + bug: "1898941", + config: { + matches: ["*://events.webinar.ru/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1919004 - UA override for www.editoracontexto.com.br + * Webcompat issue #141641 - https://webcompat.com/issues/141641 + * + * Site presents its desktop CSS to Firefox on Android. + */ + id: "bug1919004", + platform: "android", + domain: "www.editoracontexto.com.br", + bug: "1919004", + config: { + matches: ["*://www.editoracontexto.com.br/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, + { + /* + * Bug 1921410 - UA override for beta.maps.apple.com + * Webcompat issue #140205 - https://webcompat.com/issues/140205 + * + * Apple Maps beta artifically blocks Linux. + */ + id: "bug1921410", + platform: "linux", + domain: "beta.maps.apple.com", + bug: "1921410", + config: { + matches: ["*://beta.maps.apple.com/*"], + uaTransformer: originalUA => { + return UAHelpers.getWindowsUA(originalUA); + }, + }, + }, + { + /* + * Bug 1899948 - UA override for tv.partner.co.il + * Webcompat issue #64703 - https://webcompat.com/issues/64703 + * + * Site blocks Firefox, but seems to work with a UA spoof. + */ + id: "1899948", + platform: "all", + domain: "tv.partner.co.il", + bug: "1899948", + config: { + matches: ["*://tv.partner.co.il/*"], + uaTransformer: () => { + return UAHelpers.getDeviceAppropriateChromeUA(); + }, + }, + }, ]; module.exports = AVAILABLE_UA_OVERRIDES; diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1779908-play.google.com-scrollbar-fix.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1779908-play.google.com-scrollbar-fix.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1779908-play.google.com-scrollbar-fix.css 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1779908-play.google.com-scrollbar-fix.css 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,15 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * play.google.com - Extra scrollbar not hidden on store pages. + * + * Bug #1779908 - https://bugzilla.mozilla.org/show_bug.cgi?id=1779908 + * + * They are hiding the scrollbar with ::webkit-scrollbar, but not the standards- + * compliant method `scrollbar-width:none`. + */ +.aoJE7e { + scrollbar-width: none; +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1836872-docs.google.com-font-submenus-inaccessible.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1836872-docs.google.com-font-submenus-inaccessible.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1836872-docs.google.com-font-submenus-inaccessible.css 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1836872-docs.google.com-font-submenus-inaccessible.css 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,18 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * docs.google.com - font submenus are inaccessible with overlay scrollbars on + * Bug #1836872 - https://bugzilla.mozilla.org/show_bug.cgi?id=1836872 + * + * The submenu panels are shifted too far to the right when overlay + * scrollbars are visible, and so they are dismissed while attemting + * to mouse over to them. Shifting them to the left fixes them. + */ +/* font family sub-menus */ +[class="goog-menu goog-menu-vertical"], +/* font style sub-menus */ +.goog-menu.apps-menu-hide-mnemonics { + margin-inline-start: -20px; +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1856915-login.yahoo.com-unhide-password-button-fix.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1856915-login.yahoo.com-unhide-password-button-fix.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1856915-login.yahoo.com-unhide-password-button-fix.css 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1856915-login.yahoo.com-unhide-password-button-fix.css 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,15 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * login.yahoo.com - Toggle to reveal password text is missing + * + * Bug #1856915 - https://bugzilla.mozilla.org/show_bug.cgi?id=1856915 + * + * Yahoo is using letter-spacing in a way which relies on a Blink quirk to + * not inadvertently hide their show/hide password text toggle. + */ +#password-container > input[type="password"] { + min-width: 0; +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1877346-offerup.com-infinite-scroll-fix.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1877346-offerup.com-infinite-scroll-fix.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1877346-offerup.com-infinite-scroll-fix.css 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1877346-offerup.com-infinite-scroll-fix.css 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/** - * offerup.com - Infinite scroll doesn't work - * Bug #1720060 - https://bugzilla.mozilla.org/show_bug.cgi?id=1720060 - * - * The site uses IntersectionObserver to show new items on the page, - * as the page being scrolled and it doesn't work with with - * Dynamic Toolbar enabled. Adding an empty element after the content - * to make up for the height of the dynamic toolbar makes it work. - */ - -#__next::after { - display: block; - width: 100%; - height: 10px; - content: ""; -} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1879879-developers.pinterest.com-list-alignment-fix.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1879879-developers.pinterest.com-list-alignment-fix.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1879879-developers.pinterest.com-list-alignment-fix.css 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1879879-developers.pinterest.com-list-alignment-fix.css 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,12 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * developers.pinterest.com - List elements are misaligned + * + * Bug #1879879 - https://bugzilla.mozilla.org/show_bug.cgi?id=1879879 + */ +li > span:has(> div) { + display: block; +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1882040-disable-pull-to-refresh.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1882040-disable-pull-to-refresh.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1882040-disable-pull-to-refresh.css 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1882040-disable-pull-to-refresh.css 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/** - * m.youtube.com/shorts - pull-to-refresh breaks scrolling - * Bug #1882040 - https://bugzilla.mozilla.org/show_bug.cgi?id=1882040 - * - * Pull-to-refresh is breaking scrolling on the YouTube Shorts mobile page. - * The easiest work-around is to inject this CSS to disable it for now. - */ -html { - overscroll-behavior: contain; -} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1886616-www.six-group.com-select-fix.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1886616-www.six-group.com-select-fix.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1886616-www.six-group.com-select-fix.css 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1886616-www.six-group.com-select-fix.css 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,15 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * www.six-group.com - Selected input values are hidden + * Bug #1886616 - https://bugzilla.mozilla.org/show_bug.cgi?id=1886616 + * WebCompat issue #129271 - https://webcompat.com/issues/129271 + * + * The page is hiding CSS content, which is not interoperable. In this + * case, it causes their select dropdown's values to be hidden. + */ +select { + content: normal; +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1895051-www.zhihu.com-broken-button-fix.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1895051-www.zhihu.com-broken-button-fix.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1895051-www.zhihu.com-broken-button-fix.css 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1895051-www.zhihu.com-broken-button-fix.css 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,16 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * www.zhihu.com - Certain directory buttons are unclickable + * + * Bug #1895051 - https://bugzilla.mozilla.org/show_bug.cgi?id=1895051 + * + * On narrow enough screens, some of the site's directory buttons + * overlap with text differently on Firefox and Safari than in Chromium, + * making them unclickable. This fixes the issue. + */ +.css-376mun { + display: block; +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1895994-softtrans.ro-unlock-scrolling.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1895994-softtrans.ro-unlock-scrolling.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1895994-softtrans.ro-unlock-scrolling.css 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1895994-softtrans.ro-unlock-scrolling.css 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,16 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * softtrans.ro - users cannot scroll the page horizontally on Android + * Bug #1895994 - https://bugzilla.mozilla.org/show_bug.cgi?id=1895994 + * + * The page uses a meta viewport tag on Android, and also hides overflow-x + * on the body tag, making it impossible to scroll the page. We can unset + * the overflow to fix this. + */ + +body { + overflow-x: auto; +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1896349-vivaldi.com-selected-text-fix.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1896349-vivaldi.com-selected-text-fix.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1896349-vivaldi.com-selected-text-fix.css 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1896349-vivaldi.com-selected-text-fix.css 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,13 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * vivaldi.com - Selected text is invisible + * Bug #1896349 - https://bugzilla.mozilla.org/show_bug.cgi?id=1896349 + * WebCompat issue #136863 - https://webcompat.com/issues/136863 + */ +::selection { + color: HighlightText; + background-color: Highlight; +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1896571-gracobaby.ca-unlock-scrolling.css firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1896571-gracobaby.ca-unlock-scrolling.css --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/css/bug1896571-gracobaby.ca-unlock-scrolling.css 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/css/bug1896571-gracobaby.ca-unlock-scrolling.css 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,18 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * gracobaby.ca - users cannot scroll the page on narrow viewports + * Bug #1896571 - https://bugzilla.mozilla.org/show_bug.cgi?id=1896571 + * + * The page uses a meta viewport on narrower screen widths, and also + * hides overflow on the html tag, making it impossible to scroll the + * page. We can unset the overflow to fix this. + */ + +@media (max-width: 767.98px) { + html { + overflow: auto; + } +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1841730-www.korg.com-fix-broken-page-loads.js firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1841730-www.korg.com-fix-broken-page-loads.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1841730-www.korg.com-fix-broken-page-loads.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1841730-www.korg.com-fix-broken-page-loads.js 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,35 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/** + * Bug 1841730 - Fix www.korg.com support download page loads on Windows. + * WebCompat issue #2787 - https://webcompat.com/issues/2787 + * + * They are using a library named PACE, which has a timing bug with Firefox + * which breaks page loads (due to a stuck progress indicator) on Windows. + * This is the fix suggested at https://github.com/CodeByZach/pace/issues/510 + */ + +/* globals exportFunction */ + +(function () { + const win = window.wrappedJSObject; + + let val = new win.Object(); + val.eventLag = false; + + Object.defineProperty(win, "paceOptions", { + configurable: true, + + get: exportFunction(function () { + return val; + }, window), + + set: exportFunction(function (_val) { + val = _val; + }, window), + }); +})(); diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1881922-disable-legacy-mutation-events.js firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1881922-disable-legacy-mutation-events.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1881922-disable-legacy-mutation-events.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1881922-disable-legacy-mutation-events.js 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,43 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/** + * Bugs 1881922, 1901780 - Disable legacy DOM Mutation Events to prevent performance issues. + */ + +/* globals exportFunction */ + +let bug = "1881922"; +if (location.origin.includes("vanbreda")) { + bug = "1901780"; +} +console.info( + `DOM Mutation Events have been disabled to prevent performance issues. See https://bugzilla.mozilla.org/show_bug.cgi?id=${bug} for details.` +); + +(function disableMutationEvents() { + const whichEvents = [ + "domattrmodified", + "domcharacterdatamodified", + "domnodeinserted", + "domnodeinsertedintodocument", + "domnoderemoved", + "domnoderemovedfromdocument", + "domsubtreemodified", + ]; + + const { prototype } = window.wrappedJSObject.EventTarget; + const { addEventListener } = prototype; + Object.defineProperty(prototype, "addEventListener", { + value: exportFunction(function (_type, b, c, d) { + const type = _type?.toLowerCase(); + if (whichEvents.includes(type)) { + return undefined; + } + return addEventListener.call(this, type, b, c, d); + }, window), + }); +})(); diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1889326-office365-email-handling-prompt-autohide.js firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1889326-office365-email-handling-prompt-autohide.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1889326-office365-email-handling-prompt-autohide.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1889326-office365-email-handling-prompt-autohide.js 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,36 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/** + * Bug 1889326 - Office 365 email handling prompt autohide + * + * This site patch prevents the notification bar on Office 365 + * apps from popping up on each page-load, offering to handle + * email with Outlook. + */ + +/* globals exportFunction */ + +const warning = + "Office 365 Outlook email handling prompt has been hidden. See https://bugzilla.mozilla.org/show_bug.cgi?id=1889326 for details."; + +const localStorageKey = "mailProtocolHandlerAlreadyOffered"; + +const nav = navigator.wrappedJSObject; +const { registerProtocolHandler } = nav; +const { localStorage } = window.wrappedJSObject; + +Object.defineProperty(navigator.wrappedJSObject, "registerProtocolHandler", { + value: exportFunction(function (scheme, url, title) { + if (localStorage.getItem(localStorageKey)) { + console.info(warning); + return undefined; + } + registerProtocolHandler.call(nav, scheme, url, title); + localStorage.setItem(localStorageKey, true); + return undefined; + }, window), +}); diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1898952-digits.t-mobile.com.js firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1898952-digits.t-mobile.com.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1898952-digits.t-mobile.com.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1898952-digits.t-mobile.com.js 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,68 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/** + * Bug 1898952 - Spoof navigator.userAgentData for digits.t-mobile.com + * Webcompat issue #119767 - https://webcompat.com/issues/119767 + * + * The site blocks Firefox and Safari, reading info from userAgentData. + */ + +/* globals exportFunction, cloneInto */ + +if (!navigator.userAgentData) { + console.info( + "navigator.userAgentData has been overridden for compatibility reasons. See https://webcompat.com/issues/119767 for details." + ); + + const ua = navigator.userAgent; + const mobile = ua.includes("Mobile") || ua.includes("Tablet"); + + // Very roughly matches Chromium's GetPlatformForUAMetadata() + let platform = "Linux"; + if (mobile) { + platform = "Android"; + } else if (navigator.platform.startsWith("Win")) { + platform = "Windows"; + } else if (navigator.platform.startsWith("Mac")) { + platform = "macOS"; + } + + const version = (ua.match(/Firefox\/([0-9.]+)/) || ["", "58.0"])[1]; + + // These match Chrome's output as of version 126. + const brands = [ + { + brand: "Not/A)Brand", + version: "8", + }, + { + brand: "Chromium", + version, + }, + { + brand: "Google Chrome", + version, + }, + ]; + + const userAgentData = cloneInto( + { + brands, + mobile, + platform, + }, + window + ); + + Object.defineProperty(window.navigator.wrappedJSObject, "userAgentData", { + get: exportFunction(function () { + return userAgentData; + }, window), + + set: exportFunction(function () {}, window), + }); +} diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1899937-plus.nhk.jp-request-picture-in-picture.js firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1899937-plus.nhk.jp-request-picture-in-picture.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1899937-plus.nhk.jp-request-picture-in-picture.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1899937-plus.nhk.jp-request-picture-in-picture.js 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,27 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/** + * Bug 1899937 - Shim requestPictureInPicture for plus.nhk.jp + * WebCompat issue #103463 - https://webcompat.com/issues/103463 + * + * plus.nhk.jp is showing an error when attempting to play videos. + * Shimming requestPictureInPicture to `{}` makes the videos play. + */ + +/* globals exportFunction */ + +console.info( + "requestPictureInPicture was shimmed for compatibility reasons. See https://bugzilla.mozilla.org/show_bug.cgi?id=1899937 for details." +); + +const proto = HTMLVideoElement.wrappedJSObject.prototype; + +Object.defineProperty(proto, "requestPictureInPicture", { + value: exportFunction(function () { + return {}; + }, window), +}); diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1924500-www.tiktok.com-fix-captcha-slider.js firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1924500-www.tiktok.com-fix-captcha-slider.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/injections/js/bug1924500-www.tiktok.com-fix-captcha-slider.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/injections/js/bug1924500-www.tiktok.com-fix-captcha-slider.js 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,71 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/** + * Bug 1924500 - Fix www.tiktok.com captcha slider + * WebCompat issue #142709 - https://webcompat.com/issues/142709 + * + * They are relying on drag events having clientX coordinates, which are + * always zero on Firefox. A work-around is to listen for mousemove and + * dragover events to capture the clientX value from them, and then + * pass the value along when they reads a DragEvent.clientX. + */ + +/* globals exportFunction */ + +(function () { + let lastClientX = 0; + + const win = window.wrappedJSObject; + Object.defineProperty(win.DragEvent.prototype, "clientX", { + get: exportFunction(function () { + return lastClientX; + }, window), + set: exportFunction(function () {}, window), + configurable: true, + }); + + function setLastClientX(evt) { + lastClientX = evt.clientX; + } + + const captchaOverlayQuery = ".TUXModal-overlay"; + + function activate() { + document.documentElement.addEventListener("mousemove", setLastClientX); + document.documentElement.addEventListener("dragover", setLastClientX); + } + + function deactivate() { + lastClientX = 0; + document.documentElement.removeEventListener("mousemove", setLastClientX); + document.documentElement.removeEventListener("dragover", setLastClientX); + } + + const captchaObserver = new MutationObserver(mutations => { + for (let { addedNodes, removedNodes } of mutations) { + for (const node of addedNodes) { + try { + if (node.matches(captchaOverlayQuery)) { + activate(); + } + } catch (_) {} + } + for (const node of removedNodes) { + try { + if (node.matches(captchaOverlayQuery)) { + deactivate(); + } + } catch (_) {} + } + } + }); + + captchaObserver.observe(document.documentElement, { + childList: true, + subtree: true, + }); +})(); diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/lib/ua_overrides.js firefox-esr-128.4.0esr/browser/extensions/webcompat/lib/ua_overrides.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/lib/ua_overrides.js 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/lib/ua_overrides.js 2024-10-21 23:59:49.000000000 +0000 @@ -144,13 +144,14 @@ async registerUAOverrides() { const platformMatches = ["all"]; - let platformInfo = await browser.runtime.getPlatformInfo(); - platformMatches.push(platformInfo.os == "android" ? "android" : "desktop"); + const { os } = await browser.runtime.getPlatformInfo(); + platformMatches.push(os); + platformMatches.push(os == "android" ? "android" : "desktop"); for (const override of this._availableOverrides) { if (platformMatches.includes(override.platform)) { override.availableOnPlatform = true; - override.currentPlatform = platformInfo.os; + override.currentPlatform = os; // If there is a specific about:config preference governing // this override, monitor its state. diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/manifest.json firefox-esr-128.4.0esr/browser/extensions/webcompat/manifest.json --- firefox-esr-128.3.1esr/browser/extensions/webcompat/manifest.json 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/manifest.json 2024-10-21 23:59:49.000000000 +0000 @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "Web Compatibility Interventions", "description": "Urgent post-release fixes for web compatibility.", - "version": "128.5.0", + "version": "133.2.0", "browser_specific_settings": { "gecko": { "id": "webcompat@mozilla.org", @@ -120,6 +120,7 @@ "shims/facebook-sdk.js", "shims/facebook.svg", "shims/fastclick.js", + "shims/figshare.js", "shims/firebase.js", "shims/google-ads.js", "shims/google-analytics-and-tag-manager.js", diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/moz.build firefox-esr-128.4.0esr/browser/extensions/webcompat/moz.build --- firefox-esr-128.3.1esr/browser/extensions/webcompat/moz.build 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/moz.build 2024-10-21 23:59:49.000000000 +0000 @@ -56,6 +56,7 @@ "injections/css/bug1765947-veniceincoming.com-left-fix.css", "injections/css/bug1770962-coldwellbankerhomes.com-image-height.css", "injections/css/bug1774490-rainews.it-gallery-fix.css", + "injections/css/bug1779908-play.google.com-scrollbar-fix.css", "injections/css/bug1784141-aveeno.com-acuvue.com-unsupported.css", "injections/css/bug1784199-entrata-platform-unsupported.css", "injections/css/bug1819678-nppes.cms.hhs.gov-unsupported-banner.css", @@ -67,14 +68,20 @@ "injections/css/bug1830813-page.onstove.com-hide-unsupported.css", "injections/css/bug1836103-autostar-novoross.ru-make-map-taller.css", "injections/css/bug1836105-cnn.com-fix-blank-pages-when-printing.css", + "injections/css/bug1836872-docs.google.com-font-submenus-inaccessible.css", "injections/css/bug1848711-vio.com-page-height.css", "injections/css/bug1848713-cleanrider.com-slider.css", "injections/css/bug1848849-theaa.com-printing-mode-fix.css", "injections/css/bug1849388-kucharkaprodceru.cz-scroll-fix.css", + "injections/css/bug1856915-login.yahoo.com-unhide-password-button-fix.css", "injections/css/bug1868345-tvmovie.de-scroll-fix.css", - "injections/css/bug1877346-offerup.com-infinite-scroll-fix.css", - "injections/css/bug1882040-disable-pull-to-refresh.css", + "injections/css/bug1879879-developers.pinterest.com-list-alignment-fix.css", "injections/css/bug1884842-foodora.cz-height-fix.css", + "injections/css/bug1886616-www.six-group.com-select-fix.css", + "injections/css/bug1895051-www.zhihu.com-broken-button-fix.css", + "injections/css/bug1895994-softtrans.ro-unlock-scrolling.css", + "injections/css/bug1896349-vivaldi.com-selected-text-fix.css", + "injections/css/bug1896571-gracobaby.ca-unlock-scrolling.css", ] FINAL_TARGET_FILES.features["webcompat@mozilla.org"]["injections"]["js"] += [ @@ -99,14 +106,20 @@ "injections/js/bug1830776-blueshieldca.com-unsupported.js", "injections/js/bug1831007-nintendo-window-OnetrustActiveGroups.js", "injections/js/bug1836157-thai-masszazs-niceScroll-disable.js", + "injections/js/bug1841730-www.korg.com-fix-broken-page-loads.js", "injections/js/bug1842437-www.youtube.com-performance-now-precision.js", "injections/js/bug1849058-nicochannel.jp-picture-in-picture-shim.js", "injections/js/bug1855014-eksiseyler.com.js", "injections/js/bug1855071-www.meteoam.it.js", "injections/js/bug1859617-installtrigger-removal-shim.js", "injections/js/bug1864564-esri-transfrom-names-shim.js", + "injections/js/bug1881922-disable-legacy-mutation-events.js", + "injections/js/bug1889326-office365-email-handling-prompt-autohide.js", "injections/js/bug1896383-error-capturestacktrace-shim.js", "injections/js/bug1897120-turnjs-zoom-fix.js", + "injections/js/bug1898952-digits.t-mobile.com.js", + "injections/js/bug1899937-plus.nhk.jp-request-picture-in-picture.js", + "injections/js/bug1924500-www.tiktok.com-fix-captcha-slider.js", ] FINAL_TARGET_FILES.features["webcompat@mozilla.org"]["shims"] += [ @@ -132,6 +145,7 @@ "shims/facebook-sdk.js", "shims/facebook.svg", "shims/fastclick.js", + "shims/figshare.js", "shims/firebase.js", "shims/google-ads.js", "shims/google-analytics-and-tag-manager.js", diff -Nru firefox-esr-128.3.1esr/browser/extensions/webcompat/shims/figshare.js firefox-esr-128.4.0esr/browser/extensions/webcompat/shims/figshare.js --- firefox-esr-128.3.1esr/browser/extensions/webcompat/shims/figshare.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/extensions/webcompat/shims/figshare.js 2024-10-21 23:59:48.000000000 +0000 @@ -0,0 +1,82 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/** + * Bug 1895990 - figshare login broken with dFPI enabled + * + * The websites that use figshare for login require unpartitioned third-party + * cookie access for https://figshare.com. The figshare login process sets a + * third-party cookie for https://figshare.com, which is used as an proof of + * authentication on redirect back to the main site. This shim adds a request + * for storage access for https://figshare.com when the user tries to log in. + */ + +// Third-party origin we need to request storage access for. +const STORAGE_ACCESS_ORIGIN = "https://figshare.com"; + +console.warn( + `When logging in, Firefox calls the Storage Access API on behalf of the site. See https://bugzilla.mozilla.org/show_bug.cgi?id=1895990 for details.` +); + +document.documentElement.addEventListener( + "click", + e => { + const { target, isTrusted } = e; + if (!isTrusted) { + return; + } + + // If the user clicks the login link, we need to request storage access + // for https://figshare.com. + const link = target.closest(`a[href^="https://login.figshare.com"]`); + if (!link) { + return; + } + + console.warn( + "Calling the Storage Access API on behalf of " + STORAGE_ACCESS_ORIGIN + ); + + e.stopPropagation(); + e.preventDefault(); + document.requestStorageAccessForOrigin(STORAGE_ACCESS_ORIGIN).then(() => { + link.click(); + }); + }, + true +); + +function watchFirefoxNotificationDialogAndHide() { + const observer = new MutationObserver((mutations, obs) => { + const element = document.querySelector( + "div[data-alerts-channel='firefox-notifications']" + ); + if (element) { + element.style.display = "none"; + obs.disconnect(); // Stop observing once we've found and hidden the element + } + }); + + // Start observing the document. + observer.observe(document.body, { + childList: true, + subtree: true, + }); +} + +// Hide the Firefox error notification +const notificationElement = document.querySelector( + "div[data-alerts-channel='firefox-notifications']" +); +if (notificationElement) { + notificationElement.style.display = "none"; +} else { + // Add a listener to watch for the Firefox notification element to load. + window.addEventListener( + "DOMContentLoaded", + watchFirefoxNotificationDialogAndHide + ); +} diff -Nru firefox-esr-128.3.1esr/browser/locales/en-US/browser/policies/policies-descriptions.ftl firefox-esr-128.4.0esr/browser/locales/en-US/browser/policies/policies-descriptions.ftl --- firefox-esr-128.3.1esr/browser/locales/en-US/browser/policies/policies-descriptions.ftl 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/locales/en-US/browser/policies/policies-descriptions.ftl 2024-10-21 23:59:48.000000000 +0000 @@ -244,3 +244,5 @@ policy-WebsiteFilter = Block websites from being visited. See documentation for more details on the format. policy-Windows10SSO = Allow Windows single sign-on for Microsoft, work, and school accounts. + +policy-MicrosoftEntraSSO = Allow single sign-on for Microsoft Entra accounts. diff -Nru firefox-esr-128.3.1esr/browser/locales/en-US/chrome/browser/browser.properties firefox-esr-128.4.0esr/browser/locales/en-US/chrome/browser/browser.properties --- firefox-esr-128.3.1esr/browser/locales/en-US/chrome/browser/browser.properties 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/locales/en-US/chrome/browser/browser.properties 2024-10-21 23:59:48.000000000 +0000 @@ -193,11 +193,18 @@ geolocation.allow.accesskey=A geolocation.block=Block geolocation.block.accesskey=B +# %S is replaced by the product name (e.g. Firefox) +geolocation.needsSystemSetting=This will open system location settings. Please grant location permission to %S. geolocation.shareWithSite4=Allow %S to access your location? geolocation.shareWithFile4=Allow this local file to access your location? # LOCALIZATION NOTE(geolocation.shareWithSiteUnsafeDelegation2): # %1$S is the first party origin, %2$S is the third party origin. geolocation.shareWithSiteUnsafeDelegation2=Allow %1$S to give %2$S permission to access your location? +# %S is replaced by the product name (e.g. Firefox) +geolocation.systemSettingsMessage=Grant %S location permission in system settings. +geolocation.systemSettingsTitle=Awaiting Location Permission +# %S is replaced by the product name (e.g. Firefox) +geolocation.systemWillRequestPermission=The system will ask you to grant this permission to %S. geolocation.remember=Remember this decision # Virtual Reality Device UI diff -Nru firefox-esr-128.3.1esr/browser/locales/l10n-changesets.json firefox-esr-128.4.0esr/browser/locales/l10n-changesets.json --- firefox-esr-128.3.1esr/browser/locales/l10n-changesets.json 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/locales/l10n-changesets.json 2024-10-21 23:59:49.000000000 +0000 @@ -16,7 +16,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "af": { "pin": false, @@ -35,7 +35,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "an": { "pin": false, @@ -54,7 +54,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ar": { "pin": false, @@ -73,7 +73,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ast": { "pin": false, @@ -92,7 +92,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "az": { "pin": false, @@ -111,7 +111,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "be": { "pin": false, @@ -130,7 +130,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "bg": { "pin": false, @@ -149,7 +149,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "bn": { "pin": false, @@ -168,7 +168,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "br": { "pin": false, @@ -187,7 +187,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "bs": { "pin": false, @@ -206,7 +206,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ca": { "pin": false, @@ -225,7 +225,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ca-valencia": { "pin": false, @@ -244,7 +244,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "cak": { "pin": false, @@ -263,7 +263,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "cs": { "pin": false, @@ -282,7 +282,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "cy": { "pin": false, @@ -301,7 +301,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "da": { "pin": false, @@ -320,7 +320,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "de": { "pin": false, @@ -339,7 +339,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "dsb": { "pin": false, @@ -358,7 +358,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "el": { "pin": false, @@ -377,7 +377,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "en-CA": { "pin": false, @@ -396,7 +396,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "en-GB": { "pin": false, @@ -415,7 +415,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "eo": { "pin": false, @@ -434,7 +434,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "es-AR": { "pin": false, @@ -453,7 +453,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "es-CL": { "pin": false, @@ -472,7 +472,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "es-ES": { "pin": false, @@ -491,7 +491,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "es-MX": { "pin": false, @@ -510,7 +510,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "et": { "pin": false, @@ -529,7 +529,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "eu": { "pin": false, @@ -548,7 +548,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "fa": { "pin": false, @@ -567,7 +567,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ff": { "pin": false, @@ -586,7 +586,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "fi": { "pin": false, @@ -605,7 +605,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "fr": { "pin": false, @@ -624,7 +624,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "fur": { "pin": false, @@ -643,7 +643,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "fy-NL": { "pin": false, @@ -662,7 +662,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ga-IE": { "pin": false, @@ -681,7 +681,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "gd": { "pin": false, @@ -700,7 +700,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "gl": { "pin": false, @@ -719,7 +719,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "gn": { "pin": false, @@ -738,7 +738,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "gu-IN": { "pin": false, @@ -757,7 +757,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "he": { "pin": false, @@ -776,7 +776,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "hi-IN": { "pin": false, @@ -795,7 +795,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "hr": { "pin": false, @@ -814,7 +814,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "hsb": { "pin": false, @@ -833,7 +833,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "hu": { "pin": false, @@ -852,7 +852,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "hy-AM": { "pin": false, @@ -871,7 +871,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ia": { "pin": false, @@ -890,7 +890,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "id": { "pin": false, @@ -909,7 +909,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "is": { "pin": false, @@ -928,7 +928,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "it": { "pin": false, @@ -947,7 +947,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ja": { "pin": false, @@ -964,7 +964,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ja-JP-mac": { "pin": false, @@ -972,7 +972,7 @@ "macosx64", "macosx64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ka": { "pin": false, @@ -991,7 +991,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "kab": { "pin": false, @@ -1010,7 +1010,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "kk": { "pin": false, @@ -1029,7 +1029,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "km": { "pin": false, @@ -1048,7 +1048,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "kn": { "pin": false, @@ -1067,7 +1067,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ko": { "pin": false, @@ -1086,7 +1086,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "lij": { "pin": false, @@ -1105,7 +1105,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "lt": { "pin": false, @@ -1124,7 +1124,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "lv": { "pin": false, @@ -1143,7 +1143,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "mk": { "pin": false, @@ -1162,7 +1162,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "mr": { "pin": false, @@ -1181,7 +1181,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ms": { "pin": false, @@ -1200,7 +1200,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "my": { "pin": false, @@ -1219,7 +1219,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "nb-NO": { "pin": false, @@ -1238,7 +1238,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ne-NP": { "pin": false, @@ -1257,7 +1257,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "nl": { "pin": false, @@ -1276,7 +1276,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "nn-NO": { "pin": false, @@ -1295,7 +1295,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "oc": { "pin": false, @@ -1314,7 +1314,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "pa-IN": { "pin": false, @@ -1333,7 +1333,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "pl": { "pin": false, @@ -1352,7 +1352,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "pt-BR": { "pin": false, @@ -1371,7 +1371,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "pt-PT": { "pin": false, @@ -1390,7 +1390,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "rm": { "pin": false, @@ -1409,7 +1409,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ro": { "pin": false, @@ -1428,7 +1428,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ru": { "pin": false, @@ -1447,7 +1447,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "sat": { "pin": false, @@ -1466,7 +1466,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "sc": { "pin": false, @@ -1485,7 +1485,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "sco": { "pin": false, @@ -1504,7 +1504,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "si": { "pin": false, @@ -1523,7 +1523,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "sk": { "pin": false, @@ -1542,7 +1542,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "skr": { "pin": false, @@ -1561,7 +1561,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "sl": { "pin": false, @@ -1580,7 +1580,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "son": { "pin": false, @@ -1599,7 +1599,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "sq": { "pin": false, @@ -1618,7 +1618,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "sr": { "pin": false, @@ -1637,7 +1637,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "sv-SE": { "pin": false, @@ -1656,7 +1656,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "szl": { "pin": false, @@ -1675,7 +1675,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ta": { "pin": false, @@ -1694,7 +1694,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "te": { "pin": false, @@ -1713,7 +1713,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "tg": { "pin": false, @@ -1732,7 +1732,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "th": { "pin": false, @@ -1751,7 +1751,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "tl": { "pin": false, @@ -1770,7 +1770,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "tr": { "pin": false, @@ -1789,7 +1789,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "trs": { "pin": false, @@ -1808,7 +1808,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "uk": { "pin": false, @@ -1827,7 +1827,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "ur": { "pin": false, @@ -1846,7 +1846,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "uz": { "pin": false, @@ -1865,7 +1865,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "vi": { "pin": false, @@ -1884,7 +1884,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "xh": { "pin": false, @@ -1903,7 +1903,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "zh-CN": { "pin": false, @@ -1922,7 +1922,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" }, "zh-TW": { "pin": false, @@ -1941,6 +1941,6 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eded3303744e8f5ca85f0d14710f198cd77fd23f" + "revision": "878fe6f256d52c7e5b0205b07b061829ccde4f17" } -} +} \ No newline at end of file diff -Nru firefox-esr-128.3.1esr/browser/modules/PermissionUI.sys.mjs firefox-esr-128.4.0esr/browser/modules/PermissionUI.sys.mjs --- firefox-esr-128.3.1esr/browser/modules/PermissionUI.sys.mjs 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/modules/PermissionUI.sys.mjs 2024-10-21 23:59:48.000000000 +0000 @@ -86,6 +86,13 @@ "@mozilla.org/content-pref/service;1", "nsIContentPrefService2" ); + +ChromeUtils.defineLazyGetter(lazy, "gBrandBundle", function () { + return Services.strings.createBundle( + "chrome://branding/locale/brand.properties" + ); +}); + ChromeUtils.defineLazyGetter(lazy, "gBrowserBundle", function () { return Services.strings.createBundle( "chrome://browser/locale/browser.properties" @@ -252,6 +259,17 @@ } /** + * The hint text to show to the user in the PopupNotification, see + * `PopupNotifications_show` in PopupNotifications.sys.mjs. + * By default, no hint is shown. + * + * @return {string} + */ + get hintText() { + return undefined; + } + + /** * Provides the preferred name to use in the permission popups, * based on the principal URI (the URI.hostPort for any URI scheme * besides the moz-extension one which should default to the @@ -616,6 +634,7 @@ return false; }; + options.hintText = this.hintText; // Post-prompts show up as dismissed. options.dismissed = postPrompt; @@ -741,6 +760,14 @@ constructor(request) { super(); this.request = request; + let types = request.types.QueryInterface(Ci.nsIArray); + let perm = types.queryElementAt(0, Ci.nsIContentPermissionType); + if (perm.options.length) { + this.systemPermissionMsg = perm.options.queryElementAt( + 0, + Ci.nsISupportsString + ); + } } get type() { @@ -809,6 +836,26 @@ ); } + get hintText() { + let productName = lazy.gBrandBundle.GetStringFromName("brandShortName"); + + if (this.systemPermissionMsg == "sysdlg") { + return lazy.gBrowserBundle.formatStringFromName( + "geolocation.systemWillRequestPermission", + [productName] + ); + } + + if (this.systemPermissionMsg == "syssetting") { + return lazy.gBrowserBundle.formatStringFromName( + "geolocation.needsSystemSetting", + [productName] + ); + } + + return undefined; + } + get promptActions() { return [ { diff -Nru firefox-esr-128.3.1esr/browser/themes/shared/jar.inc.mn firefox-esr-128.4.0esr/browser/themes/shared/jar.inc.mn --- firefox-esr-128.3.1esr/browser/themes/shared/jar.inc.mn 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/themes/shared/jar.inc.mn 2024-10-21 23:59:49.000000000 +0000 @@ -221,7 +221,6 @@ skin/classic/browser/tabbrowser/crashed.svg (../shared/tabbrowser/crashed.svg) skin/classic/browser/tabbrowser/ctrlTab.css (../shared/tabbrowser/ctrlTab.css) skin/classic/browser/tabbrowser/fullscreen-and-pointerlock.css (../shared/tabbrowser/fullscreen-and-pointerlock.css) - skin/classic/browser/tabbrowser/hourglass.svg (../shared/tabbrowser/hourglass.svg) skin/classic/browser/tabbrowser/loading.svg (../shared/tabbrowser/loading.svg) skin/classic/browser/tabbrowser/loading-burst.svg (../shared/tabbrowser/loading-burst.svg) skin/classic/browser/tabbrowser/pendingpaint.png (../shared/tabbrowser/pendingpaint.png) diff -Nru firefox-esr-128.3.1esr/browser/themes/shared/migration/migration-wizard.css firefox-esr-128.4.0esr/browser/themes/shared/migration/migration-wizard.css --- firefox-esr-128.3.1esr/browser/themes/shared/migration/migration-wizard.css 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/themes/shared/migration/migration-wizard.css 2024-10-21 23:59:48.000000000 +0000 @@ -294,7 +294,7 @@ @media (prefers-reduced-motion: reduce) { .progress-icon[state="loading"] { - content: url("chrome://browser/skin/tabbrowser/hourglass.svg"); + content: url("chrome://global/skin/icons/loading.svg"); fill: var(--text-color-deemphasized); } } diff -Nru firefox-esr-128.3.1esr/browser/themes/shared/tabbrowser/content-area.css firefox-esr-128.4.0esr/browser/themes/shared/tabbrowser/content-area.css --- firefox-esr-128.3.1esr/browser/themes/shared/tabbrowser/content-area.css 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/themes/shared/tabbrowser/content-area.css 2024-10-21 23:59:48.000000000 +0000 @@ -220,6 +220,13 @@ padding: 0; overflow-x: auto; + /* Ensure that dialog boxes are pixel-snapped, to keep their internal layout + * consistent, regardless of whether the surrounding layout places them at a + * fractional position. (This helps prevent arbitrary 1px shifts that could + * otherwise appear inside of a vertically-centered dialog when the + * viewport-height changes from being odd to even.) */ + will-change: transform; + &:not(.spotlightBox) { box-shadow: 0 2px 14px 0 rgba(0, 0, 0, 0.2); border-radius: 8px; diff -Nru firefox-esr-128.3.1esr/browser/themes/shared/tabbrowser/hourglass.svg firefox-esr-128.4.0esr/browser/themes/shared/tabbrowser/hourglass.svg --- firefox-esr-128.3.1esr/browser/themes/shared/tabbrowser/hourglass.svg 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/themes/shared/tabbrowser/hourglass.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ - - - - - - - diff -Nru firefox-esr-128.3.1esr/browser/themes/shared/tabbrowser/tabs.css firefox-esr-128.4.0esr/browser/themes/shared/tabbrowser/tabs.css --- firefox-esr-128.3.1esr/browser/themes/shared/tabbrowser/tabs.css 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/themes/shared/tabbrowser/tabs.css 2024-10-21 23:59:48.000000000 +0000 @@ -255,7 +255,7 @@ } @media (prefers-reduced-motion: reduce) { - background-image: url("chrome://browser/skin/tabbrowser/hourglass.svg"); + background-image: url("chrome://global/skin/icons/loading.svg"); background-position: center; background-repeat: no-repeat; -moz-context-properties: fill; @@ -930,7 +930,7 @@ @media (prefers-reduced-motion: reduce) { &[busy] { - list-style-image: url("chrome://browser/skin/tabbrowser/hourglass.svg"); + list-style-image: url("chrome://global/skin/icons/loading.svg"); -moz-context-properties: fill; fill: currentColor; opacity: 0.4; diff -Nru firefox-esr-128.3.1esr/browser/themes/shared/urlbar-searchbar.css firefox-esr-128.4.0esr/browser/themes/shared/urlbar-searchbar.css --- firefox-esr-128.3.1esr/browser/themes/shared/urlbar-searchbar.css 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/browser/themes/shared/urlbar-searchbar.css 2024-10-21 23:59:49.000000000 +0000 @@ -837,17 +837,6 @@ /* Translations button */ -@keyframes translationsRotate { - from { transform: rotate(0); } - to { transform: rotate(360deg); } -} - -@media not (prefers-reduced-motion) { - #translations-button-circle-arrows { - animation: translationsRotate 1.2s linear infinite; - } -} - #translations-button-icon { list-style-image: url(chrome://browser/skin/translations.svg); /* The translation icon's right letter is 1px too long, so account for that here. @@ -863,7 +852,7 @@ #translations-button-circle-arrows { height: 16px; width: 16px; - list-style-image: url("chrome://browser/skin/sync.svg"); + list-style-image: url("chrome://global/skin/icons/loading.svg"); fill: var(--toolbarbutton-icon-fill-attention); fill-opacity: 1; margin-inline: 1px; diff -Nru firefox-esr-128.3.1esr/build/zstandard_requirements.in firefox-esr-128.4.0esr/build/zstandard_requirements.in --- firefox-esr-128.3.1esr/build/zstandard_requirements.in 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/build/zstandard_requirements.in 2024-10-21 23:59:48.000000000 +0000 @@ -1,2 +1,2 @@ -zstandard==0.22.0 +zstandard==0.23.0 diff -Nru firefox-esr-128.3.1esr/build/zstandard_requirements.txt firefox-esr-128.4.0esr/build/zstandard_requirements.txt --- firefox-esr-128.3.1esr/build/zstandard_requirements.txt 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/build/zstandard_requirements.txt 2024-10-21 23:59:48.000000000 +0000 @@ -4,51 +4,102 @@ # # pip-compile --generate-hashes --output-file=build/zstandard_requirements.txt build/zstandard_requirements.in # -zstandard==0.22.0 \ - --hash=sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd \ - --hash=sha256:1958100b8a1cc3f27fa21071a55cb2ed32e9e5df4c3c6e661c193437f171cba2 \ - --hash=sha256:1a90ba9a4c9c884bb876a14be2b1d216609385efb180393df40e5172e7ecf356 \ - --hash=sha256:1d43501f5f31e22baf822720d82b5547f8a08f5386a883b32584a185675c8fbf \ - --hash=sha256:23d2b3c2b8e7e5a6cb7922f7c27d73a9a615f0a5ab5d0e03dd533c477de23004 \ - --hash=sha256:2612e9bb4977381184bb2463150336d0f7e014d6bb5d4a370f9a372d21916f69 \ - --hash=sha256:275df437ab03f8c033b8a2c181e51716c32d831082d93ce48002a5227ec93019 \ - --hash=sha256:2ac9957bc6d2403c4772c890916bf181b2653640da98f32e04b96e4d6fb3252a \ - --hash=sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440 \ - --hash=sha256:2fdd53b806786bd6112d97c1f1e7841e5e4daa06810ab4b284026a1a0e484c0b \ - --hash=sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775 \ - --hash=sha256:36a47636c3de227cd765e25a21dc5dace00539b82ddd99ee36abae38178eff9e \ - --hash=sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc \ - --hash=sha256:3db41c5e49ef73641d5111554e1d1d3af106410a6c1fb52cf68912ba7a343a0d \ - --hash=sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09 \ - --hash=sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c \ - --hash=sha256:48f260e4c7294ef275744210a4010f116048e0c95857befb7462e033f09442fe \ - --hash=sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88 \ - --hash=sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94 \ - --hash=sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08 \ - --hash=sha256:68953dc84b244b053c0d5f137a21ae8287ecf51b20872eccf8eaac0302d3e3b0 \ - --hash=sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a \ - --hash=sha256:7034d381789f45576ec3f1fa0e15d741828146439228dc3f7c59856c5bcd3292 \ - --hash=sha256:73a1d6bd01961e9fd447162e137ed949c01bdb830dfca487c4a14e9742dccc93 \ - --hash=sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70 \ - --hash=sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8 \ - --hash=sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2 \ - --hash=sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45 \ - --hash=sha256:93e1856c8313bc688d5df069e106a4bc962eef3d13372020cc6e3ebf5e045202 \ - --hash=sha256:9501f36fac6b875c124243a379267d879262480bf85b1dbda61f5ad4d01b75a3 \ - --hash=sha256:959665072bd60f45c5b6b5d711f15bdefc9849dd5da9fb6c873e35f5d34d8cfb \ - --hash=sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4 \ - --hash=sha256:a493d470183ee620a3df1e6e55b3e4de8143c0ba1b16f3ded83208ea8ddfd91d \ - --hash=sha256:a7ccf5825fd71d4542c8ab28d4d482aace885f5ebe4b40faaa290eed8e095a4c \ - --hash=sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f \ - --hash=sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26 \ - --hash=sha256:d22fdef58976457c65e2796e6730a3ea4a254f3ba83777ecfc8592ff8d77d303 \ - --hash=sha256:d75f693bb4e92c335e0645e8845e553cd09dc91616412d1d4650da835b5449df \ - --hash=sha256:d8593f8464fb64d58e8cb0b905b272d40184eac9a18d83cf8c10749c3eafcd7e \ - --hash=sha256:d8fff0f0c1d8bc5d866762ae95bd99d53282337af1be9dc0d88506b340e74b73 \ - --hash=sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c \ - --hash=sha256:e9e9d4e2e336c529d4c435baad846a181e39a982f823f7e4495ec0b0ec8538d2 \ - --hash=sha256:f058a77ef0ece4e210bb0450e68408d4223f728b109764676e1a13537d056bb0 \ - --hash=sha256:f1a4b358947a65b94e2501ce3e078bbc929b039ede4679ddb0460829b12f7375 \ - --hash=sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912 \ - --hash=sha256:fe3390c538f12437b859d815040763abc728955a52ca6ff9c5d4ac707c4ad98e +zstandard==0.23.0 \ + --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ + --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ + --hash=sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15 \ + --hash=sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072 \ + --hash=sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4 \ + --hash=sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e \ + --hash=sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26 \ + --hash=sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 \ + --hash=sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5 \ + --hash=sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd \ + --hash=sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c \ + --hash=sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db \ + --hash=sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5 \ + --hash=sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc \ + --hash=sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152 \ + --hash=sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269 \ + --hash=sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045 \ + --hash=sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e \ + --hash=sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d \ + --hash=sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a \ + --hash=sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb \ + --hash=sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740 \ + --hash=sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105 \ + --hash=sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274 \ + --hash=sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2 \ + --hash=sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58 \ + --hash=sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b \ + --hash=sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4 \ + --hash=sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db \ + --hash=sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e \ + --hash=sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9 \ + --hash=sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0 \ + --hash=sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813 \ + --hash=sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e \ + --hash=sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512 \ + --hash=sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0 \ + --hash=sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b \ + --hash=sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48 \ + --hash=sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a \ + --hash=sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772 \ + --hash=sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed \ + --hash=sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373 \ + --hash=sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea \ + --hash=sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd \ + --hash=sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f \ + --hash=sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc \ + --hash=sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23 \ + --hash=sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2 \ + --hash=sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db \ + --hash=sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70 \ + --hash=sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259 \ + --hash=sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9 \ + --hash=sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700 \ + --hash=sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003 \ + --hash=sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba \ + --hash=sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a \ + --hash=sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c \ + --hash=sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90 \ + --hash=sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690 \ + --hash=sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f \ + --hash=sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840 \ + --hash=sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d \ + --hash=sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9 \ + --hash=sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35 \ + --hash=sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd \ + --hash=sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a \ + --hash=sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea \ + --hash=sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1 \ + --hash=sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573 \ + --hash=sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09 \ + --hash=sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094 \ + --hash=sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78 \ + --hash=sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9 \ + --hash=sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5 \ + --hash=sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9 \ + --hash=sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391 \ + --hash=sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847 \ + --hash=sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2 \ + --hash=sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c \ + --hash=sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2 \ + --hash=sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057 \ + --hash=sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20 \ + --hash=sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d \ + --hash=sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4 \ + --hash=sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54 \ + --hash=sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171 \ + --hash=sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e \ + --hash=sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160 \ + --hash=sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b \ + --hash=sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58 \ + --hash=sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8 \ + --hash=sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33 \ + --hash=sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a \ + --hash=sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880 \ + --hash=sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca \ + --hash=sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b \ + --hash=sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69 # via -r build/zstandard_requirements.in diff -Nru firefox-esr-128.3.1esr/config/milestone.txt firefox-esr-128.4.0esr/config/milestone.txt --- firefox-esr-128.3.1esr/config/milestone.txt 2024-10-08 21:18:25.000000000 +0000 +++ firefox-esr-128.4.0esr/config/milestone.txt 2024-10-21 23:59:48.000000000 +0000 @@ -10,4 +10,4 @@ # hardcoded milestones in the tree from these two files. #-------------------------------------------------------- -128.3.1 +128.4.0 diff -Nru firefox-esr-128.3.1esr/debian/changelog firefox-esr-128.4.0esr/debian/changelog --- firefox-esr-128.3.1esr/debian/changelog 2024-10-09 21:42:03.000000000 +0000 +++ firefox-esr-128.4.0esr/debian/changelog 2024-10-29 21:15:11.000000000 +0000 @@ -1,3 +1,13 @@ +firefox-esr (128.4.0esr-1~deb12u1) bookworm-security; urgency=medium + + * New upstream release. + * Fixes for mfsa2024-56, also known as: + CVE-2024-10458, CVE-2024-10459, CVE-2024-10460, CVE-2024-10461, + CVE-2024-10462, CVE-2024-10463, CVE-2024-10464, CVE-2024-10465, + CVE-2024-10466, CVE-2024-10467. + + -- Mike Hommey Wed, 30 Oct 2024 06:15:11 +0900 + firefox-esr (128.3.1esr-1~deb12u1) bookworm-security; urgency=medium * New upstream release. diff -Nru firefox-esr-128.3.1esr/devtools/client/responsive/responsive-browser.css firefox-esr-128.4.0esr/devtools/client/responsive/responsive-browser.css --- firefox-esr-128.3.1esr/devtools/client/responsive/responsive-browser.css 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/devtools/client/responsive/responsive-browser.css 2024-10-21 23:59:49.000000000 +0000 @@ -31,7 +31,7 @@ * The .rdm-toolbar will be above the .dialogBox in RDM so we shift the * .dialogBox down by the height of the .rdm-toolbar so both are visible */ - + .browserStack > .dialogStack > .dialogTemplate > .dialogBox { + + .browserStack > .dialogStack:not(.content-prompt-dialog) > .dialogTemplate > .dialogBox { margin-top: var(--rdm-toolbar-height); } } diff -Nru firefox-esr-128.3.1esr/devtools/server/tests/chrome/test_css-properties.html firefox-esr-128.4.0esr/devtools/server/tests/chrome/test_css-properties.html --- firefox-esr-128.3.1esr/devtools/server/tests/chrome/test_css-properties.html 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/devtools/server/tests/chrome/test_css-properties.html 2024-10-21 23:59:48.000000000 +0000 @@ -51,6 +51,17 @@ "A property with color values includes papayawhip."); ok(bgColorValues.includes("rgb"), "A property with color values includes non-colors."); + + // Check that the "special" shorthands for white-space are exposed. + const whiteSpaceValues = cssProperties.getValues("white-space"); + ok(whiteSpaceValues.includes("normal"), + "Values for the white-space shorthand include normal."); + ok(whiteSpaceValues.includes("pre"), + "Values for the white-space shorthand include pre."); + ok(whiteSpaceValues.includes("pre-line"), + "Values for the white-space shorthand include pre-line."); + ok(whiteSpaceValues.includes("pre-wrap"), + "Values for the white-space shorthand include pre-wrap."); }; addAsyncTest(async function setup() { diff -Nru firefox-esr-128.3.1esr/docshell/base/BrowsingContext.cpp firefox-esr-128.4.0esr/docshell/base/BrowsingContext.cpp --- firefox-esr-128.3.1esr/docshell/base/BrowsingContext.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/docshell/base/BrowsingContext.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -1958,6 +1958,17 @@ "Targeting occurs in InternalLoad"); aLoadState->AssertProcessCouldTriggerLoadIfSystem(); + // When this tab sets these load flags, we disable or force TRR for the + // browsing context ensuring subsequent navigations will keep the same + // TRR mode. + if (aLoadState->HasLoadFlags(nsIWebNavigation::LOAD_FLAGS_DISABLE_TRR)) { + Unused << SetDefaultLoadFlags(GetDefaultLoadFlags() | + nsIRequest::LOAD_TRR_DISABLED_MODE); + } else if (aLoadState->HasLoadFlags(nsIWebNavigation::LOAD_FLAGS_FORCE_TRR)) { + Unused << SetDefaultLoadFlags(GetDefaultLoadFlags() | + nsIRequest::LOAD_TRR_ONLY_MODE); + } + if (mDocShell) { nsCOMPtr docShell = mDocShell; return docShell->LoadURI(aLoadState, aSetNavigating); @@ -3772,7 +3783,7 @@ (IsForceReloadType(aLoadType) && IsSubframe())); } -nsresult BrowsingContext::CheckLocationChangeRateLimit(CallerType aCallerType) { +nsresult BrowsingContext::CheckNavigationRateLimit(CallerType aCallerType) { // We only rate limit non system callers if (aCallerType == CallerType::System) { return NS_OK; @@ -3780,9 +3791,9 @@ // Fetch rate limiting preferences uint32_t limitCount = - StaticPrefs::dom_navigation_locationChangeRateLimit_count(); + StaticPrefs::dom_navigation_navigationRateLimit_count(); uint32_t timeSpanSeconds = - StaticPrefs::dom_navigation_locationChangeRateLimit_timespan(); + StaticPrefs::dom_navigation_navigationRateLimit_timespan(); // Disable throttling if either of the preferences is set to 0. if (limitCount == 0 || timeSpanSeconds == 0) { @@ -3791,15 +3802,15 @@ TimeDuration throttleSpan = TimeDuration::FromSeconds(timeSpanSeconds); - if (mLocationChangeRateLimitSpanStart.IsNull() || - ((TimeStamp::Now() - mLocationChangeRateLimitSpanStart) > throttleSpan)) { + if (mNavigationRateLimitSpanStart.IsNull() || + ((TimeStamp::Now() - mNavigationRateLimitSpanStart) > throttleSpan)) { // Initial call or timespan exceeded, reset counter and timespan. - mLocationChangeRateLimitSpanStart = TimeStamp::Now(); - mLocationChangeRateLimitCount = 1; + mNavigationRateLimitSpanStart = TimeStamp::Now(); + mNavigationRateLimitCount = 1; return NS_OK; } - if (mLocationChangeRateLimitCount >= limitCount) { + if (mNavigationRateLimitCount >= limitCount) { // Rate limit reached Document* doc = GetDocument(); @@ -3812,14 +3823,14 @@ return NS_ERROR_DOM_SECURITY_ERR; } - mLocationChangeRateLimitCount++; + mNavigationRateLimitCount++; return NS_OK; } -void BrowsingContext::ResetLocationChangeRateLimit() { +void BrowsingContext::ResetNavigationRateLimit() { // Resetting the timestamp object will cause the check function to // init again and reset the rate limit. - mLocationChangeRateLimitSpanStart = TimeStamp(); + mNavigationRateLimitSpanStart = TimeStamp(); } void BrowsingContext::LocationCreated(dom::Location* aLocation) { diff -Nru firefox-esr-128.3.1esr/docshell/base/BrowsingContext.h firefox-esr-128.4.0esr/docshell/base/BrowsingContext.h --- firefox-esr-128.3.1esr/docshell/base/BrowsingContext.h 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/docshell/base/BrowsingContext.h 2024-10-21 23:59:49.000000000 +0000 @@ -898,13 +898,13 @@ // Checks if we reached the rate limit for calls to Location and History API. // The rate limit is controlled by the - // "dom.navigation.locationChangeRateLimit" prefs. + // "dom.navigation.navigationRateLimit" prefs. // Rate limit applies per BrowsingContext. // Returns NS_OK if we are below the rate limit and increments the counter. // Returns NS_ERROR_DOM_SECURITY_ERR if limit is reached. - nsresult CheckLocationChangeRateLimit(CallerType aCallerType); + nsresult CheckNavigationRateLimit(CallerType aCallerType); - void ResetLocationChangeRateLimit(); + void ResetNavigationRateLimit(); mozilla::dom::DisplayMode DisplayMode() { return Top()->GetDisplayMode(); } @@ -1432,9 +1432,9 @@ nsTArray> mDiscardListeners; // Counter and time span for rate limiting Location and History API calls. - // Used by CheckLocationChangeRateLimit. Do not apply cross-process. - uint32_t mLocationChangeRateLimitCount; - mozilla::TimeStamp mLocationChangeRateLimitSpanStart; + // Used by CheckNavigationRateLimit. Do not apply cross-process. + uint32_t mNavigationRateLimitCount; + mozilla::TimeStamp mNavigationRateLimitSpanStart; mozilla::LinkedList mLocations; }; diff -Nru firefox-esr-128.3.1esr/docshell/base/CanonicalBrowsingContext.cpp firefox-esr-128.4.0esr/docshell/base/CanonicalBrowsingContext.cpp --- firefox-esr-128.3.1esr/docshell/base/CanonicalBrowsingContext.cpp 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/docshell/base/CanonicalBrowsingContext.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -337,9 +337,11 @@ txn.SetForceDesktopViewport(GetForceDesktopViewport()); txn.SetIsUnderHiddenEmbedderElement(GetIsUnderHiddenEmbedderElement()); - // When using site-specific zoom, we let the front-end manage it, otherwise it - // can cause weirdness like bug 1846141. - if (!StaticPrefs::browser_zoom_siteSpecific()) { + // When using site-specific zoom, we let the frontend manage the zoom level + // of BFCache'd contexts. Overriding those zoom levels can cause weirdness + // like bug 1846141. We always copy to new contexts to avoid bug 1914149. + if (!aNewContext->EverAttached() || + !StaticPrefs::browser_zoom_siteSpecific()) { txn.SetFullZoom(GetFullZoom()); txn.SetTextZoom(GetTextZoom()); } diff -Nru firefox-esr-128.3.1esr/docshell/base/nsDocShell.cpp firefox-esr-128.4.0esr/docshell/base/nsDocShell.cpp --- firefox-esr-128.3.1esr/docshell/base/nsDocShell.cpp 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/docshell/base/nsDocShell.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -9297,43 +9297,44 @@ // XXXbz mTiming should know what channel it's for, so we don't // need this hackery. - bool toBeReset = false; - bool isJavaScript = SchemeIsJavascript(aLoadState->URI()); - - if (!isJavaScript) { - toBeReset = MaybeInitTiming(); - } - bool isNotDownload = aLoadState->FileName().IsVoid(); - if (mTiming && isNotDownload) { + const bool isJavaScript = SchemeIsJavascript(aLoadState->URI()); + const bool isExternalProtocol = + nsContentUtils::IsExternalProtocol(aLoadState->URI()); + const bool isDownload = !aLoadState->FileName().IsVoid(); + const bool toBeReset = !isJavaScript && MaybeInitTiming(); + + // FIXME(emilio): Should this be done by javascript: uris? What about external + // protocols? + if (mTiming && !isDownload) { mTiming->NotifyBeforeUnload(); } // Check if the page doesn't want to be unloaded. The javascript: // protocol handler deals with this for javascript: URLs. - if (!isJavaScript && isNotDownload && + // NOTE(emilio): As of this writing, other browsers fire beforeunload for + // external protocols, so keep doing that even though they don't return data + // and thus we won't really unload this... + if (!isJavaScript && !isDownload && !aLoadState->NotifiedBeforeUnloadListeners() && mDocumentViewer) { - bool okToUnload; - // Check if request is exempted from HTTPSOnlyMode and if https-first is // enabled, if so it means: // * https-first failed to upgrade request to https // * we already asked for permission to unload and the user accepted // otherwise we wouldn't be here. - bool isPrivateWin = GetOriginAttributes().mPrivateBrowsingId > 0; - bool isHistoryOrReload = false; - uint32_t loadType = aLoadState->LoadType(); + const bool isPrivateWin = GetOriginAttributes().mPrivateBrowsingId > 0; + const uint32_t loadType = aLoadState->LoadType(); // Check if request is a reload. - if (loadType == LOAD_RELOAD_NORMAL || + const bool isHistoryOrReload = + loadType == LOAD_RELOAD_NORMAL || loadType == LOAD_RELOAD_BYPASS_CACHE || loadType == LOAD_RELOAD_BYPASS_PROXY || loadType == LOAD_RELOAD_BYPASS_PROXY_AND_CACHE || - loadType == LOAD_HISTORY) { - isHistoryOrReload = true; - } + loadType == LOAD_HISTORY; // If it isn't a reload, the request already failed to be upgraded and // https-first is enabled then don't ask the user again for permission to // unload and just unload. + bool okToUnload; if (!isHistoryOrReload && aLoadState->IsExemptFromHTTPSFirstMode() && nsHTTPSOnlyUtils::IsHttpsFirstModeEnabled(isPrivateWin)) { rv = mDocumentViewer->PermitUnload( @@ -9351,7 +9352,7 @@ } } - if (mTiming && isNotDownload) { + if (mTiming && !isDownload) { mTiming->NotifyUnloadAccepted(mCurrentURI); } @@ -9385,7 +9386,7 @@ // new request parameter. // Also pass nullptr for the document, since it doesn't affect the return // value for our purposes here. - bool savePresentation = + const bool savePresentation = CanSavePresentation(aLoadState->LoadType(), nullptr, nullptr, /* aReportBFCacheComboTelemetry */ true); @@ -9406,12 +9407,12 @@ } } - // Don't stop current network activity for javascript: URL's since - // they might not result in any data, and thus nothing should be - // stopped in those cases. In the case where they do result in - // data, the javascript: URL channel takes care of stopping - // current network activity. - if (!isJavaScript && isNotDownload) { + // Don't stop current network activity for javascript: URL's since they might + // not result in any data, and thus nothing should be stopped in those cases. + // In the case where they do result in data, the javascript: URL channel takes + // care of stopping current network activity. Similarly, downloads don't + // unload this document... + if (!isJavaScript && !isDownload && !isExternalProtocol) { // Stop any current network activity. // Also stop content if this is a zombie doc. otherwise // the onload will be delayed by other loads initiated in the @@ -9419,7 +9420,6 @@ // didn't fully load before the next load was initiated. // If not a zombie, don't stop content until data // starts arriving from the new URI... - if ((mDocumentViewer && mDocumentViewer->GetPreviousViewer()) || LOAD_TYPE_HAS_FLAGS(aLoadState->LoadType(), LOAD_FLAGS_STOP_CONTENT)) { rv = Stop(nsIWebNavigation::STOP_ALL); @@ -10428,7 +10428,7 @@ } nsLoadFlags loadFlags = aLoadState->CalculateChannelLoadFlags( - mBrowsingContext, Some(uriModified), Some(isEmbeddingBlockedError)); + mBrowsingContext, uriModified, Some(isEmbeddingBlockedError)); nsCOMPtr channel; if (DocumentChannel::CanUseDocumentChannel(aLoadState->URI()) && diff -Nru firefox-esr-128.3.1esr/docshell/base/nsDocShellLoadState.cpp firefox-esr-128.4.0esr/docshell/base/nsDocShellLoadState.cpp --- firefox-esr-128.3.1esr/docshell/base/nsDocShellLoadState.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/docshell/base/nsDocShellLoadState.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -1112,7 +1112,7 @@ } nsLoadFlags nsDocShellLoadState::CalculateChannelLoadFlags( - BrowsingContext* aBrowsingContext, Maybe aUriModified, + BrowsingContext* aBrowsingContext, bool aUriModified, Maybe aIsEmbeddingBlockedError) { MOZ_ASSERT(aBrowsingContext); @@ -1126,7 +1126,6 @@ const uint32_t loadType = LoadType(); // These values aren't available for loads initiated in the Parent process. - MOZ_ASSERT_IF(loadType == LOAD_HISTORY, aUriModified.isSome()); MOZ_ASSERT_IF(loadType == LOAD_ERROR_PAGE, aIsEmbeddingBlockedError.isSome()); if (loadType == LOAD_ERROR_PAGE) { @@ -1152,7 +1151,7 @@ case LOAD_HISTORY: { // Only send VALIDATE_NEVER if mLSHE's URI was never changed via // push/replaceState (bug 669671). - if (!*aUriModified) { + if (!aUriModified) { loadFlags |= nsIRequest::VALIDATE_NEVER; } break; diff -Nru firefox-esr-128.3.1esr/docshell/base/nsDocShellLoadState.h firefox-esr-128.4.0esr/docshell/base/nsDocShellLoadState.h --- firefox-esr-128.3.1esr/docshell/base/nsDocShellLoadState.h 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/docshell/base/nsDocShellLoadState.h 2024-10-21 23:59:48.000000000 +0000 @@ -370,8 +370,7 @@ // aIsEmbeddingBlockedError are expected to be Nothing when called from parent // process. nsLoadFlags CalculateChannelLoadFlags( - mozilla::dom::BrowsingContext* aBrowsingContext, - mozilla::Maybe aUriModified, + mozilla::dom::BrowsingContext* aBrowsingContext, bool aUriModified, mozilla::Maybe aIsEmbeddingBlockedError); mozilla::dom::DocShellLoadStateInit Serialize( diff -Nru firefox-esr-128.3.1esr/docshell/base/nsIWebNavigation.idl firefox-esr-128.4.0esr/docshell/base/nsIWebNavigation.idl --- firefox-esr-128.3.1esr/docshell/base/nsIWebNavigation.idl 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/docshell/base/nsIWebNavigation.idl 2024-10-21 23:59:49.000000000 +0000 @@ -253,7 +253,10 @@ const unsigned long LOAD_FLAGS_IS_REDIRECT = 0x800000; /** - * These flags force TRR modes 1 or 3 for the load. + * These flags force TRR_DISABLED_MODE or TRR_ONLY_MODE on the + * browsingContext's defaultLoadFlags. + * The basic use case for this is the captive portal login tab + * that needs skip TRR even when the browser defaults to TRR-only mode. */ const unsigned long LOAD_FLAGS_DISABLE_TRR = 0x1000000; const unsigned long LOAD_FLAGS_FORCE_TRR = 0x2000000; diff -Nru firefox-esr-128.3.1esr/docshell/shistory/ChildSHistory.cpp firefox-esr-128.4.0esr/docshell/shistory/ChildSHistory.cpp --- firefox-esr-128.3.1esr/docshell/shistory/ChildSHistory.cpp 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/docshell/shistory/ChildSHistory.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -177,7 +177,7 @@ MOZ_LOG(gSHLog, LogLevel::Debug, ("ChildSHistory::AsyncGo(%d), current index = %d", aOffset, index.value())); - nsresult rv = mBrowsingContext->CheckLocationChangeRateLimit(aCallerType); + nsresult rv = mBrowsingContext->CheckNavigationRateLimit(aCallerType); if (NS_FAILED(rv)) { MOZ_LOG(gSHLog, LogLevel::Debug, ("Rejected")); aRv.Throw(rv); diff -Nru firefox-esr-128.3.1esr/docshell/test/navigation/test_rate_limit_location_change.html firefox-esr-128.4.0esr/docshell/test/navigation/test_rate_limit_location_change.html --- firefox-esr-128.3.1esr/docshell/test/navigation/test_rate_limit_location_change.html 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/docshell/test/navigation/test_rate_limit_location_change.html 2024-10-21 23:59:49.000000000 +0000 @@ -17,8 +17,8 @@ async function setup() { await SpecialPowers.pushPrefEnv({set: [ - ["dom.navigation.locationChangeRateLimit.count", RATE_LIMIT_COUNT], - ["dom.navigation.locationChangeRateLimit.timespan", RATE_LIMIT_TIME_SPAN]]}); + ["dom.navigation.navigationRateLimit.count", RATE_LIMIT_COUNT], + ["dom.navigation.navigationRateLimit.timespan", RATE_LIMIT_TIME_SPAN]]}); } let inc = 0; @@ -26,6 +26,7 @@ const rateLimitedFunctions = (win) => ({ "history.replaceState": () => win.history.replaceState(null, "test", `${win.location.href}#${inc++}`), "history.pushState": () => win.history.pushState(null, "test", `${win.location.href}#${inc++}`), + "history.SetScrollRestoration": () => win.history.scrollRestoration = "auto", "history.back": () => win.history.back(), "history.forward": () => win.history.forward(), "history.go": () => win.history.go(-1), @@ -53,7 +54,7 @@ Object.entries(rateLimitedFunctions(win)).forEach(([name, fn]) => { // Reset the rate limit for the next run. info("Reset rate limit."); - SpecialPowers.wrap(win).browsingContext.resetLocationChangeRateLimit(); + SpecialPowers.wrap(win).browsingContext.resetNavigationRateLimit(); info(`Calling ${name} ${RATE_LIMIT_COUNT} times to reach the rate limit.`); for(let i = 0; i< RATE_LIMIT_COUNT; i++) { @@ -83,7 +84,7 @@ // Cleanup win.close(); - SpecialPowers.wrap(win).browsingContext.resetLocationChangeRateLimit(); + SpecialPowers.wrap(win).browsingContext.resetNavigationRateLimit(); SimpleTest.finish(); } diff -Nru firefox-esr-128.3.1esr/dom/base/Location.cpp firefox-esr-128.4.0esr/dom/base/Location.cpp --- firefox-esr-128.3.1esr/dom/base/Location.cpp 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/base/Location.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -562,7 +562,7 @@ ? CallerType::System : CallerType::NonSystem; - nsresult rv = bc->CheckLocationChangeRateLimit(callerType); + nsresult rv = bc->CheckNavigationRateLimit(callerType); if (NS_FAILED(rv)) { aRv.Throw(rv); return; diff -Nru firefox-esr-128.3.1esr/dom/base/LocationBase.cpp firefox-esr-128.4.0esr/dom/base/LocationBase.cpp --- firefox-esr-128.3.1esr/dom/base/LocationBase.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/base/LocationBase.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -125,7 +125,7 @@ ? CallerType::System : CallerType::NonSystem; - nsresult rv = bc->CheckLocationChangeRateLimit(callerType); + nsresult rv = bc->CheckNavigationRateLimit(callerType); if (NS_FAILED(rv)) { aRv.Throw(rv); return; diff -Nru firefox-esr-128.3.1esr/dom/base/nsHistory.cpp firefox-esr-128.4.0esr/dom/base/nsHistory.cpp --- firefox-esr-128.3.1esr/dom/base/nsHistory.cpp 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/base/nsHistory.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -72,7 +72,7 @@ return len >= 0 ? len : 0; } -ScrollRestoration nsHistory::GetScrollRestoration(mozilla::ErrorResult& aRv) { +ScrollRestoration nsHistory::GetScrollRestoration(mozilla::dom::CallerType aCallerType, mozilla::ErrorResult& aRv) { nsCOMPtr win(do_QueryReferent(mInnerWindow)); if (!win || !win->HasActiveDocument() || !win->GetDocShell()) { aRv.Throw(NS_ERROR_DOM_SECURITY_ERR); @@ -88,6 +88,7 @@ } void nsHistory::SetScrollRestoration(mozilla::dom::ScrollRestoration aMode, + mozilla::dom::CallerType aCallerType, mozilla::ErrorResult& aRv) { nsCOMPtr win(do_QueryReferent(mInnerWindow)); if (!win || !win->HasActiveDocument() || !win->GetDocShell()) { @@ -95,6 +96,15 @@ return; } + BrowsingContext* bc = win->GetBrowsingContext(); + if (bc) { + nsresult rv = bc->CheckNavigationRateLimit(aCallerType); + if (NS_FAILED(rv)) { + aRv.Throw(rv); + return; + } + } + win->GetDocShell()->SetCurrentScrollRestorationIsManual( aMode == mozilla::dom::ScrollRestoration::Manual); } @@ -152,7 +162,7 @@ ? CallerType::System : CallerType::NonSystem; - // AsyncGo throws if we hit the location change rate limit. + // AsyncGo throws if we hit the navigation rate limit. session_history->AsyncGo(aDelta, /* aRequireUserInteraction = */ false, userActivation, callerType, aRv); } @@ -237,7 +247,7 @@ BrowsingContext* bc = win->GetBrowsingContext(); if (bc) { - nsresult rv = bc->CheckLocationChangeRateLimit(aCallerType); + nsresult rv = bc->CheckNavigationRateLimit(aCallerType); if (NS_FAILED(rv)) { aRv.Throw(rv); return; diff -Nru firefox-esr-128.3.1esr/dom/base/nsHistory.h firefox-esr-128.4.0esr/dom/base/nsHistory.h --- firefox-esr-128.3.1esr/dom/base/nsHistory.h 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/base/nsHistory.h 2024-10-21 23:59:49.000000000 +0000 @@ -40,8 +40,10 @@ uint32_t GetLength(mozilla::ErrorResult& aRv) const; mozilla::dom::ScrollRestoration GetScrollRestoration( + mozilla::dom::CallerType aCallerType, mozilla::ErrorResult& aRv); void SetScrollRestoration(mozilla::dom::ScrollRestoration aMode, + mozilla::dom::CallerType aCallerType, mozilla::ErrorResult& aRv); void GetState(JSContext* aCx, JS::MutableHandle aResult, mozilla::ErrorResult& aRv) const; diff -Nru firefox-esr-128.3.1esr/dom/base/nsLineBreaker.cpp firefox-esr-128.4.0esr/dom/base/nsLineBreaker.cpp --- firefox-esr-128.3.1esr/dom/base/nsLineBreaker.cpp 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/base/nsLineBreaker.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -78,63 +78,71 @@ "Should have Reset() before destruction!"); } +/* static */ +bool nsLineBreaker::ShouldCapitalize(uint32_t aChar, bool& aCapitalizeNext) { + using mozilla::intl::GeneralCategory; + auto category = UnicodeProperties::CharType(aChar); + switch (category) { + case GeneralCategory::Uppercase_Letter: + case GeneralCategory::Lowercase_Letter: + case GeneralCategory::Titlecase_Letter: + case GeneralCategory::Modifier_Letter: + case GeneralCategory::Other_Letter: + case GeneralCategory::Decimal_Number: + case GeneralCategory::Letter_Number: + case GeneralCategory::Other_Number: + if (aCapitalizeNext) { + aCapitalizeNext = false; + return true; + } + break; + case GeneralCategory::Space_Separator: + case GeneralCategory::Line_Separator: + case GeneralCategory::Paragraph_Separator: + case GeneralCategory::Dash_Punctuation: + case GeneralCategory::Initial_Punctuation: + /* These punctuation categories are excluded, for examples like + * "what colo[u]r" -> "What Colo[u]r?" (rather than "What Colo[U]R?") + * and + * "snake_case" -> "Snake_case" (to match word selection behavior) + case GeneralCategory::Open_Punctuation: + case GeneralCategory::Close_Punctuation: + case GeneralCategory::Connector_Punctuation: + */ + aCapitalizeNext = true; + break; + case GeneralCategory::Final_Punctuation: + /* Special-case: exclude Unicode single-close-quote/apostrophe, + for examples like "Lowe’s" etc. */ + if (aChar != 0x2019) { + aCapitalizeNext = true; + } + break; + case GeneralCategory::Other_Punctuation: + /* Special-case: exclude ASCII apostrophe, for "Lowe's" etc., + and MIDDLE DOT, for Catalan "l·l". */ + if (aChar != '\'' && aChar != 0x00B7) { + aCapitalizeNext = true; + } + break; + default: + break; + } + return false; +} + static void SetupCapitalization(const char16_t* aWord, uint32_t aLength, bool* aCapitalization) { // Capitalize the first alphanumeric character after a space or punctuation. - using mozilla::intl::GeneralCategory; bool capitalizeNextChar = true; for (uint32_t i = 0; i < aLength; ++i) { uint32_t ch = aWord[i]; if (i + 1 < aLength && NS_IS_SURROGATE_PAIR(ch, aWord[i + 1])) { ch = SURROGATE_TO_UCS4(ch, aWord[i + 1]); } - auto category = UnicodeProperties::CharType(ch); - switch (category) { - case GeneralCategory::Uppercase_Letter: - case GeneralCategory::Lowercase_Letter: - case GeneralCategory::Titlecase_Letter: - case GeneralCategory::Modifier_Letter: - case GeneralCategory::Other_Letter: - case GeneralCategory::Decimal_Number: - case GeneralCategory::Letter_Number: - case GeneralCategory::Other_Number: - if (capitalizeNextChar) { - aCapitalization[i] = true; - capitalizeNextChar = false; - } - break; - case GeneralCategory::Space_Separator: - case GeneralCategory::Line_Separator: - case GeneralCategory::Paragraph_Separator: - case GeneralCategory::Dash_Punctuation: - case GeneralCategory::Initial_Punctuation: - /* These punctuation categories are excluded, for examples like - * "what colo[u]r" -> "What Colo[u]r?" (rather than "What Colo[U]R?") - * and - * "snake_case" -> "Snake_case" (to match word selection behavior) - case GeneralCategory::Open_Punctuation: - case GeneralCategory::Close_Punctuation: - case GeneralCategory::Connector_Punctuation: - */ - capitalizeNextChar = true; - break; - case GeneralCategory::Final_Punctuation: - /* Special-case: exclude Unicode single-close-quote/apostrophe, - for examples like "Lowe’s" etc. */ - if (ch != 0x2019) { - capitalizeNextChar = true; - } - break; - case GeneralCategory::Other_Punctuation: - /* Special-case: exclude ASCII apostrophe, for "Lowe's" etc., - and MIDDLE DOT, for Catalan "l·l". */ - if (ch != '\'' && ch != 0x00B7) { - capitalizeNextChar = true; - } - break; - default: - break; - } + aCapitalization[i] = + nsLineBreaker::ShouldCapitalize(ch, capitalizeNextChar); + if (!IS_IN_BMP(ch)) { ++i; } diff -Nru firefox-esr-128.3.1esr/dom/base/nsLineBreaker.h firefox-esr-128.4.0esr/dom/base/nsLineBreaker.h --- firefox-esr-128.3.1esr/dom/base/nsLineBreaker.h 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/base/nsLineBreaker.h 2024-10-21 23:59:49.000000000 +0000 @@ -72,6 +72,13 @@ return mozilla::intl::NS_IsSpace(u); } + // Helper also used by nsCaseTransformTextRunFactory::TransformString. + // aChar is the current character to be examined; + // aCapitalizeNext is a state variable: initialize it to true at start-of- + // text, then pass it back to this function as each successive character is + // considered. + static bool ShouldCapitalize(uint32_t aChar, bool& aCapitalizeNext); + // Break opportunities exist at the end of each run of breakable whitespace // (see IsSpace above). Break opportunities can also exist between pairs of // non-whitespace characters, as determined by mozilla::intl::LineBreaker. diff -Nru firefox-esr-128.3.1esr/dom/base/nsObjectLoadingContent.cpp firefox-esr-128.4.0esr/dom/base/nsObjectLoadingContent.cpp --- firefox-esr-128.3.1esr/dom/base/nsObjectLoadingContent.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/base/nsObjectLoadingContent.cpp 2024-10-21 23:59:50.000000000 +0000 @@ -218,8 +218,6 @@ return nullptr; } - MaybeStoreCrossOriginFeaturePolicy(); - return docShell.forget(); } @@ -1552,6 +1550,7 @@ void nsObjectLoadingContent::Traverse(nsObjectLoadingContent* tmp, nsCycleCollectionTraversalCallback& cb) { NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFrameLoader); + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFeaturePolicy); } /* static */ @@ -1560,6 +1559,7 @@ tmp->mFrameLoader->Destroy(); } NS_IMPL_CYCLE_COLLECTION_UNLINK(mFrameLoader); + NS_IMPL_CYCLE_COLLECTION_UNLINK(mFeaturePolicy); } void nsObjectLoadingContent::UnloadObject(bool aResetState) { @@ -1718,6 +1718,13 @@ return NS_ERROR_FAILURE; } + // At this point we know that we have a browsing context, so it's time to make + // sure that that browsing context gets the correct container feature policy. + // This is needed for `DocumentLoadListener::MaybeTriggerProcessSwitch` to be + // able to start loading the document with the correct container feature + // policy in the load info. + RefreshFeaturePolicy(); + bc.forget(aBrowsingContext); return NS_OK; } @@ -1818,6 +1825,9 @@ void nsObjectLoadingContent::MaybeStoreCrossOriginFeaturePolicy() { MOZ_DIAGNOSTIC_ASSERT(mFrameLoader); + if (!mFrameLoader) { + return; + } // If the browsingContext is not ready (because docshell is dead), don't try // to create one. @@ -1831,15 +1841,54 @@ return; } - Element* el = AsElement(); + auto* el = nsGenericHTMLElement::FromNode(AsElement()); if (!el->IsInComposedDoc()) { return; } - FeaturePolicy* featurePolicy = el->OwnerDoc()->FeaturePolicy(); - - if (ContentChild* cc = ContentChild::GetSingleton(); cc && featurePolicy) { + if (ContentChild* cc = ContentChild::GetSingleton()) { Unused << cc->SendSetContainerFeaturePolicy( - browsingContext, Some(featurePolicy->ToFeaturePolicyInfo())); + browsingContext, Some(mFeaturePolicy->ToFeaturePolicyInfo())); + } +} + +/* static */ already_AddRefed +nsObjectLoadingContent::GetFeaturePolicyDefaultOrigin(nsINode* aNode) { + auto* el = nsGenericHTMLElement::FromNode(aNode); + nsCOMPtr nodeURI; + // Different elements keep this in various locations + if (el->NodeInfo()->Equals(nsGkAtoms::object)) { + el->GetURIAttr(nsGkAtoms::data, nullptr, getter_AddRefs(nodeURI)); + } else if (el->NodeInfo()->Equals(nsGkAtoms::embed)) { + el->GetURIAttr(nsGkAtoms::src, nullptr, getter_AddRefs(nodeURI)); } + + nsCOMPtr principal; + if (nodeURI) { + principal = BasePrincipal::CreateContentPrincipal( + nodeURI, + BasePrincipal::Cast(el->NodePrincipal())->OriginAttributesRef()); + } else { + principal = el->NodePrincipal(); + } + + return principal.forget(); +} + +void nsObjectLoadingContent::RefreshFeaturePolicy() { + if (mType != ObjectType::Document) { + return; + } + + if (!mFeaturePolicy) { + mFeaturePolicy = MakeAndAddRef(AsElement()); + } + + // The origin can change if 'src' or 'data' attributes change. + nsCOMPtr origin = GetFeaturePolicyDefaultOrigin(AsElement()); + MOZ_ASSERT(origin); + mFeaturePolicy->SetDefaultOrigin(origin); + + mFeaturePolicy->InheritPolicy(AsElement()->OwnerDoc()->FeaturePolicy()); + MaybeStoreCrossOriginFeaturePolicy(); } diff -Nru firefox-esr-128.3.1esr/dom/base/nsObjectLoadingContent.h firefox-esr-128.4.0esr/dom/base/nsObjectLoadingContent.h --- firefox-esr-128.3.1esr/dom/base/nsObjectLoadingContent.h 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/base/nsObjectLoadingContent.h 2024-10-21 23:59:49.000000000 +0000 @@ -27,6 +27,7 @@ namespace mozilla::dom { struct BindContext; +class FeaturePolicy; template class Sequence; class HTMLIFrameElement; @@ -211,6 +212,14 @@ */ bool BlockEmbedOrObjectContentLoading(); + /** + * Updates and stores the container's feature policy in its canonical browsing + * context. This gets called whenever the feature policy has changed, which + * can happen when this element is upgraded to a container or when the URI of + * the element has changed. + */ + void RefreshFeaturePolicy(); + private: // Object parameter changes returned by UpdateObjectParameters enum ParameterUpdateFlags { @@ -391,6 +400,14 @@ */ void MaybeStoreCrossOriginFeaturePolicy(); + /** + * Return the value of either `data` or `src`, depending on element type, + * parsed as a URL. If URL is invalid or the attribute is missing this returns + * the document's origin. + */ + static already_AddRefed GetFeaturePolicyDefaultOrigin( + nsINode* aNode); + // The final listener for mChannel (uriloader, pluginstreamlistener, etc.) nsCOMPtr mFinalListener; @@ -464,6 +481,14 @@ // our own frame. mozilla::Maybe mSubdocumentIntrinsicSize; mozilla::Maybe mSubdocumentIntrinsicRatio; + + // This gets created on the first call of `RefreshFeaturePolicy`, and will be + // kept after that. Navigations of this element will use this if they're + // targetting documents, which is how iframe element works. If it's a + // non-document the feature policy isn't used, but it doesn't hurt to keep it + // around, and a subsequent document load will continue using it after + // refreshing it. + RefPtr mFeaturePolicy; }; #endif diff -Nru firefox-esr-128.3.1esr/dom/base/test/file_location_href_unknown_protocol.html firefox-esr-128.4.0esr/dom/base/test/file_location_href_unknown_protocol.html --- firefox-esr-128.3.1esr/dom/base/test/file_location_href_unknown_protocol.html 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/base/test/file_location_href_unknown_protocol.html 2024-10-21 23:59:49.000000000 +0000 @@ -3,8 +3,11 @@ onbeforeunload = function() { opener.onChildBeforeUnload(); }; -onload = function() { +onload = async function() { + let ongoingLoad = fetch(location.href); location.href = "this-protocol-is-unlikely-to-exist://foo"; + // Load shouldn't be canceled. + await ongoingLoad; setTimeout(function() { opener.onChildLoadTimedOut(); }, 1000); diff -Nru firefox-esr-128.3.1esr/dom/canvas/WebGLContextVertices.cpp firefox-esr-128.4.0esr/dom/canvas/WebGLContextVertices.cpp --- firefox-esr-128.3.1esr/dom/canvas/WebGLContextVertices.cpp 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/canvas/WebGLContextVertices.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -299,7 +299,6 @@ MOZ_ASSERT(mBoundVertexArray); mBoundVertexArray->AttribDivisor(index, divisor); - gl->fVertexAttribDivisor(index, divisor); } } // namespace mozilla diff -Nru firefox-esr-128.3.1esr/dom/canvas/WebGLShaderValidator.cpp firefox-esr-128.4.0esr/dom/canvas/WebGLShaderValidator.cpp --- firefox-esr-128.3.1esr/dom/canvas/WebGLShaderValidator.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/canvas/WebGLShaderValidator.cpp 2024-10-21 23:59:50.000000000 +0000 @@ -208,10 +208,6 @@ return static_cast(bytes); } - if (gl->IsMesa()) { - return 4 * 4 * 1024; // 4K words - } - if (kIsMacOS) { return 128 * 1024; // 8k vec4s } diff -Nru firefox-esr-128.3.1esr/dom/canvas/WebGLVertexArray.cpp firefox-esr-128.4.0esr/dom/canvas/WebGLVertexArray.cpp --- firefox-esr-128.3.1esr/dom/canvas/WebGLVertexArray.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/canvas/WebGLVertexArray.cpp 2024-10-21 23:59:50.000000000 +0000 @@ -67,4 +67,13 @@ } } +void WebGLVertexArray::DoAttribDivisor(const uint32_t index) const { + const auto& binding = mBindings.at(index); + auto driverDivisor = binding.layout.divisor; + if (!binding.layout.isArray) { + driverDivisor = 0; + } + mContext->gl->fVertexAttribDivisor(index, driverDivisor); +} + } // namespace mozilla diff -Nru firefox-esr-128.3.1esr/dom/canvas/WebGLVertexArray.h firefox-esr-128.4.0esr/dom/canvas/WebGLVertexArray.h --- firefox-esr-128.3.1esr/dom/canvas/WebGLVertexArray.h 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/canvas/WebGLVertexArray.h 2024-10-21 23:59:49.000000000 +0000 @@ -84,7 +84,9 @@ void AttribDivisor(const uint32_t index, const uint32_t val) { auto& binding = mBindings.at(index); binding.layout.divisor = val; - } + DoAttribDivisor(index); + }; + void DoAttribDivisor(uint32_t index) const; void AttribPointer(const uint32_t index, WebGLBuffer* const buffer, const webgl::VertAttribPointerDesc& desc, diff -Nru firefox-esr-128.3.1esr/dom/canvas/WebGLVertexArrayFake.cpp firefox-esr-128.4.0esr/dom/canvas/WebGLVertexArrayFake.cpp --- firefox-esr-128.3.1esr/dom/canvas/WebGLVertexArrayFake.cpp 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/canvas/WebGLVertexArrayFake.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -23,7 +23,7 @@ const uint32_t vertOffset) const { const auto& gl = mContext->gl; - const bool useDivisor = + const bool mightHaveDivisor = mContext->IsWebGL2() || mContext->IsExtensionEnabled(WebGLExtensionID::ANGLE_instanced_arrays); @@ -36,8 +36,8 @@ gl->fDisableVertexAttribArray(index); } - if (useDivisor) { - gl->fVertexAttribDivisor(index, binding.layout.divisor); + if (mightHaveDivisor) { + DoAttribDivisor(index); } static_assert(IsBufferTargetLazilyBound(LOCAL_GL_ARRAY_BUFFER)); diff -Nru firefox-esr-128.3.1esr/dom/chrome-webidl/BrowsingContext.webidl firefox-esr-128.4.0esr/dom/chrome-webidl/BrowsingContext.webidl --- firefox-esr-128.3.1esr/dom/chrome-webidl/BrowsingContext.webidl 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/chrome-webidl/BrowsingContext.webidl 2024-10-21 23:59:51.000000000 +0000 @@ -264,7 +264,7 @@ readonly attribute ChildSHistory? childSessionHistory; // Resets the location change rate limit. Used for testing. - undefined resetLocationChangeRateLimit(); + undefined resetNavigationRateLimit(); readonly attribute long childOffset; }; diff -Nru firefox-esr-128.3.1esr/dom/console/Console.cpp firefox-esr-128.4.0esr/dom/console/Console.cpp --- firefox-esr-128.3.1esr/dom/console/Console.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/console/Console.cpp 2024-10-21 23:59:51.000000000 +0000 @@ -806,6 +806,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK(mDumpFunction) NS_IMPL_CYCLE_COLLECTION_UNLINK_WEAK_REFERENCE tmp->Shutdown(); + tmp->mArgumentStorage.clearAndFree(); NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Console) diff -Nru firefox-esr-128.3.1esr/dom/geolocation/Geolocation.cpp firefox-esr-128.4.0esr/dom/geolocation/Geolocation.cpp --- firefox-esr-128.3.1esr/dom/geolocation/Geolocation.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/Geolocation.cpp 2024-10-21 23:59:51.000000000 +0000 @@ -6,16 +6,21 @@ #include "Geolocation.h" +#include "GeolocationIPCUtils.h" +#include "GeolocationSystem.h" #include "mozilla/ClearOnShutdown.h" #include "mozilla/CycleCollectedJSContext.h" // for nsAutoMicroTask +#include "mozilla/dom/BrowserChild.h" #include "mozilla/dom/ContentChild.h" #include "mozilla/dom/PermissionMessageUtils.h" #include "mozilla/dom/GeolocationPositionError.h" #include "mozilla/dom/GeolocationPositionErrorBinding.h" #include "mozilla/glean/GleanMetrics.h" +#include "mozilla/ipc/MessageChannel.h" #include "mozilla/Preferences.h" #include "mozilla/Services.h" #include "mozilla/StaticPrefs_geo.h" +#include "mozilla/StaticPtr.h" #include "mozilla/Telemetry.h" #include "mozilla/UniquePtr.h" #include "mozilla/Unused.h" @@ -28,6 +33,7 @@ #include "mozilla/dom/Document.h" #include "nsINamed.h" #include "nsIObserverService.h" +#include "nsIPromptService.h" #include "nsIScriptError.h" #include "nsPIDOMWindow.h" #include "nsServiceManagerUtils.h" @@ -69,6 +75,7 @@ using mozilla::Unused; // using namespace mozilla; using namespace mozilla::dom; +using namespace mozilla::dom::geolocation; mozilla::LazyLogModule gGeolocationLog("Geolocation"); @@ -92,6 +99,7 @@ // nsIContentPermissionRequest MOZ_CAN_RUN_SCRIPT NS_IMETHOD Cancel(void) override; MOZ_CAN_RUN_SCRIPT NS_IMETHOD Allow(JS::Handle choices) override; + NS_IMETHOD GetTypes(nsIArray** aTypes) override; void Shutdown(); @@ -113,6 +121,11 @@ bool IsWatch() { return mIsWatchPositionRequest; } int32_t WatchId() { return mWatchId; } + void SetPromptBehavior( + geolocation::SystemGeolocationPermissionBehavior aBehavior) { + mBehavior = aBehavior; + } + private: virtual ~nsGeolocationRequest(); @@ -150,6 +163,8 @@ bool mShutdown; bool mSeenAnySignal = false; nsCOMPtr mMainThreadSerialEventTarget; + + SystemGeolocationPermissionBehavior mBehavior; }; static UniquePtr CreatePositionOptionsCopy( @@ -213,7 +228,8 @@ mLocator(aLocator), mWatchId(aWatchId), mShutdown(false), - mMainThreadSerialEventTarget(aMainThreadSerialEventTarget) {} + mMainThreadSerialEventTarget(aMainThreadSerialEventTarget), + mBehavior(SystemGeolocationPermissionBehavior::NoPrompt) {} nsGeolocationRequest::~nsGeolocationRequest() { StopTimeoutTimer(); } @@ -256,6 +272,130 @@ return NS_OK; } +/** + * When the promise for the cancel dialog is resolved or rejected, we should + * stop waiting for permission. If it was granted then the + * SystemGeolocationPermissionRequest should already be resolved, so we do + * nothing. Otherwise, we were either cancelled or got an error, so we cancel + * the SystemGeolocationPermissionRequest. + */ +class CancelSystemGeolocationPermissionRequest : public PromiseNativeHandler { + public: + NS_DECL_ISUPPORTS + + explicit CancelSystemGeolocationPermissionRequest( + SystemGeolocationPermissionRequest* aRequest) + : mRequest(aRequest) {} + + MOZ_CAN_RUN_SCRIPT_BOUNDARY + void ResolvedCallback(JSContext* aCx, JS::Handle aValue, + ErrorResult& aRv) override { + mRequest->Stop(); + } + + MOZ_CAN_RUN_SCRIPT_BOUNDARY + void RejectedCallback(JSContext* aCx, JS::Handle aValue, + ErrorResult& aRv) override { + mRequest->Stop(); + } + + private: + ~CancelSystemGeolocationPermissionRequest() = default; + RefPtr mRequest; +}; + +NS_IMPL_ISUPPORTS0(CancelSystemGeolocationPermissionRequest) + +/* static */ +void Geolocation::ReallowWithSystemPermissionOrCancel( + BrowsingContext* aBrowsingContext, + geolocation::ParentRequestResolver&& aResolver) { + // Make sure we don't return without responding to the geolocation request. + auto denyPermissionOnError = + MakeScopeExit([&aResolver]() MOZ_CAN_RUN_SCRIPT_BOUNDARY_LAMBDA { + aResolver(GeolocationPermissionStatus::Error); + }); + + NS_ENSURE_TRUE_VOID(aBrowsingContext); + + nsCOMPtr bundle; + nsCOMPtr sbs = + do_GetService(NS_STRINGBUNDLE_CONTRACTID); + NS_ENSURE_TRUE_VOID(sbs); + + sbs->CreateBundle("chrome://browser/locale/browser.properties", + getter_AddRefs(bundle)); + NS_ENSURE_TRUE_VOID(bundle); + + nsAutoString title; + nsresult rv = + bundle->GetStringFromName("geolocation.systemSettingsTitle", title); + NS_ENSURE_SUCCESS_VOID(rv); + + nsAutoString brandName; + rv = nsContentUtils::GetLocalizedString(nsContentUtils::eBRAND_PROPERTIES, + "brandShortName", brandName); + NS_ENSURE_SUCCESS_VOID(rv); + AutoTArray formatParams; + formatParams.AppendElement(brandName); + nsAutoString message; + rv = bundle->FormatStringFromName("geolocation.systemSettingsMessage", + formatParams, message); + NS_ENSURE_SUCCESS_VOID(rv); + + // We MUST do this because aResolver is moved below. + denyPermissionOnError.release(); + + RefPtr permissionRequest = + geolocation::RequestLocationPermissionFromUser(aBrowsingContext, + std::move(aResolver)); + NS_ENSURE_TRUE_VOID(permissionRequest); + + auto cancelRequestOnError = MakeScopeExit([&]() { + // Stop waiting for the system permission and just leave it up to the user. + permissionRequest->Stop(); + }); + + nsCOMPtr promptSvc = + do_GetService("@mozilla.org/prompter;1", &rv); + NS_ENSURE_SUCCESS_VOID(rv); + + // The dialog should include a cancel button if Gecko is prompting the user + // for system permission. It should have no buttons if the OS will be + // doing the prompting. + bool geckoWillPrompt = + GetLocationOSPermission() == + geolocation::SystemGeolocationPermissionBehavior::GeckoWillPromptUser; + // This combination of flags removes the default yes and no buttons and adds a + // spinner to the title. + const auto kSpinnerNoButtonFlags = nsIPromptService::BUTTON_TITLE_IS_STRING * + nsIPromptService::BUTTON_POS_0 + + nsIPromptService::BUTTON_TITLE_IS_STRING * + nsIPromptService::BUTTON_POS_1 + + nsIPromptService::SHOW_SPINNER; + // This combination of flags indicates there is only one button labeled + // "Cancel". + const auto kCancelButtonFlags = + nsIPromptService::BUTTON_TITLE_CANCEL * nsIPromptService::BUTTON_POS_0; + RefPtr tabBlockingDialogPromise; + rv = promptSvc->AsyncConfirmEx( + aBrowsingContext, nsIPromptService::MODAL_TYPE_TAB, title.get(), + message.get(), + geckoWillPrompt ? kCancelButtonFlags : kSpinnerNoButtonFlags, nullptr, + nullptr, nullptr, nullptr, false, JS::UndefinedHandleValue, + getter_AddRefs(tabBlockingDialogPromise)); + NS_ENSURE_SUCCESS_VOID(rv); + MOZ_ASSERT(tabBlockingDialogPromise); + + // If the tab blocking dialog promise is resolved or rejected then the dialog + // is no longer visible so we should stop waiting for permission, whether it + // was granted or not. + tabBlockingDialogPromise->AppendNativeHandler( + new CancelSystemGeolocationPermissionRequest(permissionRequest)); + + cancelRequestOnError.release(); +} + NS_IMETHODIMP nsGeolocationRequest::Allow(JS::Handle aChoices) { MOZ_ASSERT(aChoices.isUndefined()); @@ -264,6 +404,38 @@ return NS_OK; } + if (mBehavior != SystemGeolocationPermissionBehavior::NoPrompt) { + // Asynchronously present the system dialog or open system preferences + // (RequestGeolocationPermissionFromUser will know which to do), and wait + // for the permission to change or the request to be canceled. If the + // permission is (maybe) granted then it will call Allow again. It actually + // will also re-call Allow if the permission is denied, in order to get the + // "denied permission" behavior. + mBehavior = SystemGeolocationPermissionBehavior::NoPrompt; + RefPtr browsingContext = mWindow->GetBrowsingContext(); + if (ContentChild* cc = ContentChild::GetSingleton()) { + cc->SendRequestGeolocationPermissionFromUser( + browsingContext, + [self = RefPtr{this}](GeolocationPermissionStatus aResult) + MOZ_CAN_RUN_SCRIPT_BOUNDARY_LAMBDA { + self->Allow(JS::UndefinedHandleValue); + }, + [self = RefPtr{this}](mozilla::ipc::ResponseRejectReason aReason) + MOZ_CAN_RUN_SCRIPT_BOUNDARY_LAMBDA { + self->Allow(JS::UndefinedHandleValue); + }); + return NS_OK; + } + + Geolocation::ReallowWithSystemPermissionOrCancel( + browsingContext, + [self = RefPtr{this}](GeolocationPermissionStatus aResult) + MOZ_CAN_RUN_SCRIPT_BOUNDARY_LAMBDA { + self->Allow(JS::UndefinedHandleValue); + }); + return NS_OK; + } + RefPtr gs = nsGeolocationService::GetGeolocationService(); @@ -293,7 +465,7 @@ // will now be owned by the RequestSendLocationEvent Update(lastPosition.position); - // After Update is called, getCurrentPosition finishes it's job. + // After Update is called, getCurrentPosition finishes its job. if (!mIsWatchPositionRequest) { return NS_OK; } @@ -483,6 +655,24 @@ } } +NS_IMETHODIMP +nsGeolocationRequest::GetTypes(nsIArray** aTypes) { + AutoTArray options; + + switch (mBehavior) { + case SystemGeolocationPermissionBehavior::SystemWillPromptUser: + options.AppendElement(u"sysdlg"_ns); + break; + case SystemGeolocationPermissionBehavior::GeckoWillPromptUser: + options.AppendElement(u"syssetting"_ns); + break; + default: + break; + } + return nsContentPermissionUtils::CreatePermissionArray(mType, options, + aTypes); +} + //////////////////////////////////////////////////// // nsGeolocationRequest::TimerCallbackHolder //////////////////////////////////////////////////// @@ -1107,10 +1297,7 @@ } if (mOwner) { - if (!RegisterRequestWithPrompt(request)) { - return NS_ERROR_NOT_AVAILABLE; - } - + RequestIfPermitted(request); return NS_OK; } @@ -1184,11 +1371,7 @@ } if (mOwner) { - if (!RegisterRequestWithPrompt(request)) { - aRv.Throw(NS_ERROR_NOT_AVAILABLE); - return 0; - } - + RequestIfPermitted(request); return watchId; } @@ -1259,7 +1442,8 @@ } } -bool Geolocation::RegisterRequestWithPrompt(nsGeolocationRequest* request) { +/* static */ bool Geolocation::RegisterRequestWithPrompt( + nsGeolocationRequest* request) { nsIEventTarget* target = GetMainThreadSerialEventTarget(); ContentPermissionRequestBase::PromptResult pr = request->CheckPromptPrefs(); if (pr == ContentPermissionRequestBase::PromptResult::Granted) { @@ -1278,6 +1462,55 @@ return true; } +/* static */ geolocation::SystemGeolocationPermissionBehavior +Geolocation::GetLocationOSPermission() { + auto permission = geolocation::GetGeolocationPermissionBehavior(); + + if (!StaticPrefs::geo_prompt_open_system_prefs() && + permission == geolocation::SystemGeolocationPermissionBehavior:: + GeckoWillPromptUser) { + return geolocation::SystemGeolocationPermissionBehavior::NoPrompt; + } + return permission; +} + +void Geolocation::RequestIfPermitted(nsGeolocationRequest* request) { + auto getPermission = [request = RefPtr{request}](auto aPermission) { + switch (aPermission) { + case geolocation::SystemGeolocationPermissionBehavior:: + SystemWillPromptUser: + case geolocation::SystemGeolocationPermissionBehavior:: + GeckoWillPromptUser: + request->SetPromptBehavior(aPermission); + break; + case geolocation::SystemGeolocationPermissionBehavior::NoPrompt: + // Either location access is already permitted by OS or the system + // permission UX is not available for this platform. Do nothing. + break; + default: + MOZ_ASSERT_UNREACHABLE( + "unexpected GeolocationPermissionBehavior value"); + break; + } + RegisterRequestWithPrompt(request); + }; + + if (auto* contentChild = ContentChild::GetSingleton()) { + contentChild->SendGetSystemGeolocationPermissionBehavior( + std::move(getPermission), + [request = + RefPtr{request}](mozilla::ipc::ResponseRejectReason aReason) { + NS_WARNING("Error sending GetSystemGeolocationPermissionBehavior"); + // We still need to run the location request, even if we don't + // have permission. + RegisterRequestWithPrompt(request); + }); + } else { + MOZ_ASSERT(XRE_IsParentProcess()); + getPermission(GetLocationOSPermission()); + } +} + JSObject* Geolocation::WrapObject(JSContext* aCtx, JS::Handle aGivenProto) { return Geolocation_Binding::Wrap(aCtx, this, aGivenProto); diff -Nru firefox-esr-128.3.1esr/dom/geolocation/Geolocation.h firefox-esr-128.4.0esr/dom/geolocation/Geolocation.h --- firefox-esr-128.3.1esr/dom/geolocation/Geolocation.h 2024-10-08 21:18:26.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/Geolocation.h 2024-10-21 23:59:49.000000000 +0000 @@ -10,7 +10,6 @@ // Microsoft's API Name hackery sucks #undef CreateEvent -#include "mozilla/StaticPtr.h" #include "nsCOMPtr.h" #include "nsTArray.h" #include "nsITimer.h" @@ -28,6 +27,7 @@ #include "mozilla/dom/BindingDeclarations.h" #include "mozilla/dom/GeolocationBinding.h" #include "mozilla/dom/CallbackObject.h" +#include "GeolocationSystem.h" #include "nsIGeolocationProvider.h" #include "mozilla/Attributes.h" @@ -41,6 +41,9 @@ CallbackObjectHolder; using GeoPositionErrorCallback = CallbackObjectHolder; +namespace geolocation { +enum class LocationOSPermission; +} } // namespace mozilla::dom struct CachedPositionAndAccuracy { @@ -179,6 +182,13 @@ // null. static already_AddRefed NonWindowSingleton(); + static geolocation::SystemGeolocationPermissionBehavior + GetLocationOSPermission(); + + static MOZ_CAN_RUN_SCRIPT void ReallowWithSystemPermissionOrCancel( + BrowsingContext* aBrowsingContext, + geolocation::ParentRequestResolver&& aResolver); + private: ~Geolocation(); @@ -194,7 +204,7 @@ UniquePtr&& aOptions, CallerType aCallerType, ErrorResult& aRv); - bool RegisterRequestWithPrompt(nsGeolocationRequest* request); + static bool RegisterRequestWithPrompt(nsGeolocationRequest* request); // Check if clearWatch is already called bool IsAlreadyCleared(nsGeolocationRequest* aRequest); @@ -207,6 +217,9 @@ // request is coming from a chrome window. bool IsFullyActiveOrChrome(); + // Initates the asynchronous process of filling the request. + static void RequestIfPermitted(nsGeolocationRequest* request); + // Two callback arrays. The first |mPendingCallbacks| holds objects for only // one callback and then they are released/removed from the array. The second // |mWatchingCallbacks| holds objects until the object is explictly removed or diff -Nru firefox-esr-128.3.1esr/dom/geolocation/GeolocationIPCUtils.h firefox-esr-128.4.0esr/dom/geolocation/GeolocationIPCUtils.h --- firefox-esr-128.3.1esr/dom/geolocation/GeolocationIPCUtils.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/GeolocationIPCUtils.h 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,64 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_GeolocationIPCUtils_h +#define mozilla_dom_GeolocationIPCUtils_h + +#include "ipc/EnumSerializer.h" + +namespace mozilla::dom::geolocation { + +enum class SystemGeolocationPermissionBehavior { + // OS geolocation permission may be granted or not, but Gecko should not ask + // the user for it. Gecko may not even know if it already has geolocation + // permission. This value is used when Gecko is done asking the user for + // permission, when Gecko doesn't have to ask the user because permission is + // already granted, and when Gecko is running on a platform where it cannot + // perform the system UX operations required to get permission (such as + // opening system preferences). + NoPrompt, + // Gecko does not have OS geolocation permission. The OS will ask the user + // for location permission before responding to requests. + SystemWillPromptUser, + // Gecko does not have OS geolocation permission. Gecko will open OS + // preferences and ask the user to either grant location permission or to + // cancel the request. It will wait for an answer before responding to the + // geolocation request. + GeckoWillPromptUser, + Last = GeckoWillPromptUser, +}; + +enum class GeolocationPermissionStatus { + Canceled, + Granted, + Error, + Last = Error +}; + +} // namespace mozilla::dom::geolocation + +namespace IPC { + +template <> +struct ParamTraits< + mozilla::dom::geolocation::SystemGeolocationPermissionBehavior> + : public ContiguousEnumSerializerInclusive< + mozilla::dom::geolocation::SystemGeolocationPermissionBehavior, + mozilla::dom::geolocation::SystemGeolocationPermissionBehavior:: + NoPrompt, + mozilla::dom::geolocation::SystemGeolocationPermissionBehavior:: + Last> {}; + +template <> +struct ParamTraits + : public ContiguousEnumSerializerInclusive< + mozilla::dom::geolocation::GeolocationPermissionStatus, + mozilla::dom::geolocation::GeolocationPermissionStatus::Canceled, + mozilla::dom::geolocation::GeolocationPermissionStatus::Last> {}; + +} // namespace IPC + +#endif /* mozilla_dom_GeolocationIPCUtils_h */ diff -Nru firefox-esr-128.3.1esr/dom/geolocation/GeolocationSystem.cpp firefox-esr-128.4.0esr/dom/geolocation/GeolocationSystem.cpp --- firefox-esr-128.3.1esr/dom/geolocation/GeolocationSystem.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/GeolocationSystem.cpp 2024-10-21 23:59:50.000000000 +0000 @@ -0,0 +1,24 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "GeolocationSystem.h" + +namespace mozilla::dom::geolocation { + +SystemGeolocationPermissionBehavior GetGeolocationPermissionBehavior() { + return SystemGeolocationPermissionBehavior::NoPrompt; +} + +already_AddRefed +RequestLocationPermissionFromUser(BrowsingContext* aBrowsingContext, + ParentRequestResolver&& aResolver) { + MOZ_ASSERT_UNREACHABLE( + "Should not warn user of need for system location permission " + "since we cannot open system settings on this platform."); + return nullptr; +} + +} // namespace mozilla::dom::geolocation diff -Nru firefox-esr-128.3.1esr/dom/geolocation/GeolocationSystem.h firefox-esr-128.4.0esr/dom/geolocation/GeolocationSystem.h --- firefox-esr-128.3.1esr/dom/geolocation/GeolocationSystem.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/GeolocationSystem.h 2024-10-21 23:59:51.000000000 +0000 @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_GeolocationSystem_h +#define mozilla_dom_GeolocationSystem_h + +#include "mozilla/dom/PContentParent.h" +#include "GeolocationIPCUtils.h" + +namespace mozilla::dom { + +class BrowsingContext; + +namespace geolocation { + +/** + * Get the behavior that Gecko should perform when the user asks for + * geolocation. The result isn't guaranteed to be accurate on all platforms + * (for example, some may prompt the user for permission without Gecko's + * knowledge). It is, however, guaranteed to be sensible. For example, this + * will never return "SystemWillPromptUser" if that is not true, nor will it + * return "GeckoWillPromptUser" if Gecko doesn't know how to open OS settings. + */ +SystemGeolocationPermissionBehavior GetGeolocationPermissionBehavior(); + +class SystemGeolocationPermissionRequest { + public: + NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING + + // Stop watching for permission + virtual void Stop() = 0; + + protected: + virtual ~SystemGeolocationPermissionRequest() = default; +}; + +using ParentRequestResolver = + PContentParent::RequestGeolocationPermissionFromUserResolver; + +/** + * Opens the relevant system dialog to request permission from the user. + * Resolves aResolver when permission is granted, an error occurs, or Stop has + * been called on the SystemGeolocationPermissionRequest. + */ +already_AddRefed +RequestLocationPermissionFromUser(BrowsingContext* aBrowsingContext, + ParentRequestResolver&& aResolver); + +} // namespace geolocation +} // namespace mozilla::dom + +#endif /* mozilla_dom_GeolocationSystem_h */ diff -Nru firefox-esr-128.3.1esr/dom/geolocation/GeolocationSystemWin.cpp firefox-esr-128.4.0esr/dom/geolocation/GeolocationSystemWin.cpp --- firefox-esr-128.3.1esr/dom/geolocation/GeolocationSystemWin.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/GeolocationSystemWin.cpp 2024-10-21 23:59:51.000000000 +0000 @@ -0,0 +1,351 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "GeolocationSystem.h" +#include "mozilla/Components.h" +#include "mozilla/dom/BrowsingContext.h" +#include "mozilla/ScopeExit.h" +#include "nsIGeolocationUIUtilsWin.h" +#include "nsIWifiListener.h" +#include "nsIWifiMonitor.h" + +#include +#include +#include + +namespace mozilla::dom::geolocation { + +using namespace ABI::Windows::Foundation; +using namespace ABI::Windows::Security::Authorization::AppCapabilityAccess; +using namespace ABI::Windows::System; +using namespace Microsoft::WRL; +using Wrappers::HStringReference; + +namespace { + +const auto& kAppCapabilityGuid = + RuntimeClass_Windows_Security_Authorization_AppCapabilityAccess_AppCapability; +const auto& kLauncherGuid = RuntimeClass_Windows_System_Launcher; +const auto& kUriGuid = RuntimeClass_Windows_Foundation_Uri; +const wchar_t kLocationSettingsPage[] = L"ms-settings:privacy-location"; + +template +ComPtr CreateFromActivationFactory(const wchar_t* aNamespace) { + ComPtr newObject; + GetActivationFactory(HStringReference(aNamespace).Get(), &newObject); + return newObject; +} + +RefPtr GetWifiControlAppCapability() { + ComPtr appCapabilityStatics = + CreateFromActivationFactory(kAppCapabilityGuid); + NS_ENSURE_TRUE(appCapabilityStatics, nullptr); + + RefPtr appCapability; + HRESULT hr = appCapabilityStatics->Create( + HStringReference(L"wifiControl").Get(), getter_AddRefs(appCapability)); + NS_ENSURE_TRUE(SUCCEEDED(hr), nullptr); + NS_ENSURE_TRUE(appCapability, nullptr); + return appCapability; +} + +Maybe GetWifiControlAccess() { + auto appCapability = GetWifiControlAppCapability(); + NS_ENSURE_TRUE(appCapability, Nothing()); + AppCapabilityAccessStatus status; + HRESULT hr = appCapability->CheckAccess(&status); + NS_ENSURE_TRUE(SUCCEEDED(hr), Nothing()); + return Some(status); +} + +bool SystemWillPromptForPermissionHint() { + auto wifiAccess = GetWifiControlAccess(); + if (wifiAccess != + mozilla::Some(AppCapabilityAccessStatus:: + AppCapabilityAccessStatus_UserPromptRequired)) { + return false; + } + + // If wifi is not available (e.g. because there is no wifi device present) + // then the API may report that Windows will request geolocation permission + // but it can't without the wifi scanner. Check for that case. + nsCOMPtr wifiMonitor = components::WifiMonitor::Service(); + NS_ENSURE_TRUE(wifiMonitor, false); + return wifiMonitor->GetHasWifiAdapter(); +} + +bool LocationIsPermittedHint() { + auto wifiAccess = GetWifiControlAccess(); + // This API wasn't available on earlier versions of Windows, so a failure to + // get the result means that we will assume that location access is permitted. + return wifiAccess.isNothing() || + *wifiAccess == + AppCapabilityAccessStatus::AppCapabilityAccessStatus_Allowed; +} + +class WindowsGeolocationPermissionRequest final + : public SystemGeolocationPermissionRequest, + public SupportsThreadSafeWeakPtr { + public: + MOZ_DECLARE_REFCOUNTED_TYPENAME(WindowsGeolocationPermissionRequest); + // Define SystemGeolocationPermissionRequest's ref-counting by forwarding the + // calls to SupportsThreadSafeWeakPtr + NS_INLINE_DECL_REFCOUNTING_INHERITED( + WindowsGeolocationPermissionRequest, + SupportsThreadSafeWeakPtr); + + WindowsGeolocationPermissionRequest(BrowsingContext* aBrowsingContext, + ParentRequestResolver&& aResolver) + : mResolver(std::move(aResolver)), mBrowsingContext(aBrowsingContext) {} + + void Initialize() { + MOZ_ASSERT(!mIsRunning); + auto failedToWatch = MakeScopeExit([&]() { + if (!mIsRunning) { + mAppCapability = nullptr; + mToken = EventRegistrationToken{}; + mResolver(GeolocationPermissionStatus::Error); + } + }); + + mAppCapability = GetWifiControlAppCapability(); + if (!mAppCapability) { + return; + } + + using AccessChangedHandler = + ITypedEventHandler; + + // Note: This creates the callback that listens for location permission + // changes as free threaded, which we need to do to overcome a (Microsoft) + // issue with the callback proxy's exports with (at least) the pre-24H2 + // versions of Windows. + ComPtr acHandlerRef = Callback, AccessChangedHandler, FtmBase>>( + [weakSelf = ThreadSafeWeakPtr( + this)](IAppCapability*, IAppCapabilityAccessChangedEventArgs*) { + // Because of the free threaded access mentioned above, our + // callback can run on a background thread, so dispatch it to + // main. + if (!NS_IsMainThread()) { + NS_DispatchToMainThread( + NS_NewRunnableFunction(__func__, [weakSelf]() { + RefPtr self(weakSelf); + if (self) { + self->StopIfLocationIsPermitted(); + } + })); + return S_OK; + } + + RefPtr self(weakSelf); + if (self) { + self->StopIfLocationIsPermitted(); + } + return S_OK; + }); + + if (!acHandlerRef) { + return; + } + + HRESULT hr = mAppCapability->add_AccessChanged(acHandlerRef.Get(), &mToken); + NS_ENSURE_TRUE_VOID(SUCCEEDED(hr)); + MOZ_ASSERT(mToken.value); + + mIsRunning = true; + failedToWatch.release(); + + // Avoid a race for accessChanged by checking it now and stopping if + // permission is already granted. + StopIfLocationIsPermitted(); + } + + void Stop() override { + MOZ_ASSERT(NS_IsMainThread()); + if (!mIsRunning) { + return; + } + mIsRunning = false; + + if (LocationIsPermittedHint()) { + mResolver(GeolocationPermissionStatus::Granted); + } else { + mResolver(GeolocationPermissionStatus::Canceled); + } + + // Remove the modal with the cancel button. + nsresult rv = DismissPrompt(); + NS_ENSURE_SUCCESS_VOID(rv); + + // Stop watching location settings. + MOZ_ASSERT(mAppCapability); + mAppCapability->remove_AccessChanged(mToken); + mAppCapability = nullptr; + mToken = EventRegistrationToken{}; + } + + bool IsStopped() { return !mIsRunning; } + + protected: + // Ref-counting demands that the destructor be non-public but + // SupportsThreadSafeWeakPtr needs to be able to call it, because we use + // NS_INLINE_DECL_REFCOUNTING_INHERITED. + friend SupportsThreadSafeWeakPtr; + + virtual ~WindowsGeolocationPermissionRequest() { + Stop(); + MOZ_ASSERT(mToken.value == 0); + } + + void StopIfLocationIsPermitted() { + if (LocationIsPermittedHint()) { + Stop(); + } + } + + nsresult DismissPrompt() { + nsresult rv; + nsCOMPtr utils = + do_GetService("@mozilla.org/geolocation/ui-utils-win;1", &rv); + NS_ENSURE_SUCCESS(rv, rv); + return utils->DismissPrompts(mBrowsingContext); + } + + // This IAppCapability object must be held for the duration of the period + // where we listen for location permission changes or else the callback + // will not be called. + RefPtr mAppCapability; + ParentRequestResolver mResolver; + RefPtr mBrowsingContext; + EventRegistrationToken mToken; + bool mIsRunning = false; +}; + +// Opens Windows geolocation settings and cancels the geolocation request on +// error. +void OpenWindowsLocationSettings( + SystemGeolocationPermissionRequest* aPermissionRequest) { + auto cancelRequest = MakeScopeExit([&]() { aPermissionRequest->Stop(); }); + + ComPtr uriFactory = + CreateFromActivationFactory(kUriGuid); + NS_ENSURE_TRUE_VOID(uriFactory); + + RefPtr uri; + HRESULT hr = uriFactory->CreateUri( + HStringReference(kLocationSettingsPage).Get(), getter_AddRefs(uri)); + NS_ENSURE_TRUE_VOID(SUCCEEDED(hr)); + + ComPtr launcherStatics = + CreateFromActivationFactory(kLauncherGuid); + NS_ENSURE_TRUE_VOID(launcherStatics); + + RefPtr> handler; + hr = launcherStatics->LaunchUriAsync(uri, getter_AddRefs(handler)); + NS_ENSURE_TRUE_VOID(SUCCEEDED(hr)); + + // The IAsyncOperation is similar to a promise so there is no race here, + // despite us adding this callback after requesting launch instead of before. + handler->put_Completed( + Callback>( + [permissionRequest = RefPtr{aPermissionRequest}]( + IAsyncOperation* asyncInfo, AsyncStatus status) { + unsigned char verdict = 0; + asyncInfo->GetResults(&verdict); + if (!verdict) { + permissionRequest->Stop(); + } + return S_OK; + }) + .Get()); + + cancelRequest.release(); +} + +class LocationPermissionWifiScanListener final : public nsIWifiListener { + public: + NS_DECL_ISUPPORTS + + explicit LocationPermissionWifiScanListener( + SystemGeolocationPermissionRequest* aRequest) + : mRequest(aRequest) {} + + NS_IMETHOD OnChange(const nsTArray>&) override { + // We will remove ourselves from the nsIWifiMonitor, which is our owner. + // Hold a strong reference to ourselves until we complete the callback. + RefPtr self = this; + return PermissionWasDecided(); + } + + NS_IMETHOD OnError(nsresult) override { + // We will remove ourselves from the nsIWifiMonitor, which is our owner. + // Hold a strong reference to ourselves until we complete the callback. + RefPtr self = this; + return PermissionWasDecided(); + } + + private: + virtual ~LocationPermissionWifiScanListener() = default; + RefPtr mRequest; + + // Any response to our wifi scan request means that the user has selected + // either to grant or deny permission in the Windows dialog. Either way, we + // are done asking for permission, so Stop the permission request. + nsresult PermissionWasDecided() { + nsCOMPtr wifiMonitor = components::WifiMonitor::Service(); + NS_ENSURE_TRUE(wifiMonitor, NS_ERROR_FAILURE); + wifiMonitor->StopWatching(this); + mRequest->Stop(); + return NS_OK; + } +}; + +NS_IMPL_ISUPPORTS(LocationPermissionWifiScanListener, nsIWifiListener) + +} // namespace + +//----------------------------------------------------------------------------- + +SystemGeolocationPermissionBehavior GetGeolocationPermissionBehavior() { + if (SystemWillPromptForPermissionHint()) { + return SystemGeolocationPermissionBehavior::SystemWillPromptUser; + } + if (!LocationIsPermittedHint()) { + return SystemGeolocationPermissionBehavior::GeckoWillPromptUser; + } + return SystemGeolocationPermissionBehavior::NoPrompt; +} + +already_AddRefed +RequestLocationPermissionFromUser(BrowsingContext* aBrowsingContext, + ParentRequestResolver&& aResolver) { + RefPtr permissionRequest = + new WindowsGeolocationPermissionRequest(aBrowsingContext, + std::move(aResolver)); + permissionRequest->Initialize(); + if (permissionRequest->IsStopped()) { + return nullptr; + } + if (SystemWillPromptForPermissionHint()) { + // To tell the system to prompt for permission, run one wifi scan (no need + // to poll). We won't use the result -- either the user will grant + // geolocation permission, meaning we will not need wifi scanning, or the + // user will deny permission, in which case no scan can be done. We just + // want the prompt. + nsCOMPtr wifiMonitor = components::WifiMonitor::Service(); + NS_ENSURE_TRUE(wifiMonitor, nullptr); + auto listener = + MakeRefPtr(permissionRequest); + wifiMonitor->StartWatching(listener, false); + } else { + OpenWindowsLocationSettings(permissionRequest); + } + return permissionRequest.forget(); +} + +} // namespace mozilla::dom::geolocation diff -Nru firefox-esr-128.3.1esr/dom/geolocation/GeolocationUIUtilsWin.sys.mjs firefox-esr-128.4.0esr/dom/geolocation/GeolocationUIUtilsWin.sys.mjs --- firefox-esr-128.3.1esr/dom/geolocation/GeolocationUIUtilsWin.sys.mjs 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/GeolocationUIUtilsWin.sys.mjs 2024-10-21 23:59:51.000000000 +0000 @@ -0,0 +1,26 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Implements nsIGeolocationUIUtilsWin + * + * @class GeolocationUIUtilsWin + */ +export class GeolocationUIUtilsWin { + dismissPrompts(aBrowsingContext) { + // browser will be null if the tab was closed + let embedder = aBrowsingContext?.top.embedderElement; + let owner = embedder?.ownerGlobal; + if (owner) { + let dialogBox = owner.gBrowser.getTabDialogBox(embedder); + // Don't close any content-modal dialogs, because we could be doing + // content analysis on something like a prompt() call. + dialogBox.getTabDialogManager().abortDialogs(); + } + } +} + +GeolocationUIUtilsWin.prototype.QueryInterface = ChromeUtils.generateQI([ + "nsIGeolocationUIUtilsWin", +]); diff -Nru firefox-esr-128.3.1esr/dom/geolocation/components.conf firefox-esr-128.4.0esr/dom/geolocation/components.conf --- firefox-esr-128.3.1esr/dom/geolocation/components.conf 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/components.conf 2024-10-21 23:59:51.000000000 +0000 @@ -0,0 +1,12 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +Classes = [ + { + 'cid': '{bf4040de-e5e2-4be4-8402-ae0c10c499b6}', + 'contract_ids': ['@mozilla.org/geolocation/ui-utils-win;1'], + 'esModule': 'resource://gre/modules/GeolocationUIUtilsWin.sys.mjs', + 'constructor': 'GeolocationUIUtilsWin', + }, +] \ No newline at end of file diff -Nru firefox-esr-128.3.1esr/dom/geolocation/moz.build firefox-esr-128.4.0esr/dom/geolocation/moz.build --- firefox-esr-128.3.1esr/dom/geolocation/moz.build 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/moz.build 2024-10-21 23:59:49.000000000 +0000 @@ -7,6 +7,9 @@ with Files("**"): BUG_COMPONENT = ("Core", "DOM: Geolocation") +with Files("GeolocationSystemWin.cpp"): + BUG_COMPONENT = ("Core", "Widget: Win32") + EXPORTS += [ "nsGeoPositionIPCSerialiser.h", ] @@ -14,8 +17,10 @@ EXPORTS.mozilla.dom += [ "Geolocation.h", "GeolocationCoordinates.h", + "GeolocationIPCUtils.h", "GeolocationPosition.h", "GeolocationPositionError.h", + "GeolocationSystem.h", ] SOURCES += [ @@ -29,6 +34,29 @@ "MLSFallback.cpp", ] +# MinGW is missing the headers needed to build the Windows Geolocation System +# Permission UI so it uses the platform-agnostic version. +if ( + CONFIG["OS_TARGET"] == "WINNT" + and CONFIG["CC_TYPE"] == "clang-cl" + and CONFIG["MOZ_BUILD_APP"] == "browser" +): + UNIFIED_SOURCES += [ + "GeolocationSystemWin.cpp", + ] + EXTRA_JS_MODULES += [ + "GeolocationUIUtilsWin.sys.mjs", + ] + XPCOM_MANIFESTS += [ + "components.conf", + ] + XPIDL_SOURCES += ["nsIGeolocationUIUtilsWin.idl"] + XPIDL_MODULE = "dom_geolocation" +else: + UNIFIED_SOURCES += [ + "GeolocationSystem.cpp", + ] + include("/ipc/chromium/chromium-config.mozbuild") FINAL_LIBRARY = "xul" diff -Nru firefox-esr-128.3.1esr/dom/geolocation/nsIGeolocationUIUtilsWin.idl firefox-esr-128.4.0esr/dom/geolocation/nsIGeolocationUIUtilsWin.idl --- firefox-esr-128.3.1esr/dom/geolocation/nsIGeolocationUIUtilsWin.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/geolocation/nsIGeolocationUIUtilsWin.idl 2024-10-21 23:59:49.000000000 +0000 @@ -0,0 +1,21 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsISupports.idl" + +webidl BrowsingContext; + +/** + * JS utility functions used in display of parts of the geolocation UI. + */ +[scriptable, uuid(bf4040de-e5e2-4be4-8402-ae0c10c499b6)] +interface nsIGeolocationUIUtilsWin : nsISupports +{ + /** + * Removes prompts that are displayed over the browsing context. This is + * used to remove the dialog that is presented over content while Gecko + * waits for the user to grant geolocation permission in Windows. + */ + void dismissPrompts(in BrowsingContext aBC); +}; diff -Nru firefox-esr-128.3.1esr/dom/html/HTMLEmbedElement.cpp firefox-esr-128.4.0esr/dom/html/HTMLEmbedElement.cpp --- firefox-esr-128.3.1esr/dom/html/HTMLEmbedElement.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/html/HTMLEmbedElement.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -79,6 +79,10 @@ AfterMaybeChangeAttr(aNamespaceID, aName, aNotify); } + if (aName == nsGkAtoms::src) { + RefreshFeaturePolicy(); + } + if (aNamespaceID == kNameSpaceID_None && aName == nsGkAtoms::allowfullscreen && mFrameLoader) { if (auto* bc = mFrameLoader->GetExtantBrowsingContext()) { diff -Nru firefox-esr-128.3.1esr/dom/html/HTMLObjectElement.cpp firefox-esr-128.4.0esr/dom/html/HTMLObjectElement.cpp --- firefox-esr-128.3.1esr/dom/html/HTMLObjectElement.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/html/HTMLObjectElement.cpp 2024-10-21 23:59:50.000000000 +0000 @@ -100,6 +100,11 @@ nsIPrincipal* aSubjectPrincipal, bool aNotify) { AfterMaybeChangeAttr(aNamespaceID, aName, aNotify); + + if (aName == nsGkAtoms::data) { + RefreshFeaturePolicy(); + } + return nsGenericHTMLFormControlElement::AfterSetAttr( aNamespaceID, aName, aValue, aOldValue, aSubjectPrincipal, aNotify); } @@ -126,6 +131,7 @@ BlockEmbedOrObjectContentLoading()) { return; } + nsContentUtils::AddScriptRunner(NS_NewRunnableFunction( "HTMLObjectElement::LoadObject", [self = RefPtr(this), aNotify]() { diff -Nru firefox-esr-128.3.1esr/dom/indexedDB/ActorsParent.cpp firefox-esr-128.4.0esr/dom/indexedDB/ActorsParent.cpp --- firefox-esr-128.3.1esr/dom/indexedDB/ActorsParent.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/indexedDB/ActorsParent.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -2962,10 +2962,15 @@ // Waiting to do/doing work on the "work thread". This involves waiting for // the VersionChangeOp (OpenDatabaseOp and DeleteDatabaseOp each have a - // different implementation) to do its work. Eventually the state will - // transition to SendingResults. + // different implementation) to do its work. If the VersionChangeOp is + // OpenDatabaseOp and it succeeded then the next state is + // DatabaseWorkVersionUpdate. Otherwise the next step is SendingResults. DatabaseWorkVersionChange, + // Waiting to do/doing finalization work on the QuotaManager IO thread. + // Eventually the state will transition to SendingResults. + DatabaseWorkVersionUpdate, + // Waiting to send/sending results on the PBackground thread. Next step is // Completed. SendingResults, @@ -3087,6 +3092,8 @@ virtual nsresult DispatchToWorkThread() = 0; + virtual nsresult DoVersionUpdate() = 0; + // Should only be called by Run(). virtual void SendResults() = 0; @@ -3166,6 +3173,8 @@ // cycles. VersionChangeOp* mVersionChangeOp; + MoveOnlyFunction mCompleteCallback; + uint32_t mTelemetryId; public: @@ -3210,6 +3219,8 @@ nsresult DispatchToWorkThread() override; + nsresult DoVersionUpdate() override; + void SendResults() override; static nsresult UpdateLocaleAwareIndex(mozIStorageConnection& aConnection, @@ -3281,6 +3292,8 @@ nsresult DispatchToWorkThread() override; + nsresult DoVersionUpdate() override; + void SendResults() override; }; @@ -3341,6 +3354,8 @@ nsresult DispatchToWorkThread() override; + nsresult DoVersionUpdate() override; + void SendResults() override; }; @@ -10699,6 +10714,7 @@ void VersionChangeTransaction::SendCompleteNotification(nsresult aResult) { AssertIsOnBackgroundThread(); MOZ_ASSERT(mOpenDatabaseOp); + MOZ_ASSERT(!mOpenDatabaseOp->mCompleteCallback); MOZ_ASSERT_IF(!mActorWasAlive, mOpenDatabaseOp->HasFailed()); MOZ_ASSERT_IF(!mActorWasAlive, mOpenDatabaseOp->mState > OpenDatabaseOp::State::SendingResults); @@ -10709,21 +10725,40 @@ return; } + openDatabaseOp->mCompleteCallback = + [self = SafeRefPtr{this, AcquireStrongRefFromRawPtr{}}, aResult]() { + if (!self->IsActorDestroyed()) { + Unused << self->SendComplete(aResult); + } + }; + + auto handleError = [openDatabaseOp](const nsresult rv) { + openDatabaseOp->SetFailureCodeIfUnset(NS_ERROR_DOM_INDEXEDDB_ABORT_ERR); + + openDatabaseOp->mState = OpenDatabaseOp::State::SendingResults; + + MOZ_ALWAYS_SUCCEEDS(openDatabaseOp->Run()); + }; + if (NS_FAILED(aResult)) { // 3.3.1 Opening a database: // "If the upgrade transaction was aborted, run the steps for closing a // database connection with connection, create and return a new AbortError // exception and abort these steps." - openDatabaseOp->SetFailureCodeIfUnset(NS_ERROR_DOM_INDEXEDDB_ABORT_ERR); + handleError(NS_ERROR_DOM_INDEXEDDB_ABORT_ERR); + return; } - openDatabaseOp->mState = OpenDatabaseOp::State::SendingResults; + openDatabaseOp->mState = OpenDatabaseOp::State::DatabaseWorkVersionUpdate; - if (!IsActorDestroyed()) { - Unused << SendComplete(aResult); - } + QuotaManager* const quotaManager = QuotaManager::Get(); + MOZ_ASSERT(quotaManager); - MOZ_ALWAYS_SUCCEEDS(openDatabaseOp->Run()); + QM_TRY(MOZ_TO_RESULT(quotaManager->IOThread()->Dispatch(openDatabaseOp, + NS_DISPATCH_NORMAL)) + .mapErr( + [](const auto) { return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR; }), + QM_VOID, handleError); } void VersionChangeTransaction::ActorDestroy(ActorDestroyReason aWhy) { @@ -11536,7 +11571,20 @@ mEnforcingQuota(aEnforcingQuota), mIsInPrivateBrowsingMode(aIsInPrivateBrowsingMode) {} +uint64_t DatabaseFileManager::DatabaseVersion() const { + AssertIsOnIOThread(); + + return mDatabaseVersion; +} + +void DatabaseFileManager::UpdateDatabaseVersion(uint64_t aDatabaseVersion) { + AssertIsOnIOThread(); + + mDatabaseVersion = aDatabaseVersion; +} + nsresult DatabaseFileManager::Init(nsIFile* aDirectory, + const uint64_t aDatabaseVersion, mozIStorageConnection& aConnection) { AssertIsOnIOThread(); MOZ_ASSERT(aDirectory); @@ -11571,6 +11619,8 @@ mJournalDirectoryPath.init(std::move(path)); } + mDatabaseVersion = aDatabaseVersion; + QM_TRY_INSPECT(const auto& stmt, MOZ_TO_RESULT_INVOKE_MEMBER_TYPED( nsCOMPtr, aConnection, @@ -14930,6 +14980,10 @@ QM_WARNONLY_TRY(MOZ_TO_RESULT(DispatchToWorkThread()), handleError); break; + case State::DatabaseWorkVersionUpdate: + QM_WARNONLY_TRY(MOZ_TO_RESULT(DoVersionUpdate()), handleError); + break; + case State::SendingResults: SendResults(); break; @@ -15168,7 +15222,8 @@ NS_ERROR_DOM_INDEXEDDB_VERSION_ERR); if (!fileManager->Initialized()) { - QM_TRY(MOZ_TO_RESULT(fileManager->Init(fmDirectory, *connection))); + QM_TRY(MOZ_TO_RESULT(fileManager->Init( + fmDirectory, mMetadata->mCommonMetadata.version(), *connection))); idm->AddFileManager(fileManager.clonePtr()); } @@ -15706,12 +15761,40 @@ return NS_OK; } +nsresult OpenDatabaseOp::DoVersionUpdate() { + AssertIsOnIOThread(); + MOZ_ASSERT(mState == State::DatabaseWorkVersionUpdate); + MOZ_ASSERT(!HasFailed()); + + AUTO_PROFILER_LABEL("OpenDatabaseOp::DoVersionUpdate", DOM); + + if (NS_WARN_IF(QuotaClient::IsShuttingDownOnNonBackgroundThread()) || + !OperationMayProceed()) { + IDB_REPORT_INTERNAL_ERR(); + return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR; + } + + mFileManager->UpdateDatabaseVersion(mRequestedVersion); + + mState = State::SendingResults; + + QM_TRY(MOZ_TO_RESULT( + DispatchThisAfterProcessingCurrentEvent(mOwningEventTarget))); + + return NS_OK; +} + void OpenDatabaseOp::SendResults() { AssertIsOnOwningThread(); MOZ_ASSERT(mState == State::SendingResults); MOZ_ASSERT(mMaybeBlockedDatabases.IsEmpty()); MOZ_ASSERT_IF(!HasFailed(), !mVersionChangeTransaction); + if (mCompleteCallback) { + auto completeCallback = std::move(mCompleteCallback); + completeCallback(); + } + DebugOnly info = nullptr; MOZ_ASSERT_IF(mDatabaseId.isSome() && gLiveDatabaseHashtable && gLiveDatabaseHashtable->Get(mDatabaseId.ref(), &info), @@ -15734,8 +15817,6 @@ // need to update the version in our metadata. mMetadata->mCommonMetadata.version() = mRequestedVersion; - mFileManager->UpdateDatabaseVersion(mRequestedVersion); - nsresult rv = EnsureDatabaseActorIsAlive(); if (NS_SUCCEEDED(rv)) { // We successfully opened a database so use its actor as the success @@ -16356,6 +16437,10 @@ } } +nsresult DeleteDatabaseOp::DoVersionUpdate() { + MOZ_CRASH("Not implemented because this should be unreachable."); +} + void DeleteDatabaseOp::SendResults() { AssertIsOnOwningThread(); MOZ_ASSERT(mState == State::SendingResults); @@ -16726,6 +16811,10 @@ MOZ_CRASH("Not implemented because this should be unreachable."); } +nsresult GetDatabasesOp::DoVersionUpdate() { + MOZ_CRASH("Not implemented because this should be unreachable."); +} + void GetDatabasesOp::SendResults() { AssertIsOnOwningThread(); MOZ_ASSERT(mState == State::SendingResults); diff -Nru firefox-esr-128.3.1esr/dom/indexedDB/DatabaseFileManager.h firefox-esr-128.4.0esr/dom/indexedDB/DatabaseFileManager.h --- firefox-esr-128.3.1esr/dom/indexedDB/DatabaseFileManager.h 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/indexedDB/DatabaseFileManager.h 2024-10-21 23:59:51.000000000 +0000 @@ -89,11 +89,9 @@ const nsAString& DatabaseFilePath() const { return mDatabaseFilePath; } - uint64_t DatabaseVersion() const { return mDatabaseVersion; } + uint64_t DatabaseVersion() const; - void UpdateDatabaseVersion(uint64_t aDatabaseVersion) { - mDatabaseVersion = aDatabaseVersion; - } + void UpdateDatabaseVersion(uint64_t aDatabaseVersion); IndexedDBCipherKeyManager& MutableCipherKeyManagerRef() const { MOZ_ASSERT(mIsInPrivateBrowsingMode); @@ -108,7 +106,8 @@ bool Initialized() const { return mInitialized; } - nsresult Init(nsIFile* aDirectory, mozIStorageConnection& aConnection); + nsresult Init(nsIFile* aDirectory, const uint64_t aDatabaseVersion, + mozIStorageConnection& aConnection); [[nodiscard]] nsCOMPtr GetDirectory(); diff -Nru firefox-esr-128.3.1esr/dom/indexedDB/SchemaUpgrades.cpp firefox-esr-128.4.0esr/dom/indexedDB/SchemaUpgrades.cpp --- firefox-esr-128.3.1esr/dom/indexedDB/SchemaUpgrades.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/indexedDB/SchemaUpgrades.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -2866,7 +2866,8 @@ /* aDatabaseFilePath */ u""_ns, /* aEnforcingQuota */ false, /* aIsInPrivateBrowsingMode */ false); - nsresult rv = fileManager->Init(aFMDirectory, aConnection); + nsresult rv = + fileManager->Init(aFMDirectory, /* aDatabaseVersion */ 0, aConnection); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } diff -Nru firefox-esr-128.3.1esr/dom/ipc/ContentParent.cpp firefox-esr-128.4.0esr/dom/ipc/ContentParent.cpp --- firefox-esr-128.3.1esr/dom/ipc/ContentParent.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/ipc/ContentParent.cpp 2024-10-21 23:59:49.000000000 +0000 @@ -105,6 +105,7 @@ #include "mozilla/dom/FileSystemSecurity.h" #include "mozilla/dom/GeolocationBinding.h" #include "mozilla/dom/GeolocationPositionError.h" +#include "mozilla/dom/GeolocationSystem.h" #include "mozilla/dom/GetFilesHelper.h" #include "mozilla/dom/IPCBlobUtils.h" #include "mozilla/dom/JSActorService.h" @@ -1430,7 +1431,14 @@ if (aPrincipal->SchemeIs("about")) { uint32_t flags = 0; - if (NS_FAILED(aPrincipal->GetAboutModuleFlags(&flags))) { + nsresult rv = aPrincipal->GetAboutModuleFlags(&flags); + if (rv == nsresult::NS_ERROR_FACTORY_NOT_REGISTERED) { + // This happens in our tests. There is a race between an about page + // getting unregistered and the content process unregistering a blob URL + // which it was using. + return true; + } + if (NS_FAILED(rv)) { return false; } @@ -8236,6 +8244,26 @@ #endif } +IPCResult ContentParent::RecvGetSystemGeolocationPermissionBehavior( + GetSystemGeolocationPermissionBehaviorResolver&& aResolver) { + aResolver(Geolocation::GetLocationOSPermission()); + return IPC_OK(); +} + +IPCResult ContentParent::RecvRequestGeolocationPermissionFromUser( + const MaybeDiscardedBrowsingContext& aBrowsingContext, + RequestGeolocationPermissionFromUserResolver&& aResolver) { + if (MOZ_UNLIKELY(aBrowsingContext.IsNullOrDiscarded())) { + aResolver(GeolocationPermissionStatus::Error); + return IPC_OK(); + } + RefPtr browsingContext = aBrowsingContext.get(); + + Geolocation::ReallowWithSystemPermissionOrCancel(browsingContext, + std::move(aResolver)); + return IPC_OK(); +} + #ifdef FUZZING_SNAPSHOT IPCResult ContentParent::RecvSignalFuzzingReady() { // No action needed here, we already observe this message directly diff -Nru firefox-esr-128.3.1esr/dom/ipc/ContentParent.h firefox-esr-128.4.0esr/dom/ipc/ContentParent.h --- firefox-esr-128.3.1esr/dom/ipc/ContentParent.h 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/ipc/ContentParent.h 2024-10-21 23:59:49.000000000 +0000 @@ -1399,6 +1399,14 @@ mozilla::ipc::IPCResult RecvGetSystemIcon(nsIURI* aURI, GetSystemIconResolver&& aResolver); + mozilla::ipc::IPCResult RecvGetSystemGeolocationPermissionBehavior( + GetSystemGeolocationPermissionBehaviorResolver&& aResolver); + + MOZ_CAN_RUN_SCRIPT_BOUNDARY mozilla::ipc::IPCResult + RecvRequestGeolocationPermissionFromUser( + const MaybeDiscardedBrowsingContext& aBrowsingContext, + RequestGeolocationPermissionFromUserResolver&& aResolver); + #ifdef FUZZING_SNAPSHOT mozilla::ipc::IPCResult RecvSignalFuzzingReady(); #endif diff -Nru firefox-esr-128.3.1esr/dom/ipc/PContent.ipdl firefox-esr-128.4.0esr/dom/ipc/PContent.ipdl --- firefox-esr-128.3.1esr/dom/ipc/PContent.ipdl 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/ipc/PContent.ipdl 2024-10-21 23:59:49.000000000 +0000 @@ -75,6 +75,7 @@ include "mozilla/dom/CSPMessageUtils.h"; include "mozilla/dom/DocShellMessageUtils.h"; include "mozilla/dom/FeaturePolicyUtils.h"; +include "mozilla/dom/GeolocationIPCUtils.h"; include "mozilla/dom/MediaSessionIPCUtils.h"; include "mozilla/dom/PageLoadEventUtils.h"; include "mozilla/dom/ReferrerInfoUtils.h"; @@ -115,6 +116,8 @@ using mozilla::Telemetry::KeyedScalarAction from "mozilla/TelemetryComms.h"; using mozilla::Telemetry::DynamicScalarDefinition from "mozilla/TelemetryComms.h"; using mozilla::Telemetry::ChildEventData from "mozilla/TelemetryComms.h"; +using mozilla::dom::geolocation::SystemGeolocationPermissionBehavior from "mozilla/dom/GeolocationIPCUtils.h"; +using mozilla::dom::geolocation::GeolocationPermissionStatus from "mozilla/dom/GeolocationIPCUtils.h"; #if defined(XP_WIN) [MoveOnly] using mozilla::UntrustedModulesData from "mozilla/UntrustedModulesData.h"; @@ -1953,6 +1956,15 @@ // implementation in ContentParent::RecvGetSystemIcon for details. async GetSystemIcon(nullable nsIURI aURI) returns (nsresult aResult, ByteBuf? aData); + // Returns the status of the geolocation permission on this system. + // May not be accurate if the information is not known. + async GetSystemGeolocationPermissionBehavior() returns (SystemGeolocationPermissionBehavior permission); + + // Opens system geolocation settings and posts a modal dialog dialog + // to the tab that requested geolocation. Returns permission status + // after user has granted or canceled permission. + async RequestGeolocationPermissionFromUser(MaybeDiscardedBrowsingContext aBrowsingContext) returns (GeolocationPermissionStatus aStatus); + #ifdef FUZZING_SNAPSHOT // Used by the child process to signal that it is ready to start fuzzing. // This can in particular be used to wait for a particular event in a diff -Nru firefox-esr-128.3.1esr/dom/media/VideoFrameContainer.cpp firefox-esr-128.4.0esr/dom/media/VideoFrameContainer.cpp --- firefox-esr-128.3.1esr/dom/media/VideoFrameContainer.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/media/VideoFrameContainer.cpp 2024-10-21 23:59:50.000000000 +0000 @@ -153,18 +153,13 @@ mImageContainer->GetCurrentImages(&oldImages); PrincipalHandle principalHandle = PRINCIPAL_HANDLE_NONE; - ImageContainer::FrameID lastFrameIDForOldPrincipalHandle = - mFrameIDForPendingPrincipalHandle - 1; if (mPendingPrincipalHandle != PRINCIPAL_HANDLE_NONE && - ((!oldImages.IsEmpty() && - oldImages.LastElement().mFrameID >= lastFrameIDForOldPrincipalHandle) || - (!aImages.IsEmpty() && - aImages[0].mFrameID > lastFrameIDForOldPrincipalHandle))) { - // We are releasing the last FrameID prior to - // `lastFrameIDForOldPrincipalHandle` OR there are no FrameIDs prior to - // `lastFrameIDForOldPrincipalHandle` in the new set of images. This means - // that the old principal handle has been flushed out and we can notify our - // video element about this change. + (aImages.IsEmpty() || + aImages[0].mFrameID >= mFrameIDForPendingPrincipalHandle)) { + // There are no FrameIDs prior to `mFrameIDForPendingPrincipalHandle` + // in the new set of images. + // This means that the old principal handle has been flushed out and we + // can notify our video element about this change. principalHandle = mPendingPrincipalHandle; mLastPrincipalHandle = mPendingPrincipalHandle; mPendingPrincipalHandle = PRINCIPAL_HANDLE_NONE; diff -Nru firefox-esr-128.3.1esr/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp firefox-esr-128.4.0esr/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp --- firefox-esr-128.3.1esr/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp 2024-10-21 23:59:51.000000000 +0000 @@ -87,8 +87,10 @@ return MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR, RESULT_DETAIL("unable to find codec")); } - // openh264 has broken decoding of some h264 videos so - // don't use it unless explicitly allowed for now. + // This logic is mirrored in FFmpegDecoderModule::Supports. We prefer to use + // our own OpenH264 decoder through the plugin over ffmpeg by default due to + // broken decoding with some versions. openh264 has broken decoding of some + // h264 videos so don't use it unless explicitly allowed for now. if (!strcmp(codec->name, "libopenh264") && !StaticPrefs::media_ffmpeg_allow_openh264()) { FFMPEG_LOG(" unable to find codec (openh264 disabled by pref)"); diff -Nru firefox-esr-128.3.1esr/dom/media/platforms/ffmpeg/FFmpegDecoderModule.h firefox-esr-128.4.0esr/dom/media/platforms/ffmpeg/FFmpegDecoderModule.h --- firefox-esr-128.3.1esr/dom/media/platforms/ffmpeg/FFmpegDecoderModule.h 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/media/platforms/ffmpeg/FFmpegDecoderModule.h 2024-10-21 23:59:49.000000000 +0000 @@ -103,17 +103,28 @@ mimeType.BeginReading())); return media::DecodeSupportSet{}; } - AVCodecID codec = audioCodec != AV_CODEC_ID_NONE ? audioCodec : videoCodec; - bool supports = !!FFmpegDataDecoder::FindAVCodec(mLib, codec); + AVCodecID codecId = + audioCodec != AV_CODEC_ID_NONE ? audioCodec : videoCodec; + AVCodec* codec = FFmpegDataDecoder::FindAVCodec(mLib, codecId); MOZ_LOG(sPDMLog, LogLevel::Debug, ("FFmpeg decoder %s requested type '%s'", - supports ? "supports" : "rejects", mimeType.BeginReading())); - if (supports) { - // TODO: Note that we do not yet distinguish between SW/HW decode support. - // Will be done in bug 1754239. - return media::DecodeSupport::SoftwareDecode; + !!codec ? "supports" : "rejects", mimeType.BeginReading())); + if (!codec) { + return media::DecodeSupportSet{}; + } + // This logic is mirrored in FFmpegDataDecoder::InitDecoder and + // FFmpegVideoDecoder::InitVAAPIDecoder. We prefer to use our own + // OpenH264 decoder through the plugin over ffmpeg by default due to broken + // decoding with some versions. + if (!strcmp(codec->name, "libopenh264") && + !StaticPrefs::media_ffmpeg_allow_openh264()) { + MOZ_LOG(sPDMLog, LogLevel::Debug, + ("FFmpeg decoder rejects as openh264 disabled by pref")); + return media::DecodeSupportSet{}; } - return media::DecodeSupportSet{}; + // TODO: Note that we do not yet distinguish between SW/HW decode support. + // Will be done in bug 1754239. + return media::DecodeSupport::SoftwareDecode; } protected: diff -Nru firefox-esr-128.3.1esr/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp firefox-esr-128.4.0esr/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp --- firefox-esr-128.3.1esr/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp 2024-10-21 23:59:51.000000000 +0000 @@ -318,6 +318,17 @@ FFMPEG_LOG(" couldn't find ffmpeg VA-API decoder"); return NS_ERROR_DOM_MEDIA_FATAL_ERR; } + // This logic is mirrored in FFmpegDecoderModule::Supports. We prefer to use + // our own OpenH264 decoder through the plugin over ffmpeg by default due to + // broken decoding with some versions. openh264 has broken decoding of some + // h264 videos so don't use it unless explicitly allowed for now. + if (!strcmp(codec->name, "libopenh264") && + !StaticPrefs::media_ffmpeg_allow_openh264()) { + FFMPEG_LOG(" unable to find codec (openh264 disabled by pref)"); + return MediaResult( + NS_ERROR_DOM_MEDIA_FATAL_ERR, + RESULT_DETAIL("unable to find codec (openh264 disabled by pref)")); + } FFMPEG_LOG(" codec %s : %s", codec->name, codec->long_name); if (!(mCodecContext = mLib->avcodec_alloc_context3(codec))) { diff -Nru firefox-esr-128.3.1esr/dom/media/systemservices/CamerasChild.cpp firefox-esr-128.4.0esr/dom/media/systemservices/CamerasChild.cpp --- firefox-esr-128.3.1esr/dom/media/systemservices/CamerasChild.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/media/systemservices/CamerasChild.cpp 2024-10-21 23:59:50.000000000 +0000 @@ -334,7 +334,7 @@ LOG(("%s", __PRETTY_FUNCTION__)); nsCString unique_id(unique_idUTF8); nsCOMPtr runnable = - mozilla::NewRunnableMethod( + mozilla::NewRunnableMethod( "camera::PCamerasChild::SendAllocateCapture", this, &CamerasChild::SendAllocateCapture, aCapEngine, unique_id, aWindowID); LockAndDispatch<> dispatcher(this, __func__, runnable, -1, mReplyInteger); diff -Nru firefox-esr-128.3.1esr/dom/push/PushCrypto.sys.mjs firefox-esr-128.4.0esr/dom/push/PushCrypto.sys.mjs --- firefox-esr-128.3.1esr/dom/push/PushCrypto.sys.mjs 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/push/PushCrypto.sys.mjs 2024-10-21 23:59:50.000000000 +0000 @@ -106,6 +106,8 @@ // aes128gcm scheme. function getCryptoParamsFromPayload(payload) { if (payload.byteLength < 21) { + // The value 21 is from https://datatracker.ietf.org/doc/html/rfc8188#section-2.1 + // | salt (16) | rs (4) | idlen (1) | keyid (idlen) | throw new CryptoError("Truncated header", BAD_CRYPTO); } let rs = @@ -113,8 +115,16 @@ (payload[17] << 16) | (payload[18] << 8) | payload[19]; + if (rs < 18) { + // https://datatracker.ietf.org/doc/html/rfc8188#section-2.1 + throw new CryptoError( + "Record sizes smaller than 18 are invalid", + BAD_RS_PARAM + ); + } let keyIdLen = payload[20]; if (keyIdLen != 65) { + // https://datatracker.ietf.org/doc/html/rfc8291/#section-4 throw new CryptoError("Invalid sender public key", BAD_DH_PARAM); } if (payload.byteLength <= 21 + keyIdLen) { @@ -169,8 +179,12 @@ throw new CryptoError("Invalid salt parameter", BAD_SALT_PARAM); } var rs = enc.rs ? parseInt(enc.rs, 10) : 4096; - if (isNaN(rs)) { - throw new CryptoError("rs parameter must be a number", BAD_RS_PARAM); + if (isNaN(rs) || rs < 1 || rs > 68719476705) { + // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-encryption-encoding-03#section-3.1 + throw new CryptoError( + "rs parameter must be a number greater than 1 and smaller than 2^36-31", + BAD_RS_PARAM + ); } return { salt, @@ -789,6 +803,7 @@ // Perform the actual encryption of the payload. async encrypt(key, nonce) { if (this.rs < 18) { + // https://datatracker.ietf.org/doc/html/rfc8188#section-2.1 throw new CryptoError("recordsize is too small", BAD_RS_PARAM); } @@ -867,6 +882,7 @@ createHeader(key) { // layout is "salt|32-bit-int|8-bit-int|key" if (key.byteLength != 65) { + // https://datatracker.ietf.org/doc/html/rfc8291/#section-4 throw new CryptoError("Invalid key length for header", BAD_DH_PARAM); } // the 2 ints diff -Nru firefox-esr-128.3.1esr/dom/svg/SVGPolyElement.cpp firefox-esr-128.4.0esr/dom/svg/SVGPolyElement.cpp --- firefox-esr-128.3.1esr/dom/svg/SVGPolyElement.cpp 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/svg/SVGPolyElement.cpp 2024-10-21 23:59:50.000000000 +0000 @@ -6,6 +6,7 @@ #include "SVGPolyElement.h" #include "DOMSVGPointList.h" +#include "mozilla/dom/SVGAnimatedLength.h" #include "mozilla/gfx/2D.h" #include "SVGContentUtils.h" @@ -48,13 +49,15 @@ if (!points.Length()) return; - float px = points[0].mX, py = points[0].mY, prevAngle = 0.0; + float zoom = UserSpaceMetrics::GetZoom(this); + + float px = points[0].mX * zoom, py = points[0].mY * zoom, prevAngle = 0.0; aMarks->AppendElement(SVGMark(px, py, 0, SVGMark::eStart)); for (uint32_t i = 1; i < points.Length(); ++i) { - float x = points[i].mX; - float y = points[i].mY; + float x = points[i].mX * zoom; + float y = points[i].mY * zoom; float angle = std::atan2(y - py, x - px); // Vertex marker. @@ -93,18 +96,20 @@ return false; } + float zoom = UserSpaceMetrics::GetZoom(this); + if (aToBoundsSpace.IsRectilinear()) { // We can avoid transforming each point and just transform the result. // Important for large point lists. - Rect bounds(points[0], Size()); + Rect bounds(points[0] * zoom, Size()); for (uint32_t i = 1; i < points.Length(); ++i) { - bounds.ExpandToEnclose(points[i]); + bounds.ExpandToEnclose(points[i] * zoom); } *aBounds = aToBoundsSpace.TransformBounds(bounds); } else { - *aBounds = Rect(aToBoundsSpace.TransformPoint(points[0]), Size()); + *aBounds = Rect(aToBoundsSpace.TransformPoint(points[0] * zoom), Size()); for (uint32_t i = 1; i < points.Length(); ++i) { - aBounds->ExpandToEnclose(aToBoundsSpace.TransformPoint(points[i])); + aBounds->ExpandToEnclose(aToBoundsSpace.TransformPoint(points[i] * zoom)); } } return true; diff -Nru firefox-esr-128.3.1esr/dom/svg/SVGPolygonElement.cpp firefox-esr-128.4.0esr/dom/svg/SVGPolygonElement.cpp --- firefox-esr-128.3.1esr/dom/svg/SVGPolygonElement.cpp 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/svg/SVGPolygonElement.cpp 2024-10-21 23:59:51.000000000 +0000 @@ -6,6 +6,7 @@ #include "mozilla/dom/SVGPolygonElement.h" #include "mozilla/dom/SVGPolygonElementBinding.h" +#include "mozilla/dom/SVGAnimatedLength.h" #include "mozilla/gfx/2D.h" #include "SVGContentUtils.h" @@ -64,9 +65,11 @@ return nullptr; } - aBuilder->MoveTo(points[0]); + float zoom = UserSpaceMetrics::GetZoom(this); + + aBuilder->MoveTo(points[0] * zoom); for (uint32_t i = 1; i < points.Length(); ++i) { - aBuilder->LineTo(points[i]); + aBuilder->LineTo(points[i] * zoom); } aBuilder->Close(); diff -Nru firefox-esr-128.3.1esr/dom/svg/SVGPolylineElement.cpp firefox-esr-128.4.0esr/dom/svg/SVGPolylineElement.cpp --- firefox-esr-128.3.1esr/dom/svg/SVGPolylineElement.cpp 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/svg/SVGPolylineElement.cpp 2024-10-21 23:59:51.000000000 +0000 @@ -6,6 +6,7 @@ #include "mozilla/dom/SVGPolylineElement.h" #include "mozilla/dom/SVGPolylineElementBinding.h" +#include "mozilla/dom/SVGAnimatedLength.h" #include "mozilla/gfx/2D.h" using namespace mozilla::gfx; @@ -41,9 +42,11 @@ return nullptr; } - aBuilder->MoveTo(points[0]); + float zoom = UserSpaceMetrics::GetZoom(this); + + aBuilder->MoveTo(points[0] * zoom); for (uint32_t i = 1; i < points.Length(); ++i) { - aBuilder->LineTo(points[i]); + aBuilder->LineTo(points[i] * zoom); } return aBuilder->Finish(); diff -Nru firefox-esr-128.3.1esr/dom/system/linux/moz.build firefox-esr-128.4.0esr/dom/system/linux/moz.build --- firefox-esr-128.3.1esr/dom/system/linux/moz.build 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/system/linux/moz.build 2024-10-21 23:59:51.000000000 +0000 @@ -20,4 +20,6 @@ LOCAL_INCLUDES += ["/dom/geolocation"] CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] +include("/ipc/chromium/chromium-config.mozbuild") + FINAL_LIBRARY = "xul" diff -Nru firefox-esr-128.3.1esr/dom/webidl/History.webidl firefox-esr-128.4.0esr/dom/webidl/History.webidl --- firefox-esr-128.3.1esr/dom/webidl/History.webidl 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/webidl/History.webidl 2024-10-21 23:59:51.000000000 +0000 @@ -17,7 +17,7 @@ interface History { [Throws] readonly attribute unsigned long length; - [Throws] + [Throws, NeedsCallerType] attribute ScrollRestoration scrollRestoration; [Throws] readonly attribute any state; diff -Nru firefox-esr-128.3.1esr/dom/workers/WorkerPrivate.cpp firefox-esr-128.4.0esr/dom/workers/WorkerPrivate.cpp --- firefox-esr-128.3.1esr/dom/workers/WorkerPrivate.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/workers/WorkerPrivate.cpp 2024-10-21 23:59:52.000000000 +0000 @@ -626,16 +626,18 @@ // Silence bad assertions. } + // Make as MOZ_CAN_RUN_SCRIPT_BOUNDARY for calling mHandler->Call(); + // Since WorkerRunnable::WorkerRun has not to be MOZ_CAN_RUN_SCRIPT, but + // DebuggerImmediateRunnable is a special case that must to call the function + // defined in the debugger script. + MOZ_CAN_RUN_SCRIPT_BOUNDARY virtual bool WorkerRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate) override { - JS::Rooted global(aCx, JS::CurrentGlobalOrNull(aCx)); - JS::Rooted callable( - aCx, JS::ObjectOrNullValue(mHandler->CallableOrNull())); - JS::HandleValueArray args = JS::HandleValueArray::empty(); JS::Rooted rval(aCx); + IgnoredErrorResult rv; + MOZ_KnownLive(mHandler)->Call({}, &rval, rv); - // WorkerRunnable::Run will report the exception if it happens. - return JS_CallFunctionValue(aCx, global, callable, args, &rval); + return !rv.Failed(); } }; diff -Nru firefox-esr-128.3.1esr/dom/workers/test/WorkerDebugger.initialize_waiting_debugger.js firefox-esr-128.4.0esr/dom/workers/test/WorkerDebugger.initialize_waiting_debugger.js --- firefox-esr-128.3.1esr/dom/workers/test/WorkerDebugger.initialize_waiting_debugger.js 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/dom/workers/test/WorkerDebugger.initialize_waiting_debugger.js 2024-10-21 23:59:51.000000000 +0000 @@ -2,4 +2,6 @@ dump(" Evaluated debugger script\n"); -postMessage("debugger script ran"); +setImmediate(function () { + postMessage("debugger script ran"); +}); diff -Nru firefox-esr-128.3.1esr/gfx/2d/DrawTargetCairo.cpp firefox-esr-128.4.0esr/gfx/2d/DrawTargetCairo.cpp --- firefox-esr-128.3.1esr/gfx/2d/DrawTargetCairo.cpp 2024-10-08 21:18:27.000000000 +0000 +++ firefox-esr-128.4.0esr/gfx/2d/DrawTargetCairo.cpp 2024-10-21 23:59:52.000000000 +0000 @@ -654,6 +654,24 @@ return CairoContentToGfxFormat(cairo_surface_get_content(surface)); } +// We need to \-escape any single-quotes in the destination and URI strings, +// in order to pass them via the attributes arg to cairo_tag_begin. +// +// We also need to escape any backslashes (bug 1748077), as per doc at +// https://www.cairographics.org/manual/cairo-Tags-and-Links.html#cairo-tag-begin +// +// (Encoding of non-ASCII chars etc gets handled later by the PDF backend.) +static void EscapeForCairo(nsACString& aStr) { + for (size_t i = aStr.Length(); i > 0;) { + --i; + if (aStr[i] == '\'') { + aStr.ReplaceLiteral(i, 1, "\\'"); + } else if (aStr[i] == '\\') { + aStr.ReplaceLiteral(i, 1, "\\\\"); + } + } +} + void DrawTargetCairo::Link(const char* aDest, const char* aURI, const Rect& aRect) { if ((!aURI || !*aURI) && (!aDest || !*aDest)) { @@ -661,24 +679,6 @@ return; } - // We need to \-escape any single-quotes in the destination and URI strings, - // in order to pass them via the attributes arg to cairo_tag_begin. - // - // We also need to escape any backslashes (bug 1748077), as per doc at - // https://www.cairographics.org/manual/cairo-Tags-and-Links.html#cairo-tag-begin - // - // (Encoding of non-ASCII chars etc gets handled later by the PDF backend.) - auto escapeForCairo = [](nsACString& aStr) { - for (size_t i = aStr.Length(); i > 0;) { - --i; - if (aStr[i] == '\'') { - aStr.ReplaceLiteral(i, 1, "\\'"); - } else if (aStr[i] == '\\') { - aStr.ReplaceLiteral(i, 1, "\\\\"); - } - } - }; - double x = aRect.x, y = aRect.y, w = aRect.width, h = aRect.height; cairo_user_to_device(mContext, &x, &y); cairo_user_to_device_distance(mContext, &w, &h); @@ -686,12 +686,12 @@ if (aDest && *aDest) { nsAutoCString dest(aDest); - escapeForCairo(dest); + EscapeForCairo(dest); attributes.AppendPrintf(" dest='%s'", dest.get()); } if (aURI && *aURI) { nsAutoCString uri(aURI); - escapeForCairo(uri); + EscapeForCairo(uri); attributes.AppendPrintf(" uri='%s'", uri.get()); } @@ -710,12 +710,7 @@ } nsAutoCString dest(aDestination); - for (size_t i = dest.Length(); i > 0;) { - --i; - if (dest[i] == '\'') { - dest.ReplaceLiteral(i, 1, "\\'"); - } - } + EscapeForCairo(dest); double x = aPoint.x, y = aPoint.y; cairo_user_to_device(mContext, &x, &y); diff -Nru firefox-esr-128.3.1esr/gfx/layers/ipc/CanvasChild.cpp firefox-esr-128.4.0esr/gfx/layers/ipc/CanvasChild.cpp --- firefox-esr-128.3.1esr/gfx/layers/ipc/CanvasChild.cpp 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/gfx/layers/ipc/CanvasChild.cpp 2024-10-21 23:59:51.000000000 +0000 @@ -385,6 +385,14 @@ } } + // If we are continuously drawing/recording, then we need to periodically + // flush our external surface/image references, to ensure they actually get + // freed on a timely basis. + if (mRecorder) { + mRecorder->ClearProcessedExternalSurfaces(); + mRecorder->ClearProcessedExternalImages(); + } + ++mTransactionsSinceGetDataSurface; } diff -Nru firefox-esr-128.3.1esr/gfx/layers/ipc/CompositorThread.cpp firefox-esr-128.4.0esr/gfx/layers/ipc/CompositorThread.cpp --- firefox-esr-128.3.1esr/gfx/layers/ipc/CompositorThread.cpp 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/gfx/layers/ipc/CompositorThread.cpp 2024-10-21 23:59:51.000000000 +0000 @@ -174,7 +174,11 @@ /* static */ bool CompositorThreadHolder::IsInCompositorThread() { if (!CompositorThread()) { - return false; + // We no longer have a pointer to the compositor thread, but we might + // still be running in the compositor thread. In we ever had a + // compositor thread, we logged the thread id in sProfilerThreadId, + // so we compare that value against the current thread id. + return (sProfilerThreadId == profiler_current_thread_id()); } bool in = false; MOZ_ALWAYS_SUCCEEDS(CompositorThread()->IsOnCurrentThread(&in)); diff -Nru firefox-esr-128.3.1esr/gfx/thebes/gfxPlatform.cpp firefox-esr-128.4.0esr/gfx/thebes/gfxPlatform.cpp --- firefox-esr-128.3.1esr/gfx/thebes/gfxPlatform.cpp 2024-10-08 21:18:28.000000000 +0000 +++ firefox-esr-128.4.0esr/gfx/thebes/gfxPlatform.cpp 2024-10-21 23:59:52.000000000 +0000 @@ -1051,6 +1051,16 @@ } } +static bool IsOsTempDirWritable() { + nsCOMPtr file; + nsresult rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(file)); + NS_ENSURE_SUCCESS(rv, false); + bool writable = false; + rv = file->IsWritable(&writable); + NS_ENSURE_SUCCESS(rv, false); + return writable; +} + void gfxPlatform::ReportTelemetry() { MOZ_RELEASE_ASSERT(XRE_IsParentProcess(), "GFX: Only allowed to be called from parent process."); @@ -1073,6 +1083,9 @@ supportsHDR |= screen->GetIsHDR(); } Telemetry::ScalarSet(Telemetry::ScalarID::GFX_SUPPORTS_HDR, supportsHDR); + + bool tmpWritable = IsOsTempDirWritable(); + Telemetry::ScalarSet(Telemetry::ScalarID::GFX_TMP_WRITABLE, tmpWritable); } nsString adapterDesc; diff -Nru firefox-esr-128.3.1esr/js/src/vm/ArrayBufferViewObject.cpp firefox-esr-128.4.0esr/js/src/vm/ArrayBufferViewObject.cpp --- firefox-esr-128.3.1esr/js/src/vm/ArrayBufferViewObject.cpp 2024-10-08 21:18:32.000000000 +0000 +++ firefox-esr-128.4.0esr/js/src/vm/ArrayBufferViewObject.cpp 2024-10-21 23:59:56.000000000 +0000 @@ -203,14 +203,14 @@ AutoLength autoLength) { MOZ_ASSERT(buffer->isResizable()); - if (!init(cx, buffer, byteOffset, length, bytesPerElement)) { - return false; - } - initFixedSlot(AUTO_LENGTH_SLOT, BooleanValue(static_cast(autoLength))); initFixedSlot(INITIAL_LENGTH_SLOT, PrivateValue(length)); initFixedSlot(INITIAL_BYTE_OFFSET_SLOT, PrivateValue(byteOffset)); + if (!init(cx, buffer, byteOffset, length, bytesPerElement)) { + return false; + } + // Compute the actual byteLength and byteOffset for non-shared buffers. if (!isSharedMemory()) { computeResizableLengthAndByteOffset(bytesPerElement); diff -Nru firefox-esr-128.3.1esr/l10n-an/browser/browser/confirmationHints.ftl firefox-esr-128.4.0esr/l10n-an/browser/browser/confirmationHints.ftl --- firefox-esr-128.3.1esr/l10n-an/browser/browser/confirmationHints.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-an/browser/browser/confirmationHints.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -7,7 +7,10 @@ confirmation-hint-breakage-report-sent = S'ha ninviau l'informe. Gracias! confirmation-hint-login-removed = S'ha eliminau l'inicio de sesión. -confirmation-hint-password-saved = S'ha alzau la clau. +confirmation-hint-password-saved = Password saved! confirmation-hint-pin-tab = Clavau! confirmation-hint-pin-tab-description = Fe clic en a pestanya pa desclavar-la. confirmation-hint-send-to-device = Ninviada! +confirmation-hint-firefox-relay-mask-created = S'ha creau una nueva mascara. +confirmation-hint-firefox-relay-mask-reused = S'ha reutilizau la mascara existent. +confirmation-hint-screenshot-copied = S'ha copiau la captura de pantalla. diff -Nru firefox-esr-128.3.1esr/l10n-an/browser/browser/preferences/preferences.ftl firefox-esr-128.4.0esr/l10n-an/browser/browser/preferences/preferences.ftl --- firefox-esr-128.3.1esr/l10n-an/browser/browser/preferences/preferences.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-an/browser/browser/preferences/preferences.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -123,7 +123,7 @@ containers-disable-alert-cancel-button = Mantener habilitadas containers-remove-alert-title = Borrar iste contenedor? # Variables: -# $count (Number) - Number of tabs that will be closed. +# $count (number) - Number of tabs that will be closed. containers-remove-alert-msg = { $count -> [one] Si borra iste contenedor agora, { $count } pestanya de contender se zarrará. Ye seguro que quiere borrar iste contenedor? @@ -146,6 +146,8 @@ preferences-zoom-header = Zoom preferences-default-zoom = Zoom per defecto .accesskey = Z +# Variables: +# $percentage (number) - Zoom percentage value preferences-default-zoom-value = .label = { $percentage }% preferences-zoom-text-only = @@ -237,15 +239,15 @@ applications-always-ask = .label = Preguntar siempre # Variables: -# $type-description (String) - Description of the type (e.g "Portable Document Format") -# $type (String) - the MIME type (e.g application/binary) +# $type-description (string) - Description of the type (e.g "Portable Document Format") +# $type (string) - The MIME type (e.g application/binary) applications-type-description-with-type = { $type-description } ({ $type }) # Variables: -# $extension (String) - file extension (e.g .TXT) -# $type (String) - the MIME type (e.g application/binary) +# $extension (string) - File extension (e.g .TXT) +# $type (string) - The MIME type (e.g application/binary) applications-file-ending-with-type = { applications-file-ending } ({ $type }) # Variables: -# $plugin-name (String) - Name of a plugin (e.g Adobe Flash) +# $plugin-name (string) - Name of a plugin (e.g Adobe Flash) applications-use-plugin-in = .label = Usar { $plugin-name } (en o { -brand-short-name }) applications-open-inapp = @@ -281,6 +283,8 @@ play-drm-content-learn-more = Mas información update-application-title = Actualizacions d'o { -brand-short-name }: update-application-description = Mantener { -brand-short-name } a lo día pa tener lo millor rendimiento, estabilidat y seguranza. +# Variables: +# $version (string) - Firefox version update-application-version = Versión { $version } Novedatz update-history = .label = Amostrar l'historial d'actualizacions @@ -322,7 +326,7 @@ performance-limit-content-process-enabled-desc = Los procesos de conteniu adicional pueden millorar las prestacions quan se fan servir multiples pestanyas, pero tamién usarán mas memoria. performance-limit-content-process-blocked-desc = Modificar lo numero de procesos de contenius no ye posible soque con la versión multiproceso de { -brand-short-name }. Aprender a comprebar si los multiprocesos son activaus # Variables: -# $num - default value of the `dom.ipc.processCount` pref. +# $num (number) - Default value of the `dom.ipc.processCount` pref. performance-default-content-process-count = .label = { $num } (por defecto) @@ -428,6 +432,8 @@ # and non-essential but also not entirely trivial and useless. home-prefs-snippets-header = .label = Retallos +# Variables: +# $num (number) - Number of rows displayed home-prefs-sections-rows-option = .label = { $num -> @@ -454,7 +460,7 @@ .label = Dar sucherencia de busca .accesskey = b search-show-suggestions-url-bar-option = - .label = Amostrar las sucherencias de busqueda en os resultaus d'a barra d'adrezas + .label = Amostrar as sucherencias de busqueda en os resultaus d'a barra d'adrezas .accesskey = l # This string describes what the user will observe when the system # prioritizes search suggestions over browsing history in the results @@ -462,7 +468,7 @@ # "ahead" refers to location (appearing most proximate to), not time # (appearing before). search-show-suggestions-above-history-option = - .label = Amostrar las sucherencias de busqueda antes de l'hstorial de navegación en os resultasu d'a barra d'adrezas + .label = Amostrar as sucherencias de busqueda antes de l'historial de navegación en os resultaus d'a barra d'adrezas search-show-suggestions-private-windows = .label = Amostrar las sucherencias de busqueda en as finestras privadas search-suggestions-cant-show = No s'amostrarán sucherencias de busca a os resultaus d'a barra d'ubicación porque ha configurau o { -brand-short-name } pa que no recuerde nunca o historial. @@ -485,7 +491,7 @@ # ('Duplicate' is an adjective) search-keyword-warning-title = Duplicar a parola clau # Variables: -# $name (String) - Name of a search engine. +# $name (string) - Name of a search engine. search-keyword-warning-engine = Ha trigau una parola clau que ya emplega "{ $name }". Trigue-ne unatra. search-keyword-warning-bookmark = Ha trigau una parola clau que ya emplega unatro marcapachinas. Trigue-ne unatra. @@ -746,8 +752,8 @@ sitedata-header = Cookies y datos de puestos web sitedata-total-size-calculating = Calculando los datos d'o puesto y la grandaria d'a caché… # Variables: -# $value (Number) - Value of the unit (for example: 4.6, 500) -# $unit (String) - Name of the unit (for example: "bytes", "KB") +# $value (number) - Value of the unit (for example: 4.6, 500) +# $unit (string) - Name of the unit (for example: "bytes", "KB") sitedata-total-size = Las tuyas cookies, datos d'o puesto y caché son usando per agora { $value } { $unit } d'o espacio de disco sitedata-learn-more = Saber-ne mas sitedata-delete-on-close = diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/aboutLogins.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/aboutLogins.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/aboutLogins.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/aboutLogins.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -111,6 +111,7 @@ login-intro-description = إن حفظت جلسات ولوجك في { -brand-product-name } على جهاز آخر، فهكذا يمكنك أن تزامنها هنا: login-intro-instructions-fxa = أنشِئ أو لِج إلى { -fxaccount-brand-name } على الأجهزة التي لديك عليها جلسات ولوج محفوظة about-logins-login-intro-heading-message = احفظ كلمات مرورك في مكان آمن +login-intro-description2 = جميع كلمات المرور التي تحفظها في { -brand-product-name } مشفرة. بالإضافة إلى ذلك، إننا نراقب الانتهاكات وننبهك إذا تأثرت بها. معرفة المزيد login-intro-instructions-fxa2 = أنشئ أو لج إلى حسابك على الأجهزة التي لديك عليها جلسات ولوج محفوظة. login-intro-instructions-fxa-settings = انتقل إلى ”الإعدادات > المزامنة > فعّل المزامنة…“ وضَع علامة على ”جلسات الولوج وكلمات السر“. login-intro-instructions-fxa-passwords-help = زُر دعم كلمات السر لمزيد من المساعدة. diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/colorways.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/colorways.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/colorways.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/colorways.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,19 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Colorway names and descriptions + +playmaker-colorway-name = صانع اللعب +playmaker-colorway-description = أنت تخلق فرصًا للفوز وتساعد كل من حولك لكي يرفعوا مستوى لعبتهم. +expressionist-colorway-name = تعبيري +expressionist-colorway-description = أنت ترى العالم بشكل مختلف وتثير إبداعاتُك مشاعر الآخرين. +visionary-colorway-name = بَصِيري +visionary-colorway-description = أنت تتساءل عن الوضع الراهن وتدفع الآخرين إلى تصور مستقبل أفضل. +activist-colorway-name = ناشط +activist-colorway-description = أنت تترك العالم مكانًا أفضل مما وجدته وتقود الآخرين للتصديق. +dreamer-colorway-name = حالم +dreamer-colorway-description = أنت تعتقد أن الحظ ينجذب للجرأة وتلهم الآخرين ليكونوا شجعانًا. +innovator-colorway-name = مبتكِر +innovator-colorway-description = أنت ترى الفرص في كل مكان وتؤثر على حياة كل من حولك. diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/components/mozSupportLink.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/components/mozSupportLink.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/components/mozSupportLink.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/components/mozSupportLink.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,5 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +moz-support-link-text = اطّلع على المزيد diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/featureCallout.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/featureCallout.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/featureCallout.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/featureCallout.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -2,18 +2,60 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +# Callout dialog primary button to advance to next screen +callout-primary-advance-button-label = التالي +# Callout dialog primary button to complete the feature tour +callout-primary-complete-button-label = فهمت! ## Firefox View feature tour strings +# "Tab pickup" refers to the section in Firefox View that displays open +# tabs from other devices +callout-firefox-view-tab-pickup-title = انتقل بين الأجهزة مع خاصية التقاط الألسنة +callout-firefox-view-tab-pickup-subtitle = التقط علامات التبويب المفتوحة بسرعة من هاتفك وافتحها هنا لتحقيق أقصى قدر من التدفق. callout-firefox-view-recently-closed-title = أعد الألسنة المغلقة في لمح البصر callout-firefox-view-recently-closed-subtitle = ستظهر هنا جميع الألسنة المغلقة بطريقة سحريَّة. لا تقلق أبدًا بشأن إغلاق الموقع عن طريق الخطأ مرة أخرى. callout-firefox-view-colorways-title = أضِف دفقة من لون +# "Shade" refer to different color options in each colorway. +callout-firefox-view-colorways-subtitle = اختر الدرجة اللي تتحدث إليك مع التلاوين. فقط في { -brand-product-name }. +callout-firefox-view-colorways-reminder-title = استكشف آخر تلاويننا +# “Shades” refers to the different color options in each colorways +callout-firefox-view-colorways-reminder-subtitle = لوِّن متصفحك بهذه الظلال المميزة المستوحاة من أصوات مستقلة. فقط في { -brand-product-name }. ## Continuous Onboarding - Firefox View: Tab pick up +# “Boost your browsing” refers to the added benefit the user receives from having +# access to the same browsing experience when moving from one browser to another. +# Alternative: ”Improve your browsing experience with tab pickup” +continuous-onboarding-firefox-view-tab-pickup-title = حسن تصفحك مع خاصية التقاط الألسنة continuous-onboarding-firefox-view-tab-pickup-subtitle = يمكنك الوصول إلى الألسنة المفتوحة من أي جهاز. بالإضافة إلى مزامنة الإشارات المرجعية وكلمات السر والمزيد. +continuous-onboarding-firefox-view-tab-pickup-primary-button-label = ابدأ ## PDF.js Feature Tour Strings +callout-pdfjs-edit-title = حرِّر ملفات PDF باستخدام أداتنا النصية الجديدة +callout-pdfjs-edit-body-a = املأ النماذج، أو أضف تعليقات، أو اكتب ملاحظات مباشرة في { -brand-short-name } callout-pdfjs-edit-body-b = تخطي البحث عن المحررين المجانيين على الإنترنت. املأ النماذج أو أضِف التعليقات أو دوّين الملاحظات مباشرةً في { -brand-short-name }. +callout-pdfjs-edit-button = التالي +callout-pdfjs-draw-title = وقِّع المستندات باستخدام أداة رسمنا الجديدة +# “Mark up” refers to the process of “annotating” or adding free hand text or diagramming to the document. +callout-pdfjs-draw-body-a = ميِّز ملفات PDF، ثم احفظ تغييراتك. +# “Mark up” refers to the process of “annotating” or adding free hand text or diagramming to the document. +callout-pdfjs-draw-body-b = لا مزيد من الطباعة والمسح الضوئي. ميِّز ملفات PDF، ثم احفظ تغييراتك. callout-pdfjs-draw-button = فهمت! + +## Firefox View Discoverability Strings + +fx-view-discoverability-title = ألم تقصد إغلاق علامة التبويب هذه؟ +fx-view-discoverability-subtitle = اعثر عليها وافتحها بسرعة هنا، نحتفظ لك بسجل للألسنة المغلقة مؤخرًا. +fx-view-discoverability-primary-button-label = افتح { -firefoxview-brand-name } +fx-view-discoverability-secondary-button-label = أهمِل + +## Split Dismiss Button Labels + +# Blocks the message from showing again +split-dismiss-button-dont-show-option-label = لا تظهر هذه التوصية مرة أخرى +# Dismisses message and reduces frequency of message +split-dismiss-button-show-fewer-option-label = أظهر توصيات أقل +# Opens about:preferences#general-cfrfeatures +split-dismiss-button-manage-settings-option-label = أدِر الإعدادات diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/firefoxView.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/firefoxView.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/firefoxView.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/firefoxView.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -12,6 +12,8 @@ .label = { -firefoxview-brand-name } .accesskey = F firefoxview-page-title = { -firefoxview-brand-name } +firefoxview-page-heading = + .heading = { -firefoxview-brand-name } firefoxview-page-label = .label = { -firefoxview-brand-name } firefoxview-close-button = @@ -27,13 +29,32 @@ # Variables: # $percentValue (Number): the percentage value for setup completion firefoxview-tabpickup-progress-label = اكتمل { $percentValue }٪ +firefoxview-tabpickup-step-signin-header = بدِّل بسلاسة بين الأجهزة +firefoxview-tabpickup-step-signin-description = للحصول على علامات تبويب هاتفك هنا، قم أولاً بتسجيل الدخول أو إنشاء حساب. firefoxview-tabpickup-step-signin-primarybutton = واصِل firefoxview-syncedtabs-signin-header = اسحب الألسنة من أي مكان firefoxview-syncedtabs-signin-primarybutton = لج أو سجل حسابًا +firefoxview-tabpickup-adddevice-header = زامن { -brand-product-name } على هاتفك أو جهازك اللوحي +firefoxview-tabpickup-adddevice-description = قم بتنزيل { -brand-product-name } للجوال وقم بتسجيل الدخول من هناك. firefoxview-tabpickup-adddevice-learn-how = اطّلع على الطريقة +firefoxview-tabpickup-adddevice-primarybutton = احصل على { -brand-product-name } للجوال +firefoxview-tabpickup-synctabs-header = فعّل مزامنة علامات التبويب +firefoxview-tabpickup-synctabs-description = السماح لـ{ -brand-short-name } بمشاركة علامات التبويب بين الأجهزة. +firefoxview-tabpickup-synctabs-learn-how = اطّلع على الطريقة +firefoxview-tabpickup-synctabs-primarybutton = زامن الألسنة المفتوحة +firefoxview-syncedtabs-synctabs-header = تحديث إعداداتك للمزامنة +firefoxview-syncedtabs-synctabs-description = لرؤية علامات التبويب من أجهزة أخرى، يتعين عليك مزامنة ألسنتك المفتوحة. +firefoxview-syncedtabs-synctabs-checkbox = السماح بمزامنة الألسنة المفتوحة +firefoxview-syncedtabs-loading-header = جارً المزامنة +firefoxview-syncedtabs-loading-description = عند الانتهاء، سترى أي ألسنة مفتوحة على أجهزة أخرى. تحقق مرة أخرى قريبًا. +firefoxview-tabpickup-fxa-admin-disabled-header = لقد قامت مؤسستك بتعطيل المزامنة +firefoxview-tabpickup-fxa-admin-disabled-description = { -brand-short-name } غير قادر على مزامنة علامات التبويب بين الأجهزة لأن مسؤولك عطّل المزامنة. +firefoxview-tabpickup-fxa-disabled-by-policy-description = { -brand-short-name } غير قادر على مزامنة ألسنتك بين الأجهزة لأن مؤسستك عطّلت المزامنة. firefoxview-tabpickup-network-offline-header = تحقَّق من اتصالك بالإنترنت firefoxview-tabpickup-network-offline-description = إذا كنت تستخدم جدار حماية أو وكيلًا، فتأكد من أن { -brand-short-name } لديه إذن للوصول إلى الوب. firefoxview-tabpickup-network-offline-primarybutton = حاول مجددًا +firefoxview-tabpickup-sync-error-header = نواجه مشكلة في المزامنة +firefoxview-tabpickup-sync-error-primarybutton = حاول مجددًا firefoxview-tabpickup-sync-disconnected-header = فعل المزامنة للمتابعة firefoxview-closed-tabs-title = المُغلقة حديثًا firefoxview-closed-tabs-description2 = أعِد فتح الصفحات التي أغلقتها في هذه النافذة. diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/genai.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/genai.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/genai.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/genai.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,50 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Generative AI (GenAI) Settings section + +genai-settings-chat-choose = اختر روبوت المحادثة +genai-settings-chat-choose-one-menuitem = + .label = إختر واحدًا + +## Chatbot prompts +## Prompts are plain language ‘instructions’ sent to a chatbot. +## These prompts have been made concise and direct in English because some chatbot providers +## have character restrictions and being direct reduces the chance for misinterpretation. +## When localizing, please be concise and direct, but not at the expense of losing meaning. + + +## Chatbot menu shortcuts + +# $provider (string) - name of the provider +genai-menu-ask-provider = + .label = اسأل { $provider } +# $provider (string) - name of the provider +genai-input-ask-provider = + .placeholder = اسأل { $provider }… + +## Chatbot header + +genai-header-provider-menu = + .title = اختر روبوت المحادثة +genai-header-options-button = + .title = افتح القائمة +genai-header-close-button = + .title = أغلق + +## Chatbot onboarding + +genai-onboarding-primary = واصِل +genai-onboarding-secondary = أغلق +genai-onboarding-chatgpt-tooltip = + .title = chatGPT +genai-onboarding-chatgpt-learn = اعرف المزيد عن chatGPT +genai-onboarding-gemini-tooltip = + .title = Google Gemini +genai-onboarding-gemini-learn = اعرف المزيد عن Gemini + +## Chatbot onboarding choices +## These describe features/capabilities of chatbot providers. These are not buttons/actions. + diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/originControls.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/originControls.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/originControls.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/originControls.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -8,17 +8,53 @@ ## and are used to inform the user how the extension can access their ## data for the current website, and allow them to control it. +origin-controls-no-access = + .label = لا يمكن للامتداد قراءة البيانات ولا تغييرها origin-controls-quarantined = .label = ليس مسموحًا للامتداد بقراءة وتغيير البيانات +origin-controls-quarantined-status = + .label = لا يُسمح بالامتداد على المواقع المحظورة +origin-controls-quarantined-allow = + .label = السماح به على المواقع المحظورة +origin-controls-options = + .label = يمكن للامتداد قراءة البيانات وتغييرها: +origin-controls-option-all-domains = + .label = على جميع المواقع +origin-controls-option-when-clicked = + .label = فقط عند النقر عليه +# This string denotes an option that grants the extension access to +# the current site whenever they visit it. +# Variables: +# $domain (String) - The domain for which the access is granted. +origin-controls-option-always-on = + .label = السماح دائمًا على { $domain } ## These strings are used to map Origin Controls states to user-friendly ## messages. They currently appear in the unified extensions panel. +origin-controls-state-no-access = لا يمكن قراءة وتغيير البيانات على هذا الموقع +origin-controls-state-quarantined = غير مسموح به بواسطة { -vendor-short-name } على هذا الموقع +origin-controls-state-always-on = يمكنك دائمًا قراءة البيانات وتغييرها على هذا الموقع +origin-controls-state-when-clicked = الإذن مطلوب لقراءة البيانات وتغييرها +origin-controls-state-hover-run-visit-only = تشغيل لهذه الزيارة فقط +origin-controls-state-runnable-hover-open = فتح الامتداد +origin-controls-state-runnable-hover-run = تشغيل الامتداد +origin-controls-state-temporary-access = يمكنه قراءة و تغيير بيانات هذه الزيارة ## Extension's toolbar button. ## Variables: ## $extensionTitle (String) - Extension name or title message. +origin-controls-toolbar-button = + .label = { $extensionTitle } + .tooltiptext = { $extensionTitle } +# Extension's toolbar button when permission is needed. +# Note that the new line is intentionally part of the tooltip. +origin-controls-toolbar-button-permission-needed = + .label = { $extensionTitle } + .tooltiptext = + { $extensionTitle } + التصريح مطلوب # Extension's toolbar button when quarantined. # Note that the new line is intentionally part of the tooltip. origin-controls-toolbar-button-quarantined = diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/profile/default-bookmarks.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/profile/default-bookmarks.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/profile/default-bookmarks.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/profile/default-bookmarks.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,30 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +# This file intentionally uses hard-coded brand names instead of Fluent terms. +# This approach minimizes issues across multiple release channels and rebranded +# versions. + +default-bookmarks-title = العلامات +default-bookmarks-heading = العلامات +default-bookmarks-toolbarfolder = مجلّد شريط العلامات +# link title for https://www.mozilla.org/firefox/central/ +default-bookmarks-getting-started = البداية +# Firefox links folder name +default-bookmarks-firefox-heading = Mozilla Firefox +# link title for https://www.mozilla.org/firefox/help/ +default-bookmarks-firefox-get-help = احصل على مُساعدة +# link title for https://www.mozilla.org/firefox/customize/ +default-bookmarks-firefox-customize = خصّص Firefox +# link title for https://www.mozilla.org/about/ +default-bookmarks-firefox-about = معلومات عنا +# Nightly builds only, link title for https://bugzilla.mozilla.org/ +default-bookmarks-bugzilla = متتبع عِلَل Mozilla +# Nightly builds only, link title for https://developer.mozilla.org/ +default-bookmarks-mdn = شبكة مطوري موزيلا +# Nightly builds only, link title for about:crashes +default-bookmarks-crashes = كل انهياراتك +# Nightly builds only, link title for https://planet.mozilla.org/ +default-bookmarks-planet = كوكب Mozilla diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/reportBrokenSite.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/reportBrokenSite.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/reportBrokenSite.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/reportBrokenSite.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,39 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +report-broken-site-mainview-title = أبلِغ عن موقع معطوب +report-broken-site-panel-header = + .label = أبلِغ عن موقع معطوب + .title = أبلِغ عن موقع معطوب +report-broken-site-panel-reason-label = ما المتعطّل؟ +report-broken-site-panel-reason-optional-label = ما المتعطّل؟ (اختياري) +report-broken-site-panel-reason-choose = + .label = اختر سببًا +report-broken-site-panel-reason-slow = + .label = الموقع بطيء أو لا يعمل +report-broken-site-panel-reason-media = + .label = الصور أو مقاطع الفيديو +report-broken-site-panel-reason-content = + .label = الأزرار والروابط والمحتويات الأخرى +report-broken-site-panel-reason-account = + .label = الولوج أو تسجيل الخروج +report-broken-site-panel-reason-adblockers = + .label = حاجبات الإعلانات +report-broken-site-panel-reason-other = + .label = شيء آخر +report-broken-site-panel-description-label = صِف المشكلة +report-broken-site-panel-description-optional-label = صِف المشكلة (اختياري) +report-broken-site-panel-send-more-info-link = أرسل المزيد من المعلومات +report-broken-site-panel-button-cancel = + .label = ألغِ +report-broken-site-panel-button-okay = + .label = حسنا +report-broken-site-panel-button-send = + .label = أرسِل +report-broken-site-panel-unspecified = غير محدد +report-broken-site-panel-report-sent-label = أُرسل بلاغك +report-broken-site-panel-report-sent-header = + .label = أُرسل بلاغك + .title = أُرسل بلاغك +report-broken-site-panel-missing-reason-label = الرجاء اختيار سبب diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/shopping.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/shopping.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/shopping.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/shopping.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -2,39 +2,111 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +# Title for page showing where a user can check the +# review quality of online shopping product reviews +shopping-main-container-title = مدقق المراجعة +shopping-beta-marker = بيتا +# This string is for ensuring that screen reader technology +# can read out the "Beta" part of the shopping sidebar header. +# Any changes to shopping-main-container-title and +# shopping-beta-marker should also be reflected here. +shopping-a11y-header = + .aria-label = مدقق المراجعة - الإصدار التجريبي shopping-close-button = .title = أغلق +# This string is for notifying screen reader users that the +# sidebar is still loading data. +shopping-a11y-loading = + .aria-label = يحمّل… ## Strings for the letter grade component. ## For now, we only support letter grades A, B, C, D and F. ## Letter A indicates the highest grade, and F indicates the lowest grade. ## Letters are hardcoded and cannot be localized. +shopping-letter-grade-description-ab = المراجعات الموثوقة +shopping-letter-grade-description-c = مزيج من المراجعات الموثوقة وغير الموثوقة +shopping-letter-grade-description-df = المراجعات غير موثوقة +# This string is displayed in a tooltip that appears when the user hovers +# over the letter grade component without a visible description. +# It is also used for screen readers. +# $letter (String) - The letter grade as A, B, C, D or F (hardcoded). +# $description (String) - The localized letter grade description. See shopping-letter-grade-description-* strings above. +shopping-letter-grade-tooltip = + .title = { $letter } - { $description } ## Strings for the shopping message-bar +shopping-message-bar-warning-stale-analysis-message-2 = معلومات جديدة للتحقق منها +shopping-message-bar-warning-stale-analysis-button = تحقق الآن shopping-message-bar-keep-closed-dismiss-button = لا، شكرًا ## Strings for the product review snippets card +shopping-highlight-price = السعر +shopping-highlight-quality = الجودة +shopping-highlight-shipping = الشحن +shopping-highlight-competitiveness = التنافسية +shopping-highlight-packaging = التعبئة والتغليف ## Strings for show more card +shopping-show-more-button = اعرض المزيد +shopping-show-less-button = اعرض أقل ## Strings for the settings card +shopping-settings-label = + .label = إعدادات +shopping-settings-recommendations-toggle2 = + .label = عرض التوصيات والمحتوى المدعوم +shopping-settings-recommendations-learn-more3 = لا يشارك { -brand-product-name } بياناتك الشخصية، لذا لن تلاحقك هذه التوصيات عبر الإنترنت. اعرف المزيد +shopping-settings-recommendations-toggle = + .label = إظهار الإعلانات في "مراجعة المدقق" +shopping-settings-recommendations-learn-more2 = ستشاهد إعلانات عرضية لمنتجات ذات صلة. نحن نعلن فقط عن المنتجات التي تحتوي على تقييمات موثوقة. تعرف على المزيد +shopping-settings-opt-out-button = إيقاف تشغيل "مدقق المراجعة" +powered-by-fakespot = يتم تشغيل Review Checker بواسطة { -fakespot-brand-full-name } +shopping-settings-auto-open-toggle = + .label = فتح مدقق المراجعة تلقائيًا +# Description text for regions where we support three sites. Sites are limited to Amazon, Walmart and Best Buy. +# Variables: +# $firstSite (String) - The first shopping page name +# $secondSite (String) - The second shopping page name +# $thirdSite (String) - The third shopping page name +shopping-settings-auto-open-description-three-sites = عند عرض المنتجات على { $firstSite } و{ $secondSite } و{ $thirdSite } +# Description text for regions where we support only one site (e.g. currently used in FR/DE with Amazon). +# Variables: +# $currentSite (String) - The current shopping page name +shopping-settings-auto-open-description-single-site = عند عرض المنتجات على { $currentSite } +shopping-settings-sidebar-enabled-state = مدقق المراجعة يعمل ## Strings for the adjusted rating component +# "Adjusted rating" means a star rating that has been adjusted to include only +# reliable reviews. +shopping-adjusted-rating-label = + .label = التقييم المعدّل +shopping-adjusted-rating-unreliable-reviews = تمت إزالة المراجعات غير الموثوقة +shopping-adjusted-rating-based-reliable-reviews = بناءً على المراجعات الموثوقة ## Strings for the review reliability component +shopping-review-reliability-label = + .label = ما مدى موثوقية هذه المراجعات؟ ## Strings for the analysis explainer component +shopping-analysis-explainer-label = + .label = كيف نحدد جودة المراجعة +shopping-analysis-explainer-intro2 = نحن نستخدم تقنية الذكاء الاصطناعي من { -fakespot-brand-full-name } للتحقق من موثوقية مراجعات المنتجات. سيساعدك هذا فقط في تقييم جودة المراجعات، وليس جودة المنتج. +shopping-analysis-explainer-grades-intro = نقوم بتعيين درجة بالحروف من A إلى F لمراجعات كل منتج. ## Strings for UrlBar button +shopping-sidebar-open-button2 = + .tooltiptext = افتح مدقق المراجعة +shopping-sidebar-close-button2 = + .tooltiptext = أغلق مدقق المراجعة ## Strings for the unanalyzed product card. ## The word 'analyzer' when used here reflects what this tool is called on @@ -43,22 +115,52 @@ ## used in the name of the Firefox feature ('Review Checker'). If that is not ## possible - if these terms are not meaningfully different - that is OK. +shopping-unanalyzed-product-analyze-button = افحص جودة التقييم ## Strings for the advertisement +more-to-consider-ad-label = + .label = هناك المزيد للنظر فيه +shopping-sponsored-label = برعاية +ad-by-fakespot = إعلان بواسطة { -fakespot-brand-name } ## Shopping survey strings. +shopping-survey-headline = ساعد في تحسين { -brand-product-name } +shopping-survey-q1-radio-1-label = راضٍ جدًا +shopping-survey-q1-radio-2-label = راضٍ +shopping-survey-q1-radio-3-label = حيادي +shopping-survey-q1-radio-4-label = غير راضٍ +shopping-survey-q1-radio-5-label = غير راضٍ أبدًا +shopping-survey-question-two = هل يساعدك "مدقق المراجعة" على اتخاذ قرارات الشراء بشكل أسهل؟ +shopping-survey-q2-radio-1-label = نعم +shopping-survey-q2-radio-2-label = لا +shopping-survey-q2-radio-3-label = لا أعرف +shopping-survey-next-button-label = التالي +shopping-survey-submit-button-label = أرسِل +shopping-survey-terms-link = شروط الاستخدام +shopping-survey-thanks = + .heading = شكرًا على تعليقك! ## Shopping Feature Callout strings. ## "price tag" refers to the price tag icon displayed in the address bar to ## access the feature. +shopping-callout-closed-opted-in-subtitle = ارجع إلى مدقق المراجعة عندما ترى بطاقة السعر. +shopping-callout-pdp-opted-in-title = هل هذه المراجعات موثوقة؟ اكتشف ذلك بسرعة. shopping-callout-closed-not-opted-in-revised-button = فهمت shopping-callout-not-opted-in-reminder-close-button = أهمِل ## Onboarding message strings. +shopping-onboarding-opt-in-button = نعم، جربها +shopping-onboarding-not-now-button = ليس الآن shopping-onboarding-dialog-close-button = .title = أغلِق .aria-label = أغلِق +# Aria-label to make the "steps" of the shopping onboarding container visible to screen readers. +# Variables: +# $current (Int) - Number of the current page +# $total (Int) - Total number of pages +shopping-onboarding-welcome-steps-indicator-label = + .aria-label = التقدم: الخطوة { $current } من { $total } diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/sidebar.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/sidebar.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/sidebar.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/sidebar.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,154 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +menu-view-review-checker = + .label = مدقق المراجعة + +## Labels for sidebar history panel + +# Variables: +# $date (string) - Date to be formatted based on locale +sidebar-history-date-today = + .heading = اليوم - { DATETIME($date, dateStyle: "full") } +sidebar-history-date-yesterday = + .heading = أمس - { DATETIME($date, dateStyle: "full") } +sidebar-history-date-this-month = + .heading = { DATETIME($date, dateStyle: "full") } +sidebar-history-date-prev-month = + .heading = { DATETIME($date, month: "long", year: "numeric") } +sidebar-history-delete = + .title = احذف من التأريخ +sidebar-history-sort-by-date = + .label = رتّب حسب التاريخ +sidebar-history-sort-by-site = + .label = رتّب حسب الموقع +sidebar-history-clear = + .label = امسح التأريخ + +## Labels for sidebar search + +# "Search" is a noun (as in "Results of the search for") +# Variables: +# $query (String) - The search query used for searching through browser history. +sidebar-search-results-header = + .heading = نتائج البحث عن "{ $query }" + +## Labels for sidebar customize panel + +sidebar-customize-extensions-header = امتدادات الشريط الجانبي +sidebar-customize-firefox-tools-header = + .label = أدوات { -brand-product-name } +sidebar-customize-firefox-settings = إدارة إعدادات { -brand-short-name } +sidebar-position-left = + .label = عرض على اليسار +sidebar-position-right = + .label = عرض على اليمين +sidebar-vertical-tabs = + .label = علامات التبويب العمودية +sidebar-horizontal-tabs = + .label = علامات التبويب الأفقية +sidebar-customize-tabs-header = + .label = إعدادات الألسنة +sidebar-customize-button-header = + .label = زر الشريط الجانبي +sidebar-customize-position-header = + .label = موضع الشريط الجانبي +sidebar-visibility-setting-always-show = + .label = توسيع وتقليص الشريط الجانبي +sidebar-visibility-setting-hide-sidebar = + .label = إظهار وإخفاء الشريط الجانبي +sidebar-customize-settings-header = + .label = إعدادات الشريط الجانبي +sidebar-visibility-always-show = + .label = أظهِر دائما +sidebar-visibility-hide-sidebar = + .label = إخفاء الشريط الجانبي + +## Labels for sidebar context menu items + +sidebar-context-menu-manage-extension = + .label = أدِر الامتداد +sidebar-context-menu-remove-extension = + .label = أزِل الامتداد +sidebar-context-menu-report-extension = + .label = أبلِغ عن الامتداد +sidebar-context-menu-open-in-window = + .label = افتح في نافذة جديدة +sidebar-context-menu-open-in-private-window = + .label = افتح في نافذة خاصة جديدة +sidebar-context-menu-bookmark-tab = + .label = علّم اللسان… +sidebar-context-menu-copy-link = + .label = انسخ الرابط +# Variables: +# $deviceName (String) - The name of the device the user is closing a tab for +sidebar-context-menu-close-remote-tab = + .label = أغلق علامة التبويب على { $deviceName } + +## Labels for sidebar history context menu items + +sidebar-history-context-menu-delete-page = + .label = احذف من التأريخ + +## Labels for sidebar menu items. + +sidebar-menu-history-label = + .label = التأريخ +sidebar-menu-synced-tabs-label = + .label = علامات التبويب من أجهزة أخرى +sidebar-menu-bookmarks-label = + .label = العلامات +sidebar-menu-customize-label = + .label = تخصيص الشريط الجانبي +sidebar-menu-review-checker-label = + .label = مدقق المراجعة + +## Headings for sidebar menu panels. + +sidebar-menu-customize-header = + .heading = تخصيص الشريط الجانبي +sidebar-menu-history-header = + .heading = تاريخ +sidebar-menu-syncedtabs-header = + .heading = علامات التبويب من أجهزة أخرى +sidebar-panel-header-close-button = + .tooltiptext = أغلق + +## Titles for sidebar menu panels. + +sidebar-customize-title = تخصيص الشريط الجانبي +sidebar-history-title = تاريخ +sidebar-syncedtabs-title = علامات التبويب من أجهزة أخرى + +## Context for closing synced tabs when hovering over the items + +# Context for hovering over the close tab button that will +# send a push to the device to close said tab +# Variables: +# $deviceName (String) - the name of the device the user is closing a tab for +synced-tabs-context-close-tab-title = + .title = أغلق علامة التبويب على { $deviceName } + +## Tooltips for the sidebar toolbar button. + +sidebar-toolbar-expand-sidebar = + .tooltiptext = توسيع الشريط الجانبي +sidebar-toolbar-collapse-sidebar = + .tooltiptext = تقليص الشريط الجانبي +sidebar-toolbar-show-sidebar = + .tooltiptext = إظهار الشريط الجانبي +sidebar-toolbar-hide-sidebar = + .tooltiptext = إخفاء الشريط الجانبي +sidebar-widget-expand-sidebar = + .tooltiptext = توسيع الشريط الجانبي + .label = الأشرطة الجانبية +sidebar-widget-collapse-sidebar = + .tooltiptext = تقليص الشريط الجانبي + .label = الأشرطة الجانبية +sidebar-widget-show-sidebar = + .tooltiptext = إظهار الشريط الجانبي + .label = الأشرطة الجانبية +sidebar-widget-hide-sidebar = + .tooltiptext = إخفاء الشريط الجانبي + .label = الأشرطة الجانبية diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/sitePermissions.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/sitePermissions.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/sitePermissions.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/sitePermissions.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,16 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# This string is used to display the option to open blocked popup(s) in site permission management panels. +# Variables: +# $count (String) - Number of blocked pop-ups +site-permissions-open-blocked-popups = + { $count -> + [zero] لا تفتح أي نوافذ منبثقة محجوبة… + [one] افتح نافذة منبثقة محجوبة… + [two] افتح نافذتين منبثقتين محجوبتين… + [few] افتح { $count } نوافذ منبثقة محجوبة… + [many] افتح { $count } نافذة منبثقة محجوبة… + *[other] افتح { $count } نافذة منبثقة محجوبة… + } diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/spotlight.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/spotlight.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/spotlight.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/spotlight.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -9,6 +9,14 @@ ## Mobile download button strings +spotlight-android-marketplace-button = + .title = احصل عليه على متجر Google Play +spotlight-ios-marketplace-button = + .title = نزّله من الـApp Store ## Firefox Focus promo message strings +spotlight-focus-promo-title = نزِّل { -focus-brand-name } +spotlight-focus-promo-subtitle = امسح رمز الـQR ضوئيًا للتنزيل +spotlight-focus-promo-qr-code = + .alt = امسح رمز الـQR ضوئيا لتحصل على { -focus-brand-name } diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/webProtocolHandler.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/webProtocolHandler.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/webProtocolHandler.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/webProtocolHandler.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,13 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +protocolhandler-mailto-os-handler-yes-button = اجعله المبدئي +protocolhandler-mailto-os-handler-no-button = ليس الآن + +## Variables: +## $url (String): The url of a webmailer, but only its full domain name. + + +## + diff -Nru firefox-esr-128.3.1esr/l10n-ar/browser/browser/webauthnDialog.ftl firefox-esr-128.4.0esr/l10n-ar/browser/browser/webauthnDialog.ftl --- firefox-esr-128.3.1esr/l10n-ar/browser/browser/webauthnDialog.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/browser/browser/webauthnDialog.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,13 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +webauthn-pin-invalid-short-prompt = رمز المرور خاطئ، أعِد المحاولة. +webauthn-pin-required-prompt = من فضلك أدخل رمز PIN للجهاز. +webauthn-select-sign-result-unknown-account = حساب غير معروف +webauthn-a-passkey-label = استخدم مفتاح مرور +webauthn-another-passkey-label = استخدم مفتاح مرور آخر +# Variables: +# $domain (String): the domain of the site. +webauthn-specific-passkey-label = مفتاح المرور لـ{ $domain } +webauthn-uv-invalid-short-prompt = فشل التحقق من المستخدم. أعد المحاولة diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/about/aboutGlean.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/about/aboutGlean.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/about/aboutGlean.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/about/aboutGlean.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -3,8 +3,19 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. -### "Glean" and "Glean SDK" should remain in English. - ### "FOG", "Glean", and "Glean SDK" should remain in English. - +-fog-brand-name = FOG +-glean-brand-name = Glean +glean-sdk-brand-name = { -glean-brand-name } SDK +about-glean-page-title2 = حول { -glean-brand-name } +about-glean-header = حول { -glean-brand-name } +about-glean-upload-enabled = رفع البيانات مفعّل. +about-glean-upload-disabled = رفع البيانات معطّل. +about-glean-upload-enabled-local = رفع البيانات مفعّل فقط للإرسال إلى خادم محلي. +# Variables: +# $moz-official-define-value (Boolean): the value of the MOZILLA_OFFICIAL define. +# Do not translate strings between tags. +about-glean-moz-official = MOZILLA_OFFICIAL:{ $moz-official-define-value } +about-glean-about-testing-header = حول الاختبار +about-glean-about-data-header = حول البيانات diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/about/aboutThirdParty.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/about/aboutThirdParty.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/about/aboutThirdParty.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/about/aboutThirdParty.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -2,4 +2,52 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +third-party-page-title = معلومات وحدة الطرف الثالث +third-party-section-title = قائمة وحدات الطرف الثالث في { -brand-short-name } +third-party-message-empty = لم تكتشف أي وحدات طرف ثالث. +third-party-message-no-duration = غير مسجل +third-party-detail-version = إصدار الملف +third-party-detail-vendor = معلومات المنتِج +third-party-detail-occurrences = التكرارات + .title = كم مرة تم تحميل هذه الوحدة. +third-party-detail-app = التطبيق +third-party-detail-publisher = الناشر +third-party-th-process = عملية +third-party-th-duration = مدة التحميل (مللي ثانية) +third-party-th-status = الحالة +third-party-icon-unsigned = + .title = هذه الوحدة غير موقعة + .alt = هذه الوحدة غير موقعة +third-party-icon-warning = + .title = إنهار { -brand-short-name } برمجيا بسبب هذه الوحدة + .alt = إنهار { -brand-short-name } برمجيا بسبب هذه الوحدة +third-party-status-loaded = حُمِّل +third-party-status-blocked = حُجبت +third-party-status-redirected = تمت إعادة توجيهه +third-party-button-copy-to-clipboard = انسخ البيانات الخام إلى الحافظة +third-party-loading-data = + .alt = جارٍ تحميل معلومات النظام… + .title = جارٍ تحميل معلومات النظام… +third-party-button-reload = أعد التحميل مع معلومات النظام + .title = أعد التحميل مع معلومات النظام +third-party-button-open = + .title = افتح مكان الملف… +third-party-button-to-block = + .title = احجب هذه الوحدة + .aria-label = احجب هذه الوحدة +third-party-button-to-unblock = + .title = محجوب حاليا، انقر لإلغاء حجبه. + .aria-label = محجوب حاليا، انقر لإلغاء حجبه. +third-party-button-to-block-module = احجب هذه الوحدة + .title = احجب هذه الوحدة + .aria-label = احجب هذه الوحدة +third-party-button-to-unblock-module = إلغاء حظر هذه الوحدة + .title = محجوب حاليا، انقر لإلغاء حجبه. + .aria-label = محجوب حاليا، انقر لإلغاء حجبه. +third-party-button-expand = + .title = أظهر المعلومات المفصلة +third-party-button-collapse = + .title = اطو المعلومات المفصلة +third-party-blocking-requires-restart = لحجب وحدة من طرف ثالث، يجب إعادة تشغيل { -brand-short-name }. +third-party-should-restart-title = أعِد تشغيل { -brand-short-name } third-party-restart-now = أعِد التشغيل الآن diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/about/aboutWebauthn.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/about/aboutWebauthn.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/about/aboutWebauthn.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/about/aboutWebauthn.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,81 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +### Localization for about:webauthn, a security token management page + +# Page title +# 'WebAuthn' is a protocol name and should not be translated +about-webauthn-page-title = حول WebAuthn + +## Section titles + +about-webauthn-info-section-title = معلومات الجهاز +about-webauthn-info-subsection-title = معلومات المصادقة +about-webauthn-options-subsection-title = خيارات المصادقة +about-webauthn-pin-section-title = إدارة رقم التعريف الشخصي +about-webauthn-credential-management-section-title = إدارة بيانات الاعتماد +about-webauthn-pin-required-section-title = رقم التعريف الشخصي مطلوب +about-webauthn-confirm-deletion-section-title = أكّد الحذف + +## Info field texts + +about-webauthn-text-not-available = غير متوفر على هذه المنصة. +about-webauthn-bio-enrollment-list-subsection-title = التسجيلات: +about-webauthn-add-bio-enrollment-section-title = إضافة تسجيل جديد + +## Results label + +about-webauthn-results-success = تم! +about-webauthn-results-general-error = خطأ! + +## Labels + + +## Buttons + +about-webauthn-cancel-button = ألغِ +about-webauthn-send-pin-button = حسنا +about-webauthn-delete-button = احذف +about-webauthn-start-enrollment-button = بدء التسجيل +about-webauthn-update-button = حدّث + +## Authenticator options fields +## Option fields correspond to the CTAP2 option IDs and definitions found in https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#option-id + +about-webauthn-auth-option-uv = التحقق من المستخدم +about-webauthn-auth-option-clientpin = رقم التعريف الشخصي للعميل +# Shows when boolean value for an option is True. True should not be translated. +about-webauthn-auth-option-true = صحيح +# Shows when boolean value of an option is False. False should not be translated. +about-webauthn-auth-option-false = خاطئ +# If the value is missing (null), it means a certain feature is not supported. +about-webauthn-auth-option-null = غير مدعوم + +## Authenticator info fields +## Info fields correspond to the CTAP2 authenticatorGetInfo field member name and definitions found in https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#authenticatorGetInfo + +about-webauthn-auth-info-certifications = الشهادات +about-webauthn-auth-info-min-pin-length = الحد الأدنى لطول رقم التعريف الشخصي +about-webauthn-auth-info-algorithms = الخوارزميات +about-webauthn-auth-info-pin-protocols = بروتوكولات رقم التعريف الشخصي +about-webauthn-auth-info-max-msg-size = الحد الأقصى لحجم الرسالة +# AAGUID should not be translated. +about-webauthn-auth-info-aaguid = AAGUID +about-webauthn-auth-info-extensions = الامتدادات +about-webauthn-auth-info-versions = الإصدارات +# Shows when boolean value for an info field is True. True should not be translated. +about-webauthn-auth-info-true = صحيح +# Shows when boolean value for an info field is False. False should not be translated. +about-webauthn-auth-info-false = خاطئ +about-webauthn-auth-info-null = غير مدعوم + +## Bio enrollment sample feedbacks + + +## Scan (e.g. of fingerprint) was off-center (e.g. too high, too left, etc.). + + +## + diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/about/aboutWindowsMessages.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/about/aboutWindowsMessages.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/about/aboutWindowsMessages.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/about/aboutWindowsMessages.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,14 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +### Localization for the about:windows-messages page, which is only available +### on the Windows operating system. +### This page records and shows messages sent from the operating system to +### individual browser windows. These messages can be useful in debugging +### hard-to-reproduce issues with window sizing and position. + +# Windows refers to the operating system +windows-messages-page-title = معلومات رسائل Windows +windows-messages-copy-to-clipboard = انسخ إلى الحافظة diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/contentanalysis/contentanalysis.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/contentanalysis/contentanalysis.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/contentanalysis/contentanalysis.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/contentanalysis/contentanalysis.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,27 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +contentanalysis-alert-title = تحليل المحتوى +contentanalysis-slow-agent-dialog-header = جارِ المسح +contentanalysis-operationtype-clipboard = الحافظة +contentanalysis-operationtype-dropped-text = النص المُسقط +contentanalysis-operationtype-print = اطبع +# $filename - The filename associated with the request, such as "aFile.txt" +contentanalysis-customdisplaystring-description = رفع ”{ $filename }“ +contentanalysis-warndialogtitle = قد يكون هذا المحتوى غير آمن +contentanalysis-warndialog-response-allow = استخدم المحتوى +contentanalysis-warndialog-response-deny = ألغِ +contentanalysis-notification-title = تحليل المحتوى +# Variables: +# $filename - Name of the file that was blocked, such as "aFile.txt" +contentanalysis-error-message-upload-file = رُفِض رفع "{ $filename }". +contentanalysis-error-message-dropped-text = رُفِض السحب والإفلات. +contentanalysis-error-message-clipboard = رُفِض اللصق. +contentanalysis-error-message-print = رُفِضت الطباعة. +contentanalysis-block-dialog-title-upload-file = لا يسمح لك برفع هذا الملف +contentanalysis-block-dialog-title-clipboard = لا يسمح لك بلصق هذا المحتوى +contentanalysis-block-dialog-title-dropped-text = لا يسمح لك بإسقاط هذا المحتوى +contentanalysis-block-dialog-title-print = لا يسمح لك بطباعة هذا المستند +contentanalysis-inprogress-quit-title = إغلاق { -brand-shorter-name }؟ +contentanalysis-inprogress-quit-yesbutton = نعم، أغلق diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/featuregates/features.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/featuregates/features.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/featuregates/features.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/featuregates/features.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -2,12 +2,35 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +# The title of the experiment should be kept in English as it may be referenced +# by various online articles and is technical in nature. +experimental-features-css-masonry2 = + .label = CSS: Masonry Layout +# The title of the experiment should be kept in English as it may be referenced +# by various online articles and is technical in nature. +experimental-features-web-gpu2 = + .label = Web API: WebGPU +# The title of the experiment should be kept in English as it may be referenced +# by various online articles and is technical in nature. +experimental-features-media-jxl = + .label = Media: JPEG XL experimental-features-devtools-compatibility-panel = .label = أدوات المطوّرين: لوحة التوافقية - - +# JS JIT Warp project +experimental-features-js-warp = + .label = JavaScript JIT: Warp # Search during IME experimental-features-ime-search = .label = شريط العنوان: عرض النتائج أثناء الكتابة بمحرّر IME experimental-features-ime-search-description = يُعدّ محرّر طرائق الإدخال (IME) أداةً تتيح لك إدخال الرموز المعقدة (مثل تلك الموجودة في اللغات الشرق آسيوية أو الهندوآرية) باستعمال لوحة المفاتيح العادية. بتفعيل هذه الميزة التجريبية، سيترك المتصفّح لوحة شريط العنوان مفتوحًا مع نتائج البحث والاقتراحات وأنت تستخدم محرّر IME لإدخال النص. من فضلك اعلم بأن المحرّر قد يعرض أيضًا لوحة أخرى تغطّي نتائج شريط العنوان، ولهذا فلا يُنصح بهذا الإعداد إلا لمحرّرات IME التي لا تستعمل هذا النوع من اللوحات. - +# Updated sidebar settings +sidebar-title = + .label = الشريط الجانبي +vertical-tabs-title = + .label = ألسنة عمودية +experimental-features-group-developer-tools = + .label = أدوات المطورين +experimental-features-group-webpage-display = + .label = عرض صفحة الوِب +experimental-features-group-customize-browsing = + .label = خصّص تصفّحك diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/arrowscrollbox.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/arrowscrollbox.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/arrowscrollbox.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/arrowscrollbox.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,21 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +### This file contains the entities needed to use the Arrowscrollbox component. +### For example, Arrowscrollboxes are used in Tabs Toolbar when there are +### multiple tabs opened and in overflowing menus. + +# This button is shown at the beginning of the overflowing list of elements. +# For example, in LTR language like English, on the Tabs Toolbar it would look +# like "<" and scroll the tab list to the left, and in the overflowing menu it +# would look like "^" and scroll the list of menuitems up. +overflow-scroll-button-backwards = + .tooltiptext = انتقل للخلف +# This button is shown at the end of the overflowing list of elements. For +# example, in LTR language like English, on the Tabs Toolbar it would look like +# ">" and scroll the tab list to the right, and in the overflowing menu it +# would look like "v" and scroll the list of menuitems down. +overflow-scroll-button-forwards = + .tooltiptext = انتقل للأمام diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/cookieBannerHandling.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/cookieBannerHandling.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/cookieBannerHandling.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/cookieBannerHandling.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,5 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +cookie-banner-handled-webconsole = قام { -brand-shorter-name } بالتعامل مع شعار ملفات تعريف الارتباط نيابة عن المستخدم. diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/datepicker.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/datepicker.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/datepicker.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/datepicker.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,50 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +### Datepicker - Dialog for default HTML's + + +## These labels are used by screenreaders and other assistive technology +## to indicate the purpose of a date picker calendar and a month-year selection +## spinner dialogs for HTML's + +date-picker-label = + .aria-label = اختر تاريخًا +date-spinner-label = + .aria-label = اختر شهرًا وسنة + +## Text of the clear button + +date-picker-clear-button = امسح + +## These labels are used by screenreaders and other assistive technology +## to indicate the purpose of buttons that leaf through months of a calendar + +date-picker-previous = + .aria-label = الشهر الماضي +date-picker-next = + .aria-label = الشهر المقبل + +## These labels are used by screenreaders and other assistive technology +## to indicate the type of a value/unit that is being selected within a +## Month/Year date spinner dialogs on a datepicker calendar dialog + +date-spinner-month = + .aria-label = الشهر +date-spinner-year = + .aria-label = السنة + +## These labels are used by screenreaders and other assistive technology +## to indicate the purpose of buttons that leaf through either months +## or years of a Month/Year date spinner on a datepicker calendar dialog + +date-spinner-month-previous = + .aria-label = الشهر الماضي +date-spinner-month-next = + .aria-label = الشهر المقبل +date-spinner-year-previous = + .aria-label = السنة الماضية +date-spinner-year-next = + .aria-label = السنة المقبلة diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/handlerDialog.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/handlerDialog.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/handlerDialog.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/handlerDialog.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -5,25 +5,21 @@ ## Permission Dialog ## Variables: -## $host - the hostname that is initiating the request -## $scheme - the type of link that's being opened. -## $appName - Name of the application that will be opened. - -## Permission Dialog -## Variables: ## $host (string) - The hostname that is initiating the request ## $scheme (string) - The type of link that's being opened. ## $appName (string) - Name of the application that will be opened. ## $extension (string) - Name of extension that initiated the request permission-dialog-description = أتسمح لهذا الموقع بفتح رابط { $scheme }؟ - +permission-dialog-description-file = أتسمح لهذا الملف بفتح رابط { $scheme }؟ +permission-dialog-description-host = أتسمح بأن يفتح { $host } رابط { $scheme }؟ +permission-dialog-description-extension = أأسمح لامتداد { $extension } بفتح رابط { $scheme }؟ permission-dialog-description-app = أتسمح لهذا الموقع بفتح رابط { $scheme } في { $appName }؟ - -## Please keep the emphasis around the hostname and scheme (ie the -## `` HTML tags). Please also keep the hostname as close to the start -## of the sentence as your language's grammar allows. - +permission-dialog-description-host-app = أتسمح بأن يفتح { $host } رابط { $scheme } بواسطة { $appName }؟ +permission-dialog-description-file-app = أتسمح لهذا الملف بفتح رابط { $scheme } بواسطة { $appName }؟ +permission-dialog-description-extension-app = أأسمح للامتداد { $extension } بفتح رابط { $scheme } باستخدام { $appName }؟ +permission-dialog-description-system-app = أأفتح رابط { $scheme } باستخدام { $appName }؟ +permission-dialog-description-system-noapp = أأفتح الرابط { $scheme }؟ ## Please keep the emphasis around the hostname and scheme (ie the ## `` HTML tags). Please also keep the hostname as close to the start @@ -32,22 +28,34 @@ ## $host (string) - The hostname that is initiating the request ## $scheme (string) - The type of link that's being opened. +permission-dialog-remember = اسمح دائما لـ{ $host } بفتح روابط { $scheme } +permission-dialog-remember-file = اسمح دائما لهذا الملف بأن يفتح روابط { $scheme } +permission-dialog-remember-extension = السماح دائمًا لهذا الامتداد بفتح روابط { $scheme } + ## - -## Chooser dialog -## Variables: -## $scheme - the type of link that's being opened. +permission-dialog-unset-description = عليك اختيار تطبيق. +permission-dialog-set-change-app-link = اختر تطبيقا مختلفا. ## Chooser dialog ## Variables: ## $scheme (string) - The type of link that's being opened. +chooser-window = + .title = اختر تطبيقا + .style = min-width: 26em; min-height: 26em; +chooser-dialog-description = اختر تطبيقا لفتح رابط { $scheme }. +# Please keep the emphasis around the scheme (ie the `` HTML tags). +chooser-dialog-remember = استخدم هذا التطبيق دائما لفتح روابط { $scheme } +chooser-dialog-remember-extra = + { PLATFORM() -> + [windows] يُمكن تغيير هذا من خيارات { -brand-short-name }. + *[other] يُمكن تغيير هذا من تفضيلات { -brand-short-name }. + } choose-other-app-description = اختر تطبيقا آخر choose-app-btn = .label = اختر… .accessKey = خ choose-other-app-window-title = تطبيق آخر… - # Displayed under the name of a protocol handler in the Launch Application dialog. choose-dialog-privatebrowsing-disabled = معطّل في النوافذ الخاصة diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/mozSupportLink.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/mozSupportLink.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/mozSupportLink.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/mozSupportLink.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,5 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +moz-support-link-text = اطّلع على المزيد diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/processTypes.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/processTypes.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/processTypes.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/processTypes.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -2,30 +2,49 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + ## ## Localization for remote types defined in RemoteType.h -## process-type-web = محتوى الوِب - +# process used to run privileged about pages, +# such as about:home +process-type-privilegedabout = امتياز حول +# process used to run privileged mozilla pages, +# such as accounts.firefox.com +process-type-privilegedmozilla = محتوى موزيلا ذو الامتياز process-type-extension = امتداد - # process used to open file:// URLs process-type-file = ملف محلي - # process used to isolate a webpage from other web pages # to improve security process-type-webisolated = محتوى وِب معزول +# process used to isolate a ServiceWorker to improve +# performance +process-type-webserviceworker = عامل الخدمة المعزول +# process preallocated; may change to other types +process-type-prealloc = مُخصص مسبقًا ## ## Localization for Gecko process types defined in GeckoProcessTypes.h -## +process-type-default = رئيسي +process-type-tab = ↤ # process used to communicate with the GPU for # graphics acceleration process-type-gpu = المعالج الرسومي +# process used to perform network operations +process-type-socket = مقبس +# process used to decode media +process-type-rdd = RDD +# process used to run inference +process-type-inference = الاستدلال +process-type-utility-actor-audio-decoder-generic = أداة فك تشفير الصوت العامة +process-type-utility-actor-audio-decoder-applemedia = أداة AppleMedia +process-type-utility-actor-audio-decoder-wmf = أداة Windows Media Foundation ## ## Other -## +# fallback +process-type-unknown = غير معروف diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/run-from-dmg.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/run-from-dmg.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/global/run-from-dmg.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/global/run-from-dmg.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,28 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Strings for a dialog that may open on macOS before the app's main window +## opens. The dialog prompts the user to allow the app to install itself in an +## appropriate location before relaunching itself from that location if the +## user accepts. + +prompt-to-install-title = إنهاء تحميل { -brand-short-name }؟ +prompt-to-install-message = أكمل عملية التثبيت هذه بخطوة واحدة للمساعدة في إبقاء { -brand-short-name } محدثًا ومنع فقد البيانات. سيتم إضافة { -brand-short-name } إلى مجلد تطبيقاتك وللـDock. +prompt-to-install-yes-button = نصّب +prompt-to-install-no-button = لا تقم بالتثبيت + +## Strings for a dialog that opens if the installation failed. + +install-failed-title = فشل تثبيت { -brand-short-name }. +install-failed-message = فشل تثبيت { -brand-short-name } ولكنه سيستمر في العمل. + +## Strings for a dialog that recommends to the user to start an existing +## installation of the app in the Applications directory if one is detected, +## rather than the app that was double-clicked in a .dmg. + +prompt-to-launch-existing-app-title = أأفتح تطبيق { -brand-short-name } الموجود؟ +prompt-to-launch-existing-app-message = لقد ثبّتّ { -brand-short-name } بالفعل. استخدم التطبيق المثبت للبقاء على اطلاع دائم ومنع فقدان البيانات. +prompt-to-launch-existing-app-yes-button = افتح الموجود +prompt-to-launch-existing-app-no-button = لا، شكرًا diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/pdfviewer/viewer.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/pdfviewer/viewer.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/pdfviewer/viewer.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/pdfviewer/viewer.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -306,8 +306,6 @@ pdfjs-editor-highlight-button = .title = أبرِز pdfjs-editor-highlight-button-label = أبرِز -pdfjs-highlight-floating-button = - .title = أبرِز pdfjs-highlight-floating-button1 = .title = أبرِز .aria-label = أبرِز @@ -376,6 +374,22 @@ pdfjs-editor-resizer-label-bottom-middle = أسفل الوسط - غيّر الحجم pdfjs-editor-resizer-label-bottom-left = الزاوية اليُسرى السُفلية - غيّر الحجم pdfjs-editor-resizer-label-middle-left = مُنتصف اليسار - غيّر الحجم +pdfjs-editor-resizer-top-left = + .aria-label = الزاوية اليُسرى العُليا — غيّر الحجم +pdfjs-editor-resizer-top-middle = + .aria-label = أعلى الوسط - غيّر الحجم +pdfjs-editor-resizer-top-right = + .aria-label = الزاوية اليُمنى العُليا - غيّر الحجم +pdfjs-editor-resizer-middle-right = + .aria-label = اليمين الأوسط - غيّر الحجم +pdfjs-editor-resizer-bottom-right = + .aria-label = الزاوية اليُمنى السُفلى - غيّر الحجم +pdfjs-editor-resizer-bottom-middle = + .aria-label = أسفل الوسط - غيّر الحجم +pdfjs-editor-resizer-bottom-left = + .aria-label = الزاوية اليُسرى السُفلية - غيّر الحجم +pdfjs-editor-resizer-middle-left = + .aria-label = مُنتصف اليسار - غيّر الحجم ## Color picker @@ -402,3 +416,10 @@ pdfjs-editor-highlight-show-all-button-label = أظهِر الكل pdfjs-editor-highlight-show-all-button = .title = أظهِر الكل + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff -Nru firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/pictureinpicture/pictureinpicture.ftl firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/pictureinpicture/pictureinpicture.ftl --- firefox-esr-128.3.1esr/l10n-ar/toolkit/toolkit/pictureinpicture/pictureinpicture.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-ar/toolkit/toolkit/pictureinpicture/pictureinpicture.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -16,18 +16,60 @@ ## Variables: ## $shortcut (String) - Keyboard shortcut to execute the command. +pictureinpicture-pause-btn = + .aria-label = ألبِث + .tooltip = ألبِث (زر المسافة) +pictureinpicture-play-btn = + .aria-label = شغّل + .tooltip = شغّل (زر المسافة) +pictureinpicture-mute-btn = + .aria-label = أصمِت + .tooltip = أصمِت ({ $shortcut }) +pictureinpicture-unmute-btn = + .aria-label = أطلِق الصوت + .tooltip = أطلِق الصوت ({ $shortcut }) +pictureinpicture-unpip-btn = + .aria-label = أعِده إلى اللسان + .tooltip = العودة إلى اللسان pictureinpicture-close-btn = .aria-label = أغلِق .tooltip = أغلِق ({ $shortcut }) +pictureinpicture-subtitles-btn = + .aria-label = العناوين الفرعية + .tooltip = العناوين الفرعية +pictureinpicture-fullscreen-btn2 = + .aria-label = ملء الشاشة + .tooltip = ملء الشاشة (اضغط مرتين متتاليتين أو { $shortcut }) +pictureinpicture-exit-fullscreen-btn2 = + .aria-label = غادر ملء الشاشة + .tooltip = غادر ملء الشاشة (اضغط مرتين متتاليتين أو { $shortcut }) ## +# Keyboard shortcut to toggle fullscreen mode when Picture-in-Picture is open. +pictureinpicture-toggle-fullscreen-shortcut = + .key = F ## Note that this uses .tooltip rather than the standard '.title' ## or '.tooltiptext' - but it has the same effect. Code in the ## picture-in-picture window will read and copy this to an in-document ## DOM node that then shows the tooltip. +pictureinpicture-seekbackward-btn = + .aria-label = انتقال للخلف + .tooltip = انتقال للخلف (→) +pictureinpicture-seekforward-btn = + .aria-label = انتقال للأمام + .tooltip = انتقال للأمام (←) ## +# This string is never displayed on the window. Is intended to be announced by +# a screen reader whenever a user opens the subtitles settings panel +# after selecting the subtitles button. +pictureinpicture-subtitles-panel-accessible = إعدادات العناوين الفرعية +pictureinpicture-subtitles-label = العناوين الفرعية +pictureinpicture-font-size-label = حجم الخط +pictureinpicture-font-size-small = صغير +pictureinpicture-font-size-medium = متوسط +pictureinpicture-font-size-large = كبير diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/aboutDialog.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/aboutDialog.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/aboutDialog.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/aboutDialog.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -64,3 +64,14 @@ # $isodate (String): date in ISO format, e.g. 2019-01-16 # $bits (Number): bits of the architecture (32 or 64) aboutDialog-version-nightly = { $version } ({ $isodate }) ({ $bits }-біт) +# Example of resulting string: 131.0a1 (aarch64) +# Variables: +# $version (String): version of Firefox, e.g. 66.0.1 +# $arch (String): name of the architecture (arm, aarch64, etc.) +aboutdialog-version-arch = { $version } ({ $arch }) +# Example of resulting string: 131.0a1 (2024-08-27) (aarch64) +# Variables: +# $version (String): version of Firefox for Nightly builds, e.g. 66.0a1 +# $isodate (String): date in ISO format, e.g. 2019-01-16 +# $arch (String): name of the architecture (arm, aarch64, etc.) +aboutdialog-version-arch-nightly = { $version } ({ $isodate }) ({ $arch }) diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/aboutLogins.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/aboutLogins.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/aboutLogins.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/aboutLogins.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -145,6 +145,8 @@ login-item-password-label = Пароль login-item-password-reveal-checkbox = .aria-label = Паказаць пароль +login-item-password-conceal-checkbox = + .aria-label = Схаваць пароль login-item-copy-password-button-text = Капіяваць login-item-copied-password-button-text = Скапіяваны! login-item-save-changes-button = Захаваць змены diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/browser.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/browser.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/browser.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/browser.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -129,7 +129,7 @@ ## Variables: ## $engineName (String): The name of the user's default search engine. e.g. "Google" or "DuckDuckGo". -urlbar-search-tips-onboard = Уводзьце менш, знаходзьце больш: Пошук { $engineName } наўпрост у адрасным радку. +urlbar-search-tips-onboard = Уводзьце менш, знаходзьце больш: Пошук { $engineName } наўпрост у адрасным радку. urlbar-search-tips-redirect-2 = Пачніце свой пошук у адрасным радку, каб пабачыць прапановы ад { $engineName } і з вашай гісторыі аглядання. # Make sure to match the name of the Search panel in settings. urlbar-search-tips-persist = Пошук стаў прасцейшым. Паспрабуйце ўдакладніць свой пошукавы запыт тут, у адрасным радку. Каб паказваць URL-адрас замест гэтага, наведайце раздзел «Пошук» у наладах. @@ -554,6 +554,10 @@ .tooltiptext = Пайсці па адрасе, які зараз у адрасным радку urlbar-page-action-button = .tooltiptext = Дзеянні старонкі +urlbar-revert-button = + .tooltiptext = Паказаць адрас у адрасным радку +urlbar-show-page-actions-button = + .tooltiptext = Паказаць усе дзеянні старонкі ## Action text shown in urlbar results, usually appended after the search ## string or the url, like "result value - action text". diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/defaultBrowserNotification.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/defaultBrowserNotification.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/defaultBrowserNotification.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/defaultBrowserNotification.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -14,7 +14,9 @@ default-browser-prompt-title-pin = Зрабіць { -brand-short-name } вашым асноўным браўзерам? default-browser-prompt-message-pin = Трымайце { -brand-short-name } пад рукой — зрабіце яго прадвызначаным браўзерам і замацуйце на панэлі заданняў. +default-browser-prompt-message-pin-msix = Трымайце { -brand-short-name } паблізу — зрабіце яго прадвызначаным браўзерам і замацуйце на панэлі заданняў і ў стартавым меню. default-browser-prompt-message-pin-mac = Трымайце { -brand-short-name } пад рукой — зрабіце яго прадвызначаным браўзерам і дадайце ў Док. +default-browser-prompt-button-primary-set = Прызначыць асноўным браўзерам default-browser-prompt-button-primary-pin = Зрабіць асноўным браўзерам default-browser-prompt-title-alt = Зрабіць { -brand-short-name } вашым прадвызначаным браўзерам? default-browser-prompt-message-alt = Атрымайце хуткасць, бяспеку і прыватнасць пры кожным праглядзе. diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/featureCallout.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/featureCallout.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/featureCallout.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/featureCallout.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -4,7 +4,6 @@ # Callout dialog primary button to advance to next screen callout-primary-advance-button-label = Далей - # Callout dialog primary button to complete the feature tour callout-primary-complete-button-label = Зразумела! @@ -13,20 +12,13 @@ # "Tab pickup" refers to the section in Firefox View that displays open # tabs from other devices callout-firefox-view-tab-pickup-title = Пераключайцеся паміж прыладамі з доступам да сваіх картак - callout-firefox-view-tab-pickup-subtitle = Шпарка бярыце адкрытыя карткі са свайго тэлефона і адкрывайце іх тут для працягу працы. - callout-firefox-view-recently-closed-title = Вяртайце закрытыя карткі імгненна - callout-firefox-view-recently-closed-subtitle = Тут чароўным чынам з'явяцца ўсе закрытыя карткі. Больш ніколі не турбуйцеся, што выпадкова закрылі сайт. - callout-firefox-view-colorways-title = Дадайце ўсплёск колеру - # "Shade" refer to different color options in each colorway. callout-firefox-view-colorways-subtitle = Выберыце адценне, якое пасуе вам, з дапамогай расфарбовак. Толькі ў { -brand-product-name }. - callout-firefox-view-colorways-reminder-title = Азнаёмцеся з нашымі найноўшымі расфарбоўкамі - # “Shades” refers to the different color options in each colorways callout-firefox-view-colorways-reminder-subtitle = Расфарбуйце свой браўзер у гэтыя знакавыя адценні, натхнёныя незалежнымі галасамі. Толькі ў { -brand-product-name }. @@ -36,9 +28,7 @@ # access to the same browsing experience when moving from one browser to another. # Alternative: ”Improve your browsing experience with tab pickup” continuous-onboarding-firefox-view-tab-pickup-title = Палепшыце сваё агляданне з дапамогай выбару картак - continuous-onboarding-firefox-view-tab-pickup-subtitle = Атрымлівайце доступ да адкрытых картак з любой прылады. Акрамя таго, сінхранізуйце свае закладкі, паролі і іншае. - continuous-onboarding-firefox-view-tab-pickup-primary-button-label = Пачаць ## PDF.js Feature Tour Strings @@ -47,10 +37,25 @@ callout-pdfjs-edit-body-a = Запаўняйце формы, дадавайце каментарыі або рабіце нататкі непасрэдна ў { -brand-short-name }. callout-pdfjs-edit-body-b = Забудзьце пра пошук бясплатных онлайн-рэдактараў. Запаўняйце формы, дадавайце каментарыі або рабіце нататкі непасрэдна ў { -brand-short-name }. callout-pdfjs-edit-button = Далей - callout-pdfjs-draw-title = Падпісвайце дакументы з дапамогай нашага новага інструмента для малявання # “Mark up” refers to the process of “annotating” or adding free hand text or diagramming to the document. callout-pdfjs-draw-body-a = Рабіце нататкі ў PDF-файлах і захоўвайце свае змены. # “Mark up” refers to the process of “annotating” or adding free hand text or diagramming to the document. callout-pdfjs-draw-body-b = Больш ніякага друку і сканавання. Рабіце нататкі ў PDF-файлах і захоўвайце свае змены. callout-pdfjs-draw-button = Зразумела! + +## Firefox View Discoverability Strings + +fx-view-discoverability-title = Не хацелі закрыць гэтую картку? +fx-view-discoverability-subtitle = Знайдзіце і зноў адкрыйце яе тут. Мы захоўваем гісторыю вашых нядаўна закрытых картак. +fx-view-discoverability-primary-button-label = Адкрыць { -firefoxview-brand-name } +fx-view-discoverability-secondary-button-label = Адхіліць + +## Split Dismiss Button Labels + +# Blocks the message from showing again +split-dismiss-button-dont-show-option-label = Больш не паказваць гэту рэкамендацыю +# Dismisses message and reduces frequency of message +split-dismiss-button-show-fewer-option-label = Паказваць менш рэкамендацый +# Opens about:preferences#general-cfrfeatures +split-dismiss-button-manage-settings-option-label = Кіраваць наладамі diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/genai.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/genai.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/genai.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/genai.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,91 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Generative AI (GenAI) Settings section + +genai-settings-chat-description = Дадае чат-бота па вашаму выбару на бакавую панэль для хуткага доступу ў часе аглядання. Адправіць водгук +genai-settings-chat-choose = Выберыце чат-бота +genai-settings-chat-choose-one-menuitem = + .label = Выбраць +genai-settings-chat-links = Калі вы выбіраеце чат-бота, вы згаджаецеся з умовамі выкарыстання і палітыкай прыватнасці яго пастаўшчыка. +genai-settings-chat-chatgpt-links = Выбіраючы ChatGPT, вы згаджаецеся з Умовамі выкарыстання і Палітыкай прыватнасці OpenAI. +genai-settings-chat-claude-links = Выбіраючы Anthropic Claude, вы згаджаецеся з Умовамі абслугоўвання спажыўцоў, Палітыкай выкарыстання і Палітыкай прыватнасці Anthropic. +genai-settings-chat-copilot-links = Выбіраючы Copilot, вы згаджаецеся з Умовамі выкарыстання Copilot AI і Заявай аб канфідэнцыяльнасці Microsoft. +genai-settings-chat-gemini-links = Выбіраючы Google Gemini, вы згаджаецеся з Умовамі абслугоўвання Google, Палітыкай забароненага выкарыстання Generative AI і Паведамленнем аб прыватнасці Gemini Apps. +genai-settings-chat-huggingchat-links = Выбіраючы HuggingChat, вы згаджаецеся з Паведамленнем аб прыватнасці HuggingChat і Палітыкай прыватнасці Hugging Face. +genai-settings-chat-lechat-links = Выбіраючы Le Chat Mistral, вы згаджаецеся з Умовамі абслугоўвання і Палітыкай прыватнасці Mistral AI . +genai-settings-chat-localhost-links = Прынясіце свой уласны прыватны лакальны чат-бот, напрыклад llamafile< ад інавацыйнай групы { -vendor-short-name }. +genai-settings-chat-shortcuts = + .description = Паказвае цэтлік для запытаў пры вылучэнні тэксту. { -brand-short-name } адпраўляе тэкст, назву старонкі і запрашэнне чат-боту. + .label = Паказваць запыты пры вылучэнні тэксту + +## Chatbot prompts +## Prompts are plain language ‘instructions’ sent to a chatbot. +## These prompts have been made concise and direct in English because some chatbot providers +## have character restrictions and being direct reduces the chance for misinterpretation. +## When localizing, please be concise and direct, but not at the expense of losing meaning. + +# Prompt purpose: help users understand what a selection covers at a glance +genai-prompts-summarize = + .label = Падсумаваць + .value = Калі ласка, падсумуйце выбранае, выкарыстоўваючы дакладныя і сціслыя словы. Выкарыстоўвайце загалоўкі і маркіраваныя спісы ў падсумаванні, каб зрабіць яго даступным для беглага чытання. Захоўвайце сэнс і фактычную дакладнасць. +# Prompt purpose: make a selection easier to read +genai-prompts-simplify = + .label = Спрасціць мову + .value = Калі ласка, перапішыце выбранае, выкарыстоўваючы кароткія сказы і простыя словы. Захоўвайце сэнс і фактычную дакладнасць. +# Prompt purpose: test understanding of selection in an interactive way +genai-prompts-quiz = + .label = Апытаць мяне + .value = Калі ласка, апытайце мяне аб гэтым вылучэнні. Задавайце розныя тыпы пытанняў, напрыклад, з некалькімі варыянтамі адказу, праўда ці мана, і патрэбен кароткі адказ. Пачакайце майго адказу, перш чым пераходзіць да наступнага пытання. +# Prompt purpose: helps users understand words, phrases, concepts +genai-prompts-explain = + .label = Патлумачыць гэта + .value = Калі ласка, растлумачце ключавыя паняцці ў гэтым вылучэнні простымі словамі. Таксама выкарыстоўвайце прыклады. +# This prompt is added to the beginning of selection prompts sent to a chatbot. +# $tabTitle (string) - title of the webpage +# $selection (string) - selected text +genai-prompt-prefix-selection = Я на старонцы «{ $tabTitle }» з выбраным «{ $selection }». + +## Chatbot menu shortcuts + +genai-menu-ask-generic = + .label = Спытаць чат-бота ШІ +# $provider (string) - name of the provider +genai-menu-ask-provider = + .label = Спытаць { $provider } +genai-input-ask-generic = + .placeholder = Спытаць чат-бота ШІ… +# $provider (string) - name of the provider +genai-input-ask-provider = + .placeholder = Спытаць { $provider }… + +## Chatbot header + +genai-chatbot-title = Чат-бот ШІ +genai-header-provider-menu = + .title = Выберыце чат-бота +genai-header-options-button = + .title = Адкрыць меню +genai-header-close-button = + .title = Закрыць + +## Chatbot onboarding + +genai-onboarding-primary = Працягнуць +genai-onboarding-secondary = Закрыць +genai-onboarding-chatgpt-tooltip = + .title = ChatGPT +genai-onboarding-gemini-tooltip = + .title = Google Gemini +genai-onboarding-huggingchat-tooltip = + .title = HuggingChat +genai-onboarding-lechat-tooltip = + .title = Le Chat Mistral +genai-onboarding-select-header = Вылучыце тэкст, каб убачыць прапановы + +## Chatbot onboarding choices +## These describe features/capabilities of chatbot providers. These are not buttons/actions. + +genai-onboarding-lechat-price = Бясплатна; патрэбен уліковы запіс diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/newtab/asrouter.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/newtab/asrouter.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/newtab/asrouter.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/newtab/asrouter.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -285,3 +285,15 @@ tail-fox-spotlight-subtitle = Развітайцеся з надакучлівымі рэкламнымі трэкерамі і пасяліцеся ў больш бяспечным і хуткім Інтэрнэце. tail-fox-spotlight-primary-button = Адкрываць мае спасылкі ў { -brand-short-name } tail-fox-spotlight-secondary-button = Не зараз + +## Root Certificate Succession Infobar + +root-certificate-succession-infobar-january-message = 14 студзеня 2025 г. у старых версіях { -brand-short-name } могуць узнікнуць праблемы. +root-certificate-succession-infobar-march-message = Абнавіце, каб працягваць карыстацца { -brand-short-name } пасля 14 сакавіка 2025 г. +root-certificate-succession-infobar-link = Чаму мне трэба абнаўляць? +root-certificate-succession-infobar-primary-button = + .label = Абнавіць зараз + .accesskey = н +root-certificate-succession-infobar-secondary-button = + .label = Пазней + .accesskey = П diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/newtab/newtab.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/newtab/newtab.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/newtab/newtab.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/newtab/newtab.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -200,6 +200,8 @@ # $provider (string) - Name of the corresponding content provider. newtab-section-header-pocket = Рэкамендавана { $provider } newtab-section-header-stories = Гісторыі, якія прымушаюць задумацца +# "picks" refers to recommended articles +newtab-section-header-todays-picks = Сённяшняя падборка для вас ## Empty Section States: These show when there are no more items in a section. Ex. When there are no more Pocket story recommendations, in the space where there would have been stories, this is shown instead. @@ -390,3 +392,43 @@ newtab-weather-menu-learn-more = Даведацца больш # This message is shown if user is working offline newtab-weather-error-not-available = Звесткі пра надвор'е зараз недаступныя. + +## Topic Labels + +newtab-topic-label-business = Бізнес +newtab-topic-label-career = Кар'ера +newtab-topic-label-education = Адукацыя +newtab-topic-label-arts = Забавы +newtab-topic-label-food = Ежа +newtab-topic-label-health = Здароўе +newtab-topic-label-hobbies = Гульні +# ”Money” = “Personal Finance”, refers to articles and stories that help readers better manage +# and understand their personal finances – from saving money to buying a home. See the +# “Curated by our editors“ section at the top of https://getpocket.com/explore/personal-finance for more context +newtab-topic-label-finance = Грошы +newtab-topic-label-society-parenting = Выхаванне +newtab-topic-label-government = Палітыка +newtab-topic-label-education-science = Навука +# ”Life Hacks” = “Self Improvement”, refers to articles and stories aimed at helping readers improve various +# aspects of their lives – from mental health to productivity. See the “Curated by our editors“ section +# at the top of https://getpocket.com/explore/self-improvement for more context. +newtab-topic-label-society = Лайфхакі +newtab-topic-label-sports = Спорт +newtab-topic-label-tech = Тэхналогіі +newtab-topic-label-travel = Падарожжы +newtab-topic-label-home = Дом і сад + +## Topic Selection Modal + +# “fine-tune” refers to the process of making small adjustments to something to get +# the best or desired experience or performance. +newtab-topic-selection-title = Выберыце тэмы, каб наладзіць сваю стужку +# “tailored” refers to process of (a tailor) making (clothes) to fit individual customers. +# In other words, “Our expert curators prioritize stories to fit your selected interests” +newtab-topic-selection-subtitle = Выберыце дзве або больш тэм. Нашы эксперты-куратары аддаюць перавагу гісторыям, якія адпавядаюць вашым інтарэсам. Абнаўляйце ў любы час. +newtab-topic-selection-save-button = Захаваць +newtab-topic-selection-cancel-button = Скасаваць +newtab-topic-selection-button-maybe-later = Магчыма пазней +newtab-topic-selection-privacy-link = Даведайцеся, як мы ахоўваем дадзеныя і распараджаемся імі +newtab-topic-selection-button-update-interests = Абнавіце свае зацікаўленасці +newtab-topic-selection-button-pick-interests = Выберыце свае зацікаўленасці diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/newtab/onboarding.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/newtab/onboarding.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/newtab/onboarding.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/newtab/onboarding.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -188,6 +188,8 @@ [macos] Трымаць { -brand-short-name } у доку *[other] Замацаваць { -brand-short-name } на панэлі заданняў } +# Primary button string used on welcome page for when Firefox is not pinned on MSIX +mr2022-onboarding-pin-primary-button-label-msix = Замацаваць { -brand-short-name } на панэлі заданняў і ў стартавым меню # Subtitle will be used when user already has Firefox pinned, but # has not set it as their default browser. # When translating "zip", please feel free to pick a verb that signifies movement and/or exploration @@ -338,8 +340,10 @@ ## Add-ons Picker screen amo-picker-title = Уладкуйце свой { -brand-short-name } +amo-picker-subtitle = Пашырэнні — гэта як праграмы для вашага браўзера, яны дазваляюць абараняць паролі, сцягваць відэа, знаходзіць выгадныя прапановы, блакаваць раздражняльную рэкламу, змяняць выгляд браўзера і многае іншае. amo-picker-install-button-label = Дадаць да { -brand-short-name } amo-picker-install-complete-label = Усталяваны +amo-picker-collection-link = Адкрыць больш дадаткаў ## The following screens have been updated to use security and privacy focused strings: diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/sanitize.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/sanitize.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/sanitize.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/sanitize.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -41,6 +41,10 @@ .label = Апошнія дзве гадзіны clear-time-duration-value-last-4-hours = .label = Апошнія чатыры гадзіны +# Variables: +# $midnightTime (String) - Time of midnight (00:00 hours) - to inform the user that history will be cleared after midnight +clear-time-duration-value-since-midnight = + .label = З { $midnightTime } clear-time-duration-value-today = .label = Сёння clear-time-duration-value-everything = diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/screenshots.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/screenshots.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/screenshots.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/screenshots.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -58,18 +58,6 @@ .aria-label = Скасаваць # Variables # $shortcut (String) - A keyboard shortcut for copying the screenshot. -screenshots-component-copy-button = - .title = Капіяваць ({ $shortcut }) - .aria-label = Капіяваць -screenshots-component-copy-button-label = Капіяваць -# Variables -# $shortcut (String) - A keyboard shortcut for saving/downloading the screenshot. -screenshots-component-download-button = - .title = Сцягнуць ({ $shortcut }) - .aria-label = Сцягнуць -screenshots-component-download-button-label = Сцягнуць -# Variables -# $shortcut (String) - A keyboard shortcut for copying the screenshot. screenshots-component-copy-button-2 = Капіяваць .title = Капіяваць ({ $shortcut }) .aria-label = Капіяваць @@ -88,14 +76,10 @@ ## # This string represents the selection size area -# "x" here represents "by" (i.e 123 by 456) -# Variables: -# $width (Number) - The width of the selection region in pixels -# $height (Number) - The height of the selection region in pixels -screenshots-overlay-selection-region-size-2 = { $width } x { $height } -# This string represents the selection size area # "×" here represents "by" (i.e 123 by 456) # Variables: # $width (Number) - The width of the selection region in pixels # $height (Number) - The height of the selection region in pixels screenshots-overlay-selection-region-size-3 = { $width } × { $height } +screenshots-overlay-preview-face-label = + .aria-label = Выбраць гэту вобласць diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/shopping.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/shopping.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/shopping.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/shopping.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -89,6 +89,9 @@ shopping-settings-label = .label = Налады +shopping-settings-recommendations-toggle2 = + .label = Паказаць рэкамендацыі і спонсарскае змесціва +shopping-settings-recommendations-learn-more3 = { -brand-product-name } не абагульвае вашы асабістыя звесткі, таму гэтыя рэкамендацыі не будуць ісці за вамі па інтэрнэце. Падрабязней shopping-settings-recommendations-toggle = .label = Паказваць рэкламу ў сродку праверкі водгукаў shopping-settings-recommendations-learn-more2 = Вы будзеце час ад часу бачыць рэкламу адпаведных тавараў. Мы рэкламуем толькі прадукты з надзейнымі водгукамі. Падрабязней @@ -164,6 +167,7 @@ more-to-consider-ad-label = .label = Што яшчэ варта разгледзець +shopping-sponsored-label = Спонсарскі ad-by-fakespot = Рэклама ад { -fakespot-brand-name } ## Shopping survey strings. diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/sidebar.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/sidebar.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/sidebar.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/sidebar.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,154 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +menu-view-genai-chat = + .label = Чат-бот ШІ +menu-view-review-checker = + .label = Праверка водгукаў + +## Labels for sidebar history panel + +# Variables: +# $date (string) - Date to be formatted based on locale +sidebar-history-date-today = + .heading = Сёння - { DATETIME($date, dateStyle: "full") } +sidebar-history-date-yesterday = + .heading = Учора - { DATETIME($date, dateStyle: "full") } +sidebar-history-date-this-month = + .heading = { DATETIME($date, dateStyle: "full") } +sidebar-history-date-prev-month = + .heading = { DATETIME($date, month: "long", year: "numeric") } +sidebar-history-delete = + .title = Выдаліць з гісторыі +sidebar-history-sort-by-date = + .label = Сартаваць па даце +sidebar-history-sort-by-site = + .label = Сартаваць па сайтах +sidebar-history-clear = + .label = Ачысціць гісторыю + +## Labels for sidebar search + +# "Search" is a noun (as in "Results of the search for") +# Variables: +# $query (String) - The search query used for searching through browser history. +sidebar-search-results-header = + .heading = Вынікі пошуку для “{ $query }” + +## Labels for sidebar customize panel + +sidebar-customize-extensions-header = Пашырэнні бакавой панэлі +sidebar-customize-firefox-tools-header = + .label = Прылады { -brand-product-name } +sidebar-customize-firefox-settings = Кіраванне наладамі { -brand-short-name } +sidebar-position-left = + .label = Паказаць злева +sidebar-position-right = + .label = Паказаць справа +sidebar-vertical-tabs = + .label = Вертыкальныя карткі +sidebar-horizontal-tabs = + .label = Гарызантальныя карткі +sidebar-customize-tabs-header = + .label = Налады картак +sidebar-customize-button-header = + .label = Кнопка бакавой панэлі +sidebar-customize-position-header = + .label = Становішча бакавой панэлі +sidebar-customize-settings-header = + .label = Налады бакавой панэлі +sidebar-visibility-always-show = + .label = Заўсёды паказваць +sidebar-visibility-hide-sidebar = + .label = Схаваць бакавую панэль + +## Labels for sidebar context menu items + +sidebar-context-menu-manage-extension = + .label = Кіраваць пашырэннем +sidebar-context-menu-remove-extension = + .label = Выдаліць пашырэнне +sidebar-context-menu-report-extension = + .label = Паведаміць пра пашырэнне +sidebar-context-menu-open-in-window = + .label = Адкрыць у новым акне +sidebar-context-menu-open-in-private-window = + .label = Адкрыць у новым прыватным акне +sidebar-context-menu-bookmark-tab = + .label = Зрабіць закладку на картку… +sidebar-context-menu-copy-link = + .label = Капіяваць спасылку +# Variables: +# $deviceName (String) - The name of the device the user is closing a tab for +sidebar-context-menu-close-remote-tab = + .label = Закрыць картку на { $deviceName } + +## Labels for sidebar history context menu items + +sidebar-history-context-menu-delete-page = + .label = Выдаліць з гісторыі + +## Labels for sidebar menu items. + +sidebar-menu-genai-chat-label = + .label = Чат-бот ШІ +sidebar-menu-history-label = + .label = Гісторыя +sidebar-menu-synced-tabs-label = + .label = Карткі з іншых прылад +sidebar-menu-bookmarks-label = + .label = Закладкі +sidebar-menu-customize-label = + .label = Уладкаванне бакавой панэлі +sidebar-menu-review-checker-label = + .label = Праверка водгукаў + +## Headings for sidebar menu panels. + +sidebar-menu-customize-header = + .heading = Уладкаванне бакавой панэлі +sidebar-menu-history-header = + .heading = Гісторыя +sidebar-menu-syncedtabs-header = + .heading = Карткі з іншых прылад +sidebar-panel-header-close-button = + .tooltiptext = Закрыць + +## Titles for sidebar menu panels. + +sidebar-customize-title = Уладкаванне бакавой панэлі +sidebar-history-title = Гісторыя +sidebar-syncedtabs-title = Карткі з іншых прылад + +## Context for closing synced tabs when hovering over the items + +# Context for hovering over the close tab button that will +# send a push to the device to close said tab +# Variables: +# $deviceName (String) - the name of the device the user is closing a tab for +synced-tabs-context-close-tab-title = + .title = Закрыць картку на { $deviceName } + +## Tooltips for the sidebar toolbar button. + +sidebar-toolbar-expand-sidebar = + .tooltiptext = Разгарнуць бакавую панэль +sidebar-toolbar-collapse-sidebar = + .tooltiptext = Згарнуць бакавую панэль +sidebar-toolbar-show-sidebar = + .tooltiptext = Паказаць бакавую панэль +sidebar-toolbar-hide-sidebar = + .tooltiptext = Схаваць бакавую панэль +sidebar-widget-expand-sidebar = + .tooltiptext = Разгарнуць бакавую панэль + .label = Бакавыя панэлі +sidebar-widget-collapse-sidebar = + .tooltiptext = Згарнуць бакавую панэль + .label = Бакавыя панэлі +sidebar-widget-show-sidebar = + .tooltiptext = Паказаць бакавую панэль + .label = Бакавыя панэлі +sidebar-widget-hide-sidebar = + .tooltiptext = Схаваць бакавую панэль + .label = Бакавыя панэлі diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/browser/tabContextMenu.ftl firefox-esr-128.4.0esr/l10n-be/browser/browser/tabContextMenu.ftl --- firefox-esr-128.3.1esr/l10n-be/browser/browser/tabContextMenu.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/browser/tabContextMenu.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -28,11 +28,17 @@ close-tabs-to-the-start = .label = Закрыць карткі злева .accesskey = л +close-tabs-to-the-start-vertical = + .label = Закрыць карткі вышэй + .accesskey = ш # The following string is displayed on a menuitem that will close the tabs from the end of the tabstrip to the currently targeted tab (excluding the currently targeted and any other selected tabs). # In left-to-right languages this should use "Right" and in right-to-left languages this should use "Left". close-tabs-to-the-end = .label = Закрыць карткі справа .accesskey = с +close-tabs-to-the-end-vertical = + .label = Закрыць карткі ніжэй + .accesskey = ж close-other-tabs = .label = Закрыць іншыя карткі .accesskey = і @@ -78,6 +84,13 @@ tab-context-share-url = .label = Падзяліцца .accesskey = П +# In left-to-right languages this should use "Right" and in right-to-left languages this should use "Left" to indicate the direction a new tab will open. +tab-context-new-tab-open = + .label = Новая картка справа + .accesskey = в +tab-context-new-tab-open-vertical = + .label = Новая картка ніжэй + .accesskey = в ## Variables: ## $tabCount (Number): the number of tabs that are affected by the action. diff -Nru firefox-esr-128.3.1esr/l10n-be/browser/chrome/browser/browser.properties firefox-esr-128.4.0esr/l10n-be/browser/chrome/browser/browser.properties --- firefox-esr-128.3.1esr/l10n-be/browser/chrome/browser/browser.properties 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/browser/chrome/browser/browser.properties 2024-10-17 08:32:03.000000000 +0000 @@ -2,130 +2,108 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -nv_timeout=Скончыўся час, патрэбны для выканання дзеяння -openFile=Адкрыць файл - -droponhometitle=Зрабіць хатняй старонкай -droponhomemsg=Вы хочаце, каб гэты дакумент стаў вашай хатняй старонкай? -droponhomemsgMultiple=Жадаеце зрабіць гэтыя дакументы вашымі новымі хатнімі старонкамі? - +nv_timeout = Скончыўся час, патрэбны для выканання дзеяння +openFile = Адкрыць файл +droponhometitle = Зрабіць хатняй старонкай +droponhomemsg = Вы хочаце, каб гэты дакумент стаў вашай хатняй старонкай? +droponhomemsgMultiple = Жадаеце зрабіць гэтыя дакументы вашымі новымі хатнімі старонкамі? # context menu strings - # LOCALIZATION NOTE (contextMenuSearch): %1$S is the search engine, # %2$S is the selection string. -contextMenuSearch=Шукаць "%2$S" у %1$S -contextMenuSearch.accesskey=Ш -contextMenuPrivateSearch=Пошук у прыватным акне -contextMenuPrivateSearch.accesskey=р +contextMenuSearch = Шукаць "%2$S" у %1$S +contextMenuSearch.accesskey = Ш +contextMenuPrivateSearch = Пошук у прыватным акне +contextMenuPrivateSearch.accesskey = р # LOCALIZATION NOTE (contextMenuPrivateSearchOtherEngine): %S is the search # engine name as set for Private Browsing mode. This label is only used when # this engine is different from the default engine name used in normal mode. -contextMenuPrivateSearchOtherEngine=Пошук у %S у прыватным акне -contextMenuPrivateSearchOtherEngine.accesskey=р - +contextMenuPrivateSearchOtherEngine = Пошук у %S у прыватным акне +contextMenuPrivateSearchOtherEngine.accesskey = р # bookmark dialog strings - -bookmarkAllTabsDefault=[Назва папкі] - -unsignedAddonsDisabled.message=Адзін або некалькі з усталяваных дадаткаў не могуць быць правераны, таму яны былі адключаны. -unsignedAddonsDisabled.learnMore.label=Даведацца больш -unsignedAddonsDisabled.learnMore.accesskey=Д - +bookmarkAllTabsDefault = [Назва папкі] +unsignedAddonsDisabled.message = Адзін або некалькі з усталяваных дадаткаў не могуць быць правераны, таму яны былі адключаны. +unsignedAddonsDisabled.learnMore.label = Даведацца больш +unsignedAddonsDisabled.learnMore.accesskey = Д # LOCALIZATION NOTE (geolocationLastAccessIndicatorText): %S is the relative time of the most recent geolocation access (e.g. 5 min. ago) -geolocationLastAccessIndicatorText=Апошні доступ %S - +geolocationLastAccessIndicatorText = Апошні доступ %S # LOCALIZATION NOTE (openProtocolHandlerPermissionEntryLabel): %S is the scheme of the protocol the site may open an application for. For example: mailto -openProtocolHandlerPermissionEntryLabel=Спасылкі %S:// - -crashedpluginsMessage.title=Плагін %S пацярпеў крах. -crashedpluginsMessage.reloadButton.label=Перазагрузіць старонку -crashedpluginsMessage.reloadButton.accesskey=П -crashedpluginsMessage.submitButton.label=Даслаць справаздачу пра падзенне браўзера -crashedpluginsMessage.submitButton.accesskey=Д -crashedpluginsMessage.learnMore=Даведацца больш… - +openProtocolHandlerPermissionEntryLabel = Спасылкі %S:// +crashedpluginsMessage.title = Плагін %S пацярпеў крах. +crashedpluginsMessage.reloadButton.label = Перазагрузіць старонку +crashedpluginsMessage.reloadButton.accesskey = П +crashedpluginsMessage.submitButton.label = Даслаць справаздачу пра падзенне браўзера +crashedpluginsMessage.submitButton.accesskey = Д +crashedpluginsMessage.learnMore = Даведацца больш… # Keyword fixup messages # LOCALIZATION NOTE (keywordURIFixup.message): Used when the user tries to visit # a local host page, by the time the DNS request recognizes it, we have already # loaded a search page for the given word. An infobar then asks to the user # whether he rather wanted to visit the host. %S is the recognized host. -keywordURIFixup.message=Вы мелі на ўвазе пераход на %S? -keywordURIFixup.goTo=Так, перайсці на %S -keywordURIFixup.goTo.accesskey=Т - +keywordURIFixup.message = Вы мелі на ўвазе пераход на %S? +keywordURIFixup.goTo = Так, перайсці на %S +keywordURIFixup.goTo.accesskey = Т # Sanitize # LOCALIZATION NOTE (update.downloadAndInstallButton.label): %S is replaced by the # version of the update: "Update to 28.0". -update.downloadAndInstallButton.label=Абнавіць да %S -update.downloadAndInstallButton.accesskey=А - -menuOpenAllInTabs.label=Адкрыць усе ў картках - +update.downloadAndInstallButton.label = Абнавіць да %S +update.downloadAndInstallButton.accesskey = А +menuOpenAllInTabs.label = Адкрыць усе ў картках # Unified Back-/Forward Popup -tabHistory.reloadCurrent=Абнавіць гэту старонку -tabHistory.goBack=Вярнуцца на гэтую старонку -tabHistory.goForward=Пайсці на гэтую старонку - +tabHistory.reloadCurrent = Абнавіць гэту старонку +tabHistory.goBack = Вярнуцца на гэтую старонку +tabHistory.goForward = Пайсці на гэтую старонку # URL Bar -pasteAndGo.label=Уставіць і перайсці +pasteAndGo.label = Уставіць і перайсці # LOCALIZATION NOTE (reloadButton.tooltip): # %S is the keyboard shortcut for reloading the current page -reloadButton.tooltip=Абнавіць дзейную старонку (%S) +reloadButton.tooltip = Абнавіць дзейную старонку (%S) # LOCALIZATION NOTE (stopButton.tooltip): # %S is the keyboard shortcut for stopping loading the page -stopButton.tooltip=Спыніць загрузку старонкі (%S) +stopButton.tooltip = Спыніць загрузку старонкі (%S) # LOCALIZATION NOTE (urlbar-zoom-button.tooltip): # %S is the keyboard shortcut for resetting the zoom level to 100% -urlbar-zoom-button.tooltip=Аднавіць маштаб (%S) +urlbar-zoom-button.tooltip = Аднавіць маштаб (%S) # LOCALIZATION NOTE (reader-mode-button.tooltip): # %S is the keyboard shortcut for entering/exiting reader view -reader-mode-button.tooltip=Пераключыць рэжым чытальніка (%S) - +reader-mode-button.tooltip = Пераключыць рэжым чытальніка (%S) # LOCALIZATION NOTE(zoom-button.label): %S is the current page zoom level, # %% will be displayed as a single % character (% is commonly used to define # format specifiers, so it needs to be escaped). zoom-button.label = %S%% - # LOCALIZATION NOTE(zoom-button.aria-label): %S is the current page zoom level, # %% will be displayed as a single % character (% is commonly used to define # format specifiers, so it needs to be escaped). -zoom-button.aria-label =%S%%, Скінуць маштаб - +zoom-button.aria-label = %S%%, Скінуць маштаб # General bookmarks button # LOCALIZATION NOTE (bookmarksMenuButton.tooltip): # %S is the keyboard shortcut for "Show All Bookmarks" -bookmarksMenuButton.tooltip=Паказаць вашы закладкі (%S) - +bookmarksMenuButton.tooltip = Паказаць вашы закладкі (%S) # Downloads button tooltip # LOCALIZATION NOTE (downloads.tooltip): # %S is the keyboard shortcut for "Downloads" -downloads.tooltip=Паказаць прагрэс бягучых сцягванняў (%S) - +downloads.tooltip = Паказаць прагрэс бягучых сцягванняў (%S) # New Window button tooltip # LOCALIZATION NOTE (newWindowButton.tooltip): # %S is the keyboard shortcut for "New Window" -newWindowButton.tooltip=Адкрыць новае вакно (%S) - +newWindowButton.tooltip = Адкрыць новае вакно (%S) # New Tab button tooltip # LOCALIZATION NOTE (newTabButton.tooltip): # %S is the keyboard shortcut for "New Tab" -newTabButton.tooltip=Адкрыць новую картку (%S) -newTabContainer.tooltip=Адкрыць новую картку (%S)\nНацісніце і ўтрымлівайце, каб адкрыць новую картку кантэйнера -newTabAlwaysContainer.tooltip=Выберыце кантэйнер, каб адкрыць новую картку - +newTabButton.tooltip = Адкрыць новую картку (%S) +newTabContainer.tooltip = Адкрыць новую картку (%S)\nНацісніце і ўтрымлівайце, каб адкрыць новую картку кантэйнера +newTabAlwaysContainer.tooltip = Выберыце кантэйнер, каб адкрыць новую картку # Canvas permission prompt # LOCALIZATION NOTE (canvas.siteprompt2): %S is hostname -canvas.siteprompt2=Дазволіць %S выкарыстоўваць вашы дадзеныя canvas-выявы HTML5? -canvas.siteprompt2.warning=Гэта можа быць выкарыстана для адназначнай ідэнтыфікацыі вашага камп'ютара. -canvas.block=Блакаваць -canvas.block.accesskey=Б -canvas.allow2=Дазволіць -canvas.allow2.accesskey=Д -canvas.remember2=Запомніць гэты выбар - +canvas.siteprompt2 = Дазволіць %S выкарыстоўваць вашы дадзеныя canvas-выявы HTML5? +canvas.siteprompt2.warning = Гэта можа быць выкарыстана для адназначнай ідэнтыфікацыі вашага камп'ютара. +canvas.block = Блакаваць +canvas.block.accesskey = Б +canvas.allow2 = Дазволіць +canvas.allow2.accesskey = Д +canvas.remember2 = Запомніць гэты выбар # WebAuthn prompts # LOCALIZATION NOTE (webauthn.userPresence): %S is hostname -webauthn.userPresencePrompt=Дакраніцеся да ключа бяспекі, каб працягнуць з %S. +webauthn.userPresencePrompt = Дакраніцеся да ключа бяспекі, каб працягнуць з %S. # LOCALIZATION NOTE (webauthn.registerDirectPrompt3): # %S is hostname. # The website is asking for extended information about your @@ -136,142 +114,122 @@ # And this is true even if you use a different profile / browser (or even Tor # Browser). To avoid this, you should use different hardware authenticators # for different accounts on this website. -webauthn.registerDirectPrompt3=%S запытвае пашыраную інфармацыю аб вашым ключы бяспекі, што можа адбіцца на вашай прыватнасці. +webauthn.registerDirectPrompt3 = %S запытвае пашыраную інфармацыю аб вашым ключы бяспекі, што можа адбіцца на вашай прыватнасці. # LOCALIZATION NOTE (webauthn.registerDirectPromptHint): # %S is brandShortName -webauthn.registerDirectPromptHint=%S можа ананімізаваць гэта для вас, але вэб-сайт можа адхіліць гэты ключ. У выпадку адмовы вы можаце паспрабаваць яшчэ раз. +webauthn.registerDirectPromptHint = %S можа ананімізаваць гэта для вас, але вэб-сайт можа адхіліць гэты ключ. У выпадку адмовы вы можаце паспрабаваць яшчэ раз. # LOCALIZATION NOTE (webauthn.selectSignResultPrompt): %S is hostname -webauthn.selectSignResultPrompt=Для %S знойдзена некалькі ўліковых запісаў. Выберыце, які выкарыстоўваць або адмяніце. +webauthn.selectSignResultPrompt = Для %S знойдзена некалькі ўліковых запісаў. Выберыце, які выкарыстоўваць або адмяніце. # LOCALIZATION NOTE (webauthn.selectDevicePrompt): %S is hostname -webauthn.selectDevicePrompt=Для %S знойдзена некалькі прылад. Выберыце патрэбную. +webauthn.selectDevicePrompt = Для %S знойдзена некалькі прылад. Выберыце патрэбную. # LOCALIZATION NOTE (webauthn.deviceBlockedPrompt): %S is hostname -webauthn.deviceBlockedPrompt=Не ўдалося праверыць карыстальніка %S. Спроб не засталося і ваша прылада была заблакавана, таму што занадта шмат разоў быў уведзены няправільны PIN-код. Прылада патрабуе скіду. +webauthn.deviceBlockedPrompt = Не ўдалося праверыць карыстальніка %S. Спроб не засталося і ваша прылада была заблакавана, таму што занадта шмат разоў быў уведзены няправільны PIN-код. Прылада патрабуе скіду. # LOCALIZATION NOTE (webauthn.pinAuthBlockedPrompt): %S is hostname -webauthn.pinAuthBlockedPrompt=Не ўдалося праверыць карыстальніка %S. Было занадта шмат няўдалых спроб запар і аўтэнтыфікацыя з дапамогай PIN-кода была часова заблакавана. Вашу прыладу трэба перападключыць (адключыце і зноў падключыце). +webauthn.pinAuthBlockedPrompt = Не ўдалося праверыць карыстальніка %S. Было занадта шмат няўдалых спроб запар і аўтэнтыфікацыя з дапамогай PIN-кода была часова заблакавана. Вашу прыладу трэба перападключыць (адключыце і зноў падключыце). # LOCALIZATION NOTE (webauthn.pinNotSetPrompt): %S is hostname -webauthn.pinNotSetPrompt=Праверка карыстальніка на %S не ўдалася. Магчыма, вам трэба ўсталяваць PIN-код на сваёй прыладзе. +webauthn.pinNotSetPrompt = Праверка карыстальніка на %S не ўдалася. Магчыма, вам трэба ўсталяваць PIN-код на сваёй прыладзе. # LOCALIZATION NOTE (webauthn.uvBlockedPrompt): %S is hostname -webauthn.uvBlockedPrompt=Не ўдалося праверыць карыстальніка %S. Было занадта шмат няўдалых спроб, і ўбудаваны метад праверкі карыстальніка быў заблакаваны. -webauthn.alreadyRegisteredPrompt=Гэта прылада ўжо зарэгістравана. Паспрабуйце іншую прыладу. -webauthn.cancel=Скасаваць -webauthn.cancel.accesskey=с -webauthn.proceed=Працягнуць -webauthn.proceed.accesskey=п -webauthn.anonymize=Ананімізаваць усё роўна - +webauthn.uvBlockedPrompt = Не ўдалося праверыць карыстальніка %S. Было занадта шмат няўдалых спроб, і ўбудаваны метад праверкі карыстальніка быў заблакаваны. +webauthn.alreadyRegisteredPrompt = Гэта прылада ўжо зарэгістравана. Паспрабуйце іншую прыладу. +webauthn.cancel = Скасаваць +webauthn.cancel.accesskey = с +webauthn.proceed = Працягнуць +webauthn.proceed.accesskey = п +webauthn.anonymize = Ананімізаваць усё роўна # Spoof Accept-Language prompt -privacy.spoof_english=Змена налад вашай мовы на англійскую ўскладніць выяўленне і паляпшэння вашай прыватнасці. Вы хочаце даваць запыт на ангельскую версію вэб-сайтаў? - -webauthn.allow=Дазволіць -webauthn.allow.accesskey=Д -webauthn.block=Блакаваць -webauthn.block.accesskey=Б - +privacy.spoof_english = Змена налад вашай мовы на англійскую ўскладніць выяўленне і паляпшэння вашай прыватнасці. Вы хочаце даваць запыт на ангельскую версію вэб-сайтаў? +webauthn.allow = Дазволіць +webauthn.allow.accesskey = Д +webauthn.block = Блакаваць +webauthn.block.accesskey = Б # LOCALIZATION NOTE (identity.identified.verifier, identity.identified.state_and_country, identity.ev.contentOwner2): # %S is the hostname of the site that is being displayed. -identity.identified.verifier=Праверана: %S -identity.identified.verified_by_you=Вы дадалі выключэнне бяспекі для гэтага сайта. -identity.identified.state_and_country=%S, %S -identity.ev.contentOwner2=Сертыфікат выдадзены: %S - +identity.identified.verifier = Праверана: %S +identity.identified.verified_by_you = Вы дадалі выключэнне бяспекі для гэтага сайта. +identity.identified.state_and_country = %S, %S +identity.ev.contentOwner2 = Сертыфікат выдадзены: %S # LOCALIZATION NOTE (identity.notSecure.label): # Keep this string as short as possible, this is displayed in the URL bar # use a synonym for "safe" or "private" if "secure" is too long. -identity.notSecure.label=Не абаронена -identity.notSecure.tooltip=Злучэнне не бяспечнае - -identity.extension.label=Пашырэнне (%S) -identity.extension.tooltip=Загружана пашырэннем: %S - +identity.notSecure.label = Не абаронена +identity.notSecure.tooltip = Злучэнне не бяспечнае +identity.extension.label = Пашырэнне (%S) +identity.extension.tooltip = Загружана пашырэннем: %S # LOCALIZATION NOTE (contentBlocking.trackersView.blocked.label): # This label is shown next to a tracker in the trackers subview. # It forms the end of the (imaginary) sentence "www.example.com [was] Blocked" -contentBlocking.trackersView.blocked.label=Заблакавана - -contentBlocking.trackersView.empty.label=Не выяўлены на гэтым сайце - +contentBlocking.trackersView.blocked.label = Заблакавана +contentBlocking.trackersView.empty.label = Не выяўлены на гэтым сайце # LOCALIZATION NOTE (contentBlocking.cookies.blockingTrackers.label, contentBlocking.cookies.blocking3rdParty.label, # contentBlocking.cookies.blockingUnvisited.label,contentBlocking.cookies.blockingAll.label): -contentBlocking.cookies.blockingTrackers3.label=Міжсайтавыя кукі асочвання -contentBlocking.cookies.blocking3rdParty2.label=Кукі трэцяга боку -contentBlocking.cookies.blockingUnvisited2.label=Кукі з ненаведаных сайтаў -contentBlocking.cookies.blockingAll2.label=Усе кукі - -contentBlocking.cookiesView.firstParty.label=З гэтага сайта +contentBlocking.cookies.blockingTrackers3.label = Міжсайтавыя кукі асочвання +contentBlocking.cookies.blocking3rdParty2.label = Кукі трэцяга боку +contentBlocking.cookies.blockingUnvisited2.label = Кукі з ненаведаных сайтаў +contentBlocking.cookies.blockingAll2.label = Усе кукі +contentBlocking.cookiesView.firstParty.label = З гэтага сайта # LOCALIZATION NOTE (contentBlocking.cookiesView.firstParty.empty.label): # This references the header from contentBlocking.cookiesView.firstParty.label: # "[Cookies] From This Site: None detected on this site". -contentBlocking.cookiesView.firstParty.empty.label=Не выяўлены на гэтым сайце - -contentBlocking.cookiesView.trackers2.label=Міжсайтавыя кукі асочвання +contentBlocking.cookiesView.firstParty.empty.label = Не выяўлены на гэтым сайце +contentBlocking.cookiesView.trackers2.label = Міжсайтавыя кукі асочвання # LOCALIZATION NOTE (contentBlocking.cookiesView.trackers.empty.label): # This references the header from contentBlocking.cookiesView.trackers.label: # "Tracking Cookies: None detected on this site". -contentBlocking.cookiesView.trackers.empty.label=Не выяўлены на гэтым сайце - -contentBlocking.cookiesView.thirdParty.label=Кукі трэцяга боку +contentBlocking.cookiesView.trackers.empty.label = Не выяўлены на гэтым сайце +contentBlocking.cookiesView.thirdParty.label = Кукі трэцяга боку # LOCALIZATION NOTE (contentBlocking.cookiesView.thirdParty.empty.label): # This references the header from contentBlocking.cookiesView.thirdParty.label: # "Third-Party Cookies: None detected on this site". -contentBlocking.cookiesView.thirdParty.empty.label=Не выяўлены на гэтым сайце - +contentBlocking.cookiesView.thirdParty.empty.label = Не выяўлены на гэтым сайце # LOCALIZATION NOTE (contentBlocking.cookiesView.allowed.label): # This label is shown next to a cookie origin in the cookies subview. # It forms the end of the (imaginary) sentence "www.example.com [was] Allowed" -contentBlocking.cookiesView.allowed.label=Дазволена +contentBlocking.cookiesView.allowed.label = Дазволена # LOCALIZATION NOTE (contentBlocking.cookiesView.blocked.label): # This label is shown next to a cookie origin in the cookies subview. # It forms the end of the (imaginary) sentence "www.example.com [was] Blocked" -contentBlocking.cookiesView.blocked.label=Заблакаваны +contentBlocking.cookiesView.blocked.label = Заблакаваны # LOCALIZATION NOTE (contentBlocking.cookiesView.removeButton.tooltip): %S is the domain of the site. -contentBlocking.cookiesView.removeButton.tooltip=Прыбраць выключэнне для кукаў з %S - +contentBlocking.cookiesView.removeButton.tooltip = Прыбраць выключэнне для кукаў з %S # LOCALIZATION NOTE (contentBlocking.fingerprintersView.blocked.label): # This label is shown next to a fingerprinter in the fingerprinters subview. # It forms the end of the (imaginary) sentence "www.example.com [was] Blocked" -contentBlocking.fingerprintersView.blocked.label=Заблакаваны - +contentBlocking.fingerprintersView.blocked.label = Заблакаваны # LOCALIZATION NOTE (contentBlocking.cryptominersView.blocked.label): # This label is shown next to a cryptominer in the cryptominers subview. # It forms the end of the (imaginary) sentence "www.example.com [was] Blocked" -contentBlocking.cryptominersView.blocked.label=Заблакаваны - -trackingProtection.icon.activeTooltip2=Блакуюцца трэкеры сацыяльных сетак, міжсайтавыя кукі асочвання і збіральнікі лічбавых адбіткаў. -trackingProtection.icon.disabledTooltip2=Узмоцненая ахова ад сачэння выключана на гэтым сайце. +contentBlocking.cryptominersView.blocked.label = Заблакаваны +trackingProtection.icon.activeTooltip2 = Блакуюцца трэкеры сацыяльных сетак, міжсайтавыя кукі асочвання і збіральнікі лічбавых адбіткаў. +trackingProtection.icon.disabledTooltip2 = Узмоцненая ахова ад сачэння выключана на гэтым сайце. # LOCALIZATION NOTE (trackingProtection.icon.noTrackersDetectedTooltip): %S is brandShortName. -trackingProtection.icon.noTrackersDetectedTooltip=Ніводнага трэкера, вядомага %S, не выяўлена на гэтай старонцы. - +trackingProtection.icon.noTrackersDetectedTooltip = Ніводнага трэкера, вядомага %S, не выяўлена на гэтай старонцы. # LOCALIZATION NOTE (protections.header): # Header of the Protections Panel. %S is replaced with the site's hostname. -protections.header=Ахова на %S - +protections.header = Ахова на %S # LOCALIZATION NOTE (protections.disableAriaLabel): # Text that gets spoken by a screen reader if the button will disable protections. # %s is the site's hostname. -protections.disableAriaLabel=Адключыць ахову на %S - +protections.disableAriaLabel = Адключыць ахову на %S # LOCALIZATION NOTE (protections.enableAriaLabel): # Text that gets spoken by a screen reader if the button will enable protections. # %s is the site's hostname. -protections.enableAriaLabel=Уключыць ахову на %S - +protections.enableAriaLabel = Уключыць ахову на %S # Blocking and Not Blocking sub-views in the Protections Panel -protections.blocking.fingerprinters.title=Заблакавана збіральнікаў лічбавых адбіткаў -protections.blocking.cryptominers.title=Заблакавана майнераў крыптавалют -protections.blocking.cookies.trackers.title=Заблакавана міжсайтавых кукаў асочвання -protections.blocking.cookies.3rdParty.title=Заблакавана кукаў трэцяга боку -protections.blocking.cookies.all.title=Усіх кукаў заблакавана -protections.blocking.cookies.unvisited.title=Заблакавана кукаў з ненаведаных сайтаў -protections.blocking.trackingContent.title=Заблакавана змесціва асочвання -protections.blocking.socialMediaTrackers.title=Заблакавана трэкераў сацыяльных сетак -protections.notBlocking.fingerprinters.title=Не блакуюцца збіральнікі лічбавых адбіткаў -protections.notBlocking.cryptominers.title=Не блакуюцца майнеры крыптавалют -protections.notBlocking.cookies.3rdParty.title=Не блакуюцца кукі трэцяга боку -protections.notBlocking.cookies.all.title=Кукі не блакуюцца -protections.notBlocking.crossSiteTrackingCookies.title=Не блакуюцца міжсайтавыя кукі асочвання -protections.notBlocking.trackingContent.title=Не блакуецца змест з элементамі сачэння -protections.notBlocking.socialMediaTrackers.title=Не блакуюцца трэкеры сацыяльных сетак - +protections.blocking.fingerprinters.title = Заблакавана збіральнікаў лічбавых адбіткаў +protections.blocking.cryptominers.title = Заблакавана майнераў крыптавалют +protections.blocking.cookies.trackers.title = Заблакавана міжсайтавых кукаў асочвання +protections.blocking.cookies.3rdParty.title = Заблакавана кукаў трэцяга боку +protections.blocking.cookies.all.title = Усіх кукаў заблакавана +protections.blocking.cookies.unvisited.title = Заблакавана кукаў з ненаведаных сайтаў +protections.blocking.trackingContent.title = Заблакавана змесціва асочвання +protections.blocking.socialMediaTrackers.title = Заблакавана трэкераў сацыяльных сетак +protections.notBlocking.fingerprinters.title = Не блакуюцца збіральнікі лічбавых адбіткаў +protections.notBlocking.cryptominers.title = Не блакуюцца майнеры крыптавалют +protections.notBlocking.cookies.3rdParty.title = Не блакуюцца кукі трэцяга боку +protections.notBlocking.cookies.all.title = Кукі не блакуюцца +protections.notBlocking.crossSiteTrackingCookies.title = Не блакуюцца міжсайтавыя кукі асочвання +protections.notBlocking.trackingContent.title = Не блакуецца змест з элементамі сачэння +protections.notBlocking.socialMediaTrackers.title = Не блакуюцца трэкеры сацыяльных сетак # Footer section in the Protections Panel # LOCALIZATION NOTE (protections.footer.blockedTrackerCounter.description, # protections.footer.blockedTrackerCounter.tooltip): @@ -281,11 +239,10 @@ # Semicolon-separated list of plural forms. # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals # Replacement for #1 is a locale-string converted positive integer. -protections.footer.blockedTrackerCounter.description=1 заблакаваны;#1 заблакавана;#1 заблакавана +protections.footer.blockedTrackerCounter.description = 1 заблакаваны;#1 заблакавана;#1 заблакавана # LOCALIZATION NOTE (protections.footer.blockedTrackerCounter.tooltip): # %S is the date on which we started counting (e.g., July 17, 2019). -protections.footer.blockedTrackerCounter.tooltip=Пачынаючы з %S - +protections.footer.blockedTrackerCounter.tooltip = Пачынаючы з %S # Milestones section in the Protections Panel # LOCALIZATION NOTE (protections.milestone.description): # Semicolon-separated list of plural forms. @@ -294,94 +251,89 @@ # #2 is replaced with the (locale-formatted) number of trackers blocked # #3 is replaced by a locale-formatted date with short month and numeric year. # In English this looks like "Firefox blocked over 10,000 trackers since Oct 2019" -protections.milestone.description=#1 заблакаваў #2 трэкер з #3;#1 заблакаваў больш за #2 трэкеры з #3;#1 заблакаваў больш за #2 трэкераў з #3 - +protections.milestone.description = #1 заблакаваў #2 трэкер з #3;#1 заблакаваў больш за #2 трэкеры з #3;#1 заблакаваў больш за #2 трэкераў з #3 # Application menu - # LOCALIZATION NOTE(zoomReduce-button.tooltip): %S is the keyboard shortcut. zoomReduce-button.tooltip = Паменшыць (%S) # LOCALIZATION NOTE(zoomReset-button.tooltip): %S is the keyboard shortcut. zoomReset-button.tooltip = Скінуць узровень павелічэння (%S) # LOCALIZATION NOTE(zoomEnlarge-button.tooltip): %S is the keyboard shortcut. zoomEnlarge-button.tooltip = Павялічыць (%S) - # LOCALIZATION NOTE (cut-button.tooltip): %S is the keyboard shortcut. cut-button.tooltip = Выразаць (%S) # LOCALIZATION NOTE (copy-button.tooltip): %S is the keyboard shortcut. copy-button.tooltip = Капіяваць (%S) # LOCALIZATION NOTE (paste-button.tooltip): %S is the keyboard shortcut. paste-button.tooltip = Уставіць (%S) - # Geolocation UI - -geolocation.allow=Дазволіць -geolocation.allow.accesskey=Д -geolocation.block=Блакаваць -geolocation.block.accesskey=Б -geolocation.shareWithSite4=Дазволіць %S доступ да вашага месцазнаходжання? -geolocation.shareWithFile4=Дазволіць гэтаму лакальнаму файлу доступ да вашага месцазнаходжання? +geolocation.allow = Дазволіць +geolocation.allow.accesskey = Д +geolocation.block = Блакаваць +geolocation.block.accesskey = Б +# %S is replaced by the product name (e.g. Firefox) +geolocation.needsSystemSetting = Гэта адкрые сістэмныя налады месцазнаходжання. Калі ласка, дайце %S дазвол на доступ да месцазнаходжання. +geolocation.shareWithSite4 = Дазволіць %S доступ да вашага месцазнаходжання? +geolocation.shareWithFile4 = Дазволіць гэтаму лакальнаму файлу доступ да вашага месцазнаходжання? # LOCALIZATION NOTE(geolocation.shareWithSiteUnsafeDelegation2): # %1$S is the first party origin, %2$S is the third party origin. -geolocation.shareWithSiteUnsafeDelegation2=Дазволіць %1$S даць %2$S доступ да вашага месцазнаходжання? -geolocation.remember=Памятаць гэтае рашэнне - +geolocation.shareWithSiteUnsafeDelegation2 = Дазволіць %1$S даць %2$S доступ да вашага месцазнаходжання? +# %S is replaced by the product name (e.g. Firefox) +geolocation.systemSettingsMessage = Даць %S дазвол на вызначэнне месцазнаходжання ў наладах сістэмы. +geolocation.systemSettingsTitle = Чакаецца дазвол на доступ да месцазнаходжання +# %S is replaced by the product name (e.g. Firefox) +geolocation.systemWillRequestPermission = Сістэма папросіць вас даць гэты дазвол для %S. +geolocation.remember = Памятаць гэтае рашэнне # Virtual Reality Device UI -xr.allow2=Дазволіць -xr.allow2.accesskey=Д -xr.block=Блакаваць -xr.block.accesskey=Б -xr.shareWithSite4=Дазволіць %S атрымліваць доступ да прылад віртуальнай рэальнасці? Гэта можа адкрыць канфідэнцыяльную інфармацыю. -xr.shareWithFile4=Дазволіць гэтаму лакальнаму файлу атрымліваць доступ да прылад віртуальнай рэальнасці? Гэта можа адкрыць канфідэнцыяльную інфармацыю. -xr.remember=Запомніць гэты выбар - +xr.allow2 = Дазволіць +xr.allow2.accesskey = Д +xr.block = Блакаваць +xr.block.accesskey = Б +xr.shareWithSite4 = Дазволіць %S атрымліваць доступ да прылад віртуальнай рэальнасці? Гэта можа адкрыць канфідэнцыяльную інфармацыю. +xr.shareWithFile4 = Дазволіць гэтаму лакальнаму файлу атрымліваць доступ да прылад віртуальнай рэальнасці? Гэта можа адкрыць канфідэнцыяльную інфармацыю. +xr.remember = Запомніць гэты выбар # Persistent storage UI -persistentStorage.allow=Дазволіць -persistentStorage.allow.accesskey=Д -persistentStorage.block.label=Блакаваць -persistentStorage.block.accesskey=Б -persistentStorage.allowWithSite2=Дазволіць %S захоўваць дадзеныя ў пастаянным сховішчы? - +persistentStorage.allow = Дазволіць +persistentStorage.allow.accesskey = Д +persistentStorage.block.label = Блакаваць +persistentStorage.block.accesskey = Б +persistentStorage.allowWithSite2 = Дазволіць %S захоўваць дадзеныя ў пастаянным сховішчы? # Web notifications UI # LOCALIZATION NOTE (alwaysBlock, block) # The two button strings will never be shown at the same time, so # it's okay for them to have the same access key -webNotifications.allow2=Дазволіць -webNotifications.allow2.accesskey=Д -webNotifications.notNow=Не зараз -webNotifications.notNow.accesskey=Н -webNotifications.never=Ніколі не дазваляць -webNotifications.never.accesskey=л -webNotifications.alwaysBlock=Заўсёды блакаваць -webNotifications.alwaysBlock.accesskey=Б -webNotifications.block=Блакаваць -webNotifications.block.accesskey=Б -webNotifications.receiveFromSite3=Дазволіць %S адпраўляць вам абвесткі? - +webNotifications.allow2 = Дазволіць +webNotifications.allow2.accesskey = Д +webNotifications.notNow = Не зараз +webNotifications.notNow.accesskey = Н +webNotifications.never = Ніколі не дазваляць +webNotifications.never.accesskey = л +webNotifications.alwaysBlock = Заўсёды блакаваць +webNotifications.alwaysBlock.accesskey = Б +webNotifications.block = Блакаваць +webNotifications.block.accesskey = Б +webNotifications.receiveFromSite3 = Дазволіць %S адпраўляць вам абвесткі? # Phishing/Malware Notification Bar. # LOCALIZATION NOTE (notADeceptiveSite, notAnAttack) # The two button strings will never be shown at the same time, so # it's okay for them to have the same access key -safebrowsing.getMeOutOfHereButton.label=Пакінуць гэта месца! -safebrowsing.getMeOutOfHereButton.accessKey=П -safebrowsing.deceptiveSite=Падроблены сайт! -safebrowsing.notADeceptiveSiteButton.label=Гэта не падроблены сайт… -safebrowsing.notADeceptiveSiteButton.accessKey=П -safebrowsing.reportedAttackSite=Папярэджанне: нападны сайт! -safebrowsing.notAnAttackButton.label=Гэты сайт не атакуе камп'ютары… -safebrowsing.notAnAttackButton.accessKey=А -safebrowsing.reportedUnwantedSite=Есць інфармацыя, што гэты сайт змяшчае непажаданыя праграмы! -safebrowsing.reportedHarmfulSite=Вядомы шкодны сайт! - +safebrowsing.getMeOutOfHereButton.label = Пакінуць гэта месца! +safebrowsing.getMeOutOfHereButton.accessKey = П +safebrowsing.deceptiveSite = Падроблены сайт! +safebrowsing.notADeceptiveSiteButton.label = Гэта не падроблены сайт… +safebrowsing.notADeceptiveSiteButton.accessKey = П +safebrowsing.reportedAttackSite = Папярэджанне: нападны сайт! +safebrowsing.notAnAttackButton.label = Гэты сайт не атакуе камп'ютары… +safebrowsing.notAnAttackButton.accessKey = А +safebrowsing.reportedUnwantedSite = Есць інфармацыя, што гэты сайт змяшчае непажаданыя праграмы! +safebrowsing.reportedHarmfulSite = Вядомы шкодны сайт! # LOCALIZATION NOTE (addKeywordTitleAutoFill): %S will be replaced by the page's title # Used as the bookmark name when saving a keyword for a search field. -addKeywordTitleAutoFill=Пошук %S - +addKeywordTitleAutoFill = Пошук %S # troubleshootModeRestart # LOCALIZATION NOTE (troubleshootModeRestartPromptTitle): %S is the name of the product (e.g., Firefox) -troubleshootModeRestartPromptTitle=Перазапусціць %S у рэжыме вырашэння праблем? -troubleshootModeRestartPromptMessage=Вашы пашырэнні, тэмы і асабістыя налады будуць часова адключаны. -troubleshootModeRestartButton=Перазапусціць - +troubleshootModeRestartPromptTitle = Перазапусціць %S у рэжыме вырашэння праблем? +troubleshootModeRestartPromptMessage = Вашы пашырэнні, тэмы і асабістыя налады будуць часова адключаны. +troubleshootModeRestartButton = Перазапусціць # LOCALIZATION NOTE (browser.menu.showCharacterEncoding): Set to the string # "true" (spelled and capitalized exactly that way) to show the "Text # Encoding" menu in the main Firefox button on Windows. Any other value will @@ -390,8 +342,7 @@ # This is not a string to translate; it just controls whether the menu shows # up in the Firefox button. If users frequently use the "Text Encoding" # menu, set this to "true". Otherwise, you can leave it as "false". -browser.menu.showCharacterEncoding=true - +browser.menu.showCharacterEncoding = true # Process hang reporter # LOCALIZATION NOTE (processHang.selected_tab.label): %1$S is the name of the product (e.g., Firefox) processHang.selected_tab.label = Гэта старонка запавольвае %1$S. Каб паскорыць працу вашага браўзера, спыніце гэтую старонку. @@ -408,33 +359,24 @@ processHang.button_stop2.accessKey = ы processHang.button_debug.label = Наладзіць сцэнар processHang.button_debug.accessKey = Н - # LOCALIZATION NOTE (fullscreenButton.tooltip): %S is the keyboard shortcut for full screen -fullscreenButton.tooltip=Паказаць акно на увесь экран (%S) - +fullscreenButton.tooltip = Паказаць акно на увесь экран (%S) # These are visible when opening the popup inside the bookmarks sidebar -sidebar.moveToLeft=Перамясціць бакавую панэль улева -sidebar.moveToRight=Перамясціць бакавую панэль управа - +sidebar.moveToLeft = Перамясціць бакавую панэль улева +sidebar.moveToRight = Перамясціць бакавую панэль управа # LOCALIZATION NOTE(emeNotifications.drmContentDisabled.message): NB: inserted via innerHTML, so please don't use <, > or & in this string. %S will be the 'learn more' link emeNotifications.drmContentDisabled.message2 = Вы павінны ўключыць DRM, каб прайграць некаторыя аўдыё ці відэа на гэтай старонцы. emeNotifications.drmContentDisabled.button.label = Уключыць DRM emeNotifications.drmContentDisabled.button.accesskey = У - # LOCALIZATION NOTE(emeNotifications.drmContentCDMInstalling.message): NB: inserted via innerHTML, so please don't use <, > or & in this string. %S is brandShortName emeNotifications.drmContentCDMInstalling.message = %S усталёўвае кампаненты, неабходныя для прайгравання аўдыё або відэа на гэтай старонцы. Калі ласка, паўтарыце спробу пазней. - emeNotifications.unknownDRMSoftware = Невядома - # LOCALIZATION NOTE (customizeMode.tabTitle): %S is brandShortName customizeMode.tabTitle = Уладкаваць %S - e10s.accessibilityNotice.acceptButton.label = OK e10s.accessibilityNotice.acceptButton.accesskey = O - # LOCALIZATION NOTE (e10s.accessibilityNotice.jawsMessage): %S is brandShortName e10s.accessibilityNotice.jawsMessage = Паказ зместу карткі адключаны з-за несумяшчальнасці паміж %S і вашым праграмным забеспячэннем даступнасці. Абнавіце Экранны чытальнік або пераключыцеся на ESR версію Firefox. - # LOCALIZATION NOTE (userContextPersonal.label, # userContextWork.label, # userContextShopping.label, @@ -454,35 +396,29 @@ userContextBanking.label = Банкінг userContextShopping.label = Пакупкі userContextNone.label = Не ў кантэйнеры - userContextPersonal.accesskey = А userContextWork.accesskey = П userContextBanking.accesskey = Б userContextShopping.accesskey = П userContextNone.accesskey = Н - userContext.aboutPage.label = Кіраванне кантэйнерамі userContext.aboutPage.accesskey = А - # LOCALIZATION NOTE (sendTabsToDevice.label): # Semi-colon list of plural forms. # See: https://developer.mozilla.org/en/docs/Localization_and_Plurals -# #1 is the number of tabs sent to the device. +##1 is the number of tabs sent to the device. sendTabsToDevice.label = Даслаць картку на прыладу;Даслаць #1 карткі на прыладу;Даслаць #1 картак на прыладу sendTabsToDevice.accesskey = т - decoder.noCodecs.button = Даведацца, як decoder.noCodecs.accesskey = Д decoder.noCodecsLinux.message = Для прайгравання відэа вам можа спатрэбіцца ўсталяванне неабходных відэакодэкаў. decoder.noHWAcceleration.message = Для паляпшэння якасці відэа вам можа спатрэбіцца Media Feature Pack ад Microsoft. decoder.noPulseAudio.message = Для прайгравання аўдыё вам можа спатрэбіцца неабходнае праграмнае забеспячэнне PulseAudio. decoder.unsupportedLibavcodec.message = libavcodec можа быць пашкоджаны ці не падтрымліваецца, і павінен быць абноўлены для прайгравання відэа. - decoder.decodeError.message = Пры дэкадаванні медыя адбылася памылка. decoder.decodeError.button = Паведаміць аб праблеме з сайтам decoder.decodeError.accesskey = П decoder.decodeWarning.message = Пры дэкадаванні медыя адбылася памылка, якую можна выправіць. - # LOCALIZATION NOTE (captivePortal.infoMessage3): # Shown in a notification bar when we detect a captive portal is blocking network access # and requires the user to log in before browsing. @@ -491,15 +427,12 @@ # The label for a button shown in the info bar in all tabs except the login page tab. # The button shows the portal login page tab when clicked. captivePortal.showLoginPage2 = Адкрыць старонку ўваходу ў сетку - # LOCALIZATION NOTE (permissions.header): # %S is the hostname of the site that is being displayed. permissions.header = Дазволы для %S permissions.remove.tooltip = Выдаліць гэты дазвол і спытаць зноў - permissions.fullscreen.promptCanceled = Ануляваны чаканыя запыты дазволу: запыты на дазвол не павінны выдавацца перад уваходам у поўнаэкранны DOM. permissions.fullscreen.fullScreenCanceled = Поўнаэкранны рэжым DOM выключаны: запыты на дазвол не павінны выдавацца ў час поўнаэкраннага DOM. - # LOCALIZATION NOTE (aboutDialog.architecture.*): # The sixtyFourBit and thirtyTwoBit strings describe the architecture of the # current Firefox build: 32-bit or 64-bit. These strings are used in parentheses @@ -507,24 +440,21 @@ # e.g.: "48.0.2 (32-bit) " or "51.0a1 (2016-09-05) (64-bit)". aboutDialog.architecture.sixtyFourBit = 64-біт aboutDialog.architecture.thirtyTwoBit = 32-біт - midi.allow.label = Дазволіць midi.allow.accesskey = Д midi.block.label = Блакаваць midi.block.accesskey = Б -midi.remember=Запомніць гэты выбар +midi.remember = Запомніць гэты выбар midi.shareWithFile = Дазволіць гэтаму лакальнаму файлу доступ да вашых прылад MIDI? # LOCALIZATION NOTE (midi.shareWithSite): %S is the name of the site URL (https://...) requesting MIDI access midi.shareWithSite = Дазволіць %S доступ да вашых прылад MIDI? midi.shareSysexWithFile = Дазволіць гэтаму лакальнаму файлу доступ да вашых прылад MIDI, а таксама дасылаць/атрымліваць SysEx паведамленні? # LOCALIZATION NOTE (midi.shareSysexWithSite): %S is the name of the site URL (https://...) requesting MIDI access midi.shareSysexWithSite = Дазволіць %S доступ да вашых прылад MIDI, а таксама дасылаць/атрымліваць SysEx паведамленні? - # LOCALIZATION NOTE (panel.back): # This is used by screen readers to label the "back" button in various browser # popup panels, including the sliding subviews of the main menu. panel.back = Назад - storageAccess1.Allow.label = Дазволiць storageAccess1.Allow.accesskey = Д storageAccess1.DontAllow.label = Блакаваць @@ -534,7 +464,6 @@ # %2$S is the name of the site URL (www.site2.example) that the user is visiting. This is the same domain name displayed in the address bar. storageAccess4.message = Дазволiць %1$S выкарыстоўваць свае кукi на %2$S? storageAccess1.hintText = Вы можаце заблакаваць доступ, калі няясна, навошта %1$S патрэбны гэтыя дадзеныя. - # LOCALIZATION NOTE (gnomeSearchProviderSearchWeb): # Used for search by Gnome Shell activity screen, %S is a searched string. -gnomeSearchProviderSearchWeb=Шукаць у Інтэрнэце “%S” +gnomeSearchProviderSearchWeb = Шукаць у Інтэрнэце “%S” diff -Nru firefox-esr-128.3.1esr/l10n-be/devtools/client/aboutdebugging.ftl firefox-esr-128.4.0esr/l10n-be/devtools/client/aboutdebugging.ftl --- firefox-esr-128.3.1esr/l10n-be/devtools/client/aboutdebugging.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/devtools/client/aboutdebugging.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -10,9 +10,9 @@ # Page title (ie tab title) for the Setup page about-debugging-page-title-setup-page = Адладка - Усталёўка - # Page title (ie tab title) for the Runtime page -# { $selectedRuntimeId } is the id of the current runtime, such as "this-firefox", "localhost:6080", ... +# Variables: +# $selectedRuntimeId - ID of the current runtime, such as "this-firefox", "localhost:6080", etc. about-debugging-page-title-runtime-page = Адладка - Асяроддзе / { $selectedRuntimeId } # Sidebar strings @@ -20,73 +20,63 @@ # Display name of the runtime for the currently running instance of Firefox. Used in the # Sidebar and in the Setup page. about-debugging-this-firefox-runtime-name = Гэты { -brand-shorter-name } - # Sidebar heading for selecting the currently running instance of Firefox +# .name is processed by fluent-react / SidebarFixedItem about-debugging-sidebar-this-firefox = .name = { about-debugging-this-firefox-runtime-name } - # Sidebar heading for connecting to some remote source +# .name is processed by fluent-react / SidebarFixedItem about-debugging-sidebar-setup = .name = Усталяванне - # Text displayed in the about:debugging sidebar when USB devices discovery is enabled. about-debugging-sidebar-usb-enabled = USB уключана - # Text displayed in the about:debugging sidebar when USB devices discovery is disabled # (for instance because the mandatory ADB extension is not installed). about-debugging-sidebar-usb-disabled = USB адключана - # Connection status (connected) for runtime items in the sidebar aboutdebugging-sidebar-runtime-connection-status-connected = Злучаны # Connection status (disconnected) for runtime items in the sidebar aboutdebugging-sidebar-runtime-connection-status-disconnected = Адлучаны - # Text displayed in the about:debugging sidebar when no device was found. about-debugging-sidebar-no-devices = Прылады не выяўлены - # Text displayed in buttons found in sidebar items representing remote runtimes. # Clicking on the button will attempt to connect to the runtime. about-debugging-sidebar-item-connect-button = Злучыцца - # Text displayed in buttons found in sidebar items when the runtime is connecting. about-debugging-sidebar-item-connect-button-connecting = Злучэнне… - # Text displayed in buttons found in sidebar items when the connection failed. about-debugging-sidebar-item-connect-button-connection-failed = Не ўдалося злучыцца - # Text displayed in connection warning on sidebar item of the runtime when connecting to # the runtime is taking too much time. about-debugging-sidebar-item-connect-button-connection-not-responding = Злучэнне ўсё яшчэ чакаецца, праверце паведамленні ў мэтавым браўзеры - # Text displayed as connection error in sidebar item when the connection has timed out. about-debugging-sidebar-item-connect-button-connection-timeout = Час чакання злучэння выйшаў - # Text displayed in sidebar items for remote devices where a compatible browser (eg # Firefox) has not been detected yet. Typically, Android phones connected via USB with # USB debugging enabled, but where Firefox is not started. about-debugging-sidebar-runtime-item-waiting-for-browser = Чаканне браўзера… - # Text displayed in sidebar items for remote devices that have been disconnected from the # computer. about-debugging-sidebar-runtime-item-unplugged = Адключана - # Title for runtime sidebar items that are related to a specific device (USB, WiFi). +# Variables: +# $displayName (string) - Displayed name +# $deviceName (string) - Name of the device about-debugging-sidebar-runtime-item-name = .title = { $displayName } ({ $deviceName }) # Title for runtime sidebar items where we cannot get device information (network # locations). +# Variables: +# $displayName (string) - Displayed name about-debugging-sidebar-runtime-item-name-no-device = .title = { $displayName } - # Text to show in the footer of the sidebar that links to a help page # (currently: https://firefox-source-docs.mozilla.org/devtools-user/about_colon_debugging/) about-debugging-sidebar-support = Дапамога па адладцы - # Text to show as the ALT attribute of a help icon that accompanies the help about # debugging link in the footer of the sidebar about-debugging-sidebar-support-icon = .alt = Значок даведкі - # Text displayed in a sidebar button to refresh the list of USB devices. Clicking on it # will attempt to update the list of devices displayed in the sidebar. about-debugging-refresh-usb-devices-button = Абнавіць спіс прылад @@ -95,83 +85,63 @@ # Title of the Setup page. about-debugging-setup-title = Усталёўка - # Introduction text in the Setup page to explain how to configure remote debugging. about-debugging-setup-intro = Наладзьце метад злучэння, з дапамогай якога вы хочаце аддалена адладжваць вашу прыладу. - # Explanatory text in the Setup page about what the 'This Firefox' page is for about-debugging-setup-this-firefox2 = Карыстайцеся { about-debugging-this-firefox-runtime-name } для адладкі пашырэнняў і service workers на гэтай версіі { -brand-shorter-name }. - # Title of the heading Connect section of the Setup page. about-debugging-setup-connect-heading = Падключыць прыладу - # USB section of the Setup page about-debugging-setup-usb-title = USB - # Explanatory text displayed in the Setup page when USB debugging is disabled about-debugging-setup-usb-disabled = Уключэнне гэтай функцыі сцягне і дадасць неабходныя адладачныя Android USB кампаненты да { -brand-shorter-name }. - # Text of the button displayed in the USB section of the setup page when USB debugging is disabled. # Clicking on it will download components needed to debug USB Devices remotely. about-debugging-setup-usb-enable-button = Уключыць USB-прылады - # Text of the button displayed in the USB section of the setup page when USB debugging is enabled. about-debugging-setup-usb-disable-button = Адключыць USB-прылады - # Text of the button displayed in the USB section of the setup page while USB debugging # components are downloaded and installed. about-debugging-setup-usb-updating-button = Абнаўленне… - # USB section of the Setup page (USB status) about-debugging-setup-usb-status-enabled = Уключана about-debugging-setup-usb-status-disabled = Выключана about-debugging-setup-usb-status-updating = Абнаўленне… - # USB section step by step guide about-debugging-setup-usb-step-enable-dev-menu2 = Уключыце меню распрацоўшчыка на вашай Android-прыладзе. - # USB section step by step guide about-debugging-setup-usb-step-enable-debug2 = Уключыце адладку USB ў меню распрацоўшчыка Android. - +# USB section step by step guide +about-debugging-setup-usb-step-enable-file-transfer = Уключыце перадачу файлаў і пераканайцеся, што ваша прылада не знаходзіцца ў рэжыме толькі зарадкі. # USB section step by step guide about-debugging-setup-usb-step-enable-debug-firefox2 = Уключыце адладку USB у Firefox на прыладзе Android. - # USB section step by step guide about-debugging-setup-usb-step-plug-device = Падключыце Android-прыладу да камп'ютара. - # Text shown in the USB section of the setup page with a link to troubleshoot connection errors. # The link goes to https://firefox-source-docs.mozilla.org/devtools-user/about_colon_debugging/index.html#connecting-to-a-remote-device about-debugging-setup-usb-troubleshoot = Праблемы з падключэннем да USB-прылады? Пошук няспраўнасцяў - # Network section of the Setup page about-debugging-setup-network = .title = Сеткавае месцазнаходжанне - # Text shown in the Network section of the setup page with a link to troubleshoot connection errors. # The link goes to https://firefox-source-docs.mozilla.org/devtools-user/about_colon_debugging/index.html#connecting-over-the-network about-debugging-setup-network-troubleshoot = Праблемы з падключэннем праз сеткавае месцазнаходжанне? Пошук няспраўнасцяў - # Text of a button displayed after the network locations "Host" input. # Clicking on it will add the new network location to the list. about-debugging-network-locations-add-button = Дадаць - # Text to display when there are no locations to show. about-debugging-network-locations-empty-text = Ніводнага сеткавага месцазнаходжання пакуль не дададзена. - # Text of the label for the text input that allows users to add new network locations in # the Connect page. A host is a hostname and a port separated by a colon, as suggested by # the input's placeholder "localhost:6080". about-debugging-network-locations-host-input-label = Хост: - # Text of a button displayed next to existing network locations in the Connect page. # Clicking on it removes the network location from the list. about-debugging-network-locations-remove-button = Выдаліць - # Text used as error message if the format of the input value was invalid in the network locations form of the Setup page. # Variables: # $host-value (string) - The input value submitted by the user in the network locations form about-debugging-network-location-form-invalid = Некарэктны хост “{ $host-value }”. Чакаецца фармат “hostname:portnumber”. - # Text used as error message if the input value was already registered in the network locations form of the Setup page. # Variables: # $host-value (string) - The input value submitted by the user in the network locations form @@ -182,46 +152,48 @@ # Below are the titles for the various categories of debug targets that can be found # on "runtime" pages of about:debugging. # Title of the temporary extensions category (only available for "This Firefox" runtime). +# .name is processed by fluent-react / DebugTargetPane about-debugging-runtime-temporary-extensions = .name = Тымчасовыя пашырэнні # Title of the extensions category. +# .name is processed by fluent-react / DebugTargetPane about-debugging-runtime-extensions = .name = Пашырэнні # Title of the tabs category. +# .name is processed by fluent-react / DebugTargetPane about-debugging-runtime-tabs = .name = Карткі # Title of the service workers category. +# .name is processed by fluent-react / DebugTargetPane about-debugging-runtime-service-workers = .name = Service Workers # Title of the shared workers category. +# .name is processed by fluent-react / DebugTargetPane about-debugging-runtime-shared-workers = .name = Абагуленыя Workers # Title of the other workers category. +# .name is processed by fluent-react / DebugTargetPane about-debugging-runtime-other-workers = .name = Іншыя Workers # Title of the processes category. +# .name is processed by fluent-react / DebugTargetPane about-debugging-runtime-processes = .name = Працэсы - # Label of the button opening the performance profiler panel in runtime pages for remote # runtimes. about-debugging-runtime-profile-button2 = Прафіляваць прадукцыйнасць - # This string is displayed in the runtime page if the current configuration of the # target runtime is incompatible with service workers. "Learn more" points to: # https://firefox-source-docs.mozilla.org/devtools-user/about_colon_debugging/index.html#service-workers-not-compatible about-debugging-runtime-service-workers-not-compatible = Канфігурацыя вашага браўзера несумяшчальная з Service Workers. Даведацца больш - # This string is displayed in the runtime page if the remote browser version is too old. # "Troubleshooting" link points to https://firefox-source-docs.mozilla.org/devtools-user/about_colon_debugging/ # { $runtimeVersion } is the version of the remote browser (for instance "67.0a1") # { $minVersion } is the minimum version that is compatible with the current Firefox instance (same format) about-debugging-browser-version-too-old = Падключаны браўзер мае старую версію ({ $runtimeVersion }). Мінімальная падтрыманая версія ({ $minVersion }). Гэта канфігурацыя не падтрымліваецца і можа прывесці да збою інструментаў распрацоўшчыка. Калі ласка, абнавіце падключаны браўзер. Вырашэнне праблем - # Dedicated message for a backward compatibility issue that occurs when connecting: # from Fx 70+ to the old Firefox for Android (aka Fennec) which uses Fx 68. about-debugging-browser-version-too-old-fennec = Гэта версія Firefox не можа адладзіць Firefox для Android (68). Рэкамендуем усталяваць Firefox для Android Nightly на ваш тэлефон для тэставання. Падрабязней - # This string is displayed in the runtime page if the remote browser version is too recent. # "Troubleshooting" link points to https://firefox-source-docs.mozilla.org/devtools-user/about_colon_debugging/ # { $runtimeID } is the build ID of the remote browser (for instance "20181231", format is yyyyMMdd) @@ -229,27 +201,21 @@ # { $runtimeVersion } is the version of the remote browser (for instance "67.0a1") # { $localVersion } is the version of your current browser (same format) about-debugging-browser-version-too-recent = Падлучаны браўзер больш новы ({ $runtimeVersion }, buildID { $runtimeID }), чымся ваш { -brand-shorter-name } ({ $localVersion }, buildID { $localID }). Такая канфігурацыя не падтрымліваецца і можа прывесці да збою інструментаў распрацоўшчыка. Калі ласка, абнавіце Firefox. Вырашэнне праблем - # Displayed for runtime info in runtime pages. # { $name } is brand name such as "Firefox Nightly" # { $version } is version such as "64.0a1" about-debugging-runtime-name = { $name } ({ $version }) - # Text of a button displayed in Runtime pages for remote runtimes. # Clicking on the button will close the connection to the runtime. about-debugging-runtime-disconnect-button = Адлучыцца - # Text of the connection prompt button displayed in Runtime pages, when the preference # "devtools.debugger.prompt-connection" is false on the target runtime. about-debugging-connection-prompt-enable-button = Уключыць запыт на падлучэнне - # Text of the connection prompt button displayed in Runtime pages, when the preference # "devtools.debugger.prompt-connection" is true on the target runtime. about-debugging-connection-prompt-disable-button = Выключыць запыт на падключэнне - # Title of a modal dialog displayed on remote runtime pages after clicking on the Profile Runtime button. about-debugging-profiler-dialog-title2 = Прафайлер - # Clicking on the header of a debug target category will expand or collapse the debug # target items in the category. This text is used as ’title’ attribute of the header, # to describe this feature. @@ -260,142 +226,114 @@ # Displayed in the categories of "runtime" pages that don't have any debug target to # show. Debug targets depend on the category (extensions, tabs, workers...). about-debugging-debug-target-list-empty = Пакуль нічога. - # Text of a button displayed next to debug targets of "runtime" pages. Clicking on this # button will open a DevTools toolbox that will allow inspecting the target. # A target can be an addon, a tab, a worker... about-debugging-debug-target-inspect-button = Даследаваць - # Text of a button displayed in the "This Firefox" page, in the Temporary Extension # section. Clicking on the button will open a file picker to load a temporary extension about-debugging-tmp-extension-install-button = Загрузіць часовы дадатак… - # Text displayed when trying to install a temporary extension in the "This Firefox" page. about-debugging-tmp-extension-install-error = Пры ўсталяванні тымчасовага дадатку здарылася памылка. - # Text of a button displayed for a temporary extension loaded in the "This Firefox" page. # Clicking on the button will reload the extension. about-debugging-tmp-extension-reload-button = Перазагрузіць - # Text of a button displayed for a temporary extension loaded in the "This Firefox" page. # Clicking on the button will uninstall the extension and remove it from the page. about-debugging-tmp-extension-remove-button = Выдаліць - # Text of a button displayed for a temporary extension loaded in the "This Firefox" page. # Clicking on the button will forcefully terminate the extension background script (button # only visible in extensions that includes a non-persistent background script, either an # event page or a background service worker). about-debugging-tmp-extension-terminate-bgscript-button = Завяршыць фонавы сцэнарый - # Message displayed in the file picker that opens to select a temporary extension to load # (triggered by the button using "about-debugging-tmp-extension-install-button") # manifest.json .xpi and .zip should not be localized. # Note: this message is only displayed in Windows and Linux platforms. about-debugging-tmp-extension-install-message = Выберыце файл manifest.json або архіў .xpi/.zip - # This string is displayed as a message about the add-on having a temporaryID. about-debugging-tmp-extension-temporary-id = Гэты WebExtension мае часовы ID. Падрабязней - # Text displayed for extensions in "runtime" pages, before displaying a link the extension's # manifest URL. about-debugging-extension-manifest-url = .label = URL маніфесту - # Text displayed for extensions in "runtime" pages, before displaying the extension's uuid. # UUIDs look like b293e463-481e-5148-a487-5aaf7a130429 about-debugging-extension-uuid = .label = Унутраны UUID - # Text displayed for extensions (temporary extensions only) in "runtime" pages, before # displaying the location of the temporary extension. about-debugging-extension-location = .label = Месцазнаходжанне - # Text displayed for extensions in "runtime" pages, before displaying the extension's ID. # For instance "geckoprofiler@mozilla.com" or "{ed26ddcb-5611-4512-a89a-51b8db81cfb2}". about-debugging-extension-id = .label = ID пашырэння - # Text displayed for extensions in "runtime" pages, before displaying the status of the # extension background script. about-debugging-extension-backgroundscript = .label = Фонавы сцэнарый - # Displayed for extension using a non-persistent background page (either an event page or # background service worker) when the background script is currently running. about-debugging-extension-backgroundscript-status-running = Выконваецца - # Displayed for extension using a non-persistent background page when is currently stopped. about-debugging-extension-backgroundscript-status-stopped = Спынены - # This string is displayed as a label of the button that pushes a test payload # to a service worker. # Note this relates to the "Push" API, which is normally not localized so it is # probably better to not localize it. +# .disabledTitle is processed by the fluent-react / ActionButton code. about-debugging-worker-action-push2 = Push .disabledTitle = Push для Service Worker зараз адключаны для шматпрацэснага { -brand-shorter-name } - # This string is displayed as a label of the button that starts a service worker. +# .disabledTitle is processed by the fluent-react / ActionButton code. about-debugging-worker-action-start2 = Запусціць .disabledTitle = Запуск Service Worker зараз адключаны для шматпрацэснага { -brand-shorter-name } - # This string is displayed as a label of the button that unregisters a service worker. about-debugging-worker-action-unregister = Разрэгістраваць - # Displayed for service workers in runtime pages that listen to Fetch events. about-debugging-worker-fetch-listening = .label = Fetch .value = Слухае падзеі fetch - # Displayed for service workers in runtime pages that do not listen to Fetch events. about-debugging-worker-fetch-not-listening = .label = Fetch .value = Не слухае падзеі fetch - # Displayed for service workers in runtime pages that are currently running (service # worker instance is active). about-debugging-worker-status-running = Выконваецца - # Displayed for service workers in runtime pages that are registered but stopped. about-debugging-worker-status-stopped = Спынена - # Displayed for service workers in runtime pages that are registering. about-debugging-worker-status-registering = Рэгіструецца - # Displayed for service workers in runtime pages, to label the scope of a worker about-debugging-worker-scope = .label = Абсяг - # Displayed for service workers in runtime pages, to label the push service endpoint (url) # of a worker about-debugging-worker-push-service = .label = Push-сэрвіс - +# Displayed for service workers in runtime pages, to label the origin of a worker. +about-debugging-worker-origin = + .label = Крыніца # Displayed as title of the inspect button when service worker debugging is disabled. about-debugging-worker-inspect-action-disabled = .title = Даследаванне Service Worker зараз адключана для шматпрацэснага { -brand-shorter-name } - # Displayed as title of the inspect button for zombie tabs (e.g. tabs loaded via a session restore). about-debugging-zombie-tab-inspect-action-disabled = .title = Картка не цалкам загружана і не можа быць даследавана - # Displayed as name for the Main Process debug target in the Processes category. Only for # remote runtimes, if `devtools.aboutdebugging.process-debugging` is true. about-debugging-multiprocess-toolbox-name = Шматпрацэсная панэль інструментаў - # Displayed as description for the Main Process debug target in the Processes category. # Only for remote browsers, if `devtools.aboutdebugging.process-debugging` is true. about-debugging-multiprocess-toolbox-description = Асноўны працэс і працэсы змесціва для мэтавага браўзера - # Alt text used for the close icon of message component (warnings, errors and notifications). about-debugging-message-close-icon = .alt = Закрыць паведамленне - # Label text used for the error details of message component. about-debugging-message-details-label-error = Падрабязнасці пра памылку - # Label text used for the warning details of message component. about-debugging-message-details-label-warning = Падрабязнасці пра папярэджанне - # Label text used for default state of details of message component. about-debugging-message-details-label = Падрабязнасці diff -Nru firefox-esr-128.3.1esr/l10n-be/devtools/shared/styleinspector.properties firefox-esr-128.4.0esr/l10n-be/devtools/shared/styleinspector.properties --- firefox-esr-128.3.1esr/l10n-be/devtools/shared/styleinspector.properties 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/devtools/shared/styleinspector.properties 2024-10-17 08:32:03.000000000 +0000 @@ -9,274 +9,222 @@ # You want to make that choice consistent across the developer tools. # A good criteria is the language in which you'd find the best # documentation on web development on the web. - - # LOCALIZATION NOTE (rule.status): For each style property the panel shows # the rules which hold that specific property. For every rule, the rule status # is also displayed: a rule can be the best match, a match, a parent match, or a # rule did not match the element the user has highlighted. -rule.status.BEST=Лепшае супадзенне -rule.status.MATCHED=Адпавядае -rule.status.PARENT_MATCH=Супадзенне з продкам - +rule.status.BEST = Лепшае супадзенне +rule.status.MATCHED = Адпавядае +rule.status.PARENT_MATCH = Супадзенне з продкам # LOCALIZATION NOTE (rule.sourceElement, rule.sourceInline, # rule.sourceConstructed): For each style property the panel shows the rules # which hold that specific property. # For every rule, the rule source is also displayed: a rule can come from a # file, from the same page (inline), from a constructed style sheet # (constructed), or from the element itself (element). -rule.sourceInline=убудаванае -rule.sourceConstructed=пабудаваны -rule.sourceElement=элемент - +rule.sourceInline = убудаванае +rule.sourceConstructed = пабудаваны +rule.sourceElement = элемент # LOCALIZATION NOTE (rule.inheritedFrom): Shown for CSS rules # that were inherited from a parent node. Will be passed a node # identifier of the parent node. # e.g "Inherited from body#bodyID" -rule.inheritedFrom=унаследаванае ад %S - +rule.inheritedFrom = унаследаванае ад %S # LOCALIZATION NOTE (rule.keyframe): Shown for CSS Rules keyframe header. # Will be passed an identifier of the keyframe animation name. -rule.keyframe=Keyframes %S - +rule.keyframe = Keyframes %S # LOCALIZATION NOTE (rule.userAgentStyles): Shown next to the style sheet # link for CSS rules that were loaded from a user agent style sheet. # These styles will not be editable, and will only be visible if the # devtools.inspector.showUserAgentStyles pref is true. -rule.userAgentStyles=(user agent) - +rule.userAgentStyles = (user agent) # LOCALIZATION NOTE (rule.pseudoElement): Shown for CSS rules # pseudo element header -rule.pseudoElement=Псеўда-элементы - +rule.pseudoElement = Псеўда-элементы # LOCALIZATION NOTE (rule.selectedElement): Shown for CSS rules element header if # pseudo elements are present in the rule view. -rule.selectedElement=Гэты элемент - +rule.selectedElement = Гэты элемент # LOCALIZATION NOTE (rule.warning.title): When an invalid property value is # entered into the rule view a warning icon is displayed. This text is used for # the title attribute of the warning icon. -rule.warning.title=Няспраўнае значэнне ўласцівасці - +rule.warning.title = Няспраўнае значэнне ўласцівасці # LOCALIZATION NOTE (rule.warningName.title): When an invalid property name is # entered into the rule view a warning icon is displayed. This text is used for # the title attribute of the warning icon. -rule.warningName.title=Недапушчальная назва ўласцівасці - +rule.warningName.title = Недапушчальная назва ўласцівасці # LOCALIZATION NOTE (rule.warningInvalidAtComputedValueTime.title): When a property value # is invalid at computed time in the rule view, a warning icon is displayed. # This text is used for the title attribute of the warning icon. # The argument is the expected CSS syntax (e.g. ''). -rule.warningInvalidAtComputedValueTime.title=Значэнне ўласцівасці не адпавядае чаканаму сінтаксісу %S - +rule.warningInvalidAtComputedValueTime.title = Значэнне ўласцівасці не адпавядае чаканаму сінтаксісу %S # LOCALIZATION NOTE (rule.filterProperty.title): Text displayed in the tooltip # of the search button that is shown next to a property that has been overridden # in the rule view. -rule.filterProperty.title=Фільтраваць правілы, якія змяшчаюць гэту ўласцівасць - +rule.filterProperty.title = Фільтраваць правілы, якія змяшчаюць гэту ўласцівасць # LOCALIZATION NOTE (rule.empty): Text displayed when the highlighter is # first opened and there's no node selected in the rule view. -rule.empty=Элемент не вылучаны. - +rule.empty = Элемент не вылучаны. # LOCALIZATION NOTE (rule.variableValue): Text displayed in a tooltip # when the mouse is over a variable use (like "var(--something)") in # the rule view. The first argument is the variable name and the # second argument is the value. -rule.variableValue=%S = %S - +rule.variableValue = %S = %S # LOCALIZATION NOTE (rule.variableUnset): Text displayed in a tooltip # when the mouse is over a variable use (like "var(--something)"), -# where the variable is not set. the rule view. The argument is the -# variable name. -rule.variableUnset=%S не ўсталявана - +# where the variable is not set. The argument is the variable name. +rule.variableUnset = %S не ўсталявана +# LOCALIZATION NOTE (rule.variableEmpty): Text displayed in a tooltip in the rule view +# when the mouse is over a variable use (like "var(--something)"), +# and the variable is empty ("--something: ;"). +rule.variableEmpty = пуста +# LOCALIZATION NOTE (rule.variableComputedValue): Text displayed in a tooltip in the rule view +# when the mouse is over a variable use (like "var(--a)") and the variable has a +# computed value different from its declaration value ("--a: var(--b); --b: 1px;"). +# The translation should be consistent with inspector.sidebar.computedViewTitle +rule.variableComputedValue = вылічанае значэнне # LOCALIZATION NOTE (rule.selectorSpecificity.title): This text is used as a title attribute # on the selectors displayed in the inspector rules view. # The first argument is the computed specificity, which looks like "(0,0,1)". -rule.selectorSpecificity.title=Спецыфіка: %S - +rule.selectorSpecificity.title = Спецыфіка: %S # LOCALIZATION NOTE (rule.selectorHighlighter.tooltip): Text displayed in a # tooltip when the mouse is over a selector highlighter icon in the rule view. -rule.selectorHighlighter.tooltip=Падсвяціць ўсе элементы, што адпавядаюць гэтаму селектару - +rule.selectorHighlighter.tooltip = Падсвяціць ўсе элементы, што адпавядаюць гэтаму селектару # LOCALIZATION NOTE (rule.colorSwatch.tooltip): Text displayed in a tooltip # when the mouse is over a color swatch in the rule view. -rule.colorSwatch.tooltip=Клікніце, каб адкрыць палітру колераў, клікніце з утрыманнем shift, каб змяніць фармат колеру - +rule.colorSwatch.tooltip = Клікніце, каб адкрыць палітру колераў, клікніце з утрыманнем shift, каб змяніць фармат колеру # LOCALIZATION NOTE (rule.bezierSwatch.tooltip): Text displayed in a tooltip # when the mouse is over a cubic-bezier swatch in the rule view. -rule.bezierSwatch.tooltip=Клікніце, каб адкрыць рэдактар timing-function - +rule.bezierSwatch.tooltip = Клікніце, каб адкрыць рэдактар timing-function # LOCALIZATION NOTE (rule.filterSwatch.tooltip): Text displayed in a tooltip # when the mouse is over a filter swatch in the rule view. -rule.filterSwatch.tooltip=Клікніце, каб адкрыць рэдактар фільтраў - +rule.filterSwatch.tooltip = Клікніце, каб адкрыць рэдактар фільтраў # LOCALIZATION NOTE (rule.angleSwatch.tooltip): Text displayed in a tooltip # when the mouse is over a angle swatch in the rule view. -rule.angleSwatch.tooltip=Клікніце з утрыманнем shift, каб змяніць фармат кута - +rule.angleSwatch.tooltip = Клікніце з утрыманнем shift, каб змяніць фармат кута # LOCALIZATION NOTE (rule.flexToggle.tooltip): Text displayed in a tooltip # when the mouse is over a Flexbox toggle icon in the rule view. -rule.flexToggle.tooltip=Клікніце, каб уключыць/выключыць падсвятленне Flexbox - +rule.flexToggle.tooltip = Клікніце, каб уключыць/выключыць падсвятленне Flexbox # LOCALIZATION NOTE (rule.gridToggle.tooltip): Text displayed in a tooltip # when the mouse is over a CSS Grid toggle icon in the rule view. -rule.gridToggle.tooltip=Клікніце, каб уключыць/выключыць падсвятленне CSS сеткі - +rule.gridToggle.tooltip = Клікніце, каб уключыць/выключыць падсвятленне CSS сеткі # LOCALIZATION NOTE (rule.shapeToggle.tooltip): Text displayed in a tooltip # when the mouse is over a CSS shape toggle icon in the rule view (e.g. for clip-path property). -rule.shapeToggle.tooltip=Націсніце, каб пераключыць рэдактар форм CSS - +rule.shapeToggle.tooltip = Націсніце, каб пераключыць рэдактар форм CSS # LOCALIZATION NOTE (rule.filterStyles.placeholder): This is the placeholder that # goes in the search box when no search term has been entered. -rule.filterStyles.placeholder=Фільтраваць стылі - +rule.filterStyles.placeholder = Фільтраваць стылі # LOCALIZATION NOTE (rule.addRule.tooltip): This is the tooltip shown when # hovering the `Add new rule` button in the rules view toolbar. -rule.addRule.tooltip=Дадаць новае правіла - +rule.addRule.tooltip = Дадаць новае правіла # LOCALIZATION NOTE (rule.togglePseudo.tooltip): This is the tooltip # shown when hovering over the `Toggle Pseudo Class Panel` button in the # rule view toolbar. -rule.togglePseudo.tooltip=Пераключыць псеўдакласы - +rule.togglePseudo.tooltip = Пераключыць псеўдакласы # LOCALIZATION NOTE (rule.classPanel.toggleClass.tooltip): This is the tooltip # shown when hovering over the `Toggle Class Panel` button in the # rule view toolbar. -rule.classPanel.toggleClass.tooltip=Паказаць/схаваць класы - +rule.classPanel.toggleClass.tooltip = Паказаць/схаваць класы # LOCALIZATION NOTE (rule.classPanel.newClass.placeholder): This is the placeholder # shown inside the text field used to add a new class in the rule-view. -rule.classPanel.newClass.placeholder=Дадаць новы клас - +rule.classPanel.newClass.placeholder = Дадаць новы клас # LOCALIZATION NOTE (rule.classPanel.noClasses): This is the text displayed in the # class panel when the current element has no classes applied. -rule.classPanel.noClasses=На гэтым элеменце няма класаў - +rule.classPanel.noClasses = На гэтым элеменце няма класаў # LOCALIZATION NOTE (rule.printSimulation.tooltip): # This is the tooltip of the print simulation button in the Rule View toolbar # that toggles print simulation. -rule.printSimulation.tooltip=Пераключыць сімуляцыю друку для старонкі - +rule.printSimulation.tooltip = Пераключыць сімуляцыю друку для старонкі # LOCALIZATION NOTE (rule.colorSchemeSimulation.tooltip): # This is the tooltip of the color scheme simulation button in the Rule View # toolbar that toggles color-scheme simulation. -rule.colorSchemeSimulation.tooltip=Пераключыць сімуляцыю колеравай схемы для старонкі - +rule.colorSchemeSimulation.tooltip = Пераключыць сімуляцыю колеравай схемы для старонкі # LOCALIZATION NOTE (rule.twistyCollapse.label): The text a screen reader # speaks when the header of a rule is expanded. -rule.twistyCollapse.label=Згарнуць - +rule.twistyCollapse.label = Згарнуць # LOCALIZATION NOTE (rule.twistyExpand.label): The text a screen reader # speaks when the header of a rule is collapsed. -rule.twistyExpand.label=Разгарнуць - +rule.twistyExpand.label = Разгарнуць # LOCALIZATION NOTE (rule.expandableContainerToggleButton.title): # This is the tooltip for expandable container toggle button in the Rule View (Pseudo-elements, keyframes, …) -rule.expandableContainerToggleButton.title=Паказаць/схаваць панэль - +rule.expandableContainerToggleButton.title = Паказаць/схаваць панэль # LOCALIZATION NOTE (rule.containerQuery.selectContainerButton.tooltip): Text displayed in a # tooltip when the mouse is over the icon to select a container in a container query in the rule view. -rule.containerQuery.selectContainerButton.tooltip=Націсніце, каб выбраць вузел кантэйнера - +rule.containerQuery.selectContainerButton.tooltip = Націсніце, каб выбраць вузел кантэйнера # LOCALIZATION NOTE (rule.propertyToggle.label): # This is the label for the checkbox input in the rule view that allow to disable/re-enable # a specific property in a rule. # The argument is the property name. -rule.propertyToggle.label=Уключыць уласцівасць %S - +rule.propertyToggle.label = Уключыць уласцівасць %S # LOCALIZATION NOTE (rule.newPropertyName.label): # This is the label for the new property input in the rule view. -rule.newPropertyName.label=Новая назва ўласцівасці - +rule.newPropertyName.label = Новая назва ўласцівасці # LOCALIZATION NOTE (rule.propertyName.label): # This is the label for the property name input in the rule view. -rule.propertyName.label=Назва ўласцівасці - +rule.propertyName.label = Назва ўласцівасці # LOCALIZATION NOTE (styleinspector.contextmenu.copyColor): Text displayed in the rule # and computed view context menu when a color value was clicked. -styleinspector.contextmenu.copyColor=Капіяваць колер - +styleinspector.contextmenu.copyColor = Капіяваць колер # LOCALIZATION NOTE (styleinspector.contextmenu.copyColor.accessKey): Access key for # the rule and computed view context menu "Copy Color" entry. -styleinspector.contextmenu.copyColor.accessKey=К - +styleinspector.contextmenu.copyColor.accessKey = К # LOCALIZATION NOTE (styleinspector.contextmenu.copyUrl): In rule and computed view : # text displayed in the context menu for an image URL. # Clicking it copies the URL to the clipboard of the user. -styleinspector.contextmenu.copyUrl=Капіяваць URL - +styleinspector.contextmenu.copyUrl = Капіяваць URL # LOCALIZATION NOTE (styleinspector.contextmenu.copyUrl.accessKey): Access key for # the rule and computed view context menu "Copy URL" entry. -styleinspector.contextmenu.copyUrl.accessKey=U - +styleinspector.contextmenu.copyUrl.accessKey = U # LOCALIZATION NOTE (styleinspector.contextmenu.copyImageDataUrl): In rule and computed view : # text displayed in the context menu for an image URL. # Clicking it copies the image as Data-URL to the clipboard of the user. -styleinspector.contextmenu.copyImageDataUrl=Капіяваць Data-URL выявы - +styleinspector.contextmenu.copyImageDataUrl = Капіяваць Data-URL выявы # LOCALIZATION NOTE (styleinspector.contextmenu.copyImageDataUrl.accessKey): Access key for # the rule and computed view context menu "Copy Image Data-URL" entry. -styleinspector.contextmenu.copyImageDataUrl.accessKey=В - +styleinspector.contextmenu.copyImageDataUrl.accessKey = В # LOCALIZATION NOTE (styleinspector.copyImageDataUrlError): Text set in the clipboard # if an error occurs when using the copyImageDataUrl context menu action # (invalid image link, timeout, etc...) -styleinspector.copyImageDataUrlError=Не атрымалася скапіяваць Data-URL выявы - +styleinspector.copyImageDataUrlError = Не атрымалася скапіяваць Data-URL выявы # LOCALIZATION NOTE (styleinspector.contextmenu.toggleOrigSources): Text displayed in the rule view # context menu. -styleinspector.contextmenu.toggleOrigSources=Паказаць першапачатковыя зыходнікі - +styleinspector.contextmenu.toggleOrigSources = Паказаць першапачатковыя зыходнікі # LOCALIZATION NOTE (styleinspector.contextmenu.toggleOrigSources.accessKey): Access key for # the rule view context menu "Show original sources" entry. -styleinspector.contextmenu.toggleOrigSources.accessKey=П - +styleinspector.contextmenu.toggleOrigSources.accessKey = П # LOCALIZATION NOTE (styleinspector.contextmenu.addNewRule): Text displayed in the # rule view context menu for adding a new rule to the element. # This should match inspector.addRule.tooltip in inspector.properties -styleinspector.contextmenu.addNewRule=Дадаць новае правіла - +styleinspector.contextmenu.addNewRule = Дадаць новае правіла # LOCALIZATION NOTE (styleinspector.contextmenu.addNewRule.accessKey): Access key for # the rule view context menu "Add rule" entry. -styleinspector.contextmenu.addNewRule.accessKey=П - +styleinspector.contextmenu.addNewRule.accessKey = П # LOCALIZATION NOTE (styleinspector.contextmenu.selectAll): Text displayed in the # computed view context menu. -styleinspector.contextmenu.selectAll=Вылучыць усё - +styleinspector.contextmenu.selectAll = Вылучыць усё # LOCALIZATION NOTE (styleinspector.contextmenu.selectAll.accessKey): Access key for # the computed view context menu "Select all" entry. -styleinspector.contextmenu.selectAll.accessKey=У - +styleinspector.contextmenu.selectAll.accessKey = У # LOCALIZATION NOTE (styleinspector.contextmenu.copy): Text displayed in the # computed view context menu. -styleinspector.contextmenu.copy=Капіяваць - +styleinspector.contextmenu.copy = Капіяваць # LOCALIZATION NOTE (styleinspector.contextmenu.copy.accessKey): Access key for # the computed view context menu "Copy" entry. -styleinspector.contextmenu.copy.accessKey=К - +styleinspector.contextmenu.copy.accessKey = К # LOCALIZATION NOTE (styleinspector.contextmenu.copyLocation): Text displayed in the # rule view context menu for copying the source location. -styleinspector.contextmenu.copyLocation=Капіяваць месцазнаходжанне - +styleinspector.contextmenu.copyLocation = Капіяваць месцазнаходжанне # LOCALIZATION NOTE (styleinspector.contextmenu.copyDeclaration): Text # displayed in the rule view context menu for copying the CSS declaration. -styleinspector.contextmenu.copyDeclaration=Капіяваць дэкларацыю - +styleinspector.contextmenu.copyDeclaration = Капіяваць дэкларацыю # LOCALIZATION NOTE (styleinspector.contextmenu.copyPropertyName): Text displayed in # the rule view context menu for copying the property name. -styleinspector.contextmenu.copyPropertyName=Капіяваць назву ўласцівасці - +styleinspector.contextmenu.copyPropertyName = Капіяваць назву ўласцівасці # LOCALIZATION NOTE (styleinspector.contextmenu.copyPropertyValue): Text displayed in # the rule view context menu for copying the property value. -styleinspector.contextmenu.copyPropertyValue=Капіяваць значэнне ўласцівасці - +styleinspector.contextmenu.copyPropertyValue = Капіяваць значэнне ўласцівасці # LOCALIZATION NOTE (styleinspector.contextmenu.copyRule): Text displayed in the # rule view context menu for copying the rule. -styleinspector.contextmenu.copyRule=Капіяваць правіла - +styleinspector.contextmenu.copyRule = Капіяваць правіла # LOCALIZATION NOTE (styleinspector.contextmenu.copySelector): Text displayed in the # rule view context menu for copying the selector. -styleinspector.contextmenu.copySelector=Капіяваць селектар +styleinspector.contextmenu.copySelector = Капіяваць селектар diff -Nru firefox-esr-128.3.1esr/l10n-be/dom/chrome/appstrings.properties firefox-esr-128.4.0esr/l10n-be/dom/chrome/appstrings.properties --- firefox-esr-128.3.1esr/l10n-be/dom/chrome/appstrings.properties 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/dom/chrome/appstrings.properties 2024-10-17 08:32:03.000000000 +0000 @@ -2,36 +2,38 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -malformedURI2=Калі ласка, праверце, што URL сапраўдны, і паспрабуйце ізноў. -fileNotFound=Немагчыма знайсці файл %S. Праверце, калі ласка, яго месцазнаходжанне і паспрабуйце зноў. -fileAccessDenied=Файл па адрасе %S нечытальны. -dnsNotFound2=Немагчыма знайсці %S. Праверце, калі ласка, назву і паспрабуйце зноў. -unknownProtocolFound=Адзін з наступных (%S) не з'яўляецца зарэгістраваным пратаколам або не дазволены ў гэтым канстэксце. -connectionFailure=Было адмоўлена ў злучэнні ў час спробы звязацца з %S. -netInterrupt=Злучэнне з %S было нечакана скончана. Магчыма, частка дадзеных была перанесена. -netTimeout=Скончыўся час, патрэбны для выканання дзеяння, падчас спробы звязвання з %S. -redirectLoop=Перавышана колькасць пераадрасовак для гэтага URL. Немагчыма загрузіць запатрабаваную старонку. Гэта можа быць выклікана блакаваннем кукаў. -confirmRepostPrompt=Каб адлюстраваць гэту старонку, праграма мусіць даслаць звесткі, што паўторыць усякае дзеянне (напрыклад: пошук або купля), якое было здзейснена раней. -resendButton.label=Перадаслаць -unknownSocketType=Гэты дакумент не можа быць адлюстраваны пакуль вы не ўстановіце Праграму Кіравання Асабістай Бяспекай (ПКАБ). Загрузіце і ўсталюйце ПКАБ і паспрабуйце зноў, ці звяжыцеся з вашым сістэмным адміністратарам.\u0020 -netReset=Дакумент не змяшчае дадзеных. -notCached=Гэты дакумент больш не даступны. -netOffline=Дакумент не можа быць адлюстраваны ў час працы па-за сеткай. Каб увайсці ў сетку, прыміце адзнаку з Праца па-за Сеткаю ў меню Файл. -isprinting=Дакумент не можа змяняцца ў час друку ці перадпрагляду. -deniedPortAccess=Доступ да порта з дадзеным нумарам забаронены дзеля бяспекі. -proxyResolveFailure=Немагчыма знайсці пазначаны вамі проксі-сервер. Праверце, калі ласка, налада і паспрабуйце зноў. -proxyConnectFailure=Адмоўлена ў злучэнні ў час спробы звязвання з пазначаным вамі проксі-серверам. Праверце, калі ласка, налады і паспрабуйце зноў. -contentEncodingError=Старонку, якую вы спрабуеце пабачыць, немагчыма паказаць, бо яна выкарыстоўвае недапушчальную або непадтрымальную форму сціскання. -unsafeContentType=Немагчыма паказаць старонку, якую вы спрабуеце пабачыць, бо яна змяшчае файл тыпу, які можа быць небяспечным для адкрыцця. Паведамце, калі ласка, уладальнікам вэб-сайта пра гэтую праблему. -malwareBlocked=Сайт %S вядомы як нападнік і заблакаваны згодна вашым наладам бяспекі. -harmfulBlocked=Сайт па адрасе %S вядомы як патэнцыйна шкодны, заблакаваны ў адпаведнасці з вашымі наладамі бяспекі. -unwantedBlocked=Сайт па адрасе %S вядомы як пляцоўка для непажаданых праграм. Заблакаваны ў адпаведнасці з вашымі настаўленнямі бяспекі. -deceptiveBlocked=Гэта вэб-старонка па адрасе %S вядома як падманлівы сайт. Заблакавана ў адпаведнасці з вашымі настаўленнямі бяспекі. -cspBlocked=Гэта старонка мае палітыку бяспекі змесціва, якая забараняе чытанне яе такім чынам. -xfoBlocked=Гэта старонка мае палітыку X-Frame-Options, што не дазваляе загружаць яе ў гэтым кантэксце. -corruptedContentErrorv2=Сайт па адрасе %S зведаў парушэнне сеткавага пратакола, якое немагчыма паправіць. -sslv3Used=Бяспека вашых звестак на пляцоўцы %S не можа быць гарантавана, таму што яна выкарыстоўвае SSLv3, зламаны пратакол бяспекі. -weakCryptoUsed=Уладальнік пляцоўкі %S сканфігураваў свой вэб-сайт няправільна. Каб абараніць вашу інфармацыю ад крадзяжу, злучэнне з гэтым сайтам не ўсталёўвалася. -inadequateSecurityError=Гэты вэб-сайт спрабуе дамовіцца аб неадэкватным узроўні бяспекі. -blockedByPolicy=Ваша ўстанова заблакавала доступ да гэтай старонкі ці сайта. -networkProtocolError=Firefox спазнаў парушэнні сеткавага пратаколу, якія немагчыма выправіць. +malformedURI2 = Калі ласка, праверце, што URL сапраўдны, і паспрабуйце ізноў. +fileNotFound = Немагчыма знайсці файл %S. Праверце, калі ласка, яго месцазнаходжанне і паспрабуйце зноў. +fileAccessDenied = Файл па адрасе %S нечытальны. +# %S is replaced by the uri host +serverError = У %S можа быць часовая праблема або ён мог перамясціцца. +dnsNotFound2 = Немагчыма знайсці %S. Праверце, калі ласка, назву і паспрабуйце зноў. +unknownProtocolFound = Адзін з наступных (%S) не з'яўляецца зарэгістраваным пратаколам або не дазволены ў гэтым канстэксце. +connectionFailure = Было адмоўлена ў злучэнні ў час спробы звязацца з %S. +netInterrupt = Злучэнне з %S было нечакана скончана. Магчыма, частка дадзеных была перанесена. +netTimeout = Скончыўся час, патрэбны для выканання дзеяння, падчас спробы звязвання з %S. +redirectLoop = Перавышана колькасць пераадрасовак для гэтага URL. Немагчыма загрузіць запатрабаваную старонку. Гэта можа быць выклікана блакаваннем кукаў. +confirmRepostPrompt = Каб адлюстраваць гэту старонку, праграма мусіць даслаць звесткі, што паўторыць усякае дзеянне (напрыклад: пошук або купля), якое было здзейснена раней. +resendButton.label = Перадаслаць +unknownSocketType = Гэты дакумент не можа быць адлюстраваны пакуль вы не ўстановіце Праграму Кіравання Асабістай Бяспекай (ПКАБ). Загрузіце і ўсталюйце ПКАБ і паспрабуйце зноў, ці звяжыцеся з вашым сістэмным адміністратарам.\u0020 +netReset = Дакумент не змяшчае дадзеных. +notCached = Гэты дакумент больш не даступны. +netOffline = Дакумент не можа быць адлюстраваны ў час працы па-за сеткай. Каб увайсці ў сетку, прыміце адзнаку з Праца па-за Сеткаю ў меню Файл. +isprinting = Дакумент не можа змяняцца ў час друку ці перадпрагляду. +deniedPortAccess = Доступ да порта з дадзеным нумарам забаронены дзеля бяспекі. +proxyResolveFailure = Немагчыма знайсці пазначаны вамі проксі-сервер. Праверце, калі ласка, налада і паспрабуйце зноў. +proxyConnectFailure = Адмоўлена ў злучэнні ў час спробы звязвання з пазначаным вамі проксі-серверам. Праверце, калі ласка, налады і паспрабуйце зноў. +contentEncodingError = Старонку, якую вы спрабуеце пабачыць, немагчыма паказаць, бо яна выкарыстоўвае недапушчальную або непадтрымальную форму сціскання. +unsafeContentType = Немагчыма паказаць старонку, якую вы спрабуеце пабачыць, бо яна змяшчае файл тыпу, які можа быць небяспечным для адкрыцця. Паведамце, калі ласка, уладальнікам вэб-сайта пра гэтую праблему. +malwareBlocked = Сайт %S вядомы як нападнік і заблакаваны згодна вашым наладам бяспекі. +harmfulBlocked = Сайт па адрасе %S вядомы як патэнцыйна шкодны, заблакаваны ў адпаведнасці з вашымі наладамі бяспекі. +unwantedBlocked = Сайт па адрасе %S вядомы як пляцоўка для непажаданых праграм. Заблакаваны ў адпаведнасці з вашымі настаўленнямі бяспекі. +deceptiveBlocked = Гэта вэб-старонка па адрасе %S вядома як падманлівы сайт. Заблакавана ў адпаведнасці з вашымі настаўленнямі бяспекі. +cspBlocked = Гэта старонка мае палітыку бяспекі змесціва, якая забараняе чытанне яе такім чынам. +xfoBlocked = Гэта старонка мае палітыку X-Frame-Options, што не дазваляе загружаць яе ў гэтым кантэксце. +corruptedContentErrorv2 = Сайт па адрасе %S зведаў парушэнне сеткавага пратакола, якое немагчыма паправіць. +sslv3Used = Бяспека вашых звестак на пляцоўцы %S не можа быць гарантавана, таму што яна выкарыстоўвае SSLv3, зламаны пратакол бяспекі. +weakCryptoUsed = Уладальнік пляцоўкі %S сканфігураваў свой вэб-сайт няправільна. Каб абараніць вашу інфармацыю ад крадзяжу, злучэнне з гэтым сайтам не ўсталёўвалася. +inadequateSecurityError = Гэты вэб-сайт спрабуе дамовіцца аб неадэкватным узроўні бяспекі. +blockedByPolicy = Ваша ўстанова заблакавала доступ да гэтай старонкі ці сайта. +networkProtocolError = Firefox спазнаў парушэнні сеткавага пратаколу, якія немагчыма выправіць. diff -Nru firefox-esr-128.3.1esr/l10n-be/dom/chrome/layout/css.properties firefox-esr-128.4.0esr/l10n-be/dom/chrome/layout/css.properties --- firefox-esr-128.3.1esr/l10n-be/dom/chrome/layout/css.properties 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/dom/chrome/layout/css.properties 2024-10-17 08:32:03.000000000 +0000 @@ -2,51 +2,50 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -MimeNotCss=Табліца стыляў %1$S не была загружана, таму што яе MIME тып, "%2$S", не "text/css". -MimeNotCssWarn=Табліца стыляў %1$S загружана як CSS не гледзячы на тое, што яе MIME тып, "%2$S", не "text/css". - -PEDeclDropped=Абвяшчэнне адкінута. -PEDeclSkipped=Прапушчана да наступнага абвяшчэння. -PEUnknownProperty=Невядомая ўласцівасць '%1$S'. -PEPRSyntaxFieldEmptyInput=Дэскрыптар сінтаксісу @property пусты. -PEPRSyntaxFieldExpectedPipe=Дэскрыптар сінтаксісу @property «%S» змяшчае кампаненты без вертыкальнай рысы паміж імі. -PEPRSyntaxFieldInvalidNameStart=Дэскрыптар сінтаксісу @property «%S» змяшчае назву кампанента, якая пачынаецца з недапушчальнага сімвала. -PEPRSyntaxFieldInvalidName=Дэскрыптар сінтаксісу @property «%S» змяшчае назву кампанента з недапушчальным сімвалам. -PEPRSyntaxFieldUnclosedDataTypeName=Дэскрыптар сінтаксісу @property «%S» змяшчае назву незакрытага тыпу дадзеных. -PEPRSyntaxFieldUnexpectedEOF=Дэскрыптар сінтаксісу @property «%S» няпоўны. -PEPRSyntaxFieldUnknownDataTypeName=Дэскрыптар сінтаксісу @property «%S» змяшчае назву нявызначанага тыпу дадзеных. -PEValueParsingError=Памылка разбору значэння '%1$S'. -PEUnknownAtRule=Непазнанае at-rule або памылка разбору at-rule '%1$S'. -PEMQUnexpectedOperator=Нечаканы аператар у спісе медыя. -PEMQUnexpectedToken=Нечаканы токен ‘%1$S’ у спісе медыя. -PEAtNSUnexpected=Нечаканая лексема ўсярэдзіне @namespace: '%1$S'. -PEKeyframeBadName=Чакаўся вызначальнік для назвы правіла @keyframes. -PEBadSelectorRSIgnored=Збор правілаў праігнараваны з-за дрэннага вылучальніка -PEBadSelectorKeyframeRuleIgnored=Правіла keyframe праігнаравана праз кепскі вылучальнік. -PESelectorGroupNoSelector=Чакаўся вылучальнік. -PESelectorGroupExtraCombinator=Павіслы змешвальнік. -PEClassSelNotIdent=Чакаўся вызначальнік для вылучальніка класа, але знойдзены '%1$S'. -PETypeSelNotType=Чакалася назва адзінкі або '*', але знойдзены '%1$S'. -PEUnknownNamespacePrefix=Невядомая прыстаўка назвапрасторы '%1$S'. -PEAttributeNameExpected=Чакаўся вызначальнік для назвы атрыбута, але знойдзены '%1$S'. -PEAttributeNameOrNamespaceExpected=Чакалася назва атрыбута або назвапрастора, але знойдзены '%1$S'. -PEAttSelNoBar=Чакаўся '|', але знойдзены '%1$S'. -PEAttSelUnexpected=Нечаканая лексема ў вылучальніку атрыбута: '%1$S'. -PEAttSelBadValue=Чакаўся вызначальнік або радок для значэння ў вылучальніку атрыбута, але знойдзены '%1$S'. -PEPseudoSelBadName=Чакаўся вызначальнік псеўда-класа або псеўда-адзінкі, але знойдзены '%1$S'. -PEPseudoSelEndOrUserActionPC=Чакаўся канец вылучальніка або псеўда-клас дзеяння карыстальніка пасля псеўда-адзінкі, але зноўдзена '%1$S'. -PEPseudoSelUnknown=Невядомы псеўда-клас або псеўда-адзінка '%1$S'. -PEPseudoClassArgNotIdent=Чакаўся вызначальнік параметра псеўда-класа, але знойдзены '%1$S'. -PEColorNotColor=Чакаўся колер, але знойдзены '%1$S'. -PEParseDeclarationDeclExpected=Чакалася абвяшчэнне, але знойдзены '%1$S'. -PEUnknownFontDesc=Невядомы апісальнік '%1$S' у правіле @font-face. -PEMQExpectedFeatureName=Чакалася назва асаблівасці медыя, але знойдзены '%1$S'. -PEMQNoMinMaxWithoutValue=Медыя-асаблівасці з min- або max- мусяць мець значэнне. -PEMQExpectedFeatureValue=Знойдзена няспраўнае значэнне асаблівасці медыя. -PEExpectedNoneOrURL=Чакалася 'none' або URL, але знойдзена '%1$S'. -PEExpectedNoneOrURLOrFilterFunction=Чакалася 'none', URL або функцыя-фільтр, але атрымана '%1$S'. -PEDisallowedImportRule=Правілы @import яшчэ не дзейнічаюць у створаных табліцах стыляў. -PENeverMatchingHostSelector=Селектар :host у «%S» не пазбаўлены функцый і ніколі не будзе адпавядаць. Магчыма, вы намерваліся выкарыстаць :host()? - -TooLargeDashedRadius=Радыус скруглення занадта вялікі для стылю ‘dashed’ (мяжа - 100000 пікселяў). Візуалізую як суцэльны. -TooLargeDottedRadius=Радыус скруглення занадта вялікі для стылю ‘dotted’ (мяжа - 100000 пікселяў). Візуалізую як суцэльны. +MimeNotCss = Табліца стыляў %1$S не была загружана, таму што яе MIME тып, "%2$S", не "text/css". +MimeNotCssWarn = Табліца стыляў %1$S загружана як CSS не гледзячы на тое, што яе MIME тып, "%2$S", не "text/css". +PEDeclDropped = Абвяшчэнне адкінута. +PEDeclSkipped = Прапушчана да наступнага абвяшчэння. +PEUnknownProperty = Невядомая ўласцівасць '%1$S'. +PEPRSyntaxFieldEmptyInput = Дэскрыптар сінтаксісу @property пусты. +PEPRSyntaxFieldExpectedPipe = Дэскрыптар сінтаксісу @property «%S» змяшчае кампаненты без вертыкальнай рысы паміж імі. +PEPRSyntaxFieldInvalidNameStart = Дэскрыптар сінтаксісу @property «%S» змяшчае назву кампанента, якая пачынаецца з недапушчальнага сімвала. +PEPRSyntaxFieldInvalidName = Дэскрыптар сінтаксісу @property «%S» змяшчае назву кампанента з недапушчальным сімвалам. +PEPRSyntaxFieldUnclosedDataTypeName = Дэскрыптар сінтаксісу @property «%S» змяшчае назву незакрытага тыпу дадзеных. +PEPRSyntaxFieldUnexpectedEOF = Дэскрыптар сінтаксісу @property «%S» няпоўны. +PEPRSyntaxFieldUnknownDataTypeName = Дэскрыптар сінтаксісу @property «%S» змяшчае назву нявызначанага тыпу дадзеных. +PEValueParsingError = Памылка разбору значэння '%1$S'. +PEUnknownAtRule = Непазнанае at-rule або памылка разбору at-rule '%1$S'. +PEMQUnexpectedOperator = Нечаканы аператар у спісе медыя. +PEMQUnexpectedToken = Нечаканы токен ‘%1$S’ у спісе медыя. +PEAtNSUnexpected = Нечаканая лексема ўсярэдзіне @namespace: '%1$S'. +PEKeyframeBadName = Чакаўся вызначальнік для назвы правіла @keyframes. +PEBadSelectorRSIgnored = Збор правілаў праігнараваны з-за дрэннага вылучальніка +PEBadSelectorKeyframeRuleIgnored = Правіла keyframe праігнаравана праз кепскі вылучальнік. +PESelectorGroupNoSelector = Чакаўся вылучальнік. +PESelectorGroupExtraCombinator = Павіслы змешвальнік. +PEClassSelNotIdent = Чакаўся вызначальнік для вылучальніка класа, але знойдзены '%1$S'. +PETypeSelNotType = Чакалася назва адзінкі або '*', але знойдзены '%1$S'. +PEUnknownNamespacePrefix = Невядомая прыстаўка назвапрасторы '%1$S'. +PEAttributeNameExpected = Чакаўся вызначальнік для назвы атрыбута, але знойдзены '%1$S'. +PEAttributeNameOrNamespaceExpected = Чакалася назва атрыбута або назвапрастора, але знойдзены '%1$S'. +PEAttSelNoBar = Чакаўся '|', але знойдзены '%1$S'. +PEAttSelUnexpected = Нечаканая лексема ў вылучальніку атрыбута: '%1$S'. +PEAttSelBadValue = Чакаўся вызначальнік або радок для значэння ў вылучальніку атрыбута, але знойдзены '%1$S'. +PEPseudoSelBadName = Чакаўся вызначальнік псеўда-класа або псеўда-адзінкі, але знойдзены '%1$S'. +PEPseudoSelEndOrUserActionPC = Чакаўся канец вылучальніка або псеўда-клас дзеяння карыстальніка пасля псеўда-адзінкі, але зноўдзена '%1$S'. +PEPseudoSelUnknown = Невядомы псеўда-клас або псеўда-адзінка '%1$S'. +PEPseudoClassArgNotIdent = Чакаўся вызначальнік параметра псеўда-класа, але знойдзены '%1$S'. +PEColorNotColor = Чакаўся колер, але знойдзены '%1$S'. +PEParseDeclarationDeclExpected = Чакалася абвяшчэнне, але знойдзены '%1$S'. +PEUnknownFontDesc = Невядомы апісальнік '%1$S' у правіле @font-face. +PEMQExpectedFeatureName = Чакалася назва асаблівасці медыя, але знойдзены '%1$S'. +PEMQNoMinMaxWithoutValue = Медыя-асаблівасці з min- або max- мусяць мець значэнне. +PEMQExpectedFeatureValue = Знойдзена няспраўнае значэнне асаблівасці медыя. +PEExpectedNoneOrURL = Чакалася 'none' або URL, але знойдзена '%1$S'. +PEExpectedNoneOrURLOrFilterFunction = Чакалася 'none', URL або функцыя-фільтр, але атрымана '%1$S'. +PEDisallowedImportRule = Правілы @import яшчэ не дзейнічаюць у створаных табліцах стыляў. +PENeverMatchingHostSelector = Селектар :host у «%S» не пазбаўлены функцый і ніколі не будзе адпавядаць. Магчыма, вы намерваліся выкарыстаць :host()? +PEImportantDeclError = Уласцівасць не можа быць аб'яўлена як !important у гэтым кантэксце. +TooLargeDashedRadius = Радыус скруглення занадта вялікі для стылю ‘dashed’ (мяжа - 100000 пікселяў). Візуалізую як суцэльны. +TooLargeDottedRadius = Радыус скруглення занадта вялікі для стылю ‘dotted’ (мяжа - 100000 пікселяў). Візуалізую як суцэльны. diff -Nru firefox-esr-128.3.1esr/l10n-be/dom/chrome/security/csp.properties firefox-esr-128.4.0esr/l10n-be/dom/chrome/security/csp.properties --- firefox-esr-128.3.1esr/l10n-be/dom/chrome/security/csp.properties 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/dom/chrome/security/csp.properties 2024-10-17 08:32:03.000000000 +0000 @@ -77,6 +77,13 @@ # Don't translate "Trusted Types" because it's a feature name. # %1$S is the entire directive (name and value) that has been violated (e.g. "trusted types X"). CSPROTrustedTypesPolicyViolation = (Палітыка Report-Only) Налады старонкі будуць блакаваць стварэнне палітыкі давераных тыпаў, таму што яна парушае наступную дырэктыву: «%1$S» +# LOCALIZATION NOTE (CSPTrustedTypesSinkViolation): +# Don't translate "require-trusted-types-for 'script'", because it's the CSP directive. +CSPTrustedTypesSinkViolation = Налады старонкі заблакавалі прызначэнне прыёмніку ін'екцый, таму што гэта парушае наступную дырэктыву: «require-trusted-types-for ’script’» +# LOCALIZATION NOTE (CSPROTrustedTypesSinkViolation): +# Don't translate "require-trusted-types-for 'script'", because it's the CSP directive. +# Don't translate "Report-Only" as it's part of the name Content-Security-Policy-Report-Only. +CSPROTrustedTypesSinkViolation = (Палітыка Report-Only) Налады старонкі будуць блакаваць прызначэнне прыёмніку ін'екцый, таму што гэта парушае наступную дырэктыву: «require-trusted-types-for ’script’» # LOCALIZATION NOTE (CSPStyleViolation): # %1$S is the entire directive that has been violated. (e.g. "default-src 'none'") # %2$S is the URI of the resource which violated the directive. @@ -167,6 +174,9 @@ # LOCALIZATION NOTE (reportURInotHttpsOrHttp2): # %1$S is the ETLD of the report URI that is not HTTP or HTTPS reportURInotHttpsOrHttp2 = URI справаздачы (%1$S) павінна быць URI HTTP ці HTTPS. +# LOCALIZATION NOTE (reportURINorReportToNotInReportOnlyHeader): +# %1$S is the ETLD of the page with the policy +reportURINorReportToNotInReportOnlyHeader = Гэты сайт (%1$S) мае палітыку Report-Only без дырэктыў report-uri або report-to. CSP не будзе блакаваць і не здолее паведамляць пра парушэнні гэтай палітыкі. # LOCALIZATION NOTE (reportURInotInReportOnlyHeader): # %1$S is the ETLD of the page with the policy reportURInotInReportOnlyHeader = Сайт (%1$S) мае палітыку Толькі-Для-Справаздачы без URI справаздачы. CSP не будзе блакаваць і не здолее паведамляць пра парушэнні гэтай палітыкі. diff -Nru firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/about/aboutProcesses.ftl firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/about/aboutProcesses.ftl --- firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/about/aboutProcesses.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/about/aboutProcesses.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -12,6 +12,8 @@ about-processes-shutdown-process = .title = Выгрузіць карткі і забіць працэс +about-processes-kill-process = + .title = Забіць працэс about-processes-shutdown-tab = .title = Закрыць картку # Profiler icons diff -Nru firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/featuregates/features.ftl firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/featuregates/features.ftl --- firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/featuregates/features.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/featuregates/features.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -46,9 +46,25 @@ experimental-features-ime-search = .label = Адрасны радок: паказваць вынікі ў час складання IME experimental-features-ime-search-description = IME (рэдактар метаду ўводу) - гэта інструмент, які дазваляе ўводзіць складаныя сімвалы, напрыклад, што выкарыстоўваюцца ва ўсходнеазіяцкіх ці індыйскіх пісьмовых мовах, пры дапамозе стандартнай клавіятуры. Уключэнне гэтага эксперыменту дазволіць трымаць панэль адраснага радка адкрытай, паказваючы вынікі пошуку і прапановы, пры ўводзе тэксту з дапамогай IME. Звярніце ўвагу, што IME можа паказваць панэль, якая закрывае вынікі адраснага радка, таму гэта налада рэкамендуецца толькі для IME, якая не выкарыстоўвае гэты тып панэлі. +# Auto Picture-in-Picture +experimental-features-auto-pip = + .label = Выява ў выяве: аўтаматычна адкрываць пры пераключэнні картак +experimental-features-auto-pip-description = Уключаць "Выяву ў выяве" на актыўных відэа пры пераключэнні картак. +genai-settings-chat-title = + .label = Чат-бот ШІ +# Updated sidebar settings +sidebar-title = + .label = Бакавая панэль +sidebar-description = Лёгкі доступ да вашай гісторыі, картак з іншых прылад, пашырэнняў бакавой панэлі і іншага ў часе аглядання. Адправіць водгук +vertical-tabs-title = + .label = Вертыкальныя карткі +vertical-tabs-description = Перамясціце карткі з верхняй часткі браўзера ў бок. Спатрэбіцца таксама паспрабаваць бакавую панэль. Адправіць водгук experimental-features-group-browsing = .label = Агляданне experimental-features-group-developer-tools = .label = Прылады распрацоўшчыка experimental-features-group-webpage-display = .label = Адлюстраванне вэб-старонкі +experimental-features-group-customize-browsing = + .label = Уладкуйце сваё агляданне +experimental-features-group-customize-browsing-description = Калі вы паспрабуеце гэтыя магчымасці, падзяліцеся сваімі думкамі ў Connect diff -Nru firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/global/antiTracking.ftl firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/global/antiTracking.ftl --- firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/global/antiTracking.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/global/antiTracking.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,15 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# Message which is shown when Bounce Tracking Protection has detected site as a +# bounce tracker. Do not translate "bounce tracker". +# Variables: +# $siteHost (string): The host portion of the site which has been classified as a tracker. +# $gracePeriodSeconds (number): Grace period window in seconds until the site purged (clearing cookies, storages and caches). +btp-warning-tracker-classified = + { $gracePeriodSeconds -> + [one] “{ $siteHost }” быў класіфікаваны як трэкер адмоваў. Калі ён не атрымае актывацыю карыстальніка на працягу наступнай { $gracePeriodSeconds } секунды, яго стан будзе выдалены. + [few] “{ $siteHost }” быў класіфікаваны як трэкер адмоваў. Калі ён не атрымае актывацыю карыстальніка на працягу наступных { $gracePeriodSeconds } секунд, яго стан будзе выдалены. + *[many] “{ $siteHost }” быў класіфікаваны як трэкер адмоваў. Калі ён не атрымае актывацыю карыстальніка на працягу наступных { $gracePeriodSeconds } секунд, яго стан будзе выдалены. + } diff -Nru firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/neterror/netError.ftl firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/neterror/netError.ftl --- firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/neterror/netError.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/neterror/netError.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -64,6 +64,7 @@ neterror-dns-not-found-trr-unknown-host2 = Гэты сайт не быў знойдзены ў { $trrDomain }. neterror-dns-not-found-trr-server-problem = Узнікла праблема з { $trrDomain }. neterror-dns-not-found-bad-trr-url = Несапраўдны URL. +neterror-dns-not-found-system-sleep = Сістэма ў рэжыме спячкі. neterror-dns-not-found-trr-unknown-problem = Нечаканая праблема. ## Native fallback specific messages diff -Nru firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/pdfviewer/viewer.ftl firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/pdfviewer/viewer.ftl --- firefox-esr-128.3.1esr/l10n-be/toolkit/toolkit/pdfviewer/viewer.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-be/toolkit/toolkit/pdfviewer/viewer.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -51,12 +51,6 @@ pdfjs-bookmark-button = .title = Дзейная старонка (паглядзець URL-адрас з дзейнай старонкі) pdfjs-bookmark-button-label = Цяперашняя старонка -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = Адкрыць у праграме -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = Адкрыць у праграме ## Secondary toolbar and context menu @@ -111,6 +105,14 @@ pdfjs-document-properties-file-name = Назва файла: pdfjs-document-properties-file-size = Памер файла: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } КБ ({ $b } байтаў) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } МБ ({ $b } байтаў) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт) @@ -125,6 +127,9 @@ pdfjs-document-properties-creation-date = Дата стварэння: pdfjs-document-properties-modification-date = Дата змянення: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -283,6 +288,9 @@ # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [{ $type } Annotation] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -306,8 +314,6 @@ pdfjs-editor-highlight-button = .title = Вылучэнне pdfjs-editor-highlight-button-label = Вылучэнне -pdfjs-highlight-floating-button = - .title = Вылучэнне pdfjs-highlight-floating-button1 = .title = Падфарбаваць .aria-label = Падфарбаваць @@ -376,6 +382,22 @@ pdfjs-editor-resizer-label-bottom-middle = Пасярэдзіне ўнізе — змяніць памер pdfjs-editor-resizer-label-bottom-left = Левы ніжні кут — змяніць памер pdfjs-editor-resizer-label-middle-left = Пасярэдзіне злева — змяніць памер +pdfjs-editor-resizer-top-left = + .aria-label = Верхні левы кут — змяніць памер +pdfjs-editor-resizer-top-middle = + .aria-label = Уверсе пасярэдзіне — змяніць памер +pdfjs-editor-resizer-top-right = + .aria-label = Верхні правы кут — змяніць памер +pdfjs-editor-resizer-middle-right = + .aria-label = Пасярэдзіне справа — змяніць памер +pdfjs-editor-resizer-bottom-right = + .aria-label = Правы ніжні кут — змяніць памер +pdfjs-editor-resizer-bottom-middle = + .aria-label = Пасярэдзіне ўнізе — змяніць памер +pdfjs-editor-resizer-bottom-left = + .aria-label = Левы ніжні кут — змяніць памер +pdfjs-editor-resizer-middle-left = + .aria-label = Пасярэдзіне злева — змяніць памер ## Color picker @@ -402,3 +424,60 @@ pdfjs-editor-highlight-show-all-button-label = Паказаць усе pdfjs-editor-highlight-show-all-button = .title = Паказаць усе + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + +# Modal header positioned above a text box where users can edit the alt text. +pdfjs-editor-new-alt-text-dialog-edit-label = Рэдагаваць тэкст для атрыбута alt (апісанне выявы) +# Modal header positioned above a text box where users can add the alt text. +pdfjs-editor-new-alt-text-dialog-add-label = Дадаць тэкст для атрыбута alt (апісанне выявы) +pdfjs-editor-new-alt-text-textarea = + .placeholder = Напішыце сваё апісанне тут… +# This text refers to the alt text box above this description. It offers a definition of alt text. +pdfjs-editor-new-alt-text-description = Кароткае апісанне для людзей, якія не бачаць выяву, ці калі выява не загружаецца. +# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. +pdfjs-editor-new-alt-text-disclaimer1 = Гэты тэкст для атрыбута alt быў створаны аўтаматычна і можа быць недакладным +pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Даведацца больш +pdfjs-editor-new-alt-text-create-automatically-button-label = Ствараць тэкст для атрыбута alt аўтаматычна +pdfjs-editor-new-alt-text-not-now-button = Не зараз +pdfjs-editor-new-alt-text-error-title = Не ўдалося аўтаматычна стварыць тэкст для атрыбута alt +pdfjs-editor-new-alt-text-error-description = Калі ласка, напішыце ўласны тэкст для атрыбута alt або паўтарыце спробу пазней. +pdfjs-editor-new-alt-text-error-close-button = Закрыць +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +# $downloadedSize (Number) - the downloaded size (in MB) of the AI model. +# $percent (Number) - the percentage of the downloaded size. +pdfjs-editor-new-alt-text-ai-model-downloading-progress = Сцягванне мадэлі ШІ для тэксту для атрыбута alt ({ $downloadedSize } з { $totalSize } МБ) + .aria-valuetext = Сцягванне мадэлі ШІ для тэксту для атрыбута alt ({ $downloadedSize } з { $totalSize } МБ) +# This is a button that users can click to edit the alt text they have already added. +pdfjs-editor-new-alt-text-added-button-label = Тэкст для атрыбута alt дададзены +# This is a button that users can click to open the alt text editor and add alt text when it is not present. +pdfjs-editor-new-alt-text-missing-button-label = Адсутнічае тэкст для атрыбута alt +# This is a button that opens up the alt text modal where users should review the alt text that was automatically generated. +pdfjs-editor-new-alt-text-to-review-button-label = Водгук на тэкст для атрыбута alt +# "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear. +# Variables: +# $generatedAltText (String) - the generated alt-text. +pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Створаны аўтаматычна: { $generatedAltText } + +## Image alt-text settings + +pdfjs-image-alt-text-settings-button = + .title = Налады альтэрнатыўнага тэксту для выявы +pdfjs-image-alt-text-settings-button-label = Налады альтэрнатыўнага тэксту для выявы +pdfjs-editor-alt-text-settings-dialog-label = Налады альтэрнатыўнага тэксту для выявы +pdfjs-editor-alt-text-settings-automatic-title = Аўтаматычны тэкст для атрыбута alt +pdfjs-editor-alt-text-settings-create-model-button-label = Ствараць тэкст для атрыбута alt аўтаматычна +pdfjs-editor-alt-text-settings-create-model-description = Прапануе апісанні, каб дапамагчы людзям, якія не бачаць выяву, ці калі выява не загружаецца. +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +pdfjs-editor-alt-text-settings-download-model-label = Мадэль ШІ для тэксту для атрыбута alt ({ $totalSize } МБ) +pdfjs-editor-alt-text-settings-ai-model-description = Працуе лакальна на вашай прыладзе, таму вашы звесткі застаюцца прыватнымі. Патрабуецца для аўтаматычнага альтэрнатыўнага тэксту. +pdfjs-editor-alt-text-settings-delete-model-button = Выдаліць +pdfjs-editor-alt-text-settings-download-model-button = Сцягнуць +pdfjs-editor-alt-text-settings-downloading-model-button = Сцягванне… +pdfjs-editor-alt-text-settings-editor-title = Рэдактар тэксту для атрыбута alt +pdfjs-editor-alt-text-settings-show-dialog-button-label = Адразу паказваць рэдактар тэксту для атрыбута alt пры даданні выявы +pdfjs-editor-alt-text-settings-show-dialog-description = Дапамагае пераканацца, што ўсе вашы выявы маюць альтэрнатыўны тэкст. +pdfjs-editor-alt-text-settings-close-button = Закрыць diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/branding/official/brand.ftl firefox-esr-128.4.0esr/l10n-bg/browser/branding/official/brand.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/branding/official/brand.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/branding/official/brand.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -3,16 +3,6 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. -## Firefox Brand -## -## Firefox must be treated as a brand, and kept in English. -## It cannot be: -## - Declined to adapt to grammatical case. -## - Transliterated. -## - Translated. -## -## Reference: https://www.mozilla.org/styleguide/communications/translation/ - ## Firefox and Mozilla Brand ## ## Firefox and Mozilla must be treated as a brand. @@ -30,10 +20,9 @@ -brand-shorter-name = Firefox -brand-short-name = Firefox -brand-shortcut-name = Firefox - -brand-full-name = Mozilla Firefox # This brand name can be used in messages where the product name needs to # remain unchanged across different versions (Nightly, Beta, etc.). -brand-product-name = Firefox -vendor-short-name = Mozilla -trademarkInfo = Firefox и логотипа на Firefox са търговски марки на Mozilla Foundation. +trademarkInfo = Firefox и логата на Firefox са търговски марки на Mozilla Foundation. diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/aboutDialog.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/aboutDialog.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/aboutDialog.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/aboutDialog.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -64,3 +64,14 @@ # $isodate (String): date in ISO format, e.g. 2019-01-16 # $bits (Number): bits of the architecture (32 or 64) aboutDialog-version-nightly = { $version } ({ $isodate }) ({ $bits }-бита) +# Example of resulting string: 131.0a1 (aarch64) +# Variables: +# $version (String): version of Firefox, e.g. 66.0.1 +# $arch (String): name of the architecture (arm, aarch64, etc.) +aboutdialog-version-arch = { $version } ({ $arch }) +# Example of resulting string: 131.0a1 (2024-08-27) (aarch64) +# Variables: +# $version (String): version of Firefox for Nightly builds, e.g. 66.0a1 +# $isodate (String): date in ISO format, e.g. 2019-01-16 +# $arch (String): name of the architecture (arm, aarch64, etc.) +aboutdialog-version-arch-nightly = { $version } ({ $isodate }) ({ $arch }) diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/aboutLogins.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/aboutLogins.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/aboutLogins.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/aboutLogins.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -140,6 +140,8 @@ login-item-password-label = Парола login-item-password-reveal-checkbox = .aria-label = Показване на паролата +login-item-password-conceal-checkbox = + .aria-label = Скриване на паролата login-item-copy-password-button-text = Копиране login-item-copied-password-button-text = Копирано! login-item-save-changes-button = Запазване diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/aboutPocket.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/aboutPocket.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/aboutPocket.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/aboutPocket.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -45,7 +45,7 @@ pocket-panel-signup-cta-a-fix = Вашият бутон за запазване в интернет pocket-panel-signup-cta-b-updated = Щракнете върху бутона на { -pocket-brand-name }, за да запазите статии, видео и препратки. Преглеждайте запазените на всяко устройство и по всяко време. pocket-panel-signup-cta-b-short = Щракнете върху бутона на { -pocket-brand-name }, за да запазите статии, видео и препратки. -pocket-panel-signup-cta-c-updated = Преглеждайте запазените на всяко устройство и по всяко време. +pocket-panel-signup-cta-c-updated = Преглеждайте запазените неща на всяко устройство и по всяко време. ## about:pocket-home panel @@ -55,7 +55,7 @@ pocket-panel-home-discover-more = Открийте повече pocket-panel-home-explore-more = Разгледайте pocket-panel-home-most-recent-saves = Тук са последните ви запазени неща: -pocket-panel-home-most-recent-saves-loading = Последно запазените се зареждат… +pocket-panel-home-most-recent-saves-loading = Последно запазените неща се зареждат… pocket-panel-home-new-user-cta = Щракнете върху бутона на { -pocket-brand-name }, за да запазите статии, видео и препратки. pocket-panel-home-new-user-message = Вижте какво сте запазили последно. diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/allTabsMenu.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/allTabsMenu.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/allTabsMenu.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/allTabsMenu.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -16,3 +16,5 @@ .label = Затваряне на дублиращите се раздели all-tabs-menu-close-all-duplicate-tabs = .label = Затваряне на всички дублиращи се раздели +all-tabs-menu-synced-tabs = + .label = Раздели от други устройства diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/backgroundtasks/defaultagent.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/backgroundtasks/defaultagent.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/backgroundtasks/defaultagent.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/backgroundtasks/defaultagent.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -3,6 +3,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. default-browser-agent-task-description = Услугата „Default Browser Agent“ проверява дали четецът по подразбиране { -brand-short-name } ще бъде заменен от друг. Ако това се случи при подозрителни обстоятелства, най-много два пъти ще бъде изведено запитване към потребителя дали да върне { -brand-short-name } като подразбиран четец. Услугата се инсталира автоматично от { -brand-short-name } и се инсталира всеки път при обновяването му. За да я изключите променете настройката „default-browser-agent.enabled“ в страницата на about:config или чрез ведомственото ограничение „DisableDefaultBrowserAgent“ на четеца. +default-browser-notification-header-text = Ще продължавате ли да използвате { -brand-short-name }? default-browser-notification-body-text = Вашият стандартен браузър наскоро беше променен. Докоснете, за да възстановите { -brand-short-name } по подразбиране. default-browser-notification-yes-button-text = Да default-browser-notification-no-button-text = Не diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/browser.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/browser.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/browser.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/browser.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -547,6 +547,10 @@ .tooltiptext = Зареждане на адреса в полето urlbar-page-action-button = .tooltiptext = Действия със страницата +urlbar-revert-button = + .tooltiptext = Показване на адреса в адресната лента +urlbar-show-page-actions-button = + .tooltiptext = Показване на всички действия със страницата ## Action text shown in urlbar results, usually appended after the search ## string or the url, like "result value - action text". @@ -607,6 +611,15 @@ # Label prompting user to search with a particular search engine. # $engine (String): the name of a search engine that searches a specific site urlbar-result-search-with = Търсене с { $engine } +# Label for the urlbar result row, prompting the user to use a local keyword to enter search mode. +# $keywords (String): the restrict keyword to enter search mode. +# $localSearchMode (String): the local search mode (history, tabs, bookmarks, +# or actions) to search with. +urlbar-result-search-with-local-search-mode = { $keywords } - Търсене в { $localSearchMode } +# Label for the urlbar result row, prompting the user to use engine keywords to enter search mode. +# $keywords (String): the default keyword and user's set keyword if available +# $engine (String): the name of a search engine +urlbar-result-search-with-engine-keywords = { $keywords } - Търсене с { $engine } ## Action text shown in urlbar results, usually appended after the search ## string or the url, like "result value - action text". @@ -991,9 +1004,11 @@ ## Firefox Relay integration +firefox-relay-offer-why-to-use-relay = Нашите сигурни и лесни за използване маски защитават вашата самоличност и предотвратяват спам, като крият вашия имейл адрес. # Variables: # $useremail (String): user email that will receive messages firefox-relay-offer-what-relay-provides = Всички имейли, изпратени до вашите имейл маски, ще бъдат препращани към { $useremail } (освен ако не решите да ги блокирате). +firefox-relay-offer-legal-notice = С натискането на „Използване на имейл маска“ вие се съгласявате с и . ## Add-on Pop-up Notifications diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/confirmationHints.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/confirmationHints.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/confirmationHints.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/confirmationHints.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -20,6 +20,7 @@ confirmation-hint-pin-tab-description = Щракнете с десния бутон върху раздела, за да го махнете от леснодостъпните. confirmation-hint-send-to-device = Изпратено! confirmation-hint-firefox-relay-mask-created = Създадена е нова маска! +confirmation-hint-firefox-relay-mask-reused = Повторно е използвана съществуваща маска! confirmation-hint-screenshot-copied = Екранната снимка е копирана! # Variables: # $tabCount (Number): The number of duplicate tabs closed, at least 1. diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/featureCallout.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/featureCallout.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/featureCallout.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/featureCallout.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -43,3 +43,11 @@ # “Mark up” refers to the process of “annotating” or adding free hand text or diagramming to the document. callout-pdfjs-draw-body-b = Без повече отпечатване и сканиране. Маркирайте PDF файловете, след което запазете промените. callout-pdfjs-draw-button = Разбрах! + +## Firefox View Discoverability Strings + + +## Split Dismiss Button Labels + +# Opens about:preferences#general-cfrfeatures +split-dismiss-button-manage-settings-option-label = Управление на настройките diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/firefoxView.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/firefoxView.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/firefoxView.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/firefoxView.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -63,6 +63,7 @@ firefoxview-tabpickup-signed-out-header = Впишете се, за да се свържете отново firefoxview-tabpickup-signed-out-description2 = За да се свържете отново и да отворите вашите раздели, първо влезте в профила си. firefoxview-tabpickup-signed-out-primarybutton = Вписване +firefoxview-tabpickup-syncing = Почакайте малко, докато разделите ви се синхронизират. Става бързо. firefoxview-mobile-promo-header = Вземете разделите от вашия телефон или таблет firefoxview-mobile-promo-primarybutton = Изтеглете { -brand-product-name } за мобилни устройства firefoxview-mobile-confirmation-header = 🎉 Готово! @@ -173,7 +174,7 @@ firefoxview-sort-history-by-date-label = Сортиране по дата firefoxview-sort-history-by-site-label = Сортиране по страница firefoxview-sort-open-tabs-by-recency-label = Сортиране по последна активност -firefoxview-sort-open-tabs-by-order-label = Сортиране по ред на раздели +firefoxview-sort-open-tabs-by-order-label = Подреждане по реда им в прозореца # Variables: # $url (string) - URL that will be opened in the new tab firefoxview-opentabs-tab-row = @@ -198,6 +199,8 @@ ## Message displayed in Firefox View when the user has no history data +firefoxview-history-empty-header = Върнете се там, където сте били +firefoxview-history-empty-description = Докато сърфирате, страниците, които посещавате ще бъдат показвани тук. ## diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/fxviewTabList.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/fxviewTabList.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/fxviewTabList.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/fxviewTabList.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -14,6 +14,10 @@ # $targetURI (string) - URL of tab that will be opened in the new tab fxviewtabrow-tabs-list-tab = .title = Отваряне на { $targetURI } в нов раздел +# Variables: +# $tabTitle (string) - Title of tab being closed +fxviewtabrow-close-tab-button = + .title = Затваряне на { $tabTitle } # Used instead of the localized relative time when a timestamp is within a minute or so of now fxviewtabrow-just-now-timestamp = Току-що @@ -22,10 +26,17 @@ fxviewtabrow-delete = Изтриване .accesskey = И +fxviewtabrow-forget-about-this-site = Забравяне за този сайт… + .accesskey = З fxviewtabrow-open-in-window = Отваряне в нов прозорец .accesskey = О fxviewtabrow-open-in-private-window = Отваряне в поверителен прозорец .accesskey = я +# “Bookmark” is a verb, as in "Bookmark this page" (add to bookmarks). +fxviewtabrow-add-bookmark = Отмятане… + .accesskey = О +fxviewtabrow-save-to-pocket = Запазване във { -pocket-brand-name } + .accesskey = п fxviewtabrow-copy-link = Копиране на препратката .accesskey = К fxviewtabrow-close-tab = Затваряне на раздела @@ -42,8 +53,12 @@ .accesskey = у fxviewtabrow-pin-tab = Закачане на раздела .accesskey = З +fxviewtabrow-unpin-tab = Откачане на раздела + .accesskey = т fxviewtabrow-mute-tab = Заглушаване на раздела .accesskey = г +fxviewtabrow-unmute-tab = Включване звука на раздела + .accesskey = з # Variables: # $tabTitle (string) - Title of the tab to which the context menu is associated fxviewtabrow-options-menu-button = @@ -53,3 +68,5 @@ fxviewtabrow-mute-tab-button-no-context = .title = Заглушаване на раздела +fxviewtabrow-unmute-tab-button-no-context = + .title = Включване звука на раздела diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/genai.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/genai.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/genai.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/genai.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -10,8 +10,10 @@ genai-settings-chat-choose-one-menuitem = .label = Изберете от списъка genai-settings-chat-links = Когато изберете чатбот, вие се съгласявате с условията за ползване и декларацията за поверителност на доставчика. +genai-settings-chat-chatgpt-links = Избирайки ChatGPT, вие се съгласявате с условията за използване на OpenAI и декларацията за поверителност. +genai-settings-chat-claude-links = Избирайки Anthropic Claude, вие се съгласявате с Условията за ползване на Anthropic, Политиката за използване, и Декларация за поверителност. genai-settings-chat-copilot-links = Избирайки Copilot, вие се съгласявате с условията на Copilot AI Experiences и Декларацията за поверителност на Microsoft. -genai-settings-chat-gemini-links = Избирайки Google Gemini, вие се съгласявате с Условията на Google, Правилата относно забраненото използване на генеративен AI > и Политиката за поверителност на Gemini Apps. +genai-settings-chat-gemini-links = Избирайки Google Gemini, вие се съгласявате с Условията на Google, Правилата относно забраненото използване на генеративен AI и Политиката за поверителност на Gemini Apps. genai-settings-chat-huggingchat-links = Избирайки HuggingChat, вие се съгласявате с Декларацията за поверителност на HuggingChat и Политиката за поверителност на Hugging Face. genai-settings-chat-localhost-links = Вземете свой частен локален чатбот, като llamafile от групата за иновации на { -vendor-short-name }. genai-settings-chat-shortcuts = @@ -53,3 +55,57 @@ # $provider (string) - name of the provider genai-input-ask-provider = .placeholder = Попитайте { $provider } + +## Chatbot header + +genai-chatbot-title = AI чатбот +genai-header-provider-menu = + .title = Изберете чатбот +genai-header-options-button = + .title = Отваряне на меню +genai-header-close-button = + .title = Затваряне +genai-provider-view-details = + .label = Преглед на подробностите за чат-бота +genai-provider-about-chatbots = + .label = Относно тези чатботове +genai-options-reload-generic = + .label = Презареждане на чатбота +# $provider (string) - name of the provider +genai-options-reload-provider = + .label = Презареждане на { $provider } + +## Chatbot onboarding + +genai-onboarding-primary = Продължи +genai-onboarding-secondary = Затваряне +genai-onboarding-claude-tooltip = + .title = Anthropic Claude +genai-onboarding-claude-learn = Научете повече за Claude +genai-onboarding-chatgpt-tooltip = + .title = ChatGPT +genai-onboarding-chatgpt-learn = Научете повече за ChatGPT +genai-onboarding-gemini-tooltip = + .title = Google Gemini +genai-onboarding-gemini-learn = Научете повече за Gemini +genai-onboarding-huggingchat-tooltip = + .title = HuggingChat +genai-onboarding-huggingchat-learn = Научете повече за HuggingChat +genai-onboarding-lechat-tooltip = + .title = Le Chat Mistral +genai-onboarding-lechat-learn = Научете повече за Le Chat +genai-onboarding-select-primary = Започнете разговор + +## Chatbot onboarding choices +## These describe features/capabilities of chatbot providers. These are not buttons/actions. + +genai-onboarding-claude-generate = Генериране на текст и код +genai-onboarding-claude-analyze = Анализиране на документи и изображения +genai-onboarding-claude-price = Безплатни и платени опции; изисква се профил +genai-onboarding-chatgpt-generate = Генериране на текст, изображения и код +genai-onboarding-chatgpt-analyze = Анализиране на документи и изображения +genai-onboarding-gemini-generate = Генериране на текст, изображения и код +genai-onboarding-gemini-analyze = Анализиране на изображения (безплатно) и документи (платено) +genai-onboarding-gemini-price = Безплатни и платени опции; изисква се профил +genai-onboarding-huggingchat-generate = Генериране на текст и код +genai-onboarding-lechat-generate = Генериране на текст и код diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/menubar.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/menubar.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/menubar.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/menubar.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -227,6 +227,9 @@ .label = Последно затворени раздели menu-history-undo-window-menu = .label = Последно затворени прозорци +# "Search" is a verb, as in "Search in History" +menu-history-search = + .label = Търсене в историята ## Bookmarks Menu diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/migration.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/migration.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/migration.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/migration.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -66,6 +66,8 @@ import-items-page-title = Елементи за внасяне import-items-description = Изберете елементите за внасяне: import-permissions-page-title = Дайте права на { -brand-short-name } +# Do not translate "Safari" (the name of the browser on Apple devices) +import-safari-permissions-string = macOS изисква изрично да разрешите на { -brand-short-name } да има достъп до данните на Safari. Кликнете „Напред“, изберете папката „Safari“ в диалога на Finder, който се появява, и след това кликнете „Отваряне“. import-migrating-page-title = Внасяне… import-migrating-description = В момента се внасят следните елементи… import-select-profile-page-title = Избиране на профил diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/migrationWizard.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/migrationWizard.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/migrationWizard.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/migrationWizard.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -53,11 +53,13 @@ ## is installed as a Snap. migration-no-permissions-message = { -brand-short-name } няма достъп до профилите на другите браузъри, инсталирани на това устройство. +migration-no-permissions-instructions-step1 = Изберете „Продължи“ ## These strings will be displayed based on how many resources are selected to import migration-all-available-data-label = Внасяне на всички налични данни migration-no-selected-data-label = Няма избрани данни за внасяне +migration-selected-data-label = Внасяне на избраните данни ## @@ -76,6 +78,7 @@ migration-otherdata-option-label = Други данни migration-passwords-from-file-progress-header = Внасяне на файл с пароли migration-passwords-from-file-success-header = Паролите бяха успешно внесени +migration-passwords-from-file = Проверка на файла за пароли migration-passwords-new = Нови пароли migration-passwords-updated = Съществуващи пароли migration-passwords-from-file-no-valid-data = Файлът не съдържа пароли, които може да импортирате. Изберете друг файл. @@ -107,6 +110,7 @@ migration-bookmarks-from-file-picker-title = Внасяне на файл с отметки migration-bookmarks-from-file-progress-header = Внасяне на отметки migration-bookmarks-from-file = Отметки +migration-bookmarks-from-file-success-header = Отметките са успешно внесени # A description for the .html file format that may be shown as the file type # filter by the operating system. migration-bookmarks-from-file-html-filter-title = @@ -156,15 +160,65 @@ .aria-label = Завършено migration-safari-password-import-header = Внасяне на пароли от Safari migration-safari-password-import-steps-header = За да внесете пароли от Safari: +migration-safari-password-import-skip-button = Пропускане migration-safari-password-import-select-button = Изберете Файл +# Shown in the migration wizard after importing bookmarks from another +# browser has completed. +# +# Variables: +# $quantity (Number): the number of successfully imported bookmarks +migration-wizard-progress-success-bookmarks = + { NUMBER($quantity) -> + [one] { $quantity } отметка + *[other] { $quantity } отметки + } +# Shown in the migration wizard after importing bookmarks from either +# Internet Explorer or Edge. +# +# Use the same terminology if the browser is available in your language. +# +# Variables: +# $quantity (Number): the number of successfully imported bookmarks +migration-wizard-progress-success-favorites = + { NUMBER($quantity) -> + [one] { $quantity } любим + *[other] { $quantity } любими + } ## The import process identifies extensions installed in other supported ## browsers and installs the corresponding (matching) extensions compatible ## with Firefox, if available. +# Shown in the migration wizard after importing all matched extensions +# from supported browsers. +# +# Variables: +# $quantity (Number): the number of successfully imported extensions +migration-wizard-progress-success-extensions = + { NUMBER($quantity) -> + [one] { $quantity } разширениe + *[other] { $quantity } разширения + } +# Shown in the migration wizard after importing a partial amount of +# matched extensions from supported browsers. +# +# Variables: +# $matched (Number): the number of matched imported extensions +# $quantity (Number): the number of total extensions found during import +migration-wizard-progress-partial-success-extensions = { $matched } от { $quantity } разширения ## +# Shown in the migration wizard after importing passwords from another +# browser has completed. +# +# Variables: +# $quantity (Number): the number of successfully imported passwords +migration-wizard-progress-success-passwords = + { NUMBER($quantity) -> + [one] { $quantity } парола + *[other] { $quantity } пароли + } # Shown in the migration wizard after importing payment methods from another # browser has completed. # diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/newtab/asrouter.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/newtab/asrouter.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/newtab/asrouter.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/newtab/asrouter.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -128,6 +128,7 @@ ## Emotive Continuous Onboarding spotlight-better-internet-header = По-добрият интернет започва с вас +spotlight-peace-mind-header = Ние сме ви защитили spotlight-pin-primary-button = { PLATFORM() -> [macos] Запази в Dock @@ -150,6 +151,11 @@ mr2022-background-update-toast-title = Новият { -brand-short-name }. Персонален. Без проследяване. Без компромиси. # This button label will be fitted into a narrow fixed-width button by +# Windows. Try to not exceed the width of the English text (compare it +# using a variable font like Arial): the button can only fit 1-2 +# additional characters, exceeding characters will be truncated. +mr2022-background-update-toast-primary-button-label = Отворете { -brand-shorter-name } сега +# This button label will be fitted into a narrow fixed-width button by # Windows. Try to not exceed the width of the English text (compare it using a # variable font like Arial): the button can only fit 1-2 additional characters, # exceeding characters will be truncated. @@ -205,6 +211,8 @@ ## Set as Default PDF Reader Infobar +pdf-default-notification-set-default-button = + .label = Задаване по подразбиране pdf-default-notification-decline-button = .label = Не сега @@ -227,3 +235,12 @@ ## Tail Fox Set Default Spotlight tail-fox-spotlight-secondary-button = Не сега + +## Root Certificate Succession Infobar + +root-certificate-succession-infobar-primary-button = + .label = Актуализирайте сега + .accesskey = с +root-certificate-succession-infobar-secondary-button = + .label = По-късно + .accesskey = к diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/newtab/newtab.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/newtab/newtab.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/newtab/newtab.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/newtab/newtab.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -13,6 +13,8 @@ .aria-label = Приспособяване на новите раздели newtab-personalize-dialog-label = .aria-label = Приспособяване +newtab-logo-and-wordmark = + .aria-label = { -brand-full-name } ## Search box component. @@ -45,6 +47,7 @@ newtab-topsites-add-shortcut-header = Нова клавишна комбинация newtab-topsites-edit-topsites-header = Променяне на често посещавана страница newtab-topsites-edit-shortcut-header = Промяна на икона +newtab-topsites-add-shortcut-label = Добавяне на пряк път newtab-topsites-title-label = Заглавие newtab-topsites-title-input = .placeholder = Въведете заглавие @@ -232,6 +235,8 @@ newtab-pocket-cta-button = Вземете { -pocket-brand-name } newtab-pocket-cta-text = Запазете статиите, които харесвате в { -pocket-brand-name } и заредете ума си с увлекателни четива. # A save to Pocket button that shows over the card thumbnail on hover. +newtab-pocket-image = + .aria-label = { -pocket-brand-name } newtab-pocket-save = Запазване newtab-pocket-saved = Запазено @@ -346,9 +351,16 @@ newtab-wallpaper-red-panda-yawns-in-a-tree = Червена панда се прозява на дърво newtab-wallpaper-white-mountains = Бели планини newtab-wallpaper-feature-highlight-button = Разбрах +feature-highlight-wallpaper = + .title = { -newtab-wallpaper-feature-highlight-header } + .aria-label = { -newtab-wallpaper-feature-highlight-content } ## New Tab Weather +# Variables: +# $provider (string) - Service provider for weather data +newtab-weather-see-forecast = + .title = Вижте прогнозата в { $provider } # Display options are: # - Simple: Displays a current weather condition icon and the current temperature # - Detailed: Include simple information plus a short text summary: e.g. "Mostly cloudy" @@ -362,6 +374,8 @@ newtab-weather-menu-change-temperature-units-fahrenheit = Превключване към Фаренхайт newtab-weather-menu-change-temperature-units-celsius = Превключване към Целзий newtab-weather-menu-learn-more = Научете повече +# This message is shown if user is working offline +newtab-weather-error-not-available = В момента няма данни за времето. ## Topic Labels @@ -386,7 +400,9 @@ newtab-topic-label-sports = Спорт newtab-topic-label-tech = Технологии newtab-topic-label-travel = Пътуване +newtab-topic-label-home = Дом и градина ## Topic Selection Modal newtab-topic-selection-button-maybe-later = Може би по-късно +newtab-topic-selection-button-pick-interests = Изберете вашите интереси diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/newtab/onboarding.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/newtab/onboarding.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/newtab/onboarding.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/newtab/onboarding.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -161,6 +161,8 @@ # Primary button string used on new user onboarding first screen showing multiple actions such as Set Default, Import from previous browser. mr2022-onboarding-easy-setup-primary-button-label = Запазване и продължаване +# Set Default action checkbox label used on new user onboarding first screen +mr2022-onboarding-easy-setup-set-default-checkbox-label = Задаване на { -brand-short-name } като браузър по подразбиране # Import action checkbox label used on new user onboarding first screen mr2022-onboarding-easy-setup-import-checkbox-label = Внасяне от предишен браузър @@ -185,6 +187,7 @@ ## MR2022 New User Set Default screen strings +mr2022-onboarding-set-default-primary-button-label = Задаване на { -brand-short-name } като браузър по подразбиране ## MR2022 Get Started screen strings. ## These strings will be used on the welcome page @@ -210,6 +213,7 @@ mr2022-onboarding-colorway-subtitle = Независимите гласове могат да променят културата. mr2022-onboarding-colorway-primary-button-label-continue = Запазване и продължаване mr2022-onboarding-existing-colorway-checkbox-label = Направете вашата { -firefox-home-brand-name } начална страница цветна +mr2022-onboarding-colorway-label-default = По подразбиране mr2022-onboarding-colorway-tooltip-default2 = .title = Текущи { -brand-short-name } цветове mr2022-onboarding-colorway-label-playmaker = Плеймейкър @@ -270,6 +274,7 @@ ## Add-ons Picker screen +amo-picker-title = Персонализирайте вашия { -brand-short-name } amo-picker-install-complete-label = Инсталирано ## The following screens have been updated to use security and privacy focused strings: @@ -278,3 +283,6 @@ ## New user time and familiarity survey strings onboarding-new-user-survey-legal-link-label = С избирането на „{ onboarding-new-user-survey-next-button-label }“ вие се съгласявате с Политиката за поверителност на { -brand-product-name }. + +## UI strings for the sidebar and vertical tabs + diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/originControls.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/originControls.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/originControls.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/originControls.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -26,3 +26,10 @@ origin-controls-toolbar-button-permission-needed = .label = { $extensionTitle } .tooltiptext = { $extensionTitle } +# Extension's toolbar button when quarantined. +# Note that the new line is intentionally part of the tooltip. +origin-controls-toolbar-button-quarantined = + .label = { $extensionTitle } + .tooltiptext = + { $extensionTitle } + Не е разрешен от { -vendor-short-name } на този сайт diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/policies/policies-descriptions.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/policies/policies-descriptions.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/policies/policies-descriptions.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/policies/policies-descriptions.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -16,10 +16,12 @@ policy-BlockAboutSupport = Забранява достъпа до страницата „about:support“. policy-Bookmarks = Създаване на отметки в лентата с инструменти „Отметки“, менюто „Отметки“ или в определена папка вътре в тях. policy-CertificatesDescription = Добавяне на сертификати или използване на вградени сертификати. +policy-DisableAppUpdate = Предотвратява обновяването на браузъра. policy-DisableDeveloperTools = Забранява достъпа до развойните инструменти. policy-DisableFirefoxStudies = Забранява на { -brand-short-name } да извършва изследвания. policy-DisablePasswordReveal = В запазените регистрации паролите не могат да бъдат показвани. policy-DisablePrivateBrowsing = Изключва поверителното разглеждане. +policy-DisableSystemAddonUpdate = Забранява на браузъра да инсталира и обновява системни добавки. policy-DisableTelemetry = Изключва телеметрията. policy-DisplayMenuBar = Показва лентата с менюто по подразбиране. policy-DNSOverHTTPS = Настройки на DNS през HTTPS. diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/preferences/permissions.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/preferences/permissions.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/preferences/permissions.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/preferences/permissions.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -108,6 +108,9 @@ ## Exceptions - Saved Passwords +permissions-exceptions-saved-passwords-window = + .title = Изключения - Запазени пароли + .style = { permissions-window2.style } ## Exceptions - Add-ons diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/preferences/preferences.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/preferences/preferences.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/preferences/preferences.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/preferences/preferences.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -293,7 +293,7 @@ # Variables: # $localeName (string) - Localized name of the locale to be used. use-system-locale = - .label = Използвайте настройките на вашата операционна система за „{ $localeName }“, за форматирането на датата, часовете, числата и други величини. + .label = Използване настройките на вашата операционна система за „{ $localeName }“, за форматирането на датата, часовете, числата и други величини. check-user-spelling = .label = Проверяване на правописа при въвеждане .accesskey = в diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/profile/default-bookmarks.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/profile/default-bookmarks.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/profile/default-bookmarks.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/profile/default-bookmarks.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,23 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +# This file intentionally uses hard-coded brand names instead of Fluent terms. +# This approach minimizes issues across multiple release channels and rebranded +# versions. + +default-bookmarks-title = Отметки +default-bookmarks-heading = Отметки +# link title for https://www.mozilla.org/firefox/central/ +default-bookmarks-getting-started = Първи стъпки +# Firefox links folder name +default-bookmarks-firefox-heading = Mozilla Firefox +# link title for https://www.mozilla.org/firefox/help/ +default-bookmarks-firefox-get-help = Получете помощ +# link title for https://www.mozilla.org/firefox/customize/ +default-bookmarks-firefox-customize = Персонализирайте Firefox +# Nightly builds only, link title for about:crashes +default-bookmarks-crashes = Всички сривове +# Nightly builds only, link title for https://planet.mozilla.org/ +default-bookmarks-planet = Планета Мозила diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/sanitize.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/sanitize.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/sanitize.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/sanitize.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -19,6 +19,7 @@ .title = Изчистване на цялата история .style = min-width: 34em clear-data-settings-label = При затваряне на { -brand-short-name } автоматично да бъдат изчиствани +sanitize-on-shutdown-description = Автоматично изчистване на всички отметнати елементи при затваряне на { -brand-short-name }. ## clear-time-duration-prefix is followed by a dropdown list, with ## values localized using clear-time-duration-value-* messages. @@ -40,6 +41,10 @@ .label = Последните два часа clear-time-duration-value-last-4-hours = .label = Последните четири часа +# Variables: +# $midnightTime (String) - Time of midnight (00:00 hours) - to inform the user that history will be cleared after midnight +clear-time-duration-value-since-midnight = + .label = От { $midnightTime } clear-time-duration-value-today = .label = Днес clear-time-duration-value-everything = @@ -54,9 +59,23 @@ item-history-and-downloads = .label = История на разглеждане и изтегляния .accesskey = с +item-history-form-data-downloads = + .label = История + .accesskey = И +item-history-form-data-downloads-description = Изчиства историята на страниците и изтеглянията, информацията за запазените формуляри и всички търсения item-cookies = .label = Бисквитки .accesskey = Б +# Variables: +# $amount (Number) - Amount of site data currently stored on disk +# $unit (String) - Abbreviation of the unit that $amount is in, e.g. "MB" +item-cookies-site-data-with-size = + .label = Бисквитки и данни на страници ({ $amount } { $unit }) + .accesskey = Б +item-cookies-site-data = + .label = Бисквитки и данни на страници + .accesskey = Б +item-cookies-site-data-description = Това действие може да ви отпише от някои сайтове или да изтрие нещата в пазарската количка item-active-logins = .label = Вписвания в сайтове .accesskey = В @@ -72,10 +91,18 @@ item-cached-content = .label = Временно кеширани файлове и страници .accesskey = В +item-cached-content-description = Изчиства кешираните данни, които помагат за по-бързото зареждане на сайтове item-form-search-history = .label = История на формуляри и търсения .accesskey = ф +item-site-prefs = + .label = Настройки на сайтове + .accesskey = Н +item-site-prefs-description = Нулиране на дадените разрешения и предпочитания за сайтовете до оригиналните им настройки data-section-label = Данни +item-site-settings = + .label = Настройки на сайтове + .accesskey = Н item-offline-apps = .label = Данни за сайтове без мрежа .accesskey = м @@ -86,6 +113,8 @@ .label = Изчистване sanitize-button-ok2 = .label = Изчистване +sanitize-button-ok-on-shutdown = + .label = Запазване на промените # The label for the default button between the user clicking it and the window # closing. Indicates the items are being cleared. sanitize-button-clearing = diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/screenshots.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/screenshots.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/screenshots.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/screenshots.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -56,5 +56,11 @@ ## +# This string represents the selection size area +# "×" here represents "by" (i.e 123 by 456) +# Variables: +# $width (Number) - The width of the selection region in pixels +# $height (Number) - The height of the selection region in pixels +screenshots-overlay-selection-region-size-3 = { $width } × { $height } screenshots-overlay-preview-face-label = .aria-label = Изберете тази област diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/shopping.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/shopping.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/shopping.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/shopping.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -2,12 +2,20 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +shopping-page-title = { -brand-product-name } Пазаруване ## Strings for the letter grade component. ## For now, we only support letter grades A, B, C, D and F. ## Letter A indicates the highest grade, and F indicates the lowest grade. ## Letters are hardcoded and cannot be localized. +# This string is displayed in a tooltip that appears when the user hovers +# over the letter grade component without a visible description. +# It is also used for screen readers. +# $letter (String) - The letter grade as A, B, C, D or F (hardcoded). +# $description (String) - The localized letter grade description. See shopping-letter-grade-description-* strings above. +shopping-letter-grade-tooltip = + .title = { $letter } - { $description } ## Strings for the shopping message-bar @@ -53,9 +61,11 @@ ## Strings for the advertisement +ad-by-fakespot = Реклама от { -fakespot-brand-name } ## Shopping survey strings. +shopping-survey-headline = Помогнете ни да подобрим { -brand-product-name } ## Shopping Feature Callout strings. ## "price tag" refers to the price tag icon displayed in the address bar to @@ -64,3 +74,9 @@ ## Onboarding message strings. +# Aria-label to make the "steps" of the shopping onboarding container visible to screen readers. +# Variables: +# $current (Int) - Number of the current page +# $total (Int) - Total number of pages +shopping-onboarding-welcome-steps-indicator-label = + .aria-label = Напредък: стъпка { $current } от { $total } diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/spotlight.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/spotlight.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/spotlight.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/spotlight.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -8,6 +8,7 @@ ## Firefox Focus promo message strings +spotlight-focus-promo-title = Вземете { -focus-brand-name } spotlight-focus-promo-subtitle = Сканирайте QR кода за изтегляне. spotlight-focus-promo-qr-code = .alt = Сканирайте QR кода, за да получите { -focus-brand-name } diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/sync.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/sync.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/sync.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/sync.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -27,4 +27,4 @@ fxa-menu-sign-out = .label = Излизане… fxa-menu-sync-title = Синхронизиране -fxa-menu-sync-description = Вашият интернет навсякъде +fxa-menu-sync-description = Вашият интернет е навсякъде с вас. diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/syncedTabs.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/syncedTabs.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/syncedTabs.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/syncedTabs.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -57,4 +57,4 @@ synced-tabs-context-sync-now = .label = Синхронизиране .accesskey = С -synced-tabs-fxa-sign-in = Впишете се и синхронизирате +synced-tabs-fxa-sign-in = Впишете се и синхронизирайте diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/tabbrowser.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/tabbrowser.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/tabbrowser.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/tabbrowser.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -75,6 +75,14 @@ ## Confirmation dialog when closing a window with more than one tab open, ## or when quitting when only one window is open. +# The singular form is not considered since this string is used only for multiple tabs. +# Variables: +# $tabCount (Number): The number of tabs that will be closed. +tabbrowser-confirm-close-tabs-title = + { NUMBER($tabCount) -> + [one] Да се затвори ли { $tabCount } раздел? + *[other] Да се затворят ли { $tabCount } раздела? + } tabbrowser-confirm-close-tabs-button = Затваряне на разделите ## Confirmation dialog when quitting using the menu and multiple windows are open. @@ -88,6 +96,7 @@ ## Confirmation dialog when quitting using the keyboard shortcut (Ctrl/Cmd+Q) ## Windows does not show a prompt on quit when using the keyboard shortcut by default. +tabbrowser-confirm-close-tabs-with-key-button = Изход от { -brand-short-name } ## Confirmation dialog when opening multiple tabs simultaneously @@ -103,9 +112,16 @@ ## Confirmation dialog for enabling caret browsing +tabbrowser-confirm-caretbrowsing-title = Навигация с каретка +tabbrowser-confirm-caretbrowsing-message = Натискането на F7 включва и изключва Навигацията с каретка. Тази възможност поставя подвижен курсор в страниците, позволявайки избирането на текст с клавиатура. Искате ли да включите този режим? +tabbrowser-confirm-caretbrowsing-checkbox = Да не се показва този диалогов прозорец отново. ## Confirmation dialog for closing all duplicate tabs +tabbrowser-confirm-close-duplicate-tabs-title = Внимание! +tabbrowser-confirm-close-duplicate-tabs-text = Ще държим отворен последния активен раздел +tabbrowser-confirm-close-all-duplicate-tabs-title = Да се затварят ли дублиращите се раздели? +tabbrowser-confirm-close-all-duplicate-tabs-button-closetabs = Затваряне на разделите ## diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/translations.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/translations.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/translations.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/translations.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -37,6 +37,9 @@ translations-panel-settings-manage-languages = .label = Управление на езици +translations-panel-settings-about = Относно преводите във { -brand-shorter-name } +translations-panel-settings-about2 = + .label = Относно преводите във { -brand-shorter-name } # Text displayed for the option to always translate a given language # Variables: # $language (string) - The localized display name of the detected language @@ -68,6 +71,8 @@ translations-panel-translate-cancel = .label = Отказ translations-panel-learn-more-link = Научете повече +translations-panel-intro-header = Опитайте поверителни преводи във { -brand-shorter-name } +translations-panel-intro-description = За ваша поверителност, преводите никога не напускат устройството ви. Очаквайте скоро нови езици и подобрения! translations-panel-error-translating = Възникна проблем при превода. Моля, опитайте отново. translations-panel-error-load-languages = Езиците не са заредени translations-panel-error-load-languages-hint = Проверете връзката си с интернет и опитайте отново. @@ -198,6 +203,8 @@ select-translations-panel-to-label = На # Text displayed above the try-another-source-language dropdown menu. select-translations-panel-try-another-language-label = Опитайте с друг изходен език +select-translations-panel-cancel-button = + .label = Отказ # Text displayed on the copy button before it is clicked. select-translations-panel-copy-button = .label = Копиране diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/unifiedExtensions.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/unifiedExtensions.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/unifiedExtensions.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/unifiedExtensions.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -36,5 +36,9 @@ ## Notifications +# .heading is processed by moz-message-bar to be used as a heading attribute +unified-extensions-mb-quarantined-domain-message-3 = + .heading = Някои разширения не са позволени + .message = С цел защита на вашите данни, някои разширения не могат да четат или променят данни на този сайт. Използвайте настройките на разширението за да разрешите тези действия на сайтове, които са ограничени от { -vendor-short-name }. unified-extensions-mb-quarantined-domain-learn-more = Научете повече .aria-label = Научете повече: Някои разширения не са позволени diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/browser/webauthnDialog.ftl firefox-esr-128.4.0esr/l10n-bg/browser/browser/webauthnDialog.ftl --- firefox-esr-128.3.1esr/l10n-bg/browser/browser/webauthnDialog.ftl 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/browser/webauthnDialog.ftl 2024-10-17 08:32:03.000000000 +0000 @@ -1,3 +1,27 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# Variables: +# $retriesLeft (Number): number of tries left +webauthn-pin-invalid-long-prompt = + { NUMBER($retriesLeft) -> + [one] Неправилен PIN. Остава ви само { $retriesLeft } опит преди да загубите достъпа до идентификационните данни на това устройство. + *[other] Неправилен PIN. Остават ви { $retriesLeft } опита преди да загубите достъпа до идентификационните данни на това устройство. + } +webauthn-pin-invalid-short-prompt = Неправилен PIN. Опитайте отново. +webauthn-pin-required-prompt = Моля, въведете PIN за вашето устройство. +webauthn-select-sign-result-unknown-account = Непознат акаунт +webauthn-a-passkey-label = Използвайте ключ-парола +webauthn-another-passkey-label = Използвайте друг ключ-парола +# Variables: +# $domain (String): the domain of the site. +webauthn-specific-passkey-label = Ключ-парола за { $domain } +# Variables: +# $retriesLeft (Number): number of tries left +webauthn-uv-invalid-long-prompt = + { NUMBER($retriesLeft) -> + [one] Проверката на потребител е неуспешна. Остава само { $retriesLeft } опит. Опитайте отново. + *[other] Проверката на потребител е неуспешна. Остават { $retriesLeft } опита. Опитайте отново. + } +webauthn-uv-invalid-short-prompt = Проверката за потребител е неуспешна. Опитайте отново. diff -Nru firefox-esr-128.3.1esr/l10n-bg/browser/chrome/browser/browser.properties firefox-esr-128.4.0esr/l10n-bg/browser/chrome/browser/browser.properties --- firefox-esr-128.3.1esr/l10n-bg/browser/chrome/browser/browser.properties 2024-08-20 07:41:02.000000000 +0000 +++ firefox-esr-128.4.0esr/l10n-bg/browser/chrome/browser/browser.properties 2024-10-17 08:32:03.000000000 +0000 @@ -2,115 +2,94 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -nv_timeout=Просрочено време -openFile=Отваряне на файл - -droponhometitle=Избиране на начална страница -droponhomemsg=Бихте ли желали този документ да бъде вашата нова начална страница? -droponhomemsgMultiple=Бихте ли желали тези документи да бъдат вашата нова начална страница? - +nv_timeout = Просрочено време +openFile = Отваряне на файл +droponhometitle = Избиране на начална страница +droponhomemsg = Бихте ли желали този документ да бъде вашата нова начална страница? +droponhomemsgMultiple = Бихте ли желали тези документи да бъдат вашата нова начална страница? # context menu strings - # LOCALIZATION NOTE (contextMenuSearch): %1$S is the search engine, # %2$S is the selection string. -contextMenuSearch=Търсене с %1$S за „%2$S“ -contextMenuSearch.accesskey=Т -contextMenuPrivateSearch=Търсене в поверителен прозорец +contextMenuSearch = Търсене с %1$S за „%2$S“ +contextMenuSearch.accesskey = Т +contextMenuPrivateSearch = Търсене в поверителен прозорец # LOCALIZATION NOTE (contextMenuPrivateSearchOtherEngine): %S is the search # engine name as set for Private Browsing mode. This label is only used when # this engine is different from the default engine name used in normal mode. -contextMenuPrivateSearchOtherEngine=Търсене с %S в поверителен прозорец - +contextMenuPrivateSearchOtherEngine = Търсене с %S в поверителен прозорец # bookmark dialog strings - -bookmarkAllTabsDefault=[Име на папка] - -unsignedAddonsDisabled.message=Една или повече добавки са непроверени и бяха изключени. -unsignedAddonsDisabled.learnMore.label=Научете повече -unsignedAddonsDisabled.learnMore.accesskey=Н - +bookmarkAllTabsDefault = [Име на папка] +unsignedAddonsDisabled.message = Една или повече добавки са непроверени и бяха изключени. +unsignedAddonsDisabled.learnMore.label = Научете повече +unsignedAddonsDisabled.learnMore.accesskey = Н # LOCALIZATION NOTE (geolocationLastAccessIndicatorText): %S is the relative time of the most recent geolocation access (e.g. 5 min. ago) -geolocationLastAccessIndicatorText=Последен достъп %S - +geolocationLastAccessIndicatorText = Последен достъп %S # LOCALIZATION NOTE (openProtocolHandlerPermissionEntryLabel): %S is the scheme of the protocol the site may open an application for. For example: mailto - -crashedpluginsMessage.title=Приставката %S се срина. -crashedpluginsMessage.reloadButton.label=Презареждане на страницата -crashedpluginsMessage.reloadButton.accesskey=П -crashedpluginsMessage.submitButton.label=Изпращане на доклад за срив -crashedpluginsMessage.submitButton.accesskey=И -crashedpluginsMessage.learnMore=Научете повече… - +openProtocolHandlerPermissionEntryLabel = %S:// връзки +crashedpluginsMessage.title = Приставката %S се срина. +crashedpluginsMessage.reloadButton.label = Презареждане на страницата +crashedpluginsMessage.reloadButton.accesskey = П +crashedpluginsMessage.submitButton.label = Изпращане на доклад за срив +crashedpluginsMessage.submitButton.accesskey = И +crashedpluginsMessage.learnMore = Научете повече… # Keyword fixup messages # LOCALIZATION NOTE (keywordURIFixup.message): Used when the user tries to visit # a local host page, by the time the DNS request recognizes it, we have already # loaded a search page for the given word. An infobar then asks to the user # whether he rather wanted to visit the host. %S is the recognized host. -keywordURIFixup.message=Имахте предвид да посетите %S? -keywordURIFixup.goTo=Да, към %S -keywordURIFixup.goTo.accesskey=Д - +keywordURIFixup.message = Имахте предвид да посетите %S? +keywordURIFixup.goTo = Да, към %S +keywordURIFixup.goTo.accesskey = Д # Sanitize # LOCALIZATION NOTE (update.downloadAndInstallButton.label): %S is replaced by the # version of the update: "Update to 28.0". -update.downloadAndInstallButton.label=Обновяване до %S -update.downloadAndInstallButton.accesskey=О - -menuOpenAllInTabs.label=Отваряне на всички в раздели - +update.downloadAndInstallButton.label = Обновяване до %S +update.downloadAndInstallButton.accesskey = О +menuOpenAllInTabs.label = Отваряне на всички в раздели # Unified Back-/Forward Popup -tabHistory.goBack=Назад към тази страница -tabHistory.goForward=Напред към тази страница - +tabHistory.goBack = Назад към тази страница +tabHistory.goForward = Напред към тази страница # URL Bar -pasteAndGo.label=Поставяне и посещаване +pasteAndGo.label = Поставяне и посещаване # LOCALIZATION NOTE (reloadButton.tooltip): # %S is the keyboard shortcut for reloading the current page -reloadButton.tooltip=Презареждане на текущата страница (%S) +reloadButton.tooltip = Презареждане на текущата страница (%S) # LOCALIZATION NOTE (stopButton.tooltip): # %S is the keyboard shortcut for stopping loading the page -stopButton.tooltip=Спиране зареждането на страницата (%S) +stopButton.tooltip = Спиране зареждането на страницата (%S) # LOCALIZATION NOTE (urlbar-zoom-button.tooltip): # %S is the keyboard shortcut for resetting the zoom level to 100% -urlbar-zoom-button.tooltip=Нулиране на мащабирането (%S) +urlbar-zoom-button.tooltip = Нулиране на мащабирането (%S) # LOCALIZATION NOTE (reader-mode-button.tooltip): # %S is the keyboard shortcut for entering/exiting reader view -reader-mode-button.tooltip=Превключва изгледа за четене (%S) - +reader-mode-button.tooltip = Превключва изгледа за четене (%S) # LOCALIZATION NOTE(zoom-button.label): %S is the current page zoom level, # %% will be displayed as a single % character (% is commonly used to define # format specifiers, so it needs to be escaped). zoom-button.label = %S%% - # LOCALIZATION NOTE(zoom-button.aria-label): %S is the current page zoom level, # %% will be displayed as a single % character (% is commonly used to define # format specifiers, so it needs to be escaped). - # General bookmarks button # LOCALIZATION NOTE (bookmarksMenuButton.tooltip): # %S is the keyboard shortcut for "Show All Bookmarks" -bookmarksMenuButton.tooltip=Показване на отметките (%S) - +bookmarksMenuButton.tooltip = Показване на отметките (%S) # Downloads button tooltip # LOCALIZATION NOTE (downloads.tooltip): # %S is the keyboard shortcut for "Downloads" -downloads.tooltip=Напредък на текущите изтегляния (%S) - +downloads.tooltip = Напредък на текущите изтегляния (%S) # New Window button tooltip # LOCALIZATION NOTE (newWindowButton.tooltip): # %S is the keyboard shortcut for "New Window" -newWindowButton.tooltip=Отваряне на нов прозорец (%S) - +newWindowButton.tooltip = Отваряне на нов прозорец (%S) # New Tab button tooltip # LOCALIZATION NOTE (newTabButton.tooltip): # %S is the keyboard shortcut for "New Tab" -newTabButton.tooltip=Отваряне на раздел (%S) -newTabContainer.tooltip=Отваряне на нов раздел (%S)\nЗа отваряне на раздел в изолатор натиснете и задръжте - +newTabButton.tooltip = Отваряне на раздел (%S) +newTabContainer.tooltip = Отваряне на нов раздел (%S)\nЗа отваряне на раздел в изолатор натиснете и задръжте # Canvas permission prompt # LOCALIZATION NOTE (canvas.siteprompt2): %S is hostname -canvas.allow2=Разрешаване - +canvas.allow2 = Разрешаване # WebAuthn prompts # LOCALIZATION NOTE (webauthn.userPresence): %S is hostname # LOCALIZATION NOTE (webauthn.registerDirectPrompt3): @@ -131,119 +110,99 @@ # LOCALIZATION NOTE (webauthn.pinAuthBlockedPrompt): %S is hostname # LOCALIZATION NOTE (webauthn.pinNotSetPrompt): %S is hostname # LOCALIZATION NOTE (webauthn.uvBlockedPrompt): %S is hostname -webauthn.cancel=Отказ -webauthn.cancel.accesskey=о -webauthn.proceed=Продължаване -webauthn.proceed.accesskey=п -webauthn.anonymize=Анонимизиране без значение - +webauthn.cancel = Отказ +webauthn.cancel.accesskey = о +webauthn.proceed = Продължаване +webauthn.proceed.accesskey = п +webauthn.anonymize = Анонимизиране без значение # Spoof Accept-Language prompt -privacy.spoof_english=Ако промените езика на английски ще бъдете по-трудни за идентификация и би могло да увеличи вашата поверителност. Желаете ли да бъдат правени заявки за английската версия на страниците? - - +privacy.spoof_english = Ако промените езика на английски ще бъдете по-трудни за идентификация и би могло да увеличи вашата поверителност. Желаете ли да бъдат правени заявки за английската версия на страниците? # LOCALIZATION NOTE (identity.identified.verifier, identity.identified.state_and_country, identity.ev.contentOwner2): # %S is the hostname of the site that is being displayed. -identity.identified.verifier=Проверено от: %S -identity.identified.verified_by_you=Добавено е изключение в защитата на тази страница. -identity.identified.state_and_country=%S, %S -identity.ev.contentOwner2=Сертификатът е издаден на: %S - +identity.identified.verifier = Проверено от: %S +identity.identified.verified_by_you = Добавено е изключение в защитата на тази страница. +identity.identified.state_and_country = %S, %S +identity.ev.contentOwner2 = Сертификатът е издаден на: %S # LOCALIZATION NOTE (identity.notSecure.label): # Keep this string as sho