diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 01:53:15 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 01:53:15 +0000 |
commit | 50e4c49ba64ce680143c83b142ae5a7ec30fde54 (patch) | |
tree | 269a97c1e612c69c97e0a622db091ba5392965c9 | |
parent | Adding debian version 125.0.2-1. (diff) | |
download | firefox-50e4c49ba64ce680143c83b142ae5a7ec30fde54.tar.xz firefox-50e4c49ba64ce680143c83b142ae5a7ec30fde54.zip |
Merging upstream version 125.0.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
35 files changed, 917 insertions, 455 deletions
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/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/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/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/config/version.txt b/browser/config/version.txt index d588d3be0c..61eb5d32fe 100644 --- a/browser/config/version.txt +++ b/browser/config/version.txt @@ -1 +1 @@ -125.0.2 +125.0.3 diff --git a/browser/config/version_display.txt b/browser/config/version_display.txt index d588d3be0c..61eb5d32fe 100644 --- a/browser/config/version_display.txt +++ b/browser/config/version_display.txt @@ -1 +1 @@ -125.0.2 +125.0.3 diff --git a/config/milestone.txt b/config/milestone.txt index 86d5c106bb..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.2 +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/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/services/settings/dumps/blocklists/addons-bloomfilters.json b/services/settings/dumps/blocklists/addons-bloomfilters.json index 21c0722a96..c4f4a6ea42 100644 --- a/services/settings/dumps/blocklists/addons-bloomfilters.json +++ b/services/settings/dumps/blocklists/addons-bloomfilters.json @@ -3,6 +3,75 @@ { "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": [] @@ -537,5 +606,5 @@ "last_modified": 1707395854769 } ], - "timestamp": 1713357360700 + "timestamp": 1713897363017 } 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/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json index cb6220a0b2..282cb6c376 100644 --- a/services/settings/dumps/security-state/intermediates.json +++ b/services/settings/dumps/security-state/intermediates.json @@ -1,6 +1,366 @@ { "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", @@ -8803,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", @@ -27613,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", @@ -30403,5 +30691,5 @@ "last_modified": 1559865884636 } ], - "timestamp": 1713391023368 + "timestamp": 1713887823023 } diff --git a/sourcestamp.txt b/sourcestamp.txt index be20e28e6f..6b49e416a7 100644 --- a/sourcestamp.txt +++ b/sourcestamp.txt @@ -1,2 +1,2 @@ -20240419144423 -https://hg.mozilla.org/releases/mozilla-release/rev/c5ee44e4135571bec3220340242f9189c59ca5ba +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/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/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/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 |