From d8bbc7858622b6d9c278469aab701ca0b609cddf Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 15 May 2024 05:35:49 +0200 Subject: Merging upstream version 126.0. Signed-off-by: Daniel Baumann --- browser/actors/AboutReaderParent.sys.mjs | 2 +- browser/actors/ContextMenuChild.sys.mjs | 4 +- browser/actors/FormValidationChild.sys.mjs | 2 +- browser/actors/FormValidationParent.sys.mjs | 2 +- browser/actors/PluginParent.sys.mjs | 2 +- browser/actors/PromptParent.sys.mjs | 188 +--- browser/actors/RefreshBlockerChild.sys.mjs | 6 +- browser/actors/SearchSERPTelemetryChild.sys.mjs | 52 +- browser/actors/WebRTCChild.sys.mjs | 8 +- browser/actors/WebRTCParent.sys.mjs | 6 +- browser/app/Makefile.in | 14 +- browser/app/macbuild/Contents/Info.plist.in | 3 + browser/app/nmhproxy/Cargo.toml | 2 + browser/app/nmhproxy/src/commands.rs | 162 +++ browser/app/nmhproxy/src/main.rs | 9 +- browser/app/profile/firefox.js | 85 +- browser/base/content/aboutDialog-appUpdater.js | 2 +- browser/base/content/aboutDialog.xhtml | 2 +- browser/base/content/appmenu-viewcache.inc.xhtml | 35 +- browser/base/content/browser-a11yUtils.js | 8 +- browser/base/content/browser-addons.js | 33 +- browser/base/content/browser-allTabsMenu.js | 6 +- browser/base/content/browser-box.inc.xhtml | 1 + browser/base/content/browser-captivePortal.js | 2 +- browser/base/content/browser-commands.js | 576 +++++++++++ browser/base/content/browser-context.inc | 2 +- browser/base/content/browser-ctrlTab.js | 4 +- .../content/browser-data-submission-info-bar.js | 2 +- .../content/browser-fullScreenAndPointerLock.js | 43 +- browser/base/content/browser-gestureSupport.js | 10 +- browser/base/content/browser-menubar.inc | 5 +- browser/base/content/browser-pageActions.js | 2 +- browser/base/content/browser-places.js | 14 +- browser/base/content/browser-sets.inc | 38 +- browser/base/content/browser-sidebar.js | 674 ------------- browser/base/content/browser-siteIdentity.js | 14 +- .../base/content/browser-sitePermissionPanel.js | 4 +- browser/base/content/browser-siteProtections.js | 30 +- browser/base/content/browser-sync.js | 10 +- browser/base/content/browser-tabsintitlebar.js | 2 +- browser/base/content/browser-thumbnails.js | 4 +- browser/base/content/browser-toolbarKeyNav.js | 2 +- browser/base/content/browser.css | 13 +- browser/base/content/browser.js | 894 ++--------------- browser/base/content/browser.js.globals | 22 +- browser/base/content/browser.xhtml | 6 +- browser/base/content/contentTheme.js | 21 +- browser/base/content/main-popupset.inc.xhtml | 26 +- browser/base/content/navigator-toolbox.inc.xhtml | 9 +- browser/base/content/nsContextMenu.js | 58 +- browser/base/content/pageinfo/pageInfo.js | 40 +- browser/base/content/pageinfo/pageInfo.xhtml | 4 + browser/base/content/pageinfo/permissions.js | 2 +- browser/base/content/pageinfo/security.js | 2 +- browser/base/content/sanitizeDialog.js | 23 +- browser/base/content/tabbrowser-tab.js | 26 +- browser/base/content/tabbrowser-tabs.js | 54 +- browser/base/content/tabbrowser.js | 83 +- .../content/test/about/browser_aboutCertError.js | 4 +- .../alerts/browser_notification_open_settings.js | 2 +- browser/base/content/test/alerts/head.js | 2 +- .../browser_captivePortal_certErrorUI.js | 2 +- browser/base/content/test/contextMenu/browser.toml | 4 +- .../test/contextMenu/browser_contextmenu.js | 2 +- .../contextMenu/browser_contextmenu_badiframe.js | 2 +- .../browser_contextmenu_save_blocked.js | 2 +- .../browser_strip_on_share_nested_link.js | 162 +++ .../content/test/contextMenu/contextmenu_common.js | 4 +- .../test/contextMenu/subtst_contextmenu.html | 4 +- .../contextMenu/subtst_contextmenu_webext.html | 2 +- .../browser_favicon_change_not_in_document.js | 8 +- .../content/test/favicons/browser_favicon_load.js | 2 +- .../test/favicons/browser_favicon_nostore.js | 13 +- .../test/favicons/browser_favicon_referer.js | 4 +- .../test/favicons/browser_missing_favicon.js | 2 +- .../base/content/test/forms/browser_selectpopup.js | 4 +- .../test/forms/browser_selectpopup_colors.js | 2 +- .../content/test/forms/browser_selectpopup_dir.js | 2 +- .../test/forms/browser_selectpopup_large.js | 2 +- .../test/forms/browser_selectpopup_minFontSize.js | 2 +- .../forms/browser_selectpopup_text_transform.js | 2 +- .../test/forms/browser_selectpopup_user_input.js | 2 +- .../test/forms/browser_selectpopup_width.js | 2 +- .../test/forms/browser_selectpopup_xhtml.js | 2 +- .../fullscreen/browser_fullscreen_context_menu.js | 4 +- .../fullscreen/browser_fullscreen_window_focus.js | 2 +- browser/base/content/test/fullscreen/head.js | 2 +- browser/base/content/test/general/browser.toml | 15 +- .../content/test/general/browser_accesskeys.js | 4 +- .../test/general/browser_alltabslistener.js | 15 +- .../browser_beforeunload_duplicate_dialogs.js | 4 +- .../base/content/test/general/browser_bug356571.js | 2 +- .../base/content/test/general/browser_bug417483.js | 2 +- .../base/content/test/general/browser_bug537013.js | 2 +- .../base/content/test/general/browser_bug565575.js | 2 +- .../base/content/test/general/browser_bug567306.js | 2 +- .../base/content/test/general/browser_bug609700.js | 6 +- .../base/content/test/general/browser_bug623893.js | 2 +- .../base/content/test/general/browser_bug676619.js | 12 +- .../base/content/test/general/browser_bug734076.js | 6 +- .../test/general/browser_bug763468_perwindowpb.js | 2 +- .../test/general/browser_bug767836_perwindowpb.js | 2 +- .../base/content/test/general/browser_bug817947.js | 2 +- .../base/content/test/general/browser_clipboard.js | 6 +- .../test/general/browser_clipboard_pastefile.js | 4 +- .../browser_domFullscreen_fullscreenMode.js | 6 +- .../test/general/browser_double_close_tab.js | 2 +- .../content/test/general/browser_focusonkeydown.js | 2 +- .../test/general/browser_fullscreen-window-open.js | 8 +- ...rowser_invalid_uri_back_forward_manipulation.js | 2 +- .../content/test/general/browser_newWindowDrop.js | 2 +- .../content/test/general/browser_plainTextLinks.js | 2 +- .../test/general/browser_private_no_prompt.js | 4 +- .../test/general/browser_remoteTroubleshoot.js | 4 +- .../test/general/browser_save_link-perwindowpb.js | 4 +- .../browser_save_link_when_window_navigates.js | 6 +- .../browser_save_private_link_perwindowpb.js | 6 +- .../content/test/general/browser_save_video.js | 2 +- .../base/content/test/general/browser_tabfocus.js | 4 +- .../content/test/general/browser_tabs_owner.js | 6 +- .../general/browser_viewSourceInTabOnViewSource.js | 6 +- .../content/test/general/browser_zbug569342.js | 2 +- .../base/content/test/general/download_page.html | 12 +- browser/base/content/test/general/head.js | 4 +- browser/base/content/test/general/video.ogg | Bin 285310 -> 0 bytes browser/base/content/test/general/video.webm | Bin 0 -> 222879 bytes browser/base/content/test/general/web_video.html | 2 +- browser/base/content/test/general/web_video1.ogv | Bin 28942 -> 0 bytes .../content/test/general/web_video1.ogv^headers^ | 3 - browser/base/content/test/general/web_video1.webm | Bin 0 -> 17555 bytes .../content/test/general/web_video1.webm^headers^ | 3 + .../browser_historySwipeAnimation.js | 2 +- .../test/keyboard/browser_toolbarButtonKeyPress.js | 93 +- .../content/test/metaTags/browser_bad_meta_tags.js | 11 +- .../content/test/metaTags/browser_meta_tags.js | 8 +- .../outOfProcess/browser_basic_outofprocess.js | 9 +- browser/base/content/test/pageActions/head.js | 2 +- browser/base/content/test/pageinfo/browser.toml | 2 +- .../browser_pageinfo_firstPartyIsolation.js | 2 +- .../test/pageinfo/browser_pageinfo_iframe_media.js | 2 +- .../test/pageinfo/browser_pageinfo_image_info.js | 2 +- .../test/pageinfo/browser_pageinfo_images.js | 4 +- .../test/pageinfo/browser_pageinfo_permissions.js | 12 +- .../content/test/pageinfo/browser_pageinfo_rtl.js | 25 +- .../test/pageinfo/browser_pageinfo_security.js | 21 +- .../pageinfo/browser_pageinfo_separate_private.js | 4 +- .../test/pageinfo/browser_pageinfo_svg_image.js | 2 +- browser/base/content/test/pageinfo/image.html | 2 +- .../performance/StartupContentSubframe.sys.mjs | 2 +- .../test/performance/browser_preferences_usage.js | 2 +- .../test/performance/browser_startup_content.js | 10 +- .../performance/browser_startup_mainthreadio.js | 1 + .../content/test/performance/browser_tabdetach.js | 4 +- .../content/test/performance/browser_tabopen.js | 2 +- .../test/performance/browser_tabopen_squeeze.js | 2 +- .../browser_tabstrip_overflow_underflow.js | 4 +- .../content/test/performance/browser_tabswitch.js | 14 +- .../test/performance/browser_windowclose.js | 2 +- .../content/test/performance/browser_windowopen.js | 2 +- browser/base/content/test/performance/head.js | 21 +- .../test/permissions/browser_autoplay_blocked.js | 2 +- .../browser_canvas_fingerprinting_resistance.js | 8 +- .../permissions/browser_site_scoped_permissions.js | 89 +- .../browser_temporary_permissions_navigation.js | 2 +- browser/base/content/test/plugins/head.js | 4 +- .../browser_popupNotification.js | 22 +- .../browser_popupNotification_2.js | 20 +- .../browser_popupNotification_3.js | 12 +- .../browser_popupNotification_4.js | 10 +- .../browser_popupNotification_5.js | 14 +- .../browser_popupNotification_accesskey.js | 2 +- .../browser_popupNotification_keyboard.js | 6 +- .../browser_popupNotification_no_anchors.js | 6 +- .../browser_popupNotification_security_delay.js | 2 +- .../test/popups/browser_popup_close_main_window.js | 6 +- .../test/protectionsUI/browser_protectionsUI.js | 2 +- .../browser_protectionsUI_cookies_subview.js | 2 +- .../protectionsUI/browser_protectionsUI_fetch.js | 2 +- .../browser_protectionsUI_info_message.js | 4 +- browser/base/content/test/referrer/head.js | 2 +- .../sanitize/browser_cookiePermission_aboutURL.js | 4 +- .../test/sanitize/browser_sanitize-timespans.js | 2 +- .../test/sanitize/browser_sanitize-timespans_v2.js | 2 +- .../test/sanitize/browser_sanitizeDialog_v2.js | 4 +- .../browser_sanitizeDialog_v2_dataSizes.js | 65 +- browser/base/content/test/sanitize/head.js | 4 +- .../content/test/sidebar/browser_sidebar_move.js | 14 +- .../siteIdentity/browser_identityBlock_focus.js | 2 +- .../browser_identityPopup_clearSiteData.js | 2 +- .../siteIdentity/browser_navigation_failures.js | 4 +- .../browser_secure_transport_insecure_scheme.js | 8 +- browser/base/content/test/siteIdentity/head.js | 12 +- .../test/static/browser_all_files_referenced.js | 26 +- .../content/test/static/browser_parsable_css.js | 14 +- .../content/test/static/browser_parsable_script.js | 8 +- browser/base/content/test/static/head.js | 2 +- .../test/sync/browser_contextmenu_sendtab.js | 2 +- .../content/test/sync/browser_fxa_web_channel.js | 16 +- browser/base/content/test/sync/browser_sync.js | 4 +- .../browser_abort_when_in_modal_state.js | 8 +- .../tabPrompts/browser_auth_spoofing_protection.js | 4 +- .../test/tabPrompts/browser_contentOrigins.js | 6 - .../test/tabPrompts/browser_windowPrompt.js | 16 - .../tabcrashed/browser_aboutRestartRequired.toml | 10 +- .../browser_aboutRestartRequired_noForkServer.toml | 8 + browser/base/content/test/tabcrashed/head.js | 8 +- browser/base/content/test/tabs/browser.toml | 2 + ...low_process_switches_despite_related_browser.js | 2 +- .../base/content/test/tabs/browser_audioTabIcon.js | 4 +- .../browser_e10s_about_page_triggeringprincipal.js | 4 +- .../test/tabs/browser_e10s_about_process.js | 4 +- .../content/test/tabs/browser_lastSeenActive.js | 260 +++++ .../test/tabs/browser_lazy_tab_browser_events.js | 14 +- ...e_and_url_prefilled_normal_page_blank_target.js | 4 +- ...itle_and_url_prefilled_normal_page_by_script.js | 2 +- ...itle_and_url_prefilled_normal_page_no_target.js | 2 +- ...e_and_url_prefilled_normal_page_other_target.js | 4 +- .../tabs/browser_long_data_url_label_truncation.js | 2 +- ...tiselect_tabs_move_to_new_window_contextmenu.js | 16 +- .../browser_new_tab_bookmarks_toolbar_height.js | 4 +- ...wser_new_tab_in_privilegedabout_process_pref.js | 2 +- .../base/content/test/tabs/browser_new_tab_url.js | 4 +- ...wser_open_newtab_start_observer_notification.js | 4 +- .../tabs/browser_pinnedTabs_closeByKeyboard.js | 4 +- .../tabs/browser_privilegedmozilla_process_pref.js | 2 +- .../content/test/tabs/browser_removeTabs_order.js | 2 +- .../tabs/browser_tab_label_picture_in_picture.js | 2 +- .../test/tabs/browser_tab_manager_visibility.js | 4 +- .../base/content/test/tabs/browser_tab_preview.js | 171 +++- .../base/content/test/tabs/browser_tab_tooltips.js | 2 +- .../content/test/tabs/browser_tabswitch_select.js | 4 +- .../test/tabs/browser_tabswitch_updatecommands.js | 2 +- ...owser_viewsource_of_data_URI_in_file_process.js | 2 +- .../test/tabs/browser_window_open_modifiers.js | 2 +- .../common_link_in_tab_title_and_url_prefilled.js | 2 +- .../browser_extension_update_background.js | 6 +- ...browser_extension_update_background_noprompt.js | 2 +- .../test/webextensions/browser_legacy_webext.xpi | Bin 4243 -> 362 bytes .../browser_permissions_installTrigger.js | 6 + .../browser_permissions_local_file.js | 13 + .../browser_permissions_mozAddonManager.js | 13 + .../browser_permissions_pointerevent.js | 6 +- .../browser_update_checkForUpdates.js | 2 +- .../webextensions/browser_webext_nopermissions.xpi | Bin 4273 -> 7500 bytes .../webextensions/browser_webext_permissions.xpi | Bin 16602 -> 19923 bytes .../test/webextensions/browser_webext_update1.xpi | Bin 4271 -> 326 bytes .../test/webextensions/browser_webext_update2.xpi | Bin 4291 -> 343 bytes .../webextensions/browser_webext_update_icon1.xpi | Bin 16545 -> 12581 bytes .../webextensions/browser_webext_update_icon2.xpi | Bin 16564 -> 12599 bytes .../webextensions/browser_webext_update_perms1.xpi | Bin 4273 -> 320 bytes .../webextensions/browser_webext_update_perms2.xpi | Bin 4282 -> 331 bytes browser/base/content/test/webextensions/head.js | 2 +- .../webrtc/browser_devices_get_user_media_anim.js | 4 +- .../browser_devices_get_user_media_by_device_id.js | 2 +- .../webrtc/browser_devices_get_user_media_grace.js | 6 +- .../webrtc/browser_devices_select_audio_output.js | 2 +- .../content/test/webrtc/browser_webrtc_hooks.js | 28 +- browser/base/content/test/webrtc/head.js | 6 +- browser/base/content/test/zoom/browser.toml | 2 +- .../test/zoom/browser_sitespecific_video_zoom.js | 2 +- .../content/test/zoom/browser_zoom_commands.js | 4 +- browser/base/content/test/zoom/head.js | 8 +- browser/base/content/titlebar-items.inc.xhtml | 2 +- browser/base/content/utilityOverlay.js | 4 +- browser/base/content/webext-panels.js | 12 +- browser/base/content/webrtcIndicator.js | 2 +- browser/base/jar.mn | 2 +- browser/components/BrowserContentHandler.sys.mjs | 51 +- browser/components/BrowserGlue.sys.mjs | 102 +- .../tests/browser/browser_sessionRestore.js | 2 +- .../components/aboutlogins/tests/browser/head.js | 2 +- browser/components/aboutwelcome/.eslintrc.js | 2 - .../aboutwelcome/actors/AboutWelcomeParent.sys.mjs | 2 +- .../aboutwelcome/content-src/aboutwelcome.scss | 139 ++- .../components/MultiStageAboutWelcome.jsx | 16 +- .../components/MultiStageProtonScreen.jsx | 55 +- .../aboutwelcome/content-src/components/Themes.jsx | 9 +- .../aboutwelcome/content/aboutwelcome.bundle.js | 36 +- .../aboutwelcome/content/aboutwelcome.css | 106 +- .../browser_aboutwelcome_configurable_ui.js | 2 +- .../browser/browser_aboutwelcome_toolbar_button.js | 2 +- .../tests/unit/MultiStageAWProton.test.jsx | 23 + .../tests/unit/MultiStageAboutWelcome.test.jsx | 66 ++ .../aboutwelcome/tests/unit/unit-entry.js | 14 +- browser/components/asrouter/.eslintrc.js | 2 - .../asrouter/actors/ASRouterChild.sys.mjs | 6 +- browser/components/asrouter/bin/import-rollouts.js | 4 - .../asrouter/content-src/asrouter-utils.mjs | 6 +- .../components/ASRouterAdmin/ASRouterAdmin.jsx | 16 +- .../BackgroundTaskMessagingExperiment.schema.json | 69 +- .../schemas/MessagingExperiment.schema.json | 415 ++++---- .../asrouter/content-src/schemas/make-schemas.py | 3 - .../OnboardingMessage/WhatsNewMessage.schema.json | 73 -- .../asrouter/content/asrouter-admin.bundle.js | 52 +- .../asrouter/docs/targeting-attributes.md | 11 - .../components/asrouter/modules/ASRouter.sys.mjs | 47 +- .../ASRouterParentProcessMessageHandler.sys.mjs | 9 +- .../asrouter/modules/ASRouterTargeting.sys.mjs | 9 - .../components/asrouter/modules/ActorConstants.mjs | 46 + .../asrouter/modules/ActorConstants.sys.mjs | 49 - .../asrouter/modules/MomentsPageHub.sys.mjs | 2 +- .../modules/OnboardingMessageProvider.sys.mjs | 100 ++ .../asrouter/modules/PanelTestProvider.sys.mjs | 128 --- .../asrouter/modules/ToolbarBadgeHub.sys.mjs | 36 - .../asrouter/modules/ToolbarPanelHub.sys.mjs | 544 ---------- browser/components/asrouter/moz.build | 4 +- browser/components/asrouter/package.json | 1 + .../tests/InflightAssetsMessageProvider.sys.mjs | 112 +-- .../tests/NimbusRolloutMessageProvider.sys.mjs | 421 ++++++++ .../components/asrouter/tests/browser/browser.toml | 5 + .../tests/browser/browser_asrouter_bug1761522.js | 2 +- .../asrouter/tests/browser/browser_asrouter_cfr.js | 117 --- .../tests/browser/browser_asrouter_keyboard_cfr.js | 162 +++ .../browser_asrouter_milestone_message_cfr.js | 78 ++ .../browser/browser_asrouter_momentspagehub.js | 4 +- .../asrouter/tests/unit/ASRouter.test.js | 107 -- .../asrouter/tests/unit/ASRouterChild.test.js | 3 +- .../asrouter/tests/unit/ASRouterParent.test.js | 2 +- .../ASRouterParentProcessMessageHandler.test.js | 27 +- .../asrouter/tests/unit/ToolbarBadgeHub.test.js | 166 ---- .../asrouter/tests/unit/ToolbarPanelHub.test.js | 760 -------------- .../content-src/components/ASRouterAdmin.test.jsx | 44 +- .../components/asrouter/tests/unit/unit-entry.js | 2 +- browser/components/asrouter/tests/xpcshell/head.js | 4 - .../tests/xpcshell/test_PanelTestProvider.js | 1 - browser/components/asrouter/yamscripts.yml | 1 + browser/components/backup/.eslintrc.js | 9 - browser/components/backup/BackupResources.sys.mjs | 24 +- browser/components/backup/BackupService.sys.mjs | 129 ++- browser/components/backup/content/debug.html | 46 + browser/components/backup/content/debug.js | 59 ++ .../components/backup/docs/backup-resources.rst | 18 + browser/components/backup/docs/index.rst | 1 + browser/components/backup/jar.mn | 9 + browser/components/backup/metrics.yaml | 276 ++++++ browser/components/backup/moz.build | 10 + .../backup/resources/AddonsBackupResource.sys.mjs | 100 ++ .../backup/resources/BackupResource.sys.mjs | 83 +- .../backup/resources/CookiesBackupResource.sys.mjs | 25 + .../CredentialsAndSecurityBackupResource.sys.mjs | 53 + .../resources/FormHistoryBackupResource.sys.mjs | 25 + .../resources/MiscDataBackupResource.sys.mjs | 101 ++ .../backup/resources/PlacesBackupResource.sys.mjs | 91 ++ .../resources/PreferencesBackupResource.sys.mjs | 98 ++ .../resources/SessionStoreBackupResource.sys.mjs | 53 + browser/components/backup/tests/xpcshell/head.js | 167 ++++ .../backup/tests/xpcshell/test_BackupResource.js | 77 ++ .../backup/tests/xpcshell/test_BrowserResource.js | 63 -- .../tests/xpcshell/test_MiscDataBackupResource.js | 113 +++ .../tests/xpcshell/test_PlacesBackupResource.js | 226 +++++ .../xpcshell/test_PreferencesBackupResource.js | 132 +++ .../backup/tests/xpcshell/test_createBackup.js | 74 ++ .../backup/tests/xpcshell/test_measurements.js | 547 ++++++++++- .../components/backup/tests/xpcshell/xpcshell.toml | 14 +- .../content/ContentAnalysis.sys.mjs | 99 +- .../contextualidentity/test/browser/browser_eme.js | 2 +- .../test/browser/browser_favicon.js | 2 +- .../browser_forgetAPI_EME_forgetThisSite.js | 2 +- .../test/browser/browser_forgetaboutsite.js | 6 +- .../test/browser/browser_guessusercontext.js | 2 +- .../test/browser/browser_middleClick.js | 2 +- .../test/browser/browser_serviceworkers.js | 2 +- .../test/browser/browser_windowName.js | 4 +- .../test/browser/file_set_storages.html | 2 +- .../content/protectionsPanel.inc.xhtml | 4 +- .../customizableui/CustomizableUI.sys.mjs | 4 +- .../customizableui/CustomizableWidgets.sys.mjs | 4 +- .../customizableui/CustomizeMode.sys.mjs | 20 +- .../components/customizableui/content/panelUI.js | 43 +- .../test/browser_1087303_button_fullscreen.js | 2 +- .../test/browser_1087303_button_preferences.js | 2 +- ...84275_PanelMultiView_toggle_with_other_popup.js | 2 +- ...wser_885052_customize_mode_observers_disabed.js | 4 +- .../browser_940307_panel_click_closure_handling.js | 7 +- .../test/browser_947914_button_newPrivateWindow.js | 2 +- .../test/browser_947914_button_newWindow.js | 2 +- .../test/browser_947914_button_zoomReset.js | 2 +- .../browser_972267_customizationchange_events.js | 2 +- .../test/browser_customization_context_menus.js | 10 +- .../test/browser_editcontrols_update.js | 2 +- .../test/browser_open_in_lazy_tab.js | 2 +- .../test/browser_panelUINotifications.js | 12 +- ...UINotifications_fullscreen_noAutoHideToolbar.js | 2 +- .../test/browser_panelUINotifications_modals.js | 4 - .../browser_panelUINotifications_multiWindow.js | 6 +- .../test/browser_switch_to_customize_mode.js | 2 +- .../test/browser_synced_tabs_menu.js | 6 +- browser/components/customizableui/test/head.js | 12 +- browser/components/doh/DoHConfig.sys.mjs | 2 +- .../browser/browser_remoteSettings_newProfile.js | 2 +- .../components/enterprisepolicies/Policies.sys.mjs | 91 +- .../helpers/ProxyPolicies.sys.mjs | 24 + .../helpers/WebsiteFilter.sys.mjs | 4 +- .../schemas/policies-schema.json | 16 + .../enterprisepolicies/tests/browser/browser.toml | 2 + .../browser/browser_policy_pageinfo_permissions.js | 4 +- .../browser/browser_policy_translateenabled.js | 53 + .../browser_policy_disable_app_update.js | 2 +- .../browser_policy_disable_developer_tools.js | 2 +- .../enterprisepolicies/tests/browser/head.js | 2 +- .../enterprisepolicies/tests/xpcshell/head.js | 2 +- .../tests/xpcshell/test_extensionsettings.js | 115 ++- .../tests/xpcshell/test_requestedlocales.js | 6 +- .../tests/xpcshell/test_simple_pref_policies.js | 54 + .../tests/xpcshell/test_sorted_alphabetically.js | 2 +- .../tests/xpcshell/xpcshell.toml | 5 +- .../components/extensions/parent/ext-browser.js | 8 +- .../parent/ext-chrome-settings-overrides.js | 2 +- .../components/extensions/parent/ext-commands.js | 7 +- .../extensions/parent/ext-devtools-panels.js | 42 +- browser/components/extensions/parent/ext-tabs.js | 8 +- .../components/extensions/schemas/commands.json | 6 + browser/components/extensions/schemas/tabs.json | 4 +- .../extensions/test/browser/browser.toml | 10 +- .../browser/browser_ext_browserAction_context.js | 6 +- .../browser_ext_browserAction_contextMenu.js | 6 - ...er_ext_browserAction_popup_preload_smoketest.js | 2 +- .../browser_ext_chrome_settings_overrides_home.js | 10 +- .../test/browser/browser_ext_commands_onCommand.js | 14 +- .../browser_ext_contentscript_nontab_connect.js | 6 + .../browser_ext_contentscript_sender_url.js | 21 +- .../test/browser/browser_ext_contextMenus_icons.js | 6 +- .../test/browser/browser_ext_tabs_onCreated.js | 2 +- .../browser/browser_ext_url_overrides_newtab.js | 2 +- .../test/browser/browser_unified_extensions.js | 4 + .../components/firefoxview/HistoryController.mjs | 188 ++++ browser/components/firefoxview/OpenTabs.sys.mjs | 55 +- .../firefoxview/SyncedTabsController.sys.mjs | 333 +++++++ browser/components/firefoxview/card-container.css | 6 +- browser/components/firefoxview/card-container.mjs | 2 +- .../firefox-view-tabs-setup-manager.sys.mjs | 17 +- browser/components/firefoxview/firefoxview.css | 19 +- browser/components/firefoxview/firefoxview.html | 12 +- browser/components/firefoxview/firefoxview.mjs | 16 + .../components/firefoxview/fxview-empty-state.css | 2 +- browser/components/firefoxview/fxview-tab-list.css | 22 +- browser/components/firefoxview/fxview-tab-list.mjs | 689 +++++-------- browser/components/firefoxview/fxview-tab-row.css | 178 +--- browser/components/firefoxview/helpers.mjs | 17 + browser/components/firefoxview/history.css | 13 +- browser/components/firefoxview/history.mjs | 224 ++--- browser/components/firefoxview/jar.mn | 4 + .../components/firefoxview/opentabs-tab-list.css | 32 + .../components/firefoxview/opentabs-tab-list.mjs | 593 +++++++++++ .../components/firefoxview/opentabs-tab-row.css | 119 +++ browser/components/firefoxview/opentabs.mjs | 42 +- browser/components/firefoxview/recentlyclosed.mjs | 16 +- browser/components/firefoxview/syncedtabs.mjs | 387 ++------ .../firefoxview/tests/browser/browser.toml | 8 +- .../browser_firefoxview_dragDrop_pinned_tab.js | 102 ++ .../tests/browser/browser_firefoxview_paused.js | 99 -- .../browser_firefoxview_search_telemetry.js | 5 +- .../tests/browser/browser_firefoxview_tab.js | 6 +- .../tests/browser/browser_history_firefoxview.js | 15 +- .../tests/browser/browser_opentabs_cards.js | 10 +- .../tests/browser/browser_opentabs_firefoxview.js | 4 +- .../tests/browser/browser_opentabs_recency.js | 350 ++++--- .../browser/browser_opentabs_tab_indicators.js | 10 +- .../browser/browser_recentlyclosed_firefoxview.js | 12 + .../browser_syncedtabs_errors_firefoxview.js | 272 ++++- .../browser/browser_syncedtabs_firefoxview.js | 7 +- .../browser_tab_list_keyboard_navigation.js | 4 +- .../tests/browser/browser_tab_on_close_warning.js | 2 +- .../tests/chrome/test_fxview_tab_list.html | 5 - browser/components/ion/content/ion.js | 12 +- .../components/ion/test/browser/browser_ion_ui.js | 35 +- .../components/messagepreview/messagepreview.js | 14 +- browser/components/migration/.eslintrc.js | 5 +- browser/components/migration/FileMigrators.sys.mjs | 5 +- browser/components/migration/MigratorBase.sys.mjs | 10 +- .../migration/content/migration-wizard.mjs | 9 +- browser/components/newtab/.eslintrc.js | 8 +- browser/components/newtab/common/Actions.mjs | 463 +++++++++ browser/components/newtab/common/Actions.sys.mjs | 457 --------- browser/components/newtab/common/Reducers.sys.mjs | 15 +- .../newtab/content-src/activity-stream.jsx | 5 +- .../newtab/content-src/components/Base/Base.jsx | 150 ++- .../newtab/content-src/components/Base/_Base.scss | 38 +- .../newtab/content-src/components/Card/Card.jsx | 5 +- .../newtab/content-src/components/Card/types.js | 30 - .../newtab/content-src/components/Card/types.mjs | 30 + .../CollapsibleSection/CollapsibleSection.jsx | 2 +- .../ComponentPerfTimer/ComponentPerfTimer.jsx | 5 +- .../components/ConfirmDialog/ConfirmDialog.jsx | 2 +- .../components/ContextMenu/ContextMenu.jsx | 4 +- .../ContentSection/ContentSection.jsx | 15 +- .../components/CustomizeMenu/CustomizeMenu.jsx | 4 +- .../components/CustomizeMenu/_CustomizeMenu.scss | 4 + .../DiscoveryStreamAdmin/DiscoveryStreamAdmin.jsx | 11 +- .../DiscoveryStreamAdmin/SimpleHashRouter.jsx | 8 +- .../DiscoveryStreamBase/DiscoveryStreamBase.jsx | 6 +- .../CardGrid/CardGrid.jsx | 9 +- .../CollectionCardGrid/CollectionCardGrid.jsx | 2 +- .../DiscoveryStreamComponents/DSCard/DSCard.jsx | 11 +- .../DSContextFooter/DSContextFooter.jsx | 2 +- .../DSEmptyState/DSEmptyState.jsx | 5 +- .../DSLinkMenu/DSLinkMenu.jsx | 2 +- .../DSPrivacyModal/DSPrivacyModal.jsx | 5 +- .../DSSignup/DSSignup.jsx | 2 +- .../DSTextPromo/DSTextPromo.jsx | 2 +- .../FeatureHighlight/FeatureHighlight.jsx | 2 +- .../Navigation/Navigation.jsx | 2 +- .../SafeAnchor/SafeAnchor.jsx | 5 +- .../TopicsWidget/TopicsWidget.jsx | 2 +- .../ImpressionStats.jsx | 11 +- .../content-src/components/LinkMenu/LinkMenu.jsx | 2 +- .../components/ModalOverlay/ModalOverlay.jsx | 2 +- .../content-src/components/Search/Search.jsx | 5 +- .../content-src/components/Sections/Sections.jsx | 9 +- .../components/TopSites/SearchShortcutsForm.jsx | 5 +- .../content-src/components/TopSites/TopSite.jsx | 5 +- .../components/TopSites/TopSiteForm.jsx | 5 +- .../TopSites/TopSiteImpressionWrapper.jsx | 6 +- .../content-src/components/TopSites/TopSites.jsx | 7 +- .../components/TopSites/TopSitesConstants.js | 39 - .../components/TopSites/TopSitesConstants.mjs | 39 + .../WallpapersSection/WallpapersSection.jsx | 100 ++ .../WallpapersSection/_WallpapersSection.scss | 87 ++ .../components/newtab/content-src/lib/constants.js | 38 - .../newtab/content-src/lib/constants.mjs | 38 + .../content-src/lib/detect-user-session-start.js | 82 -- .../content-src/lib/detect-user-session-start.mjs | 82 ++ .../newtab/content-src/lib/init-store.js | 140 --- .../newtab/content-src/lib/init-store.mjs | 143 +++ .../newtab/content-src/lib/link-menu-options.js | 309 ------ .../newtab/content-src/lib/link-menu-options.mjs | 309 ++++++ .../newtab/content-src/lib/perf-service.js | 104 -- .../newtab/content-src/lib/perf-service.mjs | 102 ++ .../newtab/content-src/lib/screenshot-utils.js | 61 -- .../newtab/content-src/lib/screenshot-utils.mjs | 61 ++ .../newtab/content-src/lib/selectLayoutRender.js | 255 ----- .../newtab/content-src/lib/selectLayoutRender.mjs | 255 +++++ .../content-src/styles/_activity-stream.scss | 12 + .../newtab/css/activity-stream-linux.css | 150 ++- .../components/newtab/css/activity-stream-mac.css | 150 ++- .../newtab/css/activity-stream-windows.css | 150 ++- .../newtab/data/content/activity-stream.bundle.js | 942 ++++++++++++------ .../data/content/assets/wallpapers/dark-beach.avif | Bin 0 -> 4043 bytes .../data/content/assets/wallpapers/dark-color.avif | Bin 0 -> 2413 bytes .../content/assets/wallpapers/dark-landscape.avif | Bin 0 -> 9381 bytes .../content/assets/wallpapers/dark-mountain.avif | Bin 0 -> 11602 bytes .../data/content/assets/wallpapers/dark-panda.avif | Bin 0 -> 4606 bytes .../data/content/assets/wallpapers/dark-sky.avif | Bin 0 -> 2216 bytes .../content/assets/wallpapers/light-beach.avif | Bin 0 -> 3806 bytes .../content/assets/wallpapers/light-color.avif | Bin 0 -> 2267 bytes .../content/assets/wallpapers/light-landscape.avif | Bin 0 -> 2527 bytes .../content/assets/wallpapers/light-mountain.avif | Bin 0 -> 5915 bytes .../content/assets/wallpapers/light-panda.avif | Bin 0 -> 8667 bytes .../data/content/assets/wallpapers/light-sky.avif | Bin 0 -> 2540 bytes browser/components/newtab/karma.mc.config.js | 22 +- .../components/newtab/lib/AboutPreferences.sys.mjs | 2 +- .../components/newtab/lib/ActivityStream.sys.mjs | 30 +- .../lib/ActivityStreamMessageChannel.sys.mjs | 2 +- .../newtab/lib/DiscoveryStreamFeed.sys.mjs | 39 +- .../components/newtab/lib/DownloadsManager.sys.mjs | 2 +- browser/components/newtab/lib/FaviconFeed.sys.mjs | 2 +- .../components/newtab/lib/HighlightsFeed.sys.mjs | 2 +- browser/components/newtab/lib/NewTabInit.sys.mjs | 2 +- browser/components/newtab/lib/PlacesFeed.sys.mjs | 2 +- browser/components/newtab/lib/PrefsFeed.sys.mjs | 2 +- .../newtab/lib/RecommendationProvider.sys.mjs | 2 +- .../components/newtab/lib/SectionsManager.sys.mjs | 4 +- .../components/newtab/lib/SystemTickFeed.sys.mjs | 2 +- .../components/newtab/lib/TelemetryFeed.sys.mjs | 49 +- browser/components/newtab/lib/TopSitesFeed.sys.mjs | 2 +- .../components/newtab/lib/TopStoriesFeed.sys.mjs | 2 +- .../components/newtab/lib/WallpaperFeed.sys.mjs | 117 +++ browser/components/newtab/metrics.yaml | 31 +- .../test/browser/browser_as_load_location.js | 2 +- .../test/browser/browser_newtab_overrides.js | 4 +- browser/components/newtab/test/schemas/pings.js | 5 +- .../newtab/test/unit/common/Actions.test.js | 2 +- .../newtab/test/unit/common/Reducers.test.js | 2 +- .../test/unit/content-src/components/Base.test.jsx | 79 +- .../test/unit/content-src/components/Card.test.jsx | 5 +- .../components/ComponentPerfTimer.test.jsx | 5 +- .../content-src/components/ConfirmDialog.test.jsx | 5 +- .../content-src/components/CustomiseMenu.test.jsx | 2 +- .../components/DiscoveryStreamAdmin.test.jsx | 5 +- .../DiscoveryStreamComponents/CardGrid.test.jsx | 5 +- .../DiscoveryStreamComponents/DSCard.test.jsx | 22 +- .../DSContextFooter.test.jsx | 2 +- .../DSPrivacyModal.test.jsx | 2 +- .../ImpressionStats.test.jsx | 73 +- .../TopicsWidget.test.jsx | 5 +- .../unit/content-src/components/Sections.test.jsx | 2 +- .../unit/content-src/components/TopSites.test.jsx | 5 +- .../TopSites/TopSiteImpressionWrapper.test.jsx | 2 +- .../lib/detect-user-session-start.test.js | 5 +- .../test/unit/content-src/lib/init-store.test.js | 5 +- .../content-src/lib/selectLayoutRender.test.js | 2 +- .../newtab/test/unit/lib/AboutPreferences.test.js | 5 +- .../newtab/test/unit/lib/ActivityStream.test.js | 2 +- .../unit/lib/ActivityStreamMessageChannel.test.js | 7 +- .../test/unit/lib/DiscoveryStreamFeed.test.js | 30 +- .../newtab/test/unit/lib/DownloadsManager.test.js | 2 +- .../newtab/test/unit/lib/FaviconFeed.test.js | 2 +- .../newtab/test/unit/lib/NewTabInit.test.js | 5 +- .../newtab/test/unit/lib/PrefsFeed.test.js | 5 +- .../test/unit/lib/RecommendationProvider.test.js | 5 +- .../newtab/test/unit/lib/SectionsManager.test.js | 2 +- .../newtab/test/unit/lib/SystemTickFeed.test.js | 2 +- .../newtab/test/xpcshell/test_HighlightsFeed.js | 2 +- .../newtab/test/xpcshell/test_PlacesFeed.js | 2 +- .../newtab/test/xpcshell/test_TelemetryFeed.js | 56 +- .../newtab/test/xpcshell/test_TopSitesFeed.js | 2 +- .../newtab/test/xpcshell/test_WallpaperFeed.js | 115 +++ .../components/newtab/test/xpcshell/xpcshell.toml | 2 + .../newtab/webpack.system-addon.config.js | 2 +- .../originattributes/test/browser/browser.toml | 2 +- .../originattributes/test/browser/browser_cache.js | 8 +- .../test/browser/browser_favicon_firstParty.js | 6 +- .../test/browser/browser_favicon_userContextId.js | 4 +- .../browser/browser_firstPartyIsolation_saveAs.js | 4 +- .../test/browser/browser_httpauth.js | 6 +- .../test/browser/browser_imageCacheIsolation.js | 4 +- .../test/browser/browser_sanitize.js | 4 +- .../originattributes/test/browser/file_saveAs.sjs | 4 +- .../test/browser/file_thirdPartyChild.video.ogv | Bin 16049 -> 0 bytes .../test/browser/file_thirdPartyChild.video.webm | Bin 0 -> 17931 bytes .../originattributes/test/browser/head.js | 2 +- browser/components/pagedata/.eslintrc.js | 2 - .../components/pagedata/PageDataService.sys.mjs | 16 +- browser/components/places/.eslintrc.js | 9 - browser/components/places/content/places.js | 2 +- browser/components/places/content/places.xhtml | 4 + .../browser_bookmark_context_menu_contents.js | 4 +- .../tests/browser/browser_sidebarpanels_click.js | 8 +- browser/components/places/tests/browser/head.js | 2 +- .../components/pocket/content/SaveToPocket.sys.mjs | 2 +- .../content/panels/js/components/Home/Home.jsx | 2 +- .../content/panels/js/components/Saved/Saved.jsx | 2 +- .../pocket/content/panels/js/home/overlay.jsx | 2 +- .../pocket/content/panels/js/main.bundle.js | 14 +- .../components/pocket/content/panels/js/main.mjs | 2 +- .../pocket/content/panels/js/saved/overlay.jsx | 2 +- .../pocket/content/panels/js/signup/overlay.jsx | 2 +- .../content/panels/js/style-guide/overlay.jsx | 2 +- browser/components/pocket/content/pktApi.sys.mjs | 27 +- browser/components/pocket/content/pktUI.js | 28 +- .../test/browser_pocket_button_icon_state.js | 10 +- .../test/unit/browser_pocket_AboutPocketParent.js | 20 +- browser/components/preferences/preferences.js | 26 - browser/components/preferences/preferences.xhtml | 4 +- browser/components/preferences/privacy.inc.xhtml | 27 +- browser/components/preferences/privacy.js | 23 +- browser/components/preferences/sync.inc.xhtml | 39 +- browser/components/preferences/tests/browser.toml | 6 +- .../tests/browser_applications_selection.js | 20 +- .../preferences/tests/browser_contentblocking.js | 2 +- .../tests/browser_privacy_dnsoverhttps.js | 162 +++ .../preferences/tests/browser_subdialogs.js | 15 +- .../preferences/tests/siteData/browser.toml | 2 + .../tests/siteData/browser_clearSiteData.js | 41 +- .../tests/siteData/browser_clearSiteData_v2.js | 258 +++++ .../components/preferences/translations.inc.xhtml | 54 +- browser/components/preferences/translations.js | 270 +++++ .../browser/browser_oa_private_browsing_window.js | 2 +- ...browser_privatebrowsing_about_nimbus_dismiss.js | 2 +- ...ser_privatebrowsing_about_nimbus_impressions.js | 4 +- .../test/browser/browser_privatebrowsing_cache.js | 2 +- .../browser_privatebrowsing_certexceptionsui.js | 2 +- .../browser/browser_privatebrowsing_cleanup.js | 2 +- .../browser/browser_privatebrowsing_favicon.js | 6 +- .../browser_privatebrowsing_geoprompt_page.html | 2 +- ...rowsing_last_private_browsing_context_exited.js | 4 +- .../browser_privatebrowsing_lastpbcontextexited.js | 4 +- .../test/browser/browser_privatebrowsing_ui.js | 2 +- .../browser/browser_privatebrowsing_zoomrestore.js | 4 +- .../components/protections/content/protections.mjs | 2 +- .../test/browser/browser_protections_monitor.js | 2 +- .../WebProtocolHandlerRegistrar.sys.mjs | 4 +- .../reportbrokensite/ReportBrokenSite.sys.mjs | 2 +- .../test/browser/browser_back_buttons.js | 41 +- .../test/browser/browser_keyboard_navigation.js | 60 +- .../test/browser/browser_prefers_contrast.js | 2 +- .../test/browser/browser_reason_dropdown.js | 194 ++-- .../browser/browser_report_site_issue_fallback.js | 13 +- .../test/browser/browser_send_more_info.js | 29 +- .../test/browser/browser_tab_key_order.js | 13 +- .../reportbrokensite/test/browser/head.js | 2 +- .../browser/browser_dynamical_window_rounding.js | 2 +- .../test/browser/browser_navigator.js | 2 +- .../browser/browser_spoofing_keyboard_event.js | 2 +- .../test/browser/browser_timezone.js | 9 + .../test/browser/file_animationapi_iframee.html | 2 +- .../test/browser/file_animationapi_iframer.html | 2 +- .../file_hwconcurrency_aboutblank_popupmaker.html | 2 +- .../file_hwconcurrency_blob_popupmaker.html | 2 +- ...file_hwconcurrency_blobcrossorigin_iframer.html | 2 +- .../file_hwconcurrency_data_popupmaker.html | 2 +- .../test/browser/file_hwconcurrency_iframer.html | 2 +- ...wconcurrency_sandboxediframe_double_framee.html | 2 +- .../test/browser/file_navigator_iframee.html | 2 +- .../browser/file_reduceTimePrecision_iframer.html | 2 +- .../resistfingerprinting/test/browser/head.js | 6 +- .../test/mochitest/test_geolocation.html | 4 +- .../content/test/browser_whitelisted.js | 2 +- .../components/safebrowsing/content/test/head.js | 2 +- .../screenshots/ScreenshotsOverlayChild.sys.mjs | 151 ++- .../screenshots/ScreenshotsUtils.sys.mjs | 5 +- .../components/screenshots/content/screenshots.css | 21 +- .../screenshots/content/screenshots.html | 22 +- .../components/screenshots/content/screenshots.js | 132 ++- browser/components/screenshots/overlay/overlay.css | 41 +- .../components/screenshots/screenshots-buttons.css | 3 +- .../components/screenshots/screenshots-buttons.js | 31 +- .../screenshots/tests/browser/browser.toml | 4 + .../tests/browser/browser_iframe_test.js | 4 +- .../tests/browser/browser_keyboard_shortcuts.js | 128 +++ .../browser_screenshots_drag_scroll_test.js | 117 ++- .../tests/browser/browser_screenshots_drag_test.js | 66 +- .../browser_screenshots_test_toggle_pref.js | 2 +- .../tests/browser/browser_test_element_picker.js | 4 +- .../browser/browser_test_selection_size_text.js | 86 ++ .../components/screenshots/tests/browser/head.js | 50 +- browser/components/search/.eslintrc.js | 2 - .../search/DomainToCategoriesMap.worker.mjs | 101 -- .../components/search/SearchSERPTelemetry.sys.mjs | 860 ++++++++++++++-- browser/components/search/metrics.yaml | 104 ++ browser/components/search/moz.build | 6 +- .../search/schema/search-telemetry-schema.json | 444 --------- .../search/schema/search-telemetry-ui-schema.json | 23 - .../search/schema/search-telemetry-v2-schema.json | 444 +++++++++ .../schema/search-telemetry-v2-ui-schema.json | 25 + .../search/test/browser/telemetry/browser.toml | 23 +- ...ry_categorization_enabled_by_nimbus_variable.js | 15 +- ...ch_telemetry_domain_categorization_ad_values.js | 13 + ...lemetry_domain_categorization_download_timer.js | 35 +- ...h_telemetry_domain_categorization_extraction.js | 46 +- ...ry_domain_categorization_no_sponsored_values.js | 141 +++ ...emetry_domain_categorization_ping_submission.js | 302 ++++++ ...earch_telemetry_domain_categorization_region.js | 12 + ...ch_telemetry_domain_categorization_reporting.js | 60 ++ ...emetry_domain_categorization_reporting_timer.js | 21 +- ...domain_categorization_reporting_timer_wakeup.js | 19 +- .../search/test/browser/telemetry/head.js | 59 +- ...tryDomainCategorizationReportingWithoutAds.html | 18 + .../telemetry/searchTelemetryDomainExtraction.html | 31 + .../search/test/marionette/manifest.toml | 2 + .../search/test/marionette/telemetry/manifest.toml | 4 + .../marionette/telemetry/test_ping_submitted.py | 89 ++ .../components/search/test/unit/corruptDB.sqlite | Bin 0 -> 32772 bytes .../test/unit/test_domain_to_categories_store.js | 361 +++++++ .../test_search_telemetry_categorization_sync.js | 75 +- .../test_search_telemetry_config_validation.js | 2 +- .../search/test/unit/test_ui_schemas_valid.js | 31 + browser/components/search/test/unit/xpcshell.toml | 11 +- .../components/sessionstore/ContentRestore.sys.mjs | 435 -------- .../sessionstore/ContentSessionStore.sys.mjs | 685 ------------- .../RecentlyClosedTabsAndWindowsMenuUtils.sys.mjs | 4 +- .../components/sessionstore/SessionFile.sys.mjs | 68 ++ .../components/sessionstore/SessionSaver.sys.mjs | 2 +- .../components/sessionstore/SessionStartup.sys.mjs | 29 +- .../components/sessionstore/SessionStore.sys.mjs | 415 +------- .../sessionstore/StartupPerformance.sys.mjs | 2 +- .../components/sessionstore/TabAttributes.sys.mjs | 43 +- .../sessionstore/TabStateFlusher.sys.mjs | 100 +- .../sessionstore/content/aboutSessionRestore.js | 20 +- .../sessionstore/content/content-sessionStore.js | 13 - browser/components/sessionstore/jar.mn | 1 - browser/components/sessionstore/moz.build | 4 +- .../test/SessionStoreTestUtils.sys.mjs | 4 +- browser/components/sessionstore/test/browser.toml | 268 +---- .../test/browser_354894_perwindowpb.js | 10 +- .../sessionstore/test/browser_394759_basic.js | 2 +- .../sessionstore/test/browser_394759_behavior.js | 16 +- .../sessionstore/test/browser_394759_purge.js | 2 +- .../components/sessionstore/test/browser_459906.js | 4 +- .../components/sessionstore/test/browser_461743.js | 2 +- .../components/sessionstore/test/browser_464199.js | 2 +- .../sessionstore/test/browser_464620_a.js | 2 +- .../sessionstore/test/browser_464620_b.js | 2 +- .../components/sessionstore/test/browser_526613.js | 2 +- .../components/sessionstore/test/browser_580512.js | 6 +- .../sessionstore/test/browser_586068-apptabs.js | 7 +- .../browser_586068-browser_state_interrupted.js | 9 +- .../test/browser_586068-multi_window.js | 9 +- .../test/browser_586068-window_state.js | 7 +- .../test/browser_586068-window_state_override.js | 7 +- .../components/sessionstore/test/browser_589246.js | 12 +- .../components/sessionstore/test/browser_590268.js | 2 +- ...ser_615394-SSWindowState_events_duplicateTab.js | 4 +- ..._615394-SSWindowState_events_setBrowserState.js | 2 +- ...wser_615394-SSWindowState_events_setTabState.js | 6 +- ...r_615394-SSWindowState_events_setWindowState.js | 6 +- ...ser_615394-SSWindowState_events_undoCloseTab.js | 4 +- ..._615394-SSWindowState_events_undoCloseWindow.js | 8 +- .../components/sessionstore/test/browser_618151.js | 2 +- .../components/sessionstore/test/browser_636279.js | 2 +- .../components/sessionstore/test/browser_645428.js | 2 +- .../sessionstore/test/browser_687710_2.js | 66 +- .../components/sessionstore/test/browser_705597.js | 10 +- .../components/sessionstore/test/browser_707862.js | 20 +- .../components/sessionstore/test/browser_739531.js | 2 +- .../sessionstore/test/browser_async_flushes.js | 52 - .../sessionstore/test/browser_async_remove_tab.js | 30 +- .../test/browser_async_window_flushing.js | 11 +- .../sessionstore/test/browser_attributes.js | 59 +- .../sessionstore/test/browser_bfcache_telemetry.js | 3 +- .../test/browser_closed_tabs_closed_windows.js | 10 - .../sessionstore/test/browser_cookies.js | 2 +- .../sessionstore/test/browser_crashedTabs.js | 2 +- .../test/browser_docshell_uuid_consistency.js | 94 +- .../sessionstore/test/browser_frame_history.js | 2 +- .../sessionstore/test/browser_frametree.js | 2 +- .../sessionstore/test/browser_history_persist.js | 138 +-- .../test/browser_newtab_userTypedValue.js | 4 +- .../sessionstore/test/browser_oldformat.toml | 301 ++++++ .../test/browser_parentProcessRestoreHash.js | 4 +- ...rowser_restoreLastClosedTabOrWindowOrSession.js | 2 +- .../test/browser_send_async_message_oom.js | 75 -- .../sessionstore/test/browser_sessionHistory.js | 9 +- .../test/browser_sessionStoreContainer.js | 2 +- .../test/browser_should_restore_tab.js | 4 +- .../test/browser_windowStateContainer.js | 2 +- browser/components/sessionstore/test/head.js | 49 +- browser/components/shell/HeadlessShell.sys.mjs | 2 +- browser/components/shell/ShellService.sys.mjs | 18 + .../shell/content/setDesktopBackground.js | 2 +- .../components/shell/nsIWindowsShellService.idl | 12 +- browser/components/shell/test/browser_1119088.js | 2 +- browser/components/shell/test/browser_420786.js | 2 +- .../test/browser_setDesktopBackgroundPreview.js | 2 +- browser/components/shell/test/head.js | 4 +- .../tests/browser/browser_exposure_telemetry.js | 2 +- .../tests/browser/browser_shopping_settings.js | 8 +- .../tests/browser/browser_shopping_urlbar.js | 10 +- .../shopping/tests/browser/browser_ui_telemetry.js | 2 +- browser/components/sidebar/browser-sidebar.js | 744 ++++++++++++++ browser/components/sidebar/jar.mn | 9 + browser/components/sidebar/sidebar-history.html | 34 + browser/components/sidebar/sidebar-history.mjs | 201 ++++ browser/components/sidebar/sidebar-launcher.css | 34 + browser/components/sidebar/sidebar-launcher.mjs | 169 ++++ browser/components/sidebar/sidebar-page.mjs | 45 + browser/components/sidebar/sidebar-syncedtabs.html | 45 + browser/components/sidebar/sidebar-syncedtabs.mjs | 191 ++++ browser/components/sidebar/sidebar.css | 27 + browser/components/sidebar/sidebar.ftl | 26 + .../.storybook/addon-fluent/preset/manager.mjs | 2 +- browser/components/storybook/.storybook/main.js | 9 +- .../storybook/.storybook/manager-head.html | 22 + .../storybook/.storybook/markdown-story-utils.js | 10 +- .../storybook/.storybook/preview-head.html | 8 +- .../components/storybook/.storybook/preview.mjs | 3 +- .../storybook/docs/README.storybook.stories.md | 2 +- .../storybook/stories/fxview-tab-list.stories.mjs | 2 +- .../syncedtabs/SyncedTabsDeckComponent.sys.mjs | 2 +- browser/components/syncedtabs/TabListView.sys.mjs | 2 +- browser/components/tabpreview/jar.mn | 2 +- .../components/tabpreview/tab-preview-panel.mjs | 174 ++++ browser/components/tabpreview/tabpreview.css | 53 +- browser/components/tabpreview/tabpreview.mjs | 237 ----- .../browser/browser_contentpermissionprompt.js | 2 +- .../browser_default_webprotocol_handler_mailto.js | 53 +- .../tests/browser/browser_quit_disabled.js | 2 +- browser/components/tests/browser/head.js | 4 +- browser/components/touchbar/MacTouchBar.sys.mjs | 2 +- .../tests/browser/browser_touchbar_tests.js | 2 +- .../content/TranslationsPanelShared.sys.mjs | 93 +- .../content/fullPageTranslationsPanel.js | 91 +- .../content/selectTranslationsPanel.inc.xhtml | 172 ++-- .../content/selectTranslationsPanel.js | 895 +++++++++++++++-- browser/components/translations/moz.build | 2 +- .../translations/tests/browser/browser.toml | 38 +- ...r_translations_about_preferences_settings_ui.js | 201 +++- ...ranslations_full_page_move_tab_to_new_window.js | 64 ++ ...wser_translations_full_page_multiple_windows.js | 68 ++ ...ions_full_page_panel_engine_unsupported_lang.js | 28 - ...er_translations_full_page_panel_init_failure.js | 25 + .../browser_translations_full_page_panel_retry.js | 2 +- ...ranslations_full_page_panel_switch_languages.js | 10 +- ...ranslations_full_page_panel_unsupported_lang.js | 31 + ...lations_full_page_telemetry_switch_languages.js | 16 +- ...lations_select_context_menu_feature_disabled.js | 16 +- ...text_menu_with_full_page_translations_active.js | 22 +- ...nslations_select_context_menu_with_hyperlink.js | 12 +- ...ns_select_context_menu_with_no_text_selected.js | 6 +- ...tions_select_context_menu_with_text_selected.js | 14 +- ...owser_translations_select_panel_engine_cache.js | 59 ++ ...ations_select_panel_fallback_to_doc_language.js | 38 + ...translations_select_panel_language_selectors.js | 54 - ...rowser_translations_select_panel_mainview_ui.js | 36 - ...translations_select_panel_open_to_idle_state.js | 61 ++ ...anel_retranslate_on_change_language_directly.js | 70 ++ ...nslate_on_change_language_from_dropdown_menu.js | 68 ++ ...elect_panel_select_current_language_directly.js | 71 ++ ...l_select_current_language_from_dropdown_menu.js | 71 ++ ...l_select_same_from_and_to_languages_directly.js | 71 ++ ...ame_from_and_to_languages_from_dropdown_menu.js | 71 ++ ..._panel_translate_on_change_language_directly.js | 71 ++ ...nslate_on_change_language_from_dropdown_menu.js | 71 ++ ...e_on_change_language_multiple_times_directly.js | 97 ++ ...e_language_multiple_times_from_dropdown_menu.js | 98 ++ ..._translations_select_panel_translate_on_open.js | 86 ++ .../components/translations/tests/browser/head.js | 1036 ++++++++++++++------ browser/components/uitour/UITour-lib.js | 2 +- browser/components/uitour/UITour.sys.mjs | 10 +- browser/components/uitour/test/browser_UITour.js | 2 +- browser/components/uitour/test/browser_UITour3.js | 10 +- .../uitour/test/browser_UITour_defaultBrowser.js | 6 +- .../uitour/test/browser_UITour_modalDialog.js | 2 +- browser/components/uitour/test/head.js | 13 +- browser/components/urlbar/.eslintrc.js | 2 - browser/components/urlbar/UrlbarController.sys.mjs | 121 ++- browser/components/urlbar/UrlbarInput.sys.mjs | 29 +- browser/components/urlbar/UrlbarPrefs.sys.mjs | 20 +- .../urlbar/UrlbarProviderAboutPages.sys.mjs | 4 +- .../urlbar/UrlbarProviderAutofill.sys.mjs | 2 +- .../urlbar/UrlbarProviderCalculator.sys.mjs | 2 +- .../urlbar/UrlbarProviderClipboard.sys.mjs | 5 +- .../urlbar/UrlbarProviderContextualSearch.sys.mjs | 2 +- .../urlbar/UrlbarProviderInputHistory.sys.mjs | 4 +- .../urlbar/UrlbarProviderInterventions.sys.mjs | 8 +- .../urlbar/UrlbarProviderOmnibox.sys.mjs | 2 +- .../components/urlbar/UrlbarProviderPlaces.sys.mjs | 2 +- .../urlbar/UrlbarProviderQuickActions.sys.mjs | 4 +- .../urlbar/UrlbarProviderQuickSuggest.sys.mjs | 12 +- ...lbarProviderQuickSuggestContextualOptIn.sys.mjs | 2 +- .../urlbar/UrlbarProviderRecentSearches.sys.mjs | 2 +- .../urlbar/UrlbarProviderSearchSuggestions.sys.mjs | 2 +- .../urlbar/UrlbarProviderSearchTips.sys.mjs | 2 +- .../urlbar/UrlbarProviderTabToSearch.sys.mjs | 4 +- .../urlbar/UrlbarProviderTokenAliasEngines.sys.mjs | 2 +- .../urlbar/UrlbarProviderTopSites.sys.mjs | 10 +- .../urlbar/UrlbarProviderUnitConversion.sys.mjs | 2 +- .../urlbar/UrlbarProviderWeather.sys.mjs | 6 +- .../urlbar/UrlbarProvidersManager.sys.mjs | 8 +- browser/components/urlbar/UrlbarUtils.sys.mjs | 32 +- browser/components/urlbar/UrlbarView.sys.mjs | 10 + .../urlbar/docs/dynamic-result-types.rst | 6 +- browser/components/urlbar/metrics.yaml | 38 +- browser/components/urlbar/pings.yaml | 16 + .../urlbar/private/AddonSuggestions.sys.mjs | 10 +- .../components/urlbar/private/AdmWikipedia.sys.mjs | 5 +- .../urlbar/private/MDNSuggestions.sys.mjs | 10 +- .../urlbar/private/SuggestBackendRust.sys.mjs | 9 +- .../urlbar/private/YelpSuggestions.sys.mjs | 10 +- .../urlbar/tests/UrlbarTestUtils.sys.mjs | 17 +- .../urlbar/tests/browser-tips/browser_picks.js | 10 +- .../tests/browser-tips/browser_searchTips.js | 2 +- .../browser-tips/browser_searchTips_interaction.js | 2 +- .../components/urlbar/tests/browser/browser.toml | 14 +- .../tests/browser/browser_UrlbarInput_overflow.js | 2 +- .../tests/browser/browser_aboutHomeLoading.js | 4 +- .../browser_acknowledgeFeedbackAndDismissal.js | 4 +- .../tests/browser/browser_copy_during_load.js | 2 +- .../urlbar/tests/browser/browser_dynamicResults.js | 4 +- .../urlbar/tests/browser/browser_engagement.js | 29 +- .../browser_less_common_selection_manipulations.js | 288 ++++++ .../tests/browser/browser_locationBarCommand.js | 2 +- .../browser_primary_selection_safe_on_new_tab.js | 2 +- .../urlbar/tests/browser/browser_raceWithTabs.js | 4 +- .../urlbar/tests/browser/browser_result_menu.js | 12 +- .../urlbar/tests/browser/browser_stop_pending.js | 4 +- .../browser_urlbar_telemetry_tabtosearch.js | 4 +- .../tests/engagementTelemetry/browser/browser.toml | 8 +- .../browser_glean_telemetry_abandonment_type.js | 8 +- .../browser_glean_telemetry_engagement_tips.js | 2 +- .../browser_glean_telemetry_engagement_type.js | 48 +- .../browser/browser_glean_telemetry_exposure.js | 2 +- .../browser_glean_telemetry_potential_exposure.js | 438 +++++++++ .../browser/browser_glean_telemetry_reenter.js | 79 ++ .../tests/engagementTelemetry/browser/head.js | 8 +- .../quicksuggest/QuickSuggestTestUtils.sys.mjs | 17 +- .../quicksuggest/browser/browser_quicksuggest.js | 37 + .../browser/browser_quicksuggest_addons.js | 7 +- .../browser/browser_quicksuggest_block.js | 5 - .../browser/browser_quicksuggest_mdn.js | 68 +- .../browser/browser_quicksuggest_pocket.js | 20 +- .../browser/browser_quicksuggest_yelp.js | 5 + .../browser/browser_telemetry_dynamicWikipedia.js | 5 - .../browser/browser_telemetry_gleanEmptyStrings.js | 5 - .../browser_telemetry_impressionEdgeCases.js | 11 +- .../browser/browser_telemetry_nonsponsored.js | 5 - .../browser/browser_telemetry_sponsored.js | 5 - .../urlbar/tests/quicksuggest/browser/head.js | 41 +- .../urlbar/tests/quicksuggest/unit/head.js | 10 +- .../unit/test_quicksuggest_impressionCaps.js | 2 +- .../unit/test_quicksuggest_merinoSessions.js | 2 +- .../urlbar/tests/quicksuggest/unit/test_weather.js | 2 +- .../components/urlbar/tests/unit/test_exposure.js | 11 +- .../components/urlbar/tests/unit/test_l10nCache.js | 2 +- browser/config/version.txt | 2 +- browser/config/version_display.txt | 2 +- browser/docs/index.rst | 2 + browser/extensions/formautofill/api.js | 8 - .../formautofill/content/customElements.js | 392 -------- .../formautofill/content/formautofill.css | 11 +- .../locales/en-US/formautofill.properties | 18 - browser/extensions/formautofill/moz.build | 3 - .../formautofill/skin/linux/autocomplete-item.css | 10 - .../formautofill/skin/osx/autocomplete-item.css | 18 - .../skin/shared/autocomplete-item-shared.css | 182 ---- .../skin/windows/autocomplete-item.css | 25 - .../address/browser_address_doorhanger_state.js | 4 + ...rowser_edit_address_doorhanger_display_state.js | 5 + .../test/browser/browser_autocomplete_footer.js | 29 +- .../test/browser/browser_dropdown_layout.js | 30 - .../browser_creditCard_dropdown_layout.js | 2 +- .../browser/creditCard/browser_insecure_form.js | 14 +- .../extensions/formautofill/test/browser/head.js | 37 +- .../test_basic_creditcard_autocomplete_form.html | 31 +- .../test_creditcard_autocomplete_off.html | 9 +- .../test/mochitest/formautofill_common.js | 21 +- .../mochitest/test_autofill_and_ordinal_forms.html | 20 +- .../test/mochitest/test_autofocus_form.html | 8 +- .../mochitest/test_basic_autocomplete_form.html | 30 +- .../test/mochitest/test_form_changes.html | 21 +- .../test_formautofill_preview_highlight.html | 2 +- .../test/unit/test_addressComponent_state.js | 12 + .../formautofill/test/unit/test_getRecords.js | 28 +- .../formautofill/test/unit/test_phoneNumber.js | 2 +- .../test/unit/test_profileAutocompleteResult.js | 93 +- .../report-site-issue/experimentalAPIs/helpMenu.js | 2 +- .../test/browser/browser_report_site_issue.js | 6 +- browser/extensions/screenshots/background/main.js | 4 +- .../extensions/screenshots/background/takeshot.js | 4 +- browser/extensions/screenshots/blobConverters.js | 4 +- .../screenshots/build/thumbnailGenerator.js | 2 +- browser/extensions/screenshots/clipboard.js | 2 +- browser/extensions/screenshots/selector/ui.js | 6 +- .../extensions/screenshots/selector/uicontrol.js | 4 +- browser/extensions/screenshots/sitehelper.js | 2 +- .../webcompat/about-compat/aboutCompat.js | 2 +- browser/extensions/webcompat/data/shims.js | 4 + browser/extensions/webcompat/data/ua_overrides.js | 80 +- .../webcompat/experiment-apis/appConstants.js | 2 +- .../experiment-apis/systemManufacturer.js | 2 +- .../experiment-apis/trackingProtection.js | 4 +- .../js/bug1769762-tiktok.com-plugins-shim.js | 2 +- .../injections/js/bug1855014-eksiseyler.com.js | 2 +- .../extensions/webcompat/lib/custom_functions.js | 2 +- browser/extensions/webcompat/lib/shims.js | 2 +- browser/extensions/webcompat/lib/ua_overrides.js | 2 +- browser/extensions/webcompat/manifest.json | 2 +- browser/extensions/webcompat/shims/eluminate.js | 2 +- browser/extensions/webcompat/shims/google-ima.js | 14 +- .../webcompat/shims/rambler-authenticator.js | 2 +- browser/extensions/webcompat/shims/webtrends.js | 2 +- browser/fxr/content/fxrui.js | 6 +- browser/installer/package-manifest.in | 18 +- browser/installer/removed-files.in | 12 + browser/installer/windows/docs/FullInstaller.rst | 2 + browser/installer/windows/docs/NSISPlugins.rst | 101 ++ browser/installer/windows/docs/newProjectDllVS.png | Bin 0 -> 27399 bytes .../windows/docs/projectPropertyPageVS.png | Bin 0 -> 258168 bytes .../windows/docs/projectSettingsDllVS.png | Bin 0 -> 144260 bytes browser/locales-preview/select-translations.ftl | 7 +- browser/locales-preview/translations.ftl | 3 +- browser/locales/en-US/browser/appmenu.ftl | 2 +- .../en-US/browser/defaultBrowserNotification.ftl | 17 + browser/locales/en-US/browser/menubar.ftl | 2 + browser/locales/en-US/browser/newtab/newtab.ftl | 22 + .../locales/en-US/browser/newtab/onboarding.ftl | 4 + .../browser/policies/policies-descriptions.ftl | 2 + .../en-US/browser/preferences/preferences.ftl | 13 +- browser/locales/en-US/browser/reportBrokenSite.ftl | 2 +- browser/locales/en-US/browser/screenshots.ftl | 45 +- .../locales/en-US/browser/screenshotsOverlay.ftl | 15 - browser/locales/en-US/browser/sidebarMenu.ftl | 3 + .../locales/en-US/browser/webProtocolHandler.ftl | 11 +- .../en-US/chrome/browser/browser.properties | 7 +- .../en-US/crashreporter/crashreporter-override.ini | 9 - browser/locales/jar.mn | 1 + browser/locales/l10n-changesets.json | 305 ++++-- browser/locales/l10n-onchange-changesets.json | 5 + browser/locales/moz.build | 3 - browser/modules/AboutNewTab.sys.mjs | 2 +- browser/modules/AsyncTabSwitcher.sys.mjs | 2 +- browser/modules/BackgroundTask_install.sys.mjs | 2 +- browser/modules/BackgroundTask_uninstall.sys.mjs | 2 +- browser/modules/BrowserUsageTelemetry.sys.mjs | 2 +- browser/modules/BrowserWindowTracker.sys.mjs | 2 +- browser/modules/ContentCrashHandlers.sys.mjs | 4 +- browser/modules/EveryWindow.sys.mjs | 2 +- browser/modules/ExtensionsUI.sys.mjs | 2 +- browser/modules/FaviconLoader.sys.mjs | 2 +- browser/modules/HomePage.sys.mjs | 2 +- browser/modules/PageActions.sys.mjs | 2 +- browser/modules/PermissionUI.sys.mjs | 8 +- browser/modules/ProcessHangMonitor.sys.mjs | 9 +- browser/modules/Sanitizer.sys.mjs | 28 +- browser/modules/SiteDataManager.sys.mjs | 45 +- browser/modules/SitePermissions.sys.mjs | 2 +- browser/modules/TabUnloader.sys.mjs | 2 +- browser/modules/TabsList.sys.mjs | 2 +- browser/modules/WindowsJumpLists.sys.mjs | 6 +- browser/modules/WindowsPreviewPerTab.sys.mjs | 6 +- browser/modules/ZoomUI.sys.mjs | 4 +- .../modules/test/browser/browser_PageActions.js | 6 +- .../browser/browser_ProcessHangNotifications.js | 7 +- .../browser/browser_UnsubmittedCrashHandler.js | 2 +- .../browser/browser_UsageTelemetry_interaction.js | 16 +- .../browser_UsageTelemetry_private_and_restore.js | 2 +- .../test/browser/browser_preloading_tab_moving.js | 2 +- .../formValidation/browser_form_validation.js | 8 +- browser/modules/test/browser/head.js | 2 +- .../test/unit/test_FirefoxBridgeExtensionUtils.js | 2 +- browser/modules/webrtcUI.sys.mjs | 4 +- browser/moz.build | 2 +- browser/themes/BuiltInThemes.sys.mjs | 4 +- browser/themes/ThemeVariableMap.sys.mjs | 12 +- browser/themes/linux/browser.css | 6 +- browser/themes/osx/browser.css | 50 +- browser/themes/osx/customizableui/panelUI.css | 4 - browser/themes/osx/places/organizer.css | 140 +-- .../themes/shared/addons/unified-extensions.css | 96 +- browser/themes/shared/autocomplete.css | 34 + browser/themes/shared/browser-custom-colors.css | 6 +- browser/themes/shared/browser-shared.css | 61 +- .../themes/shared/customizableui/customizeMode.css | 20 +- .../shared/customizableui/panelUI-shared.css | 10 +- browser/themes/shared/downloads/progressmeter.css | 13 +- .../themes/shared/formautofill-notification.css | 2 +- .../shared/formautofill/icon-address-edit.svg | 6 - .../themes/shared/icons/circle-check-dotted.svg | 5 +- browser/themes/shared/icons/insights.svg | 6 + browser/themes/shared/jar.inc.mn | 2 +- browser/themes/shared/pageInfo.css | 15 +- browser/themes/shared/preferences/preferences.css | 6 +- browser/themes/shared/preferences/privacy.css | 8 +- browser/themes/shared/preferences/translations.css | 62 +- browser/themes/shared/tabs.css | 14 +- browser/themes/shared/toolbarbutton-icons.css | 19 +- browser/themes/shared/toolbarbuttons.css | 2 +- browser/themes/shared/translations/panel.css | 27 +- browser/themes/shared/urlbar-searchbar.css | 42 +- browser/themes/shared/urlbarView.css | 36 +- browser/themes/triage.json | 104 +- browser/themes/windows/browser.css | 20 +- browser/themes/windows/places/organizer.css | 1 - .../mozscreenshots/extension/Screenshot.sys.mjs | 4 +- .../extension/configurations/AppMenu.sys.mjs | 2 +- .../extension/configurations/Buttons.sys.mjs | 2 +- .../extension/configurations/ControlCenter.sys.mjs | 2 +- .../extension/configurations/CustomizeMode.sys.mjs | 2 +- .../extension/configurations/DevTools.sys.mjs | 2 +- .../configurations/LightweightThemes.sys.mjs | 2 +- .../configurations/PermissionPrompts.sys.mjs | 2 +- .../extension/configurations/Preferences.sys.mjs | 2 +- .../extension/configurations/Tabs.sys.mjs | 8 +- .../configurations/TabsInTitlebar.sys.mjs | 2 +- .../extension/configurations/Toolbars.sys.mjs | 2 +- .../extension/configurations/UIDensities.sys.mjs | 2 +- .../extension/configurations/WindowSize.sys.mjs | 8 +- 1147 files changed, 26589 insertions(+), 15940 deletions(-) create mode 100644 browser/base/content/browser-commands.js delete mode 100644 browser/base/content/browser-sidebar.js create mode 100644 browser/base/content/test/contextMenu/browser_strip_on_share_nested_link.js delete mode 100644 browser/base/content/test/general/video.ogg create mode 100644 browser/base/content/test/general/video.webm delete mode 100644 browser/base/content/test/general/web_video1.ogv delete mode 100644 browser/base/content/test/general/web_video1.ogv^headers^ create mode 100644 browser/base/content/test/general/web_video1.webm create mode 100644 browser/base/content/test/general/web_video1.webm^headers^ create mode 100644 browser/base/content/test/tabs/browser_lastSeenActive.js delete mode 100644 browser/components/asrouter/content-src/templates/OnboardingMessage/WhatsNewMessage.schema.json create mode 100644 browser/components/asrouter/modules/ActorConstants.mjs delete mode 100644 browser/components/asrouter/modules/ActorConstants.sys.mjs delete mode 100644 browser/components/asrouter/modules/ToolbarPanelHub.sys.mjs create mode 100644 browser/components/asrouter/tests/browser/browser_asrouter_keyboard_cfr.js create mode 100644 browser/components/asrouter/tests/browser/browser_asrouter_milestone_message_cfr.js delete mode 100644 browser/components/asrouter/tests/unit/ToolbarPanelHub.test.js delete mode 100644 browser/components/backup/.eslintrc.js create mode 100644 browser/components/backup/content/debug.html create mode 100644 browser/components/backup/content/debug.js create mode 100644 browser/components/backup/docs/backup-resources.rst create mode 100644 browser/components/backup/jar.mn create mode 100644 browser/components/backup/resources/AddonsBackupResource.sys.mjs create mode 100644 browser/components/backup/resources/CookiesBackupResource.sys.mjs create mode 100644 browser/components/backup/resources/CredentialsAndSecurityBackupResource.sys.mjs create mode 100644 browser/components/backup/resources/FormHistoryBackupResource.sys.mjs create mode 100644 browser/components/backup/resources/MiscDataBackupResource.sys.mjs create mode 100644 browser/components/backup/resources/PlacesBackupResource.sys.mjs create mode 100644 browser/components/backup/resources/PreferencesBackupResource.sys.mjs create mode 100644 browser/components/backup/resources/SessionStoreBackupResource.sys.mjs create mode 100644 browser/components/backup/tests/xpcshell/head.js create mode 100644 browser/components/backup/tests/xpcshell/test_BackupResource.js delete mode 100644 browser/components/backup/tests/xpcshell/test_BrowserResource.js create mode 100644 browser/components/backup/tests/xpcshell/test_MiscDataBackupResource.js create mode 100644 browser/components/backup/tests/xpcshell/test_PlacesBackupResource.js create mode 100644 browser/components/backup/tests/xpcshell/test_PreferencesBackupResource.js create mode 100644 browser/components/backup/tests/xpcshell/test_createBackup.js create mode 100644 browser/components/enterprisepolicies/tests/browser/browser_policy_translateenabled.js create mode 100644 browser/components/firefoxview/HistoryController.mjs create mode 100644 browser/components/firefoxview/SyncedTabsController.sys.mjs create mode 100644 browser/components/firefoxview/opentabs-tab-list.css create mode 100644 browser/components/firefoxview/opentabs-tab-list.mjs create mode 100644 browser/components/firefoxview/opentabs-tab-row.css create mode 100644 browser/components/firefoxview/tests/browser/browser_firefoxview_dragDrop_pinned_tab.js create mode 100644 browser/components/newtab/common/Actions.mjs delete mode 100644 browser/components/newtab/common/Actions.sys.mjs delete mode 100644 browser/components/newtab/content-src/components/Card/types.js create mode 100644 browser/components/newtab/content-src/components/Card/types.mjs delete mode 100644 browser/components/newtab/content-src/components/TopSites/TopSitesConstants.js create mode 100644 browser/components/newtab/content-src/components/TopSites/TopSitesConstants.mjs create mode 100644 browser/components/newtab/content-src/components/WallpapersSection/WallpapersSection.jsx create mode 100644 browser/components/newtab/content-src/components/WallpapersSection/_WallpapersSection.scss delete mode 100644 browser/components/newtab/content-src/lib/constants.js create mode 100644 browser/components/newtab/content-src/lib/constants.mjs delete mode 100644 browser/components/newtab/content-src/lib/detect-user-session-start.js create mode 100644 browser/components/newtab/content-src/lib/detect-user-session-start.mjs delete mode 100644 browser/components/newtab/content-src/lib/init-store.js create mode 100644 browser/components/newtab/content-src/lib/init-store.mjs delete mode 100644 browser/components/newtab/content-src/lib/link-menu-options.js create mode 100644 browser/components/newtab/content-src/lib/link-menu-options.mjs delete mode 100644 browser/components/newtab/content-src/lib/perf-service.js create mode 100644 browser/components/newtab/content-src/lib/perf-service.mjs delete mode 100644 browser/components/newtab/content-src/lib/screenshot-utils.js create mode 100644 browser/components/newtab/content-src/lib/screenshot-utils.mjs delete mode 100644 browser/components/newtab/content-src/lib/selectLayoutRender.js create mode 100644 browser/components/newtab/content-src/lib/selectLayoutRender.mjs create mode 100644 browser/components/newtab/data/content/assets/wallpapers/dark-beach.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/dark-color.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/dark-landscape.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/dark-mountain.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/dark-panda.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/dark-sky.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/light-beach.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/light-color.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/light-landscape.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/light-mountain.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/light-panda.avif create mode 100644 browser/components/newtab/data/content/assets/wallpapers/light-sky.avif create mode 100644 browser/components/newtab/lib/WallpaperFeed.sys.mjs create mode 100644 browser/components/newtab/test/xpcshell/test_WallpaperFeed.js delete mode 100644 browser/components/originattributes/test/browser/file_thirdPartyChild.video.ogv create mode 100644 browser/components/originattributes/test/browser/file_thirdPartyChild.video.webm delete mode 100644 browser/components/places/.eslintrc.js create mode 100644 browser/components/preferences/tests/siteData/browser_clearSiteData_v2.js create mode 100644 browser/components/screenshots/tests/browser/browser_keyboard_shortcuts.js create mode 100644 browser/components/screenshots/tests/browser/browser_test_selection_size_text.js delete mode 100644 browser/components/search/DomainToCategoriesMap.worker.mjs delete mode 100644 browser/components/search/schema/search-telemetry-schema.json delete mode 100644 browser/components/search/schema/search-telemetry-ui-schema.json create mode 100644 browser/components/search/schema/search-telemetry-v2-schema.json create mode 100644 browser/components/search/schema/search-telemetry-v2-ui-schema.json create mode 100644 browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_no_sponsored_values.js create mode 100644 browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_ping_submission.js create mode 100644 browser/components/search/test/browser/telemetry/searchTelemetryDomainCategorizationReportingWithoutAds.html create mode 100644 browser/components/search/test/marionette/telemetry/manifest.toml create mode 100644 browser/components/search/test/marionette/telemetry/test_ping_submitted.py create mode 100644 browser/components/search/test/unit/corruptDB.sqlite create mode 100644 browser/components/search/test/unit/test_domain_to_categories_store.js create mode 100644 browser/components/search/test/unit/test_ui_schemas_valid.js delete mode 100644 browser/components/sessionstore/ContentRestore.sys.mjs delete mode 100644 browser/components/sessionstore/ContentSessionStore.sys.mjs delete mode 100644 browser/components/sessionstore/content/content-sessionStore.js create mode 100644 browser/components/sessionstore/test/browser_oldformat.toml delete mode 100644 browser/components/sessionstore/test/browser_send_async_message_oom.js create mode 100644 browser/components/sidebar/browser-sidebar.js create mode 100644 browser/components/sidebar/sidebar-history.html create mode 100644 browser/components/sidebar/sidebar-history.mjs create mode 100644 browser/components/sidebar/sidebar-launcher.css create mode 100644 browser/components/sidebar/sidebar-launcher.mjs create mode 100644 browser/components/sidebar/sidebar-page.mjs create mode 100644 browser/components/sidebar/sidebar-syncedtabs.html create mode 100644 browser/components/sidebar/sidebar-syncedtabs.mjs create mode 100644 browser/components/sidebar/sidebar.css create mode 100644 browser/components/sidebar/sidebar.ftl create mode 100644 browser/components/storybook/.storybook/manager-head.html create mode 100644 browser/components/tabpreview/tab-preview-panel.mjs delete mode 100644 browser/components/tabpreview/tabpreview.mjs create mode 100644 browser/components/translations/tests/browser/browser_translations_full_page_move_tab_to_new_window.js create mode 100644 browser/components/translations/tests/browser/browser_translations_full_page_multiple_windows.js delete mode 100644 browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_unsupported_lang.js create mode 100644 browser/components/translations/tests/browser/browser_translations_full_page_panel_init_failure.js create mode 100644 browser/components/translations/tests/browser/browser_translations_full_page_panel_unsupported_lang.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_engine_cache.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_fallback_to_doc_language.js delete mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_language_selectors.js delete mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_mainview_ui.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_open_to_idle_state.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_retranslate_on_change_language_directly.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_retranslate_on_change_language_from_dropdown_menu.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_select_current_language_directly.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_select_current_language_from_dropdown_menu.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_select_same_from_and_to_languages_directly.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_select_same_from_and_to_languages_from_dropdown_menu.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_translate_on_change_language_directly.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_translate_on_change_language_from_dropdown_menu.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_translate_on_change_language_multiple_times_directly.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_translate_on_change_language_multiple_times_from_dropdown_menu.js create mode 100644 browser/components/translations/tests/browser/browser_translations_select_panel_translate_on_open.js create mode 100644 browser/components/urlbar/tests/browser/browser_less_common_selection_manipulations.js create mode 100644 browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_potential_exposure.js create mode 100644 browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_reenter.js delete mode 100644 browser/extensions/formautofill/content/customElements.js delete mode 100644 browser/extensions/formautofill/skin/linux/autocomplete-item.css delete mode 100644 browser/extensions/formautofill/skin/osx/autocomplete-item.css delete mode 100644 browser/extensions/formautofill/skin/shared/autocomplete-item-shared.css delete mode 100644 browser/extensions/formautofill/skin/windows/autocomplete-item.css create mode 100644 browser/installer/windows/docs/NSISPlugins.rst create mode 100644 browser/installer/windows/docs/newProjectDllVS.png create mode 100644 browser/installer/windows/docs/projectPropertyPageVS.png create mode 100644 browser/installer/windows/docs/projectSettingsDllVS.png delete mode 100644 browser/locales/en-US/browser/screenshotsOverlay.ftl delete mode 100644 browser/locales/en-US/crashreporter/crashreporter-override.ini delete mode 100644 browser/themes/shared/formautofill/icon-address-edit.svg create mode 100644 browser/themes/shared/icons/insights.svg (limited to 'browser') diff --git a/browser/actors/AboutReaderParent.sys.mjs b/browser/actors/AboutReaderParent.sys.mjs index 544a257cbc..00126910ae 100644 --- a/browser/actors/AboutReaderParent.sys.mjs +++ b/browser/actors/AboutReaderParent.sys.mjs @@ -281,7 +281,7 @@ export class AboutReaderParent extends JSWindowActorParent { * @return {Promise} * @resolves JS object representing the article, or null if no article is found. */ - async _getArticle(url, browser) { + async _getArticle(url) { return lazy.ReaderMode.downloadAndParseDocument(url).catch(e => { if (e && e.newURL) { // Pass up the error so we can navigate the browser in question to the new URL: diff --git a/browser/actors/ContextMenuChild.sys.mjs b/browser/actors/ContextMenuChild.sys.mjs index e16efdc9cd..5ecbcb22e9 100644 --- a/browser/actors/ContextMenuChild.sys.mjs +++ b/browser/actors/ContextMenuChild.sys.mjs @@ -371,7 +371,7 @@ export class ContextMenuChild extends JSWindowActorChild { } // Returns true if clicked-on link targets a resource that can be saved. - _isLinkSaveable(aLink) { + _isLinkSaveable() { // We don't do the Right Thing for news/snews yet, so turn them off // until we do. return ( @@ -696,7 +696,7 @@ export class ContextMenuChild extends JSWindowActorChild { * - link * - linkURI */ - _cleanContext(aEvent) { + _cleanContext() { const context = this.context; const cleanTarget = Object.create(null); diff --git a/browser/actors/FormValidationChild.sys.mjs b/browser/actors/FormValidationChild.sys.mjs index f5ce427d03..bb67f1f1f4 100644 --- a/browser/actors/FormValidationChild.sys.mjs +++ b/browser/actors/FormValidationChild.sys.mjs @@ -138,7 +138,7 @@ export class FormValidationChild extends JSWindowActorChild { * Blur event handler in which we disconnect from the form element and * hide the popup. */ - _onBlur(aEvent) { + _onBlur() { if (this._element) { this._element.removeEventListener("input", this); this._element.removeEventListener("blur", this); diff --git a/browser/actors/FormValidationParent.sys.mjs b/browser/actors/FormValidationParent.sys.mjs index e95a8e86fb..a988b06f37 100644 --- a/browser/actors/FormValidationParent.sys.mjs +++ b/browser/actors/FormValidationParent.sys.mjs @@ -19,7 +19,7 @@ class PopupShownObserver { this._weakContext = Cu.getWeakReference(browsingContext); } - observe(subject, topic, data) { + observe(subject, topic) { let ctxt = this._weakContext.get(); let actor = ctxt.currentWindowGlobal?.getExistingActor("FormValidation"); if (!actor) { diff --git a/browser/actors/PluginParent.sys.mjs b/browser/actors/PluginParent.sys.mjs index fa93c1d5ab..14eeb38945 100644 --- a/browser/actors/PluginParent.sys.mjs +++ b/browser/actors/PluginParent.sys.mjs @@ -19,7 +19,7 @@ ChromeUtils.defineLazyGetter(lazy, "gNavigatorBundle", function () { export const PluginManager = { gmpCrashes: new Map(), - observe(subject, topic, data) { + observe(subject, topic) { switch (topic) { case "gmp-plugin-crash": this._registerGMPCrash(subject); diff --git a/browser/actors/PromptParent.sys.mjs b/browser/actors/PromptParent.sys.mjs index 4a159cbda5..83180923b9 100644 --- a/browser/actors/PromptParent.sys.mjs +++ b/browser/actors/PromptParent.sys.mjs @@ -9,42 +9,22 @@ ChromeUtils.defineESModuleGetters(lazy, { PromptUtils: "resource://gre/modules/PromptUtils.sys.mjs", BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs", }); -import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs"; - -XPCOMUtils.defineLazyPreferenceGetter( - lazy, - "tabChromePromptSubDialog", - "prompts.tabChromePromptSubDialog", - false -); - -XPCOMUtils.defineLazyPreferenceGetter( - lazy, - "contentPromptSubDialog", - "prompts.contentPromptSubDialog", - false -); ChromeUtils.defineLazyGetter(lazy, "gTabBrowserLocalization", function () { return new Localization(["browser/tabbrowser.ftl"], true); }); /** - * @typedef {Object} Prompt - * @property {Function} resolver - * The resolve function to be called with the data from the Prompt - * after the user closes it. - * @property {Object} tabModalPrompt - * The TabModalPrompt being shown to the user. + * @typedef {Object} Dialog */ /** - * gBrowserPrompts weakly maps BrowsingContexts to a Map of their currently - * active Prompts. + * gBrowserDialogs weakly maps BrowsingContexts to a Map of their currently + * active Dialogs. * - * @type {WeakMap} + * @type {WeakMap} */ -let gBrowserPrompts = new WeakMap(); +let gBrowserDialogs = new WeakMap(); export class PromptParent extends JSWindowActorParent { didDestroy() { @@ -54,35 +34,24 @@ export class PromptParent extends JSWindowActorParent { } /** - * Registers a new Prompt to be tracked for a particular BrowsingContext. - * We need to track a Prompt so that we can, for example, force-close the - * TabModalPrompt if the originating subframe or tab unloads or crashes. + * Registers a new dialog to be tracked for a particular BrowsingContext. + * We need to track a dialog so that we can, for example, force-close the + * dialog if the originating subframe or tab unloads or crashes. * - * @param {Object} tabModalPrompt - * The TabModalPrompt that will be shown to the user. + * @param {Dialog} dialog + * The dialog that will be shown to the user. * @param {string} id - * A unique ID to differentiate multiple Prompts coming from the same + * A unique ID to differentiate multiple dialogs coming from the same * BrowsingContext. - * @return {Promise} - * @resolves {Object} - * Resolves with the arguments returned from the TabModalPrompt when it - * is dismissed. */ - registerPrompt(tabModalPrompt, id) { - let prompts = gBrowserPrompts.get(this.browsingContext); - if (!prompts) { - prompts = new Map(); - gBrowserPrompts.set(this.browsingContext, prompts); + registerDialog(dialog, id) { + let dialogs = gBrowserDialogs.get(this.browsingContext); + if (!dialogs) { + dialogs = new Map(); + gBrowserDialogs.set(this.browsingContext, dialogs); } - let promise = new Promise(resolve => { - prompts.set(id, { - tabModalPrompt, - resolver: resolve, - }); - }); - - return promise; + dialogs.set(id, dialog); } /** @@ -94,20 +63,18 @@ export class PromptParent extends JSWindowActorParent { * BrowsingContext. */ unregisterPrompt(id) { - let prompts = gBrowserPrompts.get(this.browsingContext); - if (prompts) { - prompts.delete(id); - } + let dialogs = gBrowserDialogs.get(this.browsingContext); + dialogs?.delete(id); } /** * Programmatically closes all Prompts for the current BrowsingContext. */ forceClosePrompts() { - let prompts = gBrowserPrompts.get(this.browsingContext) || []; + let dialogs = gBrowserDialogs.get(this.browsingContext) || []; - for (let [, prompt] of prompts) { - prompt.tabModalPrompt && prompt.tabModalPrompt.abortPrompt(); + for (let [, dialog] of dialogs) { + dialog?.abort(); } } @@ -127,119 +94,18 @@ export class PromptParent extends JSWindowActorParent { } receiveMessage(message) { - let args = message.data; - let id = args._remoteId; - switch (message.name) { case "Prompt:Open": if (!this.windowContext.isActiveInTab) { return undefined; } - if ( - (args.modalType === Ci.nsIPrompt.MODAL_TYPE_CONTENT && - !lazy.contentPromptSubDialog) || - (args.modalType === Ci.nsIPrompt.MODAL_TYPE_TAB && - !lazy.tabChromePromptSubDialog) - ) { - return this.openContentPrompt(args, id); - } - return this.openPromptWithTabDialogBox(args); + return this.openPromptWithTabDialogBox(message.data); } return undefined; } - /** - * Opens a TabModalPrompt for a BrowsingContext, and puts the associated browser - * in the modal state until the TabModalPrompt is closed. - * - * @param {Object} args - * The arguments passed up from the BrowsingContext to be passed directly - * to the TabModalPrompt. - * @param {string} id - * A unique ID to differentiate multiple Prompts coming from the same - * BrowsingContext. - * @return {Promise} - * Resolves when the TabModalPrompt is dismissed. - * @resolves {Object} - * The arguments returned from the TabModalPrompt. - */ - openContentPrompt(args, id) { - let browser = this.browsingContext.top.embedderElement; - if (!browser) { - throw new Error("Cannot tab-prompt without a browser!"); - } - let window = browser.ownerGlobal; - let tabPrompt = window.gBrowser.getTabModalPromptBox(browser); - let newPrompt; - let needRemove = false; - - // If the page which called the prompt is different from the the top context - // where we show the prompt, ask the prompt implementation to display the origin. - // For example, this can happen if a cross origin subframe shows a prompt. - args.showCallerOrigin = - args.promptPrincipal && - !browser.contentPrincipal.equals(args.promptPrincipal); - - let onPromptClose = () => { - let promptData = gBrowserPrompts.get(this.browsingContext); - if (!promptData || !promptData.has(id)) { - throw new Error( - "Failed to close a prompt since it wasn't registered for some reason." - ); - } - - let { resolver, tabModalPrompt } = promptData.get(id); - // It's possible that we removed the prompt during the - // appendPrompt call below. In that case, newPrompt will be - // undefined. We set the needRemove flag to remember to remove - // it right after we've finished adding it. - if (tabModalPrompt) { - tabPrompt.removePrompt(tabModalPrompt); - } else { - needRemove = true; - } - - this.unregisterPrompt(id); - - lazy.PromptUtils.fireDialogEvent( - window, - "DOMModalDialogClosed", - browser, - this.getClosingEventDetail(args) - ); - resolver(args); - browser.maybeLeaveModalState(); - }; - - try { - browser.enterModalState(); - lazy.PromptUtils.fireDialogEvent( - window, - "DOMWillOpenModalDialog", - browser, - this.getOpenEventDetail(args) - ); - - args.promptActive = true; - - newPrompt = tabPrompt.appendPrompt(args, onPromptClose); - let promise = this.registerPrompt(newPrompt, id); - - if (needRemove) { - tabPrompt.removePrompt(newPrompt); - } - - return promise; - } catch (ex) { - console.error(ex); - onPromptClose(true); - } - - return null; - } - /** * Opens either a window prompt or TabDialogBox at the content or tab level * for a BrowsingContext, and puts the associated browser in the modal state @@ -349,8 +215,9 @@ export class PromptParent extends JSWindowActorParent { ); } bag = lazy.PromptUtils.objectToPropBag(args); + let promptID = args._remoteId; try { - await dialogBox.open( + let { dialog, closedPromise } = dialogBox.open( uri, { features: "resizable=no", @@ -359,7 +226,9 @@ export class PromptParent extends JSWindowActorParent { hideContent: args.isTopLevelCrossDomainAuth, }, bag - ).closedPromise; + ); + this.registerDialog(dialog, promptID); + await closedPromise; } finally { if (args.isTopLevelCrossDomainAuth) { browser.currentAuthPromptURI = null; @@ -373,6 +242,7 @@ export class PromptParent extends JSWindowActorParent { currentLocationsTabLabel ); } + this.unregisterPrompt(promptID); } } else { // Ensure we set the correct modal type at this point. diff --git a/browser/actors/RefreshBlockerChild.sys.mjs b/browser/actors/RefreshBlockerChild.sys.mjs index 6ba63298b1..f5e9611144 100644 --- a/browser/actors/RefreshBlockerChild.sys.mjs +++ b/browser/actors/RefreshBlockerChild.sys.mjs @@ -50,7 +50,7 @@ var progressListener = { * the STATE_IS_WINDOW case, which will clear any mappings from * blockedWindows. */ - onStateChange(aWebProgress, aRequest, aStateFlags, aStatus) { + onStateChange(aWebProgress, aRequest, aStateFlags) { if ( aStateFlags & Ci.nsIWebProgressListener.STATE_IS_WINDOW && aStateFlags & Ci.nsIWebProgressListener.STATE_STOP @@ -64,7 +64,7 @@ var progressListener = { * onRefreshAttempted has already fired for this DOM Window, will * send the appropriate refresh blocked data to the parent. */ - onLocationChange(aWebProgress, aRequest, aLocation, aFlags) { + onLocationChange(aWebProgress) { let win = aWebProgress.DOMWindow; if (this.blockedWindows.has(win)) { let data = this.blockedWindows.get(win); @@ -180,7 +180,7 @@ export class RefreshBlockerObserverChild extends JSProcessActorChild { this.filtersMap = new Map(); } - observe(subject, topic, data) { + observe(subject, topic) { switch (topic) { case "webnavigation-create": case "chrome-webnavigation-create": diff --git a/browser/actors/SearchSERPTelemetryChild.sys.mjs b/browser/actors/SearchSERPTelemetryChild.sys.mjs index c760f9a19e..e845f589b0 100644 --- a/browser/actors/SearchSERPTelemetryChild.sys.mjs +++ b/browser/actors/SearchSERPTelemetryChild.sys.mjs @@ -1077,7 +1077,11 @@ class DomainExtractor { break; } case "textContent": { - this.#fromElementsRetrieveTextContent(elements, extractedDomains); + this.#fromElementsRetrieveTextContent( + elements, + extractedDomains, + providerName + ); break; } } @@ -1197,8 +1201,26 @@ class DomainExtractor { * A list of elements from the page whose text content we want to inspect. * @param {Set} extractedDomains * The result set of domains extracted from the page. + * @param {string} providerName + * The name of the search provider. */ - #fromElementsRetrieveTextContent(elements, extractedDomains) { + #fromElementsRetrieveTextContent(elements, extractedDomains, providerName) { + // Not an exhaustive regex, but it fits our purpose for this method. + const LOOSE_URL_REGEX = + /^(?:https?:\/\/)?(?:www\.)?(?:[\w\-]+\.)+(?:[\w\-]{2,})/i; + + // Known but acceptable limitations to this function, where the return + // value won't be correctly fixed up: + // 1) A url is embedded within other text. Ex: "xkcd.com is cool." + // 2) The url contains legal but unusual characters. Ex: $ ! * ' + function fixup(textContent) { + return textContent + .toLowerCase() + .replaceAll(" ", "") + .replace(/\.$/, "") + .concat(".com"); + } + for (let element of elements) { if (this.#exceedsThreshold(extractedDomains.size)) { return; @@ -1209,18 +1231,24 @@ class DomainExtractor { } let domain; - try { - domain = new URL(textContent).hostname; - } catch (e) { - domain = textContent.toLowerCase().replaceAll(" ", ""); - // If the attempt to turn the text content into a URL object only fails - // because we're missing a protocol, ".com" may already be present. - if (!domain.endsWith(".com")) { - domain = domain.concat(".com"); + if (LOOSE_URL_REGEX.test(textContent)) { + // Creating a new URL object will throw if the protocol is missing. + if (!/^https?:\/\//.test(textContent)) { + textContent = "https://" + textContent; + } + + try { + domain = new URL(textContent).hostname; + } catch (e) { + domain = fixup(textContent); } + } else { + domain = fixup(textContent); } - if (!extractedDomains.has(domain)) { - extractedDomains.add(domain); + + let processedDomain = this.#processDomain(domain, providerName); + if (processedDomain && !extractedDomains.has(processedDomain)) { + extractedDomains.add(processedDomain); } } } diff --git a/browser/actors/WebRTCChild.sys.mjs b/browser/actors/WebRTCChild.sys.mjs index 50db01709d..03ad6d389b 100644 --- a/browser/actors/WebRTCChild.sys.mjs +++ b/browser/actors/WebRTCChild.sys.mjs @@ -213,7 +213,7 @@ function getActorForWindow(window) { return null; } -function handlePCRequest(aSubject, aTopic, aData) { +function handlePCRequest(aSubject) { let { windowID, innerWindowID, callID, isSecure } = aSubject; let contentWindow = Services.wm.getOuterWindowWithId(windowID); if (!contentWindow.pendingPeerConnectionRequests) { @@ -235,7 +235,7 @@ function handlePCRequest(aSubject, aTopic, aData) { } } -function handleGUMStop(aSubject, aTopic, aData) { +function handleGUMStop(aSubject) { let contentWindow = Services.wm.getOuterWindowWithId(aSubject.windowID); let request = { @@ -250,7 +250,7 @@ function handleGUMStop(aSubject, aTopic, aData) { } } -function handleGUMRequest(aSubject, aTopic, aData) { +function handleGUMRequest(aSubject) { // Now that a getUserMedia request has been created, we should check // to see if we're supposed to have any devices muted. This needs // to occur after the getUserMedia request is made, since the global @@ -472,7 +472,7 @@ function forgetPendingListsEventually(aContentWindow) { aContentWindow.removeEventListener("unload", WebRTCChild.handleEvent); } -function updateIndicators(aSubject, aTopic, aData) { +function updateIndicators(aSubject) { if ( aSubject instanceof Ci.nsIPropertyBag && aSubject.getProperty("requestURL") == kBrowserURL diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs index 09c39e7393..806fd4abcf 100644 --- a/browser/actors/WebRTCParent.sys.mjs +++ b/browser/actors/WebRTCParent.sys.mjs @@ -609,7 +609,7 @@ function prompt(aActor, aBrowser, aRequest) { actionL10nIds.push({ id }, { id: "webrtc-action-always-block" }); secondaryActions = [ { - callback(aState) { + callback() { aActor.denyRequest(aRequest); if (!isNotNowLabelEnabled) { lazy.SitePermissions.setForPrincipal( @@ -623,7 +623,7 @@ function prompt(aActor, aBrowser, aRequest) { }, }, { - callback(aState) { + callback() { aActor.denyRequest(aRequest); lazy.SitePermissions.setForPrincipal( principal, @@ -1029,7 +1029,7 @@ function prompt(aActor, aBrowser, aRequest) { video.srcObject = stream; video.stream = stream; doc.getElementById("webRTC-preview").hidden = false; - video.onloadedmetadata = function (e) { + video.onloadedmetadata = function () { video.play(); }; }, diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in index 7a09bc2494..08490ba27c 100644 --- a/browser/app/Makefile.in +++ b/browser/app/Makefile.in @@ -50,14 +50,17 @@ endif endif -# channel-prefs.js is handled separate from other prefs due to bug 756325 +ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT)) + +# channel-prefs.js has been removed on macOS. +# channel-prefs.js is handled separately from other prefs due to bug 756325. # DO NOT change the content of channel-prefs.js without taking the appropriate # steps. See bug 1431342. libs:: $(srcdir)/profile/channel-prefs.js $(NSINSTALL) -D $(DIST)/bin/defaults/pref $(call py_action,preprocessor channel-prefs.js,-Fsubstitution $(PREF_PPFLAGS) $(ACDEFINES) $^ -o $(DIST)/bin/defaults/pref/channel-prefs.js) -ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT)) +else MAC_APP_NAME = $(MOZ_APP_DISPLAYNAME) @@ -81,7 +84,7 @@ MAC_BUNDLE_VERSION = $(shell $(PYTHON3) $(srcdir)/macversion.py --version=$(MOZ_ .PHONY: repackage tools repackage:: $(DIST)/bin/$(MOZ_APP_NAME) $(objdir)/macbuild/Contents/MacOS-files.txt - rm -rf $(dist_dest) + rm -rf '$(dist_dest)' $(MKDIR) -p '$(dist_dest)/Contents/MacOS' $(MKDIR) -p '$(dist_dest)/$(LPROJ)' rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents '$(dist_dest)' --exclude English.lproj @@ -99,8 +102,9 @@ tools repackage:: $(DIST)/bin/$(MOZ_APP_NAME) $(objdir)/macbuild/Contents/MacOS- cp -RL $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/document.icns '$(dist_dest)/Contents/Resources/document.icns' $(MKDIR) -p '$(dist_dest)/Contents/Library/LaunchServices' ifdef MOZ_UPDATER - mv -f '$(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater' '$(dist_dest)/Contents/Library/LaunchServices' - ln -s ../../../../Library/LaunchServices/org.mozilla.updater '$(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater' + cp -f '$(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater' '$(dist_dest)/Contents/Library/LaunchServices' endif + $(MKDIR) -p '$(dist_dest)/Contents/Frameworks' + mv '$(dist_dest)/Contents/Resources/ChannelPrefs.framework' '$(dist_dest)/Contents/Frameworks' printf APPLMOZB > '$(dist_dest)/Contents/PkgInfo' endif diff --git a/browser/app/macbuild/Contents/Info.plist.in b/browser/app/macbuild/Contents/Info.plist.in index 48fc32199b..53a3d0f7ea 100644 --- a/browser/app/macbuild/Contents/Info.plist.in +++ b/browser/app/macbuild/Contents/Info.plist.in @@ -291,5 +291,8 @@ NSMicrophoneUsageDescription Only sites you allow within @MAC_APP_NAME@ will be able to use the microphone. + + NSCameraReactionEffectGesturesEnabledDefault + diff --git a/browser/app/nmhproxy/Cargo.toml b/browser/app/nmhproxy/Cargo.toml index 14746d51b6..d432773293 100644 --- a/browser/app/nmhproxy/Cargo.toml +++ b/browser/app/nmhproxy/Cargo.toml @@ -10,8 +10,10 @@ name = "nmhproxy" path = "src/main.rs" [dependencies] +dirs = "4" mozbuild = "0.1" mozilla-central-workspace-hack = { version = "0.1", features = ["nmhproxy"], optional = true } serde = { version = "1", features = ["derive", "rc"] } serde_json = "1.0" +tempfile = "3" url = "2.4" diff --git a/browser/app/nmhproxy/src/commands.rs b/browser/app/nmhproxy/src/commands.rs index 29c86a0dd7..b26180e8f8 100644 --- a/browser/app/nmhproxy/src/commands.rs +++ b/browser/app/nmhproxy/src/commands.rs @@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize}; use std::io::{self, Read, Write}; +use std::path::PathBuf; use std::process::Command; use url::Url; @@ -23,6 +24,7 @@ pub enum FirefoxCommand { LaunchFirefox { url: String }, LaunchFirefoxPrivate { url: String }, GetVersion {}, + GetInstallId {}, } #[derive(Serialize, Deserialize)] // { @@ -34,6 +36,14 @@ pub struct Response { pub result_code: u32, } +#[derive(Serialize, Deserialize)] +// { +// "installation_id": "123ABC456", +// } +pub struct InstallationId { + pub installation_id: String, +} + #[repr(u32)] pub enum ResultCode { Success = 0, @@ -152,6 +162,28 @@ pub fn process_command(command: &FirefoxCommand) -> std::io::Result { Ok(true) } FirefoxCommand::GetVersion {} => generate_response("1", ResultCode::Success.into()), + FirefoxCommand::GetInstallId {} => { + // config_dir() evaluates to ~/Library/Application Support on macOS + // and %RoamingAppData% on Windows. + let mut json_path = match dirs::config_dir() { + Some(path) => path, + None => { + return generate_response( + "Config dir could not be found", + ResultCode::Error.into(), + ) + } + }; + #[cfg(target_os = "windows")] + json_path.push("Mozilla\\Firefox"); + #[cfg(target_os = "macos")] + json_path.push("Firefox"); + + json_path.push("install_id"); + json_path.set_extension("json"); + let mut install_id = String::new(); + get_install_id(&mut json_path, &mut install_id) + } } } @@ -228,10 +260,54 @@ fn launch_firefox( command.to_string() } +fn get_install_id(json_path: &mut PathBuf, install_id: &mut String) -> std::io::Result { + if !json_path.exists() { + return Err(std::io::Error::new( + std::io::ErrorKind::NotFound, + "Install ID file does not exist", + )); + } + let json_size = std::fs::metadata(&json_path) + .map_err(|e| std::io::Error::new(std::io::ErrorKind::NotFound, e))? + .len(); + // Set a 1 KB limit for the file size. + if json_size <= 0 || json_size > 1024 { + return Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "Install ID file has invalid size", + )); + } + let mut file = + std::fs::File::open(json_path).or_else(|_| -> std::io::Result { + return Err(std::io::Error::new( + std::io::ErrorKind::NotFound, + "Failed to open file", + )); + })?; + let mut contents = String::new(); + match file.read_to_string(&mut contents) { + Ok(_) => match serde_json::from_str::(&contents) { + Ok(id) => { + *install_id = id.installation_id.clone(); + generate_response(&id.installation_id, ResultCode::Success.into()) + } + Err(_) => { + return Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "Failed to read installation ID", + )) + } + }, + Err(_) => generate_response("Failed to read file", ResultCode::Error.into()), + }?; + Ok(true) +} + #[cfg(test)] mod tests { use super::*; use std::io::Cursor; + use tempfile::NamedTempFile; #[test] fn test_validate_url() { let valid_test_cases = vec![ @@ -347,4 +423,90 @@ mod tests { let correct_url_format = format!("-osint -private-window {}", url); assert!(command_line.contains(correct_url_format.as_str())); } + + #[test] + fn test_get_install_id_valid() -> std::io::Result<()> { + let mut tempfile = NamedTempFile::new().unwrap(); + let installation_id = InstallationId { + installation_id: "123ABC456".to_string(), + }; + let json_string = serde_json::to_string(&installation_id); + let _ = tempfile.write_all(json_string?.as_bytes()); + let mut install_id = String::new(); + let result = get_install_id(&mut tempfile.path().to_path_buf(), &mut install_id); + assert!(result.is_ok()); + assert_eq!(install_id, "123ABC456"); + Ok(()) + } + + #[test] + fn test_get_install_id_incorrect_var() -> std::io::Result<()> { + #[derive(Serialize, Deserialize)] + pub struct IncorrectJSON { + pub incorrect_var: String, + } + let mut tempfile = NamedTempFile::new().unwrap(); + let incorrect_json = IncorrectJSON { + incorrect_var: "incorrect_val".to_string(), + }; + let json_string = serde_json::to_string(&incorrect_json); + let _ = tempfile.write_all(json_string?.as_bytes()); + let mut install_id = String::new(); + let result = get_install_id(&mut tempfile.path().to_path_buf(), &mut install_id); + assert!(result.is_err()); + let error = result.err().unwrap(); + assert_eq!(error.kind(), std::io::ErrorKind::InvalidData); + Ok(()) + } + + #[test] + fn test_get_install_id_partially_correct_vars() -> std::io::Result<()> { + #[derive(Serialize, Deserialize)] + pub struct IncorrectJSON { + pub installation_id: String, + pub incorrect_var: String, + } + let mut tempfile = NamedTempFile::new().unwrap(); + let incorrect_json = IncorrectJSON { + installation_id: "123ABC456".to_string(), + incorrect_var: "incorrect_val".to_string(), + }; + let json_string = serde_json::to_string(&incorrect_json); + let _ = tempfile.write_all(json_string?.as_bytes()); + let mut install_id = String::new(); + let result = get_install_id(&mut tempfile.path().to_path_buf(), &mut install_id); + // This still succeeds as the installation_id field is present + assert!(result.is_ok()); + Ok(()) + } + + #[test] + fn test_get_install_id_file_does_not_exist() -> std::io::Result<()> { + let tempfile = NamedTempFile::new().unwrap(); + let mut path = tempfile.path().to_path_buf(); + tempfile.close()?; + let mut install_id = String::new(); + let result = get_install_id(&mut path, &mut install_id); + assert!(result.is_err()); + let error = result.err().unwrap(); + assert_eq!(error.kind(), std::io::ErrorKind::NotFound); + Ok(()) + } + + #[test] + fn test_get_install_id_file_too_large() -> std::io::Result<()> { + let mut tempfile = NamedTempFile::new().unwrap(); + let installation_id = InstallationId { + // Create a ~10 KB file + installation_id: String::from_utf8(vec![b'X'; 10000]).unwrap(), + }; + let json_string = serde_json::to_string(&installation_id); + let _ = tempfile.write_all(json_string?.as_bytes()); + let mut install_id = String::new(); + let result = get_install_id(&mut tempfile.path().to_path_buf(), &mut install_id); + assert!(result.is_err()); + let error = result.err().unwrap(); + assert_eq!(error.kind(), std::io::ErrorKind::InvalidData); + Ok(()) + } } diff --git a/browser/app/nmhproxy/src/main.rs b/browser/app/nmhproxy/src/main.rs index de9cd8c2a3..02351eb0f1 100644 --- a/browser/app/nmhproxy/src/main.rs +++ b/browser/app/nmhproxy/src/main.rs @@ -43,9 +43,12 @@ fn main() -> Result<(), Error> { "Failed to deserialize message JSON", )); })?; - commands::process_command(&native_messaging_json).or_else(|_| -> Result { - commands::generate_response("Failed to process command", ResultCode::Error.into()) - .expect("JSON error"); + commands::process_command(&native_messaging_json).or_else(|e| -> Result { + commands::generate_response( + format!("Failed to process command: {}", e).as_str(), + ResultCode::Error.into(), + ) + .expect("JSON error"); return Err(Error::new( ErrorKind::InvalidInput, "Failed to process command", diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 32cd57b0ed..8c4b0e28e5 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -356,6 +356,14 @@ pref("browser.overlink-delay", 80); pref("browser.theme.colorway-closet", true); +#ifdef XP_MACOSX +#ifdef NIGHTLY_BUILD +pref("browser.theme.macos.native-theme", true); +#else +pref("browser.theme.macos.native-theme", false); +#endif +#endif + // Whether expired built-in colorways themes that are active or retained // should be allowed to check for updates and be updated to an AMO hosted // theme with the same id (as part of preparing to remove from mozilla-central @@ -391,7 +399,8 @@ pref("browser.urlbar.speculativeConnect.enabled", true); // search for bookmarklets typing "javascript: " followed by the actual query. pref("browser.urlbar.filter.javascript", true); -// Enable a certain level of urlbar logging to the Browser Console. See Log.jsm. +// Enable a certain level of urlbar logging to the Browser Console. See +// ConsoleInstance.webidl. pref("browser.urlbar.loglevel", "Error"); // the maximum number of results to show in autocomplete when doing richResults @@ -434,7 +443,7 @@ pref("browser.search.param.search_rich_suggestions", "fen"); pref("browser.urlbar.weather.featureGate", false); // Enable clipboard suggestions feature, the pref should be removed once stable. -pref("browser.urlbar.clipboard.featureGate", true); +pref("browser.urlbar.clipboard.featureGate", false); // When false, the weather suggestion will not be fetched when a VPN is // detected. When true, it will be fetched anyway. @@ -718,13 +727,6 @@ pref("browser.download.clearHistoryOnDelete", 0); pref("browser.helperApps.showOpenOptionForPdfJS", true); pref("browser.helperApps.showOpenOptionForViewableInternally", true); -// Whether search-config-v2 is enabled. -#ifdef NIGHTLY_BUILD -pref("browser.search.newSearchConfig.enabled", true); -#else -pref("browser.search.newSearchConfig.enabled", false); -#endif - // search engines URL pref("browser.search.searchEnginesURL", "https://addons.mozilla.org/%LOCALE%/firefox/search-engines/"); @@ -747,7 +749,11 @@ pref("browser.search.separatePrivateDefault.ui.banner.max", 0); pref("browser.search.serpEventTelemetry.enabled", true); // Enables search SERP telemetry page categorization. +#ifdef NIGHTLY_BUILD +pref("browser.search.serpEventTelemetryCategorization.enabled", true); +#else pref("browser.search.serpEventTelemetryCategorization.enabled", false); +#endif // Search Bar removal from the toolbar for users who haven’t used it in 120 // days @@ -811,6 +817,10 @@ pref("browser.shopping.experience2023.sidebarClosedCount", 0); // When conditions are met, shows a prompt on the shopping sidebar asking users if they want to disable auto-open behavior pref("browser.shopping.experience2023.showKeepSidebarClosedMessage", true); +// Enable display of megalist option in browser sidebar +// Keep it hidden from about:config for now. +// pref("browser.megalist.enabled", false); + // Enables the display of the Mozilla VPN banner in private browsing windows pref("browser.privatebrowsing.vpnpromourl", "https://vpn.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-%CHANNEL%-browser&utm_campaign=private-browsing-vpn-link"); @@ -1094,11 +1104,7 @@ pref("privacy.history.custom", false); // 6 - Last 24 hours pref("privacy.sanitize.timeSpan", 1); -#if defined(NIGHTLY_BUILD) -pref("privacy.sanitize.useOldClearHistoryDialog", false); -#else pref("privacy.sanitize.useOldClearHistoryDialog", true); -#endif pref("privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs", false); // flag to track migration of clear history dialog prefs, where cpd stands for @@ -1277,9 +1283,10 @@ pref("browser.sessionstore.idleDelay", 180); // 3 minutes pref("browser.sessionstore.privacy_level", 0); // how many tabs can be reopened (per window) pref("browser.sessionstore.max_tabs_undo", 25); -// how many windows can be reopened (per session) - on non-OS X platforms this -// pref may be ignored when dealing with pop-up windows to ensure proper startup -pref("browser.sessionstore.max_windows_undo", 3); +// how many windows will be saved and can be reopened per session - on non-macOS platforms this +// pref may be ignored when dealing with pop-up windows to ensure the user actually gets +// at least one window with a menu bar. +pref("browser.sessionstore.max_windows_undo", 5); // number of crashes that can occur before the about:sessionrestore page is displayed // (this pref has no effect if more than 6 hours have passed since the last crash) pref("browser.sessionstore.max_resumed_crashes", 1); @@ -1422,7 +1429,11 @@ pref("browser.bookmarks.editDialog.maxRecentFolders", 7); // On windows these levels are: // See - security/sandbox/win/src/sandboxbroker/sandboxBroker.cpp // SetSecurityLevelForContentProcess() for what the different settings mean. - pref("security.sandbox.content.level", 6); + #if defined(NIGHTLY_BUILD) + pref("security.sandbox.content.level", 7); + #else + pref("security.sandbox.content.level", 6); + #endif // Pref controlling if messages relevant to sandbox violations are logged. pref("security.sandbox.logging.enabled", false); @@ -1678,22 +1689,16 @@ pref("browser.topsites.contile.sov.enabled", true); pref("browser.partnerlink.attributionURL", "https://topsites.services.mozilla.com/cid/"); pref("browser.partnerlink.campaign.topsites", "amzn_2020_a1"); -// Whether to show tab level system prompts opened via nsIPrompt(Service) as -// SubDialogs in the TabDialogBox (true) or as TabModalPrompt in the -// TabModalPromptBox (false). -pref("prompts.tabChromePromptSubDialog", true); - -// Whether to show the dialogs opened at the content level, such as -// alert() or prompt(), using a SubDialogManager in the TabDialogBox. -pref("prompts.contentPromptSubDialog", true); - -// Whether to show window-modal dialogs opened for browser windows -// in a SubDialog inside their parent, instead of an OS level window. -pref("prompts.windowPromptSubDialog", true); - // Activates preloading of the new tab url. pref("browser.newtab.preload", true); +// Preference to enable wallpaper selection in the Customize Menu of new tab page +pref("browser.newtabpage.activity-stream.newtabWallpapers.enabled", false); + +// Current new tab page background image. +pref("browser.newtabpage.activity-stream.newtabWallpapers.wallpaper-light", ""); +pref("browser.newtabpage.activity-stream.newtabWallpapers.wallpaper-dark", ""); + pref("browser.newtabpage.activity-stream.newNewtabExperience.colors", "#0090ED,#FF4F5F,#2AC3A2,#FF7139,#A172FF,#FFA437,#FF2A8A"); // Activity Stream prefs that control to which page to redirect @@ -1709,7 +1714,6 @@ pref("browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts", // ASRouter provider configuration pref("browser.newtabpage.activity-stream.asrouter.providers.cfr", "{\"id\":\"cfr\",\"enabled\":true,\"type\":\"remote-settings\",\"collection\":\"cfr\",\"updateCycleInMs\":3600000}"); -pref("browser.newtabpage.activity-stream.asrouter.providers.whats-new-panel", "{\"id\":\"whats-new-panel\",\"enabled\":false,\"type\":\"remote-settings\",\"collection\":\"whats-new-panel\",\"updateCycleInMs\":3600000}"); pref("browser.newtabpage.activity-stream.asrouter.providers.message-groups", "{\"id\":\"message-groups\",\"enabled\":true,\"type\":\"remote-settings\",\"collection\":\"message-groups\",\"updateCycleInMs\":3600000}"); pref("browser.newtabpage.activity-stream.asrouter.providers.messaging-experiments", "{\"id\":\"messaging-experiments\",\"enabled\":true,\"type\":\"remote-experiments\",\"updateCycleInMs\":3600000}"); @@ -1821,9 +1825,6 @@ pref("browser.aboutwelcome.screens", ""); // Used to enable window modal onboarding pref("browser.aboutwelcome.showModal", false); -// The pref that controls if the What's New panel is enabled. -pref("browser.messaging-system.whatsNewPanel.enabled", true); - // Experiment Manager // See Console.sys.mjs LOG_LEVELS for all possible values pref("messaging-system.log", "warn"); @@ -1855,10 +1856,9 @@ pref("pdfjs.previousHandler.alwaysAskBeforeHandling", false); // Try to convert PDFs sent as octet-stream pref("pdfjs.handleOctetStream", true); -pref("sidebar.companion", false); - // Is the sidebar positioned ahead of the content browser pref("sidebar.position_start", true); +pref("sidebar.revamp", false); pref("security.protectionspopup.recordEventTelemetry", true); pref("security.app_menu.recordEventTelemetry", true); @@ -2510,9 +2510,6 @@ pref("identity.fxaccounts.toolbar.pxiToolbarEnabled.monitorEnabled", true); pref("identity.fxaccounts.toolbar.pxiToolbarEnabled.relayEnabled", true); pref("identity.fxaccounts.toolbar.pxiToolbarEnabled.vpnEnabled", true); -// Check bundled omni JARs for corruption. -pref("corroborator.enabled", true); - // Toolbox preferences pref("devtools.toolbox.footer.height", 250); pref("devtools.toolbox.sidebar.width", 500); @@ -2520,7 +2517,8 @@ pref("devtools.toolbox.host", "bottom"); pref("devtools.toolbox.previousHost", "right"); pref("devtools.toolbox.selectedTool", "inspector"); pref("devtools.toolbox.zoomValue", "1"); -pref("devtools.toolbox.splitconsoleEnabled", false); +pref("devtools.toolbox.splitconsole.enabled", true); +pref("devtools.toolbox.splitconsole.open", false); pref("devtools.toolbox.splitconsoleHeight", 100); pref("devtools.toolbox.tabsOrder", ""); // This is only used for local Web Extension debugging, @@ -2550,7 +2548,6 @@ pref("devtools.popups.debug", false); // Toolbox Button preferences pref("devtools.command-button-pick.enabled", true); pref("devtools.command-button-frames.enabled", true); -pref("devtools.command-button-splitconsole.enabled", true); pref("devtools.command-button-responsive.enabled", true); pref("devtools.command-button-screenshot.enabled", false); pref("devtools.command-button-rulers.enabled", false); @@ -3030,10 +3027,14 @@ pref("browser.mailto.dualPrompt", false); // default mailto handler. pref("browser.mailto.prompt.os", true); -pref("browser.backup.enabled", false); +// Pref to initialize the BackupService soon after startup. +pref("browser.backup.enabled", true); // Pref to enable the new profiles pref("browser.profiles.enabled", false); pref("startup.homepage_override_url_nimbus", ""); pref("startup.homepage_override_nimbus_maxVersion", ""); + +// Pref to enable the content relevancy feature. +pref("toolkit.contentRelevancy.enabled", false); diff --git a/browser/base/content/aboutDialog-appUpdater.js b/browser/base/content/aboutDialog-appUpdater.js index 21bf83bc42..5a8cc0561b 100644 --- a/browser/base/content/aboutDialog-appUpdater.js +++ b/browser/base/content/aboutDialog-appUpdater.js @@ -28,7 +28,7 @@ var UPDATING_MIN_DISPLAY_TIME_MS = 1500; var gAppUpdater; -function onUnload(aEvent) { +function onUnload(_aEvent) { if (gAppUpdater) { gAppUpdater.destroy(); gAppUpdater = null; diff --git a/browser/base/content/aboutDialog.xhtml b/browser/base/content/aboutDialog.xhtml index e0fcce367a..55de242415 100644 --- a/browser/base/content/aboutDialog.xhtml +++ b/browser/base/content/aboutDialog.xhtml @@ -138,7 +138,7 @@