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