Merge branch 'master' into f24

This commit is contained in:
Martin Stransky 2016-06-02 12:34:04 +02:00
commit cc687a15ae
6 changed files with 78 additions and 115 deletions

2
.gitignore vendored
View File

@ -193,3 +193,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-46.0-20160425.tar.xz
/firefox-46.0.1.source.tar.xz
/firefox-langpacks-46.0.1-20160503.tar.xz
/firefox-47.0.source.tar.xz
/firefox-langpacks-47.0-20160601.tar.xz

View File

@ -84,14 +84,14 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 46.0.1
Release: 9%{?pre_tag}%{?dist}
Version: 47.0
Release: 1%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz
%if %{build_langpacks}
Source1: firefox-langpacks-%{version}%{?pre_version}-20160503.tar.xz
Source1: firefox-langpacks-%{version}%{?pre_version}-20160601.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@ -129,7 +129,6 @@ Patch305: mozilla-1245076.patch
Patch306: mozilla-1245076-1.patch
Patch400: mozilla-1255590.patch
Patch402: mozilla-1196777.patch
Patch403: mozilla-1216658.patch
Patch404: mozilla-1270046.patch
# Remove when mozbz#1269319 lands
Patch405: mozilla-1245783.patch
@ -278,7 +277,6 @@ cd %{tarballdir}
%patch306 -p1 -b .1245076-1
%patch400 -p1 -b .1255590
%patch402 -p1 -b .1196777
%patch403 -p1 -b .1216658
%patch404 -p1 -b .1270046
%patch405 -p1 -b .1245783
%patch406 -p1 -b .890908-async-negotiate
@ -793,6 +791,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
* Thu Jun 2 2016 Martin Stransky <stransky@redhat.com> - 47.0-1
- Updated to 47.0
* Thu May 26 2016 Jan Horak <jhorak@redhat.com> - 46.0.1-9
- Negotiate authentication is made off the main thread (mozbz#890908)

View File

@ -1,30 +0,0 @@
# HG changeset patch
# User Nicolas Silva <nsilva@mozilla.com>
# Parent 0711218a018d912036f7d3be2ae2649e213cfb85
Bug 1216658 - Ignore Gt3 dark themes and use light theme's color scheme for native widgets. r=karlt
diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
--- a/widget/gtk/nsLookAndFeel.cpp
+++ b/widget/gtk/nsLookAndFeel.cpp
@@ -966,16 +966,21 @@ nsLookAndFeel::Init()
sMenuHoverText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_PRELIGHT]);
}
g_object_unref(menu);
#else
GdkRGBA color;
GtkStyleContext *style;
+ // Disable dark theme because it interracts poorly with wdget styling in
+ // web content.
+ g_object_set(gtk_settings_get_default (),
+ "gtk-application-prefer-dark-theme", FALSE, NULL);
+
// Gtk manages a screen's CSS in the settings object so we
// ask Gtk to create it explicitly. Otherwise we may end up
// with wrong color theme, see Bug 972382
(void)gtk_settings_get_for_screen(gdk_screen_get_default());
GtkWidgetPath *path = gtk_widget_path_new();
gtk_widget_path_append_type(path, GTK_TYPE_WINDOW);

View File

