# HG changeset patch # User Wolfgang Rosenauer # Date 1690634085 -7200 # Node ID 2a24a948b5cf0d18cac4a3e35d6e74ecbb3178d5 # Parent ba0c97b018a6f61a2ba14de976f1f0d78c6c4a7c Firefox 115.0.3 diff -r ba0c97b018a6 -r 2a24a948b5cf MozillaFirefox/MozillaFirefox.changes --- a/MozillaFirefox/MozillaFirefox.changes Mon Jun 05 21:17:55 2023 +0200 +++ b/MozillaFirefox/MozillaFirefox.changes Sat Jul 29 14:34:45 2023 +0200 @@ -1,4 +1,239 @@ ------------------------------------------------------------------- +Fri Jul 28 20:56:00 UTC 2023 - Andreas Stieger + +- Mozilla Firefox 115.0.3 + * fixes for other platforms +- remove bashisms from firefox startup script (boo#1213657) + +------------------------------------------------------------------- +Thu Jul 13 13:30:20 UTC 2023 - Wolfgang Rosenauer + +- Mozilla Firefox 115.0.2 + * Fixed a bug with displaying a caret in the text editor on some websites + (bmo#1840804) + * Fixed a bug with broken audio rendering on some websites (bmo#1841982) + * Fixed a bug with patternTransform translate using the wrong units + (bmo#1840746) + MFSA 2023-26 (bsc#1213230) + * CVE-2023-3600 (bmo#1839703) + Use-after-free in workers + +------------------------------------------------------------------- +Fri Jul 7 19:39:30 UTC 2023 - Andreas Stieger + +- Mozilla Firefox 115.0.1 + * fixes for other platforms + +------------------------------------------------------------------- +Sun Jul 2 16:00:53 UTC 2023 - Wolfgang Rosenauer + +- Mozilla Firefox 115.0 + * Support for importing payment methods saved in Chrome-based browser + * Hardware video decoding is now enabled for Intel GPUs on Linux + * The Tab Manager dropdown now features close buttons, so tabs + can be closed more quickly + * Streamlined the user interface for importing data in from other browsers + * Users without platform support for H264 video decoding can now + fallback to Cisco's OpenH264 plugin for playback. + * Undo and redo are now available in Password fields + * Changed: On Linux, middle clicks on the new tab button will + now open the xclipboard contents in the new tab. If the + xclipboard content is a URL then that URL is opened, any + other text is opened with your default search provider. + * Changed: For users with a Firefox Colorways built-in theme, + the theme will be automatically migrated to the same theme + hosted on addons.mozilla.org for Firefox profiles that have + disabled add-ons auto-updates. This will allow users to keep + their Colorways theme when they are later removed from + Firefox installer files. + * Changed: Certain Firefox users may come across a message in + the extensions panel indicating that their add-ons are not + allowed on the site currently open. We have introduced a new + back-end feature to only allow some extensions monitored by + Mozilla to run on specific websites for various reasons, + including security concerns. + * HTML5: The builtin editor now behaves similarly to other + browsers with `contenteditable` and `designMode` when + splitting a node, e.g. typing Enter to split a paragraph, and + also when joining two nodes, e.g. typing Backspace at the + start of a paragraph to join the paragraph and the previous + one. + When a node is split, the builtin editor creates a new node + after the original one instead of before, i.e. creates the + right node instead of the left node. + Similarly, when two nodes are joined, the builtin editor + deletes the latter node and moves its children to the end of + the preceding node instead of deleting the former node and + moving its child to the start of the following node. + * HTML5: WebRTC application developers can now specify a target + in milliseconds of media for the jitter buffer to hold. + Altering the target value allows applications to control the + tradeoff between playout delay and the risk of running out of + audio or video frames due to network jitter. + * HTML5: Change array by copy provides additional methods on + `Array.prototype` and `TypedArray.prototype` to enable + changes on the array by returning a new copy of it with the + change. + * HTML5: The animation-composition property is now supported, + allowing a declarative way to define the composite operation + used when multiple animations affect the same property + simultaneously. + * HTML5: Added the URL.canParse() function to allow easy and + fast checking if URLs are valid and parseable. + * HTML5: IndexedDB is now also supported in private browsing + without memory limits thanks to encrypted storage on disk. + The temporary keys to decrypt the information are hold in RAM + only and all stored information is purged at the normal end + of a private browsing session from disk. + * HTML5: Supports conditions are now supported in CSS import + rules @import supports(...) + * Developer: In web development, we rely on third-party + libraries which you may not be interested in while debugging. + These can be ignored. Ignoring them means that breakpoints + will not get hit and they are skipped during stepping. + You can now choose to **Hide ignore-listed sources** in the + Developer Tools source tree + * Developer: We have introduced a new option, + `devtools.f12_enabled`, that can be utilized to prevent the + accidental use of the F12 key, which opens the DevTools + toolbox (bug). + * Enterprise: You can find information about policy updates and + enterprise specific bug fixes in the Firefox for Enterprise + 115 Release Notes. + MFSA 2023-22 (bsc#1212438) + * CVE-2023-3482 (bmo#1839464) + Block all cookies bypass for localstorage + * CVE-2023-37201 (bmo#1826002) + Use-after-free in WebRTC certificate generation + * CVE-2023-37202 (bmo#1834711) + Potential use-after-free from compartment mismatch in SpiderMonkey + * CVE-2023-37203 (bmo#291640) + Drag and Drop API may provide access to local system files + * CVE-2023-37204 (bmo#1832195) + Fullscreen notification obscured via option element + * CVE-2023-37205 (bmo#1704420) + URL spoofing in address bar using RTL characters + * CVE-2023-37206 (bmo#1813299) + Insufficient validation of symlinks in the FileSystem API + * CVE-2023-37207 (bmo#1816287) + Fullscreen notification obscured + * CVE-2023-37208 (bmo#1837675) + Lack of warning when opening Diagcab files + * CVE-2023-37209 (bmo#1837993) + Use-after-free in `NotifyOnHistoryReload` + * CVE-2023-37210 (bmo#1821886) + Full-screen mode exit prevention + * CVE-2023-37211 (bmo#1832306, bmo#1834862, bmo#1835886, + bmo#1836550, bmo#1837450) + Memory safety bugs fixed in Firefox 115, Firefox ESR 102.13, + and Thunderbird 102.13 + * CVE-2023-37212 (bmo#1750870, bmo#1825552, bmo#1826206, bmo#1827076, + bmo#1828690, bmo#1833503, bmo#1835710, bmo#1838587) + Memory safety bugs fixed in Firefox 115 +- Requires NSS 3.90 +- Add patches: + mozilla-rust-disable-future-incompat.patch + mozilla-bmo1775202.patch + mozilla-partial-revert-1768632.patch +- removed obsolete mozilla-buildfixes.patch + +------------------------------------------------------------------- +Tue Jun 20 19:49:51 UTC 2023 - Andreas Stieger + +- Mozilla Firefox 114.0.2: + * Several crash fixes + * Web Extensions: Fixes for 114 regressions in Native Messaging + support + +------------------------------------------------------------------- +Tue Jun 20 06:30:02 UTC 2023 - Wolfgang Rosenauer + +- do not enable LTO as it caused crashes now (boo#1212101) + +------------------------------------------------------------------- +Sat Jun 10 14:48:07 UTC 2023 - Andreas Stieger + +- Mozilla Firefox 114.0.1 + * Fix a startup crash (bmo#1837201, boo#1212101) + +------------------------------------------------------------------- +Fri Jun 9 11:05:47 UTC 2023 - Martin Sirringhaus + +- Only install vaapitest for wayland-enabled builds, where it gets built +- Rebase mozilla-silence-no-return-type.patch +- Rebase s390x-patches, and remove obsolete patches: + mozilla-bmo1005535.patch mozilla-s390x-skia-gradient.patch + +------------------------------------------------------------------- +Mon Jun 5 21:22:19 UTC 2023 - Wolfgang Rosenauer + +- Mozilla Firefox 114.0 + MFSA 2023-20 (bsc#1211922) + * CVE-2023-34414 (bmo#1695986) + Click-jacking certificate exceptions through rendering lag + * CVE-2023-34415 (bmo#1811999) + Site-isolation bypass on sites that allow open redirects to + data: urls + * CVE-2023-34416 (bmo#1752703, bmo#1818394, bmo#1826875, + bmo#1827340, bmo#1827655, bmo#1828065, bmo#1830190, + bmo#1830206, bmo#1830795, bmo#1833339) + Memory safety bugs fixed in Firefox 114 and Firefox ESR + 102.12 + * CVE-2023-34417 (bmo#1746447, bmo#1820903, bmo#1832832) + Memory safety bugs fixed in Firefox 114 + * New: Added UI to manage the DNS over HTTPS exception list. + (bmo#1596847) + * New: Bookmarks can now be searched from the Bookmarks menu. + The Bookmarks menu is accessible by adding the *Bookmarks + menu* button to the toolbar. (bmo#1736937) + * New: Restrict searches to your local browsing history by + selecting *Search history* from the History, Library or + Application menu buttons. (bmo#1736939) + * New: Mac users can now capture video from their cameras in + all supported native resolutions. This enables resolutions + higher than 1280x720. (bmo#1806604) + * New: It is now possible to reorder the extensions listed in + the extensions panel. (bmo#1805924) + * New: Users on macOS, Linux, and Windows 7 can now use FIDO2 / + WebAuthn authenticators over USB. Some advanced features, + such as fully passwordless logins, require a PIN to be set on + the authenticator. (bmo#1814487) + * New: Pocket Recommended content can now be seen in France, + Italy, and Spain. (bmo#None) + * Changed: DNS over HTTPS settings are now part of the + *Privacy & Security* section of the *Settings* page and allow + the user to choose from all the supported modes. + (bmo#1610741) + * HTML5: DOM: Added support for ES Modules on DedicatedWorker + and SharedWorker + * HTML5: WebTransport is now enabled by default and will be + going to release with 114. As the original Explainer notes, + it enables multiple use-cases that are hard or impossible to + handle without it, especially for Gaming and live streaming. + It covers cases that are problematic for alternative + mechanisms, such as WebSockets. + Built on top of HTTP3 (HTTP2 support will be coming later). + The current implementation in Firefox is passing 505 out of + 565 Web-Platform Tests. + * HTML5: CSS: The `infinity` and `NaN` constants are now + supported inside the `calc()` function. (bmo#1830759) + * Developer: The *Copy as cURL* feature, available in the + Network panel, has been enhanced. It now supports the + -`-compressed` argument. (bmo#1776120) + * Developer: The Accessibility Inspector has been improved to + accurately recognize all the ARIA roles like `banner`, + `main`, `navigation`, and `contentinfo`, etc. This + enhancement is particularly beneficial for web developers + working with ARIA roles to improve web accessibility. + (bmo#1572512) + * Developer: Firefox now provides support for the CSS Cascading + Level 4 `supports()` syntax for `@import` rules. This allows + for the importation of other stylesheets based on support- + dependency. In addition, the Inspector panel now accurately + displays the conditions at the top of the imported rule. +- requires NSS 3.89.1 + +------------------------------------------------------------------- Wed May 24 19:26:35 UTC 2023 - Andreas Stieger - Mozilla Firefox 113.0.2 (boo#1211696) diff -r ba0c97b018a6 -r 2a24a948b5cf MozillaFirefox/MozillaFirefox.spec --- a/MozillaFirefox/MozillaFirefox.spec Mon Jun 05 21:17:55 2023 +0200 +++ b/MozillaFirefox/MozillaFirefox.spec Sat Jul 29 14:34:45 2023 +0200 @@ -28,9 +28,9 @@ # orig_suffix b3 # major 69 # mainver %%major.99 -%define major 113 -%define mainver %major.0.2 -%define orig_version 113.0.2 +%define major 115 +%define mainver %major.0.3 +%define orig_version 115.0.3 %define orig_suffix %{nil} %define update_channel release %define branding 1 @@ -50,13 +50,17 @@ # SLE-12 doesn't have this macro %{!?_rpmmacrodir: %global _rpmmacrodir %{_rpmconfigdir}/macros.d} +# No i586 on SLE-12, as the rpmlints are broken and can't handle the big rpms resulting from this build. +%if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000 +ExclusiveArch: aarch64 ppc64le x86_64 s390x +%else # Firefox only supports i686 %ifarch %ix86 ExclusiveArch: i586 i686 BuildArch: i686 %{expand:%%global optflags %(echo "%optflags"|sed -e s/i586/i686/) -march=i686 -mtune=generic -msse2} %endif -%{expand:%%global optflags %(echo "%optflags"|sed -e s/-Werror=return-type//) } +%endif %{expand:%%global optflags %(echo "%optflags"|sed -e s/-flto=auto//) } # general build definitions @@ -94,23 +98,13 @@ BuildRequires: fdupes BuildRequires: memory-constraints %if 0%{?suse_version} < 1550 && 0%{?sle_version} <= 150500 -BuildRequires: gcc11-c++ +BuildRequires: gcc12 +BuildRequires: gcc12-c++ %else BuildRequires: gcc-c++ %endif -%if 0%{?suse_version} < 1550 && 0%{?sle_version} < 150300 -BuildRequires: cargo >= 1.65 -BuildRequires: rust >= 1.65 -%else -# Newer sle/leap/tw use parallel versioned rust releases which have -# a different method for provides that we can use to request a -# specific version -# minimal requirement: -BuildRequires: rust+cargo >= 1.65 -# actually used upstream: -BuildRequires: cargo1.67 -BuildRequires: rust1.67 -%endif +BuildRequires: cargo1.69 +BuildRequires: rust1.69 %if 0%{useccache} != 0 BuildRequires: ccache %endif @@ -120,12 +114,15 @@ BuildRequires: libproxy-devel BuildRequires: makeinfo BuildRequires: mozilla-nspr-devel >= 4.35 -BuildRequires: mozilla-nss-devel >= 3.89 +BuildRequires: mozilla-nss-devel >= 3.90 BuildRequires: nasm >= 2.14 -BuildRequires: nodejs >= 10.22.1 +BuildRequires: nodejs >= 12.22.12 %if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000 +BuildRequires: libXtst-devel BuildRequires: python-libxml2 -BuildRequires: python36 +BuildRequires: python39 +BuildRequires: python39-curses +BuildRequires: python39-devel %else %if 0%{?sle_version} >= 150000 && 0%{?sle_version} <= 150500 BuildRequires: python39 @@ -219,20 +216,20 @@ Patch6: mozilla-s390-context.patch Patch7: mozilla-pgo.patch Patch8: mozilla-reduce-rust-debuginfo.patch -Patch9: mozilla-bmo1005535.patch Patch10: mozilla-bmo1504834-part1.patch Patch11: mozilla-bmo1504834-part3.patch Patch12: mozilla-bmo1512162.patch Patch13: mozilla-fix-top-level-asm.patch Patch14: mozilla-bmo849632.patch Patch15: mozilla-bmo998749.patch -Patch16: mozilla-s390x-skia-gradient.patch Patch17: mozilla-libavcodec58_91.patch Patch18: mozilla-silence-no-return-type.patch Patch19: mozilla-bmo531915.patch Patch20: one_swizzle_to_rule_them_all.patch Patch21: svg-rendering.patch -Patch22: mozilla-buildfixes.patch +Patch22: mozilla-partial-revert-1768632.patch +Patch23: mozilla-bmo1775202.patch +Patch24: mozilla-rust-disable-future-incompat.patch # Firefox/browser Patch101: firefox-kde.patch Patch102: firefox-branded-icons.patch @@ -345,19 +342,20 @@ TIME="\"$(date -d "${modified}" "+%%R")\"" find . -regex ".*\.c\|.*\.cpp\|.*\.h" -exec sed -i "s/__DATE__/${DATE}/g;s/__TIME__/${TIME}/g" {} + -# SLE-12 provides python36, but that package does not provide a python3 binary +# SLE-12 provides python39, but that package does not provide a python3 binary %if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000 -sed -i "s/python3/python36/g" configure.in -sed -i "s/python3/python36/g" mach -export PYTHON3=/usr/bin/python36 +#sed -i "s/python3/python3.9/g" configure.in +sed -i "s|/usr/bin/env python3|/usr/bin/env python3.9|" mach +sed -i "s|potential_python_binary = f\"python3.{i}\"|potential_python_binary = f\"python3.9.{i}\"|" mach +export PYTHON3=/usr/bin/python3.9 %endif -# kdehelperversion=$(cat toolkit/xre/nsKDEUtils.cpp | grep '#define KMOZILLAHELPER_VERSION' | cut -d ' ' -f 3) if test "$kdehelperversion" != %{kde_helper_version}; then echo fix kde helper version in the .spec file exit 1 fi + # When doing only_print_mozconfig, this file isn't necessarily available, so skip it cp %{SOURCE4} .obsenv.sh %else @@ -378,7 +376,8 @@ export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system export CFLAGS="%{optflags}" %if 0%{?suse_version} < 1550 && 0%{?sle_version} <= 150500 -export CC=gcc-11 +export CC=gcc-12 +export CXX=g++-12 %else %if 0%{?clang_build} == 0 export CC=gcc @@ -397,7 +396,7 @@ export LDFLAGS="\$LDFLAGS -fPIC -Wl,-z,relro,-z,now" %ifarch ppc64 ppc64le %if 0%{?clang_build} == 0 -export CFLAGS="\$CFLAGS -mminimal-toc" +#export CFLAGS="\$CFLAGS -mminimal-toc" %endif %endif %ifarch %ix86 @@ -494,7 +493,7 @@ %ifarch x86_64 # LTO needs newer toolchain stack only (at least GCC 8.2.1 (r268506) %if 0%{?suse_version} > 1500 -ac_add_options --enable-lto +#ac_add_options --enable-lto %if 0%{?do_profiling} ac_add_options MOZ_PGO=1 %endif @@ -726,6 +725,10 @@ %{progdir}/application.ini %{progdir}/dependentlibs.list %{progdir}/*.so +%{progdir}/glxtest +%if 0%{wayland_supported} +%{progdir}/vaapitest +%endif %{progdir}/omni.ja %{progdir}/fonts/ %{progdir}/pingsender diff -r ba0c97b018a6 -r 2a24a948b5cf MozillaFirefox/firefox-appdata.xml --- a/MozillaFirefox/firefox-appdata.xml Mon Jun 05 21:17:55 2023 +0200 +++ b/MozillaFirefox/firefox-appdata.xml Sat Jul 29 14:34:45 2023 +0200 @@ -10,7 +10,7 @@ Firefox Web Browser MPL-2.0 Mozilla Firefox Web Browser - http://www.mozilla.org/ + https://www.mozilla.org/

Mozilla Firefox is a standalone web browser, designed for privacy, security, standards compliance and performance. Its functionality can be enhanced via a plethora of extensions.

