Firefox 68.0 firefox68
authorWolfgang Rosenauer <wr@rosenauer.org>
Wed, 10 Jul 2019 08:14:34 +0200
branchfirefox68
changeset 1097 840132a4a9b3
parent 1096 4c248180e576
child 1098 538cbf0bbdca
Firefox 68.0
MozillaFirefox/MozillaFirefox.changes
MozillaFirefox/MozillaFirefox.spec
MozillaFirefox/create-tar.sh
MozillaFirefox/mozilla-bmo1005535.patch
MozillaFirefox/mozilla-gcc-internal-compiler-error.patch
MozillaFirefox/mozilla-ppc-altivec_static_inline.patch
MozillaFirefox/mozilla-reduce-rust-debuginfo.patch
MozillaFirefox/mozilla-s390-bigendian.patch
MozillaFirefox/mozilla-s390-context.patch
MozillaFirefox/source-stamp.txt
MozillaFirefox/tar_stamps
firefox-kde.patch
mozilla-aarch64-startup-crash.patch
mozilla-bmo1005535.patch
mozilla-gcc-internal-compiler-error.patch
mozilla-kde.patch
mozilla-nongnome-proxies.patch
mozilla-ppc-altivec_static_inline.patch
mozilla-reduce-rust-debuginfo.patch
mozilla-s390-bigendian.patch
mozilla-s390-context.patch
series
--- a/MozillaFirefox/MozillaFirefox.changes	Mon Jul 08 12:56:52 2019 +0200
+++ b/MozillaFirefox/MozillaFirefox.changes	Wed Jul 10 08:14:34 2019 +0200
@@ -1,4 +1,79 @@
 -------------------------------------------------------------------