@ -1,39 +1,28 @@
From: Mike Hommey <glandium@debian.org>
Date: Sat, 21 Jun 2008 02:48:46 +0200
Subject: Allow .js preference files to set locked prefs with lockPref()
---
modules/libpref/prefapi.cpp | 5 ++++-
modules/libpref/prefapi.h | 3 ++-
modules/libpref/prefread.cpp | 12 +++++++++---
modules/libpref/prefread.h | 4 +++-
4 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/modules/libpref/prefapi.cpp b/modules/libpref/prefapi.cpp
index dd27769..bd3f8ea 100644
--- a/modules/libpref/prefapi.cpp
+++ b/modules/libpref/prefapi.cpp
@@ -967,11 +967,14 @@ void PREF_ReaderCallback(void *closure,
diff -up firefox-47.0/modules/libpref/prefapi.cpp.440908 firefox-47.0/modules/libpref/prefapi.cpp
--- firefox-47.0/modules/libpref/prefapi.cpp.440908 2016-06-01 17:17:19.723700226 +0200
+++ firefox-47.0/modules/libpref/prefapi.cpp 2016-06-01 17:21:05.839971471 +0200
@@ -947,8 +947,8 @@ void PREF_ReaderCallback(void *clo
PrefValue value,
PrefType type,
bool isDefault,
- bool isStickyDefault)
-
+ bool isStickyDefault,
+ bool isLocked)
{
uint32_t flags = isDefault ? kPrefSetDefault : kPrefForceSet;
if (isDefault && isStickyDefault) {
flags |= kPrefStickyDefault;
uint32_t flags = 0;
if (isDefault) {
@@ -960,4 +960,6 @@ void PREF_ReaderCallback(void *clo
flags |= kPrefForceSet;
}
pref_HashPref(pref, value, type, flags);
+ if (isLocked)
+ PREF_LockPref(pref, true);
}
diff --git a/modules/libpref/prefapi.h b/modules/libpref/prefapi.h
index 5bd8c43..0ab0d7c 100644
--- a/modules/libpref/prefapi.h
+++ b/modules/libpref/prefapi.h
@@ -186,7 +186,8 @@ void PREF_ReaderCallback( void *closure,
diff -up firefox-47.0/modules/libpref/prefapi.h.440908 firefox-47.0/modules/libpref/prefapi.h
--- firefox-47.0/modules/libpref/prefapi.h.440908 2016-06-01 06:11:44.000000000 +0200
+++ firefox-47.0/modules/libpref/prefapi.h 2016-06-01 17:17:19.723700226 +0200
@@ -243,7 +243,8 @@ void PREF_ReaderCallback( void *closure,
PrefValue value,
PrefType type,
bool isDefault,
@ -43,10 +32,9 @@ index 5bd8c43..0ab0d7c 100644
#ifdef __cplusplus
}
diff --git a/modules/libpref/prefread.cpp b/modules/libpref/prefread.cpp
index 6c4d339..16c5057 100644
--- a/modules/libpref/prefread.cpp
+++ b/modules/libpref/prefread.cpp
diff -up firefox-47.0/modules/libpref/prefread.cpp.440908 firefox-47.0/modules/libpref/prefread.cpp
--- firefox-47.0/modules/libpref/prefread.cpp.440908 2016-06-01 06:11:44.000000000 +0200
+++ firefox-47.0/modules/libpref/prefread.cpp 2016-06-01 17:29:47.017596668 +0200
@@ -43,6 +43,7 @@ enum {
#define BITS_PER_HEX_DIGIT 4
@ -64,27 +52,30 @@ index 6c4d339..16c5057 100644
return true;
}
@@ -191,6 +192,7 @@ PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen)
ps->vtype = PREF_INVALID;
@@ -191,6 +192,7 @@ PREF_ParseBuf(PrefParseState *ps, const
ps->vtype = PrefType::Invalid;
ps->fdefault = false;
ps->fstickydefault = false;
+ ps->flock = false;
}
switch (c) {
case '/': /* begin comment block or line? */
@@ -202,8 +204,10 @@ PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen)
@@ -201,11 +203,14 @@ PREF_ParseBuf(PrefParseState *ps, const
break;
case 'u': /* indicating user_pref */
case 'p': /* indicating pref */
case 's': /* indicating sticky_pref */
+ case 'l': /* indicating lockPref */
ps->smatch = (c == 'u' ? kUserPref :
- (c == 's' ? kPrefSticky : kPref));
+ (c == 's' ? kPrefSticky :
+ (c == 'p' ? kPref : kLockPref)));
ps->sindex = 1;
ps->nextstate = PREF_PARSE_UNTIL_OPEN_PAREN;
state = PREF_PARSE_MATCH_STRING;
@@ -247,8 +251,10 @@ PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen)
case 'p': /* indicating pref */
if (c == 'u') {
ps->smatch = kUserPref;
} else if (c == 's') {
ps->smatch = kPrefSticky;
+ } else if (c == 'l') {
+ ps->smatch = kLockPref;
} else {
ps->smatch = kPref;
}
@@ -252,8 +257,10 @@ PREF_ParseBuf(PrefParseState *ps, const
/* name parsing */
case PREF_PARSE_UNTIL_NAME:
if (c == '\"' || c == '\'') {
@ -96,11 +87,10 @@ index 6c4d339..16c5057 100644
ps->quotechar = c;
ps->nextstate = PREF_PARSE_UNTIL_COMMA; /* return here when done */
state = PREF_PARSE_QUOTED_STRING;
diff --git a/modules/libpref/prefread.h b/modules/libpref/prefread.h
index 3c317ff..0c13057 100644
--- a/modules/libpref/prefread.h
+++ b/modules/libpref/prefread.h
@@ -34,7 +34,8 @@ typedef void (*PrefReader)(void *closure,
diff -up firefox-47.0/modules/libpref/prefread.h.440908 firefox-47.0/modules/libpref/prefread.h
--- firefox-47.0/modules/libpref/prefread.h.440908 2016-06-01 06:11:44.000000000 +0200
+++ firefox-47.0/modules/libpref/prefread.h 2016-06-01 17:30:32.310651004 +0200
@@ -34,7 +34,8 @@ typedef void (*PrefReader)(void *c
PrefValue val,
PrefType type,
bool defPref,
@ -112,7 +102,7 @@ index 3c317ff..0c13057 100644
typedef struct PrefParseState {
@@ -56,6 +57,7 @@ typedef struct PrefParseState {
PrefType vtype; /* PREF_STRING,INT,BOOL */
bool fdefault; /* true if (default) pref */
bool fdefault; /* true if (default) pref */
bool fstickydefault; /* true if (sticky) pref */
+ bool flock; /* true if pref to be locked */
} PrefParseState;

View File

@ -1,6 +1,6 @@
diff -up firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.cpp.890908-async-negotiate firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.cpp
--- firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.cpp.890908-async-negotiate 2016-05-03 07:31:11.000000000 +0200
+++ firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.cpp 2016-05-26 15:10:23.850901737 +0200
diff -up firefox-47.0/extensions/auth/nsHttpNegotiateAuth.cpp.890908-async-negotiate firefox-47.0/extensions/auth/nsHttpNegotiateAuth.cpp
--- firefox-47.0/extensions/auth/nsHttpNegotiateAuth.cpp.890908-async-negotiate 2016-05-12 19:13:34.000000000 +0200
+++ firefox-47.0/extensions/auth/nsHttpNegotiateAuth.cpp 2016-06-01 17:14:07.915470135 +0200
@@ -38,6 +38,10 @@
#include "prnetdb.h"
#include "mozilla/Likely.h"
@ -259,9 +259,9 @@ diff -up firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.cpp.890908-async-neg
//
// GenerateCredentials
//
diff -up firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.h.890908-async-negotiate firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.h
--- firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.h.890908-async-negotiate 2016-05-03 07:31:11.000000000 +0200
+++ firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.h 2016-05-26 15:04:33.971068476 +0200
diff -up firefox-47.0/extensions/auth/nsHttpNegotiateAuth.h.890908-async-negotiate firefox-47.0/extensions/auth/nsHttpNegotiateAuth.h
--- firefox-47.0/extensions/auth/nsHttpNegotiateAuth.h.890908-async-negotiate 2016-05-12 19:13:34.000000000 +0200
+++ firefox-47.0/extensions/auth/nsHttpNegotiateAuth.h 2016-06-01 17:14:07.916470137 +0200
@@ -10,6 +10,7 @@
#include "nsIURI.h"
#include "nsSubstring.h"
@ -287,20 +287,20 @@ diff -up firefox-46.0.1/extensions/auth/nsHttpNegotiateAuth.h.890908-async-negot
+ RefPtr<mozilla::LazyIdleThread> mNegotiateThread;
};
#endif /* nsHttpNegotiateAuth_h__ */
diff -up firefox-46.0.1/netwerk/base/moz.build.890908-async-negotiate firefox-46.0.1/netwerk/base/moz.build
--- firefox-46.0.1/netwerk/base/moz.build.890908-async-negotiate 2016-05-03 07:31:07.000000000 +0200
+++ firefox-46.0.1/netwerk/base/moz.build 2016-05-26 15:04:33.971068476 +0200
@@ -46,6 +46,7 @@ XPIDL_SOURCES += [
'nsIFileStreams.idl',
diff -up firefox-47.0/netwerk/base/moz.build.890908-async-negotiate firefox-47.0/netwerk/base/moz.build
--- firefox-47.0/netwerk/base/moz.build.890908-async-negotiate 2016-06-01 17:14:07.916470137 +0200
+++ firefox-47.0/netwerk/base/moz.build 2016-06-01 17:15:29.409567895 +0200
@@ -47,6 +47,7 @@ XPIDL_SOURCES += [
'nsIFileURL.idl',
'nsIForcePendingChannel.idl',
'nsIFormPOSTActionChannel.idl',
+ 'nsIHttpAuthenticatorCallback.idl',
'nsIHttpPushListener.idl',
'nsIIncrementalDownload.idl',
'nsIIncrementalStreamLoader.idl',
diff -up firefox-46.0.1/netwerk/base/nsIHttpAuthenticatorCallback.idl.890908-async-negotiate firefox-46.0.1/netwerk/base/nsIHttpAuthenticatorCallback.idl
--- firefox-46.0.1/netwerk/base/nsIHttpAuthenticatorCallback.idl.890908-async-negotiate 2016-05-26 15:04:33.971068476 +0200
+++ firefox-46.0.1/netwerk/base/nsIHttpAuthenticatorCallback.idl 2016-05-26 15:04:33.971068476 +0200
diff -up firefox-47.0/netwerk/base/nsIHttpAuthenticatorCallback.idl.890908-async-negotiate firefox-47.0/netwerk/base/nsIHttpAuthenticatorCallback.idl
--- firefox-47.0/netwerk/base/nsIHttpAuthenticatorCallback.idl.890908-async-negotiate 2016-06-01 17:14:07.917470138 +0200
+++ firefox-47.0/netwerk/base/nsIHttpAuthenticatorCallback.idl 2016-06-01 17:14:07.917470138 +0200
@@ -0,0 +1,31 @@
+/* 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
@ -333,9 +333,9 @@ diff -up firefox-46.0.1/netwerk/base/nsIHttpAuthenticatorCallback.idl.890908-asy
+
+};
+
diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpBasicAuth.cpp.890908-async-negotiate firefox-46.0.1/netwerk/protocol/http/nsHttpBasicAuth.cpp
--- firefox-46.0.1/netwerk/protocol/http/nsHttpBasicAuth.cpp.890908-async-negotiate 2016-05-03 07:31:08.000000000 +0200
+++ firefox-46.0.1/netwerk/protocol/http/nsHttpBasicAuth.cpp 2016-05-26 15:04:33.971068476 +0200
diff -up firefox-47.0/netwerk/protocol/http/nsHttpBasicAuth.cpp.890908-async-negotiate firefox-47.0/netwerk/protocol/http/nsHttpBasicAuth.cpp
--- firefox-47.0/netwerk/protocol/http/nsHttpBasicAuth.cpp.890908-async-negotiate 2016-05-12 19:13:28.000000000 +0200
+++ firefox-47.0/netwerk/protocol/http/nsHttpBasicAuth.cpp 2016-06-01 17:14:07.918470139 +0200
@@ -49,6 +49,20 @@ nsHttpBasicAuth::ChallengeReceived(nsIHt
*identityInvalid = true;
return NS_OK;
@ -357,9 +357,9 @@ diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpBasicAuth.cpp.890908-async-n
NS_IMETHODIMP
nsHttpBasicAuth::GenerateCredentials(nsIHttpAuthenticableChannel *authChannel,
diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp.890908-async-negotiate firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp
--- firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp.890908-async-negotiate 2016-05-03 07:31:08.000000000 +0200
+++ firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp 2016-05-26 15:04:33.972068475 +0200
diff -up firefox-47.0/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp.890908-async-negotiate firefox-47.0/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp
--- firefox-47.0/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp.890908-async-negotiate 2016-05-12 19:13:28.000000000 +0200
+++ firefox-47.0/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp 2016-06-01 17:14:07.918470139 +0200
@@ -267,6 +267,11 @@ nsHttpChannelAuthProvider::Cancel(nsresu
mAsyncPromptAuthCancelable->Cancel(status);
mAsyncPromptAuthCancelable = nullptr;
@ -548,9 +548,9 @@ diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp.8909
} // namespace net
} // namespace mozilla
diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.h.890908-async-negotiate firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.h
--- firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.h.890908-async-negotiate 2016-05-03 07:31:08.000000000 +0200
+++ firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.h 2016-05-26 15:04:33.972068475 +0200
diff -up firefox-47.0/netwerk/protocol/http/nsHttpChannelAuthProvider.h.890908-async-negotiate firefox-47.0/netwerk/protocol/http/nsHttpChannelAuthProvider.h
--- firefox-47.0/netwerk/protocol/http/nsHttpChannelAuthProvider.h.890908-async-negotiate 2016-05-12 19:13:28.000000000 +0200
+++ firefox-47.0/netwerk/protocol/http/nsHttpChannelAuthProvider.h 2016-06-01 17:14:07.919470140 +0200
@@ -9,11 +9,13 @@
#include "nsIHttpChannelAuthProvider.h"
@ -608,9 +608,9 @@ diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpChannelAuthProvider.h.890908
};
} // namespace net
diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpDigestAuth.cpp.890908-async-negotiate firefox-46.0.1/netwerk/protocol/http/nsHttpDigestAuth.cpp
--- firefox-46.0.1/netwerk/protocol/http/nsHttpDigestAuth.cpp.890908-async-negotiate 2016-05-03 07:31:08.000000000 +0200
+++ firefox-46.0.1/netwerk/protocol/http/nsHttpDigestAuth.cpp 2016-05-26 15:04:33.972068475 +0200
diff -up firefox-47.0/netwerk/protocol/http/nsHttpDigestAuth.cpp.890908-async-negotiate firefox-47.0/netwerk/protocol/http/nsHttpDigestAuth.cpp
--- firefox-47.0/netwerk/protocol/http/nsHttpDigestAuth.cpp.890908-async-negotiate 2016-05-12 19:13:28.000000000 +0200
+++ firefox-47.0/netwerk/protocol/http/nsHttpDigestAuth.cpp 2016-06-01 17:14:07.920470141 +0200
@@ -158,6 +158,22 @@ nsHttpDigestAuth::ChallengeReceived(nsIH
return NS_OK;
}
@ -634,9 +634,9 @@ diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpDigestAuth.cpp.890908-async-
NS_IMETHODIMP
nsHttpDigestAuth::GenerateCredentials(nsIHttpAuthenticableChannel *authChannel,
const char *challenge,
diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpNTLMAuth.cpp.890908-async-negotiate firefox-46.0.1/netwerk/protocol/http/nsHttpNTLMAuth.cpp
--- firefox-46.0.1/netwerk/protocol/http/nsHttpNTLMAuth.cpp.890908-async-negotiate 2016-05-03 07:31:08.000000000 +0200
+++ firefox-46.0.1/netwerk/protocol/http/nsHttpNTLMAuth.cpp 2016-05-26 15:04:33.972068475 +0200
diff -up firefox-47.0/netwerk/protocol/http/nsHttpNTLMAuth.cpp.890908-async-negotiate firefox-47.0/netwerk/protocol/http/nsHttpNTLMAuth.cpp
--- firefox-47.0/netwerk/protocol/http/nsHttpNTLMAuth.cpp.890908-async-negotiate 2016-05-12 19:13:28.000000000 +0200
+++ firefox-47.0/netwerk/protocol/http/nsHttpNTLMAuth.cpp 2016-06-01 17:14:07.920470141 +0200
@@ -323,6 +323,21 @@ nsHttpNTLMAuth::ChallengeReceived(nsIHtt
}
@ -659,9 +659,9 @@ diff -up firefox-46.0.1/netwerk/protocol/http/nsHttpNTLMAuth.cpp.890908-async-ne
nsHttpNTLMAuth::GenerateCredentials(nsIHttpAuthenticableChannel *authChannel,
const char *challenge,
bool isProxyAuth,
diff -up firefox-46.0.1/netwerk/protocol/http/nsIHttpAuthenticator.idl.890908-async-negotiate firefox-46.0.1/netwerk/protocol/http/nsIHttpAuthenticator.idl
--- firefox-46.0.1/netwerk/protocol/http/nsIHttpAuthenticator.idl.890908-async-negotiate 2016-05-03 07:31:08.000000000 +0200
+++ firefox-46.0.1/netwerk/protocol/http/nsIHttpAuthenticator.idl 2016-05-26 15:04:33.973068475 +0200
diff -up firefox-47.0/netwerk/protocol/http/nsIHttpAuthenticator.idl.890908-async-negotiate firefox-47.0/netwerk/protocol/http/nsIHttpAuthenticator.idl
--- firefox-47.0/netwerk/protocol/http/nsIHttpAuthenticator.idl.890908-async-negotiate 2016-05-12 19:13:28.000000000 +0200
+++ firefox-47.0/netwerk/protocol/http/nsIHttpAuthenticator.idl 2016-06-01 17:14:07.921470143 +0200
@@ -6,6 +6,8 @@
#include "nsISupports.idl"

View File

@ -1,2 +1,2 @@
3e3b90268b8a634f7c60a25eb3a04c8c firefox-46.0.1.source.tar.xz
d9382a0655c29f9278ffc5cf22fb9e77 firefox-langpacks-46.0.1-20160503.tar.xz
acbea7250f12f91d537569fa92a6898d firefox-47.0.source.tar.xz
7fdb1146d8015b261efa076f4dbd6792 firefox-langpacks-47.0-20160601.tar.xz