firefox 69.0.1-1 (znver1;x86_64;i686) 2019-6954
9999

Status published
Submitter cris [@T] beebgames.com
Platform 4.0
Repository main
URL https://abf.openmandriva.org/build_lists/609004
Packages
firefox-69.0.1-1.znver1.binary
firefox-69.0.1-1.znver1.source
firefox-af-69.0.1-1.znver1.binary
firefox-ar-69.0.1-1.znver1.binary
firefox-ast-69.0.1-1.znver1.binary
firefox-bg-69.0.1-1.znver1.binary
firefox-bn-69.0.1-1.znver1.binary
firefox-br-69.0.1-1.znver1.binary
firefox-bs-69.0.1-1.znver1.binary
firefox-ca-69.0.1-1.znver1.binary
firefox-cs-69.0.1-1.znver1.binary
firefox-cy-69.0.1-1.znver1.binary
firefox-da-69.0.1-1.znver1.binary
firefox-de-69.0.1-1.znver1.binary
firefox-devel-69.0.1-1.znver1.binary
firefox-el-69.0.1-1.znver1.binary
firefox-en_GB-69.0.1-1.znver1.binary
firefox-eo-69.0.1-1.znver1.binary
firefox-es_AR-69.0.1-1.znver1.binary
firefox-es_CL-69.0.1-1.znver1.binary
firefox-es_ES-69.0.1-1.znver1.binary
firefox-es_MX-69.0.1-1.znver1.binary
firefox-et-69.0.1-1.znver1.binary
firefox-eu-69.0.1-1.znver1.binary
firefox-fa-69.0.1-1.znver1.binary
firefox-fi-69.0.1-1.znver1.binary
firefox-fr-69.0.1-1.znver1.binary
firefox-fy-69.0.1-1.znver1.binary
firefox-ga_IE-69.0.1-1.znver1.binary
firefox-gd-69.0.1-1.znver1.binary
firefox-gl-69.0.1-1.znver1.binary
firefox-gu_IN-69.0.1-1.znver1.binary
firefox-he-69.0.1-1.znver1.binary
firefox-hi-69.0.1-1.znver1.binary
firefox-hr-69.0.1-1.znver1.binary
firefox-hu-69.0.1-1.znver1.binary
firefox-hy-69.0.1-1.znver1.binary
firefox-id-69.0.1-1.znver1.binary
firefox-is-69.0.1-1.znver1.binary
firefox-it-69.0.1-1.znver1.binary
firefox-ja-69.0.1-1.znver1.binary
firefox-kk-69.0.1-1.znver1.binary
firefox-km-69.0.1-1.znver1.binary
firefox-kn-69.0.1-1.znver1.binary
firefox-ko-69.0.1-1.znver1.binary
firefox-lt-69.0.1-1.znver1.binary
firefox-lv-69.0.1-1.znver1.binary
firefox-mk-69.0.1-1.znver1.binary
firefox-mr-69.0.1-1.znver1.binary
firefox-nb_NO-69.0.1-1.znver1.binary
firefox-nl-69.0.1-1.znver1.binary
firefox-nn_NO-69.0.1-1.znver1.binary
firefox-pa_IN-69.0.1-1.znver1.binary
firefox-pl-69.0.1-1.znver1.binary
firefox-pt_BR-69.0.1-1.znver1.binary
firefox-pt_PT-69.0.1-1.znver1.binary
firefox-ro-69.0.1-1.znver1.binary
firefox-ru-69.0.1-1.znver1.binary
firefox-si-69.0.1-1.znver1.binary
firefox-sk-69.0.1-1.znver1.binary
firefox-sl-69.0.1-1.znver1.binary
firefox-sq-69.0.1-1.znver1.binary
firefox-sr-69.0.1-1.znver1.binary
firefox-sv_SE-69.0.1-1.znver1.binary
firefox-ta-69.0.1-1.znver1.binary
firefox-te-69.0.1-1.znver1.binary
firefox-th-69.0.1-1.znver1.binary
firefox-tr-69.0.1-1.znver1.binary
firefox-uk-69.0.1-1.znver1.binary
firefox-vi-69.0.1-1.znver1.binary
firefox-zh_CN-69.0.1-1.znver1.binary
firefox-zh_TW-69.0.1-1.znver1.binary
firefox-69.0.1-1.x86_64.source
firefox-69.0.1-1.x86_64.binary
firefox-af-69.0.1-1.x86_64.binary
firefox-ar-69.0.1-1.x86_64.binary
firefox-ast-69.0.1-1.x86_64.binary
firefox-bg-69.0.1-1.x86_64.binary
firefox-bn-69.0.1-1.x86_64.binary
firefox-br-69.0.1-1.x86_64.binary
firefox-bs-69.0.1-1.x86_64.binary
firefox-ca-69.0.1-1.x86_64.binary
firefox-cs-69.0.1-1.x86_64.binary
firefox-cy-69.0.1-1.x86_64.binary
firefox-da-69.0.1-1.x86_64.binary
firefox-de-69.0.1-1.x86_64.binary
firefox-devel-69.0.1-1.x86_64.binary
firefox-el-69.0.1-1.x86_64.binary
firefox-en_GB-69.0.1-1.x86_64.binary
firefox-eo-69.0.1-1.x86_64.binary
firefox-es_AR-69.0.1-1.x86_64.binary
firefox-es_CL-69.0.1-1.x86_64.binary
firefox-es_ES-69.0.1-1.x86_64.binary
firefox-es_MX-69.0.1-1.x86_64.binary
firefox-et-69.0.1-1.x86_64.binary
firefox-eu-69.0.1-1.x86_64.binary
firefox-fa-69.0.1-1.x86_64.binary
firefox-fi-69.0.1-1.x86_64.binary
firefox-fr-69.0.1-1.x86_64.binary
firefox-fy-69.0.1-1.x86_64.binary
firefox-ga_IE-69.0.1-1.x86_64.binary
firefox-gd-69.0.1-1.x86_64.binary
firefox-gl-69.0.1-1.x86_64.binary
firefox-gu_IN-69.0.1-1.x86_64.binary
firefox-he-69.0.1-1.x86_64.binary
firefox-hi-69.0.1-1.x86_64.binary
firefox-hr-69.0.1-1.x86_64.binary
firefox-hu-69.0.1-1.x86_64.binary
firefox-hy-69.0.1-1.x86_64.binary
firefox-id-69.0.1-1.x86_64.binary
firefox-is-69.0.1-1.x86_64.binary
firefox-it-69.0.1-1.x86_64.binary
firefox-ja-69.0.1-1.x86_64.binary
firefox-kk-69.0.1-1.x86_64.binary
firefox-km-69.0.1-1.x86_64.binary
firefox-kn-69.0.1-1.x86_64.binary
firefox-ko-69.0.1-1.x86_64.binary
firefox-lt-69.0.1-1.x86_64.binary
firefox-lv-69.0.1-1.x86_64.binary
firefox-mk-69.0.1-1.x86_64.binary
firefox-mr-69.0.1-1.x86_64.binary
firefox-nb_NO-69.0.1-1.x86_64.binary
firefox-nl-69.0.1-1.x86_64.binary
firefox-nn_NO-69.0.1-1.x86_64.binary
firefox-pa_IN-69.0.1-1.x86_64.binary
firefox-pl-69.0.1-1.x86_64.binary
firefox-pt_BR-69.0.1-1.x86_64.binary
firefox-pt_PT-69.0.1-1.x86_64.binary
firefox-ro-69.0.1-1.x86_64.binary
firefox-ru-69.0.1-1.x86_64.binary
firefox-si-69.0.1-1.x86_64.binary
firefox-sk-69.0.1-1.x86_64.binary
firefox-sl-69.0.1-1.x86_64.binary
firefox-sq-69.0.1-1.x86_64.binary
firefox-sr-69.0.1-1.x86_64.binary
firefox-sv_SE-69.0.1-1.x86_64.binary
firefox-ta-69.0.1-1.x86_64.binary
firefox-te-69.0.1-1.x86_64.binary
firefox-th-69.0.1-1.x86_64.binary
firefox-tr-69.0.1-1.x86_64.binary
firefox-uk-69.0.1-1.x86_64.binary
firefox-vi-69.0.1-1.x86_64.binary
firefox-zh_CN-69.0.1-1.x86_64.binary
firefox-zh_TW-69.0.1-1.x86_64.binary
firefox-69.0.1-1.i686.source
firefox-69.0.1-1.i686.binary
firefox-af-69.0.1-1.i686.binary
firefox-ar-69.0.1-1.i686.binary
firefox-ast-69.0.1-1.i686.binary
firefox-bg-69.0.1-1.i686.binary
firefox-bn-69.0.1-1.i686.binary
firefox-br-69.0.1-1.i686.binary
firefox-bs-69.0.1-1.i686.binary
firefox-ca-69.0.1-1.i686.binary
firefox-cs-69.0.1-1.i686.binary
firefox-cy-69.0.1-1.i686.binary
firefox-da-69.0.1-1.i686.binary
firefox-de-69.0.1-1.i686.binary
firefox-devel-69.0.1-1.i686.binary
firefox-el-69.0.1-1.i686.binary
firefox-en_GB-69.0.1-1.i686.binary
firefox-eo-69.0.1-1.i686.binary
firefox-es_AR-69.0.1-1.i686.binary
firefox-es_CL-69.0.1-1.i686.binary
firefox-es_ES-69.0.1-1.i686.binary
firefox-es_MX-69.0.1-1.i686.binary
firefox-et-69.0.1-1.i686.binary
firefox-eu-69.0.1-1.i686.binary
firefox-fa-69.0.1-1.i686.binary
firefox-fi-69.0.1-1.i686.binary
firefox-fr-69.0.1-1.i686.binary
firefox-fy-69.0.1-1.i686.binary
firefox-ga_IE-69.0.1-1.i686.binary
firefox-gd-69.0.1-1.i686.binary
firefox-gl-69.0.1-1.i686.binary
firefox-gu_IN-69.0.1-1.i686.binary
firefox-he-69.0.1-1.i686.binary
firefox-hi-69.0.1-1.i686.binary
firefox-hr-69.0.1-1.i686.binary
firefox-hu-69.0.1-1.i686.binary
firefox-hy-69.0.1-1.i686.binary
firefox-id-69.0.1-1.i686.binary
firefox-is-69.0.1-1.i686.binary
firefox-it-69.0.1-1.i686.binary
firefox-ja-69.0.1-1.i686.binary
firefox-kk-69.0.1-1.i686.binary
firefox-km-69.0.1-1.i686.binary
firefox-kn-69.0.1-1.i686.binary
firefox-ko-69.0.1-1.i686.binary
firefox-lt-69.0.1-1.i686.binary
firefox-lv-69.0.1-1.i686.binary
firefox-mk-69.0.1-1.i686.binary
firefox-mr-69.0.1-1.i686.binary
firefox-nb_NO-69.0.1-1.i686.binary
firefox-nl-69.0.1-1.i686.binary
firefox-nn_NO-69.0.1-1.i686.binary
firefox-pa_IN-69.0.1-1.i686.binary
firefox-pl-69.0.1-1.i686.binary
firefox-pt_BR-69.0.1-1.i686.binary
firefox-pt_PT-69.0.1-1.i686.binary
firefox-ro-69.0.1-1.i686.binary
firefox-ru-69.0.1-1.i686.binary
firefox-si-69.0.1-1.i686.binary
firefox-sk-69.0.1-1.i686.binary
firefox-sl-69.0.1-1.i686.binary
firefox-sq-69.0.1-1.i686.binary
firefox-sr-69.0.1-1.i686.binary
firefox-sv_SE-69.0.1-1.i686.binary
firefox-ta-69.0.1-1.i686.binary
firefox-te-69.0.1-1.i686.binary
firefox-th-69.0.1-1.i686.binary
firefox-tr-69.0.1-1.i686.binary
firefox-uk-69.0.1-1.i686.binary
firefox-vi-69.0.1-1.i686.binary
firefox-zh_CN-69.0.1-1.i686.binary
firefox-zh_TW-69.0.1-1.i686.binary
Build Date 2019-09-21 16:05:14 +0000 UTC
Last Updated 2019-09-26 17:21:03.823681724 +0000 UTC
$ git diff --patch-with-stat --summary 99923666a1249dc376b3c5fc6f781ee4eed9c836..514693415da0bc839c5b273fa07d6d2bea495d39

 .abf.yml                                         |  142 +-
 firefox-68.0-kde.patch                           | 1698 ----------------------
 firefox-69.0-kde.patch                           |  351 +++++
 firefox.spec                                     |   12 +-
 mozilla-68.0-kde.patch => mozilla-69.0-kde.patch |  611 +-------
 5 files changed, 477 insertions(+), 2337 deletions(-)
 delete mode 100644 firefox-68.0-kde.patch
 create mode 100644 firefox-69.0-kde.patch
 rename mozilla-68.0-kde.patch => mozilla-69.0-kde.patch (73%)

diff --git a/.abf.yml b/.abf.yml
index da0409e..3b548ae 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -1,74 +1,74 @@
 sources:
-  af.xpi: 7bc13768ebe3960f3316d6a4d9efa8ce1b76b2e7
-  ar.xpi: 6209330063978867dfba583ea6c28619ba9c7404
-  ast.xpi: 04c2c6c912eb23c77442b41de7ba1729ce6b8a4b
+  af.xpi: 2c1ba8d6a5ffe3ed1be32617cff332730c7b5c0b
+  ar.xpi: 56e8a4bd0621e56cc45dc1d93a6863587601a007
+  ast.xpi: 425e040124be807ffb1c124fe493f14254d4adfe
   autoconf-2.13.tar.gz: e4826c8bd85325067818f19b2b2ad2b625da66fc