+Mon Jul  8 13:30:35 UTC 2019 - Wolfgang Rosenauer <wr@rosenauer.org>
+
+- Mozilla Firefox 68.0
+  * Dark mode in reader view
+  * Improved extension security and discovery
+  * Cryptomining and fingerprinting protections are added to strict
+    content blocking settings in Privacy & Security preferences
+  * Camera and microphone access now require an HTTPS connection
+  MFSA 2019-21 (bsc#1140868)
+  * CVE-2019-9811 (bmo#1538007, bmo#1539598, bmo#1563327)
+    Sandbox escape via installation of malicious languagepack
+  * CVE-2019-11711 (bmo#1552541)
+    Script injection within domain through inner window reuse
+  * CVE-2019-11712 (bmo#1543804)
+    Cross-origin POST requests can be made with NPAPI plugins by
+    following 308 redirects
+  * CVE-2019-11713 (bmo#1528481)
+    Use-after-free with HTTP/2 cached stream
+  * CVE-2019-11714 (bmo#1542593)
+    NeckoChild can trigger crash when accessed off of main thread
+  * CVE-2019-11729 (bmo#1515342)
+    Empty or malformed p256-ECDH public keys may trigger a segmentation fault
+  * CVE-2019-11715 (bmo#1555523)
+    HTML parsing error can contribute to content XSS
+  * CVE-2019-11716 (bmo#1552632)
+    globalThis not enumerable until accessed
+  * CVE-2019-11717 (bmo#1548306)
+    Caret character improperly escaped in origins
+  * CVE-2019-11718 (bmo#1408349)
+    Activity Stream writes unsanitized content to innerHTML
+  * CVE-2019-11719 (bmo#1540541)
+    Out-of-bounds read when importing curve25519 private key
+  * CVE-2019-11720 (bmo#1556230)
+    Character encoding XSS vulnerability
+  * CVE-2019-11721 (bmo#1256009)
+    Domain spoofing through unicode latin 'kra' character
+  * CVE-2019-11730 (bmo#1558299)
+    Same-origin policy treats all files in a directory as having the
+    same-origin
+  * CVE-2019-11723 (bmo#1528335)
+    Cookie leakage during add-on fetching across private browsing boundaries
+  * CVE-2019-11724 (bmo#1512511)
+    Retired site input.mozilla.org has remote troubleshooting permissions
+  * CVE-2019-11725 (bmo#1483510)
+    Websocket resources bypass safebrowsing protections
+  * CVE-2019-11727 (bmo#1552208)
+    PKCS#1 v1.5 signatures can be used for TLS 1.3
+  * CVE-2019-11728 (bmo#1552993)
+    Port scanning through Alt-Svc header
+  * CVE-2019-11710 (bmo#1549768, bmo#1548611, bmo#1533842, bmo#1537692,
+    bmo#1540590, bmo#1551907, bmo#1510345, bmo#1535482, bmo#1535848,
+    bmo#1547472, bmo#1547760, bmo#1507696, bmo#1544180)
+    Memory safety bugs fixed in Firefox 68
+  * CVE-2019-11709 (bmo#1547266, bmo#1540759, bmo#1548822, bmo#1550498
+    bmo#1515052, bmo#1539219, bmo#1547757, bmo#1550498, bmo#1533522)
+    Memory safety bugs fixed in Firefox 68 and Firefox ESR 60.8
+- requires
+  * NSS 3.44.1
+  * rust/cargo 1.34
+  * rust-cbindgen 0.8.7
+- rebased patches
+  * mozilla-aarch64-startup-crash.patch
+  * mozilla-kde.patch
+  * mozilla-nongnome-proxies.patch
+  * firefox-kde.patch
+- use new create-tar.sh and add tar_stamps for package definitions
+- added patches imported from SLE flavour
+  * mozilla-gcc-internal-compiler-error.patch
+  * mozilla-bmo1005535.patch
+  * mozilla-ppc-altivec_static_inline.patch
+  * mozilla-reduce-rust-debuginfo.patch
+  * mozilla-s390-bigendian.patch
+  * mozilla-s390-context.patch
+
+-------------------------------------------------------------------
 Mon Jul  2 14:15:17 UTC 2019 - Martin Liška <mliska@suse.cz>
 
 - Enable PGO for x86_64.
--- a/MozillaFirefox/MozillaFirefox.spec	Mon Jul 08 12:56:52 2019 +0200
+++ b/MozillaFirefox/MozillaFirefox.spec	Wed Jul 10 08:14:34 2019 +0200
@@ -2,7 +2,7 @@
 # spec file for package MozillaFirefox
 #
 # Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
-#               2006-2019 Wolfgang Rosenauer
+#               2006-2019 Wolfgang Rosenauer <wr@rosenauer.org>
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,13 +18,13 @@
 
 
 # changed with every update
-%define major          67
-%define mainver        %major.0.4
-%define orig_version   67.0.4
+%define major          68
+%define mainver        %major.0
+%define orig_version   68.0
 %define orig_suffix    %{nil}
 %define update_channel release
 %define branding       1
-%define releasedate    20190619235627
+%define releasedate    20190705220548
 %define source_prefix  firefox-%{orig_version}
 
 # always build with GCC as SUSE Security Team requires that
@@ -70,7 +70,7 @@
 %else
 BuildRequires:  gcc-c++
 %endif
-BuildRequires:  cargo >= 1.32
+BuildRequires:  cargo >= 1.34
 BuildRequires:  libXcomposite-devel
 BuildRequires:  libcurl-devel
 BuildRequires:  libidl-devel
@@ -79,14 +79,14 @@
 BuildRequires:  libproxy-devel
 BuildRequires:  makeinfo
 BuildRequires:  mozilla-nspr-devel >= 4.21
-BuildRequires:  mozilla-nss-devel >= 3.43
+BuildRequires:  mozilla-nss-devel >= 3.44.1
 BuildRequires:  nasm >= 2.13
 BuildRequires:  nodejs >= 8.11
 BuildRequires:  python-devel
 BuildRequires:  python2-xml
 BuildRequires:  python3 >= 3.5
-BuildRequires:  rust >= 1.32
-BuildRequires:  rust-cbindgen >= 0.8.2
+BuildRequires:  rust >= 1.34
+BuildRequires:  rust-cbindgen >= 0.8.7
 BuildRequires:  startup-notification-devel
 BuildRequires:  unzip
 BuildRequires:  update-desktop-files
@@ -95,7 +95,7 @@
 BuildRequires:  yasm
 BuildRequires:  zip
 %if 0%{?suse_version} < 1550
-BuildRequires:  pkgconfig(gconf-2.0)
+BuildRequires:  pkgconfig(gconf-2.0) >= 1.2.1
 %endif
 BuildRequires:  pkgconfig(gdk-x11-2.0)
 BuildRequires:  pkgconfig(glib-2.0) >= 2.22
@@ -138,6 +138,7 @@
 Source1:        MozillaFirefox.desktop
 Source2:        MozillaFirefox-rpmlintrc
 Source3:        mozilla.sh.in
+Source4:        tar_stamps
 Source5:        source-stamp.txt
 Source6:        kde.js
 Source7:        l10n-%{orig_version}%{orig_suffix}.tar.xz
@@ -147,7 +148,7 @@
 Source11:       firefox.1
 Source12:       mozilla-get-app-id
 Source13:       spellcheck.js
-Source14:       create-tar.sh
+Source14:       https://github.com/openSUSE/firefox-scripts/raw/master/create-tar.sh
 Source15:       firefox-appdata.xml
 Source16:       MozillaFirefox.changes
 # Set up API keys, see http://www.chromium.org/developers/how-tos/api-keys
@@ -155,18 +156,24 @@
 # please get your own set of keys.
 Source18:       mozilla-api-key
 Source19:       google-api-key
-Source20:       http://ftp.mozilla.org/pub/firefox/releases/%{version}/source/firefox-%{orig_version}%{orig_suffix}.source.tar.xz.asc
+Source20:       https://ftp.mozilla.org/pub/%{progname}/releases/%{version}/source/%{progname}-%{orig_version}%{orig_suffix}.source.tar.xz.asc
 Source21:       mozilla.keyring
 # Gecko/Toolkit
 Patch1:         mozilla-nongnome-proxies.patch
 Patch2:         mozilla-kde.patch
 Patch3:         mozilla-ntlm-full-path.patch
 Patch4:         mozilla-openaes-decl.patch
-Patch7:         mozilla-aarch64-startup-crash.patch
-Patch9:         mozilla-bmo1463035.patch
-Patch10:        mozilla-cubeb-noreturn.patch
-Patch11:        mozilla-fix-aarch64-libopus.patch
-Patch12:        mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch
+Patch5:         mozilla-aarch64-startup-crash.patch
+Patch6:         mozilla-bmo1463035.patch
+Patch7:         mozilla-cubeb-noreturn.patch
+Patch8:         mozilla-fix-aarch64-libopus.patch
+Patch9:         mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch
+Patch10:        mozilla-gcc-internal-compiler-error.patch
+Patch11:        mozilla-s390-context.patch
+Patch12:        mozilla-s390-bigendian.patch
+Patch13:        mozilla-reduce-rust-debuginfo.patch
+Patch14:        mozilla-ppc-altivec_static_inline.patch
+Patch15:        mozilla-bmo1005535.patch
 # Firefox/browser
 Patch101:       firefox-kde.patch
 Patch102:       firefox-branded-icons.patch
@@ -209,7 +216,7 @@
 %package translations-common
 Summary:        Common translations for %{appname}
 Group:          System/Localization
-Provides:       locale(%{name}:ar;ca;cs;da;de;en_GB;el;es_AR;es_CL;es_ES;fi;fr;hu;it;ja;ko;nb_NO;nl;pl;pt_BR;pt_PT;ru;sv_SE;zh_CN;zh_TW)
+Provides:       locale(%{name}:ar;ca;cs;da;de;el;en_GB;es_AR;es_CL;es_ES;fi;fr;hu;it;ja;ko;nb_NO;nl;pl;pt_BR;pt_PT;ru;sv_SE;zh_CN;zh_TW)
 Requires:       %{name} = %{version}
 Obsoletes:      %{name}-translations < %{version}-%{release}
 
@@ -262,6 +269,15 @@
 
 %prep
 %if %localize
+
+# If generated incorrectly, the tarball will be ~270B in
+# size, so 1MB seems like good enough limit to check.
+MINSIZE=1048576
+if (( $(stat -c%s "%{SOURCE7}") < MINSIZE)); then
+    echo "Translations tarball %{SOURCE7} not generated properly."
+    exit 1
+fi
+
 %setup -q -n %{source_prefix} -b 7 -b 10
 %else
 %setup -q -n %{source_prefix}
@@ -271,11 +287,19 @@
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
+%patch5 -p1
+%patch6 -p1
 %patch7 -p1
+%patch8 -p1
 %patch9 -p1
 %patch10 -p1
 %patch11 -p1
+%ifarch s390x
 %patch12 -p1
+%endif
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
 # Firefox
 %patch101 -p1
 %patch102 -p1
@@ -283,7 +307,7 @@
 
 %build
 # no need to add build time to binaries
-modified="$(sed -n '/^----/n;s/ - .*$//;p;q' "%{_sourcedir}/MozillaFirefox.changes")"
+modified="$(sed -n '/^----/n;s/ - .*$//;p;q' "%{_sourcedir}/%{name}.changes")"
 DATE="\"$(date -d "${modified}" "+%%b %%e %%Y")\""
 TIME="\"$(date -d "${modified}" "+%%R")\""
 find . -regex ".*\.c\|.*\.cpp\|.*\.h" -exec sed -i "s/__DATE__/${DATE}/g;s/__TIME__/${TIME}/g" {} +
@@ -441,7 +465,7 @@
         rm -rf %{buildroot}%{progdir}/browser/extensions/langpack-$locale@firefox.mozilla.org/hyphenation
         # check against the fixed common list and sort into the right filelist
         _matched=0
-        for _match in ar ca cs da de en-GB el es-AR es-CL es-ES fi fr hu it ja ko nb-NO nl pl pt-BR pt-PT ru sv-SE zh-CN zh-TW; do
+        for _match in ar ca cs da de el en-GB es-AR es-CL es-ES fi fr hu it ja ko nb-NO nl pl pt-BR pt-PT ru sv-SE zh-CN zh-TW; do
             [ "$_match" = "$locale" ] && _matched=1
         done
         [ $_matched -eq 1 ] && _l10ntarget=common || _l10ntarget=other
--- a/MozillaFirefox/create-tar.sh	Mon Jul 08 12:56:52 2019 +0200
+++ b/MozillaFirefox/create-tar.sh	Wed Jul 10 08:14:34 2019 +0200
@@ -1,20 +1,124 @@
 #!/bin/bash
 
-# TODO
-# http://ftp.mozilla.org/pub/firefox/candidates/48.0-candidates/build2/linux-x86_64/en-US/firefox-48.0.json
-# "moz_source_stamp": "c1de04f39fa956cfce83f6065b0e709369215ed5"
-# http://ftp.mozilla.org/pub/firefox/candidates/48.0-candidates/build2/l10n_changesets.txt
+function print_usage_and_exit() {
+  echo "Usage: create-tar.sh tar_stamp"
+  echo ""
+  echo "Where tar_stamp should look like this:"
+  echo ""
+  cat << EOF
+# Node ID: 64ee63facd4ff96b3e8590cff559d7e97ac6b061
+PRODUCT="firefox" # "firefox" or "thunderbird"
+CHANNEL="esr60"
+VERSION="60.7.0"
+VERSION_SUFFIX="esr"
+FF_RELEASE_TAG="" # Needs only to be set if no tar-ball can be downloaded
+TB_RELEASE_TAG="" # Only relevant for Thunderbird
+PREV_VERSION="60.6.3" # Prev. version only needed for locales (leave empty to force l10n-generation)
+PREV_VERSION_SUFFIX="esr"
+#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
+EOF
+
+exit 1
+}
+
+if [ $# -ne 1 ]; then
+  print_usage_and_exit
+fi
+
+# Sourcing the given tar_stamp-file to have the variables available
+source "$1" || print_usage_and_exit
+
+# Internal variables
+BRANCH="releases/mozilla-$CHANNEL"
+if [ "$PRODUCT" = "firefox" ]; then
+  LOCALE_FILE="firefox-$VERSION/browser/locales/l10n-changesets.json"
+else
+  LOCALE_FILE="thunderbird-$VERSION/comm/mail/locales/l10n-changesets.json"
+fi
+
+SOURCE_TARBALL="$PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz"
+FTP_URL="https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source"
+# Make first letter of PRODCUT upper case
+PRODUCT_CAP="${PRODUCT^}"
+LOCALES_URL="https://product-details.mozilla.org/1.0/l10n/$PRODUCT_CAP"
+# Exit script on CTRL+C
+trap "exit" INT
+
+function check_tarball_source () {
+  TARBALL=$1
+  # Print out what is going to be done:
+  if [ -e $TARBALL ]; then
+      echo "Reuse existing file"
+  elif wget --spider $FTP_URL/$TARBALL 2> /dev/null; then
+      echo "Download file"
+  else
+      echo "Mercurial checkout"
+  fi
+}
 
-CHANNEL="release"
-BRANCH="releases/mozilla-$CHANNEL"
-RELEASE_TAG="ea5154beddff08b919697e3bed6f38cfe3a3d82f"
-VERSION="67.0.4"
-VERSION_SUFFIX=""
-LOCALE_FILE="firefox-$VERSION/browser/locales/l10n-changesets.json"
+function ask_cont_abort_question() {
+  while true; do
+    read -p "$1 [(c)ontinue/(a)bort] " ca
+    case $ca in
+        [Cc]* ) return 0 ;;
+        [Aa]* ) return 1 ;;
+        * ) echo "Please answer c or a.";;
+    esac
+  done
+}
+
+function check_for_binary() {
+  if ! test -x $1; then
+    echo "$1 is missing: execute zypper in $2"
+    exit 5
+  fi
+}
+
+function locales_get() {
+  TMP_VERSION="$1"
+  URL_TO_CHECK="${LOCALES_URL}-${TMP_VERSION}"
+
+  LAST_FOUND=""
+  # Unfortunately, locales-files are not associated to releases, but to builds.
+  # And since we don't know which build was the final build, we go from 1 to
+  # the last we find and try to find the latest one that exists.
+  # Error only if not even the first one exists
+  for BUILD_ID in $(seq 1 9); do
+    FINAL_URL="${URL_TO_CHECK}-build${BUILD_ID}.json"
+    if wget --quiet --spider "$FINAL_URL"; then
+      LAST_FOUND="$FINAL_URL"
+    elif [ $BUILD_ID -gt 1 ]; then
+      echo "$LAST_FOUND"
+      return 0
+    else
+      echo "Error: Could not find locales-file (json) for Firefox $TMP_VERSION !"  1>&2
+      return 1
+    fi
+  done
+}
+
+function locales_parse() {
+  URL="$1"
+  curl -s "$URL" | python -c "import json; import sys; \
+             print('\n'.join(['{} {}'.format(key, value['changeset']) \
+                for key, value in sorted(json.load(sys.stdin)['locales'].items())]));"
+}
+
+function locales_unchanged() {
+  # If no json-file for one of the versions can be found, we say "they changed"
+  prev_url=$(locales_get "$PREV_VERSION$PREV_VERSION_SUFFIX") || return 1
+  curr_url=$(locales_get "$VERSION$VERSION_SUFFIX")      || return 1
+
+  prev_content=$(locales_parse "$prev_url") || exit 1
+  curr_content=$(locales_parse "$curr_url") || exit 1
+
+  diff -y --suppress-common-lines -d <(echo "$prev_content") <(echo "$curr_content")
+}
 
 # check required tools
-test -x /usr/bin/hg || ( echo "hg missing: execute zypper in mercurial"; exit 5 )
-test -x /usr/bin/jq || ( echo "jq missing: execute zypper in jq"; exit 5 )
+check_for_binary /usr/bin/hg "mercurial"
+check_for_binary /usr/bin/jq "jq"
+which python > /dev/null || exit 1
 
 # use parallel compression, if available
 compression='-J'
@@ -23,69 +127,139 @@
   compression='-Ipixz'
 fi
 
+if [ -z ${SKIP_LOCALES+x} ]; then
+  # TODO: Thunderbird has usually "default" as locale entry. 
+  # There we probably need to double-check Firefox-locals
+  # For now, just download every time for Thunderbird
+  if [ "$PRODUCT" = "firefox" ] && [ "$PREV_VERSION" != "" ] && locales_unchanged; then
+    printf "%-40s: Did not change. Skipping.\n" "locales"
+    LOCALES_CHANGED=0
+  else
+    printf "%-40s: Need to download.\n" "locales"
+    LOCALES_CHANGED=1
+  fi
+else 
+  printf "%-40s: User forced skip (SKIP_LOCALES set)\n" "locales"
+fi
+
+# Check what is going to be done and ask for consent
+for ff in $SOURCE_TARBALL $SOURCE_TARBALL.asc; do
+  printf "%-40s: %s\n" $ff "$(check_tarball_source $ff)"
+done
+
+$(ask_cont_abort_question "Is this ok?") || exit 0
+
+# Try to download tar-ball from officiall mozilla-mirror
+if [ ! -e $SOURCE_TARBALL ]; then
+  wget https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source/$SOURCE_TARBALL
+fi
+# including signature
+if [ ! -e $SOURCE_TARBALL.asc ]; then
+  wget https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source/$SOURCE_TARBALL.asc
+fi
+
 # we might have an upstream archive already and can skip the checkout
-if [ -e firefox-$VERSION$VERSION_SUFFIX.source.tar.xz ]; then
-  echo "skip firefox checkout and use available archive"
-  # still need to extract the locale information from the archive
-  echo "extract locale changesets"
-  tar -xf firefox-$VERSION$VERSION_SUFFIX.source.tar.xz $LOCALE_FILE
+if [ -e $SOURCE_TARBALL ]; then
+  if [ -z ${SKIP_LOCALES+x} ]; then
+    # still need to extract the locale information from the archive
+    echo "extract locale changesets"
+    tar -xf $SOURCE_TARBALL $LOCALE_FILE
+  fi
 else
+  # We are working on a version that is not yet published on the mozilla mirror
+  # so we have to actually check out the repo
+
   # mozilla
-  if [ -d firefox-$VERSION ]; then
-    pushd firefox-$VERSION
+  if [ -d $PRODUCT-$VERSION ]; then
+    pushd $PRODUCT-$VERSION || exit 1
     _repourl=$(hg paths)
     case "$_repourl" in
       *$BRANCH*)
         echo "updating previous tree"
         hg pull
-        popd
+        popd || exit 1
         ;;
       * )
         echo "removing obsolete tree"
-        popd
-        rm -rf firefox-$VERSION
+        popd || exit 1
+        rm -rf $PRODUCT-$VERSION
         ;;
     esac
   fi
-  if [ ! -d firefox-$VERSION ]; then
+  if [ ! -d $PRODUCT-$VERSION ]; then
     echo "cloning new $BRANCH..."
-    hg clone http://hg.mozilla.org/$BRANCH firefox-$VERSION
+    hg clone http://hg.mozilla.org/$BRANCH $PRODUCT-$VERSION
+    if [ "$PRODUCT" = "thunderbird" ]; then
+      hg clone http://hg.mozilla.org/releases/comm-$CHANNEL thunderbird-$VERSION/comm
+    fi
   fi
-  pushd firefox-$VERSION
-  hg update --check
-  [ "$RELEASE_TAG" == "default" ] || hg update -r $RELEASE_TAG
+  pushd $PRODUCT-$VERSION || exit 1
+  hg update --check $FF_RELEASE_TAG
+  [ "$FF_RELEASE_TAG" == "default" ] || hg update -r $FF_RELEASE_TAG
   # get repo and source stamp
   echo -n "REV=" > ../source-stamp.txt
   hg -R . parent --template="{node|short}\n" >> ../source-stamp.txt
   echo -n "REPO=" >> ../source-stamp.txt
   hg showconfig paths.default 2>/dev/null | head -n1 | sed -e "s/^ssh:/http:/" >> ../source-stamp.txt
-  popd
+
+  if [ "$PRODUCT" = "thunderbird" ]; then
+    pushd comm || exit 1
+    hg update --check $TB_RELEASE_TAG
+    popd || exit 1
+    rm -rf thunderbird-${VERSION}/{,comm/}other-licenses/7zstub
+  fi
+  popd || exit 1
 
   echo "creating archive..."
-  tar $compression -cf firefox-$VERSION$VERSION_SUFFIX.source.tar.xz --exclude=.hgtags --exclude=.hgignore --exclude=.hg --exclude=CVS firefox-$VERSION
+  tar $compression -cf $PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz --exclude=.hgtags --exclude=.hgignore --exclude=.hg --exclude=CVS $PRODUCT-$VERSION
+fi
+
+if [ ! -z ${SKIP_LOCALES+x} ]; then
+  echo "Skipping locales-creation."
+  exit 0
 fi
 
-# l10n
-echo "fetching locales..."
-test ! -d l10n && mkdir l10n
-jq -r 'to_entries[]| "\(.key) \(.value|.revision)"' $LOCALE_FILE | \
-  while read locale changeset ; do
-    case $locale in
-      ja-JP-mac|en-US)
-        ;;
-      *)
-        echo "reading changeset information for $locale"
-        echo "fetching $locale changeset $changeset ..."
-        hg clone http://hg.mozilla.org/l10n-central/$locale l10n/$locale
-        [ "$RELEASE_TAG" == "default" ] || hg -R l10n/$locale up -C -r $changeset
-        ;;
-    esac
-  done
-echo "creating l10n archive..."
-tar $compression -cf l10n-$VERSION$VERSION_SUFFIX.tar.xz --exclude=.hgtags --exclude=.hgignore --exclude=.hg l10n
+if [ $LOCALES_CHANGED -ne 0 ]; then
+  # l10n
+  echo "fetching locales..."
+  test ! -d l10n && mkdir l10n
+  jq -r 'to_entries[]| "\(.key) \(.value|.revision)"' $LOCALE_FILE | \
+    while read locale changeset ; do
+      case $locale in
+        ja-JP-mac|en-US)
+          ;;
+        *)
+          echo "reading changeset information for $locale"
+          echo "fetching $locale changeset $changeset ..."
+          if [ -d "l10n/$locale/.hg" ]; then
+            pushd "l10n/$locale" || exit 1
+            hg pull
+            popd || exit 1
+          else
+            hg clone "http://hg.mozilla.org/l10n-central/$locale" "l10n/$locale"
+          fi
+          [ "$FF_RELEASE_TAG" == "default" ] || hg -R "l10n/$locale" up -C -r "$changeset"
+          ;;
+      esac
+    done
+  echo "creating l10n archive..."
+if [ "$PRODUCT" = "thunderbird" ]; then
+    TB_TAR_FLAGS="--exclude=browser --exclude=suite"
+fi
+  tar $compression -cf l10n-$VERSION$VERSION_SUFFIX.tar.xz \
+  --exclude=.hgtags --exclude=.hgignore --exclude=.hg \
+  $TB_TAR_FLAGS \
+  l10n
+fi
 
 # compare-locales
 echo "creating compare-locales"
-hg clone http://hg.mozilla.org/build/compare-locales
+if [ -d compare-locales/.hg ]; then
+  pushd compare-locales || exit 1
+  hg pull
+  popd || exit 1
+else
+  hg clone http://hg.mozilla.org/build/compare-locales
+fi
 tar $compression -cf compare-locales.tar.xz --exclude=.hgtags --exclude=.hgignore --exclude=.hg compare-locales
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-bmo1005535.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,1 @@
+../mozilla-bmo1005535.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-gcc-internal-compiler-error.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,1 @@
+../mozilla-gcc-internal-compiler-error.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-ppc-altivec_static_inline.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,1 @@
+../mozilla-ppc-altivec_static_inline.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-reduce-rust-debuginfo.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,1 @@
+../mozilla-reduce-rust-debuginfo.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-s390-bigendian.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,1 @@
+../mozilla-s390-bigendian.patch
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-s390-context.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,1 @@
+../mozilla-s390-context.patch
\ No newline at end of file
--- a/MozillaFirefox/source-stamp.txt	Mon Jul 08 12:56:52 2019 +0200
+++ b/MozillaFirefox/source-stamp.txt	Wed Jul 10 08:14:34 2019 +0200
@@ -1,2 +1,2 @@
-REV=ea5154beddff08b919697e3bed6f38cfe3a3d82f
+REV=353628fec415324ca6aa333ab6c47d447ecc128e
 REPO=http://hg.mozilla.org/releases/mozilla-release
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/tar_stamps	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,10 @@
+PRODUCT="firefox"
+CHANNEL="release"
+VERSION="68.0"
+VERSION_SUFFIX=""
+FF_RELEASE_TAG="353628fec415324ca6aa333ab6c47d447ecc128e"
+TB_RELEASE_TAG=""
+PREV_VERSION=""
+PREV_VERSION_SUFFIX=""
+#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
+
--- a/firefox-kde.patch	Mon Jul 08 12:56:52 2019 +0200
+++ b/firefox-kde.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -1,11 +1,20 @@
 # HG changeset patch
-# Parent  18632e53d0b0c4c03f254ca2dbbeac8f48ec6f5c
+# User msirringhaus@suse.de
+# Date 1559300151 -7200
+#      Fri May 31 12:55:51 2019 +0200
+# Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
+# Parent  428161c3b9599083e1b8710eda1760f1f707ab11
+How to apply this patch:
+1. Import and apply it
+2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul
+3. Find editBookmarkPanelDoneButton
+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/base/content/browser-kde.xul b/browser/base/content/browser-kde.xul
-new file mode 100644
---- /dev/null
-+++ b/browser/base/content/browser-kde.xul
-@@ -0,0 +1,1404 @@
+diff -r 428161c3b959 -r 54d41b0033b8 browser/base/content/browser-kde.xul
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/browser/base/content/browser-kde.xul	Fri May 31 12:55:51 2019 +0200
+@@ -0,0 +1,1375 @@
 +#filter substitution
 +<?xml version="1.0"?>
 +# -*- Mode: HTML -*-
@@ -37,7 +46,6 @@
 +<?xml-stylesheet href="chrome://browser/skin/searchbar.css" type="text/css"?>
 +<?xml-stylesheet href="chrome://browser/skin/places/tree-icons.css" type="text/css"?>
 +<?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/compacttheme.css" type="text/css" alternate="yes" title="Light/Dark"?>
 +
 +# All DTD information is stored in a separate file so that it can be shared by
 +# hiddenWindow.xul.
@@ -89,10 +97,9 @@
 +# that they can be shared with macWindow.inc.xul.
 +#include global-scripts.inc
 +
-+<script type="application/javascript">
++<script>
 +  Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", this);
 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-captivePortal.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-compacttheme.js", this);
 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-contentblocking.js", this);
 +#ifdef MOZ_DATA_REPORTING
 +  Services.scriptloader.loadSubScript("chrome://browser/content/browser-data-submission-info-bar.js", this);
@@ -133,69 +140,52 @@
 +    <menupopup id="tabContextMenu"
 +               onpopupshowing="if (event.target == this) TabContextMenu.updateContextMenu(this);"
 +               onpopuphidden="if (event.target == this) TabContextMenu.contextTab = null;">
-+      <menuitem id="context_reloadTab" label="&reloadTab.label;" accesskey="&reloadTab.accesskey;"
++      <menuitem id="context_reloadTab" data-lazy-l10n-id="reload-tab"
 +                oncommand="gBrowser.reloadTab(TabContextMenu.contextTab);"/>
-+      <menuitem id="context_reloadSelectedTabs" label="&reloadTabs.label;" hidden="true"
-+                accesskey="&reloadTabs.accesskey;"
++      <menuitem id="context_reloadSelectedTabs" data-lazy-l10n-id="reload-tabs" hidden="true"
 +                oncommand="gBrowser.reloadMultiSelectedTabs();"/>
 +      <menuitem id="context_toggleMuteTab" oncommand="TabContextMenu.contextTab.toggleMuteAudio();"/>
 +      <menuitem id="context_toggleMuteSelectedTabs" hidden="true"
 +                oncommand="gBrowser.toggleMuteAudioOnMultiSelectedTabs(TabContextMenu.contextTab);"/>
-+      <menuitem id="context_pinTab" label="&pinTab.label;"
-+                accesskey="&pinTab.accesskey;"
++      <menuitem id="context_pinTab" data-lazy-l10n-id="pin-tab"
 +                oncommand="gBrowser.pinTab(TabContextMenu.contextTab);"/>
-+      <menuitem id="context_unpinTab" label="&unpinTab.label;" hidden="true"
-+                accesskey="&unpinTab.accesskey;"
++      <menuitem id="context_unpinTab" data-lazy-l10n-id="unpin-tab" hidden="true"
 +                oncommand="gBrowser.unpinTab(TabContextMenu.contextTab);"/>
-+      <menuitem id="context_pinSelectedTabs" label="&pinSelectedTabs.label;" hidden="true"
-+                accesskey="&pinSelectedTabs.accesskey;"
++      <menuitem id="context_pinSelectedTabs" data-lazy-l10n-id="pin-selected-tabs" hidden="true"
 +                oncommand="gBrowser.pinMultiSelectedTabs();"/>
-+      <menuitem id="context_unpinSelectedTabs" label="&unpinSelectedTabs.label;" hidden="true"
-+                accesskey="&unpinSelectedTabs.accesskey;"
++      <menuitem id="context_unpinSelectedTabs" data-lazy-l10n-id="unpin-selected-tabs" hidden="true"
 +                oncommand="gBrowser.unpinMultiSelectedTabs();"/>
-+      <menuitem id="context_duplicateTab" label="&duplicateTab.label;"
-+                accesskey="&duplicateTab.accesskey;"
++      <menuitem id="context_duplicateTab" data-lazy-l10n-id="duplicate-tab"
 +                oncommand="duplicateTabIn(TabContextMenu.contextTab, 'tab');"/>
-+      <menuitem id="context_duplicateTabs" label="&duplicateTabs.label;"
-+                accesskey="&duplicateTabs.accesskey;"
++      <menuitem id="context_duplicateTabs" data-lazy-l10n-id="duplicate-tabs"
 +                oncommand="TabContextMenu.duplicateSelectedTabs();"/>
 +      <menuseparator/>
-+      <menuitem id="context_selectAllTabs" label="&selectAllTabs.label;" accesskey="&selectAllTabs.accesskey;"
++      <menuitem id="context_selectAllTabs" data-lazy-l10n-id="select-all-tabs"
 +                oncommand="gBrowser.selectAllTabs();"/>
 +      <menuitem id="context_bookmarkSelectedTabs"
 +                hidden="true"
-+                label="&bookmarkSelectedTabs.label;"
-+                accesskey="&bookmarkSelectedTabs.accesskey;"
++                data-lazy-l10n-id="bookmark-selected-tabs"
 +                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"/>
 +      <menuitem id="context_bookmarkTab"
-+                label="&bookmarkTab.label;"
-+                accesskey="&bookmarkTab.accesskey;"
++                data-lazy-l10n-id="bookmark-tab"
 +                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.getUniquePages([TabContextMenu.contextTab]));"/>
 +      <menu id="context_reopenInContainer"
-+            label="&reopenInContainer.label;"
-+            accesskey="&reopenInContainer.accesskey;"
++            data-lazy-l10n-id="reopen-in-container"
 +            hidden="true">
 +        <menupopup oncommand="TabContextMenu.reopenInContainer(event);"
 +                   onpopupshowing="TabContextMenu.createReopenInContainerMenu(event);"/>
 +      </menu>
-+      <menu id="context_moveTabOptions"
-+            multiselectcontextlabel="&moveSelectedTabOptions.label;"
-+            multiselectcontextaccesskey="&moveSelectedTabOptions.accesskey;"
-+            nonmultiselectcontextlabel="&moveTabOptions.label;"
-+            nonmultiselectcontextaccesskey="&moveTabOptions.accesskey;">
++      <menu id="context_moveTabOptions">
 +        <menupopup id="moveTabOptionsMenu">
 +          <menuitem id="context_moveToStart"
-+                    label="&moveToStart.label;"
-+                    accesskey="&moveToStart.accesskey;"
++                    data-lazy-l10n-id="move-to-start"
 +                    tbattr="tabbrowser-multiple"
 +                    oncommand="gBrowser.moveTabsToStart(TabContextMenu.contextTab);"/>
 +          <menuitem id="context_moveToEnd"
-+                    label="&moveToEnd.label;"
-+                    accesskey="&moveToEnd.accesskey;"
++                    data-lazy-l10n-id="move-to-end"
 +                    tbattr="tabbrowser-multiple"
 +                    oncommand="gBrowser.moveTabsToEnd(TabContextMenu.contextTab);"/>
-+          <menuitem id="context_openTabInWindow" label="&moveToNewWindow.label;"
-+                    accesskey="&moveToNewWindow.accesskey;"
++          <menuitem id="context_openTabInWindow" data-lazy-l10n-id="move-to-new-window"
 +                    tbattr="tabbrowser-multiple"
 +                    oncommand="gBrowser.replaceTabsWithWindow(TabContextMenu.contextTab);"/>
 +        </menupopup>
@@ -206,18 +196,17 @@
 +                   onpopupshowing="gSync.populateSendTabToDevicesMenu(event.target, TabContextMenu.contextTab.linkedBrowser.currentURI.spec, TabContextMenu.contextTab.linkedBrowser.contentTitle, TabContextMenu.contextTab.multiselected);"/>
 +      </menu>
 +      <menuseparator/>
-+      <menuitem id="context_closeTabsToTheEnd" label="&closeTabsToTheEnd.label;" accesskey="&closeTabsToTheEnd.accesskey;"
++      <menuitem id="context_closeTabsToTheEnd" data-lazy-l10n-id="close-tabs-to-the-end"
 +                oncommand="gBrowser.removeTabsToTheEndFrom(TabContextMenu.contextTab, {animate: true});"/>
-+      <menuitem id="context_closeOtherTabs" label="&closeOtherTabs.label;" accesskey="&closeOtherTabs.accesskey;"
++      <menuitem id="context_closeOtherTabs" data-lazy-l10n-id="close-other-tabs"
 +                oncommand="gBrowser.removeAllTabsBut(TabContextMenu.contextTab);"/>
 +      <menuitem id="context_undoCloseTab"
-+                label="&undoCloseTab.label;"
-+                accesskey="&undoCloseTab.accesskey;"
++                data-lazy-l10n-id="undo-close-tab"
 +                observes="History:UndoCloseTab"/>
-+      <menuitem id="context_closeTab" label="&closeTab.label;" accesskey="&closeTab.accesskey;"
++      <menuitem id="context_closeTab" data-lazy-l10n-id="close-tab"
 +                oncommand="gBrowser.removeTab(TabContextMenu.contextTab, { animate: true });"/>
-+      <menuitem id="context_closeSelectedTabs" label="&closeTabs.label;"
-+                hidden="true" accesskey="&closeTabs.accesskey;"
++      <menuitem id="context_closeSelectedTabs" data-lazy-l10n-id="close-tabs"
++                hidden="true"
 +                oncommand="gBrowser.removeMultiSelectedTabs();"/>
 +    </menupopup>
 +
@@ -301,11 +290,17 @@
 +           aria-labelledby="editBookmarkPanelTitle">
 +      <box class="panel-header">
 +        <label id="editBookmarkPanelTitle"/>
++        <toolbarbutton id="editBookmarkPanelInfoButton" oncommand="StarUI.toggleRecommendation();" >
++          <image/>
++        </toolbarbutton>
 +      </box>
-+      <html:div id="editBookmarkPanelFaviconContainer">
-+        <html:img id="editBookmarkPanelFavicon"/>
++      <html:div id="editBookmarkPanelInfoArea">
++        <html:div id="editBookmarkPanelRecommendation"></html:div>
++        <html:div id="editBookmarkPanelFaviconContainer">
++          <html:img id="editBookmarkPanelFavicon"/>
++        </html:div>
++        <html:div id="editBookmarkPanelImage"></html:div>
 +      </html:div>
-+      <box id="editBookmarkPanelImage"/>
 +#include ../../components/places/content/editBookmarkPanel.inc.xul
 +      <vbox id="editBookmarkPanelBottomContent"
 +            flex="1">
@@ -424,6 +419,11 @@
 +                label="&customizeMenu.removeExtension.label;"
 +                contexttype="toolbaritem"
 +                class="customize-context-removeExtension"/>
++      <menuitem oncommand="ToolbarContextMenu.reportExtensionForContextAction(this.parentElement, 'toolbar_context_menu')"
++                accesskey="&customizeMenu.reportExtension.accesskey;"
++                label="&customizeMenu.reportExtension.label;"
++                contexttype="toolbaritem"
++                class="customize-context-reportExtension"/>
 +      <menuseparator/>
 +      <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)"
 +                accesskey="&customizeMenu.pinToOverflowMenu.accesskey;"
@@ -444,32 +444,26 @@
 +      <menuitem id="toolbar-context-reloadSelectedTab"
 +                contexttype="tabbar"
 +                oncommand="gBrowser.reloadMultiSelectedTabs();"
-+                label="&toolbarContextMenu.reloadSelectedTab.label;"
-+                accesskey="&toolbarContextMenu.reloadSelectedTab.accesskey;"/>
++                data-lazy-l10n-id="toolbar-context-menu-reload-selected-tab"/>
 +      <menuitem id="toolbar-context-reloadSelectedTabs"
 +                contexttype="tabbar"
 +                oncommand="gBrowser.reloadMultiSelectedTabs();"
-+                label="&toolbarContextMenu.reloadSelectedTabs.label;"
-+                accesskey="&toolbarContextMenu.reloadSelectedTabs.accesskey;"/>
++                data-lazy-l10n-id="toolbar-context-menu-reload-selected-tabs"/>
 +      <menuitem id="toolbar-context-bookmarkSelectedTab"
 +                contexttype="tabbar"
 +                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
-+                label="&toolbarContextMenu.bookmarkSelectedTab.label;"
-+                accesskey="&toolbarContextMenu.bookmarkSelectedTab.accesskey;"/>
++                data-lazy-l10n-id="toolbar-context-menu-bookmark-selected-tab"/>
 +      <menuitem id="toolbar-context-bookmarkSelectedTabs"
 +                contexttype="tabbar"
 +                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
-+                label="&toolbarContextMenu.bookmarkSelectedTabs.label;"
-+                accesskey="&toolbarContextMenu.bookmarkSelectedTabs.accesskey;"/>
++                data-lazy-l10n-id="toolbar-context-menu-bookmark-selected-tabs"/>
 +      <menuitem id="toolbar-context-selectAllTabs"
 +                contexttype="tabbar"
 +                oncommand="gBrowser.selectAllTabs();"
-+                label="&toolbarContextMenu.selectAllTabs.label;"
-+                accesskey="&toolbarContextMenu.selectAllTabs.accesskey;"/>
++                data-lazy-l10n-id="toolbar-context-menu-select-all-tabs"/>
 +      <menuitem id="toolbar-context-undoCloseTab"
 +                contexttype="tabbar"
-+                label="&toolbarContextMenu.undoCloseTab.label;"
-+                accesskey="&toolbarContextMenu.undoCloseTab.accesskey;"
++                data-lazy-l10n-id="toolbar-context-menu-undo-close-tab"
 +                observes="History:UndoCloseTab"/>
 +      <menuseparator/>
 +      <menuseparator id="viewToolbarsMenuSeparator"/>
@@ -631,7 +625,8 @@
 +#include popup-notifications.inc
 +
 +#include ../../components/customizableui/content/panelUI.inc.xul
-+#include ../../components/controlcenter/content/panel.inc.xul
++#include ../../components/controlcenter/content/identityPanel.inc.xul
++#include ../../components/controlcenter/content/protectionsPanel.inc.xul
 +#include ../../components/downloads/content/downloadsPanel.inc.xul
 +#include browser-allTabsMenu.inc.xul
 +
@@ -645,31 +640,23 @@
 +             onpopupshowing="UpdateDynamicShortcutTooltipText(this);"/>
 +
 +    <menupopup id="SyncedTabsSidebarContext">
-+      <menuitem label="&syncedTabs.context.open.label;"
-+                accesskey="&syncedTabs.context.open.accesskey;"
++      <menuitem data-lazy-l10n-id="synced-tabs-context-open"
 +                id="syncedTabsOpenSelected" where="current"/>
-+      <menuitem label="&syncedTabs.context.openInNewTab.label;"
-+                accesskey="&syncedTabs.context.openInNewTab.accesskey;"
++      <menuitem data-lazy-l10n-id="synced-tabs-context-open-in-new-tab"
 +                id="syncedTabsOpenSelectedInTab" where="tab"/>
-+      <menuitem label="&syncedTabs.context.openInNewWindow.label;"
-+                accesskey="&syncedTabs.context.openInNewWindow.accesskey;"
++      <menuitem data-lazy-l10n-id="synced-tabs-context-open-in-new-window"
 +                id="syncedTabsOpenSelectedInWindow" where="window"/>
-+      <menuitem label="&syncedTabs.context.openInNewPrivateWindow.label;"
-+                accesskey="&syncedTabs.context.openInNewPrivateWindow.accesskey;"
++      <menuitem data-lazy-l10n-id="synced-tabs-context-open-in-new-private-window"
 +                id="syncedTabsOpenSelectedInPrivateWindow" where="window" private="true"/>
 +      <menuseparator/>
-+      <menuitem label="&syncedTabs.context.bookmarkSingleTab.label;"
-+                accesskey="&syncedTabs.context.bookmarkSingleTab.accesskey;"
++      <menuitem data-lazy-l10n-id="synced-tabs-context-bookmark-single-tab"
 +                id="syncedTabsBookmarkSelected"/>
-+      <menuitem label="&syncedTabs.context.copy.label;"
-+                accesskey="&syncedTabs.context.copy.accesskey;"
++      <menuitem data-lazy-l10n-id="synced-tabs-context-copy"
 +                id="syncedTabsCopySelected"/>
 +      <menuseparator/>
-+      <menuitem label="&syncedTabs.context.openAllInTabs.label;"
-+                accesskey="&syncedTabs.context.openAllInTabs.accesskey;"
++      <menuitem data-lazy-l10n-id="synced-tabs-context-open-all-in-tabs"
 +                id="syncedTabsOpenAllInTabs"/>
-+      <menuitem label="&syncedTabs.context.managedevices.label;"
-+                accesskey="&syncedTabs.context.managedevices.accesskey;"
++      <menuitem data-lazy-l10n-id="synced-tabs-context-manage-devices"
 +                id="syncedTabsManageDevices"
 +                oncommand="gSync.openDevicesManagementPage('syncedtabs-sidebar');"/>
 +      <menuitem label="&syncSyncNowItem.label;"
@@ -704,7 +691,7 @@
 +                id="syncedTabsRefreshFilter"/>
 +    </menupopup>
 +
-+    <hbox id="statuspanel" inactive="true" layer="true">
++    <hbox id="statuspanel" inactive="true" renderroot="content">
 +      <hbox id="statuspanel-inner">
 +        <label id="statuspanel-label"
 +               role="status"
@@ -876,16 +863,6 @@
 +                     placeholder="&urlbar.placeholder2;"
 +                     defaultPlaceholder="&urlbar.placeholder2;"
 +                     focused="true"
-+                     type="autocomplete"
-+                     quantumbar="false"
-+                     autocompletesearch="unifiedcomplete"
-+                     autocompletesearchparam="enable-actions"
-+                     autocompletepopup="PopupAutoCompleteRichResult"
-+                     completeselectedindex="true"
-+                     tabscrolling="true"
-+                     newlines="stripsurroundingwhitespace"
-+                     ontextentered="this.handleCommand(param);"
-+                     ontextreverted="return this.handleRevert();"
 +                     pageproxystate="invalid">
 +              <!-- Use onclick instead of normal popup= syntax since the popup
 +                   code fires onmousedown, and hence eats our favicon drag events. -->
@@ -928,6 +905,8 @@
 +                         tooltiptext="&urlbar.flashPluginBlocked.tooltip;"/>
 +                  <image data-permission-id="midi" class="blocked-permission-icon midi-icon" role="button"
 +                         tooltiptext="&urlbar.midiBlocked.tooltip;"/>
++                  <image data-permission-id="install" class="blocked-permission-icon install-icon" role="button"
++                         tooltiptext="&urlbar.installBlocked.tooltip;"/>
 +                </box>
 +                <box id="notification-popup-box"
 +                     hidden="true"
@@ -1339,7 +1318,7 @@
 +
 +  <hbox id="fullscr-toggler" hidden="true"/>
 +
-+  <deck id="content-deck" flex="1">
++  <deck id="content-deck" flex="1" renderroot="content">
 +    <hbox flex="1" id="browser">
 +      <vbox id="browser-border-start" hidden="true" layer="true"/>
 +      <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome">
@@ -1372,10 +1351,12 @@
 +      </vbox>
 +      <vbox id="browser-border-end" hidden="true" layer="true"/>
 +    </hbox>
++    <box id="customization-container" flex="1" hidden="true"><![CDATA[
 +#include ../../components/customizableui/content/customizeMode.inc.xul
++    ]]></box>
 +  </deck>
 +
-+  <html:div id="fullscreen-warning" class="pointerlockfswarning" hidden="true">
++  <html:div id="fullscreen-warning" class="pointerlockfswarning" hidden="true" renderroot="content">
 +    <html:div class="pointerlockfswarning-domain-text">
 +      &fullscreenWarning.beforeDomain.label;
 +      <html:span class="pointerlockfswarning-domain"/>
@@ -1394,7 +1375,7 @@
 +    </html:button>
 +  </html:div>
 +
-+  <html:div id="pointerlock-warning" class="pointerlockfswarning" hidden="true">
++  <html:div id="pointerlock-warning" class="pointerlockfswarning" hidden="true" renderroot="content">
 +    <html:div class="pointerlockfswarning-domain-text">
 +      &pointerlockWarning.beforeDomain.label;
 +      <html:span class="pointerlockfswarning-domain"/>
@@ -1405,42 +1386,26 @@
 +    </html:div>
 +  </html:div>
 +
-+  <vbox id="browser-bottombox" layer="true">
++  <vbox id="browser-bottombox" layer="true" renderroot="content">
 +    <!-- gNotificationBox will be added here lazily. -->
 +  </vbox>
-+
 +</window>
-diff --git a/browser/base/jar.mn b/browser/base/jar.mn
---- a/browser/base/jar.mn
-+++ b/browser/base/jar.mn
-@@ -28,16 +28,18 @@ browser.jar:
-         content/browser/aboutTabCrashed.js            (content/aboutTabCrashed.js)
-         content/browser/aboutTabCrashed.xhtml         (content/aboutTabCrashed.xhtml)
- *       content/browser/browser.css                   (content/browser.css)
-         content/browser/browser.js                    (content/browser.js)
- #ifdef MOZ_BROWSER_XHTML
- *       content/browser/browser.xhtml                 (content/browser.xhtml)
+diff -r 428161c3b959 -r 54d41b0033b8 browser/base/jar.mn
+--- a/browser/base/jar.mn	Mon Jun 17 09:02:06 2019 +0200
++++ b/browser/base/jar.mn	Fri May 31 12:55:51 2019 +0200
+@@ -33,6 +33,8 @@
+ #else
+ *       content/browser/browser.xul                   (content/browser.xul)
  #endif
- *       content/browser/browser.xul                   (content/browser.xul)
 +*       content/browser/browser-kde.xul               (content/browser-kde.xul)
 +%       override chrome://browser/content/browser.xul chrome://browser/content/browser-kde.xul desktop=kde
          content/browser/browser-addons.js             (content/browser-addons.js)
          content/browser/browser-allTabsMenu.js        (content/browser-allTabsMenu.js)
          content/browser/browser-captivePortal.js      (content/browser-captivePortal.js)
-         content/browser/browser-ctrlTab.js            (content/browser-ctrlTab.js)
-         content/browser/browser-customization.js      (content/browser-customization.js)
-         content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js)
-         content/browser/browser-compacttheme.js       (content/browser-compacttheme.js)
-         content/browser/browser-contentblocking.js    (content/browser-contentblocking.js)
-diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js
---- a/browser/components/preferences/in-content/main.js
-+++ b/browser/components/preferences/in-content/main.js
-@@ -288,16 +288,23 @@ var gMainPane = {
-           this._backoffIndex++ : backoffTimes.length - 1]);
-       };
- 
-       window.setTimeout(() => {
-         window.requestIdleCallback(pollForDefaultBrowser);
+diff -r 428161c3b959 -r 54d41b0033b8 browser/components/preferences/in-content/main.js
+--- a/browser/components/preferences/in-content/main.js	Mon Jun 17 09:02:06 2019 +0200
++++ b/browser/components/preferences/in-content/main.js	Fri May 31 12:55:51 2019 +0200
+@@ -294,6 +294,13 @@
        }, backoffTimes[this._backoffIndex]);
      }
  
@@ -1454,17 +1419,7 @@
      this.initBrowserContainers();
      this.buildContentProcessCountMenuList();
  
-     let performanceSettingsLink = document.getElementById("performanceSettingsLearnMore");
-     let performanceSettingsUrl = Services.urlFormatter.formatURLPref("app.support.baseURL") + "performance";
-     performanceSettingsLink.setAttribute("href", performanceSettingsUrl);
- 
-     this.updateDefaultPerformanceSettingsPref();
-@@ -1025,16 +1032,27 @@ var gMainPane = {
-       // Reset exponential backoff delay time in order to do visual update in pollForDefaultBrowser.
-       this._backoffIndex = 0;
- 
-       let shellSvc = getShellService();
-       if (!shellSvc)
+@@ -983,6 +990,17 @@
          return;
        try {
          shellSvc.setDefaultBrowser(true, false);
@@ -1482,20 +1437,10 @@
        } catch (ex) {
          Cu.reportError(ex);
          return;
-       }
- 
-       let selectedIndex = shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
-       document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
-     }
-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
-@@ -29,16 +29,18 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'coco
-     ]
- elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
-     XPIDL_SOURCES += [
-         'nsIGNOMEShellService.idl',
-     ]
+diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/moz.build
+--- a/browser/components/shell/moz.build	Mon Jun 17 09:02:06 2019 +0200
++++ b/browser/components/shell/moz.build	Fri May 31 12:55:51 2019 +0200
+@@ -33,6 +33,8 @@
  
      SOURCES += [
          'nsGNOMEShellService.cpp',
@@ -1504,15 +1449,9 @@
      ]
  elif CONFIG['OS_ARCH'] == 'WINNT':
      SOURCES += [
-         'nsWindowsShellService.cpp',
-     ]
-     LOCAL_INCLUDES += [
-         '../../../other-licenses/nsis/Contrib/CityHash/cityhash',
-     ]
-diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp
-new file mode 100644
---- /dev/null
-+++ b/browser/components/shell/nsKDEShellService.cpp
+diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsKDEShellService.cpp
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/browser/components/shell/nsKDEShellService.cpp	Fri May 31 12:55:51 2019 +0200
 @@ -0,0 +1,150 @@
 +/* -*- 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
@@ -1664,10 +1603,9 @@
 +    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
 +}
 +
-diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h
-new file mode 100644
---- /dev/null
-+++ b/browser/components/shell/nsKDEShellService.h
+diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsKDEShellService.h
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/browser/components/shell/nsKDEShellService.h	Fri May 31 12:55:51 2019 +0200
 @@ -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
@@ -1701,10 +1639,9 @@
 +};
 +
 +#endif // nskdeshellservice_h____
-diff --git a/browser/components/shell/nsUnixShellService.cpp b/browser/components/shell/nsUnixShellService.cpp
-new file mode 100644
---- /dev/null
-+++ b/browser/components/shell/nsUnixShellService.cpp
+diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsUnixShellService.cpp
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/browser/components/shell/nsUnixShellService.cpp	Fri May 31 12:55:51 2019 +0200
 @@ -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
@@ -1728,10 +1665,9 @@
 +        return nsKDEShellServiceConstructor( aOuter, aIID, aResult );
 +    return nsGNOMEShellServiceConstructor( aOuter, aIID, aResult );
 +}
-diff --git a/browser/components/shell/nsUnixShellService.h b/browser/components/shell/nsUnixShellService.h
-new file mode 100644
---- /dev/null
-+++ b/browser/components/shell/nsUnixShellService.h
+diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsUnixShellService.h
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/browser/components/shell/nsUnixShellService.h	Fri May 31 12:55:51 2019 +0200
 @@ -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
@@ -1748,15 +1684,10 @@
 +nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult);
 +
 +#endif // nsunixshellservice_h____
-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
-@@ -286,16 +286,18 @@
- @RESPATH@/browser/defaults/settings/pinning
- @RESPATH@/browser/defaults/settings/main
- 
- ; Warning: changing the path to channel-prefs.js can cause bugs (Bug 756325)
- ; Technically this is an app pref file, but we are keeping it in the original
+diff -r 428161c3b959 -r 54d41b0033b8 browser/installer/package-manifest.in
+--- a/browser/installer/package-manifest.in	Mon Jun 17 09:02:06 2019 +0200
++++ b/browser/installer/package-manifest.in	Fri May 31 12:55:51 2019 +0200
+@@ -299,6 +299,8 @@
  ; gre location for now.
  @RESPATH@/defaults/pref/channel-prefs.js
  
@@ -1765,8 +1696,3 @@
  ; Services (gre) prefs
  @RESPATH@/defaults/pref/services-sync.js
  
- ; [Layout Engine Resources]
- ; Style Sheets, Graphics and other Resources used by the layout engine.
- @RESPATH@/res/EditorOverride.css
- @RESPATH@/res/contenteditable.css
- @RESPATH@/res/designmode.css
--- a/mozilla-aarch64-startup-crash.patch	Mon Jul 08 12:56:52 2019 +0200
+++ b/mozilla-aarch64-startup-crash.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -1,23 +1,22 @@
 # HG changeset patch
-# Parent a5cfa3aa11a9d3391df49de6fc5a0e5232c12c10
-# Parent  6dd2311796da4e15115fd04b181313ae62754317
-Bug 991344 - Rpi3: Firefox crashes after a few seconds of usage
+# User msirringhaus@suse.de
+# Date 1558442998 -7200
+#      Tue May 21 14:49:58 2019 +0200
+# Node ID 386083b58d8558141901d796ec6919a4aba7ad3a
+# Parent  835641be7eb9408aa1eff0d38b37f6c523d2ef98
+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
-@@ -975,17 +975,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;
+diff -r 835641be7eb9 -r 386083b58d85 netwerk/base/nsIOService.cpp
+--- a/netwerk/base/nsIOService.cpp	Fri Feb 26 16:20:09 2016 +0000
++++ b/netwerk/base/nsIOService.cpp	Tue May 21 14:49:58 2019 +0200
+@@ -1000,7 +1000,13 @@
      }
    }
  
 +#if defined(__aarch64__)
 +  if (result) {
-+      channel.forget(result);
++    channel.forget(result);
 +  }
 +#else
    channel.forget(result);
@@ -25,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,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-bmo1005535.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,20 @@
+# HG changeset patch
+# User Steve Singer <steve@ssinger.info>
+# Date 1558451540 -7200
+#      Tue May 21 17:12:20 2019 +0200
+# Node ID 433beec63e6b5f409683af20a0c1ab137cc7bfad
+# Parent  42c99b59a87b904063bad3193f10c51d068d2eac
+Bug 1005535 - Get skia GPU building on big endian.
+
+diff -r 42c99b59a87b -r 433beec63e6b gfx/skia/skia/include/private/GrColor.h
+--- a/gfx/skia/skia/include/private/GrColor.h	Wed Jun 05 08:48:08 2019 +0200
++++ b/gfx/skia/skia/include/private/GrColor.h	Tue May 21 17:12:20 2019 +0200
+@@ -63,7 +63,7 @@
+  *  Since premultiplied means that alpha >= color, we construct a color with
+  *  each component==255 and alpha == 0 to be "illegal"
+  */
+-#define GrColor_ILLEGAL     (~(0xFF << GrColor_SHIFT_A))
++#define GrColor_ILLEGAL     ((uint32_t)(~(0xFF << GrColor_SHIFT_A)))
+ 
+ /** Normalizes and coverts an uint8_t to a float. [0, 255] -> [0.0, 1.0] */
+ static inline float GrNormalizeByteToFloat(uint8_t value) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-gcc-internal-compiler-error.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,29 @@
+# HG changeset patch
+# User Wolfgang Rosenauer <wr@rosenauer.org>
+# Parent  88217eaa8804fc699c02411b1b5377ef7eb5d2db
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90756
+https://bugzilla.mozilla.org/show_bug.cgi?id=1562886
+
+diff --git a/gfx/skia/skia/third_party/skcms/src/Transform_inl.h b/gfx/skia/skia/third_party/skcms/src/Transform_inl.h
+--- a/gfx/skia/skia/third_party/skcms/src/Transform_inl.h
++++ b/gfx/skia/skia/third_party/skcms/src/Transform_inl.h
+@@ -554,17 +554,18 @@ SI void sample_clut_16(const skcms_A2B* 
+     *r = cast<F>((rgb >>  0) & 0xffff) * (1/65535.0f);
+     *g = cast<F>((rgb >> 16) & 0xffff) * (1/65535.0f);
+     *b = cast<F>((rgb >> 32) & 0xffff) * (1/65535.0f);
+ #endif
+ }
+ 
+ // GCC 7.2.0 hits an internal compiler error with -finline-functions (or -O3)
+ // when targeting MIPS 64,  I think attempting to inline clut() into exec_ops().
+-#if 1 && defined(__GNUC__) && !defined(__clang__) && defined(__mips64)
++// s390x and i*86 also hit this with GCC 7.4 and -O2
++#if 1 && defined(__GNUC__) && !defined(__clang__) && ( defined(__mips64) || defined(__s390x__) || defined( __i586__ ) || defined( __i486__ ) || defined( __i386__ ))
+     #define MAYBE_NOINLINE __attribute__((noinline))
+ #else
+     #define MAYBE_NOINLINE
+ #endif
+ 
+ MAYBE_NOINLINE
+ static void clut(const skcms_A2B* a2b, F* r, F* g, F* b, F a) {
+     const int dim = (int)a2b->input_channels;
--- a/mozilla-kde.patch	Mon Jul 08 12:56:52 2019 +0200
+++ b/mozilla-kde.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -1,5 +1,9 @@
 # HG changeset patch
-# Parent  cafacdb0b7c50666e5dcc927684a23e8733206a5
+# User msirringhaus@suse.de
+# Date 1559294891 -7200
+#      Fri May 31 11:28:11 2019 +0200
+# Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112
+# Parent  f11c2d7239c0caa4dc74272716d9e30ced1a1ca3
 Description: Add KDE integration to Firefox (toolkit parts)
 Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
 Author: Lubos Lunak <lunak@suse.com>
@@ -27,7 +31,7 @@
  #ifdef XP_WIN
  #  include "windows.h"
  #endif
-@@ -4493,25 +4494,37 @@ float MOZ_MAYBE_UNUSED GetPref<float>(co
+@@ -4507,25 +4508,37 @@ static nsresult pref_ReadDefaultPrefs(co
    // application pref files for backwards compatibility.
    static const char* specialFiles[] = {
  #if defined(XP_MACOSX)
@@ -65,7 +69,7 @@
  
    // Load jar:$app/omni.jar!/defaults/preferences/*.js
    // or jar:$gre/omni.jar!/defaults/preferences/*.js.
-@@ -4559,17 +4572,17 @@ float MOZ_MAYBE_UNUSED GetPref<float>(co
+@@ -4573,17 +4586,17 @@ static nsresult pref_ReadDefaultPrefs(co
        }
  
        nsCOMPtr<nsIFile> path = do_QueryInterface(elem);
@@ -183,18 +187,18 @@
 +*  content/global/bindings/dialog-kde.xml      (widgets/dialog-kde.xml)
 +% override chrome://global/content/bindings/dialog.xml chrome://global/content/bindings/dialog-kde.xml desktop=kde
     content/global/bindings/general.xml         (widgets/general.xml)
-    content/global/bindings/menu.xml            (widgets/menu.xml)
     content/global/bindings/popup.xml           (widgets/popup.xml)
-    content/global/bindings/radio.xml           (widgets/radio.xml)
     content/global/bindings/richlistbox.xml     (widgets/richlistbox.xml)
     content/global/bindings/scrollbox.xml       (widgets/scrollbox.xml)
     content/global/bindings/spinner.js          (widgets/spinner.js)
     content/global/bindings/tabbox.xml          (widgets/tabbox.xml)
+ *  content/global/bindings/textbox.xml         (widgets/textbox.xml)
+    content/global/bindings/timekeeper.js       (widgets/timekeeper.js)
 diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
 new file mode 100644
 --- /dev/null
 +++ b/toolkit/content/widgets/dialog-kde.xml
-@@ -0,0 +1,507 @@
+@@ -0,0 +1,499 @@
 +<?xml version="1.0"?>
 +<!-- This Source Code Form is subject to the terms of the Mozilla Public
 +   - License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -495,6 +499,10 @@
 +          buttons.help = document.getAnonymousElementByAttribute(this, "dlgtype", "help");
 +          buttons.disclosure = document.getAnonymousElementByAttribute(this, "dlgtype", "disclosure");
 +
++          for (let button in buttons) {
++            customElements.upgrade(buttons[button]);
++          }
++
 +          // look for any overriding explicit button elements
 +          var exBtns = this.getElementsByAttribute("dlgtype", "*");
 +          var dlgtype;
@@ -646,19 +654,7 @@
 +          event.initEvent("dialog" + aDlgType, true, true);
 +
 +          // handle dom event handlers
-+          var noCancel = this.dispatchEvent(event);
-+
-+          // handle any xml attribute event handlers
-+          var handler = this.getAttribute("ondialog" + aDlgType);
-+          if (handler != "") {
-+            var fn = new Function("event", handler);
-+            var returned = fn(event);
-+            // eslint-disable-next-line mozilla/no-compare-against-boolean-literals
-+            if (returned == false)
-+              noCancel = false;
-+          }
-+
-+          return noCancel;
++          return this.dispatchEvent(event);
 +        ]]>
 +        </body>
 +      </method>
@@ -705,7 +701,7 @@
 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
-@@ -1030,30 +1030,60 @@ nsUnknownContentTypeDialog.prototype = {
+@@ -1042,30 +1042,60 @@ nsUnknownContentTypeDialog.prototype = {
  
        if (params.handlerApp &&
            params.handlerApp.executable &&
@@ -783,7 +779,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
-@@ -15,16 +15,17 @@
+@@ -14,16 +14,17 @@
  #include "nsPrintfCString.h"
  #include "nsNetCID.h"
  #include "nsNetUtil.h"
@@ -801,10 +797,10 @@
    NS_DECL_ISUPPORTS
    NS_DECL_NSISYSTEMPROXYSETTINGS
  
-@@ -44,16 +45,18 @@ class nsUnixSystemProxySettings final : 
-                                    nsACString& aResult);
-   nsresult GetProxyFromGConf(const nsACString& aScheme, const nsACString& aHost,
-                              int32_t aPort, nsACString& aResult);
+@@ -37,16 +38,18 @@ class nsUnixSystemProxySettings final : 
+   nsCOMPtr<nsIGSettingsCollection> mProxySettings;
+   nsInterfaceHashtable<nsCStringHashKey, nsIGSettingsCollection>
+       mSchemeProxySettings;
    nsresult GetProxyFromGSettings(const nsACString& aScheme,
                                   const nsACString& aHost, int32_t aPort,
                                   nsACString& aResult);
@@ -820,7 +816,7 @@
  nsUnixSystemProxySettings::GetMainThreadOnly(bool* aMainThreadOnly) {
    // dbus prevents us from being threadsafe, but this routine should not block
    // anyhow
-@@ -487,22 +490,51 @@ nsresult nsUnixSystemProxySettings::GetP
+@@ -382,21 +385,50 @@ nsresult nsUnixSystemProxySettings::GetP
    return NS_OK;
  }
  
@@ -836,7 +832,6 @@
      nsresult rv = GetProxyFromGSettings(aScheme, aHost, aPort, aResult);
      if (NS_SUCCEEDED(rv)) return rv;
    }
-   if (mGConf) return GetProxyFromGConf(aScheme, aHost, aPort, aResult);
  
    return GetProxyFromEnvironment(aScheme, aHost, aPort, aResult);
  }
@@ -943,7 +938,7 @@
 +    Display* dpy = XOpenDisplay( NULL );
 +    if( dpy == NULL )
 +        return false;
-+    Atom kde_full_session = XInternAtom( dpy, "KDE_FULL_SESSION", True );
++    Atom kde_full_session = XInternAtom( dpy, "KDE_FULL_SESSION", true );
 +    bool kde = false;
 +    if( kde_full_session != None )
 +        {
@@ -1300,7 +1295,8 @@
 diff --git a/uriloader/exthandler/HandlerServiceParent.cpp b/uriloader/exthandler/HandlerServiceParent.cpp
 --- a/uriloader/exthandler/HandlerServiceParent.cpp
 +++ b/uriloader/exthandler/HandlerServiceParent.cpp
-@@ -1,16 +1,16 @@
+@@ -1,17 +1,17 @@
+ #include "mozilla/ipc/ProtocolUtils.h"
  #include "mozilla/Logging.h"
  #include "HandlerServiceParent.h"
  #include "nsIHandlerService.h"
@@ -1318,13 +1314,13 @@
  using mozilla::dom::RemoteHandlerApp;
  
  namespace {
-@@ -246,17 +246,17 @@ mozilla::ipc::IPCResult HandlerServicePa
-   handlerSvc->Exists(info, exists);
-   return IPC_OK();
- }
- 
- mozilla::ipc::IPCResult HandlerServiceParent::RecvExistsForProtocol(
+@@ -282,17 +282,17 @@ mozilla::ipc::IPCResult HandlerServicePa
+ mozilla::ipc::IPCResult HandlerServiceParent::RecvExistsForProtocolOS(
      const nsCString& aProtocolScheme, bool* aHandlerExists) {
+   if (aProtocolScheme.Length() > MAX_SCHEME_LENGTH) {
+     *aHandlerExists = false;
+     return IPC_OK();
+   }
  #ifdef MOZ_WIDGET_GTK
    // Check the GNOME registry for a protocol handler
 -  *aHandlerExists = nsGNOMERegistry::HandlerExists(aProtocolScheme.get());
@@ -1335,12 +1331,31 @@
    return IPC_OK();
  }
  
- mozilla::ipc::IPCResult HandlerServiceParent::RecvGetTypeFromExtension(
-     const nsCString& aFileExtension, nsCString* type) {
+ /*
+  * Check if a handler exists for the provided protocol. Check the datastore
+@@ -311,17 +311,17 @@ mozilla::ipc::IPCResult HandlerServicePa
+   nsCOMPtr<nsIExternalProtocolService> protoSvc =
+       do_GetService(NS_EXTERNALPROTOCOLSERVICE_CONTRACTID, &rv);
+   if (NS_WARN_IF(NS_FAILED(rv))) {
+     *aHandlerExists = false;
+     return IPC_OK();
+   }
+   rv = protoSvc->ExternalProtocolHandlerExists(aProtocolScheme.get(),
+                                                aHandlerExists);
+-
++##
+   if (NS_WARN_IF(NS_FAILED(rv))) {
+     *aHandlerExists = false;
+   }
+ #else
+   MOZ_RELEASE_ASSERT(false, "No implementation on this platform.");
+   *aHandlerExists = false;
+ #endif
+   return IPC_OK();
 diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build
 --- a/uriloader/exthandler/moz.build
 +++ b/uriloader/exthandler/moz.build
-@@ -80,17 +80,19 @@ else:
+@@ -83,17 +83,19 @@ else:
      SOURCES += [
          osdir + '/nsOSHelperAppService.cpp',
      ]
@@ -1360,7 +1375,7 @@
          'android/nsExternalURLHandlerService.cpp',
          'android/nsMIMEInfoAndroid.cpp',
      ]
-@@ -130,16 +132,17 @@ include('/ipc/chromium/chromium-config.m
+@@ -133,16 +135,17 @@ include('/ipc/chromium/chromium-config.m
  FINAL_LIBRARY = 'xul'
  
  LOCAL_INCLUDES += [
@@ -1624,13 +1639,13 @@
 +#include "nsKDEUtils.h"
 +#endif
  
- nsresult nsMIMEInfoUnix::LoadUriInternal(nsIURI *aURI) {
+ nsresult nsMIMEInfoUnix::LoadUriInternal(nsIURI* aURI) {
 -  return nsGNOMERegistry::LoadURL(aURI);
 +  return nsCommonRegistry::LoadURL(aURI);
  }
  
  NS_IMETHODIMP
- nsMIMEInfoUnix::GetHasDefaultHandler(bool *_retval) {
+ nsMIMEInfoUnix::GetHasDefaultHandler(bool* _retval) {
    // if mDefaultApplication 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.
@@ -1794,7 +1809,7 @@
 diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
 --- a/widget/gtk/moz.build
 +++ b/widget/gtk/moz.build
-@@ -121,16 +121,17 @@ include('/ipc/chromium/chromium-config.m
+@@ -124,16 +124,17 @@ include('/ipc/chromium/chromium-config.m
  
  FINAL_LIBRARY = 'xul'
  
@@ -1849,14 +1864,14 @@
  // bug 1184009
  #define MAX_PREVIEW_SOURCE_SIZE 4096
  
- nsIFile *nsFilePicker::mPrevDisplayDirectory = nullptr;
+ nsIFile* nsFilePicker::mPrevDisplayDirectory = nullptr;
 @@ -227,17 +229,19 @@ nsFilePicker::AppendFilters(int32_t aFil
    mAllowURLs = !!(aFilterMask & filterAllowURLs);
    return nsBaseFilePicker::AppendFilters(aFilterMask);
  }
  
  NS_IMETHODIMP
- nsFilePicker::AppendFilter(const nsAString &aTitle, const nsAString &aFilter) {
+ nsFilePicker::AppendFilter(const nsAString& aTitle, const nsAString& aFilter) {
    if (aFilter.EqualsLiteral("..apps")) {
      // No platform specific thing we can do here, really....
 -    return NS_OK;
@@ -1871,12 +1886,12 @@
  
    mFilters.AppendElement(filter);
    mFilterNames.AppendElement(name);
-@@ -337,16 +341,39 @@ nsresult nsFilePicker::Show(int16_t *aRe
+@@ -337,16 +341,39 @@ nsresult nsFilePicker::Show(int16_t* aRe
    return NS_OK;
  }
  
  NS_IMETHODIMP
- nsFilePicker::Open(nsIFilePickerShownCallback *aCallback) {
+ nsFilePicker::Open(nsIFilePickerShownCallback* aCallback) {
    // Can't show two dialogs concurrently with the same filepicker
    if (mRunning) return NS_ERROR_NOT_AVAILABLE;
  
@@ -1906,12 +1921,12 @@
    nsCString title;
    title.Adopt(ToNewUTF8String(mTitle));
  
-   GtkWindow *parent_widget =
+   GtkWindow* parent_widget =
        GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET));
  
    GtkFileChooserAction action = GetGtkFileChooserAction(mMode);
  
-@@ -572,16 +599,240 @@ void nsFilePicker::Done(void *file_choos
+@@ -572,16 +599,240 @@ void nsFilePicker::Done(void* file_choos
      mCallback->Done(result);
      mCallback = nullptr;
    } else {
@@ -2145,13 +2160,13 @@
 +    }
 +
  // All below functions available as of GTK 3.20+
- void *nsFilePicker::GtkFileChooserNew(const gchar *title, GtkWindow *parent,
+ void* nsFilePicker::GtkFileChooserNew(const gchar* title, GtkWindow* parent,
                                        GtkFileChooserAction action,
-                                       const gchar *accept_label) {
+                                       const gchar* accept_label) {
    static auto sGtkFileChooserNativeNewPtr =
-       (void *(*)(const gchar *, GtkWindow *, GtkFileChooserAction,
-                  const gchar *,
-                  const gchar *))dlsym(RTLD_DEFAULT,
+       (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
@@ -2162,7 +2177,7 @@
    nsTArray<nsCString> mFilterNames;
  
   private:
-   static nsIFile *mPrevDisplayDirectory;
+   static nsIFile* mPrevDisplayDirectory;
  
 +  bool kdeRunning();
 +  bool getKdeRunning();
@@ -2170,12 +2185,12 @@
 +  NS_IMETHODIMP kdeAppsDialog(PRInt16 *aReturn);
 +  nsCString kdeMakeFilter( int index );
 +
-   void *GtkFileChooserNew(const gchar *title, GtkWindow *parent,
+   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,
+                           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
@@ -2199,7 +2214,7 @@
    int argc;
  
    bool ischrome;
-@@ -392,16 +393,17 @@ void ParseManifest(NSLocationType aType,
+@@ -393,16 +394,17 @@ void ParseManifest(NSLocationType aType,
    NS_NAMED_LITERAL_STRING(kRemoteEnabled, "remoteenabled");
    NS_NAMED_LITERAL_STRING(kRemoteRequired, "remoterequired");
    NS_NAMED_LITERAL_STRING(kApplication, "application");
@@ -2217,7 +2232,7 @@
    NS_NAMED_LITERAL_STRING(kMain, "main");
    NS_NAMED_LITERAL_STRING(kContent, "content");
  
-@@ -447,39 +449,44 @@ void ParseManifest(NSLocationType aType,
+@@ -448,39 +450,44 @@ void ParseManifest(NSLocationType aType,
          CopyUTF8toUTF16(s, abi);
          abi.Insert(char16_t('_'), 0);
          abi.Insert(osTarget, 0);
@@ -2262,7 +2277,7 @@
      process = kMain;
    }
  
-@@ -566,25 +573,27 @@ void ParseManifest(NSLocationType aType,
+@@ -567,25 +574,27 @@ void ParseManifest(NSLocationType aType,
      TriState stOsVersion = eUnspecified;
      TriState stOs = eUnspecified;
      TriState stABI = eUnspecified;
@@ -2290,7 +2305,7 @@
          continue;
        }
  
-@@ -621,17 +630,17 @@ void ParseManifest(NSLocationType aType,
+@@ -622,17 +631,17 @@ void ParseManifest(NSLocationType aType,
        }
  
        LogMessageWithContext(
@@ -2312,7 +2327,7 @@
 diff --git a/xpcom/components/moz.build b/xpcom/components/moz.build
 --- a/xpcom/components/moz.build
 +++ b/xpcom/components/moz.build
-@@ -66,14 +66,15 @@ LOCAL_INCLUDES += [
+@@ -66,16 +66,17 @@ LOCAL_INCLUDES += [
      '!..',
      '../base',
      '../build',
@@ -2327,7 +2342,9 @@
  if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
      CXXFLAGS += CONFIG['TK_CFLAGS']
  
- include('/ipc/chromium/chromium-config.mozbuild')
+ if CONFIG['MOZ_LAYOUT_DEBUGGER']:
+     DEFINES['MOZ_LAYOUT_DEBUGGER'] = True
+ 
 diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
 --- a/xpcom/io/nsLocalFileUnix.cpp
 +++ b/xpcom/io/nsLocalFileUnix.cpp
--- a/mozilla-nongnome-proxies.patch	Mon Jul 08 12:56:52 2019 +0200
+++ b/mozilla-nongnome-proxies.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -1,20 +1,19 @@
-From: Wolfgang Rosenauer
-Subject: Do not use gconf for proxy settings if not running within Gnome
-
+# HG changeset patch
+# User Wolfgang Rosenauer
+# Date 1558442915 -7200
+#      Tue May 21 14:48:35 2019 +0200
+# Node ID 6bcf2dfebc1ea2aa34e5cc61152709fc8e409dc5
+# Parent  4c434d19d03d5461e54fa22dfb82eaed4cd6631b
+Do not use gconf for proxy settings if not running within Gnome
 Index: toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
 ===================================================================
 RCS file: /cvsroot/mozilla/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp,v
 retrieving revision 1.1
 
-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
-@@ -57,24 +57,27 @@ NS_IMETHODIMP
- nsUnixSystemProxySettings::GetMainThreadOnly(bool* aMainThreadOnly) {
-   // dbus prevents us from being threadsafe, but this routine should not block
-   // anyhow
-   *aMainThreadOnly = true;
-   return NS_OK;
+diff -r 4c434d19d03d -r 6bcf2dfebc1e toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
+--- a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp	Wed Jun 12 17:43:18 2019 +0000
++++ b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp	Tue May 21 14:48:35 2019 +0200
+@@ -55,11 +55,14 @@
  }
  
  void nsUnixSystemProxySettings::Init() {
@@ -23,25 +22,14 @@
 -    mGSettings->GetCollectionForSchema(
 -        NS_LITERAL_CSTRING("org.gnome.system.proxy"),
 -        getter_AddRefs(mProxySettings));
--  }
--  if (!mProxySettings) {
--    mGConf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
-+  // only use GSettings if that is a GNOME session
 +  const char* sessionType = PR_GetEnv("DESKTOP_SESSION");
 +  if (sessionType && !strcmp(sessionType, "gnome")) {
 +    mGSettings = do_GetService(NS_GSETTINGSSERVICE_CONTRACTID);
 +    if (mGSettings) {
-+      mGSettings->GetCollectionForSchema(NS_LITERAL_CSTRING("org.gnome.system.proxy"),
-+                                         getter_AddRefs(mProxySettings));
-+    }
-+    if (!mProxySettings) {
-+      mGConf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
++      mGSettings->GetCollectionForSchema(
++          NS_LITERAL_CSTRING("org.gnome.system.proxy"),
++          getter_AddRefs(mProxySettings));
 +    }
    }
  }
  
- bool nsUnixSystemProxySettings::IsProxyMode(const char* aMode) {
-   nsAutoCString mode;
-   return NS_SUCCEEDED(mGConf->GetString(
-              NS_LITERAL_CSTRING("/system/proxy/mode"), mode)) &&
-          mode.EqualsASCII(aMode);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-ppc-altivec_static_inline.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,20 @@
+# HG changeset patch
+# User msirringhaus@suse.de
+# Date 1558452418 -7200
+#      Tue May 21 17:26:58 2019 +0200
+# Node ID 6cd963b6c82ea6629aaf4050851789b78f310338
+# Parent  602e92722e765a3c238d3b96b26c0c8063b5eeb4
+imported patch mozilla-ppc-altivec_static_inline.patch
+
+diff -r 602e92722e76 -r 6cd963b6c82e gfx/qcms/transform-altivec.c
+--- a/gfx/qcms/transform-altivec.c	Tue May 21 17:26:48 2019 +0200
++++ b/gfx/qcms/transform-altivec.c	Tue May 21 17:26:58 2019 +0200
+@@ -30,7 +30,7 @@
+ static const ALIGN float floatScaleX4 = FLOATSCALE;
+ static const ALIGN float clampMaxValueX4 = CLAMPMAXVAL;
+ 
+-inline vector float load_aligned_float(float *dataPtr)
++static inline vector float load_aligned_float(float *dataPtr)
+ {
+ 	vector float data = vec_lde(0, dataPtr);
+ 	vector unsigned char moveToStart = vec_lvsl(0, dataPtr);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-reduce-rust-debuginfo.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,34 @@
+# HG changeset patch
+# User msirringhaus@suse.de
+# Date 1560754926 -7200
+#      Mon Jun 17 09:02:06 2019 +0200
+# Node ID 428161c3b9599083e1b8710eda1760f1f707ab11
+# Parent  6cd963b6c82ea6629aaf4050851789b78f310338
+#Description: reduce the rust debuginfo level on selected architectures where
+# compiling with debuginfo=2 causes the OOM killer to interrupt the build on
+# launchpad builders. Initially this was only on 32 bit architectures, but with
+# firefox 63 it started happening frequently on arm64 and ppc64el too.
+
+diff -r 6cd963b6c82e -r 428161c3b959 build/moz.configure/toolchain.configure
+--- a/build/moz.configure/toolchain.configure	Tue May 21 17:26:58 2019 +0200
++++ b/build/moz.configure/toolchain.configure	Mon Jun 17 09:02:06 2019 +0200
+@@ -1865,8 +1865,8 @@
+         return '1' if moz_optimize.optimize else '0'
+ 
+ 
+-@depends(rustc_opt_level, debug_rust, '--enable-debug-symbols')
+-def rust_compile_flags(opt_level, debug_rust, debug_symbols):
++@depends(rustc_opt_level, debug_rust, '--enable-debug-symbols', host)
++def rust_compile_flags(opt_level, debug_rust, debug_symbols, host):
+     # Cargo currently supports only two interesting profiles for building:
+     # development and release. Those map (roughly) to --enable-debug and
+     # --disable-debug in Gecko, respectively.
+@@ -1889,6 +1889,8 @@
+ 
+     if debug_symbols:
+         debug_info = '2'
++        if host.bitness == 32 or host.cpu == 'aarch64' or host.cpu == 'ppc64':
++            debug_info = '1'
+ 
+     opts = []
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-s390-bigendian.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,20 @@
+# HG changeset patch
+# User msirringhaus@suse.de
+# Date 1558452126 -7200
+#      Tue May 21 17:22:06 2019 +0200
+# Node ID a3cc550d25e3a04d906f516928cbcbe50efd585e
+# Parent  433beec63e6b5f409683af20a0c1ab137cc7bfad
+[mq]: mozilla-s390-bigendian.patch
+
+diff -r 433beec63e6b -r a3cc550d25e3 build/autoconf/icu.m4
+--- a/build/autoconf/icu.m4	Tue May 21 17:12:20 2019 +0200
++++ b/build/autoconf/icu.m4	Tue May 21 17:22:06 2019 +0200
+@@ -78,7 +78,7 @@
+     # TODO: the l is actually endian-dependent
+     # We could make this set as 'l' or 'b' for little or big, respectively,
+     # but we'd need to check in a big-endian version of the file.
+-    ICU_DATA_FILE="icudt${version}l.dat"
++    ICU_DATA_FILE="icudt${version}b.dat"
+ fi
+ 
+ AC_SUBST(MOZ_ICU_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-s390-context.patch	Wed Jul 10 08:14:34 2019 +0200
@@ -0,0 +1,36 @@
+# HG changeset patch
+# User msirringhaus@suse.de
+# Date 1558452408 -7200
+#      Tue May 21 17:26:48 2019 +0200
+# Node ID 602e92722e765a3c238d3b96b26c0c8063b5eeb4
+# Parent  a3cc550d25e3a04d906f516928cbcbe50efd585e
+[mq]: mozilla-s390-context.patch
+
+diff -r a3cc550d25e3 -r 602e92722e76 js/src/wasm/WasmSignalHandlers.cpp
+--- a/js/src/wasm/WasmSignalHandlers.cpp	Tue May 21 17:22:06 2019 +0200
++++ b/js/src/wasm/WasmSignalHandlers.cpp	Tue May 21 17:26:48 2019 +0200
+@@ -154,6 +154,10 @@
+ #    define R01_sig(p) ((p)->uc_mcontext.gp_regs[1])
+ #    define R32_sig(p) ((p)->uc_mcontext.gp_regs[32])
+ #  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])
+@@ -385,8 +389,13 @@
+ #  define PC_sig(p) R32_sig(p)
+ #  define SP_sig(p) R01_sig(p)
+ #  define FP_sig(p) R01_sig(p)
++#elif defined(__s390x__)
++# 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<uint8_t**>(&PC_sig(context)) = pc;
--- a/series	Mon Jul 08 12:56:52 2019 +0200
+++ b/series	Wed Jul 10 08:14:34 2019 +0200
@@ -8,6 +8,12 @@
 mozilla-cubeb-noreturn.patch
 mozilla-fix-aarch64-libopus.patch
 mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch
+mozilla-gcc-internal-compiler-error.patch
+mozilla-s390-context.patch
+mozilla-s390-bigendian.patch
+mozilla-reduce-rust-debuginfo.patch
+mozilla-ppc-altivec_static_inline.patch
+mozilla-bmo1005535.patch
 
 # Firefox patches
 firefox-kde.patch