Refresh nsStringBundleService and nsHttpHandler when the browser locale is changed

This commit is contained in:
JustOff 2018-08-25 17:50:02 +03:00 committed by Roy Tam
commit 16820f40ac
4 changed files with 54 additions and 15 deletions

View file

@ -203,6 +203,7 @@ nsHttpHandler::nsHttpHandler()
, mCompatFirefoxEnabled(false)
, mCompatFirefoxVersion("52.9")
, mUserAgentIsDirty(true)
, mAcceptLanguagesIsDirty(true)
, mPromptTempRedirect(true)
, mEnablePersistentHttpsCaching(false)
, mDoNotTrackEnabled(false)
@ -419,6 +420,7 @@ nsHttpHandler::Init()
obsService->AddObserver(this, "browser:purge-session-history", true);
obsService->AddObserver(this, NS_NETWORK_LINK_TOPIC, true);
obsService->AddObserver(this, "application-background", true);
obsService->AddObserver(this, "string-bundles-have-flushed", true);
}
MakeNewRequestTokenBucket();
@ -489,8 +491,13 @@ nsHttpHandler::AddStandardRequestHeaders(nsHttpRequestHead *request, bool isSecu
// Add the "Accept-Language" header. This header is also exposed to the
// service worker.
if (mAcceptLanguagesIsDirty) {
rv = SetAcceptLanguages();
MOZ_ASSERT(NS_SUCCEEDED(rv));
}
// Add the "Accept-Language" header
if (!mAcceptLanguages.IsEmpty()) {
// Add the "Accept-Language" header
rv = request->SetHeader(nsHttp::Accept_Language, mAcceptLanguages,
false,
nsHttpHeaderArray::eVarietyRequestOverride);
@ -1511,16 +1518,10 @@ nsHttpHandler::PrefsChanged(nsIPrefBranch *prefs, const char *pref)
//
if (PREF_CHANGED(INTL_ACCEPT_LANGUAGES)) {
nsCOMPtr<nsIPrefLocalizedString> pls;
prefs->GetComplexValue(INTL_ACCEPT_LANGUAGES,
NS_GET_IID(nsIPrefLocalizedString),
getter_AddRefs(pls));
if (pls) {
nsXPIDLString uval;
pls->ToString(getter_Copies(uval));
if (uval)
SetAcceptLanguages(NS_ConvertUTF16toUTF8(uval).get());
}
// We don't want to set the new accept languages here since
// this pref is a complex type and it may be racy with flushing
// string resources.
mAcceptLanguagesIsDirty = true;
}
//
@ -1897,12 +1898,18 @@ PrepareAcceptLanguages(const char *i_AcceptLanguages, nsACString &o_AcceptLangua
}
nsresult
nsHttpHandler::SetAcceptLanguages(const char *aAcceptLanguages)
nsHttpHandler::SetAcceptLanguages()
{
mAcceptLanguagesIsDirty = false;
const nsAdoptingCString& acceptLanguages =
Preferences::GetLocalizedCString(INTL_ACCEPT_LANGUAGES);
nsAutoCString buf;
nsresult rv = PrepareAcceptLanguages(aAcceptLanguages, buf);
if (NS_SUCCEEDED(rv))
nsresult rv = PrepareAcceptLanguages(acceptLanguages.get(), buf);
if (NS_SUCCEEDED(rv)) {
mAcceptLanguages.Assign(buf);
}
return rv;
}
@ -2233,6 +2240,8 @@ nsHttpHandler::Observe(nsISupports *subject,
if (mConnMgr) {
mConnMgr->DoShiftReloadConnectionCleanup(nullptr);
}
} else if (!strcmp(topic, "string-bundles-have-flushed")) {
mAcceptLanguagesIsDirty = true;
}
return NS_OK;