-  bg.xpi: 7f26945eebf70571204bd52655c39de474896f7b
-  bn.xpi: 38e46585ce60993576d5abb22b50508d0d48bdd7
-  br.xpi: a9ddeeeea60e5979838e43e0fac0a6d2013b0fda
-  bs.xpi: d163260c9988f5950582b97e758f0b589c8244ef
-  ca.xpi: ac753c358d01fd7ffa8c44d6acbb5c52bf4d40e2
-  cbindgen-vendor.tar.xz: 5ed5e4744f281d217e56035036af4cef24a29935
-  cs.xpi: 86a160e3580172dd6cec65e927fa48b49b7646a0
-  cy.xpi: 0040af442c7089a0565517ff9c185cf286bc2c34
-  da.xpi: 3696c4617de4e86dc912b7bc174a2d23177fd83b
-  de.xpi: ad0add629283af23ce005033ed089cfa745c950a
-  el.xpi: f97f69dcd6a7653fb804d8702d61f5d1338fac8a
-  en-GB.xpi: 99ce412f20fffdfa94d5dd4732a5341bff9c334d
-  eo.xpi: 4416a0d72a5cdc33ec794cd9872509e7cb340cc5
-  es-AR.xpi: b76c2691c2fb3534ac2b4440e865ef064a8c7a28
-  es-CL.xpi: bb35a02851f022a15a420d34c36086b7bf58db01
-  es-ES.xpi: 91f9b373ff819656e6b21266a72a134f1cc2d239
-  es-MX.xpi: 25833c3720d27c0a06195eb98c9a4a101b4da984
-  et.xpi: 804c35125baeb234a8b0cfa7e00657cdd1636622
-  eu.xpi: 513925122e3b47950db9ced9941be15afe32f99a
-  fa.xpi: f7cc6b74d5c80b88b5dba6d8e2cafe2dad37fcd7
-  fi.xpi: 7f3f94f2218e3ae8541d9de0a4e520b95438c91f
-  firefox-68.0.2.source.tar.xz: 1e532075b573148a88296aa56ab149ddbd786882
-  fr.xpi: 1d8bfa069e21c4256abd4df7bb4d71b402493e85
-  fy-NL.xpi: 54483f4ad8b550c20fd1b2b2c7ea16344278e7ca
-  ga-IE.xpi: 3e640d580a0d6467ca31f896ceab85670a7a3e9e
-  gd.xpi: 2817df75e3a691e6ec747d737954eac0ebb14c8f
-  gl.xpi: 220fd9021c52e07e62f01fe654aff7f70255f236
-  gu-IN.xpi: 9013767f032cb7d5842c977d56a5a4edafa808e0
-  he.xpi: fd0316e0b11f00a509406aadd864fd9d27dec6fe
-  hi-IN.xpi: f93b2c88ac62b2462b986ef8ce054d4b26167aa7
-  hr.xpi: 140e0f00ae419f706e60198d46a89cbec93d0dfe
-  hu.xpi: 7ca5fc0c0da160135be28e43bf776f93a7692286
-  hy-AM.xpi: ed3cc3b6bdbf42f2e840793267cdcdeebda6a8d1
-  id.xpi: 506a106e0f94d329e89d88817804a9709f9b3ca7
-  is.xpi: 03d5e6686a96913d294d48f48c0a43d5b57c1810
-  it.xpi: fd418ff2e297ad032ce6c5869451a0311877d9e2
-  ja.xpi: 931afc42e14558d4fe73d5ed85e9a7b058163e06
-  kk.xpi: 196a1a0c43a98f0dd5729b0a59cffc7e516c3667
-  km.xpi: f91549b80dbd3b1976d60f5bed16f02d1ad763ff
-  kn.xpi: 5d69cca84daad6ff98e261f9d5408984a9dc0dc4
-  ko.xpi: 258bd4208e7a2ceec2553a6917d3d01bc2bf7c66
-  lt.xpi: 1d0ed1995f0738de4dce0cbbd863161216b9b692
-  lv.xpi: 057c05aeeeeb7e37cb7b8a3ed2b7f58ae348ccf5
-  mk.xpi: c959d3de737dacc38d62a24e7b31945641ce2121
-  mr.xpi: 138fe82b6b8cf298460e903118d9fcd08a747299
-  nb-NO.xpi: 14da9b6e181fb81be54eab4ad79ca16e00514cd3
-  nl.xpi: 5f5f27fc944862ea3d0d6b7f50afc70a3ea123b9
-  nn-NO.xpi: bce3ad0a64d4675a780cffcee2cd55eac4447e4b
+  bg.xpi: 4515975d145a16df5fbc65f11cc4669a06942921
+  bn.xpi: 4388ed2d37757acdb441351f7a663e0c725345bf
+  br.xpi: c4bbf1545279643a306870bf65ed011543d57a8d
+  bs.xpi: 40432e4ce1aae1c5ee1bbf64cb6dffdc7ea372ad
+  ca.xpi: c6f1801a84467d7a6306e2614734a3231d2970d9
+  cbindgen-vendor.tar.xz: f661af3f8e6a52af8f0bc206987134e66b449fe0
+  cs.xpi: 1279ad0cf7ca1230460e808709dee2c44533ba14
+  cy.xpi: 927173c72f40ddeadb2c2faf211bcef4b18c6153
+  da.xpi: e8af171b6db84dd1f138ff5e43d759876dd1871e
+  de.xpi: a04735c40a2416260d923a89d91ae9ce095bcc47
+  el.xpi: 0bcc8133dc261285f3b4dba2056358ab61d59cd3
+  en-GB.xpi: f1d341fd9dfa7c1d057870e9d75c4e5b6915e5d9
+  eo.xpi: 668d7cad374ff88d6e555f26622200464de15982
+  es-AR.xpi: 894f3330941e5d39cedda9dd98cb67b55ecc6b15
+  es-CL.xpi: 9a4f6c319bb5b64141cff1b176edb7e492bbbc40
+  es-ES.xpi: 35ead562bf99e3c07de05624ddafdf27e455bd2b
+  es-MX.xpi: a10b54fde91e9ece04a32c990c286937709b6511
+  et.xpi: 45263cbc19c0edea66c2576934f1c64670d21eff
+  eu.xpi: 12201941707cfa71991d62a446ca545e8e9f84ab
+  fa.xpi: 2afe4eae282039194fde48506deb141f626a22a6
+  fi.xpi: 7c87ec6ae8cad29bff471b38c69adb58fac6948e
+  firefox-69.0.1.source.tar.xz: 3c693918d85e789944e6fe59fe76c34115cae906
+  fr.xpi: 3db09d68b12d29fa43fe655dc5320ba848b1646a
+  fy-NL.xpi: 46a044371ad3982f1b05b68b1fa8d920b1ac1ed9
+  ga-IE.xpi: 651c344a39185faf229a957f192ec492fe7cd8b6
+  gd.xpi: 9e41e37484e2490128895a5ceac356d8652c06e3
+  gl.xpi: 86efaf65fc0acf3fa839b08a748b112a67ba79cf
+  gu-IN.xpi: dd63026ebb52c5daaf40321abeac62a88a25aff1
+  he.xpi: 459edced013ab3654a3ff7a09277b99e3b9881c6
+  hi-IN.xpi: 8fbd14b5ec32f76788c7a002c0d9fdc06cf8e3fd
+  hr.xpi: 67d9c6c4b7bd3a52aea15e3b0d2432c259dff339
+  hu.xpi: af4354f03b239323eeffdc296d495738f8fc7005
+  hy-AM.xpi: 6376d7d8952385090fedbd2884f2e23df8e48c41
+  id.xpi: 8869c9035ba66e148f3bb0464ff37df165f75363
+  is.xpi: 4fb8061be51c134dbcf8d0a6eeda687628358b99
+  it.xpi: 005311b9b90fbe29b2831debedfc5f672e587d3e
+  ja.xpi: 5596945e0ef1e0b20a397c4cfeebc2aa186ae8ea
+  kk.xpi: ed6460210ab8aa645028945c6f1aafd28e18ae8a
+  km.xpi: 73de5e4fe797174a823148346bbc5a8f9f85eabf
+  kn.xpi: ba911b7810f772322652be374e46cb4e937d7188
+  ko.xpi: 9ccf07117ecf442faa01f455442b3cddc4c0ac22
+  lt.xpi: f0104a1d7c5915e4cad33bd64d131e3435ac32af
+  lv.xpi: 721a3f5f859244fdfa76bde92cbb9a7f52b87ede
+  mk.xpi: 2ea6368ee5c59be50411dc273176c8989a1f4b1d
+  mr.xpi: 42fd85a2b78bccaea0e538831775cacc095c1d32
+  nb-NO.xpi: c03ff672348c72849ac3cc1ce33a1fc5efcc943d
+  nl.xpi: adb72a42ec622b25943b4afa89cd6befd5461ab0
+  nn-NO.xpi: 95909f0c5c049ffb15bf7d1ff11c79a6be76ee64
   or.xpi: 39e99b91bb2d0b10a7561ddcca86015d2ac7f624
