diff options
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 |