summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--browser/app/profile/firefox.js6
-rw-r--r--browser/app/winlauncher/LauncherProcessWin.cpp8
-rw-r--r--browser/base/content/test/forms/browser.toml2
-rw-r--r--browser/base/content/test/forms/browser_selectpopup_focus.js38
-rw-r--r--browser/base/content/test/general/browser_save_link-perwindowpb.js6
-rw-r--r--browser/base/content/test/general/browser_save_link_when_window_navigates.js2
-rw-r--r--browser/base/content/test/general/browser_save_video.js2
-rw-r--r--browser/base/content/test/general/navigating_window_with_download.html2
-rw-r--r--browser/components/aboutwelcome/content/aboutwelcome.css29
-rw-r--r--browser/components/asrouter/content-src/styles/_feature-callout.scss6
-rw-r--r--browser/components/asrouter/modules/FeatureCallout.sys.mjs8
-rw-r--r--browser/components/downloads/DownloadsCommon.sys.mjs2
-rw-r--r--browser/components/downloads/DownloadsViewUI.sys.mjs2
-rw-r--r--browser/components/downloads/test/browser/browser_download_overwrite.js2
-rw-r--r--browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js1
-rw-r--r--browser/components/syncedtabs/sidebar.xhtml5
-rw-r--r--browser/components/urlbar/UrlbarInput.sys.mjs16
-rw-r--r--browser/components/urlbar/UrlbarPrefs.sys.mjs7
-rw-r--r--browser/components/urlbar/private/YelpSuggestions.sys.mjs18
-rw-r--r--browser/components/urlbar/tests/browser/browser_result_menu_general.js117
-rw-r--r--browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_yelp.js359
-rw-r--r--browser/config/version.txt2
-rw-r--r--browser/config/version_display.txt2
-rw-r--r--browser/locales/en-US/chrome/browser/downloads/downloads.properties4
-rw-r--r--browser/themes/shared/syncedtabs/sidebar.css7
-rw-r--r--config/milestone.txt2
-rw-r--r--dom/animation/Animation.cpp29
-rw-r--r--dom/animation/Animation.h6
-rw-r--r--dom/animation/AnimationTimeline.h3
-rw-r--r--dom/animation/test/mozilla/file_restyles.html16
-rw-r--r--dom/canvas/CanvasRenderingContext2D.cpp29
-rw-r--r--dom/canvas/CanvasRenderingContext2D.h22
-rw-r--r--dom/locales/en-US/chrome/security/security.properties2
-rw-r--r--dom/security/nsContentSecurityUtils.cpp48
-rw-r--r--dom/security/test/general/browser.toml10
-rw-r--r--dom/security/test/general/browser_test_http_download.js275
-rw-r--r--dom/security/test/general/http_download_page.html23
-rw-r--r--dom/security/test/general/http_download_server.sjs20
-rw-r--r--dom/security/test/https-only/browser_save_as.js10
-rw-r--r--dom/security/test/mixedcontentblocker/browser_test_mixed_content_download.js2
-rw-r--r--dom/serviceworkers/test/browser_download.js2
-rw-r--r--gfx/layers/AnimationInfo.cpp14
-rw-r--r--gfx/thebes/gfxPlatformFontList.cpp6
-rw-r--r--ipc/glue/GeckoChildProcessHost.cpp100
-rw-r--r--js/src/frontend/Parser.cpp6
-rw-r--r--js/src/jit-test/tests/arguments/bug1892699-1.js10
-rw-r--r--js/src/jit-test/tests/arguments/bug1892699.js16
-rw-r--r--layout/reftests/font-matching/1892363-lang-prefs.html3
-rw-r--r--layout/reftests/font-matching/reftest.list3
-rw-r--r--layout/style/res/forms.css1
-rw-r--r--security/manager/ssl/tests/mochitest/mixedcontent/mochitest.toml1
-rw-r--r--services/settings/dumps/blocklists/addons-bloomfilters.json84
-rw-r--r--services/settings/dumps/main/cookie-banner-rules-list.json255
-rw-r--r--services/settings/dumps/main/devtools-compatibility-browsers.json300
-rw-r--r--services/settings/dumps/main/search-config-v2.json542
-rw-r--r--services/settings/dumps/main/search-telemetry-v2.json149
-rw-r--r--services/settings/dumps/security-state/intermediates.json668
-rw-r--r--sourcestamp.txt4
-rw-r--r--testing/web-platform/meta/css/css-transitions/CSSTransition-effect.tentative.html.ini5
-rw-r--r--testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html.ini (renamed from testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.https.html.ini)2
-rw-r--r--testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.html.ini (renamed from testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.https.html.ini)2
-rw-r--r--testing/web-platform/tests/css/css-animations/transition-ready-time-offscreen.html44
-rw-r--r--testing/web-platform/tests/css/css-transitions/CSSTransition-effect.tentative.html7
-rw-r--r--testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html (renamed from testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.https.html)0
-rw-r--r--testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.html (renamed from testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.https.html)0
-rw-r--r--toolkit/components/antitracking/test/browser/browser_staticPartition_saveAs.js2
-rw-r--r--toolkit/components/antitracking/test/browser/file_saveAsPageInfo.html4
-rw-r--r--toolkit/components/downloads/test/unit/test_DownloadLegacy.js2
-rw-r--r--toolkit/components/extensions/test/browser/browser_ext_downloads_referrer.js4
-rw-r--r--toolkit/components/nimbus/FeatureManifest.yaml5
-rw-r--r--toolkit/components/pdfjs/test/browser_pdfjs_octet_stream.js2
-rw-r--r--toolkit/components/telemetry/Histograms.json10
-rw-r--r--toolkit/modules/LightweightThemeConsumer.sys.mjs21
-rw-r--r--toolkit/xre/nsWindowsWMain.cpp23
-rw-r--r--uriloader/exthandler/tests/mochitest/browser_download_idn_blocklist.js5
-rw-r--r--widget/gtk/nsDragService.cpp17
-rw-r--r--widget/gtk/nsDragService.h3
77 files changed, 1867 insertions, 1605 deletions
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index 1ef5a05907..32cd57b0ed 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -634,9 +634,9 @@ pref("browser.urlbar.suggest.mdn", true);
// Feature gate pref for Yelp suggestions in the urlbar.
pref("browser.urlbar.yelp.featureGate", false);
-// The minimum prefix length of yelp query the user must type to trigger
-// the suggestion.
-pref("browser.urlbar.yelp.minKeywordLength", 5);
+// The minimum prefix length of a Yelp keyword the user must type to trigger the
+// suggestion. 0 means the min length should be taken from Nimbus.
+pref("browser.urlbar.yelp.minKeywordLength", 0);
// Whether Yelp suggestions should be shown as top picks.
pref("browser.urlbar.yelp.priority", false);
diff --git a/browser/app/winlauncher/LauncherProcessWin.cpp b/browser/app/winlauncher/LauncherProcessWin.cpp
index 81d4ee91e9..b40e0fceb5 100644
--- a/browser/app/winlauncher/LauncherProcessWin.cpp
+++ b/browser/app/winlauncher/LauncherProcessWin.cpp
@@ -401,12 +401,8 @@ Maybe<int> LauncherMain(int& argc, wchar_t* argv[],
}
#endif // defined(MOZ_LAUNCHER_PROCESS)
- // Now proceed with setting up the parameters for process creation.
- constexpr static const wchar_t* extraArgs[] = {
- L"/prefetch:1", // for APFL; see ipc/glue/GeckoChildProcessHost.cpp
- };
- UniquePtr<wchar_t[]> cmdLine(
- MakeCommandLine(argc, argv, ARRAYSIZE(extraArgs), extraArgs));
+ // Now proceed with setting up the parameters for process creation
+ UniquePtr<wchar_t[]> cmdLine(MakeCommandLine(argc, argv));
if (!cmdLine) {
HandleLauncherError(LAUNCHER_ERROR_GENERIC());
return Nothing();
diff --git a/browser/base/content/test/forms/browser.toml b/browser/base/content/test/forms/browser.toml
index 95b666369e..c7cabfa1b0 100644
--- a/browser/base/content/test/forms/browser.toml
+++ b/browser/base/content/test/forms/browser.toml
@@ -14,6 +14,8 @@ skip-if = ["os == 'linux'"] # Bug 1329991 - test fails intermittently on Linux b
["browser_selectpopup_dir.js"]
+["browser_selectpopup_focus.js"]
+
["browser_selectpopup_hr.js"]
["browser_selectpopup_large.js"]
diff --git a/browser/base/content/test/forms/browser_selectpopup_focus.js b/browser/base/content/test/forms/browser_selectpopup_focus.js
new file mode 100644
index 0000000000..24ff947c50
--- /dev/null
+++ b/browser/base/content/test/forms/browser_selectpopup_focus.js
@@ -0,0 +1,38 @@
+// Empty select to make sure that we click on the menulist button.
+const PAGE = `
+<!doctype html>
+<select style="padding: 0">
+ <option></option>
+</select>
+`;
+
+function tick() {
+ return new Promise(r =>
+ requestAnimationFrame(() => requestAnimationFrame(r))
+ );
+}
+
+add_task(async function () {
+ const url = "data:text/html," + encodeURI(PAGE);
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url,
+ },
+ async function (browser) {
+ await openSelectPopup("click");
+ await SpecialPowers.spawn(browser, [], () => {
+ is(
+ content.document.activeElement,
+ content.document.querySelector("select"),
+ "Select is the active element"
+ );
+ ok(
+ content.document.querySelector("select").matches(":focus"),
+ "Select matches :focus"
+ );
+ });
+ await hideSelectPopup();
+ }
+ );
+});
diff --git a/browser/base/content/test/general/browser_save_link-perwindowpb.js b/browser/base/content/test/general/browser_save_link-perwindowpb.js
index 234813ca2c..d5a0eef86c 100644
--- a/browser/base/content/test/general/browser_save_link-perwindowpb.js
+++ b/browser/base/content/test/general/browser_save_link-perwindowpb.js
@@ -14,7 +14,7 @@ function triggerSave(aWindow, aCallback) {
let testBrowser = aWindow.gBrowser.selectedBrowser;
// This page sets a cookie if and only if a cookie does not exist yet
let testURI =
- "https://example.com/browser/browser/base/content/test/general/bug792517-2.html";
+ "http://mochi.test:8888/browser/browser/base/content/test/general/bug792517-2.html";
BrowserTestUtils.startLoadingURIString(testBrowser, testURI);
BrowserTestUtils.browserLoaded(testBrowser, false, testURI).then(() => {
waitForFocus(function () {
@@ -132,7 +132,7 @@ function test() {
info("onExamineResponse with " + channel.URI.spec);
if (
channel.URI.spec !=
- "https://example.com/browser/browser/base/content/test/general/bug792517.sjs"
+ "http://mochi.test:8888/browser/browser/base/content/test/general/bug792517.sjs"
) {
info("returning");
return;
@@ -158,7 +158,7 @@ function test() {
info("onModifyRequest with " + channel.URI.spec);
if (
channel.URI.spec !=
- "https://example.com/browser/browser/base/content/test/general/bug792517.sjs"
+ "http://mochi.test:8888/browser/browser/base/content/test/general/bug792517.sjs"
) {
return;
}
diff --git a/browser/base/content/test/general/browser_save_link_when_window_navigates.js b/browser/base/content/test/general/browser_save_link_when_window_navigates.js
index 65daef5f1b..1c68b91ddf 100644
--- a/browser/base/content/test/general/browser_save_link_when_window_navigates.js
+++ b/browser/base/content/test/general/browser_save_link_when_window_navigates.js
@@ -36,7 +36,7 @@ function triggerSave(aWindow, aCallback) {
var fileName;
let testBrowser = aWindow.gBrowser.selectedBrowser;
let testURI =
- "https://example.com/browser/browser/base/content/test/general/navigating_window_with_download.html";
+ "http://mochi.test:8888/browser/browser/base/content/test/general/navigating_window_with_download.html";
// Only observe the UTC dialog if it's enabled by pref
if (Services.prefs.getBoolPref(ALWAYS_ASK_PREF)) {
diff --git a/browser/base/content/test/general/browser_save_video.js b/browser/base/content/test/general/browser_save_video.js
index e9701d7023..d8dc5c6e2e 100644
--- a/browser/base/content/test/general/browser_save_video.js
+++ b/browser/base/content/test/general/browser_save_video.js
@@ -14,7 +14,7 @@ add_task(async function () {
let loadPromise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
BrowserTestUtils.startLoadingURIString(
gBrowser,
- "https://example.com/browser/browser/base/content/test/general/web_video.html"
+ "http://mochi.test:8888/browser/browser/base/content/test/general/web_video.html"
);
await loadPromise;
diff --git a/browser/base/content/test/general/navigating_window_with_download.html b/browser/base/content/test/general/navigating_window_with_download.html
index 8649168cf5..6b0918941f 100644
--- a/browser/base/content/test/general/navigating_window_with_download.html
+++ b/browser/base/content/test/general/navigating_window_with_download.html
@@ -2,6 +2,6 @@
<html>
<head><title>This window will navigate while you're downloading something</title></head>
<body>
- <iframe src="https://example.com/browser/browser/base/content/test/general/unknownContentType_file.pif"></iframe>
+ <iframe src="http://mochi.test:8888/browser/browser/base/content/test/general/unknownContentType_file.pif"></iframe>
</body>
</html>
diff --git a/browser/components/aboutwelcome/content/aboutwelcome.css b/browser/components/aboutwelcome/content/aboutwelcome.css
index 411f6d4f9b..aa0445e0ef 100644
--- a/browser/components/aboutwelcome/content/aboutwelcome.css
+++ b/browser/components/aboutwelcome/content/aboutwelcome.css
@@ -167,6 +167,35 @@
--fc-link-color-active: var(--fc-link-color-hover-active, #AAF2FF);
}
}
+:root[lwt-newtab-brighttext] #feature-callout.simulateContent.lwtNewtab {
+ color-scheme: dark;
+ --fc-background: var(--fc-background-dark, rgb(43, 42, 51));
+ --fc-color: var(--fc-color-dark, rgb(251, 251, 254));
+ --fc-border: var(--fc-border-dark, #3A3944);
+ --fc-accent-color: var(--fc-accent-color-dark, rgb(0, 221, 255));
+ --fc-button-background: var(--fc-button-background-dark, #2B2A33);
+ --fc-button-color: var(--fc-button-color-dark, rgb(251, 251, 254));
+ --fc-button-border: var(--fc-button-border-dark, transparent);
+ --fc-button-background-hover: var(--fc-button-background-hover-dark, #52525E);
+ --fc-button-color-hover: var(--fc-button-color-hover-dark, rgb(251, 251, 254));
+ --fc-button-border-hover: var(--fc-button-border-hover-dark, transparent);
+ --fc-button-background-active: var(--fc-button-background-active-dark, #5B5B66);
+ --fc-button-color-active: var(--fc-button-color-active-dark, rgb(251, 251, 254));
+ --fc-button-border-active: var(--fc-button-border-active-dark, transparent);
+ --fc-primary-button-background: var(--fc-primary-button-background-dark, rgb(0,221,255));
+ --fc-primary-button-color: var(--fc-primary-button-color-dark, rgb(43,42,51));
+ --fc-primary-button-border: var(--fc-primary-button-border-dark, transparent);
+ --fc-primary-button-background-hover: var(--fc-primary-button-background-hover-dark, rgb(128,235,255));
+ --fc-primary-button-color-hover: var(--fc-primary-button-color-hover-dark, rgb(43,42,51));
+ --fc-primary-button-border-hover: var(--fc-primary-button-border-hover-dark, transparent);
+ --fc-primary-button-background-active: var(--fc-primary-button-background-active-dark, rgb(170,242,255));
+ --fc-primary-button-color-active: var(--fc-primary-button-color-active-dark, rgb(43,42,51));
+ --fc-primary-button-border-active: var(--fc-primary-button-border-active-dark, transparent);
+ --fc-link-color: var(--fc-link-color-dark, #00DDFF);
+ --fc-link-color-hover: var(--fc-link-color-hover-dark, #80EBFF);
+ --fc-link-color-active: var(--fc-link-color-hover-active, #AAF2FF);
+}
+
@media (prefers-contrast) {
#feature-callout.simulateContent {
--fc-background: var(--fc-background-hcm, -moz-dialog);
diff --git a/browser/components/asrouter/content-src/styles/_feature-callout.scss b/browser/components/asrouter/content-src/styles/_feature-callout.scss
index 66770c2238..40137fd29a 100644
--- a/browser/components/asrouter/content-src/styles/_feature-callout.scss
+++ b/browser/components/asrouter/content-src/styles/_feature-callout.scss
@@ -42,6 +42,12 @@
@include dark-theme;
}
+ @at-root :root[lwt-newtab-brighttext] #{&}.lwtNewtab {
+ color-scheme: dark;
+
+ @include dark-theme;
+ }
+
@media (prefers-contrast) {
@include hcm-theme;
}
diff --git a/browser/components/asrouter/modules/FeatureCallout.sys.mjs b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
index 01998662f6..5f0e266a4e 100644
--- a/browser/components/asrouter/modules/FeatureCallout.sys.mjs
+++ b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
@@ -1834,6 +1834,14 @@ export class FeatureCallout {
"simulateContent",
!!this.theme.simulateContent
);
+ this._container.classList.toggle(
+ "lwtNewtab",
+ !!(
+ this.theme.lwtNewtab !== false &&
+ this.theme.simulateContent &&
+ ["themed-content", "newtab"].includes(this.theme.preset)
+ )
+ );
for (const type of ["light", "dark", "hcm"]) {
const scheme = this.theme[type];
for (const name of FeatureCallout.themePropNames) {
diff --git a/browser/components/downloads/DownloadsCommon.sys.mjs b/browser/components/downloads/DownloadsCommon.sys.mjs
index 776d219ae7..d88b2c4cd0 100644
--- a/browser/components/downloads/DownloadsCommon.sys.mjs
+++ b/browser/components/downloads/DownloadsCommon.sys.mjs
@@ -696,7 +696,7 @@ export var DownloadsCommon = {
message = s.unblockTypePotentiallyUnwanted2;
break;
case lazy.Downloads.Error.BLOCK_VERDICT_INSECURE:
- message = s.unblockInsecure3;
+ message = s.unblockInsecure2;
break;
default:
// Assume Downloads.Error.BLOCK_VERDICT_MALWARE
diff --git a/browser/components/downloads/DownloadsViewUI.sys.mjs b/browser/components/downloads/DownloadsViewUI.sys.mjs
index ffcd3b61fa..9c6bd17d63 100644
--- a/browser/components/downloads/DownloadsViewUI.sys.mjs
+++ b/browser/components/downloads/DownloadsViewUI.sys.mjs
@@ -888,7 +888,7 @@ DownloadsViewUI.DownloadElementShell.prototype = {
case lazy.Downloads.Error.BLOCK_VERDICT_INSECURE:
return [
s.blockedPotentiallyInsecure,
- [s.unblockInsecure3, s.unblockTip2],
+ [s.unblockInsecure2, s.unblockTip2],
];
case lazy.Downloads.Error.BLOCK_VERDICT_POTENTIALLY_UNWANTED:
return [
diff --git a/browser/components/downloads/test/browser/browser_download_overwrite.js b/browser/components/downloads/test/browser/browser_download_overwrite.js
index b1de07b5ed..8246ec9f55 100644
--- a/browser/components/downloads/test/browser/browser_download_overwrite.js
+++ b/browser/components/downloads/test/browser/browser_download_overwrite.js
@@ -5,7 +5,7 @@
const TEST_ROOT = getRootDirectory(gTestPath).replace(
"chrome://mochitests/content",
- "https://example.com"
+ "http://example.com"
);
var MockFilePicker = SpecialPowers.MockFilePicker;
diff --git a/browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js b/browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js
index c54bb1aec1..0266765782 100644
--- a/browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js
+++ b/browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js
@@ -38,7 +38,6 @@ add_setup(async function () {
set: [
["privacy.firstparty.isolate", true],
["dom.security.https_first", false],
- ["dom.block_download_insecure", false],
],
});
diff --git a/browser/components/syncedtabs/sidebar.xhtml b/browser/components/syncedtabs/sidebar.xhtml
index 8091f61aee..7790620f94 100644
--- a/browser/components/syncedtabs/sidebar.xhtml
+++ b/browser/components/syncedtabs/sidebar.xhtml
@@ -15,7 +15,10 @@
<link
rel="stylesheet"
- media="all"
+ href="chrome://global/skin/design-system/tokens-brand.css"
+ />
+ <link
+ rel="stylesheet"
href="chrome://browser/skin/syncedtabs/sidebar.css"
/>
<link rel="localization" href="browser/syncedTabs.ftl" />
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
index 6aefd18f9c..96fc7b9301 100644
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
@@ -2766,20 +2766,18 @@ export class UrlbarInput {
return;
}
- let url =
- element.dataset.command == "help"
- ? result.payload.helpUrl
- : element.dataset.url;
+ let url;
+ if (element.dataset.command == "help") {
+ url = result.payload.helpUrl;
+ }
+ url ||= element.dataset.url;
+
if (!url) {
return;
}
let where = this._whereToOpen(event);
- if (
- url &&
- result.type != lazy.UrlbarUtils.RESULT_TYPE.TIP &&
- where == "current"
- ) {
+ if (result.type != lazy.UrlbarUtils.RESULT_TYPE.TIP && where == "current") {
// Open non-tip help links in a new tab unless the user held a modifier.
// TODO (bug 1696232): Do this for tip help links, too.
where = "tab";
diff --git a/browser/components/urlbar/UrlbarPrefs.sys.mjs b/browser/components/urlbar/UrlbarPrefs.sys.mjs
index c521264fa5..022d0b1c7c 100644
--- a/browser/components/urlbar/UrlbarPrefs.sys.mjs
+++ b/browser/components/urlbar/UrlbarPrefs.sys.mjs
@@ -485,9 +485,9 @@ const PREF_URLBAR_DEFAULTS = new Map([
// Feature gate pref for Yelp suggestions in the urlbar.
["yelp.featureGate", false],
- // The minimum number of characters the user must type to trigger a Yelp
- // suggestion (excluding full keywords that are shorter than this).
- ["yelp.minKeywordLength", 5],
+ // The minimum prefix length of a Yelp keyword the user must type to trigger
+ // the suggestion. 0 means the min length should be taken from Nimbus.
+ ["yelp.minKeywordLength", 0],
// Whether Yelp suggestions should be shown as top picks. This is a fallback
// pref for the `yelpSuggestPriority` Nimbus variable.
@@ -526,6 +526,7 @@ const NIMBUS_DEFAULTS = {
weatherKeywordsMinimumLength: 0,
weatherKeywordsMinimumLengthCap: 0,
weatherSimpleUI: false,
+ yelpMinKeywordLength: 0,
};
// Maps preferences under browser.urlbar.suggest to behavior names, as defined
diff --git a/browser/components/urlbar/private/YelpSuggestions.sys.mjs b/browser/components/urlbar/private/YelpSuggestions.sys.mjs
index a1ac13177b..4cf454c71d 100644
--- a/browser/components/urlbar/private/YelpSuggestions.sys.mjs
+++ b/browser/components/urlbar/private/YelpSuggestions.sys.mjs
@@ -227,19 +227,11 @@ export class YelpSuggestions extends BaseFeature {
}
get #minKeywordLength() {
- // It's unusual to get both a Nimbus variable and its fallback pref at the
- // same time, but we have a good reason. To recap, if a variable doesn't
- // have a value, then the value of its fallback will be returned; otherwise
- // the variable value will be returned. That's usually what we want, but for
- // Yelp, we set the pref each time the user clicks "show less frequently",
- // and we want the variable to act only as an initial min length. In other
- // words, if the pref has a user value (because we set it), use it;
- // otherwise use the initial value defined by the variable.
- return Math.max(
- lazy.UrlbarPrefs.get("yelpMinKeywordLength") || 0,
- lazy.UrlbarPrefs.get("yelp.minKeywordLength") || 0,
- 0
- );
+ let minLength =
+ lazy.UrlbarPrefs.get("yelp.minKeywordLength") ||
+ lazy.UrlbarPrefs.get("yelpMinKeywordLength") ||
+ 0;
+ return Math.max(minLength, 0);
}
async #fetchCity() {
diff --git a/browser/components/urlbar/tests/browser/browser_result_menu_general.js b/browser/components/urlbar/tests/browser/browser_result_menu_general.js
index ece48de20a..397ffe0e94 100644
--- a/browser/components/urlbar/tests/browser/browser_result_menu_general.js
+++ b/browser/components/urlbar/tests/browser/browser_result_menu_general.js
@@ -9,6 +9,9 @@
const MAX_RESULTS = UrlbarPrefs.get("maxRichResults");
const RESULT_URL = "https://example.com/test";
const RESULT_HELP_URL = "https://example.com/help";
+const DEFAULT_HELP_URL =
+ Services.urlFormatter.formatURLPref("app.support.baseURL") +
+ "awesome-bar-result-menu";
add_setup(async function () {
// Add enough results to fill up the view.
@@ -21,25 +24,60 @@ add_setup(async function () {
});
});
-// Sets `helpUrl` on a result payload and makes sure the result menu ends up
-// with a help command.
-add_task(async function help() {
- let provider = registerTestProvider(1);
+// Creates a provider that sets `helpUrl` on its result payload. The specified
+// `helpUrl` should be loaded when the result's help menu item is clicked.
+add_task(async function help_resultHelpUrl() {
+ await doHelpTest({
+ provider: registerTestProvider({
+ resultHelpUrl: RESULT_HELP_URL,
+ }),
+ expectedHelpUrl: RESULT_HELP_URL,
+ expectedHelpL10n: { id: "urlbar-result-menu-tip-get-help", args: null },
+ });
+});
+
+// Creates a provider that does not set `helpUrl` on its result payload but
+// instead implements `getResultCommands()` and returns a "help" command. The
+// default help URL should be loaded when the result's help menu item is
+// clicked.
+add_task(async function help_getResultCommands() {
+ let provider = registerTestProvider({
+ resultHelpUrl: null,
+ });
+ let l10n = { id: "urlbar-result-menu-learn-more", args: null };
+ provider.getResultCommands = () => [{ l10n, name: "help" }];
+
+ await doHelpTest({
+ provider,
+ expectedHelpUrl: DEFAULT_HELP_URL,
+ expectedHelpL10n: l10n,
+ });
+});
+
+async function doHelpTest({
+ provider,
+ expectedHelpUrl,
+ expectedHelpL10n,
+ expectedResultIndex = 1,
+}) {
await UrlbarTestUtils.promiseAutocompleteResultPopup({
value: "example",
window,
});
- await assertIsTestResult(1);
+ await assertIsTestResult(expectedResultIndex);
- let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(
+ window,
+ expectedResultIndex
+ );
let menuButton = result.element.row._buttons.get("menu");
Assert.ok(menuButton, "Sanity check: menu button should exist");
let menuitem = await UrlbarTestUtils.openResultMenuAndGetItem({
window,
command: "help",
- resultIndex: 1,
+ resultIndex: expectedResultIndex,
openByMouse: true,
});
Assert.ok(menuitem, "Help menu item should exist");
@@ -47,7 +85,7 @@ add_task(async function help() {
let l10nAttrs = document.l10n.getAttributes(menuitem);
Assert.deepEqual(
l10nAttrs,
- { id: "urlbar-result-menu-tip-get-help", args: null },
+ expectedHelpL10n,
"The l10n ID attribute was correctly set"
);
@@ -60,7 +98,7 @@ add_task(async function help() {
let loadPromise = BrowserTestUtils.waitForNewTab(gBrowser);
await UrlbarTestUtils.openResultMenuAndClickItem(window, "help", {
- resultIndex: 1,
+ resultIndex: expectedResultIndex,
openByMouse: true,
});
@@ -69,18 +107,18 @@ add_task(async function help() {
await TestUtils.waitForTick();
Assert.equal(
gBrowser.currentURI.spec,
- RESULT_HELP_URL,
+ expectedHelpUrl,
"The load URL should be the help URL"
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
UrlbarProvidersManager.unregisterProvider(provider);
-});
+}
// (SHIFT+)TABs through a result with a menu button. The result is the second
// result and has other results after it.
add_task(async function keyboardSelection_secondResult() {
- let provider = registerTestProvider(1);
+ let provider = registerTestProvider();
await UrlbarTestUtils.promiseAutocompleteResultPopup({
value: "example",
window,
@@ -130,7 +168,7 @@ add_task(async function keyboardSelection_secondResult() {
// (SHIFT+)TABs through a result with a help button. The result is the
// last result.
add_task(async function keyboardSelection_lastResult() {
- let provider = registerTestProvider(MAX_RESULTS - 1);
+ let provider = registerTestProvider({ suggestedIndex: MAX_RESULTS - 1 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
value: "example",
window,
@@ -221,7 +259,7 @@ add_task(async function pick_help_mouse() {
async function doPickTest({ pickHelp, useKeyboard }) {
await BrowserTestUtils.withNewTab("about:blank", async () => {
let index = 1;
- let provider = registerTestProvider(index);
+ let provider = registerTestProvider({ suggestedIndex: index });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
value: "example",
window,
@@ -281,31 +319,44 @@ async function doPickTest({ pickHelp, useKeyboard }) {
}
/**
- * Registers a provider that creates a result with a help URL.
+ * Registers a provider that creates a result optionally with a help URL.
*
- * @param {number} suggestedIndex
+ * @param {object} options
+ * Options object
+ * @param {number} options.suggestedIndex
* The result's suggestedIndex.
+ * @param {string} options.resultHelpUrl
+ * The result's helpUrl. Pass a falsey value to prevent setting a helpUrl.
* @returns {UrlbarProvider}
* The new provider.
*/
-function registerTestProvider(suggestedIndex) {
- let results = [
- Object.assign(
- new UrlbarResult(
- UrlbarUtils.RESULT_TYPE.URL,
- UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
- {
- url: RESULT_URL,
- helpUrl: RESULT_HELP_URL,
- helpL10n: {
- id: "urlbar-result-menu-tip-get-help",
- },
- }
+function registerTestProvider({
+ suggestedIndex = 1,
+ resultHelpUrl = RESULT_HELP_URL,
+} = {}) {
+ let payload = { url: RESULT_URL };
+ if (resultHelpUrl) {
+ payload = {
+ ...payload,
+ helpUrl: resultHelpUrl,
+ helpL10n: {
+ id: "urlbar-result-menu-tip-get-help",
+ },
+ };
+ }
+
+ let provider = new UrlbarTestUtils.TestProvider({
+ results: [
+ Object.assign(
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
+ payload
+ ),
+ { suggestedIndex }
),
- { suggestedIndex }
- ),
- ];
- let provider = new UrlbarTestUtils.TestProvider({ results });
+ ],
+ });
UrlbarProvidersManager.registerProvider(provider);
return provider;
}
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_yelp.js b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_yelp.js
index aa9c700f1c..3c61e9afea 100644
--- a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_yelp.js
+++ b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_yelp.js
@@ -26,6 +26,21 @@ const REMOTE_SETTINGS_RECORDS = [
},
];
+const AB_RESULT = {
+ url: "https://www.yelp.com/search?find_desc=ab&find_loc=Yokohama%2C+Kanagawa",
+ originalUrl: "https://www.yelp.com/search?find_desc=ab",
+ displayUrl: "yelp.com/search?find_desc=ab&find_loc=Yokohama,+Kanagawa",
+ title: "ab in Yokohama, Kanagawa",
+};
+
+const ALONGERKEYWORD_RESULT = {
+ url: "https://www.yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
+ originalUrl: "https://www.yelp.com/search?find_desc=alongerkeyword",
+ displayUrl:
+ "yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama,+Kanagawa",
+ title: "alongerkeyword in Yokohama, Kanagawa",
+};
+
add_setup(async function () {
Services.prefs.setBoolPref("browser.search.suggest.enabled", false);
@@ -139,12 +154,7 @@ add_task(async function basic() {
{
description: "Subject exact match with length < minKeywordLength",
query: "ab",
- expected: {
- url: "https://www.yelp.com/search?find_desc=ab&find_loc=Yokohama%2C+Kanagawa",
- originalUrl: "https://www.yelp.com/search?find_desc=ab",
- displayUrl: "yelp.com/search?find_desc=ab&find_loc=Yokohama,+Kanagawa",
- title: "ab in Yokohama, Kanagawa",
- },
+ expected: AB_RESULT,
},
{
description:
@@ -174,65 +184,35 @@ add_task(async function basic() {
{
description: "Query length == minKeywordLength, subject not exact match",
query: "along",
- expected: {
- url: "https://www.yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
- originalUrl: "https://www.yelp.com/search?find_desc=alongerkeyword",
- displayUrl:
- "yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama,+Kanagawa",
- title: "alongerkeyword in Yokohama, Kanagawa",
- },
+ expected: ALONGERKEYWORD_RESULT,
},
{
description:
"Query length == minKeywordLength, subject not exact match, showLessFrequentlyCount non-zero",
query: "along",
showLessFrequentlyCount: 1,
- expected: {
- url: "https://www.yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
- originalUrl: "https://www.yelp.com/search?find_desc=alongerkeyword",
- displayUrl:
- "yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama,+Kanagawa",
- title: "alongerkeyword in Yokohama, Kanagawa",
- },
+ expected: ALONGERKEYWORD_RESULT,
},
{
description:
"Query length == minKeywordLength + showLessFrequentlyCount, subject not exact match",
query: "alonge",
showLessFrequentlyCount: 1,
- expected: {
- url: "https://www.yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
- originalUrl: "https://www.yelp.com/search?find_desc=alongerkeyword",
- displayUrl:
- "yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama,+Kanagawa",
- title: "alongerkeyword in Yokohama, Kanagawa",
- },
+ expected: ALONGERKEYWORD_RESULT,
},
{
description:
"Query length < minKeywordLength + showLessFrequentlyCount, subject not exact match",
query: "alonge",
showLessFrequentlyCount: 2,
- expected: {
- url: "https://www.yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
- originalUrl: "https://www.yelp.com/search?find_desc=alongerkeyword",
- displayUrl:
- "yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama,+Kanagawa",
- title: "alongerkeyword in Yokohama, Kanagawa",
- },
+ expected: ALONGERKEYWORD_RESULT,
},
{
description:
"Query length == minKeywordLength + showLessFrequentlyCount, subject not exact match",
query: "alonger",
showLessFrequentlyCount: 2,
- expected: {
- url: "https://www.yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
- originalUrl: "https://www.yelp.com/search?find_desc=alongerkeyword",
- displayUrl:
- "yelp.com/search?find_desc=alongerkeyword&find_loc=Yokohama,+Kanagawa",
- title: "alongerkeyword in Yokohama, Kanagawa",
- },
+ expected: ALONGERKEYWORD_RESULT,
},
];
@@ -632,8 +612,9 @@ add_task(async function notInterested() {
// Tests the "show less frequently" behavior.
add_task(async function showLessFrequently() {
- UrlbarPrefs.set("yelp.showLessFrequentlyCount", 0);
- UrlbarPrefs.set("yelp.minKeywordLength", 0);
+ UrlbarPrefs.clear("yelp.showLessFrequentlyCount");
+ UrlbarPrefs.clear("yelp.minKeywordLength");
+
let cleanUpNimbus = await UrlbarTestUtils.initNimbusFeature({
yelpMinKeywordLength: 0,
yelpShowLessFrequentlyCap: 3,
@@ -790,6 +771,298 @@ add_task(async function rustProviders() {
await QuickSuggestTestUtils.forceSync();
});
+add_task(async function minKeywordLength_noPrefValue() {
+ await doMinKeywordLengthTest({
+ // expected min length: 5 (Nimbus value)
+ prefValue: null,
+ nimbusValue: 5,
+ tests: [
+ {
+ query: "al",
+ expected: null,
+ },
+ {
+ query: "alo",
+ expected: null,
+ },
+ {
+ query: "alon",
+ expected: null,
+ },
+ {
+ query: "along",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "alongerkeyword",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "best a",
+ expected: null,
+ },
+ {
+ query: "best al",
+ expected: {
+ url: "https://www.yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
+ originalUrl:
+ "https://www.yelp.com/search?find_desc=best+alongerkeyword",
+ displayUrl:
+ "yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama,+Kanagawa",
+ title: "best alongerkeyword in Yokohama, Kanagawa",
+ },
+ },
+ {
+ query: "ab",
+ expected: AB_RESULT,
+ },
+ ],
+ });
+});
+
+add_task(async function minKeywordLength_smallerPrefValue() {
+ await doMinKeywordLengthTest({
+ // expected min length: 4 (pref value)
+ prefValue: 4,
+ nimbusValue: 5,
+ tests: [
+ {
+ query: "al",
+ expected: null,
+ },
+ {
+ query: "alo",
+ expected: null,
+ },
+ {
+ query: "alon",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "along",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "alongerkeyword",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "best a",
+ expected: null,
+ },
+ {
+ query: "best al",
+ expected: {
+ url: "https://www.yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
+ originalUrl:
+ "https://www.yelp.com/search?find_desc=best+alongerkeyword",
+ displayUrl:
+ "yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama,+Kanagawa",
+ title: "best alongerkeyword in Yokohama, Kanagawa",
+ },
+ },
+ {
+ query: "ab",
+ expected: AB_RESULT,
+ },
+ ],
+ });
+});
+
+add_task(async function minKeywordLength_largerPrefValue() {
+ await doMinKeywordLengthTest({
+ // expected min length: 6 (pref value)
+ prefValue: 6,
+ nimbusValue: 5,
+ tests: [
+ {
+ query: "al",
+ expected: null,
+ },
+ {
+ query: "alo",
+ expected: null,
+ },
+ {
+ query: "alon",
+ expected: null,
+ },
+ {
+ query: "along",
+ expected: null,
+ },
+ {
+ query: "alonge",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "alongerkeyword",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "best a",
+ expected: null,
+ },
+ {
+ query: "best al",
+ expected: {
+ url: "https://www.yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
+ originalUrl:
+ "https://www.yelp.com/search?find_desc=best+alongerkeyword",
+ displayUrl:
+ "yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama,+Kanagawa",
+ title: "best alongerkeyword in Yokohama, Kanagawa",
+ },
+ },
+ {
+ query: "ab",
+ expected: AB_RESULT,
+ },
+ ],
+ });
+});
+
+add_task(async function minKeywordLength_onlyPrefValue() {
+ await doMinKeywordLengthTest({
+ // expected min length: 5 (pref value)
+ prefValue: 5,
+ nimbusValue: null,
+ tests: [
+ {
+ query: "al",
+ expected: null,
+ },
+ {
+ query: "alo",
+ expected: null,
+ },
+ {
+ query: "alon",
+ expected: null,
+ },
+ {
+ query: "along",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "alongerkeyword",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "best a",
+ expected: null,
+ },
+ {
+ query: "best al",
+ expected: {
+ url: "https://www.yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
+ originalUrl:
+ "https://www.yelp.com/search?find_desc=best+alongerkeyword",
+ displayUrl:
+ "yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama,+Kanagawa",
+ title: "best alongerkeyword in Yokohama, Kanagawa",
+ },
+ },
+ {
+ query: "ab",
+ expected: AB_RESULT,
+ },
+ ],
+ });
+});
+
+// When no min length is defined in Nimbus or the pref, we should fall back to
+// the hardcoded value of 2 in the Rust component.
+add_task(async function minKeywordLength_noNimbusOrPrefValue() {
+ await doMinKeywordLengthTest({
+ // expected min length: 2 (hardcoded)
+ prefValue: null,
+ nimbusValue: null,
+ tests: [
+ {
+ query: "al",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "alo",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "alon",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "along",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "alongerkeyword",
+ expected: ALONGERKEYWORD_RESULT,
+ },
+ {
+ query: "best a",
+ expected: null,
+ },
+ {
+ query: "best al",
+ expected: {
+ url: "https://www.yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama%2C+Kanagawa",
+ originalUrl:
+ "https://www.yelp.com/search?find_desc=best+alongerkeyword",
+ displayUrl:
+ "yelp.com/search?find_desc=best+alongerkeyword&find_loc=Yokohama,+Kanagawa",
+ title: "best alongerkeyword in Yokohama, Kanagawa",
+ },
+ },
+ {
+ query: "ab",
+ expected: AB_RESULT,
+ },
+ ],
+ });
+});
+
+async function doMinKeywordLengthTest({ prefValue, nimbusValue, tests }) {
+ // Set or clear the pref.
+ let originalPrefValue = Services.prefs.prefHasUserValue(
+ "browser.urlbar.yelp.minKeywordLength"
+ )
+ ? UrlbarPrefs.get("yelp.minKeywordLength")
+ : null;
+ if (typeof prefValue == "number") {
+ UrlbarPrefs.set("yelp.minKeywordLength", prefValue);
+ } else {
+ UrlbarPrefs.clear("yelp.minKeywordLength");
+ }
+
+ // Set up Nimbus.
+ let cleanUpNimbus;
+ if (typeof nimbusValue == "number") {
+ cleanUpNimbus = await UrlbarTestUtils.initNimbusFeature({
+ yelpMinKeywordLength: nimbusValue,
+ });
+ }
+
+ for (let { query, expected } of tests) {
+ info("Running min keyword length test with query: " + query);
+ await check_results({
+ context: createContext(query, {
+ providers: [UrlbarProviderQuickSuggest.name],
+ isPrivate: false,
+ }),
+ matches: expected ? [makeExpectedResult(expected)] : [],
+ });
+ }
+
+ await cleanUpNimbus?.();
+
+ if (originalPrefValue === null) {
+ UrlbarPrefs.clear("yelp.minKeywordLength");
+ } else {
+ UrlbarPrefs.set("yelp.minKeywordLength", originalPrefValue);
+ }
+}
+
function makeExpectedResult({
url,
title,
diff --git a/browser/config/version.txt b/browser/config/version.txt
index f88f4e2aa4..61eb5d32fe 100644
--- a/browser/config/version.txt
+++ b/browser/config/version.txt
@@ -1 +1 @@
-125.0.1
+125.0.3
diff --git a/browser/config/version_display.txt b/browser/config/version_display.txt
index f88f4e2aa4..61eb5d32fe 100644
--- a/browser/config/version_display.txt
+++ b/browser/config/version_display.txt
@@ -1 +1 @@
-125.0.1
+125.0.3
diff --git a/browser/locales/en-US/chrome/browser/downloads/downloads.properties b/browser/locales/en-US/chrome/browser/downloads/downloads.properties
index d93941e90a..308d9f8f0b 100644
--- a/browser/locales/en-US/chrome/browser/downloads/downloads.properties
+++ b/browser/locales/en-US/chrome/browser/downloads/downloads.properties
@@ -47,7 +47,7 @@ fileDeleted=File deleted
# LOCALIZATION NOTE (unblockHeaderUnblock, unblockHeaderOpen,
# unblockTypeMalware, unblockTypePotentiallyUnwanted2,
# unblockTypeUncommon2, unblockTip2, unblockButtonOpen,
-# unblockButtonUnblock, unblockButtonConfirmBlock, unblockInsecure3):
+# unblockButtonUnblock, unblockButtonConfirmBlock, unblockInsecure2):
# These strings are displayed in the dialog shown when the user asks a blocked
# download to be unblocked. The severity of the threat is expressed in
# descending order by the unblockType strings, it is higher for files detected
@@ -57,7 +57,7 @@ unblockHeaderOpen=Are you sure you want to open this file?
unblockTypeMalware=This file contains a virus or other malware that will harm your computer.
unblockTypePotentiallyUnwanted2=This file is disguised as a helpful download, but it can make unexpected changes to your programs and settings.
unblockTypeUncommon2=This file is not commonly downloaded and may not be safe to open. It may contain a virus or make unexpected changes to your programs and settings.
-unblockInsecure3=You are trying to download this file on a connection that’s not secure. If you continue, the file might be changed, used to steal your info or harm your device.
+unblockInsecure2=The download is offered over HTTP even though the current document was delivered over a secure HTTPS connection. If you proceed, the download may be corrupted or tampered with during the download process.
unblockTip2=You can search for an alternate download source or try again later.
unblockButtonOpen=Open
unblockButtonUnblock=Allow download
diff --git a/browser/themes/shared/syncedtabs/sidebar.css b/browser/themes/shared/syncedtabs/sidebar.css
index c07c509077..7cdd1aa5c8 100644
--- a/browser/themes/shared/syncedtabs/sidebar.css
+++ b/browser/themes/shared/syncedtabs/sidebar.css
@@ -237,17 +237,12 @@ body {
.deck .instructions {
text-align: center;
- color: GrayText;
+ color: var(--text-color-deemphasized);
padding: 0 11px;
max-width: 15em;
margin: 0 auto;
}
-:root[lwt-sidebar] .deck .instructions {
- color: inherit;
- opacity: .6;
-}
-
.deck .button {
display: block;
background-color: #0060df;
diff --git a/config/milestone.txt b/config/milestone.txt
index 40b4883e49..53010bea47 100644
--- a/config/milestone.txt
+++ b/config/milestone.txt
@@ -10,4 +10,4 @@
# hardcoded milestones in the tree from these two files.
#--------------------------------------------------------
-125.0.1
+125.0.3
diff --git a/dom/animation/Animation.cpp b/dom/animation/Animation.cpp
index 6f0fee007c..ad52495e67 100644
--- a/dom/animation/Animation.cpp
+++ b/dom/animation/Animation.cpp
@@ -6,6 +6,7 @@
#include "Animation.h"
+#include "mozilla/Likely.h"
#include "nsIFrame.h"
#include "AnimationUtils.h"
#include "mozAutoDocUpdate.h"
@@ -926,12 +927,13 @@ void Animation::SetCurrentTimeAsDouble(const Nullable<double>& aCurrentTime,
void Animation::Tick(AnimationTimeline::TickState& aTickState) {
if (Pending()) {
- // Finish pending if we can, but make sure we've seen one existing tick, or
- // we've requested to get started via SetPendingReadyTime.
- if (!mPendingReadyTime.IsNull() || mSawTickWhilePending) {
+ if (!mPendingReadyTime.IsNull()) {
TryTriggerNow();
+ } else if (MOZ_LIKELY(mTimeline)) {
+ // Makes sure that we trigger the animation on the next tick but,
+ // importantly, with this tick's timestamp.
+ mPendingReadyTime = mTimeline->GetCurrentTimeAsTimeStamp();
}
- mSawTickWhilePending = true;
}
UpdateTiming(SeekFlag::NoSeek, SyncNotifyFlag::Sync);
@@ -1351,17 +1353,21 @@ void Animation::NotifyEffectTargetUpdated() {
MaybeScheduleReplacementCheck();
}
-static bool EnsurePaintIsScheduled(Document& aDoc) {
+static TimeStamp EnsurePaintIsScheduled(Document& aDoc) {
PresShell* presShell = aDoc.GetPresShell();
if (!presShell) {
- return false;
+ return {};
}
nsIFrame* rootFrame = presShell->GetRootFrame();
if (!rootFrame) {
- return false;
+ return {};
}
rootFrame->SchedulePaintWithoutInvalidatingObservers();
- return rootFrame->PresContext()->RefreshDriver()->IsInRefresh();
+ auto* rd = rootFrame->PresContext()->RefreshDriver();
+ if (!rd->IsInRefresh()) {
+ return {};
+ }
+ return rd->MostRecentRefresh(/* aEnsureTimerStarted = */ false);
}
// https://drafts.csswg.org/web-animations/#play-an-animation
@@ -1453,7 +1459,6 @@ void Animation::PlayNoUpdate(ErrorResult& aRv, LimitBehavior aLimitBehavior) {
mPendingState = PendingState::PlayPending;
mPendingReadyTime = {};
- mSawTickWhilePending = false;
if (Document* doc = GetRenderedDocument()) {
if (HasFiniteTimeline()) {
// Always schedule a task even if we would like to let this animation
@@ -1464,7 +1469,7 @@ void Animation::PlayNoUpdate(ErrorResult& aRv, LimitBehavior aLimitBehavior) {
doc->GetOrCreateScrollTimelineAnimationTracker()->AddPending(*this);
}
// Make sure to try to schedule a tick.
- mSawTickWhilePending = EnsurePaintIsScheduled(*doc);
+ mPendingReadyTime = EnsurePaintIsScheduled(*doc);
}
UpdateTiming(SeekFlag::NoSeek, SyncNotifyFlag::Async);
@@ -1515,14 +1520,12 @@ void Animation::Pause(ErrorResult& aRv) {
mPendingState = PendingState::PausePending;
mPendingReadyTime = {};
- mSawTickWhilePending = false;
-
// See the relevant PlayPending code for comments.
if (Document* doc = GetRenderedDocument()) {
if (HasFiniteTimeline()) {
doc->GetOrCreateScrollTimelineAnimationTracker()->AddPending(*this);
}
- mSawTickWhilePending = EnsurePaintIsScheduled(*doc);
+ mPendingReadyTime = EnsurePaintIsScheduled(*doc);
}
UpdateTiming(SeekFlag::NoSeek, SyncNotifyFlag::Async);
diff --git a/dom/animation/Animation.h b/dom/animation/Animation.h
index cb0859a4b6..d7edfedfc2 100644
--- a/dom/animation/Animation.h
+++ b/dom/animation/Animation.h
@@ -114,6 +114,7 @@ class Animation : public DOMEventTargetHelper,
Nullable<TimeDuration> GetStartTime() const { return mStartTime; }
Nullable<double> GetStartTimeAsDouble() const;
void SetStartTime(const Nullable<TimeDuration>& aNewStartTime);
+ const TimeStamp& GetPendingReadyTime() const { return mPendingReadyTime; }
void SetPendingReadyTime(const TimeStamp& aReadyTime) {
mPendingReadyTime = aReadyTime;
}
@@ -550,11 +551,6 @@ class Animation : public DOMEventTargetHelper,
bool mFinishedAtLastComposeStyle = false;
bool mWasReplaceableAtLastTick = false;
- // When we create a new pending animation, this tracks whether we've seen at
- // least one refresh driver tick. This is used to guarantee that a whole tick
- // has run before triggering the animation, which guarantees (for most pages)
- // that we've actually painted.
- bool mSawTickWhilePending = false;
bool mHiddenByContentVisibility = false;
diff --git a/dom/animation/AnimationTimeline.h b/dom/animation/AnimationTimeline.h
index 96fd1650a2..bb782bfb8c 100644
--- a/dom/animation/AnimationTimeline.h
+++ b/dom/animation/AnimationTimeline.h
@@ -23,8 +23,7 @@ class ScrollTimeline;
class AnimationTimeline : public nsISupports, public nsWrapperCache {
public:
- explicit AnimationTimeline(nsIGlobalObject* aWindow,
- RTPCallerType aRTPCallerType);
+ AnimationTimeline(nsIGlobalObject* aWindow, RTPCallerType);
struct TickState {
TickState() = default;
diff --git a/dom/animation/test/mozilla/file_restyles.html b/dom/animation/test/mozilla/file_restyles.html
index 0aba35cd0e..88e6329b69 100644
--- a/dom/animation/test/mozilla/file_restyles.html
+++ b/dom/animation/test/mozilla/file_restyles.html
@@ -975,13 +975,7 @@ waitForAllPaints(() => {
animation.pause();
await animation.ready;
- let restyleCount;
- restyleCount = await observeStyling(1);
- is(restyleCount, 1,
- 'Animations running on the compositor should restyle once after ' +
- 'Animation.pause() was called');
-
- restyleCount = await observeStyling(5);
+ let restyleCount = await observeStyling(5);
is(restyleCount, 0,
'Paused animations running on the compositor should never cause ' +
'restyles');
@@ -997,13 +991,7 @@ waitForAllPaints(() => {
animation.pause();
await animation.ready;
- let restyleCount;
- restyleCount = await observeStyling(1);
- is(restyleCount, 1,
- 'Animations running on the main-thread should restyle once after ' +
- 'Animation.pause() was called');
-
- restyleCount = await observeStyling(5);
+ let restyleCount = await observeStyling(5);
is(restyleCount, 0,
'Paused animations running on the main-thread should never cause ' +
'restyles');
diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp
index 529466cc81..62f6e6443d 100644
--- a/dom/canvas/CanvasRenderingContext2D.cpp
+++ b/dom/canvas/CanvasRenderingContext2D.cpp
@@ -3463,7 +3463,9 @@ void CanvasRenderingContext2D::ArcTo(double aX1, double aY1, double aX2,
return aError.ThrowIndexSizeError("Negative radius");
}
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
// Current point in user space!
Point p0 = mPathBuilder->CurrentPoint();
@@ -3535,7 +3537,9 @@ void CanvasRenderingContext2D::Arc(double aX, double aY, double aR,
return;
}
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
EnsureActivePath();
@@ -3545,7 +3549,9 @@ void CanvasRenderingContext2D::Arc(double aX, double aY, double aR,
void CanvasRenderingContext2D::Rect(double aX, double aY, double aW,
double aH) {
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
if (!std::isfinite(aX) || !std::isfinite(aY) || !std::isfinite(aW) ||
!std::isfinite(aH)) {
@@ -3741,7 +3747,9 @@ void CanvasRenderingContext2D::RoundRect(
const UnrestrictedDoubleOrDOMPointInitOrUnrestrictedDoubleOrDOMPointInitSequence&
aRadii,
ErrorResult& aError) {
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
PathBuilder* builder = mPathBuilder;
Maybe<Matrix> transform = Nothing();
@@ -3759,7 +3767,9 @@ void CanvasRenderingContext2D::Ellipse(double aX, double aY, double aRadiusX,
return aError.ThrowIndexSizeError("Negative radius");
}
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
ArcToBezier(this, Point(aX, aY), Size(aRadiusX, aRadiusY), aStartAngle,
aEndAngle, aAnticlockwise, aRotation);
@@ -3780,10 +3790,14 @@ void CanvasRenderingContext2D::FlushPathTransform() {
mPathTransformDirty = false;
}
-void CanvasRenderingContext2D::EnsureWritablePath() {
+bool CanvasRenderingContext2D::EnsureWritablePath() {
EnsureTarget();
+
// NOTE: IsTargetValid() may be false here (mTarget == sErrorTarget) but we
// go ahead and create a path anyway since callers depend on that.
+ if (NS_WARN_IF(!mTarget)) {
+ return false;
+ }
FillRule fillRule = CurrentState().fillRule;
@@ -3792,7 +3806,7 @@ void CanvasRenderingContext2D::EnsureWritablePath() {
}
if (mPathBuilder) {
- return;
+ return true;
}
if (!mPath) {
@@ -3800,6 +3814,7 @@ void CanvasRenderingContext2D::EnsureWritablePath() {
} else {
mPathBuilder = mPath->CopyToBuilder(fillRule);
}
+ return true;
}
void CanvasRenderingContext2D::EnsureUserSpacePath(
diff --git a/dom/canvas/CanvasRenderingContext2D.h b/dom/canvas/CanvasRenderingContext2D.h
index 75a57ab14f..bfcbfccec2 100644
--- a/dom/canvas/CanvasRenderingContext2D.h
+++ b/dom/canvas/CanvasRenderingContext2D.h
@@ -364,14 +364,18 @@ class CanvasRenderingContext2D : public nsICanvasRenderingContextInternal,
}
void ClosePath() {
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
mPathBuilder->Close();
mPathPruned = false;
}
void MoveTo(double aX, double aY) {
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
mozilla::gfx::Point pos(ToFloat(aX), ToFloat(aY));
if (!pos.IsFinite()) {
@@ -383,13 +387,17 @@ class CanvasRenderingContext2D : public nsICanvasRenderingContextInternal,
}
void LineTo(double aX, double aY) {
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
LineTo(mozilla::gfx::Point(ToFloat(aX), ToFloat(aY)));
}
void QuadraticCurveTo(double aCpx, double aCpy, double aX, double aY) {
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
mozilla::gfx::Point cp1(ToFloat(aCpx), ToFloat(aCpy));
mozilla::gfx::Point cp2(ToFloat(aX), ToFloat(aY));
@@ -408,7 +416,9 @@ class CanvasRenderingContext2D : public nsICanvasRenderingContextInternal,
void BezierCurveTo(double aCp1x, double aCp1y, double aCp2x, double aCp2y,
double aX, double aY) {
- EnsureWritablePath();
+ if (!EnsureWritablePath()) {
+ return;
+ }
BezierTo(mozilla::gfx::Point(ToFloat(aCp1x), ToFloat(aCp1y)),
mozilla::gfx::Point(ToFloat(aCp2x), ToFloat(aCp2y)),
@@ -680,7 +690,7 @@ class CanvasRenderingContext2D : public nsICanvasRenderingContextInternal,
/* This function ensures there is a writable pathbuilder available
*/
- void EnsureWritablePath();
+ bool EnsureWritablePath();
// Ensures a path in UserSpace is available.
void EnsureUserSpacePath(
diff --git a/dom/locales/en-US/chrome/security/security.properties b/dom/locales/en-US/chrome/security/security.properties
index fc58fe4f7d..c19fc2d2bf 100644
--- a/dom/locales/en-US/chrome/security/security.properties
+++ b/dom/locales/en-US/chrome/security/security.properties
@@ -44,7 +44,7 @@ LoadingMixedActiveContent2=Loading mixed (insecure) active content “%1$S” on
LoadingMixedDisplayContent2=Loading mixed (insecure) display content “%1$S” on a secure page
LoadingMixedDisplayObjectSubrequestDeprecation=Loading mixed (insecure) content “%1$S” within a plugin on a secure page is discouraged and will be blocked soon.
# LOCALIZATION NOTE: "%S" is the URI of the insecure mixed content download
-BlockedInsecureDownload = We blocked a download that’s not secure: “%S”.
+MixedContentBlockedDownload = Blocked downloading insecure content “%S”.
# LOCALIZATION NOTE: Do not translate "allow-scripts", "allow-same-origin", "sandbox" or "iframe"
BothAllowScriptsAndSameOriginPresent=An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can remove its sandboxing.
diff --git a/dom/security/nsContentSecurityUtils.cpp b/dom/security/nsContentSecurityUtils.cpp
index 01e9c6d5db..d2c1b257bc 100644
--- a/dom/security/nsContentSecurityUtils.cpp
+++ b/dom/security/nsContentSecurityUtils.cpp
@@ -1670,25 +1670,37 @@ long nsContentSecurityUtils::ClassifyDownload(
nsCOMPtr<nsIURI> contentLocation;
aChannel->GetURI(getter_AddRefs(contentLocation));
- if (StaticPrefs::dom_block_download_insecure()) {
- // If we are not dealing with a potentially trustworthy origin, or a URI
- // that is safe to be loaded like e.g. data:, then we block the load.
- bool isInsecureDownload =
- !nsMixedContentBlocker::IsPotentiallyTrustworthyOrigin(
- contentLocation) &&
- !nsMixedContentBlocker::URISafeToBeLoadedInSecureContext(
- contentLocation);
-
- Telemetry::Accumulate(mozilla::Telemetry::INSECURE_DOWNLOADS,
- isInsecureDownload);
-
- if (isInsecureDownload) {
- nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel);
- if (httpChannel) {
- LogMessageToConsole(httpChannel, "BlockedInsecureDownload");
- }
- return nsITransfer::DOWNLOAD_POTENTIALLY_UNSAFE;
+ nsCOMPtr<nsIPrincipal> loadingPrincipal = loadInfo->GetLoadingPrincipal();
+ if (!loadingPrincipal) {
+ loadingPrincipal = loadInfo->TriggeringPrincipal();
+ }
+ // Creating a fake Loadinfo that is just used for the MCB check.
+ nsCOMPtr<nsILoadInfo> secCheckLoadInfo = new mozilla::net::LoadInfo(
+ loadingPrincipal, loadInfo->TriggeringPrincipal(), nullptr,
+ nsILoadInfo::SEC_ONLY_FOR_EXPLICIT_CONTENTSEC_CHECK,
+ nsIContentPolicy::TYPE_FETCH);
+ // Disable HTTPS-Only checks for that loadinfo. This is required because
+ // otherwise nsMixedContentBlocker::ShouldLoad would assume that the request
+ // is safe, because HTTPS-Only is handling it.
+ secCheckLoadInfo->SetHttpsOnlyStatus(nsILoadInfo::HTTPS_ONLY_EXEMPT);
+
+ int16_t decission = nsIContentPolicy::ACCEPT;
+ nsMixedContentBlocker::ShouldLoad(false, // aHadInsecureImageRedirect
+ contentLocation, // aContentLocation,
+ secCheckLoadInfo, // aLoadinfo
+ false, // aReportError
+ &decission // aDecision
+ );
+ Telemetry::Accumulate(mozilla::Telemetry::MIXED_CONTENT_DOWNLOADS,
+ decission != nsIContentPolicy::ACCEPT);
+
+ if (StaticPrefs::dom_block_download_insecure() &&
+ decission != nsIContentPolicy::ACCEPT) {
+ nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel);
+ if (httpChannel) {
+ LogMessageToConsole(httpChannel, "MixedContentBlockedDownload");
}
+ return nsITransfer::DOWNLOAD_POTENTIALLY_UNSAFE;
}
if (loadInfo->TriggeringPrincipal()->IsSystemPrincipal()) {
diff --git a/dom/security/test/general/browser.toml b/dom/security/test/general/browser.toml
index c6d6b4bf79..0f4ec5b224 100644
--- a/dom/security/test/general/browser.toml
+++ b/dom/security/test/general/browser.toml
@@ -48,16 +48,6 @@ support-files = [
"file_gpc_server.sjs",
]
-["browser_test_http_download.js"]
-skip-if = [
- "win11_2009", # Bug 1784764
- "os == 'linux' && !debug",
-]
-support-files = [
- "http_download_page.html",
- "http_download_server.sjs"
-]
-
["browser_test_referrer_loadInOtherProcess.js"]
["browser_test_report_blocking.js"]
diff --git a/dom/security/test/general/browser_test_http_download.js b/dom/security/test/general/browser_test_http_download.js
deleted file mode 100644
index 35e3fdfc4b..0000000000
--- a/dom/security/test/general/browser_test_http_download.js
+++ /dev/null
@@ -1,275 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * https://creativecommons.org/publicdomain/zero/1.0/ */
-
-ChromeUtils.defineESModuleGetters(this, {
- Downloads: "resource://gre/modules/Downloads.sys.mjs",
- DownloadsCommon: "resource:///modules/DownloadsCommon.sys.mjs",
-});
-
-const HandlerService = Cc[
- "@mozilla.org/uriloader/handler-service;1"
-].getService(Ci.nsIHandlerService);
-
-const MIMEService = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService);
-
-// Using insecure HTTP URL for a test cases around HTTP downloads
-let INSECURE_BASE_URL =
- getRootDirectory(gTestPath).replace(
- "chrome://mochitests/content/",
- // eslint-disable-next-line @microsoft/sdl/no-insecure-url
- "http://example.com/"
- ) + "http_download_page.html";
-
-function promiseFocus() {
- return new Promise(resolve => {
- waitForFocus(resolve);
- });
-}
-
-async function task_openPanel() {
- await promiseFocus();
-
- let promise = BrowserTestUtils.waitForPopupEvent(
- DownloadsPanel.panel,
- "shown"
- );
- DownloadsPanel.showPanel();
- await promise;
-}
-
-const downloadMonitoringView = {
- _listeners: [],
- onDownloadAdded(download) {
- for (let listener of this._listeners) {
- listener(download);
- }
- this._listeners = [];
- },
- waitForDownload(listener) {
- this._listeners.push(listener);
- },
-};
-
-/**
- * Waits until a download is triggered.
- * Unless the always_ask_before_handling_new_types pref is true, the download
- * will simply be saved, so resolve when the view is notified of the new
- * download. Otherwise, it waits until a prompt is shown, selects the choosen
- * <action>, then accepts the dialog
- * @param [action] Which action to select, either:
- * "handleInternally", "save" or "open".
- * @returns {Promise} Resolved once done.
- */
-
-function shouldTriggerDownload(action = "save") {
- if (
- Services.prefs.getBoolPref(
- "browser.download.always_ask_before_handling_new_types"
- )
- ) {
- return new Promise((resolve, reject) => {
- Services.wm.addListener({
- onOpenWindow(xulWin) {
- Services.wm.removeListener(this);
- let win = xulWin.docShell.domWindow;
- waitForFocus(() => {
- if (
- win.location ==
- "chrome://mozapps/content/downloads/unknownContentType.xhtml"
- ) {
- let dialog = win.document.getElementById("unknownContentType");
- let button = dialog.getButton("accept");
- let actionRadio = win.document.getElementById(action);
- actionRadio.click();
- button.disabled = false;
- dialog.acceptDialog();
- resolve();
- } else {
- reject();
- }
- }, win);
- },
- });
- });
- }
- return new Promise(res => {
- downloadMonitoringView.waitForDownload(res);
- });
-}
-
-const CONSOLE_ERROR_MESSAGE = "We blocked a download that’s not secure";
-
-function shouldConsoleError() {
- // Waits until CONSOLE_ERROR_MESSAGE was logged
- return new Promise((resolve, reject) => {
- function listener(msgObj) {
- let text = msgObj.message;
- if (text.includes(CONSOLE_ERROR_MESSAGE)) {
- Services.console.unregisterListener(listener);
- resolve();
- }
- }
- Services.console.registerListener(listener);
- });
-}
-
-async function resetDownloads() {
- // Removes all downloads from the download List
- const types = new Set();
- let publicList = await Downloads.getList(Downloads.PUBLIC);
- let downloads = await publicList.getAll();
- for (let download of downloads) {
- if (download.contentType) {
- types.add(download.contentType);
- }
- publicList.remove(download);
- await download.finalize(true);
- }
-
- if (types.size) {
- // reset handlers for the contentTypes of any files previously downloaded
- for (let type of types) {
- const mimeInfo = MIMEService.getFromTypeAndExtension(type, "");
- info("resetting handler for type: " + type);
- HandlerService.remove(mimeInfo);
- }
- }
-}
-
-function shouldNotifyDownloadUI() {
- return new Promise(res => {
- downloadMonitoringView.waitForDownload(async aDownload => {
- let { error } = aDownload;
- if (
- error.becauseBlockedByReputationCheck &&
- error.reputationCheckVerdict == Downloads.Error.BLOCK_VERDICT_INSECURE
- ) {
- // It's an insecure Download, now Check that it has been cleaned up properly
- if ((await IOUtils.stat(aDownload.target.path)).size != 0) {
- throw new Error(`Download target is not empty!`);
- }
- if ((await IOUtils.stat(aDownload.target.path)).size != 0) {
- throw new Error(`Download partFile was not cleaned up properly`);
- }
- // Assert that the Referrer is presnt
- if (!aDownload.source.referrerInfo) {
- throw new Error("The Blocked download is missing the ReferrerInfo");
- }
-
- res(aDownload);
- } else {
- ok(false, "No error for download that was expected to error!");
- }
- });
- });
-}
-
-async function runTest(url, link, checkFunction, description) {
- await SpecialPowers.pushPrefEnv({
- set: [["dom.block_download_insecure", true]],
- });
- await resetDownloads();
-
- let tab = BrowserTestUtils.addTab(gBrowser, url);
- gBrowser.selectedTab = tab;
-
- let browser = gBrowser.getBrowserForTab(tab);
- await BrowserTestUtils.browserLoaded(browser);
-
- info("Checking: " + description);
-
- let checkPromise = checkFunction();
- // Click the Link to trigger the download
- SpecialPowers.spawn(gBrowser.selectedBrowser, [link], contentLink => {
- content.document.getElementById(contentLink).click();
- });
-
- await checkPromise;
-
- ok(true, description);
- BrowserTestUtils.removeTab(tab);
-
- await SpecialPowers.popPrefEnv();
-}
-
-add_setup(async () => {
- let list = await Downloads.getList(Downloads.ALL);
- list.addView(downloadMonitoringView);
- registerCleanupFunction(() => list.removeView(downloadMonitoringView));
-});
-
-// Test Blocking
-add_task(async function test_blocking() {
- for (let prefVal of [true, false]) {
- await SpecialPowers.pushPrefEnv({
- set: [["browser.download.always_ask_before_handling_new_types", prefVal]],
- });
- await runTest(
- INSECURE_BASE_URL,
- "http-link",
- () =>
- Promise.all([
- shouldTriggerDownload(),
- shouldNotifyDownloadUI(),
- shouldConsoleError(),
- ]),
- "Insecure (HTTP) toplevel -> Insecure (HTTP) download should Error"
- );
- await SpecialPowers.popPrefEnv();
- }
-});
-
-// Test Manual Unblocking
-add_task(async function test_manual_unblocking() {
- for (let prefVal of [true, false]) {
- await SpecialPowers.pushPrefEnv({
- set: [["browser.download.always_ask_before_handling_new_types", prefVal]],
- });
- await runTest(
- INSECURE_BASE_URL,
- "http-link",
- async () => {
- let [, download] = await Promise.all([
- shouldTriggerDownload(),
- shouldNotifyDownloadUI(),
- ]);
- await download.unblock();
- Assert.equal(
- download.error,
- null,
- "There should be no error after unblocking"
- );
- },
- "A blocked download should succeed to download after a manual unblock"
- );
- await SpecialPowers.popPrefEnv();
- }
-});
-
-// Test Unblock Download Visible
-add_task(async function test_unblock_download_visible() {
- for (let prefVal of [true, false]) {
- await SpecialPowers.pushPrefEnv({
- set: [["browser.download.always_ask_before_handling_new_types", prefVal]],
- });
- await promiseFocus();
- await runTest(
- INSECURE_BASE_URL,
- "http-link",
- async () => {
- let panelHasOpened = BrowserTestUtils.waitForPopupEvent(
- DownloadsPanel.panel,
- "shown"
- );
- info("awaiting that the download is triggered and added to the list");
- await Promise.all([shouldTriggerDownload(), shouldNotifyDownloadUI()]);
- info("awaiting that the Download list shows itself");
- await panelHasOpened;
- DownloadsPanel.hidePanel();
- ok(true, "The Download Panel should have opened on blocked download");
- },
- "A blocked download should open the download panel"
- );
- await SpecialPowers.popPrefEnv();
- }
-});
diff --git a/dom/security/test/general/http_download_page.html b/dom/security/test/general/http_download_page.html
deleted file mode 100644
index c5461eaed3..0000000000
--- a/dom/security/test/general/http_download_page.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML>
-<html>
- <head>
- <title>Test for the download attribute</title>
- </head>
- <body>
- hi
-
- <script>
- const host = window.location.host;
- const path = location.pathname.replace("http_download_page.html","http_download_server.sjs");
-
- const insecureLink = document.createElement("a");
- // eslint-disable-next-line @microsoft/sdl/no-insecure-url
- insecureLink.href=`http://${host}/${path}`;
- insecureLink.download="true";
- insecureLink.id="http-link";
- insecureLink.textContent="Not secure Link";
-
- document.body.append(insecureLink);
- </script>
- </body>
-</html>
diff --git a/dom/security/test/general/http_download_server.sjs b/dom/security/test/general/http_download_server.sjs
deleted file mode 100644
index e659df2f40..0000000000
--- a/dom/security/test/general/http_download_server.sjs
+++ /dev/null
@@ -1,20 +0,0 @@
-// force the Browser to Show a Download Prompt
-
-function handleRequest(request, response) {
- let type = "image/png";
- let filename = "hello.png";
- request.queryString.split("&").forEach(val => {
- var [key, value] = val.split("=");
- if (key == "type") {
- type = value;
- }
- if (key == "name") {
- filename = value;
- }
- });
-
- response.setHeader("Cache-Control", "no-cache", false);
- response.setHeader("Content-Disposition", `attachment; filename=${filename}`);
- response.setHeader("Content-Type", type);
- response.write("🙈🙊🐵🙊");
-}
diff --git a/dom/security/test/https-only/browser_save_as.js b/dom/security/test/https-only/browser_save_as.js
index fbfdf276a8..28f3df539d 100644
--- a/dom/security/test/https-only/browser_save_as.js
+++ b/dom/security/test/https-only/browser_save_as.js
@@ -155,11 +155,7 @@ async function setHttpsFirstAndOnlyPrefs(httpsFirst, httpsOnly) {
add_task(async function testBaseline() {
// Run with HTTPS-First and HTTPS-Only disabled
await setHttpsFirstAndOnlyPrefs(false, false);
- await runTest(
- "#insecure-link",
- HTTP_LINK,
- "We blocked a download that’s not secure: “http://example.org/”."
- );
+ await runTest("#insecure-link", HTTP_LINK, undefined);
await runTest("#secure-link", HTTPS_LINK, undefined);
});
@@ -173,7 +169,7 @@ add_task(async function testHttpsFirst() {
await runTest(
"#insecure-link",
HTTP_LINK,
- "We blocked a download that’s not secure: “http://example.org/”."
+ "Blocked downloading insecure content “http://example.org/”."
);
await runTest("#secure-link", HTTPS_LINK, undefined);
});
@@ -185,7 +181,7 @@ add_task(async function testHttpsOnly() {
await runTest(
"#insecure-link",
HTTP_LINK,
- "We blocked a download that’s not secure: “http://example.org/”."
+ "Blocked downloading insecure content “http://example.org/”."
);
await runTest("#secure-link", HTTPS_LINK, undefined);
});
diff --git a/dom/security/test/mixedcontentblocker/browser_test_mixed_content_download.js b/dom/security/test/mixedcontentblocker/browser_test_mixed_content_download.js
index b103d83cd7..ee350008aa 100644
--- a/dom/security/test/mixedcontentblocker/browser_test_mixed_content_download.js
+++ b/dom/security/test/mixedcontentblocker/browser_test_mixed_content_download.js
@@ -101,7 +101,7 @@ function shouldTriggerDownload(action = "save") {
});
}
-const CONSOLE_ERROR_MESSAGE = "We blocked a download that’s not secure";
+const CONSOLE_ERROR_MESSAGE = "Blocked downloading insecure content";
function shouldConsoleError() {
// Waits until CONSOLE_ERROR_MESSAGE was logged
diff --git a/dom/serviceworkers/test/browser_download.js b/dom/serviceworkers/test/browser_download.js
index 70622a2349..0c69a48d17 100644
--- a/dom/serviceworkers/test/browser_download.js
+++ b/dom/serviceworkers/test/browser_download.js
@@ -3,7 +3,7 @@
var gTestRoot = getRootDirectory(gTestPath).replace(
"chrome://mochitests/content/",
- "https://example.com/"
+ "http://mochi.test:8888/"
);
function getFile(aFilename) {
diff --git a/gfx/layers/AnimationInfo.cpp b/gfx/layers/AnimationInfo.cpp
index 81d11f672c..ad43fd681f 100644
--- a/gfx/layers/AnimationInfo.cpp
+++ b/gfx/layers/AnimationInfo.cpp
@@ -494,11 +494,15 @@ void AnimationInfo::AddAnimationForProperty(
}
if (aAnimation->Pending()) {
- const TimeStamp readyTime =
- aFrame->PresContext()->RefreshDriver()->MostRecentRefresh(
- /* aEnsureTimerStarted= */ false);
- MOZ_ASSERT(!readyTime.IsNull());
- aAnimation->SetPendingReadyTime(readyTime);
+ TimeStamp readyTime = aAnimation->GetPendingReadyTime();
+ if (readyTime.IsNull()) {
+ // TODO(emilio): This should generally not happen anymore, can we remove
+ // this SetPendingReadyTime call?
+ readyTime = aFrame->PresContext()->RefreshDriver()->MostRecentRefresh(
+ /* aEnsureTimerStarted= */ false);
+ MOZ_ASSERT(!readyTime.IsNull());
+ aAnimation->SetPendingReadyTime(readyTime);
+ }
MaybeStartPendingAnimation(*animation, readyTime);
}
}
diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList.cpp
index bc0e123f85..404d291e03 100644
--- a/gfx/thebes/gfxPlatformFontList.cpp
+++ b/gfx/thebes/gfxPlatformFontList.cpp
@@ -2209,6 +2209,12 @@ eFontPrefLang gfxPlatformFontList::GetFontPrefLangFor(const char* aLang) {
if (!nsCRT::strcasecmp(gPrefLangNames[i], aLang)) {
return eFontPrefLang(i);
}
+ // If the pref-lang is a two-character lang tag, try ignoring any trailing
+ // subtags in aLang and see if the base lang matches.
+ if (strlen(gPrefLangNames[i]) == 2 && strlen(aLang) > 3 &&
+ aLang[2] == '-' && !nsCRT::strncasecmp(gPrefLangNames[i], aLang, 2)) {
+ return eFontPrefLang(i);
+ }
}
return eFontPrefLang_Others;
}
diff --git a/ipc/glue/GeckoChildProcessHost.cpp b/ipc/glue/GeckoChildProcessHost.cpp
index cd03b488ed..3e444060bc 100644
--- a/ipc/glue/GeckoChildProcessHost.cpp
+++ b/ipc/glue/GeckoChildProcessHost.cpp
@@ -67,7 +67,6 @@
#ifdef XP_WIN
# include <stdlib.h>
-# include "mozilla/WindowsVersion.h"
# include "nsIWinTaskbar.h"
# define NS_TASKBAR_CONTRACTID "@mozilla.org/windows-taskbar;1"
@@ -251,7 +250,7 @@ class BaseProcessLauncher {
};
#ifdef XP_WIN
-class WindowsProcessLauncher final : public BaseProcessLauncher {
+class WindowsProcessLauncher : public BaseProcessLauncher {
public:
WindowsProcessLauncher(GeckoChildProcessHost* aHost,
std::vector<std::string>&& aExtraOpts)
@@ -263,9 +262,6 @@ class WindowsProcessLauncher final : public BaseProcessLauncher {
virtual RefPtr<ProcessHandlePromise> DoLaunch() override;
virtual Result<Ok, LaunchError> DoFinishLaunch() override;
- private:
- void AddApplicationPrefetchArgument();
-
mozilla::Maybe<CommandLine> mCmdLine;
# ifdef MOZ_SANDBOX
bool mUseSandbox = false;
@@ -1408,97 +1404,6 @@ Result<Ok, LaunchError> MacProcessLauncher::DoFinishLaunch() {
#endif // XP_MACOSX
#ifdef XP_WIN
-void WindowsProcessLauncher::AddApplicationPrefetchArgument() {
- // The Application Launch Prefetcher (ALPF) is an ill-documented Windows
- // subsystem that's intended to speed up process launching, apparently mostly
- // by assuming that a binary is going to want to load the same DLLs as it did
- // the last time it launched, and getting those prepped for loading as well.
- //
- // For most applications, that's a good bet. For Firefox, it's less so, since
- // we use the same binary with different arguments to do completely different
- // things. Windows does allow applications to take up multiple slots in this
- // cache, but the "which bucket does this invocation go in?" mechanism is
- // highly unusual: the OS scans the command line and looks for a command-line
- // switch of a particular form.
- //
- // (There is allegedly a way to do this without involving the command line,
- // OVERRIDE_PREFETCH_PARAMETER, but it's even more poorly documented.)
-
- // Applications' different prefetch-cache buckets are named with numbers from
- // "1" to some OS-version-determined limit, with an additional implicit "0"
- // cache bucket which is used when no valid prefetch cache slot is named.
- //
- // (The "0" bucket's existence and behavior is not documented, but has been
- // confirmed by observing the creation and enumeration of cache files in the
- // C:\Windows\Prefetch folder.)
- static size_t const kMaxSlotNo = IsWin1122H2OrLater() ? 16 : 8;
-
- // Determine the prefetch-slot number to be used for the process we're about
- // to launch.
- //
- // This may be changed freely between Firefox versions, as a Firefox update
- // will completely invalidate the prefetch cache anyway.
- size_t const prefetchSlot = [&]() -> size_t {
- switch (mProcessType) {
- // This code path is not used when starting the main process...
- case GeckoProcessType_Default:
- // ...ForkServer is not used on Windows...
- case GeckoProcessType_ForkServer:
- // ..."End" isn't a process-type, just a limit...
- case GeckoProcessType_End:
- // ...and any new process-types should be considered explicitly here.
- default:
- MOZ_ASSERT_UNREACHABLE("Invalid process type");
- return 0;
-
- // We reserve 1 for the main process as started by the launcher process.
- // (See LauncherProcessWin.cpp.) Otherwise, we mostly match the process-
- // type enumeration.
- case GeckoProcessType_Content:
- return 2;
- case GeckoProcessType_Socket:
- return 3; // usurps IPDLUnitTest
- case GeckoProcessType_GMPlugin:
- return 4;
- case GeckoProcessType_GPU:
- return 5;
- case GeckoProcessType_RemoteSandboxBroker:
- return 6; // usurps VR
- case GeckoProcessType_RDD:
- return 7;
-
- case GeckoProcessType_Utility: {
- // Continue the enumeration, using the SandboxingKind as a
- // probably-passably-precise proxy for the process's purpose.
- //
- // (On Win10 and earlier, or when sandboxing is not used, this will lump
- // all utility processes into slot 8.)
-# ifndef MOZ_SANDBOX
- size_t const val = 0;
-# else
- size_t const val = static_cast<size_t>(mSandbox);
-# endif
- return std::min(kMaxSlotNo, 8 + val);
- }
-
- // These process types are started so rarely that we're not concerned
- // about their interaction with the prefetch cache. Lump them together at
- // the end (possibly alongside other process types).
- case GeckoProcessType_IPDLUnitTest:
- case GeckoProcessType_VR:
- return kMaxSlotNo;
- }
- }();
- MOZ_ASSERT(prefetchSlot <= kMaxSlotNo);
-
- if (prefetchSlot == 0) {
- // default; no explicit argument needed
- return;
- }
-
- mCmdLine->AppendLooseValue(StringPrintf(L"/prefetch:%zu", prefetchSlot));
-}
-
Result<Ok, LaunchError> WindowsProcessLauncher::DoSetup() {
Result<Ok, LaunchError> aError = BaseProcessLauncher::DoSetup();
if (aError.isErr()) {
@@ -1679,9 +1584,6 @@ Result<Ok, LaunchError> WindowsProcessLauncher::DoSetup() {
// Process type
mCmdLine->AppendLooseValue(UTF8ToWide(ChildProcessType()));
- // Prefetch cache hint
- AddApplicationPrefetchArgument();
-
# ifdef MOZ_SANDBOX
if (mUseSandbox) {
// Mark the handles to inherit as inheritable.
diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
index 5cb47f2425..cd586ad2a7 100644
--- a/js/src/frontend/Parser.cpp
+++ b/js/src/frontend/Parser.cpp
@@ -10949,6 +10949,12 @@ GeneralParser<ParseHandler, Unit>::memberPropertyAccess(
if (handler_.isArgumentsName(lhs) && handler_.isLengthName(name)) {
MOZ_ASSERT(pc_->numberOfArgumentsNames > 0);
pc_->numberOfArgumentsNames--;
+ // Currently when resuming Generators don't get their argument length set
+ // in the interpreter frame (see InterpreterStack::resumeGeneratorCallFrame,
+ // and its call to initCallFrame).
+ if (pc_->isGeneratorOrAsync()) {
+ pc_->sc()->setIneligibleForArgumentsLength();
+ }
return handler_.newArgumentsLength(lhs, name);
}
diff --git a/js/src/jit-test/tests/arguments/bug1892699-1.js b/js/src/jit-test/tests/arguments/bug1892699-1.js
new file mode 100644
index 0000000000..9804f26a13
--- /dev/null
+++ b/js/src/jit-test/tests/arguments/bug1892699-1.js
@@ -0,0 +1,10 @@
+function* a(x, y, z) {
+ if (arguments.length !== 3) {
+ throw "Wrong output";
+ }
+ yield x;
+ yield y;
+ yield z;
+}
+const x = a(3, 4, 5);
+x.next();
diff --git a/js/src/jit-test/tests/arguments/bug1892699.js b/js/src/jit-test/tests/arguments/bug1892699.js
new file mode 100644
index 0000000000..d01ab67b1e
--- /dev/null
+++ b/js/src/jit-test/tests/arguments/bug1892699.js
@@ -0,0 +1,16 @@
+async function a(x, y, z) {
+ if (arguments.length !== 3) {
+ throw "Wrong output";
+ }
+ await x;
+ if (arguments.length !== 3) {
+ throw "Wrong output";
+ }
+ await y;
+ if (arguments.length !== 3) {
+ throw "Wrong output";
+ }
+ await z;
+}
+const p = a(3, 4, 5);
+p.then(() => { assertEq(true, true) })
diff --git a/layout/reftests/font-matching/1892363-lang-prefs.html b/layout/reftests/font-matching/1892363-lang-prefs.html
new file mode 100644
index 0000000000..9043eb83f9
--- /dev/null
+++ b/layout/reftests/font-matching/1892363-lang-prefs.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<p>変化、設置、街角、絵画、抱く、花火</p>
diff --git a/layout/reftests/font-matching/reftest.list b/layout/reftests/font-matching/reftest.list
index 0fd4a4ce1f..f61477cf46 100644
--- a/layout/reftests/font-matching/reftest.list
+++ b/layout/reftests/font-matching/reftest.list
@@ -197,5 +197,8 @@ pref(ui.font.menu,"serif") test-pref(ui.font.menu.weight,"800") != system-font-p
# (Assumes Windows has Yu Gothic present.)
skip-if(!winWidget) pref(layout.css.font-visibility,1) == 1850672-1.html 1850672-1-ref.html
+# Check that "ja-JP" in accept_languages uses the same font prefs as "ja".
+test-pref(intl.accept_languages,"ja-JP,zh-CN,en") ref-pref(intl.accept_languages,"ja,zh-CN,en") == 1892363-lang-prefs.html 1892363-lang-prefs.html
+
# Reset default prefs.
defaults
diff --git a/layout/style/res/forms.css b/layout/style/res/forms.css
index a2d026639b..587534e9f3 100644
--- a/layout/style/res/forms.css
+++ b/layout/style/res/forms.css
@@ -263,6 +263,7 @@ select > button {
border: 0;
appearance: auto;
-moz-default-appearance: -moz-menulist-arrow-button;
+ pointer-events: none;
/* Draw the arrow in the select's color */
color: inherit;
diff --git a/security/manager/ssl/tests/mochitest/mixedcontent/mochitest.toml b/security/manager/ssl/tests/mochitest/mixedcontent/mochitest.toml
index 4935021410..1a37ba6f38 100644
--- a/security/manager/ssl/tests/mochitest/mixedcontent/mochitest.toml
+++ b/security/manager/ssl/tests/mochitest/mixedcontent/mochitest.toml
@@ -7,7 +7,6 @@ skip-if = [
prefs = [
"security.mixed_content.upgrade_display_content=false",
"dom.security.https_first=false",
- "dom.block_download_insecure=false",
]
support-files = [
"alloworigin.sjs",
diff --git a/services/settings/dumps/blocklists/addons-bloomfilters.json b/services/settings/dumps/blocklists/addons-bloomfilters.json
index 3e8d6e5524..c4f4a6ea42 100644
--- a/services/settings/dumps/blocklists/addons-bloomfilters.json
+++ b/services/settings/dumps/blocklists/addons-bloomfilters.json
@@ -3,6 +3,88 @@
{
"stash": {
"blocked": [
+ "{392032f8-b8b9-4729-8b85-5909a5fb7785}:1.0",
+ "{e6ce6d79-9688-4609-8479-8fe5ce05fb94}:1.0"
+ ],
+ "unblocked": []
+ },
+ "schema": 1713875763544,
+ "key_format": "{guid}:{version}",
+ "stash_time": 1713897306045,
+ "id": "050ef823-a352-4664-8cbd-b932cdaa1abb",
+ "last_modified": 1713897363017
+ },
+ {
+ "stash": {
+ "blocked": [
+ "{93b5bb7e-cd0f-4d35-a941-e916a1f7c4fd}:1.7",
+ "{93b5bb7e-cd0f-4d35-a941-e916a1f7c4fd}:1.5",
+ "{93b5bb7e-cd0f-4d35-a941-e916a1f7c4fd}:2.1",
+ "{93b5bb7e-cd0f-4d35-a941-e916a1f7c4fd}:2.0",
+ "{93b5bb7e-cd0f-4d35-a941-e916a1f7c4fd}:1.2",
+ "{93b5bb7e-cd0f-4d35-a941-e916a1f7c4fd}:1.8",
+ "{93b5bb7e-cd0f-4d35-a941-e916a1f7c4fd}:1.0"
+ ],
+ "unblocked": []
+ },
+ "schema": 1713810962117,
+ "key_format": "{guid}:{version}",
+ "stash_time": 1713875706173,
+ "id": "de91d856-0133-44c6-ae65-47b4d58bb2be",
+ "last_modified": 1713875763407
+ },
+ {
+ "stash": {
+ "blocked": [
+ "{5d24d38f-8929-4cc5-98bd-2b4898b8c48d}:1.0"
+ ],
+ "unblocked": []
+ },
+ "schema": 1713551767144,
+ "key_format": "{guid}:{version}",
+ "stash_time": 1713810905694,
+ "id": "6bf8193f-0042-4ec6-bee5-84e7b687379e",
+ "last_modified": 1713810961988
+ },
+ {
+ "stash": {
+ "blocked": [
+ "aleks-v99@ru.ru:0.1.5",
+ "{c11b3a46-39ba-40fe-9c27-ce55352cdb64}:1.1",
+ "{c11b3a46-39ba-40fe-9c27-ce55352cdb64}:2.2",
+ "dogInformation@shop.com:1.2",
+ "{b686f58b-2bbf-46af-8e60-67596609ae89}:1.2",
+ "{9bb22fbc-fa8a-460f-b39d-720bc622a898}:1.5",
+ "dog@shop.com:1.2",
+ "{02c000a8-1030-4885-847c-4cd68b96d671}:1.1.5",
+ "{415e5339-7d66-4e3b-aa64-8109cc698933}:1.1",
+ "{870e64ef-0747-4338-ad4a-074518eecc01}:1.0.7",
+ "windowTable@windowTable:0.0.2"
+ ],
+ "unblocked": []
+ },
+ "schema": 1713455790845,
+ "key_format": "{guid}:{version}",
+ "stash_time": 1713551706705,
+ "id": "bb59b9a7-e43d-455d-8d74-5d226464f775",
+ "last_modified": 1713551766987
+ },
+ {
+ "stash": {
+ "blocked": [
+ "{329d8f7e-867f-46bb-9cad-9f1e0818a381}:1.5.10.1"
+ ],
+ "unblocked": []
+ },
+ "schema": 1713199745514,
+ "key_format": "{guid}:{version}",
+ "stash_time": 1713357304334,
+ "id": "bfd18f83-1c06-4a82-83d6-ead84cb7684f",
+ "last_modified": 1713357360700
+ },
+ {
+ "stash": {
+ "blocked": [
"{1f7d545d-970e-49e8-acd8-834d4a9aff09}:1.1"
],
"unblocked": []
@@ -524,5 +606,5 @@
"last_modified": 1707395854769
}
],
- "timestamp": 1712860562321
+ "timestamp": 1713897363017
}
diff --git a/services/settings/dumps/main/cookie-banner-rules-list.json b/services/settings/dumps/main/cookie-banner-rules-list.json
index 5d1c71818f..1c513579d9 100644
--- a/services/settings/dumps/main/cookie-banner-rules-list.json
+++ b/services/settings/dumps/main/cookie-banner-rules-list.json
@@ -2,6 +2,148 @@
"data": [
{
"click": {
+ "optIn": "#accept-btn",
+ "optOut": "#decline-btn",
+ "presence": "#privacy-manager-popin"
+ },
+ "schema": 1713199742998,
+ "domains": [
+ "canalplus.com"
+ ],
+ "id": "7b2e3401-697f-440a-b418-8477fcf2cfeb",
+ "last_modified": 1713281881442
+ },
+ {
+ "click": {
+ "optIn": "button#didomi-notice-agree-button",
+ "optOut": "button#didomi-notice-disagree-button",
+ "presence": "div#didomi-host"
+ },
+ "schema": 1713199742998,
+ "cookies": {},
+ "domains": [
+ "doctolib.fr",
+ "pravda.sk",
+ "topky.sk",
+ "zoznam.sk",
+ "tvnoviny.sk",
+ "aukro.cz",
+ "krone.at",
+ "cas.sk",
+ "heureka.sk",
+ "free.fr",
+ "markiza.sk",
+ "willhaben.at",
+ "francetvinfo.fr",
+ "france.tv",
+ "france24.com",
+ "opodo.at",
+ "opodo.ch",
+ "opodo.co.uk",
+ "opodo.de",
+ "opodo.dk",
+ "opodo.fi",
+ "opodo.fr",
+ "opodo.it",
+ "opodo.nl",
+ "opodo.no",
+ "opodo.pl",
+ "opodo.pt",
+ "radiofrance.fr",
+ "rfi.fr",
+ "rtl.fr",
+ "blablacar.fr",
+ "6play.fr",
+ "marianne.net"
+ ],
+ "id": "690aa076-4a8b-48ec-b52c-1443d44ff008",
+ "last_modified": 1713281881438
+ },
+ {
+ "click": {
+ "optIn": "button#onetrust-accept-btn-handler",
+ "optOut": "button.onetrust-close-btn-handler",
+ "presence": "div#onetrust-consent-sdk"
+ },
+ "schema": 1713199742998,
+ "cookies": {},
+ "domains": [
+ "darty.com",
+ "e.leclerc",
+ "fnac.be",
+ "fnac.ch",
+ "fnac.com",
+ "fnac.pt",
+ "leclercdrive.fr",
+ "mondialrelay.fr",
+ "pasteur.fr"
+ ],
+ "id": "2d821158-5945-4134-a078-56c6da4f678d",
+ "last_modified": 1713281881435
+ },
+ {
+ "click": {
+ "optIn": "#popin_tc_privacy_button_3",
+ "optOut": "#popin_tc_privacy_button_2",
+ "presence": "#tc-privacy-wrapper"
+ },
+ "schema": 1713199742998,
+ "domains": [
+ "bouyguestelecom.fr",
+ "enedis.fr",
+ "fortuneo.fr",
+ "lcl.fr",
+ "tf1.fr",
+ "tf1info.fr"
+ ],
+ "id": "98D89E26-F4B6-4C2D-BABF-4295B922E433",
+ "last_modified": 1713281881431
+ },
+ {
+ "click": {
+ "optIn": ".btn-ok",
+ "optOut": ".btn-reject",
+ "presence": "#cookie-policy-info"
+ },
+ "schema": 1713199742998,
+ "cookies": {
+ "optOut": [
+ {
+ "name": "isReadCookiePolicyDNT",
+ "value": "No"
+ },
+ {
+ "name": "isReadCookiePolicyDNTAa",
+ "value": "false"
+ }
+ ]
+ },
+ "domains": [
+ "asus.com"
+ ],
+ "id": "8c949b75-4c7b-4559-8ade-780064af370a",
+ "last_modified": 1713281881428
+ },
+ {
+ "click": {
+ "optOut": ".sp_choice_type_13",
+ "presence": ".message-container > #notice",
+ "runContext": "child"
+ },
+ "schema": 1713199742998,
+ "cookies": {},
+ "domains": [
+ "aktuality.sk",
+ "sky.it",
+ "azet.sk",
+ "bloomberg.com",
+ "formula1.com"
+ ],
+ "id": "ae8f7761-35ff-45b2-92df-7868ca288ad2",
+ "last_modified": 1713281881424
+ },
+ {
+ "click": {
"optIn": "#c-bns #c-p-bn",
"optOut": "#c-bns button.grey",
"presence": "#cm"
@@ -420,70 +562,6 @@
},
{
"click": {
- "optIn": "button#didomi-notice-agree-button",
- "optOut": "button#didomi-notice-disagree-button",
- "presence": "div#didomi-host"
- },
- "schema": 1711039008141,
- "cookies": {},
- "domains": [
- "doctolib.fr",
- "pravda.sk",
- "topky.sk",
- "zoznam.sk",
- "tvnoviny.sk",
- "aukro.cz",
- "krone.at",
- "cas.sk",
- "heureka.sk",
- "free.fr",
- "markiza.sk",
- "willhaben.at",
- "francetvinfo.fr",
- "france.tv",
- "france24.com",
- "opodo.at",
- "opodo.ch",
- "opodo.co.uk",
- "opodo.de",
- "opodo.dk",
- "opodo.fi",
- "opodo.fr",
- "opodo.it",
- "opodo.nl",
- "opodo.no",
- "opodo.pl",
- "opodo.pt",
- "radiofrance.fr",
- "rfi.fr",
- "blablacar.fr",
- "6play.fr"
- ],
- "id": "690aa076-4a8b-48ec-b52c-1443d44ff008",
- "last_modified": 1711550955075
- },
- {
- "click": {
- "optIn": "button#onetrust-accept-btn-handler",
- "optOut": "button.onetrust-close-btn-handler",
- "presence": "div#onetrust-consent-sdk"
- },
- "schema": 1711039008141,
- "cookies": {},
- "domains": [
- "e.leclerc",
- "fnac.be",
- "fnac.ch",
- "fnac.com",
- "fnac.pt",
- "leclercdrive.fr",
- "mondialrelay.fr"
- ],
- "id": "2d821158-5945-4134-a078-56c6da4f678d",
- "last_modified": 1711550955071
- },
- {
- "click": {
"optIn": "#popin_tc_privacy_button",
"optOut": "#popin_tc_privacy_button_3",
"presence": "#tc-privacy-wrapper"
@@ -500,23 +578,6 @@
},
{
"click": {
- "optIn": "#popin_tc_privacy_button_3",
- "optOut": "#popin_tc_privacy_button_2",
- "presence": "#tc-privacy-wrapper"
- },
- "schema": 1711039008141,
- "domains": [
- "bouyguestelecom.fr",
- "enedis.fr",
- "fortuneo.fr",
- "lcl.fr",
- "tf1.fr"
- ],
- "id": "98D89E26-F4B6-4C2D-BABF-4295B922E433",
- "last_modified": 1711550955063
- },
- {
- "click": {
"optIn": ".moove-gdpr-infobar-allow-all",
"optOut": ".moove-gdpr-infobar-reject-btn",
"presence": "#moove_gdpr_cookie_info_bar"
@@ -786,23 +847,6 @@
},
{
"click": {
- "optOut": ".sp_choice_type_13",
- "presence": ".message-container > #notice",
- "runContext": "child"
- },
- "schema": 1710174339269,
- "cookies": {},
- "domains": [
- "aktuality.sk",
- "sky.it",
- "azet.sk",
- "bloomberg.com"
- ],
- "id": "ae8f7761-35ff-45b2-92df-7868ca288ad2",
- "last_modified": 1710331175359
- },
- {
- "click": {
"optIn": "button#didomi-notice-agree-button",
"presence": "div#didomi-host"
},
@@ -1251,19 +1295,6 @@
},
{
"click": {
- "optIn": ".btn-ok",
- "optOut": ".btn-reject",
- "presence": "#cookie-policy-info"
- },
- "schema": 1708699541450,
- "domains": [
- "asus.com"
- ],
- "id": "8c949b75-4c7b-4559-8ade-780064af370a",
- "last_modified": 1708772697161
- },
- {
- "click": {
"optIn": "[data-cookieman-accept-all]",
"optOut": "[data-cookieman-accept-none]",
"presence": "#cookieman-modal"
@@ -9366,5 +9397,5 @@
"last_modified": 1670498155641
}
],
- "timestamp": 1711550955136
+ "timestamp": 1713281881442
}
diff --git a/services/settings/dumps/main/devtools-compatibility-browsers.json b/services/settings/dumps/main/devtools-compatibility-browsers.json
index 6cf0847350..1fa98c8aa1 100644
--- a/services/settings/dumps/main/devtools-compatibility-browsers.json
+++ b/services/settings/dumps/main/devtools-compatibility-browsers.json
@@ -1,193 +1,220 @@
{
"data": [
{
- "name": "Deno",
- "schema": 1712707507752,
- "status": "current",
- "version": "1.42",
- "browserid": "deno",
- "id": "a308f3c2-cc19-4a1e-825f-898696606328",
- "last_modified": 1712840749681
+ "name": "Chrome",
+ "schema": 1713917106736,
+ "status": "beta",
+ "version": "125",
+ "browserid": "chrome",
+ "id": "98f20ad9-f47a-476b-b376-be58dbcc76ff",
+ "last_modified": 1713943930239
},
{
- "name": "Edge",
- "schema": 1712707507922,
+ "name": "Chrome Android",
+ "schema": 1713917106908,
+ "status": "beta",
+ "version": "125",
+ "browserid": "chrome_android",
+ "id": "7cb3db05-b658-4c6c-a57a-c17a1ceefd38",
+ "last_modified": 1713943930237
+ },
+ {
+ "name": "Firefox",
+ "schema": 1713917107195,
"status": "planned",
- "version": "126",
- "browserid": "edge",
- "id": "c8bf4918-03b7-4be2-bf75-4d6139dbd7c9",
- "last_modified": 1712840749678
+ "version": "128",
+ "browserid": "firefox",
+ "id": "565161dc-52d8-4cb1-8cf3-8171b960f9e4",
+ "last_modified": 1713943930235
},
{
- "name": "Safari",
- "schema": 1712707507975,
- "status": "beta",
- "version": "17.5",
- "browserid": "safari",
- "id": "24e30aff-fbf8-4a96-a036-84f970447d4b",
- "last_modified": 1712840749675
+ "name": "Firefox for Android",
+ "schema": 1713917107461,
+ "status": "planned",
+ "version": "128",
+ "browserid": "firefox_android",
+ "id": "05aa43eb-3966-4fc1-8b33-53c493448d2d",
+ "last_modified": 1713943930232
},
{
- "name": "Safari on iOS",
- "schema": 1712707508032,
- "status": "beta",
- "version": "17.5",
- "browserid": "safari_ios",
- "id": "4375a82d-f2f1-4883-8da7-0aedfb05b8f9",
- "last_modified": 1712840749673
+ "name": "Opera",
+ "schema": 1713917107636,
+ "status": "current",
+ "version": "109",
+ "browserid": "opera",
+ "id": "bd13befe-c011-403f-a0d5-b6f691ff03fb",
+ "last_modified": 1713943930230
},
{
- "name": "Edge",
- "schema": 1712707507808,
+ "name": "Opera",
+ "schema": 1713917107684,
"status": "beta",
- "version": "124",
- "browserid": "edge",
- "id": "3837dc37-38b7-483b-82b3-c5593e7a4c91",
- "last_modified": 1712840749668
+ "version": "110",
+ "browserid": "opera",
+ "id": "08a3849f-52fd-40ae-9054-b0e33272d279",
+ "last_modified": 1713943930228
},
{
- "name": "Edge",
- "schema": 1712707507867,
- "status": "nightly",
+ "name": "Opera Android",
+ "schema": 1713917107783,
+ "status": "current",
+ "version": "81",
+ "browserid": "opera_android",
+ "id": "e1ea7758-028a-45df-beab-8c83d0dd0d14",
+ "last_modified": 1713943930225
+ },
+ {
+ "name": "WebView Android",
+ "schema": 1713917107962,
+ "status": "beta",
"version": "125",
- "browserid": "edge",
- "id": "f1147d5f-d690-43d0-879d-117c6ca24a16",
- "last_modified": 1712840749665
+ "browserid": "webview_android",
+ "id": "c9ec1a0b-5d6d-4727-9f93-fb4dd3f1979f",
+ "last_modified": 1713943930223
},
{
- "name": "Firefox",
- "schema": 1711497908121,
- "status": "planned",
- "version": "127",
- "browserid": "firefox",
- "id": "1477a1c3-a8be-4e6f-916e-8cf8eb789e3f",
- "last_modified": 1711547229147
+ "name": "Chrome Android",
+ "schema": 1713917106856,
+ "status": "current",
+ "version": "124",
+ "browserid": "chrome_android",
+ "id": "6946fbe1-bfff-4b64-aead-f001f0e486de",
+ "last_modified": 1713943930211
},
{
- "name": "Firefox for Android",
- "schema": 1711497908436,
- "status": "planned",
- "version": "127",
- "browserid": "firefox_android",
- "id": "13f02b93-14c9-4ca4-937d-0a83fb7fb3a5",
- "last_modified": 1711547229144
+ "name": "Chrome",
+ "schema": 1713917106676,
+ "status": "current",
+ "version": "124",
+ "browserid": "chrome",
+ "id": "f26cb7b0-cf29-4c33-8fb7-a2cc466a7e3c",
+ "last_modified": 1713943930205
+ },
+ {
+ "name": "WebView Android",
+ "schema": 1713917107903,
+ "status": "current",
+ "version": "124",
+ "browserid": "webview_android",
+ "id": "2dd2f70c-7c64-4aee-a05e-a0eb05d29ed5",
+ "last_modified": 1713943930203
},
{
"name": "Firefox",
- "schema": 1711497908007,
+ "schema": 1713917107078,
"status": "beta",
- "version": "125",
+ "version": "126",
"browserid": "firefox",
- "id": "5ae5bd40-deb0-40c4-bba6-cd411b78ee16",
- "last_modified": 1711547229141
+ "id": "70b05b0b-bbef-486c-901a-ea3221a28fc1",
+ "last_modified": 1713943930201
},
{
"name": "Firefox for Android",
- "schema": 1711497908310,
+ "schema": 1713917107363,
"status": "beta",
- "version": "125",
+ "version": "126",
"browserid": "firefox_android",
- "id": "a8f570e9-574d-4193-891f-fa8e0a875388",
- "last_modified": 1711547229139
+ "id": "b77524e9-58dc-4196-acbd-41dddc4daea2",
+ "last_modified": 1713943930199
},
{
"name": "Firefox for Android",
- "schema": 1711497908249,
+ "schema": 1713917107309,
"status": "current",
- "version": "124",
+ "version": "125",
"browserid": "firefox_android",
- "id": "1b3c619a-5ca8-4f5f-8f0b-57a3a27a589f",
- "last_modified": 1711547229132
+ "id": "a8f570e9-574d-4193-891f-fa8e0a875388",
+ "last_modified": 1713943930193
},
{
"name": "Firefox",
- "schema": 1711497907952,
+ "schema": 1713917107027,
"status": "current",
- "version": "124",
+ "version": "125",
"browserid": "firefox",
- "id": "7f93cadc-411f-4e31-938c-cc5bfc173f85",
- "last_modified": 1711547229129
+ "id": "5ae5bd40-deb0-40c4-bba6-cd411b78ee16",
+ "last_modified": 1713943930190
},
{
"name": "Firefox for Android",
- "schema": 1711497908374,
+ "schema": 1713917107413,
"status": "nightly",
- "version": "126",
+ "version": "127",
"browserid": "firefox_android",
- "id": "b77524e9-58dc-4196-acbd-41dddc4daea2",
- "last_modified": 1711547229127
+ "id": "13f02b93-14c9-4ca4-937d-0a83fb7fb3a5",
+ "last_modified": 1713943930188
},
{
"name": "Firefox",
- "schema": 1711497908064,
+ "schema": 1713917107141,
"status": "nightly",
- "version": "126",
+ "version": "127",
"browserid": "firefox",
- "id": "70b05b0b-bbef-486c-901a-ea3221a28fc1",
- "last_modified": 1711547229124
+ "id": "1477a1c3-a8be-4e6f-916e-8cf8eb789e3f",
+ "last_modified": 1713943930185
},
{
- "name": "Edge",
- "schema": 1711497907820,
+ "name": "Deno",
+ "schema": 1712707507752,
"status": "current",
- "version": "123",
- "browserid": "edge",
- "id": "d0c3d84f-8d27-455b-8746-7e25607e5b78",
- "last_modified": 1711547229120
+ "version": "1.42",
+ "browserid": "deno",
+ "id": "a308f3c2-cc19-4a1e-825f-898696606328",
+ "last_modified": 1712840749681
},
{
- "name": "WebView Android",
- "schema": 1710547503853,
- "status": "beta",
- "version": "124",
- "browserid": "webview_android",
- "id": "2dd2f70c-7c64-4aee-a05e-a0eb05d29ed5",
- "last_modified": 1710742064656
+ "name": "Edge",
+ "schema": 1712707507922,
+ "status": "planned",
+ "version": "126",
+ "browserid": "edge",
+ "id": "c8bf4918-03b7-4be2-bf75-4d6139dbd7c9",
+ "last_modified": 1712840749678
},
{
- "name": "Chrome",
- "schema": 1710547503371,
+ "name": "Safari",
+ "schema": 1712707507975,
"status": "beta",
- "version": "124",
- "browserid": "chrome",
- "id": "f26cb7b0-cf29-4c33-8fb7-a2cc466a7e3c",
- "last_modified": 1710742064653
- },
- {
- "name": "Chrome",
- "schema": 1710547503307,
- "status": "current",
- "version": "123",
- "browserid": "chrome",
- "id": "66e79095-2721-4a9e-9139-1a5f1afe1311",
- "last_modified": 1710742064649
+ "version": "17.5",
+ "browserid": "safari",
+ "id": "24e30aff-fbf8-4a96-a036-84f970447d4b",
+ "last_modified": 1712840749675
},
{
- "name": "WebView Android",
- "schema": 1710547503750,
- "status": "current",
- "version": "123",
- "browserid": "webview_android",
- "id": "97f38fec-64b0-4f0f-addc-03ac1b11d512",
- "last_modified": 1710742064638
+ "name": "Safari on iOS",
+ "schema": 1712707508032,
+ "status": "beta",
+ "version": "17.5",
+ "browserid": "safari_ios",
+ "id": "4375a82d-f2f1-4883-8da7-0aedfb05b8f9",
+ "last_modified": 1712840749673
},
{
- "name": "Chrome Android",
- "schema": 1710547503606,
+ "name": "Edge",
+ "schema": 1712707507808,
"status": "beta",
"version": "124",
- "browserid": "chrome_android",
- "id": "6946fbe1-bfff-4b64-aead-f001f0e486de",
- "last_modified": 1710742064634
+ "browserid": "edge",
+ "id": "3837dc37-38b7-483b-82b3-c5593e7a4c91",
+ "last_modified": 1712840749668
},
{
- "name": "Chrome Android",
- "schema": 1710547503508,
+ "name": "Edge",
+ "schema": 1712707507867,
+ "status": "nightly",
+ "version": "125",
+ "browserid": "edge",
+ "id": "f1147d5f-d690-43d0-879d-117c6ca24a16",
+ "last_modified": 1712840749665
+ },
+ {
+ "name": "Edge",
+ "schema": 1711497907820,
"status": "current",
"version": "123",
- "browserid": "chrome_android",
- "id": "a0ce8ad2-5c66-4e9e-987a-8a66c30e13f5",
- "last_modified": 1710742064631
+ "browserid": "edge",
+ "id": "d0c3d84f-8d27-455b-8746-7e25607e5b78",
+ "last_modified": 1711547229120
},
{
"name": "Safari",
@@ -208,33 +235,6 @@
"last_modified": 1709801393995
},
{
- "name": "Opera",
- "schema": 1708473904223,
- "status": "beta",
- "version": "108",
- "browserid": "opera",
- "id": "765d6fa9-857a-4918-9a85-fd40f73c9159",
- "last_modified": 1708507560606
- },
- {
- "name": "Opera",
- "schema": 1708473904160,
- "status": "current",
- "version": "107",
- "browserid": "opera",
- "id": "8d9d78bb-ebc3-4931-a98b-bdefc339061d",
- "last_modified": 1708507560573
- },
- {
- "name": "Opera Android",
- "schema": 1706313908456,
- "status": "current",
- "version": "80",
- "browserid": "opera_android",
- "id": "534dc626-14f0-479e-9912-043e3da31e91",
- "last_modified": 1706515991120
- },
- {
"name": "Node.js",
"schema": 1702685107693,
"status": "esr",
@@ -298,5 +298,5 @@
"last_modified": 1665656484764
}
],
- "timestamp": 1712840749681
+ "timestamp": 1713943930239
}
diff --git a/services/settings/dumps/main/search-config-v2.json b/services/settings/dumps/main/search-config-v2.json
index e360ad9ee3..5a8be8dfeb 100644
--- a/services/settings/dumps/main/search-config-v2.json
+++ b/services/settings/dumps/main/search-config-v2.json
@@ -2,254 +2,68 @@
"data": [
{
"base": {
- "name": "Qwant",
+ "name": "DuckDuckGo",
"urls": {
"search": {
- "base": "https://www.qwant.com/",
+ "base": "https://duckduckgo.com/",
"params": [
{
- "name": "client",
+ "name": "t",
"value": "{partnerCode}"
}
],
"searchTermParamName": "q"
},
"suggestions": {
- "base": "https://api.qwant.com/api/suggest/",
+ "base": "https://ac.duckduckgo.com/ac/",
"params": [
{
- "name": "client",
- "value": "opensearch"
+ "name": "type",
+ "value": "list"
}
],
"searchTermParamName": "q"
}
},
"aliases": [
- "qwant"
+ "duckduckgo",
+ "ddg"
],
- "partnerCode": "brz-moz",
+ "partnerCode": "ffab",
"classification": "general"
},
- "schema": 1710460806956,
+ "schema": 1713282081098,
"variants": [
{
"environment": {
- "locales": [
- "fr"
- ]
- }
- },
- {
- "environment": {
- "regions": [
- "be",
- "ch",
- "es",
- "fr",
- "it",
- "nl"
- ]
- }
- },
- {
- "environment": {
- "distributions": [
- "qwant-001",
- "qwant-002"
- ]
+ "allRegionsAndLocales": true
},
- "partnerCode": "firefoxqwant",
- "telemetrySuffix": "qwant"
- }
- ],
- "identifier": "qwant",
- "recordType": "engine",
- "id": "2e62746e-b90a-42ee-b0f2-9ed0e1e2eaf0",
- "last_modified": 1710766863306
- },
- {
- "orders": [
- {
- "order": [
- "baidu",
- "bing",
- "google",
- "wikipedia*"
- ],
- "environment": {
- "distributions": [
- "MozillaOnline"
- ]
- }
- },
- {
- "order": [
- "qwant",
- "qwantjr"
- ],
- "environment": {
- "distributions": [
- "qwant-001",
- "qwant-002"
- ]
- }
- }
- ],
- "schema": 1707824831520,
- "recordType": "engineOrders",
- "id": "3e1fed64-5ec7-4b1c-bedc-741fe3c59bc3",
- "last_modified": 1707833224345
- },
- {
- "base": {
- "name": "Bing",
- "urls": {
- "search": {
- "base": "https://www.bing.com/search",
- "params": [
- {
- "name": "pc",
- "value": "{partnerCode}"
+ "subVariants": [
+ {
+ "environment": {
+ "channels": [
+ "esr"
+ ]
},
- {
- "name": "form",
- "searchAccessPoint": {
- "newtab": "MOZTSB",
- "homepage": "MOZSPG",
- "searchbar": "MOZSBR",
- "addressbar": "MOZLBR",
- "contextmenu": "MOZCON"
- }
- }
- ],
- "searchTermParamName": "q"
- },
- "trending": {
- "base": "https://www.bing.com/osjson.aspx"
- },
- "suggestions": {
- "base": "https://www.bing.com/osjson.aspx",
- "params": [
- {
- "name": "form",
- "value": "OSDJAS"
- }
- ],
- "searchTermParamName": "query"
- }
- },
- "aliases": [
- "bing"
- ],
- "partnerCode": "MOZI",
- "classification": "general"
- },
- "schema": 1706918405822,
- "variants": [
- {
- "environment": {
- "locales": [
- "ach",
- "af",
- "an",
- "ar",
- "ast",
- "az",
- "bn",
- "bs",
- "ca",
- "ca-valencia",
- "cak",
- "cs",
- "cy",
- "da",
- "de",
- "dsb",
- "el",
- "en-CA",
- "en-GB",
- "en-US",
- "eo",
- "es-CL",
- "es-ES",
- "es-MX",
- "eu",
- "fa",
- "ff",
- "fi",
- "fr",
- "fur",
- "fy-NL",
- "gd",
- "gl",
- "gn",
- "gu-IN",
- "he",
- "hi-IN",
- "hr",
- "hsb",
- "hy-AM",
- "ia",
- "id",
- "is",
- "it",
- "ja",
- "ja-JP-macos",
- "ka",
- "kab",
- "km",
- "kn",
- "lij",
- "lo",
- "lt",
- "meh",
- "mk",
- "ms",
- "my",
- "nb-NO",
- "ne-NP",
- "nl",
- "nn-NO",
- "oc",
- "pa-IN",
- "pt-BR",
- "rm",
- "ro",
- "sc",
- "sco",
- "son",
- "sq",
- "sr",
- "sv-SE",
- "te",
- "th",
- "tl",
- "tr",
- "trs",
- "uk",
- "ur",
- "uz",
- "wo",
- "xh",
- "zh-CN"
- ]
- }
+ "partnerCode": "ftsa",
+ "telemetrySuffix": "esr"
+ }
+ ]
},
{
"environment": {
- "channels": [
- "esr"
+ "distributions": [
+ "mint-001"
]
},
- "partnerCode": "MOZR",
- "telemetrySuffix": "esr"
+ "partnerCode": "lm",
+ "telemetrySuffix": "lm"
}
],
- "identifier": "bing",
+ "identifier": "ddg",
"recordType": "engine",
- "id": "05645095-d26e-4f20-9137-f24a14a23f28",
- "last_modified": 1707833224310
+ "id": "04e99a38-13ee-47d8-8aa4-64482b3dea99",
+ "last_modified": 1713282817053
},
{
"base": {
@@ -305,24 +119,26 @@
"partnerCode": "firefox-b-d",
"classification": "general"
},
- "schema": 1702901739026,
+ "schema": 1713282083062,
"variants": [
{
"environment": {
"allRegionsAndLocales": true
},
+ "subVariants": [
+ {
+ "environment": {
+ "channels": [
+ "esr"
+ ]
+ },
+ "partnerCode": "firefox-b-e",
+ "telemetrySuffix": "b-e"
+ }
+ ],
"telemetrySuffix": "b-d"
},
{
- "environment": {
- "channels": [
- "esr"
- ]
- },
- "partnerCode": "firefox-b-e",
- "telemetrySuffix": "b-e"
- },
- {
"urls": {
"search": {
"params": []
@@ -359,33 +175,21 @@
]
},
"partnerCode": "firefox-b-1-d",
- "telemetrySuffix": "b-1-d"
- },
- {
- "urls": {
- "search": {
- "params": [
- {
- "name": "client",
- "value": "{partnerCode}"
- },
- {
- "name": "channel",
- "experimentConfig": "google_channel_us"
- }
- ]
+ "subVariants": [
+ {
+ "environment": {
+ "regions": [
+ "us"
+ ],
+ "channels": [
+ "esr"
+ ]
+ },
+ "partnerCode": "firefox-b-1-e",
+ "telemetrySuffix": "b-1-e"
}
- },
- "environment": {
- "regions": [
- "us"
- ],
- "channels": [
- "esr"
- ]
- },
- "partnerCode": "firefox-b-1-e",
- "telemetrySuffix": "b-1-e"
+ ],
+ "telemetrySuffix": "b-1-d"
},
{
"urls": {
@@ -459,70 +263,260 @@
"identifier": "google",
"recordType": "engine",
"id": "7ace4aa1-e762-4f4b-87b9-b23b3c3a930b",
- "last_modified": 1702906502757
+ "last_modified": 1713282817051
},
{
"base": {
- "name": "DuckDuckGo",
+ "name": "Bing",
"urls": {
"search": {
- "base": "https://duckduckgo.com/",
+ "base": "https://www.bing.com/search",
"params": [
{
- "name": "t",
+ "name": "pc",
"value": "{partnerCode}"
+ },
+ {
+ "name": "form",
+ "searchAccessPoint": {
+ "newtab": "MOZTSB",
+ "homepage": "MOZSPG",
+ "searchbar": "MOZSBR",
+ "addressbar": "MOZLBR",
+ "contextmenu": "MOZCON"
+ }
}
],
"searchTermParamName": "q"
},
+ "trending": {
+ "base": "https://www.bing.com/osjson.aspx"
+ },
"suggestions": {
- "base": "https://ac.duckduckgo.com/ac/",
+ "base": "https://www.bing.com/osjson.aspx",
"params": [
{
- "name": "type",
- "value": "list"
+ "name": "form",
+ "value": "OSDJAS"
+ }
+ ],
+ "searchTermParamName": "query"
+ }
+ },
+ "aliases": [
+ "bing"
+ ],
+ "partnerCode": "MOZI",
+ "classification": "general"
+ },
+ "schema": 1713199744323,
+ "variants": [
+ {
+ "environment": {
+ "locales": [
+ "ach",
+ "af",
+ "an",
+ "ar",
+ "ast",
+ "az",
+ "bn",
+ "bs",
+ "ca",
+ "ca-valencia",
+ "cak",
+ "cs",
+ "cy",
+ "da",
+ "de",
+ "dsb",
+ "el",
+ "en-CA",
+ "en-GB",
+ "en-US",
+ "eo",
+ "es-CL",
+ "es-ES",
+ "es-MX",
+ "eu",
+ "fa",
+ "ff",
+ "fi",
+ "fr",
+ "fur",
+ "fy-NL",
+ "gd",
+ "gl",
+ "gn",
+ "gu-IN",
+ "he",
+ "hi-IN",
+ "hr",
+ "hsb",
+ "hy-AM",
+ "ia",
+ "id",
+ "is",
+ "it",
+ "ja",
+ "ja-JP-macos",
+ "ka",
+ "kab",
+ "km",
+ "kn",
+ "lij",
+ "lo",
+ "lt",
+ "meh",
+ "mk",
+ "ms",
+ "my",
+ "nb-NO",
+ "ne-NP",
+ "nl",
+ "nn-NO",
+ "oc",
+ "pa-IN",
+ "pt-BR",
+ "rm",
+ "ro",
+ "sc",
+ "sco",
+ "son",
+ "sq",
+ "sr",
+ "sv-SE",
+ "te",
+ "th",
+ "tl",
+ "tr",
+ "trs",
+ "uk",
+ "ur",
+ "uz",
+ "wo",
+ "xh",
+ "zh-CN"
+ ]
+ },
+ "subVariants": [
+ {
+ "environment": {
+ "channels": [
+ "esr"
+ ]
+ },
+ "partnerCode": "MOZR",
+ "telemetrySuffix": "esr"
+ }
+ ]
+ }
+ ],
+ "identifier": "bing",
+ "recordType": "engine",
+ "id": "05645095-d26e-4f20-9137-f24a14a23f28",
+ "last_modified": 1713282817048
+ },
+ {
+ "base": {
+ "name": "Qwant",
+ "urls": {
+ "search": {
+ "base": "https://www.qwant.com/",
+ "params": [
+ {
+ "name": "client",
+ "value": "{partnerCode}"
+ }
+ ],
+ "searchTermParamName": "q"
+ },
+ "suggestions": {
+ "base": "https://api.qwant.com/api/suggest/",
+ "params": [
+ {
+ "name": "client",
+ "value": "opensearch"
}
],
"searchTermParamName": "q"
}
},
"aliases": [
- "duckduckgo",
- "ddg"
+ "qwant"
],
- "partnerCode": "ffab",
+ "partnerCode": "brz-moz",
"classification": "general"
},
- "schema": 1702901739665,
+ "schema": 1710460806956,
"variants": [
{
"environment": {
- "allRegionsAndLocales": true
+ "locales": [
+ "fr"
+ ]
}
},
{
"environment": {
- "channels": [
- "esr"
+ "regions": [
+ "be",
+ "ch",
+ "es",
+ "fr",
+ "it",
+ "nl"
]
- },
- "partnerCode": "ftsa",
- "telemetrySuffix": "esr"
+ }
},
{
"environment": {
"distributions": [
- "mint-001"
+ "qwant-001",
+ "qwant-002"
]
},
- "partnerCode": "lm",
- "telemetrySuffix": "lm"
+ "partnerCode": "firefoxqwant",
+ "telemetrySuffix": "qwant"
}
],
- "identifier": "ddg",
+ "identifier": "qwant",
"recordType": "engine",
- "id": "04e99a38-13ee-47d8-8aa4-64482b3dea99",
- "last_modified": 1702906502754
+ "id": "2e62746e-b90a-42ee-b0f2-9ed0e1e2eaf0",
+ "last_modified": 1710766863306
+ },
+ {
+ "orders": [
+ {
+ "order": [
+ "baidu",
+ "bing",
+ "google",
+ "wikipedia*"
+ ],
+ "environment": {
+ "distributions": [
+ "MozillaOnline"
+ ]
+ }
+ },
+ {
+ "order": [
+ "qwant",
+ "qwantjr"
+ ],
+ "environment": {
+ "distributions": [
+ "qwant-001",
+ "qwant-002"
+ ]
+ }
+ }
+ ],
+ "schema": 1707824831520,
+ "recordType": "engineOrders",
+ "id": "3e1fed64-5ec7-4b1c-bedc-741fe3c59bc3",
+ "last_modified": 1707833224345
},
{
"base": {
@@ -7341,5 +7335,5 @@
"last_modified": 1702906502241
}
],
- "timestamp": 1710766863306
+ "timestamp": 1713282817053
}
diff --git a/services/settings/dumps/main/search-telemetry-v2.json b/services/settings/dumps/main/search-telemetry-v2.json
index 9eb4e5d29c..1a1708529c 100644
--- a/services/settings/dumps/main/search-telemetry-v2.json
+++ b/services/settings/dumps/main/search-telemetry-v2.json
@@ -1,6 +1,80 @@
{
"data": [
{
+ "isSPA": true,
+ "schema": 1712762409532,
+ "components": [
+ {
+ "type": "ad_image_row",
+ "included": {
+ "parent": {
+ "selector": "[data-testid='pam.container']"
+ },
+ "children": [
+ {
+ "selector": "[data-slide-index]",
+ "countChildren": true
+ }
+ ]
+ }
+ },
+ {
+ "type": "ad_link",
+ "included": {
+ "parent": {
+ "selector": "[data-testid='adResult']"
+ }
+ }
+ },
+ {
+ "type": "incontent_searchbox",
+ "topDown": true,
+ "included": {
+ "parent": {
+ "selector": "._1zdrb._1cR1n"
+ },
+ "related": {
+ "selector": "#search-suggestions"
+ },
+ "children": [
+ {
+ "selector": "input[type='search']"
+ }
+ ]
+ }
+ },
+ {
+ "type": "ad_link",
+ "default": true
+ }
+ ],
+ "taggedCodes": [
+ "brz-moz",
+ "firefoxqwant"
+ ],
+ "telemetryId": "qwant",
+ "organicCodes": [],
+ "codeParamName": "client",
+ "queryParamName": "q",
+ "queryParamNames": [
+ "q"
+ ],
+ "searchPageRegexp": "^https://www\\.qwant\\.com/",
+ "filter_expression": "env.version|versionCompare(\"124.0a1\")>=0",
+ "followOnParamNames": [],
+ "defaultPageQueryParam": {
+ "key": "t",
+ "value": "web"
+ },
+ "extraAdServersRegexps": [
+ "^https://www\\.bing\\.com/acli?c?k",
+ "^https://api\\.qwant\\.com/v3/r/",
+ "^https://fdn\\.qwant\\.com/v3/r/"
+ ],
+ "id": "19c434a3-d173-4871-9743-290ac92a3f6b",
+ "last_modified": 1713187389066
+ },
+ {
"schema": 1712582517430,
"components": [
{
@@ -448,79 +522,6 @@
"last_modified": 1712582517281
},
{
- "isSPA": true,
- "schema": 1707523204491,
- "components": [
- {
- "type": "ad_image_row",
- "included": {
- "parent": {
- "selector": "[data-testid='pam.container']"
- },
- "children": [
- {
- "selector": "[data-slide-index]",
- "countChildren": true
- }
- ]
- }
- },
- {
- "type": "ad_link",
- "included": {
- "parent": {
- "selector": "[data-testid='adResult']"
- }
- }
- },
- {
- "type": "incontent_searchbox",
- "topDown": true,
- "included": {
- "parent": {
- "selector": "._1zdrb._1cR1n"
- },
- "related": {
- "selector": "#search-suggestions"
- },
- "children": [
- {
- "selector": "input[type='search']"
- }
- ]
- }
- },
- {
- "type": "ad_link",
- "default": true
- }
- ],
- "taggedCodes": [
- "brz-moz",
- "firefoxqwant"
- ],
- "telemetryId": "qwant",
- "organicCodes": [],
- "codeParamName": "client",
- "queryParamName": "q",
- "queryParamNames": [
- "q"
- ],
- "searchPageRegexp": "^https://www\\.qwant\\.com/",
- "filter_expression": "env.version|versionCompare(\"124.0a1\")>=0",
- "followOnParamNames": [],
- "defaultPageQueryParam": {
- "key": "t",
- "value": "web"
- },
- "extraAdServersRegexps": [
- "^https://www\\.bing\\.com/acli?c?k",
- "^https://api\\.qwant\\.com/v3/r/"
- ],
- "id": "19c434a3-d173-4871-9743-290ac92a3f6b",
- "last_modified": 1707833261849
- },
- {
"schema": 1705363206938,
"components": [
{
@@ -785,5 +786,5 @@
"last_modified": 1698666532324
}
],
- "timestamp": 1712762409389
+ "timestamp": 1713187389066
}
diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json
index ac343a2494..282cb6c376 100644
--- a/services/settings/dumps/security-state/intermediates.json
+++ b/services/settings/dumps/security-state/intermediates.json
@@ -1,6 +1,384 @@
{
"data": [
{
+ "schema": 1713801022424,
+ "derHash": "XUSUtl0cFO+ZWcU56r4hlZ8aSmiA8T/dsZC4suGFzNw=",
+ "subject": "CN=certSIGN Web CA,O=CERTSIGN SA,C=RO",
+ "subjectDN": "MFYxCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEYMBYGA1UEAxMPY2VydFNJR04gV2ViIENBMRcwFQYDVQRhEw5WQVRSTy0xODI4ODI1MA==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "e167023854b7a05b9ca70d8db4bc84d6eb3e4d6b1db5f7b7db951e80125300fb",
+ "size": 1975,
+ "filename": "G6NjfcFmFAa5DouUTqNGb3I5tG34kmES3evs_0ubJ68=.pem",
+ "location": "security-state-staging/intermediates/7a2907d8-f702-4338-96fa-ae42d3d1ee3b.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "G6NjfcFmFAa5DouUTqNGb3I5tG34kmES3evs/0ubJ68=",
+ "crlite_enrolled": false,
+ "id": "e240965f-851e-4200-ba0b-17b7fa547f5d",
+ "last_modified": 1713801423278
+ },
+ {
+ "schema": 1713563345018,
+ "derHash": "IZxZzNBtAhCtz26BJXANFXj2mgZwoH/Z3emeSsglJM0=",
+ "subject": "CN=ZoTrus RSA OV SSL CA,O=ZoTrus Technology Limited,C=CN",
+ "subjectDN": "MFAxCzAJBgNVBAYTAkNOMSIwIAYDVQQKExlab1RydXMgVGVjaG5vbG9neSBMaW1pdGVkMR0wGwYDVQQDExRab1RydXMgUlNBIE9WIFNTTCBDQQ==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "df459901a281cbe7636484586532b6b0f97f8624ad80259948b32e8b32f57d01",
+ "size": 2186,
+ "filename": "CpOFwp9u6sYpBiZdnXJcuX-x4w2iZ0y98RsCFJ4JVec=.pem",
+ "location": "security-state-staging/intermediates/9ff98225-689c-485f-892a-a572d7c6fc58.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "CpOFwp9u6sYpBiZdnXJcuX+x4w2iZ0y98RsCFJ4JVec=",
+ "crlite_enrolled": false,
+ "id": "fa3842ac-f284-467d-b036-0e5b4c88ca50",
+ "last_modified": 1713563823131
+ },
+ {
+ "schema": 1713563344315,
+ "derHash": "acJYYSNlAvDCI0Q/2FGi+2rLdFu4FK1yuy5QhnxSw7s=",
+ "subject": "CN=ZoTrus RSA DV SSL CA,O=ZoTrus Technology Limited,C=CN",
+ "subjectDN": "MFAxCzAJBgNVBAYTAkNOMSIwIAYDVQQKExlab1RydXMgVGVjaG5vbG9neSBMaW1pdGVkMR0wGwYDVQQDExRab1RydXMgUlNBIERWIFNTTCBDQQ==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "b393a21ea913aac405b4ee3342a01e46e0948a4274fd9b12853f1fe807d86d69",
+ "size": 2186,
+ "filename": "Cww1k9MzHuL6DZFf8KvIl44NqeUd1st4eTJGzTX1kYY=.pem",
+ "location": "security-state-staging/intermediates/a6bf409d-0112-4d87-a25a-3777feef0e46.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "Cww1k9MzHuL6DZFf8KvIl44NqeUd1st4eTJGzTX1kYY=",
+ "crlite_enrolled": false,
+ "id": "f1b159b3-d5ee-4930-a183-0d11cd444460",
+ "last_modified": 1713563823128
+ },
+ {
+ "schema": 1713563343973,
+ "derHash": "rKCQy9vdNVILIuw89wMmVboWosgA+ASzqrf4Zfpvw4c=",
+ "subject": "CN=JoySSL OV Secure Server CA,O=JoySSL Limited,C=CN",
+ "subjectDN": "MEsxCzAJBgNVBAYTAkNOMRcwFQYDVQQKEw5Kb3lTU0wgTGltaXRlZDEjMCEGA1UEAxMaSm95U1NMIE9WIFNlY3VyZSBTZXJ2ZXIgQ0E=",
+ "whitelist": false,
+ "attachment": {
+ "hash": "88466fa7d95b757a7d4a8fecb8a975bcc6ba1677cac49f30f93c5109aa15f65e",
+ "size": 2182,
+ "filename": "jtWy8BfFvLgKrzt6mKianqUuZ1PXKdIvXZzSmyr3_-w=.pem",
+ "location": "security-state-staging/intermediates/c9659949-5039-44e3-84f3-803544c952d4.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "jtWy8BfFvLgKrzt6mKianqUuZ1PXKdIvXZzSmyr3/+w=",
+ "crlite_enrolled": false,
+ "id": "8fe4a5ad-a4e9-47f2-9ba7-bcab681f426b",
+ "last_modified": 1713563823126
+ },
+ {
+ "schema": 1713563344664,
+ "derHash": "/9DZ7uqvu0xE9xOS8gpS4PZYloVJMxOWQHIt7PwtRlg=",
+ "subject": "CN=KeepTrust OV TLS RSA CA G1,O=Shanghai Huandu Info Tech Co. Ltd.,C=CN",
+ "subjectDN": "MF8xCzAJBgNVBAYTAkNOMSswKQYDVQQKEyJTaGFuZ2hhaSBIdWFuZHUgSW5mbyBUZWNoIENvLiBMdGQuMSMwIQYDVQQDExpLZWVwVHJ1c3QgT1YgVExTIFJTQSBDQSBHMQ==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "7d3dd6bb2446b15df04ebc4b8c50d8a3dabf66fc2b32bab9b38bff6321f687a7",
+ "size": 2207,
+ "filename": "85cJCFYD08OgL627TkJaiRlaXlhLH-X69RT3h0uEcwM=.pem",
+ "location": "security-state-staging/intermediates/15dfb64e-b086-408b-855c-8c562439f65c.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "85cJCFYD08OgL627TkJaiRlaXlhLH+X69RT3h0uEcwM=",
+ "crlite_enrolled": false,
+ "id": "5af111fa-ed57-4069-b6ac-7e51199118e3",
+ "last_modified": 1713563823123
+ },
+ {
+ "schema": 1713563343607,
+ "derHash": "nG2hQcs5TOa5caI/mIZH/0RC55jwcYdxtUhaDMdAIzU=",
+ "subject": "CN=JoySSL DV Secure Server CA,O=JoySSL Limited,C=CN",
+ "subjectDN": "MEsxCzAJBgNVBAYTAkNOMRcwFQYDVQQKEw5Kb3lTU0wgTGltaXRlZDEjMCEGA1UEAxMaSm95U1NMIERWIFNlY3VyZSBTZXJ2ZXIgQ0E=",
+ "whitelist": false,
+ "attachment": {
+ "hash": "84496c854fb2d8cad229bb75a8de9839a986a3d51d9eee944b88ecafbd3a0a65",
+ "size": 2182,
+ "filename": "pZFHI421hRWO43yx8HCJLhSo4mOjwrjbFnCGBEN0LvE=.pem",
+ "location": "security-state-staging/intermediates/6820726c-20e4-481b-98f5-6b13b1ae6d14.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "pZFHI421hRWO43yx8HCJLhSo4mOjwrjbFnCGBEN0LvE=",
+ "crlite_enrolled": false,
+ "id": "f391ba6d-e041-48c5-a43c-d5af91121cc5",
+ "last_modified": 1713563823121
+ },
+ {
+ "schema": 1713473658968,
+ "derHash": "a0DT26rWi+boBOMghfeDfO4It8T6apkLNiJ6bc/whzs=",
+ "subject": "CN=PerfectSSL,O=PerfectSSL,C=NL",
+ "subjectDN": "MDcxCzAJBgNVBAYTAk5MMRMwEQYDVQQKEwpQZXJmZWN0U1NMMRMwEQYDVQQDEwpQZXJmZWN0U1NM",
+ "whitelist": false,
+ "attachment": {
+ "hash": "b75222a66459085ea18be6201277a8268889995fe60f7044c2c32aeb6ff40dd0",
+ "size": 1959,
+ "filename": "9RQ9clPdkWNhDziW0svuZ7LXhk0f0s2Ml81OxcqhrqQ=.pem",
+ "location": "security-state-staging/intermediates/cb51eabd-87f1-4373-9b0b-6a1bb18d1c79.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "9RQ9clPdkWNhDziW0svuZ7LXhk0f0s2Ml81OxcqhrqQ=",
+ "crlite_enrolled": false,
+ "id": "342b832e-bb1f-4408-9906-ff1b291f3e96",
+ "last_modified": 1713473823432
+ },
+ {
+ "schema": 1713473658447,
+ "derHash": "MzfU5LTvapTwSRXS6Gsfj0ejyDZn2iUZ2bla5ycK/+E=",
+ "subject": "CN=GandiCert,O=Gandi SAS,C=FR",
+ "subjectDN": "MDUxCzAJBgNVBAYTAkZSMRIwEAYDVQQKEwlHYW5kaSBTQVMxEjAQBgNVBAMTCUdhbmRpQ2VydA==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "3e6f5e189669c1d64d89e7571909742cebbe17aec48eb5ca9f8cccb6094e7689",
+ "size": 1955,
+ "filename": "0dflgFofXiuLoZvgRpP8N9xrpDTgZ7c1xbmTjIxym7o=.pem",
+ "location": "security-state-staging/intermediates/9bf57459-554d-4097-b765-7c699260613f.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "0dflgFofXiuLoZvgRpP8N9xrpDTgZ7c1xbmTjIxym7o=",
+ "crlite_enrolled": false,
+ "id": "080e3470-9e74-48e7-957d-a5dde3daddfb",
+ "last_modified": 1713473823429
+ },
+ {
+ "schema": 1713452052498,
+ "derHash": "iJW+zvwq52yxVHc0XzJL0rljPKYutDui/Zx/29uG5zs=",
+ "subject": "CN=GlobalSign Atlas E46 EV TLS CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZHbG9iYWxTaWduIEF0bGFzIEU0NiBFViBUTFMgQ0EgMjAyNCBRMw==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "6d71e60403974080f3a60316da33e3cd0853f79eb814af508d28e1183d735128",
+ "size": 1195,
+ "filename": "GL1_4VKxhjyJ54_uySfexhsBT5pCdaSyVqFsqOgJF8I=.pem",
+ "location": "security-state-staging/intermediates/be82d832-3efe-4188-bfc3-a861cecf3e7c.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "GL1/4VKxhjyJ54/uySfexhsBT5pCdaSyVqFsqOgJF8I=",
+ "crlite_enrolled": false,
+ "id": "ffd3b55a-6cc6-4a36-8490-00225549d1a0",
+ "last_modified": 1713452223321
+ },
+ {
+ "schema": 1713452053181,
+ "derHash": "XwxjNtMYvQtG4YMlFJczYMmCkwH0ukKkAqU6WpQhYg4=",
+ "subject": "CN=GlobalSign Atlas R3 DV TLS CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIERWIFRMUyBDQSAyMDI0IFEz",
+ "whitelist": false,
+ "attachment": {
+ "hash": "991f25b3e47b9047f93fd2d57d3e3c4a215a51a596d5da5a510fdb37db8d0016",
+ "size": 1642,
+ "filename": "JTrpt0XhAg9V4GwmsBhvwkOFUPBwqttAzQvQ_hbIHhc=.pem",
+ "location": "security-state-staging/intermediates/607e70b5-ed2c-4fc2-8406-6b5c67e9ca13.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "JTrpt0XhAg9V4GwmsBhvwkOFUPBwqttAzQvQ/hbIHhc=",
+ "crlite_enrolled": false,
+ "id": "628991ba-49ab-4da7-9cc9-47e8d75a6b6f",
+ "last_modified": 1713452223319
+ },
+ {
+ "schema": 1713452052825,
+ "derHash": "/vjtqnvL7Wnh4rchlSeo/DK6drFwjnFJKzxJHjrzQuk=",
+ "subject": "CN=GlobalSign Atlas R3 OV ACME CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZHbG9iYWxTaWduIEF0bGFzIFIzIE9WIEFDTUUgQ0EgMjAyNCBRMw==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "88113b359d589cf0833963be727452f9868d4e4b6e116efbca91fbaacac17b23",
+ "size": 1642,
+ "filename": "RSHkyRfXbvY7M8TmbPKTu_nWU8FQEkrL3e6rP50xzwg=.pem",
+ "location": "security-state-staging/intermediates/14dbf0de-bde3-4e90-8719-5b4976d5eb98.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "RSHkyRfXbvY7M8TmbPKTu/nWU8FQEkrL3e6rP50xzwg=",
+ "crlite_enrolled": false,
+ "id": "84134ea9-bcc0-44aa-887e-e8eeb981777e",
+ "last_modified": 1713452223316
+ },
+ {
+ "schema": 1713452051802,
+ "derHash": "pYQF9kGgq8EXMsANNadI870PUoFDN6aYDThd483gSzo=",
+ "subject": "CN=GlobalSign Atlas R3 AlphaSSL CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFoxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTAwLgYDVQQDEydHbG9iYWxTaWduIEF0bGFzIFIzIEFscGhhU1NMIENBIDIwMjQgUTM=",
+ "whitelist": false,
+ "attachment": {
+ "hash": "df89bae8f377c3eb0387d8f4c3caa1a66d5d81216b624bfa4f9a108029b20f69",
+ "size": 1646,
+ "filename": "BuoLHGbIs4O5asWIShpYPo0M63hKKDQVqf4405uAzrE=.pem",
+ "location": "security-state-staging/intermediates/cb49a613-0017-47ec-91a5-e04609b1e5a6.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "BuoLHGbIs4O5asWIShpYPo0M63hKKDQVqf4405uAzrE=",
+ "crlite_enrolled": false,
+ "id": "9f7111b4-d5c8-4d37-8e7b-28f498506965",
+ "last_modified": 1713452223313
+ },
+ {
+ "schema": 1713452052160,
+ "derHash": "pASsAuj1JVRLso6goYYX86NbeohSFnIioVT8kzYYLss=",
+ "subject": "CN=GlobalSign Atlas R3 DV ACME CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZHbG9iYWxTaWduIEF0bGFzIFIzIERWIEFDTUUgQ0EgMjAyNCBRMw==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "b87712ddee405f5ff47745b3d15c297140ce8a5628486ca931d5166437af9b7a",
+ "size": 1642,
+ "filename": "n0ok38zjxt5xKpAOUFN0RAxAj9vFO81o9e8rEj2babo=.pem",
+ "location": "security-state-staging/intermediates/8c8d128c-3e31-4770-a244-a0a4bdc08225.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "n0ok38zjxt5xKpAOUFN0RAxAj9vFO81o9e8rEj2babo=",
+ "crlite_enrolled": false,
+ "id": "34d5cc70-950c-4069-8c9b-ae50a21b4334",
+ "last_modified": 1713452223311
+ },
+ {
+ "schema": 1713452051036,
+ "derHash": "U4gwB90ss85ywPBPs1ZBr6CqExseAUVeXGtZAfFUkyg=",
+ "subject": "CN=GlobalSign Atlas ECCR5 OV TLS CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEF0bGFzIEVDQ1I1IE9WIFRMUyBDQSAyMDI0IFEz",
+ "whitelist": false,
+ "attachment": {
+ "hash": "893cbd37b012ee4fbe6598a4d806b97cfdde065c3d3785a7be4d1014609d8d4d",
+ "size": 1199,
+ "filename": "t2BaTrST1wiXR9cBYwSsA9izi_1ZIxfSZk4rXwtEp2E=.pem",
+ "location": "security-state-staging/intermediates/0e4ea6d6-00f4-4e34-ad3a-0daabba45cc8.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "t2BaTrST1wiXR9cBYwSsA9izi/1ZIxfSZk4rXwtEp2E=",
+ "crlite_enrolled": false,
+ "id": "9dcd2610-1edc-4705-8989-276a0ef6bb2c",
+ "last_modified": 1713452223308
+ },
+ {
+ "schema": 1713452049952,
+ "derHash": "x1s6YzPHxGeN8/264NO7ntgl+fEwU+Elq+MUpunDREM=",
+ "subject": "CN=GlobalSign Atlas R3 OV TLS CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIE9WIFRMUyBDQSAyMDI0IFEz",
+ "whitelist": false,
+ "attachment": {
+ "hash": "5906d770ca5d651dedb73738785630d7f6958dce6070d94d82f1c29a24db2617",
+ "size": 1642,
+ "filename": "kc9wzxo68rBmtiracxbsuvjOhB0PR3m0n_R8vGv0vH4=.pem",
+ "location": "security-state-staging/intermediates/8f9b6617-c21b-49ac-8a1e-6e0fdbf381bb.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "kc9wzxo68rBmtiracxbsuvjOhB0PR3m0n/R8vGv0vH4=",
+ "crlite_enrolled": false,
+ "id": "89dc8da6-6f9c-4192-b8d1-686bd6dcd124",
+ "last_modified": 1713452223305
+ },
+ {
+ "schema": 1713452050667,
+ "derHash": "OBzNHc2btgR+2iVQzxkZSTJY3O+36HtZTdREDMukAOI=",
+ "subject": "CN=GlobalSign Atlas ECCR5 DV ACME CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTIwMAYDVQQDEylHbG9iYWxTaWduIEF0bGFzIEVDQ1I1IERWIEFDTUUgQ0EgMjAyNCBRMw==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "7de60587b585ed93985c8a6815cb21c929c1ee58af92e99b131bcd6a300a27a0",
+ "size": 1199,
+ "filename": "o2b-6LjIyo-5oczRqmr2g0yn04YfAmnMFdL33lDB_Qg=.pem",
+ "location": "security-state-staging/intermediates/b92192fa-1114-4f87-93c1-200da6a30e63.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "o2b+6LjIyo+5oczRqmr2g0yn04YfAmnMFdL33lDB/Qg=",
+ "crlite_enrolled": false,
+ "id": "70d918be-26b1-4c41-a318-1bff748ff39a",
+ "last_modified": 1713452223302
+ },
+ {
+ "schema": 1713452051434,
+ "derHash": "cUNFpm0G0yXP4F4GJsA5rYEBaTvUcLxOldh0/UgKImE=",
+ "subject": "CN=GlobalSign Atlas ECCR5 DV TLS CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEF0bGFzIEVDQ1I1IERWIFRMUyBDQSAyMDI0IFEz",
+ "whitelist": false,
+ "attachment": {
+ "hash": "c1c5d766dab9839f49866c5209c2b0bbb888f2c4dc0434a8ab99b487d19216ba",
+ "size": 1199,
+ "filename": "FWvyMI4mJOnhz__Y2pSFT5jWfbr0dWQe-o9q4QYbVC8=.pem",
+ "location": "security-state-staging/intermediates/89081b55-c3d0-485b-a757-eb475ba4fbe7.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "FWvyMI4mJOnhz//Y2pSFT5jWfbr0dWQe+o9q4QYbVC8=",
+ "crlite_enrolled": false,
+ "id": "68ceea86-103e-4d57-87c8-d4e2ef4b70a2",
+ "last_modified": 1713452223300
+ },
+ {
+ "schema": 1713452050320,
+ "derHash": "X4uqm41dsXB9VvB+G0TXfYTvDKaSO2tEt89HrZxH7s8=",
+ "subject": "CN=GlobalSign Atlas R6 EV TLS CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFI2IEVWIFRMUyBDQSAyMDI0IFEz",
+ "whitelist": false,
+ "attachment": {
+ "hash": "b1101abf9ceb855b2b5656fb54a1940810e2cfe5a126e44327c171739fa4e36c",
+ "size": 2353,
+ "filename": "X2HAp4fB30kjd5iuOMNGV710IsuKUu3ty0_SzZds8Tw=.pem",
+ "location": "security-state-staging/intermediates/a882e856-3607-408b-a63e-ca2efb559786.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "X2HAp4fB30kjd5iuOMNGV710IsuKUu3ty0/SzZds8Tw=",
+ "crlite_enrolled": false,
+ "id": "c5fa8b22-4bef-4325-bd54-6cd3e10a57b4",
+ "last_modified": 1713452223297
+ },
+ {
+ "schema": 1713452049576,
+ "derHash": "oqF8kqq4Fl0QgskixUH4as2y1pHWRb27HJ1l7c1dVt8=",
+ "subject": "CN=GlobalSign Atlas R46 EV TLS CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZHbG9iYWxTaWduIEF0bGFzIFI0NiBFViBUTFMgQ0EgMjAyNCBRMw==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "b348a1d1629319d3e46741e6878505d385781048770c0044490e0437c8cbdb73",
+ "size": 2345,
+ "filename": "PnZ4Yd0ARy1OzpGnDld1Iw22M13JQRYfZvRpmjPPkZY=.pem",
+ "location": "security-state-staging/intermediates/afdfaef1-07f5-4e41-821b-f0a28065f271.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "PnZ4Yd0ARy1OzpGnDld1Iw22M13JQRYfZvRpmjPPkZY=",
+ "crlite_enrolled": false,
+ "id": "0d5db210-869d-4d82-91a3-944f584b4137",
+ "last_modified": 1713452223294
+ },
+ {
+ "schema": 1713452049146,
+ "derHash": "G8VO4pO5mSvwnzFMPYxEd8Kw0tYQmlAOq1CPNWW2M9Y=",
+ "subject": "CN=GlobalSign Atlas ECCR5 OV ACME CA 2024 Q3,O=GlobalSign nv-sa,C=BE",
+ "subjectDN": "MFwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTIwMAYDVQQDEylHbG9iYWxTaWduIEF0bGFzIEVDQ1I1IE9WIEFDTUUgQ0EgMjAyNCBRMw==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "e04813361b31ce38513883a907100f64d91193a853a147d0b0539285699f110f",
+ "size": 1199,
+ "filename": "p8VBtP9cZDINwbjuhYP0otNnPF_ySI5P5IKrIbMsl7I=.pem",
+ "location": "security-state-staging/intermediates/05fe8134-1bdb-46aa-9285-cae06448d260.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "p8VBtP9cZDINwbjuhYP0otNnPF/ySI5P5IKrIbMsl7I=",
+ "crlite_enrolled": false,
+ "id": "706a46dc-a960-46e2-87bf-bd9094702451",
+ "last_modified": 1713452223292
+ },
+ {
+ "schema": 1713279247562,
+ "derHash": "qHnLAaJmHCVbnCub4LILp07qlUbiGoLFcOF3z1v0rto=",
+ "subject": "CN=KeepTrust DV TLS RSA CA G1,O=Shanghai Huandu Info Tech Co. Ltd.,C=CN",
+ "subjectDN": "MF8xCzAJBgNVBAYTAkNOMSswKQYDVQQKEyJTaGFuZ2hhaSBIdWFuZHUgSW5mbyBUZWNoIENvLiBMdGQuMSMwIQYDVQQDExpLZWVwVHJ1c3QgRFYgVExTIFJTQSBDQSBHMQ==",
+ "whitelist": false,
+ "attachment": {
+ "hash": "93a741fbafcd5340a19168c4bd08054a4848435b3be5fe670b8f11c2375684aa",
+ "size": 2207,
+ "filename": "bOEjmQANKVH0X6KYfPDfKE84GnLDQ9OEma-H2A_9vsM=.pem",
+ "location": "security-state-staging/intermediates/a8577b4a-44b2-44d9-860f-74a05b5f338f.pem",
+ "mimetype": "application/x-pem-file"
+ },
+ "pubKeyHash": "bOEjmQANKVH0X6KYfPDfKE84GnLDQ9OEma+H2A/9vsM=",
+ "crlite_enrolled": false,
+ "id": "1a5f9580-38a5-4f0e-821b-2973701c1722",
+ "last_modified": 1713279423465
+ },
+ {
"schema": 1712310550077,
"derHash": "w+vOp+axOsPrOnnwWBnmfWiTxlZC9Q2bXhZHyyZQa44=",
"subject": "CN=Security Communication ECC RootCA1,O=SECOM Trust Systems CO.\\,LTD.,C=JP",
@@ -721,42 +1099,6 @@
"last_modified": 1709323057665
},
{
- "schema": 1709322861260,
- "derHash": "wKHKNkddM7Rx5OWOVXTdkpTTVMRXKVlU21VbJOrSqks=",
- "subject": "CN=COMODO/PKWARE Secure Email CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB",
- "subjectDN": "MIGAMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDEmMCQGA1UEAxMdQ09NT0RPL1BLV0FSRSBTZWN1cmUgRW1haWwgQ0E=",
- "whitelist": false,
- "attachment": {
- "hash": "536d387994d2fcf3c04c848acb66841104d87c9b0b1ed73ccec9768bd275d362",
- "size": 1979,
- "filename": "javoiDXitAWxKnEeWWJB_XeluETyAl8SAu8OHaB7Q0c=.pem",
- "location": "security-state-staging/intermediates/a14785fd-f6c9-4f29-9d06-df68da0a3959.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "javoiDXitAWxKnEeWWJB/XeluETyAl8SAu8OHaB7Q0c=",
- "crlite_enrolled": false,
- "id": "da5c02a2-8457-4e22-87c0-9f6e49221efe",
- "last_modified": 1709323057662
- },
- {
- "schema": 1709322860874,
- "derHash": "YmFumxG9Djo1g2DIO3jbxb7qV1yQuX5oJEgz+zBDfGs=",
- "subject": "CN=TERENA Personal CA,O=TERENA,C=NL",
- "subjectDN": "MDsxCzAJBgNVBAYTAk5MMQ8wDQYDVQQKEwZURVJFTkExGzAZBgNVBAMTElRFUkVOQSBQZXJzb25hbCBDQQ==",
- "whitelist": false,
- "attachment": {
- "hash": "b540a4b8690142678f25aaa6f34207fd3c4298612d40cac2034f5049aa748c3b",
- "size": 1711,
- "filename": "GrQOOcgaiD1vs9vGDvRaVMQKNDQm2_Nj7lPXTk4s2F0=.pem",
- "location": "security-state-staging/intermediates/4742da83-41bb-4761-b382-7a48eb3f8886.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "GrQOOcgaiD1vs9vGDvRaVMQKNDQm2/Nj7lPXTk4s2F0=",
- "crlite_enrolled": false,
- "id": "d447cf4a-07e2-4ccf-b3c9-898267f291fe",
- "last_modified": 1709323057659
- },
- {
"schema": 1709322860517,
"derHash": "mm/Eq02x6m9mY1B+3B0Ajwka6I+rbzrlaoSkCQUp71g=",
"subject": "CN=Telekom Security EV RSA CA 23,O=Deutsche Telekom Security GmbH,C=DE",
@@ -775,24 +1117,6 @@
"last_modified": 1709323057656
},
{
- "schema": 1709322859788,
- "derHash": "/QKa3j96gKmNb//JQpBGWF7x2MuBk6F/YhQxfQZS18M=",
- "subject": "CN=COMODO/HP Secure Email CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB",
- "subjectDN": "MHwxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMSIwIAYDVQQDExlDT01PRE8vSFAgU2VjdXJlIEVtYWlsIENB",
- "whitelist": false,
- "attachment": {
- "hash": "adb2966a8c1fc1a877edbb79b2d43109f804829872e34bd8667f85ba432153e5",
- "size": 1975,
- "filename": "VQkNSqdqPoVan53-i1N5YrjNCMnJRtvNFB7icXr9un8=.pem",
- "location": "security-state-staging/intermediates/dde31d19-c833-41ae-a61a-48529e89c711.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "VQkNSqdqPoVan53+i1N5YrjNCMnJRtvNFB7icXr9un8=",
- "crlite_enrolled": false,
- "id": "a53b33af-6b45-402a-abac-9e6140dc28ec",
- "last_modified": 1709323057653
- },
- {
"schema": 1709322862713,
"derHash": "oCHY53TGozxza9tcF2klrd9EbJlnm83NguW9LqX+RE0=",
"subject": "CN=TrustSign BR RSA EV SSL CA 3,O=TrustSign Certificadora Dig. & Solucoes Seguranca da Inf. Ltda.,C=BR",
@@ -847,24 +1171,6 @@
"last_modified": 1709323057644
},
{
- "schema": 1709322856729,
- "derHash": "j3JA8WCTbx/UBr8CizW11gm2SzvQ4x4TzG3Zq3yhLm8=",
- "subject": "CN=GLOBE SSL SECURE EMAIL CA,O=GLOBE HOSTING CERTIFICATION AUTHORITY,C=RO",
- "subjectDN": "MGExCzAJBgNVBAYTAlJPMS4wLAYDVQQKEyVHTE9CRSBIT1NUSU5HIENFUlRJRklDQVRJT04gQVVUSE9SSVRZMSIwIAYDVQQDExlHTE9CRSBTU0wgU0VDVVJFIEVNQUlMIENB",
- "whitelist": false,
- "attachment": {
- "hash": "1cf3286ce0babb75314968445c3959acec4c2fb01d7342d74be3d80efd77125a",
- "size": 1764,
- "filename": "_eRFHz8wxXnTOa1eOct617RUUVoCS6wHVpWc2LKjvVg=.pem",
- "location": "security-state-staging/intermediates/4c03d7f3-2876-42e2-8e63-1770d52bb8dd.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "/eRFHz8wxXnTOa1eOct617RUUVoCS6wHVpWc2LKjvVg=",
- "crlite_enrolled": false,
- "id": "22c0373b-2dd6-46fd-a8f5-948c6627d4ea",
- "last_modified": 1709323057641
- },
- {
"schema": 1709322858961,
"derHash": "6bmYDIo/WT9Nnn2j9Jev+Ptm4kLGy6DXMOIGVZUT+l0=",
"subject": "CN=CloudSecure RSA Extended Validation Secure Server CA 2,O=CloudSecure Corporation,C=JP",
@@ -901,60 +1207,6 @@
"last_modified": 1709323057634
},
{
- "schema": 1709322857466,
- "derHash": "6QSgV9g5vL5jEJK0IV3YzE+ISbqHtRqvJyi3HmSs51E=",
- "subject": "CN=DREAMHOST SECURE EMAIL CA,O=DREAMHOST CERTIFICATION AUTHORITY,C=US",
- "subjectDN": "MF0xCzAJBgNVBAYTAlVTMSowKAYDVQQKEyFEUkVBTUhPU1QgQ0VSVElGSUNBVElPTiBBVVRIT1JJVFkxIjAgBgNVBAMTGURSRUFNSE9TVCBTRUNVUkUgRU1BSUwgQ0E=",
- "whitelist": false,
- "attachment": {
- "hash": "bd46e6b3068ecccbabe7da0273be8a3d35a413fdfcca05bc18847e7402db16fa",
- "size": 1756,
- "filename": "63NWnCfq1JadpotgYBS_ORAIQ4nhhoHBm9FjkLxi1nA=.pem",
- "location": "security-state-staging/intermediates/6ba6c581-5ba3-48f8-8ccc-e38734c2de49.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "63NWnCfq1JadpotgYBS/ORAIQ4nhhoHBm9FjkLxi1nA=",
- "crlite_enrolled": false,
- "id": "ad597bfa-50d0-4288-95d2-d15db698ffba",
- "last_modified": 1709323057631
- },
- {
- "schema": 1709322858187,
- "derHash": "Xwo1uk+Epl9osW1KM/ZRfAl3CDk+qv0oVvuak0GHGfQ=",
- "subject": "CN=SGTRUST EMAIL AND CLIENT CA,O=SGssl,C=KR",
- "subjectDN": "MEMxCzAJBgNVBAYTAktSMQ4wDAYDVQQKEwVTR3NzbDEkMCIGA1UEAxMbU0dUUlVTVCBFTUFJTCBBTkQgQ0xJRU5UIENB",
- "whitelist": false,
- "attachment": {
- "hash": "17a9b911f686f237aa390ea2ff06319ae420ccb51198aeed267a5518db5715c4",
- "size": 1723,
- "filename": "gQN5MDXBIRQe70cFfEaNKKTh3AELpmBrtzu-04X41Po=.pem",
- "location": "security-state-staging/intermediates/460d3cb1-d178-47f3-b286-99a9adab7c6a.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "gQN5MDXBIRQe70cFfEaNKKTh3AELpmBrtzu+04X41Po=",
- "crlite_enrolled": false,
- "id": "5a347462-e209-4a4f-bba5-902bb7cdd29b",
- "last_modified": 1709323057628
- },
- {
- "schema": 1709322860157,
- "derHash": "JhjEFcFGupil8K1+pJiqWHgLpV+o47By0TwzDUEBBxc=",
- "subject": "CN=EuropeanSSL Client CA,O=EUNETIC GmbH,C=DE",
- "subjectDN": "MEQxCzAJBgNVBAYTAkRFMRUwEwYDVQQKEwxFVU5FVElDIEdtYkgxHjAcBgNVBAMTFUV1cm9wZWFuU1NMIENsaWVudCBDQQ==",
- "whitelist": false,
- "attachment": {
- "hash": "939382e857302d9c045c2918ffbab03973b2a29f5c566cfdd7e53388636562f6",
- "size": 1723,
- "filename": "6rE_4fpPwsenurNcVvOyU8xh7Vp9kamSGTFA4_9ffGI=.pem",
- "location": "security-state-staging/intermediates/a5c74b09-42b9-4fbe-ab76-8aac990547e8.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "6rE/4fpPwsenurNcVvOyU8xh7Vp9kamSGTFA4/9ffGI=",
- "crlite_enrolled": false,
- "id": "21c33409-b6a8-429b-bddf-96d8eb9b5e6d",
- "last_modified": 1709323057625
- },
- {
"schema": 1709322856380,
"derHash": "sF4Fz8v4GBPsMPo/dJIKoj/tNn4UfMgeESH2RphEnQ8=",
"subject": "CN=WISeKey CertifyID SSL GC CA 1,O=WISeKey,C=CH",
@@ -973,24 +1225,6 @@
"last_modified": 1709323057622
},
{
- "schema": 1709322855255,
- "derHash": "9AUHfHF0cDuXgceVRKe+mUJjhU0VFz5hqNGaKM96SrE=",
- "subject": "CN=TERENA eScience Personal CA,O=TERENA,C=NL",
- "subjectDN": "MEQxCzAJBgNVBAYTAk5MMQ8wDQYDVQQKEwZURVJFTkExJDAiBgNVBAMTG1RFUkVOQSBlU2NpZW5jZSBQZXJzb25hbCBDQQ==",
- "whitelist": false,
- "attachment": {
- "hash": "0ff25cb8ace98409f31247ecb59b650b17e31d145ec2485517081e2ac1dfa4fb",
- "size": 1743,
- "filename": "rfAIoQEXwIYxHVXIaa2COA8XlDmE8FsumvzEWCU7MfU=.pem",
- "location": "security-state-staging/intermediates/572cc780-7a7f-4edb-bb11-5177e420e4ee.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "rfAIoQEXwIYxHVXIaa2COA8XlDmE8FsumvzEWCU7MfU=",
- "crlite_enrolled": false,
- "id": "df33d49d-be3f-4bfc-9291-d978b63c2fb5",
- "last_modified": 1709323057619
- },
- {
"schema": 1709322855622,
"derHash": "Jk2YC0i7HaMvuxR7gQQ0RaxMhWOVlLoVrZoriDai2sA=",
"subject": "CN=TrustSign BR RSA DV SSL CA 3,O=TrustSign Certificadora Dig. & Solucoes Seguranca da Inf. Ltda.,C=BR",
@@ -1009,24 +1243,6 @@
"last_modified": 1709323057615
},
{
- "schema": 1709322854820,
- "derHash": "TywMFwG94Btr7tptF8M2BCQhr3MRcGM0f36Xt2rYl/U=",
- "subject": "CN=GlobalSSL Secure E-Mail and Client Authentication CA,O=GlobalSSL,C=DE",
- "subjectDN": "MGAxCzAJBgNVBAYTAkRFMRIwEAYDVQQKEwlHbG9iYWxTU0wxPTA7BgNVBAMTNEdsb2JhbFNTTCBTZWN1cmUgRS1NYWlsIGFuZCBDbGllbnQgQXV0aGVudGljYXRpb24gQ0E=",
- "whitelist": false,
- "attachment": {
- "hash": "b2019acf4321d57d1f4034c278f7761779e2fc130bbf2ca87aabbe5a7047c614",
- "size": 1760,
- "filename": "rvxRPOOErynHJj6lYghacyWHWiAPuUDhnQ7bzVQe7nA=.pem",
- "location": "security-state-staging/intermediates/cacd7664-e756-4647-96f8-682e65e01ae0.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "rvxRPOOErynHJj6lYghacyWHWiAPuUDhnQ7bzVQe7nA=",
- "crlite_enrolled": false,
- "id": "9d2ed0cf-a2d4-430d-ae23-724baec635e4",
- "last_modified": 1709323057612
- },
- {
"schema": 1709322857831,
"derHash": "16iplHwxgGwbRiX4L8vMp8wgkOWNshW45NiLqcYNMWY=",
"subject": "CN=Telekom Security EV ECC CA 21,O=Deutsche Telekom Security GmbH,C=DE",
@@ -1063,42 +1279,6 @@
"last_modified": 1709323057606
},
{
- "schema": 1709322857090,
- "derHash": "8BflEJGLd9pn5NAg4rdqQkYYdugi9iDFVzvLw7uzdAY=",
- "subject": "CN=Gandi Secure Email CA,O=GANDI SAS,C=FR",
- "subjectDN": "MEExCzAJBgNVBAYTAkZSMRIwEAYDVQQKEwlHQU5ESSBTQVMxHjAcBgNVBAMTFUdhbmRpIFNlY3VyZSBFbWFpbCBDQQ==",
- "whitelist": false,
- "attachment": {
- "hash": "7374bb117a04dbe56b2af679a65a85a2c734afce7e88acb81917ecd528ba648e",
- "size": 1719,
- "filename": "iFIEeQ06wWLDY4tmZC6npViJr_VFbFCHUdRkqmIc7OY=.pem",
- "location": "security-state-staging/intermediates/80641d57-3847-4459-9d66-f653dd7bfadc.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "iFIEeQ06wWLDY4tmZC6npViJr/VFbFCHUdRkqmIc7OY=",
- "crlite_enrolled": false,
- "id": "61df2979-bddb-4586-94f1-15e23fe3c076",
- "last_modified": 1709323057603
- },
- {
- "schema": 1709322855985,
- "derHash": "9ooj65c3qMdE7mcRLy/AJKrcUDu7sE8lze1PJXbJNIU=",
- "subject": "CN=The Code Project Secure Email (S/mime) CA,O=The Code Project,C=CA",
- "subjectDN": "MFwxCzAJBgNVBAYTAkNBMRkwFwYDVQQKExBUaGUgQ29kZSBQcm9qZWN0MTIwMAYDVQQDEylUaGUgQ29kZSBQcm9qZWN0IFNlY3VyZSBFbWFpbCAoUy9taW1lKSBDQQ==",
- "whitelist": false,
- "attachment": {
- "hash": "e34a2353b9ea221ccf98cccc3d39c3562f1daceb776f42298bbc37afdd4fc54a",
- "size": 1752,
- "filename": "xtYGt02m4umLJCyy0kfaczCboF12WILjsGOb1umDfX0=.pem",
- "location": "security-state-staging/intermediates/53d673f8-b2c7-4c5c-9730-8965f2ec1dcb.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "xtYGt02m4umLJCyy0kfaczCboF12WILjsGOb1umDfX0=",
- "crlite_enrolled": false,
- "id": "81d6dcac-df61-4042-bd32-3070f7a85340",
- "last_modified": 1709323057600
- },
- {
"schema": 1705981670999,
"derHash": "edV7Fd+mXChw6v4Rtjd2WQnP6Te0nBXOfxlAMMqzla0=",
"subject": "CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US",
@@ -8983,60 +9163,6 @@
"last_modified": 1666727873758
},
{
- "schema": 1666727393255,
- "derHash": "m/q9jZEoRQC01BLFclyHyzoBP5QP8eYoEOaSnGk5Ptk=",
- "subject": "CN=CUISEC GCC R3 TLS EV CA 2021,O=联通智慧安全科技有限公司,C=CN",
- "subjectDN": "MGMxCzAJBgNVBAYTAkNOMS0wKwYDVQQKDCTogZTpgJrmmbrmhaflronlhajnp5HmioDmnInpmZDlhazlj7gxJTAjBgNVBAMTHENVSVNFQyBHQ0MgUjMgVExTIEVWIENBIDIwMjE=",
- "whitelist": false,
- "attachment": {
- "hash": "2d49d4197ed82f1b42a22adc7c313e685dbb3ad2d71e872eca62a72ad44e5f09",
- "size": 1727,
- "filename": "9VJFGEWro7X56n20u_Yid3uitID-FtwujrXPJd_UUi8=.pem",
- "location": "security-state-staging/intermediates/0ed5c801-2c4d-48d9-94a2-8d9ee4fac113.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "9VJFGEWro7X56n20u/Yid3uitID+FtwujrXPJd/UUi8=",
- "crlite_enrolled": false,
- "id": "657d3530-54d0-4905-8819-2c4ed441e0b6",
- "last_modified": 1666727873744
- },
- {
- "schema": 1666727371927,
- "derHash": "aS/huLommVMd5M0vUq44+hGasB9LMat4/m2z/fA6cDE=",
- "subject": "CN=CUISEC GCC R3 TLS DV CA 2021,O=联通智慧安全科技有限公司,C=CN",
- "subjectDN": "MGMxCzAJBgNVBAYTAkNOMS0wKwYDVQQKDCTogZTpgJrmmbrmhaflronlhajnp5HmioDmnInpmZDlhazlj7gxJTAjBgNVBAMTHENVSVNFQyBHQ0MgUjMgVExTIERWIENBIDIwMjE=",
- "whitelist": false,
- "attachment": {
- "hash": "2362379bf98129dd0a1754e516e9383efeac16c9d49e8d5dbe74dd8e76f58a09",
- "size": 1727,
- "filename": "1G8aNb1oR_IGXiLx3-c3BvkRmQ2AjMYBtH40HeLEUds=.pem",
- "location": "security-state-staging/intermediates/d36a1d9e-0533-432a-858f-28d514ac308a.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "1G8aNb1oR/IGXiLx3+c3BvkRmQ2AjMYBtH40HeLEUds=",
- "crlite_enrolled": false,
- "id": "a49ffd3d-57de-4238-898a-cc903eb6e447",
- "last_modified": 1666727873730
- },
- {
- "schema": 1666727364984,
- "derHash": "x/FF1HT13CCyemThaWF5UiRpB4szP+j/iHuXzngF42I=",
- "subject": "CN=CUISEC GCC R3 TLS OV CA 2021,O=联通智慧安全科技有限公司,C=CN",
- "subjectDN": "MGMxCzAJBgNVBAYTAkNOMS0wKwYDVQQKDCTogZTpgJrmmbrmhaflronlhajnp5HmioDmnInpmZDlhazlj7gxJTAjBgNVBAMTHENVSVNFQyBHQ0MgUjMgVExTIE9WIENBIDIwMjE=",
- "whitelist": false,
- "attachment": {
- "hash": "799039d203bff502b78cba6679ff4243bd84a7daa095ccda9b9dad4f7bdbd772",
- "size": 1727,
- "filename": "7CtV2q_DG2mt1q7CNaMX5LYyXLV5l477mMcjjYZs2u4=.pem",
- "location": "security-state-staging/intermediates/f5f73cb5-53fb-4dc9-8de0-799355a73b83.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "7CtV2q/DG2mt1q7CNaMX5LYyXLV5l477mMcjjYZs2u4=",
- "crlite_enrolled": false,
- "id": "90d490c9-4f55-4511-92c3-af9d041f1998",
- "last_modified": 1666727873716
- },
- {
"schema": 1666727342323,
"derHash": "HparstZQK13OUY7AC1oeVDNJ79Lj9ovpq8ESiyVv7dc=",
"subject": "CN=GDCA TrustAUTH R4 SSL CA,O=GUANG DONG CERTIFICATE AUTHORITY CO.\\,LTD.,C=CN",
@@ -21745,24 +21871,6 @@
"last_modified": 1663786625894
},
{
- "schema": 1663786313489,
- "derHash": "VlyCcCtexjICdU1PS3bMO64ypMkUbtO+zXOkBP+tTN4=",
- "subject": "CN=UTN-USERFirst-Client Authentication and Email,OU=http://www.usertrust.com,O=The USERTRUST Network,L=Salt Lake City,ST=UT,C=US",
- "subjectDN": "MIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls",
- "whitelist": false,
- "attachment": {
- "hash": "ea4a8d488e32504fd104cbe43ae869fa05d6c9a40760f4ad44d6138279f5a48c",
- "size": 1674,
- "filename": "Laj56jRU0hFGRko_nQKNxMf7tXscUsc8KwVyovWZotM=.pem",
- "location": "security-state-staging/intermediates/ff1f6147-d1b8-4857-90c1-1c69f32d66f2.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "Laj56jRU0hFGRko/nQKNxMf7tXscUsc8KwVyovWZotM=",
- "crlite_enrolled": false,
- "id": "f9921d3b-2c14-4cd8-ba89-946e88ff8a45",
- "last_modified": 1663786625873
- },
- {
"schema": 1663786305752,
"derHash": "dnvCnbma9MKmJkkADRcvxswtCdQIxMq2qNmaHdXc99s=",
"subject": "CN=CertCenter Enterprise ECC DV CA,O=CertCenter AG,L=Giessen,ST=Hessen,C=DE",
@@ -27811,24 +27919,6 @@
"last_modified": 1601517443236
},
{
- "schema": 1601376758715,
- "derHash": "ZLNULRvJcvWKHRefPQuWUr5DTzrjhC4MRHiA1NYjpN4=",
- "subject": "CN=Cybertrust Global Root,O=Cybertrust\\, Inc",
- "subjectDN": "MDsxGDAWBgNVBAoTD0N5YmVydHJ1c3QsIEluYzEfMB0GA1UEAxMWQ3liZXJ0cnVzdCBHbG9iYWwgUm9vdA==",
- "whitelist": false,
- "attachment": {
- "hash": "47de0a95895055ce31d99d828b0db0f2ec2817ccee0b1699eac0fc8b4c0d7a15",
- "size": 1715,
- "filename": "foeCwVDOOVL4AuY2AjpdPpW7XWjjPoWtsroXgSXOvxU=.pem",
- "location": "security-state-staging/intermediates/b0359886-f578-4ff8-b6f6-68c9c49ac966.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "foeCwVDOOVL4AuY2AjpdPpW7XWjjPoWtsroXgSXOvxU=",
- "crlite_enrolled": false,
- "id": "565f7b1a-68fa-497d-9c56-e9cd5a86b74e",
- "last_modified": 1601517443097
- },
- {
"schema": 1601376718312,
"derHash": "y/j7d2YBZ+a6rNDfd82jl9ARfuK+6iO5NTF/i7W147A=",
"subject": "CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US",
@@ -30601,5 +30691,5 @@
"last_modified": 1559865884636
}
],
- "timestamp": 1712674623155
+ "timestamp": 1713887823023
}
diff --git a/sourcestamp.txt b/sourcestamp.txt
index 43cd678299..6b49e416a7 100644
--- a/sourcestamp.txt
+++ b/sourcestamp.txt
@@ -1,2 +1,2 @@
-20240416043247
-https://hg.mozilla.org/releases/mozilla-release/rev/624e9a169b06012fbb06583c8f172cfe34f8b3d7
+20240425211020
+https://hg.mozilla.org/releases/mozilla-release/rev/899257fc1af08f2b141cd16d4b6151c0e0b47a9a
diff --git a/testing/web-platform/meta/css/css-transitions/CSSTransition-effect.tentative.html.ini b/testing/web-platform/meta/css/css-transitions/CSSTransition-effect.tentative.html.ini
deleted file mode 100644
index 7896769374..0000000000
--- a/testing/web-platform/meta/css/css-transitions/CSSTransition-effect.tentative.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[CSSTransition-effect.tentative.html]
- [After setting a transition's effect to null, a new transition can be started]
- expected:
- if (os == "mac") and not debug: [PASS, FAIL]
- if (os == "android") and not debug: [PASS, FAIL]
diff --git a/testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.https.html.ini b/testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html.ini
index b4dbc800df..b0d48fef3b 100644
--- a/testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.https.html.ini
+++ b/testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html.ini
@@ -1,4 +1,4 @@
-[iframe_sandbox_navigation_download_allow_downloads.sub.tentative.https.html]
+[iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html]
expected:
if (os == "linux") and not fission: [OK, TIMEOUT]
if (os == "android") and fission: [TIMEOUT, OK]
diff --git a/testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.https.html.ini b/testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.html.ini
index 773edf42b7..2483b6391c 100644
--- a/testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.https.html.ini
+++ b/testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.html.ini
@@ -1,3 +1,3 @@
-[iframe_sandbox_window_open_download_allow_downloads.tentative.https.html]
+[iframe_sandbox_window_open_download_allow_downloads.tentative.html]
expected:
if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/tests/css/css-animations/transition-ready-time-offscreen.html b/testing/web-platform/tests/css/css-animations/transition-ready-time-offscreen.html
new file mode 100644
index 0000000000..cc3151b40b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-animations/transition-ready-time-offscreen.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Transitions start at the same time regardless of on-screen status</title>
+<link rel="help" href="https://drafts.csswg.org/css-animations-2/">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1888748">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+.transition {
+ width: 100px;
+ height: 100px;
+ background-color: blue;
+ transition: translate 10000ms linear;
+ will-change: translate;
+ translate: 0;
+}
+.offscreen {
+ background-color: purple;
+ translate: -1000px;
+}
+</style>
+<div class="transition"></div>
+<div class="transition offscreen"></div>
+<script>
+'use strict';
+
+promise_test(async t => {
+ let [a, b] = document.querySelectorAll(".transition");
+
+ // Ensure a paint happens to make sure a transition gets triggered (otherwise
+ // getAnimations() would flush sync, and maybe not trigger a transition if
+ // it's the first style of the elements).
+ await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)));
+
+ // Trigger both transitions at the same time.
+ a.style.translate = b.style.translate = "100px";
+
+ let ta = a.getAnimations()[0];
+ let tb = b.getAnimations()[0];
+
+ await Promise.all([ta.ready, tb.ready]);
+ assert_equals(ta.startTime, tb.startTime, "Both transitions should've started at the same time");
+});
+</script>
diff --git a/testing/web-platform/tests/css/css-transitions/CSSTransition-effect.tentative.html b/testing/web-platform/tests/css/css-transitions/CSSTransition-effect.tentative.html
index b58c93d2e6..0952a7cd8f 100644
--- a/testing/web-platform/tests/css/css-transitions/CSSTransition-effect.tentative.html
+++ b/testing/web-platform/tests/css/css-transitions/CSSTransition-effect.tentative.html
@@ -85,12 +85,13 @@ promise_test(async t => {
div.style.left = '150px';
// This will run style update.
- assert_equals(div.getAnimations().length, 1);
+ const animations = div.getAnimations();
+ assert_equals(animations.length, 1);
- const new_transition = div.getAnimations()[0];
+ const new_transition = animations[0];
await new_transition.ready;
- assert_equals(getComputedStyle(div).left, '100px');
+ assert_not_equals(getComputedStyle(div).left, '150px');
}, 'After setting a transition\'s effect to null, a new transition can be started');
// This is a regression test for https://crbug.com/992668, where Chromium would
diff --git a/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.https.html b/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html
index 6b3b3104ef..6b3b3104ef 100644
--- a/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.https.html
+++ b/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html
diff --git a/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.https.html b/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.html
index 158fc4f947..158fc4f947 100644
--- a/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.https.html
+++ b/testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_allow_downloads.tentative.html
diff --git a/toolkit/components/antitracking/test/browser/browser_staticPartition_saveAs.js b/toolkit/components/antitracking/test/browser/browser_staticPartition_saveAs.js
index daf3234858..b9984829eb 100644
--- a/toolkit/components/antitracking/test/browser/browser_staticPartition_saveAs.js
+++ b/toolkit/components/antitracking/test/browser/browser_staticPartition_saveAs.js
@@ -102,7 +102,6 @@ add_task(async function testContextMenuSaveImage() {
set: [
["privacy.partition.network_state", networkIsolation],
["privacy.dynamic_firstparty.use_site", partitionPerSite],
- ["dom.block_download_insecure", false],
],
});
@@ -198,7 +197,6 @@ add_task(async function testContextMenuSaveVideo() {
set: [
["privacy.partition.network_state", networkIsolation],
["privacy.dynamic_firstparty.use_site", partitionPerSite],
- ["dom.block_download_insecure", false],
],
});
diff --git a/toolkit/components/antitracking/test/browser/file_saveAsPageInfo.html b/toolkit/components/antitracking/test/browser/file_saveAsPageInfo.html
index 8f22e911e7..aa3de2a555 100644
--- a/toolkit/components/antitracking/test/browser/file_saveAsPageInfo.html
+++ b/toolkit/components/antitracking/test/browser/file_saveAsPageInfo.html
@@ -1,6 +1,6 @@
<html>
<body>
- <img src="https://example.net/browser/toolkit/components/antitracking/test/browser/raptor.jpg" id="image1">
- <video src="https://example.net/browser/toolkit/components/antitracking/test/browser/file_video.ogv" id="video1"> </video>
+ <img src="http://example.net/browser/toolkit/components/antitracking/test/browser/raptor.jpg" id="image1">
+ <video src="http://example.net/browser/toolkit/components/antitracking/test/browser/file_video.ogv" id="video1"> </video>
</body>
</html>
diff --git a/toolkit/components/downloads/test/unit/test_DownloadLegacy.js b/toolkit/components/downloads/test/unit/test_DownloadLegacy.js
index 839611ec22..972820f29e 100644
--- a/toolkit/components/downloads/test/unit/test_DownloadLegacy.js
+++ b/toolkit/components/downloads/test/unit/test_DownloadLegacy.js
@@ -11,8 +11,6 @@
// Execution of common tests
-Services.prefs.setBoolPref("dom.block_download_insecure", false);
-
// This is used in common_test_Download.js
// eslint-disable-next-line no-unused-vars
var gUseLegacySaver = true;
diff --git a/toolkit/components/extensions/test/browser/browser_ext_downloads_referrer.js b/toolkit/components/extensions/test/browser/browser_ext_downloads_referrer.js
index 24d52dd8e0..c9e965c1e1 100644
--- a/toolkit/components/extensions/test/browser/browser_ext_downloads_referrer.js
+++ b/toolkit/components/extensions/test/browser/browser_ext_downloads_referrer.js
@@ -4,8 +4,8 @@
"use strict";
const URL_PATH = "browser/toolkit/components/extensions/test/browser/data";
-const TEST_URL = `https://example.com/${URL_PATH}/test_downloads_referrer.html`;
-const DOWNLOAD_URL = `https://example.com/${URL_PATH}/test-download.txt`;
+const TEST_URL = `http://example.com/${URL_PATH}/test_downloads_referrer.html`;
+const DOWNLOAD_URL = `http://example.com/${URL_PATH}/test-download.txt`;
async function triggerSaveAs({ selector }) {
const contextMenu = window.document.getElementById("contentAreaContextMenu");
diff --git a/toolkit/components/nimbus/FeatureManifest.yaml b/toolkit/components/nimbus/FeatureManifest.yaml
index 190e29d6db..7612ef2dc2 100644
--- a/toolkit/components/nimbus/FeatureManifest.yaml
+++ b/toolkit/components/nimbus/FeatureManifest.yaml
@@ -429,10 +429,9 @@ urlbar:
* Remove the forcast text from the summary text.
yelpMinKeywordLength:
type: int
- fallbackPref: browser.urlbar.yelp.minKeywordLength
description: >-
- If the length of user's query is less than this value plus
- "yelp.showLessFrequentlyCount", Yelp suggestion never be shown.
+ The minimum prefix length of a Yelp keyword the user must type to
+ trigger the suggestion.
yelpFeatureGate:
type: boolean
fallbackPref: browser.urlbar.yelp.featureGate
diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_octet_stream.js b/toolkit/components/pdfjs/test/browser_pdfjs_octet_stream.js
index da630f726c..d2b4fe310f 100644
--- a/toolkit/components/pdfjs/test/browser_pdfjs_octet_stream.js
+++ b/toolkit/components/pdfjs/test/browser_pdfjs_octet_stream.js
@@ -5,7 +5,7 @@
const TESTROOT = getRootDirectory(gTestPath).replace(
"chrome://mochitests/content/",
- "https://example.com/"
+ "http://mochi.test:8888/"
);
// Get a ref to the pdf we want to open.
diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json
index 223b96f082..3be0da3295 100644
--- a/toolkit/components/telemetry/Histograms.json
+++ b/toolkit/components/telemetry/Histograms.json
@@ -12347,14 +12347,14 @@
"n_values": 10,
"description": "How often would blocked mixed content be allowed if HSTS upgrades were allowed? 0=display/no-HSTS, 1=display/HSTS, 2=active/no-HSTS, 3=active/HSTS"
},
- "INSECURE_DOWNLOADS": {
+ "MIXED_CONTENT_DOWNLOADS": {
"record_in_processes": ["main", "content"],
"products": ["firefox"],
- "alert_emails": ["seceng-telemetry@mozilla.com", "ckerschb@mozilla.com"],
- "bug_numbers": [1877195],
- "expires_in_version": "130",
+ "alert_emails": ["seceng-telemetry@mozilla.com", "sstreich@mozilla.com"],
+ "bug_numbers": [1646768],
+ "expires_in_version": "90",
"kind": "boolean",
- "description": "Accumulates how many downloads are insecure (True = The download is insecure, False= The download is secure)"
+ "description": "Accumulates how many downloads are mixed-content (True = The download is MixedContent, False= is not MixedContent)"
},
"MIXED_CONTENT_IMAGES": {
"record_in_processes": ["main", "content"],
diff --git a/toolkit/modules/LightweightThemeConsumer.sys.mjs b/toolkit/modules/LightweightThemeConsumer.sys.mjs
index cf388eb3d3..0d3993370b 100644
--- a/toolkit/modules/LightweightThemeConsumer.sys.mjs
+++ b/toolkit/modules/LightweightThemeConsumer.sys.mjs
@@ -183,7 +183,26 @@ const toolkitVariableMap = [
"--newtab-background-color-secondary",
{ lwtProperty: "ntp_card_background" },
],
- ["--newtab-text-primary-color", { lwtProperty: "ntp_text" }],
+ [
+ "--newtab-text-primary-color",
+ {
+ lwtProperty: "ntp_text",
+ processColor(rgbaChannels, element) {
+ if (!rgbaChannels) {
+ element.removeAttribute("lwt-newtab-brighttext");
+ return null;
+ }
+
+ const { r, g, b } = rgbaChannels;
+ element.toggleAttribute(
+ "lwt-newtab-brighttext",
+ 0.2125 * r + 0.7154 * g + 0.0721 * b > 110
+ );
+
+ return _rgbaToString(rgbaChannels);
+ },
+ },
+ ],
];
export function LightweightThemeConsumer(aDocument) {
diff --git a/toolkit/xre/nsWindowsWMain.cpp b/toolkit/xre/nsWindowsWMain.cpp
index 2a91deec5c..7eb9e11046 100644
--- a/toolkit/xre/nsWindowsWMain.cpp
+++ b/toolkit/xre/nsWindowsWMain.cpp
@@ -111,32 +111,9 @@ static void FreeAllocStrings(int argc, char** argv) {
delete[] argv;
}
-// Remove "/prefetch:##" argument from the command line, if present. (See
-// GeckoChildProcessHost.cpp for details.)
-//
-// Colons are not permitted in path-elements on Windows, so a string of this
-// form is extremely unlikely to appear with the intent of being a legitimate
-// path-argument.
-void RemovePrefetchArguments(int& argc, WCHAR** argv) {
- size_t prefetchArgsCount [[maybe_unused]] = 0;
- for (int i = 0; i < argc; ++i) {
- constexpr const wchar_t prefix[] = L"/prefetch:";
- auto const cmp = wcsncmp(argv[i], prefix, ARRAYSIZE(prefix) - 1);
- if (cmp == 0) {
- std::copy(argv + i + 1, argv + argc, argv + i);
- --argc;
- --i;
- prefetchArgsCount++;
- }
- }
- MOZ_ASSERT(prefetchArgsCount <= 1,
- "at most one /prefetch:## argument should be present");
-}
-
int wmain(int argc, WCHAR** argv) {
SanitizeEnvironmentVariables();
SetDllDirectoryW(L"");
- RemovePrefetchArguments(argc, argv);
// Only run this code if LauncherProcessWin.h was included beforehand, thus
// signalling that the hosting process should support launcher mode.
diff --git a/uriloader/exthandler/tests/mochitest/browser_download_idn_blocklist.js b/uriloader/exthandler/tests/mochitest/browser_download_idn_blocklist.js
index a5de2870af..0d49a898a0 100644
--- a/uriloader/exthandler/tests/mochitest/browser_download_idn_blocklist.js
+++ b/uriloader/exthandler/tests/mochitest/browser_download_idn_blocklist.js
@@ -24,10 +24,7 @@ server.registerFile(`/${encodeURIComponent(TEST_FILE)}`, file);
*/
add_task(async function test_idn_blocklisted_char_not_escaped() {
await SpecialPowers.pushPrefEnv({
- set: [
- ["browser.download.always_ask_before_handling_new_types", false],
- ["dom.block_download_insecure", false],
- ],
+ set: [["browser.download.always_ask_before_handling_new_types", false]],
});
info("Testing with " + TEST_URL);
diff --git a/widget/gtk/nsDragService.cpp b/widget/gtk/nsDragService.cpp
index df0965b5e4..0135f97a4e 100644
--- a/widget/gtk/nsDragService.cpp
+++ b/widget/gtk/nsDragService.cpp
@@ -712,7 +712,7 @@ nsDragService::GetNumDropItems(uint32_t* aNumItems) {
*aNumItems = 0;
return NS_OK;
}
- GetTargetDragData(gdkFlavor, dragFlavors);
+ GetTargetDragData(gdkFlavor, dragFlavors, false /* resetTargetData */);
}
// application/vnd.portal.filetransfer
@@ -722,7 +722,7 @@ nsDragService::GetNumDropItems(uint32_t* aNumItems) {
*aNumItems = 0;
return NS_OK;
}
- GetTargetDragData(gdkFlavor, dragFlavors);
+ GetTargetDragData(gdkFlavor, dragFlavors, false /* resetTargetData */);
}
if (mTargetDragUris) {
@@ -875,7 +875,7 @@ nsDragService::GetData(nsITransferable* aTransferable, uint32_t aItemIndex) {
LOGDRAGSERVICE(" file not found, proceed with %s flavor\n", gPortalFile);
gdkFlavor = gdk_atom_intern(gPortalFile, FALSE);
if (gdkFlavor) {
- GetTargetDragData(gdkFlavor, dragFlavors);
+ GetTargetDragData(gdkFlavor, dragFlavors, false /* resetTargetData */);
GetReachableFileFromUriList(mTargetDragUris.get(), aItemIndex, file);
}
}
@@ -886,7 +886,7 @@ nsDragService::GetData(nsITransferable* aTransferable, uint32_t aItemIndex) {
gPortalFileTransfer);
gdkFlavor = gdk_atom_intern(gPortalFileTransfer, FALSE);
if (gdkFlavor) {
- GetTargetDragData(gdkFlavor, dragFlavors);
+ GetTargetDragData(gdkFlavor, dragFlavors, false /* resetTargetData */);
GetReachableFileFromUriList(mTargetDragUris.get(), aItemIndex, file);
}
}
@@ -899,7 +899,7 @@ nsDragService::GetData(nsITransferable* aTransferable, uint32_t aItemIndex) {
gdkFlavor = gdk_atom_intern(gTextUriListType, FALSE);
if (gdkFlavor) {
- GetTargetDragData(gdkFlavor, dragFlavors);
+ GetTargetDragData(gdkFlavor, dragFlavors, false /* resetTargetData */);
GetReachableFileFromUriList(mTargetDragUris.get(), aItemIndex, file);
}
}
@@ -1290,13 +1290,16 @@ bool nsDragService::IsTargetContextList(void) {
// DispatchMotionEvents().
// Can lead to another round of drag_motion events.
void nsDragService::GetTargetDragData(GdkAtom aFlavor,
- nsTArray<nsCString>& aDropFlavors) {
+ nsTArray<nsCString>& aDropFlavors,
+ bool aResetTargetData) {
LOGDRAGSERVICE("nsDragService::GetTargetDragData(%p) '%s'\n",
mTargetDragContext.get(),
GUniquePtr<gchar>(gdk_atom_name(aFlavor)).get());
// reset our target data areas
- TargetResetData();
+ if (aResetTargetData) {
+ TargetResetData();
+ }
GUniquePtr<gchar> name(gdk_atom_name(aFlavor));
nsDependentCString flavor(name.get());
diff --git a/widget/gtk/nsDragService.h b/widget/gtk/nsDragService.h
index 8a45b7b8ed..bb5da26cd4 100644
--- a/widget/gtk/nsDragService.h
+++ b/widget/gtk/nsDragService.h
@@ -207,7 +207,8 @@ class nsDragService final : public nsBaseDragService, public nsIObserver {
bool IsTargetContextList(void);
// this will get the native data from the last target given a
// specific flavor
- void GetTargetDragData(GdkAtom aFlavor, nsTArray<nsCString>& aDropFlavors);
+ void GetTargetDragData(GdkAtom aFlavor, nsTArray<nsCString>& aDropFlavors,
+ bool aResetTargetData = true);
// this will reset all of the target vars
void TargetResetData(void);
// Ensure our data cache belongs to aDragContext and clear the cache if