summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndré Silva2017-04-22 12:06:01 -0300
committerAndré Silva2017-04-22 12:08:12 -0300
commit7e439ee6216ffcffd74f044ef2dfd72c468b1036 (patch)
treed754f822c76f1ebf77772bc93bbb798d835be6b4
parentca96df3f7dcc334fa17c719c4c4bc4598bc56c6d (diff)
downloadaur-7e439ee6216ffcffd74f044ef2dfd72c468b1036.tar.gz
Update to 1:52.0.2.deb1-1
-rw-r--r--.SRCINFO84
-rw-r--r--PKGBUILD253
-rw-r--r--distribution.ini9
-rw-r--r--drm-free.pngbin0 -> 3213 bytes
-rw-r--r--enable-object-directory-paths.patch73
-rw-r--r--fix-wifi-scanner.diff16
-rw-r--r--gnu_headshadow.pngbin0 -> 6785 bytes
-rw-r--r--iceweasel-gtk3-20.patch1736
-rw-r--r--iceweasel.desktop363
-rw-r--r--libre.patch1400
-rw-r--r--mozconfig17
-rw-r--r--mozilla-1245076-1.patch49
-rw-r--r--mozilla-1245076.patch23
-rw-r--r--mozilla-1253216.patch12
-rw-r--r--mozilla-build-arm.patch24
-rw-r--r--no-libnotify.patch51
-rw-r--r--remove-default-and-shell-icons-in-packaging-manifest.patch34
-rw-r--r--vendor.js283
18 files changed, 2268 insertions, 2159 deletions
diff --git a/.SRCINFO b/.SRCINFO
index f092aa5b9f28..ecc10954687a 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,42 +1,44 @@
# Generated by mksrcinfo v8
-# Mon Jul 25 00:43:55 UTC 2016
+# Sat Apr 22 15:08:05 UTC 2017
pkgbase = iceweasel
- pkgdesc = Web Browser based on Mozilla Firefox, with Debian patches and Parabola GNU/Linux-libre branding
- pkgver = 47.0.1.deb1
- pkgrel = 3
- url = https://wiki.parabola.nu/Iceweasel
+ pkgdesc = A libre version of Debian Iceweasel, the standalone web browser based on Mozilla Firefox (Parabola rebranded).
+ pkgver = 52.0.2.deb1
+ pkgrel = 1
+ epoch = 1
+ url = https://wiki.parabola.nu/iceweasel
arch = i686
arch = x86_64
- license = GPL
+ arch = armv7h
license = MPL
+ license = GPL
license = LGPL
makedepends = autoconf2.13
makedepends = diffutils
makedepends = gconf
+ makedepends = imagemagick
makedepends = imake
makedepends = inetutils
makedepends = libidl2
makedepends = libpulse
- makedepends = librsvg
+ makedepends = librsvg-stable
makedepends = libxslt
makedepends = mesa
+ makedepends = mozilla-searchplugins
makedepends = pkg-config
makedepends = python2
makedepends = quilt
makedepends = unzip
makedepends = yasm
makedepends = zip
- makedepends = nss
- makedepends = imagemagick
depends = alsa-lib
depends = dbus-glib
depends = ffmpeg
depends = gtk2
depends = gtk3
depends = hunspell
- depends = icu=57.1
+ depends = icu=58.2
depends = libevent
- depends = libvpx=1.5.0
+ depends = libvpx
depends = libxt
depends = mime-types
depends = mozilla-common
@@ -45,37 +47,51 @@ pkgbase = iceweasel
depends = startup-notification
depends = ttf-font
optdepends = networkmanager: Location detection via available WiFi networks
- optdepends = upower: Battery API
- optdepends = ffmpeg: H264/AAC/MP3 decoding
- optdepends = iceweasel-extension-archsearch: Iceweasel Arch search engines
- provides = iceweasel=47.0.1
+ optdepends = libnotify: Notification integration
+ optdepends = speech-dispatcher: Text-to-Speech
+ conflicts = iceweasel-libre
+ replaces = iceweasel-libre
+ replaces = firefox
options = !emptydirs
options = !makeflags
+ options = !strip
options = debug
- source = http://ftp.debian.org/debian/pool/main/f/firefox/firefox_47.0.1.orig.tar.xz
- source = http://ftp.debian.org/debian/pool/main/f/firefox/firefox_47.0.1-1.debian.tar.xz
- source = https://repo.parabola.nu/other/iceweasel/iceweasel_45.0-2.branding.tar.xz
+ source = http://ftp.debian.org/debian/pool/main//f/firefox/firefox_52.0.2.orig.tar.xz
+ source = http://ftp.debian.org/debian/pool/main//f/firefox/firefox_52.0.2-1.debian.tar.xz
+ source = https://repo.parabola.nu/other/iceweasel/iceweasel_52.0-2.branding.tar.xz
+ source = https://repo.parabola.nu/other/iceweasel/iceweasel_52.0-2.branding.tar.xz.sig
source = mozconfig
+ source = libre.patch
+ source = remove-default-and-shell-icons-in-packaging-manifest.patch
+ source = gnu_headshadow.png
+ source = drm-free.png
source = iceweasel.desktop
source = iceweasel-install-dir.patch
source = vendor.js
- source = no-libnotify.patch
- source = iceweasel-gtk3-20.patch
- source = mozilla-1245076.patch
- source = mozilla-1245076-1.patch
+ source = distribution.ini
+ source = fix-wifi-scanner.diff
source = enable-object-directory-paths.patch
- md5sums = f8f80a87e2b84c92f45cbcd56761bf28
- md5sums = f6f66a94a9019fd34c4b4ede7a6bb4b4
- md5sums = 18ddaa5f1b70cbf12110471d50746339
- md5sums = c76cb41d436754382ef26f986d0e021f
- md5sums = 7b9e5996dd9fe0b186a43a297db1c6b5
- md5sums = 1c42509891cf6843660a5f3c69896e80
- md5sums = 35adf69c840aadeb138d1b0be3af63b5
- md5sums = c4a7a21445579167bff3d787e887903e
- md5sums = bc7e5c42165cc59501cf193ed7b73d11
- md5sums = 43550e772f110a338d5a42914ee2c3a6
- md5sums = 772aac58e3a7e8a32bedd898bc35dc90
- md5sums = 0ee21722e64602526ebde2539fe3e9b6
+ source = mozilla-1253216.patch
+ source = mozilla-build-arm.patch
+ sha256sums = 0408956dfa3ab3728187394f567437f029f73603f1b295e01d5e64a2e4d1bf9e
+ sha256sums = fe536e8b1c84301c4db505b1ea23926628b42e06122bd844230f1ee52f45fea3
+ sha256sums = 30bce6326cdb9a6247f3325cfe326a51c4592728b254fc44656b96c06248ccd9
+ sha256sums = SKIP
+ sha256sums = a0d75304583fab8d5ae830745d32ad9d04ca7098fd7202975f89df813f38479d
+ sha256sums = 67e9430643cbecf69f1946fd84a5dda554fcdf1257896f9f828912b095daa08a
+ sha256sums = 32f1fe3ad4f80d0ae419064db2abe49b97cd7cb18c35d68be1a2befb60172a2a
+ sha256sums = 93e3001ce152e1d142619e215a9ef07dd429943b99d21726c25da9ceb31e31cd
+ sha256sums = 56eba484179c7f498076f8dc603d8795e99dce8c6ea1da9736318c59d666bff6
+ sha256sums = 250f7aaa3c1362f9d2bb2211cd605eab93a5e806e8540f184979d41acf46142a
+ sha256sums = 3aea6676f1e53a09673b6ae219d281fc28054beb6002b09973611c02f827651d
+ sha256sums = 86f12cb438c93a0f019786de8be99bffc5f2f4926342bd567a3e4a1f4cef42ab
+ sha256sums = d28b14a870aa100273243039d08ab9e64d325c28b6291413441146ebdf5d38ee
+ sha256sums = 9765bca5d63fb5525bbd0520b7ab1d27cabaed697e2fc7791400abc3fa4f13b8
+ sha256sums = e260e555b261aabab1e48786dd514eeea056e4402af7cfd4dfd1d32858441484
+ sha256sums = fbb6011501a74a8ea6d01c041870fcefb7ef2859c134aedc676e5f6452833f65
+ sha256sums = 56eecee8162c138c442773d66483886f1242c8dd2b16eed5711ae5e63d9b0e3a
+ makedepends_i686 = cargo
+ makedepends_x86_64 = cargo
pkgname = iceweasel
diff --git a/PKGBUILD b/PKGBUILD
index 2efaf14ce827..13a8d5c1a936 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,129 +1,168 @@
-# Maintainer: superlex
-
-# Based on Parabola GNU/Linux-libre iceweasel PKGBUILD :
-
-# Maintainer: André Silva <emulatorman@parabola.nu>
-# Contributor: Márcio Silva <coadde@parabola.nu>
+# Maintainer: André Silva <emulatorman@riseup.net>
+# Contributor: Márcio Silva <coadde@riseup.net>
# Contributor (ConnochaetOS): Henry Jensen <hjensen@connochaetos.org>
-# Contributor: Luke Shumaker <lukeshu@sbcglobal.net>
-# Contributor: fauno <fauno@kiwwwi.com.ar>
-# Contributor: vando <facundo@esdebian.org>
+# Contributor (Parabola): Luke Shumaker <lukeshu@sbcglobal.net>
+# Contributor (Parabola): fauno <fauno@kiwwwi.com.ar>
+# Contributor (Parabola): vando <facundo@esdebian.org>
# Contributor (Arch): Jakub Schmidtke <sjakub@gmail.com>
-# Contributor: Figue <ffigue at gmail>
-# Contributor: taro-k <taro-k@movasense_com>
-# Contributor: Michał Masłowski <mtjm@mtjm.eu>
+# Contributor (Parabola): Figue <ffigue at gmail>
+# Contributor (Parabola): taro-k <taro-k@movasense_com>
+# Contributor (Parabola): Michał Masłowski <mtjm@mtjm.eu>
+# Contributor (Parabola): Luke R. <g4jc@openmailbox.org>
+# Contributor (Parabola): Isaac David <isacdaavid@isacdaavid.info>
# Thank you very much to the older contributors:
-# Contributor: evr <evanroman at gmail>
-# Contributor: Muhammad 'MJ' Jassim <UnbreakableMJ@gmail.com>
-
-# Firefox PKGBUILD (Arch Linux) :
-
-# Maintainer: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
-# Contributor: Ionut Biru <ibiru@archlinux.org>
-# Contributor: Jakub Schmidtke <sjakub@gmail.com>
+# Contributor (Parabola): evr <evanroman at gmail>
+# Contributor (Parabola): Muhammad 'MJ' Jassim <UnbreakableMJ@gmail.com>
_pgo=false
# We're getting this from Debian Sid
_debname=firefox
-_brandingver=45.0
+_brandingver=52.0
_brandingrel=2
-_debver=47.0.1
-_debrel=1
-_debrepo=http://ftp.debian.org/debian/pool/main/f
+_debver=52.0.2
+_debrel=deb1
+_debrepo=http://ftp.debian.org/debian/pool/main/
_parabolarepo=https://repo.parabola.nu/other/iceweasel
+debfile() { echo $@|sed -r 's@(.).*@\1/&/&@'; }
+_pkgname=firefox
pkgname=iceweasel
-pkgver=${_debver}.deb${_debrel}
-pkgrel=3
-pkgdesc="Web Browser based on Mozilla Firefox, with Debian patches and Parabola GNU/Linux-libre branding"
-arch=('i686' 'x86_64')
-license=('GPL' 'MPL' 'LGPL')
-depends=(alsa-lib dbus-glib ffmpeg gtk2 gtk3 hunspell icu=57.1 libevent libvpx=1.5.0 libxt mime-types mozilla-common nss sqlite startup-notification ttf-font)
-makedepends=(autoconf2.13 diffutils gconf imake inetutils libidl2 libpulse librsvg libxslt mesa pkg-config python2 quilt unzip yasm zip nss imagemagick)
-options=(!emptydirs !makeflags debug)
+epoch=1
+pkgver=$_debver.$_debrel
+pkgrel=1
+pkgdesc="A libre version of Debian Iceweasel, the standalone web browser based on Mozilla Firefox (Parabola rebranded)."
+arch=(i686 x86_64 armv7h)
+license=(MPL GPL LGPL)
+depends=(alsa-lib dbus-glib ffmpeg gtk2 gtk3 hunspell icu=58.2 libevent libvpx libxt mime-types mozilla-common nss sqlite startup-notification ttf-font)
+makedepends=(autoconf2.13 diffutils gconf imagemagick imake inetutils libidl2 libpulse librsvg-stable libxslt mesa mozilla-searchplugins pkg-config python2 quilt unzip yasm zip)
+makedepends_i686=(cargo)
+makedepends_x86_64=("${makedepends_i686[@]}")
+options=(!emptydirs !makeflags !strip debug)
if $_pgo; then
makedepends+=(xorg-server-xvfb)
options+=(!ccache)
fi
optdepends=('networkmanager: Location detection via available WiFi networks'
- 'upower: Battery API'
- 'ffmpeg: H264/AAC/MP3 decoding'
- 'iceweasel-extension-archsearch: Iceweasel Arch search engines')
-url="https://wiki.parabola.nu/Iceweasel"
-provides=("$pkgname"="$_debver")
-source=("${_debrepo}/${_debname}/${_debname}_${_debver}.orig.tar.xz"
- "${_debrepo}/${_debname}/${_debname}_${_debver}-${_debrel}.debian.tar.xz"
- "${_parabolarepo}/${pkgname}_${_brandingver}-${_brandingrel}.branding.tar.xz"
- mozconfig
- iceweasel.desktop
- iceweasel-install-dir.patch
- vendor.js
- no-libnotify.patch
- iceweasel-gtk3-20.patch
- mozilla-1245076.patch
- mozilla-1245076-1.patch
- enable-object-directory-paths.patch)
-md5sums=('f8f80a87e2b84c92f45cbcd56761bf28'
- 'f6f66a94a9019fd34c4b4ede7a6bb4b4'
- '18ddaa5f1b70cbf12110471d50746339'
- 'c76cb41d436754382ef26f986d0e021f'
- '7b9e5996dd9fe0b186a43a297db1c6b5'
- '1c42509891cf6843660a5f3c69896e80'
- '35adf69c840aadeb138d1b0be3af63b5'
- 'c4a7a21445579167bff3d787e887903e'
- 'bc7e5c42165cc59501cf193ed7b73d11'
- '43550e772f110a338d5a42914ee2c3a6'
- '772aac58e3a7e8a32bedd898bc35dc90'
- '0ee21722e64602526ebde2539fe3e9b6')
+ 'libnotify: Notification integration'
+ 'speech-dispatcher: Text-to-Speech')
+url="https://wiki.parabola.nu/$pkgname"
+replaces=("$pkgname-libre" "$_pkgname")
+conflicts=("$pkgname-libre")
+source=("$_debrepo/`debfile $_debname`_$_debver.orig.tar.xz"
+ "$_debrepo/`debfile $_debname`_$_debver-${_debrel#deb}.debian.tar.xz"
+ "$_parabolarepo/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz"
+ "$_parabolarepo/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz.sig"
+ mozconfig
+ libre.patch
+ remove-default-and-shell-icons-in-packaging-manifest.patch
+ gnu_headshadow.png
+ drm-free.png
+ $pkgname.desktop
+ $pkgname-install-dir.patch
+ vendor.js
+ distribution.ini
+ fix-wifi-scanner.diff
+ enable-object-directory-paths.patch
+ mozilla-1253216.patch
+ mozilla-build-arm.patch)
+sha256sums=('0408956dfa3ab3728187394f567437f029f73603f1b295e01d5e64a2e4d1bf9e'
+ 'fe536e8b1c84301c4db505b1ea23926628b42e06122bd844230f1ee52f45fea3'
+ '30bce6326cdb9a6247f3325cfe326a51c4592728b254fc44656b96c06248ccd9'
+ 'SKIP'
+ 'a0d75304583fab8d5ae830745d32ad9d04ca7098fd7202975f89df813f38479d'
+ '67e9430643cbecf69f1946fd84a5dda554fcdf1257896f9f828912b095daa08a'
+ '32f1fe3ad4f80d0ae419064db2abe49b97cd7cb18c35d68be1a2befb60172a2a'
+ '93e3001ce152e1d142619e215a9ef07dd429943b99d21726c25da9ceb31e31cd'
+ '56eba484179c7f498076f8dc603d8795e99dce8c6ea1da9736318c59d666bff6'
+ '250f7aaa3c1362f9d2bb2211cd605eab93a5e806e8540f184979d41acf46142a'
+ '3aea6676f1e53a09673b6ae219d281fc28054beb6002b09973611c02f827651d'
+ '86f12cb438c93a0f019786de8be99bffc5f2f4926342bd567a3e4a1f4cef42ab'
+ 'd28b14a870aa100273243039d08ab9e64d325c28b6291413441146ebdf5d38ee'
+ '9765bca5d63fb5525bbd0520b7ab1d27cabaed697e2fc7791400abc3fa4f13b8'
+ 'e260e555b261aabab1e48786dd514eeea056e4402af7cfd4dfd1d32858441484'
+ 'fbb6011501a74a8ea6d01c041870fcefb7ef2859c134aedc676e5f6452833f65'
+ '56eecee8162c138c442773d66483886f1242c8dd2b16eed5711ae5e63d9b0e3a')
+validpgpkeys=(
+ 'C92BAA713B8D53D3CAE63FC9E6974752F9704456' # André Silva
+ '684D54A189305A9CC95446D36B888913DDB59515' # Márcio Silva
+)
prepare() {
- cd "$srcdir/$_debname-$_debver"
+ cd "$srcdir/$_pkgname-$_debver"
mv "$srcdir/debian" .
mv "$srcdir/$pkgname-$_brandingver/branding" debian
mv "$srcdir/$pkgname-$_brandingver/patches/iceweasel-branding" debian/patches
cat "$srcdir/$pkgname-$_brandingver/patches/series" >> debian/patches/series
-
+
export QUILT_PATCHES=debian/patches
export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index'
export QUILT_DIFF_ARGS='--no-timestamps'
-
- # We wont save user profile in .mozilla/iceweasel
- sed -i 's/MOZ_APP_PROFILE=mozilla\/firefox/MOZ_APP_PROFILE=mozilla\/iceweasel/g' "debian/branding/configure.sh"
quilt push -av
+ # Put gnu_headshadow.png and drm-free.png in the source code
+ install -m644 "$srcdir/"{gnu_headshadow,drm-free}.png \
+ browser/base/content/abouthome
+
+ # Useless since we are doing it ourselves
+ patch -Np1 -i "$srcdir/remove-default-and-shell-icons-in-packaging-manifest.patch"
+
# Enable object directory paths for Iceweasel rebranding
patch -Np1 -i "$srcdir/enable-object-directory-paths.patch"
- # Install to /usr/lib/$pkgname
- patch -Np1 -i "$srcdir/iceweasel-install-dir.patch"
+ # Install to /usr/lib/iceweasel
+ patch -Np1 -i "$srcdir/$pkgname-install-dir.patch"
+
+ # Patch and remove anything that's left
+ patch -Np1 -i "$srcdir/libre.patch"
+ sed -i 's|Adobe Flash|SWF Player|g;
+ ' browser/base/content/pageinfo/permissions.js \
+ browser/base/content/browser-plugins.js
+ sed -i '\|["]displayName["][:] ["]Flash["]| s|Flash|SWF Player|
+ \|["]displayName["][:] ["]Shockwave["]| s|Shockwave|DCR Player|
+ \|["]displayName["][:] ["]QuickTime["]| s|QuickTime|MOV Player|
+ \|installLinux| s|true|false|
+ ' browser/base/content/browser-plugins.js
+
+ # Load our build config, disable SafeSearch
+ cp "$srcdir/mozconfig" .mozconfig
- # https://bugzilla.mozilla.org/show_bug.cgi?id=1234158
- patch -Np1 -i "$srcdir/$pkgname-gtk3-20.patch"
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1314968
+ patch -Np1 -i ../fix-wifi-scanner.diff
- # GCC 6
- patch -Np1 -i ../mozilla-1245076.patch
- patch -Np1 -i ../mozilla-1245076-1.patch
+ mkdir "$srcdir/path"
+ ln -s /usr/bin/python2 "$srcdir/path/python"
- # Notifications with libnotify are broken
- # https://bugzilla.mozilla.org/show_bug.cgi?id=1236150
- patch -Np1 -i "$srcdir/no-libnotify.patch"
+ # Load our searchplugins
+ rm -rv browser/locales/searchplugins
+ cp -av /usr/lib/mozilla/searchplugins browser/locales
- # Load our build config
- cp "$srcdir/mozconfig" .mozconfig
-
- # Building optimization suggestions by Cyberpunk
- #echo 'ac_add_options --enable-optimize' >> .mozconfig
- #echo 'mk_add_options MOZ_MAKE_FLAGS="-j2"' >> .mozconfig
+ # Disable various components at the source level
+ sed -i 's|[;]1|;0|' toolkit/components/telemetry/TelemetryStartup.manifest || die "failed break telemetry startup"
+ sed -i 's|[;]1|;0|' browser/experiments/Experiments.manifest || die "failed to break ExperimentsService"
+ sed -i '/pocket/d' browser/extensions/moz.build || die "failed to wipe pocket"
- mkdir "$srcdir/python2-path"
- ln -s /usr/bin/python2 "$srcdir/python2-path/python"
-}
+ # ARM-specific changes:
+ if [[ "$CARCH" == arm* ]]; then
+ sed -i '/ac_add_options --enable-rust/d' .mozconfig
+ echo "ac_add_options --disable-ion" >> .mozconfig
+ echo "ac_add_options --disable-elf-hack" >> .mozconfig
+ echo "ac_add_options --disable-webrtc" >> .mozconfig
+
+ # Disable gold linker, reduce memory consumption at link time
+ sed -i '/ac_add_options --enable-gold/d' .mozconfig
+ LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
+ echo "ac_add_options --disable-tests" >> .mozconfig
+ echo "ac_add_options --disable-debug" >> .mozconfig
+ patch -p1 -i ../mozilla-1253216.patch
+ patch -p1 -i ../mozilla-build-arm.patch
+ fi
+}
build() {
- cd "$srcdir/$_debname-$_debver"
+ cd "$srcdir/$_pkgname-$_debver"
# _FORTIFY_SOURCE causes configure failures
CPPFLAGS+=" -O2"
@@ -131,15 +170,11 @@ build() {
# Hardening
LDFLAGS+=" -Wl,-z,now"
- # GCC 6
- CFLAGS+=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2"
- CXXFLAGS+=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2"
-
export PATH="$srcdir/path:$PATH"
if $_pgo; then
# Do PGO
- xvfb-run -a -s "-extension GLX -screen 0 1280x1024x24" \
+ xvfb-run -a -n 95 -s "-extension GLX -screen 0 1280x1024x24" \
make -f client.mk build MOZ_PGO=1
else
make -f client.mk build
@@ -147,7 +182,7 @@ build() {
}
package() {
- cd "$srcdir/$_debname-$_debver"
+ cd "$srcdir/$_pkgname-$_debver"
make -f client.mk DESTDIR="$pkgdir" INSTALL_SDK= install
install -Dm644 ../vendor.js "$pkgdir/usr/lib/$pkgname/browser/defaults/preferences/vendor.js"
@@ -156,29 +191,29 @@ package() {
brandingdir=moz-objdir/$_brandingdir
icondir="$pkgdir/usr/share/icons/hicolor"
for i in 16 22 24 32 48 64 128 192 256 384; do
- rsvg-convert -w $i -h $i "$_brandingdir/${pkgname}_icon.svg" -o "$brandingdir/default$i.png"
- install -Dm644 "$brandingdir/default$i.png" "$icondir/${i}x${i}/apps/$pkgname.png"
+ rsvg-convert -w $i -h $i "$_brandingdir/${pkgname}_icon.svg" \
+ -o "$brandingdir/default$i.png"
+ install -Dm644 "$brandingdir/default$i.png" \
+ "$icondir/${i}x${i}/apps/$pkgname.png"
done
- install -Dm644 "$_brandingdir/${pkgname}_icon.svg" "$icondir/scalable/apps/$pkgname.svg"
-
+ install -Dm644 "$_brandingdir/${pkgname}_icon.svg" \
+ "$icondir/scalable/apps/$pkgname.svg"
+
install -d "$pkgdir/usr/share/applications"
- install -m644 "$srcdir/$pkgname.desktop" "$pkgdir/usr/share/applications"
-
-
+ install -m644 "$srcdir/$pkgname.desktop" \
+ "$pkgdir/usr/share/applications"
+
+ # Parabola rebranding
+ install -m644 "$srcdir/distribution.ini" \
+ "$pkgdir/usr/lib/$pkgname/distribution"
+
# Use system-provided dictionaries
rm -rf "$pkgdir/usr/lib/$pkgname/"{dictionaries,hyphenation}
- ln -sf /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries"
- ln -sf /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation"
-
-
- # We don't want the development stuff
- rm -rf "$pkgdir"/usr/{include,lib/$pkgname-devel,share/idl}
+ ln -s /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries"
+ ln -s /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation"
# Replace duplicate binary with symlink
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=658850
ln -sf $pkgname "$pkgdir/usr/lib/$pkgname/$pkgname-bin"
-
-
- # Add Debian searchplugin
- #install -Dm644 "$srcdir/$_debname-$_debver/debian/debsearch.xml" "${pkgdir}/usr/lib/$pkgname/distribution/searchplugins/common/"
}
diff --git a/distribution.ini b/distribution.ini
new file mode 100644
index 000000000000..9246426e352c
--- /dev/null
+++ b/distribution.ini
@@ -0,0 +1,9 @@
+[Global]
+id=parabola
+version=1.0
+about=Iceweasel for Parabola GNU/Linux-libre
+
+[Preferences]
+app.distributor=parabola
+app.distributor.channel=iceweasel
+app.partner.parabola=parabola
diff --git a/drm-free.png b/drm-free.png
new file mode 100644
index 000000000000..e30994e671e9
--- /dev/null
+++ b/drm-free.png
Binary files differ
diff --git a/enable-object-directory-paths.patch b/enable-object-directory-paths.patch
index ce65f7b7bc7f..bc938c66ed95 100644
--- a/enable-object-directory-paths.patch
+++ b/enable-object-directory-paths.patch
@@ -1,69 +1,4 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
-<head>
-<title>abslibre.git - Libre Packages Build Scripts for the Parabola GNU/Linux-libre (Arch Build System Libre)
-</title>
-<meta name='generator' content='cgit v0.12'/>
-<meta name='robots' content='index, nofollow'/>
-<link rel='stylesheet' type='text/css' href='/cgit.css'/>
-<link rel='shortcut icon' href='/favicon.ico'/>
-<link rel='alternate' title='Atom feed' href='https://projects.parabola.nu/abslibre.git/atom/libre/iceweasel/enable-object-directory-paths.patch?h=master' type='application/atom+xml'/>
-<link rel='vcs-git' href='https://projects.parabola.nu/abslibre.git' title='abslibre.git Git repository'/>
-<link rel='vcs-git' href='git://projects.parabola.nu/abslibre.git' title='abslibre.git Git repository'/>
-<link rel='vcs-git' href='ssh://git@projects.parabola.nu/~git/abslibre.git' title='abslibre.git Git repository'/>
-</head>
-<body>
- <div id="archnavbar" class="anb-projects">
- <div id="archnavbarlogo"><h1><a href="/" title="Return to the main page">Parabola</a></h1></div>
- <div id="archnavbarmenu">
- <ul id="archnavbarlist">
- <li id="anb-home"><a href="https://www.parabola.nu/" title="Parabola news, packages, projects and more">Home</a></li>
- <li id="anb-packages"><a href="https://www.parabola.nu/packages/" title="Package Database">Packages</a></li>
- <li id="anb-wiki"><a href="https://wiki.parabola.nu/" title="Community documentation">Wiki</a></li>
- <li id="anb-bugs"><a href="https://labs.parabola.nu" title="Issue Tracker">Bugs</a></li>
- <li id="anb-projects" class="anb-selected"><a href="https://projects.parabola.nu/" title="Our Code">Projects</a></li>
- <li id="anb-download"><a href="https://wiki.parabola.nu/Get_Parabola" title="Get Parabola">Download</a></li>
- </ul>
- </div>
- </div><!-- #archnavbar -->
-<div id='cgit'><table id='header'>
-<tr>
-<td class='main'><a href='/'>index</a> : <a title='abslibre.git' href='/abslibre.git/'>abslibre.git</a></td><td class='form'><form method='get' action=''>
-<input type='hidden' name='id' value='b4813d836177da0c3078914092a209416d472d10'/><select name='h' onchange='this.form.submit();'>
-<option value='master' selected='selected'>master</option>
-</select> <input type='submit' name='' value='switch'/></form></td></tr>
-<tr><td class='sub'>Libre Packages Build Scripts for the Parabola GNU/Linux-libre (Arch Build System Libre)
-</td><td class='sub right'>Parabola git</td></tr></table>
-<table class='tabs'><tr><td>
-<a href='/abslibre.git/'>summary</a><a href='/abslibre.git/refs/?id=b4813d836177da0c3078914092a209416d472d10'>refs</a><a href='/abslibre.git/log/libre/iceweasel/enable-object-directory-paths.patch'>log</a><a class='active' href='/abslibre.git/tree/libre/iceweasel/enable-object-directory-paths.patch?id=b4813d836177da0c3078914092a209416d472d10'>tree</a><a href='/abslibre.git/commit/libre/iceweasel/enable-object-directory-paths.patch?id=b4813d836177da0c3078914092a209416d472d10'>commit</a><a href='/abslibre.git/diff/libre/iceweasel/enable-object-directory-paths.patch?id=b4813d836177da0c3078914092a209416d472d10'>diff</a></td><td class='form'><form class='right' method='get' action='/abslibre.git/log/libre/iceweasel/enable-object-directory-paths.patch'>
-<input type='hidden' name='id' value='b4813d836177da0c3078914092a209416d472d10'/><select name='qt'>
-<option value='grep'>log msg</option>
-<option value='author'>author</option>
-<option value='committer'>committer</option>
-<option value='range'>range</option>
-</select>
-<input class='txt' type='text' size='10' name='q' value=''/>
-<input type='submit' value='search'/>
-</form>
-</td></tr></table>
-<div class='path'>path: <a href='/abslibre.git/tree/?id=b4813d836177da0c3078914092a209416d472d10'>root</a>/<a href='/abslibre.git/tree/libre?id=b4813d836177da0c3078914092a209416d472d10'>libre</a>/<a href='/abslibre.git/tree/libre/iceweasel?id=b4813d836177da0c3078914092a209416d472d10'>iceweasel</a>/<a href='/abslibre.git/tree/libre/iceweasel/enable-object-directory-paths.patch?id=b4813d836177da0c3078914092a209416d472d10'>enable-object-directory-paths.patch</a></div><div class='content'>blob: bc938c66ed954d1ea2c670e64cd8ec3373e61220 (<a href='/abslibre.git/plain/libre/iceweasel/enable-object-directory-paths.patch?id=b4813d836177da0c3078914092a209416d472d10'>plain</a>)
-<table summary='blob content' class='blob'>
-<tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a>
-<a id='n2' href='#n2'>2</a>
-<a id='n3' href='#n3'>3</a>
-<a id='n4' href='#n4'>4</a>
-<a id='n5' href='#n5'>5</a>
-<a id='n6' href='#n6'>6</a>
-<a id='n7' href='#n7'>7</a>
-<a id='n8' href='#n8'>8</a>
-<a id='n9' href='#n9'>9</a>
-<a id='n10' href='#n10'>10</a>
-<a id='n11' href='#n11'>11</a>
-<a id='n12' href='#n12'>12</a>
-<a id='n13' href='#n13'>13</a>
-</pre></td>
-<td class='lines'><pre><code>diff --git a/python/mozbuild/mozbuild/frontend/context.py b/python/mozbuild/mozbuild/frontend/context.py
+diff --git a/python/mozbuild/mozbuild/frontend/context.py b/python/mozbuild/mozbuild/frontend/context.py
index 41ae8ae..dcc3263 100644
--- a/python/mozbuild/mozbuild/frontend/context.py
+++ b/python/mozbuild/mozbuild/frontend/context.py
@@ -76,9 +11,3 @@ index 41ae8ae..dcc3263 100644
if value.startswith('%'):
raise ValueError('Filesystem absolute paths are not allowed')
super(SourcePath, self).__init__(context, value)
-</code></pre></td></tr></table>
-</div> <!-- class=content -->
-<div class='footer'>generated by <a href='http://git.zx2c4.com/cgit/about/'>cgit v0.12</a> at 2016-06-10 15:30:20 (GMT)</div>
-</div> <!-- id=cgit -->
-</body>
-</html>
diff --git a/fix-wifi-scanner.diff b/fix-wifi-scanner.diff
new file mode 100644
index 000000000000..f8fdd6c42142
--- /dev/null
+++ b/fix-wifi-scanner.diff
@@ -0,0 +1,16 @@
+ netwerk/wifi/nsWifiScannerDBus.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git c/netwerk/wifi/nsWifiScannerDBus.cpp i/netwerk/wifi/nsWifiScannerDBus.cpp
+index 182553e18fa6e104..6fa0a0b023d3e45f 100644
+--- c/netwerk/wifi/nsWifiScannerDBus.cpp
++++ i/netwerk/wifi/nsWifiScannerDBus.cpp
+@@ -62,7 +62,7 @@ nsWifiScannerDBus::SendMessage(const char* aInterface,
+ return NS_ERROR_FAILURE;
+ }
+ } else if (!strcmp(aFuncCall, "GetAll")) {
+- const char* param = "";
++ const char* param = "org.freedesktop.NetworkManager.AccessPoint";
+ if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, &param)) {
+ return NS_ERROR_FAILURE;
+ }
diff --git a/gnu_headshadow.png b/gnu_headshadow.png
new file mode 100644
index 000000000000..e0f73a3bf436
--- /dev/null
+++ b/gnu_headshadow.png
Binary files differ
diff --git a/iceweasel-gtk3-20.patch b/iceweasel-gtk3-20.patch
deleted file mode 100644
index a8c0ccdfbd8f..000000000000
--- a/iceweasel-gtk3-20.patch
+++ /dev/null
@@ -1,1736 +0,0 @@
-diff -up firefox-47.0/widget/gtk/gtk3drawing.c.gtk3-20 firefox-47.0/widget/gtk/gtk3drawing.c
---- firefox-47.0/widget/gtk/gtk3drawing.c.gtk3-20 2016-06-01 06:11:44.000000000 +0200
-+++ firefox-47.0/widget/gtk/gtk3drawing.c 2016-06-23 10:21:37.072462099 +0200
-@@ -17,34 +17,85 @@
-
- #include <math.h>
-
-+#define MOZ_WIDGET_STYLES 4
-+
-+typedef struct {
-+ GtkWidget* widget;
-+
-+ union {
-+ struct {
-+ GtkStyleContext* style;
-+ GtkStyleContext* styleSelection;
-+ } entry;
-+
-+ struct {
-+ GtkStyleContext* style;
-+ } button;
-+
-+ struct {
-+ GtkStyleContext* style;
-+ } tooltip;
-+
-+ struct {
-+ GtkStyleContext* style;
-+ GtkStyleContext* styleContents;
-+ GtkStyleContext* styleTrough;
-+ GtkStyleContext* styleSlider;
-+ } scroll;
-+
-+ struct {
-+ GtkStyleContext* style;
-+ GtkStyleContext* styleCheck;
-+ GtkStyleContext* styleLabel;
-+ } check;
-+
-+ struct {
-+ GtkStyleContext* style;
-+ GtkStyleContext* styleTrough;
-+ GtkStyleContext* styleProgress;
-+ } progress;
-+
-+ struct {
-+ GtkStyleContext* style;
-+ GtkStyleContext* styleEntry;
-+ GtkStyleContext* styleButtonUp;
-+ GtkStyleContext* styleButtonDown;
-+ } spin;
-+
-+ struct {
-+ GtkStyleContext* style[MOZ_WIDGET_STYLES];
-+ } all;
-+ };
-+} MozGtkWidget;
-+
- static GtkWidget* gProtoWindow;
- static GtkWidget* gProtoLayout;
--static GtkWidget* gButtonWidget;
-+static MozGtkWidget gButton;
- static GtkWidget* gToggleButtonWidget;
- static GtkWidget* gButtonArrowWidget;
--static GtkWidget* gCheckboxWidget;
--static GtkWidget* gRadiobuttonWidget;
--static GtkWidget* gHorizScrollbarWidget;
--static GtkWidget* gVertScrollbarWidget;
--static GtkWidget* gSpinWidget;
-+static MozGtkWidget gCheckbox;
-+static MozGtkWidget gRadiobutton;
-+static MozGtkWidget gVertScrollbar;
-+static MozGtkWidget gHorizScrollbar;
-+static MozGtkWidget gSpin;
- static GtkWidget* gHScaleWidget;
- static GtkWidget* gVScaleWidget;
--static GtkWidget* gEntryWidget;
-+static MozGtkWidget gEntry;
- static GtkWidget* gComboBoxWidget;
- static GtkWidget* gComboBoxButtonWidget;
- static GtkWidget* gComboBoxArrowWidget;
- static GtkWidget* gComboBoxSeparatorWidget;
- static GtkWidget* gComboBoxEntryWidget;
--static GtkWidget* gComboBoxEntryTextareaWidget;
-+static MozGtkWidget gComboBoxEntryTextarea;
- static GtkWidget* gComboBoxEntryButtonWidget;
- static GtkWidget* gComboBoxEntryArrowWidget;
- static GtkWidget* gHandleBoxWidget;
- static GtkWidget* gToolbarWidget;
- static GtkWidget* gFrameWidget;
- static GtkWidget* gStatusbarWidget;
--static GtkWidget* gProgressWidget;
-+static MozGtkWidget gProgressBar;
- static GtkWidget* gTabWidget;
--static GtkWidget* gTooltipWidget;
-+static MozGtkWidget gTooltip;
- static GtkWidget* gMenuBarWidget;
- static GtkWidget* gMenuBarItemWidget;
- static GtkWidget* gMenuPopupWidget;
-@@ -78,6 +129,37 @@ static gboolean is_initialized;
- #define GTK_STATE_FLAG_CHECKED (1 << 11)
- #endif
-
-+void moz_gtk_widget_free(MozGtkWidget *aMozWidget)
-+{
-+ // This was removed as a child of gProtoWindow
-+ if (aMozWidget->widget) {
-+ aMozWidget->widget = NULL;
-+ }
-+
-+ for(int i = 0; i < MOZ_WIDGET_STYLES; i++) {
-+ if (aMozWidget->all.style[i]) {
-+ g_object_unref(aMozWidget->all.style[i]);
-+ aMozWidget->all.style[i] = NULL;
-+ }
-+ }
-+}
-+
-+// TODO - weak dep!! (dlsym)
-+#if GTK_CHECK_VERSION(3, 19, 2)
-+#define moz_gtk_path_set_class_name gtk_widget_path_iter_set_object_name
-+#else
-+#define moz_gtk_path_set_class_name gtk_widget_path_iter_add_class
-+#endif
-+//gtk_widget_path_iter_get_state
-+
-+static void
-+moz_gtk_get_style_border(GtkStyleContext* style, GtkStateFlags state_flags,
-+ GtkBorder *border);
-+
-+static void
-+moz_gtk_get_style_padding(GtkStyleContext* style, GtkStateFlags state_flags,
-+ GtkBorder *padding);
-+
- static GtkStateFlags
- GetStateFlagsFromGtkWidgetState(GtkWidgetState* state)
- {
-@@ -97,6 +179,41 @@ GetStateFlagsFromGtkWidgetState(GtkWidge
- return stateFlags;
- }
-
-+GtkStyleContext *
-+moz_gtk_style_create(GtkCssNode *node, GtkStyleContext *parent)
-+{
-+ GtkWidgetPath *path;
-+ GtkStyleContext *context;
-+
-+ if (parent)
-+ path = gtk_widget_path_copy (gtk_style_context_get_path (parent));
-+ else
-+ path = gtk_widget_path_new ();
-+
-+ gtk_widget_path_append_type (path, node->type);
-+ if (node->name)
-+ moz_gtk_path_set_class_name(path, -1, node->name);
-+ if (node->class1)
-+ gtk_widget_path_iter_add_class(path, -1, node->class1);
-+ if (node->class2)
-+ gtk_widget_path_iter_add_class(path, -1, node->class2);
-+
-+ context = gtk_style_context_new ();
-+ gtk_style_context_set_path (context, path);
-+ gtk_style_context_set_parent (context, parent);
-+
-+ if(!gtk_check_version(3, 14, 0)) {
-+ /* Unfortunately, we have to explicitly set the state again here
-+ * for it to take effect
-+ */
-+ gtk_style_context_set_state (context, gtk_widget_path_iter_get_state (path, -1));
-+ }
-+
-+ gtk_widget_path_unref (path);
-+
-+ return context;
-+}
-+
- /* Because we have such an unconventional way of drawing widgets, signal to the GTK theme engine
- that they are drawing for Mozilla instead of a conventional GTK app so they can do any specific
- things they may want to do. */
-@@ -141,9 +258,16 @@ setup_widget_prototype(GtkWidget* widget
- static gint
- ensure_button_widget()
- {
-- if (!gButtonWidget) {
-- gButtonWidget = gtk_button_new_with_label("M");
-- setup_widget_prototype(gButtonWidget);
-+ if (!gButton.widget) {
-+ GtkCssNode path[] = {
-+ { GTK_TYPE_BUTTON, "button", NULL, NULL }
-+ };
-+
-+ gButton.widget = gtk_button_new_with_label("M");
-+ setup_widget_prototype(gButton.widget);
-+ gtk_widget_show(gButton.widget);
-+
-+ gButton.button.style = moz_gtk_style_create(&path[0], NULL);
- }
- return MOZ_GTK_SUCCESS;
- }
-@@ -195,9 +319,21 @@ ensure_button_arrow_widget()
- static gint
- ensure_checkbox_widget()
- {
-- if (!gCheckboxWidget) {
-- gCheckboxWidget = gtk_check_button_new_with_label("M");
-- setup_widget_prototype(gCheckboxWidget);
-+ if (!gCheckbox.widget) {
-+ GtkCssNode path[] = {
-+ { GTK_TYPE_TOGGLE_BUTTON, "checkbutton", NULL, NULL },
-+ { G_TYPE_NONE, "check", NULL, NULL },
-+ { G_TYPE_NONE, "label", NULL, NULL }
-+ };
-+
-+ gCheckbox.widget = gtk_check_button_new_with_label("M");
-+ setup_widget_prototype(gCheckbox.widget);
-+
-+ gCheckbox.check.style = moz_gtk_style_create(&path[0], NULL);
-+ gCheckbox.check.styleCheck = moz_gtk_style_create(&path[1],
-+ gCheckbox.check.style);
-+ gCheckbox.check.styleLabel = moz_gtk_style_create(&path[2],
-+ gCheckbox.check.style);
- }
- return MOZ_GTK_SUCCESS;
- }
-@@ -205,9 +341,21 @@ ensure_checkbox_widget()
- static gint
- ensure_radiobutton_widget()
- {
-- if (!gRadiobuttonWidget) {
-- gRadiobuttonWidget = gtk_radio_button_new_with_label(NULL, "M");
-- setup_widget_prototype(gRadiobuttonWidget);
-+ if (!gRadiobutton.widget) {
-+ GtkCssNode path[] = {
-+ { GTK_TYPE_TOGGLE_BUTTON, "radiobutton", NULL, NULL },
-+ { G_TYPE_NONE, "radio", NULL, NULL },
-+ { G_TYPE_NONE, "label", NULL, NULL }
-+ };
-+
-+ gRadiobutton.widget = gtk_radio_button_new_with_label(NULL, "M");
-+ setup_widget_prototype(gRadiobutton.widget);
-+
-+ gRadiobutton.check.style = moz_gtk_style_create(&path[0], NULL);
-+ gRadiobutton.check.styleCheck = moz_gtk_style_create(&path[1],
-+ gRadiobutton.check.style);
-+ gRadiobutton.check.styleLabel = moz_gtk_style_create(&path[2],
-+ gRadiobutton.check.style);
- }
- return MOZ_GTK_SUCCESS;
- }
-@@ -215,25 +363,62 @@ ensure_radiobutton_widget()
- static gint
- ensure_scrollbar_widget()
- {
-- if (!gVertScrollbarWidget) {
-- gVertScrollbarWidget = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, NULL);
-- setup_widget_prototype(gVertScrollbarWidget);
-- }
-- if (!gHorizScrollbarWidget) {
-- gHorizScrollbarWidget = gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, NULL);
-- setup_widget_prototype(gHorizScrollbarWidget);
-- }
-+ if (!gVertScrollbar.widget && !gHorizScrollbar.widget) {
-+ GtkCssNode path[] = {
-+ { GTK_TYPE_SCROLLBAR, "scrollbar", "horizontal", "bottom"},
-+ { GTK_TYPE_SCROLLBAR, "scrollbar", "vertical", "right" },
-+ { G_TYPE_NONE, "contents", NULL, NULL },
-+ { G_TYPE_NONE, "trough", NULL, NULL },
-+ { G_TYPE_NONE, "slider", NULL, NULL }
-+ };
-+
-+ gHorizScrollbar.widget = gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, NULL);
-+ setup_widget_prototype(gHorizScrollbar.widget);
-+
-+ gHorizScrollbar.scroll.style = moz_gtk_style_create(path, NULL);
-+ gHorizScrollbar.scroll.styleContents = moz_gtk_style_create(path+2,
-+ gHorizScrollbar.scroll.style);
-+ gHorizScrollbar.scroll.styleTrough = moz_gtk_style_create(path+3,
-+ gHorizScrollbar.scroll.styleContents);
-+ gHorizScrollbar.scroll.styleSlider = moz_gtk_style_create(path+4,
-+ gHorizScrollbar.scroll.styleTrough);
-+
-+ gVertScrollbar.widget = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, NULL);
-+ setup_widget_prototype(gVertScrollbar.widget);
-+
-+ gVertScrollbar.scroll.style = moz_gtk_style_create(path+1, NULL);
-+ gVertScrollbar.scroll.styleContents = moz_gtk_style_create(path+2,
-+ gVertScrollbar.scroll.style);
-+ gVertScrollbar.scroll.styleTrough = moz_gtk_style_create(path+3,
-+ gVertScrollbar.scroll.styleContents);
-+ gVertScrollbar.scroll.styleSlider = moz_gtk_style_create(path+4,
-+ gVertScrollbar.scroll.styleTrough);
-+
-+ }
- return MOZ_GTK_SUCCESS;
- }
-
- static gint
- ensure_spin_widget()
- {
-- if (!gSpinWidget) {
-- gSpinWidget = gtk_spin_button_new(NULL, 1, 0);
-- setup_widget_prototype(gSpinWidget);
-- }
-- return MOZ_GTK_SUCCESS;
-+ if (!gSpin.widget) {
-+ GtkCssNode path[] = {
-+ { GTK_TYPE_SPIN_BUTTON, "spinbutton", "horizontal", NULL },
-+ { GTK_TYPE_SPIN_BUTTON, "spinbutton", "vertical", NULL },
-+ { GTK_TYPE_ENTRY, "entry", NULL, NULL },
-+ { G_TYPE_NONE, "button", "up", NULL },
-+ { G_TYPE_NONE, "button", "down", NULL }
-+ };
-+
-+ gSpin.widget = gtk_spin_button_new(NULL, 1, 0);
-+ setup_widget_prototype(gSpin.widget);
-+
-+ gSpin.spin.style = moz_gtk_style_create(path, NULL);
-+ gSpin.spin.styleButtonUp = moz_gtk_style_create(path+3, gSpin.spin.style);
-+ gSpin.spin.styleButtonDown = moz_gtk_style_create(path+4, gSpin.spin.style);
-+ gSpin.spin.styleEntry = moz_gtk_style_create(path+2, gSpin.spin.style);
-+ }
-+ return MOZ_GTK_SUCCESS;
- }
-
- static gint
-@@ -253,9 +438,19 @@ ensure_scale_widget()
- static gint
- ensure_entry_widget()
- {
-- if (!gEntryWidget) {
-- gEntryWidget = gtk_entry_new();
-- setup_widget_prototype(gEntryWidget);
-+ if (!gEntry.widget) {
-+ GtkCssNode path[] = {
-+ { GTK_TYPE_ENTRY, "entry", NULL, NULL },
-+ { G_TYPE_NONE, "selection", NULL, NULL }
-+ };
-+
-+ gEntry.widget = gtk_entry_new();
-+ setup_widget_prototype(gEntry.widget);
-+ gtk_widget_show(gEntry.widget);
-+
-+ gEntry.entry.style = moz_gtk_style_create(&path[0], NULL);
-+ gEntry.entry.styleSelection = moz_gtk_style_create(&path[1],
-+ gEntry.entry.style);
- }
- return MOZ_GTK_SUCCESS;
- }
-@@ -387,9 +582,9 @@ moz_gtk_get_combo_box_entry_inner_widget
- g_object_add_weak_pointer(G_OBJECT(widget),
- (gpointer) &gComboBoxEntryButtonWidget);
- } else if (GTK_IS_ENTRY(widget)) {
-- gComboBoxEntryTextareaWidget = widget;
-+ gComboBoxEntryTextarea.widget = widget;
- g_object_add_weak_pointer(G_OBJECT(widget),
-- (gpointer) &gComboBoxEntryTextareaWidget);
-+ (gpointer) &gComboBoxEntryTextarea.widget);
- } else
- return;
- gtk_widget_realize(widget);
-@@ -411,7 +606,7 @@ ensure_combo_box_entry_widgets()
- {
- GtkWidget* buttonChild;
-
-- if (gComboBoxEntryTextareaWidget &&
-+ if (gComboBoxEntryTextarea.widget &&
- gComboBoxEntryButtonWidget &&
- gComboBoxEntryArrowWidget)
- return MOZ_GTK_SUCCESS;
-@@ -427,9 +622,9 @@ ensure_combo_box_entry_widgets()
- moz_gtk_get_combo_box_entry_inner_widgets,
- NULL);
-
-- if (!gComboBoxEntryTextareaWidget) {
-+ if (!gComboBoxEntryTextarea.widget) {
- ensure_entry_widget();
-- gComboBoxEntryTextareaWidget = gEntryWidget;
-+ gComboBoxEntryTextarea.widget = gEntry.widget;
- }
-
- if (gComboBoxEntryButtonWidget) {
-@@ -507,12 +702,16 @@ ensure_toolbar_separator_widget()
- static gint
- ensure_tooltip_widget()
- {
-- if (!gTooltipWidget) {
-- gTooltipWidget = gtk_window_new(GTK_WINDOW_POPUP);
-- GtkStyleContext* style = gtk_widget_get_style_context(gTooltipWidget);
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
-- gtk_widget_realize(gTooltipWidget);
-- moz_gtk_set_widget_name(gTooltipWidget);
-+ if (!gTooltip.widget) {
-+ GtkCssNode path[] = {
-+ { GTK_TYPE_TOOLTIP, "tooltip", "background", NULL},
-+ };
-+
-+ gTooltip.widget = gtk_window_new(GTK_WINDOW_POPUP);
-+ gtk_widget_realize(gTooltip.widget);
-+ moz_gtk_set_widget_name(gTooltip.widget);
-+
-+ gTooltip.tooltip.style = moz_gtk_style_create(&path[0], NULL);
- }
- return MOZ_GTK_SUCCESS;
- }
-@@ -530,9 +729,21 @@ ensure_tab_widget()
- static gint
- ensure_progress_widget()
- {
-- if (!gProgressWidget) {
-- gProgressWidget = gtk_progress_bar_new();
-- setup_widget_prototype(gProgressWidget);
-+ if (!gProgressBar.widget) {
-+ GtkCssNode path[] = {
-+ { GTK_TYPE_LABEL, "progressbar", NULL, NULL },
-+ { G_TYPE_NONE, "trough", NULL, NULL },
-+ { G_TYPE_NONE, "progress", NULL, NULL },
-+ };
-+
-+ gProgressBar.widget = gtk_progress_bar_new();
-+ setup_widget_prototype(gProgressBar.widget);
-+
-+ gProgressBar.progress.style = moz_gtk_style_create(&path[0], NULL);
-+ gProgressBar.progress.styleTrough = moz_gtk_style_create(&path[1],
-+ gProgressBar.progress.style);
-+ gProgressBar.progress.styleProgress = moz_gtk_style_create(&path[2],
-+ gProgressBar.progress.styleTrough);
- }
- return MOZ_GTK_SUCCESS;
- }
-@@ -638,6 +849,11 @@ static gint
- ensure_check_menu_item_widget()
- {
- if (!gCheckMenuItemWidget) {
-+ GtkCssNode path[] = {
-+ { GTK_TYPE_CHECK_MENU_ITEM, "menuitem", NULL, NULL },
-+ { G_TYPE_NONE, "check", NULL, NULL }
-+ };
-+
- ensure_menu_popup_widget();
- gCheckMenuItemWidget = gtk_check_menu_item_new_with_label("M");
- gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget),
-@@ -752,7 +968,7 @@ moz_gtk_checkbox_get_metrics(gint* indic
- {
- ensure_checkbox_widget();
-
-- gtk_widget_style_get (gCheckboxWidget,
-+ gtk_widget_style_get (gCheckbox.widget,
- "indicator_size", indicator_size,
- "indicator_spacing", indicator_spacing,
- NULL);
-@@ -765,7 +981,7 @@ moz_gtk_radio_get_metrics(gint* indicato
- {
- ensure_radiobutton_widget();
-
-- gtk_widget_style_get (gRadiobuttonWidget,
-+ gtk_widget_style_get (gRadiobutton.widget,
- "indicator_size", indicator_size,
- "indicator_spacing", indicator_spacing,
- NULL);
-@@ -778,13 +994,13 @@ moz_gtk_get_focus_outline_size(gint* foc
- {
- GtkBorder border;
- GtkBorder padding;
-- GtkStyleContext *style;
-+ GtkStyleContext* style;
-
- ensure_entry_widget();
-- style = gtk_widget_get_style_context(gEntryWidget);
-
-- gtk_style_context_get_border(style, 0, &border);
-- gtk_style_context_get_padding(style, 0, &padding);
-+ style = gEntry.entry.style;
-+ gtk_style_context_get_border(style, gtk_style_context_get_state(style), &border);
-+ gtk_style_context_get_padding(style, gtk_style_context_get_state(style), &padding);
- *focus_h_width = border.left + padding.left;
- *focus_v_width = border.top + padding.top;
- return MOZ_GTK_SUCCESS;
-@@ -821,7 +1037,7 @@ moz_gtk_button_get_default_overflow(gint
- GtkBorder* default_outside_border;
-
- ensure_button_widget();
-- gtk_widget_style_get(gButtonWidget,
-+ gtk_widget_style_get(gButton.widget,
- "default-outside-border", &default_outside_border,
- NULL);
-
-@@ -844,7 +1060,7 @@ moz_gtk_button_get_default_border(gint*
- GtkBorder* default_border;
-
- ensure_button_widget();
-- gtk_widget_style_get(gButtonWidget,
-+ gtk_widget_style_get(gButton.widget,
- "default-border", &default_border,
- NULL);
-
-@@ -935,7 +1151,7 @@ moz_gtk_button_paint(cairo_t *cr, GdkRec
-
- if (state->focused) {
- GtkBorder border;
-- gtk_style_context_get_border(style, state_flags, &border);
-+ moz_gtk_get_style_border(style, state_flags, &border);
- x += border.left;
- y += border.top;
- width -= (border.left + border.right);
-@@ -956,15 +1172,14 @@ moz_gtk_toggle_paint(cairo_t *cr, GdkRec
- gint indicator_size, indicator_spacing;
- gint x, y, width, height;
- gint focus_x, focus_y, focus_width, focus_height;
-- GtkWidget *w;
-- GtkStyleContext *style;
-+ MozGtkWidget *w;
-
- if (isradio) {
- moz_gtk_radio_get_metrics(&indicator_size, &indicator_spacing);
-- w = gRadiobuttonWidget;
-+ w = &gRadiobutton;
- } else {
- moz_gtk_checkbox_get_metrics(&indicator_size, &indicator_spacing);
-- w = gCheckboxWidget;
-+ w = &gCheckbox;
- }
-
- // XXX we should assert rect->height >= indicator_size too
-@@ -983,11 +1198,9 @@ moz_gtk_toggle_paint(cairo_t *cr, GdkRec
- focus_width = width + 2 * indicator_spacing;
- focus_height = height + 2 * indicator_spacing;
-
-- style = gtk_widget_get_style_context(w);
--
-- gtk_widget_set_sensitive(w, !state->disabled);
-- gtk_widget_set_direction(w, direction);
-- gtk_style_context_save(style);
-+ gtk_widget_set_sensitive(w->widget, !state->disabled);
-+ gtk_widget_set_direction(w->widget, direction);
-+ gtk_style_context_save(w->check.styleCheck);
-
- if (selected)
- state_flags |= checkbox_check_state;
-@@ -995,13 +1208,15 @@ moz_gtk_toggle_paint(cairo_t *cr, GdkRec
- if (inconsistent)
- state_flags |= GTK_STATE_FLAG_INCONSISTENT;
-
-- gtk_style_context_set_state(style, state_flags);
-+ gtk_style_context_set_state(w->check.styleCheck, state_flags);
-+
-+ gtk_render_background(w->check.styleCheck, cr, x, y, width, height);
-+ gtk_render_frame(w->check.styleCheck, cr, x, y, width, height);
-
- if (isradio) {
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_RADIO);
-- gtk_render_option(style, cr, x, y, width, height);
-+ gtk_render_option(w->check.styleCheck, cr, x, y, width, height);
- if (state->focused) {
-- gtk_render_focus(style, cr, focus_x, focus_y,
-+ gtk_render_focus(w->check.styleCheck, cr, focus_x, focus_y,
- focus_width, focus_height);
- }
- }
-@@ -1010,15 +1225,14 @@ moz_gtk_toggle_paint(cairo_t *cr, GdkRec
- * 'indeterminate' type on checkboxes. In GTK, the shadow type
- * must also be changed for the state to be drawn.
- */
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_CHECK);
-- gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(gCheckboxWidget), inconsistent);
-- gtk_render_check(style, cr, x, y, width, height);
-+ gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(w->widget), inconsistent);
-+ gtk_render_check(w->check.styleCheck, cr, x, y, width, height);
- if (state->focused) {
-- gtk_render_focus(style, cr,
-+ gtk_render_focus(w->check.styleCheck, cr,
- focus_x, focus_y, focus_width, focus_height);
- }
- }
-- gtk_style_context_restore(style);
-+ gtk_style_context_restore(w->check.styleCheck);
-
- return MOZ_GTK_SUCCESS;
- }
-@@ -1035,8 +1249,8 @@ calculate_button_inner_rect(GtkWidget* b
- style = gtk_widget_get_style_context(button);
-
- /* This mirrors gtkbutton's child positioning */
-- gtk_style_context_get_border(style, 0, &border);
-- gtk_style_context_get_padding(style, 0, &padding);
-+ gtk_style_context_get_border(style, gtk_style_context_get_state(style), &border);
-+ gtk_style_context_get_padding(style, gtk_style_context_get_state(style), &padding);
-
- inner_rect->x = rect->x + border.left + padding.left;
- inner_rect->y = rect->y + padding.top + border.top;
-@@ -1099,9 +1313,9 @@ moz_gtk_scrollbar_button_paint(cairo_t *
- ensure_scrollbar_widget();
-
- if (flags & MOZ_GTK_STEPPER_VERTICAL)
-- scrollbar = gVertScrollbarWidget;
-+ scrollbar = gVertScrollbar.widget;
- else
-- scrollbar = gHorizScrollbarWidget;
-+ scrollbar = gHorizScrollbar.widget;
-
- gtk_widget_set_direction(scrollbar, direction);
-
-@@ -1181,25 +1395,22 @@ moz_gtk_scrollbar_trough_paint(GtkThemeW
- GtkTextDirection direction)
- {
- GtkStyleContext* style;
-- GtkScrollbar *scrollbar;
-
- ensure_scrollbar_widget();
-
-- if (widget == MOZ_GTK_SCROLLBAR_HORIZONTAL)
-- scrollbar = GTK_SCROLLBAR(gHorizScrollbarWidget);
-- else
-- scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget);
--
-- gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction);
--
- if (flags & MOZ_GTK_TRACK_OPAQUE) {
- style = gtk_widget_get_style_context(GTK_WIDGET(gProtoWindow));
- gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
- }
-
-- style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar));
-- gtk_style_context_save(style);
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TROUGH);
-+ if (widget == MOZ_GTK_SCROLLBAR_HORIZONTAL) {
-+ gtk_widget_set_direction(GTK_WIDGET(gHorizScrollbar.widget), direction);
-+ style = gHorizScrollbar.scroll.style;
-+ }
-+ else {
-+ gtk_widget_set_direction(GTK_WIDGET(gVertScrollbar.widget), direction);
-+ style = gVertScrollbar.scroll.style;
-+ }
-
- gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
- gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
-@@ -1208,7 +1419,6 @@ moz_gtk_scrollbar_trough_paint(GtkThemeW
- gtk_render_focus(style, cr,
- rect->x, rect->y, rect->width, rect->height);
- }
-- gtk_style_context_restore(style);
- return MOZ_GTK_SUCCESS;
- }
-
-@@ -1220,24 +1430,20 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWi
- {
- GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
- GtkStyleContext* style;
-- GtkScrollbar *scrollbar;
- GtkBorder margin;
-
- ensure_scrollbar_widget();
-
-- if (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL)
-- scrollbar = GTK_SCROLLBAR(gHorizScrollbarWidget);
-- else
-- scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget);
--
-- gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction);
--
-- style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar));
-- gtk_style_context_save(style);
-+ if (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) {
-+ style = gHorizScrollbar.scroll.styleSlider;
-+ gtk_widget_set_direction(GTK_WIDGET(gHorizScrollbar.widget), direction);
-+ }
-+ else {
-+ style = gVertScrollbar.scroll.styleSlider;
-+ gtk_widget_set_direction(GTK_WIDGET(gVertScrollbar.widget), direction);
-+ }
-
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER);
- gtk_style_context_set_state(style, state_flags);
--
- gtk_style_context_get_margin (style, state_flags, &margin);
-
- gtk_render_slider(style, cr,
-@@ -1248,8 +1454,6 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWi
- (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ?
- GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL);
-
-- gtk_style_context_restore(style);
--
- return MOZ_GTK_SUCCESS;
- }
-
-@@ -1260,8 +1464,8 @@ moz_gtk_spin_paint(cairo_t *cr, GdkRecta
- GtkStyleContext* style;
-
- ensure_spin_widget();
-- gtk_widget_set_direction(gSpinWidget, direction);
-- style = gtk_widget_get_style_context(gSpinWidget);
-+ gtk_widget_set_direction(gSpin.widget, direction);
-+ style = gSpin.spin.style;
- gtk_style_context_save(style);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_SPINBUTTON);
- gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
-@@ -1280,11 +1484,10 @@ moz_gtk_spin_updown_paint(cairo_t *cr, G
- GtkStyleContext* style;
-
- ensure_spin_widget();
-- style = gtk_widget_get_style_context(gSpinWidget);
-+ style = gSpin.spin.style;
- gtk_style_context_save(style);
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_SPINBUTTON);
- gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state));
-- gtk_widget_set_direction(gSpinWidget, direction);
-+ gtk_widget_set_direction(gSpin.widget, direction);
-
- gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
- gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
-@@ -1450,15 +1653,13 @@ moz_gtk_vpaned_paint(cairo_t *cr, GdkRec
- static gint
- moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
- GtkWidgetState* state,
-- GtkWidget* widget, GtkTextDirection direction)
-+ MozGtkWidget* w, GtkTextDirection direction)
- {
- gint x = rect->x, y = rect->y, width = rect->width, height = rect->height;
-- GtkStyleContext* style;
- int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE
-+ GtkStyleContext* style = w->entry.style;
-
-- gtk_widget_set_direction(widget, direction);
--
-- style = gtk_widget_get_style_context(widget);
-+ gtk_widget_set_direction(w->widget, direction);
-
- if (draw_focus_outline_only) {
- // Inflate the given 'rect' with the focus outline size.
-@@ -1478,10 +1679,9 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRect
- * textarea window uses gtk_paint_flat_box when exposed */
-
- /* This gets us a lovely greyish disabledish look */
-- gtk_widget_set_sensitive(widget, !state->disabled);
-+ gtk_widget_set_sensitive(w->widget, !state->disabled);
-
- gtk_style_context_save(style);
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_ENTRY);
-
- /* Now paint the shadow and focus border.
- * We do like in gtk_entry_draw_frame, we first draw the shadow, a tad
-@@ -1531,7 +1731,7 @@ moz_gtk_treeview_paint(cairo_t *cr, GdkR
- style = gtk_widget_get_style_context(gScrolledWindowWidget);
- gtk_style_context_save(style);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_FRAME);
-- gtk_style_context_get_border(style, state_flags, &border);
-+ moz_gtk_get_style_border(style, state_flags, &border);
- xthickness = border.left;
- ythickness = border.top;
-
-@@ -1702,7 +1902,7 @@ moz_gtk_combo_box_paint(cairo_t *cr, Gdk
- if (direction == GTK_TEXT_DIR_LTR) {
- GtkBorder padding;
- GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
-- gtk_style_context_get_padding(style, state_flags, &padding);
-+ moz_gtk_get_style_padding(style, state_flags, &padding);
- arrow_rect.x -= padding.left;
- }
- else
-@@ -1804,29 +2004,27 @@ moz_gtk_container_paint(cairo_t *cr, Gdk
- gboolean isradio, GtkTextDirection direction)
- {
- GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
-- GtkStyleContext* style;
-- GtkWidget *widget;
-+ MozGtkWidget *widget;
-
- if (isradio) {
- ensure_radiobutton_widget();
-- widget = gRadiobuttonWidget;
-+ widget = &gRadiobutton;
- } else {
- ensure_checkbox_widget();
-- widget = gCheckboxWidget;
-+ widget = &gCheckbox;
- }
-- gtk_widget_set_direction(widget, direction);
-+ gtk_widget_set_direction(widget->widget, direction);
-
-- style = gtk_widget_get_style_context(widget);
-- gtk_style_context_save(style);
-- gtk_style_context_set_state(style, state_flags);
-+ gtk_style_context_save(widget->check.style);
-+ gtk_style_context_set_state(widget->check.style, state_flags);
-
- /* this is for drawing a prelight box */
- if (state_flags & GTK_STATE_FLAG_PRELIGHT) {
-- gtk_render_background(style, cr,
-+ gtk_render_background(widget->check.style, cr,
- rect->x, rect->y, rect->width, rect->height);
- }
-
-- gtk_style_context_restore(style);
-+ gtk_style_context_restore(widget->check.style);
-
- return MOZ_GTK_SUCCESS;
- }
-@@ -1836,32 +2034,26 @@ moz_gtk_toggle_label_paint(cairo_t *cr,
- GtkWidgetState* state,
- gboolean isradio, GtkTextDirection direction)
- {
-- GtkStyleContext *style;
-- GtkWidget *widget;
-+ MozGtkWidget *widget;
-
- if (!state->focused)
- return MOZ_GTK_SUCCESS;
-
- if (isradio) {
- ensure_radiobutton_widget();
-- widget = gRadiobuttonWidget;
-+ widget = &gRadiobutton;
- } else {
- ensure_checkbox_widget();
-- widget = gCheckboxWidget;
-- }
-- style = gtk_widget_get_style_context(widget);
-- gtk_style_context_save(style);
-- if (isradio) {
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_RADIO);
-- } else {
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_CHECK);
-+ widget = &gCheckbox;
- }
-- gtk_widget_set_direction(widget, direction);
-+ gtk_style_context_save(widget->check.styleLabel);
-+ gtk_widget_set_direction(widget->widget, direction);
-
-- gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state));
-- gtk_render_focus(style, cr,
-+ gtk_style_context_set_state(widget->check.styleLabel,
-+ GetStateFlagsFromGtkWidgetState(state));
-+ gtk_render_focus(widget->check.styleLabel, cr,
- rect->x, rect->y, rect->width, rect->height);
-- gtk_style_context_restore(style);
-+ gtk_style_context_restore(widget->check.styleLabel);
-
- return MOZ_GTK_SUCCESS;
- }
-@@ -1922,7 +2114,7 @@ moz_gtk_toolbar_separator_paint(cairo_t
- rect->height * (end_fraction - start_fraction));
- } else {
- GtkBorder padding;
-- gtk_style_context_get_padding(style, 0, &padding);
-+ gtk_style_context_get_padding(style, gtk_style_context_get_state(style), &padding);
-
- paint_width = padding.left;
- if (paint_width > rect->width)
-@@ -1945,9 +2137,9 @@ moz_gtk_tooltip_paint(cairo_t *cr, GdkRe
- GtkStyleContext* style;
-
- ensure_tooltip_widget();
-- gtk_widget_set_direction(gTooltipWidget, direction);
-+ gtk_widget_set_direction(gTooltip.widget, direction);
-
-- style = gtk_widget_get_style_context(gTooltipWidget);
-+ style = gTooltip.tooltip.style;
- gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
- gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
- return MOZ_GTK_SUCCESS;
-@@ -2006,18 +2198,13 @@ static gint
- moz_gtk_progressbar_paint(cairo_t *cr, GdkRectangle* rect,
- GtkTextDirection direction)
- {
-- GtkStyleContext* style;
--
- ensure_progress_widget();
-- gtk_widget_set_direction(gProgressWidget, direction);
-+ gtk_widget_set_direction(gProgressBar.widget, direction);
-
-- style = gtk_widget_get_style_context(gProgressWidget);
-- gtk_style_context_save(style);
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TROUGH);
--
-- gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
-- gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
-- gtk_style_context_restore(style);
-+ gtk_render_background(gProgressBar.progress.styleTrough, cr,
-+ rect->x, rect->y, rect->width, rect->height);
-+ gtk_render_frame(gProgressBar.progress.styleTrough, cr,
-+ rect->x, rect->y, rect->width, rect->height);
-
- return MOZ_GTK_SUCCESS;
- }
-@@ -2027,15 +2214,8 @@ moz_gtk_progress_chunk_paint(cairo_t *cr
- GtkTextDirection direction,
- GtkThemeWidgetType widget)
- {
-- GtkStyleContext* style;
--
- ensure_progress_widget();
-- gtk_widget_set_direction(gProgressWidget, direction);
--
-- style = gtk_widget_get_style_context(gProgressWidget);
-- gtk_style_context_save(style);
-- gtk_style_context_remove_class(style, GTK_STYLE_CLASS_TROUGH);
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_PROGRESSBAR);
-+ gtk_widget_set_direction(gProgressBar.widget, direction);
-
- if (widget == MOZ_GTK_PROGRESS_CHUNK_INDETERMINATE ||
- widget == MOZ_GTK_PROGRESS_CHUNK_VERTICAL_INDETERMINATE) {
-@@ -2074,12 +2254,14 @@ moz_gtk_progress_chunk_paint(cairo_t *cr
- // gtk_render_activity was used to render progress chunks on GTK versions
- // before 3.13.7, see bug 1173907.
- if (!gtk_check_version(3, 13, 7)) {
-- gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
-- gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
-+ gtk_render_background(gProgressBar.progress.styleProgress, cr,
-+ rect->x, rect->y, rect->width, rect->height);
-+ gtk_render_frame(gProgressBar.progress.styleProgress, cr,
-+ rect->x, rect->y, rect->width, rect->height);
- } else {
-- gtk_render_activity(style, cr, rect->x, rect->y, rect->width, rect->height);
-+ gtk_render_activity(gProgressBar.progress.styleProgress, cr,
-+ rect->x, rect->y, rect->width, rect->height);
- }
-- gtk_style_context_restore(style);
-
- return MOZ_GTK_SUCCESS;
- }
-@@ -2096,7 +2278,7 @@ moz_gtk_get_tab_thickness(void)
-
- style = gtk_widget_get_style_context(gTabWidget);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK);
-- gtk_style_context_get_border(style, 0, &border);
-+ gtk_style_context_get_border(style, gtk_style_context_get_state(style), &border);
-
- if (border.top < 2)
- return 2; /* some themes don't set ythickness correctly */
-@@ -2292,7 +2474,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectan
- gtk_style_context_save(style);
- moz_gtk_tab_prepare_style_context(style, flags);
-
-- gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding);
-+ moz_gtk_get_style_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding);
-
- focusRect.x += padding.left;
- focusRect.width -= (padding.left + padding.right);
-@@ -2408,7 +2590,7 @@ moz_gtk_tab_scroll_arrow_paint(cairo_t *
- }
-
- static gint
--moz_gtk_menu_bar_paint(cairo_t *cr, GdkRectangle* rect,
-+moz_gtk_menu_bar_paint(cairo_t *cr, GdkRectangle* rect, GtkWidgetState* state,
- GtkTextDirection direction)
- {
- GtkStyleContext* style;
-@@ -2468,7 +2650,7 @@ moz_gtk_menu_separator_paint(cairo_t *cr
- border_width = gtk_container_get_border_width(GTK_CONTAINER(gMenuSeparatorWidget));
-
- style = gtk_widget_get_style_context(gMenuSeparatorWidget);
-- gtk_style_context_get_padding(style, 0, &padding);
-+ gtk_style_context_get_padding(style, gtk_style_context_get_state(style), &padding);
-
- x = rect->x + border_width;
- y = rect->y + border_width;
-@@ -2521,7 +2703,8 @@ moz_gtk_menu_item_paint(cairo_t *cr, Gdk
- item_widget = gMenuItemWidget;
- }
- style = gtk_widget_get_style_context(item_widget);
-- gtk_style_context_save(style);
-+// TODO - FIX!
-+// gtk_style_context_save(style);
-
- if (flags & MOZ_TOPLEVEL_MENU_ITEM) {
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_MENUBAR);
-@@ -2540,7 +2723,7 @@ moz_gtk_menu_item_paint(cairo_t *cr, Gdk
-
- gtk_render_background(style, cr, x, y, w, h);
- gtk_render_frame(style, cr, x, y, w, h);
-- gtk_style_context_restore(style);
-+// gtk_style_context_restore(style);
- }
-
- return MOZ_GTK_SUCCESS;
-@@ -2556,7 +2739,10 @@ moz_gtk_menu_arrow_paint(cairo_t *cr, Gd
-
- ensure_menu_item_widget();
- gtk_widget_set_direction(gMenuItemWidget, direction);
--
-+/*
-+ state_flags |= (direction == GTK_TEXT_DIR_LTR) ? GTK_STATE_FLAG_DIR_LTR :
-+ GTK_STATE_FLAG_DIR_RTL;
-+*/
- style = gtk_widget_get_style_context(gMenuItemWidget);
- gtk_style_context_save(style);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_MENUITEM);
-@@ -2606,7 +2792,7 @@ moz_gtk_check_menu_item_paint(cairo_t *c
- }
-
- gtk_style_context_set_state(style, state_flags);
-- gtk_style_context_get_padding(style, state_flags, &padding);
-+ moz_gtk_get_style_padding(style, state_flags, &padding);
-
- offset = gtk_container_get_border_width(GTK_CONTAINER(gCheckMenuItemWidget)) +
- padding.left + 2;
-@@ -2658,7 +2844,7 @@ moz_gtk_add_style_border(GtkStyleContext
- {
- GtkBorder border;
-
-- gtk_style_context_get_border(style, 0, &border);
-+ gtk_style_context_get_border(style, gtk_style_context_get_state(style), &border);
-
- *left += border.left;
- *right += border.right;
-@@ -2667,12 +2853,22 @@ moz_gtk_add_style_border(GtkStyleContext
- }
-
- static void
-+moz_gtk_get_style_border(GtkStyleContext* style, GtkStateFlags state_flags,
-+ GtkBorder *border)
-+{
-+ gtk_style_context_save(style);
-+ gtk_style_context_set_state(style, state_flags);
-+ gtk_style_context_get_border(style, gtk_style_context_get_state(style), border);
-+ gtk_style_context_restore(style);
-+}
-+
-+static void
- moz_gtk_add_style_padding(GtkStyleContext* style,
- gint* left, gint* top, gint* right, gint* bottom)
- {
- GtkBorder padding;
-
-- gtk_style_context_get_padding(style, 0, &padding);
-+ gtk_style_context_get_padding(style, gtk_style_context_get_state(style), &padding);
-
- *left += padding.left;
- *right += padding.right;
-@@ -2680,6 +2876,16 @@ moz_gtk_add_style_padding(GtkStyleContex
- *bottom += padding.bottom;
- }
-
-+static void
-+moz_gtk_get_style_padding(GtkStyleContext* style, GtkStateFlags state_flags,
-+ GtkBorder *padding)
-+{
-+ gtk_style_context_save(style);
-+ gtk_style_context_set_state(style, state_flags);
-+ gtk_style_context_get_padding(style, gtk_style_context_get_state(style), padding);
-+ gtk_style_context_restore(style);
-+}
-+
- gint
- moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
- gint* right, gint* bottom, GtkTextDirection direction,
-@@ -2694,37 +2900,35 @@ moz_gtk_get_widget_border(GtkThemeWidget
- case MOZ_GTK_TOOLBAR_BUTTON:
- {
- ensure_button_widget();
-- style = gtk_widget_get_style_context(gButtonWidget);
--
-- *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget));
-
-- if (widget == MOZ_GTK_TOOLBAR_BUTTON) {
-- gtk_style_context_save(style);
-- gtk_style_context_add_class(style, "image-button");
-- }
--
-- moz_gtk_add_style_padding(style, left, top, right, bottom);
--
-- if (widget == MOZ_GTK_TOOLBAR_BUTTON)
-- gtk_style_context_restore(style);
-+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButton.widget));
-+ moz_gtk_add_style_padding(gButton.button.style, left, top, right, bottom);
-
- // XXX: Subtract 1 pixel from the border to account for the added
- // -moz-focus-inner border (Bug 1228281).
- *left -= 1; *top -= 1; *right -= 1; *bottom -= 1;
-- moz_gtk_add_style_border(style, left, top, right, bottom);
-+ moz_gtk_add_style_border(gButton.button.style, left, top, right, bottom);
-+
- return MOZ_GTK_SUCCESS;
- }
- case MOZ_GTK_ENTRY:
- {
- ensure_entry_widget();
-- style = gtk_widget_get_style_context(gEntryWidget);
-
- // XXX: Subtract 1 pixel from the padding to account for the default
- // padding in forms.css. See bug 1187385.
- *left = *top = *right = *bottom = -1;
-- moz_gtk_add_style_padding(style, left, top, right, bottom);
-- moz_gtk_add_style_border(style, left, top, right, bottom);
-
-+ moz_gtk_add_style_padding(gEntry.entry.style, left, top, right, bottom);
-+ moz_gtk_add_style_border(gEntry.entry.style, left, top, right, bottom);
-+
-+ return MOZ_GTK_SUCCESS;
-+ }
-+ case MOZ_GTK_TOOLTIP:
-+ {
-+ ensure_tooltip_widget();
-+ moz_gtk_add_style_padding(gTooltip.tooltip.style, left, top, right, bottom);
-+ moz_gtk_add_style_border(gTooltip.tooltip.style, left, top, right, bottom);
- return MOZ_GTK_SUCCESS;
- }
- case MOZ_GTK_TREEVIEW:
-@@ -2759,7 +2963,7 @@ moz_gtk_get_widget_border(GtkThemeWidget
- break;
- case MOZ_GTK_DROPDOWN_ENTRY:
- ensure_combo_box_entry_widgets();
-- w = gComboBoxEntryTextareaWidget;
-+ w = gComboBoxEntryTextarea.widget;
- break;
- case MOZ_GTK_DROPDOWN_ARROW:
- ensure_combo_box_entry_widgets();
-@@ -2795,7 +2999,7 @@ moz_gtk_get_widget_border(GtkThemeWidget
-
- if (!wide_separators) {
- style = gtk_widget_get_style_context(gComboBoxSeparatorWidget);
-- gtk_style_context_get_border(style, 0, &border);
-+ gtk_style_context_get_border(style, gtk_style_context_get_state(style), &border);
- separator_width = border.left;
- }
- }
-@@ -2814,14 +3018,17 @@ moz_gtk_get_widget_border(GtkThemeWidget
- w = gTabWidget;
- break;
- case MOZ_GTK_PROGRESSBAR:
-- ensure_progress_widget();
-- w = gProgressWidget;
-- break;
-+ {
-+ ensure_progress_widget();
-+ moz_gtk_add_style_border(gProgressBar.progress.styleTrough,
-+ left, top, right, bottom);
-+ return MOZ_GTK_SUCCESS;
-+ }
- case MOZ_GTK_SPINBUTTON_ENTRY:
- case MOZ_GTK_SPINBUTTON_UP:
- case MOZ_GTK_SPINBUTTON_DOWN:
- ensure_spin_widget();
-- w = gSpinWidget;
-+ w = gSpin.widget;
- break;
- case MOZ_GTK_SCALE_HORIZONTAL:
- ensure_scale_widget();
-@@ -2840,12 +3047,13 @@ moz_gtk_get_widget_border(GtkThemeWidget
- {
- if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) {
- ensure_checkbox_widget();
-- w = gCheckboxWidget;
-+ w = gCheckbox.widget;
-+ style = gCheckbox.check.styleCheck;
- } else {
- ensure_radiobutton_widget();
-- w = gRadiobuttonWidget;
-+ w = gRadiobutton.widget;
-+ style = gRadiobutton.check.styleCheck;
- }
-- style = gtk_widget_get_style_context(w);
-
- *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
- moz_gtk_add_style_border(style,
-@@ -2904,7 +3112,6 @@ moz_gtk_get_widget_border(GtkThemeWidget
- case MOZ_GTK_MENUSEPARATOR:
- /* These widgets have no borders.*/
- case MOZ_GTK_SPINBUTTON:
-- case MOZ_GTK_TOOLTIP:
- case MOZ_GTK_WINDOW:
- case MOZ_GTK_RESIZER:
- case MOZ_GTK_MENUARROW:
-@@ -2978,6 +3185,32 @@ moz_gtk_get_combo_box_entry_button_size(
- }
-
- gint
-+moz_gtk_get_entry_height(gint* height)
-+{
-+ GtkRequisition requisition;
-+ ensure_entry_widget();
-+
-+ gtk_widget_get_preferred_size(gEntry.widget, NULL, &requisition);
-+ *height = requisition.height;
-+
-+ return MOZ_GTK_SUCCESS;
-+}
-+
-+
-+gint
-+moz_gtk_get_button_height(gint* height)
-+{
-+ GtkRequisition requisition;
-+ ensure_entry_widget();
-+
-+ gtk_widget_get_preferred_size(gButton.widget, NULL, &requisition);
-+ *height = requisition.height;
-+
-+ return MOZ_GTK_SUCCESS;
-+}
-+
-+
-+gint
- moz_gtk_get_tab_scroll_arrow_size(gint* width, gint* height)
- {
- gint arrow_size;
-@@ -3030,7 +3263,7 @@ moz_gtk_get_toolbar_separator_width(gint
- "separator-width", &separator_width,
- NULL);
- /* Just in case... */
-- gtk_style_context_get_border(style, 0, &border);
-+ gtk_style_context_get_border(style, gtk_style_context_get_state(style), &border);
- *size = MAX(*size, (wide_separators ? separator_width : border.left));
- return MOZ_GTK_SUCCESS;
- }
-@@ -3072,7 +3305,7 @@ moz_gtk_get_menu_separator_height(gint *
- border_width = gtk_container_get_border_width(GTK_CONTAINER(gMenuSeparatorWidget));
-
- style = gtk_widget_get_style_context(gMenuSeparatorWidget);
-- gtk_style_context_get_padding(style, 0, &padding);
-+ gtk_style_context_get_padding(style, gtk_style_context_get_state(style), &padding);
-
- gtk_style_context_save(style);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_SEPARATOR);
-@@ -3130,15 +3363,21 @@ moz_gtk_get_scrollbar_metrics(MozGtkScro
- {
- ensure_scrollbar_widget();
-
-- gtk_widget_style_get (gHorizScrollbarWidget,
-+ gtk_widget_style_get (gHorizScrollbar.widget,
- "slider_width", &metrics->slider_width,
- "trough_border", &metrics->trough_border,
- "stepper_size", &metrics->stepper_size,
- "stepper_spacing", &metrics->stepper_spacing,
- NULL);
-
-- metrics->min_slider_size =
-- gtk_range_get_min_slider_size(GTK_RANGE(gHorizScrollbarWidget));
-+ if (!gtk_check_version(3,19,7)) {
-+ gtk_style_context_get(gVertScrollbar.scroll.styleSlider,
-+ gtk_style_context_get_state(gVertScrollbar.scroll.styleSlider),
-+ "min-height", &metrics->min_slider_size, NULL);
-+ } else {
-+ metrics->min_slider_size =
-+ gtk_range_get_min_slider_size(GTK_RANGE(gVertScrollbar.widget));
-+ }
-
- return MOZ_GTK_SUCCESS;
- }
-@@ -3163,7 +3402,7 @@ moz_gtk_images_in_buttons()
- GtkSettings* settings;
-
- ensure_button_widget();
-- settings = gtk_widget_get_settings(gButtonWidget);
-+ settings = gtk_widget_get_settings(gButton.widget);
-
- g_object_get(settings, "gtk-button-images", &result, NULL);
- return result;
-@@ -3191,7 +3430,7 @@ moz_gtk_widget_paint(GtkThemeWidgetType
- }
- ensure_button_widget();
- return moz_gtk_button_paint(cr, rect, state,
-- (GtkReliefStyle) flags, gButtonWidget,
-+ (GtkReliefStyle) flags, gButton.widget,
- direction);
- break;
- case MOZ_GTK_CHECKBUTTON:
-@@ -3241,7 +3480,7 @@ moz_gtk_widget_paint(GtkThemeWidgetType
- case MOZ_GTK_SPINBUTTON_ENTRY:
- ensure_spin_widget();
- return moz_gtk_entry_paint(cr, rect, state,
-- gSpinWidget, direction);
-+ &gSpin, direction);
- break;
- case MOZ_GTK_GRIPPER:
- return moz_gtk_gripper_paint(cr, rect, state,
-@@ -3268,7 +3507,7 @@ moz_gtk_widget_paint(GtkThemeWidgetType
- case MOZ_GTK_ENTRY:
- ensure_entry_widget();
- return moz_gtk_entry_paint(cr, rect, state,
-- gEntryWidget, direction);
-+ &gEntry, direction);
- break;
- case MOZ_GTK_DROPDOWN:
- return moz_gtk_combo_box_paint(cr, rect, state, direction);
-@@ -3280,7 +3519,7 @@ moz_gtk_widget_paint(GtkThemeWidgetType
- case MOZ_GTK_DROPDOWN_ENTRY:
- ensure_combo_box_entry_widgets();
- return moz_gtk_entry_paint(cr, rect, state,
-- gComboBoxEntryTextareaWidget, direction);
-+ &gComboBoxEntryTextarea, direction);
- break;
- case MOZ_GTK_CHECKBUTTON_CONTAINER:
- case MOZ_GTK_RADIOBUTTON_CONTAINER:
-@@ -3332,7 +3571,7 @@ moz_gtk_widget_paint(GtkThemeWidgetType
- (GtkArrowType) flags, direction);
- break;
- case MOZ_GTK_MENUBAR:
-- return moz_gtk_menu_bar_paint(cr, rect, direction);
-+ return moz_gtk_menu_bar_paint(cr, rect, state, direction);
- break;
- case MOZ_GTK_MENUPOPUP:
- return moz_gtk_menu_popup_paint(cr, rect, direction);
-@@ -3383,7 +3622,7 @@ GtkWidget* moz_gtk_get_scrollbar_widget(
- {
- MOZ_ASSERT(is_initialized, "Forgot to call moz_gtk_init()");
- ensure_scrollbar_widget();
-- return gHorizScrollbarWidget;
-+ return gVertScrollbar.widget;
- }
-
- gboolean moz_gtk_has_scrollbar_buttons(void)
-@@ -3391,7 +3630,7 @@ gboolean moz_gtk_has_scrollbar_buttons(v
- gboolean backward, forward, secondary_backward, secondary_forward;
- MOZ_ASSERT(is_initialized, "Forgot to call moz_gtk_init()");
- ensure_scrollbar_widget();
-- gtk_widget_style_get (gHorizScrollbarWidget,
-+ gtk_widget_style_get (gHorizScrollbar.widget,
- "has-backward-stepper", &backward,
- "has-forward-stepper", &forward,
- "has-secondary-backward-stepper", &secondary_backward,
-@@ -3403,8 +3642,8 @@ gboolean moz_gtk_has_scrollbar_buttons(v
- gint
- moz_gtk_shutdown()
- {
-- if (gTooltipWidget)
-- gtk_widget_destroy(gTooltipWidget);
-+ moz_gtk_widget_free(&gTooltip);
-+
- /* This will destroy all of our widgets */
- if (gProtoWindow)
- gtk_widget_destroy(gProtoWindow);
-@@ -3415,17 +3654,19 @@ moz_gtk_shutdown()
-
- gProtoWindow = NULL;
- gProtoLayout = NULL;
-- gButtonWidget = NULL;
-+
-+ // MozWidgets
-+ moz_gtk_widget_free(&gButton);
- gToggleButtonWidget = NULL;
- gButtonArrowWidget = NULL;
-- gCheckboxWidget = NULL;
-- gRadiobuttonWidget = NULL;
-- gHorizScrollbarWidget = NULL;
-- gVertScrollbarWidget = NULL;
-- gSpinWidget = NULL;
-+ moz_gtk_widget_free(&gCheckbox);
-+ moz_gtk_widget_free(&gRadiobutton);
-+ moz_gtk_widget_free(&gHorizScrollbar);
-+ moz_gtk_widget_free(&gVertScrollbar);
-+ moz_gtk_widget_free(&gSpin);
- gHScaleWidget = NULL;
- gVScaleWidget = NULL;
-- gEntryWidget = NULL;
-+ moz_gtk_widget_free(&gEntry);
- gComboBoxWidget = NULL;
- gComboBoxButtonWidget = NULL;
- gComboBoxSeparatorWidget = NULL;
-@@ -3433,14 +3674,13 @@ moz_gtk_shutdown()
- gComboBoxEntryWidget = NULL;
- gComboBoxEntryButtonWidget = NULL;
- gComboBoxEntryArrowWidget = NULL;
-- gComboBoxEntryTextareaWidget = NULL;
-+ moz_gtk_widget_free(&gComboBoxEntryTextarea);
- gHandleBoxWidget = NULL;
- gToolbarWidget = NULL;
- gStatusbarWidget = NULL;
- gFrameWidget = NULL;
-- gProgressWidget = NULL;
-+ moz_gtk_widget_free(&gProgressBar);
- gTabWidget = NULL;
-- gTooltipWidget = NULL;
- gMenuBarWidget = NULL;
- gMenuBarItemWidget = NULL;
- gMenuPopupWidget = NULL;
-diff -up firefox-47.0/widget/gtk/gtkdrawing.h.gtk3-20 firefox-47.0/widget/gtk/gtkdrawing.h
---- firefox-47.0/widget/gtk/gtkdrawing.h.gtk3-20 2016-05-12 19:13:34.000000000 +0200
-+++ firefox-47.0/widget/gtk/gtkdrawing.h 2016-06-23 10:21:37.072462099 +0200
-@@ -67,6 +67,13 @@ typedef enum {
- MOZ_GTK_TAB_SELECTED = 1 << 10
- } GtkTabFlags;
-
-+typedef struct {
-+ GType type;
-+ const gchar *name;
-+ const gchar *class1;
-+ const gchar *class2;
-+} GtkCssNode;
-+
- /** flags for menuitems **/
- typedef enum {
- /* menuitem is part of the menubar */
-@@ -396,6 +403,9 @@ void
- moz_gtk_get_arrow_size(GtkThemeWidgetType widgetType,
- gint* width, gint* height);
-
-+gint moz_gtk_get_entry_height(gint* height);
-+gint moz_gtk_get_button_height(gint* height);
-+
- /**
- * Get the desired size of a toolbar separator
- * size: [OUT] the desired width
-@@ -466,6 +476,12 @@ gboolean moz_gtk_images_in_buttons(void)
- */
- gboolean moz_gtk_has_scrollbar_buttons(void);
-
-+
-+GtkStyleContext *
-+moz_gtk_style_create(GtkCssNode *node, GtkStyleContext *parent);
-+
-+
-+
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
-diff -up firefox-47.0/widget/gtk/mozgtk/mozgtk.c.gtk3-20 firefox-47.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-47.0/widget/gtk/mozgtk/mozgtk.c.gtk3-20 2016-05-12 19:13:34.000000000 +0200
-+++ firefox-47.0/widget/gtk/mozgtk/mozgtk.c 2016-06-23 10:26:36.495774041 +0200
-@@ -504,9 +504,15 @@ STUB(gtk_window_set_type_hint)
- STUB(gtk_window_set_wmclass)
- STUB(gtk_window_unfullscreen)
- STUB(gtk_window_unmaximize)
-+STUB(gtk_widget_get_preferred_height_and_baseline_for_width)
-+STUB(gtk_entry_get_text_area)
-+STUB(gtk_check_menu_item_get_type)
-+STUB(gtk_spin_button_get_type)
-+STUB(gtk_button_get_type)
- #endif
-
- #ifdef GTK3_SYMBOLS
-+STUB(gtk_box_new)
- STUB(gdk_device_get_source)
- STUB(gdk_device_manager_get_client_pointer)
- STUB(gdk_disable_multidevice)
-@@ -581,6 +587,15 @@ STUB(gtk_color_chooser_get_type)
- STUB(gtk_color_chooser_set_rgba)
- STUB(gtk_color_chooser_get_rgba)
- STUB(gtk_color_chooser_set_use_alpha)
-+STUB(gtk_style_context_get_path)
-+STUB(gtk_widget_path_append_for_widget)
-+STUB(gtk_widget_path_copy)
-+STUB(gtk_widget_path_iter_set_object_name)
-+STUB(gtk_widget_path_iter_add_class)
-+STUB(gtk_widget_path_iter_get_state)
-+STUB(gtk_style_context_set_parent)
-+STUB(gtk_widget_path_unref)
-+STUB(gtk_tooltip_get_type)
- #endif
-
- #ifdef GTK2_SYMBOLS
-diff -up firefox-47.0/widget/gtk/nsLookAndFeel.cpp.gtk3-20 firefox-47.0/widget/gtk/nsLookAndFeel.cpp
---- firefox-47.0/widget/gtk/nsLookAndFeel.cpp.gtk3-20 2016-06-01 06:11:44.000000000 +0200
-+++ firefox-47.0/widget/gtk/nsLookAndFeel.cpp 2016-06-23 10:21:37.073462100 +0200
-@@ -353,14 +353,18 @@ nsLookAndFeel::NativeGetColor(ColorID aI
- case eColorID_activeborder:
- // active window border
- gtk_style_context_get_border_color(mBackgroundStyle,
-- GTK_STATE_FLAG_NORMAL, &gdk_color);
-+ gtk_style_context_get_state(mBackgroundStyle),
-+ &gdk_color);
- aColor = GDK_RGBA_TO_NS_RGBA(gdk_color);
- break;
- case eColorID_inactiveborder:
- // inactive window border
-+ gtk_style_context_save(mBackgroundStyle);
-+ gtk_style_context_set_state(mBackgroundStyle, GTK_STATE_FLAG_INSENSITIVE);
- gtk_style_context_get_border_color(mBackgroundStyle,
-- GTK_STATE_FLAG_INSENSITIVE,
-+ gtk_style_context_get_state(mBackgroundStyle),
- &gdk_color);
-+ gtk_style_context_restore(mBackgroundStyle);
- aColor = GDK_RGBA_TO_NS_RGBA(gdk_color);
- break;
- case eColorID_graytext: // disabled text in windows, menus, etc.
-@@ -369,9 +373,12 @@ nsLookAndFeel::NativeGetColor(ColorID aI
- break;
- case eColorID_inactivecaption:
- // inactive window caption
-+ gtk_style_context_save(mBackgroundStyle);
-+ gtk_style_context_set_state(mBackgroundStyle, GTK_STATE_FLAG_INSENSITIVE);
- gtk_style_context_get_background_color(mBackgroundStyle,
-- GTK_STATE_FLAG_INSENSITIVE,
-+ gtk_style_context_get_state(mBackgroundStyle),
- &gdk_color);
-+ gtk_style_context_restore(mBackgroundStyle);
- aColor = GDK_RGBA_TO_NS_RGBA(gdk_color);
- break;
- #endif
-@@ -497,13 +504,17 @@ nsLookAndFeel::NativeGetColor(ColorID aI
- case eColorID__moz_buttondefault:
- // default button border color
- gtk_style_context_get_border_color(mButtonStyle,
-- GTK_STATE_FLAG_NORMAL, &gdk_color);
-+ gtk_style_context_get_state(mButtonStyle),
-+ &gdk_color);
- aColor = GDK_RGBA_TO_NS_RGBA(gdk_color);
- break;
- case eColorID__moz_buttonhoverface:
-+ gtk_style_context_save(mButtonStyle);
-+ gtk_style_context_set_state(mButtonStyle, GTK_STATE_FLAG_PRELIGHT);
- gtk_style_context_get_background_color(mButtonStyle,
-- GTK_STATE_FLAG_PRELIGHT,
-+ gtk_style_context_get_state(mButtonStyle),
- &gdk_color);
-+ gtk_style_context_restore(mButtonStyle);
- aColor = GDK_RGBA_TO_NS_RGBA(gdk_color);
- break;
- case eColorID__moz_buttonhovertext:
-@@ -1019,6 +1030,29 @@ create_context(GtkWidgetPath *path)
- }
- #endif
-
-+GtkStyleContext*
-+CreateStyleForWidget(GtkWidget* aWidget, GtkStyleContext* aParentStyle)
-+{
-+ GtkWidgetPath* path =
-+ gtk_widget_path_copy(gtk_style_context_get_path(aParentStyle));
-+
-+ // Work around https://bugzilla.gnome.org/show_bug.cgi?id=767312
-+ // which exists in GTK+ 3.20.
-+ gtk_widget_get_style_context(aWidget);
-+
-+ gtk_widget_path_append_for_widget(path, aWidget);
-+ // Release any floating reference on aWidget.
-+ g_object_ref_sink(aWidget);
-+ g_object_unref(aWidget);
-+
-+ GtkStyleContext *context = gtk_style_context_new();
-+ gtk_style_context_set_path(context, path);
-+ gtk_style_context_set_parent(context, aParentStyle);
-+ gtk_widget_path_unref(path);
-+
-+ return context;
-+}
-+
- void
- nsLookAndFeel::Init()
- {
-@@ -1122,26 +1156,36 @@ nsLookAndFeel::Init()
- style = create_context(path);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_SCROLLBAR);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TROUGH);
-- gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_background_color(style, gtk_style_context_get_state(style), &color);
- sMozScrollbar = GDK_RGBA_TO_NS_RGBA(color);
- g_object_unref(style);
-
- // Window colors
- style = create_context(path);
-- gtk_style_context_save(style);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_BACKGROUND);
-- gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_background_color(style, gtk_style_context_get_state(style), &color);
- sMozWindowBackground = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sMozWindowText = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_restore(style);
-+ g_object_unref(style);
-
- // tooltip foreground and background
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_BACKGROUND);
-- gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ GtkCssNode tooltipPath[] = {
-+ { GTK_TYPE_TOOLTIP, "tooltip", "background", NULL},
-+ };
-+ style = moz_gtk_style_create(tooltipPath, NULL);
-+ gtk_style_context_get_background_color(style, gtk_style_context_get_state(style), &color);
- sInfoBackground = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ {
-+ GtkStyleContext* boxStyle =
-+ CreateStyleForWidget(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0),
-+ style);
-+ GtkStyleContext* labelStyle =
-+ CreateStyleForWidget(gtk_label_new(nullptr), boxStyle);
-+ gtk_style_context_get_color(labelStyle, GTK_STATE_FLAG_NORMAL, &color);
-+ g_object_unref(labelStyle);
-+ g_object_unref(boxStyle);
-+ }
- sInfoText = GDK_RGBA_TO_NS_RGBA(color);
- g_object_unref(style);
-
-@@ -1156,20 +1200,26 @@ nsLookAndFeel::Init()
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
-
- style = gtk_widget_get_style_context(accel_label);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sMenuText = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_INSENSITIVE, &color);
-+ gtk_style_context_save(style);
-+ gtk_style_context_set_state(style, GTK_STATE_FLAG_INSENSITIVE);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sMenuTextInactive = GDK_RGBA_TO_NS_RGBA(color);
-+ gtk_style_context_restore(style);
-
- style = gtk_widget_get_style_context(menu);
-- gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_background_color(style, gtk_style_context_get_state(style), &color);
- sMenuBackground = GDK_RGBA_TO_NS_RGBA(color);
-
- style = gtk_widget_get_style_context(menuitem);
-- gtk_style_context_get_background_color(style, GTK_STATE_FLAG_PRELIGHT, &color);
-+ gtk_style_context_save(style);
-+ gtk_style_context_set_state(style, GTK_STATE_FLAG_PRELIGHT);
-+ gtk_style_context_get_background_color(style, gtk_style_context_get_state(style), &color);
- sMenuHover = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_PRELIGHT, &color);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sMenuHoverText = GDK_RGBA_TO_NS_RGBA(color);
-+ gtk_style_context_restore(style);
-
- g_object_unref(menu);
- #endif
-@@ -1278,44 +1328,54 @@ nsLookAndFeel::Init()
- GDK_COLOR_TO_NS_RGB(style->dark[GTK_STATE_NORMAL]);
- }
- #else
-+ GtkCssNode labelPath[] = {
-+ { GTK_TYPE_LABEL, "label", "view", NULL },
-+ { G_TYPE_NONE, "selection", NULL, NULL }
-+ };
-+
-+ GtkStyleContext *styleLabel;
-+ GtkStyleContext *styleSelection;
-+ GtkBorder padding;
-+
- // Text colors
-- style = gtk_widget_get_style_context(textView);
-- gtk_style_context_save(style);
-- gtk_style_context_add_class(style, GTK_STYLE_CLASS_VIEW);
-- gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ styleLabel = moz_gtk_style_create(labelPath, NULL);
-+ styleSelection = moz_gtk_style_create(labelPath+1, styleLabel);
-+
-+ gtk_style_context_get_background_color(styleLabel, gtk_style_context_get_state(styleLabel), &color);
- sMozFieldBackground = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_color(styleLabel, gtk_style_context_get_state(styleLabel), &color);
- sMozFieldText = GDK_RGBA_TO_NS_RGBA(color);
-
- // Selected text and background
-- gtk_style_context_get_background_color(style,
-- static_cast<GtkStateFlags>(GTK_STATE_FLAG_FOCUSED|GTK_STATE_FLAG_SELECTED),
-- &color);
-+ gtk_style_context_get_background_color(styleSelection, gtk_style_context_get_state(styleSelection), &color);
- sTextSelectedBackground = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_get_color(style,
-- static_cast<GtkStateFlags>(GTK_STATE_FLAG_FOCUSED|GTK_STATE_FLAG_SELECTED),
-- &color);
-+ gtk_style_context_get_color(styleSelection, gtk_style_context_get_state(styleSelection), &color);
- sTextSelectedText = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_restore(style);
-
- // Button text, background, border
- style = gtk_widget_get_style_context(label);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sButtonText = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_PRELIGHT, &color);
-+ gtk_style_context_save(style);
-+ gtk_style_context_set_state(style, GTK_STATE_FLAG_PRELIGHT);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sButtonHoverText = GDK_RGBA_TO_NS_RGBA(color);
-+ gtk_style_context_restore(style);
-
- // Combobox text color
- style = gtk_widget_get_style_context(comboboxLabel);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sComboBoxText = GDK_RGBA_TO_NS_RGBA(color);
-
- // Menubar text and hover text colors
- style = gtk_widget_get_style_context(menuBar);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sMenuBarText = GDK_RGBA_TO_NS_RGBA(color);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_PRELIGHT, &color);
-+ gtk_style_context_save(style);
-+ gtk_style_context_set_state(style, GTK_STATE_FLAG_PRELIGHT);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sMenuBarHoverText = GDK_RGBA_TO_NS_RGBA(color);
-+ gtk_style_context_restore(style);
-
- // GTK's guide to fancy odd row background colors:
- // 1) Check if a theme explicitly defines an odd row color
-@@ -1328,7 +1388,7 @@ nsLookAndFeel::Init()
- // Get odd row background color
- gtk_style_context_save(style);
- gtk_style_context_add_region(style, GTK_STYLE_REGION_ROW, GTK_REGION_ODD);
-- gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_background_color(style, gtk_style_context_get_state(style), &color);
- sOddCellBackground = GDK_RGBA_TO_NS_RGBA(color);
- gtk_style_context_restore(style);
-
-@@ -1346,9 +1406,11 @@ nsLookAndFeel::Init()
- gtk_container_add(GTK_CONTAINER(parent), infoBar);
- gtk_container_add(GTK_CONTAINER(infoBarContent), infoBarLabel);
- style = gtk_widget_get_style_context(infoBarLabel);
-+ gtk_style_context_save(style);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_INFO);
-- gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
-+ gtk_style_context_get_color(style, gtk_style_context_get_state(style), &color);
- sInfoBarText = GDK_RGBA_TO_NS_RGBA(color);
-+ gtk_style_context_restore(style);
- #endif
- // Some themes have a unified menu bar, and support window dragging on it
- gboolean supports_menubar_drag = FALSE;
-diff -up firefox-47.0/widget/gtk/nsNativeThemeGTK.cpp.gtk3-20 firefox-47.0/widget/gtk/nsNativeThemeGTK.cpp
---- firefox-47.0/widget/gtk/nsNativeThemeGTK.cpp.gtk3-20 2016-06-01 06:11:44.000000000 +0200
-+++ firefox-47.0/widget/gtk/nsNativeThemeGTK.cpp 2016-06-23 10:21:37.074462101 +0200
-@@ -1570,9 +1570,6 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
- case NS_THEME_RADIO_CONTAINER:
- case NS_THEME_CHECKBOX_LABEL:
- case NS_THEME_RADIO_LABEL:
-- case NS_THEME_BUTTON:
-- case NS_THEME_DROPDOWN:
-- case NS_THEME_TOOLBAR_BUTTON:
- case NS_THEME_TREEVIEW_HEADER_CELL:
- {
- if (aWidgetType == NS_THEME_DROPDOWN) {
-@@ -1591,6 +1588,21 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
- aResult->height += border.top + border.bottom;
- }
- break;
-+ case NS_THEME_BUTTON:
-+ case NS_THEME_DROPDOWN:
-+ case NS_THEME_TOOLBAR_BUTTON:
-+ {
-+ moz_gtk_get_button_height(&aResult->height);
-+ }
-+ break;
-+ case NS_THEME_FOCUS_OUTLINE:
-+ case NS_THEME_NUMBER_INPUT:
-+ case NS_THEME_TEXTFIELD:
-+ case NS_THEME_TEXTFIELD_MULTILINE:
-+ {
-+ moz_gtk_get_entry_height(&aResult->height);
-+ }
-+ break;
- case NS_THEME_TOOLBAR_SEPARATOR:
- {
- gint separator_width;
diff --git a/iceweasel.desktop b/iceweasel.desktop
index c4a338cc6865..aabf411c6e7b 100644
--- a/iceweasel.desktop
+++ b/iceweasel.desktop
@@ -1,66 +1,29 @@
[Desktop Entry]
-Encoding=UTF-8
+Version=1.0
Name=Iceweasel
-Name[bg]=Iceweasel
-Name[ca]=Iceweasel
-Name[cs]=Iceweasel
-Name[el]=Iceweasel
-Name[es]=Iceweasel
-Name[fa]=Iceweasel
-Name[fi]=Iceweasel
-Name[fr]=Iceweasel
-Name[hu]=Iceweasel
-Name[it]=Iceweasel
-Name[ja]=Iceweasel
-Name[ko]=Iceweasel
-Name[nb]=Iceweasel
-Name[nl]=Iceweasel
-Name[nn]=Iceweasel
-Name[no]=Iceweasel
-Name[pl]=Iceweasel
-Name[pt]=Iceweasel
-Name[pt_BR]=Iceweasel
-Name[ru]=Iceweasel
-Name[sk]=Iceweasel
-Name[sv]=Iceweasel
-Comment=Browse the World Wide Web
-Comment[bg]=Сърфиране в Мрежата
-Comment[ca]=Navegueu per el web
-Comment[cs]=Prohlížení stránek World Wide Webu
-Comment[de]=Im Internet surfen
-Comment[el]=Περιηγηθείτε στον παγκόσμιο ιστό
-Comment[es]=Navegue por la web
-Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
-Comment[fi]=Selaa Internetin WWW-sivuja
-Comment[fr]=Navigue sur Internet
-Comment[hu]=A világháló böngészése
-Comment[it]=Esplora il web
-Comment[ja]=ウェブを閲覧します
-Comment[ko]=웹을 돌아 다닙니다
-Comment[nb]=Surf på nettet
-Comment[nl]=Verken het internet
-Comment[nn]=Surf på nettet
-Comment[no]=Surf på nettet
-Comment[pl]=Przeglądanie stron WWW
-Comment[pt]=Navegue na Internet
-Comment[pt_BR]=Navegue na Internet
-Comment[ru]=Обозреватель Всемирной Паутины
-Comment[sk]=Prehliadanie internetu
-Comment[sv]=Surfa på webben
GenericName=Web Browser
-GenericName[bg]=Интернет браузър
+GenericName[ar]=متصفح وِب
+GenericName[ast]=Restolador Web
+GenericName[bn]=ওয়েব ব্রাউজার
GenericName[ca]=Navegador web
GenericName[cs]=Webový prohlížeč
+GenericName[da]=Webbrowser
GenericName[de]=Webbrowser
-GenericName[el]=Περιηγητής ιστού
+GenericName[el]=Περιηγητής διαδικτύου
GenericName[es]=Navegador web
+GenericName[et]=Veebibrauser
GenericName[fa]=مرورگر اینترنتی
GenericName[fi]=WWW-selain
GenericName[fr]=Navigateur Web
+GenericName[gl]=Navegador Web
+GenericName[he]=דפדפן אינטרנט
+GenericName[hr]=Web preglednik
GenericName[hu]=Webböngésző
GenericName[it]=Browser Web
GenericName[ja]=ウェブ・ブラウザ
GenericName[ko]=웹 브라우저
+GenericName[ku]=Geroka torê
+GenericName[lt]=Interneto naršyklė
GenericName[nb]=Nettleser
GenericName[nl]=Webbrowser
GenericName[nn]=Nettlesar
@@ -68,38 +31,280 @@ GenericName[no]=Nettleser
GenericName[pl]=Przeglądarka WWW
GenericName[pt]=Navegador Web
GenericName[pt_BR]=Navegador Web
-GenericName[ru]=Интернет-браузер
+GenericName[ro]=Navigator Internet
+GenericName[ru]=Веб-браузер
GenericName[sk]=Internetový prehliadač
+GenericName[sl]=Spletni brskalnik
GenericName[sv]=Webbläsare
-X-GNOME-FullName=Iceweasel Web Browser
-X-GNOME-FullName[bg]=Интернет браузър (Iceweasel)
-X-GNOME-FullName[ca]=Navegador web Iceweasel
-X-GNOME-FullName[cs]=Iceweasel Webový prohlížeč
-X-GNOME-FullName[el]=Περιηγήτης Ιστού Iceweasel
-X-GNOME-FullName[es]=Navegador web Iceweasel
-X-GNOME-FullName[fa]=مرورگر اینترنتی Iceweasel
-X-GNOME-FullName[fi]=Iceweasel-selain
-X-GNOME-FullName[fr]=Navigateur Web Iceweasel
-X-GNOME-FullName[hu]=Iceweasel webböngésző
-X-GNOME-FullName[it]=Iceweasel Browser Web
-X-GNOME-FullName[ja]=Iceweasel ウェブ・ブラウザ
-X-GNOME-FullName[ko]=Iceweasel 웹 브라우저
-X-GNOME-FullName[nb]=Iceweasel Nettleser
-X-GNOME-FullName[nl]=Iceweasel webbrowser
-X-GNOME-FullName[nn]=Iceweasel Nettlesar
-X-GNOME-FullName[no]=Iceweasel Nettleser
-X-GNOME-FullName[pl]=Przeglądarka WWW Iceweasel
-X-GNOME-FullName[pt]=Iceweasel Navegador Web
-X-GNOME-FullName[pt_BR]=Navegador Web Iceweasel
-X-GNOME-FullName[ru]=Интернет-браузер Iceweasel
-X-GNOME-FullName[sk]=Internetový prehliadač Iceweasel
-X-GNOME-FullName[sv]=Webbläsaren Iceweasel
-Exec=/usr/lib/iceweasel/iceweasel %u
+GenericName[tr]=Web Tarayıcı
+GenericName[ug]=توركۆرگۈ
+GenericName[uk]=Веб-браузер
+GenericName[vi]=Trình duyệt Web
+GenericName[zh_CN]=网络浏览器
+GenericName[zh_TW]=網路瀏覽器
+Comment=Browse the Web
+Comment[ar]=تصفح الوِب
+Comment[ast]=Restola pela Rede
+Comment[bn]=ইন্টারনেট ব্রাউজ করুন
+Comment[ca]=Navegueu per el web
+Comment[cs]=Prohlížení stránek World Wide Webu
+Comment[da]=Surf på internettet
+Comment[de]=Im Internet surfen
+Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web)
+Comment[es]=Navegue por la web
+Comment[et]=Lehitse veebi
+Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
+Comment[fi]=Selaa Internetin WWW-sivuja
+Comment[fr]=Naviguer sur le Web
+Comment[gl]=Navegar pola rede
+Comment[he]=גלישה ברחבי האינטרנט
+Comment[hr]=Pretražite web
+Comment[hu]=A világháló böngészése
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧します
+Comment[ko]=웹을 돌아 다닙니다
+Comment[ku]=Li torê bigere
+Comment[lt]=Naršykite internete
+Comment[nb]=Surf på nettet
+Comment[nl]=Verken het internet
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pl]=Przeglądanie stron WWW
+Comment[pt]=Navegue na Internet
+Comment[pt_BR]=Navegue na Internet
+Comment[ro]=Navigați pe Internet
+Comment[ru]=Доступ в Интернет
+Comment[sk]=Prehliadanie internetu
+Comment[sl]=Brskajte po spletu
+Comment[sv]=Surfa på webben
+Comment[tr]=İnternet'te Gezinin
+Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ
+Comment[uk]=Перегляд сторінок Інтернету
+Comment[vi]=Để duyệt các trang web
+Comment[zh_CN]=浏览互联网
+Comment[zh_TW]=瀏覽網際網路
+Exec=iceweasel %u
+Icon=iceweasel
Terminal=false
-X-MultipleArgs=false
Type=Application
-Icon=iceweasel
-Categories=Network;WebBrowser;
-MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;
-StartupWMClass=Iceweasel
+MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true
+Categories=Network;WebBrowser;
+Keywords=web;browser;internet;
+Actions=new-window;new-private-window;
+
+[Desktop Action new-window]
+Name=New Window
+Name[ach]=Dirica manyen
+Name[af]=Nuwe venster
+Name[an]=Nueva finestra
+Name[ar]=نافذة جديدة
+Name[as]=নতুন উইন্ডো
+Name[ast]=Ventana nueva
+Name[az]=Yeni Pəncərə
+Name[be]=Новае акно
+Name[bg]=Нов прозорец
+Name[bn_BD]=নতুন উইন্ডো (N)
+Name[bn_IN]=নতুন উইন্ডো
+Name[br]=Prenestr nevez
+Name[brx]=गोदान उइन्ड'(N)
+Name[bs]=Novi prozor
+Name[ca]=Finestra nova
+Name[cak]=K'ak'a' tzuwäch
+Name[cs]=Nové okno
+Name[cy]=Ffenestr Newydd
+Name[da]=Nyt vindue
+Name[de]=Neues Fenster
+Name[dsb]=Nowe wokno
+Name[el]=Νέο παράθυρο
+Name[en_GB]=New Window
+Name[en_US]=New Window
+Name[en_ZA]=New Window
+Name[eo]=Nova fenestro
+Name[es_AR]=Nueva ventana
+Name[es_CL]=Nueva ventana
+Name[es_ES]=Nueva ventana
+Name[es_MX]=Nueva ventana
+Name[et]=Uus aken
+Name[eu]=Leiho berria
+Name[fa]=پنجره جدید
+Name[ff]=Henorde Hesere
+Name[fi]=Uusi ikkuna
+Name[fr]=Nouvelle fenêtre
+Name[fy_NL]=Nij finster
+Name[ga_IE]=Fuinneog Nua
+Name[gd]=Uinneag ùr
+Name[gl]=Nova xanela
+Name[gn]=Ovetã pyahu
+Name[gu_IN]=નવી વિન્ડો
+Name[he]=חלון חדש
+Name[hi_IN]=नया विंडो
+Name[hr]=Novi prozor
+Name[hsb]=Nowe wokno
+Name[hu]=Új ablak
+Name[hy_AM]=Նոր Պատուհան
+Name[id]=Jendela Baru
+Name[is]=Nýr gluggi
+Name[it]=Nuova finestra
+Name[ja]=新しいウィンドウ
+Name[ja_JP-mac]=新規ウインドウ
+Name[ka]=ახალი ფანჯარა
+Name[kk]=Жаңа терезе
+Name[km]=បង្អួចថ្មី
+Name[kn]=ಹೊಸ ಕಿಟಕಿ
+Name[ko]=새 창
+Name[kok]=नवें जनेल
+Name[ks]=نئئ وِنڈو
+Name[lij]=Neuvo barcon
+Name[lo]=ຫນ້າຕ່າງໃຫມ່
+Name[lt]=Naujas langas
+Name[ltg]=Jauns lūgs
+Name[lv]=Jauns logs
+Name[mai]=नव विंडो
+Name[mk]=Нов прозорец
+Name[ml]=പുതിയ ജാലകം
+Name[mr]=नवीन पटल
+Name[ms]=Tetingkap Baru
+Name[my]=ဝင်းဒိုးအသစ်
+Name[nb_NO]=Nytt vindu
+Name[ne_NP]=नयाँ सञ्झ्याल
+Name[nl]=Nieuw venster
+Name[nn_NO]=Nytt vindauge
+Name[or]=ନୂତନ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
+Name[pl]=Nowe okno
+Name[pt_BR]=Nova janela
+Name[pt_PT]=Nova janela
+Name[rm]=Nova fanestra
+Name[ro]=Fereastră nouă
+Name[ru]=Новое окно
+Name[sat]=नावा विंडो (N)
+Name[si]=නව කවුළුවක්
+Name[sk]=Nové okno
+Name[sl]=Novo okno
+Name[son]=Zanfun taaga
+Name[sq]=Dritare e Re
+Name[sr]=Нови прозор
+Name[sv_SE]=Nytt fönster
+Name[ta]=புதிய சாளரம்
+Name[te]=కొత్త విండో
+Name[th]=หน้าต่างใหม่
+Name[tr]=Yeni pencere
+Name[tsz]=Eraatarakua jimpani
+Name[uk]=Нове вікно
+Name[ur]=نیا دریچہ
+Name[uz]=Yangi oyna
+Name[vi]=Cửa sổ mới
+Name[wo]=Palanteer bu bees
+Name[xh]=Ifestile entsha
+Name[zh_CN]=新建窗口
+Name[zh_TW]=開新視窗
+Exec=iceweasel --new-window %u
+
+[Desktop Action new-private-window]
+Name=New Private Window
+Name[ach]=Dirica manyen me mung
+Name[af]=Nuwe privaatvenster
+Name[an]=Nueva finestra privada
+Name[ar]=نافذة خاصة جديدة
+Name[as]=নতুন ব্যক্তিগত উইন্ডো
+Name[ast]=Ventana privada nueva
+Name[az]=Yeni Məxfi Pəncərə
+Name[be]=Новае акно адасаблення
+Name[bg]=Нов прозорец за поверително сърфиране
+Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
+Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
+Name[br]=Prenestr merdeiñ prevez nevez
+Name[brx]=गोदान प्राइभेट उइन्ड'
+Name[bs]=Novi privatni prozor
+Name[ca]=Finestra privada nova
+Name[cak]=K'ak'a' ichinan tzuwäch
+Name[cs]=Nové anonymní okno
+Name[cy]=Ffenestr Breifat Newydd
+Name[da]=Nyt privat vindue
+Name[de]=Neues privates Fenster
+Name[dsb]=Nowe priwatne wokno
+Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
+Name[en_GB]=New Private Window
+Name[en_US]=New Private Window
+Name[en_ZA]=New Private Window
+Name[eo]=Nova privata fenestro
+Name[es_AR]=Nueva ventana privada
+Name[es_CL]=Nueva ventana privada
+Name[es_ES]=Nueva ventana privada
+Name[es_MX]=Nueva ventana privada
+Name[et]=Uus privaatne aken
+Name[eu]=Leiho pribatu berria
+Name[fa]=پنجره ناشناس جدید
+Name[ff]=Henorde Suturo Hesere
+Name[fi]=Uusi yksityinen ikkuna
+Name[fr]=Nouvelle fenêtre de navigation privée
+Name[fy_NL]=Nij priveefinster
+Name[ga_IE]=Fuinneog Nua Phríobháideach
+Name[gd]=Uinneag phrìobhaideach ùr
+Name[gl]=Nova xanela privada
+Name[gn]=Ovetã ñemi pyahu
+Name[gu_IN]=નવી ખાનગી વિન્ડો
+Name[he]=חלון פרטי חדש
+Name[hi_IN]=नयी निजी विंडो
+Name[hr]=Novi privatni prozor
+Name[hsb]=Nowe priwatne wokno
+Name[hu]=Új privát ablak
+Name[hy_AM]=Սկսել Գաղտնի դիտարկում
+Name[id]=Jendela Mode Pribadi Baru
+Name[is]=Nýr huliðsgluggi
+Name[it]=Nuova finestra anonima
+Name[ja]=新しいプライベートウィンドウ
+Name[ja_JP-mac]=新規プライベートウインドウ
+Name[ka]=ახალი პირადი ფანჯარა
+Name[kk]=Жаңа жекелік терезе
+Name[km]=បង្អួចឯកជនថ្មី
+Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
+Name[ko]=새 사생활 보호 모드
+Name[kok]=नवो खाजगी विंडो
+Name[ks]=نْو پرایوٹ وینڈو
+Name[lij]=Nêuvo barcón privòu
+Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
+Name[lt]=Naujas privataus naršymo langas
+Name[ltg]=Jauns privatais lūgs
+Name[lv]=Jauns privātais logs
+Name[mai]=नया निज विंडो (W)
+Name[mk]=Нов приватен прозорец
+Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
+Name[mr]=नवीन वैयक्तिक पटल
+Name[ms]=Tetingkap Persendirian Baharu
+Name[my]=New Private Window
+Name[nb_NO]=Nytt privat vindu
+Name[ne_NP]=नयाँ निजी सञ्झ्याल
+Name[nl]=Nieuw privévenster
+Name[nn_NO]=Nytt privat vindauge
+Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
+Name[pl]=Nowe okno prywatne
+Name[pt_BR]=Nova janela privativa
+Name[pt_PT]=Nova janela privada
+Name[rm]=Nova fanestra privata
+Name[ro]=Fereastră privată nouă
+Name[ru]=Новое приватное окно
+Name[sat]=नावा निजेराक् विंडो (W )
+Name[si]=නව පුද්ගලික කවුළුව (W)
+Name[sk]=Nové okno v režime Súkromné prehliadanie
+Name[sl]=Novo zasebno okno
+Name[son]=Sutura zanfun taaga
+Name[sq]=Dritare e Re Private
+Name[sr]=Нови приватан прозор
+Name[sv_SE]=Nytt privat fönster
+Name[ta]=புதிய தனிப்பட்ட சாளரம்
+Name[te]=కొత్త ఆంతరంగిక విండో
+Name[th]=หน้าต่างส่วนตัวใหม่
+Name[tr]=Yeni gizli pencere
+Name[tsz]=Juchiiti eraatarakua jimpani
+Name[uk]=Приватне вікно
+Name[ur]=نیا نجی دریچہ
+Name[uz]=Yangi maxfiy oyna
+Name[vi]=Cửa sổ riêng tư mới
+Name[wo]=Panlanteeru biir bu bees
+Name[xh]=Ifestile yangasese entsha
+Name[zh_CN]=新建隐私浏览窗口
+Name[zh_TW]=新增隱私視窗
+Exec=iceweasel --private-window %u
diff --git a/libre.patch b/libre.patch
new file mode 100644
index 000000000000..65e65037e191
--- /dev/null
+++ b/libre.patch
@@ -0,0 +1,1400 @@
+diff --git a/browser/base/content/abouthome/aboutHome.css b/browser/base/content/abouthome/aboutHome.css
+index c0b02e257..dc726d41a 100644
+--- a/browser/base/content/abouthome/aboutHome.css
++++ b/browser/base/content/abouthome/aboutHome.css
+@@ -354,26 +354,46 @@ body[narrow] #restorePreviousSession::before {
+ width: 32px;
+ }
+
+-#aboutMozilla {
++#aboutGNU {
+ display: block;
+- position: relative; /* pin wordmark to edge of document, not of viewport */
+ -moz-box-ordinal-group: 0;
+ opacity: .5;
+ transition: opacity 150ms;
+ }
+
+-#aboutMozilla:hover {
++#aboutGNU:hover {
+ opacity: 1;
+ }
+
+-#aboutMozilla::before {
+- content: url("chrome://browser/content/abouthome/mozilla.png");
++#aboutGNU::before {
++ content: url("chrome://browser/content/abouthome/gnu_headshadow.png");
+ display: block;
+ position: absolute;
+ top: 12px;
+ right: 12px;
+- width: 69px;
+- height: 19px;
++ width: 200px;
++ height: 110px;
++}
++
++#aboutDRMfree {
++ display: block;
++ -moz-box-ordinal-group: 0;
++ opacity: .5;
++ transition: opacity 150ms;
++}
++
++#aboutDRMfree:hover {
++ opacity: 1;
++}
++
++#aboutDRMfree::before {
++ content: url("chrome://browser/content/abouthome/drm-free.png");
++ display: block;
++ position: absolute;
++ top: 12px;
++ left: 12px;
++ width: 120px;
++ height: 120px;
+ }
+
+ /* [HiDPI]
+@@ -446,9 +466,5 @@ body[narrow] #restorePreviousSession::before {
+ transform: scale(-0.5, 0.5) translateX(24px);
+ transform-origin: top center;
+ }
+-
+- #aboutMozilla::before {
+- content: url("chrome://browser/content/abouthome/mozilla@2x.png");
+- }
+ }
+
+diff --git a/browser/base/content/abouthome/aboutHome.js b/browser/base/content/abouthome/aboutHome.js
+index 50f3e01cd..5df008555 100644
+--- a/browser/base/content/abouthome/aboutHome.js
++++ b/browser/base/content/abouthome/aboutHome.js
+@@ -11,17 +11,13 @@
+ // * add a <span/> for it in aboutHome.xhtml
+ // * add an entry here in the proper ordering (based on spans)
+ // The <a/> part of the snippet will be linked to the corresponding url.
+-const DEFAULT_SNIPPETS_URLS = [
+- "https://www.mozilla.org/firefox/features/?utm_source=snippet&utm_medium=snippet&utm_campaign=default+feature+snippet"
+-, "https://addons.mozilla.org/firefox/?utm_source=snippet&utm_medium=snippet&utm_campaign=addons"
+-];
++const DEFAULT_SNIPPETS_URLS = [ "" ];
+
+-const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.
++const SNIPPETS_UPDATE_INTERVAL_MS = 86400000; // 1 Day.
+
+ // IndexedDB storage constants.
+ const DATABASE_NAME = "abouthome";
+ const DATABASE_VERSION = 1;
+-const DATABASE_STORAGE = "persistent";
+ const SNIPPETS_OBJECTSTORE_NAME = "snippets";
+ var searchText;
+
+diff --git a/browser/base/content/abouthome/aboutHome.xhtml b/browser/base/content/abouthome/aboutHome.xhtml
+index c288e732e..6d14ee773 100644
+--- a/browser/base/content/abouthome/aboutHome.xhtml
++++ b/browser/base/content/abouthome/aboutHome.xhtml
+@@ -48,10 +48,6 @@
+ </div>
+
+ <div id="snippetContainer">
+- <div id="defaultSnippets" hidden="true">
+- <span id="defaultSnippet1">&abouthome.defaultSnippet1.v1;</span>
+- <span id="defaultSnippet2">&abouthome.defaultSnippet2.v1;</span>
+- </div>
+ <span id="rightsSnippet" hidden="true">&abouthome.rightsSnippet;</span>
+ <div id="snippets"/>
+ </div>
+@@ -73,7 +69,7 @@
+ <button class="launchButton" id="restorePreviousSession">&historyRestoreLastSession.label;</button>
+ </div>
+
+- <a id="aboutMozilla" href="https://www.mozilla.org/about/?utm_source=about-home&amp;utm_medium=Referral"
+- aria-label="&abouthome.aboutMozilla.label;"/>
++ <a id="aboutGNU" href="https://www.gnu.org"></a>
++ <a id="aboutDRMfree" href="https://www.defectivebydesign.org/drm-free"></a>
+ </body>
+ </html>
+diff --git a/browser/base/jar.mn b/browser/base/jar.mn
+index 4dcd47c95..219019b20 100644
+--- a/browser/base/jar.mn
++++ b/browser/base/jar.mn
+@@ -31,7 +31,8 @@ browser.jar:
+ content/browser/abouthome/settings.png (content/abouthome/settings.png)
+ content/browser/abouthome/restore.png (content/abouthome/restore.png)
+ content/browser/abouthome/restore-large.png (content/abouthome/restore-large.png)
+- content/browser/abouthome/mozilla.png (content/abouthome/mozilla.png)
++ content/browser/abouthome/gnu_headshadow.png (content/abouthome/gnu_headshadow.png)
++ content/browser/abouthome/drm-free.png (content/abouthome/drm-free.png)
+ content/browser/abouthome/snippet1@2x.png (content/abouthome/snippet1@2x.png)
+ content/browser/abouthome/snippet2@2x.png (content/abouthome/snippet2@2x.png)
+ content/browser/abouthome/downloads@2x.png (content/abouthome/downloads@2x.png)
+@@ -42,7 +43,6 @@ browser.jar:
+ content/browser/abouthome/settings@2x.png (content/abouthome/settings@2x.png)
+ content/browser/abouthome/restore@2x.png (content/abouthome/restore@2x.png)
+ content/browser/abouthome/restore-large@2x.png (content/abouthome/restore-large@2x.png)
+- content/browser/abouthome/mozilla@2x.png (content/abouthome/mozilla@2x.png)
+
+ content/browser/aboutNetError.xhtml (content/aboutNetError.xhtml)
+
+diff --git a/browser/locales/en-US/chrome/browser/aboutHome.dtd b/browser/locales/en-US/chrome/browser/aboutHome.dtd
+index 7e3b57a79..6edc89d58 100644
+--- a/browser/locales/en-US/chrome/browser/aboutHome.dtd
++++ b/browser/locales/en-US/chrome/browser/aboutHome.dtd
+@@ -11,14 +11,6 @@
+
+ <!ENTITY abouthome.pageTitle "&brandFullName; Start Page">
+
+-<!-- LOCALIZATION NOTE (abouthome.defaultSnippet1.v1):
+- text in <a/> will be linked to the Firefox features page on mozilla.com
+--->
+-<!ENTITY abouthome.defaultSnippet1.v1 "Thanks for choosing Firefox! To get the most out of your browser, learn more about the <a>latest features</a>.">
+-<!-- LOCALIZATION NOTE (abouthome.defaultSnippet2.v1):
+- text in <a/> will be linked to the featured add-ons on addons.mozilla.org
+--->
+-<!ENTITY abouthome.defaultSnippet2.v1 "It’s easy to customize your Firefox exactly the way you want it. <a>Choose from thousands of add-ons</a>.">
+ <!-- LOCALIZATION NOTE (abouthome.rightsSnippet): text in <a/> will be linked to about:rights -->
+ <!ENTITY abouthome.rightsSnippet "&brandFullName; is free and open source software from the non-profit Mozilla Foundation. <a>Know your rights…</a>">
+
+diff --git a/browser/locales/en-US/chrome/browser-region/region.properties b/browser/locales/en-US/chrome/browser-region/region.properties
+index e078ed528..ce2c5ed4d 100644
+--- a/browser/locales/en-US/chrome/browser-region/region.properties
++++ b/browser/locales/en-US/chrome/browser-region/region.properties
+@@ -3,17 +3,12 @@
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+ # Default search engine
+-browser.search.defaultenginename=Google
++browser.search.defaultenginename=searx
+
+ # Search engine order (order displayed in the search bar dropdown)s
+-browser.search.order.1=Google
+-browser.search.order.2=Yahoo
+-browser.search.order.3=Bing
+-
+-# This is the default set of web based feed handlers shown in the reader
+-# selection UI
+-browser.contentHandlers.types.0.title=My Yahoo!
+-browser.contentHandlers.types.0.uri=https://add.my.yahoo.com/rss?url=%s
++browser.search.order.1=searx
++browser.search.order.2=DuckDuckGo HTML
++browser.search.order.3=DuckDuckGo Lite
+
+ # increment this number when anything gets changed in the list below. This will
+ # cause Firefox to re-read these prefs and inject any new handlers into the
+@@ -22,20 +17,10 @@ browser.contentHandlers.types.0.uri=https://add.my.yahoo.com/rss?url=%s
+ # don't make any spelling errors here.
+ gecko.handlerService.defaultHandlersVersion=4
+
+-# The default set of protocol handlers for webcal:
+-gecko.handlerService.schemes.webcal.0.name=30 Boxes
+-gecko.handlerService.schemes.webcal.0.uriTemplate=https://30boxes.com/external/widget?refer=ff&url=%s
+-
+-# The default set of protocol handlers for mailto:
+-gecko.handlerService.schemes.mailto.0.name=Yahoo! Mail
+-gecko.handlerService.schemes.mailto.0.uriTemplate=https://compose.mail.yahoo.com/?To=%s
+-gecko.handlerService.schemes.mailto.1.name=Gmail
+-gecko.handlerService.schemes.mailto.1.uriTemplate=https://mail.google.com/mail/?extsrc=mailto&url=%s
+-
+ # The default set of protocol handlers for irc:
+-gecko.handlerService.schemes.irc.0.name=Mibbit
+-gecko.handlerService.schemes.irc.0.uriTemplate=https://www.mibbit.com/?url=%s
++gecko.handlerService.schemes.irc.0.name=Freenode Web IRC
++gecko.handlerService.schemes.irc.0.uriTemplate=https://webchat.freenode.net
+
+ # The default set of protocol handlers for ircs:
+-gecko.handlerService.schemes.ircs.0.name=Mibbit
+-gecko.handlerService.schemes.ircs.0.uriTemplate=https://www.mibbit.com/?url=%s
++gecko.handlerService.schemes.ircs.0.name=Freenode Web IRC
++gecko.handlerService.schemes.ircs.0.uriTemplate=https://webchat.freenode.net
+diff --git a/browser/locales/generic/profile/bookmarks.html.in b/browser/locales/generic/profile/bookmarks.html.in
+index 5b7bdad69..19871732e 100644
+--- a/browser/locales/generic/profile/bookmarks.html.in
++++ b/browser/locales/generic/profile/bookmarks.html.in
+@@ -5,17 +5,15 @@
+ #define AB_CD ja
+ #endif
+
+-#define mozilla_icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwMDAsTBZbkNwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAABNElEQVQ4y8WSsU0DURBE3yyWIaAJaqAAN4DPSL6AlIACKIEOyJEgRsIgOOkiInJqgAKowNg7BHdn7MOksNl+zZ//dvbDf5cAiklp22BdVtXdeTEpDYDB9m1VzU6OJuVp2NdEQCaI96fH2YHG4+mDduKYNMYINTcjcGbXzQVDEAphG0k48zUsajIbnAiMIXThpW8EICE0RAK4dvoKg9NIcTiQ589otyHOZLnwqK5nLwBFUZ4igc3iM0d1ff8CMC6mZ6Ihiaqq3gi1aUAnArD00SW1fq5OLBg0ymYmSZsR2/t4e/rGyCLW0sbp3oq+yTYqVgytQWui2FS7XYF7GFprY921T4CNQt8zr47dNzCkIX7y/jBtH+v+RGMQrc828W8pApnZbmEVQp/Ae7BlOy2ttib81/UFc+WRWEbjckIAAAAASUVORK5CYII=
++#define parabola_icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABL0lEQVQ4jWNgoCcoq16VU1GzygnEBtEVDWuV8GooKFuhWVG3uiM3d5UokG4qr1szAaa5vGbVt4ralacwNDU0rGIrr10VBVG0+lxhwyqVsqqVtRW1q6eD5IvL19oB2V+B+D9QzQu4xtDQVZylVavygRKHqurWOlbUrknKK12qWlCwWLK8elUFA8N/xvLy5VYVtas+gzWDDVi9E2QjT1XdcufymjWpQJt1cXmnvHwVP1DzR7hmIC6vW+kOtpnYQKysW30arrlm9RVi9cFBRfXKJTADympWJZNsQFnN6rUQA1adAQU2SZqBXmUGBtozUDiU1qxQJtl2oCY3kO2l1avCSdYMAsBAWwyM2plkaS4p6eYGOv1YQ0MDB1kGlFWuDChuWKZBlmYQqK5eJU22ZkIAAEIlnQZQkzITAAAAAElFTkSuQmCC
+
+-#define nightly_icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA01JREFUeNpkk01oXFUUx//vzp33ZiaTzkwnyUwmsbbNRpp0GhuVKiVgQIUiLmoX7lyIG10I6qIUrG6KGyuYZbMwiATqxipSMVhQYwWhiwSJwUxKkzbz8ZJ5H/M+7/vunUIE7Vnc1f3/zjn/c46wsCbjIOI4Rlfew+Zf6/h9+RYYYzj70hymZp7GULUCSin+H8IBwLYsfLOwiOfffndK1c2LmhO84jl+2e5ZCTN6Xer0fpp5dmq+frxy5zGAY9n49IOLuHDls8uqE3y07YV0ywwQGA6oZsJRFRT0FnK2Hpw8PTl/7tXZDw8ApF/29YUvufjqxxqLPrnLQBUiQRUI4EcQHQ+EgwbjENl8Pv3H9W/f//m7W9cOAKkXzr+J4pm5umy6S/uEkiAEOlzscWHG5jTbhcsrDJiHsN1CIScJTlc5JaSlldEna9uk8fcGHNO6tOMGqfssQjNFoHOxyAXU9xF5HiRXw2AqhuUEsLs6giCkjbXG549a+O3mMhQneLnthOh0NBiaAdozkTEdpC0Hnm2hKAKR3ESJRigNFZBHCF2zn+p7SMIwRM9kRcI/D5g2xAcd1PQeMtw8xkGuafIRGRgZKfHfCbKlIu5t3IVASYYDDtMzL85il2fLuh6qIkFkWtjrARY3zjENJLwCKgqwOjLcnW30Qh/HnpmGYTJhT1bSdPL0NBpr+6rbs8qhIiPivQtRhDDJQuCViI4BxdJRrx/jBopob25BDmIMnzgZjFTK+2R4tAo4+q8iM9Ba3wBTuxirHELeM5AxFO6FCsnSsHNnFfL9XUiFIo7ypNmB9D3eQkT665nS5Xm72Q5r3KCo04be2MIRKULOUlEkPnJpAbn8AI7XJyEUy/CBhIrJlUdT6D/rP3x1u1yQFjP5bFIbH4HdbHG2j/GJMfiqzneCwVI0oFrD8OgTiKLgl5Ubi0v/uYV3ZqcrE2ff+Do2/LlUxAi/HKQZH9eegupzpxDztL4gIfTU9d3VG+ev/nh7s6/797wiz1K3VpYuDU3MvFWunXg9ly2WTNVNDZaPgIU08V3NMNXVZfmfP68lvt187Br78d5r52hoKaUkiWspQqqHx4+OCQLhFu3KAXNbCYQWzR5SBCr5X3x/M+lrHgowAMP2wWqd+FzxAAAAAElFTkSuQmCC
++#define fsf_icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAADG0lEQVQoFQEQA+/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQECAAAAAAAAAAAAAAAAAAAA2qOp7tTXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAP///wAAAAAAAOCyt7pUXQcSEgcQDwAAAP///wAAAAAAAAD//x9NSDqNhQEBAQQAAAAAAAAAAAAAAAAQJiQGDQ0aPToZPjoAAQEAAAAAAAAAAAABAQEpZV4AAAAAAAAAAAAA////////////////pSIv05KZ////////////////////////////////AAAAAQAAAP///6krNwAAAAAAAPHc3ggSEQcSEQAAAAAAAAAAABY3NEGelQAAAAAAAAEBAQEAAAD///+YARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDg1g690CBgYAAAABAQEEAAAAAAAAS7etAAAAAAAAwGVtHklFIlJOAAAAAAAAAAAAAAAA+/X2BwYGAAAAAAAABAAAAAAAAB1IQwAAAAAAAAYNDBAmJB1IQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAgL//v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQEB//7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAECAv/+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////////////cqK3qzM////////////////////////////////8AAAABAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGuLjDf9F8oBAAAAAElFTkSuQmCC
+
+-#define firefox_icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAz5JREFUeNpcU0toXFUY/s49596588ikySSmM8rk0UkJEirVTVEjYk1NUdRFFgouXZQI2k2hUCjdiYIuCi4Kuig0DbqQYgU3Yi0iFRuRCBMwaZvMZDTNY95z3/fM8b8jldpzOeeee/i/737n+/+f4ZExf730rkiaZ9NJMx/nmk5HypMqqLr+ZuD4F67N5ZYejmfRsnvhyKsLhSs3zP70SubgYKHSdFENu+gXAprQIGnvBi5ez0m1b6u7M399+PTx+UvtCKtFi2F6195qXK2byir88esy5ksfYND5DhuhRCtUKBNB0Q7w5Z8ee2GgWdjOn250fn5v5j8F5dOHlZD0kWRgAwp3hrKY0S9BJWKIcQ5PShhNG4+1bHx+IocT+RXcrRSDMfFNRvvt3Oyp/icIrRhUl9hoO4kt3F55Bxf3LkLV20jWOohbDjzXxyc/lMH0cRSyCd1xq+dFhu986t7T0CUwIzB8EkW3O5ibhj44ib7NJhiBKRoB/aS4ZWHjbxtjGQYP7nGRTjim1SaQqYiAVAREpHG8vzWJn+6PQ6CF0HPR7nQQczpYeEWHyWMUkwU8MSECGwgJxAWp9xWKNzkuH3oet+JDlIE9Momedh1G4CN0bfhVG9nsS0BQQthJx0V7j3elq7ihqV5ezQTwZmodP9ZGkU/bOPr4Nr53xtDYsaD7Dg4nNqFaH5OCYSSdGhf7daNmuv6wEKqXk/yExKGBHSznFsH6FFpKQ/JAA0ulUejWLt44lkHXsqDaX6C6Nl4Rnq8vK8s/KThDMlJhkI91YOO+iR3XwEelCdTCBLSgijNzd6DLNfhlHfZ6FtWiWBQpq/V2LdSrrNPljBQkoOjuCiPxAMutOIbkPqYSEqeequGZaTLzdhZhS0PlnlB9bvhtr5CuHj3y2Qj8hVQ/kEopxONEEsO/0yATDYXYAdWrE69JEElXq7Hyk0tro+xBU1yZmr4xrIcvptIRCZlJJAYBmRGRkD08aivA7VDvWPqt564Xn41w/AHB1/u7l1/uGxGU8mNcgodUNDIq0JDeLnpzc1uo1Qr76rWbqyf/142PjsXJqdkmN2YDnQ9oGkJNU+t57q7qUv4y9/t64+HYfwQYAN7OczrzUDvGAAAAAElFTkSuQmCC
++#define gnu_icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAGFBMVEVFRUV+fn6mpqa/v7/Ozs7Y2Njg4OD8/Pwuhn+TAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB9MBDhQ6Gd8s57cAAAEVSURBVBgZBcGxVtpgGADQL9gHSBzqSognzMixmcWWzB6pmRHhnyvku6/fewMAIPD3TwHmQxHs6vr+A16bphNum/vV0x429201hcPjAGBTDZGnR/Kw1U181+u4HXvOdSxjUcztz8jjg1xGVBG9XPYxt4PviKiaWLg168iXtbrq+mPT1utjNcR1U73deRnL43M2sRgj3+oYs8uL3rLphPd2QWmHbMu/VS/cnk6UdtSW657g9yBlcZ0UAkUWzPvyRaAYmfd+HT4IZtvC59ibEJxXiqJjQpBpNEufBYE0McoOAunGhRMEFIPc7h4goJigQEBxk8u7AgEpL3IEAUZfcgAByGFXQACm5+4MAuB19QMEgI8CAgDgP4rivVgoKP6ZAAAAAElFTkSuQmCC
+
+-#define bugzilla_icon data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnYCL7J0pY9wwETY9kYEM9AAAAAEBAYAhVVVUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1bjTOS1Vb/wAA2/8JEqT/Q0g8kQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnMqoiJtJ/0haST/NEkp/yQnW/8AAPD8AAHY/RsgP/JZUI+GKitih4ObUEAAAAAAAAAAAAAAAAAAAAAAKnouwip5Lv9ooW//a6Jz/y9GIv8JBXb/AADO/gEBvf8AAK7/FRJp/z9BfP8iLGj1AAAAAAAAAAAAAAAAL4YzwiB0I/+UwJ3/bK+C/02eZ/9CTjz/DBa1/wABxf8BAOj/AACp/w8Oc/sJCv//EhCN9AAAAAAAAAAANJA6iC2MMv93tYL/TZ5U/3mzjP9NoWr/NEss/wYIU/8CBOn/ARCX/wwNqP0TD6X/Cgyex5qacDAAAAAAAAAAADKUN/ZirWj/d76R/0SgXf9Ln1P/eLSM/1mda/8rOkb/CQiD/wMQvf8UEnT/MTAt4P//MwUhZyN8AAAAAAAAAAAznDf5UqlZ/228jP9NqnD/Qp9c/0yiVP+Dv5b/VaVw/0VxXf9PZXD/S3pQ/y54Nf8jcCf/I2wn/wAAAAA0ozjIM6E4/zOeOP+Uz6z/XLR+/06scv9BoV3/TqZX/4XBmP9XqHP/hr6Z/yp+Lf8leSr1JXUqbQAAAAA3rTz7Nqo7/zWmOqM3oz7rUK1W/43Mpf9etYD/T61z/0KjXf9Rqln/msup/46/lf8pgy7/JFg6sAAAAAAAAAAAOK8+8jqvOiMAAAAAAAAAADSlOv85pT//kM6o/2K5hP9Ysnv/YLJ2/ziXPv8piS3/V6Ri/yZQQ9wAAAAAAAAAAAAAAAAAAAAAAAAAADetP0E2qzz/OKg98UWsS/+e1K3/pNe4/4XDjv8ojy3/T7df/5fIqv8sjTH/K4kw/yqFLv8AAAAAAAAAAAAAAAA4sT3xN7A8+QAAAAA4qz3yNag6/zSlOf80oTn/csJ+/6/jwv9fjHj/MmRMdQAAAAAAAAAAAAAAAAAAAAAAAAAAOrdA/zm0QHQAAAAAAAAAADasO/k2qTvuRX5lpjqGT/gznDr/O3FXigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq9QiMAAAAAAAAAAAAAAAA4sj7/Nq09s0uOaSI1qTplM6U68wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOrc//zu0P0EAAAAAOK4+UjWsPPgAAAAAAAAAAAAAAAAAAAAA/48AAP8HAAD4AQAA8AAAAOAAAADAAQAAwAMAAMAAAACAAwAAAAMAAHADAADwAAAA5AcAAO4HAAD+bwAA/u8AAA==
++#define libreplanet_icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACfElEQVQ4jZXTS0hUcRTH8f+9M3fGd0gRRq1a2bZdBAotWtS6TQtB6IHgKzRy0UKqjRaRCAq+R21MDMsUR83JR5fJxhmaK2lzsWAWw+ToEHJxgnFm7reFIgza66z/58P/dzhHcESZpsluIsFPwyCVSmGa5lHPEEIIkdGYTqPPvqUlP4fK8nJ2DINYNEq71YJ3fv4QlAGkUynaj+VRdfUK7580M52rEN/ZYWNjg2GrjEMSPFXsmOn0YcA0TZ4V5tNZUkJTTTWfJiZIJhJ8U1VczwcZs0o4JUHzufM0ZGcf/OQASCaTxGIxDMNA00P8iEbpuXyJ8Tw77+wWJhWZQYuVbiHoFIKwpmUC4XCYzc1NDMMgHo9z8+IFvl6/xsf7D9ArbjOpyAxLEt1C0CUErfvJDwBd14lEImxvb/N9fR1fgY3egmyWsq0sO/poUyw4pb3mLiFolyRM09wDEokEfr+fUChEJBJh4HgBS7kKn92zLIy9ZriqklFZwiEEHfsRRp1O0un0HpDa3cU9M8PKygp3Tp5AzbKgZlmYt1uYtkn02q0MyYKmnBxWNI27Nhtut5tkMrkHmKZJbWkpqqryQpFxKTJTisyEVeaVRWJIlqgpLuZRWRkejwe/34/P58ucwZvWVhYXF5l2uejIzeHGqbM4ZYmB/dy1hUV8mJpibm4On8/H1tbW4T1YXV3F6/WysLDA5Pg4nfsDe5yfz8OiIjweD5qmEQwGf7/KwWCQtbU1NE2jRZbpEoI2SWKqr49lVUXX9T/fAkAgEKC/e5SW6mo6hKD+zGn6e0bw+/x/PyaA9S/rvOwfobGukfpbddyraMDR7iCwHPg34H9KCCF+Abts3KCj/p6aAAAAAElFTkSuQmCC
+
+-#define mdn_icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAACYklEQVQ4y3WSTYjNYRTGf+f9/+/NuDN3GKMxt1mYpKR8RT6zEk1iyUo2IysSNspCxEIZRSN07YiUJSWkaUIZizELMzIZlO9h3MzXvf/341jcmTGa69RZvKfnPOc5z3mhQlRd651Ry17tqQQl5uR9ONHC3EtdiPPxWKZ24bhJvQV0OlBHhiV7pTs3WpUdEmeLrnWJAhhOtJA5/3RjqZg8Lrnwy4bQT/DvTb73Qt3N9ymATNvTU15Mvx8vfvTWDrmgT0y+dzuAZM527lM0Xx6jFKvnEKIYvIIqVeMFRCfEiDBWMw9UQUBUT8fBWvmrU9HEUpUWDq2cT23a0P6kQEqEwTFLQCBJpm9mYrV+6lW0ngNr62jb0kw6KvMeXJohZYSLzz9xvOMDJG6aPUKMtZPDObq+iXPbmoG/ooJC0QVaVy2g5AI3Bkq8/jYCkQEBo9ah1hESS1N1Gu9DxXNFRji0oYm+/Stoaa4tK0kcRq1HE4fxHqOKEf4bk16ubphd9iKxGKxFrcOWLB1vvuOCzmg0Irig1MxKMfBznPbOd2DLCmJNHKgSIdzr/kjXhwKbFtVPNQ+NJiw7+YDh0YTFuVr6CwLpaNJDjCYOtR61DldyHL7975c9dqeH4ZESscC7r79BFBI7kY5YrZsCC8qL/kFyR+6yY0UjS3M1PHz5ich71IOIQGSn0cskwdTeryTyfV9+jGzOP3rTQAiIHUNQEBkCeUbkcqguB2JEMGqt4sJlg8lGIsv0+p5dON8YaVgn3veJ85/F61YNtn5uXf3OCF0TQVacP0PiXMVzpfbemlnbna+I/QPSFTsRLd+hHAAAAABJRU5ErkJggg==
+-
+-#define addon_icon data:image/vndmicrosofticon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKoSURBVDiNjZNLaJRnFIaf75vvy2UGTWr8NYkxl0IFUYkNXSSZQNWFWlxIEVy1FLLo0i4adddVXRnS4kJwYxci2GaRTWlSFGKFGRXNmFBF62VMO4TENBdjMv9k5p//Oy4SLzgqHs7yPc95eTlHiQjvqniPbVYRzuBoR+FQDEvId4neIPNCY945DayNVff/8NUvn9XXNJMv5hhKnTvYP3ymHmj/IMBSbmHjjP8fycxv+MEzGqtatUI1vK7R7wM4J32XUv3Li/l5imGBkbtXlsMw/PF1jXozg3iP3aM0Z8XRBFDr1fl7Og9EnTguXx30p/6fjAIozb/i6C4BdB2z6QOfH27ZUFNL0QUELs/tycs4J2zdGEerCADTM1P8df3PxyUZiKPF8zyGHpwGFLC6QCCRuYA4QQQ6mw4hjhYT77GN2qiBWFnV5sXc0xMAgfKx5foVYKURB2vLPbxoM8auODE6ws/fH+77dHtjhxp5OHzywpWf/IIsRk25Rq0CRFY4UVNNndkmqZFRf3YuWaYUS0aE3RP5MXX3/iCOgu3Y1WYfL90sdSDgxRoYTY5mZ2anjwC/AqEBdM4tMJ4dwYs1YiOGSBkYrVHqlQNxoC34OV8BdxK9gQ+guo7bwdYdrXu92nU6nR7Pzc/PSXxfazTj30IpRaWpIqbX4UQoBDkWJlRwLzVeLBTyGs2UcUX5duzvsfPqNpvDovQhnBIdELGaWFk1hclYmLx2fxmFbNm5qXJNvdi2DQ1WAsO1P/5petshyf6v25gJ0nxUUUeiP531s/kvAcor7MDOL2pjz3JzVKpqUoMTpb8QsSqdeTT98fomjyDv8LP5aKI3uAgQP2orCkGAVRVMZxbQhnQJIAzkm3s3Js6GSfkEQEd4+bpa8+TW71P1ANqoB65I93OA2DgV+Z+omgAAAABJRU5ErkJggg==
++#define hnode_icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABgElEQVQ4jaXRz2uSARzHcb0vlRGEzTVWISU1BVkFYTIyjNK1pKcxHA+yhWMWIamHYikFgpoLIi9jwegi3QbL9SzdLmMbM9J+DkJBgm5RDvEPeHeQHOyQz0OH9+V7ePGBr0pqpPmfVPsP8a0AR4MnMEwf48x9K0s/E8oAY9iEMOvD+8yP2qVjrhhRBnSN61n5sIpULqC+pGHh8wNlgEY8jPQXcGh4VXukDND5evYAl46odIuXtYdKAANSudAChO52/XeMZMohecCbcoGdH99Y+7LO72adT9+/4nh8nYOjBl7/SsoB8gBkpHk8T0S2K++pN3fRin3cfnFDHvCuWkI9rEMvHGEo5gbAHnXhnLF1BpZLeRaLOVT2A8Q3A5wMngXgWtKLxX9KPqC+rCWQvYkpeK4NWKcGOgO50ts2MJJ0cPreeQDciTHMchZYIhcwh2wcuqjn+ccwGm9v6wsTxxn0dVgQXZ7Ek3Agpq6QrcaQGmmebtxFSDkRU1fJVmL/BpT2ByV/3eDMhinRAAAAAElFTkSuQmCC
+ <!-- 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/. -->
+@@ -27,30 +25,21 @@
+ <dl><p>
+ <dt><h3 personal_toolbar_folder="true">@bookmarks_toolbarfolder@</h3></dt>
+ <dd>@bookmarks_toolbarfolder_description@
+-#ifndef NIGHTLY_BUILD
+ <dl>
+- <p><dt><a href="https://www.mozilla.org/@AB_CD@/firefox/central/" icon="@firefox_icon@">@getting_started@</a></dt>
++ <p><dt><a href="https://www.parabola.nu/" icon="@parabola_icon@">Parabola GNU/Linux-libre</a></dt>
+ </dl>
+- <p><dt><h3>@firefox_heading@</h3></dt>
++ <p><dt><h3>Parabola GNU/Linux-libre</h3></dt>
+ <dl><p>
+- <dt><a href="https://www.mozilla.org/@AB_CD@/firefox/help/" icon="@mozilla_icon@">@firefox_help@</a>
+- <dt><a href="https://www.mozilla.org/@AB_CD@/firefox/customize/" icon="@mozilla_icon@">@firefox_customize@</a>
+- <dt><a href="https://www.mozilla.org/@AB_CD@/contribute/" icon="@mozilla_icon@">@firefox_community@</a>
+- <dt><a href="https://www.mozilla.org/@AB_CD@/about/" icon="@mozilla_icon@">@firefox_about@</a>
+- </dl>
+-#else
+- <dl>
+- <p><dt><a href="https://www.mozilla.org/@AB_CD@/contribute/" icon="@mozilla_icon@">@firefox_community@</a>
++ <dt><a href="https://www.parabola.nu/" icon="@parabola_icon@">Parabola GNU/Linux-libre</a>
++ <dt><a href="https://www.parabola.nu/packages/" icon="@parabola_icon@">Parabola GNU/Linux-libre Packages</a>
++ <dt><a href="https://wiki.parabola.nu/" icon="@parabola_icon@">Parabola GNU/Linux-libre Wiki</a>
++ <dt><a href="https://labs.parabola.nu/" icon="@parabola_icon@">Parabola GNU/Linux-libre Labs</a>
+ </dl>
+- <p><dt><h3>@nightly_heading@</h3></dt>
++ <p><dt><h3>Free Software Foundation</h3></dt>
+ <dl><p>
+- <dt><a href="https://blog.nightly.mozilla.org/" icon="@nightly_icon@">@nightly_blog@</a>
+- <dt><a href="https://bugzilla.mozilla.org/" icon="@bugzilla_icon@" shortcuturl="bz">@bugzilla@</a>
+- <dt><a href="https://developer.mozilla.org/" icon="@mdn_icon@" shortcuturl="mdn">@mdn@</a>
+- <dt><a href="https://addons.mozilla.org/@AB_CD@/firefox/addon/nightly-tester-tools/" icon="@addon_icon@">@nightly_tester_tools@</a>
+- <dt><a href="about:crashes" icon="@mozilla_icon@">@crashes@</a>
+- <dt><a href="https://mibbit.com/?server=irc.mozilla.org&channel=%23nightly" icon="@mozilla_icon@">@irc@</a>
+- <dt><a href="https://planet.mozilla.org/" icon="@mozilla_icon@">@planet@</a>
++ <dt><a href="https://www.fsf.org/" icon="@fsf_icon@">Free Software Foundation</a>
++ <dt><a href="https://www.gnu.org/" icon="@gnu_icon@">The GNU Operating System and the Free Software Movement</a>
++ <dt><a href="https://libreplanet.org/" icon="@libreplanet_icon@">LibrePlanet</a>
++ <dt><a href="https://www.h-node.org/" icon="@hnode_icon@">h-node</a>
+ </dl>
+-#endif
+ </dl>
+diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn
+index eff09189b..6d76d20f0 100644
+--- a/browser/locales/jar.mn
++++ b/browser/locales/jar.mn
+@@ -98,7 +98,6 @@
+ locale/browser/searchplugins/ (.deps/generated_@AB_CD@/*.xml)
+ locale/browser/searchplugins/list.json (.deps/generated_@AB_CD@/list.json)
+ #endif
+- locale/browser/searchplugins/images/yandex-en.ico (searchplugins/images/yandex-en.ico)
+ % locale browser-region @AB_CD@ %locale/browser-region/
+ locale/browser-region/region.properties (%chrome/browser-region/region.properties)
+ # the following files are browser-specific overrides
+diff --git a/browser/locales/search/list.json b/browser/locales/search/list.json
+index 544740a43..4961e5437 100644
+--- a/browser/locales/search/list.json
++++ b/browser/locales/search/list.json
+@@ -1,880 +1,880 @@
+ {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "amazondotcom", "bing", "ddg", "twitter", "wikipedia"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "locales": {
+ "en-US": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "amazondotcom", "bing", "ddg", "twitter", "wikipedia"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "US": {
+ "visibleDefaultEngines": [
+- "yahoo", "google-nocodes", "bing", "amazondotcom", "ddg", "twitter", "wikipedia"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "CA": {
+ "visibleDefaultEngines": [
+- "google-nocodes", "yahoo", "bing", "amazondotcom", "ddg", "twitter", "wikipedia"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "experimental-hidden": {
+ "visibleDefaultEngines": [
+- "yahoo-en-CA", "yandex-en"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ach": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "twitter", "wikipedia"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "af": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "wikipedia-af"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "an": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-es", "bing", "wikipedia-an", "ddg", "twitter"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ar": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "wikipedia-ar"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "as": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "amazondotcom", "ddg", "wikipedia-as"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ast": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-es", "bing", "diccionariu-alla", "ddg", "wikipedia-ast"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "az": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "amazondotcom", "azerdict", "bing", "ddg", "wikipedia-az", "yandex-az"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "bg": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "diribg", "amazondotcom", "ddg", "portalbgdict", "wikipedia-bg"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "bn-BD": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "ddg", "wikipedia-bn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "bn-IN": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "amazondotcom", "bing", "ddg", "rediff", "wikipedia-bn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "br": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-france", "amazon-france", "ddg", "freelang", "klask", "wikipedia-br"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "bs": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "ddg", "olx", "twitter", "wikipedia-bs"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ca": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "bing", "diec2", "ddg", "twitter", "wikipedia-ca"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "cak": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-espanol", "bing", "amazondotcom", "ddg", "wikipedia-es"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "cs": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "seznam-cz", "ddg", "heureka-cz", "mapy-cz", "wikipedia-cz"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "cy": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-en-GB", "amazon-en-GB", "ddg", "palasprint", "termau", "wikipedia-cy"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "da": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-da"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "de": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-de", "amazondotcom-de", "bing", "ddg", "leo_ende_de", "wikipedia-de"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "dsb": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-de", "bing", "amazondotcom-de", "ddg", "leo_ende_de", "wikipedia-dsb"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "el": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "amazon-en-GB", "bing", "ddg", "wikipedia-el"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "en-GB": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-en-GB", "bing", "amazon-en-GB", "chambers-en-GB", "ddg", "twitter", "wikipedia"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "experimental-hidden": {
+ "visibleDefaultEngines": [
+- "yandex-en"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "en-ZA": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "eo": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "reta-vortaro", "wikipedia-eo"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "es-AR": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-ar", "amazondotcom", "drae", "ddg", "mercadolibre-ar", "wikipedia-es"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "es-CL": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-cl", "bing", "drae", "ddg", "mercadolibre-cl", "wikipedia-es"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "es-ES": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-es", "bing", "drae", "ddg", "twitter", "wikipedia-es"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "es-MX": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-mx", "bing", "ddg", "mercadolibre-mx", "wikipedia-es"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "et": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "neti-ee", "ddg", "osta-ee", "wikipedia-et", "eki-ee"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "eu": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazon-en-GB", "ddg", "elebila", "wikipedia-eu"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "fa": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "amazondotcom", "bing", "ddg", "wikipedia-fa"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ff": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-france", "bing", "amazon-france", "ddg", "cnrtl-tlfi-fr", "wikipedia-fr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "fi": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-fi", "bing", "bookplus-fi", "ddg", "wikipedia-fi"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "fr": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-france", "bing", "amazon-france", "ddg", "cnrtl-tlfi-fr", "wikipedia-fr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "fy-NL": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-fy-NL", "bing", "bolcom-fy-NL", "ddg", "marktplaats-fy-NL", "wikipedia-fy-NL"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ga-IE": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-en-GB", "amazon-en-GB", "ddg", "tearma", "twitter", "wikipedia-ga-IE"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "gd": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-en-GB", "faclair-beag", "amazon-en-GB", "bbc-alba", "ddg", "wikipedia-gd"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "gl": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-es", "amazon-en-GB", "ddg", "wikipedia-gl"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "gn": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-es", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-gn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "gu-IN": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "bing", "ddg", "gujaratilexicon", "wikipedia-gu"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "he": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "ddg", "wikipedia-he", "morfix-dic"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "hi-IN": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "bing", "ddg", "wikipedia-hi"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "hr": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "amazon-en-GB", "bing", "ddg", "eudict", "twitter", "wikipedia-hr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "hsb": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-de", "bing", "amazondotcom-de", "ddg", "leo_ende_de", "wikipedia-hsb"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "hu": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "ddg", "sztaki-en-hu", "vatera", "wikipedia-hu"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "hy-AM": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "amazondotcom", "ddg", "list-am", "wikipedia-hy"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "id": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-id", "ddg", "wikipedia-id"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "is": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "leit-is", "wikipedia-is"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "it": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-it", "bing", "amazon-it", "ddg", "hoepli", "wikipedia-it"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ja-JP-mac": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja", "ddg"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ja": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja", "ddg"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ka": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ka"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "kab": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-france", "bing", "ddg", "wikipedia-kab"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "kk": {
+ "default": {
+ "visibleDefaultEngines": [
+- "yandex-kk", "google", "ddg", "flip", "kaz-kk", "twitter", "wikipedia-kk"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "KZ": {
+ "visibleDefaultEngines": [
+- "yandex-kk", "google-nocodes", "ddg", "flip", "kaz-kk", "twitter", "wikipedia-kk"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "BY": {
+ "visibleDefaultEngines": [
+- "yandex-kk", "google-nocodes", "ddg", "flip", "kaz-kk", "twitter", "wikipedia-kk"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "RU": {
+ "visibleDefaultEngines": [
+- "yandex-kk", "google-nocodes", "ddg", "flip", "kaz-kk", "twitter", "wikipedia-kk"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "TR": {
+ "visibleDefaultEngines": [
+- "yandex-kk", "google-nocodes", "ddg", "flip", "kaz-kk", "twitter", "wikipedia-kk"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "UA": {
+ "visibleDefaultEngines": [
+- "yandex-kk", "google-nocodes", "ddg", "flip", "kaz-kk", "twitter", "wikipedia-kk"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "km": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-km"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "kn": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "bing", "amazondotcom", "ddg", "kannadastore", "wikipedia-kn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ko": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "ddg", "naver-kr", "danawa-kr", "daum-kr", "wikipedia-kr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "lij": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-it", "bing", "amazon-it", "ddg", "paroledigenova-lij", "wikipedia-lij"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "lt": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "wikipedia-lt", "bing", "amazondotcom", "ddg", "twitter"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ltg": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "dict-enlv", "ddg", "salidzinilv", "sslv", "wikipedia-lv"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "lv": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "dict-enlv", "ddg", "salidzinilv", "sslv", "wikipedia-lv"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "mai": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "bing", "ddg", "twitter", "wikipedia-hi"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "mk": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "wikipedia-mk"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ml": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "webdunia", "bing", "ddg", "rediff", "wikipedia", "wikipedia-ml"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "mr": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "amazondotcom", "ddg", "rediff", "wikipedia-mr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ms": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ms"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "my": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-my"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "nb-NO": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-NO", "amazon-en-GB", "bing", "ddg", "gulesider-NO", "bok-NO", "qxl-NO", "wikipedia-NO"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ne-NP": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "ddg", "twitter", "wikipedia-ne"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "nl": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "bing", "bolcom-nl", "ddg", "marktplaats-nl", "wikipedia-nl"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "nn-NO": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "bing", "amazon-en-GB", "ddg", "gulesider-NO", "bok-NO", "qxl-NO", "wikipedia-NN"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "or": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "bing", "amazondotcom", "ddg", "wikipedia-or"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "pa-IN": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "bing", "ddg", "wikipedia-pa"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "pl": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "allegro-pl", "ddg", "pwn-pl", "wikipedia-pl", "wolnelektury-pl"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "pt-BR": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-br", "bing", "buscape", "ddg", "mercadolivre", "twitter", "wikipedia-pt"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "pt-PT": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "amazon-en-GB", "ddg", "priberam", "sapo", "wikipedia-pt"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "rm": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-ch", "bing", "ddg", "leo_ende_de-rm", "pledarigrond", "wikipedia-rm"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ro": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "wikipediaro"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ru": {
+ "default": {
+ "visibleDefaultEngines": [
+- "yandex-ru", "google", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "RU": {
+ "visibleDefaultEngines": [
+- "yandex-ru", "google-nocodes", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "BY": {
+ "visibleDefaultEngines": [
+- "yandex-ru", "google-nocodes", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "KZ": {
+ "visibleDefaultEngines": [
+- "yandex-ru", "google-nocodes", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "TR": {
+ "visibleDefaultEngines": [
+- "yandex-ru", "google-nocodes", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "UA": {
+ "visibleDefaultEngines": [
+- "yandex-ru", "google-nocodes", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "si": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "amazondotcom", "ddg", "wikipedia-si"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "sk": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "azet-sk", "atlas-sk", "ddg", "dunaj-sk", "slovnik-sk", "wikipedia-sk", "zoznam-sk"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "sl": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "ceneji", "ddg", "najdi-si", "odpiralni", "twitter", "wikipedia-sl"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "son": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-france", "bing", "amazon-france", "ddg", "cnrtl-tlfi-fr", "wikipedia-fr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "sq": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazon-en-GB", "ddg", "wikipedia-sq"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "sr": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "amazon-en-GB", "bing", "ddg", "wikipedia-sr", "pogodak"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "sv-SE": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-sv-SE", "bing", "allaannonser-sv-SE", "ddg", "prisjakt-sv-SE", "tyda-sv-SE", "wikipedia-sv-SE"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ta": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "ddg", "wikipedia-ta"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "te": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "amazondotcom", "ddg", "wikipedia-te", "wiktionary-te"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "th": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "amazondotcom", "bing", "ddg", "longdo", "wikipedia-th"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "tl": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-tl", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-tl"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "tr": {
+ "default": {
+ "visibleDefaultEngines": [
+- "yandex-tr", "google", "ddg", "twitter", "wikipedia-tr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "TR": {
+ "visibleDefaultEngines": [
+- "yandex-tr", "google-nocodes", "ddg", "twitter", "wikipedia-tr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "BY": {
+ "visibleDefaultEngines": [
+- "yandex-tr", "google-nocodes", "ddg", "twitter", "wikipedia-tr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "KZ": {
+ "visibleDefaultEngines": [
+- "yandex-tr", "google-nocodes", "ddg", "twitter", "wikipedia-tr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "RU": {
+ "visibleDefaultEngines": [
+- "yandex-tr", "google-nocodes", "ddg", "twitter", "wikipedia-tr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "UA": {
+ "visibleDefaultEngines": [
+- "yandex-tr", "google-nocodes", "ddg", "twitter", "wikipedia-tr"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "uk": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yandex-uk", "meta-ua", "ddg", "wikipedia-uk", "metamarket"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "UA": {
+ "visibleDefaultEngines": [
+- "google-nocodes", "yandex-uk", "meta-ua", "ddg", "wikipedia-uk", "metamarket"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "TR": {
+ "visibleDefaultEngines": [
+- "google-nocodes", "yandex-uk", "meta-ua", "ddg", "wikipedia-uk", "metamarket"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "BY": {
+ "visibleDefaultEngines": [
+- "google-nocodes", "yandex-uk", "meta-ua", "ddg", "wikipedia-uk", "metamarket"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "KZ": {
+ "visibleDefaultEngines": [
+- "google-nocodes", "yandex-uk", "meta-ua", "ddg", "wikipedia-uk", "metamarket"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "RU": {
+ "visibleDefaultEngines": [
+- "google-nocodes", "yandex-uk", "meta-ua", "ddg", "wikipedia-uk", "metamarket"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "ur": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo-in", "bing", "amazon-in", "ddg", "twitter", "wikipedia-ur"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "uz": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-uz"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "vi": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "ddg", "wikipedia-vi", "zing-mp3"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "wo": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "yahoo", "bing", "amazondotcom", "ddg", "wikipedia-wo"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "xh": {
+ "default": {
+ "visibleDefaultEngines": [
+- "google", "bing", "ddg", "wikipedia"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "zh-CN": {
+ "default": {
+ "visibleDefaultEngines": [
+- "baidu", "google", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "CN": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "TW": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "HK": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "US": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "CA": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "KZ": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "BY": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "RU": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "TR": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "UA": {
+ "visibleDefaultEngines": [
+- "baidu", "google-nocodes", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ },
+ "zh-TW": {
+ "default": {
+ "visibleDefaultEngines": [
+- "yahoo-zh-TW", "google", "ddg", "findbook-zh-TW", "wikipedia-zh-TW", "yahoo-zh-TW-HK", "yahoo-bid-zh-TW", "yahoo-answer-zh-TW"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "TW": {
+ "visibleDefaultEngines": [
+- "yahoo-zh-TW", "google-nocodes", "ddg", "findbook-zh-TW", "wikipedia-zh-TW", "yahoo-zh-TW-HK", "yahoo-bid-zh-TW", "yahoo-answer-zh-TW"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ },
+ "HK": {
+ "visibleDefaultEngines": [
+- "yahoo-zh-TW-HK", "google-nocodes", "ddg", "findbook-zh-TW", "wikipedia-zh-TW", "yahoo-zh-TW", "yahoo-bid-zh-TW", "yahoo-answer-zh-TW"
++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy"
+ ]
+ }
+ }
+diff --git a/devtools/client/locales/en-US/connection-screen.dtd b/devtools/client/locales/en-US/connection-screen.dtd
+index 674a408d5..d27e97fd5 100644
+--- a/devtools/client/locales/en-US/connection-screen.dtd
++++ b/devtools/client/locales/en-US/connection-screen.dtd
+@@ -24,7 +24,7 @@
+ <!-- LOCALIZATION NOTE (remoteHelp, remoteDocumentation, remoteHelpSuffix):
+ these strings will be concatenated in a single label, remoteDocumentation will
+ be used as text for a link to MDN. -->
+-<!ENTITY remoteHelp "Firefox Developer Tools can debug remote devices (Firefox for Android and Firefox OS, for example). Make sure that you have turned on the ‘Remote debugging’ option in the remote device. For more, see the ">
++<!ENTITY remoteHelp "Iceweasel Developer Tools can debug remote devices. Make sure that you have turned on the ‘Remote debugging’ option in the remote device. For more, see the ">
+ <!ENTITY remoteDocumentation "documentation">
+ <!ENTITY remoteHelpSuffix ".">
+
+diff --git a/devtools/client/locales/en-US/sourceeditor.properties b/devtools/client/locales/en-US/sourceeditor.properties
+index 842d549f0..31dcb82e5 100644
+--- a/devtools/client/locales/en-US/sourceeditor.properties
++++ b/devtools/client/locales/en-US/sourceeditor.properties
+@@ -4,7 +4,7 @@
+
+ # LOCALIZATION NOTE These strings are used inside the Source Editor component.
+ # This component is used whenever source code is displayed for the purpose of
+-# being edited, inside the Firefox developer tools - current examples are the
++# being edited, inside the Iceweasel developer tools - current examples are the
+ # Scratchpad and the Style Editor tools.
+
+ # LOCALIZATION NOTE The correct localization of this file might be to keep it
+diff --git a/devtools/client/locales/en-US/toolbox.dtd b/devtools/client/locales/en-US/toolbox.dtd
+index 6097fa82a..3dfe372db 100644
+--- a/devtools/client/locales/en-US/toolbox.dtd
++++ b/devtools/client/locales/en-US/toolbox.dtd
+@@ -93,7 +93,7 @@
+ - checkbox that toggles remote debugging, i.e. devtools.debugger.remote-enabled
+ - boolean preference in about:config, in the options panel. -->
+ <!ENTITY options.enableRemote.label3 "Enable remote debugging">
+-<!ENTITY options.enableRemote.tooltip2 "Turning this option on will allow the developer tools to debug a remote instance like Firefox OS">
++<!ENTITY options.enableRemote.tooltip2 "Turning this option on will allow the developer tools to debug a remote instance like Iceweasel OS">
+
+ <!-- LOCALIZATION NOTE (options.enableWorkers.label): This is the label for the
+ - checkbox that toggles worker debugging, i.e. devtools.debugger.workers
+diff --git a/devtools/client/locales/en-US/webide.dtd b/devtools/client/locales/en-US/webide.dtd
+index 5e1a80ccd..8f375da2e 100644
+--- a/devtools/client/locales/en-US/webide.dtd
++++ b/devtools/client/locales/en-US/webide.dtd
+@@ -2,7 +2,7 @@
+ - 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/. -->
+
+-<!ENTITY windowTitle "Firefox WebIDE">
++<!ENTITY windowTitle "Iceweasel WebIDE">
+
+ <!ENTITY projectMenu_label "Project">
+ <!ENTITY projectMenu_accesskey "P">
+@@ -59,7 +59,7 @@
+ <!ENTITY projectButton_label "Open App">
+ <!ENTITY runtimeButton_label "Select Runtime">
+
+-<!-- We try to repicate Firefox' bindings: -->
++<!-- We try to repicate Iceweasel' bindings: -->
+ <!-- quit app -->
+ <!ENTITY key_quit "W">
+ <!-- open menu -->
+diff --git a/devtools/client/locales/en-US/webide.properties b/devtools/client/locales/en-US/webide.properties
+index 2368ad7f1..05e39c74f 100644
+--- a/devtools/client/locales/en-US/webide.properties
++++ b/devtools/client/locales/en-US/webide.properties
+@@ -2,8 +2,8 @@
+ # 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/.
+
+-title_noApp=Firefox WebIDE
+-title_app=Firefox WebIDE: %S
++title_noApp=Iceweasel WebIDE
++title_app=Iceweasel WebIDE: %S
+
+ runtimeButton_label=Select Runtime
+ projectButton_label=Open App
+@@ -54,10 +54,10 @@ error_runtimeVersionTooRecent=The connected runtime has a more recent build date
+ addons_stable=stable
+ addons_unstable=unstable
+ # LOCALIZATION NOTE (addons_simulator_label): This label is shown as the name of
+-# a given simulator version in the "Manage Simulators" pane. %1$S: Firefox OS
++# a given simulator version in the "Manage Simulators" pane. %1$S: Iceweasel OS
+ # version in the simulator, ex. 1.3. %2$S: Simulator stability label, ex.
+ # "stable" or "unstable".
+-addons_simulator_label=Firefox OS %1$S Simulator (%2$S)
++addons_simulator_label=Iceweasel OS %1$S Simulator (%2$S)
+ addons_install_button=install
+ addons_uninstall_button=uninstall
+ addons_adb_label=ADB Helper Add-on
diff --git a/mozconfig b/mozconfig
index d228a67b31ca..5c556437ec53 100644
--- a/mozconfig
+++ b/mozconfig
@@ -1,19 +1,15 @@
-. $topsrcdir/browser/config/mozconfig
+ac_add_options --enable-application=browser
ac_add_options --prefix=/usr
ac_add_options --enable-release
ac_add_options --enable-gold
ac_add_options --enable-pie
+ac_add_options --enable-rust
# Iceweasel
ac_add_options --disable-official-branding
ac_add_options --with-branding=debian/branding
-# We wont save user profile in ~/.mozilla/iceweasel instead of ~/.mozilla/firefox
-# Using debian branding it needs to set MOZ_APP_PROFILE too
-ac_add_options --with-user-appdir=.mozilla
-ac_add_options --with-app-basename=iceweasel
-
# System libraries
ac_add_options --with-system-nspr
ac_add_options --with-system-nss
@@ -30,10 +26,19 @@ ac_add_options --enable-system-pixman
# Features
ac_add_options --enable-startup-notification
+ac_add_options --enable-alsa
ac_add_options --disable-updater
ac_add_options --disable-crashreporter
STRIP_FLAGS="--strip-debug"
+# Parabola features
+ac_add_options --with-distribution-id=nu.parabola
+ac_add_options --disable-safe-browsing
+ac_add_options --disable-url-classifier
+ac_add_options --disable-eme
+
# Other
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/moz-objdir
+
+# vim:set ft=sh:
diff --git a/mozilla-1245076-1.patch b/mozilla-1245076-1.patch
deleted file mode 100644
index dfc52c2cf7c4..000000000000
--- a/mozilla-1245076-1.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-diff --git a/config/gcc-stl-wrapper.template.h b/config/gcc-stl-wrapper.template.h
---- a/config/gcc-stl-wrapper.template.h
-+++ b/config/gcc-stl-wrapper.template.h
-@@ -12,33 +12,39 @@
- // compiling ObjC.
- #if defined(__EXCEPTIONS) && __EXCEPTIONS && !(__OBJC__ && __GNUC__ && XP_IOS)
- # error "STL code can only be used with -fno-exceptions"
- #endif
-
- // Silence "warning: #include_next is a GCC extension"
- #pragma GCC system_header
-
-+#ifndef moz_dont_include_mozalloc_for_cstdlib
-+# define moz_dont_include_mozalloc_for_cstdlib
-+#endif
-+#ifndef moz_dont_include_mozalloc_for_${HEADER}
- // mozalloc.h wants <new>; break the cycle by always explicitly
- // including <new> here. NB: this is a tad sneaky. Sez the gcc docs:
- //
- // `#include_next' does not distinguish between <file> and "file"
- // inclusion, nor does it check that the file you specify has the
- // same name as the current file. It simply looks for the file
- // named, starting with the directory in the search path after the
- // one where the current file was found.
--#include_next <new>
-+# include_next <new>
-
- // See if we're in code that can use mozalloc. NB: this duplicates
- // code in nscore.h because nscore.h pulls in prtypes.h, and chromium
- // can't build with that being included before base/basictypes.h.
--#if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
--# include "mozilla/mozalloc.h"
--#else
--# error "STL code can only be used with infallible ::operator new()"
-+# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
-+# include "mozilla/mozalloc.h"
-+# else
-+# error "STL code can only be used with infallible ::operator new()"
-+# endif
-+
- #endif
-
- #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG)
- // Enable checked iterators and other goodies
- //
- // FIXME/bug 551254: gcc's debug STL implementation requires -frtti.
- // Figure out how to resolve this with -fno-rtti. Maybe build with
- // -frtti in DEBUG builds?
-
diff --git a/mozilla-1245076.patch b/mozilla-1245076.patch
deleted file mode 100644
index c3f06f19aae2..000000000000
--- a/mozilla-1245076.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff --git a/gfx/graphite2/src/Collider.cpp b/gfx/graphite2/src/Collider.cpp
---- a/gfx/graphite2/src/Collider.cpp
-+++ b/gfx/graphite2/src/Collider.cpp
-@@ -21,17 +21,17 @@
-
- Alternatively, the contents of this file may be used under the terms of the
- Mozilla Public License (http://mozilla.org/MPL) or the GNU General Public
- License, as published by the Free Software Foundation, either version 2
- of the License or (at your option) any later version.
- */
- #include <algorithm>
- #include <limits>
--#include <math.h>
-+#include <cmath>
- #include <string>
- #include <functional>
- #include "inc/Collider.h"
- #include "inc/Segment.h"
- #include "inc/Slot.h"
- #include "inc/GlyphCache.h"
- #include "inc/Sparse.h"
-
-
diff --git a/mozilla-1253216.patch b/mozilla-1253216.patch
new file mode 100644
index 000000000000..c9252da5f154
--- /dev/null
+++ b/mozilla-1253216.patch
@@ -0,0 +1,12 @@
+diff -up firefox-48.0/js/src/jit/AtomicOperations.h.old firefox-48.0/js/src/jit/AtomicOperations.h
+--- firefox-48.0/js/src/jit/AtomicOperations.h.old 2016-07-27 09:42:43.148175449 +0200
++++ firefox-48.0/js/src/jit/AtomicOperations.h 2016-07-27 09:41:13.000000000 +0200
+@@ -340,7 +340,7 @@ AtomicOperations::isLockfree(int32_t siz
+ # elif defined(__aarch64__)
+ # include "jit/arm64/AtomicOperations-arm64.h"
+ # else
+-# include "jit/none/AtomicOperations-none.h" // These MOZ_CRASH() always
++# include "jit/none/AtomicOperations-ppc.h"
+ # endif
+ #elif defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
+ # include "jit/x86-shared/AtomicOperations-x86-shared.h"
diff --git a/mozilla-build-arm.patch b/mozilla-build-arm.patch
new file mode 100644
index 000000000000..774147bbbbbe
--- /dev/null
+++ b/mozilla-build-arm.patch
@@ -0,0 +1,24 @@
+diff -up firefox-46.0/media/webrtc/trunk/webrtc/build/common.gypi.arm firefox-46.0/media/webrtc/trunk/webrtc/build/common.gypi
+--- firefox-46.0/media/webrtc/trunk/webrtc/build/common.gypi.arm 2016-04-25 12:03:12.486027089 +0200
++++ firefox-46.0/media/webrtc/trunk/webrtc/build/common.gypi 2016-04-25 12:05:55.714644873 +0200
+@@ -312,20 +312,6 @@
+ 'defines': [
+ 'WEBRTC_ARCH_ARM',
+ ],
+- 'conditions': [
+- ['arm_version>=7', {
+- 'defines': ['WEBRTC_ARCH_ARM_V7',
+- 'WEBRTC_BUILD_NEON_LIBS'],
+- 'conditions': [
+- ['arm_neon==1', {
+- 'defines': ['WEBRTC_ARCH_ARM_NEON',],
+- }],
+- ['arm_neon==0 and arm_neon_optional==1', {
+- 'defines': ['WEBRTC_DETECT_ARM_NEON',],
+- }],
+- ],
+- }],
+- ],
+ }],
+ ['os_bsd==1', {
+ 'defines': [
diff --git a/no-libnotify.patch b/no-libnotify.patch
deleted file mode 100644
index 8d584574364d..000000000000
--- a/no-libnotify.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-diff --git i/toolkit/system/gnome/moz.build w/toolkit/system/gnome/moz.build
-index 0ecde07..206d6eb 100644
---- i/toolkit/system/gnome/moz.build
-+++ w/toolkit/system/gnome/moz.build
-@@ -5,9 +5,7 @@
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
- SOURCES += [
-- 'nsAlertsIconListener.cpp',
- 'nsGnomeModule.cpp',
-- 'nsSystemAlertsService.cpp',
- ]
-
- if CONFIG['MOZ_ENABLE_GCONF']:
-diff --git i/toolkit/system/gnome/nsGnomeModule.cpp w/toolkit/system/gnome/nsGnomeModule.cpp
-index 6ecebcc..2f193a3 100644
---- i/toolkit/system/gnome/nsGnomeModule.cpp
-+++ w/toolkit/system/gnome/nsGnomeModule.cpp
-@@ -20,8 +20,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsGIOService)
- NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGSettingsService, Init)
- NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPackageKitService, Init)
- #endif
--#include "nsSystemAlertsService.h"
--NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemAlertsService, Init)
-
- #ifdef MOZ_ENABLE_GCONF
- NS_DEFINE_NAMED_CID(NS_GCONFSERVICE_CID);
-@@ -31,7 +29,6 @@ NS_DEFINE_NAMED_CID(NS_GIOSERVICE_CID);
- NS_DEFINE_NAMED_CID(NS_GSETTINGSSERVICE_CID);
- NS_DEFINE_NAMED_CID(NS_PACKAGEKITSERVICE_CID);
- #endif
--NS_DEFINE_NAMED_CID(NS_SYSTEMALERTSSERVICE_CID);
-
- static const mozilla::Module::CIDEntry kGnomeCIDs[] = {
- #ifdef MOZ_ENABLE_GCONF
-@@ -42,7 +39,6 @@ static const mozilla::Module::CIDEntry kGnomeCIDs[] = {
- { &kNS_GSETTINGSSERVICE_CID, false, nullptr, nsGSettingsServiceConstructor },
- { &kNS_PACKAGEKITSERVICE_CID, false, nullptr, nsPackageKitServiceConstructor },
- #endif
-- { &kNS_SYSTEMALERTSSERVICE_CID, false, nullptr, nsSystemAlertsServiceConstructor },
- { nullptr }
- };
-
-@@ -55,7 +51,6 @@ static const mozilla::Module::ContractIDEntry kGnomeContracts[] = {
- { NS_GSETTINGSSERVICE_CONTRACTID, &kNS_GSETTINGSSERVICE_CID },
- { NS_PACKAGEKITSERVICE_CONTRACTID, &kNS_PACKAGEKITSERVICE_CID },
- #endif
-- { NS_SYSTEMALERTSERVICE_CONTRACTID, &kNS_SYSTEMALERTSSERVICE_CID },
- { nullptr }
- };
-
diff --git a/remove-default-and-shell-icons-in-packaging-manifest.patch b/remove-default-and-shell-icons-in-packaging-manifest.patch
new file mode 100644
index 000000000000..6bc67b30a724
--- /dev/null
+++ b/remove-default-and-shell-icons-in-packaging-manifest.patch
@@ -0,0 +1,34 @@
+diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
+index cffcff1..85d28cc 100644
+--- a/browser/installer/package-manifest.in
++++ b/browser/installer/package-manifest.in
+@@ -653,11 +653,6 @@
+ @RESPATH@/chrome/toolkit.manifest
+ @RESPATH@/chrome/recording.manifest
+ @RESPATH@/chrome/recording/*
+-#ifdef MOZ_GTK
+-@RESPATH@/browser/chrome/icons/default/default16.png
+-@RESPATH@/browser/chrome/icons/default/default32.png
+-@RESPATH@/browser/chrome/icons/default/default48.png
+-#endif
+ @RESPATH@/browser/features/*
+
+ ; [Webide Files]
+@@ -670,17 +665,10 @@
+ @RESPATH@/browser/chrome/devtools.manifest
+ @RESPATH@/browser/@PREF_DIR@/devtools.js
+
+-; shell icons
+-#ifdef XP_UNIX
+-#ifndef XP_MACOSX
+-; shell icons
+-@RESPATH@/browser/icons/*.png
+ #ifdef MOZ_UPDATER
+ ; updater icon
+ @RESPATH@/icons/updater.png
+ #endif
+-#endif
+-#endif
+
+ ; [Default Preferences]
+ ; All the pref files must be part of base to prevent migration bugs
diff --git a/vendor.js b/vendor.js
index 71b96aeba9ab..3736917f30f8 100644
--- a/vendor.js
+++ b/vendor.js
@@ -8,4 +8,287 @@ pref("browser.shell.checkDefaultBrowser", false);
pref("extensions.autoDisableScopes", 11);
pref("extensions.shownSelectionUI", true);
+// Opt all of us into e10s, instead of just 50%
+pref("browser.tabs.remote.autostart", true);
+// Disable "alt" as a shortcut key to open full menu bar. Conflicts with "alt" as a modifier
+pref("ui.key.menuAccessKeyFocuses", false);
+
+// Disable the GeoLocation API for content
+pref("geo.enabled", false);
+
+// Make sure that the request URL of the GeoLocation backend is empty
+pref("geo.wifi.uri", "");
+
+// Disable Freedom Violating DRM Feature
+pref("browser.eme.ui.enabled", false);
+// EME
+pref("media.eme.enabled", false);
+pref("media.eme.apiVisible", false);
+
+// Google Widevine DRM
+// https://blog.mozilla.org/futurereleases/2016/04/08/mozilla-to-test-widevine-cdm-in-firefox-nightly/
+// https://wiki.mozilla.org/QA/Widevine_CDM
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1288580
+pref("media.gmp-widevinecdm.visible", false);
+pref("media.gmp-widevinecdm.enabled", false);
+pref("media.gmp-widevinecdm.autoupdate", false);
+
+// Default to classic view for about:newtab
+pref("browser.newtabpage.enhanced", false);
+
+// Poodle attack
+pref("security.tls.version.min", 1);
+
+// Don't call home for blacklisting
+pref("extensions.blocklist.enabled", false);
+
+// Disable plugin installer
+pref("plugins.hide_infobar_for_missing_plugin", true);
+pref("plugins.hide_infobar_for_outdated_plugin", true);
+pref("plugins.notifyMissingFlash", false);
+
+//https://developer.mozilla.org/en-US/docs/Web/API/MediaSource
+//pref("media.mediasource.enabled",true);
+
+// Speeding it up
+pref("network.http.pipelining", true);
+pref("network.http.proxy.pipelining", true);
+pref("network.http.pipelining.maxrequests", 10);
+pref("nglayout.initialpaint.delay", 0);
+
+// Disable third party cookies
+pref("network.cookie.cookieBehavior", 1);
+
+// Prevent EULA dialog to popup on first run
+pref("browser.EULA.override", true);
+
+// Set useragent to Firefox compatible
+//pref("general.useragent.compatMode.firefox", true);
+// Spoof the useragent to a generic one
+pref("general.useragent.compatMode.firefox", true);
+// Spoof the useragent to a generic one
+pref("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0");
+pref("general.appname.override", "Netscape");
+pref("general.appversion.override", "52.0");
+pref("general.buildID.override", "Gecko/20100101");
+pref("general.oscpu.override", "Windows NT 6.1");
+pref("general.platform.override", "Win32");
+
+// Privacy & Freedom Issues
+// https://webdevelopmentaid.wordpress.com/2013/10/21/customize-privacy-settings-in-mozilla-firefox-part-1-aboutconfig/
+// https://panopticlick.eff.org
+// http://ip-check.info
+// http://browserspy.dk
+// https://wiki.mozilla.org/Fingerprinting
+// http://www.browserleaks.com
+// http://fingerprint.pet-portal.eu
+pref("privacy.donottrackheader.enabled", true);
+pref("privacy.donottrackheader.value", 1);
+pref("dom.ipc.plugins.flash.subprocess.crashreporter.enabled", false);
+
+// CIS 2.1.1 Disable Auto Update / Balrog
+pref("app.update.auto", false);
+pref("app.update.checkInstallTime", false);
+pref("app.update.enabled", false);
+pref("app.update.staging.enabled", false);
+pref("app.update.url", "about:blank");
+pref("media.gmp-manager.certs.1.commonName", "");
+pref("media.gmp-manager.certs.2.commonName", "");
+// Disable Gecko media plugins: https://wiki.mozilla.org/GeckoMediaPlugins
+pref("media.gmp-manager.url", "http://127.0.0.1/");
+pref("media.gmp-manager.url.override", "data:text/plain,");
+pref("media.gmp-provider.enabled", false);
+// Don't install openh264 codec
+pref("media.gmp-gmpopenh264.enabled", false);
+pref("media.gmp-eme-adobe.enabled", false);
+pref("media.peerconnection.video.h264_enabled", false);
+
+// CIS 2.3.4 Block Reported Web Forgeries
+// http://kb.mozillazine.org/Browser.safebrowsing.enabled
+// http://kb.mozillazine.org/Safe_browsing
+// https://support.mozilla.org/en-US/kb/how-does-phishing-and-malware-protection-work
+// http://forums.mozillazine.org/viewtopic.php?f=39&t=2711237&p=12896849#p12896849
+pref("browser.safebrowsing.enabled", false);
+
+// CIS 2.3.5 Block Reported Attack Sites
+// http://kb.mozillazine.org/Browser.safebrowsing.malware.enabled
+pref("browser.safebrowsing.malware.enabled", false);
+
+// Disable safe browsing remote lookups for downloaded files.
+// This leaks information to google.
+// https://www.mozilla.org/en-US/firefox/39.0/releasenotes/
+// https://wiki.mozilla.org/Security/Application_Reputation
+pref("browser.safebrowsing.downloads.remote.enabled", false);
+pref("browser.safebrowsing.appRepURL", "about:blank");
+pref("browser.safebrowsing.provider.mozilla.gethashURL", "about:blank");
+pref("browser.safebrowsing.provider.mozilla.updateURL", "about:blank");
+pref("browser.safebrowsing.downloads.remote.block_dangerous", false);
+pref("browser.safebrowsing.downloads.remote.block_dangerous_host", false);
+pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", false);
+pref("browser.safebrowsing.downloads.remote.block_uncommon", false);
+pref("browser.safebrowsing.downloads.remote.enabled", false);
+pref("browser.safebrowsing.downloads.remote.url", "about:blank");
+pref("browser.safebrowsing.provider.google.gethashURL", "about:blank");
+pref("browser.safebrowsing.provider.google.updateURL", "about:blank");
+pref("browser.safebrowsing.provider.google.lists", "about:blank");
+
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1025965
+pref("browser.safebrowsing.phishing.enabled", false);
+pref("browser.safebrowsing.provider.google4.lists", "about:blank");
+pref("browser.safebrowsing.provider.google4.updateURL", "about:blank");
+pref("browser.safebrowsing.provider.google4.gethashURL", "about:blank");
+pref("browser.safebrowsing.provider.google4.reportURL", "about:blank");
+pref("browser.safebrowsing.provider.mozilla.lists", "about:blank");
+
+// Disable Microsoft Family Safety MiTM support
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1239166
+// https://wiki.mozilla.org/SecurityEngineering/Untrusted_Certificates_in_Windows_Child_Mode
+// https://hg.mozilla.org/releases/mozilla-release/file/ddb37c386bb2ffa180117b4d30ca3b41a8af233c/security/manager/ssl/nsNSSComponent.cpp#l782
+pref("security.family_safety.mode", 0);
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1265113
+// https://hg.mozilla.org/releases/mozilla-release/rev/d9659c22b3c5
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1298883
+pref("security.enterprise_roots.enabled", false);
+
+//pref("services.sync.privacyURL", "https://www.gnu.org/software/gnuzilla/");
+pref("social.enabled", false);
+pref("social.remote-install.enabled", false);
+pref("datareporting.healthreport.uploadEnabled", false);
+pref("datareporting.healthreport.about.reportUrl", "127.0.0.1");
+pref("datareporting.healthreport.documentServerURI", "127.0.0.1");
+pref("healthreport.uploadEnabled", false);
+pref("social.toast-notifications.enabled", false);
+pref("datareporting.policy.dataSubmissionEnabled", false);
+pref("datareporting.healthreport.service.enabled", false);
+pref("browser.slowStartup.notificationDisabled", true);
+pref("network.http.sendRefererHeader", 2);
+//pref("network.http.referer.spoofSource", true);
+//http://grack.com/blog/2010/01/06/3rd-party-cookies-dom-storage-and-privacy/
+//pref("dom.storage.enabled", false);
+pref("dom.event.clipboardevents.enabled",false);
+pref("network.prefetch-next", false);
+pref("network.dns.disablePrefetch", true);
+pref("network.http.sendSecureXSiteReferrer", false);
+pref("toolkit.telemetry.enabled", false);
+pref("toolkit.telemetry.unified", false);
+// Do not tell what plugins do we have enabled: https://mail.mozilla.org/pipermail/firefox-dev/2013-November/001186.html
+pref("plugins.enumerable_names", "");
+pref("plugin.state.flash", 0);
+// Do not autoupdate search engines
+pref("browser.search.update", false);
+// Warn when the page tries to redirect or refresh
+//pref("accessibility.blockautorefresh", true);
+pref("dom.battery.enabled", false);
+pref("device.sensors.enabled", false);
+pref("camera.control.face_detection.enabled", false);
+pref("camera.control.autofocus_moving_callback.enabled", false);
+pref("network.http.speculative-parallel-limit", 0);
+// No search suggestions
+pref("browser.urlbar.userMadeSearchSuggestionsChoice", true);
+pref("browser.search.suggest.enabled", false);
+
+// Crypto hardening
+// https://gist.github.com/haasn/69e19fc2fe0e25f3cff5
+// General settings
+//pref("security.tls.unrestricted_rc4_fallback", false);
+//pref("security.tls.insecure_fallback_hosts.use_static_list", false);
+//pref("security.tls.version.min", 1);
+//pref("security.ssl.require_safe_negotiation", true);
+//pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
+//pref("security.ssl3.rsa_seed_sha", true);
+//pref("security.OCSP.enabled", 1);
+//pref("security.OCSP.require", true);
+
+
+// WebRTC
+pref("media.peerconnection.enabled", false);
+pref("media.peerconnection.ice.default_address_only", true);
+
+pref("font.default.x-western", "sans-serif");
+
+// Preferences for the Get Add-ons panel and search engines
+pref("extensions.webservice.discoverURL", "https://directory.fsf.org/wiki/GNU_IceCat");
+pref("extensions.getAddons.search.url", "https://directory.fsf.org/wiki/GNU_IceCat");
+pref("browser.search.searchEnginesURL", "https://directory.fsf.org/wiki/GNU_IceCat");
+
+// Mobile
+pref("privacy.announcements.enabled", false);
+pref("browser.snippets.enabled", false);
+pref("browser.snippets.syncPromo.enabled", false);
+pref("identity.mobilepromo.android", "https://f-droid.org/repository/browse/?fdid=org.gnu.icecat&");
+pref("browser.snippets.geoUrl", "http://127.0.0.1/");
+pref("browser.snippets.updateUrl", "http://127.0.0.1/");
+pref("browser.snippets.statsUrl", "http://127.0.0.1/");
+pref("datareporting.policy.firstRunTime", 0);
+pref("datareporting.policy.dataSubmissionPolicyVersion", 2);
+pref("browser.webapps.checkForUpdates", 0);
+pref("browser.webapps.updateCheckUrl", "http://127.0.0.1/");
+pref("app.faqURL", "http://libreplanet.org/wiki/Group:IceCat/FAQ");
+
+// PFS url
+pref("pfs.datasource.url", "http://gnuzilla.gnu.org/plugins/PluginFinderService.php?mimetype=%PLUGIN_MIMETYPE%");
+pref("pfs.filehint.url", "http://gnuzilla.gnu.org/plugins/PluginFinderService.php?mimetype=%PLUGIN_MIMETYPE%");
+
+// Geolocation depends on third party services
+pref("geo.enabled", false);
+pref("geo.wifi.uri", "");
+
+// Disable heartbeat
+pref("browser.selfsupport.url", "");
+
+// Disable Link to FireFox Marketplace, currently loaded with non-free "apps"
+pref("browser.apps.URL", "");
+
+// Use old style preferences, that allow javascript to be disabled
+pref("browser.preferences.inContent",false);
+
+// Don't download ads for the newtab page
+pref("browser.newtabpage.directory.source", "");
+pref("browser.newtabpage.directory.ping", "");
+pref("browser.newtabpage.introShown", true);
+
+// Disable home snippets
+pref("browser.aboutHomeSnippets.updateUrl", "data:text/html");
+
+// Disable hardware acceleration and WebGL
+//pref("layers.acceleration.disabled", false);
+pref("webgl.disabled", false);
+
+// Disable SSDP
+pref("browser.casting.enabled", false);
+
+// Disable directory service
+pref("social.directories", "");
+pref("social.whitelist", "");
+pref("social.shareDirectory", "");
+
+// Disable Pocket integration
+pref("browser.pocket.api", "about:blank");
+pref("browser.pocket.enabled", false);
+pref("browser.pocket.enabledLocales", "about:blank");
+pref("browser.pocket.oAuthConsumerKey", "about:blank");
+pref("browser.pocket.site", "about:blank");
+pref("browser.pocket.useLocaleList", false);
+pref("extensions.pocket.enabled", false);
+
+// Do not require xpi extensions to be signed by Mozilla
+pref("xpinstall.signatures.required", false);
+
+// Disable File and Directory Entries API (Imported from Edge/Chromium)
+// https://developer.mozilla.org/en-US/Firefox/Releases/50#Files_and_directories
+// https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API
+// https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API/Introduction
+// https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API/Firefox_support
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1265767
+pref("dom.webkitBlink.filesystem.enabled", false);
+// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1258489
+// https://hg.mozilla.org/releases/mozilla-release/rev/133af19777be
+pref("dom.webkitBlink.dirPicker.enabled", false);
+
+// Directory Upload API, webkitdirectory
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1188880
+// https://bugzilla.mozilla.org/show_bug.cgi?id=907707
+// https://wicg.github.io/directory-upload/proposal.html
+pref("dom.input.dirpicker", false);