From c0db95d3dda1865d4c6bf0666b0e7439b40b9bf2 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 21 Apr 2024 20:35:44 +0200 Subject: Merging upstream version 115.10.0esr. Signed-off-by: Daniel Baumann --- browser/base/content/test/fullscreen/browser.ini | 1 + .../content/test/popupNotifications/browser.ini | 1 + .../browser_popupNotification_security_delay.js | 165 +++++++++++++++++++++ .../components/enterprisepolicies/Policies.sys.mjs | 14 +- .../schemas/policies-schema.json | 8 + .../tests/xpcshell/test_simple_pref_policies.js | 13 ++ .../search/schema/search-telemetry-schema.json | 39 ++++- browser/config/version.txt | 2 +- browser/config/version_display.txt | 2 +- .../formautofill/content/manageDialog.js | 3 + .../browser/policies/policies-descriptions.ftl | 4 + 11 files changed, 242 insertions(+), 10 deletions(-) (limited to 'browser') diff --git a/browser/base/content/test/fullscreen/browser.ini b/browser/base/content/test/fullscreen/browser.ini index 8eecb3f99c..7a63da02f4 100644 --- a/browser/base/content/test/fullscreen/browser.ini +++ b/browser/base/content/test/fullscreen/browser.ini @@ -21,6 +21,7 @@ skip-if = (os == 'linux') || (os == 'win') # Bug 1818795 and Bug 1818796 [browser_fullscreen_newtab.js] [browser_fullscreen_newwindow.js] [browser_fullscreen_permissions_prompt.js] +skip-if = (os == "win" && os_version == "6.1") # Bug 1887280 [browser_fullscreen_warning.js] support-files = fullscreen.html skip-if = diff --git a/browser/base/content/test/popupNotifications/browser.ini b/browser/base/content/test/popupNotifications/browser.ini index a5a8ab4eb9..4bc43a47e9 100644 --- a/browser/base/content/test/popupNotifications/browser.ini +++ b/browser/base/content/test/popupNotifications/browser.ini @@ -32,6 +32,7 @@ skip-if = (os == "linux" && (debug || asan)) https_first_disabled = true skip-if = (os == "linux" && (debug || asan)) [browser_popupNotification_security_delay.js] +skip-if = (os == "win" && os_version == "6.1") # Bug 1887279 [browser_popupNotification_selection_required.js] skip-if = (os == "linux" && (debug || asan)) [browser_reshow_in_background.js] diff --git a/browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js b/browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js index 600456640b..7797e93cd5 100644 --- a/browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js +++ b/browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js @@ -5,6 +5,8 @@ const TEST_SECURITY_DELAY = 5000; +SimpleTest.requestCompleteLog(); + /** * Shows a test PopupNotification. */ @@ -395,3 +397,166 @@ add_task(async function test_notificationWindowMove() { // Reset window position window.moveTo(screenX, screenY); }); + +/** + * Tests that the security delay gets extended if a notification is shown during + * a full screen transition. + */ +add_task(async function test_notificationDuringFullScreenTransition() { + // Log full screen transition messages. + let loggingObserver = { + observe(subject, topic) { + info("Observed topic: " + topic); + }, + }; + Services.obs.addObserver(loggingObserver, "fullscreen-transition-start"); + Services.obs.addObserver(loggingObserver, "fullscreen-transition-end"); + // Unregister observers when the test ends: + registerCleanupFunction(() => { + Services.obs.removeObserver(loggingObserver, "fullscreen-transition-start"); + Services.obs.removeObserver(loggingObserver, "fullscreen-transition-end"); + }); + + if (Services.appinfo.OS == "Linux") { + ok( + "Skipping test on Linux because of disabled full screen transition in CI." + ); + return; + } + // Bug 1882527: Intermittent failures on macOS. + if (Services.appinfo.OS == "Darwin") { + ok("Skipping test on macOS because of intermittent failures."); + return; + } + + await BrowserTestUtils.withNewTab("https://example.com", async browser => { + await SpecialPowers.pushPrefEnv({ + set: [ + // Set a short security delay so we can observe it being extended. + ["security.notification_enable_delay", 1], + // Set a longer full screen exit transition so the test works on slow builds. + ["full-screen-api.transition-duration.leave", "1000 1000"], + // Waive the user activation requirement for full screen requests. + // The PoC this test is based on relies on spam clicking which grants + // user activation in the popup that requests full screen. + // This isn't reliable in automation. + ["full-screen-api.allow-trusted-requests-only", false], + // macOS native full screen is not affected by the full screen + // transition overlap. Test with the old full screen implementation. + ["full-screen-api.macos-native-full-screen", false], + ], + }); + + await ensureSecurityDelayReady(); + + ok( + !PopupNotifications.isPanelOpen, + "PopupNotification panel should not be open initially." + ); + + info("Open a notification."); + let popupShownPromise = waitForNotificationPanel(); + showNotification(); + await popupShownPromise; + ok( + PopupNotifications.isPanelOpen, + "PopupNotification should be open after show call." + ); + + let notification = PopupNotifications.getNotification("foo", browser); + is(notification?.id, "foo", "There should be a notification with id foo"); + + info( + "Open a new tab via window.open, enter full screen and remove the tab." + ); + + // There are two transitions, one for full screen entry and one for full screen exit. + let transitionStartCount = 0; + let transitionEndCount = 0; + let promiseFullScreenTransitionStart = TestUtils.topicObserved( + "fullscreen-transition-start", + () => { + transitionStartCount++; + return transitionStartCount == 2; + } + ); + let promiseFullScreenTransitionEnd = TestUtils.topicObserved( + "fullscreen-transition-end", + () => { + transitionEndCount++; + return transitionEndCount == 2; + } + ); + let notificationShownPromise = waitForNotificationPanel(); + + await SpecialPowers.spawn(browser, [], () => { + // Use eval to execute in the privilege context of the website. + content.eval(` + let button = document.createElement("button"); + button.id = "triggerBtn"; + button.innerText = "Open Popup"; + button.addEventListener("click", () => { + let popup = window.open("about:blank"); + popup.document.write( + "" + ); + popup.document.write( + "" + ); + }); + // Insert button at the top so the synthesized click works. Otherwise + // the button may be outside of the viewport. + document.body.prepend(button); + `); + }); + + let timeClick = performance.now(); + await BrowserTestUtils.synthesizeMouseAtCenter("#triggerBtn", {}, browser); + + info("Wait for the exit transition to start. It's the second transition."); + await promiseFullScreenTransitionStart; + info("Full screen transition start"); + ok(true, "Full screen transition started"); + ok( + window.isInFullScreenTransition, + "Full screen transition is still running." + ); + + info( + "Wait for notification to re-show on tab switch, after the popup has been closed" + ); + await notificationShownPromise; + ok( + window.isInFullScreenTransition, + "Full screen transition is still running." + ); + info( + "about to trigger notification. time between btn click and notification show: " + + (performance.now() - timeClick) + ); + + info( + "Trigger main action via button click during the extended security delay." + ); + triggerMainCommand(PopupNotifications.panel); + + await new Promise(resolve => setTimeout(resolve, 0)); + + ok( + PopupNotifications.isPanelOpen, + "PopupNotification should still be open." + ); + notification = PopupNotifications.getNotification( + "foo", + gBrowser.selectedBrowser + ); + ok( + notification, + "Notification should still be open because we clicked during the security delay." + ); + + info("Wait for full screen transition end."); + await promiseFullScreenTransitionEnd; + info("Full screen transition end"); + }); +}); diff --git a/browser/components/enterprisepolicies/Policies.sys.mjs b/browser/components/enterprisepolicies/Policies.sys.mjs index 21c5bfaa67..8ad1349441 100644 --- a/browser/components/enterprisepolicies/Policies.sys.mjs +++ b/browser/components/enterprisepolicies/Policies.sys.mjs @@ -303,6 +303,18 @@ export var Policies = { }, }, + AutofillAddressEnabled: { + onBeforeAddons(manager, param) { + setAndLockPref("extensions.formautofill.addresses.enabled", param); + }, + }, + + AutofillCreditCardEnabled: { + onBeforeAddons(manager, param) { + setAndLockPref("extensions.formautofill.creditCards.enabled", param); + }, + }, + AutoLaunchProtocolsFromOrigins: { onBeforeAddons(manager, param) { for (let info of param) { @@ -599,8 +611,6 @@ export var Policies = { "browser.download.dir", replacePathVariables(param) ); - // If a custom download directory is being used, just lock folder list to 2. - setAndLockPref("browser.download.folderList", 2); }, }, diff --git a/browser/components/enterprisepolicies/schemas/policies-schema.json b/browser/components/enterprisepolicies/schemas/policies-schema.json index 8ff88935dd..e2161107af 100644 --- a/browser/components/enterprisepolicies/schemas/policies-schema.json +++ b/browser/components/enterprisepolicies/schemas/policies-schema.json @@ -86,6 +86,14 @@ } }, + "AutofillAddressEnabled": { + "type": "boolean" + }, + + "AutofillCreditCardEnabled": { + "type": "boolean" + }, + "AutoLaunchProtocolsFromOrigins": { "type": ["array", "JSON"], "items": { diff --git a/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js b/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js index 47cd33460c..0a8d77d483 100644 --- a/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js +++ b/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js @@ -1021,6 +1021,19 @@ const POLICIES_TESTS = [ "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features": true, }, }, + + // POLICY: AutofillAddressEnabled, AutofillCreditCardEnabled + + { + policies: { + AutofillAddressEnabled: false, + AutofillCreditCardEnabled: false, + }, + lockedPrefs: { + "extensions.formautofill.addresses.enabled": false, + "extensions.formautofill.creditCards.enabled": false, + }, + }, ]; add_task(async function test_policy_simple_prefs() { diff --git a/browser/components/search/schema/search-telemetry-schema.json b/browser/components/search/schema/search-telemetry-schema.json index 872166d44c..58dacca965 100644 --- a/browser/components/search/schema/search-telemetry-schema.json +++ b/browser/components/search/schema/search-telemetry-schema.json @@ -238,6 +238,15 @@ "description": "The matching regular expression." } }, + "nonAdsLinkQueryParamNames": { + "type": "array", + "title": "Non-ads link query param names", + "description": "Query param names present in non-ads link that recover the link that will be redirected to.", + "items": { + "type": "string", + "string": "The query param name to examine." + } + }, "nonAdsLinkRegexps": { "type": "array", "title": "Non-ads link matching regular expressions", @@ -333,7 +342,7 @@ "description": "The query to inspect all elements on the SERP." }, "method": { - "enum": ["data-attribute"], + "enum": ["dataAttribute"], "description": "The extraction method used for the query." }, "options": { @@ -366,19 +375,37 @@ "queryParamKey": { "type": "string", "description": "The query parameter key to inspect in the href." + }, + "queryParamValueIsHref": { + "type": "boolean", + "description": "Whether the query param value is expected to contain an href." } }, "required": ["queryParamKey"] } }, "required": ["selectors", "method"] + }, + { + "type": "object", + "properties": { + "selectors": { + "type": "string", + "description": "The query to use to inspect all elements on the SERP." + }, + "method": { + "enum": ["textContent"], + "description": "The extraction method to use for the query." + } + }, + "required": ["selectors", "method"] } ] + }, + "skipCount": { + "title": "Skip Count", + "description": "Whether to skip reporting of the count of these elements to ad_impressions. Defaults to false.", + "type": "boolean" } - }, - "skipCount": { - "title": "Skip Count", - "description": "Whether to skip reporting of the count of these elements to ad_impressions. Defaults to false.", - "type": "boolean" } } diff --git a/browser/config/version.txt b/browser/config/version.txt index 1193934057..dc72eb956c 100644 --- a/browser/config/version.txt +++ b/browser/config/version.txt @@ -1 +1 @@ -115.9.1 +115.10.0 diff --git a/browser/config/version_display.txt b/browser/config/version_display.txt index fc8a0f7a39..bf3417d98d 100644 --- a/browser/config/version_display.txt +++ b/browser/config/version_display.txt @@ -1 +1 @@ -115.9.1esr +115.10.0esr diff --git a/browser/extensions/formautofill/content/manageDialog.js b/browser/extensions/formautofill/content/manageDialog.js index 25498fbcaf..1dbce04f17 100644 --- a/browser/extensions/formautofill/content/manageDialog.js +++ b/browser/extensions/formautofill/content/manageDialog.js @@ -211,6 +211,9 @@ class ManageRecords { this._elements.edit.setAttribute("disabled", "disabled"); this._elements.remove.removeAttribute("disabled"); } + this._elements.add.disabled = !Services.prefs.getBoolPref( + `extensions.formautofill.${this._subStorageName}.enabled` + ); } /** diff --git a/browser/locales/en-US/browser/policies/policies-descriptions.ftl b/browser/locales/en-US/browser/policies/policies-descriptions.ftl index c17792826c..9ae7b462a1 100644 --- a/browser/locales/en-US/browser/policies/policies-descriptions.ftl +++ b/browser/locales/en-US/browser/policies/policies-descriptions.ftl @@ -21,6 +21,10 @@ policy-AppUpdateURL = Set custom app update URL. policy-Authentication = Configure integrated authentication for websites that support it. +policy-AutofillAddressEnabled = Enable autofill for addresses. + +policy-AutofillCreditCardEnabled = Enable autofill for payment methods. + policy-AutoLaunchProtocolsFromOrigins = Define a list of external protocols that can be used from listed origins without prompting the user. policy-BackgroundAppUpdate2 = Enable or disable the background updater. -- cgit v1.2.3