firefox 82.0-1 (aarch64) 2020-13057
9999

Status published
Submitter cris [@T] beebgames.com
Platform rolling
Repository main
URL https://abf.openmandriva.org/build_lists/836370
Packages
firefox-82.0-1.aarch64.source
firefox-82.0-1.aarch64.binary
firefox-af-82.0-1.aarch64.binary
firefox-ar-82.0-1.aarch64.binary
firefox-ast-82.0-1.aarch64.binary
firefox-bg-82.0-1.aarch64.binary
firefox-bn-82.0-1.aarch64.binary
firefox-br-82.0-1.aarch64.binary
firefox-bs-82.0-1.aarch64.binary
firefox-ca-82.0-1.aarch64.binary
firefox-cs-82.0-1.aarch64.binary
firefox-cy-82.0-1.aarch64.binary
firefox-da-82.0-1.aarch64.binary
firefox-de-82.0-1.aarch64.binary
firefox-devel-82.0-1.aarch64.binary
firefox-el-82.0-1.aarch64.binary
firefox-en_GB-82.0-1.aarch64.binary
firefox-eo-82.0-1.aarch64.binary
firefox-es_AR-82.0-1.aarch64.binary
firefox-es_CL-82.0-1.aarch64.binary
firefox-es_ES-82.0-1.aarch64.binary
firefox-es_MX-82.0-1.aarch64.binary
firefox-et-82.0-1.aarch64.binary
firefox-eu-82.0-1.aarch64.binary
firefox-fa-82.0-1.aarch64.binary
firefox-fi-82.0-1.aarch64.binary
firefox-fr-82.0-1.aarch64.binary
firefox-fy-82.0-1.aarch64.binary
firefox-ga_IE-82.0-1.aarch64.binary
firefox-gd-82.0-1.aarch64.binary
firefox-gl-82.0-1.aarch64.binary
firefox-gu_IN-82.0-1.aarch64.binary
firefox-he-82.0-1.aarch64.binary
firefox-hi-82.0-1.aarch64.binary
firefox-hr-82.0-1.aarch64.binary
firefox-hu-82.0-1.aarch64.binary
firefox-hy-82.0-1.aarch64.binary
firefox-id-82.0-1.aarch64.binary
firefox-is-82.0-1.aarch64.binary
firefox-it-82.0-1.aarch64.binary
firefox-ja-82.0-1.aarch64.binary
firefox-kk-82.0-1.aarch64.binary
firefox-km-82.0-1.aarch64.binary
firefox-kn-82.0-1.aarch64.binary
firefox-ko-82.0-1.aarch64.binary
firefox-lt-82.0-1.aarch64.binary
firefox-lv-82.0-1.aarch64.binary
firefox-mk-82.0-1.aarch64.binary
firefox-mr-82.0-1.aarch64.binary
firefox-nb_NO-82.0-1.aarch64.binary
firefox-nl-82.0-1.aarch64.binary
firefox-nn_NO-82.0-1.aarch64.binary
firefox-pa_IN-82.0-1.aarch64.binary
firefox-pl-82.0-1.aarch64.binary
firefox-pt_BR-82.0-1.aarch64.binary
firefox-pt_PT-82.0-1.aarch64.binary
firefox-ro-82.0-1.aarch64.binary
firefox-ru-82.0-1.aarch64.binary
firefox-si-82.0-1.aarch64.binary
firefox-sk-82.0-1.aarch64.binary
firefox-sl-82.0-1.aarch64.binary
firefox-sq-82.0-1.aarch64.binary
firefox-sr-82.0-1.aarch64.binary
firefox-sv_SE-82.0-1.aarch64.binary
firefox-ta-82.0-1.aarch64.binary
firefox-te-82.0-1.aarch64.binary
firefox-th-82.0-1.aarch64.binary
firefox-tr-82.0-1.aarch64.binary
firefox-uk-82.0-1.aarch64.binary
firefox-vi-82.0-1.aarch64.binary
firefox-zh_CN-82.0-1.aarch64.binary
firefox-zh_TW-82.0-1.aarch64.binary
Build Date 2020-10-22 20:30:54 +0000 UTC
Last Updated 2020-10-26 23:22:19.998329462 +0000 UTC
$ git diff --patch-with-stat --summary 0681306249af77a63ca4eec1bd91e71293ca7700..742e4ba2ccf4ea10b0e9e35bee54f069290cde31

 .abf.yml                                         |  142 +-
 build-nspr.patch                                 |   28 +
 firefox-48.0.1-qt-compile.patch                  |   73 -
 firefox-57.0.4-bindgen_float128.patch            |   19 -
 firefox-72.0.2-sqlite-3.31.patch                 |  173 --
 firefox-73.0-kde.patch                           |  282 ----
 firefox-78.0-kde.patch => firefox-80.0-kde.patch |   12 +-
 firefox.spec                                     |   19 +-
 freetype261.patch                                |   30 -
 mozilla-73.0-kde.patch                           | 1938 ----------------------
 mozilla-78.0-kde.patch => mozilla-80.0-kde.patch |  112 +-
 prio-nss-build.patch                             |   88 -
 rhbz-1291190-appchooser-crash.patch              |   14 -
 13 files changed, 169 insertions(+), 2761 deletions(-)
 create mode 100644 build-nspr.patch
 delete mode 100644 firefox-48.0.1-qt-compile.patch
 delete mode 100644 firefox-57.0.4-bindgen_float128.patch
 delete mode 100644 firefox-72.0.2-sqlite-3.31.patch
 delete mode 100644 firefox-73.0-kde.patch
 rename firefox-78.0-kde.patch => firefox-80.0-kde.patch (96%)
 delete mode 100644 freetype261.patch
 delete mode 100644 mozilla-73.0-kde.patch
 rename mozilla-78.0-kde.patch => mozilla-80.0-kde.patch (95%)
 delete mode 100644 prio-nss-build.patch
 delete mode 100644 rhbz-1291190-appchooser-crash.patch

diff --git a/.abf.yml b/.abf.yml
index d4a8960..96ed4fb 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -1,75 +1,75 @@
 sources:
-  af.xpi: 0642084af964082c208b1ccecf887e178b28df8b
-  ar.xpi: 7aaeb9adeb185d12b07e1aa60ca06b2f85d35b5a
-  ast.xpi: 828f2eab993b43c0f602367c9ff7f75685e50338
+  af.xpi: 8b027222fe252dcce2fc6be7c48128877d78776c
+  ar.xpi: 04804e8b6b16125d3d4270455df0ca3b4805b981
+  ast.xpi: 1a264a5060db3fb5f33d6304f79e74f79e64fa6e
   autoconf-2.13.tar.gz: e4826c8bd85325067818f19b2b2ad2b625da66fc
   be.xpi: 12e55652aa01c3531dbeb1ac59b97eb649f937db
-  bg.xpi: 96195abf0309ab5b00bcf1088ce36a5c117422e1
-  bn.xpi: db93555ea52ab0f4bb6f9d1337e1013d35f9f3f4
-  br.xpi: 7123b5a9d56f133aed3a000e6f883b59d307ebb2
-  bs.xpi: d8b87325e230f9aa1ef5124ea77e02cd81844f86
-  ca.xpi: fdad0689c36acb5940d52e66c0a2de2f3653b8a5
-  cbindgen-vendor.tar.xz: 04a46d43f7f05e426bf2bd9f36592437353a3efc
-  cs.xpi: b80b1abef319651a0d5aca17d76aedbd99c5a69b
-  cy.xpi: 14a62092c45bd40b825a7b429a12085c90634295
-  da.xpi: c829bf1742b67be170476224ea78c6cb71eb35cf
-  de.xpi: 93fd3e1cbbedf8050e90d341c69ca53f2c15bd76
-  el.xpi: 7db2c4aa44cecec3946d762dada1de7000239702
-  en-GB.xpi: 9504d69a9fcf19585ecbf0f0c2e14a8ca1825167
-  eo.xpi: 56636402da3cb4d36f8a1aacf219493f30cd7a07
-  es-AR.xpi: 6e7bfd6c346a7a40e00a2ab9f5e7a452698437aa
-  es-CL.xpi: 69a7c94fe3f9e7768fdbe7bc512f56259dcd1b9e
-  es-ES.xpi: 18f54d16a019ab34c9dd69dfed7b9e6d01b5d7bc
-  es-MX.xpi: 1c60989fbf1350eb769c9c3b7dcf29e6d5ddf3b9
-  et.xpi: fcaf8f978085194f31e53e6fad62d9649de7ba72
-  eu.xpi: ce9475989457ff7261630b0981e0fab443e17413
-  fa.xpi: ff9a631d5b4dd4e2acf26877da44059d12a010e2
-  fi.xpi: c7fd00920eb7c658f85a1e3dfd10e407e23df1d4
-  firefox-78.0.1.source.tar.xz: 3de95657c9d26bacd9a36e62f756d090d09db63b
+  bg.xpi: ee8267d626b80a1df1d965f1fcd6121fa914e6f5
+  bn.xpi: 05039c64b8bef3e56b3a050a67195f43908beea1
+  br.xpi: 39f20efd9bb2f5a319ce9c1860798201092e5b69
+  bs.xpi: 14c57dc31866a6775467cf619059c2c3144368ae
+  ca.xpi: 009060b1ee62db658059f3faae7c0befd4999a3a
+  cbindgen-vendor.tar.xz: e6630767130f0e7b92f24e815cf4dd3831e4830c
+  cs.xpi: 3490c0f3a11a49ed032258cb3b8913e5c8fa1975
+  cy.xpi: 136567736eec5019a9c981dd8bcf28194fa0de0b
+  da.xpi: 440aaaa1ad6ae68dad122f1434dcd700d0ba9efa
+  de.xpi: 0800d4ce966cbe356d81cc1f30dac89c74df28f5
+  el.xpi: 9bd07d574574221e341812739d19bad7b293a5aa
+  en-GB.xpi: 1497cbaa3ddca81221431c410010509ba01917b7
+  eo.xpi: dd68e2a9f4564db78eee1ffefc96e2154a6f4498
+  es-AR.xpi: 6b66ca5b05615b52490dff14998b9d80c34dee44
+  es-CL.xpi: 8a32f798a6ab0398a26ec004543b33ef7089b4a4
+  es-ES.xpi: 3b7b1ef28e8ebd98ced6743bbb8224d83fe04ff4
+  es-MX.xpi: 589de09c367dd38e02beaf9ec83f3b9c8d5d3103
+  et.xpi: 0b914ef4a6d51676e552a143db0a3d67787f9501
+  eu.xpi: d1bc5205f969073d669b5eba569c6ed39bf09cf9
+  fa.xpi: 9c50ebffbe3b44ccdb7bf26a207391f2d1b66cee
+  fi.xpi: 2bc31f571b705a2701d2203459c5af8cb64ea7ec
+  firefox-82.0.source.tar.xz: aa8485a65038f1390eb9c367f5b6195cb7ca3bb8
   firefox-omv-default-prefs.js: 7010f8f73032df2e7799843863b97c6a3ba36378