-  pa-IN.xpi: 88d40af6b1f59c98eeb48f8100a9900f251227bb
-  pl.xpi: fe24c97954a81b59cd503e1262f6f9bab77a7856
-  pt-BR.xpi: 6076380028e1f7d787dc8c9bbbee713691adde8d
-  pt-PT.xpi: 6334f239fec7638e2f7b30d8d2a46a97f05c058d
-  ro.xpi: f8157dc6bb66c65734aeb4ccd3ae74ce97fee9f8
-  ru.xpi: d80077db3913ae6b6aa96d35bb686d00310ed22b
-  si.xpi: b9649c1f7afe4722e50946f5801a76c23c7f7f5b
-  sk.xpi: 94d63f6578e3db11b7b992dd37426c7897683597
-  sl.xpi: 86bfcdb0973a635504f52a40ddad17443dbe3db9
-  sq.xpi: cd645da2b57083dc815b53e1de08e1b3244e3b39
-  sr.xpi: 50cea32818b7951bf88b328a4cdd550d845df461
-  sv-SE.xpi: 0547ff8ffba0fe49cd0317e8ad1485353fc919e0
-  ta.xpi: 4852562f68af4a5eec9cb6c1ea1931ec48a5d1cd
-  te.xpi: d1f1977a9eae0251752b3d095c3d742eef47b8b0
-  th.xpi: eb819c8bf272579f583aaf1ccd8dfc14f3483484
-  tr.xpi: 632d06289fc9f6d84c56cc0fed122d73a6d9ec2f
-  uk.xpi: 009779bebd96b616b0c7c5f0cf1ce020fa8487a0
-  vi.xpi: 0458c8ca81ba0b62750754aad434ddf659df7304
-  zh-CN.xpi: f75a6856b6cc705acf9ea14fac193eb2c7f581ef
-  zh-TW.xpi: 09b05497b63e927cc77fc8c3152a1164dc9498ce
+  pa-IN.xpi: a19f652651266b0cffca820519520c10399c6708
+  pl.xpi: 6aefa2bc96563a42b8e3f50f734da40bbba6ed1a
+  pt-BR.xpi: 76ebde522546dc378f1e115731fb3a9544eefc3e
+  pt-PT.xpi: 424a7b824863084752b20e47f2aa6a5deacb8697
+  ro.xpi: 689283b5904e1b42e848f96c95110f290021a34d
+  ru.xpi: 9c6cba917e83ab143fce61ad9c82f99c36781ff9
+  si.xpi: daed18523ba8d70a5f682eb86410bc5f638eb29c
+  sk.xpi: b05de2cdad058271ce6063c5da860b2ccf0837fa
+  sl.xpi: ba76176ec1a97251590869f5a5d7ee2635003105
+  sq.xpi: 6e3f4bceda68befdedf1f99b55756004db1e63d8
+  sr.xpi: 2b09b1a87ee084ea243455815101d1c3eef3b533
+  sv-SE.xpi: 8d11ee93857b28d68d8523f8b345ee15e182dc8b
+  ta.xpi: 0d01096861f321078a31c4f5cc6b2508e9add371
+  te.xpi: 674a3e8dc4e55f2abd845cf1bbc0b49ab79f64f6
+  th.xpi: 55dcccfa74e6f4534196ed8e71ca3537f96de895
+  tr.xpi: e978a9e9e251d127dba4bf1185fe14ba73291982
+  uk.xpi: 326fbfb8ffd7b6bc9950b6ade1dfbaf6b5e75efd
+  vi.xpi: 5495e1bb520abb84d9b7b3086ad3f479f4f55fca
+  zh-CN.xpi: 78f5a321cbf5ba38e4b7a8ea8a6e1311eb5b5860
+  zh-TW.xpi: e5659cd8cfe3295b143ba79013b3f7b02c924fc4
diff --git a/firefox-68.0-kde.patch b/firefox-68.0-kde.patch
deleted file mode 100644
index c85652e..0000000
--- a/firefox-68.0-kde.patch
+++ /dev/null
@@ -1,1698 +0,0 @@
-# HG changeset patch
-# User msirringhaus@suse.de
-# Date 1559300151 -7200
-#      Fri May 31 12:55:51 2019 +0200
-# Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
-# Parent  428161c3b9599083e1b8710eda1760f1f707ab11
-How to apply this patch:
-1. Import and apply it
-2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul
-3. Find editBookmarkPanelDoneButton
-4. Replace #ifndef with #ifdef in the line above (this hanges the button order from Gnome-style to KDE-style)
-5. hg qrefresh
-
-diff -r 428161c3b959 -r 54d41b0033b8 browser/base/content/browser-kde.xul
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/base/content/browser-kde.xul	Fri May 31 12:55:51 2019 +0200
-@@ -0,0 +1,1375 @@
-+#filter substitution
-+<?xml version="1.0"?>
-+# -*- Mode: HTML -*-
-+#
-+# 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/.
-+
-+<!-- The "global.css" stylesheet is imported first to allow other stylesheets to
-+     override rules using selectors with the same specificity. This applies to
-+     both "content" and "skin" packages, which bug 1385444 will unify later. -->
-+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-+
-+<!-- While these stylesheets are defined in Toolkit, they are only used in the
-+     main browser window, so we can load them here. Bug 1474241 is on file to
-+     consider moving these widgets to the "browser" folder. -->
-+<?xml-stylesheet href="chrome://global/content/tabprompts.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://global/skin/tabprompts.css" type="text/css"?>
-+
-+<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/content/tabbrowser.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/content/downloads/downloads.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/content/usercontext/usercontext.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/customizableui/panelUI.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/downloads/downloads.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/searchbar.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/places/tree-icons.css" type="text/css"?>
-+<?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?>
-+
-+# All DTD information is stored in a separate file so that it can be shared by
-+# hiddenWindow.xul.
-+<!DOCTYPE window [
-+#include browser-doctype.inc
-+]>
-+
-+<window id="main-window"
-+        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-+        xmlns:svg="http://www.w3.org/2000/svg"
-+        xmlns:html="http://www.w3.org/1999/xhtml"
-+        xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-+        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-+        title="&mainWindow.title;"
-+        title_normal="&mainWindow.title;"
-+#ifdef XP_MACOSX
-+        title_privatebrowsing="&mainWindow.title;&mainWindow.titlemodifiermenuseparator;&mainWindow.titlePrivateBrowsingSuffix;"
-+        titledefault="&mainWindow.title;"
-+        titlemodifier=""
-+        titlemodifier_normal=""
-+        titlemodifier_privatebrowsing="&mainWindow.titlePrivateBrowsingSuffix;"
-+#else
-+        title_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
-+        titlemodifier="&mainWindow.titlemodifier;"
-+        titlemodifier_normal="&mainWindow.titlemodifier;"
-+        titlemodifier_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
-+#endif
-+#ifdef XP_WIN
-+        chromemargin="0,2,2,2"
-+#else
-+        chromemargin="0,-1,-1,-1"
-+#endif
-+        tabsintitlebar="true"
-+        titlemenuseparator="&mainWindow.titlemodifiermenuseparator;"
-+        windowtype="navigator:browser"
-+        macanimationtype="document"
-+        screenX="4" screenY="4"
-+        fullscreenbutton="true"
-+        sizemode="normal"
-+        retargetdocumentfocus="urlbar"
-+        persist="screenX screenY width height sizemode"
-+#ifdef BROWSER_XHTML
-+        mozpersist=""
-+#endif
-+        >
-+
-+# All JS files which are needed by browser.xul and other top level windows to
-+# support MacOS specific features *must* go into the global-scripts.inc file so
-+# that they can be shared with macWindow.inc.xul.
-+#include global-scripts.inc
-+
-+<script>
-+  Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-captivePortal.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-contentblocking.js", this);
-+#ifdef MOZ_DATA_REPORTING
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-data-submission-info-bar.js", this);
-+#endif
-+#ifndef MOZILLA_OFFICIAL
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-development-helpers.js", this);
-+#endif
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-media.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-pageActions.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-plugins.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-sidebar.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/browser-tabsintitlebar.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/tabbrowser.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/search/autocomplete-popup.js", this);
-+  Services.scriptloader.loadSubScript("chrome://browser/content/search/searchbar.js", this);
-+
-+  window.onload = gBrowserInit.onLoad.bind(gBrowserInit);
-+  window.onunload = gBrowserInit.onUnload.bind(gBrowserInit);
-+  window.onclose = WindowIsClosing;
-+
-+  window.addEventListener("MozBeforeInitialXULLayout",
-+    gBrowserInit.onBeforeInitialXULLayout.bind(gBrowserInit), { once: true });
-+
-+  // The listener of DOMContentLoaded must be set on window, rather than
-+  // document, because the window can go away before the event is fired.
-+  // In that case, we don't want to initialize anything, otherwise we
-+  // may be leaking things because they will never be destroyed after.
-+  window.addEventListener("DOMContentLoaded",
-+    gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
-+</script>
-+
-+# All sets except for popupsets (commands, keys, and stringbundles)
-+# *must* go into the browser-sets.inc file so that they can be shared with other
-+# top level windows in macWindow.inc.xul.
-+#include browser-sets.inc
-+
-+  <popupset id="mainPopupSet">
-+    <menupopup id="tabContextMenu"
-+               onpopupshowing="if (event.target == this) TabContextMenu.updateContextMenu(this);"
-+               onpopuphidden="if (event.target == this) TabContextMenu.contextTab = null;">
-+      <menuitem id="context_reloadTab" data-lazy-l10n-id="reload-tab"
-+                oncommand="gBrowser.reloadTab(TabContextMenu.contextTab);"/>
-+      <menuitem id="context_reloadSelectedTabs" data-lazy-l10n-id="reload-tabs" hidden="true"
-+                oncommand="gBrowser.reloadMultiSelectedTabs();"/>
-+      <menuitem id="context_toggleMuteTab" oncommand="TabContextMenu.contextTab.toggleMuteAudio();"/>
-+      <menuitem id="context_toggleMuteSelectedTabs" hidden="true"
-+                oncommand="gBrowser.toggleMuteAudioOnMultiSelectedTabs(TabContextMenu.contextTab);"/>
-+      <menuitem id="context_pinTab" data-lazy-l10n-id="pin-tab"
-+                oncommand="gBrowser.pinTab(TabContextMenu.contextTab);"/>
-+      <menuitem id="context_unpinTab" data-lazy-l10n-id="unpin-tab" hidden="true"
-+                oncommand="gBrowser.unpinTab(TabContextMenu.contextTab);"/>
-+      <menuitem id="context_pinSelectedTabs" data-lazy-l10n-id="pin-selected-tabs" hidden="true"
-+                oncommand="gBrowser.pinMultiSelectedTabs();"/>
-+      <menuitem id="context_unpinSelectedTabs" data-lazy-l10n-id="unpin-selected-tabs" hidden="true"
-+                oncommand="gBrowser.unpinMultiSelectedTabs();"/>
-+      <menuitem id="context_duplicateTab" data-lazy-l10n-id="duplicate-tab"
-+                oncommand="duplicateTabIn(TabContextMenu.contextTab, 'tab');"/>
-+      <menuitem id="context_duplicateTabs" data-lazy-l10n-id="duplicate-tabs"
-+                oncommand="TabContextMenu.duplicateSelectedTabs();"/>
-+      <menuseparator/>
-+      <menuitem id="context_selectAllTabs" data-lazy-l10n-id="select-all-tabs"
-+                oncommand="gBrowser.selectAllTabs();"/>
-+      <menuitem id="context_bookmarkSelectedTabs"
-+                hidden="true"
-+                data-lazy-l10n-id="bookmark-selected-tabs"
-+                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"/>
-+      <menuitem id="context_bookmarkTab"
-+                data-lazy-l10n-id="bookmark-tab"
-+                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.getUniquePages([TabContextMenu.contextTab]));"/>
-+      <menu id="context_reopenInContainer"
-+            data-lazy-l10n-id="reopen-in-container"
-+            hidden="true">
-+        <menupopup oncommand="TabContextMenu.reopenInContainer(event);"
-+                   onpopupshowing="TabContextMenu.createReopenInContainerMenu(event);"/>
-+      </menu>
-+      <menu id="context_moveTabOptions">
-+        <menupopup id="moveTabOptionsMenu">
-+          <menuitem id="context_moveToStart"
-+                    data-lazy-l10n-id="move-to-start"
-+                    tbattr="tabbrowser-multiple"
-+                    oncommand="gBrowser.moveTabsToStart(TabContextMenu.contextTab);"/>
-+          <menuitem id="context_moveToEnd"
-+                    data-lazy-l10n-id="move-to-end"
-+                    tbattr="tabbrowser-multiple"
-+                    oncommand="gBrowser.moveTabsToEnd(TabContextMenu.contextTab);"/>
-+          <menuitem id="context_openTabInWindow" data-lazy-l10n-id="move-to-new-window"
-+                    tbattr="tabbrowser-multiple"
-+                    oncommand="gBrowser.replaceTabsWithWindow(TabContextMenu.contextTab);"/>
-+        </menupopup>
-+      </menu>
-+      <menu id="context_sendTabToDevice"
-+            class="sync-ui-item">
-+        <menupopup id="context_sendTabToDevicePopupMenu"
-+                   onpopupshowing="gSync.populateSendTabToDevicesMenu(event.target, TabContextMenu.contextTab.linkedBrowser.currentURI.spec, TabContextMenu.contextTab.linkedBrowser.contentTitle, TabContextMenu.contextTab.multiselected);"/>
-+      </menu>
-+      <menuseparator/>
-+      <menuitem id="context_closeTabsToTheEnd" data-lazy-l10n-id="close-tabs-to-the-end"
-+                oncommand="gBrowser.removeTabsToTheEndFrom(TabContextMenu.contextTab, {animate: true});"/>
-+      <menuitem id="context_closeOtherTabs" data-lazy-l10n-id="close-other-tabs"
-+                oncommand="gBrowser.removeAllTabsBut(TabContextMenu.contextTab);"/>
-+      <menuitem id="context_undoCloseTab"
-+                data-lazy-l10n-id="undo-close-tab"
-+                observes="History:UndoCloseTab"/>
-+      <menuitem id="context_closeTab" data-lazy-l10n-id="close-tab"
-+                oncommand="gBrowser.removeTab(TabContextMenu.contextTab, { animate: true });"/>
-+      <menuitem id="context_closeSelectedTabs" data-lazy-l10n-id="close-tabs"
-+                hidden="true"
-+                oncommand="gBrowser.removeMultiSelectedTabs();"/>
-+    </menupopup>
-+
-+    <!-- bug 415444/582485: event.stopPropagation is here for the cloned version
-+         of this menupopup -->
-+    <menupopup id="backForwardMenu"
-+               onpopupshowing="return FillHistoryMenu(event.target);"
-+               oncommand="gotoHistoryIndex(event); event.stopPropagation();"
-+               onclick="checkForMiddleClick(this, event);"/>
-+    <tooltip id="aHTMLTooltip" page="true"/>
-+    <tooltip id="remoteBrowserTooltip"/>
-+
-+    <!-- for search and content formfill/pw manager -->
-+
-+    <panel is="autocomplete-richlistbox-popup"
-+           type="autocomplete-richlistbox"
-+           id="PopupAutoComplete"
-+           role="group"
-+           noautofocus="true"
-+           hidden="true"
-+           overflowpadding="4"
-+           norolluponanchor="true"
-+           nomaxresults="true" />
-+
-+    <!-- for search with one-off buttons -->
-+    <panel is="search-autocomplete-richlistbox-popup"
-+           type="autocomplete-richlistbox"
-+           id="PopupSearchAutoComplete"
-+           role="group"
-+           noautofocus="true"
-+           hidden="true" />
-+
-+    <!-- for url bar autocomplete -->
-+    <panel type="autocomplete-richlistbox"
-+           id="PopupAutoCompleteRichResult"
-+           role="group"
-+           noautofocus="true"
-+           hidden="true"
-+           flip="none"
-+           level="parent"
-+           overflowpadding="15" />
-+
-+    <!-- for date/time picker. consumeoutsideclicks is set to never, so that
-+         clicks on the anchored input box are never consumed. -->
-+    <panel id="DateTimePickerPanel"
-+           type="arrow"
-+           hidden="true"
-+           orient="vertical"
-+           noautofocus="true"
-+           norolluponanchor="true"
-+           consumeoutsideclicks="never"
-+           level="parent"
-+           tabspecific="true">
-+    </panel>
-+
-+    <!-- for select dropdowns. The menupopup is what shows the list of options,
-+         and the popuponly menulist makes things like the menuactive attributes
-+         work correctly on the menupopup. ContentSelectDropdown expects the
-+         popuponly menulist to be its immediate parent. -->
-+    <menulist popuponly="true" id="ContentSelectDropdown" hidden="true">
-+      <menupopup rolluponmousewheel="true"
-+                 activateontab="true" position="after_start"
-+                 level="parent"
-+#ifdef XP_WIN
-+                 consumeoutsideclicks="false" ignorekeys="shortcuts"
-+#endif
-+        />
-+    </menulist>
-+
-+    <!-- for invalid form error message -->
-+    <panel id="invalid-form-popup" type="arrow" orient="vertical" noautofocus="true" hidden="true" level="parent">
-+      <description/>
-+    </panel>
-+
-+    <panel id="editBookmarkPanel"
-+           type="arrow"
-+           orient="vertical"
-+           ignorekeys="true"
-+           hidden="true"
-+           tabspecific="true"
-+           aria-labelledby="editBookmarkPanelTitle">
-+      <box class="panel-header">
-+        <label id="editBookmarkPanelTitle"/>
-+        <toolbarbutton id="editBookmarkPanelInfoButton" oncommand="StarUI.toggleRecommendation();" >
-+          <image/>
-+        </toolbarbutton>
-+      </box>
-+      <html:div id="editBookmarkPanelInfoArea">
-+        <html:div id="editBookmarkPanelRecommendation"></html:div>
-+        <html:div id="editBookmarkPanelFaviconContainer">
-+          <html:img id="editBookmarkPanelFavicon"/>
-+        </html:div>
-+        <html:div id="editBookmarkPanelImage"></html:div>
-+      </html:div>
-+#include ../../components/places/content/editBookmarkPanel.inc.xul
-+      <vbox id="editBookmarkPanelBottomContent"
-+            flex="1">
-+        <checkbox id="editBookmarkPanel_showForNewBookmarks"
-+                  label="&editBookmark.showForNewBookmarks.label;"
-+                  accesskey="&editBookmark.showForNewBookmarks.accesskey;"
-+                  oncommand="StarUI.onShowForNewBookmarksCheckboxCommand();"/>
-+      </vbox>
-+      <hbox id="editBookmarkPanelBottomButtons"
-+            class="panel-footer"
-+            style="min-width: &editBookmark.panel.width;;">
-+#ifdef XP_UNIX
-+        <button id="editBookmarkPanelDoneButton"
-+                class="editBookmarkPanelBottomButton"
-+                label="&editBookmark.done.label;"
-+                default="true"
-+                oncommand="StarUI.panel.hidePopup();"/>
-+        <button id="editBookmarkPanelRemoveButton"
-+                class="editBookmarkPanelBottomButton"
-+                oncommand="StarUI.removeBookmarkButtonCommand();"/>
-+#else
-+        <button id="editBookmarkPanelRemoveButton"
-+                class="editBookmarkPanelBottomButton"
-+                oncommand="StarUI.removeBookmarkButtonCommand();"/>
-+        <button id="editBookmarkPanelDoneButton"
-+                class="editBookmarkPanelBottomButton"
-+                label="&editBookmark.done.label;"
-+                default="true"
-+                oncommand="StarUI.panel.hidePopup();"/>
-+#endif
-+      </hbox>
-+    </panel>
-+
-+    <!-- UI tour experience -->
-+    <panel id="UITourTooltip"
-+           type="arrow"
-+           hidden="true"
-+           noautofocus="true"
-+           noautohide="true"
-+           align="start"
-+           orient="vertical"
-+           role="alert">
-+     <vbox>
-+      <hbox id="UITourTooltipBody">
-+        <image id="UITourTooltipIcon"/>
-+        <vbox flex="1">
-+          <hbox id="UITourTooltipTitleContainer">
-+            <label id="UITourTooltipTitle" flex="1"/>
-+            <toolbarbutton id="UITourTooltipClose" class="close-icon"
-+                           tooltiptext="&uiTour.infoPanel.close;"/>
-+          </hbox>
-+          <description id="UITourTooltipDescription" flex="1"/>
-+        </vbox>
-+      </hbox>
-+      <hbox id="UITourTooltipButtons" flex="1" align="center"/>
-+     </vbox>
-+    </panel>
-+    <!-- type="default" forces frames to be created so that the panel's size can be determined -->
-+    <panel id="UITourHighlightContainer"
-+           type="default"
-+           hidden="true"
-+           noautofocus="true"
-+           noautohide="true"
-+           flip="none"
-+           consumeoutsideclicks="false"
-+           mousethrough="always">
-+      <box id="UITourHighlight"></box>
-+    </panel>
-+
-+    <panel id="sidebarMenu-popup"
-+           class="cui-widget-panel"
-+           role="group"
-+           type="arrow"
-+           hidden="true"
-+           flip="slide"
-+           orient="vertical"
-+           position="bottomcenter topleft">
-+      <toolbarbutton id="sidebar-switcher-bookmarks"
-+                     type="checkbox"
-+                     label="&bookmarksButton.label;"
-+                     class="subviewbutton subviewbutton-iconic"
-+                     key="viewBookmarksSidebarKb"
-+                     oncommand="SidebarUI.show('viewBookmarksSidebar');"/>
-+      <toolbarbutton id="sidebar-switcher-history"
-+                     type="checkbox"
-+                     label="&historyButton.label;"
-+                     class="subviewbutton subviewbutton-iconic"
-+                     key="key_gotoHistory"
-+                     oncommand="SidebarUI.show('viewHistorySidebar');"/>
-+      <toolbarbutton id="sidebar-switcher-tabs"
-+                     type="checkbox"
-+                     label="&syncedTabs.sidebar.label;"
-+                     class="subviewbutton subviewbutton-iconic sync-ui-item"
-+                     oncommand="SidebarUI.show('viewTabsSidebar');"/>
-+      <toolbarseparator/>
-+      <!-- Extension toolbarbuttons go here. -->
-+      <toolbarseparator id="sidebar-extensions-separator"/>
-+      <toolbarbutton id="sidebar-reverse-position"
-+                     class="subviewbutton"
-+                     oncommand="SidebarUI.reversePosition()"/>
-+      <toolbarseparator/>
-+      <toolbarbutton label="&sidebarMenuClose.label;"
-+                     class="subviewbutton"
-+                     oncommand="SidebarUI.hide()"/>
-+    </panel>
-+
-+    <menupopup id="toolbar-context-menu"
-+               onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('viewToolbarsMenuSeparator')); ToolbarContextMenu.updateDownloadsAutoHide(this); ToolbarContextMenu.updateExtension(this)">
-+      <menuitem oncommand="ToolbarContextMenu.openAboutAddonsForContextAction(this.parentElement)"
-+                accesskey="&customizeMenu.manageExtension.accesskey;"
-+                label="&customizeMenu.manageExtension.label;"
-+                contexttype="toolbaritem"
-+                class="customize-context-manageExtension"/>
-+      <menuitem oncommand="ToolbarContextMenu.removeExtensionForContextAction(this.parentElement)"
-+                accesskey="&customizeMenu.removeExtension.accesskey;"
-+                label="&customizeMenu.removeExtension.label;"
-+                contexttype="toolbaritem"
-+                class="customize-context-removeExtension"/>
-+      <menuitem oncommand="ToolbarContextMenu.reportExtensionForContextAction(this.parentElement, 'toolbar_context_menu')"
-+                accesskey="&customizeMenu.reportExtension.accesskey;"
-+                label="&customizeMenu.reportExtension.label;"
-+                contexttype="toolbaritem"
-+                class="customize-context-reportExtension"/>
-+      <menuseparator/>
-+      <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)"
-+                accesskey="&customizeMenu.pinToOverflowMenu.accesskey;"
-+                label="&customizeMenu.pinToOverflowMenu.label;"
-+                contexttype="toolbaritem"
-+                class="customize-context-moveToPanel"/>
-+      <menuitem id="toolbar-context-autohide-downloads-button"
-+                oncommand="ToolbarContextMenu.onDownloadsAutoHideChange(event);"
-+                type="checkbox"
-+                accesskey="&customizeMenu.autoHideDownloadsButton.accesskey;"
-+                label="&customizeMenu.autoHideDownloadsButton.label;"
-+                contexttype="toolbaritem"/>
-+      <menuitem oncommand="gCustomizeMode.removeFromArea(document.popupNode)"
-+                accesskey="&customizeMenu.removeFromToolbar.accesskey;"
-+                label="&customizeMenu.removeFromToolbar.label;"
-+                contexttype="toolbaritem"
-+                class="customize-context-removeFromToolbar"/>
-+      <menuitem id="toolbar-context-reloadSelectedTab"
-+                contexttype="tabbar"
-+                oncommand="gBrowser.reloadMultiSelectedTabs();"
-+                data-lazy-l10n-id="toolbar-context-menu-reload-selected-tab"/>
-+      <menuitem id="toolbar-context-reloadSelectedTabs"
-+                contexttype="tabbar"
-+                oncommand="gBrowser.reloadMultiSelectedTabs();"
-+                data-lazy-l10n-id="toolbar-context-menu-reload-selected-tabs"/>
-+      <menuitem id="toolbar-context-bookmarkSelectedTab"
-+                contexttype="tabbar"
-+                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
-+                data-lazy-l10n-id="toolbar-context-menu-bookmark-selected-tab"/>
-+      <menuitem id="toolbar-context-bookmarkSelectedTabs"
-+                contexttype="tabbar"
-+                oncommand="PlacesCommandHook.bookmarkPages(PlacesCommandHook.uniqueSelectedPages);"
-+                data-lazy-l10n-id="toolbar-context-menu-bookmark-selected-tabs"/>
-+      <menuitem id="toolbar-context-selectAllTabs"
-+                contexttype="tabbar"
-+                oncommand="gBrowser.selectAllTabs();"
-+                data-lazy-l10n-id="toolbar-context-menu-select-all-tabs"/>
-+      <menuitem id="toolbar-context-undoCloseTab"
-+                contexttype="tabbar"
-+                data-lazy-l10n-id="toolbar-context-menu-undo-close-tab"
-+                observes="History:UndoCloseTab"/>
-+      <menuseparator/>
-+      <menuseparator id="viewToolbarsMenuSeparator"/>
-+      <!-- XXXgijs: we're using oncommand handler here to avoid the event being
-+                    redirected to the command element, thus preventing
-+                    listeners on the menupopup or further up the tree from
-+                    seeing the command event pass by. The observes attribute is
-+                    here so that the menuitem is still disabled and re-enabled
-+                    correctly. -->
-+      <menuitem oncommand="gCustomizeMode.enter()"
-+                observes="cmd_CustomizeToolbars"
-+                class="viewCustomizeToolbar"
-+                label="&viewCustomizeToolbar.label;"
-+                accesskey="&viewCustomizeToolbar.accesskey;"/>
-+    </menupopup>
-+
-+    <menupopup id="blockedPopupOptions"
-+               onpopupshowing="gPopupBlockerObserver.fillPopupList(event);"
-+               onpopuphiding="gPopupBlockerObserver.onPopupHiding(event);">
-+      <menuitem id="blockedPopupAllowSite"
-+                accesskey="&allowPopups.accesskey;"
-+                oncommand="gPopupBlockerObserver.toggleAllowPopupsForSite(event);"/>
-+      <menuitem
-+#ifdef XP_WIN
-+                label="&editPopupSettings.label;"
-+#else
-+                label="&editPopupSettingsUnix.label;"
-+#endif
-+                accesskey="&editPopupSettings.accesskey;"
-+                oncommand="gPopupBlockerObserver.editPopupSettings();"/>
-+      <menuitem id="blockedPopupDontShowMessage"
-+                accesskey="&dontShowMessage.accesskey;"
-+                type="checkbox"
-+                oncommand="gPopupBlockerObserver.dontShowMessage();"/>
-+      <menuseparator id="blockedPopupsSeparator"/>
-+    </menupopup>
-+
-+    <menupopup id="autohide-context"
-+           onpopupshowing="FullScreen.getAutohide(this.firstChild);">
-+      <menuitem type="checkbox" label="&fullScreenAutohide.label;"
-+                accesskey="&fullScreenAutohide.accesskey;"
-+                oncommand="FullScreen.setAutohide();"/>
-+      <menuseparator/>
-+      <menuitem label="&fullScreenExit.label;"
-+                accesskey="&fullScreenExit.accesskey;"
-+                oncommand="BrowserFullScreen();"/>
-+    </menupopup>
-+
-+    <menupopup id="contentAreaContextMenu" pagemenu="#page-menu-separator"
-+               onpopupshowing="if (event.target != this)
-+                                 return true;
-+                               gContextMenu = new nsContextMenu(this, event.shiftKey);
-+                               if (gContextMenu.shouldDisplay)
-+                                 updateEditUIVisibility();
-+                               return gContextMenu.shouldDisplay;"
-+               onpopuphiding="if (event.target != this)
-+                                return;
-+                              gContextMenu.hiding();
-+                              gContextMenu = null;
-+                              updateEditUIVisibility();">
-+#include browser-context.inc
-+    </menupopup>
-+
-+#include ../../components/places/content/placesContextMenu.inc.xul
-+
-+    <panel id="ctrlTab-panel" hidden="true" norestorefocus="true" level="top">
-+      <hbox id="ctrlTab-previews"/>
-+      <hbox id="ctrlTab-showAll-container" pack="center"/>
-+    </panel>
-+
-+    <panel id="pageActionPanel"
-+           class="cui-widget-panel"
-+           role="group"
-+           type="arrow"
-+           hidden="true"
-+           flip="slide"
-+           photon="true"
-+           position="bottomcenter topright"
-+           tabspecific="true"
-+           noautofocus="true"
-+           pinTab-title="&pinTab.label;"
-+           unpinTab-title="&unpinTab.label;"
-+           pocket-title="&saveToPocketCmd.label;"
-+           copyURL-title="&pageAction.copyLink.label;"
-+           emailLink-title="&emailPageCmd.label;"
-+           sendToDevice-notReadyTitle="&sendToDevice.syncNotReady.label;"
-+           shareURL-title="&pageAction.shareUrl.label;"
-+           shareMore-label="&pageAction.shareMore.label;">
-+      <panelmultiview id="pageActionPanelMultiView"
-+                      mainViewId="pageActionPanelMainView"
-+                      viewCacheId="appMenu-viewCache">
-+        <panelview id="pageActionPanelMainView"
-+                   context="pageActionContextMenu"
-+                   class="PanelUI-subView">
-+          <vbox class="panel-subview-body"/>
-+        </panelview>
-+      </panelmultiview>
-+    </panel>
-+
-+    <panel id="confirmation-hint"
-+           role="alert"
-+           type="arrow"
-+           hidden="true"
-+           flip="slide"
-+           position="bottomcenter topright"
-+           tabspecific="true"
-+           noautofocus="true">
-+      <hbox id="confirmation-hint-checkmark-animation-container">
-+       <image id="confirmation-hint-checkmark-image"/>
-+      </hbox>
-+      <vbox id="confirmation-hint-message-container">
-+       <label id="confirmation-hint-message"/>
-+       <label id="confirmation-hint-description"/>
-+      </vbox>
-+    </panel>
-+
-+    <menupopup id="pageActionContextMenu"
-+               onpopupshowing="BrowserPageActions.onContextMenuShowing(event, this);">
-+      <menuitem class="pageActionContextMenuItem builtInUnpinned"
-+                label="&pageAction.addToUrlbar.label;"
-+                oncommand="BrowserPageActions.togglePinningForContextAction();"/>
-+      <menuitem class="pageActionContextMenuItem builtInPinned"
-+                label="&pageAction.removeFromUrlbar.label;"
-+                oncommand="BrowserPageActions.togglePinningForContextAction();"/>
-+      <menuitem class="pageActionContextMenuItem extensionUnpinned"
-+                label="&pageAction.addToUrlbar.label;"
-+                oncommand="BrowserPageActions.togglePinningForContextAction();"/>
-+      <menuitem class="pageActionContextMenuItem extensionPinned"
-+                label="&pageAction.removeFromUrlbar.label;"
-+                oncommand="BrowserPageActions.togglePinningForContextAction();"/>
-+      <menuseparator class="pageActionContextMenuItem extensionPinned extensionUnpinned"/>
-+      <menuitem class="pageActionContextMenuItem extensionPinned extensionUnpinned"
-+                label="&pageAction.manageExtension.label;"
-+                oncommand="BrowserPageActions.openAboutAddonsForContextAction();"/>
-+    </menupopup>
-+
-+#include ../../components/places/content/bookmarksHistoryTooltip.inc.xul
-+
-+    <tooltip id="tabbrowser-tab-tooltip" onpopupshowing="gBrowser.createTooltip(event);"/>
-+
-+    <tooltip id="back-button-tooltip">
-+      <description class="tooltip-label" value="&backButton.tooltip;"/>
-+#ifdef XP_MACOSX
-+      <description class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/>
-+#else
-+      <description class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/>
-+#endif
-+    </tooltip>
-+
-+    <tooltip id="forward-button-tooltip">
-+      <description class="tooltip-label" value="&forwardButton.tooltip;"/>
-+#ifdef XP_MACOSX
-+      <description class="tooltip-label" value="&backForwardButtonMenuMac.tooltip;"/>
-+#else
-+      <description class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/>
-+#endif
-+    </tooltip>
-+
-+#include popup-notifications.inc
-+
-+#include ../../components/customizableui/content/panelUI.inc.xul
-+#include ../../components/controlcenter/content/identityPanel.inc.xul
-+#include ../../components/controlcenter/content/protectionsPanel.inc.xul
-+#include ../../components/downloads/content/downloadsPanel.inc.xul
-+#include browser-allTabsMenu.inc.xul
-+
-+    <hbox id="downloads-animation-container" mousethrough="always">
-+      <vbox id="downloads-notification-anchor" hidden="true">
-+        <vbox id="downloads-indicator-notification"/>
-+      </vbox>
-+    </hbox>
-+
-+    <tooltip id="dynamic-shortcut-tooltip"
-+             onpopupshowing="UpdateDynamicShortcutTooltipText(this);"/>
-+
-+    <menupopup id="SyncedTabsSidebarContext">
-+      <menuitem data-lazy-l10n-id="synced-tabs-context-open"
-+                id="syncedTabsOpenSelected" where="current"/>
-+      <menuitem data-lazy-l10n-id="synced-tabs-context-open-in-new-tab"
-+                id="syncedTabsOpenSelectedInTab" where="tab"/>
-+      <menuitem data-lazy-l10n-id="synced-tabs-context-open-in-new-window"
-+                id="syncedTabsOpenSelectedInWindow" where="window"/>
-+      <menuitem data-lazy-l10n-id="synced-tabs-context-open-in-new-private-window"
-+                id="syncedTabsOpenSelectedInPrivateWindow" where="window" private="true"/>
-+      <menuseparator/>
-+      <menuitem data-lazy-l10n-id="synced-tabs-context-bookmark-single-tab"
-+                id="syncedTabsBookmarkSelected"/>
-+      <menuitem data-lazy-l10n-id="synced-tabs-context-copy"
-+                id="syncedTabsCopySelected"/>
-+      <menuseparator/>
-+      <menuitem data-lazy-l10n-id="synced-tabs-context-open-all-in-tabs"
-+                id="syncedTabsOpenAllInTabs"/>
-+      <menuitem data-lazy-l10n-id="synced-tabs-context-manage-devices"
-+                id="syncedTabsManageDevices"
-+                oncommand="gSync.openDevicesManagementPage('syncedtabs-sidebar');"/>
-+      <menuitem label="&syncSyncNowItem.label;"
-+                accesskey="&syncSyncNowItem.accesskey;"
-+                id="syncedTabsRefresh"/>
-+    </menupopup>
-+    <menupopup id="SyncedTabsSidebarTabsFilterContext"
-+               class="textbox-contextmenu">
-+      <menuitem label="&undoCmd.label;"
-+                accesskey="&undoCmd.accesskey;"
-+                cmd="cmd_undo"/>
-+      <menuseparator/>
-+      <menuitem label="&cutCmd.label;"
-+                accesskey="&cutCmd.accesskey;"
-+                cmd="cmd_cut"/>
-+      <menuitem label="&copyCmd.label;"
-+                accesskey="&copyCmd.accesskey;"
-+                cmd="cmd_copy"/>
-+      <menuitem label="&pasteCmd.label;"
-+                accesskey="&pasteCmd.accesskey;"
-+                cmd="cmd_paste"/>
-+      <menuitem label="&deleteCmd.label;"
-+                accesskey="&deleteCmd.accesskey;"
-+                cmd="cmd_delete"/>
-+      <menuseparator/>
-+      <menuitem label="&selectAllCmd.label;"
-+                accesskey="&selectAllCmd.accesskey;"
-+                cmd="cmd_selectAll"/>
-+      <menuseparator/>
-+      <menuitem label="&syncSyncNowItem.label;"
-+                accesskey="&syncSyncNowItem.accesskey;"
-+                id="syncedTabsRefreshFilter"/>
-+    </menupopup>
-+
-+    <hbox id="statuspanel" inactive="true" renderroot="content">
-+      <hbox id="statuspanel-inner">
-+        <label id="statuspanel-label"
-+               role="status"
-+               aria-live="off"
-+               flex="1"
-+               crop="end"/>
-+      </hbox>
-+    </hbox>
-+  </popupset>
-+  <box id="appMenu-viewCache" hidden="true"/>
-+
-+  <toolbox id="navigator-toolbox">
-+
-+    <vbox id="titlebar">
-+      <!-- Menu -->
-+      <toolbar type="menubar" id="toolbar-menubar"
-+               class="browser-toolbar chromeclass-menubar titlebar-color"
-+               customizable="true"
-+               mode="icons"
-+#ifdef MENUBAR_CAN_AUTOHIDE
-+               toolbarname="&menubarCmd.label;"
-+               accesskey="&menubarCmd.accesskey;"
-+               autohide="true"
-+#endif
-+               context="toolbar-context-menu">
-+        <toolbaritem id="menubar-items" align="center">
-+# The entire main menubar is placed into browser-menubar.inc, so that it can be
-+# shared with other top level windows in macWindow.inc.xul.
-+#include browser-menubar.inc
-+        </toolbaritem>
-+        <spacer flex="1" skipintoolbarset="true" ordinal="1000"/>
-+#include titlebar-items.inc.xul
-+      </toolbar>
-+
-+      <toolbar id="TabsToolbar"
-+               class="browser-toolbar titlebar-color"
-+               fullscreentoolbar="true"
-+               customizable="true"
-+               customizationtarget="TabsToolbar-customization-target"
-+               mode="icons"
-+               aria-label="&tabsToolbar.label;"
-+               context="toolbar-context-menu"
-+               flex="1">
-+
-+        <hbox class="titlebar-spacer" type="pre-tabs"/>
-+
-+        <hbox flex="1" align="end" class="toolbar-items">
-+          <hbox id="TabsToolbar-customization-target" flex="1">
-+            <tabs id="tabbrowser-tabs"
-+                  flex="1"
-+                  setfocus="false"
-+                  tooltip="tabbrowser-tab-tooltip"
-+                  stopwatchid="FX_TAB_CLICK_MS">
-+              <tab class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/>
-+            </tabs>
-+
-+            <toolbarbutton id="new-tab-button"
-+                           class="toolbarbutton-1 chromeclass-toolbar-additional"
-+                           label="&tabCmd.label;"
-+                           command="cmd_newNavigatorTab"
-+                           onclick="checkForMiddleClick(this, event);"
-+                           tooltip="dynamic-shortcut-tooltip"
-+                           ondrop="newTabButtonObserver.onDrop(event)"
-+                           ondragover="newTabButtonObserver.onDragOver(event)"
-+                           ondragenter="newTabButtonObserver.onDragOver(event)"
-+                           ondragexit="newTabButtonObserver.onDragExit(event)"
-+                           cui-areatype="toolbar"
-+                           removable="true"/>
-+
-+            <toolbarbutton id="alltabs-button"
-+                           class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button badged-button"
-+                           oncommand="gTabsPanel.showAllTabsPanel();"
-+                           label="&listAllTabs.label;"
-+                           tooltiptext="&listAllTabs.label;"
-+                           removable="false"/>
-+          </hbox>
-+        </hbox>
-+
-+        <hbox class="titlebar-spacer" type="post-tabs"/>
-+
-+#ifndef XP_MACOSX
-+        <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;"
-+                aria-live="polite"/>
-+        <hbox class="private-browsing-indicator"/>
-+#endif
-+
-+#include titlebar-items.inc.xul
-+
-+#ifdef XP_MACOSX
-+        <!-- OS X does not natively support RTL for its titlebar items, so we prevent this secondary
-+             buttonbox from reversing order in RTL by forcing an LTR direction. -->
-+        <hbox id="titlebar-secondary-buttonbox" dir="ltr">
-+          <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;" aria-live="polite"/>
-+          <hbox class="private-browsing-indicator"/>
-+          <hbox id="titlebar-fullscreen-button"/>
-+        </hbox>
-+#endif
-+      </toolbar>
-+
-+    </vbox>
-+
-+    <toolbar id="nav-bar"
-+             class="browser-toolbar"
-+             aria-label="&navbarCmd.label;"
-+             fullscreentoolbar="true" mode="icons" customizable="true"
-+             customizationtarget="nav-bar-customization-target"
-+             overflowable="true"
-+             overflowbutton="nav-bar-overflow-button"
-+             overflowtarget="widget-overflow-list"
-+             overflowpanel="widget-overflow"
-+             context="toolbar-context-menu">
-+
-+      <toolbartabstop/>
-+      <hbox id="nav-bar-customization-target" flex="1">
-+        <toolbarbutton id="back-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+                       label="&backCmd.label;"
-+                       removable="false" overflows="false"
-+                       keepbroadcastattributeswhencustomizing="true"
-+                       command="Browser:BackOrBackDuplicate"
-+                       onclick="checkForMiddleClick(this, event);"
-+                       tooltip="back-button-tooltip"
-+                       context="backForwardMenu"/>
-+        <toolbarbutton id="forward-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+                       label="&forwardCmd.label;"
-+                       removable="false" overflows="false"
-+                       keepbroadcastattributeswhencustomizing="true"
-+                       command="Browser:ForwardOrForwardDuplicate"
-+                       onclick="checkForMiddleClick(this, event);"
-+                       tooltip="forward-button-tooltip"
-+                       context="backForwardMenu"/>
-+        <toolbaritem id="stop-reload-button" class="chromeclass-toolbar-additional"
-+                     title="&reloadCmd.label;"
-+                     removable="true" overflows="false">
-+          <toolbarbutton id="reload-button" class="toolbarbutton-1"
-+                         label="&reloadCmd.label;"
-+                         command="Browser:ReloadOrDuplicate"
-+                         onclick="checkForMiddleClick(this, event);"
-+                         tooltip="dynamic-shortcut-tooltip">
-+            <box class="toolbarbutton-animatable-box">
-+              <image class="toolbarbutton-animatable-image"/>
-+            </box>
-+          </toolbarbutton>
-+          <toolbarbutton id="stop-button" class="toolbarbutton-1"
-+                         label="&stopCmd.label;"
-+                         command="Browser:Stop"
-+                         tooltip="dynamic-shortcut-tooltip">
-+            <box class="toolbarbutton-animatable-box">
-+              <image class="toolbarbutton-animatable-image"/>
-+            </box>
-+          </toolbarbutton>
-+        </toolbaritem>
-+        <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+                       removable="true"
-+                       label="&homeButton.label;"
-+                       ondragover="homeButtonObserver.onDragOver(event)"
-+                       ondragenter="homeButtonObserver.onDragOver(event)"
-+                       ondrop="homeButtonObserver.onDrop(event)"
-+                       ondragexit="homeButtonObserver.onDragExit(event)"
-+                       key="goHome"
-+                       onclick="BrowserHome(event);"
-+                       cui-areatype="toolbar"
-+                       tooltiptext="&homeButton.defaultPage.tooltip;"/>
-+        <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/>
-+        <toolbaritem id="urlbar-container" flex="400" persist="width"
-+                     removable="false"
-+                     class="chromeclass-location" overflows="false">
-+            <toolbartabstop/>
-+            <textbox id="urlbar" flex="1"
-+                     placeholder="&urlbar.placeholder2;"
-+                     defaultPlaceholder="&urlbar.placeholder2;"
-+                     focused="true"
-+                     pageproxystate="invalid">
-+              <!-- Use onclick instead of normal popup= syntax since the popup
-+                   code fires onmousedown, and hence eats our favicon drag events. -->
-+              <box id="identity-box" role="button"
-+                   align="center"
-+                   aria-label="&urlbar.viewSiteInfo.label;"
-+                   onclick="gIdentityHandler.handleIdentityButtonEvent(event);"
-+                   onkeypress="gIdentityHandler.handleIdentityButtonEvent(event);"
-+                   ondragstart="gIdentityHandler.onDragStart(event);">
-+                <image id="identity-icon"
-+                       consumeanchor="identity-box"
-+                       onclick="PageProxyClickHandler(event);"/>
-+                <image id="sharing-icon" mousethrough="always"/>
-+                <box id="tracking-protection-icon-box" animationsenabled="true">
-+                  <image id="tracking-protection-icon"/>
-+                  <box id="tracking-protection-icon-animatable-box" flex="1">
-+                    <image id="tracking-protection-icon-animatable-image" flex="1"/>
-+                  </box>
-+                </box>
-+                <box id="blocked-permissions-container" align="center">
-+                  <image data-permission-id="geo" class="blocked-permission-icon geo-icon" role="button"
-+                         tooltiptext="&urlbar.geolocationBlocked.tooltip;"/>
-+                  <image data-permission-id="desktop-notification" class="blocked-permission-icon desktop-notification-icon" role="button"
-+                         tooltiptext="&urlbar.webNotificationsBlocked.tooltip;"/>
-+                  <image data-permission-id="camera" class="blocked-permission-icon camera-icon" role="button"
-+                         tooltiptext="&urlbar.cameraBlocked.tooltip;"/>
-+                  <image data-permission-id="microphone" class="blocked-permission-icon microphone-icon" role="button"
-+                         tooltiptext="&urlbar.microphoneBlocked.tooltip;"/>
-+                  <image data-permission-id="screen" class="blocked-permission-icon screen-icon" role="button"
-+                         tooltiptext="&urlbar.screenBlocked.tooltip;"/>
-+                  <image data-permission-id="persistent-storage" class="blocked-permission-icon persistent-storage-icon" role="button"
-+                         tooltiptext="&urlbar.persistentStorageBlocked.tooltip;"/>
-+                  <image data-permission-id="popup" class="blocked-permission-icon popup-icon" role="button"
-+                         tooltiptext="&urlbar.popupBlocked.tooltip;"/>
-+                  <image data-permission-id="autoplay-media" class="blocked-permission-icon autoplay-media-icon" role="button"
-+                         tooltiptext="&urlbar.autoplayMediaBlocked.tooltip;"/>
-+                  <image data-permission-id="canvas" class="blocked-permission-icon canvas-icon" role="button"
-+                         tooltiptext="&urlbar.canvasBlocked.tooltip;"/>
-+                  <image data-permission-id="plugin:flash" class="blocked-permission-icon plugin-icon" role="button"
-+                         tooltiptext="&urlbar.flashPluginBlocked.tooltip;"/>
-+                  <image data-permission-id="midi" class="blocked-permission-icon midi-icon" role="button"
-+                         tooltiptext="&urlbar.midiBlocked.tooltip;"/>
-+                  <image data-permission-id="install" class="blocked-permission-icon install-icon" role="button"
-+                         tooltiptext="&urlbar.installBlocked.tooltip;"/>
-+                </box>
-+                <box id="notification-popup-box"
-+                     hidden="true"
-+                     onmouseover="document.getElementById('identity-box').classList.add('no-hover');"
-+                     onmouseout="document.getElementById('identity-box').classList.remove('no-hover');"
-+                     align="center">
-+                  <image id="default-notification-icon" class="notification-anchor-icon" role="button"
-+                         tooltiptext="&urlbar.defaultNotificationAnchor.tooltip;"/>
-+                  <image id="geo-notification-icon" class="notification-anchor-icon geo-icon" role="button"
-+                         tooltiptext="&urlbar.geolocationNotificationAnchor.tooltip;"/>
-+                  <image id="autoplay-media-notification-icon" class="notification-anchor-icon autoplay-media-icon" role="button"
-+                         tooltiptext="&urlbar.autoplayNotificationAnchor.tooltip;"/>
-+                  <image id="addons-notification-icon" class="notification-anchor-icon install-icon" role="button"
-+                         tooltiptext="&urlbar.addonsNotificationAnchor.tooltip;"/>
-+                  <image id="canvas-notification-icon" class="notification-anchor-icon" role="button"
-+                         tooltiptext="&urlbar.canvasNotificationAnchor.tooltip;"/>
-+                  <image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button"
-+                         tooltiptext="&urlbar.indexedDBNotificationAnchor.tooltip;"/>
-+                  <image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button"
-+                         tooltiptext="&urlbar.passwordNotificationAnchor.tooltip;"/>
-+                  <stack id="plugins-notification-icon" class="notification-anchor-icon" role="button" align="center"
-+                         tooltiptext="&urlbar.pluginsNotificationAnchor.tooltip;">
-+                    <image class="plugin-icon" />
-+                    <image id="plugin-icon-badge" />
-+                  </stack>
-+                  <image id="web-notifications-notification-icon" class="notification-anchor-icon desktop-notification-icon" role="button"
-+                         tooltiptext="&urlbar.webNotificationAnchor.tooltip;"/>
-+                  <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon camera-icon" role="button"
-+                         tooltiptext="&urlbar.webRTCShareDevicesNotificationAnchor.tooltip;"/>
-+                  <image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon microphone-icon" role="button"
-+                         tooltiptext="&urlbar.webRTCShareMicrophoneNotificationAnchor.tooltip;"/>
-+                  <image id="webRTC-shareScreen-notification-icon" class="notification-anchor-icon screen-icon" role="button"
-+                         tooltiptext="&urlbar.webRTCShareScreenNotificationAnchor.tooltip;"/>
-+                  <image id="servicesInstall-notification-icon" class="notification-anchor-icon service-icon" role="button"
-+                         tooltiptext="&urlbar.servicesNotificationAnchor.tooltip;"/>
-+                  <image id="translate-notification-icon" class="notification-anchor-icon translation-icon" role="button"
-+                         tooltiptext="&urlbar.translateNotificationAnchor.tooltip;"/>
-+                  <image id="translated-notification-icon" class="notification-anchor-icon translation-icon in-use" role="button"
-+                         tooltiptext="&urlbar.translatedNotificationAnchor.tooltip;"/>
-+                  <image id="eme-notification-icon" class="notification-anchor-icon drm-icon" role="button"
-+                         tooltiptext="&urlbar.emeNotificationAnchor.tooltip;"/>
-+                  <image id="persistent-storage-notification-icon" class="notification-anchor-icon persistent-storage-icon" role="button"
-+                         tooltiptext="&urlbar.persistentStorageNotificationAnchor.tooltip;"/>
-+                  <image id="midi-notification-icon" class="notification-anchor-icon midi-icon" role="button"
-+                         tooltiptext="&urlbar.midiNotificationAnchor.tooltip;"/>
-+                  <image id="webauthn-notification-icon" class="notification-anchor-icon" role="button"
-+                         tooltiptext="&urlbar.webAuthnAnchor.tooltip;"/>
-+                  <image id="storage-access-notification-icon" class="notification-anchor-icon storage-access-icon" role="button"
-+                         tooltiptext="&urlbar.storageAccessAnchor.tooltip;"/>
-+                </box>
-+                <image id="connection-icon"/>
-+                <image id="extension-icon"/>
-+                <image id="remote-control-icon"
-+                       tooltiptext="&urlbar.remoteControlNotificationAnchor.tooltip;"/>
-+                <hbox id="identity-icon-labels">
-+                  <label id="identity-icon-label" class="plain" flex="1"/>
-+                  <label id="identity-icon-country-label" class="plain"/>
-+                </hbox>
-+              </box>
-+              <box id="urlbar-display-box" align="center">
-+                <label id="switchtab" class="urlbar-display urlbar-display-switchtab" value="&urlbar.switchToTab.label;"/>
-+                <label id="extension" class="urlbar-display urlbar-display-extension" value="&urlbar.extension.label;"/>
-+              </box>
-+              <hbox id="page-action-buttons" context="pageActionContextMenu">
-+                <toolbartabstop/>
-+                <hbox id="contextual-feature-recommendation" role="button" hidden="true">
-+                  <hbox id="cfr-label-container">
-+                    <label id="cfr-label"/>
-+                  </hbox>
-+                  <image id="cfr-button"
-+                         class="urlbar-icon urlbar-page-action"
-+                         role="presentation"/>
-+                </hbox>
-+                <hbox id="userContext-icons" hidden="true">
-+                  <label id="userContext-label"/>
-+                  <image id="userContext-indicator"/>
-+                </hbox>
-+                <image id="reader-mode-button"
-+                       class="urlbar-icon urlbar-page-action"
-+                       tooltip="dynamic-shortcut-tooltip"
-+                       role="button"
-+                       hidden="true"
-+                       onclick="ReaderParent.buttonClick(event);"/>
-+                <toolbarbutton id="urlbar-zoom-button"
-+                       onclick="FullZoom.reset();"
-+                       tooltip="dynamic-shortcut-tooltip"
-+                       hidden="true"/>
-+                <box id="pageActionSeparator" class="urlbar-page-action"/>
-+                <image id="pageActionButton"
-+                       class="urlbar-icon urlbar-page-action"
-+                       role="button"
-+                       tooltiptext="&pageActionButton.tooltip;"
-+                       onmousedown="BrowserPageActions.mainButtonClicked(event);"
-+                       onkeypress="BrowserPageActions.mainButtonClicked(event);"/>
-+                <hbox id="pocket-button-box"
-+                      hidden="true"
-+                      class="urlbar-icon-wrapper urlbar-page-action"
-+                      onclick="BrowserPageActions.doCommandForAction(PageActions.actionForID('pocket'), event, this);">
-+                  <image id="pocket-button"
-+                         class="urlbar-icon"
-+                         tooltiptext="&pocketButton.tooltiptext;"
-+                         role="button"/>
-+                  <hbox id="pocket-button-animatable-box">
-+                    <image id="pocket-button-animatable-image"
-+                           tooltiptext="&pocketButton.tooltiptext;"
-+                           role="presentation"/>
-+                  </hbox>
-+                </hbox>
-+                <hbox id="star-button-box"
-+                      hidden="true"
-+                      class="urlbar-icon-wrapper urlbar-page-action"
-+                      onclick="BrowserPageActions.doCommandForAction(PageActions.actionForID('bookmark'), event, this);">
-+                  <image id="star-button"
-+                         class="urlbar-icon"
-+                         role="button"/>
-+                  <hbox id="star-button-animatable-box">
-+                    <image id="star-button-animatable-image"
-+                           role="presentation"/>
-+                  </hbox>
-+                </hbox>
-+              </hbox>
-+            </textbox>
-+            <toolbartabstop/>
-+        </toolbaritem>
-+
-+        <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/>
-+
-+        <!-- This is a placeholder for the Downloads Indicator.  It is visible
-+             during the customization of the toolbar, in the palette, and before
-+             the Downloads Indicator overlay is loaded. -->
-+        <toolbarbutton id="downloads-button"
-+                       class="toolbarbutton-1 chromeclass-toolbar-additional badged-button"
-+                       key="key_openDownloads"
-+                       onmousedown="DownloadsIndicatorView.onCommand(event);"
-+                       onkeypress="DownloadsIndicatorView.onCommand(event);"
-+                       ondrop="DownloadsIndicatorView.onDrop(event);"
-+                       ondragover="DownloadsIndicatorView.onDragOver(event);"
-+                       ondragenter="DownloadsIndicatorView.onDragOver(event);"
-+                       label="&downloads.label;"
-+                       removable="true"
-+                       overflows="false"
-+                       cui-areatype="toolbar"
-+                       hidden="true"
-+                       tooltip="dynamic-shortcut-tooltip"
-+                       indicator="true">
-+            <!-- The panel's anchor area is smaller than the outer button, but must
-+                 always be visible and must not move or resize when the indicator
-+                 state changes, otherwise the panel could change its position or lose
-+                 its arrow unexpectedly. -->
-+            <stack id="downloads-indicator-anchor"
-+                   consumeanchor="downloads-button">
-+              <box id="downloads-indicator-icon"/>
-+              <stack id="downloads-indicator-progress-outer">
-+                <box id="downloads-indicator-progress-inner"/>
-+              </stack>
-+            </stack>
-+          </toolbarbutton>
-+
-+        <toolbarbutton id="library-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
-+                       removable="true"
-+                       onmousedown="PanelUI.showSubView('appMenu-libraryView', this, event);"
-+                       onkeypress="PanelUI.showSubView('appMenu-libraryView', this, event);"
-+                       closemenu="none"
-+                       cui-areatype="toolbar"
-+                       tooltiptext="&libraryButton.tooltip;"
-+                       label="&places.library.title;"/>
-+
-+        <toolbarbutton id="fxa-toolbar-menu-button" class="toolbarbutton-1 badged-button chromeclass-toolbar-additional subviewbutton-nav"
-+                       onmousedown="gSync.toggleAccountPanel('PanelUI-fxa', event)"
-+                       onkeypress="gSync.toggleAccountPanel('PanelUI-fxa', event)"
-+                       consumeanchor="fxa-toolbar-menu-button"
-+                       closemenu="none"
-+                       label="&fxa.menu.firefoxAccount;"
-+                       tooltiptext="&fxa.menu.firefoxAccount;"
-+                       cui-areatype="toolbar"
-+                       removable="true">
-+                       <vbox>
-+                        <image id="fxa-avatar-image"/>
-+                       </vbox>
-+        </toolbarbutton>
-+      </hbox>
-+
-+      <toolbarbutton id="nav-bar-overflow-button"
-+                     class="toolbarbutton-1 chromeclass-toolbar-additional overflow-button"
-+                     skipintoolbarset="true"
-+                     tooltiptext="&navbarOverflow.label;">
-+        <box class="toolbarbutton-animatable-box">
-+          <image class="toolbarbutton-animatable-image"/>
-+        </box>
-+      </toolbarbutton>
-+
-+      <toolbaritem id="PanelUI-button"
-+                   removable="false">
-+        <toolbarbutton id="PanelUI-menu-button"
-+                       class="toolbarbutton-1 badged-button"
-+                       consumeanchor="PanelUI-button"
-+                       label="&brandShortName;"
-+                       tooltiptext="&appmenu.tooltip;"/>
-+      </toolbaritem>
-+
-+      <hbox id="window-controls" hidden="true" pack="end" skipintoolbarset="true"
-+            ordinal="1000">
-+        <toolbarbutton id="minimize-button"
-+                       tooltiptext="&fullScreenMinimize.tooltip;"
-+                       oncommand="window.minimize();"/>
-+
-+        <toolbarbutton id="restore-button"
-+#ifdef XP_MACOSX
-+# Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button
-+# to exit fullscreen and want it to behave like other toolbar buttons.
-+                       class="toolbarbutton-1"
-+#endif
-+                       tooltiptext="&fullScreenRestore.tooltip;"
-+                       oncommand="BrowserFullScreen();"/>
-+
-+        <toolbarbutton id="close-button"
-+                       tooltiptext="&fullScreenClose.tooltip;"
-+                       oncommand="BrowserTryToCloseWindow();"/>
-+      </hbox>
-+
-+      <box id="library-animatable-box" class="toolbarbutton-animatable-box">
-+        <image class="toolbarbutton-animatable-image"/>
-+      </box>
-+    </toolbar>
-+
-+    <toolbar id="PersonalToolbar"
-+             mode="icons"
-+             class="browser-toolbar chromeclass-directories"
-+             context="toolbar-context-menu"
-+             toolbarname="&personalbarCmd.label;" accesskey="&personalbarCmd.accesskey;"
-+             collapsed="true"
-+             customizable="true">
-+      <toolbartabstop skipintoolbarset="true"/>
-+      <toolbaritem id="personal-bookmarks"
-+                   title="&bookmarksToolbarItem.label;"
-+                   cui-areatype="toolbar"
-+                   removable="true">
-+        <toolbarbutton id="bookmarks-toolbar-placeholder"
-+                       class="bookmark-item"
-+                       label="&bookmarksToolbarItem.label;"/>
-+        <toolbarbutton id="bookmarks-toolbar-button"
-+                       class="toolbarbutton-1"
-+                       flex="1"
-+                       label="&bookmarksToolbarItem.label;"
-+                       oncommand="PlacesToolbarHelper.onPlaceholderCommand();"/>
-+        <hbox flex="1"
-+              id="PlacesToolbar"
-+              context="placesContext"
-+              onmouseup="BookmarksEventHandler.onMouseUp(event);"
-+              onclick="BookmarksEventHandler.onClick(event, this._placesView);"
-+              oncommand="BookmarksEventHandler.onCommand(event);"
-+              tooltip="bhTooltip"
-+              popupsinherittooltip="true">
-+          <hbox flex="1">
-+            <hbox id="PlacesToolbarDropIndicatorHolder" align="center" collapsed="true">
-+              <image id="PlacesToolbarDropIndicator"
-+                     mousethrough="always"
-+                     collapsed="true"/>
-+            </hbox>
-+            <scrollbox orient="horizontal"
-+                       id="PlacesToolbarItems"
-+                       flex="1"/>
-+            <toolbarbutton type="menu"
-+                           id="PlacesChevron"
-+                           class="toolbarbutton-1"
-+                           mousethrough="never"
-+                           collapsed="true"
-+                           tooltiptext="&bookmarksToolbarChevron.tooltip;"
-+                           onpopupshowing="document.getElementById('PlacesToolbar')
-+                                                   ._placesView._onChevronPopupShowing(event);">
-+              <menupopup id="PlacesChevronPopup"
-+                         placespopup="true"
-+                         tooltip="bhTooltip" popupsinherittooltip="true"
-+                         context="placesContext"/>
-+            </toolbarbutton>
-+          </hbox>
-+        </hbox>
-+      </toolbaritem>
-+    </toolbar>
-+
-+    <toolbarpalette id="BrowserToolbarPalette">
-+
-+      <toolbarbutton id="print-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+#ifdef XP_MACOSX
-+                     command="cmd_print"
-+                     tooltip="dynamic-shortcut-tooltip"
-+#else
-+                     command="cmd_printPreview"
-+                     tooltiptext="&printButton.tooltip;"
-+#endif
-+                     label="&printButton.label;"/>
-+
-+
-+      <toolbarbutton id="new-window-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+                     label="&newNavigatorCmd.label;"
-+                     command="cmd_newNavigator"
-+                     tooltip="dynamic-shortcut-tooltip"
-+                     ondrop="newWindowButtonObserver.onDrop(event)"
-+                     ondragover="newWindowButtonObserver.onDragOver(event)"
-+                     ondragenter="newWindowButtonObserver.onDragOver(event)"
-+                     ondragexit="newWindowButtonObserver.onDragExit(event)"/>
-+
-+      <toolbarbutton id="fullscreen-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
-+                     observes="View:FullScreen"
-+                     type="checkbox"
-+                     label="&fullScreenCmd.label;"
-+                     tooltip="dynamic-shortcut-tooltip"/>
-+
-+      <toolbarbutton id="bookmarks-menu-button"
-+                     class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
-+                     type="menu"
-+                     label="&bookmarksMenuButton2.label;"
-+                     tooltip="dynamic-shortcut-tooltip"
-+                     anchor="dropmarker"
-+                     ondragenter="PlacesMenuDNDHandler.onDragEnter(event);"
-+                     ondragover="PlacesMenuDNDHandler.onDragOver(event);"
-+                     ondragleave="PlacesMenuDNDHandler.onDragLeave(event);"
-+                     ondrop="PlacesMenuDNDHandler.onDrop(event);"
-+                     oncommand="BookmarkingUI.onCommand(event);">
-+        <menupopup id="BMB_bookmarksPopup"
-+                   class="cui-widget-panel cui-widget-panelview cui-widget-panelWithFooter PanelUI-subView"
-+                   placespopup="true"
-+                   context="placesContext"
-+                   openInTabs="children"
-+                   side="top"
-+                   onmouseup="BookmarksEventHandler.onMouseUp(event);"
-+                   oncommand="BookmarksEventHandler.onCommand(event);"
-+                   onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
-+                   onpopupshowing="BookmarkingUI.onPopupShowing(event);
-+                                   BookmarkingUI.attachPlacesView(event, this);"
-+                   tooltip="bhTooltip" popupsinherittooltip="true">
-+          <menuitem id="BMB_viewBookmarksSidebar"
-+                    class="menuitem-iconic subviewbutton"
-+                    label-show="&viewBookmarksSidebar2.label;"
-+                    label-hide="&hideBookmarksSidebar.label;"
-+                    oncommand="SidebarUI.toggle('viewBookmarksSidebar');"/>
-+          <!-- NB: temporary solution for bug 985024, this should go away soon. -->
-+          <menuitem id="BMB_bookmarksShowAllTop"
-+                    class="menuitem-iconic subviewbutton"
-+                    label="&showAllBookmarks2.label;"
-+                    command="Browser:ShowAllBookmarks"
-+                    key="manBookmarkKb"/>
-+          <menuseparator/>
-+          <menu id="BMB_bookmarksToolbar"
-+                class="menu-iconic bookmark-item subviewbutton"
-+                label="&personalbarCmd.label;"
-+                container="true">
-+            <menupopup id="BMB_bookmarksToolbarPopup"
-+                       placespopup="true"
-+                       context="placesContext"
-+                       onpopupshowing="if (!this.parentNode._placesView)
-+                                         new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.toolbarGuid}`,
-+                                                        PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);">
-+              <menuitem id="BMB_viewBookmarksToolbar"
-+                        class="menuitem-iconic subviewbutton"
-+                        label-show="&viewBookmarksToolbar.label;"
-+                        label-hide="&hideBookmarksToolbar.label;"
-+                        oncommand="BookmarkingUI.toggleBookmarksToolbar();"/>
-+              <menuseparator/>
-+              <!-- Bookmarks toolbar items -->
-+            </menupopup>
-+          </menu>
-+          <menu id="BMB_unsortedBookmarks"
-+                class="menu-iconic bookmark-item subviewbutton"
-+                label="&bookmarksMenuButton.other.label;"
-+                container="true">
-+            <menupopup id="BMB_unsortedBookmarksPopup"
-+                       placespopup="true"
-+                       context="placesContext"
-+                       onpopupshowing="if (!this.parentNode._placesView)
-+                                         new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.unfiledGuid}`,
-+                                                        PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
-+          </menu>
-+          <menu id="BMB_mobileBookmarks"
-+                class="menu-iconic bookmark-item subviewbutton"
-+                label="&bookmarksMenuButton.mobile.label;"
-+                hidden="true"
-+                container="true">
-+            <menupopup id="BMB_mobileBookmarksPopup"
-+                       placespopup="true"
-+                       context="placesContext"
-+                       onpopupshowing="if (!this.parentNode._placesView)
-+                                         new PlacesMenu(event, `place:parent=${PlacesUtils.bookmarks.mobileGuid}`,
-+                                                        PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
-+          </menu>
-+
-+          <menuseparator/>
-+          <!-- Bookmarks menu items will go here -->
-+          <menuitem id="BMB_bookmarksShowAll"
-+                    class="subviewbutton panel-subview-footer"
-+                    label="&showAllBookmarks2.label;"
-+                    command="Browser:ShowAllBookmarks"
-+                    key="manBookmarkKb"/>
-+        </menupopup>
-+      </toolbarbutton>
-+
-+      <toolbaritem id="search-container"
-+                   class="chromeclass-toolbar-additional"
-+                   title="&searchItem.title;"
-+                   align="center"
-+                   flex="100"
-+                   persist="width">
-+        <toolbartabstop/>
-+        <searchbar id="searchbar" flex="1"/>
-+        <toolbartabstop/>
-+      </toolbaritem>
-+    </toolbarpalette>
-+  </toolbox>
-+
-+  <hbox id="fullscr-toggler" hidden="true"/>
-+
-+  <deck id="content-deck" flex="1" renderroot="content">
-+    <hbox flex="1" id="browser">
-+      <vbox id="browser-border-start" hidden="true" layer="true"/>
-+      <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome">
-+        <sidebarheader id="sidebar-header" align="center">
-+          <toolbarbutton id="sidebar-switcher-target" flex="1" class="tabbable">
-+            <image id="sidebar-icon" consumeanchor="sidebar-switcher-target"/>
-+            <label id="sidebar-title" crop="end" flex="1" control="sidebar"/>
-+            <image id="sidebar-switcher-arrow"/>
-+          </toolbarbutton>
-+          <image id="sidebar-throbber"/>
-+# To ensure the button label's intrinsic width doesn't expand the sidebar
-+# if the label is long, the button needs flex=1.
-+# To ensure the button doesn't expand unnecessarily for short labels, the
-+# spacer should significantly out-flex the button.
-+          <spacer flex="1000"/>
-+          <toolbarbutton id="sidebar-close" class="close-icon tabbable" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="SidebarUI.hide();"/>
-+        </sidebarheader>
-+        <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true" disablefullscreen="true"
-+                  style="min-width: 14em; width: 18em; max-width: 36em;" tooltip="aHTMLTooltip"/>
-+      </vbox>
-+
-+      <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/>
-+      <vbox id="appcontent" flex="1">
-+        <!-- gHighPriorityNotificationBox will be added here lazily. -->
-+        <tabbox id="tabbrowser-tabbox"
-+                flex="1" tabcontainer="tabbrowser-tabs">
-+          <tabpanels id="tabbrowser-tabpanels"
-+                     flex="1" class="plain" selectedIndex="0"/>
-+        </tabbox>
-+      </vbox>
-+      <vbox id="browser-border-end" hidden="true" layer="true"/>
-+    </hbox>
-+    <box id="customization-container" flex="1" hidden="true"><![CDATA[
-+#include ../../components/customizableui/content/customizeMode.inc.xul
-+    ]]></box>
-+  </deck>
-+
-+  <html:div id="fullscreen-warning" class="pointerlockfswarning" hidden="true" renderroot="content">
-+    <html:div class="pointerlockfswarning-domain-text">
-+      &fullscreenWarning.beforeDomain.label;
-+      <html:span class="pointerlockfswarning-domain"/>
-+      &fullscreenWarning.afterDomain.label;
-+    </html:div>
-+    <html:div class="pointerlockfswarning-generic-text">
-+      &fullscreenWarning.generic.label;
-+    </html:div>
-+    <html:button id="fullscreen-exit-button"
-+                 onclick="FullScreen.exitDomFullScreen();">
-+#ifdef XP_MACOSX
-+            &exitDOMFullscreenMac.button;
-+#else
-+            &exitDOMFullscreen.button;
-+#endif
-+    </html:button>
-+  </html:div>
-+
-+  <html:div id="pointerlock-warning" class="pointerlockfswarning" hidden="true" renderroot="content">
-+    <html:div class="pointerlockfswarning-domain-text">
-+      &pointerlockWarning.beforeDomain.label;
-+      <html:span class="pointerlockfswarning-domain"/>
-+      &pointerlockWarning.afterDomain.label;
-+    </html:div>
-+    <html:div class="pointerlockfswarning-generic-text">
-+      &pointerlockWarning.generic.label;
-+    </html:div>
-+  </html:div>
-+
-+  <vbox id="browser-bottombox" layer="true" renderroot="content">
-+    <!-- gNotificationBox will be added here lazily. -->
-+  </vbox>
-+</window>
-diff -r 428161c3b959 -r 54d41b0033b8 browser/base/jar.mn
---- a/browser/base/jar.mn	Mon Jun 17 09:02:06 2019 +0200
-+++ b/browser/base/jar.mn	Fri May 31 12:55:51 2019 +0200
-@@ -33,6 +33,8 @@
- #else
- *       content/browser/browser.xul                   (content/browser.xul)
- #endif
-+*       content/browser/browser-kde.xul               (content/browser-kde.xul)
-+%       override chrome://browser/content/browser.xul chrome://browser/content/browser-kde.xul desktop=kde
-         content/browser/browser-addons.js             (content/browser-addons.js)
-         content/browser/browser-allTabsMenu.js        (content/browser-allTabsMenu.js)
-         content/browser/browser-captivePortal.js      (content/browser-captivePortal.js)
-diff -r 428161c3b959 -r 54d41b0033b8 browser/components/preferences/in-content/main.js
---- a/browser/components/preferences/in-content/main.js	Mon Jun 17 09:02:06 2019 +0200
-+++ b/browser/components/preferences/in-content/main.js	Fri May 31 12:55:51 2019 +0200
-@@ -294,6 +294,13 @@
-       }, backoffTimes[this._backoffIndex]);
-     }
- 
-+    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();
- 
-@@ -983,6 +990,17 @@
-         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;
-diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/moz.build
---- a/browser/components/shell/moz.build	Mon Jun 17 09:02:06 2019 +0200
-+++ b/browser/components/shell/moz.build	Fri May 31 12:55:51 2019 +0200
-@@ -33,6 +33,8 @@
- 
-     SOURCES += [
-         'nsGNOMEShellService.cpp',
-+        'nsKDEShellService.cpp',
-+        'nsUnixShellService.cpp',
-     ]
- elif CONFIG['OS_ARCH'] == 'WINNT':
-     SOURCES += [
-diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsKDEShellService.cpp
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/components/shell/nsKDEShellService.cpp	Fri May 31 12:55:51 2019 +0200
-@@ -0,0 +1,150 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::OpenApplication(PRInt32 aApplication)
-+{
-+    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;
-+
-+    if( aApplication == APPLICATION_MAIL )
-+        str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" ));
-+    else if( aApplication == APPLICATION_NEWS )
-+        str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" ));
-+    else
-+        return NS_ERROR_NOT_IMPLEMENTED;
-+
-+    command->AppendElement( str );
-+    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+}
-+
-+NS_IMETHODIMP
-+nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI)
-+{
-+    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> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+    nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+    if (!cmdstr || !appstr || !uristr)
-+        return NS_ERROR_FAILURE;
-+
-+    cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" ));
-+    command->AppendElement( cmdstr );
-+    nsAutoCString app;
-+    nsresult rv = aApplication->GetNativePath( app );
-+    NS_ENSURE_SUCCESS( rv, rv );
-+    appstr->SetData( app );
-+    command->AppendElement( appstr );
-+    uristr->SetData( aURI );
-+    command->AppendElement( uristr );
-+    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+}
-+
-diff -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsKDEShellService.h
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/components/shell/nsKDEShellService.h	Fri May 31 12:55:51 2019 +0200
-@@ -0,0 +1,32 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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 -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsUnixShellService.cpp
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/components/shell/nsUnixShellService.cpp	Fri May 31 12:55:51 2019 +0200
-@@ -0,0 +1,22 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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 -r 428161c3b959 -r 54d41b0033b8 browser/components/shell/nsUnixShellService.h
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/browser/components/shell/nsUnixShellService.h	Fri May 31 12:55:51 2019 +0200
-@@ -0,0 +1,15 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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 -r 428161c3b959 -r 54d41b0033b8 browser/installer/package-manifest.in
---- a/browser/installer/package-manifest.in	Mon Jun 17 09:02:06 2019 +0200
-+++ b/browser/installer/package-manifest.in	Fri May 31 12:55:51 2019 +0200
-@@ -299,6 +299,8 @@
- ; gre location for now.
- @RESPATH@/defaults/pref/channel-prefs.js
- 
-+@RESPATH@/defaults/pref/kde.js
-+
- ; Services (gre) prefs
- @RESPATH@/defaults/pref/services-sync.js
- 
diff --git a/firefox-69.0-kde.patch b/firefox-69.0-kde.patch
new file mode 100644
index 0000000..5a19dd6
--- /dev/null
+++ b/firefox-69.0-kde.patch
@@ -0,0 +1,351 @@
+# HG changeset patch
+# User msirringhaus@suse.de
+# Date 1559300151 -7200
+#      Fri May 31 12:55:51 2019 +0200
+# Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
+# Parent  28bde69150771a1530f784903bf68214dd5790ea
+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
+@@ -339,16 +339,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") +
+@@ -1146,16 +1153,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 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
+     XPIDL_SOURCES += [
+         'nsIGNOMEShellService.idl',
+     ]
+ 
+     SOURCES += [
+         'nsGNOMEShellService.cpp',
++        'nsKDEShellService.cpp',
++        'nsUnixShellService.cpp',
+     ]
+ elif CONFIG['OS_ARCH'] == 'WINNT':
+     SOURCES += [
+         'nsWindowsShellService.cpp',
+     ]
+     LOCAL_INCLUDES += [
+         '../../../other-licenses/nsis/Contrib/CityHash/cityhash',
+     ]
+diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp
+new file mode 100644
+--- /dev/null
++++ b/browser/components/shell/nsKDEShellService.cpp
+@@ -0,0 +1,150 @@
++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
++/* This Source Code Form is subject to the terms of the Mozilla Public
++ * 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;
++}
++
++NS_IMETHODIMP
++nsKDEShellService::OpenApplication(PRInt32 aApplication)
++{
++    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;
++
++    if( aApplication == APPLICATION_MAIL )
++        str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" ));
++    else if( aApplication == APPLICATION_NEWS )
++        str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" ));
++    else
++        return NS_ERROR_NOT_IMPLEMENTED;
++
++    command->AppendElement( str );
++    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
++}
++
++NS_IMETHODIMP
++nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI)
++{
++    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> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++    nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++    if (!cmdstr || !appstr || !uristr)
++        return NS_ERROR_FAILURE;
++
++    cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" ));
++    command->AppendElement( cmdstr );
++    nsAutoCString app;
++    nsresult rv = aApplication->GetNativePath( app );
++    NS_ENSURE_SUCCESS( rv, rv );
++    appstr->SetData( app );
++    command->AppendElement( appstr );
++    uristr->SetData( aURI );
++    command->AppendElement( uristr );
++    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
++}
++
+diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h
+new file mode 100644
+--- /dev/null
++++ b/browser/components/shell/nsKDEShellService.h
+@@ -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/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
+--- a/browser/installer/package-manifest.in
++++ b/browser/installer/package-manifest.in
+@@ -295,16 +295,18 @@
+ @RESPATH@/browser/defaults/settings/main
+ @RESPATH@/browser/defaults/settings/security-state
+ 
+ ; Warning: changing the path to channel-prefs.js can cause bugs (Bug 756325)
+ ; Technically this is an app pref file, but we are keeping it in the original
+ ; gre location for now.
+ @RESPATH@/defaults/pref/channel-prefs.js
+ 
++@RESPATH@/defaults/pref/kde.js
++
+ ; Services (gre) prefs
+ @RESPATH@/defaults/pref/services-sync.js
+ 
+ ; [Layout Engine Resources]
+ ; Style Sheets, Graphics and other Resources used by the layout engine.
+ @RESPATH@/res/EditorOverride.css
+ @RESPATH@/res/contenteditable.css
+ @RESPATH@/res/designmode.css
diff --git a/firefox.spec b/firefox.spec
index 6ec9afa..22212db 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:	68.0.2
+Version:	69.0.1
 Release:	1
 License:	MPLv1+
 Group:		Networking/WWW
@@ -259,8 +259,8 @@ Source100:      firefox.rpmlintrc
 Patch0:		firefox-67.0-webrtc-compile.patch
 
 # Patches for kde integration of FF  from http://www.rosenauer.org/hg/mozilla/
-Patch11:	firefox-68.0-kde.patch
-Patch12:	mozilla-68.0-kde.patch
+Patch11:	firefox-69.0-kde.patch
+Patch12:	mozilla-69.0-kde.patch
 
 # from fedora - fix for app chooser
 #Patch43:	rhbz-1291190-appchooser-crash.patch
@@ -319,7 +319,7 @@ BuildRequires:	pkgconfig(libproxy-1.0)
 BuildRequires:	pkgconfig(libpulse)
 BuildRequires:	pkgconfig(libstartup-notification-1.0)
 BuildRequires:	pkgconfig(nspr) >= 4.21.0
-BuildRequires:	pkgconfig(nss) >= 3.44.1
+BuildRequires:	pkgconfig(nss) >= 3.45.0
 BuildRequires:	pkgconfig(ogg)
 BuildRequires:	pkgconfig(opus)
 BuildRequires:	pkgconfig(libpulse)
@@ -342,8 +342,8 @@ BuildRequires:	pkgconfig(valgrind)
 BuildRequires:	yasm >= 1.0.1
 BuildRequires:	nasm
 %endif
-BuildRequires:	rust >= 1.34.0
-BuildRequires:	cargo >= 0.35.0
+BuildRequires:	rust >= 1.35.0
+BuildRequires:	cargo >= 0.36.0
 BuildRequires:	nodejs >= 8.12
 BuildRequires:	pkgconfig(jemalloc)
 Requires:	indexhtml
diff --git a/mozilla-68.0-kde.patch b/mozilla-69.0-kde.patch
similarity index 73%
rename from mozilla-68.0-kde.patch
rename to mozilla-69.0-kde.patch
index 85dd1c3..4d87053 100644
--- a/mozilla-68.0-kde.patch
+++ b/mozilla-69.0-kde.patch
@@ -3,7 +3,7 @@
 # Date 1559294891 -7200
 #      Fri May 31 11:28:11 2019 +0200
 # Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112
-# Parent  f11c2d7239c0caa4dc74272716d9e30ced1a1ca3
+# Parent  85e4798b74da9c377f84cf8f5dd59a7f952d92eb
 Description: Add KDE integration to Firefox (toolkit parts)
 Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
 Author: Lubos Lunak <lunak@suse.com>
@@ -13,8 +13,7 @@ Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751
 diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
 --- a/modules/libpref/Preferences.cpp
 +++ b/modules/libpref/Preferences.cpp
-@@ -81,16 +81,17 @@
- #include "nsXPCOMCID.h"
+@@ -83,16 +83,17 @@
  #include "nsXPCOM.h"
  #include "nsXULAppAPI.h"
  #include "nsZipArchive.h"
@@ -22,16 +21,17 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
  #include "PLDHashTable.h"
  #include "plstr.h"
  #include "prlink.h"
+ #include "xpcpublic.h"
 +#include "nsKDEUtils.h"
  
- #ifdef MOZ_MEMORY
- #  include "mozmemory.h"
+ #ifdef DEBUG
+ #  include <map>
  #endif
  
- #ifdef XP_WIN
- #  include "windows.h"
+ #ifdef MOZ_MEMORY
+ #  include "mozmemory.h"
  #endif
-@@ -4507,25 +4508,37 @@ static nsresult pref_ReadDefaultPrefs(co
+@@ -4623,25 +4624,37 @@ Result<Ok, const char*> Preferences::Ini
    // 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.
-@@ -4573,17 +4586,17 @@ static nsresult pref_ReadDefaultPrefs(co
+@@ -4688,17 +4701,17 @@ Result<Ok, const char*> Preferences::Ini
        }
  
        nsCOMPtr<nsIFile> path = do_QueryInterface(elem);
@@ -115,7 +115,7 @@ diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
 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
-@@ -223,16 +223,17 @@ class Flags(OrderedDict):
+@@ -227,16 +227,17 @@ class Flags(OrderedDict):
          'contentaccessible': Flag,
          'os': StringFlag,
          'osversion': VersionFlag,
@@ -136,7 +136,7 @@ diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/c
 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
-@@ -39,16 +39,17 @@ class ManifestEntry(object):
+@@ -36,16 +36,17 @@ class ManifestEntry(object):
          'platformversion',
          'os',
          'osversion',
@@ -172,552 +172,32 @@ diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloa
 +
  with Files('**'):
      BUG_COMPONENT = ('Toolkit', 'Downloads API')
-diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
---- a/toolkit/content/jar.mn
-+++ b/toolkit/content/jar.mn
-@@ -63,16 +63,18 @@ toolkit.jar:
-    content/global/widgets.css
-    content/global/bindings/autocomplete.xml    (widgets/autocomplete.xml)
-    content/global/bindings/button.xml          (widgets/button.xml)
-    content/global/bindings/calendar.js         (widgets/calendar.js)
-    content/global/bindings/datekeeper.js       (widgets/datekeeper.js)
-    content/global/bindings/datepicker.js       (widgets/datepicker.js)
-    content/global/bindings/datetimebox.css     (widgets/datetimebox.css)
- *  content/global/bindings/dialog.xml          (widgets/dialog.xml)
-+*  content/global/bindings/dialog-kde.xml      (widgets/dialog-kde.xml)
-+% override chrome://global/content/bindings/dialog.xml chrome://global/content/bindings/dialog-kde.xml desktop=kde
-    content/global/bindings/general.xml         (widgets/general.xml)
-    content/global/bindings/popup.xml           (widgets/popup.xml)
-    content/global/bindings/richlistbox.xml     (widgets/richlistbox.xml)
-    content/global/bindings/scrollbox.xml       (widgets/scrollbox.xml)
-    content/global/bindings/spinner.js          (widgets/spinner.js)
-    content/global/bindings/tabbox.xml          (widgets/tabbox.xml)
- *  content/global/bindings/textbox.xml         (widgets/textbox.xml)
-    content/global/bindings/timekeeper.js       (widgets/timekeeper.js)
-diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
-new file mode 100644
---- /dev/null
-+++ b/toolkit/content/widgets/dialog-kde.xml
-@@ -0,0 +1,499 @@
-+<?xml version="1.0"?>
-+<!-- This Source Code Form is subject to the terms of the Mozilla Public
-+   - License, v. 2.0. If a copy of the MPL was not distributed with this
-+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-+
-+<!DOCTYPE bindings [
-+  <!ENTITY % globalKeysDTD SYSTEM "chrome://global/locale/globalKeys.dtd">
-+  %globalKeysDTD;
-+]>
-+
-+<bindings id="dialogBindings"
-+          xmlns="http://www.mozilla.org/xbl"
-+          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-+          xmlns:xbl="http://www.mozilla.org/xbl">
-+
-+  <binding id="dialog">
-+    <content>
-+      <xul:vbox class="box-inherit dialog-content-box" flex="1">
-+        <children/>
-+      </xul:vbox>
-+
-+      <xul:hbox class="dialog-button-box" anonid="buttons"
-+                xbl:inherits="pack=buttonpack,align=buttonalign,dir=buttondir,orient=buttonorient"
-+#ifdef XP_UNIX_GNOME
-+                >
-+        <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
-+        <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
-+        <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
-+        <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
-+        <xul:spacer anonid="spacer" flex="1"/>
-+        <xul:button dlgtype="cancel" class="dialog-button"/>
-+        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
-+#elif XP_UNIX
-+                >
-+        <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
-+        <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
-+        <xul:spacer anonid="spacer" flex="1"/>
-+        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
-+        <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
-+        <xul:button dlgtype="cancel" class="dialog-button"/>
-+        <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
-+#else
-+                pack="end">
-+        <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
-+        <xul:spacer anonid="spacer" flex="1" hidden="true"/>
-+        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
-+        <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
-+        <xul:button dlgtype="cancel" class="dialog-button"/>
-+        <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
-+        <xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
-+#endif
-+      </xul:hbox>
-+
-+    <xul:keyset>
-+      <xul:key phase="capturing" oncommand="document.documentElement.openHelp(event)"
-+#ifdef XP_MACOSX
-+           key="&openHelpMac.commandkey;" modifiers="accel"/>
-+#else
-+           keycode="&openHelp.commandkey;"/>
-+#endif
-+    </xul:keyset>
-+
-+    </content>
-+
-+    <implementation>
-+      <field name="_mStrBundle">null</field>
-+      <field name="_closeHandler">(function(event) {
-+        if (!document.documentElement.cancelDialog())
-+          event.preventDefault();
-+      })</field>
-+
-+      <!-- Gets populated by elements that are passed to document.l10n.setAttributes
-+           to localize the dialog buttons. Needed to properly size the dialog after
-+           the asynchronous translation. -->
-+      <field name="_l10nButtons">[]</field>
-+
-+      <property name="buttons"
-+                onget="return this.getAttribute('buttons');"
-+                onset="this._configureButtons(val); return val;"/>
-+
-+      <property name="defaultButton">
-+        <getter>
-+        <![CDATA[
-+          if (this.hasAttribute("defaultButton"))
-+            return this.getAttribute("defaultButton");
-+          return "accept"; // default to the accept button
-+        ]]>
-+        </getter>
-+        <setter>
-+        <![CDATA[
-+          this._setDefaultButton(val);
-+          return val;
-+        ]]>
-+        </setter>
-+      </property>
-+
-+      <method name="acceptDialog">
-+        <body>
-+        <![CDATA[
-+          return this._doButtonCommand("accept");
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="cancelDialog">
-+        <body>
-+        <![CDATA[
-+          return this._doButtonCommand("cancel");
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="getButton">
-+        <parameter name="aDlgType"/>
-+        <body>
-+        <![CDATA[
-+          return this._buttons[aDlgType];
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="moveToAlertPosition">
-+        <body>
-+        <![CDATA[
-+          // hack. we need this so the window has something like its final size
-+          if (window.outerWidth == 1) {
-+            dump("Trying to position a sizeless window; caller should have called sizeToContent() or sizeTo(). See bug 75649.\n");
-+            sizeToContent();
-+          }
-+
-+          if (opener) {
-+            var xOffset = (opener.outerWidth - window.outerWidth) / 2;
-+            var yOffset = opener.outerHeight / 5;
-+
-+            var newX = opener.screenX + xOffset;
-+            var newY = opener.screenY + yOffset;
-+          } else {
-+            newX = (screen.availWidth - window.outerWidth) / 2;
-+            newY = (screen.availHeight - window.outerHeight) / 2;
-+          }
-+
-+          // ensure the window is fully onscreen (if smaller than the screen)
-+          if (newX < screen.availLeft)
-+            newX = screen.availLeft + 20;
-+          if ((newX + window.outerWidth) > (screen.availLeft + screen.availWidth))
-+            newX = (screen.availLeft + screen.availWidth) - window.outerWidth - 20;
-+
-+          if (newY < screen.availTop)
-+            newY = screen.availTop + 20;
-+          if ((newY + window.outerHeight) > (screen.availTop + screen.availHeight))
-+            newY = (screen.availTop + screen.availHeight) - window.outerHeight - 60;
-+
-+          window.moveTo( newX, newY );
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="centerWindowOnScreen">
-+        <body>
-+        <![CDATA[
-+          var xOffset = screen.availWidth / 2 - window.outerWidth / 2;
-+          var yOffset = screen.availHeight / 2 - window.outerHeight / 2;
-+
-+          xOffset = xOffset > 0 ? xOffset : 0;
-+          yOffset = yOffset > 0 ? yOffset : 0;
-+          window.moveTo(xOffset, yOffset);
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <constructor>
-+      <![CDATA[
-+        this._configureButtons(this.buttons);
-+
-+        // listen for when window is closed via native close buttons
-+        window.addEventListener("close", this);
-+
-+        // for things that we need to initialize after onload fires
-+        window.addEventListener("load", this);
-+
-+        window.moveToAlertPosition = this.moveToAlertPosition;
-+        window.centerWindowOnScreen = this.centerWindowOnScreen;
-+      ]]>
-+      </constructor>
-+
-+      <method name="handleEvent">
-+        <parameter name="aEvent"/>
-+        <body><![CDATA[
-+          switch (aEvent.type) {
-+            case "close": {
-+              this._closeHandler(aEvent);
-+              break;
-+            }
-+            case "load": {
-+              this.postLoadInit(aEvent);
-+              break;
-+            }
-+          }
-+        ]]></body>
-+      </method>
-+
-+      <method name="postLoadInit">
-+        <parameter name="aEvent"/>
-+        <body>
-+        <![CDATA[
-+          function focusInit() {
-+            const dialog = document.documentElement;
-+            const defaultButton = dialog.getButton(dialog.defaultButton);
-+            // give focus to the first focusable element in the dialog
-+            if (!document.commandDispatcher.focusedElement) {
-+              document.commandDispatcher.advanceFocusIntoSubtree(dialog);
-+
-+              var focusedElt = document.commandDispatcher.focusedElement;
-+              if (focusedElt) {
-+                var initialFocusedElt = focusedElt;
-+                while (focusedElt.localName == "tab" ||
-+                       focusedElt.getAttribute("noinitialfocus") == "true") {
-+                  document.commandDispatcher.advanceFocusIntoSubtree(focusedElt);
-+                  focusedElt = document.commandDispatcher.focusedElement;
-+                  if (focusedElt == initialFocusedElt) {
-+                    if (focusedElt.getAttribute("noinitialfocus") == "true") {
-+                      focusedElt.blur();
-+                    }
-+                    break;
-+                  }
-+                }
-+
-+                if (initialFocusedElt.localName == "tab") {
-+                  if (focusedElt.hasAttribute("dlgtype")) {
-+                    // We don't want to focus on anonymous OK, Cancel, etc. buttons,
-+                    // so return focus to the tab itself
-+                    initialFocusedElt.focus();
-+                  }
-+                } else if (!/Mac/.test(navigator.platform) &&
-+                           focusedElt.hasAttribute("dlgtype") && focusedElt != defaultButton) {
-+                  defaultButton.focus();
-+                }
-+              }
-+            }
-+
-+            try {
-+              if (defaultButton)
-+                window.notifyDefaultButtonLoaded(defaultButton);
-+            } catch (e) { }
-+          }
-+
-+          // Give focus after onload completes, see bug 103197.
-+          setTimeout(focusInit, 0);
-+
-+          if (this._l10nButtons.length) {
-+            document.l10n.translateElements(this._l10nButtons).then(() => {
-+              window.sizeToContent();
-+            });
-+          }
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="openHelp">
-+        <parameter name="event"/>
-+        <body>
-+        <![CDATA[
-+          var helpButton = document.documentElement.getButton("help");
-+          if (helpButton.disabled || helpButton.hidden)
-+            return;
-+          this._fireButtonEvent("help");
-+          event.stopPropagation();
-+          event.preventDefault();
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <property name="mStrBundle">
-+        <getter>
-+        <![CDATA[
-+          if (!this._mStrBundle) {
-+            // need to create string bundle manually instead of using <xul:stringbundle/>
-+            // see bug 63370 for details
-+            this._mStrBundle = Cc["@mozilla.org/intl/stringbundle;1"]
-+                                 .getService(Ci.nsIStringBundleService)
-+                                 .createBundle("chrome://global/locale/dialog.properties");
-+          }
-+          return this._mStrBundle;
-+        ]]></getter>
-+      </property>
-+
-+      <method name="_configureButtons">
-+        <parameter name="aButtons"/>
-+        <body>
-+        <![CDATA[
-+          // by default, get all the anonymous button elements
-+          var buttons = {};
-+          this._buttons = buttons;
-+          buttons.accept = document.getAnonymousElementByAttribute(this, "dlgtype", "accept");
-+          buttons.cancel = document.getAnonymousElementByAttribute(this, "dlgtype", "cancel");
-+          buttons.extra1 = document.getAnonymousElementByAttribute(this, "dlgtype", "extra1");
-+          buttons.extra2 = document.getAnonymousElementByAttribute(this, "dlgtype", "extra2");
-+          buttons.help = document.getAnonymousElementByAttribute(this, "dlgtype", "help");
-+          buttons.disclosure = document.getAnonymousElementByAttribute(this, "dlgtype", "disclosure");
-+
-+          for (let button in buttons) {
-+            customElements.upgrade(buttons[button]);
-+          }
-+
-+          // look for any overriding explicit button elements
-+          var exBtns = this.getElementsByAttribute("dlgtype", "*");
-+          var dlgtype;
-+          var i;
-+          for (i = 0; i < exBtns.length; ++i) {
-+            dlgtype = exBtns[i].getAttribute("dlgtype");
-+            buttons[dlgtype].hidden = true; // hide the anonymous button
-+            buttons[dlgtype] = exBtns[i];
-+          }
-+
-+          // add the label and oncommand handler to each button
-+          for (dlgtype in buttons) {
-+            var button = buttons[dlgtype];
-+            button.addEventListener("command", this._handleButtonCommand, true);
-+
-+            // don't override custom labels with pre-defined labels on explicit buttons
-+            if (!button.hasAttribute("label")) {
-+              // dialog attributes override the default labels in dialog.properties
-+              if (this.hasAttribute("buttonlabel" + dlgtype)) {
-+                button.setAttribute("label", this.getAttribute("buttonlabel" + dlgtype));
-+                if (this.hasAttribute("buttonaccesskey" + dlgtype))
-+                  button.setAttribute("accesskey", this.getAttribute("buttonaccesskey" + dlgtype));
-+              } else if (this.hasAttribute("buttonid" + dlgtype)) {
-+                document.l10n.setAttributes(button, this.getAttribute("buttonid" + dlgtype));
-+                this._l10nButtons.push(button);
-+              } else if (dlgtype != "extra1" && dlgtype != "extra2") {
-+                button.setAttribute("label", this.mStrBundle.GetStringFromName("button-" + dlgtype));
-+                var accessKey = this.mStrBundle.GetStringFromName("accesskey-" + dlgtype);
-+                if (accessKey)
-+                  button.setAttribute("accesskey", accessKey);
-+              }
-+            }
-+            // allow specifying alternate icons in the dialog header
-+            if (!button.hasAttribute("icon")) {
-+              // if there's an icon specified, use that
-+              if (this.hasAttribute("buttonicon" + dlgtype))
-+                button.setAttribute("icon", this.getAttribute("buttonicon" + dlgtype));
-+              // otherwise set defaults
-+              else
-+                switch (dlgtype) {
-+                  case "accept":
-+                    button.setAttribute("icon", "accept");
-+                    break;
-+                  case "cancel":
-+                    button.setAttribute("icon", "cancel");
-+                    break;
-+                  case "disclosure":
-+                    button.setAttribute("icon", "properties");
-+                    break;
-+                  case "help":
-+                    button.setAttribute("icon", "help");
-+                    break;
-+                  default:
-+                    break;
-+                }
-+            }
-+          }
-+
-+          // ensure that hitting enter triggers the default button command
-+          this.defaultButton = this.defaultButton;
-+
-+          // if there is a special button configuration, use it
-+          if (aButtons) {
-+            // expect a comma delimited list of dlgtype values
-+            var list = aButtons.split(",");
-+
-+            // mark shown dlgtypes as true
-+            var shown = { accept: false, cancel: false, help: false,
-+                          disclosure: false, extra1: false, extra2: false };
-+            for (i = 0; i < list.length; ++i)
-+              shown[list[i].replace(/ /g, "")] = true;
-+
-+            // hide/show the buttons we want
-+            for (dlgtype in buttons)
-+              buttons[dlgtype].hidden = !shown[dlgtype];
-+
-+            // show the spacer on Windows only when the extra2 button is present
-+            if (/Win/.test(navigator.platform)) {
-+              var spacer = document.getAnonymousElementByAttribute(this, "anonid", "spacer");
-+              spacer.removeAttribute("hidden");
-+              spacer.setAttribute("flex", shown.extra2 ? "1" : "0");
-+            }
-+          }
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="_setDefaultButton">
-+        <parameter name="aNewDefault"/>
-+        <body>
-+        <![CDATA[
-+          // remove the default attribute from the previous default button, if any
-+          var oldDefaultButton = this.getButton(this.defaultButton);
-+          if (oldDefaultButton)
-+            oldDefaultButton.removeAttribute("default");
-+
-+          var newDefaultButton = this.getButton(aNewDefault);
-+          if (newDefaultButton) {
-+            this.setAttribute("defaultButton", aNewDefault);
-+            newDefaultButton.setAttribute("default", "true");
-+          } else {
-+            this.setAttribute("defaultButton", "none");
-+            if (aNewDefault != "none")
-+              dump("invalid new default button: " + aNewDefault + ", assuming: none\n");
-+          }
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="_handleButtonCommand">
-+        <parameter name="aEvent"/>
-+        <body>
-+        <![CDATA[
-+          return document.documentElement._doButtonCommand(
-+                                        aEvent.target.getAttribute("dlgtype"));
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="_doButtonCommand">
-+        <parameter name="aDlgType"/>
-+        <body>
-+        <![CDATA[
-+          var button = this.getButton(aDlgType);
-+          if (!button.disabled) {
-+            var noCancel = this._fireButtonEvent(aDlgType);
-+            if (noCancel) {
-+              if (aDlgType == "accept" || aDlgType == "cancel") {
-+                var closingEvent = new CustomEvent("dialogclosing", {
-+                  bubbles: true,
-+                  detail: { button: aDlgType },
-+                });
-+                this.dispatchEvent(closingEvent);
-+                window.close();
-+              }
-+            }
-+            return noCancel;
-+          }
-+          return true;
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="_fireButtonEvent">
-+        <parameter name="aDlgType"/>
-+        <body>
-+        <![CDATA[
-+          var event = document.createEvent("Events");
-+          event.initEvent("dialog" + aDlgType, true, true);
-+
-+          // handle dom event handlers
-+          return this.dispatchEvent(event);
-+        ]]>
-+        </body>
-+      </method>
-+
-+      <method name="_hitEnter">
-+        <parameter name="evt"/>
-+        <body>
-+        <![CDATA[
-+          if (evt.defaultPrevented)
-+            return;
-+
-+          var btn = this.getButton(this.defaultButton);
-+          if (btn)
-+            this._doButtonCommand(this.defaultButton);
-+        ]]>
-+        </body>
-+      </method>
-+
-+    </implementation>
-+
-+    <handlers>
-+      <handler event="keypress" keycode="VK_RETURN"
-+               group="system" action="this._hitEnter(event);"/>
-+      <handler event="keypress" keycode="VK_ESCAPE" group="system">
-+        if (!event.defaultPrevented)
-+          this.cancelDialog();
-+      </handler>
-+#ifdef XP_MACOSX
-+      <handler event="keypress" key="." modifiers="meta" phase="capturing" action="this.cancelDialog();"/>
-+#else
-+      <handler event="focus" phase="capturing">
-+        var btn = this.getButton(this.defaultButton);
-+        if (btn)
-+          btn.setAttribute("default", event.originalTarget == btn ||
-+                           !(event.originalTarget.localName == "button" ||
-+                             event.originalTarget.localName == "toolbarbutton"));
-+      </handler>
-+#endif
-+    </handlers>
-+
-+  </binding>
-+
-+</bindings>
 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
-@@ -1042,30 +1042,60 @@ nsUnknownContentTypeDialog.prototype = {
- 
-       if (params.handlerApp &&
-           params.handlerApp.executable &&
-           params.handlerApp.executable.isFile()) {
+@@ -1204,36 +1204,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 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.chosenApp = aResult.QueryInterface(
+-            Ci.nsILocalHandlerApp
+-          );
 -        }
 -        contentTypeDialogObj.finishChooseApp();
 -      };
@@ -754,13 +234,19 @@ diff --git a/toolkit/mozapps/downloads/HelperAppDlg.jsm b/toolkit/mozapps/downlo
 +        });
 +      } else {
 +        var nsIApplicationChooser = Ci.nsIApplicationChooser;
-+        var appChooser = Cc["@mozilla.org/applicationchooser;1"]
-+                           .createInstance(nsIApplicationChooser);
-+        appChooser.init(this.mDialog, this.dialogElement("strings").getString("chooseAppFilePickerTitle"));
++        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.chosenApp = aResult.QueryInterface(
++              Ci.nsILocalHandlerApp
++            );
 +          }
 +          contentTypeDialogObj.finishChooseApp();
 +        };
@@ -770,12 +256,12 @@ diff --git a/toolkit/mozapps/downloads/HelperAppDlg.jsm b/toolkit/mozapps/downlo
 +      }
      } 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);
- 
+       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
@@ -1809,7 +1295,7 @@ 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
-@@ -124,16 +124,17 @@ include('/ipc/chromium/chromium-config.m
+@@ -126,16 +126,17 @@ include('/ipc/chromium/chromium-config.m
  
  FINAL_LIBRARY = 'xul'
  
@@ -1830,7 +1316,7 @@ diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
 diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
 --- a/widget/gtk/nsFilePicker.cpp
 +++ b/widget/gtk/nsFilePicker.cpp
-@@ -4,32 +4,34 @@
+@@ -4,16 +4,17 @@
   * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  
  #include "mozilla/Types.h"
@@ -1843,11 +1329,12 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
  
  #include "nsGtkUtils.h"
  #include "nsIFileURL.h"
+ #include "nsIGIOService.h"
  #include "nsIURI.h"
  #include "nsIWidget.h"
  #include "nsIFile.h"
  #include "nsIStringBundle.h"
- 
+@@ -21,16 +22,17 @@
  #include "nsArrayEnumerator.h"
  #include "nsMemory.h"
  #include "nsEnumeratorUtils.h"
@@ -1865,7 +1352,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
  #define MAX_PREVIEW_SOURCE_SIZE 4096
  
  nsIFile* nsFilePicker::mPrevDisplayDirectory = nullptr;
-@@ -227,17 +229,19 @@ nsFilePicker::AppendFilters(int32_t aFil
+@@ -228,17 +230,19 @@ nsFilePicker::AppendFilters(int32_t aFil
    mAllowURLs = !!(aFilterMask & filterAllowURLs);
    return nsBaseFilePicker::AppendFilters(aFilterMask);
  }
@@ -1886,7 +1373,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
  
    mFilters.AppendElement(filter);
    mFilterNames.AppendElement(name);
-@@ -337,16 +341,39 @@ nsresult nsFilePicker::Show(int16_t* aRe
+@@ -338,16 +342,39 @@ nsresult nsFilePicker::Show(int16_t* aRe
    return NS_OK;
  }
  
@@ -1926,7 +1413,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
  
    GtkFileChooserAction action = GetGtkFileChooserAction(mMode);
  
-@@ -572,16 +599,240 @@ void nsFilePicker::Done(void* file_choos
+@@ -573,16 +600,240 @@ void nsFilePicker::Done(void* file_choos
      mCallback->Done(result);
      mCallback = nullptr;
    } else {
Not Available

benbullard79 [@T] cox.netHuh?1668d 18hrs
benbullard79 [@T] cox.netTime to cull the herd1665d 21hrs
benbullard79 [@T] cox.netcull the herd1665d 21hrs