summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 01:53:15 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 01:53:15 +0000
commit50e4c49ba64ce680143c83b142ae5a7ec30fde54 (patch)
tree269a97c1e612c69c97e0a622db091ba5392965c9
parentAdding debian version 125.0.2-1. (diff)
downloadfirefox-50e4c49ba64ce680143c83b142ae5a7ec30fde54.tar.xz
firefox-50e4c49ba64ce680143c83b142ae5a7ec30fde54.zip
Merging upstream version 125.0.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--browser/app/winlauncher/LauncherProcessWin.cpp8
-rw-r--r--browser/base/content/test/forms/browser.toml2
-rw-r--r--browser/base/content/test/forms/browser_selectpopup_focus.js38
-rw-r--r--browser/components/aboutwelcome/content/aboutwelcome.css29
-rw-r--r--browser/components/asrouter/content-src/styles/_feature-callout.scss6
-rw-r--r--browser/components/asrouter/modules/FeatureCallout.sys.mjs8
-rw-r--r--browser/components/urlbar/UrlbarInput.sys.mjs16
-rw-r--r--browser/components/urlbar/tests/browser/browser_result_menu_general.js117
-rw-r--r--browser/config/version.txt2
-rw-r--r--browser/config/version_display.txt2
-rw-r--r--config/milestone.txt2
-rw-r--r--dom/animation/Animation.cpp29
-rw-r--r--dom/animation/Animation.h6
-rw-r--r--dom/animation/AnimationTimeline.h3
-rw-r--r--dom/animation/test/mozilla/file_restyles.html16
-rw-r--r--gfx/layers/AnimationInfo.cpp14
-rw-r--r--gfx/thebes/gfxPlatformFontList.cpp6
-rw-r--r--ipc/glue/GeckoChildProcessHost.cpp100
-rw-r--r--js/src/frontend/Parser.cpp6
-rw-r--r--js/src/jit-test/tests/arguments/bug1892699-1.js10
-rw-r--r--js/src/jit-test/tests/arguments/bug1892699.js16
-rw-r--r--layout/reftests/font-matching/1892363-lang-prefs.html3
-rw-r--r--layout/reftests/font-matching/reftest.list3
-rw-r--r--layout/style/res/forms.css1
-rw-r--r--services/settings/dumps/blocklists/addons-bloomfilters.json71
-rw-r--r--services/settings/dumps/main/devtools-compatibility-browsers.json300
-rw-r--r--services/settings/dumps/security-state/intermediates.json434
-rw-r--r--sourcestamp.txt4
-rw-r--r--testing/web-platform/meta/css/css-transitions/CSSTransition-effect.tentative.html.ini5
-rw-r--r--testing/web-platform/tests/css/css-animations/transition-ready-time-offscreen.html44
-rw-r--r--testing/web-platform/tests/css/css-transitions/CSSTransition-effect.tentative.html7
-rw-r--r--toolkit/modules/LightweightThemeConsumer.sys.mjs21
-rw-r--r--toolkit/xre/nsWindowsWMain.cpp23
-rw-r--r--widget/gtk/nsDragService.cpp17
-rw-r--r--widget/gtk/nsDragService.h3
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