-  fr.xpi: f7cbbe3aadbded4578c20e469c619b8e0ae33dca
-  fy-NL.xpi: a30c8de02a4ea38949624ce01543ff63f15e7686
-  ga-IE.xpi: 819614ce45bbdd822c2400dca8187a717690446d
-  gd.xpi: 143410a717cf09ed3caf2271f3656ae6f1562eb4
-  gl.xpi: 5fc34aee753cbdf264602c36652a8c48e46aa049
-  gu-IN.xpi: 1bfefa9de7413410b6d5a00740eaadbb70e14bc6
-  he.xpi: 9bb1bc76ca36fa3d9233d880037732ddcfdda7d6
-  hi-IN.xpi: bf5040a55992f1d2ceff35e4de5313c9b77ba362
-  hr.xpi: bc31884c038e5ed86c8ffcd229b45c6e027faf42
-  hu.xpi: c9aa2604911c8007e66a091aac7327afa8d35403
-  hy-AM.xpi: fc4825063898e026206d1240ba0e14e3a2edd87b
-  id.xpi: 26830dc97fa93226b3f04dc2a86ad0dcb7156887
-  is.xpi: c032a6c838132739d47c43139a94ceceba3c3e8a
-  it.xpi: 7cbbbf34b985bbf610d79a53d93490f3d0206c9e
-  ja.xpi: 73908f5b9f1f2b8f46f8d1609cc120c96fbf56f4
-  kk.xpi: e63074e827c295b37e17fdb632af9a46ee94c153
-  km.xpi: 6467a40617a687e0aded4cffe76745f97cfd8d59
-  kn.xpi: 029489f97a4c801fcafd8258fce2210bddf004de
-  ko.xpi: 70cb6698f68beab3858de969fe35cb1ec44e6b6f
-  lt.xpi: b0e62367f6c658702bba250e4037c3023b799119
-  lv.xpi: b0b8458f8fe4b1d2f8371ac0c83352172bebd13f
-  mk.xpi: d06badf5bd05a2f15608ebbf6152dbb87fced9e4
-  mr.xpi: 3975167f3bc1141cacc7565813d0e1f862564311
-  nb-NO.xpi: 6aae5af8f7184c4682c3066a05e927ec3b1095ad
-  nl.xpi: 810c3376bd673da5f300a844d5416020cb5d1719
-  nn-NO.xpi: 794be4b6e51d019a6522d37c9089f02ad00fe081
-  pa-IN.xpi: 042a1e134084bce13e70b9218bc3f3b9552cbb05
-  pl.xpi: 3e5f863f9acfef14d4aadb4536bd31deaa2f9d67
-  pt-BR.xpi: c0b497d78646016546bbdfdcc4153d5a11dba66c
-  pt-PT.xpi: b29c7e19307f42208d0272ab62037bea5f9885fb
-  ro.xpi: ed2ccae7cd86723de29e13d65106e6e6d921d798
-  ru.xpi: 722c897c90ae0e7c68b30e6cc8b23549438231d1
-  si.xpi: d1bca1c62e9dfb92300a183708f6b158d89cacc8
-  sk.xpi: bc4f5bcecd1f9f5b57f75b97ab6e760236e5d351
-  sl.xpi: 6ba53fca405315a36196aeb24472821b09508f9d
-  sq.xpi: de163da759a68e3caba15b42007614846fd8fb85
-  sr.xpi: 04f196523a001bcd6f5d387abbad41b27a8bebcc
-  sv-SE.xpi: ba84feb496a7b024fd1bc56ad2d9a38e46f86805
-  ta.xpi: 05d62de79cc8153c24e818d93a230e35477f6e7e
-  te.xpi: 3fffc8a34172677b1dbc0491c49426a46828df08
-  th.xpi: 1fcd54f2a24ecb980cd79cfd78af9db3b42715e0
-  tr.xpi: 5a6678a58d82f99ff2f9483ce881e983b2d2bf6e
-  uk.xpi: 12e1691cbcc82e6e96a98697bc9c254da7580ef4
-  vi.xpi: b20d52e1a3afb93641696b2945a34c443b2d59d4
-  zh-CN.xpi: 8aa9cb260f8ec0d742e31dfb91ea6725eed008f5
-  zh-TW.xpi: 6457ae20bbebc0547fff90edae496f6b42ea2035
+  fr.xpi: 687c46df7d8103d764abe505d757492188a0555b
+  fy-NL.xpi: e926873c9f481e5fd1dea8b36f552e412582e937
+  ga-IE.xpi: 50e5609acd97eef2431adb734de1deb7538fe512
+  gd.xpi: 6169f5c4e0502df94f935d670cc44404ac2c212d
+  gl.xpi: 22f6902ec126d9dfb58befae4a8bbc45924d4d6e
+  gu-IN.xpi: 8f922ab44024e24de981321f81f143d11b741488
+  he.xpi: e697af7a6ba83b47d777e332ef335d0cb55fdf5e
+  hi-IN.xpi: a195389cc9a5d19d2ab8b9a2725fd5f6c0f884b2
+  hr.xpi: a3c972458f938c2b5566470f09247a9091fcab09
+  hu.xpi: 464e365dba8ccf0d661d59f670c644e0cb0c358b
+  hy-AM.xpi: 4f68e3b67c8b6e95bc0aa8c1d15dcb7655d8bc99
+  id.xpi: 36d4fdf2bb8ef85776ee0792d7b7c93b1f6dfbf0
+  is.xpi: e96f256d8eac0ce81e1ecba703a7a3ecd1766048
+  it.xpi: 97171959c83f7cdd8b6f44f6ff969972f651b21c
+  ja.xpi: 3676e887c8f8f0a37be8272fb5ad187444399946
+  kk.xpi: 3ff8342d79e38ce4391afe9cb1d4cfe3d6ef3af3
+  km.xpi: a4bbac62774bf9377a14bf545dcfd5f9c16361e9
+  kn.xpi: 262775ee5603c52add73f0a48ca21b8c9dd06fa5
+  ko.xpi: d059bcfa322c89a8e40872700ac279bd4bf9cd7f
+  lt.xpi: d76e9f2d0c5b22f92cee9c84cfbaeedfd724f53b
+  lv.xpi: cba932837c0e63705c6f7df995aaa2154007251d
+  mk.xpi: 7085bfcf6867e1535eef6aa207bbb376f7274331
+  mr.xpi: b4ca3bcf17681b49597962eac10df6579679b6e2
+  nb-NO.xpi: abd2b41d822d28063c3394526fc85a025c664dfc
+  nl.xpi: 1fe5f681072f5e25da1fb183602bec8920772493
+  nn-NO.xpi: bfd0588cbab21a05be53c4d4ff38fb4a27d4a00e
+  pa-IN.xpi: e4f493853513999a5dafc6f2cc583c354eba9eb2
+  pl.xpi: 20a7b3a3e902bb74077fe137a60ac9ec3bc24493
+  pt-BR.xpi: 3771fe22eeb2ff858922889d5ec3490d1110ffd0
+  pt-PT.xpi: f3c00e5a88df903e62422ec8602b64949240e1a0
+  ro.xpi: 8f288104a361bd20fb117a70f058a7e7529beed3
+  ru.xpi: c42c40646fe01c32d9db12b3e27ee2e816d48e25
+  si.xpi: c3dc8ae843e5a7fb356eb9e5236e8e7c59ab00c4
+  sk.xpi: 914b8e9ec76ee49502987a642adf39658a9f9bd0
+  sl.xpi: e56f80174139ba0db6301551b4f01634f9fa9e7c
+  sq.xpi: e6c5e23fd301887e54ead940a19474f3dc6e798b
+  sr.xpi: 915eaca2693b9e0e400cb4023a8b5416f901fee7
+  sv-SE.xpi: 887973055aa02d7c17e96ce8bc7a42af2f96ae74
+  ta.xpi: 38513e1b9e42fa4f1fd232c73e117cc0a1d459cc
+  te.xpi: f3d68685f8c14c52d5f643c0d4d913ff7fc0cc25
+  th.xpi: e206de462946f4e6794ad8c5926e7f71eb352f71
+  tr.xpi: 7758625760876bcd663e82bbbc0b756359a1c097
+  uk.xpi: 914c4e7e26d564d89f78c45f245e934454b8f39a
+  vi.xpi: fe255efa1b2ec7bdb5271509e308defdd9d784ba
+  zh-CN.xpi: e1ce46005bc743c61230e5179c2a0ce5fc724a13
+  zh-TW.xpi: 9ecf9ee877d75659d537e885542ae9dc05834a66
diff --git a/build-nspr.patch b/build-nspr.patch
new file mode 100644
index 0000000..acb67af
--- /dev/null
+++ b/build-nspr.patch
@@ -0,0 +1,28 @@
+diff -up firefox-80.0/dom/system/IOUtils.cpp.nspr-build firefox-80.0/dom/system/IOUtils.cpp
+--- firefox-80.0/dom/system/IOUtils.cpp.nspr-build	2020-08-19 17:38:00.895018639 +0200
++++ firefox-80.0/dom/system/IOUtils.cpp	2020-08-19 17:38:09.965978725 +0200
+@@ -14,9 +14,9 @@
+ #include "mozilla/Services.h"
+ #include "mozilla/Span.h"
+ #include "mozilla/TextUtils.h"
+-#include "nspr/prio.h"
+-#include "nspr/private/pprio.h"
+-#include "nspr/prtypes.h"
++#include "prio.h"
++#include "private/pprio.h"
++#include "prtypes.h"
+ #include "nsDirectoryServiceDefs.h"
+ #include "nsIFile.h"
+ #include "nsIGlobalObject.h"
+diff -up firefox-80.0/dom/system/IOUtils.h.nspr-build firefox-80.0/dom/system/IOUtils.h
+--- firefox-80.0/dom/system/IOUtils.h.nspr-build	2020-08-17 22:13:15.000000000 +0200
++++ firefox-80.0/dom/system/IOUtils.h	2020-08-19 17:20:33.332711771 +0200
+@@ -14,7 +14,7 @@
+ #include "mozilla/dom/TypedArray.h"
+ #include "mozilla/ErrorResult.h"
+ #include "mozilla/MozPromise.h"
+-#include "nspr/prio.h"
++#include "prio.h"
+ #include "nsIAsyncShutdown.h"
+ #include "nsISerialEventTarget.h"
+ #include "nsLocalFile.h"
diff --git a/firefox-48.0.1-qt-compile.patch b/firefox-48.0.1-qt-compile.patch
deleted file mode 100644
index 0568393..0000000
--- a/firefox-48.0.1-qt-compile.patch
+++ /dev/null
@@ -1,73 +0,0 @@
---- firefox-48.0.1/old-configure.in.omv~	2016-08-18 23:18:25.642529946 +0200
-+++ firefox-48.0.1/old-configure.in	2016-08-18 23:19:08.766274007 +0200
-@@ -3108,7 +3108,7 @@ then
-               AC_MSG_ERROR([$MOZ_QT_PKG_ERRORS Need qtbase development packages, (On Ubuntu, you might try installing the packages qtbase5-dev libqt5opengl5-dev.)])
-             ])
-             QT5INCDIR=`pkg-config --variable=includedir Qt5Gui`
--            MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QT5INCDIR/QtGui/$QT_VERSION/QtGui"
-+            MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QT5INCDIR/QtGui/$QT_VERSION/QtGui -I$QT5INCDIR -I$QT5INCDIR/QtCore -I$QT5INCDIR/QtGui -I$QT5INCDIR/QtXml -I$QT5INCDIR/QtNetwork -I$QT5INCDIR/QtPrintSupport -I$QT5INCDIR/QtNetwork/$QT_VERSION/QtNetwork/private"
-             if test "$NS_PRINTING"; then
-                 PKG_CHECK_MODULES(MOZ_QT_WIDGETS, Qt5PrintSupport, ,
-                 [
-@@ -3137,7 +3137,8 @@ then
-         5.*)
-             AC_MSG_RESULT("Using qt5: $QT_VERSION")
-             MOZ_QT_LIBS="$MOZ_QT_LIBS -L$QTDIR/lib/ -lQt5Gui -lQt5Network -lQt5Core -lQt5Xml"
--            MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtGui/$QT_VERSION/QtGui"
-+            QT5INCDIR=`pkg-config --variable=includedir Qt5Gui`
-+            MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QT5INCDIR/QtGui/$QT_VERSION/QtGui -I$QT5INCDIR -I$QT5INCDIR/QtCore -I$QT5INCDIR/QtGui -I$QT5INCDIR/QtXml -I$QT5INCDIR/QtNetwork -I$QT5INCDIR/QtPrintSupport -I$QT5INCDIR/QtNetwork/$QT_VERSION/QtNetwork/private"
-             if test "$NS_PRINTING"; then
-                 MOZ_QT_LIBS="$MOZ_QT_LIBS -lQt5Widgets -lQt5PrintSupport"
-                 MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtPrintSupport"
---- firefox-48.0.1/old-configure.omv~	2016-08-18 23:16:38.058168813 +0200
-+++ firefox-48.0.1/old-configure	2016-08-18 23:19:23.382187278 +0200
-@@ -16257,7 +16257,7 @@ echo "configure:16229: checking MOZ_QT_L
-   fi
- 
-             QT5INCDIR=`pkg-config --variable=includedir Qt5Gui`
--            MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QT5INCDIR/QtGui/$QT_VERSION/QtGui"
-+            MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QT5INCDIR/QtGui/$QT_VERSION/QtGui -I$QT5INCDIR -I$QT5INCDIR/QtCore -I$QT5INCDIR/QtGui -I$QT5INCDIR/QtXml -I$QT5INCDIR/QtNetwork -I$QT5INCDIR/QtPrintSupport -I$QT5INCDIR/QtNetwork/$QT_VERSION/QtNetwork/private"
-             if test "$NS_PRINTING"; then
-                 succeeded=no
- 
-@@ -16443,7 +16443,8 @@ test -n "$HOST_RCC" || HOST_RCC=""""
-         5.*)
-             echo "$ac_t"""Using qt5: $QT_VERSION"" 1>&6
-             MOZ_QT_LIBS="$MOZ_QT_LIBS -L$QTDIR/lib/ -lQt5Gui -lQt5Network -lQt5Core -lQt5Xml"
--            MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtGui/$QT_VERSION/QtGui"
-+            QT5INCDIR=`pkg-config --variable=includedir Qt5Gui`
-+            MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QT5INCDIR/QtGui/$QT_VERSION/QtGui -I$QT5INCDIR -I$QT5INCDIR/QtCore -I$QT5INCDIR/QtGui -I$QT5INCDIR/QtXml -I$QT5INCDIR/QtNetwork -I$QT5INCDIR/QtPrintSupport -I$QT5INCDIR/QtNetwork/$QT_VERSION/QtNetwork/private"
-             if test "$NS_PRINTING"; then
-                 MOZ_QT_LIBS="$MOZ_QT_LIBS -lQt5Widgets -lQt5PrintSupport"
-                 MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtPrintSupport"
---- firefox-48.0.1/widget/nsShmImage.h.omv~	2016-08-18 23:27:07.889434164 +0200
-+++ firefox-48.0.1/widget/nsShmImage.h	2016-08-18 23:27:18.316372416 +0200
-@@ -18,6 +18,7 @@
- #include "Units.h"
- 
- #include <X11/Xlib.h>
-+#include <X11/Xutil.h>
- #include <X11/extensions/XShm.h>
- 
- class nsShmImage {
---- firefox-48.0.1/toolkit/components/remote/nsQtRemoteService.cpp.omv~	2016-08-18 23:51:09.400065396 +0200
-+++ firefox-48.0.1/toolkit/components/remote/nsQtRemoteService.cpp	2016-08-18 23:51:18.522009043 +0200
-@@ -83,7 +83,7 @@ nsQtRemoteService::Startup(const char* a
- }
- 
- NS_IMETHODIMP
--nsQtRemoteService::RegisterWindow(nsIDOMWindow* aWindow)
-+nsQtRemoteService::RegisterWindow(mozIDOMWindow* aWindow)
- {
-   return NS_ERROR_NOT_IMPLEMENTED;
- }
---- firefox-48.0.1/gfx/thebes/gfxQPainterSurface.cpp.omv~	2016-08-18 23:59:01.648163858 +0200
-+++ firefox-48.0.1/gfx/thebes/gfxQPainterSurface.cpp	2016-08-18 23:59:42.219915675 +0200
-@@ -9,6 +9,7 @@
- #ifdef CAIRO_HAS_QT_SURFACE
- #include "cairo-qt.h"
- #include "gfxQPainterSurface.h"
-+#include "../2d/HelpersCairo.h"
- 
- gfxQPainterSurface::gfxQPainterSurface(QPainter *painter)
- {
diff --git a/firefox-57.0.4-bindgen_float128.patch b/firefox-57.0.4-bindgen_float128.patch
deleted file mode 100644
index cc6469d..0000000
--- a/firefox-57.0.4-bindgen_float128.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -ur /home/crispin/rpmbuild/BUILD/firefox-57.0.4/third_party/rust/bindgen-0.29.1/src/ir/context.rs third_party/rust/bindgen-0.29.1/src/ir/context.rs
---- a/third_party/rust/bindgen/src/ir/context.rs	2017-11-02 16:16:31.000000000 +0000
-+++ b/third_party/rust/bindgen/src/ir/context.rs	2018-01-17 10:01:52.333059791 +0000
-@@ -1406,7 +1406,8 @@
-                     CXType_Float => FloatKind::Float,
-                     CXType_Double => FloatKind::Double,
-                     CXType_LongDouble => FloatKind::LongDouble,
--                    _ => panic!("Non floating-type complex?"),
-+                    CXType_Float128 => FloatKind::Float128,
-+                    _ => panic!("Non floating-type complex? {:?}, {:?}", ty, float_type),
-                 };
-                 TypeKind::Complex(float_kind)
-             }
---- firefox-58.0.1/third_party/rust/bindgen/.cargo-checksum.json.orig	2018-01-29 21:22:04.843518207 +0000
-+++ firefox-58.0.1/third_party/rust/bindgen/.cargo-checksum.json	2018-01-29 21:22:45.074128415 +0000
-@@ -1 +1 @@
--{"files":{"Cargo.toml":"314227b3a01aea704a0b7b1a2280350ccf965823e3d2ae307bda4b332f88b863","build.rs":"032a1c51963894a421b0535f9227796d88768ac5f665a81d2edced69dc6d106a","src/callbacks.rs":"c5c4e5bc8c49cb191d1b100339772fdc7dd1dbf5025a9de1ecaafb70f86cb48f","src/clang.rs":"541a016580c98c2e2af36c3c11b80127c26090795a380480c925c5f411f8100d","src/codegen/error.rs":"2613af1d833377fd4a70719f4a09951d9d45dc9227827b9a2a938a1bcaaea2dd","src/codegen/helpers.rs":"c7ce49fca07d7690f24fe3440af635a66c758a03d3d79396623289fd191215f6","src/codegen/impl_debug.rs":"e2ffd5b6ed936698aa4b9e7e3459d353383792707ad51f829a18a822f69cab0e","src/codegen/impl_partialeq.rs":"e86050b98f57fa4496dbde0beea319a89e46290309d274f626361779549b95bd","src/codegen/mod.rs":"92249f5626cf12d2f9f032277562b1f5e797cdc28c47efc778c6f6fdfb2ecedc","src/codegen/struct_layout.rs":"45f5c4182b6d4d890bb37f47cff13d1c8fb2392cc15d64fb7afccd12f91276dc","src/extra_assertions.rs":"449549c4a7a50c3f0b06332452b2fb6c9b23f31ca8e5e1656fe6c7f21e8ef7fa","src/features.rs":"8b1c8ea23bd3d0e00dddf3897639c43f0c18057f9f3e5dee48e09a8017cf1a67","src/ir/analysis/derive_copy.rs":"c8d700dcde2419d2687377a7cb1024ad3722bbcb83d0b1031618f57d484793b4","src/ir/analysis/derive_debug.rs":"1d6621c0fa5d899310cc175cb99703606ed34fd7f7ad77bb60f012f25ba504af","src/ir/analysis/derive_default.rs":"3af97eaa9bdc91a0bded060b393d0bb23ef9dcf59a7a6ed7d79814f35f73b66a","src/ir/analysis/derive_hash.rs":"c8a95040352b3d10f8edb46f6ae513d4f15ec87197668b1fc1d7cf2cb416054f","src/ir/analysis/derive_partialeq_or_partialord.rs":"1f7c097bde85ebb4082a3a318a753db13e8b4733fa1433dcc054f137dc0e6c2d","src/ir/analysis/has_destructor.rs":"d9aaaceba580b48eb0df4e5537b34b417c51ccdfeb8f6b72484f3bf4992317fe","src/ir/analysis/has_float.rs":"2a0465503d2c8247eaf916bd6a03594f3dc0370533d9a7c58cc5afb86693816c","src/ir/analysis/has_type_param_in_array.rs":"fcb1c78b6000f1f5eb8d8147e2afdaba9eb0e3a81b61e72537048dfdbeea7bcd","src/ir/analysis/has_vtable.rs":"37765e954ef792e369a58ccfe1d827a00fe9bce680466da1d6523671b94b6c92","src/ir/analysis/mod.rs":"ea5ace45c77e855674bb565ba0fef556f60e3293b0ddcf11d3a5a6ec15ab0648","src/ir/analysis/sizedness.rs":"3d3c8bde40604d53bb64273a3cbd8c55936a7dfe1de9b2ba92fc2c45572624b4","src/ir/analysis/template_params.rs":"5c6ee7a251a321ef5733e2e7ac3264621b4181268babcc008b69dbfc37691fb1","src/ir/annotations.rs":"ef106afcbe6084c18bd13a37ee3c1cdc9596bfb055db8c773d81f8f15fec3208","src/ir/comment.rs":"36f2a1d3970fdbf3d72c1f094043902747cde395215bdf7e9103926d9df011fd","src/ir/comp.rs":"b952cec08cdd126779b630ce523e285610bd4f4da563c661a8b92c556a4e1628","src/ir/context.rs":"2fa83bb1a062636f50e71452ae9cc00e772862f1c160a38d6f0c80a320fedfd8","src/ir/derive.rs":"1fd6ad621e3c60b950acbd51fbe386d1f0fadb7c1889c723245afff45e42e143","src/ir/dot.rs":"eca03a493a7fe48044b832c37c71d51f1bd4e8689feb6f1cb8bc0422541c7284","src/ir/enum_ty.rs":"7f6b56d47d47974548219d221eaa8a9bdea40fc85f405e2d28af5e4a629d748e","src/ir/function.rs":"b95d381633cfd652e46d2322dd039c328dbd3d2959730916a2786b80fc8f862d","src/ir/int.rs":"1f61a472288afe489d9320bc8b13920333ece57891ae8570b4c4f25ab50688e6","src/ir/item.rs":"a46f5968c85861d44356bacdd26b7e5925aa4ba715acfedf08d47122818b00c3","src/ir/item_kind.rs":"13048962657436a757ff9483d96f2ce351ec5f827ecab4921ed643f6f115c497","src/ir/layout.rs":"e3d1adf1ad2fa5bd96530cdd5097db3d9cc7b44d33ec23a04fcfccecd9cf4469","src/ir/mod.rs":"2eae90f207fad2e45957ec9287064992a419e3fc916aba84faff2ea25cbeb5ee","src/ir/module.rs":"c4d90bf38fe3672e01923734ccbdb7951ea929949d5f413a9c2aee12395a5094","src/ir/objc.rs":"05068c4fbf42429c4ac2a233c874f18ffcf7dc1744398e400a5a48d0e7a972f2","src/ir/template.rs":"bcd750450a4df0200a6e7958f9c96a09b91e3ccd29c60712f2b9d3458f1234aa","src/ir/traversal.rs":"a108f2b2a1b3d2e679274eead8cf6f8fc78454e88943527d56bb30b5f071f104","src/ir/ty.rs":"944dcee00762d77640d1bc9aacad16c489c2d2cb9d2c5fd00cbc97a5599984e4","src/ir/var.rs":"685718e5df2e146fde3c00a18940cbd30d25b5055a254cf14385aa269d98d906","src/lib.rs":"9dfc84f927bb3ba0737be29e668bf55943fa08bb73656fec7b5dbb70556ae235","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"fa0a21b4aca4df72896f911de3ee252bec87abb4c871e39b53e90923181a1658","src/options.rs":"8507b27bec74b3729b79c306ced738d60df026d63939f35e62332c4505497054","src/parse.rs":"be7d13cc84fae79ec7b3aa9e77063fa475a48d74a854423e2c72d75006a25202","src/regex_set.rs":"a55241f2117f15729d174790f386e255fcb224b692325bbe6716dbb1d6874881","src/time.rs":"a02befb48d10dcc31e3f9571b2fa1c40f97fafe6f6ae7d7fc4f8fd01f1a169ba"},"package":"57253399c086f4f29e57ffd3b5cdbc23a806a00292619351aa4cfa39cb49d4ea"}
-\ No newline at end of file
-+{"files":{"Cargo.toml":"314227b3a01aea704a0b7b1a2280350ccf965823e3d2ae307bda4b332f88b863","build.rs":"032a1c51963894a421b0535f9227796d88768ac5f665a81d2edced69dc6d106a","src/callbacks.rs":"c5c4e5bc8c49cb191d1b100339772fdc7dd1dbf5025a9de1ecaafb70f86cb48f","src/clang.rs":"541a016580c98c2e2af36c3c11b80127c26090795a380480c925c5f411f8100d","src/codegen/error.rs":"2613af1d833377fd4a70719f4a09951d9d45dc9227827b9a2a938a1bcaaea2dd","src/codegen/helpers.rs":"c7ce49fca07d7690f24fe3440af635a66c758a03d3d79396623289fd191215f6","src/codegen/impl_debug.rs":"e2ffd5b6ed936698aa4b9e7e3459d353383792707ad51f829a18a822f69cab0e","src/codegen/impl_partialeq.rs":"e86050b98f57fa4496dbde0beea319a89e46290309d274f626361779549b95bd","src/codegen/mod.rs":"92249f5626cf12d2f9f032277562b1f5e797cdc28c47efc778c6f6fdfb2ecedc","src/codegen/struct_layout.rs":"45f5c4182b6d4d890bb37f47cff13d1c8fb2392cc15d64fb7afccd12f91276dc","src/extra_assertions.rs":"449549c4a7a50c3f0b06332452b2fb6c9b23f31ca8e5e1656fe6c7f21e8ef7fa","src/features.rs":"8b1c8ea23bd3d0e00dddf3897639c43f0c18057f9f3e5dee48e09a8017cf1a67","src/ir/analysis/derive_copy.rs":"c8d700dcde2419d2687377a7cb1024ad3722bbcb83d0b1031618f57d484793b4","src/ir/analysis/derive_debug.rs":"1d6621c0fa5d899310cc175cb99703606ed34fd7f7ad77bb60f012f25ba504af","src/ir/analysis/derive_default.rs":"3af97eaa9bdc91a0bded060b393d0bb23ef9dcf59a7a6ed7d79814f35f73b66a","src/ir/analysis/derive_hash.rs":"c8a95040352b3d10f8edb46f6ae513d4f15ec87197668b1fc1d7cf2cb416054f","src/ir/analysis/derive_partialeq_or_partialord.rs":"1f7c097bde85ebb4082a3a318a753db13e8b4733fa1433dcc054f137dc0e6c2d","src/ir/analysis/has_destructor.rs":"d9aaaceba580b48eb0df4e5537b34b417c51ccdfeb8f6b72484f3bf4992317fe","src/ir/analysis/has_float.rs":"2a0465503d2c8247eaf916bd6a03594f3dc0370533d9a7c58cc5afb86693816c","src/ir/analysis/has_type_param_in_array.rs":"fcb1c78b6000f1f5eb8d8147e2afdaba9eb0e3a81b61e72537048dfdbeea7bcd","src/ir/analysis/has_vtable.rs":"37765e954ef792e369a58ccfe1d827a00fe9bce680466da1d6523671b94b6c92","src/ir/analysis/mod.rs":"ea5ace45c77e855674bb565ba0fef556f60e3293b0ddcf11d3a5a6ec15ab0648","src/ir/analysis/sizedness.rs":"3d3c8bde40604d53bb64273a3cbd8c55936a7dfe1de9b2ba92fc2c45572624b4","src/ir/analysis/template_params.rs":"5c6ee7a251a321ef5733e2e7ac3264621b4181268babcc008b69dbfc37691fb1","src/ir/annotations.rs":"ef106afcbe6084c18bd13a37ee3c1cdc9596bfb055db8c773d81f8f15fec3208","src/ir/comment.rs":"36f2a1d3970fdbf3d72c1f094043902747cde395215bdf7e9103926d9df011fd","src/ir/comp.rs":"b952cec08cdd126779b630ce523e285610bd4f4da563c661a8b92c556a4e1628","src/ir/context.rs":"8ffce6312194e153f5ecf2123db0a144e9a53713572b18941140680aee142088","src/ir/derive.rs":"1fd6ad621e3c60b950acbd51fbe386d1f0fadb7c1889c723245afff45e42e143","src/ir/dot.rs":"eca03a493a7fe48044b832c37c71d51f1bd4e8689feb6f1cb8bc0422541c7284","src/ir/enum_ty.rs":"7f6b56d47d47974548219d221eaa8a9bdea40fc85f405e2d28af5e4a629d748e","src/ir/function.rs":"b95d381633cfd652e46d2322dd039c328dbd3d2959730916a2786b80fc8f862d","src/ir/int.rs":"1f61a472288afe489d9320bc8b13920333ece57891ae8570b4c4f25ab50688e6","src/ir/item.rs":"a46f5968c85861d44356bacdd26b7e5925aa4ba715acfedf08d47122818b00c3","src/ir/item_kind.rs":"13048962657436a757ff9483d96f2ce351ec5f827ecab4921ed643f6f115c497","src/ir/layout.rs":"e3d1adf1ad2fa5bd96530cdd5097db3d9cc7b44d33ec23a04fcfccecd9cf4469","src/ir/mod.rs":"2eae90f207fad2e45957ec9287064992a419e3fc916aba84faff2ea25cbeb5ee","src/ir/module.rs":"c4d90bf38fe3672e01923734ccbdb7951ea929949d5f413a9c2aee12395a5094","src/ir/objc.rs":"05068c4fbf42429c4ac2a233c874f18ffcf7dc1744398e400a5a48d0e7a972f2","src/ir/template.rs":"bcd750450a4df0200a6e7958f9c96a09b91e3ccd29c60712f2b9d3458f1234aa","src/ir/traversal.rs":"a108f2b2a1b3d2e679274eead8cf6f8fc78454e88943527d56bb30b5f071f104","src/ir/ty.rs":"944dcee00762d77640d1bc9aacad16c489c2d2cb9d2c5fd00cbc97a5599984e4","src/ir/var.rs":"685718e5df2e146fde3c00a18940cbd30d25b5055a254cf14385aa269d98d906","src/lib.rs":"9dfc84f927bb3ba0737be29e668bf55943fa08bb73656fec7b5dbb70556ae235","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"fa0a21b4aca4df72896f911de3ee252bec87abb4c871e39b53e90923181a1658","src/options.rs":"8507b27bec74b3729b79c306ced738d60df026d63939f35e62332c4505497054","src/parse.rs":"be7d13cc84fae79ec7b3aa9e77063fa475a48d74a854423e2c72d75006a25202","src/regex_set.rs":"a55241f2117f15729d174790f386e255fcb224b692325bbe6716dbb1d6874881","src/time.rs":"a02befb48d10dcc31e3f9571b2fa1c40f97fafe6f6ae7d7fc4f8fd01f1a169ba"},"package":"57253399c086f4f29e57ffd3b5cdbc23a806a00292619351aa4cfa39cb49d4ea"}
diff --git a/firefox-72.0.2-sqlite-3.31.patch b/firefox-72.0.2-sqlite-3.31.patch
deleted file mode 100644
index 27693a8..0000000
--- a/firefox-72.0.2-sqlite-3.31.patch
+++ /dev/null
@@ -1,173 +0,0 @@
-diff -up firefox-72.0.2/storage/TelemetryVFS.cpp.omv~ firefox-72.0.2/storage/TelemetryVFS.cpp
---- firefox-72.0.2/storage/TelemetryVFS.cpp.omv~	2020-01-23 23:39:53.926584589 +0100
-+++ firefox-72.0.2/storage/TelemetryVFS.cpp	2020-01-23 23:40:01.604584216 +0100
-@@ -167,140 +167,12 @@ struct telemetry_file {
-   sqlite3_file pReal[1];
- };
- 
--const char* DatabasePathFromWALPath(const char* zWALName) {
--  /**
--   * Do some sketchy pointer arithmetic to find the parameter key. The WAL
--   * filename is in the middle of a big allocated block that contains:
--   *
--   *   - Random Values
--   *   - Main Database Path
--   *   - \0
--   *   - Multiple URI components consisting of:
--   *     - Key
--   *     - \0
--   *     - Value
--   *     - \0
--   *   - \0
--   *   - Journal Path
--   *   - \0
--   *   - WAL Path (zWALName)
--   *   - \0
--   *
--   * Because the main database path is preceded by a random value we have to be
--   * careful when trying to figure out when we should terminate this loop.
--   */
--  MOZ_ASSERT(zWALName);
--
--  nsDependentCSubstring dbPath(zWALName, strlen(zWALName));
--
--  // Chop off the "-wal" suffix.
--  NS_NAMED_LITERAL_CSTRING(kWALSuffix, "-wal");
--  MOZ_ASSERT(StringEndsWith(dbPath, kWALSuffix));
--
--  dbPath.Rebind(zWALName, dbPath.Length() - kWALSuffix.Length());
--  MOZ_ASSERT(!dbPath.IsEmpty());
--
--  // We want to scan to the end of the key/value URI pairs. Skip the preceding
--  // null and go to the last char of the journal path.
--  const char* cursor = zWALName - 2;
--
--  // Make sure we just skipped a null.
--  MOZ_ASSERT(!*(cursor + 1));
--
--  // Walk backwards over the journal path.
--  while (*cursor) {
--    cursor--;
--  }
--
--  // There should be another null here.
--  cursor--;
--  MOZ_ASSERT(!*cursor);
--
--  // Back up one more char to the last char of the previous string. It may be
--  // the database path or it may be a key/value URI pair.
--  cursor--;
--
--#ifdef DEBUG
--  {
--    // Verify that we just walked over the journal path. Account for the two
--    // nulls we just skipped.
--    const char* journalStart = cursor + 3;
--
--    nsDependentCSubstring journalPath(journalStart, strlen(journalStart));
--
--    // Chop off the "-journal" suffix.
--    NS_NAMED_LITERAL_CSTRING(kJournalSuffix, "-journal");
--    MOZ_ASSERT(StringEndsWith(journalPath, kJournalSuffix));
--
--    journalPath.Rebind(journalStart,
--                       journalPath.Length() - kJournalSuffix.Length());
--    MOZ_ASSERT(!journalPath.IsEmpty());
--
--    // Make sure that the database name is a substring of the journal name.
--    MOZ_ASSERT(journalPath == dbPath);
--  }
--#endif
--
--  // Now we're either at the end of the key/value URI pairs or we're at the
--  // end of the database path. Carefully walk backwards one character at a
--  // time to do this safely without running past the beginning of the database
--  // path.
--  const char* const dbPathStart = dbPath.BeginReading();
--  const char* dbPathCursor = dbPath.EndReading() - 1;
--  bool isDBPath = true;
--
--  while (true) {
--    MOZ_ASSERT(*dbPathCursor, "dbPathCursor should never see a null char!");
--
--    if (isDBPath) {
--      isDBPath =
--          dbPathStart <= dbPathCursor && *dbPathCursor == *cursor && *cursor;
--    }
--
--    if (!isDBPath) {
--      // This isn't the database path so it must be a value. Scan past it and
--      // the key also.
--      for (size_t stringCount = 0; stringCount < 2; stringCount++) {
--        // Scan past the string to the preceding null character.
--        while (*cursor) {
--          cursor--;
--        }
--
--        // Back up one more char to the last char of preceding string.
--        cursor--;
--      }
--
--      // Reset and start again.
--      dbPathCursor = dbPath.EndReading() - 1;
--      isDBPath = true;
--
--      continue;
--    }
--
--    MOZ_ASSERT(isDBPath);
--    MOZ_ASSERT(*cursor);
--
--    if (dbPathStart == dbPathCursor) {
--      // Found the full database path, we're all done.
--      MOZ_ASSERT(nsDependentCString(cursor) == dbPath);
--      return cursor;
--    }
--
--    // Change the cursors and go through the loop again.
--    cursor--;
--    dbPathCursor--;
--  }
--
--  MOZ_CRASH("Should never get here!");
--}
--
- already_AddRefed<QuotaObject> GetQuotaObjectFromNameAndParameters(
--    const char* zName, const char* zURIParameterKey) {
-+    const char* zName) {
-   MOZ_ASSERT(zName);
--  MOZ_ASSERT(zURIParameterKey);
- 
-   const char* directoryLockIdParam =
--      sqlite3_uri_parameter(zURIParameterKey, "directoryLockId");
-+      sqlite3_uri_parameter(zName, "directoryLockId");
-   if (!directoryLockIdParam) {
-     return nullptr;
-   }
-@@ -328,13 +200,7 @@ void MaybeEstablishQuotaControl(const ch
- 
-   MOZ_ASSERT(zName);
- 
--  const char* zURIParameterKey =
--      (flags & SQLITE_OPEN_WAL) ? DatabasePathFromWALPath(zName) : zName;
--
--  MOZ_ASSERT(zURIParameterKey);
--
--  pFile->quotaObject =
--      GetQuotaObjectFromNameAndParameters(zName, zURIParameterKey);
-+  pFile->quotaObject = GetQuotaObjectFromNameAndParameters(zName);
- }
- 
- /*
-@@ -687,10 +553,7 @@ int xDelete(sqlite3_vfs* vfs, const char
-   RefPtr<QuotaObject> quotaObject;
- 
-   if (StringEndsWith(nsDependentCString(zName), NS_LITERAL_CSTRING("-wal"))) {
--    const char* zURIParameterKey = DatabasePathFromWALPath(zName);
--    MOZ_ASSERT(zURIParameterKey);
--
--    quotaObject = GetQuotaObjectFromNameAndParameters(zName, zURIParameterKey);
-+    quotaObject = GetQuotaObjectFromNameAndParameters(zName);
-   }
- 
-   rc = orig_vfs->xDelete(orig_vfs, zName, syncDir);
diff --git a/firefox-73.0-kde.patch b/firefox-73.0-kde.patch
deleted file mode 100644
index ce912e0..0000000
--- a/firefox-73.0-kde.patch
+++ /dev/null
@@ -1,282 +0,0 @@
-# HG changeset patch
-# User msirringhaus@suse.de
-# Date 1559300151 -7200
-#      Fri May 31 12:55:51 2019 +0200
-# Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
-# Parent  1143a0e4b2eefa83f74fc484c547d7790ca455a1
-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/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
-@@ -329,16 +329,23 @@ var gMainPane = {
-         }, backoffTimes[this._backoffIndex + 1 < backoffTimes.length ? this._backoffIndex++ : backoffTimes.length - 1]);
-       };
- 
-       window.setTimeout(() => {
-         window.requestIdleCallback(pollForDefaultBrowser);
-       }, backoffTimes[this._backoffIndex]);
-     }
- 
-+    var env = Components.classes["@mozilla.org/process/environment;1"]
-+      .getService(Components.interfaces.nsIEnvironment);
-+    var kde_session = 0;
-+    if (env.get('KDE_FULL_SESSION') == "true") {
-+      kde_session = 1;
-+    }
-+
-     this.initBrowserContainers();
-     this.buildContentProcessCountMenuList();
- 
-     let performanceSettingsLink = document.getElementById(
-       "performanceSettingsLearnMore"
-     );
-     let performanceSettingsUrl =
-       Services.urlFormatter.formatURLPref("app.support.baseURL") +
-@@ -1283,16 +1290,27 @@ var gMainPane = {
-       this._backoffIndex = 0;
- 
-       let shellSvc = getShellService();
-       if (!shellSvc) {
-         return;
-       }
-       try {
-         shellSvc.setDefaultBrowser(true, false);
-+        if (kde_session == 1) {
-+          var shellObj = Components.classes["@mozilla.org/file/local;1"]
-+            .createInstance(Components.interfaces.nsILocalFile);
-+          shellObj.initWithPath("/usr/bin/kwriteconfig");
-+          var process = Components.classes["@mozilla.org/process/util;1"]
-+            .createInstance(Components.interfaces.nsIProcess);
-+          process.init(shellObj);
-+          var args = ["--file", "kdeglobals", "--group", "General", "--key",
-+              "BrowserApplication", "firefox"];
-+          process.run(false, args, args.length);
-+        }
-       } 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
-@@ -28,16 +28,18 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'coco
-     ]
- elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
-     XPIDL_SOURCES += [
-         'nsIGNOMEShellService.idl',
-     ]
- 
-     SOURCES += [
-         'nsGNOMEShellService.cpp',
-+        'nsKDEShellService.cpp',
-+        'nsUnixShellService.cpp',
-     ]
- elif CONFIG['OS_ARCH'] == 'WINNT':
-     XPIDL_SOURCES += [
-         'nsIWindowsShellService.idl',
-     ]
-     SOURCES += [
-         'nsWindowsShellService.cpp',
-     ]
-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
-@@ -0,0 +1,103 @@
-+/* -*- 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/. */
-+
-+#include "mozilla/ArrayUtils.h"
-+
-+#include "nsCOMPtr.h"
-+#include "nsKDEShellService.h"
-+#include "nsShellService.h"
-+#include "nsKDEUtils.h"
-+#include "nsIPrefService.h"
-+#include "nsIProcess.h"
-+#include "nsIFile.h"
-+#include "nsServiceManagerUtils.h"
-+#include "nsComponentManagerUtils.h"
-+#include "nsIMutableArray.h"
-+#include "nsISupportsPrimitives.h"
-+#include "nsArrayUtils.h"
-+
-+using namespace mozilla;
-+
-+nsresult
-+nsKDEShellService::Init()
-+{
-+    if( !nsKDEUtils::kdeSupport())
-+        return NS_ERROR_NOT_AVAILABLE;
-+    return NS_OK;
-+}
-+
-+NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService)
-+
-+NS_IMETHODIMP
-+nsKDEShellService::IsDefaultBrowser(bool aForAllTypes,
-+                                    bool* aIsDefaultBrowser)
-+{
-+    *aIsDefaultBrowser = false;
-+
-+    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
-+    if (!command)
-+        return NS_ERROR_FAILURE;
-+
-+    nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+    if (!str)
-+        return NS_ERROR_FAILURE;
-+
-+    str->SetData( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" ));
-+    command->AppendElement( str );
-+
-+    if( nsKDEUtils::command( command ))
-+        *aIsDefaultBrowser = true;
-+    return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes,
-+                                     bool aForAllUsers)
-+{
-+    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
-+    if (!command)
-+        return NS_ERROR_FAILURE;
-+
-+    nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+    nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+    if (!cmdstr || !paramstr)
-+        return NS_ERROR_FAILURE;
-+
-+    cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" ));
-+    command->AppendElement( cmdstr );
-+
-+    paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" ));
-+    command->AppendElement( paramstr );
-+
-+    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::GetCanSetDesktopBackground(bool* aResult)
-+{
-+  *aResult = true;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::SetDesktopBackground(dom::Element* aElement,
-+                                        int32_t aPosition,
-+                                        const nsACString& aImageName)
-+{
-+    return NS_ERROR_NOT_IMPLEMENTED;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor)
-+{
-+    return NS_ERROR_NOT_IMPLEMENTED;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
-+{
-+    return NS_ERROR_NOT_IMPLEMENTED;
-+}
-+
-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
-@@ -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
-+ * 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/. */
-+
-+#ifndef nskdeshellservice_h____
-+#define nskdeshellservice_h____
-+
-+#include "nsIGNOMEShellService.h"
-+#include "nsToolkitShellService.h"
-+#include "nsString.h"
-+#include "mozilla/Attributes.h"
-+
-+class nsKDEShellService final : public nsIGNOMEShellService,
-+                                public nsToolkitShellService
-+{
-+public:
-+  nsKDEShellService() : mCheckedThisSession(false) { }
-+
-+  NS_DECL_ISUPPORTS
-+  NS_DECL_NSISHELLSERVICE
-+  NS_DECL_NSIGNOMESHELLSERVICE
-+
-+  nsresult Init();
-+
-+private:
-+  ~nsKDEShellService() {}
-+
-+  bool mCheckedThisSession;
-+};
-+
-+#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
-@@ -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
-+ * 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/. */
-+
-+
-+#include "nsUnixShellService.h"
-+#include "nsGNOMEShellService.h"
-+#include "nsKDEShellService.h"
-+#include "nsKDEUtils.h"
-+#include "mozilla/ModuleUtils.h"
-+
-+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init)
-+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init)
-+
-+NS_IMETHODIMP
-+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult)
-+{
-+    if( nsKDEUtils::kdeSupport())
-+        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
-@@ -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
-+ * 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/. */
-+
-+
-+#ifndef nsunixshellservice_h____
-+#define nsunixshellservice_h____
-+
-+#include "nsIGNOMEShellService.h"
-+
-+NS_IMETHODIMP
-+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult);
-+
-+#endif // nsunixshellservice_h____
diff --git a/firefox-78.0-kde.patch b/firefox-80.0-kde.patch
similarity index 96%
rename from firefox-78.0-kde.patch
rename to firefox-80.0-kde.patch
index 40d6aae..f12cab7 100644
--- a/firefox-78.0-kde.patch
+++ b/firefox-80.0-kde.patch
@@ -3,7 +3,7 @@
 # Date 1559300151 -7200
 #      Fri May 31 12:55:51 2019 +0200
 # Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
-# Parent  0fd58e0df883086574263e0881e1503cf110562a
+# Parent  3804871eac4171b99e9049dbc881b5304b5ac207
 How to apply this patch:
 1. Import and apply it
 2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul
@@ -14,7 +14,7 @@ How to apply this patch:
 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
-@@ -336,16 +336,23 @@ var gMainPane = {
+@@ -335,16 +335,23 @@ var gMainPane = {
          }, backoffTimes[this._backoffIndex + 1 < backoffTimes.length ? this._backoffIndex++ : backoffTimes.length - 1]);
        };
  
@@ -38,7 +38,7 @@ diff --git a/browser/components/preferences/main.js b/browser/components/prefere
      );
      let performanceSettingsUrl =
        Services.urlFormatter.formatURLPref("app.support.baseURL") +
-@@ -1301,16 +1308,27 @@ var gMainPane = {
+@@ -1291,16 +1298,27 @@ var gMainPane = {
        this._backoffIndex = 0;
  
        let shellSvc = getShellService();
@@ -139,7 +139,7 @@ new file mode 100644
 +    if (!str)
 +        return NS_ERROR_FAILURE;
 +
-+    str->SetData( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" ));
++    str->SetData("ISDEFAULTBROWSER"_ns);
 +    command->AppendElement( str );
 +
 +    if( nsKDEUtils::command( command ))
@@ -160,10 +160,10 @@ new file mode 100644
 +    if (!cmdstr || !paramstr)
 +        return NS_ERROR_FAILURE;
 +
-+    cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" ));
++    cmdstr->SetData("SETDEFAULTBROWSER"_ns);
 +    command->AppendElement( cmdstr );
 +
-+    paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" ));
++    paramstr->SetData( aClaimAllTypes ? "ALLTYPES"_ns : "NORMAL"_ns );
 +    command->AppendElement( paramstr );
 +
 +    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
diff --git a/firefox.spec b/firefox.spec
index c997561..9377243 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -224,7 +224,7 @@ Name:		firefox
 Epoch:		0
 # IMPORTANT: When updating, you MUST also update the l10n files by running
 # download.sh after editing the version number
-Version:	78.0.1
+Version:	82.0
 Release:	1
 License:	MPLv1+
 Group:		Networking/WWW
@@ -257,22 +257,18 @@ Source100:      firefox.rpmlintrc
 }
 
 Patch0:		firefox-67.0-webrtc-compile.patch
-#Patch1:		firefox-72.0.2-sqlite-3.31.patch
 
 # Patches for kde integration of FF  from http://www.rosenauer.org/hg/mozilla/
-Patch11:	firefox-78.0-kde.patch
-Patch12:	mozilla-78.0-kde.patch
+Patch11:	firefox-80.0-kde.patch
+Patch12:	mozilla-80.0-kde.patch
 
 Patch14:        build-aarch64-skia.patch
 Patch15:        build-arm-libopus.patch
 
-# from fedora - fix for app chooser
-#Patch43:	rhbz-1291190-appchooser-crash.patch
 Patch44:	https://src.fedoraproject.org/rpms/firefox/raw/master/f/build-disable-elfhack.patch
 
 BuildRequires:	doxygen
 BuildRequires:	makedepend
-BuildRequires:	pkgconfig(python2)
 BuildRequires:	pkgconfig(python3)
 BuildRequires:	python3
 BuildRequires:	python-distribute
@@ -311,8 +307,8 @@ BuildRequires:	pkgconfig(libpng) >= 1.6.34
 BuildRequires:	pkgconfig(libproxy-1.0)
 BuildRequires:	pkgconfig(libpulse)
 BuildRequires:	pkgconfig(libstartup-notification-1.0)
-BuildRequires:	pkgconfig(nspr) >= 4.25.0
-BuildRequires:	pkgconfig(nss) >= 3.53.1
+BuildRequires:	pkgconfig(nspr) >= 4.26.0
+BuildRequires:	pkgconfig(nss) >= 3.57
 BuildRequires:	pkgconfig(ogg)
 BuildRequires:	pkgconfig(opus)
 BuildRequires:	pkgconfig(libpulse)
@@ -335,8 +331,8 @@ BuildRequires:	pkgconfig(valgrind)
 BuildRequires:	yasm >= 1.0.1
 BuildRequires:	nasm
 %endif
-BuildRequires:	rust >= 1.41.0
-BuildRequires:	cargo >= 1.41.0
+BuildRequires:	rust >= 1.43.0
+BuildRequires:	cargo >= 1.43.0
 BuildRequires:	nodejs >= 10.19
 BuildRequires:	pkgconfig(jemalloc)
 Requires:	indexhtml
@@ -424,6 +420,7 @@ cd -
 export AUTOCONF=$(pwd)/ac213bin/bin/autoconf
 
 export PATH=$(pwd)/my_rust_vendor/.cargo/bin:$PATH
+export MACH_USE_SYSTEM_PYTHON=1
 
 %ifarch %ix86
 %global optflags %{optflags} -g0 -fno-exceptions -Wno-format-security
diff --git a/freetype261.patch b/freetype261.patch
deleted file mode 100644
index 0d5bbb1..0000000
--- a/freetype261.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1439509838 -32400
-# Node ID ffb931f910498504782f4df88206b9cb911b33a4
-# Parent  467ce7a8340d008a5999e57198035d492b7bc79f
-Bug 1194520 - Add a system header wrapper for <freetype/ftfntfmt.h>. r=mshal a=ritu
-
-diff --git a/config/system-headers b/config/system-headers
---- a/config/system-headers
-+++ b/config/system-headers
-@@ -453,16 +453,17 @@ foundation/base64.h
- foundation/hexdump.h
- #endif
- fp.h
- fpieee.h
- frame/log.h
- frame/req.h
- freetype/freetype.h
- freetype/ftcache.h
-+freetype/ftfntfmt.h
- freetype/ftglyph.h
- freetype/ftsynth.h
- freetype/ftoutln.h
- freetype/ttnameid.h
- freetype/tttables.h
- freetype/t1tables.h
- freetype/ftlcdfil.h
- freetype/ftsizes.h
-
diff --git a/mozilla-73.0-kde.patch b/mozilla-73.0-kde.patch
deleted file mode 100644
index 8bce10e..0000000
--- a/mozilla-73.0-kde.patch
+++ /dev/null
@@ -1,1938 +0,0 @@
-# HG changeset patch
-# User msirringhaus@suse.de
-# Date 1559294891 -7200
-#      Fri May 31 11:28:11 2019 +0200
-# Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112
-# Parent  48866e4a200fb5299b94af4d9841e38336cff9f4
-Description: Add KDE integration to Firefox (toolkit parts)
-Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
-Author: Lubos Lunak <lunak@suse.com>
-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
-@@ -84,16 +84,17 @@
- #include "nsXPCOM.h"
- #include "nsXULAppAPI.h"
- #include "nsZipArchive.h"
- #include "plbase64.h"
- #include "PLDHashTable.h"
- #include "plstr.h"
- #include "prlink.h"
- #include "xpcpublic.h"
-+#include "nsKDEUtils.h"
- 
- #ifdef DEBUG
- #  include <map>
- #endif
- 
- #ifdef MOZ_MEMORY
- #  include "mozmemory.h"
- #endif
-@@ -4539,25 +4540,37 @@ nsresult Preferences::InitInitialObjects
-   // application pref files for backwards compatibility.
-   static const char* specialFiles[] = {
- #if defined(XP_MACOSX)
-     "macprefs.js"
- #elif defined(XP_WIN)
-     "winpref.js"
- #elif defined(XP_UNIX)
-     "unix.js"
-+    , "" // placeholder for KDE  (empty is otherwise harmless)
- #  if defined(_AIX)
-     ,
-     "aix.js"
- #  endif
- #elif defined(XP_BEOS)
-     "beos.js"
- #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";
-+        break;
-+      }
-+    }
-+  }
-+
-   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.
-@@ -4603,17 +4616,17 @@ nsresult Preferences::InitInitialObjects
-       }
- 
-       nsCOMPtr<nsIFile> path = do_QueryInterface(elem);
-       if (!path) {
-         continue;
-       }
- 
-       // Do we care if a file provided by this process fails to load?
--      pref_LoadPrefsInDir(path, nullptr, 0);
-+      pref_LoadPrefsInDir(path, specialFiles, ArrayLength(specialFiles));
-     }
-   }
- 
-   if (XRE_IsParentProcess()) {
-     SetupTelemetryPref();
-   }
- 
-   NS_CreateServicesFromCategory(NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID, nullptr,
-diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
---- a/modules/libpref/moz.build
-+++ b/modules/libpref/moz.build
-@@ -113,16 +113,20 @@ EXPORTS.mozilla += [
- ]
- EXPORTS.mozilla += sorted(['!' + g for g in gen_h])
- 
- UNIFIED_SOURCES += [
-     'Preferences.cpp',
-     'SharedPrefMap.cpp',
- ]
- 
-+LOCAL_INCLUDES += [
-+    '/toolkit/xre'
-+]
-+
- gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs)
- 
- GENERATED_FILES += [gen_all_tuple]
- 
- static_pref_list = GENERATED_FILES[gen_all_tuple]
- static_pref_list.script = 'init/generate_static_pref_list.py:emit_code'
- static_pref_list.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
-@@ -227,16 +227,17 @@ class Flags(OrderedDict):
-         'contentaccessible': Flag,
-         'os': StringFlag,
-         'osversion': VersionFlag,
-         'abi': StringFlag,
-         'platform': Flag,
-         'xpcnativewrappers': Flag,
-         'tablet': Flag,
-         'process': StringFlag,
-+        'desktop': StringFlag,
-     }
-     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
-@@ -37,16 +37,17 @@ class ManifestEntry(object):
-         'platformversion',
-         'os',
-         'osversion',
-         'abi',
-         'xpcnativewrappers',
-         'tablet',
-         'process',
-         'contentaccessible',
-+	'desktop',
-     ]
- 
-     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
-@@ -41,10 +41,14 @@ XPCOM_MANIFESTS += [
- 
- if CONFIG['MOZ_PLACES']:
-     EXTRA_JS_MODULES += [
-         'DownloadHistory.jsm',
-     ]
- 
- FINAL_LIBRARY = 'xul'
- 
-+LOCAL_INCLUDES += [
-+    '/toolkit/xre'
-+]
-+
- 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
-@@ -1195,36 +1195,66 @@ nsUnknownContentTypeDialog.prototype = {
-         params.handlerApp &&
-         params.handlerApp.executable &&
-         params.handlerApp.executable.isFile()
-       ) {
-         // Remember the file they chose to run.
-         this.chosenApp = params.handlerApp;
-       }
-     } else if ("@mozilla.org/applicationchooser;1" in Cc) {
--      var nsIApplicationChooser = Ci.nsIApplicationChooser;
--      var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance(
--        nsIApplicationChooser
--      );
--      appChooser.init(
--        this.mDialog,
--        this.dialogElement("strings").getString("chooseAppFilePickerTitle")
--      );
--      var contentTypeDialogObj = this;
--      let appChooserCallback = function appChooserCallback_done(aResult) {
--        if (aResult) {
--          contentTypeDialogObj.chosenApp = aResult.QueryInterface(
--            Ci.nsILocalHandlerApp
--          );
--        }
--        contentTypeDialogObj.finishChooseApp();
--      };
--      appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback);
--      // The finishChooseApp is called from appChooserCallback
--      return;
-+      // handle the KDE case which is implemented in the filepicker
-+      // therefore falling back to Gtk2 like behaviour if KDE is running
-+      // FIXME this should be better handled in the nsIApplicationChooser
-+      // interface
-+      var env = Components.classes["@mozilla.org/process/environment;1"]
-+                          .getService(Components.interfaces.nsIEnvironment);
-+      if (env.get('KDE_FULL_SESSION') == "true")
-+      {
-+        var nsIFilePicker = Ci.nsIFilePicker;
-+        var fp = Cc["@mozilla.org/filepicker;1"]
-+                    .createInstance(nsIFilePicker);
-+        fp.init(this.mDialog,
-+                this.dialogElement("strings").getString("chooseAppFilePickerTitle"),
-+                nsIFilePicker.modeOpen);
-+
-+        fp.appendFilters(nsIFilePicker.filterApps);
-+
-+        fp.open(aResult => {
-+          if (aResult == nsIFilePicker.returnOK && fp.file) {
-+            // Remember the file they chose to run.
-+            var localHandlerApp =
-+              Cc["@mozilla.org/uriloader/local-handler-app;1"].
-+                         createInstance(Ci.nsILocalHandlerApp);
-+            localHandlerApp.executable = fp.file;
-+            this.chosenApp = localHandlerApp;
-+          }
-+          this.finishChooseApp();
-+        });
-+      } else {
-+        var nsIApplicationChooser = Ci.nsIApplicationChooser;
-+        var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance(
-+          nsIApplicationChooser
-+        );
-+        appChooser.init(
-+          this.mDialog,
-+          this.dialogElement("strings").getString("chooseAppFilePickerTitle")
-+        );
-+        var contentTypeDialogObj = this;
-+        let appChooserCallback = function appChooserCallback_done(aResult) {
-+          if (aResult) {
-+            contentTypeDialogObj.chosenApp = aResult.QueryInterface(
-+              Ci.nsILocalHandlerApp
-+            );
-+          }
-+          contentTypeDialogObj.finishChooseApp();
-+        };
-+        appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback);
-+        // The finishChooseApp is called from appChooserCallback
-+        return;
-+      }
-     } 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
-@@ -13,16 +13,17 @@
- #include "nsPrintfCString.h"
- #include "nsNetCID.h"
- #include "nsNetUtil.h"
- #include "nsISupportsPrimitives.h"
- #include "nsIGSettingsService.h"
- #include "nsInterfaceHashtable.h"
- #include "mozilla/Attributes.h"
- #include "nsIURI.h"
-+#include "nsKDEUtils.h"
- 
- using namespace mozilla;
- 
- class nsUnixSystemProxySettings final : public nsISystemProxySettings {
-  public:
-   NS_DECL_ISUPPORTS
-   NS_DECL_NSISYSTEMPROXYSETTINGS
- 
-@@ -36,16 +37,18 @@ class nsUnixSystemProxySettings final : 
-   nsCOMPtr<nsIGSettingsCollection> mProxySettings;
-   nsInterfaceHashtable<nsCStringHashKey, nsIGSettingsCollection>
-       mSchemeProxySettings;
-   nsresult GetProxyFromGSettings(const nsACString& aScheme,
-                                  const nsACString& aHost, int32_t aPort,
-                                  nsACString& aResult);
-   nsresult SetProxyResultFromGSettings(const char* aKeyBase, const char* aType,
-                                        nsACString& aResult);
-+  nsresult GetProxyFromKDE(const nsACString& aScheme, const nsACString& aHost,
-+                           PRInt32 aPort, nsACString& aResult);
- };
- 
- NS_IMPL_ISUPPORTS(nsUnixSystemProxySettings, nsISystemProxySettings)
- 
- NS_IMETHODIMP
- nsUnixSystemProxySettings::GetMainThreadOnly(bool* aMainThreadOnly) {
-   // dbus prevents us from being threadsafe, but this routine should not block
-   // anyhow
-@@ -380,21 +383,50 @@ nsresult nsUnixSystemProxySettings::GetP
-   return NS_OK;
- }
- 
- nsresult nsUnixSystemProxySettings::GetProxyForURI(const nsACString& aSpec,
-                                                    const nsACString& aScheme,
-                                                    const nsACString& aHost,
-                                                    const int32_t aPort,
-                                                    nsACString& aResult) {
-+  if (nsKDEUtils::kdeSupport())
-+    return GetProxyFromKDE(aScheme, aHost, aPort, aResult);
-+
-   if (mProxySettings) {
-     nsresult rv = GetProxyFromGSettings(aScheme, aHost, aPort, aResult);
-     if (NS_SUCCEEDED(rv)) return rv;
-   }
- 
-   return GetProxyFromEnvironment(aScheme, aHost, aPort, aResult);
- }
- 
-+nsresult
-+nsUnixSystemProxySettings::GetProxyFromKDE(const nsACString& aScheme,
-+                                           const nsACString& aHost,
-+                                           PRInt32 aPort,
-+                                           nsACString& aResult)
-+{
-+  nsAutoCString url;
-+  url = aScheme;
-+  url += "://";
-+  url += aHost;
-+  if( aPort >= 0 )
-+  {
-+    url += ":";
-+    url += nsPrintfCString("%d", aPort);
-+  }
-+  nsTArray<nsCString> command;
-+  command.AppendElement( NS_LITERAL_CSTRING( "GETPROXY" ));
-+  command.AppendElement( url );
-+  nsTArray<nsCString> result;
-+  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<nsUnixSystemProxySettings>();
-   result->Init();
-   return result.forget().downcast<nsISupports>();
- }
-diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
---- a/toolkit/xre/moz.build
-+++ b/toolkit/xre/moz.build
-@@ -88,17 +88,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co
-         '../components/printingui',
-     ]
- elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'uikit':
-     UNIFIED_SOURCES += [
-         'nsNativeAppSupportDefault.cpp',
-         'UIKitDirProvider.mm',
-     ]
- elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
-+    EXPORTS += ['nsKDEUtils.h']
-     UNIFIED_SOURCES += [
-+        'nsKDEUtils.cpp',
-         'nsNativeAppSupportUnix.cpp',
-     ]
- else:
-     UNIFIED_SOURCES += [
-         'nsNativeAppSupportDefault.cpp',
-     ]
- 
- if CONFIG['MOZ_HAS_REMOTE']:
-diff --git a/toolkit/xre/nsKDEUtils.cpp b/toolkit/xre/nsKDEUtils.cpp
-new file mode 100644
---- /dev/null
-+++ b/toolkit/xre/nsKDEUtils.cpp
-@@ -0,0 +1,344 @@
-+/* -*- 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
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "nsKDEUtils.h"
-+#include "nsIWidget.h"
-+#include "nsISupportsPrimitives.h"
-+#include "nsIMutableArray.h"
-+#include "nsComponentManagerUtils.h"
-+#include "nsArrayUtils.h"
-+
-+#include <gtk/gtk.h>
-+
-+#include <limits.h>
-+#include <stdio.h>
-+#include <sys/wait.h>
-+#include <sys/resource.h>
-+#include <unistd.h>
-+#include <X11/Xlib.h>
-+// 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 */
-+#endif
-+
-+//#define DEBUG_KDE
-+#ifdef DEBUG_KDE
-+#define KMOZILLAHELPER "kmozillahelper"
-+#else
-+// not need for lib64, it's a binary
-+#define KMOZILLAHELPER "/usr/lib/mozilla/kmozillahelper"
-+#endif
-+
-+#define KMOZILLAHELPER_VERSION 6
-+#define MAKE_STR2( n ) #n
-+#define MAKE_STR( n ) MAKE_STR2( n )
-+
-+static bool getKdeSession()
-+    {
-+    Display* dpy = XOpenDisplay( NULL );
-+    if( dpy == NULL )
-+        return false;
-+    Atom kde_full_session = XInternAtom( dpy, "KDE_FULL_SESSION", true );
-+    bool kde = false;
-+    if( kde_full_session != None )
-+        {
-+        int cnt;
-+        if( Atom* props = XListProperties( dpy, DefaultRootWindow( dpy ), &cnt ))
-+            {
-+            for( int i = 0;
-+                 i < cnt;
-+                 ++i )
-+                {
-+                if( props[ i ] == kde_full_session )
-+                    {
-+                    kde = true;
-+#ifdef DEBUG_KDE
-+                    fprintf( stderr, "KDE SESSION %d\n", kde );
-+#endif
-+                    break;
-+                    }
-+                }
-+            XFree( props );
-+            }
-+        }
-+    XCloseDisplay( dpy );
-+    return kde;
-+    }
-+
-+static bool getKdeSupport()
-+    {
-+    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "CHECK" ));
-+    command.AppendElement( NS_LITERAL_CSTRING( MAKE_STR( KMOZILLAHELPER_VERSION )));
-+    bool kde = nsKDEUtils::command( command );
-+#ifdef DEBUG_KDE
-+    fprintf( stderr, "KDE RUNNING %d\n", kde );
-+#endif
-+    return kde;
-+    }
-+
-+nsKDEUtils::nsKDEUtils()
-+    : commandFile( NULL )
-+    , replyFile( NULL )
-+    {
-+    }
-+
-+nsKDEUtils::~nsKDEUtils()
-+    {
-+//    closeHelper(); not actually useful, exiting will close the fd too
-+    }
-+
-+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::kdeSupport()
-+    {
-+    static bool support = kdeSession() && getKdeSupport();
-+    return support && helperRunning;
-+    }
-+
-+struct nsKDECommandData
-+    {
-+    FILE* file;
-+    nsTArray<nsCString>* output;
-+    GMainLoop* loop;
-+    bool success;
-+    };
-+
-+static gboolean kdeReadFunc( GIOChannel*, GIOCondition, gpointer data )
-+    {
-+    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;
-+    }
-+
-+bool nsKDEUtils::command( const nsTArray<nsCString>& command, nsTArray<nsCString>* output )
-+    {
-+    return self()->internalCommand( command, NULL, false, output );
-+    }
-+
-+bool nsKDEUtils::command( nsIArray* command, nsIArray** output)
-+    {
-+    nsTArray<nsCString> in;
-+    PRUint32 length;
-+    command->GetLength( &length );
-+    for ( PRUint32 i = 0; i < length; i++ )
-+        {
-+        nsCOMPtr<nsISupportsCString> str = do_QueryElementAt( command, i );
-+        if( str )
-+            {
-+            nsAutoCString s;
-+            str->GetData( s );
-+            in.AppendElement( s );
-+            }
-+        }
-+
-+    nsTArray<nsCString> out;
-+    bool ret = self()->internalCommand( in, NULL, false, &out );
-+
-+    if ( !output ) return ret;
-+
-+    nsCOMPtr<nsIMutableArray> result = do_CreateInstance( NS_ARRAY_CONTRACTID );
-+    if ( !result ) return false;
-+
-+    for ( PRUint32 i = 0; i < out.Length(); i++ )
-+        {
-+        nsCOMPtr<nsISupportsCString> 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<nsCString>& command, GtkWindow* parent, nsTArray<nsCString>* output )
-+    {
-+    return self()->internalCommand( command, parent, true, output );
-+    }
-+
-+bool nsKDEUtils::internalCommand( const nsTArray<nsCString>& command, GtkWindow* parent, bool blockUi,
-+    nsTArray<nsCString>* 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< 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;
-+    }
-+
-+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 );
-+#ifdef DEBUG_KDE
-+            execvp( KMOZILLAHELPER, args );
-+#else
-+            execv( KMOZILLAHELPER, args );
-+#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<nsCString>& 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
---- /dev/null
-+++ b/toolkit/xre/nsKDEUtils.h
-@@ -0,0 +1,48 @@
-+/* -*- 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/. */
-+
-+#ifndef nsKDEUtils_h__
-+#define nsKDEUtils_h__
-+
-+#include "nsString.h"
-+#include "nsTArray.h"
-+#include <stdio.h>
-+
-+typedef struct _GtkWindow GtkWindow;
-+
-+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<nsCString>& command, nsTArray<nsCString>* 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<nsCString>& command, GtkWindow* parent, nsTArray<nsCString>* output = NULL );
-+
-+    private:
-+        nsKDEUtils();
-+        ~nsKDEUtils();
-+        static nsKDEUtils* self();
-+        bool startHelper();
-+        void closeHelper();
-+        void feedCommand( const nsTArray<nsCString>& command );
-+        bool internalCommand( const nsTArray<nsCString>& command, GtkWindow* parent, bool isParent,
-+            nsTArray<nsCString>* 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
-@@ -7,17 +7,17 @@
- #include "mozilla/ipc/ProtocolUtils.h"
- #include "mozilla/Logging.h"
- #include "HandlerServiceParent.h"
- #include "nsIHandlerService.h"
- #include "nsIMIMEInfo.h"
- #include "ContentHandlerService.h"
- #include "nsStringEnumerator.h"
- #ifdef MOZ_WIDGET_GTK
--#  include "unix/nsGNOMERegistry.h"
-+#  include "unix/nsCommonRegistry.h"
- #endif
- 
- using mozilla::dom::ContentHandlerService;
- using mozilla::dom::HandlerApp;
- using mozilla::dom::HandlerInfo;
- using mozilla::dom::RemoteHandlerApp;
- 
- namespace {
-@@ -288,17 +288,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());
-+  *aHandlerExists = nsCommonRegistry::HandlerExists(aProtocolScheme.get());
- #else
-   *aHandlerExists = false;
- #endif
-   return IPC_OK();
- }
- 
- /*
-  * Check if a handler exists for the provided protocol. Check the datastore
-@@ -317,17 +317,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
-@@ -85,17 +85,19 @@ else:
-     SOURCES += [
-         osdir + '/nsOSHelperAppService.cpp',
-     ]
-     if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
-         CXXFLAGS += ['-Wno-error=shadow']
- 
- if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
-     UNIFIED_SOURCES += [
-+        'unix/nsCommonRegistry.cpp',
-         'unix/nsGNOMERegistry.cpp',
-+        'unix/nsKDERegistry.cpp',
-         'unix/nsMIMEInfoUnix.cpp',
-     ]
- elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
-     UNIFIED_SOURCES += [
-         'android/nsAndroidHandlerApp.cpp',
-         'android/nsExternalURLHandlerService.cpp',
-         'android/nsMIMEInfoAndroid.cpp',
-     ]
-@@ -135,16 +137,17 @@ include('/ipc/chromium/chromium-config.m
- FINAL_LIBRARY = 'xul'
- 
- LOCAL_INCLUDES += [
-     '/docshell/base',
-     '/dom/base',
-     '/dom/ipc',
-     '/netwerk/base',
-     '/netwerk/protocol/http',
-+    '/toolkit/xre',
- ]
- 
- if CONFIG['MOZ_ENABLE_DBUS']:
-     CXXFLAGS += CONFIG['TK_CFLAGS']
-     CXXFLAGS += CONFIG['MOZ_DBUS_CFLAGS']
- 
- if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
-     CXXFLAGS += CONFIG['TK_CFLAGS']
-diff --git a/uriloader/exthandler/unix/nsCommonRegistry.cpp b/uriloader/exthandler/unix/nsCommonRegistry.cpp
-new file mode 100644
---- /dev/null
-+++ b/uriloader/exthandler/unix/nsCommonRegistry.cpp
-@@ -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
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "nsCommonRegistry.h"
-+
-+#include "nsGNOMERegistry.h"
-+#include "nsKDERegistry.h"
-+#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 */ void
-+nsCommonRegistry::GetAppDescForScheme(const nsACString& aScheme,
-+                                     nsAString& aDesc)
-+{
-+    if( nsKDEUtils::kdeSupport())
-+        return nsKDERegistry::GetAppDescForScheme( aScheme, aDesc );
-+    return nsGNOMERegistry::GetAppDescForScheme( aScheme, aDesc );
-+}
-+
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsCommonRegistry::GetFromExtension(const nsACString& aFileExt)
-+{
-+    if( nsKDEUtils::kdeSupport())
-+        return nsKDERegistry::GetFromExtension( aFileExt );
-+    return nsGNOMERegistry::GetFromExtension( aFileExt );
-+}
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsCommonRegistry::GetFromType(const nsACString& aMIMEType)
-+{
-+    if( nsKDEUtils::kdeSupport())
-+        return nsKDERegistry::GetFromType( aMIMEType );
-+    return nsGNOMERegistry::GetFromType( aMIMEType );
-+}
-diff --git a/uriloader/exthandler/unix/nsCommonRegistry.h b/uriloader/exthandler/unix/nsCommonRegistry.h
-new file mode 100644
---- /dev/null
-+++ b/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
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef nsCommonRegistry_h__
-+#define nsCommonRegistry_h__
-+
-+#include "nsIURI.h"
-+#include "nsCOMPtr.h"
-+
-+class nsMIMEInfoBase;
-+
-+class nsCommonRegistry
-+{
-+ public:
-+  static bool HandlerExists(const char *aProtocolScheme);
-+
-+  static nsresult LoadURL(nsIURI *aURL);
-+
-+  static void GetAppDescForScheme(const nsACString& aScheme,
-+                                  nsAString& aDesc);
-+
-+  static already_AddRefed<nsMIMEInfoBase> GetFromExtension(const nsACString& aFileExt);
-+
-+  static already_AddRefed<nsMIMEInfoBase> GetFromType(const nsACString& aMIMEType);
-+};
-+
-+#endif
-diff --git a/uriloader/exthandler/unix/nsKDERegistry.cpp b/uriloader/exthandler/unix/nsKDERegistry.cpp
-new file mode 100644
---- /dev/null
-+++ b/uriloader/exthandler/unix/nsKDERegistry.cpp
-@@ -0,0 +1,87 @@
-+/* -*- 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/. */
-+
-+#include "nsKDERegistry.h"
-+#include "prlink.h"
-+#include "prmem.h"
-+#include "nsString.h"
-+#include "nsMIMEInfoUnix.h"
-+#include "nsAutoPtr.h"
-+#include "nsKDEUtils.h"
-+
-+/* static */ bool
-+nsKDERegistry::HandlerExists(const char *aProtocolScheme)
-+{
-+    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "HANDLEREXISTS" ));
-+    command.AppendElement( nsAutoCString( aProtocolScheme ));
-+    return nsKDEUtils::command( command );
-+}
-+
-+/* static */ nsresult
-+nsKDERegistry::LoadURL(nsIURI *aURL)
-+{
-+    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "OPEN" ));
-+    nsCString url;
-+    aURL->GetSpec( url );
-+    command.AppendElement( url );
-+    bool rv = nsKDEUtils::command( command );
-+    if (!rv)
-+      return NS_ERROR_FAILURE;
-+
-+    return NS_OK;
-+}
-+
-+/* static */ void
-+nsKDERegistry::GetAppDescForScheme(const nsACString& aScheme,
-+                                     nsAString& aDesc)
-+{
-+    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "GETAPPDESCFORSCHEME" ));
-+    command.AppendElement( aScheme );
-+    nsTArray<nsCString> output;
-+    if( nsKDEUtils::command( command, &output ) && output.Length() == 1 )
-+        CopyUTF8toUTF16( output[ 0 ], aDesc );
-+}
-+
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsKDERegistry::GetFromExtension(const nsACString& aFileExt)
-+{
-+    NS_ASSERTION(aFileExt[0] != '.', "aFileExt shouldn't start with a dot");
-+    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "GETFROMEXTENSION" ));
-+    command.AppendElement( aFileExt );
-+    return GetFromHelper( command );
-+}
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsKDERegistry::GetFromType(const nsACString& aMIMEType)
-+{
-+    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "GETFROMTYPE" ));
-+    command.AppendElement( aMIMEType );
-+    return GetFromHelper( command );
-+}
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsKDERegistry::GetFromHelper(const nsTArray<nsCString>& command)
-+{
-+    nsTArray<nsCString> output;
-+    if( nsKDEUtils::command( command, &output ) && output.Length() == 3 )
-+        {
-+        nsCString mimetype = output[ 0 ];
-+        RefPtr<nsMIMEInfoUnix> mimeInfo = new nsMIMEInfoUnix( mimetype );
-+        NS_ENSURE_TRUE(mimeInfo, nullptr);
-+        nsCString description = output[ 1 ];
-+        mimeInfo->SetDescription(NS_ConvertUTF8toUTF16(description));
-+        nsCString handlerAppName = output[ 2 ];
-+        mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(handlerAppName));
-+        mimeInfo->SetPreferredAction(nsIMIMEInfo::useSystemDefault);
-+        return mimeInfo.forget();
-+        }
-+    return nullptr;
-+}
-diff --git a/uriloader/exthandler/unix/nsKDERegistry.h b/uriloader/exthandler/unix/nsKDERegistry.h
-new file mode 100644
---- /dev/null
-+++ b/uriloader/exthandler/unix/nsKDERegistry.h
-@@ -0,0 +1,34 @@
-+/* 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/. */
-+
-+#ifndef nsKDERegistry_h__
-+#define nsKDERegistry_h__
-+
-+#include "nsIURI.h"
-+#include "nsCOMPtr.h"
-+#include "nsTArray.h"
-+
-+class nsMIMEInfoBase;
-+//class nsAutoCString;
-+//class nsCString;
-+
-+class nsKDERegistry
-+{
-+ public:
-+  static bool HandlerExists(const char *aProtocolScheme);
-+
-+  static nsresult LoadURL(nsIURI *aURL);
-+
-+  static void GetAppDescForScheme(const nsACString& aScheme,
-+                                  nsAString& aDesc);
-+
-+  static already_AddRefed<nsMIMEInfoBase> GetFromExtension(const nsACString& aFileExt);
-+
-+  static already_AddRefed<nsMIMEInfoBase> GetFromType(const nsACString& aMIMEType);
-+ private:
-+  static already_AddRefed<nsMIMEInfoBase> GetFromHelper(const nsTArray<nsCString>& 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,47 +1,50 @@
- /* -*- 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
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "nsMIMEInfoUnix.h"
--#include "nsGNOMERegistry.h"
-+#include "nsCommonRegistry.h"
- #include "nsIGIOService.h"
- #include "nsNetCID.h"
- #include "nsIIOService.h"
- #include "nsAutoPtr.h"
- #ifdef MOZ_ENABLE_DBUS
- #  include "nsDBusHandlerApp.h"
- #endif
-+#if defined(XP_UNIX) && !defined(XP_MACOSX)
-+#include "nsKDEUtils.h"
-+#endif
- 
- nsresult nsMIMEInfoUnix::LoadUriInternal(nsIURI* aURI) {
--  return nsGNOMERegistry::LoadURL(aURI);
-+  return nsCommonRegistry::LoadURL(aURI);
- }
- 
- NS_IMETHODIMP
- 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.
-   if (mDefaultApplication) return nsMIMEInfoImpl::GetHasDefaultHandler(_retval);
- 
-   *_retval = false;
- 
-   if (mClass == eProtocolInfo) {
--    *_retval = nsGNOMERegistry::HandlerExists(mSchemeOrType.get());
-+    *_retval = nsCommonRegistry::HandlerExists(mSchemeOrType.get());
-   } else {
-     RefPtr<nsMIMEInfoBase> mimeInfo =
--        nsGNOMERegistry::GetFromType(mSchemeOrType);
-+        nsCommonRegistry::GetFromType(mSchemeOrType);
-     if (!mimeInfo) {
-       nsAutoCString ext;
-       nsresult rv = GetPrimaryExtension(ext);
-       if (NS_SUCCEEDED(rv)) {
--        mimeInfo = nsGNOMERegistry::GetFromExtension(ext);
-+        mimeInfo = nsCommonRegistry::GetFromExtension(ext);
-       }
-     }
-     if (mimeInfo) *_retval = true;
-   }
- 
-   if (*_retval) return NS_OK;
- 
-   return NS_OK;
-@@ -51,16 +54,33 @@ nsresult nsMIMEInfoUnix::LaunchDefaultWi
-   // 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.
-   if (mDefaultApplication) return nsMIMEInfoImpl::LaunchDefaultWithFile(aFile);
- 
-   nsAutoCString nativePath;
-   aFile->GetNativePath(nativePath);
- 
-+  if( nsKDEUtils::kdeSupport()) {
-+    bool supports;
-+    if( NS_SUCCEEDED( GetHasDefaultHandler( &supports )) && supports ) {
-+      nsTArray<nsCString> command;
-+      command.AppendElement( NS_LITERAL_CSTRING( "OPEN" ));
-+      command.AppendElement( nativePath );
-+      command.AppendElement( NS_LITERAL_CSTRING( "MIMETYPE" ));
-+      command.AppendElement( mSchemeOrType );
-+      if( nsKDEUtils::command( command ))
-+        return NS_OK;
-+    }
-+    if (!mDefaultApplication)
-+      return NS_ERROR_FILE_NOT_FOUND;
-+
-+    return LaunchWithIProcess(mDefaultApplication, nativePath);
-+  }
-+
-   nsCOMPtr<nsIGIOService> 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<nsIIOService> 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 <sys/types.h>
- #include <sys/stat.h>
- 
- #include "nsOSHelperAppService.h"
- #include "nsMIMEInfoUnix.h"
- #ifdef MOZ_WIDGET_GTK
--#  include "nsGNOMERegistry.h"
-+#  include "nsCommonRegistry.h"
- #endif
- #include "nsISupports.h"
- #include "nsString.h"
- #include "nsReadableUtils.h"
- #include "nsUnicharUtils.h"
- #include "nsIFileStreams.h"
- #include "nsILineInputStream.h"
- #include "nsIFile.h"
-@@ -1024,17 +1024,17 @@ nsresult nsOSHelperAppService::GetHandle
- 
- nsresult nsOSHelperAppService::OSProtocolHandlerExists(
-     const char* aProtocolScheme, bool* aHandlerExists) {
-   nsresult rv = NS_OK;
- 
-   if (!XRE_IsContentProcess()) {
- #ifdef MOZ_WIDGET_GTK
-     // Check the GNOME registry for a protocol handler
--    *aHandlerExists = nsGNOMERegistry::HandlerExists(aProtocolScheme);
-+    *aHandlerExists = nsCommonRegistry::HandlerExists(aProtocolScheme);
- #else
-     *aHandlerExists = false;
- #endif
-   } else {
-     *aHandlerExists = false;
-     nsCOMPtr<nsIHandlerService> handlerSvc =
-         do_GetService(NS_HANDLERSERVICE_CONTRACTID, &rv);
-     if (NS_SUCCEEDED(rv) && handlerSvc) {
-@@ -1044,17 +1044,17 @@ nsresult nsOSHelperAppService::OSProtoco
-   }
- 
-   return rv;
- }
- 
- NS_IMETHODIMP nsOSHelperAppService::GetApplicationDescription(
-     const nsACString& aScheme, nsAString& _retval) {
- #ifdef MOZ_WIDGET_GTK
--  nsGNOMERegistry::GetAppDescForScheme(aScheme, _retval);
-+  nsCommonRegistry::GetAppDescForScheme(aScheme, _retval);
-   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) {
-@@ -1141,17 +1141,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
-   nsresult rv =
-       LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
-                                minorType, mime_types_description, true);
- 
-   if (NS_FAILED(rv) || majorType.IsEmpty()) {
- #ifdef MOZ_WIDGET_GTK
-     LOG(("Looking in GNOME registry\n"));
-     RefPtr<nsMIMEInfoBase> gnomeInfo =
--        nsGNOMERegistry::GetFromExtension(aFileExt);
-+        nsCommonRegistry::GetFromExtension(aFileExt);
-     if (gnomeInfo) {
-       LOG(("Got MIMEInfo from GNOME registry\n"));
-       return gnomeInfo.forget();
-     }
- #endif
- 
-     rv = LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
-                                   minorType, mime_types_description, false);
-@@ -1253,17 +1253,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
- 
-   // Now look up our extensions
-   nsAutoString extensions, mime_types_description;
-   LookUpExtensionsAndDescription(majorType, minorType, extensions,
-                                  mime_types_description);
- 
- #ifdef MOZ_WIDGET_GTK
-   if (handler.IsEmpty()) {
--    RefPtr<nsMIMEInfoBase> gnomeInfo = nsGNOMERegistry::GetFromType(aMIMEType);
-+    RefPtr<nsMIMEInfoBase> gnomeInfo = nsCommonRegistry::GetFromType(aMIMEType);
-     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));
-diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
---- a/widget/gtk/moz.build
-+++ b/widget/gtk/moz.build
-@@ -128,16 +128,17 @@ include('/ipc/chromium/chromium-config.m
- 
- FINAL_LIBRARY = 'xul'
- 
- LOCAL_INCLUDES += [
-     '/layout/base',
-     '/layout/generic',
-     '/layout/xul',
-     '/other-licenses/atk-1.0',
-+    '/toolkit/xre',
-     '/widget',
-     '/widget/headless',
- ]
- 
- if CONFIG['MOZ_X11']:
-     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/. */
- 
- #include <dlfcn.h>
- #include <gtk/gtk.h>
-+#include <gdk/gdkx.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- 
- #include "mozilla/Types.h"
- #include "nsGtkUtils.h"
- #include "nsIFileURL.h"
- #include "nsIGIOService.h"
-@@ -20,16 +21,17 @@
- #include "nsArrayEnumerator.h"
- #include "nsMemory.h"
- #include "nsEnumeratorUtils.h"
- #include "nsNetUtil.h"
- #include "nsReadableUtils.h"
- #include "mozcontainer.h"
- 
- #include "nsFilePicker.h"
-+#include "nsKDEUtils.h"
- 
- using namespace mozilla;
- 
- #define MAX_PREVIEW_SIZE 180
- // bug 1184009
- #define MAX_PREVIEW_SOURCE_SIZE 4096
- 
- 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) {
-   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;
-   }
- 
-   nsAutoCString filter, name;
-   CopyUTF16toUTF8(aFilter, filter);
-   CopyUTF16toUTF8(aTitle, name);
- 
-   mFilters.AppendElement(filter);
-   mFilterNames.AppendElement(name);
-@@ -337,16 +341,39 @@ nsresult nsFilePicker::Show(int16_t* aRe
-   return NS_OK;
- }
- 
- NS_IMETHODIMP
- nsFilePicker::Open(nsIFilePickerShownCallback* aCallback) {
-   // 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()) {
-+    mCallback = aCallback;
-+    mRunning = true;
-+    NS_ADDREF_THIS();
-+    g_idle_add([](gpointer data) -> gboolean {
-+      nsFilePicker* queuedPicker = (nsFilePicker*) data;
-+      int16_t 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;
-+  }
-+
-   NS_ConvertUTF16toUTF8 title(mTitle);
- 
-   GtkWindow* parent_widget =
-       GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET));
- 
-   GtkFileChooserAction action = GetGtkFileChooserAction(mMode);
-
-   const gchar* accept_button;
-@@ -572,16 +599,240 @@ void nsFilePicker::Done(void* file_choos
-     mCallback->Done(result);
-     mCallback = nullptr;
-   } else {
-     mResult = result;
-   }
-   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;
-+    }
-+
-+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(PRInt16 *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));
-+
-+    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) {
-+    mDisplayDirectory->GetNativePath(directory);
-+  } else if (mPrevDisplayDirectory) {
-+    mPrevDisplayDirectory->GetNativePath(directory);
-+  }
-+
-+    nsAutoCString startdir;
-+  if (!directory.IsEmpty()) {
-+    startdir = directory;
-+  }
-+  if (mMode == nsIFilePicker::modeSave) {
-+    if( !startdir.IsEmpty())
-+      {
-+      startdir += "/";
-+      startdir += ToNewUTF8String(mDefault);
-+      }
-+    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<nsCString> 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( NS_LITERAL_CSTRING( "MULTIPLE" ));
-+    if( PRInt32 xid = windowToXid( mParentWidget ))
-+        {
-+        command.AppendElement( NS_LITERAL_CSTRING( "PARENT" ));
-+        nsAutoCString parent;
-+        parent.AppendInt( xid );
-+        command.AppendElement( parent );
-+        }
-+
-+    nsTArray<nsCString> 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<nsIFile> 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 :-/
-+                {
-+                mFileURL = nsCString( "file://" );
-+                mFileURL.Append( output[ 0 ] );
-+                }
-+            }
-+  // Remember last used directory.
-+  nsCOMPtr<nsIFile> file;
-+  GetFile(getter_AddRefs(file));
-+  if (file) {
-+    nsCOMPtr<nsIFile> dir;
-+    file->GetParent(getter_AddRefs(dir));
-+    nsCOMPtr<nsIFile> localDir(do_QueryInterface(dir));
-+    if (localDir) {
-+      localDir.swap(mPrevDisplayDirectory);
-+    }
-+  }
-+        if (mMode == nsIFilePicker::modeSave)
-+            {
-+            nsCOMPtr<nsIFile> 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(PRInt16 *aReturn)
-+    {
-+    NS_ENSURE_ARG_POINTER(aReturn);
-+
-+    nsCString title;
-+    title.Adopt(ToNewUTF8String(mTitle));
-+
-+    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "APPSDIALOG" ));
-+    command.AppendElement( title );
-+    if( PRInt32 xid = windowToXid( mParentWidget ))
-+        {
-+        command.AppendElement( NS_LITERAL_CSTRING( "PARENT" ));
-+        nsAutoCString parent;
-+        parent.AppendInt( xid );
-+        command.AppendElement( parent );
-+        }
-+
-+    nsTArray<nsCString> 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
-@@ -67,16 +67,22 @@ class nsFilePicker : public nsBaseFilePi
-   nsString mDefaultExtension;
- 
-   nsTArray<nsCString> mFilters;
-   nsTArray<nsCString> mFilterNames;
- 
-  private:
-   static nsIFile* mPrevDisplayDirectory;
- 
-+  bool kdeRunning();
-+  bool getKdeRunning();
-+  NS_IMETHODIMP kdeFileDialog(PRInt16 *aReturn);
-+  NS_IMETHODIMP kdeAppsDialog(PRInt16 *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
-@@ -33,16 +33,17 @@
- #include "nsTextFormatter.h"
- #include "nsVersionComparator.h"
- #include "nsXPCOMCIDInternal.h"
- 
- #include "nsIConsoleService.h"
- #include "nsIScriptError.h"
- #include "nsIXULAppInfo.h"
- #include "nsIXULRuntime.h"
-+#include "nsKDEUtils.h"
- 
- using namespace mozilla;
- 
- struct ManifestDirective {
-   const char* directive;
-   int argc;
- 
-   bool ischrome;
-@@ -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");
-   NS_NAMED_LITERAL_STRING(kAppVersion, "appversion");
-   NS_NAMED_LITERAL_STRING(kGeckoVersion, "platformversion");
-   NS_NAMED_LITERAL_STRING(kOs, "os");
-   NS_NAMED_LITERAL_STRING(kOsVersion, "osversion");
-   NS_NAMED_LITERAL_STRING(kABI, "abi");
-+  NS_NAMED_LITERAL_STRING(kDesktop, "desktop");
-   NS_NAMED_LITERAL_STRING(kProcess, "process");
- #if defined(MOZ_WIDGET_ANDROID)
-   NS_NAMED_LITERAL_STRING(kTablet, "tablet");
- #endif
- 
-   NS_NAMED_LITERAL_STRING(kMain, "main");
-   NS_NAMED_LITERAL_STRING(kContent, "content");
- 
-@@ -448,39 +450,44 @@ void ParseManifest(NSLocationType aType,
-         CopyUTF8toUTF16(s, abi);
-         abi.Insert(char16_t('_'), 0);
-         abi.Insert(osTarget, 0);
-       }
-     }
-   }
- 
-   nsAutoString osVersion;
-+  nsAutoString desktop;
- #if defined(XP_WIN)
- #  pragma warning(push)
- #  pragma warning(disable : 4996)  // VC12+ deprecates GetVersionEx
-   OSVERSIONINFO info = {sizeof(OSVERSIONINFO)};
-   if (GetVersionEx(&info)) {
-     nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", info.dwMajorVersion,
-                               info.dwMinorVersion);
-   }
-+  desktop = NS_LITERAL_STRING("win");
- #  pragma warning(pop)
- #elif defined(MOZ_WIDGET_COCOA)
-   SInt32 majorVersion = nsCocoaFeatures::OSXVersionMajor();
-   SInt32 minorVersion = nsCocoaFeatures::OSXVersionMinor();
-   nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", majorVersion, minorVersion);
-+  desktop = NS_LITERAL_STRING("macosx");
- #elif defined(MOZ_WIDGET_GTK)
-   nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", gtk_major_version,
-                             gtk_minor_version);
-+  desktop = nsKDEUtils::kdeSession() ? NS_LITERAL_STRING("kde") : NS_LITERAL_STRING("gnome");
- #elif defined(MOZ_WIDGET_ANDROID)
-   bool isTablet = false;
-   if (mozilla::AndroidBridge::Bridge()) {
-     mozilla::AndroidBridge::Bridge()->GetStaticStringField(
-         "android/os/Build$VERSION", "RELEASE", osVersion);
-     isTablet = java::GeckoAppShell::IsTablet();
-   }
-+  desktop = NS_LITERAL_STRING("android");
- #endif
- 
-   if (XRE_IsContentProcess()) {
-     process = kContent;
-   } else {
-     process = kMain;
-   }
- 
-@@ -567,25 +574,27 @@ void ParseManifest(NSLocationType aType,
-     TriState stOsVersion = eUnspecified;
-     TriState stOs = eUnspecified;
-     TriState stABI = eUnspecified;
-     TriState stProcess = eUnspecified;
- #if defined(MOZ_WIDGET_ANDROID)
-     TriState stTablet = eUnspecified;
- #endif
-     int flags = 0;
-+    TriState stDesktop = eUnspecified;
- 
-     while ((token = nsCRT::strtok(whitespace, kWhitespace, &whitespace)) &&
-            ok) {
-       ToLowerCase(token);
-       NS_ConvertASCIItoUTF16 wtoken(token);
- 
-       if (CheckStringFlag(kApplication, wtoken, appID, stApp) ||
-           CheckOsFlag(kOs, wtoken, osTarget, stOs) ||
-           CheckStringFlag(kABI, wtoken, abi, stABI) ||
-+          CheckStringFlag(kDesktop, wtoken, desktop, stDesktop) ||
-           CheckStringFlag(kProcess, wtoken, process, stProcess) ||
-           CheckVersionFlag(kOsVersion, wtoken, osVersion, stOsVersion) ||
-           CheckVersionFlag(kAppVersion, wtoken, appVersion, stAppVersion) ||
-           CheckVersionFlag(kGeckoVersion, wtoken, geckoVersion,
-                            stGeckoVersion)) {
-         continue;
-       }
- 
-@@ -622,17 +631,17 @@ void ParseManifest(NSLocationType aType,
-       }
- 
-       LogMessageWithContext(
-           aFile, line, "Unrecognized chrome manifest modifier '%s'.", token);
-       ok = false;
-     }
- 
-     if (!ok || stApp == eBad || stAppVersion == eBad ||
--        stGeckoVersion == eBad || stOs == eBad || stOsVersion == eBad ||
-+        stGeckoVersion == eBad || stOs == eBad || stOsVersion == eBad || stDesktop == eBad ||
- #ifdef MOZ_WIDGET_ANDROID
-         stTablet == eBad ||
- #endif
-         stABI == eBad || stProcess == eBad) {
-       continue;
-     }
- 
-     if (directive->regfunc) {
-diff --git a/xpcom/components/moz.build b/xpcom/components/moz.build
---- a/xpcom/components/moz.build
-+++ b/xpcom/components/moz.build
-@@ -62,16 +62,17 @@ LOCAL_INCLUDES += [
-     '!..',
-     '../base',
-     '../build',
-     '../ds',
-     '/chrome',
-     '/js/xpconnect/loader',
-     '/layout/build',
-     '/modules/libjar',
-+    '/toolkit/xre',
- ]
- 
- if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
-     CXXFLAGS += CONFIG['TK_CFLAGS']
- 
- 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
-@@ -46,16 +46,17 @@
- #include "prproces.h"
- #include "nsIDirectoryEnumerator.h"
- #include "nsSimpleEnumerator.h"
- #include "private/pprio.h"
- #include "prlink.h"
- 
- #ifdef MOZ_WIDGET_GTK
- #  include "nsIGIOService.h"
-+#  include "nsKDEUtils.h"
- #endif
- 
- #ifdef MOZ_WIDGET_COCOA
- #  include <Carbon/Carbon.h>
- #  include "CocoaFileUtils.h"
- #  include "prmem.h"
- #  include "plbase64.h"
- 
-@@ -1904,62 +1905,77 @@ nsLocalFile::SetPersistentDescriptor(con
- 
- NS_IMETHODIMP
- nsLocalFile::Reveal() {
-   if (!FilePreferences::IsAllowedPath(mPath)) {
-     return NS_ERROR_FILE_ACCESS_DENIED;
-   }
- 
- #ifdef MOZ_WIDGET_GTK
--  nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
--  if (!giovfs) {
--    return NS_ERROR_FAILURE;
--  }
-+  nsAutoCString url;
- 
-   bool isDirectory;
-   if (NS_FAILED(IsDirectory(&isDirectory))) {
-     return NS_ERROR_FAILURE;
-   }
- 
-+  nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
-   if (isDirectory) {
--    return giovfs->ShowURIForInput(mPath);
-+    url = mPath;
-   }
-   if (NS_SUCCEEDED(giovfs->OrgFreedesktopFileManager1ShowItems(mPath))) {
-     return NS_OK;
-   }
-   nsCOMPtr<nsIFile> parentDir;
-   nsAutoCString dirPath;
-   if (NS_FAILED(GetParent(getter_AddRefs(parentDir)))) {
-     return NS_ERROR_FAILURE;
-   }
-   if (NS_FAILED(parentDir->GetNativePath(dirPath))) {
-     return NS_ERROR_FAILURE;
-   }
- 
--  return giovfs->ShowURIForInput(dirPath);
-+  url = dirPath;
- #elif defined(MOZ_WIDGET_COCOA)
-   CFURLRef url;
-   if (NS_SUCCEEDED(GetCFURL(&url))) {
-     nsresult rv = CocoaFileUtils::RevealFileInFinder(url);
-     ::CFRelease(url);
-     return rv;
-   }
-   return NS_ERROR_FAILURE;
- #else
-   return NS_ERROR_FAILURE;
- #endif
-+  if(nsKDEUtils::kdeSupport()) {
-+    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING("REVEAL") );
-+    command.AppendElement( mPath );
-+    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+  }
-+
-+  if (!giovfs)
-+    return NS_ERROR_FAILURE;
-+
-+  return giovfs->ShowURIForInput(url);
- }
- 
- NS_IMETHODIMP
- nsLocalFile::Launch() {
-   if (!FilePreferences::IsAllowedPath(mPath)) {
-     return NS_ERROR_FILE_ACCESS_DENIED;
-   }
- 
- #ifdef MOZ_WIDGET_GTK
-+  if( nsKDEUtils::kdeSupport()) {
-+    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING("OPEN") );
-+    command.AppendElement( mPath );
-+    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+  }
-   nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
-   if (!giovfs) {
-     return NS_ERROR_FAILURE;
-   }
- 
-   return giovfs->ShowURIForInput(mPath);
- #elif defined(MOZ_WIDGET_ANDROID)
-   // Try to get a mimetype, if this fails just use the file uri alone
diff --git a/mozilla-78.0-kde.patch b/mozilla-80.0-kde.patch
similarity index 95%
rename from mozilla-78.0-kde.patch
rename to mozilla-80.0-kde.patch
index ae5b040..a679961 100644
--- a/mozilla-78.0-kde.patch
+++ b/mozilla-80.0-kde.patch
@@ -3,7 +3,7 @@
 # Date 1559294891 -7200
 #      Fri May 31 11:28:11 2019 +0200
 # Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112
-# Parent  aa58e8c70d1448a08407c6c191ea8b76d61e8bf6
+# Parent  a22a4c4e41107a0809c33a83e9d14916738c5a82
 Description: Add KDE integration to Firefox (toolkit parts)
 Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
 Author: Lubos Lunak <lunak@suse.com>
@@ -31,7 +31,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
  #ifdef MOZ_MEMORY
  #  include "mozmemory.h"
  #endif
-@@ -4566,25 +4567,37 @@ nsresult Preferences::InitInitialObjects
+@@ -4530,25 +4531,37 @@ nsresult Preferences::InitInitialObjects
    // application pref files for backwards compatibility.
    static const char* specialFiles[] = {
  #if defined(XP_MACOSX)
@@ -69,7 +69,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
  
    // Load jar:$app/omni.jar!/defaults/preferences/*.js
    // or jar:$gre/omni.jar!/defaults/preferences/*.js.
-@@ -4630,17 +4643,17 @@ nsresult Preferences::InitInitialObjects
+@@ -4594,17 +4607,17 @@ nsresult Preferences::InitInitialObjects
        }
  
        nsCOMPtr<nsIFile> path = do_QueryInterface(elem);
@@ -91,7 +91,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
 diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
 --- a/modules/libpref/moz.build
 +++ b/modules/libpref/moz.build
-@@ -114,16 +114,20 @@ EXPORTS.mozilla += [
+@@ -118,16 +118,20 @@ EXPORTS.mozilla += [
  ]
  EXPORTS.mozilla += sorted(['!' + g for g in gen_h])
  
@@ -106,12 +106,12 @@ diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
 +
  gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs)
  
- GENERATED_FILES += [gen_all_tuple]
- 
- static_pref_list = GENERATED_FILES[gen_all_tuple]
- static_pref_list.script = 'init/generate_static_pref_list.py:emit_code'
- static_pref_list.inputs = ['init/StaticPrefList.yaml']
+ GeneratedFile(*gen_all_tuple, script='init/generate_static_pref_list.py',
+               entry_point='emit_code', inputs=['init/StaticPrefList.yaml'])
  
+ PYTHON_UNITTEST_MANIFESTS += [
+     'test/python.ini',
+ ]
 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
@@ -157,7 +157,7 @@ diff --git a/python/mozbuild/mozpack/chrome/manifest.py b/python/mozbuild/mozpac
 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 += [
+@@ -45,10 +45,14 @@ XPCOM_MANIFESTS += [
  
  if CONFIG['MOZ_PLACES']:
      EXTRA_JS_MODULES += [
@@ -302,7 +302,7 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/sy
  nsUnixSystemProxySettings::GetMainThreadOnly(bool* aMainThreadOnly) {
    // dbus prevents us from being threadsafe, but this routine should not block
    // anyhow
-@@ -384,21 +387,50 @@ nsresult nsUnixSystemProxySettings::GetP
+@@ -381,21 +384,50 @@ nsresult nsUnixSystemProxySettings::GetP
    return NS_OK;
  }
  
@@ -338,7 +338,7 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/sy
 +    url += nsPrintfCString("%d", aPort);
 +  }
 +  nsTArray<nsCString> command;
-+  command.AppendElement( NS_LITERAL_CSTRING( "GETPROXY" ));
++  command.AppendElement( "GETPROXY"_ns );
 +  command.AppendElement( url );
 +  nsTArray<nsCString> result;
 +  if( !nsKDEUtils::command( command, &result ) || result.Length() != 1 )
@@ -356,7 +356,7 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/sy
 diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
 --- a/toolkit/xre/moz.build
 +++ b/toolkit/xre/moz.build
-@@ -88,17 +88,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co
+@@ -90,17 +90,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co
          '../components/printingui',
      ]
  elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'uikit':
@@ -454,8 +454,8 @@ new file mode 100644
 +static bool getKdeSupport()
 +    {
 +    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "CHECK" ));
-+    command.AppendElement( NS_LITERAL_CSTRING( MAKE_STR( KMOZILLAHELPER_VERSION )));
++    command.AppendElement( "CHECK"_ns );
++    command.AppendElement( "KMOZILLAHELPER_VERSION"_ns );
 +    bool kde = nsKDEUtils::command( command );
 +#ifdef DEBUG_KDE
 +    fprintf( stderr, "KDE RUNNING %d\n", kde );
@@ -991,7 +991,7 @@ new file mode 100644
 +nsKDERegistry::HandlerExists(const char *aProtocolScheme)
 +{
 +    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "HANDLEREXISTS" ));
++    command.AppendElement( "HANDLEREXISTS"_ns );
 +    command.AppendElement( nsAutoCString( aProtocolScheme ));
 +    return nsKDEUtils::command( command );
 +}
