Attachment #460173: Patch 3: Change navigator.language to use Accept-Language for bug #55366

View | Details | Raw Unified | Return to bug 55366
Collapse All | Expand All

(-)a/dom/base/nsGlobalWindow.cpp (-10 / +20 lines)
Line     Link Here 
 Lines 9854-9882   nsNavigator::GetAppName(nsAString& aAppN Link Here 
9854
      return NS_OK;
9854
      return NS_OK;
9855
    }
9855
    }
9856
  }
9856
  }
9857
9857
9858
  aAppName.AssignLiteral("Netscape");
9858
  aAppName.AssignLiteral("Netscape");
9859
  return NS_OK;
9859
  return NS_OK;
9860
}
9860
}
9861
9861
9862
/**
9863
 * Take first value from Accept-Languages (HTTP header), which is
9864
 * the "content language" freely set by the user in the Pref window.
9865
 * See RFC 2616, Section 15.1.4 "Privacy Issues Connected to Accept Headers"
9866
 */
9862
NS_IMETHODIMP
9867
NS_IMETHODIMP
9863
nsNavigator::GetLanguage(nsAString& aLanguage)
9868
nsNavigator::GetLanguage(nsAString& aLanguage)
9864
{
9869
{
9865
  nsresult rv;
9870
  // e.g. "de-de,en-us,en"
9866
  nsCOMPtr<nsIHttpProtocolHandler>
9871
  const nsAdoptingString& acceptLang =
9867
    service(do_GetService(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "http", &rv));
9872
      nsContentUtils::GetLocalizedStringPref("intl.accept_languages");
9868
  if (NS_SUCCEEDED(rv)) {
9873
  // take everything before the first ","
9869
    nsCAutoString lang;
9874
  nsAString::const_iterator startString, startComma, endComma;
9870
    rv = service->GetLanguage(lang);
9875
  acceptLang.BeginReading(startString);
9871
    CopyASCIItoUTF16(lang, aLanguage);
9876
  acceptLang.BeginReading(startComma);
9872
  }
9877
  acceptLang.EndReading(endComma);
9873
9878
  if (FindInReadable(NS_LITERAL_STRING(","), startComma, endComma))
9874
  return rv;
9879
    aLanguage.Assign(Substring(startString, startComma));
9880
  else
9881
    aLanguage.Assign(acceptLang);
9882
  NS_ASSERTION(aLanguage.Length() == 2 || aLanguage.Length() == 5,
9883
      "invalid intl.accept_languages pref");
9884
  return NS_OK;
9875
}
9885
}
9876
9886
9877
NS_IMETHODIMP
9887
NS_IMETHODIMP
9878
nsNavigator::GetPlatform(nsAString& aPlatform)
9888
nsNavigator::GetPlatform(nsAString& aPlatform)
9879
{
9889
{
9880
  if (!nsContentUtils::IsCallerTrustedForRead()) {
9890
  if (!nsContentUtils::IsCallerTrustedForRead()) {
9881
    const nsAdoptingCString& override =
9891
    const nsAdoptingCString& override =
9882
      nsContentUtils::GetCharPref("general.platform.override");
9892
      nsContentUtils::GetCharPref("general.platform.override");

Return to bug 55366