diff -r ba0c97b018a6 -r 2a24a948b5cf MozillaFirefox/mozilla-bmo1775202.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MozillaFirefox/mozilla-bmo1775202.patch Sat Jul 29 14:34:45 2023 +0200 @@ -0,0 +1,1 @@ +../mozilla-bmo1775202.patch \ No newline at end of file diff -r ba0c97b018a6 -r 2a24a948b5cf MozillaFirefox/mozilla-buildfixes.patch --- a/MozillaFirefox/mozilla-buildfixes.patch Mon Jun 05 21:17:55 2023 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -../mozilla-buildfixes.patch \ No newline at end of file diff -r ba0c97b018a6 -r 2a24a948b5cf MozillaFirefox/mozilla-partial-revert-1768632.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MozillaFirefox/mozilla-partial-revert-1768632.patch Sat Jul 29 14:34:45 2023 +0200 @@ -0,0 +1,1 @@ +../mozilla-partial-revert-1768632.patch \ No newline at end of file diff -r ba0c97b018a6 -r 2a24a948b5cf MozillaFirefox/mozilla-rust-disable-future-incompat.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MozillaFirefox/mozilla-rust-disable-future-incompat.patch Sat Jul 29 14:34:45 2023 +0200 @@ -0,0 +1,1 @@ +../mozilla-rust-disable-future-incompat.patch \ No newline at end of file diff -r ba0c97b018a6 -r 2a24a948b5cf MozillaFirefox/tar_stamps --- a/MozillaFirefox/tar_stamps Mon Jun 05 21:17:55 2023 +0200 +++ b/MozillaFirefox/tar_stamps Sat Jul 29 14:34:45 2023 +0200 @@ -1,10 +1,10 @@ PRODUCT="firefox" CHANNEL="release" -VERSION="113.0.2" +VERSION="115.0.3" VERSION_SUFFIX="" -PREV_VERSION="113.0.1" +PREV_VERSION="115.0.2" PREV_VERSION_SUFFIX="" #SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation RELEASE_REPO="https://hg.mozilla.org/releases/mozilla-release" -RELEASE_TAG="f33c60c4ff99d5beed15c73b80250287090e2861" -RELEASE_TIMESTAMP="20230522134052" +RELEASE_TAG="326212e7271a9c9f0776153095cf48d7153260aa" +RELEASE_TIMESTAMP="20230726201356" diff -r ba0c97b018a6 -r 2a24a948b5cf firefox-branded-icons.patch --- a/firefox-branded-icons.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/firefox-branded-icons.patch Sat Jul 29 14:34:45 2023 +0200 @@ -2,15 +2,11 @@ # Parent e0751ad74e835e80041a61ea00c2a63bf6fbe2de # Parent fe7e6fdd75484993420740244f21b5b41d6e0fa1 -diff --git a/browser/branding/branding-common.mozbuild b/browser/branding/branding-common.mozbuild ---- a/browser/branding/branding-common.mozbuild -+++ b/browser/branding/branding-common.mozbuild -@@ -25,12 +25,15 @@ def FirefoxBranding(): - 'PrivateBrowsing_70.png', - 'VisualElements_150.png', - 'VisualElements_70.png', - ] - elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk': +Index: firefox-115.0/browser/branding/branding-common.mozbuild +=================================================================== +--- firefox-115.0.orig/browser/branding/branding-common.mozbuild ++++ firefox-115.0/browser/branding/branding-common.mozbuild +@@ -30,6 +30,9 @@ def FirefoxBranding(): FINAL_TARGET_FILES.chrome.icons.default += [ 'default128.png', 'default16.png', @@ -20,16 +16,11 @@ 'default32.png', 'default48.png', 'default64.png', - ] -diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in ---- a/browser/installer/package-manifest.in -+++ b/browser/installer/package-manifest.in -@@ -221,20 +221,23 @@ - @RESPATH@/browser/chrome/browser@JAREXT@ - @RESPATH@/browser/chrome/browser.manifest - @RESPATH@/chrome/pdfjs.manifest - @RESPATH@/chrome/pdfjs/* - @RESPATH@/chrome/toolkit@JAREXT@ +Index: firefox-115.0/browser/installer/package-manifest.in +=================================================================== +--- firefox-115.0.orig/browser/installer/package-manifest.in ++++ firefox-115.0/browser/installer/package-manifest.in +@@ -227,10 +227,13 @@ @RESPATH@/chrome/toolkit.manifest #ifdef MOZ_GTK @RESPATH@/browser/chrome/icons/default/default16.png @@ -43,8 +34,3 @@ #endif @RESPATH@/browser/features/* - ; [DevTools Startup Files] - @RESPATH@/browser/chrome/devtools-startup@JAREXT@ - @RESPATH@/browser/chrome/devtools-startup.manifest - - ; DevTools diff -r ba0c97b018a6 -r 2a24a948b5cf firefox-kde.patch --- a/firefox-kde.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/firefox-kde.patch Sat Jul 29 14:34:45 2023 +0200 @@ -11,15 +11,11 @@ 4. Replace #ifndef with #ifdef in the line above (this hanges the button order from Gnome-style to KDE-style) 5. hg qrefresh -diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js ---- a/browser/components/preferences/main.js -+++ b/browser/components/preferences/main.js -@@ -296,16 +296,23 @@ var gMainPane = { - }, backoffTimes[this._backoffIndex + 1 < backoffTimes.length ? this._backoffIndex++ : backoffTimes.length - 1]); - }; - - window.setTimeout(() => { - window.requestIdleCallback(pollForDefaultBrowser); +Index: firefox-115.0/browser/components/preferences/main.js +=================================================================== +--- firefox-115.0.orig/browser/components/preferences/main.js ++++ firefox-115.0/browser/components/preferences/main.js +@@ -293,6 +293,13 @@ var gMainPane = { }, backoffTimes[this._backoffIndex]); } @@ -33,17 +29,7 @@ this.initBrowserContainers(); this.buildContentProcessCountMenuList(); - this.updateDefaultPerformanceSettingsPref(); - - let defaultPerformancePref = Preferences.get( - "browser.preferences.defaultPerformanceSettings.enabled" - ); -@@ -1298,16 +1305,27 @@ var gMainPane = { - this._backoffIndex = 0; - - let shellSvc = getShellService(); - if (!shellSvc) { - return; +@@ -1762,6 +1769,17 @@ var gMainPane = { } try { shellSvc.setDefaultBrowser(true, false); @@ -61,20 +47,11 @@ } catch (ex) { console.error(ex); return; - } - - let isDefault = shellSvc.isDefaultBrowser(false, true); - let setDefaultPane = document.getElementById("setDefaultPane"); - setDefaultPane.classList.toggle("is-default", isDefault); -diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build ---- a/browser/components/shell/moz.build -+++ b/browser/components/shell/moz.build -@@ -31,16 +31,18 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "coco - ] - elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": - XPIDL_SOURCES += [ - "nsIGNOMEShellService.idl", - ] +Index: firefox-115.0/browser/components/shell/moz.build +=================================================================== +--- firefox-115.0.orig/browser/components/shell/moz.build ++++ firefox-115.0/browser/components/shell/moz.build +@@ -36,6 +36,8 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gt SOURCES += [ "nsGNOMEShellService.cpp", @@ -83,15 +60,10 @@ ] if CONFIG["MOZ_ENABLE_DBUS"]: SOURCES += [ - "nsGNOMEShellDBusHelper.cpp", - "nsGNOMEShellSearchProvider.cpp", - ] - include("/ipc/chromium/chromium-config.mozbuild") - -diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp -new file mode 100644 +Index: firefox-115.0/browser/components/shell/nsKDEShellService.cpp +=================================================================== --- /dev/null -+++ b/browser/components/shell/nsKDEShellService.cpp ++++ firefox-115.0/browser/components/shell/nsKDEShellService.cpp @@ -0,0 +1,109 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public @@ -202,10 +174,10 @@ + return NS_ERROR_NOT_IMPLEMENTED; +} + -diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h -new file mode 100644 +Index: firefox-115.0/browser/components/shell/nsKDEShellService.h +=================================================================== --- /dev/null -+++ b/browser/components/shell/nsKDEShellService.h ++++ firefox-115.0/browser/components/shell/nsKDEShellService.h @@ -0,0 +1,32 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public @@ -239,10 +211,10 @@ +}; + +#endif // nskdeshellservice_h____ -diff --git a/browser/components/shell/nsUnixShellService.cpp b/browser/components/shell/nsUnixShellService.cpp -new file mode 100644 +Index: firefox-115.0/browser/components/shell/nsUnixShellService.cpp +=================================================================== --- /dev/null -+++ b/browser/components/shell/nsUnixShellService.cpp ++++ firefox-115.0/browser/components/shell/nsUnixShellService.cpp @@ -0,0 +1,22 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public @@ -266,10 +238,10 @@ + return nsKDEShellServiceConstructor( aIID, aResult ); + return nsGNOMEShellServiceConstructor( aIID, aResult ); +} -diff --git a/browser/components/shell/nsUnixShellService.h b/browser/components/shell/nsUnixShellService.h -new file mode 100644 +Index: firefox-115.0/browser/components/shell/nsUnixShellService.h +=================================================================== --- /dev/null -+++ b/browser/components/shell/nsUnixShellService.h ++++ firefox-115.0/browser/components/shell/nsUnixShellService.h @@ -0,0 +1,15 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-aarch64-startup-crash.patch --- a/mozilla-aarch64-startup-crash.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-aarch64-startup-crash.patch Sat Jul 29 14:34:45 2023 +0200 @@ -3,19 +3,14 @@ # Date 1558442998 -7200 # Tue May 21 14:49:58 2019 +0200 # Node ID 386083b58d8558141901d796ec6919a4aba7ad3a -# Parent a30a9b9aae5740f096a16118ed9e4bc45d3d1c35 +# Parent 76b747f7d113bddbb8593184d81e1bfe5fd51af0 bsc#991344 - Rpi3: Firefox crashes after a few seconds of usage bmo#1302554 - ARM/AARCH64: Firefox crashes on NULL nsIChannel** result pointer in nsIOService::NewChannelFromURIWithProxyFlagsInternal() diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp --- a/netwerk/base/nsIOService.cpp +++ b/netwerk/base/nsIOService.cpp -@@ -1032,17 +1032,23 @@ nsresult nsIOService::NewChannelFromURIW - "doesn't support nsIUploadChannel2. An extension has " - "supplied a non-functional http protocol handler. This will " - "break behavior and in future releases not work at all."); - } - gHasWarnedUploadChannel2 = true; +@@ -1159,7 +1159,13 @@ nsresult nsIOService::NewChannelFromURIW } } @@ -29,8 +24,3 @@ return NS_OK; } - NS_IMETHODIMP - nsIOService::NewChannelFromURIWithProxyFlags( - nsIURI* aURI, nsIURI* aProxyURI, uint32_t aProxyFlags, - nsINode* aLoadingNode, nsIPrincipal* aLoadingPrincipal, - nsIPrincipal* aTriggeringPrincipal, uint32_t aSecurityFlags, diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-bmo1504834-part1.patch --- a/mozilla-bmo1504834-part1.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-bmo1504834-part1.patch Sat Jul 29 14:34:45 2023 +0200 @@ -1,43 +1,34 @@ # HG changeset patch -# Parent 37d8d8fc1d9e42887a736102ff9cdab24d7a9aa8 +# Parent 9fcbd287056a40084b1e679f787bf683b291f323 Taken from https://bugzilla.mozilla.org/show_bug.cgi?id=1504834 diff --git a/gfx/2d/DrawTargetSkia.cpp b/gfx/2d/DrawTargetSkia.cpp --- a/gfx/2d/DrawTargetSkia.cpp +++ b/gfx/2d/DrawTargetSkia.cpp -@@ -147,18 +147,17 @@ static IntRect CalculateSurfaceBounds(co - Rect sampledBounds = inverse.TransformBounds(*aBounds); - if (!sampledBounds.ToIntRect(&bounds)) { - return surfaceBounds; - } - - return surfaceBounds.Intersect(bounds); +@@ -156,7 +156,8 @@ static IntRect CalculateSurfaceBounds(co } --static const int kARGBAlphaOffset = + static const int kARGBAlphaOffset = - SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0; -+static const int kARGBAlphaOffset = 0; // Skia is always BGRA SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0; ++ 0; // Skia is always BGRA SurfaceFormat::A8R8G8B8_UINT32 == ++ // SurfaceFormat::B8G8R8A8 ? 3 : 0; static bool VerifyRGBXFormat(uint8_t* aData, const IntSize& aSize, const int32_t aStride, SurfaceFormat aFormat) { - if (aFormat != SurfaceFormat::B8G8R8X8 || aSize.IsEmpty()) { - return true; - } - // We should've initialized the data to be opaque already - // On debug builds, verify that this is actually true. diff --git a/gfx/2d/Types.h b/gfx/2d/Types.h --- a/gfx/2d/Types.h +++ b/gfx/2d/Types.h -@@ -87,25 +87,18 @@ enum class SurfaceFormat : int8_t { - Depth, - +@@ -89,18 +89,11 @@ enum class SurfaceFormat : int8_t { // This represents the unknown format. UNKNOWN, // TODO: Replace uses with Maybe. - // The following values are endian-independent synonyms. The _UINT32 suffix - // indicates that the name reflects the layout when viewed as a uint32_t - // value. +-// The following values are endian-independent synonyms. The _UINT32 suffix +-// indicates that the name reflects the layout when viewed as a uint32_t +-// value. -#if MOZ_LITTLE_ENDIAN() ++ // The following values are endian-independent synonyms. The _UINT32 suffix ++ // indicates that the name reflects the layout when viewed as a uint32_t ++ // value. A8R8G8B8_UINT32 = B8G8R8A8, // 0xAARRGGBB X8R8G8B8_UINT32 = B8G8R8X8, // 0x00RRGGBB -#elif MOZ_BIG_ENDIAN() @@ -49,20 +40,10 @@ // The following values are OS and endian-independent synonyms. // - // TODO(aosmond): When everything blocking bug 1581828 has been resolved, we - // can make this use R8B8G8A8 and R8B8G8X8 for non-Windows platforms. - OS_RGBA = A8R8G8B8_UINT32, - OS_RGBX = X8R8G8B8_UINT32 - }; -diff --git a/gfx/skia/skia/third_party/skcms/skcms.cc b/gfx/skia/skia/third_party/skcms/skcms.cc ---- a/gfx/skia/skia/third_party/skcms/skcms.cc -+++ b/gfx/skia/skia/third_party/skcms/skcms.cc -@@ -25,16 +25,18 @@ - // it'd be a lot slower. But we want all those headers included so we - // can use their features after runtime checks later. - #include - #include - #include +diff --git a/gfx/skia/skia/modules/skcms/skcms.cc b/gfx/skia/skia/modules/skcms/skcms.cc +--- a/gfx/skia/skia/modules/skcms/skcms.cc ++++ b/gfx/skia/skia/modules/skcms/skcms.cc +@@ -30,6 +30,8 @@ #include #include #endif @@ -70,30 +51,21 @@ + #define SKCMS_PORTABLE #endif - // sizeof(x) will return size_t, which is 32-bit on some machines and 64-bit on others. - // We have better testing on 64-bit machines, so force 32-bit machines to behave like 64-bit. - // - // Please do not use sizeof() directly, and size_t only when required. - // (We have no way of enforcing these requests...) - #define SAFE_SIZEOF(x) ((uint64_t)sizeof(x)) -@@ -275,30 +277,38 @@ enum { - skcms_Signature_sf32 = 0x73663332, - // XYZ is also a PCS signature, so it's defined in skcms.h - // skcms_Signature_XYZ = 0x58595A20, - }; - + static bool runtime_cpu_detection = true; +@@ -324,20 +326,28 @@ enum { static uint16_t read_big_u16(const uint8_t* ptr) { uint16_t be; memcpy(&be, ptr, sizeof(be)); -#if defined(_MSC_VER) +- return _byteswap_ushort(be); +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + return be; -+#else + #else +- return __builtin_bswap16(be); + #if defined(_MSC_VER) - return _byteswap_ushort(be); --#else ++ return _byteswap_ushort(be); + #else - return __builtin_bswap16(be); ++ return __builtin_bswap16(be); + #endif #endif } @@ -102,20 +74,16 @@ uint32_t be; memcpy(&be, ptr, sizeof(be)); -#if defined(_MSC_VER) +- return _byteswap_ulong(be); +#if __BYTE_ORDER == __ORDER_BIG_ENDIAN__ + return be; -+#else + #else +- return __builtin_bswap32(be); + #if defined(_MSC_VER) - return _byteswap_ulong(be); --#else ++ return _byteswap_ulong(be); + #else - return __builtin_bswap32(be); ++ return __builtin_bswap32(be); + #endif #endif } - static int32_t read_big_i32(const uint8_t* ptr) { - return (int32_t)read_big_u32(ptr); - } - - static float read_big_fixed(const uint8_t* ptr) { diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-bmo1504834-part3.patch --- a/mozilla-bmo1504834-part3.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-bmo1504834-part3.patch Sat Jul 29 14:34:45 2023 +0200 @@ -1,64 +1,17 @@ # HG changeset patch -# Parent d1d66f7e4d0e7fd45e91e4fcee07555e72046d48 +# Parent 09cd4ac2cc607e85aa572425b824fbab386af607 For FF68, AntiAliasing of XULTexts seem to be broken on big endian (s390x). Text and icons of the sandwich-menu to the right of the address bar, as well as plugin-windows appears transparant, which usually means unreadable (white on white). -diff --git a/gfx/skia/skia/include/private/SkNx.h b/gfx/skia/skia/include/private/SkNx.h ---- a/gfx/skia/skia/include/private/SkNx.h -+++ b/gfx/skia/skia/include/private/SkNx.h -@@ -233,17 +233,28 @@ struct SkNx<1,T> { - AI SkNx operator<<(int bits) const { return fVal << bits; } - AI SkNx operator>>(int bits) const { return fVal >> bits; } - - AI SkNx operator+(const SkNx& y) const { return fVal + y.fVal; } - AI SkNx operator-(const SkNx& y) const { return fVal - y.fVal; } - AI SkNx operator*(const SkNx& y) const { return fVal * y.fVal; } - AI SkNx operator/(const SkNx& y) const { return fVal / y.fVal; } - -+ // On Big endian the commented out variant doesn't work, -+ // and honestly, I have no idea why it exists in the first place. -+ // The reason its broken is, I think, that it defaults to the double-variant of ToBits() -+ // which gets a 64-bit integer, and FromBits returns 32-bit, -+ // cutting off the wrong half again. -+ // Overall, I see no reason to have ToBits and FromBits at all (even for floats/doubles). -+ // Still we are only "fixing" this for big endian and leave little endian alone (never touch a running system) -+#ifdef SK_CPU_BENDIAN -+ AI SkNx operator&(const SkNx& y) const { return fVal & y.fVal; } -+#else - AI SkNx operator&(const SkNx& y) const { return FromBits(ToBits(fVal) & ToBits(y.fVal)); } -+#endif - AI SkNx operator|(const SkNx& y) const { return FromBits(ToBits(fVal) | ToBits(y.fVal)); } - AI SkNx operator^(const SkNx& y) const { return FromBits(ToBits(fVal) ^ ToBits(y.fVal)); } - - AI SkNx operator==(const SkNx& y) const { return FromBits(fVal == y.fVal ? ~0 : 0); } - AI SkNx operator!=(const SkNx& y) const { return FromBits(fVal != y.fVal ? ~0 : 0); } - AI SkNx operator<=(const SkNx& y) const { return FromBits(fVal <= y.fVal ? ~0 : 0); } - AI SkNx operator>=(const SkNx& y) const { return FromBits(fVal >= y.fVal ? ~0 : 0); } - AI SkNx operator< (const SkNx& y) const { return FromBits(fVal < y.fVal ? ~0 : 0); } diff --git a/gfx/skia/skia/src/opts/SkBlitMask_opts.h b/gfx/skia/skia/src/opts/SkBlitMask_opts.h --- a/gfx/skia/skia/src/opts/SkBlitMask_opts.h +++ b/gfx/skia/skia/src/opts/SkBlitMask_opts.h -@@ -198,17 +198,23 @@ namespace SK_OPTS_NS { - const SkAlpha* mask, size_t maskRB, - int w, int h) { - auto fn = [](const Sk4px& d, const Sk4px& aa) { - // = (s + d(1-sa))aa + d(1-aa) - // = s*aa + d(1-sa*aa) +@@ -210,6 +210,8 @@ namespace SK_OPTS_NS { // ~~~> // a = 1*aa + d(1-1*aa) = aa + d(1-aa) // c = 0*aa + d(1-1*aa) = d(1-aa) -+ -+ // For big endian we have to swap the alpha-mask from 0,0,0,255 to 255,0,0,0 -+#ifdef SK_CPU_BENDIAN -+ return Sk4px(Sk16b(aa) & Sk16b(255,0,0,0, 255,0,0,0, 255,0,0,0, 255,0,0,0)) -+#else - return Sk4px(Sk16b(aa) & Sk16b(0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255)) -+#endif ++ // TODO: Check this for endian-issues! ++ // Do we need to switch 255 to the front for all of those tuples? + return (aa & Sk4px(skvx::byte16{0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255})) + d.approxMulDiv255(aa.inv()); }; - while (h --> 0) { - Sk4px::MapDstAlpha(w, dst, mask, fn); - dst += dstRB / sizeof(*dst); - mask += maskRB / sizeof(*mask); - } - } diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-bmo1512162.patch --- a/mozilla-bmo1512162.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-bmo1512162.patch Sat Jul 29 14:34:45 2023 +0200 @@ -3,15 +3,11 @@ This fixes a broken build for gcc < 9 on ppc64le. This patch can be removed for newer gcc-versions. -diff --git a/js/xpconnect/src/XPCWrappedNative.cpp b/js/xpconnect/src/XPCWrappedNative.cpp ---- a/js/xpconnect/src/XPCWrappedNative.cpp -+++ b/js/xpconnect/src/XPCWrappedNative.cpp -@@ -1072,17 +1072,21 @@ class MOZ_STACK_CLASS CallMethodHelper f - uint32_t* result); - - MOZ_ALWAYS_INLINE bool GetInterfaceTypeFromParam(const nsXPTType& type, - nsID* result) const; - +Index: firefox-115.0/js/xpconnect/src/XPCWrappedNative.cpp +=================================================================== +--- firefox-115.0.orig/js/xpconnect/src/XPCWrappedNative.cpp ++++ firefox-115.0/js/xpconnect/src/XPCWrappedNative.cpp +@@ -1061,7 +1061,11 @@ class MOZ_STACK_CLASS CallMethodHelper f MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex, MutableHandleValue srcp) const; @@ -24,17 +20,7 @@ MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath(); - nsXPTCVariant* GetDispatchParam(uint8_t paramIndex) { - if (paramIndex >= mJSContextIndex) { - paramIndex += 1; - } - if (paramIndex >= mOptArgcIndex) { -@@ -1119,17 +1123,21 @@ class MOZ_STACK_CLASS CallMethodHelper f - - { - // Success checked later. - mIFaceInfo->GetMethodInfo(mVTableIndex, &mMethodInfo); - } +@@ -1108,7 +1112,11 @@ class MOZ_STACK_CLASS CallMethodHelper f ~CallMethodHelper(); @@ -47,8 +33,3 @@ // Trace implementation so we can put our CallMethodHelper in a Rooted. void trace(JSTracer* aTrc); - }; - - // static - bool XPCWrappedNative::CallMethod(XPCCallContext& ccx, - CallMode mode /*= CALL_METHOD */) { diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-bmo1775202.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mozilla-bmo1775202.patch Sat Jul 29 14:34:45 2023 +0200 @@ -0,0 +1,26 @@ +From: Mike Hommey +Date: Sun, 14 Aug 2022 07:01:33 +0900 +Subject: Work around bz#1775202 to fix FTBFS on ppc64el + +--- + third_party/libwebrtc/moz.build | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/third_party/libwebrtc/moz.build b/third_party/libwebrtc/moz.build +index 976cf373..311519c 100644 +--- a/third_party/libwebrtc/moz.build ++++ b/third_party/libwebrtc/moz.build +@@ -566,6 +566,13 @@ if CONFIG["CPU_ARCH"] == "arm" and CONFIG["OS_TARGET"] == "Linux": + "/third_party/libwebrtc/third_party/pipewire/pipewire_gn" + ] + ++if CONFIG["CPU_ARCH"] == "ppc64" and CONFIG["OS_TARGET"] == "Linux": ++ ++ DIRS += [ ++ "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn", ++ "/third_party/libwebrtc/modules/desktop_capture/primitives_gn", ++ ] ++ + if CONFIG["CPU_ARCH"] == "x86" and CONFIG["OS_TARGET"] == "Linux": + + DIRS += [ diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-bmo849632.patch --- a/mozilla-bmo849632.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-bmo849632.patch Sat Jul 29 14:34:45 2023 +0200 @@ -6,15 +6,11 @@ So we swizzle the output of webgl after reading it from readpixels() Note: This does not fix all webGL sites, but is a step in the right direction -diff --git a/gfx/gl/GLContext.h b/gfx/gl/GLContext.h ---- a/gfx/gl/GLContext.h -+++ b/gfx/gl/GLContext.h -@@ -1548,16 +1548,23 @@ class GLContext : public GenericAtomicRe - AFTER_GL_CALL; - } - - void raw_fReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, - GLenum format, GLenum type, GLvoid* pixels) { +Index: firefox-115.0/gfx/gl/GLContext.h +=================================================================== +--- firefox-115.0.orig/gfx/gl/GLContext.h ++++ firefox-115.0/gfx/gl/GLContext.h +@@ -1560,6 +1560,13 @@ class GLContext : public GenericAtomicRe BEFORE_GL_CALL; mSymbols.fReadPixels(x, y, width, height, format, type, pixels); OnSyncCall(); @@ -28,8 +24,3 @@ AFTER_GL_CALL; mHeavyGLCallsSinceLastFlush = true; } - - void fReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, - GLenum format, GLenum type, GLvoid* pixels); - - public: diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-buildfixes.patch --- a/mozilla-buildfixes.patch Mon Jun 05 21:17:55 2023 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -# HG changeset patch -# User Wolfgang Rosenauer -# Parent e583ac9b86ba82dd1c60d307115b4cb96296a6af -# References: bmo#1792159 - Add missing includes to AtomicOperationsGenerated.h - -diff --git a/mozglue/misc/SIMD_avx2.cpp b/mozglue/misc/SIMD_avx2.cpp ---- a/mozglue/misc/SIMD_avx2.cpp -+++ b/mozglue/misc/SIMD_avx2.cpp -@@ -53,17 +53,17 @@ template - } - if (sizeof(TValue) == 2) { - return _mm256_cmpeq_epi16(a, b); - } - - return _mm256_cmpeq_epi64(a, b); - } - --# if defined(__GNUC__) && !defined(__clang__) -+# if 0 - - // See the comment in SIMD.cpp over Load32BitsIntoXMM. This is just adapted - // from that workaround. Testing this, it also yields the correct instructions - // across all tested compilers. - __m128i Load64BitsIntoXMM(uintptr_t ptr) { - int64_t tmp; - memcpy(&tmp, reinterpret_cast(ptr), sizeof(tmp)); - return _mm_cvtsi64_si128(tmp); diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-fix-aarch64-libopus.patch --- a/mozilla-fix-aarch64-libopus.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-fix-aarch64-libopus.patch Sat Jul 29 14:34:45 2023 +0200 @@ -1,15 +1,10 @@ # HG changeset patch -# Parent 2640f2f68373b7bec776bb11d3b3fb75c72a8adb +# Parent af2c24874d79cbebb444727ae96f2fefa3f22b47 diff --git a/media/libopus/silk/arm/arm_silk_map.c b/media/libopus/silk/arm/arm_silk_map.c --- a/media/libopus/silk/arm/arm_silk_map.c +++ b/media/libopus/silk/arm/arm_silk_map.c -@@ -23,17 +23,17 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - ***********************************************************************/ - #ifdef HAVE_CONFIG_H +@@ -28,7 +28,7 @@ POSSIBILITY OF SUCH DAMAGE. # include "config.h" #endif @@ -18,8 +13,3 @@ #include "NSQ.h" #include "SigProc_FIX.h" - #if defined(OPUS_HAVE_RTCD) - - # if (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && \ - !defined(OPUS_ARM_PRESUME_NEON_INTR)) - diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-kde.patch --- a/mozilla-kde.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-kde.patch Sat Jul 29 14:34:45 2023 +0200 @@ -3,22 +3,18 @@ # Date 1559294891 -7200 # Fri May 31 11:28:11 2019 +0200 # Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112 -# Parent 4f8492f0f4bfa17f5b4523a1cdda15a45e3d74d3 +# Parent 0086fcc0d5c86a31cbac0a261ed7b526dd2df2e8 Description: Add KDE integration to Firefox (toolkit parts) Author: Wolfgang Rosenauer Author: Lubos Lunak Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751 https://bugzilla.novell.com/show_bug.cgi?id=170055 -diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp ---- a/modules/libpref/Preferences.cpp -+++ b/modules/libpref/Preferences.cpp -@@ -91,16 +91,17 @@ - #include "plstr.h" - #include "prdtoa.h" - #include "prlink.h" - #include "xpcpublic.h" - #include "js/RootingAPI.h" +Index: firefox-115.0/modules/libpref/Preferences.cpp +=================================================================== +--- firefox-115.0.orig/modules/libpref/Preferences.cpp ++++ firefox-115.0/modules/libpref/Preferences.cpp +@@ -95,6 +95,7 @@ #ifdef MOZ_BACKGROUNDTASKS # include "mozilla/BackgroundTasks.h" #endif @@ -26,26 +22,15 @@ #ifdef DEBUG # include - #endif - - #ifdef MOZ_MEMORY - # include "mozmemory.h" - #endif -@@ -4907,16 +4908,27 @@ nsresult Preferences::InitInitialObjects - "unix.js" - # if defined(_AIX) - , - "aix.js" - # endif +@@ -4911,6 +4912,16 @@ nsresult Preferences::InitInitialObjects #endif }; -+ if(nsKDEUtils::kdeSession()) { // TODO what if some setup actually requires the helper? -+ for(int i = 0; -+ i < MOZ_ARRAY_LENGTH(specialFiles); -+ ++i ) { -+ if( *specialFiles[ i ] == '\0' ) { -+ specialFiles[ i ] = "kde.js"; ++ if (nsKDEUtils::kdeSession()) { // TODO what if some setup actually requires ++ // the helper? ++ for (int i = 0; i < MOZ_ARRAY_LENGTH(specialFiles); ++i) { ++ if (*specialFiles[i] == '\0') { ++ specialFiles[i] = "kde.js"; + break; + } + } @@ -54,17 +39,7 @@ rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles, ArrayLength(specialFiles)); if (NS_FAILED(rv)) { - NS_WARNING("Error parsing application default preferences."); - } - - // Load jar:$app/omni.jar!/defaults/preferences/*.js - // or jar:$gre/omni.jar!/defaults/preferences/*.js. -@@ -4981,17 +4993,17 @@ nsresult Preferences::InitInitialObjects - } - - nsCOMPtr path = do_QueryInterface(elem); - if (!path) { - continue; +@@ -4985,7 +4996,7 @@ nsresult Preferences::InitInitialObjects } // Do we care if a file provided by this process fails to load? @@ -73,20 +48,11 @@ } } - #if defined(MOZ_WIDGET_GTK) - // To ensure the system-wide preferences are not overwritten by - // firefox/browser/defauts/preferences/*.js we need to load - // the /etc/firefox/defaults/pref/*.js settings as last. - // Under Flatpak, the NS_OS_SYSTEM_CONFIG_DIR points to /app/etc/firefox -diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build ---- a/modules/libpref/moz.build -+++ b/modules/libpref/moz.build -@@ -122,16 +122,20 @@ EXPORTS.mozilla += [ - ] - EXPORTS.mozilla += sorted(["!" + g for g in gen_h]) - - UNIFIED_SOURCES += [ - "Preferences.cpp", +Index: firefox-115.0/modules/libpref/moz.build +=================================================================== +--- firefox-115.0.orig/modules/libpref/moz.build ++++ firefox-115.0/modules/libpref/moz.build +@@ -126,6 +126,10 @@ UNIFIED_SOURCES += [ "SharedPrefMap.cpp", ] @@ -97,20 +63,11 @@ gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs) GeneratedFile( - *gen_all_tuple, - script="init/generate_static_pref_list.py", - entry_point="emit_code", - inputs=["init/StaticPrefList.yaml"] - ) -diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/chrome/flags.py ---- a/python/mozbuild/mozpack/chrome/flags.py -+++ b/python/mozbuild/mozpack/chrome/flags.py -@@ -229,16 +229,17 @@ class Flags(OrderedDict): - "os": StringFlag, - "osversion": VersionFlag, - "abi": StringFlag, - "platform": Flag, - "xpcnativewrappers": Flag, +Index: firefox-115.0/python/mozbuild/mozpack/chrome/flags.py +=================================================================== +--- firefox-115.0.orig/python/mozbuild/mozpack/chrome/flags.py ++++ firefox-115.0/python/mozbuild/mozpack/chrome/flags.py +@@ -234,6 +234,7 @@ class Flags(OrderedDict): "tablet": Flag, "process": StringFlag, "backgroundtask": StringFlag, @@ -118,20 +75,11 @@ } RE = re.compile(r"([!<>=]+)") - def __init__(self, *flags): - """ - Initialize a set of flags given in string form. - flags = Flags('contentaccessible=yes', 'appversion>=3.5') - """ -diff --git a/python/mozbuild/mozpack/chrome/manifest.py b/python/mozbuild/mozpack/chrome/manifest.py ---- a/python/mozbuild/mozpack/chrome/manifest.py -+++ b/python/mozbuild/mozpack/chrome/manifest.py -@@ -38,16 +38,17 @@ class ManifestEntry(object): - "os", - "osversion", - "abi", - "xpcnativewrappers", - "tablet", +Index: firefox-115.0/python/mozbuild/mozpack/chrome/manifest.py +=================================================================== +--- firefox-115.0.orig/python/mozbuild/mozpack/chrome/manifest.py ++++ firefox-115.0/python/mozbuild/mozpack/chrome/manifest.py +@@ -43,6 +43,7 @@ class ManifestEntry(object): "process", "contentaccessible", "backgroundtask", @@ -139,20 +87,11 @@ ] def __init__(self, base, *flags): - """ - Initialize a manifest entry with the given base path and flags. - """ - self.base = base - self.flags = Flags(*flags) -diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloads/moz.build ---- a/toolkit/components/downloads/moz.build -+++ b/toolkit/components/downloads/moz.build -@@ -46,10 +46,14 @@ XPCOM_MANIFESTS += [ - - if CONFIG["MOZ_PLACES"]: - EXTRA_JS_MODULES += [ - "DownloadHistory.sys.mjs", - ] +Index: firefox-115.0/toolkit/components/downloads/moz.build +=================================================================== +--- firefox-115.0.orig/toolkit/components/downloads/moz.build ++++ firefox-115.0/toolkit/components/downloads/moz.build +@@ -51,5 +51,9 @@ if CONFIG["MOZ_PLACES"]: FINAL_LIBRARY = "xul" @@ -162,15 +101,11 @@ + with Files("**"): BUG_COMPONENT = ("Toolkit", "Downloads API") -diff --git a/toolkit/mozapps/downloads/HelperAppDlg.jsm b/toolkit/mozapps/downloads/HelperAppDlg.jsm ---- a/toolkit/mozapps/downloads/HelperAppDlg.jsm -+++ b/toolkit/mozapps/downloads/HelperAppDlg.jsm -@@ -1250,36 +1250,66 @@ nsUnknownContentTypeDialog.prototype = { - params.handlerApp && - params.handlerApp.executable && - params.handlerApp.executable.isFile() - ) { - // Remember the file they chose to run. +Index: firefox-115.0/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs +=================================================================== +--- firefox-115.0.orig/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs ++++ firefox-115.0/toolkit/mozapps/downloads/HelperAppDlg.sys.mjs +@@ -1246,26 +1246,56 @@ nsUnknownContentTypeDialog.prototype = { this.chosenApp = params.handlerApp; } } else if ("@mozilla.org/applicationchooser;1" in Cc) { @@ -247,20 +182,11 @@ } else { var nsIFilePicker = Ci.nsIFilePicker; var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); - fp.init( - this.mDialog, - this.dialogElement("strings").getString("chooseAppFilePickerTitle"), - nsIFilePicker.modeOpen - ); -diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp ---- a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp -+++ b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp -@@ -11,16 +11,18 @@ - #include "prenv.h" - #include "nsInterfaceHashtable.h" - #include "nsHashtablesFwd.h" - #include "nsHashKeys.h" - #include "nsNetUtil.h" +Index: firefox-115.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp +=================================================================== +--- firefox-115.0.orig/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp ++++ firefox-115.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp +@@ -16,6 +16,8 @@ #include "nsISupportsPrimitives.h" #include "nsIGSettingsService.h" #include "nsReadableUtils.h" @@ -269,17 +195,7 @@ using namespace mozilla; - class nsUnixSystemProxySettings final : public nsISystemProxySettings { - public: - NS_DECL_ISUPPORTS - NS_DECL_NSISYSTEMPROXYSETTINGS - -@@ -34,16 +36,18 @@ class nsUnixSystemProxySettings final : - nsCOMPtr mProxySettings; - nsInterfaceHashtable - mSchemeProxySettings; - nsresult GetProxyFromGSettings(const nsACString& aScheme, - const nsACString& aHost, int32_t aPort, +@@ -39,6 +41,8 @@ class nsUnixSystemProxySettings final : nsACString& aResult); nsresult SetProxyResultFromGSettings(const char* aKeyBase, const char* aType, nsACString& aResult); @@ -288,17 +204,7 @@ }; NS_IMPL_ISUPPORTS(nsUnixSystemProxySettings, nsISystemProxySettings) - - NS_IMETHODIMP - nsUnixSystemProxySettings::GetMainThreadOnly(bool* aMainThreadOnly) { - // dbus prevents us from being threadsafe, but this routine should not block - // anyhow -@@ -392,21 +396,50 @@ nsresult nsUnixSystemProxySettings::GetP - return NS_OK; - } - - nsresult nsUnixSystemProxySettings::GetProxyForURI(const nsACString& aSpec, - const nsACString& aScheme, +@@ -396,6 +400,9 @@ nsresult nsUnixSystemProxySettings::GetP const nsACString& aHost, const int32_t aPort, nsACString& aResult) { @@ -308,51 +214,40 @@ if (mProxySettings) { nsresult rv = GetProxyFromGSettings(aScheme, aHost, aPort, aResult); if (NS_SUCCEEDED(rv)) return rv; - } - +@@ -404,6 +411,28 @@ nsresult nsUnixSystemProxySettings::GetP return GetProxyFromEnvironment(aScheme, aHost, aPort, aResult); } -+nsresult -+nsUnixSystemProxySettings::GetProxyFromKDE(const nsACString& aScheme, -+ const nsACString& aHost, -+ PRInt32 aPort, -+ nsACString& aResult) -+{ ++nsresult nsUnixSystemProxySettings::GetProxyFromKDE(const nsACString& aScheme, ++ const nsACString& aHost, ++ PRInt32 aPort, ++ nsACString& aResult) { + nsAutoCString url; + url = aScheme; + url += "://"; + url += aHost; -+ if( aPort >= 0 ) -+ { ++ if (aPort >= 0) { + url += ":"; + url += nsPrintfCString("%d", aPort); + } + nsTArray command; -+ command.AppendElement( "GETPROXY"_ns ); -+ command.AppendElement( url ); ++ command.AppendElement("GETPROXY"_ns); ++ command.AppendElement(url); + nsTArray result; -+ if( !nsKDEUtils::command( command, &result ) || result.Length() != 1 ) ++ if (!nsKDEUtils::command(command, &result) || result.Length() != 1) + return NS_ERROR_FAILURE; + aResult = result[0]; + return NS_OK; +} + -+ NS_IMPL_COMPONENT_FACTORY(nsUnixSystemProxySettings) { auto result = MakeRefPtr(); result->Init(); - return result.forget().downcast(); - } -diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build ---- a/toolkit/xre/moz.build -+++ b/toolkit/xre/moz.build -@@ -91,17 +91,19 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "co - "../components/printingui", - ] - elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "uikit": - UNIFIED_SOURCES += [ - "nsNativeAppSupportDefault.cpp", +Index: firefox-115.0/toolkit/xre/moz.build +=================================================================== +--- firefox-115.0.orig/toolkit/xre/moz.build ++++ firefox-115.0/toolkit/xre/moz.build +@@ -96,7 +96,9 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "ui "UIKitDirProvider.mm", ] elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": @@ -362,16 +257,11 @@ "nsNativeAppSupportUnix.cpp", ] CXXFLAGS += CONFIG["MOZ_X11_SM_CFLAGS"] - else: - UNIFIED_SOURCES += [ - "nsNativeAppSupportDefault.cpp", - ] - -diff --git a/toolkit/xre/nsKDEUtils.cpp b/toolkit/xre/nsKDEUtils.cpp -new file mode 100644 +Index: firefox-115.0/toolkit/xre/nsKDEUtils.cpp +=================================================================== --- /dev/null -+++ b/toolkit/xre/nsKDEUtils.cpp -@@ -0,0 +1,321 @@ ++++ firefox-115.0/toolkit/xre/nsKDEUtils.cpp +@@ -0,0 +1,286 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* 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 @@ -395,309 +285,274 @@ +// copied from X11/X.h as a hack since for an unknown +// reason it's not picked up from X11/X.h +#ifndef None -+#define None 0L /* universal null resource or null atom */ ++# define None 0L /* universal null resource or null atom */ +#endif + -+//#define DEBUG_KDE ++// #define DEBUG_KDE +#ifdef DEBUG_KDE -+#define KMOZILLAHELPER "kmozillahelper" ++# define KMOZILLAHELPER "kmozillahelper" +#else +// not need for lib64, it's a binary -+#define KMOZILLAHELPER "/usr/lib/mozilla/kmozillahelper" ++# define KMOZILLAHELPER "/usr/lib/mozilla/kmozillahelper" +#endif + +#define KMOZILLAHELPER_VERSION 6 -+#define MAKE_STR2( n ) #n -+#define MAKE_STR( n ) MAKE_STR2( n ) ++#define MAKE_STR2(n) #n ++#define MAKE_STR(n) MAKE_STR2(n) + -+static bool getKdeSession() -+{ -+ if (PR_GetEnv("KDE_FULL_SESSION")) -+ { -+ return true; -+ } -+ return false; ++static bool getKdeSession() { ++ if (PR_GetEnv("KDE_FULL_SESSION")) { ++ return true; ++ } ++ return false; +} + -+static bool getKdeSupport() -+ { -+ nsTArray command; -+ command.AppendElement( "CHECK"_ns ); -+ command.AppendElement( "KMOZILLAHELPER_VERSION"_ns ); -+ bool kde = nsKDEUtils::command( command ); ++static bool getKdeSupport() { ++ nsTArray command; ++ command.AppendElement("CHECK"_ns); ++ command.AppendElement("KMOZILLAHELPER_VERSION"_ns); ++ bool kde = nsKDEUtils::command(command); +#ifdef DEBUG_KDE -+ fprintf( stderr, "KDE RUNNING %d\n", kde ); ++ fprintf(stderr, "KDE RUNNING %d\n", kde); +#endif -+ return kde; -+ } ++ return kde; ++} + -+nsKDEUtils::nsKDEUtils() -+ : commandFile( NULL ) -+ , replyFile( NULL ) -+ { -+ } ++nsKDEUtils::nsKDEUtils() : commandFile(NULL), replyFile(NULL) {} + -+nsKDEUtils::~nsKDEUtils() -+ { -+// closeHelper(); not actually useful, exiting will close the fd too -+ } ++nsKDEUtils::~nsKDEUtils() { ++ // closeHelper(); not actually useful, exiting will close the fd too ++} + -+nsKDEUtils* nsKDEUtils::self() -+ { -+ static nsKDEUtils s; -+ return &s; -+ } ++nsKDEUtils* nsKDEUtils::self() { ++ static nsKDEUtils s; ++ return &s; ++} + +static bool helperRunning = false; +static bool helperFailed = false; + -+bool nsKDEUtils::kdeSession() -+ { -+ static bool session = getKdeSession(); -+ return session; -+ } ++bool nsKDEUtils::kdeSession() { ++ static bool session = getKdeSession(); ++ return session; ++} ++ ++bool nsKDEUtils::kdeSupport() { ++ static bool support = kdeSession() && getKdeSupport(); ++ return support && helperRunning; ++} ++ ++struct nsKDECommandData { ++ FILE* file; ++ nsTArray* output; ++ GMainLoop* loop; ++ bool success; ++}; + -+bool nsKDEUtils::kdeSupport() -+ { -+ static bool support = kdeSession() && getKdeSupport(); -+ return support && helperRunning; ++static gboolean kdeReadFunc(GIOChannel*, GIOCondition, gpointer data) { ++ nsKDECommandData* p = static_cast(data); ++ char buf[8192]; // TODO big enough ++ bool command_done = false; ++ bool command_failed = false; ++ while (!command_done && !command_failed && ++ fgets(buf, 8192, p->file) != ++ NULL) { // TODO what if the kernel splits a line into two chunks? ++ // #ifdef DEBUG_KDE ++ // fprintf( stderr, "READ: %s %d\n", buf, feof( p->file )); ++ // #endif ++ if (char* eol = strchr(buf, '\n')) *eol = '\0'; ++ command_done = (strcmp(buf, "\\1") == 0); ++ command_failed = (strcmp(buf, "\\0") == 0); ++ nsAutoCString line(buf); ++ line.ReplaceSubstring("\\n", "\n"); ++ line.ReplaceSubstring( ++ "\\" ++ "\\", ++ "\\"); // \\ -> \ , i.e. unescape ++ if (p->output && !(command_done || command_failed)) ++ p->output->AppendElement(nsCString(buf)); // TODO utf8? ++ } ++ bool quit = false; ++ if (feof(p->file) || command_failed) { ++ quit = true; ++ p->success = false; ++ } ++ if (command_done) { // reading one reply finished ++ quit = true; ++ p->success = true; ++ } ++ if (quit) { ++ if (p->loop) g_main_loop_quit(p->loop); ++ return FALSE; ++ } ++ return TRUE; ++} ++ ++bool nsKDEUtils::command(const nsTArray& command, ++ nsTArray* output) { ++ return self()->internalCommand(command, NULL, false, output); ++} ++ ++bool nsKDEUtils::command(nsIArray* command, nsIArray** output) { ++ nsTArray in; ++ PRUint32 length; ++ command->GetLength(&length); ++ for (PRUint32 i = 0; i < length; i++) { ++ nsCOMPtr str = do_QueryElementAt(command, i); ++ if (str) { ++ nsAutoCString s; ++ str->GetData(s); ++ in.AppendElement(s); + } ++ } + -+struct nsKDECommandData -+ { -+ FILE* file; -+ nsTArray* output; -+ GMainLoop* loop; -+ bool success; -+ }; ++ nsTArray out; ++ bool ret = self()->internalCommand(in, NULL, false, &out); ++ ++ if (!output) return ret; ++ ++ nsCOMPtr result = do_CreateInstance(NS_ARRAY_CONTRACTID); ++ if (!result) return false; ++ ++ for (PRUint32 i = 0; i < out.Length(); i++) { ++ nsCOMPtr rstr = ++ do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID); ++ if (!rstr) return false; ++ ++ rstr->SetData(out[i]); ++ result->AppendElement(rstr); ++ } ++ ++ NS_ADDREF(*output = result); ++ return ret; ++} ++ ++bool nsKDEUtils::commandBlockUi(const nsTArray& command, ++ GtkWindow* parent, ++ nsTArray* output) { ++ return self()->internalCommand(command, parent, true, output); ++} + -+static gboolean kdeReadFunc( GIOChannel*, GIOCondition, gpointer data ) ++bool nsKDEUtils::internalCommand(const nsTArray& command, ++ GtkWindow* parent, bool blockUi, ++ nsTArray* output) { ++ if (!startHelper()) return false; ++ feedCommand(command); ++ // do not store the data in 'this' but in extra structure, just in case there ++ // is reentrancy (can there be? the event loop is re-entered) ++ nsKDECommandData data; ++ data.file = replyFile; ++ data.output = output; ++ data.success = false; ++ if (blockUi) { ++ data.loop = g_main_loop_new(NULL, FALSE); ++ GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); ++ if (parent && gtk_window_get_group(parent)) ++ gtk_window_group_add_window(gtk_window_get_group(parent), ++ GTK_WINDOW(window)); ++ gtk_widget_realize(window); ++ gtk_widget_set_sensitive(window, TRUE); ++ gtk_grab_add(window); ++ GIOChannel* channel = g_io_channel_unix_new(fileno(data.file)); ++ g_io_add_watch(channel, ++ static_cast(G_IO_IN | G_IO_ERR | G_IO_HUP), ++ kdeReadFunc, &data); ++ g_io_channel_unref(channel); ++ g_main_loop_run(data.loop); ++ g_main_loop_unref(data.loop); ++ gtk_grab_remove(window); ++ gtk_widget_destroy(window); ++ } else { ++ data.loop = NULL; ++ while (kdeReadFunc(NULL, static_cast(0), &data)) ++ ; ++ } ++ return data.success; ++} ++ ++bool nsKDEUtils::startHelper() { ++ if (helperRunning) return true; ++ if (helperFailed) return false; ++ helperFailed = true; ++ int fdcommand[2]; ++ int fdreply[2]; ++ if (pipe(fdcommand) < 0) return false; ++ if (pipe(fdreply) < 0) { ++ close(fdcommand[0]); ++ close(fdcommand[1]); ++ return false; ++ } ++ char* args[2] = {const_cast(KMOZILLAHELPER), NULL}; ++ switch (fork()) { ++ case -1: { ++ close(fdcommand[0]); ++ close(fdcommand[1]); ++ close(fdreply[0]); ++ close(fdreply[1]); ++ return false; ++ } ++ case 0: // child + { -+ nsKDECommandData* p = static_cast< nsKDECommandData* >( data ); -+ char buf[ 8192 ]; // TODO big enough -+ bool command_done = false; -+ bool command_failed = false; -+ while( !command_done && !command_failed && fgets( buf, 8192, p->file ) != NULL ) -+ { // TODO what if the kernel splits a line into two chunks? -+//#ifdef DEBUG_KDE -+// fprintf( stderr, "READ: %s %d\n", buf, feof( p->file )); -+//#endif -+ if( char* eol = strchr( buf, '\n' )) -+ *eol = '\0'; -+ command_done = ( strcmp( buf, "\\1" ) == 0 ); -+ command_failed = ( strcmp( buf, "\\0" ) == 0 ); -+ nsAutoCString line( buf ); -+ line.ReplaceSubstring( "\\n", "\n" ); -+ line.ReplaceSubstring( "\\" "\\", "\\" ); // \\ -> \ , i.e. unescape -+ if( p->output && !( command_done || command_failed )) -+ p->output->AppendElement( nsCString( buf )); // TODO utf8? -+ } -+ bool quit = false; -+ if( feof( p->file ) || command_failed ) -+ { -+ quit = true; -+ p->success = false; -+ } -+ if( command_done ) -+ { // reading one reply finished -+ quit = true; -+ p->success = true; -+ } -+ if( quit ) -+ { -+ if( p->loop ) -+ g_main_loop_quit( p->loop ); -+ return FALSE; -+ } -+ return TRUE; ++ if (dup2(fdcommand[0], STDIN_FILENO) < 0) _exit(1); ++ if (dup2(fdreply[1], STDOUT_FILENO) < 0) _exit(1); ++ int maxfd = 1024; // close all other fds ++ struct rlimit rl; ++ if (getrlimit(RLIMIT_NOFILE, &rl) == 0) maxfd = rl.rlim_max; ++ for (int i = 3; i < maxfd; ++i) close(i); ++#ifdef DEBUG_KDE ++ execvp(KMOZILLAHELPER, args); ++#else ++ execv(KMOZILLAHELPER, args); ++#endif ++ _exit(1); // failed + } -+ -+bool nsKDEUtils::command( const nsTArray& command, nsTArray* output ) -+ { -+ return self()->internalCommand( command, NULL, false, output ); -+ } -+ -+bool nsKDEUtils::command( nsIArray* command, nsIArray** output) ++ default: // parent + { -+ nsTArray in; -+ PRUint32 length; -+ command->GetLength( &length ); -+ for ( PRUint32 i = 0; i < length; i++ ) -+ { -+ nsCOMPtr str = do_QueryElementAt( command, i ); -+ if( str ) -+ { -+ nsAutoCString s; -+ str->GetData( s ); -+ in.AppendElement( s ); -+ } -+ } -+ -+ nsTArray out; -+ bool ret = self()->internalCommand( in, NULL, false, &out ); -+ -+ if ( !output ) return ret; -+ -+ nsCOMPtr result = do_CreateInstance( NS_ARRAY_CONTRACTID ); -+ if ( !result ) return false; -+ -+ for ( PRUint32 i = 0; i < out.Length(); i++ ) -+ { -+ nsCOMPtr rstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); -+ if ( !rstr ) return false; -+ -+ rstr->SetData( out[i] ); -+ result->AppendElement( rstr ); -+ } -+ -+ NS_ADDREF( *output = result); -+ return ret; -+ } -+ -+ -+bool nsKDEUtils::commandBlockUi( const nsTArray& command, GtkWindow* parent, nsTArray* output ) -+ { -+ return self()->internalCommand( command, parent, true, output ); -+ } -+ -+bool nsKDEUtils::internalCommand( const nsTArray& command, GtkWindow* parent, bool blockUi, -+ nsTArray* output ) -+ { -+ if( !startHelper()) ++ commandFile = fdopen(fdcommand[1], "w"); ++ replyFile = fdopen(fdreply[0], "r"); ++ close(fdcommand[0]); ++ close(fdreply[1]); ++ if (commandFile == NULL || replyFile == NULL) { ++ closeHelper(); + return false; -+ feedCommand( command ); -+ // do not store the data in 'this' but in extra structure, just in case there -+ // is reentrancy (can there be? the event loop is re-entered) -+ nsKDECommandData data; -+ data.file = replyFile; -+ data.output = output; -+ data.success = false; -+ if( blockUi ) -+ { -+ data.loop = g_main_loop_new( NULL, FALSE ); -+ GtkWidget* window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); -+ if( parent && gtk_window_get_group(parent) ) -+ gtk_window_group_add_window( gtk_window_get_group(parent), GTK_WINDOW( window )); -+ gtk_widget_realize( window ); -+ gtk_widget_set_sensitive( window, TRUE ); -+ gtk_grab_add( window ); -+ GIOChannel* channel = g_io_channel_unix_new( fileno( data.file )); -+ g_io_add_watch( channel, static_cast< GIOCondition >( G_IO_IN | G_IO_ERR | G_IO_HUP ), kdeReadFunc, &data ); -+ g_io_channel_unref( channel ); -+ g_main_loop_run( data.loop ); -+ g_main_loop_unref( data.loop ); -+ gtk_grab_remove( window ); -+ gtk_widget_destroy( window ); -+ } -+ else -+ { -+ data.loop = NULL; -+ while( kdeReadFunc( NULL, static_cast< GIOCondition >( 0 ), &data )) -+ ; -+ } -+ return data.success; ++ } ++ // ok, helper ready, getKdeRunning() will check if it works + } ++ } ++ helperFailed = false; ++ helperRunning = true; ++ return true; ++} ++ ++void nsKDEUtils::closeHelper() { ++ if (commandFile != NULL) ++ fclose(commandFile); // this will also make the helper quit ++ if (replyFile != NULL) fclose(replyFile); ++ helperRunning = false; ++} + -+bool nsKDEUtils::startHelper() -+ { -+ if( helperRunning ) -+ return true; -+ if( helperFailed ) -+ return false; -+ helperFailed = true; -+ int fdcommand[ 2 ]; -+ int fdreply[ 2 ]; -+ if( pipe( fdcommand ) < 0 ) -+ return false; -+ if( pipe( fdreply ) < 0 ) -+ { -+ close( fdcommand[ 0 ] ); -+ close( fdcommand[ 1 ] ); -+ return false; -+ } -+ char* args[ 2 ] = { const_cast< char* >( KMOZILLAHELPER ), NULL }; -+ switch( fork()) -+ { -+ case -1: -+ { -+ close( fdcommand[ 0 ] ); -+ close( fdcommand[ 1 ] ); -+ close( fdreply[ 0 ] ); -+ close( fdreply[ 1 ] ); -+ return false; -+ } -+ case 0: // child -+ { -+ if( dup2( fdcommand[ 0 ], STDIN_FILENO ) < 0 ) -+ _exit( 1 ); -+ if( dup2( fdreply[ 1 ], STDOUT_FILENO ) < 0 ) -+ _exit( 1 ); -+ int maxfd = 1024; // close all other fds -+ struct rlimit rl; -+ if( getrlimit( RLIMIT_NOFILE, &rl ) == 0 ) -+ maxfd = rl.rlim_max; -+ for( int i = 3; -+ i < maxfd; -+ ++i ) -+ close( i ); ++void nsKDEUtils::feedCommand(const nsTArray& command) { ++ for (int i = 0; i < command.Length(); ++i) { ++ nsCString line = command[i]; ++ line.ReplaceSubstring("\\", ++ "\\" ++ "\\"); // \ -> \\ , i.e. escape ++ line.ReplaceSubstring("\n", "\\n"); +#ifdef DEBUG_KDE -+ execvp( KMOZILLAHELPER, args ); -+#else -+ execv( KMOZILLAHELPER, args ); ++ fprintf(stderr, "COMM: %s\n", line.get()); +#endif -+ _exit( 1 ); // failed -+ } -+ default: // parent -+ { -+ commandFile = fdopen( fdcommand[ 1 ], "w" ); -+ replyFile = fdopen( fdreply[ 0 ], "r" ); -+ close( fdcommand[ 0 ] ); -+ close( fdreply[ 1 ] ); -+ if( commandFile == NULL || replyFile == NULL ) -+ { -+ closeHelper(); -+ return false; -+ } -+ // ok, helper ready, getKdeRunning() will check if it works -+ } -+ } -+ helperFailed = false; -+ helperRunning = true; -+ return true; -+ } -+ -+void nsKDEUtils::closeHelper() -+ { -+ if( commandFile != NULL ) -+ fclose( commandFile ); // this will also make the helper quit -+ if( replyFile != NULL ) -+ fclose( replyFile ); -+ helperRunning = false; -+ } -+ -+void nsKDEUtils::feedCommand( const nsTArray& command ) -+ { -+ for( int i = 0; -+ i < command.Length(); -+ ++i ) -+ { -+ nsCString line = command[ i ]; -+ line.ReplaceSubstring( "\\", "\\" "\\" ); // \ -> \\ , i.e. escape -+ line.ReplaceSubstring( "\n", "\\n" ); -+#ifdef DEBUG_KDE -+ fprintf( stderr, "COMM: %s\n", line.get()); -+#endif -+ fputs( line.get(), commandFile ); -+ fputs( "\n", commandFile ); -+ } -+ fputs( "\\E\n", commandFile ); // done as \E, so it cannot happen in normal data -+ fflush( commandFile ); -+ } -diff --git a/toolkit/xre/nsKDEUtils.h b/toolkit/xre/nsKDEUtils.h -new file mode 100644 ++ fputs(line.get(), commandFile); ++ fputs("\n", commandFile); ++ } ++ fputs("\\E\n", ++ commandFile); // done as \E, so it cannot happen in normal data ++ fflush(commandFile); ++} +Index: firefox-115.0/toolkit/xre/nsKDEUtils.h +=================================================================== --- /dev/null -+++ b/toolkit/xre/nsKDEUtils.h -@@ -0,0 +1,48 @@ ++++ firefox-115.0/toolkit/xre/nsKDEUtils.h +@@ -0,0 +1,53 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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 @@ -714,47 +569,48 @@ + +class nsIArray; + -+class NS_EXPORT nsKDEUtils -+ { -+ public: -+ /* Returns true if running inside a KDE session (regardless of whether there is KDE -+ support available for Firefox). This should be used e.g. when determining -+ dialog button order but not for code that requires the KDE support. */ -+ static bool kdeSession(); -+ /* Returns true if running inside a KDE session and KDE support is available -+ for Firefox. This should be used everywhere where the external helper is needed. */ -+ static bool kdeSupport(); -+ /* Executes the given helper command, returns true if helper returned success. */ -+ static bool command( const nsTArray& command, nsTArray* output = NULL ); -+ static bool command( nsIArray* command, nsIArray** output = NULL ); -+ /* Like command(), but additionally blocks the parent widget like if there was -+ a modal dialog shown and enters the event loop (i.e. there are still paint updates, -+ this is for commands that take long). */ -+ static bool commandBlockUi( const nsTArray& command, GtkWindow* parent, nsTArray* output = NULL ); ++class NS_EXPORT nsKDEUtils { ++ public: ++ /* Returns true if running inside a KDE session (regardless of whether there ++ is KDE support available for Firefox). This should be used e.g. when ++ determining dialog button order but not for code that requires the KDE ++ support. */ ++ static bool kdeSession(); ++ /* Returns true if running inside a KDE session and KDE support is available ++ for Firefox. This should be used everywhere where the external helper is ++ needed. */ ++ static bool kdeSupport(); ++ /* Executes the given helper command, returns true if helper returned success. ++ */ ++ static bool command(const nsTArray& command, ++ nsTArray* output = NULL); ++ static bool command(nsIArray* command, nsIArray** output = NULL); ++ /* Like command(), but additionally blocks the parent widget like if there was ++ a modal dialog shown and enters the event loop (i.e. there are still paint ++ updates, this is for commands that take long). */ ++ static bool commandBlockUi(const nsTArray& command, ++ GtkWindow* parent, ++ nsTArray* output = NULL); + -+ private: -+ nsKDEUtils(); -+ ~nsKDEUtils(); -+ static nsKDEUtils* self(); -+ bool startHelper(); -+ void closeHelper(); -+ void feedCommand( const nsTArray& command ); -+ bool internalCommand( const nsTArray& command, GtkWindow* parent, bool isParent, -+ nsTArray* output ); -+ FILE* commandFile; -+ FILE* replyFile; -+ }; ++ private: ++ nsKDEUtils(); ++ ~nsKDEUtils(); ++ static nsKDEUtils* self(); ++ bool startHelper(); ++ void closeHelper(); ++ void feedCommand(const nsTArray& command); ++ bool internalCommand(const nsTArray& command, GtkWindow* parent, ++ bool isParent, nsTArray* output); ++ FILE* commandFile; ++ FILE* replyFile; ++}; + -+#endif // nsKDEUtils -diff --git a/uriloader/exthandler/HandlerServiceParent.cpp b/uriloader/exthandler/HandlerServiceParent.cpp ---- a/uriloader/exthandler/HandlerServiceParent.cpp -+++ b/uriloader/exthandler/HandlerServiceParent.cpp -@@ -13,17 +13,17 @@ - #include "ContentHandlerService.h" - #include "nsIExternalProtocolService.h" - #include "nsStringEnumerator.h" - #include "nsIMutableArray.h" - #include "nsCExternalHandlerService.h" ++#endif // nsKDEUtils +Index: firefox-115.0/uriloader/exthandler/HandlerServiceParent.cpp +=================================================================== +--- firefox-115.0.orig/uriloader/exthandler/HandlerServiceParent.cpp ++++ firefox-115.0/uriloader/exthandler/HandlerServiceParent.cpp +@@ -18,7 +18,7 @@ #include "nsComponentManagerUtils.h" #include "nsServiceManagerUtils.h" #ifdef MOZ_WIDGET_GTK @@ -763,39 +619,22 @@ #endif using mozilla::dom::ContentHandlerService; - using mozilla::dom::HandlerApp; - using mozilla::dom::HandlerInfo; - using mozilla::dom::RemoteHandlerApp; - - namespace { -@@ -306,17 +306,17 @@ mozilla::ipc::IPCResult HandlerServicePa - const nsACString& aProtocolScheme, bool* aHandlerExists) { - if (aProtocolScheme.Length() > MAX_SCHEME_LENGTH) { - *aHandlerExists = false; - return IPC_OK(); +@@ -310,8 +310,8 @@ mozilla::ipc::IPCResult HandlerServicePa } #ifdef MOZ_WIDGET_GTK // Check the GNOME registry for a protocol handler - *aHandlerExists = +- *aHandlerExists = - nsGNOMERegistry::HandlerExists(PromiseFlatCString(aProtocolScheme).get()); -+ nsCommonRegistry::HandlerExists(PromiseFlatCString(aProtocolScheme).get()); ++ *aHandlerExists = nsCommonRegistry::HandlerExists( ++ PromiseFlatCString(aProtocolScheme).get()); #else *aHandlerExists = false; #endif - return IPC_OK(); - } - - /* - * Check if a handler exists for the provided protocol. Check the datastore -diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build ---- a/uriloader/exthandler/moz.build -+++ b/uriloader/exthandler/moz.build -@@ -81,17 +81,19 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "ui - else: - # These files can't be built in unified mode because they redefine LOG. - SOURCES += [ - osdir + "/nsOSHelperAppService.cpp", - ] +Index: firefox-115.0/uriloader/exthandler/moz.build +=================================================================== +--- firefox-115.0.orig/uriloader/exthandler/moz.build ++++ firefox-115.0/uriloader/exthandler/moz.build +@@ -86,7 +86,9 @@ else: if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": UNIFIED_SOURCES += [ @@ -805,17 +644,7 @@ "unix/nsMIMEInfoUnix.cpp", ] elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "android": - UNIFIED_SOURCES += [ - "android/nsMIMEInfoAndroid.cpp", - ] - elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows": - UNIFIED_SOURCES += [ -@@ -129,16 +131,17 @@ include("/ipc/chromium/chromium-config.m - FINAL_LIBRARY = "xul" - - LOCAL_INCLUDES += [ - "/docshell/base", - "/dom/base", +@@ -134,6 +136,7 @@ LOCAL_INCLUDES += [ "/dom/ipc", "/netwerk/base", "/netwerk/protocol/http", @@ -823,16 +652,11 @@ ] if CONFIG["MOZ_ENABLE_DBUS"]: - CXXFLAGS += CONFIG["MOZ_DBUS_CFLAGS"] - - if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": - CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] - CXXFLAGS += CONFIG["MOZ_DBUS_GLIB_CFLAGS"] -diff --git a/uriloader/exthandler/unix/nsCommonRegistry.cpp b/uriloader/exthandler/unix/nsCommonRegistry.cpp -new file mode 100644 +Index: firefox-115.0/uriloader/exthandler/unix/nsCommonRegistry.cpp +=================================================================== --- /dev/null -+++ b/uriloader/exthandler/unix/nsCommonRegistry.cpp -@@ -0,0 +1,53 @@ ++++ firefox-115.0/uriloader/exthandler/unix/nsCommonRegistry.cpp +@@ -0,0 +1,42 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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 @@ -845,51 +669,40 @@ +#include "nsString.h" +#include "nsKDEUtils.h" + -+/* static */ bool -+nsCommonRegistry::HandlerExists(const char *aProtocolScheme) -+{ -+ if( nsKDEUtils::kdeSupport()) -+ return nsKDERegistry::HandlerExists( aProtocolScheme ); -+ return nsGNOMERegistry::HandlerExists( aProtocolScheme ); -+} -+ -+/* static */ nsresult -+nsCommonRegistry::LoadURL(nsIURI *aURL) -+{ -+ if( nsKDEUtils::kdeSupport()) -+ return nsKDERegistry::LoadURL( aURL ); -+ return nsGNOMERegistry::LoadURL( aURL ); ++/* static */ bool nsCommonRegistry::HandlerExists(const char* aProtocolScheme) { ++ if (nsKDEUtils::kdeSupport()) ++ return nsKDERegistry::HandlerExists(aProtocolScheme); ++ return nsGNOMERegistry::HandlerExists(aProtocolScheme); +} + -+/* static */ void -+nsCommonRegistry::GetAppDescForScheme(const nsACString& aScheme, -+ nsAString& aDesc) -+{ -+ if( nsKDEUtils::kdeSupport()) -+ return nsKDERegistry::GetAppDescForScheme( aScheme, aDesc ); -+ return nsGNOMERegistry::GetAppDescForScheme( aScheme, aDesc ); ++/* static */ nsresult nsCommonRegistry::LoadURL(nsIURI* aURL) { ++ if (nsKDEUtils::kdeSupport()) return nsKDERegistry::LoadURL(aURL); ++ return nsGNOMERegistry::LoadURL(aURL); +} + -+ -+/* static */ already_AddRefed -+nsCommonRegistry::GetFromExtension(const nsACString& aFileExt) -+{ -+ if( nsKDEUtils::kdeSupport()) -+ return nsKDERegistry::GetFromExtension( aFileExt ); -+ return nsGNOMERegistry::GetFromExtension( aFileExt ); ++/* static */ void nsCommonRegistry::GetAppDescForScheme( ++ const nsACString& aScheme, nsAString& aDesc) { ++ if (nsKDEUtils::kdeSupport()) ++ return nsKDERegistry::GetAppDescForScheme(aScheme, aDesc); ++ return nsGNOMERegistry::GetAppDescForScheme(aScheme, aDesc); +} + +/* static */ already_AddRefed -+nsCommonRegistry::GetFromType(const nsACString& aMIMEType) -+{ -+ if( nsKDEUtils::kdeSupport()) -+ return nsKDERegistry::GetFromType( aMIMEType ); -+ return nsGNOMERegistry::GetFromType( aMIMEType ); ++nsCommonRegistry::GetFromExtension(const nsACString& aFileExt) { ++ if (nsKDEUtils::kdeSupport()) ++ return nsKDERegistry::GetFromExtension(aFileExt); ++ return nsGNOMERegistry::GetFromExtension(aFileExt); +} -diff --git a/uriloader/exthandler/unix/nsCommonRegistry.h b/uriloader/exthandler/unix/nsCommonRegistry.h -new file mode 100644 ++ ++/* static */ already_AddRefed nsCommonRegistry::GetFromType( ++ const nsACString& aMIMEType) { ++ if (nsKDEUtils::kdeSupport()) return nsKDERegistry::GetFromType(aMIMEType); ++ return nsGNOMERegistry::GetFromType(aMIMEType); ++} +Index: firefox-115.0/uriloader/exthandler/unix/nsCommonRegistry.h +=================================================================== --- /dev/null -+++ b/uriloader/exthandler/unix/nsCommonRegistry.h ++++ firefox-115.0/uriloader/exthandler/unix/nsCommonRegistry.h @@ -0,0 +1,28 @@ +/* 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 @@ -903,27 +716,27 @@ + +class nsMIMEInfoBase; + -+class nsCommonRegistry -+{ ++class nsCommonRegistry { + public: -+ static bool HandlerExists(const char *aProtocolScheme); ++ static bool HandlerExists(const char* aProtocolScheme); + -+ static nsresult LoadURL(nsIURI *aURL); ++ static nsresult LoadURL(nsIURI* aURL); + -+ static void GetAppDescForScheme(const nsACString& aScheme, -+ nsAString& aDesc); ++ static void GetAppDescForScheme(const nsACString& aScheme, nsAString& aDesc); + -+ static already_AddRefed GetFromExtension(const nsACString& aFileExt); ++ static already_AddRefed GetFromExtension( ++ const nsACString& aFileExt); + -+ static already_AddRefed GetFromType(const nsACString& aMIMEType); ++ static already_AddRefed GetFromType( ++ const nsACString& aMIMEType); +}; + +#endif -diff --git a/uriloader/exthandler/unix/nsKDERegistry.cpp b/uriloader/exthandler/unix/nsKDERegistry.cpp -new file mode 100644 +Index: firefox-115.0/uriloader/exthandler/unix/nsKDERegistry.cpp +=================================================================== --- /dev/null -+++ b/uriloader/exthandler/unix/nsKDERegistry.cpp -@@ -0,0 +1,89 @@ ++++ firefox-115.0/uriloader/exthandler/unix/nsKDERegistry.cpp +@@ -0,0 +1,75 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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 @@ -937,87 +750,73 @@ +#include "nsMIMEInfoUnix.h" +#include "nsKDEUtils.h" + -+/* static */ bool -+nsKDERegistry::HandlerExists(const char *aProtocolScheme) -+{ -+ nsTArray command; -+ command.AppendElement( "HANDLEREXISTS"_ns ); -+ command.AppendElement( nsAutoCString( aProtocolScheme )); -+ return nsKDEUtils::command( command ); ++/* static */ bool nsKDERegistry::HandlerExists(const char* aProtocolScheme) { ++ nsTArray command; ++ command.AppendElement("HANDLEREXISTS"_ns); ++ command.AppendElement(nsAutoCString(aProtocolScheme)); ++ return nsKDEUtils::command(command); +} + -+/* static */ nsresult -+nsKDERegistry::LoadURL(nsIURI *aURL) -+{ -+ nsTArray command; -+ command.AppendElement( "OPEN"_ns ); -+ nsCString url; -+ aURL->GetSpec( url ); -+ command.AppendElement( url ); -+ bool rv = nsKDEUtils::command( command ); -+ if (!rv) -+ return NS_ERROR_FAILURE; ++/* static */ nsresult nsKDERegistry::LoadURL(nsIURI* aURL) { ++ nsTArray command; ++ command.AppendElement("OPEN"_ns); ++ nsCString url; ++ aURL->GetSpec(url); ++ command.AppendElement(url); ++ bool rv = nsKDEUtils::command(command); ++ if (!rv) return NS_ERROR_FAILURE; + -+ return NS_OK; ++ return NS_OK; +} + -+/* static */ void -+nsKDERegistry::GetAppDescForScheme(const nsACString& aScheme, -+ nsAString& aDesc) -+{ -+ nsTArray command; -+ command.AppendElement( "GETAPPDESCFORSCHEME"_ns ); -+ command.AppendElement( aScheme ); -+ nsTArray output; -+ if( nsKDEUtils::command( command, &output ) && output.Length() == 1 ) -+ CopyUTF8toUTF16( output[ 0 ], aDesc ); ++/* static */ void nsKDERegistry::GetAppDescForScheme(const nsACString& aScheme, ++ nsAString& aDesc) { ++ nsTArray command; ++ command.AppendElement("GETAPPDESCFORSCHEME"_ns); ++ command.AppendElement(aScheme); ++ nsTArray output; ++ if (nsKDEUtils::command(command, &output) && output.Length() == 1) ++ CopyUTF8toUTF16(output[0], aDesc); +} + -+ -+/* static */ already_AddRefed -+nsKDERegistry::GetFromExtension(const nsACString& aFileExt) -+{ -+ NS_ASSERTION(aFileExt[0] != '.', "aFileExt shouldn't start with a dot"); -+ nsTArray command; -+ command.AppendElement( "GETFROMEXTENSION"_ns ); -+ command.AppendElement( aFileExt ); -+ return GetFromHelper( command ); ++/* static */ already_AddRefed nsKDERegistry::GetFromExtension( ++ const nsACString& aFileExt) { ++ NS_ASSERTION(aFileExt[0] != '.', "aFileExt shouldn't start with a dot"); ++ nsTArray command; ++ command.AppendElement("GETFROMEXTENSION"_ns); ++ command.AppendElement(aFileExt); ++ return GetFromHelper(command); +} + -+/* static */ already_AddRefed -+nsKDERegistry::GetFromType(const nsACString& aMIMEType) -+{ -+ nsTArray command; -+ command.AppendElement( "GETFROMTYPE"_ns ); -+ command.AppendElement( aMIMEType ); -+ return GetFromHelper( command ); ++/* static */ already_AddRefed nsKDERegistry::GetFromType( ++ const nsACString& aMIMEType) { ++ nsTArray command; ++ command.AppendElement("GETFROMTYPE"_ns); ++ command.AppendElement(aMIMEType); ++ return GetFromHelper(command); +} + -+/* static */ already_AddRefed -+nsKDERegistry::GetFromHelper(const nsTArray& command) -+{ -+ nsTArray output; -+ if( nsKDEUtils::command( command, &output ) && output.Length() == 3 ) -+ { -+ nsCString mimetype = output[ 0 ]; -+ RefPtr mimeInfo = new nsMIMEInfoUnix( mimetype ); -+ NS_ENSURE_TRUE(mimeInfo, nullptr); -+ nsCString description = output[ 1 ]; -+ mimeInfo->SetDescription(NS_ConvertUTF8toUTF16(description)); -+ nsCString handlerAppName = output[ 2 ]; -+ mozilla::StaticPrefs::browser_download_improvements_to_download_panel() -+ ? mimeInfo->SetPreferredAction(nsIMIMEInfo::saveToDisk) -+ : mimeInfo->SetPreferredAction(nsIMIMEInfo::useSystemDefault); -+ mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(handlerAppName)); -+ return mimeInfo.forget(); -+ } -+ return nullptr; ++/* static */ already_AddRefed nsKDERegistry::GetFromHelper( ++ const nsTArray& command) { ++ nsTArray output; ++ if (nsKDEUtils::command(command, &output) && output.Length() == 3) { ++ nsCString mimetype = output[0]; ++ RefPtr mimeInfo = new nsMIMEInfoUnix(mimetype); ++ NS_ENSURE_TRUE(mimeInfo, nullptr); ++ nsCString description = output[1]; ++ mimeInfo->SetDescription(NS_ConvertUTF8toUTF16(description)); ++ nsCString handlerAppName = output[2]; ++ mimeInfo->SetPreferredAction(nsIMIMEInfo::saveToDisk); ++ mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(handlerAppName)); ++ return mimeInfo.forget(); ++ } ++ return nullptr; +} -diff --git a/uriloader/exthandler/unix/nsKDERegistry.h b/uriloader/exthandler/unix/nsKDERegistry.h -new file mode 100644 +Index: firefox-115.0/uriloader/exthandler/unix/nsKDERegistry.h +=================================================================== --- /dev/null -+++ b/uriloader/exthandler/unix/nsKDERegistry.h -@@ -0,0 +1,34 @@ ++++ firefox-115.0/uriloader/exthandler/unix/nsKDERegistry.h +@@ -0,0 +1,35 @@ +/* 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 http://mozilla.org/MPL/2.0/. */ @@ -1030,36 +829,34 @@ +#include "nsTArray.h" + +class nsMIMEInfoBase; -+//class nsAutoCString; -+//class nsCString; ++// class nsAutoCString; ++// class nsCString; + -+class nsKDERegistry -+{ ++class nsKDERegistry { + public: -+ static bool HandlerExists(const char *aProtocolScheme); ++ static bool HandlerExists(const char* aProtocolScheme); + -+ static nsresult LoadURL(nsIURI *aURL); ++ static nsresult LoadURL(nsIURI* aURL); + -+ static void GetAppDescForScheme(const nsACString& aScheme, -+ nsAString& aDesc); ++ static void GetAppDescForScheme(const nsACString& aScheme, nsAString& aDesc); + -+ static already_AddRefed GetFromExtension(const nsACString& aFileExt); ++ static already_AddRefed GetFromExtension( ++ const nsACString& aFileExt); + -+ static already_AddRefed GetFromType(const nsACString& aMIMEType); ++ static already_AddRefed GetFromType( ++ const nsACString& aMIMEType); ++ + private: -+ static already_AddRefed GetFromHelper(const nsTArray& command); -+ ++ static already_AddRefed GetFromHelper( ++ const nsTArray& command); +}; + -+#endif //nsKDERegistry_h__ -diff --git a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp b/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp ---- a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp -+++ b/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp -@@ -1,48 +1,51 @@ - /* -*- Mode: C++; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * 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 ++#endif // nsKDERegistry_h__ +Index: firefox-115.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp +=================================================================== +--- firefox-115.0.orig/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp ++++ firefox-115.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp +@@ -5,16 +5,19 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsMIMEInfoUnix.h" @@ -1072,7 +869,7 @@ # include "nsDBusHandlerApp.h" #endif +#if defined(XP_UNIX) && !defined(XP_MACOSX) -+#include "nsKDEUtils.h" ++# include "nsKDEUtils.h" +#endif nsresult nsMIMEInfoUnix::LoadUriInternal(nsIURI* aURI) { @@ -1081,14 +878,7 @@ } NS_IMETHODIMP - nsMIMEInfoUnix::GetHasDefaultHandler(bool* _retval) { - // if a default app is set, it means the application has been set from - // either /etc/mailcap or ${HOME}/.mailcap, in which case we don't want to - // give the GNOME answer. - if (GetDefaultApplication()) { - return nsMIMEInfoImpl::GetHasDefaultHandler(_retval); - } - +@@ -29,15 +32,15 @@ nsMIMEInfoUnix::GetHasDefaultHandler(boo *_retval = false; if (mClass == eProtocolInfo) { @@ -1107,33 +897,21 @@ } } if (mimeInfo) *_retval = true; - } - - if (*_retval) return NS_OK; - - return NS_OK; -@@ -54,16 +57,33 @@ nsresult nsMIMEInfoUnix::LaunchDefaultWi - // give the GNOME answer. - if (GetDefaultApplication()) { - return nsMIMEInfoImpl::LaunchDefaultWithFile(aFile); - } - +@@ -59,6 +62,21 @@ nsresult nsMIMEInfoUnix::LaunchDefaultWi nsAutoCString nativePath; aFile->GetNativePath(nativePath); -+ if( nsKDEUtils::kdeSupport()) { ++ if (nsKDEUtils::kdeSupport()) { + bool supports; -+ if( NS_SUCCEEDED( GetHasDefaultHandler( &supports )) && supports ) { ++ if (NS_SUCCEEDED(GetHasDefaultHandler(&supports)) && supports) { + nsTArray command; -+ command.AppendElement( "OPEN"_ns ); -+ command.AppendElement( nativePath ); -+ command.AppendElement( "MIMETYPE"_ns ); -+ command.AppendElement( mSchemeOrType ); -+ if( nsKDEUtils::command( command )) -+ return NS_OK; ++ command.AppendElement("OPEN"_ns); ++ command.AppendElement(nativePath); ++ command.AppendElement("MIMETYPE"_ns); ++ command.AppendElement(mSchemeOrType); ++ if (nsKDEUtils::command(command)) return NS_OK; + } -+ if (!GetDefaultApplication()) -+ return NS_ERROR_FILE_NOT_FOUND; ++ if (!GetDefaultApplication()) return NS_ERROR_FILE_NOT_FOUND; + + return LaunchWithIProcess(GetDefaultApplication(), nativePath); + } @@ -1141,20 +919,11 @@ nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); if (!giovfs) { return NS_ERROR_FAILURE; - } - - // nsGIOMimeApp->Launch wants a URI string instead of local file - nsresult rv; - nsCOMPtr ioservice = -diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exthandler/unix/nsOSHelperAppService.cpp ---- a/uriloader/exthandler/unix/nsOSHelperAppService.cpp -+++ b/uriloader/exthandler/unix/nsOSHelperAppService.cpp -@@ -5,17 +5,17 @@ - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - - #include - #include - +Index: firefox-115.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp +=================================================================== +--- firefox-115.0.orig/uriloader/exthandler/unix/nsOSHelperAppService.cpp ++++ firefox-115.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp +@@ -10,7 +10,7 @@ #include "nsOSHelperAppService.h" #include "nsMIMEInfoUnix.h" #ifdef MOZ_WIDGET_GTK @@ -1163,17 +932,7 @@ # ifdef MOZ_BUILD_APP_IS_BROWSER # include "nsIToolkitShellService.h" # include "nsIGNOMEShellService.h" - # endif - #endif - #include "nsISupports.h" - #include "nsString.h" - #include "nsReadableUtils.h" -@@ -1102,17 +1102,17 @@ nsresult nsOSHelperAppService::GetHandle - - nsresult nsOSHelperAppService::OSProtocolHandlerExists( - const char* aProtocolScheme, bool* aHandlerExists) { - nsresult rv = NS_OK; - +@@ -1106,7 +1106,7 @@ nsresult nsOSHelperAppService::OSProtoco if (!XRE_IsContentProcess()) { #ifdef MOZ_WIDGET_GTK // Check the GNOME registry for a protocol handler @@ -1182,17 +941,7 @@ #else *aHandlerExists = false; #endif - } else { - *aHandlerExists = false; - nsCOMPtr handlerSvc = - do_GetService(NS_HANDLERSERVICE_CONTRACTID, &rv); - if (NS_SUCCEEDED(rv) && handlerSvc) { -@@ -1122,17 +1122,17 @@ nsresult nsOSHelperAppService::OSProtoco - } - - return rv; - } - +@@ -1126,7 +1126,7 @@ nsresult nsOSHelperAppService::OSProtoco NS_IMETHODIMP nsOSHelperAppService::GetApplicationDescription( const nsACString& aScheme, nsAString& _retval) { #ifdef MOZ_WIDGET_GTK @@ -1201,17 +950,7 @@ return _retval.IsEmpty() ? NS_ERROR_NOT_AVAILABLE : NS_OK; #else return NS_ERROR_NOT_AVAILABLE; - #endif - } - - NS_IMETHODIMP nsOSHelperAppService::IsCurrentAppOSDefaultForProtocol( - const nsACString& aScheme, bool* _retval) { -@@ -1227,17 +1227,17 @@ already_AddRefed nsOSHel - nsresult rv = - LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType, - minorType, mime_types_description, true); - - if (NS_FAILED(rv) || majorType.IsEmpty()) { +@@ -1231,7 +1231,7 @@ already_AddRefed nsOSHel #ifdef MOZ_WIDGET_GTK LOG("Looking in GNOME registry\n"); RefPtr gnomeInfo = @@ -1220,17 +959,7 @@ if (gnomeInfo) { LOG("Got MIMEInfo from GNOME registry\n"); return gnomeInfo.forget(); - } - #endif - - rv = LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType, - minorType, mime_types_description, false); -@@ -1342,17 +1342,17 @@ already_AddRefed nsOSHel - - // Now look up our extensions - nsAutoString extensions, mime_types_description; - LookUpExtensionsAndDescription(majorType, minorType, extensions, - mime_types_description); +@@ -1344,7 +1344,7 @@ already_AddRefed nsOSHel #ifdef MOZ_WIDGET_GTK if (handler.IsEmpty()) { @@ -1239,20 +968,11 @@ if (gnomeInfo) { LOG("Got MIMEInfo from GNOME registry without extensions; setting them " "to %s\n", - NS_LossyConvertUTF16toASCII(extensions).get()); - - NS_ASSERTION(!gnomeInfo->HasExtensions(), "How'd that happen?"); - gnomeInfo->SetFileExtensions(NS_ConvertUTF16toUTF8(extensions)); - return gnomeInfo.forget(); -diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build ---- a/widget/gtk/moz.build -+++ b/widget/gtk/moz.build -@@ -142,16 +142,17 @@ FINAL_LIBRARY = "xul" - - LOCAL_INCLUDES += [ - "/layout/base", - "/layout/forms", - "/layout/generic", +Index: firefox-115.0/widget/gtk/moz.build +=================================================================== +--- firefox-115.0.orig/widget/gtk/moz.build ++++ firefox-115.0/widget/gtk/moz.build +@@ -149,6 +149,7 @@ LOCAL_INCLUDES += [ "/layout/xul", "/other-licenses/atk-1.0", "/third_party/cups/include", @@ -1260,19 +980,11 @@ "/widget", "/widget/headless", ] - - if CONFIG["MOZ_X11"] or CONFIG["MOZ_WAYLAND"]: - LOCAL_INCLUDES += [ - "/widget/x11", - ] -diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp ---- a/widget/gtk/nsFilePicker.cpp -+++ b/widget/gtk/nsFilePicker.cpp -@@ -1,15 +1,16 @@ - /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ - /* 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 http://mozilla.org/MPL/2.0/. */ +Index: firefox-115.0/widget/gtk/nsFilePicker.cpp +=================================================================== +--- firefox-115.0.orig/widget/gtk/nsFilePicker.cpp ++++ firefox-115.0/widget/gtk/nsFilePicker.cpp +@@ -5,6 +5,7 @@ #include #include @@ -1280,17 +992,7 @@ #include #include #include - - #include "mozilla/Types.h" - #include "nsGtkUtils.h" - #include "nsIFileURL.h" - #include "nsIGIOService.h" -@@ -23,16 +24,18 @@ - #include "nsArrayEnumerator.h" - #include "nsEnumeratorUtils.h" - #include "nsNetUtil.h" - #include "nsReadableUtils.h" - #include "MozContainer.h" +@@ -28,6 +29,8 @@ #include "WidgetUtilsGtk.h" #include "nsFilePicker.h" @@ -1299,60 +1001,41 @@ #undef LOG #ifdef MOZ_LOGGING - # include "mozilla/Logging.h" - # include "nsTArray.h" - # include "Units.h" - extern mozilla::LazyLogModule gWidgetLog; - # define LOG(args) MOZ_LOG(gWidgetLog, mozilla::LogLevel::Debug, args) -@@ -237,17 +240,19 @@ nsFilePicker::AppendFilters(int32_t aFil - mAllowURLs = !!(aFilterMask & filterAllowURLs); - return nsBaseFilePicker::AppendFilters(aFilterMask); - } - - NS_IMETHODIMP +@@ -242,7 +245,8 @@ NS_IMETHODIMP nsFilePicker::AppendFilter(const nsAString& aTitle, const nsAString& aFilter) { if (aFilter.EqualsLiteral("..apps")) { // No platform specific thing we can do here, really.... - return NS_OK; + // Unless it's KDE. -+ if( mMode != modeOpen || !nsKDEUtils::kdeSupport()) -+ return NS_OK; ++ if (mMode != modeOpen || !nsKDEUtils::kdeSupport()) return NS_OK; } nsAutoCString filter, name; - CopyUTF16toUTF8(aFilter, filter); - CopyUTF16toUTF8(aTitle, name); - - mFilters.AppendElement(filter); - mFilterNames.AppendElement(name); -@@ -347,16 +352,39 @@ nsresult nsFilePicker::Show(nsIFilePicke - return NS_OK; - } - - NS_IMETHODIMP - nsFilePicker::Open(nsIFilePickerShownCallback* aCallback) { +@@ -352,6 +356,31 @@ nsFilePicker::Open(nsIFilePickerShownCal // Can't show two dialogs concurrently with the same filepicker if (mRunning) return NS_ERROR_NOT_AVAILABLE; + // KDE file picker is not handled via callback -+ if( nsKDEUtils::kdeSupport()) { ++ if (nsKDEUtils::kdeSupport()) { + mCallback = aCallback; + mRunning = true; + NS_ADDREF_THIS(); -+ g_idle_add([](gpointer data) -> gboolean { -+ nsFilePicker* queuedPicker = (nsFilePicker*) data; -+ nsIFilePicker::ResultCode result; -+ queuedPicker->kdeFileDialog(&result); -+ if (queuedPicker->mCallback) { -+ queuedPicker->mCallback->Done(result); -+ queuedPicker->mCallback = nullptr; -+ } else { -+ queuedPicker->mResult = result; -+ } -+ queuedPicker->mRunning = false; -+ NS_RELEASE(queuedPicker); -+ return G_SOURCE_REMOVE; -+ }, this); ++ g_idle_add( ++ [](gpointer data) -> gboolean { ++ nsFilePicker* queuedPicker = (nsFilePicker*)data; ++ nsIFilePicker::ResultCode result; ++ queuedPicker->kdeFileDialog(&result); ++ if (queuedPicker->mCallback) { ++ queuedPicker->mCallback->Done(result); ++ queuedPicker->mCallback = nullptr; ++ } else { ++ queuedPicker->mResult = result; ++ } ++ queuedPicker->mRunning = false; ++ NS_RELEASE(queuedPicker); ++ return G_SOURCE_REMOVE; ++ }, ++ this); + + return NS_OK; + } @@ -1360,86 +1043,68 @@ NS_ConvertUTF16toUTF8 title(mTitle); GtkWindow* parent_widget = - GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)); - - GtkFileChooserAction action = GetGtkFileChooserAction(mMode); - - const gchar* accept_button; -@@ -628,16 +656,244 @@ void nsFilePicker::Done(void* file_choos - mCallback->Done(result); - mCallback = nullptr; - } else { - mResult = result; - } +@@ -633,6 +662,205 @@ void nsFilePicker::Done(void* file_choos NS_RELEASE_THIS(); } -+nsCString nsFilePicker::kdeMakeFilter( int index ) -+ { -+ nsCString buf = mFilters[ index ]; -+ for( PRUint32 i = 0; -+ i < buf.Length(); -+ ++i ) -+ if( buf[ i ] == ';' ) // KDE separates just using spaces -+ buf.SetCharAt( ' ', i ); -+ if (!mFilterNames[index].IsEmpty()) -+ { -+ buf += "|"; -+ buf += mFilterNames[index].get(); -+ } -+ return buf; -+ } ++nsCString nsFilePicker::kdeMakeFilter(int index) { ++ nsCString buf = mFilters[index]; ++ for (PRUint32 i = 0; i < buf.Length(); ++i) ++ if (buf[i] == ';') // KDE separates just using spaces ++ buf.SetCharAt(' ', i); ++ if (!mFilterNames[index].IsEmpty()) { ++ buf += "|"; ++ buf += mFilterNames[index].get(); ++ } ++ return buf; ++} + -+static PRInt32 windowToXid( nsIWidget* widget ) -+ { -+ GtkWindow *parent_widget = GTK_WINDOW(widget->GetNativeData(NS_NATIVE_SHELLWIDGET)); -+ GdkWindow* gdk_window = gtk_widget_get_window( gtk_widget_get_toplevel( GTK_WIDGET( parent_widget ))); -+ return GDK_WINDOW_XID( gdk_window ); -+ } ++static PRInt32 windowToXid(nsIWidget* widget) { ++ GtkWindow* parent_widget = ++ GTK_WINDOW(widget->GetNativeData(NS_NATIVE_SHELLWIDGET)); ++ GdkWindow* gdk_window = ++ gtk_widget_get_window(gtk_widget_get_toplevel(GTK_WIDGET(parent_widget))); ++ return GDK_WINDOW_XID(gdk_window); ++} + -+NS_IMETHODIMP nsFilePicker::kdeFileDialog(nsIFilePicker::ResultCode *aReturn) -+ { -+ NS_ENSURE_ARG_POINTER(aReturn); ++NS_IMETHODIMP nsFilePicker::kdeFileDialog(nsIFilePicker::ResultCode* aReturn) { ++ NS_ENSURE_ARG_POINTER(aReturn); + -+ if( mMode == modeOpen && mFilters.Length() == 1 && mFilters[ 0 ].EqualsLiteral( "..apps" )) -+ return kdeAppsDialog( aReturn ); -+ -+ nsCString title; -+ title.Adopt(ToNewUTF8String(mTitle)); ++ if (mMode == modeOpen && mFilters.Length() == 1 && ++ mFilters[0].EqualsLiteral("..apps")) ++ return kdeAppsDialog(aReturn); + -+ const char* arg = NULL; -+ if( mAllowURLs ) -+ { -+ switch( mMode ) -+ { -+ case nsIFilePicker::modeOpen: -+ case nsIFilePicker::modeOpenMultiple: -+ arg = "GETOPENURL"; -+ break; -+ case nsIFilePicker::modeSave: -+ arg = "GETSAVEURL"; -+ break; -+ case nsIFilePicker::modeGetFolder: -+ arg = "GETDIRECTORYURL"; -+ break; -+ } -+ } -+ else -+ { -+ switch( mMode ) -+ { -+ case nsIFilePicker::modeOpen: -+ case nsIFilePicker::modeOpenMultiple: -+ arg = "GETOPENFILENAME"; -+ break; -+ case nsIFilePicker::modeSave: -+ arg = "GETSAVEFILENAME"; -+ break; -+ case nsIFilePicker::modeGetFolder: -+ arg = "GETDIRECTORYFILENAME"; -+ break; -+ } -+ } ++ nsCString title; ++ title.Adopt(ToNewUTF8String(mTitle)); ++ ++ const char* arg = NULL; ++ if (mAllowURLs) { ++ switch (mMode) { ++ case nsIFilePicker::modeOpen: ++ case nsIFilePicker::modeOpenMultiple: ++ arg = "GETOPENURL"; ++ break; ++ case nsIFilePicker::modeSave: ++ arg = "GETSAVEURL"; ++ break; ++ case nsIFilePicker::modeGetFolder: ++ arg = "GETDIRECTORYURL"; ++ break; ++ } ++ } else { ++ switch (mMode) { ++ case nsIFilePicker::modeOpen: ++ case nsIFilePicker::modeOpenMultiple: ++ arg = "GETOPENFILENAME"; ++ break; ++ case nsIFilePicker::modeSave: ++ arg = "GETSAVEFILENAME"; ++ break; ++ case nsIFilePicker::modeGetFolder: ++ arg = "GETDIRECTORYFILENAME"; ++ break; ++ } ++ } + + nsAutoCString directory; + if (mDisplayDirectory) { @@ -1448,203 +1113,164 @@ + mPrevDisplayDirectory->GetNativePath(directory); + } + -+ nsAutoCString startdir; ++ nsAutoCString startdir; + if (!directory.IsEmpty()) { + startdir = directory; + } + if (mMode == nsIFilePicker::modeSave) { -+ if( !startdir.IsEmpty()) -+ { ++ if (!startdir.IsEmpty()) { + startdir += "/"; + startdir += ToNewUTF8String(mDefault); -+ } -+ else ++ } else + startdir = ToNewUTF8String(mDefault); + } + -+ nsAutoCString filters; -+ PRInt32 count = mFilters.Length(); -+ if( count == 0 ) //just in case -+ filters = "*"; -+ else -+ { -+ filters = kdeMakeFilter( 0 ); -+ for (PRInt32 i = 1; i < count; ++i) -+ { -+ filters += "\n"; -+ filters += kdeMakeFilter( i ); -+ } -+ } -+ -+ nsTArray command; -+ command.AppendElement( nsAutoCString( arg )); -+ command.AppendElement( startdir ); -+ if( mMode != nsIFilePicker::modeGetFolder ) -+ { -+ command.AppendElement( filters ); -+ nsAutoCString selected; -+ selected.AppendInt( mSelectedType ); -+ command.AppendElement( selected ); -+ } -+ command.AppendElement( title ); -+ if( mMode == nsIFilePicker::modeOpenMultiple ) -+ command.AppendElement( "MULTIPLE"_ns ); -+ if( PRInt32 xid = windowToXid( mParentWidget )) -+ { -+ command.AppendElement( "PARENT"_ns ); -+ nsAutoCString parent; -+ parent.AppendInt( xid ); -+ command.AppendElement( parent ); -+ } -+ -+ nsTArray output; -+ if( nsKDEUtils::commandBlockUi( command, GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)), &output )) -+ { -+ *aReturn = nsIFilePicker::returnOK; -+ mFiles.Clear(); -+ if( mMode != nsIFilePicker::modeGetFolder ) -+ { -+ mSelectedType = atoi( output[ 0 ].get()); -+ output.RemoveElementAt( 0 ); -+ } -+ if (mMode == nsIFilePicker::modeOpenMultiple) -+ { -+ mFileURL.Truncate(); -+ PRUint32 count = output.Length(); -+ for( PRUint32 i = 0; -+ i < count; -+ ++i ) -+ { -+ nsCOMPtr localfile; -+ nsresult rv = NS_NewNativeLocalFile( output[ i ], -+ PR_FALSE, -+ getter_AddRefs(localfile)); -+ if (NS_SUCCEEDED(rv)) -+ mFiles.AppendObject(localfile); -+ } -+ } -+ else -+ { -+ if( output.Length() == 0 ) -+ mFileURL = nsCString(); -+ else if( mAllowURLs ) -+ mFileURL = output[ 0 ]; -+ else // GetFile() actually requires it to be url even for local files :-/ -+ { -+ nsCOMPtr localfile; -+ nsresult rv = NS_NewNativeLocalFile( output[ 0 ], -+ PR_FALSE, -+ getter_AddRefs(localfile)); -+ if (NS_SUCCEEDED(rv)) -+ rv = net_GetURLSpecFromActualFile(localfile, mFileURL); -+ } -+ } -+ // Remember last used directory. -+ nsCOMPtr file; -+ GetFile(getter_AddRefs(file)); -+ if (file) { -+ nsCOMPtr dir; -+ file->GetParent(getter_AddRefs(dir)); -+ nsCOMPtr localDir(do_QueryInterface(dir)); -+ if (localDir) { -+ localDir.swap(mPrevDisplayDirectory); ++ nsAutoCString filters; ++ PRInt32 count = mFilters.Length(); ++ if (count == 0) // just in case ++ filters = "*"; ++ else { ++ filters = kdeMakeFilter(0); ++ for (PRInt32 i = 1; i < count; ++i) { ++ filters += "\n"; ++ filters += kdeMakeFilter(i); + } + } -+ if (mMode == nsIFilePicker::modeSave) -+ { -+ nsCOMPtr file; -+ GetFile(getter_AddRefs(file)); -+ if (file) -+ { -+ bool exists = false; -+ file->Exists(&exists); -+ if (exists) // TODO do overwrite check in the helper app -+ *aReturn = nsIFilePicker::returnReplace; -+ } -+ } -+ } -+ else -+ { -+ *aReturn = nsIFilePicker::returnCancel; -+ } -+ return NS_OK; -+ } + -+ -+NS_IMETHODIMP nsFilePicker::kdeAppsDialog(nsIFilePicker::ResultCode *aReturn) -+ { -+ NS_ENSURE_ARG_POINTER(aReturn); ++ nsTArray command; ++ command.AppendElement(nsAutoCString(arg)); ++ command.AppendElement(startdir); ++ if (mMode != nsIFilePicker::modeGetFolder) { ++ command.AppendElement(filters); ++ nsAutoCString selected; ++ selected.AppendInt(mSelectedType); ++ command.AppendElement(selected); ++ } ++ command.AppendElement(title); ++ if (mMode == nsIFilePicker::modeOpenMultiple) ++ command.AppendElement("MULTIPLE"_ns); ++ if (PRInt32 xid = windowToXid(mParentWidget)) { ++ command.AppendElement("PARENT"_ns); ++ nsAutoCString parent; ++ parent.AppendInt(xid); ++ command.AppendElement(parent); ++ } + -+ nsCString title; -+ title.Adopt(ToNewUTF8String(mTitle)); ++ nsTArray output; ++ if (nsKDEUtils::commandBlockUi( ++ command, ++ GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)), ++ &output)) { ++ *aReturn = nsIFilePicker::returnOK; ++ mFiles.Clear(); ++ if (mMode != nsIFilePicker::modeGetFolder) { ++ mSelectedType = atoi(output[0].get()); ++ output.RemoveElementAt(0); ++ } ++ if (mMode == nsIFilePicker::modeOpenMultiple) { ++ mFileURL.Truncate(); ++ PRUint32 count = output.Length(); ++ for (PRUint32 i = 0; i < count; ++i) { ++ nsCOMPtr localfile; ++ nsresult rv = NS_NewNativeLocalFile(output[i], PR_FALSE, ++ getter_AddRefs(localfile)); ++ if (NS_SUCCEEDED(rv)) mFiles.AppendObject(localfile); ++ } ++ } else { ++ if (output.Length() == 0) ++ mFileURL = nsCString(); ++ else if (mAllowURLs) ++ mFileURL = output[0]; ++ else // GetFile() actually requires it to be url even for local files :-/ ++ { ++ nsCOMPtr localfile; ++ nsresult rv = NS_NewNativeLocalFile(output[0], PR_FALSE, ++ getter_AddRefs(localfile)); ++ if (NS_SUCCEEDED(rv)) ++ rv = net_GetURLSpecFromActualFile(localfile, mFileURL); ++ } ++ } ++ // Remember last used directory. ++ nsCOMPtr file; ++ GetFile(getter_AddRefs(file)); ++ if (file) { ++ nsCOMPtr dir; ++ file->GetParent(getter_AddRefs(dir)); ++ nsCOMPtr localDir(dir); ++ if (localDir) { ++ localDir.swap(mPrevDisplayDirectory); ++ } ++ } ++ if (mMode == nsIFilePicker::modeSave) { ++ nsCOMPtr file; ++ GetFile(getter_AddRefs(file)); ++ if (file) { ++ bool exists = false; ++ file->Exists(&exists); ++ if (exists) // TODO do overwrite check in the helper app ++ *aReturn = nsIFilePicker::returnReplace; ++ } ++ } ++ } else { ++ *aReturn = nsIFilePicker::returnCancel; ++ } ++ return NS_OK; ++} + -+ nsTArray command; -+ command.AppendElement( "APPSDIALOG"_ns ); -+ command.AppendElement( title ); -+ if( PRInt32 xid = windowToXid( mParentWidget )) -+ { -+ command.AppendElement( "PARENT"_ns ); -+ nsAutoCString parent; -+ parent.AppendInt( xid ); -+ command.AppendElement( parent ); -+ } ++NS_IMETHODIMP nsFilePicker::kdeAppsDialog(nsIFilePicker::ResultCode* aReturn) { ++ NS_ENSURE_ARG_POINTER(aReturn); ++ ++ nsCString title; ++ title.Adopt(ToNewUTF8String(mTitle)); + -+ nsTArray output; -+ if( nsKDEUtils::commandBlockUi( command, GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)), &output )) -+ { -+ *aReturn = nsIFilePicker::returnOK; -+ mFileURL = output.Length() > 0 ? output[ 0 ] : nsCString(); -+ } -+ else -+ { -+ *aReturn = nsIFilePicker::returnCancel; -+ } -+ return NS_OK; -+ } ++ nsTArray command; ++ command.AppendElement("APPSDIALOG"_ns); ++ command.AppendElement(title); ++ if (PRInt32 xid = windowToXid(mParentWidget)) { ++ command.AppendElement("PARENT"_ns); ++ nsAutoCString parent; ++ parent.AppendInt(xid); ++ command.AppendElement(parent); ++ } ++ ++ nsTArray output; ++ if (nsKDEUtils::commandBlockUi( ++ command, ++ GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)), ++ &output)) { ++ *aReturn = nsIFilePicker::returnOK; ++ mFileURL = output.Length() > 0 ? output[0] : nsCString(); ++ } else { ++ *aReturn = nsIFilePicker::returnCancel; ++ } ++ return NS_OK; ++} + // All below functions available as of GTK 3.20+ void* nsFilePicker::GtkFileChooserNew(const gchar* title, GtkWindow* parent, GtkFileChooserAction action, - const gchar* accept_label) { - static auto sGtkFileChooserNativeNewPtr = - (void* (*)(const gchar*, GtkWindow*, GtkFileChooserAction, const gchar*, - const gchar*))dlsym(RTLD_DEFAULT, - "gtk_file_chooser_native_new"); -diff --git a/widget/gtk/nsFilePicker.h b/widget/gtk/nsFilePicker.h ---- a/widget/gtk/nsFilePicker.h -+++ b/widget/gtk/nsFilePicker.h -@@ -69,16 +69,22 @@ class nsFilePicker : public nsBaseFilePi - nsString mDefaultExtension; - - nsTArray mFilters; - nsTArray mFilterNames; - +Index: firefox-115.0/widget/gtk/nsFilePicker.h +=================================================================== +--- firefox-115.0.orig/widget/gtk/nsFilePicker.h ++++ firefox-115.0/widget/gtk/nsFilePicker.h +@@ -74,6 +74,12 @@ class nsFilePicker : public nsBaseFilePi private: static nsIFile* mPrevDisplayDirectory; + bool kdeRunning(); + bool getKdeRunning(); -+ NS_IMETHODIMP kdeFileDialog(nsIFilePicker::ResultCode *aReturn); -+ NS_IMETHODIMP kdeAppsDialog(nsIFilePicker::ResultCode *aReturn); -+ nsCString kdeMakeFilter( int index ); ++ NS_IMETHODIMP kdeFileDialog(nsIFilePicker::ResultCode* aReturn); ++ NS_IMETHODIMP kdeAppsDialog(nsIFilePicker::ResultCode* aReturn); ++ nsCString kdeMakeFilter(int index); + void* GtkFileChooserNew(const gchar* title, GtkWindow* parent, GtkFileChooserAction action, const gchar* accept_label); - void GtkFileChooserShow(void* file_chooser); - void GtkFileChooserDestroy(void* file_chooser); - void GtkFileChooserSetModal(void* file_chooser, GtkWindow* parent_widget, - gboolean modal); - -diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestParser.cpp ---- a/xpcom/components/ManifestParser.cpp -+++ b/xpcom/components/ManifestParser.cpp -@@ -38,16 +38,17 @@ - #include "nsTextFormatter.h" - #include "nsVersionComparator.h" - #include "nsXPCOMCIDInternal.h" - - #include "nsIConsoleService.h" +Index: firefox-115.0/xpcom/components/ManifestParser.cpp +=================================================================== +--- firefox-115.0.orig/xpcom/components/ManifestParser.cpp ++++ firefox-115.0/xpcom/components/ManifestParser.cpp +@@ -43,6 +43,7 @@ #include "nsIScriptError.h" #include "nsIXULAppInfo.h" #include "nsIXULRuntime.h" @@ -1652,17 +1278,7 @@ using namespace mozilla; - struct ManifestDirective { - const char* directive; - int argc; - - bool ischrome; -@@ -389,16 +390,17 @@ void ParseManifest(NSLocationType aType, - constexpr auto kRemoteEnabled = u"remoteenabled"_ns; - constexpr auto kRemoteRequired = u"remoterequired"_ns; - constexpr auto kApplication = u"application"_ns; - constexpr auto kAppVersion = u"appversion"_ns; - constexpr auto kGeckoVersion = u"platformversion"_ns; +@@ -394,6 +395,7 @@ void ParseManifest(NSLocationType aType, constexpr auto kOs = u"os"_ns; constexpr auto kOsVersion = u"osversion"_ns; constexpr auto kABI = u"abi"_ns; @@ -1670,17 +1286,7 @@ constexpr auto kProcess = u"process"_ns; #if defined(MOZ_WIDGET_ANDROID) constexpr auto kTablet = u"tablet"_ns; - #endif - // You might expect this to be guarded by MOZ_BACKGROUNDTASKS, but it's not - // possible to have conditional manifest contents, so we need to recognize and - // discard these tokens even when MOZ_BACKGROUNDTASKS is not set. - constexpr auto kBackgroundTask = u"backgroundtask"_ns; -@@ -448,39 +450,44 @@ void ParseManifest(NSLocationType aType, - CopyUTF8toUTF16(s, abi); - abi.Insert(char16_t('_'), 0); - abi.Insert(osTarget, 0); - } - } +@@ -453,6 +455,7 @@ void ParseManifest(NSLocationType aType, } nsAutoString osVersion; @@ -1688,8 +1294,7 @@ #if defined(XP_WIN) # pragma warning(push) # pragma warning(disable : 4996) // VC12+ deprecates GetVersionEx - OSVERSIONINFO info = {sizeof(OSVERSIONINFO)}; - if (GetVersionEx(&info)) { +@@ -461,14 +464,17 @@ void ParseManifest(NSLocationType aType, nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", info.dwMajorVersion, info.dwMinorVersion); } @@ -1707,7 +1312,7 @@ #elif defined(MOZ_WIDGET_ANDROID) bool isTablet = false; if (jni::IsAvailable()) { - jni::String::LocalRef release = java::sdk::Build::VERSION::RELEASE(); +@@ -476,6 +482,7 @@ void ParseManifest(NSLocationType aType, osVersion.Assign(release->ToString()); isTablet = java::GeckoAppShell::IsTablet(); } @@ -1715,17 +1320,7 @@ #endif if (XRE_IsContentProcess()) { - process = kContent; - } else { - process = kMain; - } - -@@ -571,25 +578,27 @@ void ParseManifest(NSLocationType aType, - // When in background task mode, default to not registering - // category directivies unless backgroundtask=1 is specified. - TriState stBackgroundTask = (BackgroundTasks::IsBackgroundTaskMode() && - strcmp("category", directive->directive) == 0) - ? eBad +@@ -576,6 +583,7 @@ void ParseManifest(NSLocationType aType, : eUnspecified; #endif int flags = 0; @@ -1733,9 +1328,7 @@ while ((token = nsCRT::strtok(whitespace, kWhitespace, &whitespace)) && ok) { - ToLowerCase(token); - NS_ConvertASCIItoUTF16 wtoken(token); - +@@ -585,6 +593,7 @@ void ParseManifest(NSLocationType aType, if (CheckStringFlag(kApplication, wtoken, appID, stApp) || CheckOsFlag(kOs, wtoken, osTarget, stOs) || CheckStringFlag(kABI, wtoken, abi, stABI) || @@ -1743,39 +1336,19 @@ CheckStringFlag(kProcess, wtoken, process, stProcess) || CheckVersionFlag(kOsVersion, wtoken, osVersion, stOsVersion) || CheckVersionFlag(kAppVersion, wtoken, appVersion, stAppVersion) || - CheckVersionFlag(kGeckoVersion, wtoken, geckoVersion, - stGeckoVersion)) { - continue; - } - -@@ -638,17 +647,17 @@ void ParseManifest(NSLocationType aType, - } - - LogMessageWithContext( - aFile, line, "Unrecognized chrome manifest modifier '%s'.", token); - ok = false; - } +@@ -644,6 +653,7 @@ void ParseManifest(NSLocationType aType, if (!ok || stApp == eBad || stAppVersion == eBad || -- stGeckoVersion == eBad || stOs == eBad || stOsVersion == eBad || -+ stGeckoVersion == eBad || stOs == eBad || stOsVersion == eBad || stDesktop == eBad || + stGeckoVersion == eBad || stOs == eBad || stOsVersion == eBad || ++ stDesktop == eBad || #ifdef MOZ_WIDGET_ANDROID stTablet == eBad || #endif - #ifdef MOZ_BACKGROUNDTASKS - stBackgroundTask == eBad || - #endif - stABI == eBad || stProcess == eBad) { - continue; -diff --git a/xpcom/components/moz.build b/xpcom/components/moz.build ---- a/xpcom/components/moz.build -+++ b/xpcom/components/moz.build -@@ -66,16 +66,17 @@ LOCAL_INCLUDES += [ - "!..", - "../base", - "../build", - "../ds", - "/chrome", +Index: firefox-115.0/xpcom/components/moz.build +=================================================================== +--- firefox-115.0.orig/xpcom/components/moz.build ++++ firefox-115.0/xpcom/components/moz.build +@@ -71,6 +71,7 @@ LOCAL_INCLUDES += [ "/js/xpconnect/loader", "/layout/build", "/modules/libjar", @@ -1783,20 +1356,11 @@ ] if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": - CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] - if CONFIG["MOZ_ENABLE_DBUS"]: - CXXFLAGS += CONFIG["MOZ_DBUS_GLIB_CFLAGS"] - - include("/ipc/chromium/chromium-config.mozbuild") -diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp ---- a/xpcom/io/nsLocalFileUnix.cpp -+++ b/xpcom/io/nsLocalFileUnix.cpp -@@ -46,16 +46,17 @@ - #include "nsString.h" - #include "nsIDirectoryEnumerator.h" - #include "nsSimpleEnumerator.h" - #include "private/pprio.h" - #include "prlink.h" +Index: firefox-115.0/xpcom/io/nsLocalFileUnix.cpp +=================================================================== +--- firefox-115.0.orig/xpcom/io/nsLocalFileUnix.cpp ++++ firefox-115.0/xpcom/io/nsLocalFileUnix.cpp +@@ -51,6 +51,7 @@ #ifdef MOZ_WIDGET_GTK # include "nsIGIOService.h" @@ -1804,64 +1368,38 @@ #endif #ifdef MOZ_WIDGET_COCOA - # include - # include "CocoaFileUtils.h" - # include "prmem.h" - # include "plbase64.h" - -@@ -2167,20 +2168,29 @@ nsLocalFile::SetPersistentDescriptor(con - - NS_IMETHODIMP - nsLocalFile::Reveal() { - if (!FilePreferences::IsAllowedPath(mPath)) { - return NS_ERROR_FILE_ACCESS_DENIED; +@@ -2172,10 +2173,18 @@ nsLocalFile::Reveal() { } #ifdef MOZ_WIDGET_GTK + nsAutoCString url; nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); - if (!giovfs) { +- return NS_ERROR_FAILURE; + url = mPath; -+ if(nsKDEUtils::kdeSupport()) { ++ if (nsKDEUtils::kdeSupport()) { + nsTArray command; -+ command.AppendElement( "REVEAL"_ns ); -+ command.AppendElement( mPath ); -+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; -+ } ++ command.AppendElement("REVEAL"_ns); ++ command.AppendElement(mPath); ++ return nsKDEUtils::command(command) ? NS_OK : NS_ERROR_FAILURE; + } + -+ if (!giovfs) - return NS_ERROR_FAILURE; -- } ++ if (!giovfs) return NS_ERROR_FAILURE; + return giovfs->RevealFile(this); #elif defined(MOZ_WIDGET_COCOA) CFURLRef url; - if (NS_SUCCEEDED(GetCFURL(&url))) { - nsresult rv = CocoaFileUtils::RevealFileInFinder(url); - ::CFRelease(url); - return rv; - } -@@ -2192,16 +2202,23 @@ nsLocalFile::Reveal() { - - NS_IMETHODIMP - nsLocalFile::Launch() { - if (!FilePreferences::IsAllowedPath(mPath)) { - return NS_ERROR_FILE_ACCESS_DENIED; +@@ -2197,6 +2206,13 @@ nsLocalFile::Launch() { } #ifdef MOZ_WIDGET_GTK -+ if( nsKDEUtils::kdeSupport()) { ++ if (nsKDEUtils::kdeSupport()) { + nsTArray command; -+ command.AppendElement( "OPEN"_ns ); -+ command.AppendElement( mPath ); -+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; ++ command.AppendElement("OPEN"_ns); ++ command.AppendElement(mPath); ++ return nsKDEUtils::command(command) ? NS_OK : NS_ERROR_FAILURE; + } + nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); if (!giovfs) { return NS_ERROR_FAILURE; - } - - return giovfs->LaunchFile(mPath); - #elif defined(MOZ_WIDGET_ANDROID) - // Not supported on GeckoView diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-nongnome-proxies.patch --- a/mozilla-nongnome-proxies.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-nongnome-proxies.patch Sat Jul 29 14:34:45 2023 +0200 @@ -3,7 +3,7 @@ # Date 1558442915 -7200 # Tue May 21 14:48:35 2019 +0200 # Node ID 6bcf2dfebc1ea2aa34e5cc61152709fc8e409dc5 -# Parent bd5d1f49975deb730064a16b3079edb53c4a5f84 +# Parent 715f01d61df8627117e6aefca540f0c1bba45011 Do not use gconf for proxy settings if not running within Gnome Index: toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp =================================================================== @@ -13,12 +13,7 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp --- a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp +++ b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp -@@ -49,20 +49,24 @@ NS_IMETHODIMP - nsUnixSystemProxySettings::GetMainThreadOnly(bool* aMainThreadOnly) { - // dbus prevents us from being threadsafe, but this routine should not block - // anyhow - *aMainThreadOnly = true; - return NS_OK; +@@ -52,10 +52,13 @@ nsUnixSystemProxySettings::GetMainThread } void nsUnixSystemProxySettings::Init() { @@ -30,15 +25,9 @@ + if (sessionType && !strcmp(sessionType, "gnome")) { + mGSettings = do_GetService(NS_GSETTINGSSERVICE_CONTRACTID); + if (mGSettings) { -+ mGSettings->GetCollectionForSchema( -+ "org.gnome.system.proxy"_ns, -+ getter_AddRefs(mProxySettings)); ++ mGSettings->GetCollectionForSchema("org.gnome.system.proxy"_ns, ++ getter_AddRefs(mProxySettings)); + } } } - nsresult nsUnixSystemProxySettings::GetPACURI(nsACString& aResult) { - if (mProxySettings) { - nsCString proxyMode; - // Check if mode is auto - nsresult rv = mProxySettings->GetString("mode"_ns, proxyMode); diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-ntlm-full-path.patch --- a/mozilla-ntlm-full-path.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-ntlm-full-path.patch Sat Jul 29 14:34:45 2023 +0200 @@ -1,18 +1,13 @@ # HG changeset patch # User Petr Cerny # Parent 7308e4a7c1f769f4bbbc90870b849cadd99495a6 -# Parent 2361c5db1e70e358b2158325e07fa15bb4569c2c +# Parent 1c6a565013e4c5f3494f964269783939cd5ed0b8 Bug 634334 - call to the ntlm_auth helper fails diff --git a/extensions/auth/nsAuthSambaNTLM.cpp b/extensions/auth/nsAuthSambaNTLM.cpp --- a/extensions/auth/nsAuthSambaNTLM.cpp +++ b/extensions/auth/nsAuthSambaNTLM.cpp -@@ -156,17 +156,17 @@ static uint8_t* ExtractMessage(const nsA - *aLen = (length / 4) * 3 - numEquals; - return reinterpret_cast(PL_Base64Decode(s, length, nullptr)); - } - - nsresult nsAuthSambaNTLM::SpawnNTLMAuthHelper() { +@@ -160,7 +160,7 @@ nsresult nsAuthSambaNTLM::SpawnNTLMAuthH const char* username = PR_GetEnv("USER"); if (!username) return NS_ERROR_FAILURE; @@ -21,8 +16,3 @@ "--helper-protocol", "ntlmssp-client-1", "--use-cached-creds", - "--username", - username, - nullptr}; - - bool isOK = SpawnIOChild(const_cast(args), &mChildPID, diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-partial-revert-1768632.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mozilla-partial-revert-1768632.patch Sat Jul 29 14:34:45 2023 +0200 @@ -0,0 +1,13 @@ +Index: firefox-102.4.0/mfbt/EnumSet.h +=================================================================== +--- firefox-102.4.0.orig/mfbt/EnumSet.h ++++ firefox-102.4.0/mfbt/EnumSet.h +@@ -326,7 +326,7 @@ class EnumSet { + } + } + +- static constexpr size_t kMaxBits = MaxBits(); ++ static constexpr size_t kMaxBits = EnumSet().MaxBits(); + + Serialized mBitField; + diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-pgo.patch --- a/mozilla-pgo.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-pgo.patch Sat Jul 29 14:34:45 2023 +0200 @@ -1,16 +1,12 @@ # HG changeset patch # User Wolfgang Rosenauer -# Parent d6f551c7b3dc20bb47526e06c44646fd159f3dd1 +# Parent 9959fe2a13a39cbeb98ca1bef2e21caba16717bd -diff --git a/build/moz.configure/lto-pgo.configure b/build/moz.configure/lto-pgo.configure ---- a/build/moz.configure/lto-pgo.configure -+++ b/build/moz.configure/lto-pgo.configure -@@ -242,34 +242,34 @@ def lto( - "configure." - ) - - if c_compiler.type == "clang": - if value == "full": +Index: firefox-115.0/build/moz.configure/lto-pgo.configure +=================================================================== +--- firefox-115.0.orig/build/moz.configure/lto-pgo.configure ++++ firefox-115.0/build/moz.configure/lto-pgo.configure +@@ -251,8 +251,8 @@ def lto( cflags.append("-flto") ldflags.append("-flto") else: @@ -19,18 +15,10 @@ + cflags.append("-flto") + ldflags.append("-flto") - if target.os == "Android" and value == "cross": + if target.os == "Android" and "cross" in values: # Work around https://github.com/rust-lang/rust/issues/90088 - # by enabling the highest level of SSE the rust targets default - # to. - # https://github.com/rust-lang/rust/blob/bdfcb88e8b6203ccb46a2fb6649979b773efc8ac/compiler/rustc_target/src/spec/i686_linux_android.rs#L13 - # https://github.com/rust-lang/rust/blob/8d1083e319841624f64400e1524805a40d725439/compiler/rustc_target/src/spec/x86_64_linux_android.rs#L7 - if target.cpu == "x86": - ldflags.append("-Wl,-plugin-opt=-mattr=+ssse3") - elif target.cpu == "x86_64": - ldflags.append("-Wl,-plugin-opt=-mattr=+sse4.2") - elif c_compiler.type == "clang-cl": - if value == "full": +@@ -268,7 +268,7 @@ def lto( + if "full" in values: cflags.append("-flto") else: - cflags.append("-flto=thin") @@ -38,20 +26,11 @@ # With clang-cl, -flto can only be used with -c or -fuse-ld=lld. # AC_TRY_LINKs during configure don't have -c, so pass -fuse-ld=lld. cflags.append("-fuse-ld=lld") - - # Explicitly set the CPU to optimize for so the linker doesn't - # choose a poor default. Rust compilation by default uses the - # pentium4 CPU on x86: - # -diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py ---- a/build/pgo/profileserver.py -+++ b/build/pgo/profileserver.py -@@ -6,17 +6,17 @@ - - import glob - import json - import os - import subprocess +Index: firefox-115.0/build/pgo/profileserver.py +=================================================================== +--- firefox-115.0.orig/build/pgo/profileserver.py ++++ firefox-115.0/build/pgo/profileserver.py +@@ -11,7 +11,7 @@ import subprocess import sys import mozcrash @@ -60,17 +39,7 @@ from mozfile import TemporaryDirectory from mozhttpd import MozHttpd from mozprofile import FirefoxProfile, Preferences - from mozprofile.permissions import ServerLocations - from mozrunner import CLI, FirefoxRunner - from six import string_types - - PORT = 8888 -@@ -82,19 +82,32 @@ if __name__ == "__main__": - docroot=os.path.join(build.topsrcdir, "build", "pgo"), - path_mappings=path_mappings, - ) - httpd.start(block=False) - +@@ -87,9 +87,22 @@ if __name__ == "__main__": locations = ServerLocations() locations.add_host(host="127.0.0.1", port=PORT, options="primary,privileged") @@ -96,17 +65,7 @@ with TemporaryDirectory() as profilePath: # TODO: refactor this into mozprofile - profile_data_dir = os.path.join(build.topsrcdir, "testing", "profiles") - with open(os.path.join(profile_data_dir, "profiles.json"), "r") as fh: - base_profiles = json.load(fh)["profileserver"] - - prefpaths = [ -@@ -208,16 +221,20 @@ if __name__ == "__main__": - - # Try to move the crash reports to the artifacts even if Firefox appears - # to exit successfully, in case there's a crash that doesn't set the - # return code to non-zero for some reason. - if get_crashreports(profilePath, name="Firefox exited successfully?") != 0: +@@ -213,6 +226,10 @@ if __name__ == "__main__": print("Firefox exited successfully, but produced a crashreport") sys.exit(1) @@ -117,18 +76,11 @@ llvm_profdata = env.get("LLVM_PROFDATA") if llvm_profdata: profraw_files = glob.glob("*.profraw") - if not profraw_files: - print( - "Could not find profraw files in the current directory: %s" - % os.getcwd() - ) -diff --git a/build/unix/mozconfig.unix b/build/unix/mozconfig.unix ---- a/build/unix/mozconfig.unix -+++ b/build/unix/mozconfig.unix -@@ -1,14 +1,23 @@ - . "$topsrcdir/build/mozconfig.common" - - if [ -n "$FORCE_GCC" ]; then +Index: firefox-115.0/build/unix/mozconfig.unix +=================================================================== +--- firefox-115.0.orig/build/unix/mozconfig.unix ++++ firefox-115.0/build/unix/mozconfig.unix +@@ -4,6 +4,15 @@ if [ -n "$FORCE_GCC" ]; then CC="$MOZ_FETCHES_DIR/gcc/bin/gcc" CXX="$MOZ_FETCHES_DIR/gcc/bin/g++" @@ -144,34 +96,21 @@ # We want to make sure we use binutils and other binaries in the tooltool # package. mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$MOZ_FETCHES_DIR/binutils/bin:$PATH" - else - # For some builds we don't want to have Clang based static-analysis activated - if [ -z "$DISABLE_CLANG_PLUGIN" ]; then - export ENABLE_CLANG_PLUGIN=1 - fi -diff --git a/extensions/spellcheck/src/moz.build b/extensions/spellcheck/src/moz.build ---- a/extensions/spellcheck/src/moz.build -+++ b/extensions/spellcheck/src/moz.build -@@ -23,8 +23,10 @@ LOCAL_INCLUDES += [ - "../hunspell/glue", - "../hunspell/src", - "/dom/base", - ] - EXPORTS.mozilla += [ +Index: firefox-115.0/extensions/spellcheck/src/moz.build +=================================================================== +--- firefox-115.0.orig/extensions/spellcheck/src/moz.build ++++ firefox-115.0/extensions/spellcheck/src/moz.build +@@ -28,3 +28,5 @@ EXPORTS.mozilla += [ "mozInlineSpellChecker.h", "mozSpellChecker.h", ] + +CXXFLAGS += ['-fno-devirtualize'] -diff --git a/toolkit/components/terminator/nsTerminator.cpp b/toolkit/components/terminator/nsTerminator.cpp ---- a/toolkit/components/terminator/nsTerminator.cpp -+++ b/toolkit/components/terminator/nsTerminator.cpp -@@ -455,16 +455,21 @@ void nsTerminator::StartWatchdog() { - // Defend against overflow - crashAfterMS = INT32_MAX; - } else { - crashAfterMS *= scaleUp; - } +Index: firefox-115.0/toolkit/components/terminator/nsTerminator.cpp +=================================================================== +--- firefox-115.0.orig/toolkit/components/terminator/nsTerminator.cpp ++++ firefox-115.0/toolkit/components/terminator/nsTerminator.cpp +@@ -460,6 +460,11 @@ void nsTerminator::StartWatchdog() { } #endif @@ -183,8 +122,3 @@ UniquePtr options(new Options()); // crashAfterTicks is guaranteed to be > 0 as // crashAfterMS >= ADDITIONAL_WAIT_BEFORE_CRASH_MS >> HEARTBEAT_INTERVAL_MS - options->crashAfterTicks = crashAfterMS / HEARTBEAT_INTERVAL_MS; - - DebugOnly watchdogThread = - CreateSystemThread(RunWatchdog, options.release()); - MOZ_ASSERT(watchdogThread); diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-reduce-rust-debuginfo.patch --- a/mozilla-reduce-rust-debuginfo.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-reduce-rust-debuginfo.patch Sat Jul 29 14:34:45 2023 +0200 @@ -1,6 +1,10 @@ ---- firefox-96.0.3.orig/build/moz.configure/rust.configure -+++ firefox-96.0.3/build/moz.configure/rust.configure -@@ -641,7 +643,7 @@ def rust_compile_flags( +# HG changeset patch +# Parent 135d931b3e674a670473f69f8c079e741ac63643 + +diff --git a/build/moz.configure/rust.configure b/build/moz.configure/rust.configure +--- a/build/moz.configure/rust.configure ++++ b/build/moz.configure/rust.configure +@@ -668,7 +668,7 @@ def rust_compile_flags( debug_assertions = False if debug_symbols: diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-rust-disable-future-incompat.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mozilla-rust-disable-future-incompat.patch Sat Jul 29 14:34:45 2023 +0200 @@ -0,0 +1,12 @@ +diff -rup a/Cargo.toml b/Cargo.toml +--- a/Cargo.toml 2023-07-04 15:15:01.089470619 +0200 ++++ b/Cargo.toml 2023-07-04 15:24:31.626226962 +0200 +@@ -188,3 +188,8 @@ uniffi_bindgen = "=0.23.0" + uniffi_build = "=0.23.0" + uniffi_macros = "=0.23.0" + weedle2 = "=4.0.0" ++ ++# Package code v0.1.4 uses code "that will be rejected by a future version of Rust" ++# Shut up such messages for now to make the build succeed ++[future-incompat-report] ++frequency = "never" diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-s390-context.patch --- a/mozilla-s390-context.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-s390-context.patch Sat Jul 29 14:34:45 2023 +0200 @@ -3,39 +3,24 @@ # Date 1558452408 -7200 # Tue May 21 17:26:48 2019 +0200 # Node ID 602e92722e765a3c238d3b96b26c0c8063b5eeb4 -# Parent 6d6ebdace8a9877fe17c1bd14b80307c258c864f +# Parent 783ceb006fcdabe5ad23bd561362e721c7ed5f8c [mq]: mozilla-s390-context.patch diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp --- a/js/src/wasm/WasmSignalHandlers.cpp +++ b/js/src/wasm/WasmSignalHandlers.cpp -@@ -163,16 +163,20 @@ using mozilla::DebugOnly; - # define R03_sig(p) ((p)->uc_mcontext.__gregs[3]) - # define RFP_sig(p) ((p)->uc_mcontext.__gregs[22]) - # endif - # if defined(__sun__) && defined(__sparc__) - # define PC_sig(p) ((p)->uc_mcontext.gregs[REG_PC]) +@@ -174,6 +174,10 @@ using mozilla::DebugOnly; # define FP_sig(p) ((p)->uc_mcontext.gregs[REG_FPRS]) # define SP_sig(p) ((p)->uc_mcontext.gregs[REG_SP]) # endif -+# if defined(__linux__) && defined(__s390x__) -+# define GR_sig(p,x) ((p)->uc_mcontext.gregs[x]) -+# define PSWa_sig(p) ((p)->uc_mcontext.psw.addr) -+# endif ++# if defined(__linux__) && defined(__s390x__) ++# define GR_sig(p, x) ((p)->uc_mcontext.gregs[x]) ++# define PSWa_sig(p) ((p)->uc_mcontext.psw.addr) ++# endif # elif defined(__NetBSD__) # define EIP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EIP]) # define EBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EBP]) - # define ESP_sig(p) ((p)->uc_mcontext.__gregs[_REG_ESP]) - # define RIP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RIP]) - # define RSP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RSP]) - # define RBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RBP]) - # define R11_sig(p) ((p)->uc_mcontext.__gregs[_REG_R11]) -@@ -405,16 +409,20 @@ struct macos_aarch64_context { - # define PC_sig(p) R32_sig(p) - # define SP_sig(p) R01_sig(p) - # define FP_sig(p) R01_sig(p) - # elif defined(__loongarch__) - # define PC_sig(p) EPC_sig(p) +@@ -416,6 +420,10 @@ struct macos_aarch64_context { # define FP_sig(p) RFP_sig(p) # define SP_sig(p) R03_sig(p) # define LR_sig(p) RRA_sig(p) @@ -43,11 +28,6 @@ +# define PC_sig(p) PSWa_sig(p) +# define SP_sig(p) GR_sig(p, 15) +# define FP_sig(p) GR_sig(p, 11) - # endif - - static void SetContextPC(CONTEXT* context, uint8_t* pc) { - # ifdef PC_sig - *reinterpret_cast(&PC_sig(context)) = pc; - # else - MOZ_CRASH(); - # endif + # elif defined(__riscv) + # define PC_sig(p) RPC_sig(p) + # define FP_sig(p) RFP_sig(p) diff -r ba0c97b018a6 -r 2a24a948b5cf mozilla-silence-no-return-type.patch --- a/mozilla-silence-no-return-type.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/mozilla-silence-no-return-type.patch Sat Jul 29 14:34:45 2023 +0200 @@ -1,131 +1,47 @@ # HG changeset patch -# Parent 2f49ea20acb4b0e890ae49f4833ac9d69b7e800c +# Parent 5df550d4b5fc674268055e504f60392389eb9ea7 -diff --git a/Cargo.lock b/Cargo.lock ---- a/Cargo.lock -+++ b/Cargo.lock -@@ -2254,18 +2254,16 @@ name = "glsl-to-cxx" - version = "0.1.0" - dependencies = [ - "glsl", - ] - - [[package]] - name = "glslopt" - version = "0.1.9" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "74a3f5c04450dfdadb4b08f6e5ee6f5110f674de1acbd6199bfec68392a8cbaf" - dependencies = [ - "cc", - ] - - [[package]] - name = "gluesmith" - version = "0.1.0" - dependencies = [ -diff --git a/Cargo.toml b/Cargo.toml ---- a/Cargo.toml -+++ b/Cargo.toml -@@ -157,16 +157,17 @@ chardetng = { git = "https://github.com/ - chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" } - coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } - firefox-on-glean = { path = "toolkit/components/glean/api" } - libudev-sys = { path = "dom/webauthn/libudev-sys" } - packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="412f9a0aa556611de021bde89dee8fefe6e0fbbd" } - midir = { git = "https://github.com/mozilla/midir.git", rev = "519e651241e867af3391db08f9ae6400bc023e18" } - # warp 0.3.3 + https://github.com/seanmonstar/warp/pull/1007 - warp = { git = "https://github.com/glandium/warp", rev = "4af45fae95bc98b0eba1ef0db17e1dac471bb23d" } -+glslopt = { path = "third_party/rust/glslopt/" } - - cssparser = { git = "https://github.com/servo/rust-cssparser", rev = "45bc47e2bcb846f1efb5aea156be5fe7d18624bf" } - - # application-services overrides to make updating them all simpler. - interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } - sql-support = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } - sync15 = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } - tabs = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } -diff --git a/gfx/skia/skia/include/codec/SkEncodedOrigin.h b/gfx/skia/skia/include/codec/SkEncodedOrigin.h ---- a/gfx/skia/skia/include/codec/SkEncodedOrigin.h -+++ b/gfx/skia/skia/include/codec/SkEncodedOrigin.h -@@ -36,12 +36,13 @@ static inline SkMatrix SkEncodedOriginTo - case kBottomRight_SkEncodedOrigin: return SkMatrix::MakeAll(-1, 0, w, 0, -1, h, 0, 0, 1); - case kBottomLeft_SkEncodedOrigin: return SkMatrix::MakeAll( 1, 0, 0, 0, -1, h, 0, 0, 1); - case kLeftTop_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, 1, 0, 0, 0, 0, 1); - case kRightTop_SkEncodedOrigin: return SkMatrix::MakeAll( 0, -1, h, 1, 0, 0, 0, 0, 1); - case kRightBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, -1, h, -1, 0, w, 0, 0, 1); - case kLeftBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, -1, 0, w, 0, 0, 1); +Index: firefox-115.0/gfx/skia/skia/include/codec/SkEncodedOrigin.h +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/include/codec/SkEncodedOrigin.h ++++ firefox-115.0/gfx/skia/skia/include/codec/SkEncodedOrigin.h +@@ -41,6 +41,7 @@ static inline SkMatrix SkEncodedOriginTo + case kLeftBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, -1, 0, h, 0, 0, 1); } SK_ABORT("Unexpected origin"); + SkUNREACHABLE; } - - #endif // SkEncodedOrigin_DEFINED -diff --git a/gfx/skia/skia/include/private/GrTypesPriv.h b/gfx/skia/skia/include/private/GrTypesPriv.h ---- a/gfx/skia/skia/include/private/GrTypesPriv.h -+++ b/gfx/skia/skia/include/private/GrTypesPriv.h -@@ -535,32 +535,34 @@ static inline GrSLType GrSLCombinedSampl - return kTexture2DSampler_GrSLType; - case GrTextureType::kRectangle: - return kTexture2DRectSampler_GrSLType; - case GrTextureType::kExternal: - return kTextureExternalSampler_GrSLType; + /** +Index: firefox-115.0/gfx/skia/skia/include/private/gpu/ganesh/GrTypesPriv.h +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/include/private/gpu/ganesh/GrTypesPriv.h ++++ firefox-115.0/gfx/skia/skia/include/private/gpu/ganesh/GrTypesPriv.h +@@ -325,6 +325,7 @@ static inline bool GrTextureTypeHasRestr default: SK_ABORT("Unexpected texture type"); } + SkUNREACHABLE; } - /** Rectangle and external textures only support the clamp wrap mode and do not support - * MIP maps. - */ - static inline bool GrTextureTypeHasRestrictedSampling(GrTextureType type) { - switch (type) { - case GrTextureType::k2D: - return false; - case GrTextureType::kRectangle: - return true; - case GrTextureType::kExternal: - return true; - default: - SK_ABORT("Unexpected texture type"); - } + ////////////////////////////////////////////////////////////////////////////// +Index: firefox-115.0/gfx/skia/skia/src/core/SkDescriptor.cpp +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/core/SkDescriptor.cpp ++++ firefox-115.0/gfx/skia/skia/src/core/SkDescriptor.cpp +@@ -26,6 +26,7 @@ std::unique_ptr SkDescript + void SkDescriptor::operator delete(void* p) { ::operator delete(p); } + void* SkDescriptor::operator new(size_t) { + SK_ABORT("Descriptors are created with placement new."); + SkUNREACHABLE; } - static constexpr bool GrSLTypeIsCombinedSamplerType(GrSLType type) { - switch (type) { - case kTexture2DSampler_GrSLType: - case kTextureExternalSampler_GrSLType: - case kTexture2DRectSampler_GrSLType: - return true; -@@ -853,16 +855,17 @@ static inline size_t GrCompressedFormatD - switch (compressionType) { - case SkImage::kETC1_CompressionType: - SkASSERT((width & 3) == 0); - SkASSERT((height & 3) == 0); - return (width >> 2) * (height >> 2) * 8; - } - - SK_ABORT("Invalid pixel config"); -+ SkUNREACHABLE; - } - - /** - * Like SkColorType this describes a layout of pixel data in CPU memory. It specifies the channels, - * their type, and width. This exists so that the GPU backend can have private types that have no - * analog in the public facing SkColorType enum and omit types not implemented in the GPU backend. - * It does not refer to a texture format and the mapping to texture formats may be many-to-many. - * It does not specify the sRGB encoding of the stored values. The components are listed in order of -diff --git a/gfx/skia/skia/src/core/SkGeometry.h b/gfx/skia/skia/src/core/SkGeometry.h ---- a/gfx/skia/skia/src/core/SkGeometry.h -+++ b/gfx/skia/skia/src/core/SkGeometry.h -@@ -177,28 +177,30 @@ static inline bool SkCubicIsDegenerate(S - case SkCubicType::kLocalCusp: - case SkCubicType::kCuspAtInfinity: - return false; - case SkCubicType::kQuadratic: - case SkCubicType::kLineOrPoint: + void SkDescriptor::flatten(SkWriteBuffer& buffer) const { +Index: firefox-115.0/gfx/skia/skia/src/core/SkGeometry.h +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/core/SkGeometry.h ++++ firefox-115.0/gfx/skia/skia/src/core/SkGeometry.h +@@ -281,6 +281,7 @@ static inline bool SkCubicIsDegenerate(S return true; } SK_ABORT("Invalid SkCubicType"); @@ -133,12 +49,7 @@ } static inline const char* SkCubicTypeName(SkCubicType type) { - switch (type) { - case SkCubicType::kSerpentine: return "kSerpentine"; - case SkCubicType::kLoop: return "kLoop"; - case SkCubicType::kLocalCusp: return "kLocalCusp"; - case SkCubicType::kCuspAtInfinity: return "kCuspAtInfinity"; - case SkCubicType::kQuadratic: return "kQuadratic"; +@@ -293,6 +294,7 @@ static inline const char* SkCubicTypeNam case SkCubicType::kLineOrPoint: return "kLineOrPoint"; } SK_ABORT("Invalid SkCubicType"); @@ -146,20 +57,11 @@ } /** Returns the cubic classification. - - t[],s[] are set to the two homogeneous parameter values at which points the lines L & M - intersect with K, sorted from smallest to largest and oriented so positive values of the - implicit are on the "left" side. For a serpentine curve they are the inflection points. For a - loop they are the double point. For a local cusp, they are both equal and denote the cusp point. -diff --git a/gfx/skia/skia/src/core/SkTextBlob.cpp b/gfx/skia/skia/src/core/SkTextBlob.cpp ---- a/gfx/skia/skia/src/core/SkTextBlob.cpp -+++ b/gfx/skia/skia/src/core/SkTextBlob.cpp -@@ -196,16 +196,17 @@ unsigned SkTextBlob::ScalarsPerGlyph(Gly - } - - void SkTextBlob::operator delete(void* p) { - sk_free(p); - } +Index: firefox-115.0/gfx/skia/skia/src/core/SkTextBlob.cpp +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/core/SkTextBlob.cpp ++++ firefox-115.0/gfx/skia/skia/src/core/SkTextBlob.cpp +@@ -204,6 +204,7 @@ void SkTextBlob::operator delete(void* p void* SkTextBlob::operator new(size_t) { SK_ABORT("All blobs are created by placement new."); @@ -167,41 +69,11 @@ } void* SkTextBlob::operator new(size_t, void* p) { - return p; - } - - SkTextBlobRunIterator::SkTextBlobRunIterator(const SkTextBlob* blob) - : fCurrentRun(SkTextBlob::RunRecord::First(blob)) { -diff --git a/gfx/skia/skia/src/core/SkTypeface_remote.cpp b/gfx/skia/skia/src/core/SkTypeface_remote.cpp ---- a/gfx/skia/skia/src/core/SkTypeface_remote.cpp -+++ b/gfx/skia/skia/src/core/SkTypeface_remote.cpp -@@ -24,16 +24,17 @@ void SkScalerContextProxy::initCache(SkS - SkASSERT(cache != nullptr); - - fCache = cache; - fStrikeCache = strikeCache; - } - - unsigned SkScalerContextProxy::generateGlyphCount() { - SK_ABORT("Should never be called."); -+ SkUNREACHABLE; - } - - bool SkScalerContextProxy::generateAdvance(SkGlyph* glyph) { - return false; - } - - void SkScalerContextProxy::generateMetrics(SkGlyph* glyph) { - TRACE_EVENT1("skia", "generateMetrics", "rec", TRACE_STR_COPY(this->getRec().dump().c_str())); -diff --git a/gfx/skia/skia/src/core/SkTypeface_remote.h b/gfx/skia/skia/src/core/SkTypeface_remote.h ---- a/gfx/skia/skia/src/core/SkTypeface_remote.h -+++ b/gfx/skia/skia/src/core/SkTypeface_remote.h -@@ -58,46 +58,54 @@ public: - , fGlyphCount{glyphCount} - , fIsLogging{isLogging} - , fDiscardableManager{std::move(manager)} {} - SkFontID remoteTypefaceID() const {return fFontId;} - int glyphCount() const {return fGlyphCount;} +Index: firefox-115.0/gfx/skia/skia/src/core/SkTypeface_remote.h +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/core/SkTypeface_remote.h ++++ firefox-115.0/gfx/skia/skia/src/core/SkTypeface_remote.h +@@ -95,12 +95,14 @@ public: bool isLogging() const {return fIsLogging;} protected: @@ -209,129 +81,98 @@ + int onGetUPEM() const override { SK_ABORT("Should never be called."); SkUNREACHABLE; } std::unique_ptr onOpenStream(int* ttcIndex) const override { SK_ABORT("Should never be called."); -+ SkUNREACHABLE; - } - std::unique_ptr onMakeFontData() const override { - SK_ABORT("Should never be called."); -+ SkUNREACHABLE; ++ SkUNREACHABLE; } sk_sp onMakeClone(const SkFontArguments& args) const override { SK_ABORT("Should never be called."); -+ SkUNREACHABLE; ++ SkUNREACHABLE; } + bool onGlyphMaskNeedsCurrentColor() const override { + return fGlyphMaskNeedsCurrentColor; +@@ -108,10 +110,12 @@ protected: int onGetVariationDesignPosition(SkFontArguments::VariationPosition::Coordinate coordinates[], int coordinateCount) const override { SK_ABORT("Should never be called."); -+ SkUNREACHABLE; ++ SkUNREACHABLE; } int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[], int parameterCount) const override { SK_ABORT("Should never be called."); -+ SkUNREACHABLE; ++ SkUNREACHABLE; } void onGetFamilyName(SkString* familyName) const override { // Used by SkStrikeCache::DumpMemoryStatistics. - *familyName = ""; +@@ -119,15 +123,19 @@ protected: + } + bool onGetPostScriptName(SkString*) const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; } SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override { SK_ABORT("Should never be called."); -+ SkUNREACHABLE; ++ SkUNREACHABLE; } int onGetTableTags(SkFontTableTag tags[]) const override { SK_ABORT("Should never be called."); -+ SkUNREACHABLE; ++ SkUNREACHABLE; } size_t onGetTableData(SkFontTableTag, size_t offset, size_t length, void* data) const override { SK_ABORT("Should never be called."); -+ SkUNREACHABLE; ++ SkUNREACHABLE; + } + std::unique_ptr onCreateScalerContext( + const SkScalerContextEffects& effects, const SkDescriptor* desc) const override +@@ -141,20 +149,25 @@ protected: } - SkScalerContext* onCreateScalerContext(const SkScalerContextEffects& effects, - const SkDescriptor* desc) const override { - return new SkScalerContextProxy(sk_ref_sp(const_cast(this)), effects, - desc, fDiscardableManager); + void onGetFontDescriptor(SkFontDescriptor*, bool*) const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; } - void onFilterRec(SkScalerContextRec* rec) const override { - // The rec filtering is already applied by the server when generating -@@ -111,26 +119,28 @@ protected: + void getGlyphToUnicodeMap(SkUnichar*) const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; } void getPostScriptGlyphNames(SkString*) const override { SK_ABORT("Should never be called."); ++ SkUNREACHABLE; } std::unique_ptr onGetAdvancedMetrics() const override { SK_ABORT("Should never be called."); -+ SkUNREACHABLE; ++ SkUNREACHABLE; } void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override { SK_ABORT("Should never be called."); ++ SkUNREACHABLE; } int onCountGlyphs() const override { return this->glyphCount(); - } +@@ -162,6 +175,7 @@ protected: void* onGetCTFontRef() const override { SK_ABORT("Should never be called."); -+ SkUNREACHABLE; ++ SkUNREACHABLE; } private: - const SkFontID fFontId; - const int fGlyphCount; - const bool fIsLogging; - sk_sp fDiscardableManager; - -diff --git a/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp b/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp ---- a/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp -+++ b/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp -@@ -139,16 +139,17 @@ static GrTextureDomain::Mode to_texture_ - case SkTileMode::kDecal: - return GrTextureDomain::kDecal_Mode; - case SkTileMode::kMirror: - // TODO (michaelludwig) - Support mirror mode, treat as repeat for now - case SkTileMode::kRepeat: - return GrTextureDomain::kRepeat_Mode; - default: - SK_ABORT("Unsupported tile mode."); -+ SkUNREACHABLE; - } - } - #endif +Index: firefox-115.0/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp ++++ firefox-115.0/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp +@@ -815,6 +815,7 @@ sk_sp cpu_blur( + return maker; + } + SK_ABORT("Sigma is out of range."); ++ SkUNREACHABLE; + }; - // This is defined by the SVG spec: - // https://drafts.fxtf.org/filter-effects/#feGaussianBlurElement - static int calculate_window(double sigma) { - // NB 136 is the largest sigma that will not cause a buffer full of 255 mask values to overflow -diff --git a/gfx/skia/skia/src/effects/imagefilters/SkLightingImageFilter.cpp b/gfx/skia/skia/src/effects/imagefilters/SkLightingImageFilter.cpp ---- a/gfx/skia/skia/src/effects/imagefilters/SkLightingImageFilter.cpp -+++ b/gfx/skia/skia/src/effects/imagefilters/SkLightingImageFilter.cpp -@@ -1696,16 +1696,17 @@ static SkImageFilterLight* create_random - return new SkPointLight(random_point3(random), random->nextU()); - } - case 2: { - return new SkSpotLight(random_point3(random), random_point3(random), - random->nextUScalar1(), random->nextUScalar1(), random->nextU()); - } - default: - SK_ABORT("Unexpected value."); -+ SkUNREACHABLE; - } - } - - std::unique_ptr GrDiffuseLightingEffect::TestCreate(GrProcessorTestData* d) { - int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx - : GrProcessorUnitTest::kAlphaTextureIdx; - sk_sp proxy = d->textureProxy(texIdx); - SkScalar surfaceScale = d->fRandom->nextSScalar1(); -diff --git a/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp b/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp ---- a/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp -+++ b/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp -@@ -64,16 +64,17 @@ int SkFontMgr_Indirect::onCountFamilies( - } - - void SkFontMgr_Indirect::onGetFamilyName(int index, SkString* familyName) const { - SK_ABORT("Not implemented"); - } + PassMaker* makerX = makeMaker(sigma.x()); +Index: firefox-115.0/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp ++++ firefox-115.0/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp +@@ -69,6 +69,7 @@ void SkFontMgr_Indirect::onGetFamilyName SkFontStyleSet* SkFontMgr_Indirect::onCreateStyleSet(int index) const { SK_ABORT("Not implemented"); @@ -339,1482 +180,11 @@ } SkFontStyleSet* SkFontMgr_Indirect::onMatchFamily(const char familyName[]) const { - return new SkStyleSet_Indirect(this, -1, fProxy->matchName(familyName)); - } - - SkTypeface* SkFontMgr_Indirect::createTypefaceFromFontId(const SkFontIdentity& id) const { - if (id.fDataId == SkFontIdentity::kInvalidDataId) { -diff --git a/gfx/skia/skia/src/gpu/GrDataUtils.cpp b/gfx/skia/skia/src/gpu/GrDataUtils.cpp ---- a/gfx/skia/skia/src/gpu/GrDataUtils.cpp -+++ b/gfx/skia/skia/src/gpu/GrDataUtils.cpp -@@ -123,25 +123,27 @@ static int num_ETC1_blocks(int w, int h) - - size_t GrCompressedDataSize(SkImage::CompressionType type, int width, int height) { - switch (type) { - case SkImage::kETC1_CompressionType: - int numBlocks = num_ETC1_blocks(width, height); - return numBlocks * sizeof(ETC1Block); - } - SK_ABORT("Unexpected compression type"); -+ SkUNREACHABLE; - } - - size_t GrCompressedRowBytes(SkImage::CompressionType type, int width) { - switch (type) { - case SkImage::kETC1_CompressionType: - int numBlocksWidth = num_ETC1_blocks_w(width); - return numBlocksWidth * sizeof(ETC1Block); - } - SK_ABORT("Unexpected compression type"); -+ SkUNREACHABLE; - } - - // Fill in 'dest' with ETC1 blocks derived from 'colorf' - static void fillin_ETC1_with_color(int width, int height, const SkColor4f& colorf, void* dest) { - SkColor color = colorf.toSkColor(); - - ETC1Block block; - create_etc1_block(color, &block); -diff --git a/gfx/skia/skia/src/gpu/GrFragmentProcessor.h b/gfx/skia/skia/src/gpu/GrFragmentProcessor.h ---- a/gfx/skia/skia/src/gpu/GrFragmentProcessor.h -+++ b/gfx/skia/skia/src/gpu/GrFragmentProcessor.h -@@ -370,16 +370,17 @@ protected: - const Args&... samps) { - return (0 == i) ? samp0 : IthTextureSampler(i - 1, samps...); - } - inline static const TextureSampler& IthTextureSampler(int i); - - private: - virtual SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& /* inputColor */) const { - SK_ABORT("Subclass must override this if advertising this optimization."); -+ SkUNREACHABLE; - } - - /** Returns a new instance of the appropriate *GL* implementation class - for the given GrFragmentProcessor; caller is responsible for deleting - the object. */ - virtual GrGLSLFragmentProcessor* onCreateGLSLInstance() const = 0; - - /** Implemented using GLFragmentProcessor::GenKey as described in this class's comment. */ -diff --git a/gfx/skia/skia/src/gpu/GrPathRendering.cpp b/gfx/skia/skia/src/gpu/GrPathRendering.cpp ---- a/gfx/skia/skia/src/gpu/GrPathRendering.cpp -+++ b/gfx/skia/skia/src/gpu/GrPathRendering.cpp -@@ -14,16 +14,17 @@ - #include "src/gpu/GrPathRendering.h" - #include "src/gpu/GrProgramInfo.h" - #include "src/gpu/GrRenderTarget.h" - - const GrUserStencilSettings& GrPathRendering::GetStencilPassSettings(FillType fill) { - switch (fill) { - default: - SK_ABORT("Unexpected path fill."); -+ SkUNREACHABLE; - case GrPathRendering::kWinding_FillType: { - constexpr static GrUserStencilSettings kWindingStencilPass( - GrUserStencilSettings::StaticInit< - 0xffff, - GrUserStencilTest::kAlwaysIfInClip, - 0xffff, - GrUserStencilOp::kIncWrap, - GrUserStencilOp::kIncWrap, -diff --git a/gfx/skia/skia/src/gpu/GrPathRendering.h b/gfx/skia/skia/src/gpu/GrPathRendering.h ---- a/gfx/skia/skia/src/gpu/GrPathRendering.h -+++ b/gfx/skia/skia/src/gpu/GrPathRendering.h -@@ -58,16 +58,17 @@ public: - return 1; - case kTranslate_PathTransformType: - return 2; - case kAffine_PathTransformType: - return 6; - - default: - SK_ABORT("Unknown path transform type"); -+ SkUNREACHABLE; - } - } - - // No native support for inverse at this time - enum FillType { - /** Specifies that "inside" is computed by a non-zero sum of signed - edge crossings - */ -diff --git a/gfx/skia/skia/src/gpu/GrProcessorUnitTest.cpp b/gfx/skia/skia/src/gpu/GrProcessorUnitTest.cpp ---- a/gfx/skia/skia/src/gpu/GrProcessorUnitTest.cpp -+++ b/gfx/skia/skia/src/gpu/GrProcessorUnitTest.cpp -@@ -15,11 +15,12 @@ std::unique_ptr GrP - std::unique_ptr fp; - do { - fp = GrFragmentProcessorTestFactory::Make(data); - SkASSERT(fp); - } while (fp->numChildProcessors() != 0); - return fp; - #else - SK_ABORT("Should not be called if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS"); -+ SkUNREACHABLE; - #endif - } - #endif -diff --git a/gfx/skia/skia/src/gpu/GrReducedClip.cpp b/gfx/skia/skia/src/gpu/GrReducedClip.cpp ---- a/gfx/skia/skia/src/gpu/GrReducedClip.cpp -+++ b/gfx/skia/skia/src/gpu/GrReducedClip.cpp -@@ -520,16 +520,17 @@ GrReducedClip::ClipResult GrReducedClip: - GrAA(element->isAA())); - - case Element::DeviceSpaceType::kPath: - return this->addAnalyticFP(element->getDeviceSpacePath(), - Invert(element->isInverseFilled()), GrAA(element->isAA())); - } - - SK_ABORT("Unexpected DeviceSpaceType"); -+ SkUNREACHABLE; - } - - GrReducedClip::ClipResult GrReducedClip::clipOutsideElement(const Element* element) { - switch (element->getDeviceSpaceType()) { - case Element::DeviceSpaceType::kEmpty: - return ClipResult::kMadeEmpty; - - case Element::DeviceSpaceType::kRect: -@@ -586,16 +587,17 @@ GrReducedClip::ClipResult GrReducedClip: - } - - case Element::DeviceSpaceType::kPath: - return this->addAnalyticFP(element->getDeviceSpacePath(), - Invert(!element->isInverseFilled()), GrAA(element->isAA())); - } - - SK_ABORT("Unexpected DeviceSpaceType"); -+ SkUNREACHABLE; - } - - inline void GrReducedClip::addWindowRectangle(const SkRect& elementInteriorRect, bool elementIsAA) { - SkIRect window; - if (!elementIsAA) { - elementInteriorRect.round(&window); - } else { - elementInteriorRect.roundIn(&window); -diff --git a/gfx/skia/skia/src/gpu/GrResourceCache.cpp b/gfx/skia/skia/src/gpu/GrResourceCache.cpp ---- a/gfx/skia/skia/src/gpu/GrResourceCache.cpp -+++ b/gfx/skia/skia/src/gpu/GrResourceCache.cpp -@@ -35,27 +35,29 @@ DECLARE_SKMESSAGEBUS_MESSAGE(GrTextureFr - ////////////////////////////////////////////////////////////////////////////// - - GrScratchKey::ResourceType GrScratchKey::GenerateResourceType() { - static std::atomic nextType{INHERITED::kInvalidDomain + 1}; - - int32_t type = nextType++; - if (type > SkTo(UINT16_MAX)) { - SK_ABORT("Too many Resource Types"); -+ SkUNREACHABLE; - } - - return static_cast(type); - } - - GrUniqueKey::Domain GrUniqueKey::GenerateDomain() { - static std::atomic nextDomain{INHERITED::kInvalidDomain + 1}; - - int32_t domain = nextDomain++; - if (domain > SkTo(UINT16_MAX)) { - SK_ABORT("Too many GrUniqueKey Domains"); -+ SkUNREACHABLE; - } - - return static_cast(domain); - } - - uint32_t GrResourceKeyHash(const uint32_t* data, size_t size) { - return SkOpts::hash(data, size); - } -diff --git a/gfx/skia/skia/src/gpu/GrShaderVar.cpp b/gfx/skia/skia/src/gpu/GrShaderVar.cpp ---- a/gfx/skia/skia/src/gpu/GrShaderVar.cpp -+++ b/gfx/skia/skia/src/gpu/GrShaderVar.cpp -@@ -13,30 +13,32 @@ static const char* type_modifier_string( - switch (t) { - case GrShaderVar::kNone_TypeModifier: return ""; - case GrShaderVar::kIn_TypeModifier: return "in"; - case GrShaderVar::kInOut_TypeModifier: return "inout"; - case GrShaderVar::kOut_TypeModifier: return "out"; - case GrShaderVar::kUniform_TypeModifier: return "uniform"; - } - SK_ABORT("Unknown shader variable type modifier."); -+ SkUNREACHABLE; - } - - void GrShaderVar::setIOType(GrIOType ioType) { - switch (ioType) { - case kRW_GrIOType: - return; - case kRead_GrIOType: - this->addModifier("readonly"); - return; - case kWrite_GrIOType: - this->addModifier("writeonly"); - return; - } - SK_ABORT("Unknown io type."); -+ SkUNREACHABLE; - } - - void GrShaderVar::appendDecl(const GrShaderCaps* shaderCaps, SkString* out) const { - SkString layout = fLayoutQualifier; - if (!fLayoutQualifier.isEmpty()) { - out->appendf("layout(%s) ", fLayoutQualifier.c_str()); - } - out->append(fExtraModifiers); -diff --git a/gfx/skia/skia/src/gpu/SkGpuDevice.cpp b/gfx/skia/skia/src/gpu/SkGpuDevice.cpp ---- a/gfx/skia/skia/src/gpu/SkGpuDevice.cpp -+++ b/gfx/skia/skia/src/gpu/SkGpuDevice.cpp -@@ -278,16 +278,17 @@ static inline GrPrimitiveType point_mode - case SkCanvas::kPoints_PointMode: - return GrPrimitiveType::kPoints; - case SkCanvas::kLines_PointMode: - return GrPrimitiveType::kLines; - case SkCanvas::kPolygon_PointMode: - return GrPrimitiveType::kLineStrip; - } - SK_ABORT("Unexpected mode"); -+ SkUNREACHABLE; - } - - void SkGpuDevice::drawPoints(SkCanvas::PointMode mode, - size_t count, const SkPoint pts[], const SkPaint& paint) { - ASSERT_SINGLE_OWNER - GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPoints", fContext.get()); - SkScalar width = paint.getStrokeWidth(); - if (width < 0) { -diff --git a/gfx/skia/skia/src/gpu/SkGr.h b/gfx/skia/skia/src/gpu/SkGr.h ---- a/gfx/skia/skia/src/gpu/SkGr.h -+++ b/gfx/skia/skia/src/gpu/SkGr.h -@@ -154,16 +154,17 @@ static inline GrPrimitiveType SkVertexMo - case SkVertices::kTriangles_VertexMode: - return GrPrimitiveType::kTriangles; - case SkVertices::kTriangleStrip_VertexMode: - return GrPrimitiveType::kTriangleStrip; - case SkVertices::kTriangleFan_VertexMode: - break; - } - SK_ABORT("Invalid mode"); -+ SkUNREACHABLE; - } - - ////////////////////////////////////////////////////////////////////////////// - - GR_STATIC_ASSERT((int)kZero_GrBlendCoeff == (int)SkBlendModeCoeff::kZero); - GR_STATIC_ASSERT((int)kOne_GrBlendCoeff == (int)SkBlendModeCoeff::kOne); - GR_STATIC_ASSERT((int)kSC_GrBlendCoeff == (int)SkBlendModeCoeff::kSC); - GR_STATIC_ASSERT((int)kISC_GrBlendCoeff == (int)SkBlendModeCoeff::kISC); -diff --git a/gfx/skia/skia/src/gpu/ccpr/GrCCCoverageProcessor.h b/gfx/skia/skia/src/gpu/ccpr/GrCCCoverageProcessor.h ---- a/gfx/skia/skia/src/gpu/ccpr/GrCCCoverageProcessor.h -+++ b/gfx/skia/skia/src/gpu/ccpr/GrCCCoverageProcessor.h -@@ -235,16 +235,17 @@ inline const char* GrCCCoverageProcessor - switch (type) { - case PrimitiveType::kTriangles: return "kTriangles"; - case PrimitiveType::kWeightedTriangles: return "kWeightedTriangles"; - case PrimitiveType::kQuadratics: return "kQuadratics"; - case PrimitiveType::kCubics: return "kCubics"; - case PrimitiveType::kConics: return "kConics"; - } - SK_ABORT("Invalid PrimitiveType"); -+ SkUNREACHABLE; - } - - inline void GrCCCoverageProcessor::TriPointInstance::set( - const SkPoint p[3], const Sk2f& translate, Ordering ordering) { - this->set(p[0], p[1], p[2], translate, ordering); - } - - inline void GrCCCoverageProcessor::TriPointInstance::set( -diff --git a/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.cpp b/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.cpp ---- a/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.cpp -+++ b/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.cpp -@@ -55,16 +55,17 @@ static GrCCStrokeGeometry::Verb join_ver - case SkPaint::kBevel_Join: - return Verb::kBevelJoin; - case SkPaint::kMiter_Join: - return Verb::kMiterJoin; - case SkPaint::kRound_Join: - return Verb::kRoundJoin; - } - SK_ABORT("Invalid SkPaint::Join."); -+ SkUNREACHABLE; - } - - void GrCCStrokeGeometry::beginPath(const SkStrokeRec& stroke, float strokeDevWidth, - InstanceTallies* tallies) { - SkASSERT(!fInsideContour); - // Client should have already converted the stroke to device space (i.e. width=1 for hairline). - SkASSERT(strokeDevWidth > 0); - -diff --git a/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.h b/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.h ---- a/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.h -+++ b/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.h -@@ -170,10 +170,11 @@ inline bool GrCCStrokeGeometry::IsIntern - case Verb::kMiterJoin: - case Verb::kRoundJoin: - case Verb::kSquareCap: - case Verb::kRoundCap: - case Verb::kEndContour: - return false; - } - SK_ABORT("Invalid GrCCStrokeGeometry::Verb."); -+ SkUNREACHABLE; - } - #endif -diff --git a/gfx/skia/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp b/gfx/skia/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp ---- a/gfx/skia/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp -+++ b/gfx/skia/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp -@@ -159,16 +159,17 @@ GrPathRenderer::CanDrawPath GrCoverageCo - return CanDrawPath::kYes; - } - - case SkStrokeRec::kStrokeAndFill_Style: - return CanDrawPath::kNo; - } - - SK_ABORT("Invalid stroke style."); -+ SkUNREACHABLE; - } - - bool GrCoverageCountingPathRenderer::onDrawPath(const DrawPathArgs& args) { - SkASSERT(!fFlushing); - - SkIRect clipIBounds; - GrRenderTargetContext* rtc = args.fRenderTargetContext; - args.fClip->getConservativeBounds(rtc->width(), rtc->height(), &clipIBounds, nullptr); -diff --git a/gfx/skia/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp b/gfx/skia/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp ---- a/gfx/skia/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp -+++ b/gfx/skia/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp -@@ -545,9 +545,10 @@ GrGLSLPrimitiveProcessor* GrVSCoveragePr - case PrimitiveType::kWeightedTriangles: - return new Impl(std::move(shader), 3); - case PrimitiveType::kQuadratics: - case PrimitiveType::kCubics: - case PrimitiveType::kConics: - return new Impl(std::move(shader), 4); - } - SK_ABORT("Invalid PrimitiveType"); -+ SkUNREACHABLE; - } -diff --git a/gfx/skia/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp b/gfx/skia/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp ---- a/gfx/skia/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp -+++ b/gfx/skia/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp -@@ -34,17 +34,19 @@ static dawn::LoadOp to_dawn_load_op(GrLo - // Load should be equivalent to DontCare for desktop; Clear would - // probably be better for tilers. If Dawn does add DontCare - // as an extension, use it here. - return dawn::LoadOp::Load; - case GrLoadOp::kClear: - return dawn::LoadOp::Clear; - default: - SK_ABORT("Invalid LoadOp"); -+ SkUNREACHABLE; - } -+ SkUNREACHABLE; - } - - GrDawnOpsRenderPass::GrDawnOpsRenderPass(GrDawnGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin, - const LoadAndStoreInfo& colorInfo, - const StencilLoadAndStoreInfo& stencilInfo) - : INHERITED(rt, origin) - , fGpu(gpu) - , fColorInfo(colorInfo) { -diff --git a/gfx/skia/skia/src/gpu/dawn/GrDawnUniformHandler.cpp b/gfx/skia/skia/src/gpu/dawn/GrDawnUniformHandler.cpp ---- a/gfx/skia/skia/src/gpu/dawn/GrDawnUniformHandler.cpp -+++ b/gfx/skia/skia/src/gpu/dawn/GrDawnUniformHandler.cpp -@@ -90,16 +90,17 @@ uint32_t grsltype_to_alignment_mask(GrSL - case kTexture2DSampler_GrSLType: - case kTextureExternalSampler_GrSLType: - case kTexture2DRectSampler_GrSLType: - case kTexture2D_GrSLType: - case kSampler_GrSLType: - break; - } - SK_ABORT("Unexpected type"); -+ SkUNREACHABLE; - } - - static inline uint32_t grsltype_to_size(GrSLType type) { - switch(type) { - case kByte_GrSLType: - case kUByte_GrSLType: - return 1; - case kByte2_GrSLType: -@@ -168,16 +169,17 @@ static inline uint32_t grsltype_to_size( - case kTexture2DSampler_GrSLType: - case kTextureExternalSampler_GrSLType: - case kTexture2DRectSampler_GrSLType: - case kTexture2D_GrSLType: - case kSampler_GrSLType: - break; - } - SK_ABORT("Unexpected type"); -+ SkUNREACHABLE; - } - - uint32_t get_ubo_offset(uint32_t* currentOffset, - GrSLType type, - int arrayCount) { - uint32_t alignmentMask = grsltype_to_alignment_mask(type); - // We want to use the std140 layout here, so we must make arrays align to 16 bytes. - if (arrayCount || type == kFloat2x2_GrSLType) { -diff --git a/gfx/skia/skia/src/gpu/dawn/GrDawnVaryingHandler.cpp b/gfx/skia/skia/src/gpu/dawn/GrDawnVaryingHandler.cpp ---- a/gfx/skia/skia/src/gpu/dawn/GrDawnVaryingHandler.cpp -+++ b/gfx/skia/skia/src/gpu/dawn/GrDawnVaryingHandler.cpp -@@ -71,16 +71,17 @@ static inline int grsltype_to_location_s - case kUByte_GrSLType: - return 1; - case kTexture2D_GrSLType: - return 0; - case kSampler_GrSLType: - return 0; - } - SK_ABORT("Unexpected type"); -+ SkUNREACHABLE; - } - - static void finalize_helper(GrDawnVaryingHandler::VarArray& vars) { - int locationIndex = 0; - for (int i = 0; i < vars.count(); ++i) { - GrShaderVar& var = vars[i]; - SkString location; - location.appendf("location = %d", locationIndex); -diff --git a/gfx/skia/skia/src/gpu/effects/GrConstColorProcessor.fp b/gfx/skia/skia/src/gpu/effects/GrConstColorProcessor.fp ---- a/gfx/skia/skia/src/gpu/effects/GrConstColorProcessor.fp -+++ b/gfx/skia/skia/src/gpu/effects/GrConstColorProcessor.fp -@@ -53,16 +53,17 @@ void main() { - case InputMode::kIgnore: - return color; - case InputMode::kModulateA: - return color * input.fA; - case InputMode::kModulateRGBA: - return color * input; - } - SK_ABORT("Unexpected mode"); -+ SkUNREACHABLE; - } - } - - @test(d) { - SkPMColor4f color; - int colorPicker = d->fRandom->nextULessThan(3); - switch (colorPicker) { - case 0: { -diff --git a/gfx/skia/skia/src/gpu/effects/GrCoverageSetOpXP.cpp b/gfx/skia/skia/src/gpu/effects/GrCoverageSetOpXP.cpp ---- a/gfx/skia/skia/src/gpu/effects/GrCoverageSetOpXP.cpp -+++ b/gfx/skia/skia/src/gpu/effects/GrCoverageSetOpXP.cpp -@@ -199,16 +199,17 @@ const GrXPFactory* GrCoverageSetOpXPFact - static _CONSTEXPR_ const GrCoverageSetOpXPFactory gRevDiffCDXPF( - SkRegion::kReverseDifference_Op, false); - return &gRevDiffCDXPF; - } - } - } - #undef _CONSTEXPR_ - SK_ABORT("Unknown region op."); -+ SkUNREACHABLE; - } - - sk_sp GrCoverageSetOpXPFactory::makeXferProcessor( - const GrProcessorAnalysisColor&, - GrProcessorAnalysisCoverage, - bool hasMixedSamples, - const GrCaps& caps, - GrClampType) const { -diff --git a/gfx/skia/skia/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/gfx/skia/skia/src/gpu/effects/GrPorterDuffXferProcessor.cpp ---- a/gfx/skia/skia/src/gpu/effects/GrPorterDuffXferProcessor.cpp -+++ b/gfx/skia/skia/src/gpu/effects/GrPorterDuffXferProcessor.cpp -@@ -748,16 +748,17 @@ const GrXPFactory* GrPorterDuffXPFactory - case SkBlendMode::kPlus: - return &gPlusPDXPF; - case SkBlendMode::kModulate: - return &gModulatePDXPF; - case SkBlendMode::kScreen: - return &gScreenPDXPF; - default: - SK_ABORT("Unexpected blend mode."); -+ SkUNREACHABLE; - } - } - - sk_sp GrPorterDuffXPFactory::makeXferProcessor( - const GrProcessorAnalysisColor& color, GrProcessorAnalysisCoverage coverage, - bool hasMixedSamples, const GrCaps& caps, GrClampType clampType) const { - BlendFormula blendFormula; - bool isLCD = coverage == GrProcessorAnalysisCoverage::kLCD; -diff --git a/gfx/skia/skia/src/gpu/effects/GrSkSLFP.cpp b/gfx/skia/skia/src/gpu/effects/GrSkSLFP.cpp ---- a/gfx/skia/skia/src/gpu/effects/GrSkSLFP.cpp -+++ b/gfx/skia/skia/src/gpu/effects/GrSkSLFP.cpp -@@ -149,16 +149,17 @@ public: - return kHalf4x4_GrSLType; - } else if (type == *fContext.fBool_Type) { - return kBool_GrSLType; - } else if (type == *fContext.fInt_Type) { - return kInt_GrSLType; - } - printf("%s\n", SkSL::String(type.fName).c_str()); - SK_ABORT("unsupported uniform type"); -+ SkUNREACHABLE; - } - - void emitCode(EmitArgs& args) override { - for (const auto& v : fInAndUniformVars) { - if (v->fModifiers.fFlags & SkSL::Modifiers::kUniform_Flag && v->fType != - *fContext.fFragmentProcessor_Type) { - fUniformHandles.push_back(args.fUniformHandler->addUniform( - kFragment_GrShaderFlag, -@@ -563,11 +564,12 @@ std::unique_ptr GrS - } - std::unique_ptr result = GrSkSLFP::Make(d->context(), overdrawIndex, - "Overdraw", SKSL_OVERDRAW_SRC, - &inputs, sizeof(inputs)); - return std::unique_ptr(result.release()); - } - } - SK_ABORT("unreachable"); -+ SkUNREACHABLE; - } - - #endif -diff --git a/gfx/skia/skia/src/gpu/effects/generated/GrConstColorProcessor.h b/gfx/skia/skia/src/gpu/effects/generated/GrConstColorProcessor.h ---- a/gfx/skia/skia/src/gpu/effects/generated/GrConstColorProcessor.h -+++ b/gfx/skia/skia/src/gpu/effects/generated/GrConstColorProcessor.h -@@ -36,16 +36,17 @@ public: - case InputMode::kIgnore: - return color; - case InputMode::kModulateA: - return color * input.fA; - case InputMode::kModulateRGBA: - return color * input; - } - SK_ABORT("Unexpected mode"); -+ SkUNREACHABLE; - } - static std::unique_ptr Make(SkPMColor4f color, InputMode mode) { - return std::unique_ptr(new GrConstColorProcessor(color, mode)); - } - GrConstColorProcessor(const GrConstColorProcessor& src); - std::unique_ptr clone() const override; - const char* name() const override { return "ConstColorProcessor"; } - SkPMColor4f color; -diff --git a/gfx/skia/skia/src/gpu/geometry/GrShape.cpp b/gfx/skia/skia/src/gpu/geometry/GrShape.cpp ---- a/gfx/skia/skia/src/gpu/geometry/GrShape.cpp -+++ b/gfx/skia/skia/src/gpu/geometry/GrShape.cpp -@@ -159,16 +159,17 @@ SkRect GrShape::bounds() const { - return fRRectData.fRRect.getBounds(); - case Type::kArc: - // Could make this less conservative by looking at angles. - return fArcData.fOval; - case Type::kPath: - return this->path().getBounds(); - } - SK_ABORT("Unknown shape type"); -+ SkUNREACHABLE; - } - - SkRect GrShape::styledBounds() const { - if (this->isEmpty() && !fStyle.hasNonDashPathEffect()) { - return SkRect::MakeEmpty(); - } - - SkRect bounds; -@@ -249,16 +250,17 @@ int GrShape::unstyledKeySize() const { - if (dataKeySize >= 0) { - return dataKeySize; - } - // The key is the path ID and fill type. - return 2; - } - } - SK_ABORT("Should never get here."); -+ SkUNREACHABLE; - } - - void GrShape::writeUnstyledKey(uint32_t* key) const { - SkASSERT(this->unstyledKeySize()); - SkDEBUGCODE(uint32_t* origKey = key;) - if (fInheritedKey.count()) { - memcpy(key, fInheritedKey.get(), sizeof(uint32_t) * fInheritedKey.count()); - SkDEBUGCODE(key += fInheritedKey.count();) -diff --git a/gfx/skia/skia/src/gpu/gl/GrGLCaps.cpp b/gfx/skia/skia/src/gpu/gl/GrGLCaps.cpp ---- a/gfx/skia/skia/src/gpu/gl/GrGLCaps.cpp -+++ b/gfx/skia/skia/src/gpu/gl/GrGLCaps.cpp -@@ -4154,16 +4154,17 @@ GrBackendFormat GrGLCaps::getBackendForm - case SkImage::kETC1_CompressionType: - // if ETC2 is available default to that format - if (this->isFormatTexturable(GrGLFormat::kCOMPRESSED_RGB8_ETC2)) { - return GrBackendFormat::MakeGL(GR_GL_COMPRESSED_RGB8_ETC2, GR_GL_TEXTURE_2D); - } - return GrBackendFormat::MakeGL(GR_GL_COMPRESSED_ETC1_RGB8, GR_GL_TEXTURE_2D); - } - SK_ABORT("Invalid compression type"); -+ SkUNREACHABLE; - } - - GrSwizzle GrGLCaps::getTextureSwizzle(const GrBackendFormat& format, GrColorType colorType) const { - const auto& info = this->getFormatInfo(format.asGLFormat()); - for (int i = 0; i < info.fColorTypeInfoCount; ++i) { - const auto& ctInfo = info.fColorTypeInfos[i]; - if (ctInfo.fColorType == colorType) { - return ctInfo.fTextureSwizzle; -diff --git a/gfx/skia/skia/src/gpu/gl/GrGLGLSL.cpp b/gfx/skia/skia/src/gpu/gl/GrGLGLSL.cpp ---- a/gfx/skia/skia/src/gpu/gl/GrGLGLSL.cpp -+++ b/gfx/skia/skia/src/gpu/gl/GrGLGLSL.cpp -@@ -63,9 +63,10 @@ bool GrGLGetGLSLGeneration(const GrGLInt - if (ver >= GR_GLSL_VER(2,0)) { - *generation = k330_GrGLSLGeneration; // ES 3.0 - } else { - *generation = k110_GrGLSLGeneration; - } - return true; - } - SK_ABORT("Unknown GL Standard"); -+ SkUNREACHABLE; - } -diff --git a/gfx/skia/skia/src/gpu/gl/GrGLGpu.cpp b/gfx/skia/skia/src/gpu/gl/GrGLGpu.cpp ---- a/gfx/skia/skia/src/gpu/gl/GrGLGpu.cpp -+++ b/gfx/skia/skia/src/gpu/gl/GrGLGpu.cpp -@@ -191,16 +191,17 @@ static int gl_target_to_binding_index(Gr - case GR_GL_TEXTURE_2D: - return 0; - case GR_GL_TEXTURE_RECTANGLE: - return 1; - case GR_GL_TEXTURE_EXTERNAL: - return 2; - } - SK_ABORT("Unexpected GL texture target."); -+ SkUNREACHABLE; - } - - GrGpuResource::UniqueID GrGLGpu::TextureUnitBindings::boundID(GrGLenum target) const { - return fTargetBindings[gl_target_to_binding_index(target)].fBoundResourceID; - } - - bool GrGLGpu::TextureUnitBindings::hasBeenModified(GrGLenum target) const { - return fTargetBindings[gl_target_to_binding_index(target)].fHasBeenModified; -@@ -229,39 +230,42 @@ void GrGLGpu::TextureUnitBindings::inval - - static GrGLenum filter_to_gl_mag_filter(GrSamplerState::Filter filter) { - switch (filter) { - case GrSamplerState::Filter::kNearest: return GR_GL_NEAREST; - case GrSamplerState::Filter::kBilerp: return GR_GL_LINEAR; - case GrSamplerState::Filter::kMipMap: return GR_GL_LINEAR; - } - SK_ABORT("Unknown filter"); -+ SkUNREACHABLE; - } - - static GrGLenum filter_to_gl_min_filter(GrSamplerState::Filter filter) { - switch (filter) { - case GrSamplerState::Filter::kNearest: return GR_GL_NEAREST; - case GrSamplerState::Filter::kBilerp: return GR_GL_LINEAR; - case GrSamplerState::Filter::kMipMap: return GR_GL_LINEAR_MIPMAP_LINEAR; - } - SK_ABORT("Unknown filter"); -+ SkUNREACHABLE; - } - - static inline GrGLenum wrap_mode_to_gl_wrap(GrSamplerState::WrapMode wrapMode, - const GrCaps& caps) { - switch (wrapMode) { - case GrSamplerState::WrapMode::kClamp: return GR_GL_CLAMP_TO_EDGE; - case GrSamplerState::WrapMode::kRepeat: return GR_GL_REPEAT; - case GrSamplerState::WrapMode::kMirrorRepeat: return GR_GL_MIRRORED_REPEAT; - case GrSamplerState::WrapMode::kClampToBorder: - // May not be supported but should have been caught earlier - SkASSERT(caps.clampToBorderSupport()); - return GR_GL_CLAMP_TO_BORDER; - } - SK_ABORT("Unknown wrap mode"); -+ SkUNREACHABLE; - } - - /////////////////////////////////////////////////////////////////////////////// - - class GrGLGpu::SamplerObjectCache { - public: - SamplerObjectCache(GrGLGpu* gpu) : fGpu(gpu) { - fNumTextureUnits = fGpu->glCaps().shaderCaps()->maxFragmentSamplers(); -@@ -1102,17 +1106,17 @@ static bool renderbuffer_storage_msaa(co - GL_ALLOC_CALL(ctx.interface(), - RenderbufferStorageMultisampleES2EXT(GR_GL_RENDERBUFFER, - sampleCount, - format, - width, height)); - break; - case GrGLCaps::kNone_MSFBOType: - SK_ABORT("Shouldn't be here if we don't support multisampled renderbuffers."); -- break; -+ SkUNREACHABLE; - } - return (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctx.interface())); - } - - bool GrGLGpu::createRenderTargetObjects(const GrGLTexture::Desc& desc, - int sampleCount, - GrGLRenderTarget::IDs* rtIDs) { - rtIDs->fMSColorRenderbufferID = 0; -@@ -2270,19 +2274,20 @@ static GrGLenum gr_primitive_type_to_gl_ - case GrPrimitiveType::kPoints: - return GR_GL_POINTS; - case GrPrimitiveType::kLines: - return GR_GL_LINES; - case GrPrimitiveType::kLineStrip: - return GR_GL_LINE_STRIP; - case GrPrimitiveType::kPath: - SK_ABORT("non-mesh-based GrPrimitiveType"); -- return 0; -+ SkUNREACHABLE; - } - SK_ABORT("invalid GrPrimitiveType"); -+ SkUNREACHABLE; - } - - void GrGLGpu::sendMeshToGpu(GrPrimitiveType primitiveType, const GrBuffer* vertexBuffer, - int vertexCount, int baseVertex) { - const GrGLenum glPrimType = gr_primitive_type_to_gl_mode(primitiveType); - if (this->glCaps().drawArraysBaseVertexIsBroken()) { - this->setupGeometry(nullptr, vertexBuffer, baseVertex, nullptr, 0, GrPrimitiveRestart::kNo); - GL_CALL(DrawArrays(glPrimType, 0, vertexCount)); -@@ -4001,17 +4006,18 @@ int GrGLGpu::TextureToCopyProgramIdx(GrT - switch (GrSLCombinedSamplerTypeForTextureType(texture->texturePriv().textureType())) { - case kTexture2DSampler_GrSLType: - return 0; - case kTexture2DRectSampler_GrSLType: - return 1; - case kTextureExternalSampler_GrSLType: - return 2; - default: -- SK_ABORT("Unexpected samper type"); -+ SK_ABORT("Unexpected sampler type"); -+ SkUNREACHABLE; - } - } - - #ifdef SK_ENABLE_DUMP_GPU - #include "src/utils/SkJSONWriter.h" - void GrGLGpu::onDumpJSON(SkJSONWriter* writer) const { - // We are called by the base class, which has already called beginObject(). We choose to nest - // all of our caps information in a named sub-object. -diff --git a/gfx/skia/skia/src/gpu/gl/GrGLPath.cpp b/gfx/skia/skia/src/gpu/gl/GrGLPath.cpp ---- a/gfx/skia/skia/src/gpu/gl/GrGLPath.cpp -+++ b/gfx/skia/skia/src/gpu/gl/GrGLPath.cpp -@@ -192,16 +192,17 @@ inline bool init_path_object_for_general - - /* - * For now paths only natively support winding and even odd fill types - */ - static GrPathRendering::FillType convert_skpath_filltype(SkPath::FillType fill) { - switch (fill) { - default: - SK_ABORT("Incomplete Switch\n"); -+ SkUNREACHABLE; - case SkPath::kWinding_FillType: - case SkPath::kInverseWinding_FillType: - return GrPathRendering::kWinding_FillType; - case SkPath::kEvenOdd_FillType: - case SkPath::kInverseEvenOdd_FillType: - return GrPathRendering::kEvenOdd_FillType; - } - } -diff --git a/gfx/skia/skia/src/gpu/gl/GrGLTexture.cpp b/gfx/skia/skia/src/gpu/gl/GrGLTexture.cpp ---- a/gfx/skia/skia/src/gpu/gl/GrGLTexture.cpp -+++ b/gfx/skia/skia/src/gpu/gl/GrGLTexture.cpp -@@ -20,30 +20,33 @@ GrTextureType GrGLTexture::TextureTypeFr - case GR_GL_TEXTURE_2D: - return GrTextureType::k2D; - case GR_GL_TEXTURE_RECTANGLE: - return GrTextureType::kRectangle; - case GR_GL_TEXTURE_EXTERNAL: - return GrTextureType::kExternal; - } - SK_ABORT("Unexpected texture target"); -+ SkUNREACHABLE; - } - - static inline GrGLenum target_from_texture_type(GrTextureType type) { - switch (type) { - case GrTextureType::k2D: - return GR_GL_TEXTURE_2D; - case GrTextureType::kRectangle: - return GR_GL_TEXTURE_RECTANGLE; - case GrTextureType::kExternal: - return GR_GL_TEXTURE_EXTERNAL; - default: - SK_ABORT("Unexpected texture target"); -+ SkUNREACHABLE; - } - SK_ABORT("Unexpected texture type"); -+ SkUNREACHABLE; - } - - // Because this class is virtually derived from GrSurface we must explicitly call its constructor. - GrGLTexture::GrGLTexture(GrGLGpu* gpu, SkBudgeted budgeted, const Desc& desc, - GrMipMapsStatus mipMapsStatus) - : GrSurface(gpu, desc.fSize, desc.fConfig, GrProtected::kNo) - , INHERITED(gpu, desc.fSize, desc.fConfig, GrProtected::kNo, - TextureTypeFromTarget(desc.fTarget), mipMapsStatus) -diff --git a/gfx/skia/skia/src/gpu/gl/GrGLVertexArray.cpp b/gfx/skia/skia/src/gpu/gl/GrGLVertexArray.cpp ---- a/gfx/skia/skia/src/gpu/gl/GrGLVertexArray.cpp -+++ b/gfx/skia/skia/src/gpu/gl/GrGLVertexArray.cpp -@@ -75,16 +75,17 @@ static AttribLayout attrib_layout(GrVert - case kUint_GrVertexAttribType: - return {false, 1, GR_GL_UNSIGNED_INT}; - case kUShort_norm_GrVertexAttribType: - return {true, 1, GR_GL_UNSIGNED_SHORT}; - case kUShort4_norm_GrVertexAttribType: - return {true, 4, GR_GL_UNSIGNED_SHORT}; - } - SK_ABORT("Unknown vertex attrib type"); -+ SkUNREACHABLE; - }; - - void GrGLAttribArrayState::set(GrGLGpu* gpu, - int index, - const GrBuffer* vertexBuffer, - GrVertexAttribType cpuType, - GrSLType gpuType, - GrGLsizei stride, -diff --git a/gfx/skia/skia/src/gpu/glsl/GrGLSL.cpp b/gfx/skia/skia/src/gpu/glsl/GrGLSL.cpp ---- a/gfx/skia/skia/src/gpu/glsl/GrGLSL.cpp -+++ b/gfx/skia/skia/src/gpu/glsl/GrGLSL.cpp -@@ -93,9 +93,10 @@ const char* GrGLSLTypeString(GrSLType t) - case kUByte4_GrSLType: - return "ubyte4"; - case kTexture2D_GrSLType: - return "texture2D"; - case kSampler_GrSLType: - return "sampler"; - } - SK_ABORT("Unknown shader var type."); -+ SkUNREACHABLE; - } -diff --git a/gfx/skia/skia/src/gpu/glsl/GrGLSLVarying.cpp b/gfx/skia/skia/src/gpu/glsl/GrGLSLVarying.cpp ---- a/gfx/skia/skia/src/gpu/glsl/GrGLSLVarying.cpp -+++ b/gfx/skia/skia/src/gpu/glsl/GrGLSLVarying.cpp -@@ -30,16 +30,17 @@ static bool use_flat_interpolation(GrGLS - SkASSERT(!shaderCaps.preferFlatInterpolation() || - shaderCaps.flatInterpolationSupport()); - return shaderCaps.preferFlatInterpolation(); - case Interpolation::kMustBeFlat: - SkASSERT(shaderCaps.flatInterpolationSupport()); - return true; - } - SK_ABORT("Invalid interpolation"); -+ SkUNREACHABLE; - } - - void GrGLSLVaryingHandler::addVarying(const char* name, GrGLSLVarying* varying, - Interpolation interpolation) { - SkASSERT(GrSLTypeIsFloatType(varying->type()) || Interpolation::kMustBeFlat == interpolation); - bool willUseGeoShader = fProgramBuilder->primitiveProcessor().willUseGeoShader(); - VaryingInfo& v = fVaryings.push_back(); - -diff --git a/gfx/skia/skia/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp b/gfx/skia/skia/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp ---- a/gfx/skia/skia/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp -+++ b/gfx/skia/skia/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp -@@ -46,26 +46,28 @@ void GrGLSLVertexBuilder::onFinalize() { - static const char* input_type_name(GrGLSLGeometryBuilder::InputType in) { - using InputType = GrGLSLGeometryBuilder::InputType; - switch (in) { - case InputType::kPoints: return "points"; - case InputType::kLines: return "lines"; - case InputType::kTriangles: return "triangles"; - } - SK_ABORT("invalid input type"); -+ SkUNREACHABLE; - } - - static const char* output_type_name(GrGLSLGeometryBuilder::OutputType out) { - using OutputType = GrGLSLGeometryBuilder::OutputType; - switch (out) { - case OutputType::kPoints: return "points"; - case OutputType::kLineStrip: return "line_strip"; - case OutputType::kTriangleStrip: return "triangle_strip"; - } - SK_ABORT("invalid output type"); -+ SkUNREACHABLE; - } - - void GrGLSLGeometryBuilder::configure(InputType inputType, OutputType outputType, int maxVertices, - int numInvocations) { - SkASSERT(!this->isConfigured()); - fNumInvocations = numInvocations; - this->addLayoutQualifier(input_type_name(inputType), kIn_InterfaceQualifier); - this->addLayoutQualifier(SkStringPrintf("invocations = %i", numInvocations).c_str(), -diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlCaps.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlCaps.mm ---- a/gfx/skia/skia/src/gpu/mtl/GrMtlCaps.mm -+++ b/gfx/skia/skia/src/gpu/mtl/GrMtlCaps.mm -@@ -501,16 +501,17 @@ size_t GrMtlCaps::GetFormatIndex(MTLPixe - static_assert(SK_ARRAY_COUNT(kMtlFormats) == GrMtlCaps::kNumMtlFormats, - "Size of kMtlFormats array must match static value in header"); - for (size_t i = 0; i < GrMtlCaps::kNumMtlFormats; ++i) { - if (kMtlFormats[i] == pixelFormat) { - return i; - } - } - SK_ABORT("Invalid MTLPixelFormat"); -+ SkUNREACHABLE; - } - - void GrMtlCaps::initFormatTable() { - FormatInfo* info; - - // Format: R8Unorm - { - info = &fFormatTable[GetFormatIndex(MTLPixelFormatR8Unorm)]; -@@ -1006,16 +1007,17 @@ GrBackendFormat GrMtlCaps::getBackendFor - case SkImage::kETC1_CompressionType: - #ifdef SK_BUILD_FOR_MAC - return {}; - #else - return GrBackendFormat::MakeMtl(MTLPixelFormatETC2_RGB8); - #endif - } - SK_ABORT("Invalid compression type"); -+ SkUNREACHABLE; - } - - GrSwizzle GrMtlCaps::getTextureSwizzle(const GrBackendFormat& format, GrColorType colorType) const { - MTLPixelFormat mtlFormat = GrBackendFormatAsMTLPixelFormat(format); - SkASSERT(mtlFormat != MTLPixelFormatInvalid); - const auto& info = this->getFormatInfo(mtlFormat); - for (int i = 0; i < info.fColorTypeInfoCount; ++i) { - const auto& ctInfo = info.fColorTypeInfos[i]; -diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm ---- a/gfx/skia/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm -+++ b/gfx/skia/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm -@@ -150,16 +150,17 @@ static inline MTLVertexFormat attribute_ - return MTLVertexFormatUShortNormalized; - } else { - return MTLVertexFormatInvalid; - } - case kUShort4_norm_GrVertexAttribType: - return MTLVertexFormatUShort4Normalized; - } - SK_ABORT("Unknown vertex attribute type"); -+ SkUNREACHABLE; - } - - static MTLVertexDescriptor* create_vertex_descriptor(const GrPrimitiveProcessor& primProc) { - uint32_t vertexBinding = 0, instanceBinding = 0; - - int nextBinding = GrMtlUniformHandler::kLastUniformBinding + 1; - if (primProc.hasVertexAttributes()) { - vertexBinding = nextBinding++; -@@ -271,16 +272,17 @@ static MTLBlendFactor blend_coeff_to_mtl - } else { - return MTLBlendFactorZero; - } - case kIllegal_GrBlendCoeff: - return MTLBlendFactorZero; - } - - SK_ABORT("Unknown blend coefficient"); -+ SkUNREACHABLE; - } - - static MTLBlendOperation blend_equation_to_mtl_blend_op(GrBlendEquation equation) { - static const MTLBlendOperation gTable[] = { - MTLBlendOperationAdd, // kAdd_GrBlendEquation - MTLBlendOperationSubtract, // kSubtract_GrBlendEquation - MTLBlendOperationReverseSubtract, // kReverseSubtract_GrBlendEquation - }; -diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlSampler.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlSampler.mm ---- a/gfx/skia/skia/src/gpu/mtl/GrMtlSampler.mm -+++ b/gfx/skia/skia/src/gpu/mtl/GrMtlSampler.mm -@@ -33,16 +33,17 @@ static inline MTLSamplerAddressMode wrap - } else - #endif - { - SkASSERT(false); - return MTLSamplerAddressModeClampToEdge; - } - } - SK_ABORT("Unknown wrap mode."); -+ SkUNREACHABLE; - } - - GrMtlSampler* GrMtlSampler::Create(const GrMtlGpu* gpu, const GrSamplerState& samplerState) { - static MTLSamplerMinMagFilter mtlMinMagFilterModes[] = { - MTLSamplerMinMagFilterNearest, - MTLSamplerMinMagFilterLinear, - MTLSamplerMinMagFilterLinear - }; -diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlUniformHandler.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlUniformHandler.mm ---- a/gfx/skia/skia/src/gpu/mtl/GrMtlUniformHandler.mm -+++ b/gfx/skia/skia/src/gpu/mtl/GrMtlUniformHandler.mm -@@ -85,16 +85,17 @@ static uint32_t grsltype_to_alignment_ma - case kTexture2DSampler_GrSLType: - case kTextureExternalSampler_GrSLType: - case kTexture2DRectSampler_GrSLType: - case kSampler_GrSLType: - case kTexture2D_GrSLType: - break; - } - SK_ABORT("Unexpected type"); -+ SkUNREACHABLE; - } - - /** Returns the size in bytes taken up in Metal buffers for GrSLTypes. */ - static inline uint32_t grsltype_to_mtl_size(GrSLType type) { - switch(type) { - case kByte_GrSLType: - return sizeof(int8_t); - case kByte2_GrSLType: -@@ -167,16 +168,17 @@ static inline uint32_t grsltype_to_mtl_s - case kTexture2DSampler_GrSLType: - case kTextureExternalSampler_GrSLType: - case kTexture2DRectSampler_GrSLType: - case kSampler_GrSLType: - case kTexture2D_GrSLType: - break; - } - SK_ABORT("Unexpected type"); -+ SkUNREACHABLE; - } - - // Given the current offset into the ubo, calculate the offset for the uniform we're trying to add - // taking into consideration all alignment requirements. The uniformOffset is set to the offset for - // the new uniform, and currentOffset is updated to be the offset to the end of the new uniform. - static void get_ubo_aligned_offset(uint32_t* uniformOffset, - uint32_t* currentOffset, - uint32_t* maxAlignment, -diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlUtil.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlUtil.mm ---- a/gfx/skia/skia/src/gpu/mtl/GrMtlUtil.mm -+++ b/gfx/skia/skia/src/gpu/mtl/GrMtlUtil.mm -@@ -107,16 +107,17 @@ bool GrPixelConfigToMTLFormat(GrPixelCon - case kRGBA_16161616_GrPixelConfig: - *format = MTLPixelFormatRGBA16Unorm; - return true; - case kRG_half_GrPixelConfig: - *format = MTLPixelFormatRG16Float; - return true; - } - SK_ABORT("Unexpected config"); -+ SkUNREACHABLE; - } - - MTLTextureDescriptor* GrGetMTLTextureDescriptor(id mtlTexture) { - MTLTextureDescriptor* texDesc = [[MTLTextureDescriptor alloc] init]; - texDesc.textureType = mtlTexture.textureType; - texDesc.pixelFormat = mtlTexture.pixelFormat; - texDesc.width = mtlTexture.width; - texDesc.height = mtlTexture.height; -diff --git a/gfx/skia/skia/src/gpu/ops/GrDrawVerticesOp.cpp b/gfx/skia/skia/src/gpu/ops/GrDrawVerticesOp.cpp ---- a/gfx/skia/skia/src/gpu/ops/GrDrawVerticesOp.cpp -+++ b/gfx/skia/skia/src/gpu/ops/GrDrawVerticesOp.cpp -@@ -605,16 +605,17 @@ static uint32_t seed_vertices(GrPrimitiv - case GrPrimitiveType::kLines: - case GrPrimitiveType::kLineStrip: - return 2; - case GrPrimitiveType::kPath: - SkASSERT(0); - return 0; - } - SK_ABORT("Incomplete switch\n"); -+ SkUNREACHABLE; - } - - static uint32_t primitive_vertices(GrPrimitiveType type) { - switch (type) { - case GrPrimitiveType::kTriangles: - return 3; - case GrPrimitiveType::kLines: - return 2; -@@ -622,16 +623,17 @@ static uint32_t primitive_vertices(GrPri - case GrPrimitiveType::kPoints: - case GrPrimitiveType::kLineStrip: - return 1; - case GrPrimitiveType::kPath: - SkASSERT(0); - return 0; - } - SK_ABORT("Incomplete switch\n"); -+ SkUNREACHABLE; - } - - static SkPoint random_point(SkRandom* random, SkScalar min, SkScalar max) { - SkPoint p; - p.fX = random->nextRangeScalar(min, max); - p.fY = random->nextRangeScalar(min, max); - return p; - } -diff --git a/gfx/skia/skia/src/gpu/ops/GrFillRRectOp.cpp b/gfx/skia/skia/src/gpu/ops/GrFillRRectOp.cpp ---- a/gfx/skia/skia/src/gpu/ops/GrFillRRectOp.cpp -+++ b/gfx/skia/skia/src/gpu/ops/GrFillRRectOp.cpp -@@ -818,9 +818,10 @@ static bool can_use_hw_derivatives_with_ - if (!can_use_hw_derivatives_with_coverage(devScale, rrect.radii(corner))) { - return false; - } - } - return true; - } - } - SK_ABORT("Invalid round rect type."); -+ SkUNREACHABLE; - } -diff --git a/gfx/skia/skia/src/gpu/ops/GrOvalOpFactory.cpp b/gfx/skia/skia/src/gpu/ops/GrOvalOpFactory.cpp ---- a/gfx/skia/skia/src/gpu/ops/GrOvalOpFactory.cpp -+++ b/gfx/skia/skia/src/gpu/ops/GrOvalOpFactory.cpp -@@ -2278,39 +2278,42 @@ static int rrect_type_to_vert_count(RRec - switch (type) { - case kFill_RRectType: - case kStroke_RRectType: - return kVertsPerStandardRRect; - case kOverstroke_RRectType: - return kVertsPerOverstrokeRRect; - } - SK_ABORT("Invalid type"); -+ SkUNREACHABLE; - } - - static int rrect_type_to_index_count(RRectType type) { - switch (type) { - case kFill_RRectType: - return kIndicesPerFillRRect; - case kStroke_RRectType: - return kIndicesPerStrokeRRect; - case kOverstroke_RRectType: - return kIndicesPerOverstrokeRRect; - } - SK_ABORT("Invalid type"); -+ SkUNREACHABLE; - } - - static const uint16_t* rrect_type_to_indices(RRectType type) { - switch (type) { - case kFill_RRectType: - case kStroke_RRectType: - return gStandardRRectIndices; - case kOverstroke_RRectType: - return gOverstrokeRRectIndices; - } - SK_ABORT("Invalid type"); -+ SkUNREACHABLE; - } - - /////////////////////////////////////////////////////////////////////////////////////////////////// - - // For distance computations in the interior of filled rrects we: - // - // add a interior degenerate (point or line) rect - // each vertex of that rect gets -outerRad as its radius -diff --git a/gfx/skia/skia/src/gpu/ops/GrShadowRRectOp.cpp b/gfx/skia/skia/src/gpu/ops/GrShadowRRectOp.cpp ---- a/gfx/skia/skia/src/gpu/ops/GrShadowRRectOp.cpp -+++ b/gfx/skia/skia/src/gpu/ops/GrShadowRRectOp.cpp -@@ -150,39 +150,42 @@ static int rrect_type_to_vert_count(RRec - case kFill_RRectType: - return kVertsPerFillRRect; - case kStroke_RRectType: - return kVertsPerStrokeRRect; - case kOverstroke_RRectType: - return kVertsPerOverstrokeRRect; - } - SK_ABORT("Invalid type"); -+ SkUNREACHABLE; - } - - static int rrect_type_to_index_count(RRectType type) { - switch (type) { - case kFill_RRectType: - return kIndicesPerFillRRect; - case kStroke_RRectType: - return kIndicesPerStrokeRRect; - case kOverstroke_RRectType: - return kIndicesPerOverstrokeRRect; - } - SK_ABORT("Invalid type"); -+ SkUNREACHABLE; - } - - static const uint16_t* rrect_type_to_indices(RRectType type) { - switch (type) { - case kFill_RRectType: - case kStroke_RRectType: - return gRRectIndices + 6*4; - case kOverstroke_RRectType: - return gRRectIndices; - } - SK_ABORT("Invalid type"); -+ SkUNREACHABLE; - } - - /////////////////////////////////////////////////////////////////////////////// - namespace { - - class ShadowCircularRRectOp final : public GrMeshDrawOp { - public: - DEFINE_OP_CLASS_ID -diff --git a/gfx/skia/skia/src/gpu/text/GrTextBlob.h b/gfx/skia/skia/src/gpu/text/GrTextBlob.h ---- a/gfx/skia/skia/src/gpu/text/GrTextBlob.h -+++ b/gfx/skia/skia/src/gpu/text/GrTextBlob.h -@@ -120,16 +120,17 @@ public: - } - - void operator delete(void* p) { - ::operator delete(p); - } - - void* operator new(size_t) { - SK_ABORT("All blobs are created by placement new."); -+ SkUNREACHABLE; - } - - void* operator new(size_t, void* p) { return p; } - - bool hasDistanceField() const { return SkToBool(fTextType & kHasDistanceField_TextType); } - bool hasBitmap() const { return SkToBool(fTextType & kHasBitmap_TextType); } - void setHasDistanceField() { fTextType |= kHasDistanceField_TextType; } - void setHasBitmap() { fTextType |= kHasBitmap_TextType; } -diff --git a/gfx/skia/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp b/gfx/skia/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp ---- a/gfx/skia/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp -+++ b/gfx/skia/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp -@@ -279,9 +279,10 @@ bool GrTextBlob::VertexRegenerator::rege - // set use tokens for all of the glyphs in our subrun. This is only valid if we - // have a valid atlas generation - fFullAtlasManager->setUseTokenBulk(*fSubRun->bulkUseToken(), - fUploadTarget->tokenTracker()->nextDrawToken(), - fSubRun->maskFormat()); - return true; - } - SK_ABORT("Should not get here"); -+ SkUNREACHABLE; - } -diff --git a/gfx/skia/skia/src/gpu/vk/GrVkCaps.cpp b/gfx/skia/skia/src/gpu/vk/GrVkCaps.cpp ---- a/gfx/skia/skia/src/gpu/vk/GrVkCaps.cpp -+++ b/gfx/skia/skia/src/gpu/vk/GrVkCaps.cpp -@@ -103,16 +103,17 @@ static FormatCompatibilityClass format_c - case VK_FORMAT_R8G8B8_UNORM: - return FormatCompatibilityClass::k24_3_1; - - case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: - return FormatCompatibilityClass::kETC2_RGB_8_16; - - default: - SK_ABORT("Unsupported VkFormat"); -+ SkUNREACHABLE; - } - } - - bool GrVkCaps::canCopyImage(VkFormat dstFormat, int dstSampleCnt, bool dstHasYcbcr, - VkFormat srcFormat, int srcSampleCnt, bool srcHasYcbcr) const { - if ((dstSampleCnt > 1 || srcSampleCnt > 1) && dstSampleCnt != srcSampleCnt) { - return false; - } -@@ -1651,16 +1652,17 @@ GrBackendFormat GrVkCaps::onGetDefaultBa - - GrBackendFormat GrVkCaps::getBackendFormatFromCompressionType( - SkImage::CompressionType compressionType) const { - switch (compressionType) { - case SkImage::kETC1_CompressionType: - return GrBackendFormat::MakeVk(VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK); - } - SK_ABORT("Invalid compression type"); -+ SkUNREACHABLE; - } - - GrSwizzle GrVkCaps::getTextureSwizzle(const GrBackendFormat& format, GrColorType colorType) const { - VkFormat vkFormat; - SkAssertResult(format.asVkFormat(&vkFormat)); - const auto& info = this->getFormatInfo(vkFormat); - for (int i = 0; i < info.fColorTypeInfoCount; ++i) { - const auto& ctInfo = info.fColorTypeInfos[i]; -diff --git a/gfx/skia/skia/src/gpu/vk/GrVkMemory.cpp b/gfx/skia/skia/src/gpu/vk/GrVkMemory.cpp ---- a/gfx/skia/skia/src/gpu/vk/GrVkMemory.cpp -+++ b/gfx/skia/skia/src/gpu/vk/GrVkMemory.cpp -@@ -23,16 +23,17 @@ static BufferUsage get_buffer_usage(GrVk - case GrVkBuffer::kUniform_Type: - SkASSERT(dynamic); - return BufferUsage::kCpuWritesGpuReads; - case GrVkBuffer::kCopyRead_Type: // fall through - case GrVkBuffer::kCopyWrite_Type: - return BufferUsage::kCpuOnly; - } - SK_ABORT("Invalid GrVkBuffer::Type"); -+ SkUNREACHABLE; - } - - bool GrVkMemory::AllocAndBindBufferMemory(const GrVkGpu* gpu, - VkBuffer buffer, - GrVkBuffer::Type type, - bool dynamic, - GrVkAlloc* alloc) { - GrVkMemoryAllocator* allocator = gpu->memoryAllocator(); -diff --git a/gfx/skia/skia/src/gpu/vk/GrVkPipeline.cpp b/gfx/skia/skia/src/gpu/vk/GrVkPipeline.cpp ---- a/gfx/skia/skia/src/gpu/vk/GrVkPipeline.cpp -+++ b/gfx/skia/skia/src/gpu/vk/GrVkPipeline.cpp -@@ -75,16 +75,17 @@ static inline VkFormat attrib_type_to_vk - case kUint_GrVertexAttribType: - return VK_FORMAT_R32_UINT; - case kUShort_norm_GrVertexAttribType: - return VK_FORMAT_R16_UNORM; - case kUShort4_norm_GrVertexAttribType: - return VK_FORMAT_R16G16B16A16_UNORM; - } - SK_ABORT("Unknown vertex attrib type"); -+ SkUNREACHABLE; - } - - static void setup_vertex_input_state(const GrPrimitiveProcessor& primProc, - VkPipelineVertexInputStateCreateInfo* vertexInputInfo, - SkSTArray<2, VkVertexInputBindingDescription, true>* bindingDescs, - VkVertexInputAttributeDescription* attributeDesc) { - uint32_t vertexBinding = 0, instanceBinding = 0; - -@@ -157,18 +158,20 @@ static VkPrimitiveTopology gr_primitive_ - case GrPrimitiveType::kPoints: - return VK_PRIMITIVE_TOPOLOGY_POINT_LIST; - case GrPrimitiveType::kLines: - return VK_PRIMITIVE_TOPOLOGY_LINE_LIST; - case GrPrimitiveType::kLineStrip: - return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP; - case GrPrimitiveType::kPath: - SK_ABORT("Unsupported primitive type"); -+ SkUNREACHABLE; - } - SK_ABORT("invalid GrPrimitiveType"); -+ SkUNREACHABLE; - } - - static void setup_input_assembly_state(GrPrimitiveType primitiveType, - VkPipelineInputAssemblyStateCreateInfo* inputAssemblyInfo) { - memset(inputAssemblyInfo, 0, sizeof(VkPipelineInputAssemblyStateCreateInfo)); - inputAssemblyInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; - inputAssemblyInfo->pNext = nullptr; - inputAssemblyInfo->flags = 0; -diff --git a/gfx/skia/skia/src/gpu/vk/GrVkSampler.cpp b/gfx/skia/skia/src/gpu/vk/GrVkSampler.cpp ---- a/gfx/skia/skia/src/gpu/vk/GrVkSampler.cpp -+++ b/gfx/skia/skia/src/gpu/vk/GrVkSampler.cpp -@@ -18,16 +18,17 @@ static inline VkSamplerAddressMode wrap_ - case GrSamplerState::WrapMode::kRepeat: - return VK_SAMPLER_ADDRESS_MODE_REPEAT; - case GrSamplerState::WrapMode::kMirrorRepeat: - return VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT; - case GrSamplerState::WrapMode::kClampToBorder: - return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; - } - SK_ABORT("Unknown wrap mode."); -+ SkUNREACHABLE; - } - - GrVkSampler* GrVkSampler::Create(GrVkGpu* gpu, const GrSamplerState& samplerState, - const GrVkYcbcrConversionInfo& ycbcrInfo) { - static VkFilter vkMinFilterModes[] = { - VK_FILTER_NEAREST, - VK_FILTER_LINEAR, - VK_FILTER_LINEAR -diff --git a/gfx/skia/skia/src/gpu/vk/GrVkTransferBuffer.h b/gfx/skia/skia/src/gpu/vk/GrVkTransferBuffer.h ---- a/gfx/skia/skia/src/gpu/vk/GrVkTransferBuffer.h -+++ b/gfx/skia/skia/src/gpu/vk/GrVkTransferBuffer.h -@@ -29,16 +29,17 @@ private: - const SkString& dumpName) const override; - - void onMap() override { this->GrGpuBuffer::fMapPtr = this->vkMap(this->getVkGpu()); } - - void onUnmap() override { this->vkUnmap(this->getVkGpu()); } - - bool onUpdateData(const void* src, size_t srcSizeInBytes) override { - SK_ABORT("Not implemented for transfer buffers."); -+ SkUNREACHABLE; - } - - GrVkGpu* getVkGpu() const { - SkASSERT(!this->wasDestroyed()); - return reinterpret_cast(this->getGpu()); - } - - typedef GrGpuBuffer INHERITED; -diff --git a/gfx/skia/skia/src/gpu/vk/GrVkUniformHandler.cpp b/gfx/skia/skia/src/gpu/vk/GrVkUniformHandler.cpp ---- a/gfx/skia/skia/src/gpu/vk/GrVkUniformHandler.cpp -+++ b/gfx/skia/skia/src/gpu/vk/GrVkUniformHandler.cpp -@@ -84,16 +84,17 @@ static uint32_t grsltype_to_alignment_ma - case kTexture2DSampler_GrSLType: - case kTextureExternalSampler_GrSLType: - case kTexture2DRectSampler_GrSLType: - case kSampler_GrSLType: - case kTexture2D_GrSLType: - break; - } - SK_ABORT("Unexpected type"); -+ SkUNREACHABLE; - } - - /** Returns the size in bytes taken up in vulkanbuffers for GrSLTypes. */ - static inline uint32_t grsltype_to_vk_size(GrSLType type) { - switch(type) { - case kByte_GrSLType: - return sizeof(int8_t); - case kByte2_GrSLType: -@@ -167,16 +168,17 @@ static inline uint32_t grsltype_to_vk_si - case kTexture2DSampler_GrSLType: - case kTextureExternalSampler_GrSLType: - case kTexture2DRectSampler_GrSLType: - case kSampler_GrSLType: - case kTexture2D_GrSLType: - break; - } - SK_ABORT("Unexpected type"); -+ SkUNREACHABLE; - } - - - // Given the current offset into the ubo, calculate the offset for the uniform we're trying to add - // taking into consideration all alignment requirements. The uniformOffset is set to the offset for - // the new uniform, and currentOffset is updated to be the offset to the end of the new uniform. - static void get_ubo_aligned_offset(uint32_t* uniformOffset, - uint32_t* currentOffset, -diff --git a/gfx/skia/skia/src/gpu/vk/GrVkVaryingHandler.cpp b/gfx/skia/skia/src/gpu/vk/GrVkVaryingHandler.cpp ---- a/gfx/skia/skia/src/gpu/vk/GrVkVaryingHandler.cpp -+++ b/gfx/skia/skia/src/gpu/vk/GrVkVaryingHandler.cpp -@@ -69,16 +69,17 @@ static inline int grsltype_to_location_s - case kByte_GrSLType: - return 1; - case kUint_GrSLType: // fall through - case kUShort_GrSLType: - case kUByte_GrSLType: - return 1; - } - SK_ABORT("Unexpected type"); -+ SkUNREACHABLE; - } - - static void finalize_helper(GrVkVaryingHandler::VarArray& vars) { - int locationIndex = 0; - for (int i = 0; i < vars.count(); ++i) { - GrShaderVar& var = vars[i]; - SkString location; - location.appendf("location = %d", locationIndex); -diff --git a/gfx/skia/skia/src/pdf/SkPDFTag.cpp b/gfx/skia/skia/src/pdf/SkPDFTag.cpp ---- a/gfx/skia/skia/src/pdf/SkPDFTag.cpp -+++ b/gfx/skia/skia/src/pdf/SkPDFTag.cpp -@@ -59,16 +59,17 @@ static const char* tag_name_from_type(Sk - M(WT); - M(WP); - M(Figure); - M(Formula); - M(Form); - #undef M - } - SK_ABORT("bad tag"); -+ SkUNREACHABLE; - } - - struct SkPDFTagNode { - SkPDFTagNode* fChildren = nullptr; - size_t fChildCount = 0; - struct MarkedContentInfo { - unsigned fPageIndex; - int fMarkId; -diff --git a/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp b/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp ---- a/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp -+++ b/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp -@@ -168,28 +168,32 @@ public: - SkFontMgr_FCI(sk_sp fci) - : fFCI(std::move(fci)) - , fCache(kMaxSize) - {} - +Index: firefox-115.0/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp ++++ firefox-115.0/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp +@@ -162,18 +162,22 @@ public: protected: int onCountFamilies() const override { SK_ABORT("Not implemented."); @@ -1837,85 +207,60 @@ } SkTypeface* onMatchFamilyStyle(const char requestedFamilyName[], - const SkFontStyle& requestedStyle) const override - { - SkAutoMutexExclusive ama(fMutex); - - SkFontConfigInterface::FontIdentity identity; -@@ -210,20 +214,22 @@ protected: +Index: firefox-115.0/gfx/skia/skia/src/sksl/SkSLCompiler.cpp +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/sksl/SkSLCompiler.cpp ++++ firefox-115.0/gfx/skia/skia/src/sksl/SkSLCompiler.cpp +@@ -277,6 +277,7 @@ std::unique_ptr Compiler::co } - return face.release(); + default: + SK_ABORT("unsupported symbol type %d\n", (int) result->kind()); ++ SkUNREACHABLE; } + } - SkTypeface* onMatchFamilyStyleCharacter(const char familyName[], const SkFontStyle&, - const char* bcp47[], int bcp47Count, - SkUnichar character) const override { - SK_ABORT("Not implemented."); -+ SkUNREACHABLE; +Index: firefox-115.0/gfx/skia/skia/src/sksl/SkSLOperator.cpp +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/sksl/SkSLOperator.cpp ++++ firefox-115.0/gfx/skia/skia/src/sksl/SkSLOperator.cpp +@@ -51,7 +51,7 @@ OperatorPrecedence Operator::getBinaryPr + case Kind::BITWISEXOREQ: // fall through + case Kind::BITWISEOREQ: return OperatorPrecedence::kAssignment; + case Kind::COMMA: return OperatorPrecedence::kSequence; +- default: SK_ABORT("unsupported binary operator"); ++ default: SkUNREACHABLE; } + } - SkTypeface* onMatchFaceStyle(const SkTypeface*, const SkFontStyle&) const override { - SK_ABORT("Not implemented."); -+ SkUNREACHABLE; - } +Index: firefox-115.0/gfx/skia/skia/src/sksl/ir/SkSLType.h +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/sksl/ir/SkSLType.h ++++ firefox-115.0/gfx/skia/skia/src/sksl/ir/SkSLType.h +@@ -422,6 +422,7 @@ public: - sk_sp onMakeFromData(sk_sp data, int ttcIndex) const override { - return this->onMakeFromStreamIndex(SkMemoryStream::Make(std::move(data)), ttcIndex); + virtual const std::vector& fields() const { + SK_ABORT("Internal error: not a struct"); ++ SkUNREACHABLE; } - sk_sp onMakeFromStreamIndex(std::unique_ptr stream, - int ttcIndex) const override { -diff --git a/gfx/skia/skia/src/shaders/SkImageShader.cpp b/gfx/skia/skia/src/shaders/SkImageShader.cpp ---- a/gfx/skia/skia/src/shaders/SkImageShader.cpp -+++ b/gfx/skia/skia/src/shaders/SkImageShader.cpp -@@ -178,16 +178,17 @@ static GrSamplerState::WrapMode tile_mod - case SkTileMode::kRepeat: - return GrSamplerState::WrapMode::kRepeat; - case SkTileMode::kMirror: - return GrSamplerState::WrapMode::kMirrorRepeat; - case SkTileMode::kDecal: - return GrSamplerState::WrapMode::kClampToBorder; - } - SK_ABORT("Unknown tile mode."); -+ SkUNREACHABLE; - } - - std::unique_ptr SkImageShader::asFragmentProcessor( - const GrFPArgs& args) const { - const auto lm = this->totalLocalMatrix(args.fPreLocalMatrix, args.fPostLocalMatrix); - SkMatrix lmInverse; - if (!lm->invert(&lmInverse)) { - return nullptr; -diff --git a/gfx/skia/skia/src/utils/SkShadowUtils.cpp b/gfx/skia/skia/src/utils/SkShadowUtils.cpp ---- a/gfx/skia/skia/src/utils/SkShadowUtils.cpp -+++ b/gfx/skia/skia/src/utils/SkShadowUtils.cpp -@@ -144,16 +144,17 @@ struct SpotVerticesFactory { - // if the offsets don't match. - if (fOffset == that.fOffset) { - translate->set(0, 0); - return true; - } - return false; + /** +Index: firefox-115.0/gfx/skia/skia/src/utils/SkShadowUtils.cpp +=================================================================== +--- firefox-115.0.orig/gfx/skia/skia/src/utils/SkShadowUtils.cpp ++++ firefox-115.0/gfx/skia/skia/src/utils/SkShadowUtils.cpp +@@ -140,6 +140,7 @@ struct SpotVerticesFactory { + return true; } SK_ABORT("Uninitialized occluder type?"); -+ SkUNREACHABLE; ++ SkUNREACHABLE; } sk_sp makeVertices(const SkPath& path, const SkMatrix& ctm, - SkVector* translate) const { - bool transparent = OccluderType::kTransparent == fOccluderType; - SkPoint3 zParams = SkPoint3::Make(0, 0, fOccluderHeight); - if (ctm.hasPerspective() || OccluderType::kOpaquePartialUmbra == fOccluderType) { - translate->set(0, 0); -diff --git a/intl/icu/source/i18n/number_rounding.cpp b/intl/icu/source/i18n/number_rounding.cpp ---- a/intl/icu/source/i18n/number_rounding.cpp -+++ b/intl/icu/source/i18n/number_rounding.cpp -@@ -278,27 +278,29 @@ Precision IncrementPrecision::withMinFra - } - - FractionPrecision Precision::constructFraction(int32_t minFrac, int32_t maxFrac) { - FractionSignificantSettings settings; - settings.fMinFrac = static_cast(minFrac); +Index: firefox-115.0/intl/icu/source/i18n/number_rounding.cpp +=================================================================== +--- firefox-115.0.orig/intl/icu/source/i18n/number_rounding.cpp ++++ firefox-115.0/intl/icu/source/i18n/number_rounding.cpp +@@ -283,6 +283,7 @@ FractionPrecision Precision::constructFr settings.fMaxFrac = static_cast(maxFrac); settings.fMinSig = -1; settings.fMaxSig = -1; @@ -1923,11 +268,7 @@ PrecisionUnion union_; union_.fracSig = settings; return {RND_FRACTION, union_}; - } - - Precision Precision::constructSignificant(int32_t minSig, int32_t maxSig) { - FractionSignificantSettings settings; - settings.fMinFrac = -1; +@@ -294,6 +295,7 @@ Precision Precision::constructSignifican settings.fMaxFrac = -1; settings.fMinSig = static_cast(minSig); settings.fMaxSig = static_cast(maxSig); @@ -1935,20 +276,23 @@ PrecisionUnion union_; union_.fracSig = settings; return {RND_SIGNIFICANT, union_}; +Index: firefox-115.0/js/src/irregexp/imported/regexp-parser.cc +=================================================================== +--- firefox-115.0.orig/js/src/irregexp/imported/regexp-parser.cc ++++ firefox-115.0/js/src/irregexp/imported/regexp-parser.cc +@@ -2656,6 +2656,7 @@ bool MayContainStrings(ClassSetOperandTy + if (operand->IsClassRanges()) return false; + return operand->AsClassSetExpression()->may_contain_strings(); + } ++ UNREACHABLE(); } - Precision - Precision::constructFractionSignificant( - const FractionPrecision &base, -diff --git a/third_party/libwebrtc/api/adaptation/resource.cc b/third_party/libwebrtc/api/adaptation/resource.cc ---- a/third_party/libwebrtc/api/adaptation/resource.cc -+++ b/third_party/libwebrtc/api/adaptation/resource.cc -@@ -17,16 +17,17 @@ namespace webrtc { - const char* ResourceUsageStateToString(ResourceUsageState usage_state) { - switch (usage_state) { - case ResourceUsageState::kOveruse: - return "kOveruse"; - case ResourceUsageState::kUnderuse: + } // namespace +Index: firefox-115.0/third_party/libwebrtc/api/adaptation/resource.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/api/adaptation/resource.cc ++++ firefox-115.0/third_party/libwebrtc/api/adaptation/resource.cc +@@ -22,6 +22,7 @@ const char* ResourceUsageStateToString(R return "kUnderuse"; } RTC_CHECK_NOTREACHED(); @@ -1956,20 +300,11 @@ } ResourceListener::~ResourceListener() {} - - Resource::Resource() {} - - Resource::~Resource() {} - -diff --git a/third_party/libwebrtc/api/rtp_parameters.cc b/third_party/libwebrtc/api/rtp_parameters.cc ---- a/third_party/libwebrtc/api/rtp_parameters.cc -+++ b/third_party/libwebrtc/api/rtp_parameters.cc -@@ -27,16 +27,17 @@ const char* DegradationPreferenceToStrin - case DegradationPreference::MAINTAIN_FRAMERATE: - return "maintain-framerate"; - case DegradationPreference::MAINTAIN_RESOLUTION: - return "maintain-resolution"; - case DegradationPreference::BALANCED: +Index: firefox-115.0/third_party/libwebrtc/api/rtp_parameters.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/api/rtp_parameters.cc ++++ firefox-115.0/third_party/libwebrtc/api/rtp_parameters.cc +@@ -32,6 +32,7 @@ const char* DegradationPreferenceToStrin return "balanced"; } RTC_CHECK_NOTREACHED(); @@ -1977,20 +312,11 @@ } const double kDefaultBitratePriority = 1.0; - - RtcpFeedback::RtcpFeedback() = default; - RtcpFeedback::RtcpFeedback(RtcpFeedbackType type) : type(type) {} - RtcpFeedback::RtcpFeedback(RtcpFeedbackType type, - RtcpFeedbackMessageType message_type) -diff --git a/third_party/libwebrtc/api/video/video_frame_buffer.cc b/third_party/libwebrtc/api/video/video_frame_buffer.cc ---- a/third_party/libwebrtc/api/video/video_frame_buffer.cc -+++ b/third_party/libwebrtc/api/video/video_frame_buffer.cc -@@ -94,16 +94,18 @@ const char* VideoFrameBufferTypeToString - return "kI010"; - case VideoFrameBuffer::Type::kI210: - return "kI210"; - case VideoFrameBuffer::Type::kNV12: - return "kNV12"; +Index: firefox-115.0/third_party/libwebrtc/api/video/video_frame_buffer.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/api/video/video_frame_buffer.cc ++++ firefox-115.0/third_party/libwebrtc/api/video/video_frame_buffer.cc +@@ -106,6 +106,8 @@ const char* VideoFrameBufferTypeToString default: RTC_DCHECK_NOTREACHED(); } @@ -1999,20 +325,11 @@ } int I420BufferInterface::ChromaWidth() const { - return (width() + 1) / 2; - } - - int I420BufferInterface::ChromaHeight() const { - return (height() + 1) / 2; -diff --git a/third_party/libwebrtc/api/video_codecs/video_codec.cc b/third_party/libwebrtc/api/video_codecs/video_codec.cc ---- a/third_party/libwebrtc/api/video_codecs/video_codec.cc -+++ b/third_party/libwebrtc/api/video_codecs/video_codec.cc -@@ -113,16 +113,17 @@ const char* CodecTypeToPayloadString(Vid - case kVideoCodecH264: - return kPayloadNameH264; - case kVideoCodecMultiplex: - return kPayloadNameMultiplex; - case kVideoCodecGeneric: +Index: firefox-115.0/third_party/libwebrtc/api/video_codecs/video_codec.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/api/video_codecs/video_codec.cc ++++ firefox-115.0/third_party/libwebrtc/api/video_codecs/video_codec.cc +@@ -118,6 +118,7 @@ const char* CodecTypeToPayloadString(Vid return kPayloadNameGeneric; } RTC_CHECK_NOTREACHED(); @@ -2020,20 +337,11 @@ } VideoCodecType PayloadStringToCodecType(const std::string& name) { - if (absl::EqualsIgnoreCase(name, kPayloadNameVp8)) - return kVideoCodecVP8; - if (absl::EqualsIgnoreCase(name, kPayloadNameVp9)) - return kVideoCodecVP9; - if (absl::EqualsIgnoreCase(name, kPayloadNameAv1) || -diff --git a/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc b/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc ---- a/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc -+++ b/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc -@@ -158,16 +158,17 @@ class VideoEncoderSoftwareFallbackWrappe - [[fallthrough]]; - case EncoderState::kMainEncoderUsed: - return encoder_.get(); - case EncoderState::kFallbackDueToFailure: - case EncoderState::kForcedFallback: +Index: firefox-115.0/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc ++++ firefox-115.0/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc +@@ -163,6 +163,7 @@ class VideoEncoderSoftwareFallbackWrappe return fallback_encoder_.get(); } RTC_CHECK_NOTREACHED(); @@ -2041,17 +349,7 @@ } // Updates encoder with last observed parameters, such as callbacks, rates, - // etc. - void PrimeEncoder(VideoEncoder* encoder) const; - - // Settings used in the last InitEncode call and used if a dynamic fallback to - // software is required. -@@ -338,16 +339,17 @@ int32_t VideoEncoderSoftwareFallbackWrap - case EncoderState::kMainEncoderUsed: { - return EncodeWithMainEncoder(frame, frame_types); - } - case EncoderState::kFallbackDueToFailure: - case EncoderState::kForcedFallback: +@@ -343,6 +344,7 @@ int32_t VideoEncoderSoftwareFallbackWrap return fallback_encoder_->Encode(frame, frame_types); } RTC_CHECK_NOTREACHED(); @@ -2059,20 +357,11 @@ } int32_t VideoEncoderSoftwareFallbackWrapper::EncodeWithMainEncoder( - const VideoFrame& frame, - const std::vector* frame_types) { - int32_t ret = encoder_->Encode(frame, frame_types); - // If requested, try a software fallback. - bool fallback_requested = (ret == WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE); -diff --git a/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc b/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc ---- a/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc -+++ b/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc -@@ -163,16 +163,17 @@ const char* Adaptation::StatusToString(A - case Status::kInsufficientInput: - return "kInsufficientInput"; - case Status::kAdaptationDisabled: - return "kAdaptationDisabled"; - case Status::kRejectedByConstraint: +Index: firefox-115.0/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc ++++ firefox-115.0/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc +@@ -168,6 +168,7 @@ const char* Adaptation::StatusToString(A return "kRejectedByConstraint"; } RTC_CHECK_NOTREACHED(); @@ -2080,17 +369,7 @@ } Adaptation::Adaptation(int validation_id, - VideoSourceRestrictions restrictions, - VideoAdaptationCounters counters, - VideoStreamInputState input_state) - : validation_id_(validation_id), - status_(Status::kValid), -@@ -385,16 +386,17 @@ VideoStreamAdapter::RestrictionsOrState - case DegradationPreference::MAINTAIN_RESOLUTION: { - // Scale up framerate. - return IncreaseFramerate(input_state, current_restrictions_); - } - case DegradationPreference::DISABLED: +@@ -390,6 +391,7 @@ VideoStreamAdapter::RestrictionsOrState return Adaptation::Status::kAdaptationDisabled; } RTC_CHECK_NOTREACHED(); @@ -2098,17 +377,7 @@ } Adaptation VideoStreamAdapter::GetAdaptationDown() { - RTC_DCHECK_RUN_ON(&sequence_checker_); - VideoStreamInputState input_state = input_state_provider_->InputState(); - ++adaptation_validation_id_; - RestrictionsOrState restrictions_or_state = - GetAdaptationDownStep(input_state, current_restrictions_); -@@ -467,16 +469,17 @@ VideoStreamAdapter::GetAdaptationDownSte - } - case DegradationPreference::MAINTAIN_RESOLUTION: { - return DecreaseFramerate(input_state, current_restrictions); - } - case DegradationPreference::DISABLED: +@@ -472,6 +474,7 @@ VideoStreamAdapter::GetAdaptationDownSte return Adaptation::Status::kAdaptationDisabled; } RTC_CHECK_NOTREACHED(); @@ -2116,17 +385,7 @@ } VideoStreamAdapter::RestrictionsOrState VideoStreamAdapter::DecreaseResolution( - const VideoStreamInputState& input_state, - const RestrictionsWithCounters& current_restrictions) { - int target_pixels = - GetLowerResolutionThan(input_state.frame_size_pixels().value()); - // Use single active stream if set, this stream could be lower than the input. -@@ -620,16 +623,18 @@ Adaptation VideoStreamAdapter::GetAdaptD - case DegradationPreference::MAINTAIN_FRAMERATE: - return GetAdaptationDown(); - case DegradationPreference::BALANCED: { - return RestrictionsOrStateToAdaptation( - GetAdaptDownResolutionStepForBalanced(input_state), input_state); +@@ -625,6 +628,8 @@ Adaptation VideoStreamAdapter::GetAdaptD } } RTC_CHECK_NOTREACHED(); @@ -2135,20 +394,24 @@ } VideoStreamAdapter::RestrictionsOrState - VideoStreamAdapter::GetAdaptDownResolutionStepForBalanced( - const VideoStreamInputState& input_state) const { - // Adapt twice if the first adaptation did not decrease resolution. - auto first_step = GetAdaptationDownStep(input_state, current_restrictions_); - if (!absl::holds_alternative(first_step)) { -diff --git a/third_party/libwebrtc/call/video_send_stream.cc b/third_party/libwebrtc/call/video_send_stream.cc ---- a/third_party/libwebrtc/call/video_send_stream.cc -+++ b/third_party/libwebrtc/call/video_send_stream.cc -@@ -25,16 +25,17 @@ const char* StreamTypeToString(VideoSend - case VideoSendStream::StreamStats::StreamType::kMedia: - return "media"; - case VideoSendStream::StreamStats::StreamType::kRtx: - return "rtx"; - case VideoSendStream::StreamStats::StreamType::kFlexfec: +Index: firefox-115.0/third_party/libwebrtc/call/rtp_payload_params.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/call/rtp_payload_params.cc ++++ firefox-115.0/third_party/libwebrtc/call/rtp_payload_params.cc +@@ -407,7 +407,7 @@ absl::optional + case VideoCodecType::kVideoCodecMultiplex: + return absl::nullopt; + } +- RTC_DCHECK_NOTREACHED() << "Unsupported codec."; ++ RTC_CHECK_NOTREACHED(); + } + + void RtpPayloadParams::GenericToGeneric(int64_t shared_frame_id, +Index: firefox-115.0/third_party/libwebrtc/call/video_send_stream.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/call/video_send_stream.cc ++++ firefox-115.0/third_party/libwebrtc/call/video_send_stream.cc +@@ -30,6 +30,7 @@ const char* StreamTypeToString(VideoSend return "flexfec"; } RTC_CHECK_NOTREACHED(); @@ -2156,20 +419,36 @@ } } // namespace - - VideoSendStream::StreamStats::StreamStats() = default; - VideoSendStream::StreamStats::~StreamStats() = default; +Index: firefox-115.0/third_party/libwebrtc/modules/audio_processing/agc2/clipping_predictor.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/audio_processing/agc2/clipping_predictor.cc ++++ firefox-115.0/third_party/libwebrtc/modules/audio_processing/agc2/clipping_predictor.cc +@@ -378,7 +378,7 @@ std::unique_ptr Creat + config.reference_window_delay, config.clipping_threshold, + /*adaptive_step_estimation=*/false); + } +- RTC_DCHECK_NOTREACHED(); ++ RTC_CHECK_NOTREACHED(); + } - std::string VideoSendStream::StreamStats::ToString() const { -diff --git a/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc b/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc ---- a/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc -+++ b/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc -@@ -54,16 +54,18 @@ std::vector PreprocessWeights(rtc - rtc::FunctionView GetActivationFunction( - ActivationFunction activation_function) { - switch (activation_function) { - case ActivationFunction::kTansigApproximated: - return ::rnnoise::TansigApproximated; + } // namespace webrtc +Index: firefox-115.0/third_party/libwebrtc/modules/audio_processing/agc2/input_volume_stats_reporter.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/audio_processing/agc2/input_volume_stats_reporter.cc ++++ firefox-115.0/third_party/libwebrtc/modules/audio_processing/agc2/input_volume_stats_reporter.cc +@@ -48,6 +48,7 @@ constexpr absl::string_view MetricNamePr + case InputVolumeType::kRecommended: + return "WebRTC.Audio.Apm.RecommendedInputVolume."; + } ++ RTC_CHECK_NOTREACHED(); + } + + metrics::Histogram* CreateVolumeHistogram(InputVolumeType input_volume_type) { +Index: firefox-115.0/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc ++++ firefox-115.0/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc +@@ -59,6 +59,8 @@ rtc::FunctionView GetActiv case ActivationFunction::kSigmoidApproximated: return ::rnnoise::SigmoidApproximated; } @@ -2178,20 +457,11 @@ } } // namespace - - FullyConnectedLayer::FullyConnectedLayer( - const int input_size, - const int output_size, - const rtc::ArrayView bias, -diff --git a/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc b/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc ---- a/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc -+++ b/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc -@@ -115,16 +115,17 @@ GainControl::Mode Agc1ConfigModeToInterf - case Agc1Config::kAdaptiveAnalog: - return GainControl::kAdaptiveAnalog; - case Agc1Config::kAdaptiveDigital: - return GainControl::kAdaptiveDigital; - case Agc1Config::kFixedDigital: +Index: firefox-115.0/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc ++++ firefox-115.0/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc +@@ -99,6 +99,7 @@ GainControl::Mode Agc1ConfigModeToInterf return GainControl::kFixedDigital; } RTC_CHECK_NOTREACHED(); @@ -2199,17 +469,16 @@ } bool MinimizeProcessingForUnusedOutput() { - return !field_trial::IsEnabled("WebRTC-MutedStateKillSwitch"); +@@ -166,7 +167,7 @@ int AudioFormatValidityToErrorCode(Audio + case AudioFormatValidity::kInvalidChannelCount: + return AudioProcessing::kBadNumberChannelsError; + } +- RTC_DCHECK(false); ++ RTC_CHECK_NOTREACHED(); } - // Maximum lengths that frame of samples being passed from the render side to - // the capture side can have (does not apply to AEC3). -@@ -1989,16 +1990,17 @@ void AudioProcessingImpl::InitializeNois - case NoiseSuppresionConfig::kModerate: - return NsConfig::SuppressionLevel::k12dB; - case NoiseSuppresionConfig::kHigh: - return NsConfig::SuppressionLevel::k18dB; - case NoiseSuppresionConfig::kVeryHigh: + // Returns an AudioProcessing::Error together with the best possible option for +@@ -2421,6 +2422,7 @@ void AudioProcessingImpl::InitializeNois return NsConfig::SuppressionLevel::k21dB; } RTC_CHECK_NOTREACHED(); @@ -2217,20 +486,11 @@ }; NsConfig cfg; - cfg.target_level = map_level(config_.noise_suppression.level); - submodules_.noise_suppressor = std::make_unique( - cfg, proc_sample_rate_hz(), num_proc_channels()); - } - } -diff --git a/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc b/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc ---- a/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc -+++ b/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc -@@ -27,28 +27,30 @@ std::string NoiseSuppressionLevelToStrin - case AudioProcessing::Config::NoiseSuppression::Level::kModerate: - return "Moderate"; - case AudioProcessing::Config::NoiseSuppression::Level::kHigh: - return "High"; - case AudioProcessing::Config::NoiseSuppression::Level::kVeryHigh: +Index: firefox-115.0/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc ++++ firefox-115.0/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc +@@ -32,6 +32,7 @@ std::string NoiseSuppressionLevelToStrin return "VeryHigh"; } RTC_CHECK_NOTREACHED(); @@ -2238,12 +498,7 @@ } std::string GainController1ModeToString(const Agc1Config::Mode& mode) { - switch (mode) { - case Agc1Config::Mode::kAdaptiveAnalog: - return "AdaptiveAnalog"; - case Agc1Config::Mode::kAdaptiveDigital: - return "AdaptiveDigital"; - case Agc1Config::Mode::kFixedDigital: +@@ -44,6 +45,7 @@ std::string GainController1ModeToString( return "FixedDigital"; } RTC_CHECK_NOTREACHED(); @@ -2251,20 +506,35 @@ } } // namespace - - constexpr int AudioProcessing::kNativeSampleRatesHz[]; +Index: firefox-115.0/third_party/libwebrtc/modules/audio_processing/transient/transient_suppressor_impl.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/audio_processing/transient/transient_suppressor_impl.cc ++++ firefox-115.0/third_party/libwebrtc/modules/audio_processing/transient/transient_suppressor_impl.cc +@@ -53,6 +53,7 @@ std::string GetVadModeLabel(TransientSup + case TransientSuppressor::VadMode::kNoVad: + return "no VAD"; + } ++ RTC_CHECK_NOTREACHED(); + } - void CustomProcessing::SetRuntimeSetting( - AudioProcessing::RuntimeSetting setting) {} -diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc ---- a/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc -+++ b/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc -@@ -33,11 +33,12 @@ std::unique_ptr Cr - return std::make_unique(); - case kVideoCodecAV1: - return std::make_unique(); - case kVideoCodecGeneric: - case kVideoCodecMultiplex: + } // namespace +Index: firefox-115.0/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc ++++ firefox-115.0/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc +@@ -44,6 +44,7 @@ ScreenCastPortal::CaptureSourceType Scre + case CaptureType::kAnyScreenContent: + return ScreenCastPortal::CaptureSourceType::kAnyScreenContent; + } ++ RTC_CHECK_NOTREACHED(); + } + + ScreenCastPortal::ScreenCastPortal(CaptureType type, PortalNotifier* notifier) +Index: firefox-115.0/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc ++++ firefox-115.0/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc +@@ -38,6 +38,7 @@ std::unique_ptr Cr return std::make_unique(); } RTC_CHECK_NOTREACHED(); @@ -2272,15 +542,11 @@ } } // namespace webrtc -diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc ---- a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc -+++ b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc -@@ -137,16 +137,17 @@ bool IsNonVolatile(RTPExtensionType type - #if defined(WEBRTC_MOZILLA_BUILD) - case kRtpExtensionCsrcAudioLevel: - // TODO: Mozilla implement for CsrcAudioLevel - RTC_CHECK(false); - return false; +Index: firefox-115.0/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc ++++ firefox-115.0/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc +@@ -142,6 +142,7 @@ bool IsNonVolatile(RTPExtensionType type #endif } RTC_CHECK_NOTREACHED(); @@ -2288,20 +554,11 @@ } bool HasBweExtension(const RtpHeaderExtensionMap& extensions_map) { - return extensions_map.IsRegistered(kRtpExtensionTransportSequenceNumber) || - extensions_map.IsRegistered(kRtpExtensionTransportSequenceNumber02) || - extensions_map.IsRegistered(kRtpExtensionAbsoluteSendTime) || - extensions_map.IsRegistered(kRtpExtensionTransmissionTimeOffset); - } -diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc ---- a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc -+++ b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc -@@ -40,16 +40,17 @@ namespace { - case AudioFrameType::kEmptyFrame: - return "empty"; - case AudioFrameType::kAudioFrameSpeech: - return "audio_speech"; - case AudioFrameType::kAudioFrameCN: +Index: firefox-115.0/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc ++++ firefox-115.0/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc +@@ -45,6 +45,7 @@ namespace { return "audio_cn"; } RTC_CHECK_NOTREACHED(); @@ -2309,20 +566,23 @@ } constexpr char kIncludeCaptureClockOffset[] = - "WebRTC-IncludeCaptureClockOffset"; +Index: firefox-115.0/third_party/libwebrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc ++++ firefox-115.0/third_party/libwebrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc +@@ -110,6 +110,7 @@ size_t BufferToIndex(Vp8BufferReference + case Vp8FrameConfig::Vp8BufferReference::kNone: + RTC_CHECK_NOTREACHED(); + } ++ RTC_CHECK_NOTREACHED(); + } } // namespace - - RTPSenderAudio::RTPSenderAudio(Clock* clock, RTPSender* rtp_sender) -diff --git a/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc b/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc ---- a/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc -+++ b/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc -@@ -25,16 +25,17 @@ TemporalLayersChecker::CreateTemporalLay - case Vp8TemporalLayersType::kFixedPattern: - return std::make_unique( - num_temporal_layers); - case Vp8TemporalLayersType::kBitrateDynamic: - // Conference mode temporal layering for screen content in base stream. +Index: firefox-115.0/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc ++++ firefox-115.0/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc +@@ -30,6 +30,7 @@ TemporalLayersChecker::CreateTemporalLay return std::make_unique(num_temporal_layers); } RTC_CHECK_NOTREACHED(); @@ -2330,20 +590,11 @@ } TemporalLayersChecker::TemporalLayersChecker(int num_temporal_layers) - : num_temporal_layers_(num_temporal_layers), - sequence_number_(0), - last_sync_sequence_number_(0), - last_tl0_sequence_number_(0) {} - -diff --git a/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc b/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc ---- a/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc -+++ b/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc -@@ -58,16 +58,17 @@ bool IsFramerateScalingEnabled(Degradati - std::string ToString(VideoAdaptationReason reason) { - switch (reason) { - case VideoAdaptationReason::kQuality: - return "quality"; - case VideoAdaptationReason::kCpu: +Index: firefox-115.0/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc +=================================================================== +--- firefox-115.0.orig/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc ++++ firefox-115.0/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc +@@ -63,6 +63,7 @@ std::string ToString(VideoAdaptationReas return "cpu"; } RTC_CHECK_NOTREACHED(); @@ -2351,256 +602,3 @@ } std::vector GetActiveLayersFlags(const VideoCodec& codec) { - std::vector flags; - if (codec.codecType == VideoCodecType::kVideoCodecVP9) { - flags.resize(codec.VP9().numberOfSpatialLayers); - for (size_t i = 0; i < flags.size(); ++i) { - flags[i] = codec.spatialLayers[i].active; -diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp ---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp -+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp -@@ -2646,16 +2646,17 @@ get_type_name_for_precision_qualifier(co - unreachable("Unsupported sampler/image type"); - } /* sampler/image type */ - break; - } /* GLSL_TYPE_SAMPLER/GLSL_TYPE_IMAGE */ - break; - default: - unreachable("Unsupported type"); - } /* base type */ -+ return ""; - } - - static unsigned - select_gles_precision(unsigned qual_precision, - const glsl_type *type, - struct _mesa_glsl_parse_state *state, YYLTYPE *loc) - { - /* Precision qualifiers do not have any meaning in Desktop GLSL. -diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp ---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp -+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp -@@ -619,16 +619,17 @@ ir_expression::get_num_operands(ir_expre - - if (op <= ir_last_triop) - return 3; - - if (op <= ir_last_quadop) - return 4; - - unreachable("Could not calculate number of operands"); -+ return -1; - } - - #include "ir_expression_operation_strings.h" - - const char* - depth_layout_string(ir_depth_layout layout) - { - switch(layout) { -diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp ---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp -+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp -@@ -234,16 +234,17 @@ incremented_before_terminator(ir_loop *l - } - - default: - break; - } - } - - unreachable("Unable to find induction variable"); -+ return false; - } - - /** - * Record the fact that the given loop variable was referenced inside the loop. - * - * \arg in_assignee is true if the reference was on the LHS of an assignment. - * - * \arg in_conditional_code_or_nested_loop is true if the reference occurred -diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp ---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp -+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp -@@ -224,16 +224,17 @@ write_mask_to_swizzle(unsigned write_mas - { - switch (write_mask) { - case WRITEMASK_X: return SWIZZLE_X; - case WRITEMASK_Y: return SWIZZLE_Y; - case WRITEMASK_Z: return SWIZZLE_Z; - case WRITEMASK_W: return SWIZZLE_W; - } - unreachable("not reached"); -+ return 0; - } - - /** - * Returns whether a single-channeled write mask matches a swizzle. - */ - static bool - write_mask_matches_swizzle(unsigned write_mask, - const ir_swizzle *swz) -diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp ---- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp -+++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp -@@ -455,16 +455,17 @@ const glsl_type *glsl_type::get_bare_typ - case GLSL_TYPE_VOID: - case GLSL_TYPE_SUBROUTINE: - case GLSL_TYPE_FUNCTION: - case GLSL_TYPE_ERROR: - return this; - } - - unreachable("Invalid base type"); -+ return nullptr; - } - - const glsl_type *glsl_type::get_float16_type() const - { - assert(this->base_type == GLSL_TYPE_FLOAT); - - return get_instance(GLSL_TYPE_FLOAT16, - this->vector_elements, -@@ -2011,16 +2012,17 @@ glsl_type::get_explicit_std140_type(bool - (enum glsl_interface_packing)this->interface_packing, - this->interface_row_major, - this->name); - - delete[] fields; - return type; - } else { - unreachable("Invalid type for UBO or SSBO"); -+ return nullptr; - } - } - - unsigned - glsl_type::std430_base_alignment(bool row_major) const - { - - unsigned N = is_64bit() ? 8 : 4; -@@ -2369,16 +2371,17 @@ glsl_type::get_explicit_std430_type(bool - (enum glsl_interface_packing)this->interface_packing, - this->interface_row_major, - this->name); - - delete[] fields; - return type; - } else { - unreachable("Invalid type for SSBO"); -+ return nullptr; - } - } - - const glsl_type * - glsl_type::get_explicit_interface_type(bool supports_std430) const - { - enum glsl_interface_packing packing = - this->get_internal_ifc_packing(supports_std430); -@@ -2443,16 +2446,17 @@ glsl_type::get_explicit_type_for_size_al - unsigned stride = align(col_size, col_align); - - *size = this->matrix_columns * stride; - *alignment = col_align; - return glsl_type::get_instance(this->base_type, this->vector_elements, - this->matrix_columns, stride, false); - } else { - unreachable("Unhandled type."); -+ return nullptr; - } - } - - unsigned - glsl_type::count_vec4_slots(bool is_gl_vertex_input, bool is_bindless) const - { - /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec: - * -@@ -2943,12 +2947,13 @@ glsl_get_sampler_dim_coordinate_componen - case GLSL_SAMPLER_DIM_SUBPASS: - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return 2; - case GLSL_SAMPLER_DIM_3D: - case GLSL_SAMPLER_DIM_CUBE: - return 3; - default: - unreachable("Unknown sampler dim"); -+ return -1; - } - } - - } -diff --git a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h ---- a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h -+++ b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h -@@ -180,16 +180,17 @@ static inline gl_shader_stage - case GL_COMPUTE_SUBROUTINE_UNIFORM: - return MESA_SHADER_COMPUTE; - case GL_TESS_CONTROL_SUBROUTINE_UNIFORM: - return MESA_SHADER_TESS_CTRL; - case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM: - return MESA_SHADER_TESS_EVAL; - } - unreachable("not reached"); -+ return MESA_SHADER_NONE; - } - - static inline gl_shader_stage - _mesa_shader_stage_from_subroutine(GLenum subroutine) - { - switch (subroutine) { - case GL_VERTEX_SUBROUTINE: - return MESA_SHADER_VERTEX; -@@ -200,16 +201,17 @@ static inline gl_shader_stage - case GL_COMPUTE_SUBROUTINE: - return MESA_SHADER_COMPUTE; - case GL_TESS_CONTROL_SUBROUTINE: - return MESA_SHADER_TESS_CTRL; - case GL_TESS_EVALUATION_SUBROUTINE: - return MESA_SHADER_TESS_EVAL; - } - unreachable("not reached"); -+ return MESA_SHADER_NONE; - } - - static inline GLenum - _mesa_shader_stage_to_subroutine(gl_shader_stage stage) - { - switch (stage) { - case MESA_SHADER_VERTEX: - return GL_VERTEX_SUBROUTINE; -@@ -225,16 +227,17 @@ static inline GLenum - return GL_TESS_EVALUATION_SUBROUTINE; - case MESA_SHADER_NONE: - break; - case MESA_SHADER_KERNEL: - unreachable("not reached"); - break; - } - unreachable("not reached"); -+ return GL_VERTEX_PROGRAM_ARB; - } - - static inline GLenum - _mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage) - { - switch (stage) { - case MESA_SHADER_VERTEX: - return GL_VERTEX_SUBROUTINE_UNIFORM; -@@ -248,16 +251,17 @@ static inline GLenum - return GL_TESS_CONTROL_SUBROUTINE_UNIFORM; - case MESA_SHADER_TESS_EVAL: - return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM; - case MESA_SHADER_NONE: - case MESA_SHADER_KERNEL: - break; - } - unreachable("not reached"); -+ return GL_VERTEX_PROGRAM_ARB; - } - - extern bool - _mesa_validate_pipeline_io(struct gl_pipeline_object *); - - #ifdef __cplusplus - } - #endif diff -r ba0c97b018a6 -r 2a24a948b5cf one_swizzle_to_rule_them_all.patch --- a/one_swizzle_to_rule_them_all.patch Mon Jun 05 21:17:55 2023 +0200 +++ b/one_swizzle_to_rule_them_all.patch Sat Jul 29 14:34:45 2023 +0200 @@ -6,10 +6,10 @@ # Parent 81832d035e101471dcf52dd91de287268add7a91 imported patch one_swizzle_to_rule_them_all.patch -Index: firefox-102.0/gfx/webrender_bindings/RenderCompositorSWGL.cpp +Index: firefox-115.0/gfx/webrender_bindings/RenderCompositorSWGL.cpp =================================================================== ---- firefox-102.0.orig/gfx/webrender_bindings/RenderCompositorSWGL.cpp -+++ firefox-102.0/gfx/webrender_bindings/RenderCompositorSWGL.cpp +--- firefox-115.0.orig/gfx/webrender_bindings/RenderCompositorSWGL.cpp ++++ firefox-115.0/gfx/webrender_bindings/RenderCompositorSWGL.cpp @@ -7,6 +7,7 @@ #include "RenderCompositorSWGL.h" @@ -18,7 +18,7 @@ #include "mozilla/widget/CompositorWidget.h" #ifdef MOZ_WIDGET_GTK -@@ -235,6 +237,13 @@ void RenderCompositorSWGL::CommitMappedB +@@ -242,6 +243,13 @@ void RenderCompositorSWGL::CommitMappedB } mDT->Flush(); diff -r ba0c97b018a6 -r 2a24a948b5cf series --- a/series Mon Jun 05 21:17:55 2023 +0200 +++ b/series Sat Jul 29 14:34:45 2023 +0200 @@ -7,20 +7,20 @@ mozilla-s390-context.patch mozilla-pgo.patch mozilla-reduce-rust-debuginfo.patch -mozilla-bmo1005535.patch mozilla-bmo1504834-part1.patch mozilla-bmo1504834-part3.patch mozilla-bmo1512162.patch mozilla-fix-top-level-asm.patch mozilla-bmo849632.patch mozilla-bmo998749.patch -mozilla-s390x-skia-gradient.patch mozilla-libavcodec58_91.patch mozilla-silence-no-return-type.patch mozilla-bmo531915.patch one_swizzle_to_rule_them_all.patch svg-rendering.patch -mozilla-buildfixes.patch +mozilla-partial-revert-1768632.patch +mozilla-bmo1775202.patch +mozilla-rust-disable-future-incompat.patch # Firefox patches firefox-kde.patch