@@ -1000,7 +1000,7 @@ new file mode 100644
 +nsKDERegistry::LoadURL(nsIURI *aURL)
 +{
 +    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "OPEN" ));
++    command.AppendElement( "OPEN"_ns );
 +    nsCString url;
 +    aURL->GetSpec( url );
 +    command.AppendElement( url );
@@ -1016,7 +1016,7 @@ new file mode 100644
 +                                     nsAString& aDesc)
 +{
 +    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "GETAPPDESCFORSCHEME" ));
++    command.AppendElement( "GETAPPDESCFORSCHEME"_ns );
 +    command.AppendElement( aScheme );
 +    nsTArray<nsCString> output;
 +    if( nsKDEUtils::command( command, &output ) && output.Length() == 1 )
@@ -1029,7 +1029,7 @@ new file mode 100644
 +{
 +    NS_ASSERTION(aFileExt[0] != '.', "aFileExt shouldn't start with a dot");
 +    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "GETFROMEXTENSION" ));
++    command.AppendElement( "GETFROMEXTENSION"_ns );
 +    command.AppendElement( aFileExt );
 +    return GetFromHelper( command );
 +}
@@ -1038,7 +1038,7 @@ new file mode 100644
 +nsKDERegistry::GetFromType(const nsACString& aMIMEType)
 +{
 +    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "GETFROMTYPE" ));
