summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--firefox.spec12
-rw-r--r--mozilla-440908.patch35
-rw-r--r--mozilla-890908-async-nego.patch757
-rw-r--r--sources4
5 files changed, 30 insertions, 780 deletions
diff --git a/.gitignore b/.gitignore
index 1adedc4..6adc581 100644
--- a/.gitignore
+++ b/.gitignore
@@ -210,3 +210,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-49.0-20160919.tar.xz
/firefox-49.0.2.source.tar.xz
/firefox-langpacks-49.0.2-20161031.tar.xz
+/firefox-50.0.source.tar.xz
+/firefox-langpacks-50.0-20161110.tar.xz
diff --git a/firefox.spec b/firefox.spec
index 6db4113..8355468 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -93,14 +93,14 @@
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 49.0.2
+Version: 50.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}-20161031.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20161110.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -136,7 +136,6 @@ Patch225: mozilla-1005640-accept-lang.patch
Patch304: mozilla-1253216.patch
Patch402: mozilla-1196777.patch
Patch406: mozilla-256180.patch
-Patch407: mozilla-890908-async-nego.patch
# Debian patches
Patch500: mozilla-440908.patch
@@ -279,7 +278,6 @@ cd %{tarballdir}
%patch304 -p1 -b .1253216
%patch402 -p1 -b .1196777
%patch406 -p1 -b .256180
-%patch407 -p1 -b .890908-async-nego
# Debian extension patch
%patch500 -p1 -b .440908
@@ -737,6 +735,8 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%{mozappdir}/browser/features/e10srollout@mozilla.org.xpi
%{mozappdir}/browser/features/firefox@getpocket.com.xpi
%{mozappdir}/browser/features/webcompat@mozilla.org.xpi
+# That's Windows only
+%ghost %{mozappdir}/browser/features/aushelper@mozilla.org.xpi
%attr(644, root, root) %{mozappdir}/browser/blocklist.xml
%dir %{mozappdir}/browser/extensions
%{mozappdir}/browser/extensions/*
@@ -770,6 +770,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%{mozappdir}/platform.ini
%{mozappdir}/plugin-container
%{mozappdir}/gmp-clearkey
+%{mozappdir}/fonts/EmojiOneMozilla.ttf
%if !%{?system_libicu}
%{mozappdir}/icudt56l.dat
%endif
@@ -785,6 +786,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Thu Nov 10 2016 Martin Stransky <stransky@redhat.com> - 50.0-1
+- Update to 50.0
+
* Mon Oct 31 2016 Jan Horak <jhorak@redhat.com> - 49.0.2-1
- Update to 49.0.2
diff --git a/mozilla-440908.patch b/mozilla-440908.patch
index ec41ab3..2d4a609 100644
--- a/mozilla-440908.patch
+++ b/mozilla-440908.patch
@@ -1,7 +1,7 @@
-diff -up firefox-49.0/modules/libpref/prefapi.cpp.440908 firefox-49.0/modules/libpref/prefapi.cpp
---- firefox-49.0/modules/libpref/prefapi.cpp.440908 2016-07-25 22:22:05.000000000 +0200
-+++ firefox-49.0/modules/libpref/prefapi.cpp 2016-09-08 11:45:51.283206722 +0200
-@@ -971,8 +971,8 @@ void PREF_ReaderCallback(void *clo
+diff -up firefox-50.0/modules/libpref/prefapi.cpp.440908 firefox-50.0/modules/libpref/prefapi.cpp
+--- firefox-50.0/modules/libpref/prefapi.cpp.440908 2016-10-31 21:15:26.000000000 +0100
++++ firefox-50.0/modules/libpref/prefapi.cpp 2016-11-10 10:32:48.796115692 +0100
+@@ -997,8 +997,8 @@ void PREF_ReaderCallback(void *clo
PrefValue value,
PrefType type,
bool isDefault,
@@ -12,29 +12,30 @@ diff -up firefox-49.0/modules/libpref/prefapi.cpp.440908 firefox-49.0/modules/li
{
uint32_t flags = 0;
if (isDefault) {
-@@ -984,4 +984,6 @@ void PREF_ReaderCallback(void *clo
+@@ -1010,4 +1010,6 @@ void PREF_ReaderCallback(void *clo
flags |= kPrefForceSet;
}
pref_HashPref(pref, value, type, flags);
+ if (isLocked)
+ PREF_LockPref(pref, true);
}
-diff -up firefox-49.0/modules/libpref/prefapi.h.440908 firefox-49.0/modules/libpref/prefapi.h
---- firefox-49.0/modules/libpref/prefapi.h.440908 2016-06-01 06:11:44.000000000 +0200
-+++ firefox-49.0/modules/libpref/prefapi.h 2016-09-08 11:45:51.283206722 +0200
-@@ -243,7 +243,8 @@ void PREF_ReaderCallback( void *closure,
+diff -up firefox-50.0/modules/libpref/prefapi.h.440908 firefox-50.0/modules/libpref/prefapi.h
+--- firefox-50.0/modules/libpref/prefapi.h.440908 2016-11-10 10:32:48.796115692 +0100
++++ firefox-50.0/modules/libpref/prefapi.h 2016-11-10 10:34:58.013159112 +0100
+@@ -243,8 +243,8 @@ void PREF_ReaderCallback( void *closure,
PrefValue value,
PrefType type,
bool isDefault,
- bool isStickyDefault);
+-
+ bool isStickyDefault,
+ bool isLocked);
- #ifdef __cplusplus
- }
-diff -up firefox-49.0/modules/libpref/prefread.cpp.440908 firefox-49.0/modules/libpref/prefread.cpp
---- firefox-49.0/modules/libpref/prefread.cpp.440908 2016-09-05 22:12:58.000000000 +0200
-+++ firefox-49.0/modules/libpref/prefread.cpp 2016-09-08 11:45:51.284206727 +0200
+ /*
+ * Callback whenever we change a preference
+diff -up firefox-50.0/modules/libpref/prefread.cpp.440908 firefox-50.0/modules/libpref/prefread.cpp
+--- firefox-50.0/modules/libpref/prefread.cpp.440908 2016-09-05 22:12:58.000000000 +0200
++++ firefox-50.0/modules/libpref/prefread.cpp 2016-11-10 10:32:48.796115692 +0100
@@ -43,6 +43,7 @@ enum {
#define BITS_PER_HEX_DIGIT 4
@@ -87,9 +88,9 @@ diff -up firefox-49.0/modules/libpref/prefread.cpp.440908 firefox-49.0/modules/l
ps->quotechar = c;
ps->nextstate = PREF_PARSE_UNTIL_COMMA; /* return here when done */
state = PREF_PARSE_QUOTED_STRING;
-diff -up firefox-49.0/modules/libpref/prefread.h.440908 firefox-49.0/modules/libpref/prefread.h
---- firefox-49.0/modules/libpref/prefread.h.440908 2016-09-05 22:12:58.000000000 +0200
-+++ firefox-49.0/modules/libpref/prefread.h 2016-09-08 11:57:09.485889976 +0200
+diff -up firefox-50.0/modules/libpref/prefread.h.440908 firefox-50.0/modules/libpref/prefread.h
+--- firefox-50.0/modules/libpref/prefread.h.440908 2016-09-05 22:12:58.000000000 +0200
++++ firefox-50.0/modules/libpref/prefread.h 2016-11-10 10:32:48.796115692 +0100
@@ -34,7 +34,8 @@ typedef void (*PrefReader)(void *c
PrefValue val,
PrefType type,
diff --git a/mozilla-890908-async-nego.patch b/mozilla-890908-async-nego.patch
deleted file mode 100644
index 65ec42c..0000000
--- a/mozilla-890908-async-nego.patch
+++ /dev/null
@@ -1,757 +0,0 @@
-diff -up firefox-48.0/extensions/auth/nsHttpNegotiateAuth.cpp.890908-async-nego firefox-48.0/extensions/auth/nsHttpNegotiateAuth.cpp
---- firefox-48.0/extensions/auth/nsHttpNegotiateAuth.cpp.890908-async-nego 2016-07-25 22:22:05.000000000 +0200
-+++ firefox-48.0/extensions/auth/nsHttpNegotiateAuth.cpp 2016-07-27 09:56:55.652261702 +0200
-@@ -40,6 +40,10 @@
- #include "mozilla/Snprintf.h"
- #include "nsIChannel.h"
- #include "nsNetUtil.h"
-+#include "nsThreadUtils.h"
-+#include "nsIHttpAuthenticatorCallback.h"
-+#include "mozilla/Mutex.h"
-+#include "nsICancelable.h"
-
- //-----------------------------------------------------------------------------
-
-@@ -51,6 +55,7 @@ static const char kNegotiateAuthAllowNon
- static const char kNegotiateAuthSSPI[] = "network.auth.use-sspi";
-
- #define kNegotiateLen (sizeof(kNegotiate)-1)
-+#define DEFAULT_THREAD_TIMEOUT_MS 30000
-
- //-----------------------------------------------------------------------------
-
-@@ -184,7 +189,260 @@ nsHttpNegotiateAuth::ChallengeReceived(n
- }
-
- NS_IMPL_ISUPPORTS(nsHttpNegotiateAuth, nsIHttpAuthenticator)
--
-+
-+namespace {
-+
-+//
-+// GetNextTokenCompleteEvent
-+//
-+// This event is fired on main thread when async call of
-+// nsHttpNegotiateAuth::GenerateCredentials is finished. During the Run()
-+// method the nsIHttpAuthenticatorCallback::OnCredsAvailable is called with
-+// obtained credentials, flags and NS_OK when successful, otherwise
-+// NS_ERROR_FAILURE is returned as a result of failed operation.
-+//
-+class GetNextTokenCompleteEvent final : public nsIRunnable,
-+ public nsICancelable
-+{
-+ virtual ~GetNextTokenCompleteEvent()
-+ {
-+ if (mCreds) {
-+ free(mCreds);
-+ }
-+ };
-+
-+public:
-+ NS_DECL_THREADSAFE_ISUPPORTS
-+
-+ explicit GetNextTokenCompleteEvent(nsIHttpAuthenticatorCallback* aCallback)
-+ : mCallback(aCallback)
-+ , mCreds(nullptr)
-+ , mCancelled(false)
-+ {
-+ }
-+
-+ NS_IMETHODIMP DispatchSuccess(char *aCreds,
-+ uint32_t aFlags,
-+ already_AddRefed<nsISupports> aSessionState,
-+ already_AddRefed<nsISupports> aContinuationState)
-+ {
-+ // Called from worker thread
-+ MOZ_ASSERT(!NS_IsMainThread());
-+
-+ mCreds = aCreds;
-+ mFlags = aFlags;
-+ mResult = NS_OK;
-+ mSessionState = aSessionState;
-+ mContinuationState = aContinuationState;
-+ return NS_DispatchToMainThread(this, NS_DISPATCH_NORMAL);
-+ }
-+
-+ NS_IMETHODIMP DispatchError(already_AddRefed<nsISupports> aSessionState,
-+ already_AddRefed<nsISupports> aContinuationState)
-+ {
-+ // Called from worker thread
-+ MOZ_ASSERT(!NS_IsMainThread());
-+
-+ mResult = NS_ERROR_FAILURE;
-+ mSessionState = aSessionState;
-+ mContinuationState = aContinuationState;
-+ return NS_DispatchToMainThread(this, NS_DISPATCH_NORMAL);
-+ }
-+
-+ NS_IMETHODIMP Run() override
-+ {
-+ // Runs on main thread
-+ MOZ_ASSERT(NS_IsMainThread());
-+
-+ if (!mCancelled) {
-+ nsCOMPtr<nsIHttpAuthenticatorCallback> callback;
-+ callback.swap(mCallback);
-+ callback->OnCredsGenerated(mCreds, mFlags, mResult, mSessionState, mContinuationState);
-+ }
-+ return NS_OK;
-+ }
-+
-+ NS_IMETHODIMP Cancel(nsresult aReason) override
-+ {
-+ // Supposed to be called from main thread
-+ MOZ_ASSERT(NS_IsMainThread());
-+
-+ mCancelled = true;
-+ return NS_OK;
-+ }
-+
-+private:
-+ nsCOMPtr<nsIHttpAuthenticatorCallback> mCallback;
-+ char *mCreds; // This class owns it, freed in destructor
-+ uint32_t mFlags;
-+ nsresult mResult;
-+ bool mCancelled;
-+ nsCOMPtr<nsISupports> mSessionState;
-+ nsCOMPtr<nsISupports> mContinuationState;
-+};
-+
-+NS_IMPL_ISUPPORTS(GetNextTokenCompleteEvent, nsIRunnable, nsICancelable)
-+
-+//
-+// GetNextTokenRunnable
-+//
-+// This runnable is created by GenerateCredentialsAsync and it runs
-+// in nsHttpNegotiateAuth::mNegotiateThread and calling GenerateCredentials.
-+//
-+class GetNextTokenRunnable final : public mozilla::Runnable
-+{
-+ virtual ~GetNextTokenRunnable() {}
-+ public:
-+ GetNextTokenRunnable(nsIHttpAuthenticableChannel *authChannel,
-+ const char *challenge,
-+ bool isProxyAuth,
-+ const char16_t *domain,
-+ const char16_t *username,
-+ const char16_t *password,
-+ nsISupports *sessionState,
-+ nsISupports *continuationState,
-+ GetNextTokenCompleteEvent *aCompleteEvent
-+ )
-+ : mAuthChannel(authChannel)
-+ , mChallenge(challenge)
-+ , mIsProxyAuth(isProxyAuth)
-+ , mDomain(domain)
-+ , mUsername(username)
-+ , mPassword(password)
-+ , mSessionState(sessionState)
-+ , mContinuationState(continuationState)
-+ , mCompleteEvent(aCompleteEvent)
-+ {
-+ }
-+
-+ NS_IMETHODIMP Run() override
-+ {
-+ // Runs on worker thread
-+ MOZ_ASSERT(!NS_IsMainThread());
-+
-+ char *creds;
-+ uint32_t flags;
-+ nsresult rv = ObtainCredentialsAndFlags(&creds, &flags);
-+
-+ // Passing session and continuation state this way to not touch
-+ // referencing of the object that may not be thread safe.
-+ // Not having a thread safe referencing doesn't mean the object
-+ // cannot be used on multiple threads (one example is nsAuthSSPI.)
-+ // This ensures state objects will be destroyed on the main thread
-+ // when not changed by GenerateCredentials.
-+ if (NS_FAILED(rv)) {
-+ return mCompleteEvent->DispatchError(mSessionState.forget(),
-+ mContinuationState.forget());
-+ }
-+
-+ return mCompleteEvent->DispatchSuccess(creds, flags,
-+ mSessionState.forget(),
-+ mContinuationState.forget());
-+ }
-+
-+ NS_IMETHODIMP ObtainCredentialsAndFlags(char **aCreds, uint32_t *aFlags)
-+ {
-+ nsresult rv;
-+
-+ // Use negotiate service to call GenerateCredentials outside of main thread
-+ nsAutoCString contractId;
-+ contractId.Assign(NS_HTTP_AUTHENTICATOR_CONTRACTID_PREFIX);
-+ contractId.Append("negotiate");
-+ nsCOMPtr<nsIHttpAuthenticator> authenticator =
-+ do_GetService(contractId.get(), &rv);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ nsISupports *sessionState = mSessionState;
-+ nsISupports *continuationState = mContinuationState;
-+ // The continuationState is for the sake of completeness propagated
-+ // to the caller (despite it is not changed in any GenerateCredentials
-+ // implementation).
-+ //
-+ // The only implementation that use sessionState is the
-+ // nsHttpDigestAuth::GenerateCredentials. Since there's no reason
-+ // to implement nsHttpDigestAuth::GenerateCredentialsAsync
-+ // because digest auth does not block the main thread, we won't
-+ // propagate changes to sessionState to the caller because of
-+ // the change is too complicated on the caller side.
-+ //
-+ // Should any of the session or continuation states change inside
-+ // this method, they must be threadsafe.
-+ rv = authenticator->GenerateCredentials(mAuthChannel,
-+ mChallenge.get(),
-+ mIsProxyAuth,
-+ mDomain.get(),
-+ mUsername.get(),
-+ mPassword.get(),
-+ &sessionState,
-+ &continuationState,
-+ aFlags,
-+ aCreds);
-+ if (mSessionState != sessionState) {
-+ mSessionState = sessionState;
-+ }
-+ if (mContinuationState != continuationState) {
-+ mContinuationState = continuationState;
-+ }
-+ return rv;
-+ }
-+ private:
-+ nsCOMPtr<nsIHttpAuthenticableChannel> mAuthChannel;
-+ nsCString mChallenge;
-+ bool mIsProxyAuth;
-+ nsString mDomain;
-+ nsString mUsername;
-+ nsString mPassword;
-+ nsCOMPtr<nsISupports> mSessionState;
-+ nsCOMPtr<nsISupports> mContinuationState;
-+ RefPtr<GetNextTokenCompleteEvent> mCompleteEvent;
-+};
-+
-+} // anonymous namespace
-+
-+NS_IMETHODIMP
-+nsHttpNegotiateAuth::GenerateCredentialsAsync(nsIHttpAuthenticableChannel *authChannel,
-+ nsIHttpAuthenticatorCallback* aCallback,
-+ const char *challenge,
-+ bool isProxyAuth,
-+ const char16_t *domain,
-+ const char16_t *username,
-+ const char16_t *password,
-+ nsISupports *sessionState,
-+ nsISupports *continuationState,
-+ nsICancelable **aCancelable)
-+{
-+ NS_ENSURE_ARG(aCallback);
-+ NS_ENSURE_ARG_POINTER(aCancelable);
-+
-+ RefPtr<GetNextTokenCompleteEvent> cancelEvent =
-+ new GetNextTokenCompleteEvent(aCallback);
-+
-+
-+ nsCOMPtr<nsIRunnable> getNextTokenRunnable =
-+ new GetNextTokenRunnable(authChannel,
-+ challenge,
-+ isProxyAuth,
-+ domain,
-+ username,
-+ password,
-+ sessionState,
-+ continuationState,
-+ cancelEvent);
-+ cancelEvent.forget(aCancelable);
-+
-+ nsresult rv;
-+ if (!mNegotiateThread) {
-+ mNegotiateThread =
-+ new mozilla::LazyIdleThread(DEFAULT_THREAD_TIMEOUT_MS,
-+ NS_LITERAL_CSTRING("NegotiateAuth"));
-+ NS_ENSURE_TRUE(mNegotiateThread, NS_ERROR_OUT_OF_MEMORY);
-+ }
-+ rv = mNegotiateThread->Dispatch(getNextTokenRunnable, NS_DISPATCH_NORMAL);
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ return NS_OK;
-+}
-+
- //
- // GenerateCredentials
- //
-diff -up firefox-48.0/extensions/auth/nsHttpNegotiateAuth.h.890908-async-nego firefox-48.0/extensions/auth/nsHttpNegotiateAuth.h
---- firefox-48.0/extensions/auth/nsHttpNegotiateAuth.h.890908-async-nego 2016-05-12 19:13:34.000000000 +0200
-+++ firefox-48.0/extensions/auth/nsHttpNegotiateAuth.h 2016-07-27 09:56:55.652261702 +0200
-@@ -10,6 +10,7 @@
- #include "nsIURI.h"
- #include "nsSubstring.h"
- #include "mozilla/Attributes.h"
-+#include "mozilla/LazyIdleThread.h"
-
- // The nsHttpNegotiateAuth class provides responses for the GSS-API Negotiate method
- // as specified by Microsoft in draft-brezak-spnego-http-04.txt
-@@ -17,7 +18,7 @@
- class nsHttpNegotiateAuth final : public nsIHttpAuthenticator
- {
- public:
-- NS_DECL_ISUPPORTS
-+ NS_DECL_THREADSAFE_ISUPPORTS
- NS_DECL_NSIHTTPAUTHENTICATOR
-
- private:
-@@ -37,5 +38,7 @@ private:
- int32_t port,
- const char *baseStart,
- const char *baseEnd);
-+ // Thread for GenerateCredentialsAsync
-+ RefPtr<mozilla::LazyIdleThread> mNegotiateThread;
- };
- #endif /* nsHttpNegotiateAuth_h__ */
-diff -up firefox-48.0/netwerk/base/moz.build.890908-async-nego firefox-48.0/netwerk/base/moz.build
---- firefox-48.0/netwerk/base/moz.build.890908-async-nego 2016-07-25 22:22:05.000000000 +0200
-+++ firefox-48.0/netwerk/base/moz.build 2016-07-27 09:56:55.653261702 +0200
-@@ -48,6 +48,7 @@ XPIDL_SOURCES += [
- 'nsIFileURL.idl',
- 'nsIForcePendingChannel.idl',
- 'nsIFormPOSTActionChannel.idl',
-+ 'nsIHttpAuthenticatorCallback.idl',
- 'nsIHttpPushListener.idl',
- 'nsIIncrementalDownload.idl',
- 'nsIIncrementalStreamLoader.idl',
-diff -up firefox-48.0/netwerk/base/nsIHttpAuthenticatorCallback.idl.890908-async-nego firefox-48.0/netwerk/base/nsIHttpAuthenticatorCallback.idl
---- firefox-48.0/netwerk/base/nsIHttpAuthenticatorCallback.idl.890908-async-nego 2016-07-27 09:56:55.653261702 +0200
-+++ firefox-48.0/netwerk/base/nsIHttpAuthenticatorCallback.idl 2016-07-27 09:56:55.653261702 +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
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "nsISupports.idl"
-+
-+[scriptable, uuid(d989cb03-e446-4086-b9e6-46842cb97bd5)]
-+interface nsIHttpAuthenticatorCallback : nsISupports
-+{
-+ /**
-+ * Authentication data for a header is available.
-+ *
-+ * @param aCreds
-+ * Credentials which were obtained asynchonously.
-+ * @param aFlags
-+ * Flags set by asynchronous call.
-+ * @param aResult
-+ * Result status of credentials generation
-+ * @param aSessionState
-+ * Modified session state to be passed to caller
-+ * @param aContinuationState
-+ * Modified continuation state to be passed to caller
-+ */
-+ void onCredsGenerated(in string aCreds,
-+ in unsigned long aFlags,
-+ in nsresult aResult,
-+ in nsISupports aSessionsState,
-+ in nsISupports aContinuationState);
-+
-+};
-+
-diff -up firefox-48.0/netwerk/protocol/http/nsHttpBasicAuth.cpp.890908-async-nego firefox-48.0/netwerk/protocol/http/nsHttpBasicAuth.cpp
---- firefox-48.0/netwerk/protocol/http/nsHttpBasicAuth.cpp.890908-async-nego 2016-05-12 19:13:28.000000000 +0200
-+++ firefox-48.0/netwerk/protocol/http/nsHttpBasicAuth.cpp 2016-07-27 09:56:55.653261702 +0200
-@@ -49,6 +49,20 @@ nsHttpBasicAuth::ChallengeReceived(nsIHt
- *identityInvalid = true;
- return NS_OK;
- }
-+NS_IMETHODIMP
-+nsHttpBasicAuth::GenerateCredentialsAsync(nsIHttpAuthenticableChannel *authChannel,
-+ nsIHttpAuthenticatorCallback* aCallback,
-+ const char *challenge,
-+ bool isProxyAuth,
-+ const char16_t *domain,
-+ const char16_t *username,
-+ const char16_t *password,
-+ nsISupports *sessionState,
-+ nsISupports *continuationState,
-+ nsICancelable **aCancellable)
-+{
-+ return NS_ERROR_NOT_IMPLEMENTED;
-+}
-
- NS_IMETHODIMP
- nsHttpBasicAuth::GenerateCredentials(nsIHttpAuthenticableChannel *authChannel,
-diff -up firefox-48.0/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp.890908-async-nego firefox-48.0/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp
---- firefox-48.0/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp.890908-async-nego 2016-05-12 19:13:28.000000000 +0200
-+++ firefox-48.0/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp 2016-07-27 09:56:55.653261702 +0200
-@@ -267,6 +267,11 @@ nsHttpChannelAuthProvider::Cancel(nsresu
- mAsyncPromptAuthCancelable->Cancel(status);
- mAsyncPromptAuthCancelable = nullptr;
- }
-+
-+ if (mGenerateCredentialsCancelable) {
-+ mGenerateCredentialsCancelable->Cancel(status);
-+ mGenerateCredentialsCancelable = nullptr;
-+ }
- return NS_OK;
- }
-
-@@ -280,6 +285,11 @@ nsHttpChannelAuthProvider::Disconnect(ns
- mAsyncPromptAuthCancelable = nullptr;
- }
-
-+ if (mGenerateCredentialsCancelable) {
-+ mGenerateCredentialsCancelable->Cancel(status);
-+ mGenerateCredentialsCancelable = nullptr;
-+ }
-+
- NS_IF_RELEASE(mProxyAuthContinuationState);
- NS_IF_RELEASE(mAuthContinuationState);
-
-@@ -355,11 +365,6 @@ nsHttpChannelAuthProvider::GenCredsAndSe
- char **result)
- {
- nsresult rv;
-- uint32_t authFlags;
--
-- rv = auth->GetAuthFlags(&authFlags);
-- if (NS_FAILED(rv)) return rv;
--
- nsISupports *ss = sessionState;
-
- // set informations that depend on whether
-@@ -373,6 +378,22 @@ nsHttpChannelAuthProvider::GenCredsAndSe
- continuationState = &mAuthContinuationState;
- }
-
-+ rv = auth->GenerateCredentialsAsync(mAuthChannel,
-+ this,
-+ challenge,
-+ proxyAuth,
-+ ident.Domain(),
-+ ident.User(),
-+ ident.Password(),
-+ ss,
-+ *continuationState,
-+ getter_AddRefs(mGenerateCredentialsCancelable));
-+ if (NS_SUCCEEDED(rv)) {
-+ // Calling generate credentials async, results will be dispatched to the
-+ // main thread by calling OnCredsGenerated method
-+ return NS_ERROR_IN_PROGRESS;
-+ }
-+
- uint32_t generateFlags;
- rv = auth->GenerateCredentials(mAuthChannel,
- challenge,
-@@ -393,6 +414,29 @@ nsHttpChannelAuthProvider::GenCredsAndSe
- LOG(("generated creds: %s\n", *result));
- #endif
-
-+ return UpdateCache(auth, scheme, host, port, directory, realm,
-+ challenge, ident, *result, generateFlags, sessionState);
-+}
-+
-+nsresult
-+nsHttpChannelAuthProvider::UpdateCache(nsIHttpAuthenticator *auth,
-+ const char *scheme,
-+ const char *host,
-+ int32_t port,
-+ const char *directory,
-+ const char *realm,
-+ const char *challenge,
-+ const nsHttpAuthIdentity &ident,
-+ const char *creds,
-+ uint32_t generateFlags,
-+ nsISupports *sessionState)
-+{
-+ nsresult rv;
-+
-+ uint32_t authFlags;
-+ rv = auth->GetAuthFlags(&authFlags);
-+ if (NS_FAILED(rv)) return rv;
-+
- // find out if this authenticator allows reuse of credentials and/or
- // challenge.
- bool saveCreds =
-@@ -410,6 +454,7 @@ nsHttpChannelAuthProvider::GenCredsAndSe
- nsAutoCString suffix;
- GetOriginAttributesSuffix(chan, suffix);
-
-+
- // create a cache entry. we do this even though we don't yet know that
- // these credentials are valid b/c we need to avoid prompting the user
- // more than once in case the credentials are valid.
-@@ -417,12 +462,13 @@ nsHttpChannelAuthProvider::GenCredsAndSe
- // if the credentials are not reusable, then we don't bother sticking
- // them in the auth cache.
- rv = authCache->SetAuthEntry(scheme, host, port, directory, realm,
-- saveCreds ? *result : nullptr,
-+ saveCreds ? creds : nullptr,
- saveChallenge ? challenge : nullptr,
- suffix,
- saveIdentity ? &ident : nullptr,
- sessionState);
- return rv;
-+
- }
-
- nsresult
-@@ -1223,6 +1269,63 @@ NS_IMETHODIMP nsHttpChannelAuthProvider:
- return NS_OK;
- }
-
-+NS_IMETHODIMP nsHttpChannelAuthProvider::OnCredsGenerated(const char *aGeneratedCreds,
-+ uint32_t aFlags,
-+ nsresult aResult,
-+ nsISupports* aSessionState,
-+ nsISupports* aContinuationState)
-+{
-+ nsresult rv;
-+
-+ MOZ_ASSERT(NS_IsMainThread());
-+
-+ // When channel is closed, do not proceed
-+ if (!mAuthChannel) {
-+ return NS_OK;
-+ }
-+
-+ mGenerateCredentialsCancelable = nullptr;
-+
-+ if (NS_FAILED(aResult)) {
-+ return OnAuthCancelled(nullptr, true);
-+ }
-+
-+ // We want to update m(Proxy)AuthContinuationState in case it was changed by
-+ // nsHttpNegotiateAuth::GenerateCredentials
-+ nsCOMPtr<nsISupports> contState(aContinuationState);
-+ if (mProxyAuth) {
-+ contState.swap(mProxyAuthContinuationState);
-+ } else {
-+ contState.swap(mAuthContinuationState);
-+ }
-+
-+ nsCOMPtr<nsIHttpAuthenticator> auth;
-+ nsAutoCString unused;
-+ rv = GetAuthenticator(mCurrentChallenge.get(), unused, getter_AddRefs(auth));
-+ NS_ENSURE_SUCCESS(rv, rv);
-+
-+ const char *host;
-+ int32_t port;
-+ nsHttpAuthIdentity *ident;
-+ nsAutoCString directory, scheme;
-+ nsISupports **unusedContinuationState;
-+
-+ // Get realm from challenge
-+ nsAutoCString realm;
-+ ParseRealm(mCurrentChallenge.get(), realm);
-+
-+ rv = GetAuthorizationMembers(mProxyAuth, scheme, host, port,
-+ directory, ident, unusedContinuationState);
-+ if (NS_FAILED(rv)) return rv;
-+
-+ UpdateCache(auth, scheme.get(), host, port, directory.get(), realm.get(),
-+ mCurrentChallenge.get(), *ident, aGeneratedCreds, aFlags, aSessionState);
-+ mCurrentChallenge.Truncate();
-+
-+ ContinueOnAuthAvailable(nsDependentCString(aGeneratedCreds));
-+ return NS_OK;
-+}
-+
- nsresult
- nsHttpChannelAuthProvider::ContinueOnAuthAvailable(const nsCSubstring& creds)
- {
-@@ -1457,7 +1560,7 @@ nsHttpChannelAuthProvider::GetCurrentPat
- }
-
- NS_IMPL_ISUPPORTS(nsHttpChannelAuthProvider, nsICancelable,
-- nsIHttpChannelAuthProvider, nsIAuthPromptCallback)
-+ nsIHttpChannelAuthProvider, nsIAuthPromptCallback, nsIHttpAuthenticatorCallback)
-
- } // namespace net
- } // namespace mozilla
-diff -up firefox-48.0/netwerk/protocol/http/nsHttpChannelAuthProvider.h.890908-async-nego firefox-48.0/netwerk/protocol/http/nsHttpChannelAuthProvider.h
---- firefox-48.0/netwerk/protocol/http/nsHttpChannelAuthProvider.h.890908-async-nego 2016-05-12 19:13:28.000000000 +0200
-+++ firefox-48.0/netwerk/protocol/http/nsHttpChannelAuthProvider.h 2016-07-27 09:57:34.084262023 +0200
-@@ -9,11 +9,13 @@
-
- #include "nsIHttpChannelAuthProvider.h"
- #include "nsIAuthPromptCallback.h"
-+#include "nsIHttpAuthenticatorCallback.h"
- #include "nsString.h"
- #include "nsCOMPtr.h"
- #include "nsHttpAuthCache.h"
- #include "nsProxyInfo.h"
- #include "nsCRT.h"
-+#include "nsICancelableRunnable.h"
-
- class nsIHttpAuthenticableChannel;
- class nsIHttpAuthenticator;
-@@ -25,12 +27,14 @@ class nsHttpHandler;
-
- class nsHttpChannelAuthProvider : public nsIHttpChannelAuthProvider
- , public nsIAuthPromptCallback
-+ , public nsIHttpAuthenticatorCallback
- {
- public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSICANCELABLE
- NS_DECL_NSIHTTPCHANNELAUTHPROVIDER
- NS_DECL_NSIAUTHPROMPTCALLBACK
-+ NS_DECL_NSIHTTPAUTHENTICATORCALLBACK
-
- nsHttpChannelAuthProvider();
- static void InitializePrefs();
-@@ -117,6 +121,19 @@ private:
- // For more details look at the bug 647010.
- bool BlockPrompt();
-
-+ // Store credentials to the cache when appropriate aFlags are set.
-+ nsresult UpdateCache(nsIHttpAuthenticator *aAuth,
-+ const char *aScheme,
-+ const char *aHost,
-+ int32_t aPort,
-+ const char *aDirectory,
-+ const char *aRealm,
-+ const char *aChallenge,
-+ const nsHttpAuthIdentity &aIdent,
-+ const char *aCreds,
-+ uint32_t aGenerateFlags,
-+ nsISupports *aSessionState);
-+
- private:
- nsIHttpAuthenticableChannel *mAuthChannel; // weak ref
-
-@@ -160,6 +177,7 @@ private:
- // authentication credentials dialogs for sub-resources and cross-origin
- // sub-resources.
- static uint32_t sAuthAllowPref;
-+ nsCOMPtr<nsICancelable> mGenerateCredentialsCancelable;
- };
-
- } // namespace net
-diff -up firefox-48.0/netwerk/protocol/http/nsHttpDigestAuth.cpp.890908-async-nego firefox-48.0/netwerk/protocol/http/nsHttpDigestAuth.cpp
---- firefox-48.0/netwerk/protocol/http/nsHttpDigestAuth.cpp.890908-async-nego 2016-05-12 19:13:28.000000000 +0200
-+++ firefox-48.0/netwerk/protocol/http/nsHttpDigestAuth.cpp 2016-07-27 09:56:55.654261702 +0200
-@@ -158,6 +158,22 @@ nsHttpDigestAuth::ChallengeReceived(nsIH
- return NS_OK;
- }
-
-+
-+NS_IMETHODIMP
-+nsHttpDigestAuth::GenerateCredentialsAsync(nsIHttpAuthenticableChannel *authChannel,
-+ nsIHttpAuthenticatorCallback* aCallback,
-+ const char *challenge,
-+ bool isProxyAuth,
-+ const char16_t *domain,
-+ const char16_t *username,
-+ const char16_t *password,
-+ nsISupports *sessionState,
-+ nsISupports *continuationState,
-+ nsICancelable **aCancellable)
-+{
-+ return NS_ERROR_NOT_IMPLEMENTED;
-+}
-+
- NS_IMETHODIMP
- nsHttpDigestAuth::GenerateCredentials(nsIHttpAuthenticableChannel *authChannel,
- const char *challenge,
-diff -up firefox-48.0/netwerk/protocol/http/nsHttpNTLMAuth.cpp.890908-async-nego firefox-48.0/netwerk/protocol/http/nsHttpNTLMAuth.cpp
---- firefox-48.0/netwerk/protocol/http/nsHttpNTLMAuth.cpp.890908-async-nego 2016-07-25 22:22:06.000000000 +0200
-+++ firefox-48.0/netwerk/protocol/http/nsHttpNTLMAuth.cpp 2016-07-27 09:56:55.654261702 +0200
-@@ -333,6 +333,21 @@ nsHttpNTLMAuth::ChallengeReceived(nsIHtt
- }
-
- NS_IMETHODIMP
-+nsHttpNTLMAuth::GenerateCredentialsAsync(nsIHttpAuthenticableChannel *authChannel,
-+ nsIHttpAuthenticatorCallback* aCallback,
-+ const char *challenge,
-+ bool isProxyAuth,
-+ const char16_t *domain,
-+ const char16_t *username,
-+ const char16_t *password,
-+ nsISupports *sessionState,
-+ nsISupports *continuationState,
-+ nsICancelable **aCancellable)
-+{
-+ return NS_ERROR_NOT_IMPLEMENTED;
-+}
-+
-+NS_IMETHODIMP
- nsHttpNTLMAuth::GenerateCredentials(nsIHttpAuthenticableChannel *authChannel,
- const char *challenge,
- bool isProxyAuth,
-diff -up firefox-48.0/netwerk/protocol/http/nsIHttpAuthenticator.idl.890908-async-nego firefox-48.0/netwerk/protocol/http/nsIHttpAuthenticator.idl
---- firefox-48.0/netwerk/protocol/http/nsIHttpAuthenticator.idl.890908-async-nego 2016-05-12 19:13:28.000000000 +0200
-+++ firefox-48.0/netwerk/protocol/http/nsIHttpAuthenticator.idl 2016-07-27 09:56:55.654261702 +0200
-@@ -6,6 +6,8 @@
- #include "nsISupports.idl"
-
- interface nsIHttpAuthenticableChannel;
-+interface nsIHttpAuthenticatorCallback;
-+interface nsICancelable;
-
- /**
- * nsIHttpAuthenticator
-@@ -18,7 +20,7 @@ interface nsIHttpAuthenticableChannel;
- * where <auth-scheme> is the lower-cased value of the authentication scheme
- * found in the server challenge per the rules of RFC 2617.
- */
--[scriptable, uuid(16784db0-fcb1-4352-b0c9-6a3a67e3cf79)]
-+[scriptable, uuid(fef7db8a-a4e2-49d1-9685-19ed7e309b7d)]
- interface nsIHttpAuthenticator : nsISupports
- {
- /**
-@@ -54,6 +56,54 @@ interface nsIHttpAuthenticator : nsISupp
-
- /**
- * Called to generate the authentication credentials for a particular
-+ * server/proxy challenge asynchronously. Credentials will be sent back
-+ * to the server via an Authorization/Proxy-Authorization header.
-+ *
-+ * @param aChannel
-+ * the http channel requesting credentials
-+ * @param aCallback
-+ * callback function to be called when credentials are available
-+ * @param aChallenge
-+ * the challenge from the WWW-Authenticate/Proxy-Authenticate
-+ * server response header. (possibly from the auth cache.)
-+ * @param aProxyAuth
-+ * flag indicating whether or not aChallenge is from a proxy.
-+ * @param aDomain
-+ * string containing the domain name (if appropriate)
-+ * @param aUser
-+ * string containing the user name
-+ * @param aPassword
-+ * string containing the password
-+ * @param aSessionState
-+ * state stored along side the user's identity in the auth cache
-+ * for the lifetime of the browser session. if a new auth cache
-+ * entry is created for this challenge, then this parameter will
-+ * be null. on return, the result will be stored in the new auth
-+ * cache entry. this parameter is non-null when an auth cache entry
-+ * is being reused. currently modification of session state is not
-+ * communicated to caller, thus caching credentials obtained by
-+ * asynchronous way is not supported.
-+ * @param aContinuationState
-+ * state held by the channel between consecutive calls to
-+ * generateCredentials, assuming multiple calls are required
-+ * to authenticate. this state is held for at most the lifetime of
-+ * the channel.
-+ * @pram aCancel
-+ * returns cancellable runnable object which caller can use to cancel
-+ * calling aCallback when finished.
-+ */
-+ void generateCredentialsAsync(in nsIHttpAuthenticableChannel aChannel,
-+ in nsIHttpAuthenticatorCallback aCallback,
-+ in string aChallenge,
-+ in boolean aProxyAuth,
-+ in wstring aDomain,
-+ in wstring aUser,
-+ in wstring aPassword,
-+ in nsISupports aSessionState,
-+ in nsISupports aContinuationState,
-+ out nsICancelable aCancel);
-+ /**
-+ * Called to generate the authentication credentials for a particular
- * server/proxy challenge. This is the value that will be sent back
- * to the server via an Authorization/Proxy-Authorization header.
- *
diff --git a/sources b/sources
index e0111de..5f3bc03 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-5afc916c83998aef07b1adae1db21cbc firefox-49.0.2.source.tar.xz
-0644c2592dde5eecf191a829d9a7d2fd firefox-langpacks-49.0.2-20161031.tar.xz
+743aeb5d71eb6a8f227aad954f8a663a firefox-50.0.source.tar.xz
+4ee9db6dc03c1397ef00e772691aeb6e firefox-langpacks-50.0-20161110.tar.xz
bgstack15