summaryrefslogtreecommitdiffstats
path: root/browser
diff options
context:
space:
mode:
Diffstat (limited to 'browser')
-rw-r--r--browser/base/content/test/fullscreen/browser.ini1
-rw-r--r--browser/base/content/test/popupNotifications/browser.ini1
-rw-r--r--browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js165
-rw-r--r--browser/components/enterprisepolicies/Policies.sys.mjs14
-rw-r--r--browser/components/enterprisepolicies/schemas/policies-schema.json8
-rw-r--r--browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js13
-rw-r--r--browser/components/search/schema/search-telemetry-schema.json39
-rw-r--r--browser/config/version.txt2
-rw-r--r--browser/config/version_display.txt2
-rw-r--r--browser/extensions/formautofill/content/manageDialog.js3
-rw-r--r--browser/locales/en-US/browser/policies/policies-descriptions.ftl4
11 files changed, 242 insertions, 10 deletions
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(
+ "<script>setTimeout(() => document.documentElement.requestFullscreen(), 500)</script>"
+ );
+ popup.document.write(
+ "<script>setTimeout(() => window.close(), 1500)</script>"
+ );
+ });
+ // 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.