++    command.AppendElement( "GETFROMTYPE"_ns );
 +    command.AppendElement( aMIMEType );
 +    return GetFromHelper( command );
 +}
@@ -1171,9 +1171,9 @@ diff --git a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp b/uriloader/exthandler
 +    bool supports;
 +    if( NS_SUCCEEDED( GetHasDefaultHandler( &supports )) && supports ) {
 +      nsTArray<nsCString> command;
-+      command.AppendElement( NS_LITERAL_CSTRING( "OPEN" ));
++      command.AppendElement( "OPEN"_ns );
 +      command.AppendElement( nativePath );
-+      command.AppendElement( NS_LITERAL_CSTRING( "MIMETYPE" ));
++      command.AppendElement( "MIMETYPE"_ns );
 +      command.AppendElement( mSchemeOrType );
 +      if( nsKDEUtils::command( command ))
 +        return NS_OK;
@@ -1214,7 +1214,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
  #include "nsIFileStreams.h"
  #include "nsILineInputStream.h"
  #include "nsIFile.h"
-@@ -1022,17 +1022,17 @@ nsresult nsOSHelperAppService::GetHandle
+@@ -1019,17 +1019,17 @@ nsresult nsOSHelperAppService::GetHandle
  
  nsresult nsOSHelperAppService::OSProtocolHandlerExists(
      const char* aProtocolScheme, bool* aHandlerExists) {
@@ -1233,7 +1233,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
      nsCOMPtr<nsIHandlerService> handlerSvc =
          do_GetService(NS_HANDLERSERVICE_CONTRACTID, &rv);
      if (NS_SUCCEEDED(rv) && handlerSvc) {
-@@ -1042,17 +1042,17 @@ nsresult nsOSHelperAppService::OSProtoco
+@@ -1039,17 +1039,17 @@ nsresult nsOSHelperAppService::OSProtoco
    }
  
    return rv;
@@ -1252,7 +1252,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
  
  NS_IMETHODIMP nsOSHelperAppService::IsCurrentAppOSDefaultForProtocol(
      const nsACString& aScheme, bool* _retval) {
-@@ -1139,17 +1139,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
+@@ -1136,17 +1136,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
    nsresult rv =
        LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
                                 minorType, mime_types_description, true);
@@ -1271,7 +1271,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
  
      rv = LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
                                    minorType, mime_types_description, false);
-@@ -1251,17 +1251,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
+@@ -1247,17 +1247,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
  
    // Now look up our extensions
    nsAutoString extensions, mime_types_description;
@@ -1293,15 +1293,15 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
 diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
 --- a/widget/gtk/moz.build
 +++ b/widget/gtk/moz.build
-@@ -131,16 +131,17 @@ include('/ipc/chromium/chromium-config.m
- 
- FINAL_LIBRARY = 'xul'
+@@ -133,16 +133,17 @@ include('/ipc/chromium/chromium-config.m
  
  LOCAL_INCLUDES += [
      '/layout/base',
+     '/layout/forms',
      '/layout/generic',
      '/layout/xul',
      '/other-licenses/atk-1.0',
+     '/third_party/cups/include',
 +    '/toolkit/xre',
      '/widget',
      '/widget/headless',
@@ -1534,10 +1534,10 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
 +        }
 +    command.AppendElement( title );
 +    if( mMode == nsIFilePicker::modeOpenMultiple )
-+        command.AppendElement( NS_LITERAL_CSTRING( "MULTIPLE" ));
++        command.AppendElement( "MULTIPLE"_ns );
 +    if( PRInt32 xid = windowToXid( mParentWidget ))
 +        {
-+        command.AppendElement( NS_LITERAL_CSTRING( "PARENT" ));
++        command.AppendElement( "PARENT"_ns );
 +        nsAutoCString parent;
 +        parent.AppendInt( xid );
 +        command.AppendElement( parent );
@@ -1625,11 +1625,11 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
 +    title.Adopt(ToNewUTF8String(mTitle));
 +
 +    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING( "APPSDIALOG" ));
++    command.AppendElement( "APPSDIALOG"_ns );
 +    command.AppendElement( title );
 +    if( PRInt32 xid = windowToXid( mParentWidget ))
 +        {
-+        command.AppendElement( NS_LITERAL_CSTRING( "PARENT" ));
++        command.AppendElement( "PARENT"_ns );
 +        nsAutoCString parent;
 +        parent.AppendInt( xid );
 +        command.AppendElement( parent );
@@ -1703,25 +1703,25 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
    int argc;
  
    bool ischrome;
-@@ -394,16 +395,17 @@ void ParseManifest(NSLocationType aType,
-   NS_NAMED_LITERAL_STRING(kRemoteEnabled, "remoteenabled");
-   NS_NAMED_LITERAL_STRING(kRemoteRequired, "remoterequired");
-   NS_NAMED_LITERAL_STRING(kApplication, "application");
-   NS_NAMED_LITERAL_STRING(kAppVersion, "appversion");
-   NS_NAMED_LITERAL_STRING(kGeckoVersion, "platformversion");
-   NS_NAMED_LITERAL_STRING(kOs, "os");
-   NS_NAMED_LITERAL_STRING(kOsVersion, "osversion");
-   NS_NAMED_LITERAL_STRING(kABI, "abi");
-+  NS_NAMED_LITERAL_STRING(kDesktop, "desktop");
-   NS_NAMED_LITERAL_STRING(kProcess, "process");
+@@ -393,16 +394,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;
+   constexpr auto kOs = u"os"_ns;
+   constexpr auto kOsVersion = u"osversion"_ns;
+   constexpr auto kABI = u"abi"_ns;
++  constexpr auto kDesktop = u"desktop"_ns;
+   constexpr auto kProcess = u"process"_ns;
  #if defined(MOZ_WIDGET_ANDROID)
-   NS_NAMED_LITERAL_STRING(kTablet, "tablet");
+   constexpr auto kTablet = u"tablet"_ns;
  #endif
  
-   NS_NAMED_LITERAL_STRING(kMain, "main");
-   NS_NAMED_LITERAL_STRING(kContent, "content");
+   constexpr auto kMain = u"main"_ns;
+   constexpr auto kContent = u"content"_ns;
  
-@@ -449,39 +451,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);
@@ -1739,17 +1739,17 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
      nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", info.dwMajorVersion,
                                info.dwMinorVersion);
    }
-+  desktop = NS_LITERAL_STRING("win");
++  desktop = u"win"_ns;
  #  pragma warning(pop)
  #elif defined(MOZ_WIDGET_COCOA)
    SInt32 majorVersion = nsCocoaFeatures::macOSVersionMajor();
    SInt32 minorVersion = nsCocoaFeatures::macOSVersionMinor();
    nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", majorVersion, minorVersion);
-+  desktop = NS_LITERAL_STRING("macosx");
++  desktop = u"macosx"_ns);
  #elif defined(MOZ_WIDGET_GTK)
    nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", gtk_major_version,
                              gtk_minor_version);
