summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/branding/icecat/Makefile.in2
-rw-r--r--data/buildscripts/build-gnulinux.sh6
-rw-r--r--data/buildscripts/buildall.sh22
-rw-r--r--data/buildscripts/toolchain-android.sh2
-rw-r--r--data/extensions/spyblock@gnu.org/lib/utils.js12
-rw-r--r--data/patches/disable-cnnic-certs.patch311
-rw-r--r--data/patches/enable-js-options.patch304
-rw-r--r--data/patches/gnuzilla-bug-1002729.patch50
-rw-r--r--data/patches/gnuzilla-bug-1010972.patch11
-rw-r--r--data/patches/gnuzilla-bug-1025689.patch19
-rw-r--r--data/patches/gnuzilla-bug-1030899-1.patch60
-rw-r--r--data/patches/gnuzilla-bug-1030899-2.patch59
-rw-r--r--data/patches/gnuzilla-bug-1032460.patch16
-rw-r--r--data/patches/gnuzilla-bug-1034167-1.patch93
-rw-r--r--data/patches/gnuzilla-bug-1034167-2.patch1205
-rw-r--r--data/patches/gnuzilla-bug-1036286-1.patch188
-rw-r--r--data/patches/gnuzilla-bug-1036286-2.patch105
-rw-r--r--data/patches/gnuzilla-bug-1050780.patch53
-rw-r--r--data/patches/gnuzilla-bug-1055166.patch33
-rw-r--r--data/patches/gnuzilla-bug-1058778.patch10
-rw-r--r--data/patches/gnuzilla-bug-1089931.patch40
-rw-r--r--data/patches/gnuzilla-bug-1091987.patch40
-rw-r--r--data/patches/gnuzilla-bug-1095298.patch30
-rw-r--r--data/patches/hack-manifest-packaging.patch17
-rw-r--r--data/patches/reduceGeckoPriority.patch18
-rw-r--r--data/patches/reorder-mobile_android_base_android-services_mozbuild.patch34
-rw-r--r--data/patches/revert-gnuzilla-bug-973138.patch25
-rw-r--r--data/patches/torbrowser-bug-12811-2.patch33
-rw-r--r--data/patches/torbrowser-bug-12811.patch19
-rw-r--r--data/patches/torbrowser-bug-9837.patch22
-rw-r--r--data/searchplugins/creativecommons.xml11
-rw-r--r--data/searchplugins/duckduckgo.xml12
-rw-r--r--data/searchplugins/fsfdirectory.xml12
-rw-r--r--data/searchplugins/ixquick.xml15
-rw-r--r--data/searchplugins/startpage.xml16
-rw-r--r--data/searchplugins/wikipedia.xml14
-rw-r--r--makeicecat75
37 files changed, 151 insertions, 2843 deletions
diff --git a/data/branding/icecat/Makefile.in b/data/branding/icecat/Makefile.in
index 9cc8935..3b5c4d5 100644
--- a/data/branding/icecat/Makefile.in
+++ b/data/branding/icecat/Makefile.in
@@ -4,8 +4,6 @@
include $(topsrcdir)/config/config.mk
-PREF_JS_EXPORTS = $(srcdir)/pref/icecat-branding.js
-
# On Windows only do this step for browser, skip for metro.
ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows browser)
BRANDING_FILES := \
diff --git a/data/buildscripts/build-gnulinux.sh b/data/buildscripts/build-gnulinux.sh
index a844af9..86e6199 100644
--- a/data/buildscripts/build-gnulinux.sh
+++ b/data/buildscripts/build-gnulinux.sh
@@ -1,7 +1,9 @@
#!/bin/bash
set -e
+set -x
apt-get -q -y --force-yes build-dep firefox
+apt-get -q -y --force-yes install libgstreamermm-0.10-dev
cp ../../data/buildscripts/mozconfig-common .mozconfig
cat ../../data/buildscripts/mozconfig-gnulinux >> .mozconfig
@@ -14,7 +16,9 @@ rm -rf obj-gnulinux
[ $(arch) = "x86_64" ] || exit 0
cd obj-gnulinux/browser/locales
for locale in $(ls ../../../l10n/ -1); do
- make langpack-$locale LOCALE_MERGEDIR=.
+ rm $PWD/mergedir -rf
+ make merge-$locale LOCALE_MERGEDIR=$PWD/mergedir
+ make langpack-$locale LOCALE_MERGEDIR=$PWD/mergedir
done
diff --git a/data/buildscripts/buildall.sh b/data/buildscripts/buildall.sh
index bd91542..504a95f 100644
--- a/data/buildscripts/buildall.sh
+++ b/data/buildscripts/buildall.sh
@@ -26,18 +26,18 @@ EOF
env -i TERM=screen eatmydata sudo HOME=/home/ruben BUILDDIST=$2 ARCH=$3 pbuilder execute $SRCDIR/run.sh
}
-buildpackage windows belenos amd64 |tee windows.log 2>&1
-buildpackage mac belenos amd64 |tee mac.log 2>&1
-buildpackage gnulinux toutatis i386 |tee gnulinux-i386.log 2>&1
-mv $SRCDIR/obj-gnulinux $SRCDIR/obj-gnulinux-i386
-buildpackage gnulinux toutatis amd64 |tee gnulinux-amd64.log 2>&1
-mv $SRCDIR/obj-gnulinux $SRCDIR/obj-gnulinux-amd64
-buildpackage android belenos i386 |tee android.log 2>&1
+#buildpackage windows belenos amd64 |tee windows.log 2>&1
+#buildpackage mac belenos amd64 |tee mac.log 2>&1
+#buildpackage gnulinux belenos i386 |tee gnulinux-i386.log 2>&1
+#mv $SRCDIR/obj-gnulinux $SRCDIR/obj-gnulinux-i386
+buildpackage gnulinux belenos amd64 |tee gnulinux-amd64.log 2>&1
+#mv $SRCDIR/obj-gnulinux $SRCDIR/obj-gnulinux-amd64
+#buildpackage android belenos i386 |tee android.log 2>&1
rm binaries -rf
mkdir binaries/langpacks -p
-cp $1/obj-windows/dist/icecat*.zip binaries
-cp $1/obj-mac/dist/icecat/icecat*.dmg binaries
+#cp $1/obj-windows/dist/icecat*.zip binaries
+#cp $1/obj-mac/dist/icecat/icecat*.dmg binaries
cp $1/obj-gnulinux*/dist/icecat*.bz2 binaries
-cp $1/obj-android/dist/icecat*.apk binaries
-cp $1/obj-gnulinux-amd64/dist/linux-x86_64/xpi/* binaries/langpacks
+#cp $1/obj-android/dist/icecat*.apk binaries
+#cp $1/obj-gnulinux-amd64/dist/linux-x86_64/xpi/* binaries/langpacks
diff --git a/data/buildscripts/toolchain-android.sh b/data/buildscripts/toolchain-android.sh
index f50cbc4..3583af8 100644
--- a/data/buildscripts/toolchain-android.sh
+++ b/data/buildscripts/toolchain-android.sh
@@ -22,6 +22,8 @@ while true; do echo y; sleep 1; done |./android-sdk-linux/tools/android update a
echo export PATH=$PATH:$PWD/android-sdk-linux/tools:$PWD/android-sdk-linux/build-tools:$PWD/android-sdk-linux/platform-tools
export PATH=$PATH:$PWD/android-sdk-linux/tools:$PWD/android-sdk-linux/build-tools:$PWD/android-sdk-linux/platform-tools
+ln -s $PWD/android-sdk-linux/build_tools $PWD/android-sdk-linux/build-tools
+
pkill adb
echo DONE
diff --git a/data/extensions/spyblock@gnu.org/lib/utils.js b/data/extensions/spyblock@gnu.org/lib/utils.js
index 13f4876..cd69bf9 100644
--- a/data/extensions/spyblock@gnu.org/lib/utils.js
+++ b/data/extensions/spyblock@gnu.org/lib/utils.js
@@ -54,6 +54,18 @@ let Utils = exports.Utils =
get isFennec()
{
let {application} = require("info");
+ let result = (application == "fennec" || application == "fennec2");
+ Object.defineProperty(this, "isFennec", {value: result});
+ return result;
+ },
+
+ /**
+ * Returns whether we are running in Fennec, for Fennec-specific hacks
+ * @type Boolean
+ */
+ get isFennec()
+ {
+ let {application} = require("info");
let result = (application == "fennec" || application == "fennec2" || application == "icecatmobile");
Utils.__defineGetter__("isFennec", () => result);
return result;
diff --git a/data/patches/disable-cnnic-certs.patch b/data/patches/disable-cnnic-certs.patch
deleted file mode 100644
index 4e95705..0000000
--- a/data/patches/disable-cnnic-certs.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-diff -ru icecat-31.6.0.orig/security/certverifier/ExtendedValidation.cpp icecat-31.6.0/security/certverifier/ExtendedValidation.cpp
---- icecat-31.6.0.orig/security/certverifier/ExtendedValidation.cpp 2015-04-02 00:57:14.080068942 +0200
-+++ icecat-31.6.0/security/certverifier/ExtendedValidation.cpp 2015-04-02 22:02:39.738625417 +0200
-@@ -681,19 +681,6 @@
- nullptr
- },
- {
-- // CN=China Internet Network Information Center EV Certificates Root,O=China Internet Network Information Center,C=CN
-- "1.3.6.1.4.1.29836.1.10",
-- "CNNIC EV OID",
-- SEC_OID_UNKNOWN,
-- { 0x4F, 0x99, 0xAA, 0x93, 0xFB, 0x2B, 0xD1, 0x37, 0x26, 0xA1,
-- 0x99, 0x4A, 0xCE, 0x7F, 0xF0, 0x05, 0xF2, 0x93, 0x5D, 0x1E },
-- "MIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29y"
-- "ayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNoaW5hIEludGVybmV0IE5l"
-- "dHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRlcyBSb290",
-- "SJ8AAQ==",
-- nullptr
-- },
-- {
- // CN=TWCA Root Certification Authority,OU=Root CA,O=TAIWAN-CA,C=TW
- "1.3.6.1.4.1.40869.1.1.22.3",
- "TWCA EV OID",
-diff -ru icecat-31.6.0.orig/security/nss/lib/ckfw/builtins/certdata.txt icecat-31.6.0/security/nss/lib/ckfw/builtins/certdata.txt
---- icecat-31.6.0.orig/security/nss/lib/ckfw/builtins/certdata.txt 2015-04-02 00:57:19.056068847 +0200
-+++ icecat-31.6.0/security/nss/lib/ckfw/builtins/certdata.txt 2015-04-02 22:02:01.058626152 +0200
-@@ -16222,129 +16222,6 @@
- CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
-
- #
--# Certificate "CNNIC ROOT"
--#
--# Issuer: CN=CNNIC ROOT,O=CNNIC,C=CN
--# Serial Number: 1228079105 (0x49330001)
--# Subject: CN=CNNIC ROOT,O=CNNIC,C=CN
--# Not Valid Before: Mon Apr 16 07:09:14 2007
--# Not Valid After : Fri Apr 16 07:09:14 2027
--# Fingerprint (MD5): 21:BC:82:AB:49:C4:13:3B:4B:B2:2B:5C:6B:90:9C:19
--# Fingerprint (SHA1): 8B:AF:4C:9B:1D:F0:2A:92:F7:DA:12:8E:B9:1B:AC:F4:98:60:4B:6F
--CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
--CKA_TOKEN CK_BBOOL CK_TRUE
--CKA_PRIVATE CK_BBOOL CK_FALSE
--CKA_MODIFIABLE CK_BBOOL CK_FALSE
--CKA_LABEL UTF8 "CNNIC ROOT"
--CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
--CKA_SUBJECT MULTILINE_OCTAL
--\060\062\061\013\060\011\006\003\125\004\006\023\002\103\116\061
--\016\060\014\006\003\125\004\012\023\005\103\116\116\111\103\061
--\023\060\021\006\003\125\004\003\023\012\103\116\116\111\103\040
--\122\117\117\124
--END
--CKA_ID UTF8 "0"
--CKA_ISSUER MULTILINE_OCTAL
--\060\062\061\013\060\011\006\003\125\004\006\023\002\103\116\061
--\016\060\014\006\003\125\004\012\023\005\103\116\116\111\103\061
--\023\060\021\006\003\125\004\003\023\012\103\116\116\111\103\040
--\122\117\117\124
--END
--CKA_SERIAL_NUMBER MULTILINE_OCTAL
--\002\004\111\063\000\001
--END
--CKA_VALUE MULTILINE_OCTAL
--\060\202\003\125\060\202\002\075\240\003\002\001\002\002\004\111
--\063\000\001\060\015\006\011\052\206\110\206\367\015\001\001\005
--\005\000\060\062\061\013\060\011\006\003\125\004\006\023\002\103
--\116\061\016\060\014\006\003\125\004\012\023\005\103\116\116\111
--\103\061\023\060\021\006\003\125\004\003\023\012\103\116\116\111
--\103\040\122\117\117\124\060\036\027\015\060\067\060\064\061\066
--\060\067\060\071\061\064\132\027\015\062\067\060\064\061\066\060
--\067\060\071\061\064\132\060\062\061\013\060\011\006\003\125\004
--\006\023\002\103\116\061\016\060\014\006\003\125\004\012\023\005
--\103\116\116\111\103\061\023\060\021\006\003\125\004\003\023\012
--\103\116\116\111\103\040\122\117\117\124\060\202\001\042\060\015
--\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202\001
--\017\000\060\202\001\012\002\202\001\001\000\323\065\367\077\163
--\167\255\350\133\163\027\302\321\157\355\125\274\156\352\350\244
--\171\262\154\303\243\357\341\237\261\073\110\205\365\232\134\041
--\042\020\054\305\202\316\332\343\232\156\067\341\207\054\334\271
--\014\132\272\210\125\337\375\252\333\037\061\352\001\361\337\071
--\001\301\023\375\110\122\041\304\125\337\332\330\263\124\166\272
--\164\261\267\175\327\300\350\366\131\305\115\310\275\255\037\024
--\332\337\130\104\045\062\031\052\307\176\176\216\256\070\260\060
--\173\107\162\011\061\360\060\333\303\033\166\051\273\151\166\116
--\127\371\033\144\242\223\126\267\157\231\156\333\012\004\234\021
--\343\200\037\313\143\224\020\012\251\341\144\202\061\371\214\047
--\355\246\231\000\366\160\223\030\370\241\064\206\243\335\172\302
--\030\171\366\172\145\065\317\220\353\275\063\223\237\123\253\163
--\073\346\233\064\040\057\035\357\251\035\143\032\240\200\333\003
--\057\371\046\032\206\322\215\273\251\276\122\072\207\147\110\015
--\277\264\240\330\046\276\043\137\163\067\177\046\346\222\004\243
--\177\317\040\247\267\363\072\312\313\231\313\002\003\001\000\001
--\243\163\060\161\060\021\006\011\140\206\110\001\206\370\102\001
--\001\004\004\003\002\000\007\060\037\006\003\125\035\043\004\030
--\060\026\200\024\145\362\061\255\052\367\367\335\122\226\012\307
--\002\301\016\357\246\325\073\021\060\017\006\003\125\035\023\001
--\001\377\004\005\060\003\001\001\377\060\013\006\003\125\035\017
--\004\004\003\002\001\376\060\035\006\003\125\035\016\004\026\004
--\024\145\362\061\255\052\367\367\335\122\226\012\307\002\301\016
--\357\246\325\073\021\060\015\006\011\052\206\110\206\367\015\001
--\001\005\005\000\003\202\001\001\000\113\065\356\314\344\256\277
--\303\156\255\237\225\073\113\077\133\036\337\127\051\242\131\312
--\070\342\271\032\377\236\346\156\062\335\036\256\352\065\267\365
--\223\221\116\332\102\341\303\027\140\120\362\321\134\046\271\202
--\267\352\155\344\234\204\347\003\171\027\257\230\075\224\333\307
--\272\000\347\270\277\001\127\301\167\105\062\014\073\361\264\034
--\010\260\375\121\240\241\335\232\035\023\066\232\155\267\307\074
--\271\341\305\331\027\372\203\325\075\025\240\074\273\036\013\342
--\310\220\077\250\206\014\374\371\213\136\205\313\117\133\113\142
--\021\107\305\105\174\005\057\101\261\236\020\151\033\231\226\340
--\125\171\373\116\206\231\270\224\332\206\070\152\223\243\347\313
--\156\345\337\352\041\125\211\234\175\175\177\230\365\000\211\356
--\343\204\300\134\226\265\305\106\352\106\340\205\125\266\033\311
--\022\326\301\315\315\200\363\002\001\074\310\151\313\105\110\143
--\330\224\320\354\205\016\073\116\021\145\364\202\214\246\075\256
--\056\042\224\011\310\134\352\074\201\135\026\052\003\227\026\125
--\011\333\212\101\202\236\146\233\021
--END
--
--# Trust for Certificate "CNNIC ROOT"
--# Issuer: CN=CNNIC ROOT,O=CNNIC,C=CN
--# Serial Number: 1228079105 (0x49330001)
--# Subject: CN=CNNIC ROOT,O=CNNIC,C=CN
--# Not Valid Before: Mon Apr 16 07:09:14 2007
--# Not Valid After : Fri Apr 16 07:09:14 2027
--# Fingerprint (MD5): 21:BC:82:AB:49:C4:13:3B:4B:B2:2B:5C:6B:90:9C:19
--# Fingerprint (SHA1): 8B:AF:4C:9B:1D:F0:2A:92:F7:DA:12:8E:B9:1B:AC:F4:98:60:4B:6F
--CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
--CKA_TOKEN CK_BBOOL CK_TRUE
--CKA_PRIVATE CK_BBOOL CK_FALSE
--CKA_MODIFIABLE CK_BBOOL CK_FALSE
--CKA_LABEL UTF8 "CNNIC ROOT"
--CKA_CERT_SHA1_HASH MULTILINE_OCTAL
--\213\257\114\233\035\360\052\222\367\332\022\216\271\033\254\364
--\230\140\113\157
--END
--CKA_CERT_MD5_HASH MULTILINE_OCTAL
--\041\274\202\253\111\304\023\073\113\262\053\134\153\220\234\031
--END
--CKA_ISSUER MULTILINE_OCTAL
--\060\062\061\013\060\011\006\003\125\004\006\023\002\103\116\061
--\016\060\014\006\003\125\004\012\023\005\103\116\116\111\103\061
--\023\060\021\006\003\125\004\003\023\012\103\116\116\111\103\040
--\122\117\117\124
--END
--CKA_SERIAL_NUMBER MULTILINE_OCTAL
--\002\004\111\063\000\001
--END
--CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
--CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
--CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
--CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
--
--#
- # Certificate "ApplicationCA - Japanese Government"
- #
- # Issuer: OU=ApplicationCA,O=Japanese Government,C=JP
-@@ -27266,154 +27143,6 @@
- CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
-
- #
--# Certificate "China Internet Network Information Center EV Certificates Root"
--#
--# Issuer: CN=China Internet Network Information Center EV Certificates Root,O=China Internet Network Information Center,C=CN
--# Serial Number: 1218379777 (0x489f0001)
--# Subject: CN=China Internet Network Information Center EV Certificates Root,O=China Internet Network Information Center,C=CN
--# Not Valid Before: Tue Aug 31 07:11:25 2010
--# Not Valid After : Sat Aug 31 07:11:25 2030
--# Fingerprint (MD5): 55:5D:63:00:97:BD:6A:97:F5:67:AB:4B:FB:6E:63:15
--# Fingerprint (SHA1): 4F:99:AA:93:FB:2B:D1:37:26:A1:99:4A:CE:7F:F0:05:F2:93:5D:1E
--CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
--CKA_TOKEN CK_BBOOL CK_TRUE
--CKA_PRIVATE CK_BBOOL CK_FALSE
--CKA_MODIFIABLE CK_BBOOL CK_FALSE
--CKA_LABEL UTF8 "China Internet Network Information Center EV Certificates Root"
--CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
--CKA_SUBJECT MULTILINE_OCTAL
--\060\201\212\061\013\060\011\006\003\125\004\006\023\002\103\116
--\061\062\060\060\006\003\125\004\012\014\051\103\150\151\156\141
--\040\111\156\164\145\162\156\145\164\040\116\145\164\167\157\162
--\153\040\111\156\146\157\162\155\141\164\151\157\156\040\103\145
--\156\164\145\162\061\107\060\105\006\003\125\004\003\014\076\103
--\150\151\156\141\040\111\156\164\145\162\156\145\164\040\116\145
--\164\167\157\162\153\040\111\156\146\157\162\155\141\164\151\157
--\156\040\103\145\156\164\145\162\040\105\126\040\103\145\162\164
--\151\146\151\143\141\164\145\163\040\122\157\157\164
--END
--CKA_ID UTF8 "0"
--CKA_ISSUER MULTILINE_OCTAL
--\060\201\212\061\013\060\011\006\003\125\004\006\023\002\103\116
--\061\062\060\060\006\003\125\004\012\014\051\103\150\151\156\141
--\040\111\156\164\145\162\156\145\164\040\116\145\164\167\157\162
--\153\040\111\156\146\157\162\155\141\164\151\157\156\040\103\145
--\156\164\145\162\061\107\060\105\006\003\125\004\003\014\076\103
--\150\151\156\141\040\111\156\164\145\162\156\145\164\040\116\145
--\164\167\157\162\153\040\111\156\146\157\162\155\141\164\151\157
--\156\040\103\145\156\164\145\162\040\105\126\040\103\145\162\164
--\151\146\151\143\141\164\145\163\040\122\157\157\164
--END
--CKA_SERIAL_NUMBER MULTILINE_OCTAL
--\002\004\110\237\000\001
--END
--CKA_VALUE MULTILINE_OCTAL
--\060\202\003\367\060\202\002\337\240\003\002\001\002\002\004\110
--\237\000\001\060\015\006\011\052\206\110\206\367\015\001\001\005
--\005\000\060\201\212\061\013\060\011\006\003\125\004\006\023\002
--\103\116\061\062\060\060\006\003\125\004\012\014\051\103\150\151
--\156\141\040\111\156\164\145\162\156\145\164\040\116\145\164\167
--\157\162\153\040\111\156\146\157\162\155\141\164\151\157\156\040
--\103\145\156\164\145\162\061\107\060\105\006\003\125\004\003\014
--\076\103\150\151\156\141\040\111\156\164\145\162\156\145\164\040
--\116\145\164\167\157\162\153\040\111\156\146\157\162\155\141\164
--\151\157\156\040\103\145\156\164\145\162\040\105\126\040\103\145
--\162\164\151\146\151\143\141\164\145\163\040\122\157\157\164\060
--\036\027\015\061\060\060\070\063\061\060\067\061\061\062\065\132
--\027\015\063\060\060\070\063\061\060\067\061\061\062\065\132\060
--\201\212\061\013\060\011\006\003\125\004\006\023\002\103\116\061
--\062\060\060\006\003\125\004\012\014\051\103\150\151\156\141\040
--\111\156\164\145\162\156\145\164\040\116\145\164\167\157\162\153
--\040\111\156\146\157\162\155\141\164\151\157\156\040\103\145\156
--\164\145\162\061\107\060\105\006\003\125\004\003\014\076\103\150
--\151\156\141\040\111\156\164\145\162\156\145\164\040\116\145\164
--\167\157\162\153\040\111\156\146\157\162\155\141\164\151\157\156
--\040\103\145\156\164\145\162\040\105\126\040\103\145\162\164\151
--\146\151\143\141\164\145\163\040\122\157\157\164\060\202\001\042
--\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003
--\202\001\017\000\060\202\001\012\002\202\001\001\000\233\176\163
--\356\275\073\170\252\144\103\101\365\120\337\224\362\056\262\215
--\112\216\106\124\322\041\022\310\071\062\102\006\351\203\325\237
--\122\355\345\147\003\073\124\301\214\231\231\314\351\300\017\377
--\015\331\204\021\262\270\321\313\133\334\036\371\150\061\144\341
--\233\372\164\353\150\271\040\225\367\306\017\215\107\254\132\006
--\335\141\253\342\354\330\237\027\055\234\312\074\065\227\125\161
--\315\103\205\261\107\026\365\054\123\200\166\317\323\000\144\275
--\100\231\335\314\330\333\304\237\326\023\137\101\203\213\371\015
--\207\222\126\064\154\032\020\013\027\325\132\034\227\130\204\074
--\204\032\056\134\221\064\156\031\137\177\027\151\305\145\357\153
--\041\306\325\120\072\277\141\271\005\215\357\157\064\072\262\157
--\024\143\277\026\073\233\251\052\375\267\053\070\146\006\305\054
--\342\252\147\036\105\247\215\004\146\102\366\217\053\357\210\040
--\151\217\062\214\024\163\332\053\206\221\143\042\232\362\247\333
--\316\211\213\253\135\307\024\301\133\060\152\037\261\267\236\056
--\201\001\002\355\317\226\136\143\333\250\346\070\267\002\003\001
--\000\001\243\143\060\141\060\037\006\003\125\035\043\004\030\060
--\026\200\024\174\162\113\071\307\300\333\142\245\117\233\252\030
--\064\222\242\312\203\202\131\060\017\006\003\125\035\023\001\001
--\377\004\005\060\003\001\001\377\060\016\006\003\125\035\017\001
--\001\377\004\004\003\002\001\006\060\035\006\003\125\035\016\004
--\026\004\024\174\162\113\071\307\300\333\142\245\117\233\252\030
--\064\222\242\312\203\202\131\060\015\006\011\052\206\110\206\367
--\015\001\001\005\005\000\003\202\001\001\000\052\303\307\103\067
--\217\335\255\244\262\014\356\334\024\155\217\050\244\230\111\313
--\014\200\352\363\355\043\146\165\175\305\323\041\147\171\321\163
--\305\265\003\267\130\254\014\124\057\306\126\023\017\061\332\006
--\347\145\073\035\157\066\333\310\035\371\375\200\006\312\243\075
--\146\026\250\235\114\026\175\300\225\106\265\121\344\342\037\327
--\352\006\115\143\215\226\214\357\347\063\127\102\072\353\214\301
--\171\310\115\166\175\336\366\261\267\201\340\240\371\241\170\106
--\027\032\126\230\360\116\075\253\034\355\354\071\334\007\110\367
--\143\376\006\256\302\244\134\152\133\062\210\305\307\063\205\254
--\146\102\107\302\130\044\231\341\345\076\345\165\054\216\103\326
--\135\074\170\036\250\225\202\051\120\321\321\026\272\357\301\276
--\172\331\264\330\314\036\114\106\341\167\261\061\253\275\052\310
--\316\217\156\241\135\177\003\165\064\344\255\211\105\124\136\276
--\256\050\245\273\077\170\171\353\163\263\012\015\375\276\311\367
--\126\254\366\267\355\057\233\041\051\307\070\266\225\304\004\362
--\303\055\375\024\052\220\231\271\007\314\237
--END
--
--# Trust for "China Internet Network Information Center EV Certificates Root"
--# Issuer: CN=China Internet Network Information Center EV Certificates Root,O=China Internet Network Information Center,C=CN
--# Serial Number: 1218379777 (0x489f0001)
--# Subject: CN=China Internet Network Information Center EV Certificates Root,O=China Internet Network Information Center,C=CN
--# Not Valid Before: Tue Aug 31 07:11:25 2010
--# Not Valid After : Sat Aug 31 07:11:25 2030
--# Fingerprint (MD5): 55:5D:63:00:97:BD:6A:97:F5:67:AB:4B:FB:6E:63:15
--# Fingerprint (SHA1): 4F:99:AA:93:FB:2B:D1:37:26:A1:99:4A:CE:7F:F0:05:F2:93:5D:1E
--CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
--CKA_TOKEN CK_BBOOL CK_TRUE
--CKA_PRIVATE CK_BBOOL CK_FALSE
--CKA_MODIFIABLE CK_BBOOL CK_FALSE
--CKA_LABEL UTF8 "China Internet Network Information Center EV Certificates Root"
--CKA_CERT_SHA1_HASH MULTILINE_OCTAL
--\117\231\252\223\373\053\321\067\046\241\231\112\316\177\360\005
--\362\223\135\036
--END
--CKA_CERT_MD5_HASH MULTILINE_OCTAL
--\125\135\143\000\227\275\152\227\365\147\253\113\373\156\143\025
--END
--CKA_ISSUER MULTILINE_OCTAL
--\060\201\212\061\013\060\011\006\003\125\004\006\023\002\103\116
--\061\062\060\060\006\003\125\004\012\014\051\103\150\151\156\141
--\040\111\156\164\145\162\156\145\164\040\116\145\164\167\157\162
--\153\040\111\156\146\157\162\155\141\164\151\157\156\040\103\145
--\156\164\145\162\061\107\060\105\006\003\125\004\003\014\076\103
--\150\151\156\141\040\111\156\164\145\162\156\145\164\040\116\145
--\164\167\157\162\153\040\111\156\146\157\162\155\141\164\151\157
--\156\040\103\145\156\164\145\162\040\105\126\040\103\145\162\164
--\151\146\151\143\141\164\145\163\040\122\157\157\164
--END
--CKA_SERIAL_NUMBER MULTILINE_OCTAL
--\002\004\110\237\000\001
--END
--CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
--CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
--CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
--CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
--
--#
- # Certificate "Swisscom Root CA 2"
- #
- # Issuer: CN=Swisscom Root CA 2,OU=Digital Certificate Services,O=Swisscom,C=ch
diff --git a/data/patches/enable-js-options.patch b/data/patches/enable-js-options.patch
deleted file mode 100644
index 2ba6cb8..0000000
--- a/data/patches/enable-js-options.patch
+++ /dev/null
@@ -1,304 +0,0 @@
-# revert https://bug851702.bugzilla.mozilla.org/attachment.cgi?id=733785
-
-# HG changeset patch
-# User Gijs Kruitbosch <gijskruitbosch@gmail.com>
-# Date 1365155574 -7200
-# Node ID 444b9baa31d6065d37edbd61a2dcb892c989e0e2
-# Parent 99121d529b47ec285d61f64988335e60ac120cf7
-Bug 851702 - Remove JS load and advanced preferences from the UI
-
---- b/browser/components/preferences/content.xul
-+++ a/browser/components/preferences/content.xul
-@@ -17,18 +17,23 @@
-
- <prefpane id="paneContent"
- onpaneload="gContentPane.init();"
- helpTopic="prefs-content">
-
- <preferences id="contentPreferences">
- <!--XXX buttons prefs -->
-
-+ <!-- POPUPS, JAVASCRIPT -->
-- <!-- POPUPS -->
- <preference id="dom.disable_open_during_load" name="dom.disable_open_during_load" type="bool"/>
-+ <preference id="javascript.enabled" name="javascript.enabled" type="bool"/>
-+
-+ <preference id="pref.advanced.javascript.disable_button.advanced"
-+ name="pref.advanced.javascript.disable_button.advanced"
-+ type="bool"/>
-
- <!-- FONTS -->
- <preference id="font.language.group"
- name="font.language.group"
- type="wstring"
- onchange="gContentPane._rebuildFonts();"/>
- </preferences>
-
-@@ -51,16 +56,30 @@
- label="&blockPopups.label;" accesskey="&blockPopups.accesskey;"
- onsyncfrompreference="return gContentPane.updateButtons('popupPolicyButton',
- 'dom.disable_open_during_load');"/>
- </vbox>
- <button id="popupPolicyButton" label="&popupExceptions.label;"
- oncommand="gContentPane.showPopupExceptions();"
- accesskey="&popupExceptions.accesskey;"/>
- </row>
-+ <row id="enableJavaScriptRow">
-+ <vbox align="start">
-+ <checkbox id="enableJavaScript" preference="javascript.enabled"
-+ label="&enableJavaScript.label;" accesskey="&enableJavaScript.accesskey;"
-+ onsyncfrompreference="return gContentPane.updateButtons('advancedJSButton',
-+ 'javascript.enabled');"/>
-+ </vbox>
-+ <vbox>
-+ <button id="advancedJSButton" label="&advancedJS.label;"
-+ accesskey="&advancedJS.accesskey;"
-+ oncommand="gContentPane.showAdvancedJS();"
-+ preference="pref.advanced.javascript.disable_button.advanced"/>
-+ </vbox>
-+ </row>
- </rows>
- </grid>
- </groupbox>
-
- <!-- Fonts and Colors -->
- <groupbox id="fontsGroup">
- <caption label="&fontsAndColors.label;"/>
-
---- b/browser/components/preferences/in-content/content.xul
-+++ a/browser/components/preferences/in-content/content.xul
-@@ -1,18 +1,24 @@
- <!-- 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/. -->
-
- <preferences id="contentPreferences">
-
-+ <!-- Popups and JavaScript -->
-- <!-- Popups -->
- <preference id="dom.disable_open_during_load"
- name="dom.disable_open_during_load"
- type="bool"/>
-+ <preference id="javascript.enabled"
-+ name="javascript.enabled"
-+ type="bool"/>
-+ <preference id="pref.advanced.javascript.disable_button.advanced"
-+ name="pref.advanced.javascript.disable_button.advanced"
-+ type="bool"/>
-
- <!-- Fonts -->
- <preference id="font.language.group"
- name="font.language.group"
- type="wstring"
- onchange="gContentPane._rebuildFonts();"/>
- </preferences>
-
-@@ -39,16 +45,30 @@
- label="&blockPopups.label;" accesskey="&blockPopups.accesskey;"
- onsyncfrompreference="return gContentPane.updateButtons('popupPolicyButton',
- 'dom.disable_open_during_load');"/>
- </vbox>
- <button id="popupPolicyButton" label="&popupExceptions.label;"
- oncommand="gContentPane.showPopupExceptions();"
- accesskey="&popupExceptions.accesskey;"/>
- </row>
-+ <row id="enableJavaScriptRow">
-+ <vbox align="start">
-+ <checkbox id="enableJavaScript" preference="javascript.enabled"
-+ label="&enableJavaScript.label;" accesskey="&enableJavaScript.accesskey;"
-+ onsyncfrompreference="return gContentPane.updateButtons('advancedJSButton',
-+ 'javascript.enabled');"/>
-+ </vbox>
-+ <vbox>
-+ <button id="advancedJSButton" label="&advancedJS.label;"
-+ accesskey="&advancedJS.accesskey;"
-+ oncommand="gContentPane.showAdvancedJS();"
-+ preference="pref.advanced.javascript.disable_button.advanced"/>
-+ </vbox>
-+ </row>
- </rows>
- </grid>
- </groupbox>
-
- <!-- Fonts and Colors -->
- <groupbox id="fontsGroup" data-category="paneContent" hidden="true">
- <caption label="&fontsAndColors.label;"/>
-
---- b/browser/components/preferences/jar.mn
-+++ a/browser/components/preferences/jar.mn
-@@ -4,16 +4,17 @@
-
- browser.jar:
- content/browser/preferences/aboutPermissions.xul
- content/browser/preferences/aboutPermissions.js
- content/browser/preferences/aboutPermissions.css
- content/browser/preferences/aboutPermissions.xml
- * content/browser/preferences/advanced.xul
- * content/browser/preferences/advanced.js
-+ content/browser/preferences/advanced-scripts.xul
- content/browser/preferences/applications.xul
- * content/browser/preferences/applications.js
- content/browser/preferences/applicationManager.xul
- * content/browser/preferences/applicationManager.js
- * content/browser/preferences/colors.xul
- * content/browser/preferences/cookies.xul
- content/browser/preferences/cookies.js
- content/browser/preferences/content.xul
---- b/browser/locales/en-US/chrome/browser/preferences/content.dtd
-+++ a/browser/locales/en-US/chrome/browser/preferences/content.dtd
-@@ -2,16 +2,25 @@
- - 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 blockPopups.label "Block pop-up windows">
- <!ENTITY blockPopups.accesskey "B">
- <!ENTITY popupExceptions.label "Exceptions…">
- <!ENTITY popupExceptions.accesskey "E">
-
-+<!ENTITY enableJavaScript.label "Enable JavaScript">
-+<!ENTITY enableJavaScript.accesskey "J">
-+<!ENTITY advancedJS.label "Advanced…">
-+<!ENTITY advancedJS.accesskey "v">
-+
-+<!ENTITY enableJava.label "Enable Java">
-+<!ENTITY enableJava.accesskey "n">
-+
-+
- <!ENTITY fontsAndColors.label "Fonts &amp; Colors">
-
- <!ENTITY defaultFont.label "Default font:">
- <!ENTITY defaultFont.accesskey "D">
- <!ENTITY defaultSize.label "Size:">
- <!ENTITY defaultSize.accesskey "S">
-
- <!ENTITY advancedFonts.label "Advanced…">
---- b/browser/locales/jar.mn
-+++ a/browser/locales/jar.mn
-@@ -81,16 +81,17 @@
- #endif
- locale/browser/feeds/subscribe.dtd (%chrome/browser/feeds/subscribe.dtd)
- locale/browser/feeds/subscribe.properties (%chrome/browser/feeds/subscribe.properties)
- locale/browser/migration/migration.dtd (%chrome/browser/migration/migration.dtd)
- locale/browser/migration/migration.properties (%chrome/browser/migration/migration.properties)
- locale/browser/preferences/aboutPermissions.dtd (%chrome/browser/preferences/aboutPermissions.dtd)
- locale/browser/preferences/aboutPermissions.properties (%chrome/browser/preferences/aboutPermissions.properties)
- locale/browser/preferences/advanced.dtd (%chrome/browser/preferences/advanced.dtd)
-+ locale/browser/preferences/advanced-scripts.dtd (%chrome/browser/preferences/advanced-scripts.dtd)
- locale/browser/preferences/applicationManager.dtd (%chrome/browser/preferences/applicationManager.dtd)
- locale/browser/preferences/applicationManager.properties (%chrome/browser/preferences/applicationManager.properties)
- locale/browser/preferences/colors.dtd (%chrome/browser/preferences/colors.dtd)
- locale/browser/preferences/cookies.dtd (%chrome/browser/preferences/cookies.dtd)
- locale/browser/preferences/content.dtd (%chrome/browser/preferences/content.dtd)
- locale/browser/preferences/connection.dtd (%chrome/browser/preferences/connection.dtd)
- locale/browser/preferences/applications.dtd (%chrome/browser/preferences/applications.dtd)
- locale/browser/preferences/fonts.dtd (%chrome/browser/preferences/fonts.dtd)
---- b/browser/components/preferences/content.js 2014-05-07 17:02:34.000000000 +0200
-+++ a/browser/components/preferences/content.js 2014-04-28 01:52:01.000000000 +0200
-@@ -57,7 +57,18 @@
- "chrome://browser/content/preferences/permissions.xul",
- "", params);
- },
-+
-+ // JAVASCRIPT
-
-+ /**
-+ * Displays the advanced JavaScript preferences for enabling or disabling
-+ * various annoying behaviors.
-+ */
-+ showAdvancedJS: function ()
-+ {
-+ openDialog("chrome://browser/content/preferences/advanced-scripts.xul",
-+ "Browser:AdvancedScripts", null);
-+ },
-
- // FONTS
-
---- b/browser/components/preferences/in-content/content.js 2014-04-28 01:52:01.000000000 +0200
-+++ a/browser/components/preferences/in-content/content.js 2014-05-07 17:01:48.000000000 +0200
-@@ -58,6 +58,18 @@
- "Browser:Permissions", "resizable=yes", params);
- },
-
-+ // JAVASCRIPT
-+
-+ /**
-+ * Displays the advanced JavaScript preferences for enabling or disabling
-+ * various annoying behaviors.
-+ */
-+ showAdvancedJS: function ()
-+ {
-+ openDialog("chrome://browser/content/preferences/advanced-scripts.xul",
-+ "Browser:AdvancedScripts", null);
-+ },
-+
- // FONTS
-
- /**
-diff --git a/browser/components/preferences/advanced-scripts.xul b/browser/components/preferences/advanced-scripts.xul
---- /dev/null
-+++ a/browser/components/preferences/advanced-scripts.xul
-@@ -0,0 +1,46 @@
-+<?xml version="1.0"?>
-+
-+<!-- -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->
-+<!-- This Source Code Form is subject to the terms of the Mozilla Public
-+ - License, v. 2.0. If a copy of the MPL was not distributed with this
-+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-+
-+<!DOCTYPE prefwindow SYSTEM "chrome://browser/locale/preferences/advanced-scripts.dtd">
-+
-+<?xml-stylesheet href="chrome://global/skin/"?>
-+
-+<prefwindow id="AdvancedJSDialog" type="child"
-+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-+ title="&advancedJSDialog.title;"
-+ dlgbuttons="accept,cancel,help"
-+ ondialoghelp="openPrefsHelp()">
-+
-+ <script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
-+
-+ <prefpane id="AdvancedJSDialogPane"
-+ helpTopic="prefs-advanced-javascript">
-+
-+ <preferences>
-+ <preference id="dom.event.contextmenu.enabled" name="dom.event.contextmenu.enabled" type="bool"/>
-+ <preference id="dom.disable_window_move_resize" name="dom.disable_window_move_resize" type="bool" inverted="true"/>
-+ <preference id="dom.disable_window_flip" name="dom.disable_window_flip" type="bool" inverted="true"/>
-+ </preferences>
-+
-+ <script type="application/javascript" src="chrome://browser/content/preferences/advanced-scripts.js"/>
-+
-+ <stringbundle id="preferencesBundle" src="chrome://browser/locale/preferences/preferences.properties"/>
-+
-+ <description value="&allowScripts.label;"/>
-+
-+ <checkbox id="moveResizePopupWindows" label="&moveResizePopupWindows.label;"
-+ accesskey="&moveResizePopupWindows.accesskey;"
-+ preference="dom.disable_window_move_resize"/>
-+ <checkbox id="raiseLowerWindows" label="&raiseLowerWindows.label;"
-+ accesskey="&raiseLowerWindows.accesskey;"
-+ preference="dom.disable_window_flip"/>
-+ <checkbox id="disableContextMenus" label="&disableContextMenus.label;"
-+ accesskey="&disableContextMenus.accesskey;"
-+ preference="dom.event.contextmenu.enabled"/>
-+
-+ </prefpane>
-+</prefwindow>
---- /dev/null
-+++ a/browser/locales/en-US/chrome/browser/preferences/advanced-scripts.dtd
-@@ -0,0 +1,15 @@
-+<!-- 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/. -->
-+
-+<!ENTITY advancedJSDialog.title "Advanced JavaScript Settings">
-+<!ENTITY window.width "37em">
-+
-+<!ENTITY allowScripts.label "Allow scripts to:">
-+
-+<!ENTITY moveResizePopupWindows.label "Move or resize popup windows">
-+<!ENTITY moveResizePopupWindows.accesskey "M">
-+<!ENTITY raiseLowerWindows.label "Raise or lower windows">
-+<!ENTITY raiseLowerWindows.accesskey "R">
-+<!ENTITY disableContextMenus.label "Disable or replace context menus">
-+<!ENTITY disableContextMenus.accesskey "D">
diff --git a/data/patches/gnuzilla-bug-1002729.patch b/data/patches/gnuzilla-bug-1002729.patch
deleted file mode 100644
index 9a35928..0000000
--- a/data/patches/gnuzilla-bug-1002729.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Link failure due to static const integers in WebRTC
-https://bugzilla.mozilla.org/show_bug.cgi?id=1002729
-
-# HG changeset patch
-# User Blake Kaplan <mrbkap@gmail.com>
-
-Bug 1002729 - Avoid problems with ternary expressions and static const integers with no definition. r=jesup
-
-diff --git a/content/media/webrtc/MediaEngine.h b/content/media/webrtc/MediaEngine.h
-index 91ae08a..c7500cd 100644
---- a/content/media/webrtc/MediaEngine.h
-+++ b/content/media/webrtc/MediaEngine.h
-@@ -149,23 +149,33 @@ public:
-
- int32_t GetHeight(bool aHD = false) const {
- return mHeight? mHeight : (mWidth?
- (mWidth * GetDefHeight(aHD)) / GetDefWidth(aHD) :
- GetDefHeight(aHD));
- }
- private:
- static int32_t GetDefWidth(bool aHD = false) {
-- return aHD ? MediaEngine::DEFAULT_169_VIDEO_WIDTH :
-- MediaEngine::DEFAULT_43_VIDEO_WIDTH;
-+ // It'd be nice if we could use the ternary operator here, but we can't
-+ // because of bug 1002729.
-+ if (aHD) {
-+ return MediaEngine::DEFAULT_169_VIDEO_WIDTH;
-+ }
-+
-+ return MediaEngine::DEFAULT_43_VIDEO_WIDTH;
- }
-
- static int32_t GetDefHeight(bool aHD = false) {
-- return aHD ? MediaEngine::DEFAULT_169_VIDEO_HEIGHT :
-- MediaEngine::DEFAULT_43_VIDEO_HEIGHT;
-+ // It'd be nice if we could use the ternary operator here, but we can't
-+ // because of bug 1002729.
-+ if (aHD) {
-+ return MediaEngine::DEFAULT_169_VIDEO_HEIGHT;
-+ }
-+
-+ return MediaEngine::DEFAULT_43_VIDEO_HEIGHT;
- }
- };
-
- class MediaEngineVideoSource : public MediaEngineSource
- {
- public:
- virtual ~MediaEngineVideoSource() {}
-
diff --git a/data/patches/gnuzilla-bug-1010972.patch b/data/patches/gnuzilla-bug-1010972.patch
deleted file mode 100644
index 94eaf2b..0000000
--- a/data/patches/gnuzilla-bug-1010972.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/media/libyuv/source/cpu_id.cc 2015-01-27 19:15:52.069520584 +0100
-+++ b/media/libyuv/source/cpu_id.cc 2015-01-30 00:50:10.425853894 +0100
-@@ -97,7 +97,7 @@
- uint32 xcr0 = 0u;
- #if defined(_MSC_VER) && defined(_XCR_XFEATURE_ENABLED_MASK)
- xcr0 = (uint32)(_xgetbv(_XCR_XFEATURE_ENABLED_MASK));
--#elif defined(_M_IX86)
-+#elif defined(_MSC_VER) && defined(_M_IX86)
- __asm {
- xor ecx, ecx // xcr 0
- _asm _emit 0x0f _asm _emit 0x01 _asm _emit 0xd0 // For VS2010 and earlier.
diff --git a/data/patches/gnuzilla-bug-1025689.patch b/data/patches/gnuzilla-bug-1025689.patch
deleted file mode 100644
index 9364624..0000000
--- a/data/patches/gnuzilla-bug-1025689.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -ru mozilla-esr31/media/libopus/moz.build icecat-31.4.0/media/libopus/moz.build
---- a/media/libopus/moz.build 2015-01-06 06:08:03.000000000 +0100
-+++ b/media/libopus/moz.build 2015-02-02 02:37:44.416803188 +0100
-@@ -23,10 +23,11 @@
- DEFINES['OPUS_ARM_ASM'] = True
- DEFINES['OPUS_ARM_EXTERNAL_ASM'] = True
- DEFINES['OPUS_ARM_INLINE_ASM'] = True
-- DEFINES['OPUS_ARM_INLINE_EDSP'] = True
-- DEFINES['OPUS_ARM_MAY_HAVE_EDSP'] = True
-- DEFINES['OPUS_ARM_MAY_HAVE_MEDIA'] = True
-- DEFINES['OPUS_ARM_MAY_HAVE_NEON'] = True
-+ if int(CONFIG['ARM_ARCH']) >= 6:
-+ DEFINES['OPUS_ARM_INLINE_EDSP'] = True
-+ DEFINES['OPUS_ARM_MAY_HAVE_EDSP'] = True
-+ DEFINES['OPUS_ARM_MAY_HAVE_MEDIA'] = True
-+ DEFINES['OPUS_ARM_MAY_HAVE_NEON'] = True
-
- if CONFIG['MOZ_DEBUG']:
- DEFINES['ENABLE_ASSERTIONS'] = True
diff --git a/data/patches/gnuzilla-bug-1030899-1.patch b/data/patches/gnuzilla-bug-1030899-1.patch
deleted file mode 100644
index 5f3d3ba..0000000
--- a/data/patches/gnuzilla-bug-1030899-1.patch
+++ /dev/null
@@ -1,60 +0,0 @@
---- a/ipc/chromium/src/third_party/libevent-dont-use-issetugid-on-android.patch
-+++ a/ipc/chromium/src/third_party/libevent-dont-use-issetugid-on-android.patch
-@@ -0,0 +1,22 @@
-+diff --git a/ipc/chromium/src/third_party/libevent/android/event2/event-config.h b/ipc/chromium/src/third_party/libevent/android/event2/event-config.h
-+--- a/ipc/chromium/src/third_party/libevent/android/event2/event-config.h
-++++ b/ipc/chromium/src/third_party/libevent/android/event2/event-config.h
-+@@ -119,17 +119,17 @@
-+
-+ /* Define to 1 if you have the `inet_pton' function. */
-+ #define _EVENT_HAVE_INET_PTON 1
-+
-+ /* Define to 1 if you have the <inttypes.h> header file. */
-+ #define _EVENT_HAVE_INTTYPES_H 1
-+
-+ /* Define to 1 if you have the `issetugid' function. */
-+-#define _EVENT_HAVE_ISSETUGID 1
-++/* #undef _EVENT_HAVE_ISSETUGID */
-+
-+ /* Define to 1 if you have the `kqueue' function. */
-+ /* #undef _EVENT_HAVE_KQUEUE */
-+
-+ /* Define if the system has zlib */
-+ #define _EVENT_HAVE_LIBZ 1
-+
-+ /* Define to 1 if you have the <memory.h> header file. */
---- a/ipc/chromium/src/third_party/libevent/README.mozilla
-+++ a/ipc/chromium/src/third_party/libevent/README.mozilla
-@@ -10,8 +10,10 @@ These files are taken from libevent-2.0.
-
- 2. This is ugly, prepare yourself. OS X has a weird problem with how the "TAILQ_END(head)" is used, causing a linking error. Just replace all use of the "TAILQ_END(head)" macro with "NULL".
-
- 3. Apply "add mac-arc4random-buf.patch", which removes some bad OS X compatibility code. This will allow libevent to compile on all supported versions of OS X.
-
- 4. Apply "openbsd-no-arc4random_addrandom.patch", which fixes the build on OpenBSD (which doesnt provide arc4random_addrandom anymore, see #931354)
-
- 5. Apply "libevent-use-non-deprecated-syscalls.patch", which fixes the build on AArch64 architecture (which does not provide deprecated syscalls)
-+
-+6. Apply "libevent-dont-use-issetugid-on-android.patch'. which fixes the build on Android L preview
---- a/ipc/chromium/src/third_party/libevent/android/event2/event-config.h
-+++ a/ipc/chromium/src/third_party/libevent/android/event2/event-config.h
-@@ -119,17 +119,17 @@
-
- /* Define to 1 if you have the `inet_pton' function. */
- #define _EVENT_HAVE_INET_PTON 1
-
- /* Define to 1 if you have the <inttypes.h> header file. */
- #define _EVENT_HAVE_INTTYPES_H 1
-
- /* Define to 1 if you have the `issetugid' function. */
--#define _EVENT_HAVE_ISSETUGID 1
-+/* #undef _EVENT_HAVE_ISSETUGID */
-
- /* Define to 1 if you have the `kqueue' function. */
- /* #undef _EVENT_HAVE_KQUEUE */
-
- /* Define if the system has zlib */
- #define _EVENT_HAVE_LIBZ 1
-
- /* Define to 1 if you have the <memory.h> header file. */
-
diff --git a/data/patches/gnuzilla-bug-1030899-2.patch b/data/patches/gnuzilla-bug-1030899-2.patch
deleted file mode 100644
index 55728ab..0000000
--- a/data/patches/gnuzilla-bug-1030899-2.patch
+++ /dev/null
@@ -1,59 +0,0 @@
---- a/memory/mozjemalloc/jemalloc.c
-+++ a/memory/mozjemalloc/jemalloc.c
-@@ -220,17 +220,16 @@
-
- #ifdef MALLOC_PAGEFILE
- /* Write size when initializing a page file. */
- # define MALLOC_PAGEFILE_WRITE_SIZE 512
- #endif
-
- #if defined(MOZ_MEMORY_LINUX) && !defined(MOZ_MEMORY_ANDROID)
- #define _GNU_SOURCE /* For mremap(2). */
--#define issetugid() 0
- #if 0 /* Enable in order to test decommit code on Linux. */
- # define MALLOC_DECOMMIT
- #endif
- #endif
-
- #include <sys/types.h>
-
- #include <errno.h>
-@@ -261,17 +260,16 @@
- #define vsnprintf _vsnprintf
-
- #ifndef NO_TLS
- static unsigned long tlsIndex = 0xffffffff;
- #endif
-
- #define __thread
- #define _pthread_self() __threadid()
--#define issetugid() 0
-
- /* use MSVC intrinsics */
- #pragma intrinsic(_BitScanForward)
- static __forceinline int
- ffs(int x)
- {
- unsigned long i;
-
-@@ -5675,18 +5673,17 @@ malloc_init_hard(void)
- #endif
- {
- /* No configuration specified. */
- buf[0] = '\0';
- opts = buf;
- }
- break;
- case 1:
-- if (issetugid() == 0 && (opts =
-- getenv("MALLOC_OPTIONS")) != NULL) {
-+ if ((opts = getenv("MALLOC_OPTIONS")) != NULL) {
- /*
- * Do nothing; opts is already initialized to
- * the value of the MALLOC_OPTIONS environment
- * variable.
- */
- } else {
- /* No configuration specified. */
- buf[0] = '\0';
-
diff --git a/data/patches/gnuzilla-bug-1032460.patch b/data/patches/gnuzilla-bug-1032460.patch
deleted file mode 100644
index 08f37c3..0000000
--- a/data/patches/gnuzilla-bug-1032460.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-https://bugzilla.mozilla.org/show_bug.cgi?id=1032460
-
-diff -ru icecat-31.4.0.orig/widget/android/AndroidBridge.cpp icecat-31.4.0/widget/android/AndroidBridge.cpp
---- icecat-31.4.0.orig/widget/android/AndroidBridge.cpp 2015-02-22 19:11:11.834816575 +0100
-+++ icecat-31.4.0/widget/android/AndroidBridge.cpp 2015-02-22 19:16:16.226810788 +0100
-@@ -199,7 +199,9 @@
-
- jclass eglClass = getClassGlobalRef("com/google/android/gles_jni/EGLSurfaceImpl");
- if (eglClass) {
-- jEGLSurfacePointerField = getField("mEGLSurface", "I");
-+ // The pointer type moved to a 'long' in Android L, API version 20
-+ const char* jniType = mAPIVersion >= 20 ? "J" : "I";
-+ jEGLSurfacePointerField = getField("mEGLSurface", jniType);
- } else {
- jEGLSurfacePointerField = 0;
- }
diff --git a/data/patches/gnuzilla-bug-1034167-1.patch b/data/patches/gnuzilla-bug-1034167-1.patch
deleted file mode 100644
index 410b2cf..0000000
--- a/data/patches/gnuzilla-bug-1034167-1.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-# HG changeset patch
-# User Lucas Rocha <lucasr@mozilla.com>
-
-Bug 1034167 - Part 2: Explicit set scrollbars in TabsTray (r=mfinkle)
-
-diff --git a/mobile/android/base/resources/values-land/styles.xml b/mobile/android/base/resources/values-land/styles.xml
-index 774c48e..6769b1e 100644
---- a/mobile/android/base/resources/values-land/styles.xml
-+++ b/mobile/android/base/resources/values-land/styles.xml
-@@ -2,16 +2,17 @@
- <!-- 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/. -->
-
- <resources>
-
- <style name="TabsList" parent="TabsListBase">
- <item name="android:orientation">horizontal</item>
-+ <item name="android:scrollbars">horizontal</item>
- </style>
-
- <style name="TabsItem">
- <item name="android:nextFocusDown">@+id/close</item>
- </style>
-
- <style name="TabsItemClose">
- <item name="android:nextFocusUp">@+id/info</item>
-diff --git a/mobile/android/base/resources/values-large-land-v11/styles.xml b/mobile/android/base/resources/values-large-land-v11/styles.xml
-index 557b659..1468914 100644
---- a/mobile/android/base/resources/values-large-land-v11/styles.xml
-+++ b/mobile/android/base/resources/values-large-land-v11/styles.xml
-@@ -2,16 +2,17 @@
- <!-- 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/. -->
-
- <resources>
-
- <style name="TabsList" parent="TabsListBase">
- <item name="android:orientation">vertical</item>
-+ <item name="android:scrollbars">vertical</item>
- </style>
-
- <style name="Widget.BookmarkFolderView" parent="Widget.TwoLinePageRow.Title">
- <item name="android:paddingLeft">60dip</item>
- <item name="android:drawablePadding">10dip</item>
- <item name="android:drawableLeft">@drawable/bookmark_folder</item>
- </style>
-
-diff --git a/mobile/android/base/resources/values-large-v11/styles.xml b/mobile/android/base/resources/values-large-v11/styles.xml
-index 7a22789..a6a6221 100644
---- a/mobile/android/base/resources/values-large-v11/styles.xml
-+++ b/mobile/android/base/resources/values-large-v11/styles.xml
-@@ -25,16 +25,17 @@
- <item name="android:layout_marginTop">6dp</item>
- <item name="android:layout_marginBottom">6dp</item>
- <!-- Start with forward hidden -->
- <item name="android:orientation">horizontal</item>
- </style>
-
- <style name="TabsList" parent="TabsListBase">
- <item name="android:orientation">horizontal</item>
-+ <item name="android:scrollbars">horizontal</item>
- </style>
-
- <style name="TabsItem">
- <item name="android:nextFocusDown">@+id/close</item>
- </style>
-
- <style name="TabsItemClose">
- <item name="android:nextFocusUp">@+id/info</item>
-diff --git a/mobile/android/base/resources/values/styles.xml b/mobile/android/base/resources/values/styles.xml
-index a15f72e..f479180 100644
---- a/mobile/android/base/resources/values/styles.xml
-+++ b/mobile/android/base/resources/values/styles.xml
-@@ -430,16 +430,17 @@
- <!-- TabsTray List -->
- <style name="TabsListBase">
- <item name="android:background">@android:color/transparent</item>
- <item name="android:listSelector">@android:color/transparent</item>
- </style>
-
- <style name="TabsList" parent="TabsListBase">
- <item name="android:orientation">vertical</item>
-+ <item name="android:scrollbars">vertical</item>
- </style>
-
- <style name="TabsItem">
- <item name="android:nextFocusRight">@+id/close</item>
- </style>
-
- <style name="TabsItemClose">
- <item name="android:nextFocusLeft">@+id/info</item>
diff --git a/data/patches/gnuzilla-bug-1034167-2.patch b/data/patches/gnuzilla-bug-1034167-2.patch
deleted file mode 100644
index 3df67a0..0000000
--- a/data/patches/gnuzilla-bug-1034167-2.patch
+++ /dev/null
@@ -1,1205 +0,0 @@
-# HG changeset patch
-# User Lucas Rocha <lucasr@mozilla.com>
-
-Bug 1034167 - Part 1: Update TwoWayView from upstream (r=mfinkle)
-
-diff --git a/mobile/android/base/resources/values/attrs.xml b/mobile/android/base/resources/values/attrs.xml
-index 0c27b87..7140292 100644
---- a/mobile/android/base/resources/values/attrs.xml
-+++ b/mobile/android/base/resources/values/attrs.xml
-@@ -117,91 +117,20 @@
-
- <declare-styleable name="LightweightTheme">
- <attr name="state_light" format="boolean"/>
- <attr name="state_dark" format="boolean"/>
- <attr name="autoUpdateTheme" format="boolean"/>
- </declare-styleable>
-
- <declare-styleable name="TwoWayView">
-- <!-- Imported from View -->
-- <attr name="android:id"/>
-- <attr name="android:tag"/>
-- <attr name="android:scrollX"/>
-- <attr name="android:scrollY"/>
-- <attr name="android:background"/>
-- <attr name="android:padding"/>
-- <attr name="android:paddingLeft"/>
-- <attr name="android:paddingTop"/>
-- <attr name="android:paddingRight"/>
-- <attr name="android:paddingBottom"/>
-- <attr name="android:paddingStart"/>
-- <attr name="android:paddingEnd"/>
-- <attr name="android:focusable"/>
-- <attr name="android:focusableInTouchMode"/>
-- <attr name="android:visibility"/>
-- <attr name="android:fitsSystemWindows"/>
-- <attr name="android:scrollbars"/>
-- <attr name="android:scrollbarStyle"/>
-- <attr name="android:isScrollContainer"/>
-- <attr name="android:fadeScrollbars"/>
-- <attr name="android:scrollbarFadeDuration"/>
-- <attr name="android:scrollbarDefaultDelayBeforeFade"/>
-- <attr name="android:scrollbarSize"/>
-- <attr name="android:scrollbarThumbHorizontal"/>
-- <attr name="android:scrollbarThumbVertical"/>
-- <attr name="android:scrollbarTrackHorizontal"/>
-- <attr name="android:scrollbarTrackVertical"/>
-- <attr name="android:scrollbarAlwaysDrawHorizontalTrack"/>
-- <attr name="android:scrollbarAlwaysDrawVerticalTrack"/>
-- <attr name="android:fadingEdge"/>
-- <attr name="android:requiresFadingEdge"/>
-- <attr name="android:fadingEdgeLength"/>
-- <attr name="android:nextFocusLeft"/>
-- <attr name="android:nextFocusRight"/>
-- <attr name="android:nextFocusUp"/>
-- <attr name="android:nextFocusDown"/>
-- <attr name="android:nextFocusForward"/>
-- <attr name="android:clickable"/>
-- <attr name="android:longClickable"/>
-- <attr name="android:saveEnabled"/>
-- <attr name="android:filterTouchesWhenObscured"/>
-- <attr name="android:drawingCacheQuality"/>
-- <attr name="android:keepScreenOn"/>
-- <attr name="android:duplicateParentState"/>
-- <attr name="android:minHeight"/>
-- <attr name="android:minWidth"/>
-- <attr name="android:soundEffectsEnabled"/>
-- <attr name="android:hapticFeedbackEnabled"/>
-- <attr name="android:contentDescription"/>
-- <attr name="android:onClick"/>
-- <attr name="android:overScrollMode"/>
-- <attr name="android:alpha"/>
-- <attr name="android:translationX"/>
-- <attr name="android:translationY"/>
-- <attr name="android:transformPivotX"/>
-- <attr name="android:transformPivotY"/>
-- <attr name="android:rotation"/>
-- <attr name="android:rotationX"/>
-- <attr name="android:rotationY"/>
-- <attr name="android:scaleX"/>
-- <attr name="android:scaleY"/>
-- <attr name="android:verticalScrollbarPosition"/>
-- <attr name="android:layerType"/>
-- <attr name="android:layoutDirection"/>
-- <attr name="android:textDirection"/>
-- <attr name="android:textAlignment"/>
--
-- <!-- Imported from Android -->
- <attr name="android:orientation"/>
--
-- <!-- Imported from AbsListView -->
- <attr name="android:choiceMode"/>
-- <attr name="android:drawSelectorOnTop"/>
- <attr name="android:listSelector"/>
-+ <attr name="android:drawSelectorOnTop"/>
- </declare-styleable>
-
- <declare-styleable name="HomeListView">
- <!-- Draws a divider on top of the list, if true. Defaults to false. -->
- <attr name="topDivider" format="boolean"/>
- </declare-styleable>
-
- <declare-styleable name="HomePagerTabStrip">
---- a/mobile/android/base/widget/TwoWayView.java 2015-01-06 05:07:55.000000000 +0000
-+++ b/mobile/android/base/widget/TwoWayView.java 2015-02-23 19:46:01.737065730 +0000
-@@ -23,6 +23,9 @@
-
- import org.mozilla.gecko.R;
-
-+import java.util.ArrayList;
-+import java.util.List;
-+
- import android.annotation.TargetApi;
- import android.content.Context;
- import android.content.res.TypedArray;
-@@ -67,8 +70,7 @@
- import android.widget.ListAdapter;
- import android.widget.Scroller;
-
--import java.util.ArrayList;
--import java.util.List;
-+import static android.os.Build.VERSION_CODES.HONEYCOMB;
-
- /*
- * Implementation Notes:
-@@ -136,8 +138,8 @@
-
- public static enum Orientation {
- HORIZONTAL,
-- VERTICAL;
-- };
-+ VERTICAL
-+ }
-
- private ListAdapter mAdapter;
-
-@@ -266,7 +268,7 @@
- * Callback method to be invoked while the list view or grid view is being scrolled. If the
- * view is being scrolled, this method will be called before the next frame of the scroll is
- * rendered. In particular, it will be called before any calls to
-- * {@link Adapter#getView(int, View, ViewGroup)}.
-+ * {@link android.widget.Adapter#getView(int, View, ViewGroup)}.
- *
- * @param view The view whose scroll state is being reported
- *
-@@ -388,7 +390,6 @@
- ViewCompat.setOverScrollMode(this, ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS);
-
- TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TwoWayView, defStyle, 0);
-- initializeScrollbars(a);
-
- mDrawSelectorOnTop = a.getBoolean(
- R.styleable.TwoWayView_android_drawSelectorOnTop, false);
-@@ -409,19 +410,16 @@
- }
-
- a.recycle();
--
-- updateScrollbarsDirection();
- }
-
- public void setOrientation(Orientation orientation) {
-- final boolean isVertical = (orientation.compareTo(Orientation.VERTICAL) == 0);
-+ final boolean isVertical = (orientation == Orientation.VERTICAL);
- if (mIsVertical == isVertical) {
- return;
- }
-
- mIsVertical = isVertical;
-
-- updateScrollbarsDirection();
- resetState();
- mRecycler.clear();
-
-@@ -441,6 +439,7 @@
- requestLayout();
- }
-
-+ @SuppressWarnings("unused")
- public int getItemMargin() {
- return mItemMargin;
- }
-@@ -451,6 +450,7 @@
- *
- * @param itemsCanFocus true if items can get focus, false otherwise
- */
-+ @SuppressWarnings("unused")
- public void setItemsCanFocus(boolean itemsCanFocus) {
- mItemsCanFocus = itemsCanFocus;
- if (!itemsCanFocus) {
-@@ -462,6 +462,7 @@
- * @return Whether the views created by the ListAdapter can contain focusable
- * items.
- */
-+ @SuppressWarnings("unused")
- public boolean getItemsCanFocus() {
- return mItemsCanFocus;
- }
-@@ -481,7 +482,7 @@
- * the recycler for later reuse. This listener can be used to free resources
- * associated to the View.
- *
-- * @param listener The recycler listener to be notified of views set aside
-+ * @param l The recycler listener to be notified of views set aside
- * in the recycler.
- *
- * @see TwoWayView.RecycleBin
-@@ -495,11 +496,12 @@
- * Controls whether the selection highlight drawable should be drawn on top of the item or
- * behind it.
- *
-- * @param onTop If true, the selector will be drawn on the item it is highlighting. The default
-- * is false.
-+ * @param drawSelectorOnTop If true, the selector will be drawn on the item it is highlighting.
-+ * The default is false.
- *
- * @attr ref android.R.styleable#AbsListView_drawSelectorOnTop
- */
-+ @SuppressWarnings("unused")
- public void setDrawSelectorOnTop(boolean drawSelectorOnTop) {
- mDrawSelectorOnTop = drawSelectorOnTop;
- }
-@@ -511,6 +513,7 @@
- *
- * @attr ref android.R.styleable#AbsListView_listSelector
- */
-+ @SuppressWarnings("unused")
- public void setSelector(int resID) {
- setSelector(getResources().getDrawable(resID));
- }
-@@ -542,6 +545,7 @@
- *
- * @return the drawable used to display the selector
- */
-+ @SuppressWarnings("unused")
- public Drawable getSelector() {
- return mSelector;
- }
-@@ -564,7 +568,7 @@
-
- /**
- * Returns the number of items currently selected. This will only be valid
-- * if the choice mode is not {@link #CHOICE_MODE_NONE} (default).
-+ * if the choice mode is not {@link ChoiceMode#NONE} (default).
- *
- * <p>To determine the specific items that are currently selected, use one of
- * the <code>getChecked*</code> methods.
-@@ -575,23 +579,24 @@
- * @see #getCheckedItemPositions()
- * @see #getCheckedItemIds()
- */
-+ @SuppressWarnings("unused")
- public int getCheckedItemCount() {
- return mCheckedItemCount;
- }
-
- /**
- * Returns the checked state of the specified position. The result is only
-- * valid if the choice mode has been set to {@link #CHOICE_MODE_SINGLE}
-- * or {@link #CHOICE_MODE_MULTIPLE}.
-+ * valid if the choice mode has been set to {@link ChoiceMode#SINGLE}
-+ * or {@link ChoiceMode#MULTIPLE}.
- *
- * @param position The item whose checked state to return
- * @return The item's checked state or <code>false</code> if choice mode
- * is invalid
- *
-- * @see #setChoiceMode(int)
-+ * @see #setChoiceMode(ChoiceMode)
- */
- public boolean isItemChecked(int position) {
-- if (mChoiceMode.compareTo(ChoiceMode.NONE) == 0 && mCheckStates != null) {
-+ if (mChoiceMode == ChoiceMode.NONE && mCheckStates != null) {
- return mCheckStates.get(position);
- }
-
-@@ -600,16 +605,15 @@
-
- /**
- * Returns the currently checked item. The result is only valid if the choice
-- * mode has been set to {@link #CHOICE_MODE_SINGLE}.
-+ * mode has been set to {@link ChoiceMode#SINGLE}.
- *
- * @return The position of the currently checked item or
- * {@link #INVALID_POSITION} if nothing is selected
- *
-- * @see #setChoiceMode(int)
-+ * @see #setChoiceMode(ChoiceMode)
- */
- public int getCheckedItemPosition() {
-- if (mChoiceMode.compareTo(ChoiceMode.SINGLE) == 0 &&
-- mCheckStates != null && mCheckStates.size() == 1) {
-+ if (mChoiceMode == ChoiceMode.SINGLE && mCheckStates != null && mCheckStates.size() == 1) {
- return mCheckStates.keyAt(0);
- }
-
-@@ -618,15 +622,15 @@
-
- /**
- * Returns the set of checked items in the list. The result is only valid if
-- * the choice mode has not been set to {@link #CHOICE_MODE_NONE}.
-+ * the choice mode has not been set to {@link ChoiceMode#NONE}.
- *
- * @return A SparseBooleanArray which will return true for each call to
- * get(int position) where position is a position in the list,
- * or <code>null</code> if the choice mode is set to
-- * {@link #CHOICE_MODE_NONE}.
-+ * {@link ChoiceMode#NONE}.
- */
- public SparseBooleanArray getCheckedItemPositions() {
-- if (mChoiceMode.compareTo(ChoiceMode.NONE) != 0) {
-+ if (mChoiceMode != ChoiceMode.NONE) {
- return mCheckStates;
- }
-
-@@ -635,15 +639,14 @@
-
- /**
- * Returns the set of checked items ids. The result is only valid if the
-- * choice mode has not been set to {@link #CHOICE_MODE_NONE} and the adapter
-+ * choice mode has not been set to {@link ChoiceMode#NONE} and the adapter
- * has stable IDs. ({@link ListAdapter#hasStableIds()} == {@code true})
- *
- * @return A new array which contains the id of each checked item in the
- * list.
- */
- public long[] getCheckedItemIds() {
-- if (mChoiceMode.compareTo(ChoiceMode.NONE) == 0 ||
-- mCheckedIdStates == null || mAdapter == null) {
-+ if (mChoiceMode == ChoiceMode.NONE || mCheckedIdStates == null || mAdapter == null) {
- return new long[0];
- }
-
-@@ -660,18 +663,19 @@
-
- /**
- * Sets the checked state of the specified position. The is only valid if
-- * the choice mode has been set to {@link #CHOICE_MODE_SINGLE} or
-- * {@link #CHOICE_MODE_MULTIPLE}.
-+ * the choice mode has been set to {@link ChoiceMode#SINGLE} or
-+ * {@link ChoiceMode#MULTIPLE}.
- *
- * @param position The item whose checked state is to be checked
- * @param value The new checked state for the item
- */
-+ @SuppressWarnings("unused")
- public void setItemChecked(int position, boolean value) {
-- if (mChoiceMode.compareTo(ChoiceMode.NONE) == 0) {
-+ if (mChoiceMode == ChoiceMode.NONE) {
- return;
- }
-
-- if (mChoiceMode.compareTo(ChoiceMode.MULTIPLE) == 0) {
-+ if (mChoiceMode == ChoiceMode.MULTIPLE) {
- boolean oldValue = mCheckStates.get(position);
- mCheckStates.put(position, value);
-
-@@ -729,6 +733,7 @@
- /**
- * Clear any choices previously set
- */
-+ @SuppressWarnings("unused")
- public void clearChoices() {
- if (mCheckStates != null) {
- mCheckStates.clear();
-@@ -742,27 +747,28 @@
- }
-
- /**
-- * @see #setChoiceMode(int)
-+ * @see #setChoiceMode(ChoiceMode)
- *
- * @return The current choice mode
- */
-+ @SuppressWarnings("unused")
- public ChoiceMode getChoiceMode() {
- return mChoiceMode;
- }
-
- /**
- * Defines the choice behavior for the List. By default, Lists do not have any choice behavior
-- * ({@link #CHOICE_MODE_NONE}). By setting the choiceMode to {@link #CHOICE_MODE_SINGLE}, the
-+ * ({@link ChoiceMode#NONE}). By setting the choiceMode to {@link ChoiceMode#SINGLE}, the
- * List allows up to one item to be in a chosen state. By setting the choiceMode to
-- * {@link #CHOICE_MODE_MULTIPLE}, the list allows any number of items to be chosen.
-+ * {@link ChoiceMode#MULTIPLE}, the list allows any number of items to be chosen.
- *
-- * @param choiceMode One of {@link #CHOICE_MODE_NONE}, {@link #CHOICE_MODE_SINGLE}, or
-- * {@link #CHOICE_MODE_MULTIPLE}
-+ * @param choiceMode One of {@link ChoiceMode#NONE}, {@link ChoiceMode#SINGLE}, or
-+ * {@link ChoiceMode#MULTIPLE}
- */
- public void setChoiceMode(ChoiceMode choiceMode) {
- mChoiceMode = choiceMode;
-
-- if (mChoiceMode.compareTo(ChoiceMode.NONE) != 0) {
-+ if (mChoiceMode != ChoiceMode.NONE) {
- if (mCheckStates == null) {
- mCheckStates = new SparseBooleanArray();
- }
-@@ -813,8 +819,7 @@
- mHasStableIds = adapter.hasStableIds();
- mAreAllItemsSelectable = adapter.areAllItemsEnabled();
-
-- if (mChoiceMode.compareTo(ChoiceMode.NONE) != 0 && mHasStableIds &&
-- mCheckedIdStates == null) {
-+ if (mChoiceMode != ChoiceMode.NONE && mHasStableIds && mCheckedIdStates == null) {
- mCheckedIdStates = new LongSparseArray<Integer>();
- }
-
-@@ -1268,7 +1273,7 @@
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
-- if (!mIsAttached) {
-+ if (!mIsAttached || mAdapter == null) {
- return false;
- }
-
-@@ -1354,7 +1359,7 @@
- return isClickable() || isLongClickable();
- }
-
-- if (!mIsAttached) {
-+ if (!mIsAttached || mAdapter == null) {
- return false;
- }
-
-@@ -1477,7 +1482,7 @@
- final float x = ev.getX();
- final float y = ev.getY();
-
-- boolean inList = false;
-+ final boolean inList;
- if (mIsVertical) {
- inList = x > getPaddingLeft() && x < getWidth() - getPaddingRight();
- } else {
-@@ -1731,7 +1736,7 @@
- }
-
- // TODO: Use some form of smooth scroll instead
-- trackMotionScroll(viewportSize);
-+ scrollListItemsBy(viewportSize);
- return true;
- }
- return false;
-@@ -1746,7 +1751,7 @@
- }
-
- // TODO: Use some form of smooth scroll instead
-- trackMotionScroll(-viewportSize);
-+ scrollListItemsBy(-viewportSize);
- return true;
- }
- return false;
-@@ -2077,7 +2082,7 @@
- newFocus = FocusFinder.getInstance().findNextFocus(this, oldFocus, direction);
- } else {
- if (direction == View.FOCUS_DOWN || direction == View.FOCUS_RIGHT) {
-- final int start = (mIsVertical ? getPaddingTop() : getPaddingLeft());
-+ final int start = getStartEdge();
-
- final int selectedStart;
- if (selectedView != null) {
-@@ -2088,12 +2093,11 @@
-
- searchPoint = Math.max(selectedStart, start);
- } else {
-- final int end = (mIsVertical ? getHeight() - getPaddingBottom() :
-- getWidth() - getPaddingRight());
-+ final int end = getEndEdge();
-
- final int selectedEnd;
- if (selectedView != null) {
-- selectedEnd = (mIsVertical ? selectedView.getBottom() : selectedView.getRight());
-+ selectedEnd = getChildEndEdge(selectedView);
- } else {
- selectedEnd = end;
- }
-@@ -2242,7 +2246,7 @@
- }
-
- if (amountToScroll > 0) {
-- trackMotionScroll(direction == View.FOCUS_UP || direction == View.FOCUS_LEFT ?
-+ scrollListItemsBy(direction == View.FOCUS_UP || direction == View.FOCUS_LEFT ?
- amountToScroll : -amountToScroll);
- needToRedraw = true;
- }
-@@ -2304,8 +2308,7 @@
- final int numChildren = getChildCount();
-
- if (direction == View.FOCUS_DOWN || direction == View.FOCUS_RIGHT) {
-- final int end = (mIsVertical ? getHeight() - getPaddingBottom() :
-- getWidth() - getPaddingRight());
-+ final int end = getEndEdge();
-
- int indexToMakeVisible = numChildren - 1;
- if (nextSelectedPosition != INVALID_POSITION) {
-@@ -2320,10 +2323,8 @@
- goalEnd -= getArrowScrollPreviewLength();
- }
-
-- final int viewToMakeVisibleStart =
-- (mIsVertical ? viewToMakeVisible.getTop() : viewToMakeVisible.getLeft());
-- final int viewToMakeVisibleEnd =
-- (mIsVertical ? viewToMakeVisible.getBottom() : viewToMakeVisible.getRight());
-+ final int viewToMakeVisibleStart = getChildStartEdge(viewToMakeVisible);
-+ final int viewToMakeVisibleEnd = getChildEndEdge(viewToMakeVisible);
-
- if (viewToMakeVisibleEnd <= goalEnd) {
- // Target item is fully visible
-@@ -2339,8 +2340,7 @@
- int amountToScroll = (viewToMakeVisibleEnd - goalEnd);
-
- if (mFirstPosition + numChildren == mItemCount) {
-- final View lastChild = getChildAt(numChildren - 1);
-- final int lastChildEnd = (mIsVertical ? lastChild.getBottom() : lastChild.getRight());
-+ final int lastChildEnd = getChildEndEdge(getChildAt(numChildren - 1));
-
- // Last is last in list -> Make sure we don't scroll past it
- final int max = lastChildEnd - end;
-@@ -2349,7 +2349,7 @@
-
- return Math.min(amountToScroll, getMaxScrollAmount());
- } else {
-- final int start = (mIsVertical ? getPaddingTop() : getPaddingLeft());
-+ final int start = getStartEdge();
-
- int indexToMakeVisible = 0;
- if (nextSelectedPosition != INVALID_POSITION) {
-@@ -2364,10 +2364,8 @@
- goalStart += getArrowScrollPreviewLength();
- }
-
-- final int viewToMakeVisibleStart =
-- (mIsVertical ? viewToMakeVisible.getTop() : viewToMakeVisible.getLeft());
-- final int viewToMakeVisibleEnd =
-- (mIsVertical ? viewToMakeVisible.getBottom() : viewToMakeVisible.getRight());
-+ final int viewToMakeVisibleStart = getChildStartEdge(viewToMakeVisible);
-+ final int viewToMakeVisibleEnd = getChildEndEdge(viewToMakeVisible);
-
- if (viewToMakeVisibleStart >= goalStart) {
- // Item is fully visible
-@@ -2383,8 +2381,7 @@
- int amountToScroll = (goalStart - viewToMakeVisibleStart);
-
- if (mFirstPosition == 0) {
-- final View firstChild = getChildAt(0);
-- final int firstChildStart = (mIsVertical ? firstChild.getTop() : firstChild.getLeft());
-+ final int firstChildStart = getChildStartEdge(getChildAt(0));
-
- // First is first in list -> make sure we don't scroll past it
- final int max = start - firstChildStart;
-@@ -2416,7 +2413,7 @@
- offsetDescendantRectToMyCoords(newFocus, mTempRect);
-
- if (direction == View.FOCUS_UP || direction == View.FOCUS_LEFT) {
-- final int start = (mIsVertical ? getPaddingTop() : getPaddingLeft());
-+ final int start = getStartEdge();
- final int newFocusStart = (mIsVertical ? mTempRect.top : mTempRect.left);
-
- if (newFocusStart < start) {
-@@ -2426,8 +2423,7 @@
- }
- }
- } else {
-- final int end = (mIsVertical ? getHeight() - getPaddingBottom() :
-- getWidth() - getPaddingRight());
-+ final int end = getEndEdge();
- final int newFocusEnd = (mIsVertical ? mTempRect.bottom : mTempRect.right);
-
- if (newFocusEnd > end) {
-@@ -2452,9 +2448,8 @@
- descendant.getDrawingRect(mTempRect);
- offsetDescendantRectToMyCoords(descendant, mTempRect);
-
-- final int start = (mIsVertical ? getPaddingTop() : getPaddingLeft());
-- final int end = (mIsVertical ? getHeight() - getPaddingBottom() :
-- getWidth() - getPaddingRight());
-+ final int start = getStartEdge();
-+ final int end = getEndEdge();
-
- final int viewStart = (mIsVertical ? mTempRect.top : mTempRect.left);
- final int viewEnd = (mIsVertical ? mTempRect.bottom : mTempRect.right);
-@@ -2741,7 +2736,7 @@
- motionViewPrevStart = (mIsVertical ? motionView.getTop() : motionView.getLeft());
- }
-
-- boolean atEdge = trackMotionScroll(delta);
-+ boolean atEdge = scrollListItemsBy(delta);
-
- motionView = this.getChildAt(motionIndex);
- if (motionView != null) {
-@@ -2821,7 +2816,7 @@
- ViewCompat.postInvalidateOnAnimation(this);
- }
-
-- trackMotionScroll(delta);
-+ scrollListItemsBy(delta);
- mTouchMode = TOUCH_MODE_DRAGGING;
-
- // We did not scroll the full amount. Treat this essentially like the
-@@ -2901,10 +2896,8 @@
- }
-
- for (int i = 0; i < childCount; i++) {
-- View v = getChildAt(i);
--
-- if ((mIsVertical && motionPos <= v.getBottom()) ||
-- (!mIsVertical && motionPos <= v.getRight())) {
-+ final View v = getChildAt(i);
-+ if (motionPos <= getChildEndEdge(v)) {
- return mFirstPosition + i;
- }
- }
-@@ -2935,6 +2928,26 @@
- return vc.getScaledOverscrollDistance();
- }
-
-+ private int getStartEdge() {
-+ return (mIsVertical ? getPaddingTop() : getPaddingLeft());
-+ }
-+
-+ private int getEndEdge() {
-+ if (mIsVertical) {
-+ return (getHeight() - getPaddingBottom());
-+ } else {
-+ return (getWidth() - getPaddingRight());
-+ }
-+ }
-+
-+ private int getChildStartEdge(View child) {
-+ return (mIsVertical ? child.getTop() : child.getLeft());
-+ }
-+
-+ private int getChildEndEdge(View child) {
-+ return (mIsVertical ? child.getBottom() : child.getRight());
-+ }
-+
- private boolean contentFits() {
- final int childCount = getChildCount();
- if (childCount == 0) {
-@@ -2948,18 +2961,8 @@
- View first = getChildAt(0);
- View last = getChildAt(childCount - 1);
-
-- if (mIsVertical) {
-- return first.getTop() >= getPaddingTop() &&
-- last.getBottom() <= getHeight() - getPaddingBottom();
-- } else {
-- return first.getLeft() >= getPaddingLeft() &&
-- last.getRight() <= getWidth() - getPaddingRight();
-- }
-- }
--
-- private void updateScrollbarsDirection() {
-- setHorizontalScrollBarEnabled(!mIsVertical);
-- setVerticalScrollBarEnabled(mIsVertical);
-+ return (getChildStartEdge(first) >= getStartEdge() &&
-+ getChildEndEdge(last) <= getEndEdge());
- }
-
- private void triggerCheckForTap() {
-@@ -2997,17 +3000,14 @@
- removeCallbacks(mPendingCheckForLongPress);
- }
-
-- boolean trackMotionScroll(int incrementalDelta) {
-+ private boolean scrollListItemsBy(int incrementalDelta) {
- final int childCount = getChildCount();
- if (childCount == 0) {
- return true;
- }
-
-- final View first = getChildAt(0);
-- final int firstStart = (mIsVertical ? first.getTop() : first.getLeft());
--
-- final View last = getChildAt(childCount - 1);
-- final int lastEnd = (mIsVertical ? last.getBottom() : last.getRight());
-+ final int firstStart = getChildStartEdge(getChildAt(0));
-+ final int lastEnd = getChildEndEdge(getChildAt(childCount - 1));
-
- final int paddingTop = getPaddingTop();
- final int paddingBottom = getPaddingBottom();
-@@ -3017,8 +3017,7 @@
- final int paddingStart = (mIsVertical ? paddingTop : paddingLeft);
-
- final int spaceBefore = paddingStart - firstStart;
-- final int end = (mIsVertical ? getHeight() - paddingBottom :
-- getWidth() - paddingRight);
-+ final int end = getEndEdge();
- final int spaceAfter = lastEnd - end;
-
- final int size;
-@@ -3059,7 +3058,7 @@
-
- for (int i = 0; i < childCount; i++) {
- final View child = getChildAt(i);
-- final int childEnd = (mIsVertical ? child.getBottom() : child.getRight());
-+ final int childEnd = getChildEndEdge(child);
-
- if (childEnd >= childrenStart) {
- break;
-@@ -3073,7 +3072,7 @@
-
- for (int i = childCount - 1; i >= 0; i--) {
- final View child = getChildAt(i);
-- final int childStart = (mIsVertical ? child.getTop() : child.getLeft());
-+ final int childStart = getChildStartEdge(child);
-
- if (childStart <= childrenEnd) {
- break;
-@@ -3140,11 +3139,7 @@
-
- @TargetApi(5)
- private boolean awakenScrollbarsInternal() {
-- if (Build.VERSION.SDK_INT >= 5) {
-- return super.awakenScrollBars();
-- } else {
-- return false;
-- }
-+ return (Build.VERSION.SDK_INT >= 5) && super.awakenScrollBars();
- }
-
- @Override
-@@ -3163,7 +3158,7 @@
- final int diff = (int) (pos - mLastTouchPos);
- mLastTouchPos = pos;
-
-- final boolean stopped = trackMotionScroll(diff);
-+ final boolean stopped = scrollListItemsBy(diff);
-
- if (!stopped && !mScroller.isFinished()) {
- ViewCompat.postInvalidateOnAnimation(this);
-@@ -3210,7 +3205,7 @@
- }
-
- final int restoreCount = canvas.save();
-- final int height = getHeight() - getPaddingTop() - getPaddingBottom();
-+ final int height = getHeight();
-
- canvas.translate(0, height);
- canvas.rotate(270);
-@@ -3226,8 +3221,8 @@
- }
-
- final int restoreCount = canvas.save();
-- final int width = getWidth() - getPaddingLeft() - getPaddingRight();
-- final int height = getHeight() - getPaddingTop() - getPaddingBottom();
-+ final int width = getWidth();
-+ final int height = getHeight();
-
- if (mIsVertical) {
- canvas.translate(-width, height);
-@@ -3683,6 +3678,10 @@
- }
- }
-
-+ public void scrollBy(int offset) {
-+ scrollListItemsBy(offset);
-+ }
-+
- @Override
- public boolean dispatchKeyEvent(KeyEvent event) {
- // Dispatch in the normal way
-@@ -3814,9 +3813,8 @@
- return;
- }
-
-- final int start = (mIsVertical ? getPaddingTop() : getPaddingLeft());
-- final int end =
-- (mIsVertical ? getHeight() - getPaddingBottom() : getWidth() - getPaddingRight());
-+ final int start = getStartEdge();
-+ final int end = getEndEdge();
-
- int childCount = getChildCount();
- int index = 0;
-@@ -4084,8 +4082,8 @@
- int end) {
- final int selectedPosition = mSelectedPosition;
-
-- final int oldSelectedStart = (mIsVertical ? oldSelected.getTop() : oldSelected.getLeft());
-- final int oldSelectedEnd = (mIsVertical ? oldSelected.getBottom() : oldSelected.getRight());
-+ final int oldSelectedStart = getChildStartEdge(oldSelected);
-+ final int oldSelectedEnd = getChildEndEdge(oldSelected);
-
- View selected = null;
-
-@@ -4118,8 +4116,8 @@
- // Now put the new selection (B) below that
- selected = makeAndAddView(selectedPosition, oldSelectedEnd + itemMargin, true, true);
-
-- final int selectedStart = (mIsVertical ? selected.getTop() : selected.getLeft());
-- final int selectedEnd = (mIsVertical ? selected.getBottom() : selected.getRight());
-+ final int selectedStart = getChildStartEdge(selected);
-+ final int selectedEnd = getChildEndEdge(selected);
-
- // Some of the newly selected item extends below the bottom of the list
- if (selectedEnd > end) {
-@@ -4178,8 +4176,8 @@
- selected = makeAndAddView(selectedPosition, oldSelectedStart, false, true);
- }
-
-- final int selectedStart = (mIsVertical ? selected.getTop() : selected.getLeft());
-- final int selectedEnd = (mIsVertical ? selected.getBottom() : selected.getRight());
-+ final int selectedStart = getChildStartEdge(selected);
-+ final int selectedEnd = getChildEndEdge(selected);
-
- // Some of the newly selected item extends above the top of the list
- if (selectedStart < start) {
-@@ -4210,8 +4208,8 @@
-
- selected = makeAndAddView(selectedPosition, oldSelectedStart, true, true);
-
-- final int selectedStart = (mIsVertical ? selected.getTop() : selected.getLeft());
-- final int selectedEnd = (mIsVertical ? selected.getBottom() : selected.getRight());
-+ final int selectedStart = getChildStartEdge(selected);
-+ final int selectedEnd = getChildEndEdge(selected);
-
- // We're staying still...
- if (oldSelectedStart < start) {
-@@ -4272,7 +4270,7 @@
- }
-
- private void handleDataChanged() {
-- if (mChoiceMode.compareTo(ChoiceMode.NONE) != 0 && mAdapter != null && mAdapter.hasStableIds()) {
-+ if (mChoiceMode != ChoiceMode.NONE && mAdapter != null && mAdapter.hasStableIds()) {
- confirmCheckedPositionsById();
- }
-
-@@ -4406,9 +4404,8 @@
- int selectedStart = 0;
- int selectedPosition;
-
-- final int start = (mIsVertical ? getPaddingTop() : getPaddingLeft());
-- final int end =
-- (mIsVertical ? getHeight() - getPaddingBottom() : getWidth() - getPaddingRight());
-+ final int start = getStartEdge();
-+ final int end = getEndEdge();
-
- final int firstPosition = mFirstPosition;
- final int toPosition = mResurrectToPosition;
-@@ -4445,8 +4442,8 @@
-
- for (int i = childCount - 1; i >= 0; i--) {
- final View child = getChildAt(i);
-- final int childStart = (mIsVertical ? child.getTop() : child.getLeft());
-- final int childEnd = (mIsVertical ? child.getBottom() : child.getRight());
-+ final int childStart = getChildStartEdge(child);
-+ final int childEnd = getChildEndEdge(child);
-
- if (i == childCount - 1) {
- selectedStart = childStart;
-@@ -4718,7 +4715,7 @@
- recycleBin.addScrapView(child, -1);
- }
-
-- returnedWidth += child.getMeasuredHeight();
-+ returnedWidth += child.getMeasuredWidth();
-
- if (returnedWidth >= maxWidth) {
- // We went over, figure out which width to return. If returnedWidth > maxWidth,
-@@ -4810,11 +4807,10 @@
- child.setPressed(isPressed);
- }
-
-- if (mChoiceMode.compareTo(ChoiceMode.NONE) != 0 && mCheckStates != null) {
-+ if (mChoiceMode != ChoiceMode.NONE && mCheckStates != null) {
- if (child instanceof Checkable) {
- ((Checkable) child).setChecked(mCheckStates.get(position));
-- } else if (getContext().getApplicationInfo().targetSdkVersion
-- >= Build.VERSION_CODES.HONEYCOMB) {
-+ } else if (Build.VERSION.SDK_INT >= HONEYCOMB) {
- child.setActivated(mCheckStates.get(position));
- }
- }
-@@ -4847,26 +4843,17 @@
-
- if (down) {
- final int paddingStart = (mIsVertical ? getPaddingTop() : getPaddingLeft());
--
-- final int lastEnd;
-- if (mIsVertical) {
-- lastEnd = getChildAt(childCount - 1).getBottom();
-- } else {
-- lastEnd = getChildAt(childCount - 1).getRight();
-- }
-+ final int lastEnd = getChildEndEdge(getChildAt(childCount - 1));
-
- final int offset = (childCount > 0 ? lastEnd + mItemMargin : paddingStart);
- fillAfter(mFirstPosition + childCount, offset);
- correctTooHigh(getChildCount());
- } else {
-- final int end;
-+ final int end = getEndEdge();
- final int firstStart;
--
- if (mIsVertical) {
-- end = getHeight() - getPaddingBottom();
- firstStart = getChildAt(0).getTop();
- } else {
-- end = getWidth() - getPaddingRight();
- firstStart = getChildAt(0).getLeft();
- }
-
-@@ -4879,7 +4866,7 @@
- private View fillBefore(int pos, int nextOffset) {
- View selectedView = null;
-
-- final int start = (mIsVertical ? getPaddingTop() : getPaddingLeft());
-+ final int start = getStartEdge();
-
- while (nextOffset > start && pos >= 0) {
- boolean isSelected = (pos == mSelectedPosition);
-@@ -4906,19 +4893,13 @@
- private View fillAfter(int pos, int nextOffset) {
- View selectedView = null;
-
-- final int end =
-- (mIsVertical ? getHeight() - getPaddingBottom() : getWidth() - getPaddingRight());
-+ final int end = getEndEdge();
-
- while (nextOffset < end && pos < mItemCount) {
- boolean selected = (pos == mSelectedPosition);
-
- View child = makeAndAddView(pos, nextOffset, true, selected);
--
-- if (mIsVertical) {
-- nextOffset = child.getBottom() + mItemMargin;
-- } else {
-- nextOffset = child.getRight() + mItemMargin;
-- }
-+ nextOffset = getChildEndEdge(child) + mItemMargin;
-
- if (selected) {
- selectedView = child;
-@@ -4937,25 +4918,13 @@
- // Possibly changed again in fillBefore if we add rows above this one.
- mFirstPosition = position;
-
-- final int itemMargin = mItemMargin;
--
-- final int offsetBefore;
-- if (mIsVertical) {
-- offsetBefore = temp.getTop() - itemMargin;
-- } else {
-- offsetBefore = temp.getLeft() - itemMargin;
-- }
-+ final int offsetBefore = getChildStartEdge(temp) + mItemMargin;
- final View before = fillBefore(position - 1, offsetBefore);
-
- // This will correct for the top of the first view not touching the top of the list
- adjustViewsStartOrEnd();
-
-- final int offsetAfter;
-- if (mIsVertical) {
-- offsetAfter = temp.getBottom() + itemMargin;
-- } else {
-- offsetAfter = temp.getRight() + itemMargin;
-- }
-+ final int offsetAfter = getChildEndEdge(temp) + mItemMargin;
- final View after = fillAfter(position + 1, offsetAfter);
-
- final int childCount = getChildCount();
-@@ -5009,37 +4978,22 @@
- }
-
- private void fillBeforeAndAfter(View selected, int position) {
-- final int itemMargin = mItemMargin;
--
-- final int offsetBefore;
-- if (mIsVertical) {
-- offsetBefore = selected.getTop() - itemMargin;
-- } else {
-- offsetBefore = selected.getLeft() - itemMargin;
-- }
--
-+ final int offsetBefore = getChildStartEdge(selected) + mItemMargin;
- fillBefore(position - 1, offsetBefore);
-
- adjustViewsStartOrEnd();
-
-- final int offsetAfter;
-- if (mIsVertical) {
-- offsetAfter = selected.getBottom() + itemMargin;
-- } else {
-- offsetAfter = selected.getRight() + itemMargin;
-- }
--
-+ final int offsetAfter = getChildEndEdge(selected) + mItemMargin;
- fillAfter(position + 1, offsetAfter);
- }
-
- private View fillFromSelection(int selectedTop, int start, int end) {
- final int selectedPosition = mSelectedPosition;
-- View selected;
-
-- selected = makeAndAddView(selectedPosition, selectedTop, true, true);
-+ View selected = makeAndAddView(selectedPosition, selectedTop, true, true);
-
-- final int selectedStart = (mIsVertical ? selected.getTop() : selected.getLeft());
-- final int selectedEnd = (mIsVertical ? selected.getBottom() : selected.getRight());
-+ final int selectedStart = getChildStartEdge(selected);
-+ final int selectedEnd = getChildEndEdge(selected);
-
- // Some of the newly selected item extends below the bottom of the list
- if (selectedEnd > end) {
-@@ -5085,28 +5039,19 @@
- return;
- }
-
-- // Get the last child ...
-- final View lastChild = getChildAt(childCount - 1);
--
-- // ... and its end edge
-- final int lastEnd;
-- if (mIsVertical) {
-- lastEnd = lastChild.getBottom();
-- } else {
-- lastEnd = lastChild.getRight();
-- }
-+ // Get the last child end edge
-+ final int lastEnd = getChildEndEdge(getChildAt(childCount - 1));
-
- // This is bottom of our drawable area
-- final int start = (mIsVertical ? getPaddingTop() : getPaddingLeft());
-- final int end =
-- (mIsVertical ? getHeight() - getPaddingBottom() : getWidth() - getPaddingRight());
-+ final int start = getStartEdge();
-+ final int end = getEndEdge();
-
- // This is how far the end edge of the last view is from the end of the
- // drawable area
- int endOffset = end - lastEnd;
-
- View firstChild = getChildAt(0);
-- int firstStart = (mIsVertical ? firstChild.getTop() : firstChild.getLeft());
-+ int firstStart = getChildStartEdge(firstChild);
-
- // Make sure we are 1) Too high, and 2) Either there are more rows above the
- // first row or the first row is scrolled off the top of the drawable area
-@@ -5120,7 +5065,7 @@
- offsetChildren(endOffset);
-
- if (mFirstPosition > 0) {
-- firstStart = (mIsVertical ? firstChild.getTop() : firstChild.getLeft());
-+ firstStart = getChildStartEdge(firstChild);
-
- // Fill the gap that was opened above mFirstPosition with more rows, if
- // possible
-@@ -5142,21 +5087,15 @@
- final View first = getChildAt(0);
- final int firstStart = (mIsVertical ? first.getTop() : first.getLeft());
-
-- final int start = (mIsVertical ? getPaddingTop() : getPaddingLeft());
--
-- final int end;
-- if (mIsVertical) {
-- end = getHeight() - getPaddingBottom();
-- } else {
-- end = getWidth() - getPaddingRight();
-- }
-+ final int start = getStartEdge();
-+ final int end = getEndEdge();
-
- // This is how far the start edge of the first view is from the start of the
- // drawable area
- int startOffset = firstStart - start;
-
- View last = getChildAt(childCount - 1);
-- int lastEnd = (mIsVertical ? last.getBottom() : last.getRight());
-+ int lastEnd = getChildEndEdge(last);
-
- int lastPosition = mFirstPosition + childCount - 1;
-
-@@ -5174,7 +5113,7 @@
- offsetChildren(-startOffset);
-
- if (lastPosition < mItemCount - 1) {
-- lastEnd = (mIsVertical ? last.getBottom() : last.getRight());
-+ lastEnd = getChildEndEdge(last);
-
- // Fill the gap that was opened below the last position with more rows, if
- // possible
-@@ -5366,6 +5305,8 @@
- }
-
- void resetState() {
-+ mScroller.forceFinished(true);
-+
- removeAllViewsInLayout();
-
- mSelectedStart = 0;
-@@ -5419,7 +5360,7 @@
- mSyncPosition = mFirstPosition;
-
- if (child != null) {
-- mSpecificStart = child.getTop();
-+ mSpecificStart = (mIsVertical ? child.getTop() : child.getLeft());
- }
-
- mSyncMode = SYNC_FIRST_POSITION;
-@@ -5435,16 +5376,13 @@
- final int firstPos = mFirstPosition;
- final int count = getChildCount();
-
-- final boolean useActivated = getContext().getApplicationInfo().targetSdkVersion
-- >= Build.VERSION_CODES.HONEYCOMB;
--
- for (int i = 0; i < count; i++) {
- final View child = getChildAt(i);
- final int position = firstPos + i;
-
- if (child instanceof Checkable) {
- ((Checkable) child).setChecked(mCheckStates.get(position));
-- } else if (useActivated) {
-+ } else if (Build.VERSION.SDK_INT >= HONEYCOMB) {
- child.setActivated(mCheckStates.get(position));
- }
- }
-@@ -5454,7 +5392,7 @@
- public boolean performItemClick(View view, int position, long id) {
- boolean checkedStateChanged = false;
-
-- if (mChoiceMode.compareTo(ChoiceMode.MULTIPLE) == 0) {
-+ if (mChoiceMode == ChoiceMode.MULTIPLE) {
- boolean checked = !mCheckStates.get(position, false);
- mCheckStates.put(position, checked);
-
-@@ -5473,7 +5411,7 @@
- }
-
- checkedStateChanged = true;
-- } else if (mChoiceMode.compareTo(ChoiceMode.SINGLE) == 0) {
-+ } else if (mChoiceMode == ChoiceMode.SINGLE) {
- boolean checked = !mCheckStates.get(position, false);
- if (checked) {
- mCheckStates.clear();
-@@ -5699,14 +5637,14 @@
- super(width, height);
-
- if (this.width == MATCH_PARENT) {
-- Log.w(LOGTAG, "Constructing LayoutParams with width FILL_PARENT " +
-+ Log.w(LOGTAG, "Constructing LayoutParams with width MATCH_PARENT " +
- "does not make much sense as the view might change orientation. " +
- "Falling back to WRAP_CONTENT");
- this.width = WRAP_CONTENT;
- }
-
- if (this.height == MATCH_PARENT) {
-- Log.w(LOGTAG, "Constructing LayoutParams with height FILL_PARENT " +
-+ Log.w(LOGTAG, "Constructing LayoutParams with height MATCH_PARENT " +
- "does not make much sense as the view might change orientation. " +
- "Falling back to WRAP_CONTENT");
- this.height = WRAP_CONTENT;
-@@ -5735,7 +5673,7 @@
- super(other);
-
- if (this.width == MATCH_PARENT) {
-- Log.w(LOGTAG, "Constructing LayoutParams with height MATCH_PARENT - " +
-+ Log.w(LOGTAG, "Constructing LayoutParams with width MATCH_PARENT - " +
- "does not make much sense as the view might change orientation. " +
- "Falling back to WRAP_CONTENT");
- this.width = WRAP_CONTENT;
-@@ -5786,11 +5724,8 @@
- } else {
- final int typeCount = mViewTypeCount;
- for (int i = 0; i < typeCount; i++) {
-- final ArrayList<View> scrap = mScrapViews[i];
-- final int scrapCount = scrap.size();
--
-- for (int j = 0; j < scrapCount; j++) {
-- scrap.get(j).forceLayout();
-+ for (View scrap : mScrapViews[i]) {
-+ scrap.forceLayout();
- }
- }
- }
-@@ -6120,7 +6055,7 @@
- // Force one here to make sure that the state of the list matches
- // the state of the adapter.
- if (mDataChanged) {
-- onLayout(false, getLeft(), getTop(), getRight(), getBottom());
-+ layout(getLeft(), getTop(), getRight(), getBottom());
- }
- } else {
- if (mEmptyView != null) {
-@@ -6525,16 +6460,10 @@
- return false;
-
- case AccessibilityNodeInfoCompat.ACTION_CLICK:
-- if (isClickable()) {
-- return performItemClick(host, position, id);
-- }
-- return false;
-+ return isClickable() && performItemClick(host, position, id);
-
- case AccessibilityNodeInfoCompat.ACTION_LONG_CLICK:
-- if (isLongClickable()) {
-- return performLongPress(host, position, id);
-- }
-- return false;
-+ return isLongClickable() && performLongPress(host, position, id);
- }
-
- return false;
diff --git a/data/patches/gnuzilla-bug-1036286-1.patch b/data/patches/gnuzilla-bug-1036286-1.patch
deleted file mode 100644
index a5d3110..0000000
--- a/data/patches/gnuzilla-bug-1036286-1.patch
+++ /dev/null
@@ -1,188 +0,0 @@
---- a/mozglue/linker/ElfLoader.cpp
-+++ a/mozglue/linker/ElfLoader.cpp
-@@ -960,28 +960,28 @@ static uint64_t ProcessTimeStamp_Now()
- /* Data structure used to pass data to the temporary signal handler,
- * as well as triggering a test crash. */
- struct TmpData {
- volatile int crash_int;
- volatile uint64_t crash_timestamp;
- };
-
- SEGVHandler::SEGVHandler()
--: registeredHandler(false), signalHandlingBroken(false)
--, signalHandlingSlow(false)
-+: initialized(false), registeredHandler(false), signalHandlingBroken(true)
-+, signalHandlingSlow(true)
- {
- /* Initialize oldStack.ss_flags to an invalid value when used to set
- * an alternative stack, meaning we haven't got information about the
-- * original alternative stack and thus don't mean to restore it */
-+ * original alternative stack and thus don't mean to restore it in
-+ * the desctructor. */
- oldStack.ss_flags = SS_ONSTACK;
-- if (!Divert(sigaction, __wrap_sigaction))
-- return;
-
- /* Get the current segfault signal handler. */
-- sys_sigaction(SIGSEGV, nullptr, &this->action);
-+ struct sigaction old_action;
-+ sys_sigaction(SIGSEGV, nullptr, &old_action);
-
- /* Some devices don't provide useful information to their SIGSEGV handlers,
- * making it impossible for on-demand decompression to work. To check if
- * we're on such a device, setup a temporary handler and deliberately
- * trigger a segfault. The handler will set signalHandlingBroken if the
- * provided information is bogus.
- * Some other devices have a kernel option enabled that makes SIGSEGV handler
- * have an overhead so high that it affects how on-demand decompression
-@@ -1000,21 +1000,33 @@ SEGVHandler::SEGVHandler()
- if (sys_sigaction(SIGSEGV, &action, nullptr))
- return;
-
- TmpData *data = reinterpret_cast<TmpData*>(stackPtr.get());
- data->crash_timestamp = ProcessTimeStamp_Now();
- mprotect(stackPtr, stackPtr.GetLength(), PROT_NONE);
- data->crash_int = 123;
- /* Restore the original segfault signal handler. */
-- sys_sigaction(SIGSEGV, &this->action, nullptr);
-+ sys_sigaction(SIGSEGV, &old_action, nullptr);
- stackPtr.Assign(MAP_FAILED, 0);
-+}
-+
-+void
-+SEGVHandler::FinishInitialization()
-+{
-+ /* Ideally, we'd need some locking here, but in practice, we're not
-+ * going to race with another thread. */
-+ initialized = true;
-+
- if (signalHandlingBroken || signalHandlingSlow)
- return;
-
-+ if (!Divert(sigaction, __wrap_sigaction))
-+ return;
-+
- /* Setup an alternative stack if the already existing one is not big
- * enough, or if there is none. */
- if (sigaltstack(nullptr, &oldStack) == 0) {
- if (oldStack.ss_flags == SS_ONSTACK)
- oldStack.ss_flags = 0;
- if (!oldStack.ss_sp || oldStack.ss_size < stackSize) {
- stackPtr.Assign(MemoryRange::mmap(nullptr, stackSize,
- PROT_READ | PROT_WRITE,
-@@ -1028,17 +1040,17 @@ SEGVHandler::SEGVHandler()
- if (sigaltstack(&stack, nullptr) != 0)
- return;
- }
- }
- /* Register our own handler, and store the already registered one in
- * SEGVHandler's struct sigaction member */
- action.sa_sigaction = &SEGVHandler::handler;
- action.sa_flags = SA_SIGINFO | SA_NODEFER | SA_ONSTACK;
-- registeredHandler = !sys_sigaction(SIGSEGV, &action, nullptr);
-+ registeredHandler = !sys_sigaction(SIGSEGV, &action, &this->action);
- }
-
- SEGVHandler::~SEGVHandler()
- {
- /* Restore alternative stack for signals */
- if (oldStack.ss_flags != SS_ONSTACK)
- sigaltstack(&oldStack, nullptr);
- /* Restore original signal handler */
-@@ -1048,28 +1060,28 @@ SEGVHandler::~SEGVHandler()
-
- /* Test handler for a deliberately triggered SIGSEGV that determines whether
- * useful information is provided to signal handlers, particularly whether
- * si_addr is filled in properly, and whether the segfault handler is called
- * quickly enough. */
- void SEGVHandler::test_handler(int signum, siginfo_t *info, void *context)
- {
- SEGVHandler &that = ElfLoader::Singleton;
-- if (signum != SIGSEGV ||
-- info == nullptr || info->si_addr != that.stackPtr.get())
-- that.signalHandlingBroken = true;
-+ if (signum == SIGSEGV && info &&
-+ info->si_addr == that.stackPtr.get())
-+ that.signalHandlingBroken = false;
- mprotect(that.stackPtr, that.stackPtr.GetLength(), PROT_READ | PROT_WRITE);
- TmpData *data = reinterpret_cast<TmpData*>(that.stackPtr.get());
- uint64_t latency = ProcessTimeStamp_Now() - data->crash_timestamp;
- DEBUG_LOG("SEGVHandler latency: %" PRIu64, latency);
- /* See bug 886736 for timings on different devices, 150 µs is reasonably above
-- * the latency on "working" devices and seems to be reasonably fast to incur
-- * a huge overhead to on-demand decompression. */
-- if (latency > 150000)
-- that.signalHandlingSlow = true;
-+ * the latency on "working" devices and seems to be reasonably fast not to
-+ * incur a huge overhead to on-demand decompression. */
-+ if (latency <= 150000)
-+ that.signalHandlingSlow = false;
- }
-
- /* TODO: "properly" handle signal masks and flags */
- void SEGVHandler::handler(int signum, siginfo_t *info, void *context)
- {
- //ASSERT(signum == SIGSEGV);
- DEBUG_LOG("Caught segmentation fault @%p", info->si_addr);
-
---- a/mozglue/linker/ElfLoader.h
-+++ a/mozglue/linker/ElfLoader.h
-@@ -307,32 +307,40 @@ private:
- * faults within the address space of the loaded libraries. It however
- * allows a handler to be set for faults in other places, and redispatches
- * to the handler set through signal() or sigaction().
- */
- class SEGVHandler
- {
- public:
- bool hasRegisteredHandler() {
-+ if (! initialized)
-+ FinishInitialization();
- return registeredHandler;
- }
-
- bool isSignalHandlingBroken() {
- return signalHandlingBroken;
- }
-
- protected:
- SEGVHandler();
- ~SEGVHandler();
-
- private:
- static int __wrap_sigaction(int signum, const struct sigaction *act,
- struct sigaction *oldact);
-
- /**
-+ * The constructor doesn't do all initialization, and the tail is done
-+ * at a later time.
-+ */
-+ void FinishInitialization();
-+
-+ /**
- * SIGSEGV handler registered with __wrap_signal or __wrap_sigaction.
- */
- struct sigaction action;
-
- /**
- * ElfLoader SIGSEGV handler.
- */
- static void handler(int signum, siginfo_t *info, void *context);
-@@ -354,16 +362,17 @@ private:
- stack_t oldStack;
-
- /**
- * Pointer to an alternative stack for signals. Only set if oldStack is
- * not set or not big enough.
- */
- MappedPtr stackPtr;
-
-+ bool initialized;
- bool registeredHandler;
- bool signalHandlingBroken;
- bool signalHandlingSlow;
- };
-
- /**
- * Elf Loader class in charge of loading and bookkeeping libraries.
- */
diff --git a/data/patches/gnuzilla-bug-1036286-2.patch b/data/patches/gnuzilla-bug-1036286-2.patch
deleted file mode 100644
index 6708062..0000000
--- a/data/patches/gnuzilla-bug-1036286-2.patch
+++ /dev/null
@@ -1,105 +0,0 @@
---- a/mozglue/linker/CustomElf.cpp
-+++ a/mozglue/linker/CustomElf.cpp
-@@ -1,16 +1,17 @@
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- #include <cstring>
- #include <sys/mman.h>
- #include <vector>
- #include <dlfcn.h>
-+#include <signal.h>
- #include "CustomElf.h"
- #include "Mappable.h"
- #include "Logging.h"
-
- using namespace Elf;
- using namespace mozilla;
-
- /* TODO: Fill ElfLoader::Singleton.lastError on errors. */
-@@ -348,16 +349,21 @@ CustomElf::GetSymbolPtrInDeps(const char
- if (strcmp(symbol + 2, "dso_handle") == 0)
- return const_cast<CustomElf *>(this);
- if (strcmp(symbol + 2, "moz_linker_stats") == 0)
- return FunctionPtr(&ElfLoader::stats);
- #ifdef __ARM_EABI__
- if (strcmp(symbol + 2, "gnu_Unwind_Find_exidx") == 0)
- return FunctionPtr(__wrap___gnu_Unwind_Find_exidx);
- #endif
-+ } else if (symbol[0] == 's' && symbol[1] == 'i') {
-+ if (strcmp(symbol + 2, "gnal") == 0)
-+ return FunctionPtr(signal);
-+ if (strcmp(symbol + 2, "gaction") == 0)
-+ return FunctionPtr(sigaction);
- }
-
- #define MISSING_FLASH_SYMNAME_START "_ZN7android10VectorImpl19reservedVectorImpl"
-
- // Android changed some symbols that Flash depended on in 4.4,
- // so stub those out here
- if (strncmp(symbol,
- MISSING_FLASH_SYMNAME_START,
---- a/mozglue/linker/ElfLoader.cpp
-+++ a/mozglue/linker/ElfLoader.cpp
-@@ -1014,17 +1014,59 @@ SEGVHandler::FinishInitialization()
- {
- /* Ideally, we'd need some locking here, but in practice, we're not
- * going to race with another thread. */
- initialized = true;
-
- if (signalHandlingBroken || signalHandlingSlow)
- return;
-
-- if (!Divert(sigaction, __wrap_sigaction))
-+ typedef int (*sigaction_func)(int, const struct sigaction *,
-+ struct sigaction *);
-+
-+ sigaction_func libc_sigaction;
-+
-+#if defined(ANDROID)
-+ /* Android > 4.4 comes with a sigaction wrapper in a LD_PRELOADed library
-+ * (libsigchain) for ART. That wrapper kind of does the same trick as we
-+ * do, so we need extra care in handling it.
-+ * - Divert the libc's sigaction, assuming the LD_PRELOADed library uses
-+ * it under the hood (which is more or less true according to the source
-+ * of that library, since it's doing a lookup in RTLD_NEXT)
-+ * - With the LD_PRELOADed library in place, all calls to sigaction from
-+ * from system libraries will go to the LD_PRELOADed library.
-+ * - The LD_PRELOADed library calls to sigaction go to our __wrap_sigaction.
-+ * - The calls to sigaction from libraries faulty.lib loads are sent to
-+ * the LD_PRELOADed library.
-+ * In practice, for signal handling, this means:
-+ * - The signal handler registered to the kernel is ours.
-+ * - Our handler redispatches to the LD_PRELOADed library's if there's a
-+ * segfault we don't handle.
-+ * - The LD_PRELOADed library redispatches according to whatever system
-+ * library or faulty.lib-loaded library set with sigaction.
-+ *
-+ * When there is no sigaction wrapper in place:
-+ * - Divert the libc's sigaction.
-+ * - Calls to sigaction from system library and faulty.lib-loaded libraries
-+ * all go to the libc's sigaction, which end up in our __wrap_sigaction.
-+ * - The signal handler registered to the kernel is ours.
-+ * - Our handler redispatches according to whatever system library or
-+ * faulty.lib-loaded library set with sigaction.
-+ */
-+ void *libc = dlopen("libc.so", RTLD_GLOBAL | RTLD_LAZY);
-+ if (libc) {
-+ libc_sigaction =
-+ reinterpret_cast<sigaction_func>(dlsym(libc, "sigaction"));
-+ } else
-+#endif
-+ {
-+ libc_sigaction = sigaction;
-+ }
-+
-+ if (!Divert(libc_sigaction, __wrap_sigaction))
- return;
-
- /* Setup an alternative stack if the already existing one is not big
- * enough, or if there is none. */
- if (sigaltstack(nullptr, &oldStack) == 0) {
- if (oldStack.ss_flags == SS_ONSTACK)
- oldStack.ss_flags = 0;
- if (!oldStack.ss_sp || oldStack.ss_size < stackSize) {
diff --git a/data/patches/gnuzilla-bug-1050780.patch b/data/patches/gnuzilla-bug-1050780.patch
deleted file mode 100644
index b142dc7..0000000
--- a/data/patches/gnuzilla-bug-1050780.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-# HG changeset patch
-# User Lucas Rocha <lucasr@mozilla.com>
-
-Bug 1050780 - Avoid disabled items in GeckoMenu's adapter (r=margaret)
-
-diff --git a/mobile/android/base/menu/GeckoMenu.java b/mobile/android/base/menu/GeckoMenu.java
-index eff2a51..cd2404b 100644
---- a/mobile/android/base/menu/GeckoMenu.java
-+++ b/mobile/android/base/menu/GeckoMenu.java
-@@ -781,17 +781,19 @@ public class GeckoMenu extends ListView
- public boolean areAllItemsEnabled() {
- // Setting this to true is a workaround to fix disappearing
- // dividers in the menu (bug 963249).
- return true;
- }
-
- @Override
- public boolean isEnabled(int position) {
-- return getItem(position).isEnabled();
-+ // Setting this to true is a workaround to fix disappearing
-+ // dividers in the menu in L (bug 1050780).
-+ return true;
- }
-
- public void addMenuItem(GeckoMenuItem menuItem) {
- if (mItems.contains(menuItem))
- return;
-
- // Insert it in proper order.
- int index = 0;
-diff --git a/mobile/android/base/resources/drawable/action_bar_button.xml b/mobile/android/base/resources/drawable/action_bar_button.xml
-index 9cb7aa8..fe36bc4 100644
---- a/mobile/android/base/resources/drawable/action_bar_button.xml
-+++ b/mobile/android/base/resources/drawable/action_bar_button.xml
-@@ -1,16 +1,17 @@
- <?xml version="1.0" encoding="utf-8"?>
- <!-- 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/. -->
-
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-- <item android:state_pressed="true">
-+ <item android:state_pressed="true"
-+ android:state_enabled="true">
- <shape>
- <solid android:color="@color/highlight" />
- </shape>
- </item>
-
- <item android:state_focused="true"
- android:state_pressed="false">
- <shape>
diff --git a/data/patches/gnuzilla-bug-1055166.patch b/data/patches/gnuzilla-bug-1055166.patch
deleted file mode 100644
index 51b8ee5..0000000
--- a/data/patches/gnuzilla-bug-1055166.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From: James Willcox <snorp@snorp.net>
-Bug 1055166 - Catch IllegalStateException when recycling Message
-
-
-
-diff --git a/mobile/android/base/GeckoAppShell.java b/mobile/android/base/GeckoAppShell.java
-index b06547f8c8135542d27713bb8e4c5d0e7496bb17..a50538e1b3449d3767ad78ed3fb8e596bc1acfbb 100644
---- a/mobile/android/base/GeckoAppShell.java
-+++ b/mobile/android/base/GeckoAppShell.java
-@@ -2478,17 +2478,22 @@ public class GeckoAppShell
- // Our "queue is empty" message; see runGecko()
- msg.recycle();
- return false;
- }
- if (msg.getTarget() == null)
- Looper.myLooper().quit();
- else
- msg.getTarget().dispatchMessage(msg);
-- msg.recycle();
-+
-+ try {
-+ msg.recycle();
-+ } catch (IllegalStateException e) {
-+ // There is nothing we can do here so just eat it
-+ }
- return true;
- }
-
- @WrapElementForJNI
- public static void notifyWakeLockChanged(String topic, String state) {
- if (getGeckoInterface() != null)
- getGeckoInterface().notifyWakeLockChanged(topic, state);
- }
diff --git a/data/patches/gnuzilla-bug-1058778.patch b/data/patches/gnuzilla-bug-1058778.patch
deleted file mode 100644
index 27d5097..0000000
--- a/data/patches/gnuzilla-bug-1058778.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/security/build/moz.build 2015-01-06 05:07:59.000000000 +0000
-+++ b/security/build/moz.build 2015-01-30 21:55:40.988341831 +0000
-@@ -10,5 +10,5 @@
-
- FORCE_SHARED_LIB = True
-
--if CONFIG['OS_TARGET'] == 'WINNT':
-- DEFFILE = 'nss3.def'
-+ if CONFIG['OS_TARGET'] == 'WINNT':
-+ DEFFILE = 'nss3.def'
diff --git a/data/patches/gnuzilla-bug-1089931.patch b/data/patches/gnuzilla-bug-1089931.patch
deleted file mode 100644
index cfd019f..0000000
--- a/data/patches/gnuzilla-bug-1089931.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-https://bugzilla.mozilla.org/show_bug.cgi?id=1089931
---- a/toolkit/crashreporter/google-breakpad/src/common/android/include/ucontext.h
-+++ a/toolkit/crashreporter/google-breakpad/src/common/android/include/ucontext.h
-@@ -26,31 +26,30 @@
- // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- #ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_UCONTEXT_H
- #define GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_UCONTEXT_H
-
- #include <sys/cdefs.h>
-+#include <signal.h>
-
--#ifdef __BIONIC_UCONTEXT_H
--#include <ucontext.h>
-+#ifdef __BIONIC_HAVE_UCONTEXT_H
-+# include_next <ucontext.h>
- #else
--
--#include <sys/ucontext.h>
-+# include <sys/ucontext.h>
-+#endif // __BIONIC_UCONTEXT_H
-
- #ifdef __cplusplus
- extern "C" {
- #endif // __cplusplus
-
- // Provided by src/android/common/breakpad_getcontext.S
- int breakpad_getcontext(ucontext_t* ucp);
-
- #define getcontext(x) breakpad_getcontext(x)
-
- #ifdef __cplusplus
- } // extern "C"
- #endif // __cplusplus
-
--#endif // __BIONIC_UCONTEXT_H
--
- #endif // GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_UCONTEXT_H
diff --git a/data/patches/gnuzilla-bug-1091987.patch b/data/patches/gnuzilla-bug-1091987.patch
deleted file mode 100644
index d42b5df..0000000
--- a/data/patches/gnuzilla-bug-1091987.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-https://bugzilla.mozilla.org/show_bug.cgi?id=1091987
-
---- a/widget/android/AndroidJavaWrappers.h
-+++ a/widget/android/AndroidJavaWrappers.h
-@@ -228,16 +228,17 @@ private:
- static jmethodID jBeginDrawingMethod;
- static jmethodID jDrawBackgroundMethod;
- static jmethodID jDrawForegroundMethod;
- static jmethodID jEndDrawingMethod;
- };
-
- enum {
- // These keycode masks are not defined in android/keycodes.h:
-+#if __ANDROID_API__ < 15
- AKEYCODE_ESCAPE = 111,
- AKEYCODE_FORWARD_DEL = 112,
- AKEYCODE_CTRL_LEFT = 113,
- AKEYCODE_CTRL_RIGHT = 114,
- AKEYCODE_CAPS_LOCK = 115,
- AKEYCODE_SCROLL_LOCK = 116,
- AKEYCODE_META_LEFT = 117,
- AKEYCODE_META_RIGHT = 118,
-@@ -337,16 +338,17 @@ enum {
- AKEYCODE_EISU = 212,
- AKEYCODE_MUHENKAN = 213,
- AKEYCODE_HENKAN = 214,
- AKEYCODE_KATAKANA_HIRAGANA = 215,
- AKEYCODE_YEN = 216,
- AKEYCODE_RO = 217,
- AKEYCODE_KANA = 218,
- AKEYCODE_ASSIST = 219,
-+#endif
-
- AMETA_FUNCTION_ON = 0x00000008,
- AMETA_CTRL_ON = 0x00001000,
- AMETA_CTRL_LEFT_ON = 0x00002000,
- AMETA_CTRL_RIGHT_ON = 0x00004000,
- AMETA_META_ON = 0x00010000,
- AMETA_META_LEFT_ON = 0x00020000,
- AMETA_META_RIGHT_ON = 0x00040000,
diff --git a/data/patches/gnuzilla-bug-1095298.patch b/data/patches/gnuzilla-bug-1095298.patch
deleted file mode 100644
index aa075a2..0000000
--- a/data/patches/gnuzilla-bug-1095298.patch
+++ /dev/null
@@ -1,30 +0,0 @@
---- a/intl/locale/src/nsLocaleService.cpp
-+++ a/intl/locale/src/nsLocaleService.cpp
-@@ -135,17 +135,25 @@ nsLocaleService::nsLocaleService(void)
-
- for( i = 0; i < LocaleListLength; i++ ) {
- nsresult result;
- // setlocale( , "") evaluates LC_* and LANG
- char* lc_temp = setlocale(posix_locale_category[i], "");
- CopyASCIItoUTF16(LocaleList[i], category);
- category_platform = category;
- category_platform.AppendLiteral("##PLATFORM");
-- if (lc_temp != nullptr) {
-+
-+ bool lc_temp_valid = lc_temp != nullptr;
-+
-+#if defined(MOZ_WIDGET_ANDROID)
-+ // Treat the "C" env as nothing useful. See Bug 1095298.
-+ lc_temp_valid = lc_temp_valid && strcmp(lc_temp, "C") != 0;
-+#endif
-+
-+ if (lc_temp_valid) {
- result = nsPosixLocale::GetXPLocale(lc_temp, xpLocale);
- CopyASCIItoUTF16(lc_temp, platformLocale);
- } else {
- if ( lang == nullptr ) {
- platformLocale.AssignLiteral("en_US");
- result = nsPosixLocale::GetXPLocale("en-US", xpLocale);
- } else {
- CopyASCIItoUTF16(lang, platformLocale);
-
diff --git a/data/patches/hack-manifest-packaging.patch b/data/patches/hack-manifest-packaging.patch
deleted file mode 100644
index 5cede80..0000000
--- a/data/patches/hack-manifest-packaging.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-# Hack allowing to bundle whole unpacked extensions without their manifests
-# breaking the packaging process.
-
---- a/python/mozbuild/mozpack/packager/__init__.py 2014-10-04 19:03:00.000000000 +0000
-+++ b/python/mozbuild/mozpack/packager/__init__.py 2014-10-06 12:07:03.000000000 +0000
-@@ -246,7 +246,10 @@
- '''
- assert not self._closed
- if is_manifest(path):
-- self._add_manifest_file(path, file)
-+ if "chrome.manifest" in path and "extensions" in path:
-+ self._file_queue.append(self.formatter.add, path, file)
-+ else:
-+ self._add_manifest_file(path, file)
- elif path.endswith('.xpt'):
- self._queue.append(self.formatter.add_interfaces, path, file)
- else:
diff --git a/data/patches/reduceGeckoPriority.patch b/data/patches/reduceGeckoPriority.patch
deleted file mode 100644
index 843d2c8..0000000
--- a/data/patches/reduceGeckoPriority.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -ur icecat-31.4.0.orig/mobile/android/base/util/ThreadUtils.java icecat-31.4.0/mobile/android/base/util/ThreadUtils.java
---- icecat-31.4.0.orig/mobile/android/base/util/ThreadUtils.java 2015-02-22 18:35:21.022789023 +0000
-+++ icecat-31.4.0/mobile/android/base/util/ThreadUtils.java 2015-02-22 22:09:50.518544343 +0000
-@@ -179,7 +179,13 @@
- * @param timeout Timeout in ms after which the priority will be reset
- */
- public static void reduceGeckoPriority(long timeout) {
-- if (!sIsGeckoPriorityReduced) {
-+ if (Runtime.getRuntime().availableProcessors() > 1) {
-+ // Don't reduce priority for multicore devices. We use availableProcessors()
-+ // for its fast performance. It may give false negatives (i.e. multicore
-+ // detected as single-core), but we can tolerate this behavior.
-+ return;
-+ }
-+ if (!sIsGeckoPriorityReduced && sGeckoThread != null) {
- sIsGeckoPriorityReduced = true;
- sGeckoThread.setPriority(Thread.MIN_PRIORITY);
- getUiHandler().postDelayed(sPriorityResetRunnable, timeout);
diff --git a/data/patches/reorder-mobile_android_base_android-services_mozbuild.patch b/data/patches/reorder-mobile_android_base_android-services_mozbuild.patch
deleted file mode 100644
index dd38815..0000000
--- a/data/patches/reorder-mobile_android_base_android-services_mozbuild.patch
+++ /dev/null
@@ -1,34 +0,0 @@
---- a/mobile/android/base/android-services.mozbuild 2015-01-06 05:07:54.000000000 +0000
-+++ b/mobile/android/base/android-services.mozbuild 2015-02-02 02:59:30.180709918 +0000
-@@ -567,7 +567,7 @@
- 'fxa/authenticator/FxAccountAuthenticatorService.java',
- 'fxa/authenticator/FxAccountLoginDelegate.java',
- 'fxa/authenticator/FxAccountLoginException.java',
-- 'fxa/FirefoxAccounts.java',
-+ 'fxa/IceCatAccounts.java',
- 'fxa/login/BaseRequestDelegate.java',
- 'fxa/login/Cohabiting.java',
- 'fxa/login/Doghouse.java',
-@@ -709,8 +709,8 @@
- 'sync/repositories/android/CachedSQLiteOpenHelper.java',
- 'sync/repositories/android/ClientsDatabase.java',
- 'sync/repositories/android/ClientsDatabaseAccessor.java',
-- 'sync/repositories/android/FennecTabsRepository.java',
- 'sync/repositories/android/FormHistoryRepositorySession.java',
-+ 'sync/repositories/android/IceCatMobileTabsRepository.java',
- 'sync/repositories/android/PasswordsRepositorySession.java',
- 'sync/repositories/android/RepoUtils.java',
- 'sync/repositories/BookmarkNeedsReparentingException.java',
-@@ -803,11 +803,11 @@
- 'sync/stage/CompletedStage.java',
- 'sync/stage/EnsureClusterURLStage.java',
- 'sync/stage/EnsureCrypto5KeysStage.java',
-- 'sync/stage/FennecTabsServerSyncStage.java',
- 'sync/stage/FetchInfoCollectionsStage.java',
- 'sync/stage/FetchMetaGlobalStage.java',
- 'sync/stage/FormHistoryServerSyncStage.java',
- 'sync/stage/GlobalSyncStage.java',
-+ 'sync/stage/IceCatMobileTabsServerSyncStage.java',
- 'sync/stage/NoSuchStageException.java',
- 'sync/stage/NoSyncIDException.java',
- 'sync/stage/PasswordsServerSyncStage.java',
diff --git a/data/patches/revert-gnuzilla-bug-973138.patch b/data/patches/revert-gnuzilla-bug-973138.patch
deleted file mode 100644
index ffd3a68..0000000
--- a/data/patches/revert-gnuzilla-bug-973138.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-This patch reverts fix for gnuzilla bug:
-https://bugzilla.mozilla.org/show_bug.cgi?id=973138
-which introduces:
-https://trac.torproject.org/projects/tor/ticket/12811
-https://bugzilla.mozilla.org/show_bug.cgi?id=1049366
-
---- a/mozglue/build/WindowsDllBlocklist.cpp 2015-01-27 19:17:08.585519129 +0100
-+++ b/mozglue/build/WindowsDllBlocklist.cpp 2015-01-30 00:42:10.817863012 +0100
-@@ -551,7 +551,7 @@
- printf_stderr("LdrLoadDll: dll name '%s'\n", dllName);
- #endif
-
-- // Block a suspicious binary that uses various 12-digit hex strings
-+/* // Block a suspicious binary that uses various 12-digit hex strings
- // e.g. MovieMode.48CA2AEFA22D.dll (bug 973138)
- char * dot = strchr(dllName, '.');
- if (dot && (strchr(dot+1, '.') == dot+13)) {
-@@ -561,6 +561,7 @@
- return STATUS_DLL_NOT_FOUND;
- }
- }
-+*/
-
- // then compare to everything on the blocklist
- info = &sWindowsDllBlocklist[0];
diff --git a/data/patches/torbrowser-bug-12811-2.patch b/data/patches/torbrowser-bug-12811-2.patch
deleted file mode 100644
index e80e228..0000000
--- a/data/patches/torbrowser-bug-12811-2.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-commit 73a628a5cebfa6dae1fca4c5fde072376ce4d06f
-Author: Georg Koppen <gk at torproject.org>
-Date: Fri Sep 12 09:37:39 2014 +0000
-
- Bug 12811: Add MOZ_D3DCOMPILER_DLL iff available.
-
- It seems MOZ_D3DCOMPILER_DLL is not avilable when compiling with
- mingw-w64. Trying to include it nevertheless breaks the packaging step
- as `@BINPATH@/@MOZ_D3DCOMPILER_DLL@` resolves to `bin/` which results
- in including all the things beginning with a `bin/` (again) which is
- treated as an error in case they got already included.
-
- This got fixed more or less by accident by bug 999260 which did not make
- it into ESR 31 (https://hg.mozilla.org/mozilla-central/rev/8b48386fc226).
----
- browser/installer/package-manifest.in | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
-index 521538f..c9117cf 100644
---- a/browser/installer/package-manifest.in
-+++ b/browser/installer/package-manifest.in
-@@ -597,8 +597,10 @@
- #ifdef MOZ_ANGLE_RENDERER
- @BINPATH@/libEGL.dll
- @BINPATH@/libGLESv2.dll
-+#ifdef MOZ_D3DCOMPILER_DLL_PATH
- @BINPATH@/@MOZ_D3DCOMPILER_DLL@
- #endif
-+#endif
-
- ; [Browser Chrome Files]
- @BINPATH@/browser/chrome.manifest
diff --git a/data/patches/torbrowser-bug-12811.patch b/data/patches/torbrowser-bug-12811.patch
deleted file mode 100644
index 6b062f4..0000000
--- a/data/patches/torbrowser-bug-12811.patch
+++ /dev/null
@@ -1,19 +0,0 @@
- Bug 12811: WTypes.h -> wtypes.h
----
- .../google-breakpad/src/google_breakpad/common/breakpad_types.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h
-index a60c5f3..e92436f 100644
---- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h
-+++ b/toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h
-@@ -58,7 +58,7 @@
- */
- #include BREAKPAD_CUSTOM_STDINT_H
- #else
--#include <WTypes.h>
-+#include <wtypes.h>
-
- typedef unsigned __int8 uint8_t;
- typedef unsigned __int16 uint16_t;
-
diff --git a/data/patches/torbrowser-bug-9837.patch b/data/patches/torbrowser-bug-9837.patch
deleted file mode 100644
index f62f0cb..0000000
--- a/data/patches/torbrowser-bug-9837.patch
+++ /dev/null
@@ -1,22 +0,0 @@
- Disable uninstall helper.exe on Win32.
-
- Reworked for Icecat
-
- Fixes 'make package' breakage on Windows builds. See
- https://trac.torproject.org/projects/tor/ticket/9837
----
- browser/installer/package-manifest.in | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/browser/installer/package-manifest.in 2015-01-30 23:33:42.296298458 +0100
-+++ b/browser/installer/package-manifest.in 2015-02-02 03:22:28.480752158 +0100
-@@ -43,7 +43,7 @@
- @BINPATH@/browser/@PREF_DIR@/firefox-l10n.js
- @BINPATH@/browser/searchplugins/*
- #ifdef XP_WIN32
--@BINPATH@/uninstall/helper.exe
-+;@BINPATH@/uninstall/helper.exe
- #endif
- #ifdef MOZ_UPDATER
- @BINPATH@/update.locale
-
diff --git a/data/searchplugins/creativecommons.xml b/data/searchplugins/creativecommons.xml
new file mode 100644
index 0000000..6478369
--- /dev/null
+++ b/data/searchplugins/creativecommons.xml
@@ -0,0 +1,11 @@
+<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
+<ShortName>Creative Commons</ShortName>
+<Description>Find photos, movies, music, and text to rip, sample, mash, and share.</Description>
+<InputEncoding>utf-8</InputEncoding>
+<Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJUSURBVDiNjZO9S1thGMXPvTfJFbnkipNkLLS0ksFg0M0lf4CboNCEgIIg/RiKtEOn0qGWTtbVoBYcIji10I9J0ApWCjp0kRaXdhHjTW4+uGnur4NJ8GOwZ3nf4TnnfZ5z3scAdBGGYdyVdN+yrGHTNNOtVqsVhuG+pO+S3gE/LtV3BIxzPDJNc8FxHGN0dNRKpVIGoJ2dndr+/r5Vr9cl6bmkN0AoSQIEyHXdj5KYnZ3F932uolKpkM/nK5KQ9FmSCZwLOI7zQBLr6+vXiFdRLBaDtsiTTve3YrFYkM/nbyR3MDU1dSKpLumO+vr6Xruui+d5AFSrVVZWVtjY2KDRaABwdHTE4uIie3t7AJTLZaLRaFXSCyUSid1MJgOA53n09/eTTqdJJpPMzc2xurqKbduMj48Tj8fZ3d0FYHBw8FjSezmOU56fnwdgeXkZ27ap1WpUKhWazSZjY2Nks1kASqVSd4zp6eljSX/MtiHdRDpnEATyfb+bkiSVSqXu3TCM8xgHBga+dkY4OzvDdV2GhoZIJBLMzMxQKBSIRqNkMhlisRhbW1sAJJPJn5I+KB6Pv7poou/7rK2tsbm5SRAEXROXlpY4ODgAoFarYdu2J+llN8ZcLvffMeZyud+SGpLuCVBPT89jSRQKhRvJxWKxISmU9JTOT5Rk9Pb2fpHE5OQkJycn14inp6dMTEx4bdM/SbKAy8sk6WEkElmwLCuSSqUYGRmxgHB7e7t+eHgYazabgaRnkt7SeZnr63xbUtYwjGHTNNNhGP4F9iR9a6/zr4v1/wDE1D9XlC4rrAAAAABJRU5ErkJggg==</Image>
+<Url type="text/html" method="GET" template="http://search.creativecommons.org/" resultdomain="creativecommons.org">
+ <Param name="q" value="{searchTerms}"/>
+ <Param name="sourceid" value="Mozilla-search"/>
+</Url>
+<SearchForm>http://search.creativecommons.org/</SearchForm>
+</SearchPlugin>
diff --git a/data/searchplugins/duckduckgo.xml b/data/searchplugins/duckduckgo.xml
new file mode 100644
index 0000000..d2a5e06
--- /dev/null
+++ b/data/searchplugins/duckduckgo.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
+<ShortName>DuckDuckGo</ShortName>
+<Description>Search DuckDuckGo (SSL)</Description>
+<InputEncoding>UTF-8</InputEncoding>
+<LongName>DuckDuckGo Search (SSL)</LongName>
+<Image width="16" height="16">data:image/x-icon;base64,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</Image>
+<Url type="text/html" method="GET" template="https://duckduckgo.com/html">
+ <Param name="q" value="{searchTerms}"/>
+ <Param name="t" value="gnu"/>
+</Url>
+</OpenSearchDescription>
diff --git a/data/searchplugins/fsfdirectory.xml b/data/searchplugins/fsfdirectory.xml
new file mode 100644
index 0000000..08bd6a1
--- /dev/null
+++ b/data/searchplugins/fsfdirectory.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
+<ShortName>Free Software Directory</ShortName>
+<Description>Free Software Directory (en)</Description>
+<InputEncoding>UTF-8</InputEncoding>
+<LongName>Free Software Directory (en)</LongName>
+<Image width="16" height="16">data:image/x-icon;base64,AAABAAMAEBAQAAEABAAoAQAANgAAACAgEAABAAQA6AIAAF4BAAAwMBAAAQAEAGgGAABGBAAAKAAAABAAAAAgAAAAAQAEAAAAAACAAAAAAAAAAAAAAAAQAAAAAAAAAP///wB8fL4AAACAACUlkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiICIiMAIgASIgIiICICAgAiAAAiIAICICICIiACIgIgIgIiICICAgAiAAAiACIAIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAAAAAAaGi0ACMjkgDw8PgAQUGhAP///wAAAIAAnp7PAMrK5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFwVVVVVVVVVVVURFVVVVRERERVVERERVVVVERVVVVERVVERVRFZERVVVREVVVVRGVVVEVURVVEVVVURFVVVVVVVURFVEVVREVVVEREREVVV0REFVRFVURFVVREVVVVVERERVVURVVERVVURFVVVVREVVVVVEVVREVVVERVVVUURVVCFVRFVURVVVREMzM1VEVVRDVUQ0REVVVURERERVJERERVVERERVVVVVVVVVVVVQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAMAAAAGAAAAABAAQAAAAAAIAEAAAAAAAAAAAAABAAAAAAAAAA5eXzAFparQDMzOYAHByOAK+v2AD///8AAACAAIGBwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZhVVZmZmZmZmNVVVVRZmZFVVVVdmZmZmZhVVZmZmZmZlVVVVVVVmZFVVVVVWZmZmZhVVZmZmZmZVVVZmJVVWZFVSBVVVZmZmZhVVZmZmZmZVUGZmZVVWZFVWZnVVVmZmZhVVZmZmZmZnVmZmYVVWZFVWZmVVVmZmZhVVZmZmZmZmZmZmZVVWZFVWZmZVVmZmZhVVVVVVU2ZmZmZgVVVWZFVWZmZVVmZmZhVVVVVVU2ZmYVVVVVVmZFVWZmZVUWZmZhVVVVVVU2ZmVVVVVQZmZFVWZmZVUWZmZhVVZmZmZmZlVVVUZmZmZFVWZmZVVmZmZhVVZmZmZmYVVQZmZmZmZFVWZmZVVmZmZhVVZmZmZmZVVWZmZmZmZFVWZmVVVmZmZhVVZmZmZmYlVWZmZVVGZFVWZlVVVmZmZhVVVVVVVWZlVVZmVVVmZFVVVVVVZmZmZhVVVVVVVWZlVVVVVVNmZFVVVVVWZmZmZhVVVVVVVWZmZVVVVWZmZFVVVVZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</Image>
+<Url type="text/html" method="GET" template="https://directory.fsf.org/wiki">
+ <Param name="title" value="Special:Search"/>
+ <Param name="search" value="{searchTerms}"/>
+</Url>
+</OpenSearchDescription>
diff --git a/data/searchplugins/ixquick.xml b/data/searchplugins/ixquick.xml
new file mode 100644
index 0000000..448f5fb
--- /dev/null
+++ b/data/searchplugins/ixquick.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
+<ShortName>Ixquick</ShortName>
+<Description>Ixquick Search, adds Ixquick.com over HTTPS (POST) to your OpenSearch capable browser.</Description>
+<InputEncoding>UTF-8</InputEncoding>
+<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABiklEQVQ4jZ2RsUtCURTGz7/gn+Do0ODc6OgmSJCQLUougohveThZBpecXMRsEIxMjAyhlEeZpAiBvKLQNETSDC3wwQtzcPgarrmoj/DA5Q73fL/vnO8SNEo4eYIymmi1gLQe9WIZ0du31QDy+w/IXYE1Vl8NIOS/QMIjyF3RXGMpwBBqgsQGyFtFtPSxHMAuW2BSF6wwALsbglW+IRRHoGAP5G+CfDIMoSbYZQvsogaWlsGS92CJElL5B5D0/Am9WAZ5q9wx0OHiQGc2AbmKIHsWZD0GmSMgUwhCOAdFHfMVlNEE1lid7yw2uLPYmGVATglkOwNZ4tBZj5AqvCzOgF33uKNP5re7Atq5AW1nQRtJGD3naPdV7RCZ1OUju4rc2c7FZIn/7xeM/um+9iwfeyomcwSpYkMb0O6rPKjp2TqQoLMlZsE5gxltAEvLvNkcAUvLM6jREQet70Jn2tMGGB1x6DcPIb8O5hqFcA605kHqqroY0O4N4QxmoKjjOfFfSeUahP3T5ROsUr/tPVtLvBGVHwAAAABJRU5ErkJggg==</Image>
+<Url type="text/html" method="POST" template="https://www.ixquick.com/do/search">
+<Param name="query" value="{searchTerms}"/>
+<!--
+Uncomment to enable preferences by URL parameter
+<Param name="prfh" value="lang_homepageEEEs/white/eng/N1Nfont_sizeEEEmediumN1Nrecent_results_filterEEE2N1Nlanguage_uiEEEenglishN1Ndisable_open_in_new_windowEEE1N1NsslEEE1N1Ncolor_schemeEEEwhiteN1Npower_refinementEEE1N1Ndisable_family_filterEEE1N1Nnum_of_resultsEEE50N1Npicture_privacyEEEonN1Ndisable_video_family_filterEEE1N1NsuggestionsEEE1N1N"/>
+-->
+</Url>
+<moz:SearchForm>https://www.ixquick.com/</moz:SearchForm>
+</OpenSearchDescription>
diff --git a/data/searchplugins/startpage.xml b/data/searchplugins/startpage.xml
new file mode 100644
index 0000000..0a28b8e
--- /dev/null
+++ b/data/searchplugins/startpage.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
+xmlns:moz="http://www.mozilla.org/2006/browser/search/">
+<ShortName>Startpage</ShortName>
+<Description>Startpage Search, adds Startpage.com over HTTPS (POST) to your OpenSearch capable browser.</Description>
+<InputEncoding>UTF-8</InputEncoding>
+<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC5klEQVQ4jV3O329TZRzH8fMfnGvmRW+88sf+AYUFJAwWJxAhyqI4gUzMWkfUZeg6cMGFlq7LqXS6snVLdWzg5mrpzNlshpNMmjFCNMYbjMR4Ia16YcSe50fX5+3FKaPxSV7J9/l8k0++VvKWNomiJrFe1zivV0lu0VtGb1cZXdek7mhjxW9qE1tTxIqK2NpDmlhREy9q4kWFUygz9nEBp/AHTj13iprRDW2syLfanFtRDF2vW1EMrWiGrmvO31Bcen+cxccCuLaNa9tkjg/Ud5r4TW2sDwra9C8rwq4ivNzAVZxdVuSbAsw+28545wD5Jr8o82KIs8uaoW+0sd5bUqbXVfR+Vecq+lzJh8lbpF4Nk28K0D9fps9VDE7d3Sq5cKHAQEEZ6928NKGsIpRVhBYUPVlFT1Yy/Uw7rm1zrSlA75Uyp7KSd7KSSHgO17a52DXM6bwyVnBBmq6rkq6rijfmFAOLiv5FxVuZMrPNO3Btm7H2IG/OSbrnJOf6/IKRY8OcuqaMdeJzaTpnJN3zko3fagBUFASzkpMTJWae9kvmH2/GeSlMbluAmeYddE+V6M5KYx2dkeaVjOTeXzX+VYb8j5tcXNW8/aUi8rWmJ13i8lN+SW5bgMGT4xyfKNE5LTlxRRirIyPM5Y0qAH05xbFpSe4H/w9w788aryVLTNdLEnuDHJmUdExKjmaEsQ6nhfnul00Avvi+ygNpAHggDaV//HnQVXQkS3z25HZc28bZG+RwWvDypDDWwTFhIkuaxrf00yZHJgQP8zM5xf6U4NDwfT59Yjsje4IcSHkcSgtjPZ8UtDqC0wuK9FqVzinB61OC0Kzk978NP5drtDmCfQnBvoTHwch92hKCtoTH/jEPa3fco9H4jUfX3C3XOPCJ8HeOx57/aU14WC3nK7REH0mtam7/WuPSquaFhMfOaIWWqEdL1GNnzLcrWhfzsFpHPLMrVmngmee2VOo8P4/7dsd8bR8J8x95G/ePEZdcmgAAAABJRU5ErkJggg==</Image>
+<Url type="text/html" method="POST" template="https://www.startpage.com/do/search">
+<Param name="query" value="{searchTerms}"/>
+<!--
+Uncomment to enable preferences by URL parameter
+<Param name="prfh" value="lang_homepageEEEs/white/eng/N1Nfont_sizeEEEmediumN1Nrecent_results_filterEEE2N1Nlanguage_uiEEEenglishN1Ndisable_open_in_new_windowEEE1N1NsslEEE1N1Ndisable_family_filterEEE1N1Nnum_of_resultsEEE50N1Npicture_privacyEEEonN1Ndisable_video_family_filterEEE1N1NsuggestionsEEE1N1N"/>
+-->
+</Url>
+<moz:SearchForm>https://www.startpage.com/</moz:SearchForm>
+</OpenSearchDescription>
diff --git a/data/searchplugins/wikipedia.xml b/data/searchplugins/wikipedia.xml
new file mode 100644
index 0000000..262e1b6
--- /dev/null
+++ b/data/searchplugins/wikipedia.xml
@@ -0,0 +1,14 @@
+<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
+<ShortName>Wikipedia</ShortName>
+<InputEncoding>UTF-8</InputEncoding>
+<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAACXBIWXMAAAsTAAALEwEAmpwYAAADGGlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjaY2BgnuDo4uTKJMDAUFBUUuQe5BgZERmlwH6egY2BmYGBgYGBITG5uMAxIMCHgYGBIS8/L5UBFTAyMHy7xsDIwMDAcFnX0cXJlYE0wJpcUFTCwMBwgIGBwSgltTiZgYHhCwMDQ3p5SUEJAwNjDAMDg0hSdkEJAwNjAQMDg0h2SJAzAwNjCwMDE09JakUJAwMDg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoKAwMD1A4GBgYGXpf8EgX3xMw8BSMDVQYqg4jIKAUICxE+CDEESC4tKoMHJQODAIMCgwGDA0MAQyJDPcMChqMMbxjFGV0YSxlXMN5jEmMKYprAdIFZmDmSeSHzGxZLlg6WW6x6rK2s99gs2aaxfWMPZ9/NocTRxfGFM5HzApcj1xZuTe4FPFI8U3mFeCfxCfNN45fhXyygI7BD0FXwilCq0A/hXhEVkb2i4aJfxCaJG4lfkaiQlJM8JpUvLS19QqZMVl32llyfvIv8H4WtioVKekpvldeqFKiaqP5UO6jepRGqqaT5QeuA9iSdVF0rPUG9V/pHDBYY1hrFGNuayJsym740u2C+02KJ5QSrOutcmzjbQDtXe2sHY0cdJzVnJRcFV3k3BXdlD3VPXS8Tbxsfd99gvwT//ID6wIlBS4N3hVwMfRnOFCEXaRUVEV0RMzN2T9yDBLZE3aSw5IaUNak30zkyLDIzs+ZmX8xlz7PPryjYVPiuWLskq3RV2ZsK/cqSql01jLVedVPrHzbqNdU0n22VaytsP9op3VXUfbpXta+x/+5Em0mzJ/+dGj/t8AyNmf2zvs9JmHt6vvmCpYtEFrcu+bYsc/m9lSGrTq9xWbtvveWGbZtMNm/ZarJt+w6rnft3u+45uy9s/4ODOYd+Hmk/Jn58xUnrU+fOJJ/9dX7SRe1LR68kXv13fc5Nm1t379TfU75/4mHeY7En+59lvhB5efB1/lv5dxc+NH0y/fzq64Lv4T8Ffp360/rP8f9/AA0ADzT6lvFdAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAHqSURBVHjapJUxb9NQFIW/JAip2xNS1/J+goeqUqeajdGVmFgwI1OcmYEgITFG7EgJQ+b2HzgbElJF+QU2iBl7YAFRnQ5+fnFcB0J8Jp/r53vPu+f6vYEA4JBTTjhkN/zkio9kAAihpyr1v/ijN7ovEHqiffFeDHTAdx6wL46HnPX4HM6HHNEHR0NGvRKMhvRE7wT3ACYssBggpyThIRMCAFaEzHhOiQWumfGFBQGQY0kB9EKSCsVCyKpQxUMhdOEMj4Vi91wIGX2uyNJtwTDHAgbjOUBJ/T50ETDAzCn0CiRpLkSd2VW1rqZR6uOpzHoWl40EkmkIlTIhNJc0bUSlSNNtCaZCKGtpyDZimXB92uhBhTEAHzx/BuQ8Isb62Dti16c7PahrNnbovFhXLGQaau4oqDSULDx/BcCl55cEDTUdCqqagWcXbjpqWD8ZWxRUGq5ZOTYhAXLHV0DU/qCtQLJCkZuM0PHQGThvL152JJh5M61SP2CpMpmmgdsTFDJCiaaubq0haQ7Q3xLUZq4NqzS0DNzWxNq8ksgbFmGgwf95oFgijJuB6v9L3Fx2HSg3XeExZxv1xuSEXQt/o8fqg9cDHfB15zuxjRuOETrfu/5b9bhcf+mlRmLgr/cTgp1vqR9c8YlvALcDAPr5jIx+4LKcAAAAAElFTkSuQmCC</Image>
+<Url type="application/x-suggestions+json" method="GET" template="http://en.wikipedia.org/w/api.php">
+ <Param name="action" value="opensearch"/>
+ <Param name="search" value="{searchTerms}"/>
+</Url>
+<Url type="text/html" method="GET" template="http://en.wikipedia.org/wiki/Special:Search">
+ <Param name="search" value="{searchTerms}"/>
+ <Param name="sourceid" value="Mozilla-search"/>
+</Url>
+<SearchForm>http://en.wikipedia.org/wiki/Special:Search</SearchForm>
+</SearchPlugin>
diff --git a/makeicecat b/makeicecat
index e98af3f..0e3f946 100644
--- a/makeicecat
+++ b/makeicecat
@@ -19,10 +19,10 @@
set -e
-FFMAJOR=31
-FFMINOR=8
-FFSUB=0
-GNUVERSION=2
+FFMAJOR=38
+FFMINOR=0
+FFSUB=1
+GNUVERSION=1
FFVERSION=$FFMAJOR.$FFMINOR.${FFSUB}
ICECATVERSION=$FFVERSION-gnu$GNUVERSION
SOURCEDIR=icecat-$FFVERSION
@@ -47,9 +47,9 @@ cd output
rm mozilla-esr${FFMAJOR} $SOURCEDIR -rf
wget -N http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.bz2
-wget -N http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.bz2.asc
-gpg --recv-keys --keyserver keyserver.ubuntu.com 15A0A4BC
-gpg --verify firefox-${FFVERSION}esr.source.tar.bz2.asc
+#wget -N ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.bz2.asc
+#gpg --recv-keys --keyserver keyserver.ubuntu.com 15A0A4BC
+#gpg --verify firefox-${FFVERSION}esr.source.tar.bz2.asc
echo Extracting Firefox tarball
tar -jxf firefox-${FFVERSION}esr.source.tar.bz2
@@ -91,7 +91,7 @@ mkdir l10n
cd l10n
while read line;do
line=$(echo $line |cut -d' ' -f1)
- #[ $line = "es-ES" ] || continue
+ [ $line = "es-ES" ] || continue
[ $line = "en-US" ] && continue
hg clone http://hg.mozilla.org/releases/l10n/mozilla-release/$line
cd $line
@@ -110,9 +110,10 @@ mv l10n $SOURCEDIR
cd $SOURCEDIR
-for patch in $DATA/patches/*; do
- patch -p1 < $patch
-done
+#for patch in $DATA/patches/*; do
+# echo Patching with file: $patch
+# patch -p1 < $patch
+#done
cp $DATA/Changelog.IceCat $DATA/README.IceCat .
cp $DATA/Changelog.IceCat $DATA/README.IceCat debian
@@ -208,7 +209,7 @@ pref("datareporting.healthreport.infoURL", "https://$INFOURL");
EOF
# Custom privacy statement link
-sed "s%https://www.mozilla.org/legal/privacy/%https://$LEGALINFOURL%" -i ./modules/libpref/src/init/all.js ./browser/app/profile/firefox.js ./toolkit/content/aboutRights.xhtml
+sed "s%https://www.mozilla.org/legal/privacy/%https://$LEGALINFOURL%" -i ./browser/app/profile/firefox.js ./toolkit/content/aboutRights.xhtml
# Replace versions for building on Trisquel
sed 's/1310/70/g; s/1204/60/g; s/1210/65/g; s/1404/70/g' -i debian/config/mozconfig.in debian/firefox-dev.install.in debian/firefox-dev.links.in
@@ -385,35 +386,41 @@ sed "/MOZILLA_UAVERSION/ s:IceCat/:Firefox/:" -i netwerk/protocol/http/nsHttpHan
find . -name region.properties |xargs -i /bin/sed 's_https://www.mibbit.*__' -i {}
# Set migrator scripts
-sed 's/IceCat/Firefox/g; s/icecat/firefox/g' -i browser/components/migration/src/IceCatProfileMigrator.js
+cp browser/components/migration/IceCatProfileMigrator.js browser/components/migration/FirefoxProfileMigrator.js
+sed 's/IceCat/Firefox/g; s/icecat/firefox/g' -i browser/components/migration/FirefoxProfileMigrator.js
# Copy js settings
cat $DATA/settings.js >> browser/app/profile/icecat.js
-sed "s/MOZ_PAY=1/MOZ_PAY=0/" -i browser/confvars.sh
-sed "s/MOZ_APP_VENDOR=.*/MOZ_APP_VENDOR=GNU/" -i browser/confvars.sh
-sed "s/MOZ_SERVICES_HEALTHREPORT=1/MOZ_SERVICES_HEALTHREPORT=0/" -i browser/confvars.sh
-sed "s/MOZ_SERVICES_FXACCOUNTS=1/MOZ_SERVICES_FXACCOUNTS=0/" -i browser/confvars.sh
-sed "s/MOZ_SERVICES_METRICS=1/MOZ_SERVICES_METRICS=0/" -i browser/confvars.sh
-sed "s/MOZ_SERVICES_SYNC=1/MOZ_SERVICES_SYNC=0/" -i browser/confvars.sh
-echo "MOZ_DATA_REPORTING=0" >> browser/confvars.sh
-echo "MOZ_APP_PROFILE=mozilla/icecat" >> browser/confvars.sh
+cat << EOF >> browser/confvars.sh
+# IceCat settings
+MOZ_APP_VENDOR=GNU
+MOZ_APP_VERSION=$FFVERSION
+MOZ_APP_PROFILE=mozilla/icecat
+MOZ_SERVICES_SYNC=0
+MOZ_SERVICES_METRICS=0
+MOZ_SERVICES_FXACCOUNTS=0
+MOZ_SERVICES_HEALTHREPORT=0
+MOZ_DATA_REPORTING=0
+MOZ_PAY=0
+EOF
+
sed 's/mozilla-esr/gnu-esr/' -i browser/confvars.sh
###############################################################################
# Mobile
###############################################################################
-sed "s/MOZ_APP_VERSION=.*/MOZ_APP_VERSION=$FFVERSION/" -i mobile/android/confvars.sh
-sed "s/MOZ_APP_VENDOR=.*/MOZ_APP_VENDOR=GNU/" -i mobile/android/confvars.sh
-sed "s/MOZ_PAY=1/MOZ_PAY=0/" -i mobile/android/confvars.sh
-sed "s/MOZ_SERVICES_HEALTHREPORT=1/MOZ_SERVICES_HEALTHREPORT=0/" -i mobile/android/confvars.sh
-sed "s/MOZ_SERVICES_FXACCOUNTS=1/MOZ_SERVICES_FXACCOUNTS=0/" -i mobile/android/confvars.sh
-sed "s/MOZ_DATA_REPORTING=1/MOZ_DATA_REPORTING=0/" -i mobile/android/confvars.sh
cat << EOF >> mobile/android/confvars.sh
-
-MOZ_SERVICES_SYNC=0
+# IceCat settings
+MOZ_APP_VENDOR=GNU
+MOZ_APP_VERSION=$FFVERSION
+MOZ_PAY=0
+MOZ_SERVICES_HEALTHREPORT=0
+MOZ_SERVICES_FXACCOUNTS=0
MOZ_SERVICES_METRICS=0
+MOZ_DATA_REPORTING=0
+MOZ_SERVICES_SYNC=0
MOZ_DEVICES=0
MOZ_NATIVE_DEVICES=0
MOZ_ANDROID_GOOGLE_PLAY_SERVICES=0
@@ -436,8 +443,6 @@ sed '/public static void checkAndNotifyPolicy/ s/{/{ if(true) return;/; /private
cp -a $DATA/android-images/core/* mobile/android/themes/core/images/
cp -a $DATA/android-images/resources mobile/android/base
-sed '/DISABLED/s/false/true/' -i mobile/android/base/background/announcements/AnnouncementsConstants.java.in
-
###############################################################################
# Macos packaging
###############################################################################
@@ -573,8 +578,8 @@ $(cat debian/copyright)" > debian/copyright
# Remove icecat-globalmenu package
sed '/Package:.*globalmenu/,/^$/d' -i debian/control.in
-# Don't recommend ubufox, Recommend torproxy
-sed 's/xul-ext-ubufox/xul-ext-torproxy/' -i debian/control.in
+# Don't recommend ubufox
+sed 's/xul-ext-ubufox//' -i debian/control.in
# Provide iceweasel, firefox
sed 's/iceweasel,/iceweasel, firefox,/' -i debian/control.in
@@ -608,7 +613,9 @@ sed 's/777/755/;' -i toolkit/crashreporter/google-breakpad/Makefile.in
#(cd toolkit/crashreporter/google-breakpad; automake)
# Fix CVE-2012-3386
-sed 's/chmod a+w/chmod u+w/' -i ./js/src/ctypes/libffi/Makefile.in ./toolkit/crashreporter/google-breakpad/Makefile.in ./toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.in
+/bin/sed 's/chmod a+w/chmod u+w/' -i ./js/src/ctypes/libffi/Makefile.in ./toolkit/crashreporter/google-breakpad/Makefile.in ./toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.in || true
+
+./mach generate-addon-sdk-moz-build
cd ..
echo Packaging tarball