Version in base suite: 128.3.1esr-1~deb12u1
Version in overlay suite: 128.5.0esr-1~deb12u1
Base version: firefox-esr_128.5.0esr-1~deb12u1
Target version: firefox-esr_128.6.0esr-1~deb12u1
Base file: /srv/ftp-master.debian.org/ftp/pool/main/f/firefox-esr/firefox-esr_128.5.0esr-1~deb12u1.dsc
Target file: /srv/ftp-master.debian.org/policy/pool/main/f/firefox-esr/firefox-esr_128.6.0esr-1~deb12u1.dsc
/srv/release.debian.org/tmp/pF1db870Hp/firefox-esr-128.6.0esr/services/settings/dumps/blocklists/addons-bloomfilters/addons-mlbf.bin |binary
firefox-esr-128.6.0esr/CLOBBER | 2
firefox-esr-128.6.0esr/accessible/windows/ia2/ia2Accessible.cpp | 18
firefox-esr-128.6.0esr/browser/app/profile/firefox.js | 10
firefox-esr-128.6.0esr/browser/base/content/test/general/browser_remoteTroubleshoot.js | 14
firefox-esr-128.6.0esr/browser/base/content/test/general/test_remoteTroubleshoot.html | 13
firefox-esr-128.6.0esr/browser/components/enterprisepolicies/Policies.sys.mjs | 1
firefox-esr-128.6.0esr/browser/components/places/tests/browser/browser_bookmark_copy_folder_tree.js | 27
firefox-esr-128.6.0esr/browser/components/shopping/tests/browser/browser.toml | 4
firefox-esr-128.6.0esr/browser/config/version.txt | 2
firefox-esr-128.6.0esr/browser/config/version_display.txt | 2
firefox-esr-128.6.0esr/build/moz.configure/bootstrap.configure | 4
firefox-esr-128.6.0esr/config/milestone.txt | 2
firefox-esr-128.6.0esr/debian/changelog | 9
firefox-esr-128.6.0esr/debian/patches/debian-hacks/Don-t-auto-disable-extensions-in-system-directories.patch | 2
firefox-esr-128.6.0esr/debian/patches/debian-hacks/Set-DPI-to-system-settings.patch | 2
firefox-esr-128.6.0esr/docshell/base/nsDocShell.cpp | 8
firefox-esr-128.6.0esr/dom/base/StructuredCloneHolder.cpp | 12
firefox-esr-128.6.0esr/dom/base/nsLineBreaker.cpp | 16
firefox-esr-128.6.0esr/dom/canvas/DrawTargetWebgl.cpp | 7
firefox-esr-128.6.0esr/dom/html/HTMLInputElement.cpp | 4
firefox-esr-128.6.0esr/dom/media/eme/mediafoundation/WMFCDMImpl.cpp | 2
firefox-esr-128.6.0esr/dom/media/ipc/MFCDMChild.cpp | 17
firefox-esr-128.6.0esr/dom/media/ipc/MFCDMChild.h | 6
firefox-esr-128.6.0esr/dom/media/tools/generateGmpJson.py | 199
firefox-esr-128.6.0esr/dom/midi/MIDIAccess.cpp | 8
firefox-esr-128.6.0esr/dom/midi/MIDIAccess.h | 18
firefox-esr-128.6.0esr/dom/midi/MIDIPort.cpp | 15
firefox-esr-128.6.0esr/dom/midi/MIDIPort.h | 14
firefox-esr-128.6.0esr/dom/streams/ReadableByteStreamController.cpp | 8
firefox-esr-128.6.0esr/dom/streams/test/xpcshell/xpcshell.toml | 1
firefox-esr-128.6.0esr/image/AnimationFrameBuffer.cpp | 54
firefox-esr-128.6.0esr/image/Decoder.cpp | 14
firefox-esr-128.6.0esr/image/imgFrame.cpp | 49
firefox-esr-128.6.0esr/image/imgFrame.h | 44
firefox-esr-128.6.0esr/image/test/gtest/TestAnimationFrameBuffer.cpp | 9
firefox-esr-128.6.0esr/js/src/builtin/intl/Segmenter.cpp | 37
firefox-esr-128.6.0esr/js/src/builtin/intl/Segmenter.h | 91
firefox-esr-128.6.0esr/js/src/jit-test/tests/auto-regress/bug1928407.js | 14
firefox-esr-128.6.0esr/js/src/jit-test/tests/modules/evaluation-result.js | 11
firefox-esr-128.6.0esr/js/src/vm/Modules.cpp | 15
firefox-esr-128.6.0esr/layout/generic/nsPageContentFrame.cpp | 9
firefox-esr-128.6.0esr/modules/libpref/init/StaticPrefList.yaml | 15
firefox-esr-128.6.0esr/netwerk/dns/effective_tld_names.dat | 1471 ++--
firefox-esr-128.6.0esr/netwerk/dns/nsHostRecord.cpp | 9
firefox-esr-128.6.0esr/netwerk/dns/nsHostRecord.h | 4
firefox-esr-128.6.0esr/netwerk/dns/nsHostResolver.cpp | 8
firefox-esr-128.6.0esr/netwerk/protocol/http/Http2Session.cpp | 12
firefox-esr-128.6.0esr/netwerk/protocol/http/Http2StreamBase.cpp | 4
firefox-esr-128.6.0esr/netwerk/protocol/http/nsHttpConnection.cpp | 11
firefox-esr-128.6.0esr/netwerk/test/unit/head_channels.js | 1
firefox-esr-128.6.0esr/netwerk/wifi/gtest/TestWifiMonitorListenerRemoval.cpp | 159
firefox-esr-128.6.0esr/netwerk/wifi/gtest/moz.build | 1
firefox-esr-128.6.0esr/netwerk/wifi/nsWifiMonitor.cpp | 54
firefox-esr-128.6.0esr/netwerk/wifi/nsWifiMonitor.h | 14
firefox-esr-128.6.0esr/python/mach/mach/site.py | 89
firefox-esr-128.6.0esr/python/mozboot/mozboot/base.py | 40
firefox-esr-128.6.0esr/python/mozboot/mozboot/mozillabuild.py | 4
firefox-esr-128.6.0esr/python/mozboot/mozboot/osx.py | 4
firefox-esr-128.6.0esr/python/mozbuild/mozbuild/artifact_commands.py | 1
firefox-esr-128.6.0esr/python/mozbuild/mozbuild/test/configure/test_bootstrap.py | 3
firefox-esr-128.6.0esr/python/mozversioncontrol/mozversioncontrol/__init__.py | 5
firefox-esr-128.6.0esr/security/manager/ssl/StaticHPKPins.h | 2
firefox-esr-128.6.0esr/security/manager/ssl/nsSTSPreloadList.inc | 3318 ++++------
firefox-esr-128.6.0esr/services/settings/dumps/blocklists/addons-bloomfilters.json | 94
firefox-esr-128.6.0esr/services/settings/dumps/blocklists/addons-bloomfilters/addons-mlbf.bin.meta.json | 2
firefox-esr-128.6.0esr/services/settings/dumps/main/devtools-compatibility-browsers.json | 317
firefox-esr-128.6.0esr/services/settings/dumps/main/search-config-v2.json | 46
firefox-esr-128.6.0esr/services/settings/dumps/main/search-telemetry-v2.json | 715 +-
firefox-esr-128.6.0esr/services/settings/dumps/main/translations-models.json | 110
firefox-esr-128.6.0esr/services/settings/dumps/main/translations-wasm.json | 40
firefox-esr-128.6.0esr/services/settings/dumps/security-state/intermediates.json | 769 --
firefox-esr-128.6.0esr/servo/components/selectors/context.rs | 2
firefox-esr-128.6.0esr/servo/components/style/values/generics/calc.rs | 2
firefox-esr-128.6.0esr/servo/components/style/values/specified/calc.rs | 9
firefox-esr-128.6.0esr/sourcestamp.txt | 4
firefox-esr-128.6.0esr/taskcluster/docker/debian-repackage/Dockerfile | 5
firefox-esr-128.6.0esr/taskcluster/docker/firefox-snap/Dockerfile | 71
firefox-esr-128.6.0esr/taskcluster/docker/firefox-snap/Makefile | 12
firefox-esr-128.6.0esr/taskcluster/docker/firefox-snap/download_and_install_snap.sh | 27
firefox-esr-128.6.0esr/taskcluster/docker/firefox-snap/extract_locales_from_l10n_json.py | 15
firefox-esr-128.6.0esr/taskcluster/docker/firefox-snap/firefox.snapcraft.yaml.in | 91
firefox-esr-128.6.0esr/taskcluster/docker/firefox-snap/policies.json | 5
firefox-esr-128.6.0esr/taskcluster/docker/firefox-snap/runme.sh | 104
firefox-esr-128.6.0esr/taskcluster/docker/firefox-snap/tmpdir | 6
firefox-esr-128.6.0esr/taskcluster/docs/attributes.rst | 5
firefox-esr-128.6.0esr/taskcluster/docs/kinds.rst | 8
firefox-esr-128.6.0esr/taskcluster/gecko_taskgraph/transforms/beetmover.py | 11
firefox-esr-128.6.0esr/taskcluster/gecko_taskgraph/transforms/beetmover_snap.py | 42
firefox-esr-128.6.0esr/taskcluster/gecko_taskgraph/transforms/job/__init__.py | 8
firefox-esr-128.6.0esr/taskcluster/gecko_taskgraph/transforms/job/toolchain.py | 8
firefox-esr-128.6.0esr/taskcluster/kinds/docker-image/kind.yml | 2
firefox-esr-128.6.0esr/taskcluster/kinds/release-snap-repackage/kind.yml | 60
firefox-esr-128.6.0esr/taskcluster/kinds/toolchain/dist-toolchains.yml | 2
firefox-esr-128.6.0esr/taskcluster/scripts/misc/build-custom-car.sh | 4
firefox-esr-128.6.0esr/taskcluster/scripts/misc/build-custom-v8.sh | 2
firefox-esr-128.6.0esr/testing/web-platform/meta/css/css-page/pseudo-first-margin-004-print.html.ini | 2
firefox-esr-128.6.0esr/testing/web-platform/tests/css/css-values/round-function.html | 7
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes-ref.html | 8
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes.html | 33
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes-ref.html | 8
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes.html | 33
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes-ref.html | 9
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes.html | 30
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes-ref.html | 9
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes.html | 30
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes-ref.html | 8
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes.html | 33
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes-ref.html | 8
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes.html | 33
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes-ref.html | 8
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes.html | 34
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes-ref.html | 8
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes.html | 34
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes-ref.html | 2
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes.html | 30
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes-ref.html | 2
firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes.html | 30
firefox-esr-128.6.0esr/toolkit/actors/WebChannelChild.sys.mjs | 50
firefox-esr-128.6.0esr/toolkit/actors/WebChannelParent.sys.mjs | 33
firefox-esr-128.6.0esr/toolkit/components/extensions/test/mochitest/test_ext_protocolHandlers.html | 42
firefox-esr-128.6.0esr/toolkit/components/search/tests/xpcshell/searchconfigs/test_ecosia.js | 3
firefox-esr-128.6.0esr/toolkit/content/gmp-sources/openh264.json | 8
firefox-esr-128.6.0esr/toolkit/content/gmp-sources/widevinecdm.json | 58
firefox-esr-128.6.0esr/toolkit/content/gmp-sources/widevinecdm_l1.json | 5
firefox-esr-128.6.0esr/toolkit/library/build/dependentlibs.py | 23
firefox-esr-128.6.0esr/toolkit/modules/GMPInstallManager.sys.mjs | 2
firefox-esr-128.6.0esr/toolkit/modules/tests/browser/browser_web_channel.js | 54
firefox-esr-128.6.0esr/toolkit/modules/tests/xpcshell/test_GMPInstallManager.js | 440 +
firefox-esr-128.6.0esr/toolkit/mozapps/extensions/internal/ProductAddonChecker.sys.mjs | 41
firefox-esr-128.6.0esr/toolkit/mozapps/extensions/test/xpcshell/data/productaddons/good.xml | 7
firefox-esr-128.6.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker.js | 66
firefox-esr-128.6.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker_signatures.js | 2
firefox-esr-128.6.0esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in | 3
firefox-esr-128.6.0esr/toolkit/xre/nsAppRunner.cpp | 10
firefox-esr-128.6.0esr/tools/lint/rejected-words.yml | 3
firefox-esr-128.6.0esr/widget/gtk/nsDragService.cpp | 45
firefox-esr-128.6.0esr/widget/gtk/nsDragService.h | 2
firefox-esr-128.6.0esr/widget/windows/WinUtils.cpp | 18
firefox-esr-128.6.0esr/widget/windows/WinUtils.h | 2
firefox-esr-128.6.0esr/widget/windows/nsClipboard.cpp | 43
141 files changed, 5188 insertions(+), 4792 deletions(-)
diff -Nru firefox-esr-128.5.0esr/CLOBBER firefox-esr-128.6.0esr/CLOBBER
--- firefox-esr-128.5.0esr/CLOBBER 2024-11-18 16:35:17.000000000 +0000
+++ firefox-esr-128.6.0esr/CLOBBER 2024-12-18 15:38:19.000000000 +0000
@@ -22,4 +22,4 @@
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
# don't change CLOBBER for WebIDL changes any more.
-Merge day clobber 2024-10-28
\ No newline at end of file
+Merge day clobber 2024-11-25
\ No newline at end of file
diff -Nru firefox-esr-128.5.0esr/accessible/windows/ia2/ia2Accessible.cpp firefox-esr-128.6.0esr/accessible/windows/ia2/ia2Accessible.cpp
--- firefox-esr-128.5.0esr/accessible/windows/ia2/ia2Accessible.cpp 2024-11-18 16:35:17.000000000 +0000
+++ firefox-esr-128.6.0esr/accessible/windows/ia2/ia2Accessible.cpp 2024-12-18 15:38:19.000000000 +0000
@@ -12,12 +12,14 @@
#include "AccessibleStates.h"
#include "AccAttributes.h"
+#include "ApplicationAccessible.h"
#include "Compatibility.h"
#include "ia2AccessibleRelation.h"
#include "IUnknownImpl.h"
#include "nsCoreUtils.h"
#include "nsIAccessibleTypes.h"
#include "mozilla/a11y/PDocAccessible.h"
+#include "mozilla/StaticPrefs_accessibility.h"
#include "Relation.h"
#include "TextRange-inl.h"
#include "nsAccessibilityService.h"
@@ -352,6 +354,22 @@
if (!acc) return CO_E_OBJNOTCONNECTED;
*aWindowHandle = MsaaAccessible::GetHWNDFor(acc);
+ if (!*aWindowHandle && !StaticPrefs::accessibility_uia_enable()) {
+ // Bug 1890155: This can happen if a document is detached from its embedder.
+ // The document might be about to die or it might be moving to a different
+ // embedder; e.g. a tab in a different window. The IA2 -> UIA proxy may
+ // crash if we return a null HWND. For now, pick an arbitrary top level
+ // Gecko HWND. This might be wrong, but only briefly, since the document
+ // will either die or move very soon, at which point this method will
+ // return the correct answer.
+ // TODO This hack should be removed once we only use our native UIA
+ // implementation.
+ if (ApplicationAccessible* app = ApplicationAcc()) {
+ if (LocalAccessible* firstRoot = app->LocalFirstChild()) {
+ *aWindowHandle = MsaaAccessible::GetHWNDFor(firstRoot);
+ }
+ }
+ }
return S_OK;
}
diff -Nru firefox-esr-128.5.0esr/browser/app/profile/firefox.js firefox-esr-128.6.0esr/browser/app/profile/firefox.js
--- firefox-esr-128.5.0esr/browser/app/profile/firefox.js 2024-11-18 16:35:17.000000000 +0000
+++ firefox-esr-128.6.0esr/browser/app/profile/firefox.js 2024-12-18 15:38:19.000000000 +0000
@@ -1194,15 +1194,9 @@
// We want to make sure mail URLs are handled externally...
pref("network.protocol-handler.external.mailto", true); // for mail
-#ifdef XP_WIN
- pref("network.protocol-handler.external.ms-windows-store", true);
-#endif
// ...without warning dialogs
pref("network.protocol-handler.warn-external.mailto", false);
-#ifdef XP_WIN
- pref("network.protocol-handler.warn-external.ms-windows-store", false);
-#endif
// By default, all protocol handlers are exposed. This means that
// the browser will respond to openURL commands for all URL types.
@@ -2427,10 +2421,6 @@
pref("signon.showAutoCompleteImport", "import");
pref("signon.suggestImportCount", 3);
-// Space separated list of URLS that are allowed to send objects (instead of
-// only strings) through webchannels. Bug 1275612 tracks removing this pref and capability.
-pref("webchannel.allowObject.urlWhitelist", "https://content.cdn.mozilla.net https://install.mozilla.org");
-
// Whether or not the browser should scan for unsubmitted
// crash reports, and then show a notification for submitting
// those reports.
diff -Nru firefox-esr-128.5.0esr/browser/base/content/test/general/browser_remoteTroubleshoot.js firefox-esr-128.6.0esr/browser/base/content/test/general/browser_remoteTroubleshoot.js
--- firefox-esr-128.5.0esr/browser/base/content/test/general/browser_remoteTroubleshoot.js 2024-11-18 16:35:18.000000000 +0000
+++ firefox-esr-128.6.0esr/browser/base/content/test/general/browser_remoteTroubleshoot.js 2024-12-18 15:38:20.000000000 +0000
@@ -13,9 +13,6 @@
"example.com/browser/browser/base/content/test/general/test_remoteTroubleshoot.html";
const TEST_URI_GOOD = Services.io.newURI("https://" + TEST_URL_TAIL);
const TEST_URI_BAD = Services.io.newURI("http://" + TEST_URL_TAIL);
-const TEST_URI_GOOD_OBJECT = Services.io.newURI(
- "https://" + TEST_URL_TAIL + "?object"
-);
// Creates a one-shot web-channel for the test data to be sent back from the test page.
function promiseChannelResponse(channelID, originOrPermission) {
@@ -116,15 +113,4 @@
got.message.errno === 2,
"should have failed with errno 2, no such channel"
);
-
- // Check that the page can send an object as well if it's in the whitelist
- let webchannelWhitelistPref = "webchannel.allowObject.urlWhitelist";
- let origWhitelist = Services.prefs.getCharPref(webchannelWhitelistPref);
- let newWhitelist = origWhitelist + " https://example.com";
- Services.prefs.setCharPref(webchannelWhitelistPref, newWhitelist);
- registerCleanupFunction(() => {
- Services.prefs.clearUserPref(webchannelWhitelistPref);
- });
- got = await promiseNewChannelResponse(TEST_URI_GOOD_OBJECT);
- Assert.ok(got.message, "should have gotten some data back");
});
diff -Nru firefox-esr-128.5.0esr/browser/base/content/test/general/test_remoteTroubleshoot.html firefox-esr-128.6.0esr/browser/base/content/test/general/test_remoteTroubleshoot.html
--- firefox-esr-128.5.0esr/browser/base/content/test/general/test_remoteTroubleshoot.html 2024-11-18 16:35:18.000000000 +0000
+++ firefox-esr-128.6.0esr/browser/base/content/test/general/test_remoteTroubleshoot.html 2024-12-18 15:38:20.000000000 +0000
@@ -1,21 +1,12 @@
\ No newline at end of file
+
+// In this test if the multiplication is factored into the sum first, the
+// result of the round will be incorrect, because of floating point inprecision.
+// round(down, 2.3333333 - 0.33333334, 1) = round(down, 1.99999996, 1) = 1
+test_math_used('round(down, (7 - 1) / 3, 1)', '2', {type:'number'});
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:35.000000000 +0000
@@ -0,0 +1,8 @@
+
+
+
+
Shown
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-first-of-type-when-ancestor-changes.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,8 @@
+
+
+
+Shown
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-always-matches-negated-last-of-type-when-ancestor-changes.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,9 @@
+
+
+
+Shown
+Shown
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-first-of-type-when-ancestor-changes.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,9 @@
+
+
+
+Shown
+Shown
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-always-matches-negated-last-of-type-when-ancestor-changes.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,8 @@
+
+
+
+Shown
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-first-of-type-when-ancestor-changes.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,8 @@
+
+
+
+Shown
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-is-never-matches-negated-last-of-type-when-ancestor-changes.html 2024-12-18 15:38:35.000000000 +0000
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:35.000000000 +0000
@@ -0,0 +1,8 @@
+
+
+
+Shown
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-first-of-type-when-ancestor-changes.html 2024-12-18 15:38:35.000000000 +0000
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:35.000000000 +0000
@@ -0,0 +1,8 @@
+
+
+
+Shown
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-negated-last-of-type-when-ancestor-changes.html 2024-12-18 15:38:35.000000000 +0000
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:35.000000000 +0000
@@ -0,0 +1,2 @@
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-first-of-type-when-ancestor-changes.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes-ref.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes-ref.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes-ref.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes-ref.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,2 @@
+
+
diff -Nru firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes.html firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes.html
--- firefox-esr-128.5.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes.html 1970-01-01 00:00:00.000000000 +0000
+++ firefox-esr-128.6.0esr/testing/web-platform/tests/css/selectors/invalidation/negated-never-matches-negated-last-of-type-when-ancestor-changes.html 2024-12-18 15:38:36.000000000 +0000
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/toolkit/actors/WebChannelChild.sys.mjs firefox-esr-128.6.0esr/toolkit/actors/WebChannelChild.sys.mjs
--- firefox-esr-128.5.0esr/toolkit/actors/WebChannelChild.sys.mjs 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/actors/WebChannelChild.sys.mjs 2024-12-18 15:38:40.000000000 +0000
@@ -3,27 +3,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
-
import { ContentDOMReference } from "resource://gre/modules/ContentDOMReference.sys.mjs";
-// Preference containing the list (space separated) of origins that are
-// allowed to send non-string values through a WebChannel, mainly for
-// backwards compatability. See bug 1238128 for more information.
-const URL_WHITELIST_PREF = "webchannel.allowObject.urlWhitelist";
-
-let _cachedWhitelist = null;
-
-const CACHED_PREFS = {};
-XPCOMUtils.defineLazyPreferenceGetter(
- CACHED_PREFS,
- "URL_WHITELIST",
- URL_WHITELIST_PREF,
- "",
- // Null this out so we update it.
- () => (_cachedWhitelist = null)
-);
-
export class WebChannelChild extends JSWindowActorChild {
handleEvent(event) {
if (event.type === "WebChannelMessageToChrome") {
@@ -39,37 +20,11 @@
return undefined;
}
- _getWhitelistedPrincipals() {
- if (!_cachedWhitelist) {
- let urls = CACHED_PREFS.URL_WHITELIST.split(/\s+/);
- _cachedWhitelist = urls.map(origin =>
- Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin)
- );
- }
- return _cachedWhitelist;
- }
-
_onMessageToChrome(e) {
- // If target is window then we want the document principal, otherwise fallback to target itself.
- let principal = e.target.nodePrincipal
- ? e.target.nodePrincipal
- : e.target.document.nodePrincipal;
-
if (e.detail) {
if (typeof e.detail != "string") {
- // Check if the principal is one of the ones that's allowed to send
- // non-string values for e.detail. They're whitelisted by site origin,
- // so we compare on originNoSuffix in order to avoid other origin attributes
- // that are not relevant here, such as containers or private browsing.
- let objectsAllowed = this._getWhitelistedPrincipals().some(
- whitelisted => principal.originNoSuffix == whitelisted.originNoSuffix
- );
- if (!objectsAllowed) {
- console.error(
- "WebChannelMessageToChrome sent with an object from a non-whitelisted principal"
- );
- return;
- }
+ console.error("WebChannelMessageToChrome must only send strings");
+ return;
}
let eventTarget =
@@ -79,7 +34,6 @@
this.sendAsyncMessage("WebChannelMessageToChrome", {
contentData: e.detail,
eventTarget,
- principal,
});
} else {
console.error("WebChannel message failed. No message detail.");
diff -Nru firefox-esr-128.5.0esr/toolkit/actors/WebChannelParent.sys.mjs firefox-esr-128.6.0esr/toolkit/actors/WebChannelParent.sys.mjs
--- firefox-esr-128.5.0esr/toolkit/actors/WebChannelParent.sys.mjs 2024-11-18 16:35:33.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/actors/WebChannelParent.sys.mjs 2024-12-18 15:38:40.000000000 +0000
@@ -5,7 +5,9 @@
import { WebChannelBroker } from "resource://gre/modules/WebChannel.sys.mjs";
-const ERRNO_MISSING_PRINCIPAL = 1;
+// Note: ERRNO 1 deprecated and unused.
+// We used to err for cases where the child did not send a principal,
+// but now we infer it from the actor.
const ERRNO_NO_SUCH_CHANNEL = 2;
export class WebChannelParent extends JSWindowActorParent {
@@ -15,7 +17,7 @@
browsingContext: this.browsingContext,
browser: this.browsingContext.top.embedderElement,
eventTarget: msg.data.eventTarget,
- principal: msg.data.principal,
+ principal: this.manager.documentPrincipal,
};
// data must be a string except for a few legacy origins allowed by browser-content.js.
if (typeof data == "string") {
@@ -28,28 +30,19 @@
}
if (data && data.id) {
- if (!msg.data.principal) {
+ let validChannelFound = WebChannelBroker.tryToDeliver(
+ data,
+ sendingContext
+ );
+
+ // if no valid origins send an event that there is no such valid channel
+ if (!validChannelFound) {
this._sendErrorEventToContent(
data.id,
sendingContext,
- ERRNO_MISSING_PRINCIPAL,
- "Message principal missing"
- );
- } else {
- let validChannelFound = WebChannelBroker.tryToDeliver(
- data,
- sendingContext
+ ERRNO_NO_SUCH_CHANNEL,
+ "No Such Channel"
);
-
- // if no valid origins send an event that there is no such valid channel
- if (!validChannelFound) {
- this._sendErrorEventToContent(
- data.id,
- sendingContext,
- ERRNO_NO_SUCH_CHANNEL,
- "No Such Channel"
- );
- }
}
} else {
console.error("WebChannel channel id missing");
diff -Nru firefox-esr-128.5.0esr/toolkit/components/extensions/test/mochitest/test_ext_protocolHandlers.html firefox-esr-128.6.0esr/toolkit/components/extensions/test/mochitest/test_ext_protocolHandlers.html
--- firefox-esr-128.5.0esr/toolkit/components/extensions/test/mochitest/test_ext_protocolHandlers.html 2024-11-18 16:35:33.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/components/extensions/test/mochitest/test_ext_protocolHandlers.html 2024-12-18 15:38:40.000000000 +0000
@@ -531,6 +531,48 @@
await extension.unload();
});
+// Test that the tabs.onUpdated event is fired for extension protocol handlers,
+// even if the protocol handler does not exist and opens the error page for
+// "The address wasn’t understood".
+add_task(async function test_protocolHandler_onUpdated_missing_handler() {
+ let extensionData = {
+ manifest: {
+ permissions: ["tabs"]
+ },
+
+ background() {
+ let urlSeen = false;
+ let tabPromise = Promise.withResolvers();
+ const updateListener = async (tabId, changeInfo) => {
+ let tab = await tabPromise.promise;
+ if (tab.id != tabId) {
+ return;
+ }
+ browser.test.log(`tabs.onUpdated fired with changeInfo ${JSON.stringify(changeInfo)}`);
+ if (!urlSeen && changeInfo.url == "ext+missing:test") {
+ urlSeen = true;
+ }
+ if (urlSeen && changeInfo.status == "complete") {
+ browser.tabs.onUpdated.removeListener(updateListener);
+ await browser.tabs.remove(tabId);
+ browser.test.notifyPass();
+ }
+ };
+ browser.tabs.onUpdated.addListener(updateListener);
+
+ browser.test.log("Waiting for tabs.onUpdated event for 'ext+missing:test' with `complete` status.");
+ browser.tabs.create({ url: "ext+missing:test" }).then(
+ tab => tabPromise.resolve(tab)
+ );
+ },
+ };
+
+ let extension = ExtensionTestUtils.loadExtension(extensionData);
+ await extension.startup();
+ await extension.awaitFinish();
+ await extension.unload();
+});
+
// Test that a protocol handler will work if ftp is enabled
add_task(async function test_ftp_protocolHandler() {
await SpecialPowers.pushPrefEnv({
diff -Nru firefox-esr-128.5.0esr/toolkit/components/search/tests/xpcshell/searchconfigs/test_ecosia.js firefox-esr-128.6.0esr/toolkit/components/search/tests/xpcshell/searchconfigs/test_ecosia.js
--- firefox-esr-128.5.0esr/toolkit/components/search/tests/xpcshell/searchconfigs/test_ecosia.js 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/components/search/tests/xpcshell/searchconfigs/test_ecosia.js 2024-12-18 15:38:38.000000000 +0000
@@ -14,6 +14,9 @@
{
locales: ["de"],
},
+ {
+ regions: ["at", "be", "ch", "de", "es", "it", "nl", "se"],
+ },
],
},
details: [
diff -Nru firefox-esr-128.5.0esr/toolkit/content/gmp-sources/openh264.json firefox-esr-128.6.0esr/toolkit/content/gmp-sources/openh264.json
--- firefox-esr-128.5.0esr/toolkit/content/gmp-sources/openh264.json 2024-11-18 16:35:33.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/content/gmp-sources/openh264.json 2024-12-18 15:38:40.000000000 +0000
@@ -7,26 +7,31 @@
"platforms": {
"Darwin_aarch64-gcc3": {
"fileUrl": "http://ciscobinary.openh264.org/openh264-macosx64-aarch64-31c4d2e4a037526fd30d4e5c39f60885986cf865.zip",
+ "mirrorUrls": [],
"filesize": 477938,
"hashValue": "391efb184373d533713a9e99a9e63c3bbaf614e8d8bdfdd84d4d5e53b9a737e75032187309dd00e58b58bb1033ab68d199f994744f6add57dd08f5fbb654d2f3"
},
"Darwin_x86_64-gcc3": {
"fileUrl": "http://ciscobinary.openh264.org/openh264-macosx64-31c4d2e4a037526fd30d4e5c39f60885986cf865.zip",
+ "mirrorUrls": [],
"filesize": 552074,
"hashValue": "c649bfa20c48406ccbae1917d7478773cd5250ef995828b58cc56cc4db0a3c7ce3f89eb187bd1b3d26cda0e5e65322b710cfd66a2953adeea0e4361c51488add"
},
"Linux_aarch64-gcc3": {
"fileUrl": "http://ciscobinary.openh264.org/openh264-linux64-aarch64-31c4d2e4a037526fd30d4e5c39f60885986cf865.zip",
+ "mirrorUrls": [],
"filesize": 537296,
"hashValue": "eab3fca253c10739c4930bdaf83ca7a9a0a3580937e0e945dde3a45bcdb39b6240ae0d7133ebfb10029442322f4ce6e8647917d15afea601351dc8a5f0dbf3ec"
},
"Linux_x86-gcc3": {
"fileUrl": "http://ciscobinary.openh264.org/openh264-linux32-31c4d2e4a037526fd30d4e5c39f60885986cf865.zip",
+ "mirrorUrls": [],
"filesize": 623151,
"hashValue": "d80508260c6419acc09c9fde539b18e9231899786df549bc8c86e564d1fb8c500327adb96bba204a386326dd5213ae907108c9ca4fc64ae385fbb2291e0e8cc5"
},
"Linux_x86_64-gcc3": {
"fileUrl": "http://ciscobinary.openh264.org/openh264-linux64-31c4d2e4a037526fd30d4e5c39f60885986cf865.zip",
+ "mirrorUrls": [],
"filesize": 583674,
"hashValue": "53a58bfb4c8124ad4f7655b99bfdea290033a085e0796b19245b33b91c0948fdac9f0c3e817130b352493a65d9a7a0fc8a7c1eedc618cdaa2b4580734a11cd9c"
},
@@ -35,11 +40,13 @@
},
"WINNT_aarch64-msvc-aarch64": {
"fileUrl": "http://ciscobinary.openh264.org/openh264-win64-aarch64-31c4d2e4a037526fd30d4e5c39f60885986cf865.zip",
+ "mirrorUrls": [],
"filesize": 412806,
"hashValue": "cc3306873d6ad8ea6a27096c8ce75831463633a530d8f1794ae3eba3efd4a572459b6b0f3ac73f46552a7d6c7a29b152e299d862a2f76420eee07d1d39979182"
},
"WINNT_x86-msvc": {
"fileUrl": "http://ciscobinary.openh264.org/openh264-win32-31c4d2e4a037526fd30d4e5c39f60885986cf865.zip",
+ "mirrorUrls": [],
"filesize": 472465,
"hashValue": "b5c8290bbee9503b6f9d2fcc3cbcf94f9b2d4e8ee143e37cfc8c68de593c8189aecfe447b811accecdb564c8788bd05e116f4eda62ac29b3c6b8a6fa5f564ee0"
},
@@ -51,6 +58,7 @@
},
"WINNT_x86_64-msvc": {
"fileUrl": "http://ciscobinary.openh264.org/openh264-win64-31c4d2e4a037526fd30d4e5c39f60885986cf865.zip",
+ "mirrorUrls": [],
"filesize": 491284,
"hashValue": "b667086ed49579592d435df2b486fe30ba1b62ddd169f19e700cd079239747dd3e20058c285fa9c10a533e34f22b5198ed9b1f92ae560a3067f3e3feacc724f1"
},
diff -Nru firefox-esr-128.5.0esr/toolkit/content/gmp-sources/widevinecdm.json firefox-esr-128.6.0esr/toolkit/content/gmp-sources/widevinecdm.json
--- firefox-esr-128.5.0esr/toolkit/content/gmp-sources/widevinecdm.json 2024-11-18 16:35:33.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/content/gmp-sources/widevinecdm.json 2024-12-18 15:38:40.000000000 +0000
@@ -1,40 +1,55 @@
{
"hashFunction": "sha512",
- "name": "Widevine-4.10.2710.0",
+ "name": "Widevine-4.10.2830.0",
"schema_version": 1000,
"vendors": {
"gmp-widevinecdm": {
"platforms": {
"Darwin_aarch64-gcc3": {
- "fileUrl": "https://redirector.gvt1.com/edgedl/widevine-cdm/4.10.2710.0-mac-arm64.zip",
- "filesize": 14190373,
- "hashValue": "3aa1e3e34abffb781fbbcb411a0381a4eb641793042987a8b6bcffdb2c366b52b0cb059c36dceff7146e80fbb98c5ccb2f98af726ce2619fa7bbd4b1d388414e"
+ "fileUrl": "https://edgedl.me.gvt1.com/edgedl/release2/chrome_component/dhuvyipbjqknanqk7f3zqnv4ku_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_mac_arm64_lt3covpsgi3bctnfic74bafcxa.crx3",
+ "mirrorUrls": [
+ "https://www.google.com/dl/release2/chrome_component/dhuvyipbjqknanqk7f3zqnv4ku_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_mac_arm64_lt3covpsgi3bctnfic74bafcxa.crx3"
+ ],
+ "filesize": 14171021,
+ "hashValue": "b960132db31c5ca04f678992a970d415deae3dc8f90b37c61d2d4b67e7a41588f69c08c59476f0a92c765f0d18733bc90ee0786eece936122007a51e609020d6"
},
"Darwin_x86_64-gcc3": {
"alias": "Darwin_x86_64-gcc3-u-i386-x86_64"
},
"Darwin_x86_64-gcc3-u-i386-x86_64": {
- "fileUrl": "https://redirector.gvt1.com/edgedl/widevine-cdm/4.10.2710.0-mac-x64.zip",
- "filesize": 14934332,
- "hashValue": "02e2e5d30cd35d74c8a32192d48b35863bcc71756a323eab84a3c71acfd41dcb56bbb18a0555139cd111f74f7d18dcd821a89f3be0a34b7517fadeaf8b535ac0"
+ "fileUrl": "https://edgedl.me.gvt1.com/edgedl/release2/chrome_component/huwtmpvskwwuqnqp6gacinr2pu_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_mac64_ldaompc5meaw6wtyokr33tsf2u.crx3",
+ "mirrorUrls": [
+ "https://www.google.com/dl/release2/chrome_component/huwtmpvskwwuqnqp6gacinr2pu_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_mac64_ldaompc5meaw6wtyokr33tsf2u.crx3"
+ ],
+ "filesize": 14873746,
+ "hashValue": "681cc2da76bdf84a3dd53aad1b93dd96dc9ce0e75d3297bfc82c09c336ccf022cefdcf327d27f60a514e1f71f373f18812bf632cedf40105dfa6821426853020"
},
"Linux_x86_64-gcc3": {
- "fileUrl": "https://redirector.gvt1.com/edgedl/widevine-cdm/4.10.2710.0-linux-x64.zip",
- "filesize": 13922119,
- "hashValue": "661ad969099a89a278384f56a17ae912c3542d585ea4981f3b9a3c6e1a07f8da6ffad9db29cee194bf7834adc3ca258c775cd2b0980e3e6cb7ee8b39600dad58"
+ "fileUrl": "https://edgedl.me.gvt1.com/edgedl/release2/chrome_component/pjnu5jyln4kujhcmwstuyyvyyu_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_linux_ace35m3jiw32bj5wzzow5nia7yta.crx3",
+ "mirrorUrls": [
+ "https://www.google.com/dl/release2/chrome_component/pjnu5jyln4kujhcmwstuyyvyyu_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_linux_ace35m3jiw32bj5wzzow5nia7yta.crx3"
+ ],
+ "filesize": 14157618,
+ "hashValue": "9f1fe2c912897bc644f936170eaa6a2cb13772e9456e377ebcb489ae58b85ce8095d7584c8e51658857e90e06b33f7e8005af58f6e91fe93bae752f3fe561ec6"
},
"Linux_x86_64-gcc3-asan": {
"alias": "Linux_x86_64-gcc3"
},
"WINNT_aarch64-msvc-aarch64": {
- "fileUrl": "https://redirector.gvt1.com/edgedl/widevine-cdm/4.10.2710.0-win-arm64.zip",
- "filesize": 13900511,
- "hashValue": "0f42c5dc0e040036653501fe32cb646123a1018804af4d8890d71bbd716c4e379a81a7d70c0cc5ca4b6ec3aa9cc2612cbc7599f63cbee5c82b03de499df3742e"
+ "fileUrl": "https://edgedl.me.gvt1.com/edgedl/release2/chrome_component/jglkcuy6uzlia2enwfqikazvyq_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_win_arm64_hoeiownwxmiaevbnk2xz3nasri.crx3",
+ "mirrorUrls": [
+ "https://www.google.com/dl/release2/chrome_component/jglkcuy6uzlia2enwfqikazvyq_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_win_arm64_hoeiownwxmiaevbnk2xz3nasri.crx3"
+ ],
+ "filesize": 13934163,
+ "hashValue": "2057c7cfe61b0a55a46db7895aa25fc9a69daed5b924590c6e89700dd41914f22adaa1fec284577e615b0af3da83986d5ee19d405aa2ca57bf13c0b6afabd03d"
},
"WINNT_x86-msvc": {
- "fileUrl": "https://redirector.gvt1.com/edgedl/widevine-cdm/4.10.2710.0-win-x86.zip",
- "filesize": 14250607,
- "hashValue": "5e4b8672e9fd6bf7db4c85d7d49bf28a5ca2ed352238fe93610205d16c9af67855aa0b02c71b7410ad45716410fa540ddf5046201f0ff052b2c2374b4c9a4760"
+ "fileUrl": "https://edgedl.me.gvt1.com/edgedl/release2/chrome_component/adwxj5t3i5sknzmzrdcts2ahocna_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_win32_pi7fbtgomadufx37pziz5b3buy.crx3",
+ "mirrorUrls": [
+ "https://www.google.com/dl/release2/chrome_component/adwxj5t3i5sknzmzrdcts2ahocna_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_win32_pi7fbtgomadufx37pziz5b3buy.crx3"
+ ],
+ "filesize": 14087836,
+ "hashValue": "986aa5c6e07e121176e05e1408241f8f3b7288c10ef154a270b0c327a8b0aeb867c963a5235bf80c244457a3e98833ef4a943a91e6bb9af7c52e13343738ac63"
},
"WINNT_x86-msvc-x64": {
"alias": "WINNT_x86-msvc"
@@ -43,9 +58,12 @@
"alias": "WINNT_x86-msvc"
},
"WINNT_x86_64-msvc": {
- "fileUrl": "https://redirector.gvt1.com/edgedl/widevine-cdm/4.10.2710.0-win-x64.zip",
- "filesize": 14485862,
- "hashValue": "59521f8c61236641b3299ab460c58c8f5f26fa67e828de853c2cf372f9614d58b9f541aae325b1600ec4f3a47953caacb8122b0dfce7481acfec81045735947d"
+ "fileUrl": "https://edgedl.me.gvt1.com/edgedl/release2/chrome_component/acccxbt6wwsvpxzpob4hojndwkqq_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_win64_dldxogwi36sxwpr57ta4lg57z4.crx3",
+ "mirrorUrls": [
+ "https://www.google.com/dl/release2/chrome_component/acccxbt6wwsvpxzpob4hojndwkqq_4.10.2830.0/oimompecagnajdejgnnjijobebaeigek_4.10.2830.0_win64_dldxogwi36sxwpr57ta4lg57z4.crx3"
+ ],
+ "filesize": 14507539,
+ "hashValue": "03105dcf804e4713b6ed7c281ad0343ac6d6eb2aed57a897c6a09515a8c7f3e06b344563e224365dc9159cfd8ed3ef665d6aec18cc07aaad66eed0dc4957dde3"
},
"WINNT_x86_64-msvc-x64": {
"alias": "WINNT_x86_64-msvc"
@@ -54,7 +72,7 @@
"alias": "WINNT_x86_64-msvc"
}
},
- "version": "4.10.2710.0"
+ "version": "4.10.2830.0"
}
}
}
diff -Nru firefox-esr-128.5.0esr/toolkit/content/gmp-sources/widevinecdm_l1.json firefox-esr-128.6.0esr/toolkit/content/gmp-sources/widevinecdm_l1.json
--- firefox-esr-128.5.0esr/toolkit/content/gmp-sources/widevinecdm_l1.json 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/content/gmp-sources/widevinecdm_l1.json 2024-12-18 15:38:39.000000000 +0000
@@ -6,7 +6,10 @@
"gmp-widevinecdm-l1": {
"platforms": {
"WINNT_x86_64-msvc": {
- "fileUrl": "https://redirector.gvt1.com/edgedl/release2/chrome_component/imoffpf67hel7kbknqflao2oo4_1.0.2738.0/neifaoindggfcjicffkgpmnlppeffabd_1.0.2738.0_win64_kj4dp5kifwxbdodqls7e5nzhtm.crx3",
+ "fileUrl": "https://edgedl.me.gvt1.com/edgedl/release2/chrome_component/imoffpf67hel7kbknqflao2oo4_1.0.2738.0/neifaoindggfcjicffkgpmnlppeffabd_1.0.2738.0_win64_kj4dp5kifwxbdodqls7e5nzhtm.crx3",
+ "mirrorUrls": [
+ "https://www.google.com/dl/release2/chrome_component/imoffpf67hel7kbknqflao2oo4_1.0.2738.0/neifaoindggfcjicffkgpmnlppeffabd_1.0.2738.0_win64_kj4dp5kifwxbdodqls7e5nzhtm.crx3"
+ ],
"filesize": 1181927,
"hashValue": "4fd27594c459fb1cd94a857be10f7d1d6216dbf202cd43e8a3fa395a268c72fc5f5c456c9cb314f2220d766af741db469c8bb106acbed419149a44a3b87619f1"
},
diff -Nru firefox-esr-128.5.0esr/toolkit/library/build/dependentlibs.py firefox-esr-128.6.0esr/toolkit/library/build/dependentlibs.py
--- firefox-esr-128.5.0esr/toolkit/library/build/dependentlibs.py 2024-11-18 16:35:33.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/library/build/dependentlibs.py 2024-12-18 15:38:40.000000000 +0000
@@ -95,6 +95,24 @@
return deps
+def is_skiplisted(dep):
+ # Skip the ICU data DLL because preloading it at startup
+ # leads to startup performance problems because of its excessive
+ # size (around 10MB).
+ if dep.startswith("icu"):
+ return True
+ # Skip the MSVC Runtimes. See bug #1921713.
+ if substs.get("WIN32_REDIST_DIR"):
+ for runtime in [
+ "MSVC_C_RUNTIME_DLL",
+ "MSVC_C_RUNTIME_1_DLL",
+ "MSVC_CXX_RUNTIME_DLL",
+ ]:
+ dll = substs.get(runtime)
+ if dll and dep == dll:
+ return True
+
+
def dependentlibs(lib, libpaths, func):
"""For a given library, returns the list of recursive dependencies that can
be found in the given list of paths, followed by the library itself."""
@@ -108,10 +126,7 @@
deppath = os.path.join(dir, dep)
if os.path.exists(deppath):
deps.update(dependentlibs(deppath, libpaths, func))
- # Black list the ICU data DLL because preloading it at startup
- # leads to startup performance problems because of its excessive
- # size (around 10MB).
- if not dep.startswith(("icu")):
+ if not is_skiplisted(dep):
deps[dep] = deppath
break
diff -Nru firefox-esr-128.5.0esr/toolkit/modules/GMPInstallManager.sys.mjs firefox-esr-128.6.0esr/toolkit/modules/GMPInstallManager.sys.mjs
--- firefox-esr-128.5.0esr/toolkit/modules/GMPInstallManager.sys.mjs 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/modules/GMPInstallManager.sys.mjs 2024-12-18 15:38:40.000000000 +0000
@@ -137,6 +137,7 @@
return {
id: conf.id,
URL: details.fileUrl,
+ mirrorURLs: details.mirrorUrls,
hashFunction: addons.hashFunction,
hashValue: details.hashValue,
version: addons.vendors[conf.id].version,
@@ -521,6 +522,7 @@
// Update the addon with the final URL and the extracted version.
gmpAddon.URL = redirectUrl;
+ gmpAddon.mirrorURLs = [];
gmpAddon.version = version;
gmpAddon.usedChromiumUpdate = true;
diff -Nru firefox-esr-128.5.0esr/toolkit/modules/tests/browser/browser_web_channel.js firefox-esr-128.6.0esr/toolkit/modules/tests/browser/browser_web_channel.js
--- firefox-esr-128.5.0esr/toolkit/modules/tests/browser/browser_web_channel.js 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/modules/tests/browser/browser_web_channel.js 2024-12-18 15:38:39.000000000 +0000
@@ -425,14 +425,13 @@
},
},
{
- desc: "WebChannel disallows non-string message from non-whitelisted origin",
+ desc: "WebChannel disallows non-string messages",
async run() {
/**
* This test ensures that non-string messages can't be sent via WebChannels.
- * We create a page (on a non-whitelisted origin) which should send us two
- * messages immediately. The first message has an object for it's detail,
- * and the second has a string. We check that we only get the second
- * message.
+ * We create a page which should send us two messages immediately. The first
+ * message has an object for its detail, and the second has a string. We
+ * check that we only get the second message.
*/
let channel = new WebChannel("objects", Services.io.newURI(HTTP_PATH));
let testDonePromise = new Promise(resolve => {
@@ -452,51 +451,6 @@
channel.stopListening();
}
);
- },
- },
- {
- desc: "WebChannel allows both string and non-string message from whitelisted origin",
- async run() {
- /**
- * Same process as above, but we whitelist the origin before loading the page,
- * and expect to get *both* messages back (each exactly once).
- */
- let channel = new WebChannel("objects", Services.io.newURI(HTTP_PATH));
-
- let testDonePromise = new Promise((resolve, reject) => {
- let sawObject = false;
- let sawString = false;
- channel.listen((id, message) => {
- is(id, "objects");
- if (message.type === "object") {
- ok(!sawObject);
- sawObject = true;
- } else if (message.type === "string") {
- ok(!sawString);
- sawString = true;
- } else {
- reject(new Error(`Unknown message type: ${message.type}`));
- }
- if (sawObject && sawString) {
- resolve();
- }
- });
- });
- const webchannelWhitelistPref = "webchannel.allowObject.urlWhitelist";
- let origWhitelist = Services.prefs.getCharPref(webchannelWhitelistPref);
- let newWhitelist = origWhitelist + " " + HTTP_PATH;
- Services.prefs.setCharPref(webchannelWhitelistPref, newWhitelist);
- await BrowserTestUtils.withNewTab(
- {
- gBrowser,
- url: HTTP_PATH + HTTP_ENDPOINT + "?object",
- },
- async function () {
- await testDonePromise;
- Services.prefs.setCharPref(webchannelWhitelistPref, origWhitelist);
- channel.stopListening();
- }
- );
},
},
{
diff -Nru firefox-esr-128.5.0esr/toolkit/modules/tests/xpcshell/test_GMPInstallManager.js firefox-esr-128.6.0esr/toolkit/modules/tests/xpcshell/test_GMPInstallManager.js
--- firefox-esr-128.5.0esr/toolkit/modules/tests/xpcshell/test_GMPInstallManager.js 2024-11-18 16:35:35.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/modules/tests/xpcshell/test_GMPInstallManager.js 2024-12-18 15:38:40.000000000 +0000
@@ -577,16 +577,34 @@
// Smoke test the results are as expected.
// If the checkForAddons fails we'll get a fallback config,
// so we'll get incorrect addons and these asserts will fail.
- Assert.equal(res.addons.length, 5);
+ Assert.equal(res.addons.length, 7);
Assert.equal(res.addons[0].id, "test1");
Assert.equal(res.addons[0].usedFallback, false);
+ Assert.deepEqual(res.addons[0].mirrorURLs, []);
Assert.equal(res.addons[1].id, "test2");
Assert.equal(res.addons[1].usedFallback, false);
+ Assert.deepEqual(res.addons[1].mirrorURLs, []);
Assert.equal(res.addons[2].id, "test3");
Assert.equal(res.addons[2].usedFallback, false);
+ Assert.deepEqual(res.addons[2].mirrorURLs, []);
Assert.equal(res.addons[3].id, "test4");
Assert.equal(res.addons[3].usedFallback, false);
+ Assert.deepEqual(res.addons[3].mirrorURLs, []);
Assert.equal(res.addons[4].id, undefined);
+ Assert.equal(res.addons[4].usedFallback, false);
+ Assert.deepEqual(res.addons[4].mirrorURLs, []);
+ Assert.equal(res.addons[5].id, "test6");
+ Assert.equal(res.addons[5].usedFallback, false);
+ Assert.deepEqual(res.addons[5].mirrorURLs, [
+ "http://alt.example.com/test6.xpi",
+ ]);
+ Assert.equal(res.addons[5].mirrorURLs.length, 1);
+ Assert.equal(res.addons[6].id, "test7");
+ Assert.equal(res.addons[6].usedFallback, false);
+ Assert.deepEqual(res.addons[6].mirrorURLs, [
+ "http://alt.example.com/test7.xpi",
+ "http://alt2.example.com/test7.xpi",
+ ]);
} catch (e) {
Assert.ok(false, "checkForAddons should succeed");
}
@@ -646,14 +664,33 @@
if (res.addons.length == 1) {
Assert.equal(res.addons[0].id, "gmp-widevinecdm");
Assert.equal(res.addons[0].usedFallback, true);
+ Assert.ok(res.addons[0].URL.startsWith("https://edgedl.me.gvt1.com"));
+ Assert.equal(res.addons[0].mirrorURLs.length, 1);
+ Assert.ok(
+ res.addons[0].mirrorURLs[0].startsWith("https://www.google.com")
+ );
} else {
Assert.equal(res.addons[0].id, "gmp-gmpopenh264");
Assert.equal(res.addons[0].usedFallback, true);
+ Assert.ok(
+ res.addons[0].URL.startsWith("http://ciscobinary.openh264.org")
+ );
+ Assert.deepEqual(res.addons[0].mirrorURLs, []);
Assert.equal(res.addons[1].id, "gmp-widevinecdm");
Assert.equal(res.addons[1].usedFallback, true);
+ Assert.ok(res.addons[1].URL.startsWith("https://edgedl.me.gvt1.com"));
+ Assert.equal(res.addons[1].mirrorURLs.length, 1);
+ Assert.ok(
+ res.addons[1].mirrorURLs[0].startsWith("https://www.google.com")
+ );
if (res.addons.length >= 3) {
Assert.equal(res.addons[2].id, "gmp-widevinecdm-l1");
Assert.equal(res.addons[2].usedFallback, true);
+ Assert.ok(res.addons[2].URL.startsWith("https://edgedl.me.gvt1.com"));
+ Assert.equal(res.addons[2].mirrorURLs.length, 1);
+ Assert.ok(
+ res.addons[2].mirrorURLs[0].startsWith("https://www.google.com")
+ );
}
}
} catch (e) {
@@ -1019,17 +1056,27 @@
*/
async function test_checkForAddons_installAddon(
id,
- includeSize,
- wantInstallReject
+ sizeConfig,
+ defaultConfig,
+ mirrorConfig,
+ secondMirrorConfig,
+ expectedError
) {
info(
"Running installAddon for id: " +
id +
- ", includeSize: " +
- includeSize +
- " and wantInstallReject: " +
- wantInstallReject
+ ", sizeConfig: " +
+ sizeConfig +
+ ", defaultConfig: " +
+ defaultConfig +
+ ", mirrorConfig: " +
+ mirrorConfig +
+ ", secondMirrorConfig: " +
+ secondMirrorConfig +
+ ", expectedError: " +
+ expectedError
);
+
let httpServer = new HttpServer();
let dir = FileUtils.getDir("TmpD", []);
httpServer.registerDirectory("/", dir);
@@ -1045,10 +1092,45 @@
let hashFunc = "sha256";
let expectedDigest = await IOUtils.computeHexDigest(zipFile.path, hashFunc);
let fileSize = zipFile.fileSize;
- if (wantInstallReject) {
+ if (sizeConfig === "mismatch") {
fileSize = 1;
}
+ let badZipURL;
+ let badZipFileName;
+ let badZipFile;
+ if (
+ defaultConfig === "mismatch" ||
+ mirrorConfig === "mismatch" ||
+ secondMirrorConfig === "mismatch"
+ ) {
+ let badData = "e~=0.5772156648";
+ badZipFileName = "test_" + id + "_bad_GMP.zip";
+ badZipFile = createNewZipFile(badZipFileName, badData);
+ badZipURL = URL_HOST + ":" + testserverPort + "/" + badZipFileName;
+ }
+
+ let missingZipURL = zipURL + ".missing";
+
+ function selectUrl(config) {
+ switch (config) {
+ case "success":
+ return zipURL;
+ case "not_found":
+ return missingZipURL;
+ case "mismatch":
+ return badZipURL;
+ case "none":
+ return null;
+ default:
+ throw new Error("bad config " + config);
+ }
+ }
+
+ let defaultURL = selectUrl(defaultConfig);
+ let mirrorURL = selectUrl(mirrorConfig);
+ let secondMirrorURL = selectUrl(secondMirrorConfig);
+
let responseXML =
'' +
"" +
@@ -1056,17 +1138,20 @@
' ' +
+ (sizeConfig !== "none" ? ' size="' + fileSize + '"' : "") +
+ ' version="1.1">' +
+ (mirrorURL ? ' ' : "") +
+ (secondMirrorURL
+ ? ' '
+ : "") +
+ " " +
" " +
"";
@@ -1082,7 +1167,7 @@
try {
let extractedPaths = await installManager.installAddon(gmpAddon);
- if (wantInstallReject) {
+ if (sizeConfig === "mismatch") {
Assert.ok(false); // installAddon() should have thrown.
}
Assert.equal(extractedPaths.length, 1);
@@ -1120,20 +1205,333 @@
// Cleanup
extractedFile.parent.remove(true);
- zipFile.remove(false);
httpServer.stop(function () {});
installManager.uninit();
+ Assert.equal(expectedError, null, "Succeeded without errors");
} catch (ex) {
+ Assert.ok(
+ ex?.message?.match(expectedError),
+ ex?.message + " matches " + expectedError
+ );
+ } finally {
zipFile.remove(false);
- if (!wantInstallReject) {
- do_throw("install update should not reject " + ex.message);
+ if (badZipFile) {
+ badZipFile.remove(false);
}
}
}
-add_task(test_checkForAddons_installAddon.bind(null, "1", true, false));
-add_task(test_checkForAddons_installAddon.bind(null, "2", false, false));
-add_task(test_checkForAddons_installAddon.bind(null, "3", true, true));
+add_task(
+ async function test_checkForAddons_installAddon_includeSize_successURL_noMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "includeSize_successURL_noMirror",
+ /* sizeConfig */ "include",
+ /* defaultConfig */ "success",
+ /* mirrorConfig */ "none",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_successURL_noMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_successURL_noMirror",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "success",
+ /* mirrorConfig */ "none",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_mismatchSize_successURL_noMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "mismatchSize_successURL_noMirror",
+ /* sizeConfig */ "mismatch",
+ /* defaultConfig */ "success",
+ /* mirrorConfig */ "none",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ /Downloaded file was \d+ bytes but expected \d+ bytes/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_includeSize_notFoundURL_noMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "includeSize_notFoundURL_noMirror",
+ /* sizeConfig */ "include",
+ /* defaultConfig */ "not_found",
+ /* mirrorConfig */ "none",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ /File download failed/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_notFoundURL_noMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_notFoundURL_noMirror",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "not_found",
+ /* mirrorConfig */ "none",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ /File download failed/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_includeSize_mismatchURL_noMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "includeSize_mismatchURL_noMirror",
+ /* sizeConfig */ "include",
+ /* defaultConfig */ "mismatch",
+ /* mirrorConfig */ "none",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ /Hash was [\w`]+ but expected [\w`]+/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_mismatchURL_noMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_mismatchURL_noMirror",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "mismatch",
+ /* mirrorConfig */ "none",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ /Hash was [\w`]+ but expected [\w`]+/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_includeSize_successURL_successMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "includeSize_successURL_successMirror",
+ /* sizeConfig */ "include",
+ /* defaultConfig */ "success",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_successURL_successMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_successURL_successMirror",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "success",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_mismatchSize_successURL_successMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "mismatchSize_successURL_successMirror",
+ /* sizeConfig */ "mismatch",
+ /* defaultConfig */ "success",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ /Downloaded file was \d+ bytes but expected \d+ bytes/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_includeSize_notFoundURL_successMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "includeSize_notFoundURL_successMirror",
+ /* sizeConfig */ "include",
+ /* defaultConfig */ "not_found",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_notFoundURL_successMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_notFoundURL_successMirror",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "not_found",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_mismatchSize_notFoundURL_successMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "mismatchSize_notFoundURL_successMirror",
+ /* sizeConfig */ "mismatch",
+ /* defaultConfig */ "not_found",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ /File download failed/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_includeSize_mismatchURL_successMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "includeSize_mismatchURL_successMirror",
+ /* sizeConfig */ "include",
+ /* defaultConfig */ "mismatch",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_mismatchURL_successMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_mismatchURL_successMirror",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "mismatch",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_mismatchSize_mismatchURL_successMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "mismatchSize_mismatchURL_successMirror",
+ /* sizeConfig */ "mismatch",
+ /* defaultConfig */ "mismatch",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ /Downloaded file was \d+ bytes but expected \d+ bytes/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_mismatchURL_mismatchMirror() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_mismatchURL_mismatchMirror",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "mismatch",
+ /* mirrorConfig */ "mismatch",
+ /* secondMirrorConfig */ "none",
+ /* expectedError */ /Hash was [\w`]+ but expected [\w`]+/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_notFoundURL_notFoundMirrors() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_notFoundURL_notFoundMirrors",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "not_found",
+ /* mirrorConfig */ "not_found",
+ /* secondMirrorConfig */ "not_found",
+ /* expectedError */ /File download failed/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_notFoundURL_notFoundAndSuccessMirrors() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_notFoundURL_notFoundAndSuccessMirrors",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "not_found",
+ /* mirrorConfig */ "not_found",
+ /* secondMirrorConfig */ "success",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_mismatchURL_mismatchMirrors() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_mismatchURL_mismatchMirrors",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "mismatch",
+ /* mirrorConfig */ "mismatch",
+ /* secondMirrorConfig */ "mismatch",
+ /* expectedError */ /Hash was [\w`]+ but expected [\w`]+/
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_noSize_mismatchURL_mismatchAndSuccessMirrors() {
+ await test_checkForAddons_installAddon(
+ /* id */ "noSize_mismatchURL_mismatchAndSuccessMirrors",
+ /* sizeConfig */ "none",
+ /* defaultConfig */ "mismatch",
+ /* mirrorConfig */ "mismatch",
+ /* secondMirrorConfig */ "success",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_includeSize_successURL_notFoundMirrors() {
+ await test_checkForAddons_installAddon(
+ /* id */ "includeSize_successURL_notFoundMirrors",
+ /* sizeConfig */ "include",
+ /* defaultConfig */ "success",
+ /* mirrorConfig */ "not_found",
+ /* secondMirrorConfig */ "not_found",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_includeSize_successURL_mismatchMirrors() {
+ await test_checkForAddons_installAddon(
+ /* id */ "includeSize_successURL_mismatchMirrors",
+ /* sizeConfig */ "include",
+ /* defaultConfig */ "success",
+ /* mirrorConfig */ "mismatch",
+ /* secondMirrorConfig */ "mismatch",
+ /* expectedError */ null
+ );
+ }
+);
+
+add_task(
+ async function test_checkForAddons_installAddon_includeSize_mismatchURL_successAndMismatchMirrors() {
+ await test_checkForAddons_installAddon(
+ /* id */ "includeSize_mismatchURL_successAndMismatchMirrors",
+ /* sizeConfig */ "include",
+ /* defaultConfig */ "mismatch",
+ /* mirrorConfig */ "success",
+ /* secondMirrorConfig */ "mismatch",
+ /* expectedError */ null
+ );
+ }
+);
/**
* Tests simpleCheckAndInstall when autoupdate is disabled for a GMP
@@ -1633,7 +2031,7 @@
// `cat toolkit/mozapps/extensions/test/xpcshell/data/productaddons/good.xml | ./mach python security/manager/ssl/tests/unit/test_content_signing/pysign.py`
// If test certificates are regenerated, this signature must also be.
const goodXmlContentSignature =
- "7QYnPqFoOlS02BpDdIRIljzmPr6BFwPs1z1y8KJUBlnU7EVG6FbnXmVVt5Op9wDzgvhXX7th8qFJvpPOZs_B_tHRDNJ8SK0HN95BAN15z3ZW2r95SSHmU-fP2JgoNOR3";
+ "7QYnPqFoOlS02BpDdIRIljzmPr6BFwPs1z1y8KJUBlnU7EVG6FbnXmVVt5Op9wDzHeN7pJOM7ANmTqU50IbHnV8q87wmY83QL4p6NZzjsFnWolFmwK2ZjlLnhyxFcVSz";
// Setup endpoint to handle x5u lookups correctly.
const validX5uPath = "/valid_x5u";
diff -Nru firefox-esr-128.5.0esr/toolkit/mozapps/extensions/internal/ProductAddonChecker.sys.mjs firefox-esr-128.6.0esr/toolkit/mozapps/extensions/internal/ProductAddonChecker.sys.mjs
--- firefox-esr-128.5.0esr/toolkit/mozapps/extensions/internal/ProductAddonChecker.sys.mjs 2024-11-18 16:35:35.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/mozapps/extensions/internal/ProductAddonChecker.sys.mjs 2024-12-18 15:38:40.000000000 +0000
@@ -386,7 +386,7 @@
let results = [];
let addonList = document.querySelectorAll("updates:root > addons > addon");
for (let addonElement of addonList) {
- let addon = {};
+ let addon = { mirrorURLs: [] };
for (let name of [
"id",
@@ -402,6 +402,13 @@
}
addon.size = Number(addon.size) || undefined;
+ let mirrorList = addonElement.querySelectorAll("mirror");
+ for (let mirrorElement of mirrorList) {
+ if (mirrorElement.hasAttribute("URL")) {
+ addon.mirrorURLs.push(mirrorElement.getAttribute("URL"));
+ }
+ }
+
results.push(addon);
}
@@ -479,6 +486,26 @@
});
}
+async function downloadAndVerifyFile(addon, url, options) {
+ logger.info(`Try to download addon ${addon.id} from ${url}`);
+ let path;
+ try {
+ path = await downloadFile(url, options);
+ } catch (e) {
+ logger.warn(`Failed to download addon ${addon.id} from ${url}: ${e}`);
+ throw e;
+ }
+
+ try {
+ await verifyFile(addon, path);
+ return path;
+ } catch (e) {
+ logger.warn(`Failed to verify addon ${addon.id} from ${url}: ${e}`);
+ await IOUtils.remove(path);
+ throw e;
+ }
+}
+
/**
* Verifies that a downloaded file matches what was expected.
*
@@ -577,12 +604,16 @@
* with a JS exception in case of error.
*/
async downloadAddon(addon, options = { httpsOnlyNoUpgrade: false }) {
- let path = await downloadFile(addon.URL, options);
try {
- await verifyFile(addon, path);
- return path;
+ return await downloadAndVerifyFile(addon, addon.URL, options);
} catch (e) {
- await IOUtils.remove(path);
+ for (const url of addon.mirrorURLs) {
+ try {
+ return await downloadAndVerifyFile(addon, url, options);
+ } catch {
+ // Already logged; ignore error and continue.
+ }
+ }
throw e;
}
},
diff -Nru firefox-esr-128.5.0esr/toolkit/mozapps/extensions/test/xpcshell/data/productaddons/good.xml firefox-esr-128.6.0esr/toolkit/mozapps/extensions/test/xpcshell/data/productaddons/good.xml
--- firefox-esr-128.5.0esr/toolkit/mozapps/extensions/test/xpcshell/data/productaddons/good.xml 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/mozapps/extensions/test/xpcshell/data/productaddons/good.xml 2024-12-18 15:38:40.000000000 +0000
@@ -7,5 +7,12 @@
+
+
+
+
+
+
+
diff -Nru firefox-esr-128.5.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker.js firefox-esr-128.6.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker.js
--- firefox-esr-128.5.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker.js 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker.js 2024-12-18 15:38:40.000000000 +0000
@@ -124,8 +124,7 @@
let res = await ProductAddonChecker.getProductAddonList(root + "good.xml");
Assert.ok(Array.isArray(res.addons));
- // There are three valid entries in the XML
- Assert.equal(res.addons.length, 5);
+ Assert.equal(res.addons.length, 7);
let addon = res.addons[0];
Assert.equal(addon.id, "test1");
@@ -134,6 +133,7 @@
Assert.equal(addon.hashValue, undefined);
Assert.equal(addon.version, undefined);
Assert.equal(addon.size, undefined);
+ Assert.deepEqual(addon.mirrorURLs, []);
addon = res.addons[1];
Assert.equal(addon.id, "test2");
@@ -142,6 +142,7 @@
Assert.equal(addon.hashValue, "djhfgsjdhf");
Assert.equal(addon.version, undefined);
Assert.equal(addon.size, undefined);
+ Assert.deepEqual(addon.mirrorURLs, []);
addon = res.addons[2];
Assert.equal(addon.id, "test3");
@@ -150,6 +151,7 @@
Assert.equal(addon.hashValue, undefined);
Assert.equal(addon.version, "1.0");
Assert.equal(addon.size, 45);
+ Assert.deepEqual(addon.mirrorURLs, []);
addon = res.addons[3];
Assert.equal(addon.id, "test4");
@@ -158,6 +160,7 @@
Assert.equal(addon.hashValue, undefined);
Assert.equal(addon.version, undefined);
Assert.equal(addon.size, undefined);
+ Assert.deepEqual(addon.mirrorURLs, []);
addon = res.addons[4];
Assert.equal(addon.id, undefined);
@@ -166,6 +169,28 @@
Assert.equal(addon.hashValue, undefined);
Assert.equal(addon.version, undefined);
Assert.equal(addon.size, undefined);
+ Assert.deepEqual(addon.mirrorURLs, []);
+
+ addon = res.addons[5];
+ Assert.equal(addon.id, "test6");
+ Assert.equal(addon.URL, "http://example.com/test6.xpi");
+ Assert.equal(addon.hashFunction, undefined);
+ Assert.equal(addon.hashValue, undefined);
+ Assert.equal(addon.version, undefined);
+ Assert.equal(addon.size, undefined);
+ Assert.deepEqual(addon.mirrorURLs, ["http://alt.example.com/test6.xpi"]);
+
+ addon = res.addons[6];
+ Assert.equal(addon.id, "test7");
+ Assert.equal(addon.URL, "http://example.com/test7.xpi");
+ Assert.equal(addon.hashFunction, undefined);
+ Assert.equal(addon.hashValue, undefined);
+ Assert.equal(addon.version, undefined);
+ Assert.equal(addon.size, undefined);
+ Assert.deepEqual(addon.mirrorURLs, [
+ "http://alt.example.com/test7.xpi",
+ "http://alt2.example.com/test7.xpi",
+ ]);
});
add_task(async function test_download_nourl() {
@@ -195,6 +220,20 @@
}
});
+add_task(async function test_download_mirror_missing() {
+ try {
+ let path = await ProductAddonChecker.downloadAddon({
+ URL: root + "nofile.xpi",
+ mirrorURLs: [root + "nofile.xpi"],
+ });
+
+ await IOUtils.remove(path);
+ do_throw("Should not have downloaded a missing file");
+ } catch (e) {
+ Assert.ok(true, "Should have thrown when downloading a missing file.");
+ }
+});
+
add_task(async function test_download_noverify() {
let path = await ProductAddonChecker.downloadAddon({
URL: root + "unsigned.xpi",
@@ -293,6 +332,29 @@
size: 452,
hashFunction: "sha256",
hashValue:
+ "9b9abf7ddfc1a6d7ffc7e0247481dcc202363e4445ad3494fb22036f1698c7f3",
+ });
+
+ let stat = await IOUtils.stat(path);
+ Assert.ok(stat.type !== "directory");
+
+ Assert.ok(
+ compareFiles(
+ do_get_file("data/productaddons/unsigned.xpi"),
+ new LocalFile(path)
+ )
+ );
+
+ await IOUtils.remove(path);
+});
+
+add_task(async function test_download_mirror_works() {
+ let path = await ProductAddonChecker.downloadAddon({
+ URL: root + "nofile.xpi",
+ mirrorURLs: [root + "unsigned.xpi"],
+ size: 452,
+ hashFunction: "sha256",
+ hashValue:
"9b9abf7ddfc1a6d7ffc7e0247481dcc202363e4445ad3494fb22036f1698c7f3",
});
diff -Nru firefox-esr-128.5.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker_signatures.js firefox-esr-128.6.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker_signatures.js
--- firefox-esr-128.5.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker_signatures.js 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/mozapps/extensions/test/xpcshell/test_ProductAddonChecker_signatures.js 2024-12-18 15:38:40.000000000 +0000
@@ -49,7 +49,7 @@
// `cat toolkit/mozapps/extensions/test/xpcshell/data/productaddons/good.xml | ./mach python security/manager/ssl/tests/unit/test_content_signing/pysign.py`
// If test certificates are regenerated, this signature must also be.
const goodXmlContentSignature =
- "7QYnPqFoOlS02BpDdIRIljzmPr6BFwPs1z1y8KJUBlnU7EVG6FbnXmVVt5Op9wDzgvhXX7th8qFJvpPOZs_B_tHRDNJ8SK0HN95BAN15z3ZW2r95SSHmU-fP2JgoNOR3";
+ "7QYnPqFoOlS02BpDdIRIljzmPr6BFwPs1z1y8KJUBlnU7EVG6FbnXmVVt5Op9wDzHeN7pJOM7ANmTqU50IbHnV8q87wmY83QL4p6NZzjsFnWolFmwK2ZjlLnhyxFcVSz";
const goodXmlPath = "/good.xml";
// Requests use query strings to test different signature states.
diff -Nru firefox-esr-128.5.0esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in firefox-esr-128.6.0esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in
--- firefox-esr-128.5.0esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/xre/dllservices/mozglue/WindowsDllBlocklistDefs.in 2024-12-18 15:38:40.000000000 +0000
@@ -347,6 +347,9 @@
# old AMD JPEG decoder DLLs (bug 1328838)
DllBlocklistEntry("amf-wic-jpeg-decoder64.dll", ALL_VERSIONS),
DllBlocklistEntry("amf-wic-jpeg-decoder32.dll", ALL_VERSIONS),
+
+ # Qihoo 360 Total Security (bug 1934258)
+ DllBlocklistEntry("chromesafe64.dll", (2, 0, 0, 26)),
]
CHILD_PROCESSES += [
diff -Nru firefox-esr-128.5.0esr/toolkit/xre/nsAppRunner.cpp firefox-esr-128.6.0esr/toolkit/xre/nsAppRunner.cpp
--- firefox-esr-128.5.0esr/toolkit/xre/nsAppRunner.cpp 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/toolkit/xre/nsAppRunner.cpp 2024-12-18 15:38:39.000000000 +0000
@@ -2657,6 +2657,10 @@
rv = xpcom.SetWindowCreator(aNative);
NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE);
+# ifdef XP_MACOSX
+ InitializeMacApp();
+# endif
+
{ // extra scoping is needed so we release these components before xpcom
// shutdown
nsCOMPtr sbs =
@@ -2687,7 +2691,7 @@
return NS_ERROR_ABORT;
}
-#endif // MOZ_WIDGET_ANDROID
+#endif // MOZ_WIDGET_ANDROID
}
static ReturnAbortOnError ProfileLockedDialog(nsIFile* aProfileDir,
@@ -3241,6 +3245,10 @@
rv = xpcom.SetWindowCreator(aNative);
NS_ENSURE_SUCCESS(rv, rv);
+# ifdef XP_MACOSX
+ InitializeMacApp();
+# endif
+
{ // extra scoping is needed so we release these components before xpcom
// shutdown
bool hasSync = false;
diff -Nru firefox-esr-128.5.0esr/tools/lint/rejected-words.yml firefox-esr-128.6.0esr/tools/lint/rejected-words.yml
--- firefox-esr-128.5.0esr/tools/lint/rejected-words.yml 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/tools/lint/rejected-words.yml 2024-12-18 15:38:40.000000000 +0000
@@ -35,7 +35,6 @@
- browser/app/winlauncher/LauncherProcessWin.cpp
- browser/base/content/browser.js
- browser/base/content/contentTheme.js
- - browser/base/content/test/general/browser_remoteTroubleshoot.js
- browser/base/content/test/general/browser_tab_drag_drop_perwindow.js
- browser/base/content/test/performance/browser_preferences_usage.js
- browser/base/content/test/protectionsUI/browser_protectionsUI_cryptominers.js
@@ -234,7 +233,6 @@
- testing/raptor/browsertime/browsertime_scenario.js
- testing/web-platform/tests/tools/manifest/tests/test_manifest.py
- toolkit/actors/RemotePageChild.sys.mjs
- - toolkit/actors/WebChannelChild.sys.mjs
- toolkit/components/antitracking/docs/tracking-lists/index.md
- toolkit/components/antitracking/test/browser/browser_socialtracking_save_image.js
- toolkit/components/reputationservice/ApplicationReputation.cpp
@@ -270,7 +268,6 @@
- toolkit/content/tests/browser/browser_delay_autoplay_webAudio.js
- toolkit/modules/PermissionsUtils.sys.mjs
- toolkit/modules/tests/browser/browser_AsyncPrefs.js
- - toolkit/modules/tests/browser/browser_web_channel.js
- toolkit/modules/tests/xpcshell/test_PermissionsUtils.js
- toolkit/modules/third_party/jsesc/jsesc.mjs
- toolkit/modules/Troubleshoot.sys.mjs
diff -Nru firefox-esr-128.5.0esr/widget/gtk/nsDragService.cpp firefox-esr-128.6.0esr/widget/gtk/nsDragService.cpp
--- firefox-esr-128.5.0esr/widget/gtk/nsDragService.cpp 2024-11-18 16:35:35.000000000 +0000
+++ firefox-esr-128.6.0esr/widget/gtk/nsDragService.cpp 2024-12-18 15:38:40.000000000 +0000
@@ -62,7 +62,7 @@
using namespace mozilla::gfx;
// The maximum time to wait for a "drag_received" arrived in microseconds.
-#define NS_DND_TIMEOUT (5 * 1000000)
+#define NS_DND_TIMEOUT (1 * 1000000)
// The maximum time to wait before temporary files resulting
// from drag'n'drop events will be removed in miliseconds.
@@ -480,6 +480,18 @@
DragData::DragData(GdkAtom aDataFlavor, gchar** aDragUris)
: mDataFlavor(aDataFlavor), mAsURIData(true), mDragUris(aDragUris) {}
+bool DragData::IsDataValid() const {
+ if (mDragData) {
+ return mDragData.get() && mDragDataLen;
+ } else if (mDragUris) {
+ return !!(mDragUris.get()[0]);
+ } else if (mUris.Length()) {
+ return mUris.Length();
+ } else {
+ return false;
+ }
+}
+
#ifdef MOZ_LOGGING
void DragData::Print() const {
if (mDragData) {
@@ -1469,18 +1481,32 @@
aContext, GUniquePtr(gdk_atom_name(target)).get(),
mWaitingForDragDataRequests);
- auto cacheClear = MakeScopeExit([&] {
- LOGDRAGSERVICE(" failed to get data, MIME %s",
- GUniquePtr(gdk_atom_name(target)).get());
- mCachedDragData.Remove(target);
+ RefPtr dragData;
+
+ auto saveData = MakeScopeExit([&] {
+ if (dragData && !dragData->IsDataValid()) {
+ dragData = nullptr;
+ }
+ if (!dragData) {
+ LOGDRAGSERVICE(" failed to get data, MIME %s",
+ GUniquePtr(gdk_atom_name(target)).get());
+ return;
+ }
+ mCachedDragData.InsertOrUpdate(target, dragData);
});
- RefPtr dragData;
- if (gtk_targets_include_uri(&target, 1)) {
+ if (target == sTextUriListTypeAtom || target == sPortalFileAtom ||
+ target == sPortalFileTransferAtom) {
+ // Direct replace gtk_targets_include_uri() with explicit check.
+ // gtk_targets_include_uri() on old Gtk3 systems doesn't support
+ // portal filetypes.
if (target == sPortalFileAtom || target == sPortalFileTransferAtom) {
const guchar* data = gtk_selection_data_get_data(aSelectionData);
if (!data || data[0] == '\0') {
- LOGDRAGSERVICE(" TargetDataReceived() failed");
+ LOGDRAGSERVICE(
+ "nsDragSession::TargetDataReceived() failed to get file portal data"
+ " (%s)",
+ GUniquePtr(gdk_atom_name(target)).get());
return;
}
@@ -1528,9 +1554,6 @@
#if MOZ_LOGGING
dragData->Print();
#endif
-
- cacheClear.release();
- mCachedDragData.InsertOrUpdate(target, dragData);
}
static void TargetArrayAddTarget(nsTArray& aTargetArray,
diff -Nru firefox-esr-128.5.0esr/widget/gtk/nsDragService.h firefox-esr-128.6.0esr/widget/gtk/nsDragService.h
--- firefox-esr-128.5.0esr/widget/gtk/nsDragService.h 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/widget/gtk/nsDragService.h 2024-12-18 15:38:40.000000000 +0000
@@ -58,6 +58,8 @@
int GetURIsNum() const;
+ bool IsDataValid() const;
+
#ifdef MOZ_LOGGING
void Print() const;
#endif
diff -Nru firefox-esr-128.5.0esr/widget/windows/WinUtils.cpp firefox-esr-128.6.0esr/widget/windows/WinUtils.cpp
--- firefox-esr-128.5.0esr/widget/windows/WinUtils.cpp 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/widget/windows/WinUtils.cpp 2024-12-18 15:38:40.000000000 +0000
@@ -7,6 +7,7 @@
#include "WinUtils.h"
#include
+#include
#include
#include "gfxPlatform.h"
@@ -2070,6 +2071,23 @@
: nullptr;
}
+nsresult WinUtils::GetProcessImageName(DWORD aProcessId, nsAString& aName) {
+ nsAutoHandle procHandle(
+ ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, aProcessId));
+ if (!procHandle) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
+ wchar_t path[MAX_PATH] = {L'\0'};
+ auto len = ::GetProcessImageFileNameW(procHandle, path, std::size(path));
+ if (!len) {
+ return NS_ERROR_FAILURE;
+ }
+
+ aName = path;
+ return NS_OK;
+}
+
// Note to testers and/or test-authors: on Windows 10, and possibly on other
// versions as well, supplying the `WS_EX_LAYOUTRTL` flag here has no effect
// whatsoever on child common-dialogs **unless the system UI locale is also set
diff -Nru firefox-esr-128.5.0esr/widget/windows/WinUtils.h firefox-esr-128.6.0esr/widget/windows/WinUtils.h
--- firefox-esr-128.5.0esr/widget/windows/WinUtils.h 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/widget/windows/WinUtils.h 2024-12-18 15:38:40.000000000 +0000
@@ -566,6 +566,8 @@
static void GetClipboardFormatAsString(UINT aFormat, nsAString& aOutput);
+ static nsresult GetProcessImageName(DWORD aProcessId, nsAString& aName);
+
private:
static WhitelistVec BuildWhitelist();
diff -Nru firefox-esr-128.5.0esr/widget/windows/nsClipboard.cpp firefox-esr-128.6.0esr/widget/windows/nsClipboard.cpp
--- firefox-esr-128.5.0esr/widget/windows/nsClipboard.cpp 2024-11-18 16:35:34.000000000 +0000
+++ firefox-esr-128.6.0esr/widget/windows/nsClipboard.cpp 2024-12-18 15:38:39.000000000 +0000
@@ -393,6 +393,35 @@
}
}
+static void MaybeLogClipboardCurrentOwner(
+ const HRESULT aHres, const mozilla::StaticString& aMethodName) {
+ if (!MOZ_CLIPBOARD_LOG_ENABLED()) {
+ return;
+ }
+
+ if (aHres != CLIPBRD_E_CANT_OPEN) {
+ return;
+ }
+ auto hwnd = ::GetOpenClipboardWindow();
+ if (!hwnd) {
+ MOZ_CLIPBOARD_LOG(
+ "IDataObject::%s | Clipboard already opened by unknown process",
+ aMethodName.get());
+ return;
+ }
+ DWORD procId;
+ DWORD threadId = ::GetWindowThreadProcessId(hwnd, &procId);
+ NS_ENSURE_TRUE_VOID(threadId);
+ nsAutoString procName;
+ NS_ENSURE_SUCCESS_VOID(
+ mozilla::widget::WinUtils::GetProcessImageName(procId, procName));
+ MOZ_CLIPBOARD_LOG(
+ "IDataObject::%s | Clipboard already opened by HWND: %p | "
+ "Process ID: %lu | Thread ID: %lu | App name: %s",
+ aMethodName.get(), hwnd, procId, threadId,
+ NS_ConvertUTF16toUTF8(procName).get());
+}
+
// See
// .
static void LogOleGetClipboardResult(const HRESULT aHres) {
@@ -400,6 +429,7 @@
nsAutoCString hresString;
OleGetClipboardResultToString(aHres, hresString);
MOZ_CLIPBOARD_LOG("OleGetClipboard result: %s", hresString.get());
+ MaybeLogClipboardCurrentOwner(aHres, "OleGetClipboard");
}
}
@@ -438,6 +468,7 @@
nsAutoCString hresString;
OleSetClipboardResultToString(aHres, hresString);
MOZ_CLIPBOARD_LOG("OleSetClipboard result: %s", hresString.get());
+ MaybeLogClipboardCurrentOwner(aHres, "OleSetClipboard");
}
}
@@ -459,7 +490,9 @@
break;
}
- std::this_thread::sleep_for(std::chrono::milliseconds(kDelayInMs));
+ // TODO: This was formerly std::sleep_for, which wasn't actually sleeping
+ // in tests (bug 1927664).
+ ::SleepEx(kDelayInMs, TRUE);
}
return hres;
@@ -603,12 +636,13 @@
// See methods listed at
// .
static void LogIDataObjectMethodResult(const HRESULT aHres,
- const nsCString& aMethodName) {
+ mozilla::StaticString aMethodName) {
if (MOZ_CLIPBOARD_LOG_ENABLED()) {
nsAutoCString hresString;
IDataObjectMethodResultToString(aHres, hresString);
MOZ_CLIPBOARD_LOG("IDataObject::%s result : %s", aMethodName.get(),
hresString.get());
+ MaybeLogClipboardCurrentOwner(aHres, aMethodName);
}
}
@@ -623,8 +657,7 @@
LPSTGMEDIUM pSTM) {
return RepeatedlyTry(
[&aDataObject, &pFE, &pSTM]() { return aDataObject.GetData(pFE, pSTM); },
- std::bind(LogIDataObjectMethodResult, std::placeholders::_1,
- "GetData"_ns));
+ [](HRESULT hres) { LogIDataObjectMethodResult(hres, "GetData"); });
}
//-------------------------------------------------------------------------
@@ -638,7 +671,7 @@
// memory
HRESULT hres = S_FALSE;
hres = aDataObject->QueryGetData(pFE);
- LogIDataObjectMethodResult(hres, "QueryGetData"_ns);
+ LogIDataObjectMethodResult(hres, "QueryGetData");
if (S_OK == hres) {
hres = RepeatedlyTryGetData(*aDataObject, pFE, pSTM);
}