-+  desktop = nsKDEUtils::kdeSession() ? NS_LITERAL_STRING("kde") : NS_LITERAL_STRING("gnome");
++  desktop = nsKDEUtils::kdeSession() ? u"kde"_ns : u"gnome"_ns;
  #elif defined(MOZ_WIDGET_ANDROID)
    bool isTablet = false;
    if (mozilla::AndroidBridge::Bridge()) {
@@ -1757,7 +1757,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
          "android/os/Build$VERSION", "RELEASE", osVersion);
      isTablet = java::GeckoAppShell::IsTablet();
    }
-+  desktop = NS_LITERAL_STRING("android");
++  desktop = u"android"_ns;
  #endif
  
    if (XRE_IsContentProcess()) {
@@ -1766,7 +1766,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
      process = kMain;
    }
  
-@@ -568,25 +575,27 @@ void ParseManifest(NSLocationType aType,
+@@ -567,25 +574,27 @@ void ParseManifest(NSLocationType aType,
      TriState stOsVersion = eUnspecified;
      TriState stOs = eUnspecified;
      TriState stABI = eUnspecified;
@@ -1794,7 +1794,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
          continue;
        }
  
-@@ -623,17 +632,17 @@ void ParseManifest(NSLocationType aType,
+@@ -622,17 +631,17 @@ void ParseManifest(NSLocationType aType,
        }
  
        LogMessageWithContext(
@@ -1907,7 +1907,7 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
  #endif
 +  if(nsKDEUtils::kdeSupport()) {
 +    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING("REVEAL") );
++    command.AppendElement( "REVEAL"_ns );
 +    command.AppendElement( mPath );
 +    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
 +  }
@@ -1927,7 +1927,7 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
  #ifdef MOZ_WIDGET_GTK
 +  if( nsKDEUtils::kdeSupport()) {
 +    nsTArray<nsCString> command;
-+    command.AppendElement( NS_LITERAL_CSTRING("OPEN") );
++    command.AppendElement( "OPEN"_ns );
 +    command.AppendElement( mPath );
 +    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
 +  }
diff --git a/prio-nss-build.patch b/prio-nss-build.patch
deleted file mode 100644
index 3854572..0000000
--- a/prio-nss-build.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-diff -up firefox-63.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-63.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
-diff -up firefox-63.0/media/webrtc/trunk/Makefile.old firefox-63.0/media/webrtc/trunk/Makefile
-diff -up firefox-63.0/third_party/prio/include/mprio.h.old firefox-63.0/third_party/prio/include/mprio.h
---- firefox-63.0/third_party/prio/include/mprio.h.old	2018-10-18 15:10:24.616102952 +0200
-+++ firefox-63.0/third_party/prio/include/mprio.h	2018-10-18 15:10:33.853076714 +0200
-@@ -14,9 +14,9 @@ extern "C" {
- #endif
- 
- #include <msgpack.h>
--#include <nss/blapit.h>
--#include <nss/pk11pub.h>
--#include <nss/seccomon.h>
-+#include <blapit.h>
-+#include <pk11pub.h>
-+#include <seccomon.h>
- #include <stdbool.h>
- #include <stddef.h>
- 
-diff -up firefox-63.0/third_party/prio/prio/encrypt.c.old firefox-63.0/third_party/prio/prio/encrypt.c
---- firefox-63.0/third_party/prio/prio/encrypt.c.old	2018-10-18 15:15:08.279250181 +0200
-+++ firefox-63.0/third_party/prio/prio/encrypt.c	2018-10-18 15:15:14.614229961 +0200
-@@ -6,9 +6,9 @@
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
-  */
- 
--#include <nss/keyhi.h>
--#include <nss/keythi.h>
--#include <nss/pk11pub.h>
-+#include <keyhi.h>
-+#include <keythi.h>
-+#include <pk11pub.h>
- #include <prerror.h>
- 
- #include "encrypt.h"
-diff -up firefox-63.0/third_party/prio/prio/prg.c.old firefox-63.0/third_party/prio/prio/prg.c
---- firefox-63.0/third_party/prio/prio/prg.c.old	2018-10-18 15:15:21.364208421 +0200
-+++ firefox-63.0/third_party/prio/prio/prg.c	2018-10-18 15:15:27.542188720 +0200
-@@ -7,8 +7,8 @@
-  */
- 
- #include <mprio.h>
--#include <nss/blapit.h>
--#include <nss/pk11pub.h>
-+#include <blapit.h>
-+#include <pk11pub.h>
- #include <string.h>
- 
- #include "prg.h"
-diff -up firefox-63.0/third_party/prio/prio/prg.h.old firefox-63.0/third_party/prio/prio/prg.h
---- firefox-63.0/third_party/prio/prio/prg.h.old	2018-10-18 15:15:35.511163303 +0200
-+++ firefox-63.0/third_party/prio/prio/prg.h	2018-10-18 15:15:40.568147167 +0200
-@@ -10,7 +10,7 @@
- #define __PRG_H__
- 
- #include <mpi.h>
--#include <nss/blapit.h>
-+#include <blapit.h>
- #include <stdlib.h>
- 
- #include "config.h"
-diff -up firefox-63.0/third_party/prio/prio/rand.c.old firefox-63.0/third_party/prio/prio/rand.c
---- firefox-63.0/third_party/prio/prio/rand.c.old	2018-10-18 15:15:49.967117182 +0200
-+++ firefox-63.0/third_party/prio/prio/rand.c	2018-10-18 15:16:00.130084760 +0200
-@@ -8,9 +8,9 @@
- 
- #include <limits.h>
- #include <mprio.h>
--#include <nss/nss.h>
--#include <nss/pk11pub.h>
--#include <nspr/prinit.h>
-+#include <nss.h>
-+#include <pk11pub.h>
-+#include <prinit.h>
- 
- #include "debug.h"
- #include "rand.h"
-diff -up firefox-63.0/third_party/prio/prio/rand.h.old firefox-63.0/third_party/prio/prio/rand.h
---- firefox-63.0/third_party/prio/prio/rand.h.old	2018-10-18 15:14:49.689309517 +0200
-+++ firefox-63.0/third_party/prio/prio/rand.h	2018-10-18 15:14:56.789286855 +0200
-@@ -10,7 +10,7 @@
- #define __RAND_H__
- 
- #include <mpi.h>
--#include <nss/seccomon.h>
-+#include <seccomon.h>
- #include <stdlib.h>
- 
- /*
diff --git a/rhbz-1291190-appchooser-crash.patch b/rhbz-1291190-appchooser-crash.patch
deleted file mode 100644
index be3ccd8..0000000
--- a/rhbz-1291190-appchooser-crash.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up firefox-46.0.1/widget/gtk/nsApplicationChooser.cpp.appchooser-crash firefox-46.0.1/widget/gtk/nsApplicationChooser.cpp
---- firefox-46.0.1/widget/gtk/nsApplicationChooser.cpp.appchooser-crash	2016-05-03 07:31:12.000000000 +0200
-+++ firefox-46.0.1/widget/gtk/nsApplicationChooser.cpp	2016-05-12 12:17:44.043729262 +0200
-@@ -112,7 +112,9 @@ void nsApplicationChooser::Done(GtkWidge
- 
-   // A "response" signal won't be sent again but "destroy" will be.
-   g_signal_handlers_disconnect_by_func(chooser, FuncToGpointer(OnDestroy), this);
--  gtk_widget_destroy(chooser);
-+  // GTK >= 3.18 has a problem with destroying dialog at this stage for some reason.
-+  // We're going to hide the dialog in this case as a workaround.
-+  gtk_widget_hide(chooser);
- 
-   if (mCallback) {
-     mCallback->Done(localHandler);
Not Available

benbullard79 [@T] cox.netNo Comment.1270d 13hrs
benbullard79 [@T] cox.netNo Comment.1270d 13hrs