summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--accessible/windows/msaa/MsaaAccessible.cpp7
-rw-r--r--browser/base/content/browser.xhtml1
-rw-r--r--browser/base/content/webext-panels.xhtml2
-rw-r--r--browser/config/version.txt2
-rw-r--r--browser/config/version_display.txt2
-rw-r--r--browser/locales-preview/select-translations.ftl54
-rw-r--r--browser/locales/en-US/browser/translations.ftl93
-rw-r--r--browser/locales/jar.mn1
-rw-r--r--config/milestone.txt2
-rw-r--r--dom/canvas/CanvasRenderingContext2D.cpp12
-rw-r--r--dom/canvas/test/test_accelerated_canvas_context_loss.html12
-rw-r--r--dom/indexedDB/IDBFactory.cpp8
-rw-r--r--dom/indexedDB/IDBFactory.h2
-rw-r--r--dom/media/platforms/wmf/DXVA2Manager.cpp37
-rw-r--r--dom/webidl/IDBFactory.webidl1
-rw-r--r--gfx/thebes/DeviceManagerDx.cpp46
-rw-r--r--gfx/thebes/DeviceManagerDx.h1
-rw-r--r--js/src/jit-test/tests/arrays/bug1897150-1.js9
-rw-r--r--js/src/jit-test/tests/arrays/bug1897150-2.js9
-rw-r--r--js/src/jit/TrampolineNatives.cpp6
-rw-r--r--js/xpconnect/src/XPCJSRuntime.cpp3
-rw-r--r--mobile/android/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt2
-rw-r--r--mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt16
-rw-r--r--mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt13
-rw-r--r--mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt35
-rw-r--r--mobile/android/version.txt2
-rw-r--r--netwerk/ipc/DocumentLoadListener.cpp18
-rw-r--r--python/l10n/fluent_migrations/bug_1893022_select_translations_release.py34
-rw-r--r--security/certverifier/NSSCertDBTrustDomain.cpp10
-rw-r--r--services/settings/dumps/main/devtools-compatibility-browsers.json331
-rw-r--r--services/settings/dumps/main/translations-models.json284
-rw-r--r--services/settings/dumps/main/url-classifier-skip-urls.json2
-rw-r--r--services/settings/dumps/security-state/intermediates.json38
-rw-r--r--sourcestamp.txt4
-rw-r--r--toolkit/components/pdfjs/content/web/viewer-geckoview.mjs1
-rw-r--r--toolkit/components/pdfjs/content/web/viewer.mjs1
-rw-r--r--toolkit/crashreporter/client/app/src/config.rs86
-rw-r--r--toolkit/crashreporter/client/app/src/lang/omnijar.rs23
-rw-r--r--toolkit/crashreporter/client/app/src/net/legacy_telemetry.rs1
-rw-r--r--toolkit/crashreporter/client/app/src/std/env.rs1
-rw-r--r--toolkit/crashreporter/client/app/src/test.rs4
-rw-r--r--widget/gtk/nsDragService.cpp9
42 files changed, 645 insertions, 580 deletions
diff --git a/accessible/windows/msaa/MsaaAccessible.cpp b/accessible/windows/msaa/MsaaAccessible.cpp
index 56e8cfd058..ba6e536d4b 100644
--- a/accessible/windows/msaa/MsaaAccessible.cpp
+++ b/accessible/windows/msaa/MsaaAccessible.cpp
@@ -508,6 +508,13 @@ MsaaAccessible::QueryInterface(REFIID iid, void** ppv) {
return E_NOINTERFACE;
}
+ if (NS_WARN_IF(!NS_IsMainThread())) {
+ // Bug 1896816: JAWS sometimes traverses into Gecko UI from a file dialog
+ // thread. It shouldn't do that, but let's fail gracefully instead of
+ // crashing.
+ return RPC_E_WRONG_THREAD;
+ }
+
// These interfaces are always available. We can support querying to them
// even if the Accessible is dead.
if (IID_IUnknown == iid) {
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index a01138c7da..8ef14813b1 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -92,7 +92,6 @@
<!-- Untranslated FTL files -->
<link rel="localization" href="preview/enUS-searchFeatures.ftl" />
<link rel="localization" href="preview/interventions.ftl" />
- <link rel="localization" href="preview/select-translations.ftl"/>
<link rel="localization" href="browser/shopping.ftl"/>
<link rel="localization" href="preview/shopping.ftl"/>
<link rel="localization" href="preview/sidebar.ftl"/>
diff --git a/browser/base/content/webext-panels.xhtml b/browser/base/content/webext-panels.xhtml
index f421d9bf80..1b97794a8d 100644
--- a/browser/base/content/webext-panels.xhtml
+++ b/browser/base/content/webext-panels.xhtml
@@ -28,7 +28,7 @@
<html:link rel="localization" href="toolkit/branding/brandings.ftl"/>
<html:link rel="localization" href="toolkit/global/textActions.ftl"/>
<html:link rel="localization" href="browser/browserContext.ftl"/>
- <html:link rel="localization" href="preview/select-translations.ftl"/>
+ <html:link rel="localization" href="browser/translations.ftl"/>
</linkset>
<commandset id="mainCommandset">
diff --git a/browser/config/version.txt b/browser/config/version.txt
index ab2a50c778..9931f67c71 100644
--- a/browser/config/version.txt
+++ b/browser/config/version.txt
@@ -1 +1 @@
-126.0
+126.0.1
diff --git a/browser/config/version_display.txt b/browser/config/version_display.txt
index ab2a50c778..9931f67c71 100644
--- a/browser/config/version_display.txt
+++ b/browser/config/version_display.txt
@@ -1 +1 @@
-126.0
+126.0.1
diff --git a/browser/locales-preview/select-translations.ftl b/browser/locales-preview/select-translations.ftl
deleted file mode 100644
index 39c882ec64..0000000000
--- a/browser/locales-preview/select-translations.ftl
+++ /dev/null
@@ -1,54 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at https://mozilla.org/MPL/2.0/.
-
-
-# Text displayed in the right-click context menu for translating
-# selected text to a yet-to-be-determined language.
-main-context-menu-translate-selection =
- .label = Translate Selection…
-
-# Text displayed in the right-click context menu for translating
-# selected text to a target language.
-#
-# Variables:
-# $language (string) - The localized display name of the target language
-main-context-menu-translate-selection-to-language =
- .label = Translate Selection to { $language }
-
-# Text displayed in the right-click context menu for translating
-# the text of a hyperlink to a yet-to-be-determined language.
-main-context-menu-translate-link-text =
- .label = Translate Link Text…
-
-# Text displayed in the right-click context menu for translating
-# the text of a hyperlink to a target language.
-#
-# Variables:
-# $language (string) - The localized display name of the target language
-main-context-menu-translate-link-text-to-language =
- .label = Translate Link Text to { $language }
-
-# Text displayed in the select translations panel header.
-select-translations-panel-header = Translation
-
-# Text displayed above the from-language dropdown menu.
-select-translations-panel-from-label = From
-
-# Text displayed above the to-language dropdown menu.
-select-translations-panel-to-label = To
-
-# Text displayed on the copy button.
-select-translations-panel-copy-button = Copy
-
-# Text displayed on the done button.
-select-translations-panel-done-button = Done
-
-# Text displayed on translate-full-page button.
-select-translations-panel-translate-full-page-button = Translate full page
-
-# Text displayed as a placeholder when the panel is idle.
-select-translations-panel-idle-placeholder-text = Translated text will appear here.
-
-# Text displayed as a placeholder when the panel is actively translating.
-select-translations-panel-translating-placeholder-text = Translating…
diff --git a/browser/locales/en-US/browser/translations.ftl b/browser/locales/en-US/browser/translations.ftl
index 8483a4591a..92f21220f1 100644
--- a/browser/locales/en-US/browser/translations.ftl
+++ b/browser/locales/en-US/browser/translations.ftl
@@ -166,3 +166,96 @@ translations-settings-remove-all-sites-button =
translations-settings-close-dialog =
.buttonlabelaccept = Close
.buttonaccesskeyaccept = C
+
+# Text displayed in the right-click context menu for translating
+# selected text to a yet-to-be-determined language.
+main-context-menu-translate-selection =
+ .label = Translate Selection…
+ .accesskey = n
+
+# Text displayed in the right-click context menu for translating
+# selected text to a target language.
+#
+# Variables:
+# $language (string) - The localized display name of the target language
+main-context-menu-translate-selection-to-language =
+ .label = Translate Selection to { $language }
+ .accesskey = n
+
+# Text displayed in the right-click context menu for translating
+# the text of a hyperlink to a yet-to-be-determined language.
+main-context-menu-translate-link-text =
+ .label = Translate Link Text…
+ .accesskey = n
+
+# Text displayed in the right-click context menu for translating
+# the text of a hyperlink to a target language.
+#
+# Variables:
+# $language (string) - The localized display name of the target language
+main-context-menu-translate-link-text-to-language =
+ .label = Translate Link Text to { $language }
+ .accesskey = n
+
+# Text displayed in the select translations panel header.
+select-translations-panel-header = Translation
+
+# Text displayed above the from-language dropdown menu.
+select-translations-panel-from-label = From
+
+# Text displayed above the to-language dropdown menu.
+select-translations-panel-to-label = To
+
+# Text displayed above the try-another-source-language dropdown menu.
+select-translations-panel-try-another-language-label = Try another source language
+
+select-translations-panel-cancel-button =
+ .label = Cancel
+
+# Text displayed on the copy button before it is clicked.
+select-translations-panel-copy-button =
+ .label = Copy
+
+# Text displayed on the copy button after it is clicked.
+select-translations-panel-copy-button-copied =
+ .label = Copied
+
+select-translations-panel-done-button =
+ .label = Done
+
+select-translations-panel-translate-full-page-button =
+ .label = Translate full page
+
+select-translations-panel-translate-button =
+ .label = Translate
+
+select-translations-panel-try-again-button =
+ .label = Try again
+
+# Text displayed as a placeholder when the panel is idle.
+select-translations-panel-idle-placeholder-text = Translated text will appear here.
+
+# Text displayed as a placeholder when the panel is actively translating.
+select-translations-panel-translating-placeholder-text = Translating…
+
+select-translations-panel-init-failure-message =
+ .message = Couldn’t load languages. Check your internet connection and try again.
+
+# Text displayed when the translation fails to complete.
+select-translations-panel-translation-failure-message =
+ .message = There was a problem translating. Please try again.
+
+# If your language requires declining the language name, a possible solution
+# is to adapt the structure of the phrase, or use a support noun, e.g.
+# `Sorry, we don't support the language yet: { $language }
+#
+# Variables:
+# $language (string) - The language of the document.
+select-translations-panel-unsupported-language-message-known =
+ .message = Sorry, we don’t support { $language } yet.
+select-translations-panel-unsupported-language-message-unknown =
+ .message = Sorry, we don’t support this language yet.
+
+# Text displayed on the menuitem that opens the Translation Settings page.
+select-translations-panel-open-translations-settings-menuitem =
+ .label = Translation settings
diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn
index 51cd7853b0..c3b7556aa3 100644
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -15,7 +15,6 @@
preview/shopping.ftl (../components/shopping/content/shopping.ftl)
preview/sidebar.ftl (../components/sidebar/sidebar.ftl)
preview/onboarding.ftl (../components/aboutwelcome/content/onboarding.ftl)
- preview/select-translations.ftl (../locales-preview/select-translations.ftl)
preview/translations.ftl (../locales-preview/translations.ftl)
browser (%browser/**/*.ftl)
preview/profiles.ftl (../components/profiles/content/profiles.ftl)
diff --git a/config/milestone.txt b/config/milestone.txt
index 5b476c5ba8..de1124bf4f 100644
--- a/config/milestone.txt
+++ b/config/milestone.txt
@@ -10,4 +10,4 @@
# hardcoded milestones in the tree from these two files.
#--------------------------------------------------------
-126.0
+126.0.1
diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp
index 1a79a9f734..54711aa981 100644
--- a/dom/canvas/CanvasRenderingContext2D.cpp
+++ b/dom/canvas/CanvasRenderingContext2D.cpp
@@ -2216,14 +2216,16 @@ void CanvasRenderingContext2D::Transform(double aM11, double aM12, double aM21,
already_AddRefed<DOMMatrix> CanvasRenderingContext2D::GetTransform(
ErrorResult& aError) {
- if (!EnsureTarget(aError)) {
+ // If we are silently failing, then we still need to return a transform while
+ // we are in the process of recovering.
+ Matrix transform;
+ if (EnsureTarget(aError)) {
+ transform = mTarget->GetTransform();
+ } else if (aError.Failed()) {
return nullptr;
}
- MOZ_ASSERT(IsTargetValid());
-
- RefPtr<DOMMatrix> matrix =
- new DOMMatrix(GetParentObject(), mTarget->GetTransform());
+ RefPtr<DOMMatrix> matrix = new DOMMatrix(GetParentObject(), transform);
return matrix.forget();
}
diff --git a/dom/canvas/test/test_accelerated_canvas_context_loss.html b/dom/canvas/test/test_accelerated_canvas_context_loss.html
index 6172420bcb..610c8d8fc3 100644
--- a/dom/canvas/test/test_accelerated_canvas_context_loss.html
+++ b/dom/canvas/test/test_accelerated_canvas_context_loss.html
@@ -58,6 +58,12 @@ let countRestoredEvents = 0;
function onContextLost() {
ok(context.isContextLost(), "Canvas context should be lost during contextlost event");
+
+ try {
+ let transform = context.getTransform();
+ ok(transform.isIdentity, "Canvas context should return identity transform while context lost");
+ } catch (e) {}
+
countLostEvents += 1;
}
@@ -88,6 +94,12 @@ async function start() {
ok(!context.isContextLost(), "Canvas context should not be lost after initial fill");
+ let transform = context.getTransform();
+ ok(transform.isIdentity, "Canvas context should default to identity transform");
+ context.setTransform(2.0, 3.0, 4.0, 5.0, 6.0, 7.0);
+ transform = context.getTransform();
+ ok(!transform.isIdentity, "Canvas context should have non-identity transform");
+
const restarted = await restartGPUProcess();
const expectedEvents = restarted ? 1 : 0;
diff --git a/dom/indexedDB/IDBFactory.cpp b/dom/indexedDB/IDBFactory.cpp
index 51d4c4df23..c0dc5aeab2 100644
--- a/dom/indexedDB/IDBFactory.cpp
+++ b/dom/indexedDB/IDBFactory.cpp
@@ -470,7 +470,13 @@ RefPtr<IDBOpenDBRequest> IDBFactory::DeleteDatabase(
/* aDeleting */ true, aCallerType, aRv);
}
-already_AddRefed<Promise> IDBFactory::Databases(JSContext* const aCx) {
+already_AddRefed<Promise> IDBFactory::Databases(JSContext* const aCx,
+ ErrorResult& aRv) {
+ if (NS_WARN_IF(!GetOwnerGlobal())) {
+ aRv.Throw(NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR);
+ return nullptr;
+ }
+
RefPtr<Promise> promise = Promise::CreateInfallible(GetOwnerGlobal());
// Nothing can be done here if we have previously failed to create a
diff --git a/dom/indexedDB/IDBFactory.h b/dom/indexedDB/IDBFactory.h
index 7139b26f9c..d64d571a05 100644
--- a/dom/indexedDB/IDBFactory.h
+++ b/dom/indexedDB/IDBFactory.h
@@ -162,7 +162,7 @@ class IDBFactory final : public GlobalTeardownObserver, public nsWrapperCache {
JSContext* aCx, const nsAString& aName, const IDBOpenDBOptions& aOptions,
CallerType aCallerType, ErrorResult& aRv);
- already_AddRefed<Promise> Databases(JSContext* aCx);
+ already_AddRefed<Promise> Databases(JSContext* aCx, ErrorResult& aRv);
int16_t Cmp(JSContext* aCx, JS::Handle<JS::Value> aFirst,
JS::Handle<JS::Value> aSecond, ErrorResult& aRv);
diff --git a/dom/media/platforms/wmf/DXVA2Manager.cpp b/dom/media/platforms/wmf/DXVA2Manager.cpp
index 9efe9dab55..064efd8209 100644
--- a/dom/media/platforms/wmf/DXVA2Manager.cpp
+++ b/dom/media/platforms/wmf/DXVA2Manager.cpp
@@ -127,35 +127,6 @@ using namespace gfx;
StaticRefPtr<ID3D11Device> sDevice;
StaticMutex sDeviceMutex;
-// We found an issue where the ID3D11VideoDecoder won't release its underlying
-// resources properly if the decoder iscreated from a compositor device by
-// ourselves. This problem has been observed with both VP9 and, reportedly, AV1
-// decoders, it does not seem to affect the H264 decoder, but the underlying
-// decoder created by MFT seems not having this issue.
-// Therefore, when checking whether we can use hardware decoding, we should use
-// a non-compositor device to create a decoder in order to prevent resource
-// leaking that can significantly degrade the performance. For the actual
-// decoding, we will still use the compositor device if it's avaiable in order
-// to avoid video copying.
-static ID3D11Device* GetDeviceForDecoderCheck() {
- StaticMutexAutoLock lock(sDeviceMutex);
- if (AppShutdown::IsInOrBeyond(ShutdownPhase::XPCOMShutdown)) {
- return nullptr;
- }
- if (!sDevice) {
- sDevice = gfx::DeviceManagerDx::Get()->CreateDecoderDevice(
- {DeviceManagerDx::DeviceFlag::disableDeviceReuse});
- auto clearOnShutdown = [] { ClearOnShutdown(&sDevice); };
- if (!NS_IsMainThread()) {
- Unused << NS_DispatchToMainThread(
- NS_NewRunnableFunction(__func__, clearOnShutdown));
- } else {
- clearOnShutdown();
- }
- }
- return sDevice.get();
-}
-
void GetDXVA2ExtendedFormatFromMFMediaType(IMFMediaType* pType,
DXVA2_ExtendedFormat* pFormat) {
// Get the interlace mode.
@@ -1190,14 +1161,8 @@ D3D11DXVA2Manager::ConfigureForSize(IMFMediaType* aInputType,
bool D3D11DXVA2Manager::CanCreateDecoder(
const D3D11_VIDEO_DECODER_DESC& aDesc) const {
- RefPtr<ID3D11Device> device = GetDeviceForDecoderCheck();
- if (!device) {
- LOG("Can't create decoder due to lacking of ID3D11Device!");
- return false;
- }
-
RefPtr<ID3D11VideoDevice> videoDevice;
- HRESULT hr = device->QueryInterface(
+ HRESULT hr = mDevice->QueryInterface(
static_cast<ID3D11VideoDevice**>(getter_AddRefs(videoDevice)));
if (FAILED(hr)) {
LOG("Failed to query ID3D11VideoDevice!");
diff --git a/dom/webidl/IDBFactory.webidl b/dom/webidl/IDBFactory.webidl
index 76553037fc..9e9153324f 100644
--- a/dom/webidl/IDBFactory.webidl
+++ b/dom/webidl/IDBFactory.webidl
@@ -39,6 +39,7 @@ interface IDBFactory {
deleteDatabase(DOMString name,
optional IDBOpenDBOptions options = {});
+ [Throws]
Promise<sequence<IDBDatabaseInfo>> databases();
[Throws]
diff --git a/gfx/thebes/DeviceManagerDx.cpp b/gfx/thebes/DeviceManagerDx.cpp
index 7d00e5ac1d..3a531e92ae 100644
--- a/gfx/thebes/DeviceManagerDx.cpp
+++ b/gfx/thebes/DeviceManagerDx.cpp
@@ -1106,33 +1106,31 @@ RefPtr<ID3D11Device> DeviceManagerDx::CreateDecoderDevice(
bool isAMD = mDeviceStatus->adapter().VendorId == 0x1002;
bool reuseDevice = false;
- if (!aFlags.contains(DeviceFlag::disableDeviceReuse)) {
- if (gfxVars::ReuseDecoderDevice()) {
- reuseDevice = true;
- } else if (isAMD) {
- reuseDevice = true;
- gfxCriticalNoteOnce << "Always have to reuse decoder device on AMD";
- }
+ if (gfxVars::ReuseDecoderDevice()) {
+ reuseDevice = true;
+ } else if (isAMD) {
+ reuseDevice = true;
+ gfxCriticalNoteOnce << "Always have to reuse decoder device on AMD";
+ }
- if (reuseDevice) {
- // Use mCompositorDevice for decoder device only for hardware WebRender.
- if (aFlags.contains(DeviceFlag::isHardwareWebRenderInUse) &&
- mCompositorDevice && mCompositorDeviceSupportsVideo &&
- !mDecoderDevice) {
- mDecoderDevice = mCompositorDevice;
-
- RefPtr<ID3D10Multithread> multi;
- mDecoderDevice->QueryInterface(__uuidof(ID3D10Multithread),
- getter_AddRefs(multi));
- if (multi) {
- MOZ_ASSERT(multi->GetMultithreadProtected());
- }
+ if (reuseDevice) {
+ // Use mCompositorDevice for decoder device only for hardware WebRender.
+ if (aFlags.contains(DeviceFlag::isHardwareWebRenderInUse) &&
+ mCompositorDevice && mCompositorDeviceSupportsVideo &&
+ !mDecoderDevice) {
+ mDecoderDevice = mCompositorDevice;
+
+ RefPtr<ID3D10Multithread> multi;
+ mDecoderDevice->QueryInterface(__uuidof(ID3D10Multithread),
+ getter_AddRefs(multi));
+ if (multi) {
+ MOZ_ASSERT(multi->GetMultithreadProtected());
}
+ }
- if (mDecoderDevice) {
- RefPtr<ID3D11Device> dev = mDecoderDevice;
- return dev.forget();
- }
+ if (mDecoderDevice) {
+ RefPtr<ID3D11Device> dev = mDecoderDevice;
+ return dev.forget();
}
}
diff --git a/gfx/thebes/DeviceManagerDx.h b/gfx/thebes/DeviceManagerDx.h
index 1e4182ddec..ee44447d23 100644
--- a/gfx/thebes/DeviceManagerDx.h
+++ b/gfx/thebes/DeviceManagerDx.h
@@ -61,7 +61,6 @@ class DeviceManagerDx final {
enum class DeviceFlag {
isHardwareWebRenderInUse,
- disableDeviceReuse,
};
using DeviceFlagSet = EnumSet<DeviceFlag, uint8_t>;
RefPtr<ID3D11Device> GetCompositorDevice();
diff --git a/js/src/jit-test/tests/arrays/bug1897150-1.js b/js/src/jit-test/tests/arrays/bug1897150-1.js
new file mode 100644
index 0000000000..d7a26fb41a
--- /dev/null
+++ b/js/src/jit-test/tests/arrays/bug1897150-1.js
@@ -0,0 +1,9 @@
+var arr = [1,2,3,4]
+var global = 1;
+
+var comparator = function(a, b) {
+ assertEq(this.global, 1);
+ return b - a;
+}
+
+arr.sort(comparator);
diff --git a/js/src/jit-test/tests/arrays/bug1897150-2.js b/js/src/jit-test/tests/arrays/bug1897150-2.js
new file mode 100644
index 0000000000..53f78a8a45
--- /dev/null
+++ b/js/src/jit-test/tests/arrays/bug1897150-2.js
@@ -0,0 +1,9 @@
+var typedArr = Uint8Array.from([1,2,3,4])
+var global = 1;
+
+var comparator = function(a, b) {
+ assertEq(this.global, 1);
+ return b - a;
+}
+
+typedArr.sort(comparator);
diff --git a/js/src/jit/TrampolineNatives.cpp b/js/src/jit/TrampolineNatives.cpp
index 0bde6d9985..e22023f8dd 100644
--- a/js/src/jit/TrampolineNatives.cpp
+++ b/js/src/jit/TrampolineNatives.cpp
@@ -86,6 +86,8 @@ uint32_t JitRuntime::generateArraySortTrampoline(MacroAssembler& masm) {
-int32_t(FrameSize) + ArraySortData::offsetOfComparatorReturnValue();
constexpr int32_t DescriptorOffset =
-int32_t(FrameSize) + ArraySortData::offsetOfDescriptor();
+ constexpr int32_t ComparatorThisOffset =
+ -int32_t(FrameSize) + ArraySortData::offsetOfComparatorThis();
#ifdef JS_USE_LINK_REGISTER
masm.pushReturnAddress();
@@ -146,6 +148,8 @@ uint32_t JitRuntime::generateArraySortTrampoline(MacroAssembler& masm) {
Label callDone, jitCallFast, jitCallSlow;
masm.bind(&jitCallFast);
{
+ masm.storeValue(UndefinedValue(),
+ Address(FramePointer, ComparatorThisOffset));
masm.storePtr(ImmWord(jitCallDescriptor),
Address(FramePointer, DescriptorOffset));
masm.loadPtr(Address(FramePointer, ComparatorOffset), temp0);
@@ -155,6 +159,8 @@ uint32_t JitRuntime::generateArraySortTrampoline(MacroAssembler& masm) {
}
masm.bind(&jitCallSlow);
{
+ masm.storeValue(UndefinedValue(),
+ Address(FramePointer, ComparatorThisOffset));
masm.storePtr(ImmWord(jitCallDescriptor),
Address(FramePointer, DescriptorOffset));
masm.loadPtr(Address(FramePointer, ComparatorOffset), temp0);
diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.cpp
index 567cd860cf..26f794a5d8 100644
--- a/js/xpconnect/src/XPCJSRuntime.cpp
+++ b/js/xpconnect/src/XPCJSRuntime.cpp
@@ -2585,6 +2585,8 @@ static void AccumulateTelemetryCallback(JSMetric id, uint32_t sample) {
// clang-format on
switch (id) {
+// Disable clone.deserialize metrics on Android for perf (bug 1898515).
+#ifndef MOZ_WIDGET_ANDROID
case JSMetric::DESERIALIZE_BYTES:
glean::performance_clone_deserialize::size.Accumulate(sample);
break;
@@ -2596,6 +2598,7 @@ static void AccumulateTelemetryCallback(JSMetric id, uint32_t sample) {
glean::performance_clone_deserialize::time.AccumulateRawDuration(
TimeDuration::FromMicroseconds(sample));
break;
+#endif // MOZ_WIDGET_ANDROID
case JSMetric::GC_MS:
glean::javascript_gc::total_time.AccumulateRawDuration(
TimeDuration::FromMilliseconds(sample));
diff --git a/mobile/android/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt b/mobile/android/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt
index a58ac29588..0dbc6cf837 100644
--- a/mobile/android/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt
+++ b/mobile/android/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt
@@ -61,7 +61,7 @@ object Versions {
const val browser = "1.8.0"
const val biometric = "1.1.0"
const val cardview = "1.0.0"
- const val compose_bom = "2024.03.00"
+ const val compose_bom = "2024.04.01"
const val constraintlayout = "2.1.4"
const val coordinatorlayout = "1.2.0"
const val core = "1.12.0"
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt
index 9992cf75d3..8c5159baec 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/SwipeToDismissBox.kt
@@ -124,6 +124,20 @@ class SwipeToDismissState(
*/
val isSwipingToStart: Boolean
get() = swipeDestination == SwipeToDismissAnchor.Start
+
+ /**
+ * The current [IntOffset] of the swipe. If the X-offset is currently [Float.NaN], it will return 0.
+ */
+ val safeSwipeOffset: IntOffset
+ get() {
+ val xOffset = if (anchoredDraggableState.offset.isNaN()) {
+ 0
+ } else {
+ anchoredDraggableState.offset.roundToInt()
+ }
+
+ return IntOffset(x = xOffset, y = 0)
+ }
}
/**
@@ -186,7 +200,7 @@ fun SwipeToDismissBox(
)
Box(
- modifier = Modifier.offset { IntOffset(state.anchoredDraggableState.offset.roundToInt(), 0) },
+ modifier = Modifier.offset { state.safeSwipeOffset },
content = dismissContent,
)
}
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt
index 46ac69595c..2122e1efee 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt
@@ -135,8 +135,15 @@ class MessagingMiddleware(
context.store.dispatch(UpdateMessageToShow(updatedMessage))
}
val oldMessageIndex = context.state.messaging.messages.indexOfFirst { it.id == updatedMessage.id }
- val newList = context.state.messaging.messages.toMutableList()
- newList[oldMessageIndex] = updatedMessage
- return newList
+
+ return if (oldMessageIndex != -1) {
+ val newList = context.state.messaging.messages.toMutableList()
+ newList[oldMessageIndex] = updatedMessage
+ newList
+ } else {
+ // No need to update the message, it was removed. This is due to a race condition, see:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1897485
+ context.state.messaging.messages
+ }
}
}
diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt
index 88b9161583..05e20c1163 100644
--- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt
+++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt
@@ -347,6 +347,41 @@ class MessagingMiddlewareTest {
assertEquals(0, store.state.messaging.messages.size)
assertEquals(0, store.state.messaging.messageToShow.size)
}
+
+ @Test
+ fun `GIVEN message is not found WHEN updateMessage THEN do not update the message list`() = runTestOnMain {
+ val message = createMessage(messageId = "1")
+ val message2 = createMessage(messageId = "2")
+ val store = AppStore(
+ AppState(
+ messaging = MessagingState(
+ messages = listOf(
+ message,
+ ),
+ ),
+ ),
+ listOf(
+ MessagingMiddleware(controller, coroutineScope),
+ ),
+ )
+
+ every {
+ controller.getNextMessage(
+ FenixMessageSurfaceId.HOMESCREEN,
+ any(),
+ )
+ } returns message
+
+ coEvery {
+ controller.onMessageDisplayed(eq(message), any())
+ } returns message2
+
+ store.dispatch(Evaluate(FenixMessageSurfaceId.HOMESCREEN)).joinBlocking()
+ store.waitUntilIdle()
+
+ assertEquals(1, store.state.messaging.messages.count())
+ assertEquals(message, store.state.messaging.messages.first())
+ }
}
private fun createMessage(
metadata: Message.Metadata = createMetadata(),
diff --git a/mobile/android/version.txt b/mobile/android/version.txt
index ab2a50c778..9931f67c71 100644
--- a/mobile/android/version.txt
+++ b/mobile/android/version.txt
@@ -1 +1 @@
-126.0
+126.0.1
diff --git a/netwerk/ipc/DocumentLoadListener.cpp b/netwerk/ipc/DocumentLoadListener.cpp
index 32d7036ff1..a133df4663 100644
--- a/netwerk/ipc/DocumentLoadListener.cpp
+++ b/netwerk/ipc/DocumentLoadListener.cpp
@@ -810,6 +810,24 @@ auto DocumentLoadListener::Open(nsDocShellLoadState* aLoadState,
if (cos && aUrgentStart) {
cos->AddClassFlags(nsIClassOfService::UrgentStart);
}
+
+ // ClientChannelHelper below needs us to have finalized the principal for
+ // the channel because it will request that StoragePrincipalHelper mint us a
+ // principal that needs to match the same principal that a later call to
+ // StoragePrincipalHelper will mint when determining the right origin to
+ // look up the ServiceWorker.
+ //
+ // Because nsHttpChannel::AsyncOpen calls UpdateAntiTrackingInfoForChannel
+ // which potentially flips the third party bit/flag on the partition key on
+ // the cookie jar which impacts the principal that will be minted, it is
+ // essential that UpdateAntiTrackingInfoForChannel is called before
+ // AddClientChannelHelperInParent below.
+ //
+ // Because the call to UpdateAntiTrackingInfoForChannel is largely
+ // idempotent, we currently just make the call ourselves right now. The one
+ // caveat is that the RFPRandomKey may be spuriously regenerated for
+ // top-level documents.
+ AntiTrackingUtils::UpdateAntiTrackingInfoForChannel(httpChannel);
}
// Setup a ClientChannelHelper to watch for redirects, and copy
diff --git a/python/l10n/fluent_migrations/bug_1893022_select_translations_release.py b/python/l10n/fluent_migrations/bug_1893022_select_translations_release.py
new file mode 100644
index 0000000000..4ea9ff86f8
--- /dev/null
+++ b/python/l10n/fluent_migrations/bug_1893022_select_translations_release.py
@@ -0,0 +1,34 @@
+# Any copyright is dedicated to the Public Domain.
+# http://creativecommons.org/publicdomain/zero/1.0/
+
+import fluent.syntax.ast as FTL
+from fluent.migrate.helpers import transforms_from
+
+
+def migrate(ctx):
+ """Bug 1893022 - Move Select Translations Fluent Strings out of Preview, part {index}"""
+
+ translations_ftl = "browser/browser/translations.ftl"
+
+ ctx.add_transforms(
+ translations_ftl,
+ translations_ftl,
+ transforms_from(
+ """
+select-translations-panel-translation-failure-message =
+ .message = {COPY_PATTERN(from_path, "translations-panel-error-translating")}
+select-translations-panel-unsupported-language-message-known =
+ .message = {COPY_PATTERN(from_path, "translations-panel-error-unsupported-hint-known")}
+select-translations-panel-unsupported-language-message-unknown =
+ .message = {COPY_PATTERN(from_path, "translations-panel-error-unsupported-hint-unknown")}
+
+select-translations-panel-cancel-button =
+ .label = {COPY_PATTERN(from_path, "translations-panel-translate-cancel.label")}
+select-translations-panel-translate-button =
+ .label = {COPY_PATTERN(from_path, "translations-panel-translate-button.label")}
+select-translations-panel-try-again-button =
+ .label = {COPY_PATTERN(from_path, "translations-panel-error-load-languages-hint-button.label")}
+""",
+ from_path=translations_ftl,
+ ),
+ )
diff --git a/security/certverifier/NSSCertDBTrustDomain.cpp b/security/certverifier/NSSCertDBTrustDomain.cpp
index dc13eb0b8f..a631b50572 100644
--- a/security/certverifier/NSSCertDBTrustDomain.cpp
+++ b/security/certverifier/NSSCertDBTrustDomain.cpp
@@ -476,16 +476,22 @@ Result NSSCertDBTrustDomain::GetCertTrust(EndEntityOrCA endEntityOrCA,
// candidate certificate is a third-party certificate, above.
SECItem candidateCertDERSECItem =
UnsafeMapInputToSECItem(candidateCertDER);
+
+ // This metric can be evaluated as many as 600 times during a cnn.com
+ // load so we avoid measuring it on Android because of the high
+ // cost of serializing the db everytime we measure.
+#ifndef MOZ_WIDGET_ANDROID
auto timerId =
mozilla::glean::cert_verifier::cert_trust_evaluation_time.Start();
-
+#endif
UniqueCERTCertificate candidateCert(CERT_NewTempCertificate(
CERT_GetDefaultCertDB(), &candidateCertDERSECItem, nullptr, false,
true));
+#ifndef MOZ_WIDGET_ANDROID
mozilla::glean::cert_verifier::cert_trust_evaluation_time
.StopAndAccumulate(std::move(timerId));
-
+#endif
if (!candidateCert) {
result = MapPRErrorCodeToResult(PR_GetError());
return;
diff --git a/services/settings/dumps/main/devtools-compatibility-browsers.json b/services/settings/dumps/main/devtools-compatibility-browsers.json
index b14dc1f005..4f78ce96d0 100644
--- a/services/settings/dumps/main/devtools-compatibility-browsers.json
+++ b/services/settings/dumps/main/devtools-compatibility-browsers.json
@@ -1,202 +1,238 @@
{
"data": [
{
- "name": "Edge",
- "schema": 1714867506498,
+ "name": "Firefox",
+ "schema": 1715731507143,
"status": "planned",
- "version": "127",
- "browserid": "edge",
- "id": "9e227c6c-b6ca-4c69-868c-e133a0ee9dbd",
- "last_modified": 1715003394961
- },
- {
- "name": "Edge",
- "schema": 1714638388703,
- "status": "beta",
- "version": "125",
- "browserid": "edge",
- "id": "f1147d5f-d690-43d0-879d-117c6ca24a16",
- "last_modified": 1715003394958
+ "version": "129",
+ "browserid": "firefox",
+ "id": "aed9aeed-2d00-44d3-9b04-065a3df6af27",
+ "last_modified": 1715839095932
},
{
- "name": "Edge",
- "schema": 1714867506401,
- "status": "nightly",
- "version": "126",
- "browserid": "edge",
- "id": "c8bf4918-03b7-4be2-bf75-4d6139dbd7c9",
- "last_modified": 1715003394956
+ "name": "Firefox for Android",
+ "schema": 1715731507714,
+ "status": "planned",
+ "version": "129",
+ "browserid": "firefox_android",
+ "id": "0e014c85-acab-44d6-8108-3441175573e2",
+ "last_modified": 1715839095930
},
{
- "name": "Samsung Internet",
- "schema": 1714521906708,
+ "name": "Safari on iOS",
+ "schema": 1715731507984,
"status": "current",
- "version": "25.0",
- "browserid": "samsunginternet_android",
- "id": "91fb10f8-ce37-4722-9eac-296c08d297c6",
- "last_modified": 1714638388565
+ "version": "17.5",
+ "browserid": "safari_ios",
+ "id": "4375a82d-f2f1-4883-8da7-0aedfb05b8f9",
+ "last_modified": 1715839095923
},
{
- "name": "Edge",
- "schema": 1714521906580,
+ "name": "Safari",
+ "schema": 1715731507854,
"status": "current",
- "version": "124",
- "browserid": "edge",
- "id": "3837dc37-38b7-483b-82b3-c5593e7a4c91",
- "last_modified": 1714638388557
+ "version": "17.5",
+ "browserid": "safari",
+ "id": "24e30aff-fbf8-4a96-a036-84f970447d4b",
+ "last_modified": 1715839095920
},
{
- "name": "Chrome",
- "schema": 1713917106736,
+ "name": "Firefox",
+ "schema": 1715731506990,
"status": "beta",
- "version": "125",
- "browserid": "chrome",
- "id": "98f20ad9-f47a-476b-b376-be58dbcc76ff",
- "last_modified": 1713943930239
+ "version": "127",
+ "browserid": "firefox",
+ "id": "1477a1c3-a8be-4e6f-916e-8cf8eb789e3f",
+ "last_modified": 1715839095918
},
{
- "name": "Chrome Android",
- "schema": 1713917106908,
+ "name": "Firefox for Android",
+ "schema": 1715731507415,
"status": "beta",
- "version": "125",
- "browserid": "chrome_android",
- "id": "7cb3db05-b658-4c6c-a57a-c17a1ceefd38",
- "last_modified": 1713943930237
+ "version": "127",
+ "browserid": "firefox_android",
+ "id": "13f02b93-14c9-4ca4-937d-0a83fb7fb3a5",
+ "last_modified": 1715839095915
+ },
+ {
+ "name": "Firefox for Android",
+ "schema": 1715731507341,
+ "status": "current",
+ "version": "126",
+ "browserid": "firefox_android",
+ "id": "b77524e9-58dc-4196-acbd-41dddc4daea2",
+ "last_modified": 1715839095908
},
{
"name": "Firefox",
- "schema": 1713917107195,
- "status": "planned",
- "version": "128",
+ "schema": 1715731506911,
+ "status": "current",
+ "version": "126",
"browserid": "firefox",
- "id": "565161dc-52d8-4cb1-8cf3-8171b960f9e4",
- "last_modified": 1713943930235
+ "id": "70b05b0b-bbef-486c-901a-ea3221a28fc1",
+ "last_modified": 1715839095906
},
{
"name": "Firefox for Android",
- "schema": 1713917107461,
- "status": "planned",
+ "schema": 1715731507485,
+ "status": "nightly",
"version": "128",
"browserid": "firefox_android",
"id": "05aa43eb-3966-4fc1-8b33-53c493448d2d",
- "last_modified": 1713943930232
+ "last_modified": 1715839095903
},
{
- "name": "Opera",
- "schema": 1713917107636,
+ "name": "Firefox",
+ "schema": 1715731507063,
+ "status": "nightly",
+ "version": "128",
+ "browserid": "firefox",
+ "id": "565161dc-52d8-4cb1-8cf3-8171b960f9e4",
+ "last_modified": 1715839095900
+ },
+ {
+ "name": "Node.js",
+ "schema": 1715126727137,
"status": "current",
- "version": "109",
- "browserid": "opera",
- "id": "bd13befe-c011-403f-a0d5-b6f691ff03fb",
- "last_modified": 1713943930230
+ "version": "22.0.0",
+ "browserid": "nodejs",
+ "id": "c28dfac7-c7de-4e20-8212-abc7c0de635a",
+ "last_modified": 1715589742262
},
{
- "name": "Opera",
- "schema": 1713917107684,
+ "name": "Chrome",
+ "schema": 1715385903539,
"status": "beta",
- "version": "110",
+ "version": "126",
+ "browserid": "chrome",
+ "id": "329bb17c-2556-40a6-8e88-eb2fe353913a",
+ "last_modified": 1715589742259
+ },
+ {
+ "name": "Chrome Android",
+ "schema": 1715385903774,
+ "status": "beta",
+ "version": "126",
+ "browserid": "chrome_android",
+ "id": "e8108829-a3d5-4363-86c9-7e9f1015c2fd",
+ "last_modified": 1715589742256
+ },
+ {
+ "name": "Opera",
+ "schema": 1715385903851,
+ "status": "nightly",
+ "version": "111",
"browserid": "opera",
- "id": "08a3849f-52fd-40ae-9054-b0e33272d279",
- "last_modified": 1713943930228
+ "id": "880cc50c-e430-43ac-aa57-d1f02fae0e30",
+ "last_modified": 1715589742254
},
{
"name": "Opera Android",
- "schema": 1713917107783,
+ "schema": 1715385904000,
"status": "current",
- "version": "81",
+ "version": "82",
"browserid": "opera_android",
- "id": "e1ea7758-028a-45df-beab-8c83d0dd0d14",
- "last_modified": 1713943930225
+ "id": "dad8a164-2e60-4363-a9b2-169aa15ea735",
+ "last_modified": 1715589742251
},
{
"name": "WebView Android",
- "schema": 1713917107962,
+ "schema": 1715385904222,
"status": "beta",
+ "version": "126",
+ "browserid": "webview_android",
+ "id": "97b0b530-34a9-4e02-949f-d525bf6bc793",
+ "last_modified": 1715589742248
+ },
+ {
+ "name": "WebView Android",
+ "schema": 1715385904147,
+ "status": "current",
"version": "125",
"browserid": "webview_android",
"id": "c9ec1a0b-5d6d-4727-9f93-fb4dd3f1979f",
- "last_modified": 1713943930223
+ "last_modified": 1715589742235
},
{
"name": "Chrome Android",
- "schema": 1713917106856,
+ "schema": 1715385903692,
"status": "current",
- "version": "124",
+ "version": "125",
"browserid": "chrome_android",
- "id": "6946fbe1-bfff-4b64-aead-f001f0e486de",
- "last_modified": 1713943930211
+ "id": "7cb3db05-b658-4c6c-a57a-c17a1ceefd38",
+ "last_modified": 1715589742230
},
{
"name": "Chrome",
- "schema": 1713917106676,
+ "schema": 1715385903420,
"status": "current",
- "version": "124",
+ "version": "125",
"browserid": "chrome",
- "id": "f26cb7b0-cf29-4c33-8fb7-a2cc466a7e3c",
- "last_modified": 1713943930205
+ "id": "98f20ad9-f47a-476b-b376-be58dbcc76ff",
+ "last_modified": 1715589742227
},
{
- "name": "WebView Android",
- "schema": 1713917107903,
- "status": "current",
- "version": "124",
- "browserid": "webview_android",
- "id": "2dd2f70c-7c64-4aee-a05e-a0eb05d29ed5",
- "last_modified": 1713943930203
+ "name": "Edge",
+ "schema": 1714867506498,
+ "status": "planned",
+ "version": "127",
+ "browserid": "edge",
+ "id": "9e227c6c-b6ca-4c69-868c-e133a0ee9dbd",
+ "last_modified": 1715003394961
},
{
- "name": "Firefox",
- "schema": 1713917107078,
+ "name": "Edge",
+ "schema": 1714638388703,
"status": "beta",
- "version": "126",
- "browserid": "firefox",
- "id": "70b05b0b-bbef-486c-901a-ea3221a28fc1",
- "last_modified": 1713943930201
+ "version": "125",
+ "browserid": "edge",
+ "id": "f1147d5f-d690-43d0-879d-117c6ca24a16",
+ "last_modified": 1715003394958
},
{
- "name": "Firefox for Android",
- "schema": 1713917107363,
- "status": "beta",
+ "name": "Edge",
+ "schema": 1714867506401,
+ "status": "nightly",
"version": "126",
- "browserid": "firefox_android",
- "id": "b77524e9-58dc-4196-acbd-41dddc4daea2",
- "last_modified": 1713943930199
+ "browserid": "edge",
+ "id": "c8bf4918-03b7-4be2-bf75-4d6139dbd7c9",
+ "last_modified": 1715003394956
},
{
- "name": "Firefox for Android",
- "schema": 1713917107309,
+ "name": "Samsung Internet",
+ "schema": 1714521906708,
"status": "current",
- "version": "125",
- "browserid": "firefox_android",
- "id": "a8f570e9-574d-4193-891f-fa8e0a875388",
- "last_modified": 1713943930193
+ "version": "25.0",
+ "browserid": "samsunginternet_android",
+ "id": "91fb10f8-ce37-4722-9eac-296c08d297c6",
+ "last_modified": 1714638388565
},
{
- "name": "Firefox",
- "schema": 1713917107027,
+ "name": "Edge",
+ "schema": 1714521906580,
"status": "current",
- "version": "125",
- "browserid": "firefox",
- "id": "5ae5bd40-deb0-40c4-bba6-cd411b78ee16",
- "last_modified": 1713943930190
+ "version": "124",
+ "browserid": "edge",
+ "id": "3837dc37-38b7-483b-82b3-c5593e7a4c91",
+ "last_modified": 1714638388557
},
{
- "name": "Firefox for Android",
- "schema": 1713917107413,
- "status": "nightly",
- "version": "127",
- "browserid": "firefox_android",
- "id": "13f02b93-14c9-4ca4-937d-0a83fb7fb3a5",
- "last_modified": 1713943930188
+ "name": "Opera",
+ "schema": 1713917107636,
+ "status": "current",
+ "version": "109",
+ "browserid": "opera",
+ "id": "bd13befe-c011-403f-a0d5-b6f691ff03fb",
+ "last_modified": 1713943930230
},
{
- "name": "Firefox",
- "schema": 1713917107141,
- "status": "nightly",
- "version": "127",
- "browserid": "firefox",
- "id": "1477a1c3-a8be-4e6f-916e-8cf8eb789e3f",
- "last_modified": 1713943930185
+ "name": "Opera",
+ "schema": 1713917107684,
+ "status": "beta",
+ "version": "110",
+ "browserid": "opera",
+ "id": "08a3849f-52fd-40ae-9054-b0e33272d279",
+ "last_modified": 1713943930228
},
{
"name": "Deno",
@@ -208,42 +244,6 @@
"last_modified": 1712840749681
},
{
- "name": "Safari",
- "schema": 1712707507975,
- "status": "beta",
- "version": "17.5",
- "browserid": "safari",
- "id": "24e30aff-fbf8-4a96-a036-84f970447d4b",
- "last_modified": 1712840749675
- },
- {
- "name": "Safari on iOS",
- "schema": 1712707508032,
- "status": "beta",
- "version": "17.5",
- "browserid": "safari_ios",
- "id": "4375a82d-f2f1-4883-8da7-0aedfb05b8f9",
- "last_modified": 1712840749673
- },
- {
- "name": "Safari",
- "schema": 1709769903331,
- "status": "current",
- "version": "17.4",
- "browserid": "safari",
- "id": "380463f2-6aa8-499e-b186-5f80cf4cc573",
- "last_modified": 1709801393999
- },
- {
- "name": "Safari on iOS",
- "schema": 1709769903472,
- "status": "current",
- "version": "17.4",
- "browserid": "safari_ios",
- "id": "b99772c5-e366-42c6-b2db-330aca62dba5",
- "last_modified": 1709801393995
- },
- {
"name": "Node.js",
"schema": 1702685107693,
"status": "esr",
@@ -253,15 +253,6 @@
"last_modified": 1702890886929
},
{
- "name": "Node.js",
- "schema": 1700957104515,
- "status": "current",
- "version": "21.2.0",
- "browserid": "nodejs",
- "id": "b9979c74-bcbd-478d-99bc-55b92fcb2833",
- "last_modified": 1701078578067
- },
- {
"name": "Firefox for Android",
"schema": 1698797104411,
"status": "esr",
@@ -298,5 +289,5 @@
"last_modified": 1665656484764
}
],
- "timestamp": 1715003394961
+ "timestamp": 1715839095932
}
diff --git a/services/settings/dumps/main/translations-models.json b/services/settings/dumps/main/translations-models.json
index 7144b09988..6b42206b9f 100644
--- a/services/settings/dumps/main/translations-models.json
+++ b/services/settings/dumps/main/translations-models.json
@@ -1,6 +1,108 @@
{
"data": [
{
+ "name": "vocab.caen.spm",
+ "schema": 1715268348400,
+ "toLang": "en",
+ "version": "1.0",
+ "fileType": "vocab",
+ "fromLang": "ca",
+ "attachment": {
+ "hash": "10a1f25e5640f596b547190082f87ba4994f8714693904c82a35d965b9cc7470",
+ "size": 811443,
+ "filename": "vocab.caen.spm",
+ "location": "main-workspace/translations-models/2c8f521d-17af-455b-a52f-b3236013f936.spm",
+ "mimetype": "text/plain"
+ },
+ "id": "7471c959-6e86-457c-a698-0db1aea2e2e9",
+ "last_modified": 1715291348584
+ },
+ {
+ "name": "lex.50.50.caen.s2t.bin",
+ "schema": 1715268308506,
+ "toLang": "en",
+ "version": "1.0",
+ "fileType": "lex",
+ "fromLang": "ca",
+ "attachment": {
+ "hash": "a648be17d6f008feee687b455d00dbfaedba2ead8bee32658783c4325a8d3ece",
+ "size": 5244644,
+ "filename": "lex.50.50.caen.s2t.bin",
+ "location": "main-workspace/translations-models/131e044c-85ed-4287-9ee0-4aebe393b15f.bin",
+ "mimetype": "application/octet-stream"
+ },
+ "id": "a5922e2f-ec10-4ccc-8c84-019999861030",
+ "last_modified": 1715291348582
+ },
+ {
+ "name": "model.caen.intgemm.alphas.bin",
+ "schema": 1715268342735,
+ "toLang": "en",
+ "version": "1.0",
+ "fileType": "model",
+ "fromLang": "ca",
+ "attachment": {
+ "hash": "3a315266490d87f72adf9e5387ee567b2fb76a30018e51586b882b1d87bf5aed",
+ "size": 17140899,
+ "filename": "model.caen.intgemm.alphas.bin",
+ "location": "main-workspace/translations-models/af0c1e43-2d39-4761-99fe-df4eb4c8f9f5.bin",
+ "mimetype": "application/octet-stream"
+ },
+ "id": "2c743b80-f06d-4113-878a-aa808ba86471",
+ "last_modified": 1715291348579
+ },
+ {
+ "name": "lex.50.50.enca.s2t.bin",
+ "schema": 1715073385877,
+ "toLang": "ca",
+ "version": "1.0",
+ "fileType": "lex",
+ "fromLang": "en",
+ "attachment": {
+ "hash": "88c3229e6fc203545b5ec8131e31c589a79dc0ba21c5b19b786c9ec8f6bb2733",
+ "size": 3576936,
+ "filename": "lex.50.50.enca.s2t.bin",
+ "location": "main-workspace/translations-models/0586f6fa-d677-4322-8c3e-38c7a70dd04a.bin",
+ "mimetype": "application/octet-stream"
+ },
+ "id": "b7036cef-6fb4-44a6-8384-98294f7b5de1",
+ "last_modified": 1715291348576
+ },
+ {
+ "name": "vocab.enca.spm",
+ "schema": 1715268271791,
+ "toLang": "ca",
+ "version": "1.0",
+ "fileType": "vocab",
+ "fromLang": "en",
+ "attachment": {
+ "hash": "4fbb317b58e31b330f642a8ecc4c4cb719e328b6ef412624f24e9705898cf72a",
+ "size": 791579,
+ "filename": "vocab.enca.spm",
+ "location": "main-workspace/translations-models/db8b8599-a90b-409f-a110-88d25f8c7920.spm",
+ "mimetype": "text/plain"
+ },
+ "id": "b2276df1-06e3-4c4a-9ffb-5ba710cf64dc",
+ "last_modified": 1715291348574
+ },
+ {
+ "name": "model.enca.intgemm.alphas.bin",
+ "schema": 1715268302013,
+ "toLang": "ca",
+ "version": "1.0",
+ "fileType": "model",
+ "fromLang": "en",
+ "attachment": {
+ "hash": "3fff1f35345b69c8507993d1c75bef9bb7a46effcb18118dff9873c6cdc9c2e1",
+ "size": 17140898,
+ "filename": "model.enca.intgemm.alphas.bin",
+ "location": "main-workspace/translations-models/2a25e493-cc96-4da0-b3d7-efbf5e3ec440.bin",
+ "mimetype": "application/octet-stream"
+ },
+ "id": "8316e03c-098d-4b7a-8f85-d13d44cf0cbd",
+ "last_modified": 1715291348571
+ },
+ {
"name": "lex.50.50.encs.s2t.bin",
"schema": 1712262975283,
"toLang": "cs",
@@ -109,60 +211,6 @@
"last_modified": 1712068183356
},
{
- "name": "model.enca.intgemm.alphas.bin",
- "schema": 1710172593713,
- "toLang": "ca",
- "version": "1.0a1",
- "fileType": "model",
- "fromLang": "en",
- "attachment": {
- "hash": "3fff1f35345b69c8507993d1c75bef9bb7a46effcb18118dff9873c6cdc9c2e1",
- "size": 17140898,
- "filename": "model.enca.intgemm.alphas.bin",
- "location": "main-workspace/translations-models/2a25e493-cc96-4da0-b3d7-efbf5e3ec440.bin",
- "mimetype": "application/octet-stream"
- },
- "filter_expression": "env.channel == 'default' || env.channel == 'nightly'",
- "id": "8316e03c-098d-4b7a-8f85-d13d44cf0cbd",
- "last_modified": 1710173317976
- },
- {
- "name": "vocab.enca.spm",
- "schema": 1710172596644,
- "toLang": "ca",
- "version": "1.0a1",
- "fileType": "vocab",
- "fromLang": "en",
- "attachment": {
- "hash": "4fbb317b58e31b330f642a8ecc4c4cb719e328b6ef412624f24e9705898cf72a",
- "size": 791579,
- "filename": "vocab.enca.spm",
- "location": "main-workspace/translations-models/db8b8599-a90b-409f-a110-88d25f8c7920.spm",
- "mimetype": "text/plain"
- },
- "filter_expression": "env.channel == 'default' || env.channel == 'nightly'",
- "id": "b2276df1-06e3-4c4a-9ffb-5ba710cf64dc",
- "last_modified": 1710173317972
- },
- {
- "name": "lex.50.50.enca.s2t.bin",
- "schema": 1710172598190,
- "toLang": "ca",
- "version": "1.0a1",
- "fileType": "lex",
- "fromLang": "en",
- "attachment": {
- "hash": "88c3229e6fc203545b5ec8131e31c589a79dc0ba21c5b19b786c9ec8f6bb2733",
- "size": 3576936,
- "filename": "lex.50.50.enca.s2t.bin",
- "location": "main-workspace/translations-models/0586f6fa-d677-4322-8c3e-38c7a70dd04a.bin",
- "mimetype": "application/octet-stream"
- },
- "filter_expression": "env.channel == 'default' || env.channel == 'nightly'",
- "id": "b7036cef-6fb4-44a6-8384-98294f7b5de1",
- "last_modified": 1710173317967
- },
- {
"name": "lex.50.50.elen.s2t.bin",
"schema": 1709574542054,
"toLang": "en",
@@ -235,24 +283,6 @@
"last_modified": 1709674886815
},
{
- "name": "qualityModel.enet.bin",
- "schema": 1709574556632,
- "toLang": "et",
- "version": "1.0",
- "fileType": "qualityModel",
- "fromLang": "en",
- "attachment": {
- "hash": "bb9b9c449c705297fe6b83542d64406201960971f102787b9b6c733416406707",
- "size": 68,
- "filename": "qualityModel.enet.bin",
- "location": "main-workspace/translations-models/e1233b94-e22d-4e37-a065-92d66e49fe97.bin",
- "mimetype": "application/octet-stream"
- },
- "filter_expression": "",
- "id": "5d7d9bb7-def8-4424-965d-a06ae69b0654",
- "last_modified": 1709674886811
- },
- {
"name": "model.enet.intgemm.alphas.bin",
"schema": 1709574558010,
"toLang": "et",
@@ -1117,24 +1147,6 @@
"last_modified": 1701186751722
},
{
- "name": "qualityModel.encs.bin",
- "schema": 1700619908215,
- "toLang": "cs",
- "version": "1.0a1",
- "fileType": "qualityModel",
- "fromLang": "en",
- "attachment": {
- "hash": "d7eba90036a065e4a1e93e889befe09f93a7d9a3417f3edffdb09a0db88fe83a",
- "size": 68,
- "filename": "qualityModel.encs.bin",
- "location": "main-workspace/translations-models/ef7dad4b-40b5-4f73-a72b-a98a465123c9.bin",
- "mimetype": "application/octet-stream"
- },
- "filter_expression": "env.channel == 'default' || env.channel == 'nightly'",
- "id": "39dc5368-4d1f-4e83-9db4-fa4bdaf747ca",
- "last_modified": 1701186751719
- },
- {
"name": "vocab.encs.spm",
"schema": 1700619911362,
"toLang": "cs",
@@ -1243,24 +1255,6 @@
"last_modified": 1701186751700
},
{
- "name": "qualityModel.enet.bin",
- "schema": 1700619939863,
- "toLang": "et",
- "version": "1.0a1",
- "fileType": "qualityModel",
- "fromLang": "en",
- "attachment": {
- "hash": "bb9b9c449c705297fe6b83542d64406201960971f102787b9b6c733416406707",
- "size": 68,
- "filename": "qualityModel.enet.bin",
- "location": "main-workspace/translations-models/49913732-7c8b-42b2-8824-bf11bd119ce4.bin",
- "mimetype": "application/octet-stream"
- },
- "filter_expression": "env.channel == 'default' || env.channel == 'nightly'",
- "id": "fafbaa61-5049-40dc-8bb4-3a15d4d7f968",
- "last_modified": 1701186751697
- },
- {
"name": "model.enet.intgemm.alphas.bin",
"schema": 1700619943016,
"toLang": "et",
@@ -1405,60 +1399,6 @@
"last_modified": 1701186751672
},
{
- "name": "model.caen.intgemm.alphas.bin",
- "schema": 1700619981767,
- "toLang": "en",
- "version": "1.0a1",
- "fileType": "model",
- "fromLang": "ca",
- "attachment": {
- "hash": "3a315266490d87f72adf9e5387ee567b2fb76a30018e51586b882b1d87bf5aed",
- "size": 17140899,
- "filename": "model.caen.intgemm.alphas.bin",
- "location": "main-workspace/translations-models/af0c1e43-2d39-4761-99fe-df4eb4c8f9f5.bin",
- "mimetype": "application/octet-stream"
- },
- "filter_expression": "env.channel == 'default' || env.channel == 'nightly'",
- "id": "2c743b80-f06d-4113-878a-aa808ba86471",
- "last_modified": 1701186751669
- },
- {
- "name": "lex.50.50.caen.s2t.bin",
- "schema": 1700619988106,
- "toLang": "en",
- "version": "1.0a1",
- "fileType": "lex",
- "fromLang": "ca",
- "attachment": {
- "hash": "a648be17d6f008feee687b455d00dbfaedba2ead8bee32658783c4325a8d3ece",
- "size": 5244644,
- "filename": "lex.50.50.caen.s2t.bin",
- "location": "main-workspace/translations-models/131e044c-85ed-4287-9ee0-4aebe393b15f.bin",
- "mimetype": "application/octet-stream"
- },
- "filter_expression": "env.channel == 'default' || env.channel == 'nightly'",
- "id": "a5922e2f-ec10-4ccc-8c84-019999861030",
- "last_modified": 1701186751665
- },
- {
- "name": "vocab.caen.spm",
- "schema": 1700619992874,
- "toLang": "en",
- "version": "1.0a1",
- "fileType": "vocab",
- "fromLang": "ca",
- "attachment": {
- "hash": "10a1f25e5640f596b547190082f87ba4994f8714693904c82a35d965b9cc7470",
- "size": 811443,
- "filename": "vocab.caen.spm",
- "location": "main-workspace/translations-models/2c8f521d-17af-455b-a52f-b3236013f936.spm",
- "mimetype": "text/plain"
- },
- "filter_expression": "env.channel == 'default' || env.channel == 'nightly'",
- "id": "7471c959-6e86-457c-a698-0db1aea2e2e9",
- "last_modified": 1701186751662
- },
- {
"name": "vocab.enfa.spm",
"schema": 1700619996576,
"toLang": "fa",
@@ -2377,24 +2317,6 @@
"last_modified": 1701186751494
},
{
- "name": "qualityModel.enes.bin",
- "schema": 1700620251765,
- "toLang": "es",
- "version": "1.0",
- "fileType": "qualityModel",
- "fromLang": "en",
- "attachment": {
- "hash": "ce141f8e9e50a5ef4d8e3243a274b1734dc532f6963794a8869dce35acb543c2",
- "size": 68,
- "filename": "qualityModel.enes.bin",
- "location": "main-workspace/translations-models/bf47c1e1-b01e-40e4-ad4b-b16edec5510f.bin",
- "mimetype": "application/octet-stream"
- },
- "filter_expression": "",
- "id": "f0accb47-36ef-4996-98df-8c59de49bc0c",
- "last_modified": 1701186751491
- },
- {
"name": "lex.50.50.esen.s2t.bin",
"schema": 1700620254899,
"toLang": "en",
@@ -2827,5 +2749,5 @@
"last_modified": 1701186751412
}
],
- "timestamp": 1712849848180
+ "timestamp": 1716389617204
}
diff --git a/services/settings/dumps/main/url-classifier-skip-urls.json b/services/settings/dumps/main/url-classifier-skip-urls.json
index 54e7371601..35cea1645a 100644
--- a/services/settings/dumps/main/url-classifier-skip-urls.json
+++ b/services/settings/dumps/main/url-classifier-skip-urls.json
@@ -16,5 +16,5 @@
"last_modified": 1701090424139
}
],
- "timestamp": 1701090424142
+ "timestamp": 1716288373828
}
diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json
index c5a6b8bb44..35b0b0893d 100644
--- a/services/settings/dumps/security-state/intermediates.json
+++ b/services/settings/dumps/security-state/intermediates.json
@@ -1,24 +1,6 @@
{
"data": [
{
- "schema": 1714791237816,
- "derHash": "GH49Z7oIe5+b7zzWIUXn+cJ0esNiZk6YzFWsQmpBkCg=",
- "subject": "CN=TrustID Enterprise TLS CA 3,O=IdenTrust,C=US",
- "subjectDN": "MEcxCzAJBgNVBAYTAlVTMRIwEAYDVQQKEwlJZGVuVHJ1c3QxJDAiBgNVBAMTG1RydXN0SUQgRW50ZXJwcmlzZSBUTFMgQ0EgMw==",
- "whitelist": false,
- "attachment": {
- "hash": "53e98087ee13a616940a25bcb7b29f323e76727d6b09f8a57cbfb312edde1355",
- "size": 2718,
- "filename": "Yo1JYtjv0A0JKQdpcsZDiGbDJrXCSPCztPMl6CEDfpQ=.pem",
- "location": "security-state-staging/intermediates/b5aa0ed9-762a-4350-9342-c28467d8d68d.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "Yo1JYtjv0A0JKQdpcsZDiGbDJrXCSPCztPMl6CEDfpQ=",
- "crlite_enrolled": false,
- "id": "c89e9df3-c41a-4718-878c-dc3107762b8f",
- "last_modified": 1714791423311
- },
- {
"schema": 1714791237384,
"derHash": "5b/O2dIW66faNjSBn7U0+5zroez55jee2DWD0usXfBs=",
"subject": "CN=CrowdStrike TLS RSA CA G5,O=CrowdStrike\\, Inc.,C=US",
@@ -28261,24 +28243,6 @@
"last_modified": 1601517442835
},
{
- "schema": 1601376765799,
- "derHash": "2Wy8A7UjzTMVkYZRz0hiFiiH3VY6+yNS0/NLuUV2+T0=",
- "subject": "CN=Verizon Global Root CA,OU=OmniRoot,O=Verizon Business,C=US",
- "subjectDN": "MFwxCzAJBgNVBAYTAlVTMRkwFwYDVQQKDBBWZXJpem9uIEJ1c2luZXNzMREwDwYDVQQLDAhPbW5pUm9vdDEfMB0GA1UEAwwWVmVyaXpvbiBHbG9iYWwgUm9vdCBDQQ==",
- "whitelist": false,
- "attachment": {
- "hash": "522a9129b746a60c4aa7d040da0f639b8349b1fee088f3f0ecf8b8101c7e452a",
- "size": 1760,
- "filename": "v-gpCYcuRDTxFcUaVhaAGVlNDgPco2PZ87SDnQurzeU=.pem",
- "location": "security-state-staging/intermediates/98a3c55c-3f5d-4937-9389-3ca882ba85cf.pem",
- "mimetype": "application/x-pem-file"
- },
- "pubKeyHash": "v+gpCYcuRDTxFcUaVhaAGVlNDgPco2PZ87SDnQurzeU=",
- "crlite_enrolled": false,
- "id": "62b74836-05bd-4881-9d60-b255969ce226",
- "last_modified": 1601517442759
- },
- {
"schema": 1601376738922,
"derHash": "LRK2GaZgzvsBMnGDHYkSE/xDTpgqIVaCVs9OLoYyS+o=",
"subject": "CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies\\, Inc.,L=Scottsdale,ST=Arizona,C=US",
@@ -30943,5 +30907,5 @@
"last_modified": 1559865884636
}
],
- "timestamp": 1715137023171
+ "timestamp": 1715637423088
}
diff --git a/sourcestamp.txt b/sourcestamp.txt
index b341525c3b..8224dcb5bb 100644
--- a/sourcestamp.txt
+++ b/sourcestamp.txt
@@ -1,2 +1,2 @@
-20240509170740
-https://hg.mozilla.org/releases/mozilla-release/rev/3db775a2083d15ae699bdc129ad9c51f323ace70
+20240526221752
+https://hg.mozilla.org/releases/mozilla-release/rev/6c033deedc28e5dadb0b99de7336cb6ebb336631
diff --git a/toolkit/components/pdfjs/content/web/viewer-geckoview.mjs b/toolkit/components/pdfjs/content/web/viewer-geckoview.mjs
index c309f8cf12..feda69146e 100644
--- a/toolkit/components/pdfjs/content/web/viewer-geckoview.mjs
+++ b/toolkit/components/pdfjs/content/web/viewer-geckoview.mjs
@@ -5646,7 +5646,6 @@ class PDFPageView {
this.renderingState = RenderingStates.RUNNING;
const canvasWrapper = document.createElement("div");
canvasWrapper.classList.add("canvasWrapper");
- canvasWrapper.setAttribute("aria-hidden", true);
this.#addLayer(canvasWrapper, "canvasWrapper");
if (!this.textLayer && this.#textLayerMode !== TextLayerMode.DISABLE && !pdfPage.isPureXfa) {
this._accessibilityManager ||= new TextAccessibilityManager();
diff --git a/toolkit/components/pdfjs/content/web/viewer.mjs b/toolkit/components/pdfjs/content/web/viewer.mjs
index 864140b624..5202de12c7 100644
--- a/toolkit/components/pdfjs/content/web/viewer.mjs
+++ b/toolkit/components/pdfjs/content/web/viewer.mjs
@@ -8219,7 +8219,6 @@ class PDFPageView {
this.renderingState = RenderingStates.RUNNING;
const canvasWrapper = document.createElement("div");
canvasWrapper.classList.add("canvasWrapper");
- canvasWrapper.setAttribute("aria-hidden", true);
this.#addLayer(canvasWrapper, "canvasWrapper");
if (!this.textLayer && this.#textLayerMode !== TextLayerMode.DISABLE && !pdfPage.isPureXfa) {
this._accessibilityManager ||= new TextAccessibilityManager();
diff --git a/toolkit/crashreporter/client/app/src/config.rs b/toolkit/crashreporter/client/app/src/config.rs
index 4e919395e2..7eef674ea8 100644
--- a/toolkit/crashreporter/client/app/src/config.rs
+++ b/toolkit/crashreporter/client/app/src/config.rs
@@ -370,40 +370,16 @@ impl Config {
// sense that if it were to rely on anything, it would be the `Config` (and that may change in
// the future).
pub fn sibling_program_path<N: AsRef<OsStr>>(&self, program: N) -> PathBuf {
- // Expect shouldn't ever panic here because we need more than one argument to run
- // the program in the first place (we've already previously iterated args).
- //
- // We use argv[0] rather than `std::env::current_exe` because `current_exe` doesn't define
- // how symlinks are treated, and we want to support running directly from the local build
- // directory (which uses symlinks on linux and macos).
- let self_path = PathBuf::from(std::env::args_os().next().expect("failed to get argv[0]"));
+ let self_path = self_path();
let exe_extension = self_path.extension().unwrap_or_default();
-
- let mut program_path = self_path.clone();
- // Pop the executable off to get the parent directory.
- program_path.pop();
- program_path.push(program.as_ref());
- program_path.set_extension(exe_extension);
-
- if !program_path.exists() && cfg!(all(not(mock), target_os = "macos")) {
- // On macOS the crash reporter client is shipped as an application bundle contained
- // within Firefox's main application bundle. So when it's invoked its current working
- // directory looks like:
- // Firefox.app/Contents/MacOS/crashreporter.app/Contents/MacOS/
- // The other applications we ship with Firefox are stored in the main bundle
- // (Firefox.app/Contents/MacOS/) so we we need to go back three directories
- // to reach them.
-
- // 4 pops: 1 for the path that was just pushed, and 3 more for
- // `crashreporter.app/Contents/MacOS`.
- for _ in 0..4 {
- program_path.pop();
- }
- program_path.push(program.as_ref());
- program_path.set_extension(exe_extension);
+ if !exe_extension.is_empty() {
+ let mut p = program.as_ref().to_os_string();
+ p.push(".");
+ p.push(exe_extension);
+ sibling_path(p)
+ } else {
+ sibling_path(program)
}
-
- program_path
}
cfg_if::cfg_if! {
@@ -508,6 +484,52 @@ impl Config {
}
}
+/// Get the path of a file that is a sibling of the crashreporter.
+///
+/// On MacOS, this assumes that the crashreporter is its own application bundle within the main
+/// program bundle. On other platforms this assumes siblings reside in the same directory as
+/// the crashreporter.
+///
+/// The returned path isn't guaranteed to exist.
+pub fn sibling_path<N: AsRef<OsStr>>(file: N) -> PathBuf {
+ // Expect shouldn't ever panic here because we need more than one argument to run
+ // the program in the first place (we've already previously iterated args).
+ //
+ // We use argv[0] rather than `std::env::current_exe` because `current_exe` doesn't define
+ // how symlinks are treated, and we want to support running directly from the local build
+ // directory (which uses symlinks on linux and macos).
+ let dir_path = {
+ let mut path = self_path();
+ // Pop the executable off to get the parent directory.
+ path.pop();
+ path
+ };
+
+ let mut path = dir_path.join(file.as_ref());
+
+ if !path.exists() && cfg!(all(not(mock), target_os = "macos")) {
+ // On macOS the crash reporter client is shipped as an application bundle contained
+ // within Firefox's main application bundle. So when it's invoked its current working
+ // directory looks like:
+ // Firefox.app/Contents/MacOS/crashreporter.app/Contents/MacOS/
+ // The other applications we ship with Firefox are stored in the main bundle
+ // (Firefox.app/Contents/MacOS/) so we we need to go back three directories
+ // to reach them.
+ path = dir_path;
+ // 3 pops for `crashreporter.app/Contents/MacOS`.
+ for _ in 0..3 {
+ path.pop();
+ }
+ path.push(file.as_ref());
+ }
+
+ path
+}
+
+fn self_path() -> PathBuf {
+ PathBuf::from(std::env::args_os().next().expect("failed to get argv[0]"))
+}
+
fn env_bool<K: AsRef<OsStr>>(name: K) -> bool {
std::env::var(name).map(|s| !s.is_empty()).unwrap_or(false)
}
diff --git a/toolkit/crashreporter/client/app/src/lang/omnijar.rs b/toolkit/crashreporter/client/app/src/lang/omnijar.rs
index 2d2c34dd8d..b6a4e90aa4 100644
--- a/toolkit/crashreporter/client/app/src/lang/omnijar.rs
+++ b/toolkit/crashreporter/client/app/src/lang/omnijar.rs
@@ -3,8 +3,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use super::language_info::LanguageInfo;
+use crate::config::sibling_path;
use crate::std::{
- env::current_exe,
fs::File,
io::{BufRead, BufReader, Read},
path::Path,
@@ -16,9 +16,11 @@ use zip::read::ZipArchive;
///
/// Returns (locale name, fluent definitions).
pub fn read() -> anyhow::Result<LanguageInfo> {
- let mut path = current_exe().context("failed to get current executable")?;
- path.pop();
- path.push("omni.ja");
+ let mut path = sibling_path(if cfg!(target_os = "macos") {
+ "../Resources/omni.ja"
+ } else {
+ "omni.ja"
+ });
let mut zip = read_omnijar_file(&path)?;
let locales = {
@@ -52,11 +54,16 @@ pub fn read() -> anyhow::Result<LanguageInfo> {
path.push("omni.ja");
let ftl_branding = 'branding: {
- for locale in &locales {
- match read_branding(&locale, &mut zip) {
- Ok(v) => break 'branding v,
- Err(e) => log::warn!("failed to read branding from omnijar: {e:#}"),
+ match read_omnijar_file(&path) {
+ Ok(mut zip) => {
+ for locale in &locales {
+ match read_branding(&locale, &mut zip) {
+ Ok(v) => break 'branding v,
+ Err(e) => log::warn!("failed to read branding from omnijar: {e:#}"),
+ }
+ }
}
+ Err(e) => log::warn!("failed to read browser omnijar: {e:#}"),
}
log::info!("using fallback branding info");
LanguageInfo::default().ftl_branding
diff --git a/toolkit/crashreporter/client/app/src/net/legacy_telemetry.rs b/toolkit/crashreporter/client/app/src/net/legacy_telemetry.rs
index 680f1614b0..9b04f08164 100644
--- a/toolkit/crashreporter/client/app/src/net/legacy_telemetry.rs
+++ b/toolkit/crashreporter/client/app/src/net/legacy_telemetry.rs
@@ -20,6 +20,7 @@ include!(concat!(env!("OUT_DIR"), "/ping_annotations.rs"));
#[derive(Serialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum Ping<'a> {
+ #[serde(rename_all = "camelCase")]
Crash {
id: Uuid,
version: u64,
diff --git a/toolkit/crashreporter/client/app/src/std/env.rs b/toolkit/crashreporter/client/app/src/std/env.rs
index edc22ded8d..77d9d4aecc 100644
--- a/toolkit/crashreporter/client/app/src/std/env.rs
+++ b/toolkit/crashreporter/client/app/src/std/env.rs
@@ -40,6 +40,7 @@ pub fn args_os() -> ArgsOs {
})
}
+#[allow(unused)]
pub fn current_exe() -> std::io::Result<super::path::PathBuf> {
Ok(MockCurrentExe.get(|r| r.clone().into()))
}
diff --git a/toolkit/crashreporter/client/app/src/test.rs b/toolkit/crashreporter/client/app/src/test.rs
index 42d2334bca..8b97765468 100644
--- a/toolkit/crashreporter/client/app/src/test.rs
+++ b/toolkit/crashreporter/client/app/src/test.rs
@@ -311,8 +311,8 @@ impl AssertFiles {
"type": "crash",
"id": MOCK_PING_UUID,
"version": 4,
- "creation_date": MOCK_CURRENT_TIME,
- "client_id": "telemetry_client",
+ "creationDate": MOCK_CURRENT_TIME,
+ "clientId": "telemetry_client",
"payload": {
"sessionId": "telemetry_session",
"version": 1,
diff --git a/widget/gtk/nsDragService.cpp b/widget/gtk/nsDragService.cpp
index f435cdf2a0..6cabfbbe2e 100644
--- a/widget/gtk/nsDragService.cpp
+++ b/widget/gtk/nsDragService.cpp
@@ -607,14 +607,6 @@ nsDragService::EndDragSession(bool aDoneDrag, uint32_t aKeyModifiers) {
mTargetDragContextForRemote = nullptr;
mTargetWindow = nullptr;
mPendingWindow = nullptr;
- mPendingDragContext = nullptr;
- mPendingWindowPoint = {};
- mScheduledTask = eDragTaskNone;
- if (mTaskSource) {
- g_source_remove(mTaskSource);
- mTaskSource = 0;
- }
- mPendingTime = 0;
mCachedDragContext = 0;
return nsBaseDragService::EndDragSession(aDoneDrag, aKeyModifiers);
@@ -2603,7 +2595,6 @@ gboolean nsDragService::RunScheduledTask() {
// Nothing more to do
// Returning false removes the task source from the event loop.
mTaskSource = 0;
- mPendingDragContext = nullptr;
return FALSE;
}