commit cbb04b72c68272c2de42f157d40cd7d29a6b7b55
Author: Arthur Edelstein <arthuredelstein(a)gmail.com>
Date: Mon Aug 6 13:20:40 2018 -0700
Bug 24056: Use en-US strings in HTML forms
When privacy.spoof_english = 2, we should hide the user's
locale in content. So we use en-US default strings for HTML
form elements, such as a Submit button.
We also force GetLocalizedEllipsis() to always return the
ellipsis used by en-US.
---
dom/base/nsContentUtils.cpp | 32 +++++++++++++++++++++++++-------
dom/base/nsContentUtils.h | 3 +++
2 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp
index 8257283e65a2..645f4aee0909 100644
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -317,6 +317,8 @@ bool nsContentUtils::sIsBytecodeCacheEnabled = false;
int32_t nsContentUtils::sBytecodeCacheStrategy = 0;
nsCString* nsContentUtils::sJSBytecodeMimeType = nullptr;
+int32_t nsContentUtils::sSpoofEnglish = 0;
+
int32_t nsContentUtils::sPrivacyMaxInnerWidth = 1000;
int32_t nsContentUtils::sPrivacyMaxInnerHeight = 1000;
@@ -737,6 +739,9 @@ nsContentUtils::Init()
Preferences::AddIntVarCache(&sBytecodeCacheStrategy,
"dom.script_loader.bytecode_cache.strategy", 0);
+ Preferences::AddIntVarCache(&sSpoofEnglish,
+ "privacy.spoof_english", 0);
+
nsDependentCString buildID(mozilla::PlatformBuildID());
sJSBytecodeMimeType = new nsCString(NS_LITERAL_CSTRING("javascript/moz-bytecode-") + buildID);
@@ -4040,7 +4045,7 @@ nsContentUtils::GetEventArgNames(int32_t aNameSpaceID,
}
}
-static const char gPropertiesFiles[nsContentUtils::PropertiesFile_COUNT][56] = {
+static const char* gPropertiesFiles[nsContentUtils::PropertiesFile_COUNT] = {
// Must line up with the enum values in |PropertiesFile| enum.
"chrome://global/locale/css.properties",
"chrome://global/locale/xbl.properties",
@@ -4055,7 +4060,8 @@ static const char gPropertiesFiles[nsContentUtils::PropertiesFile_COUNT][56] = {
"chrome://global/locale/commonDialogs.properties",
"chrome://global/locale/mathml/mathml.properties",
"chrome://global/locale/security/security.properties",
- "chrome://necko/locale/necko.properties"
+ "chrome://necko/locale/necko.properties",
+ "resource://gre/chrome/en-US/locale/en-US/global/layout/HtmlForm.properties"
};
/* static */ nsresult
@@ -4098,6 +4104,11 @@ nsresult nsContentUtils::GetLocalizedString(PropertiesFile aFile,
const char* aKey,
nsAString& aResult)
{
+ // When we spoof English, use en-US default strings in HTML forms.
+ if (aFile == eFORMS_PROPERTIES && sSpoofEnglish == 2) {
+ aFile = eFORMS_PROPERTIES_en_US;
+ }
+
nsresult rv = EnsureStringBundle(aFile);
NS_ENSURE_SUCCESS(rv, rv);
nsIStringBundle *bundle = sStringBundles[aFile];
@@ -4111,6 +4122,11 @@ nsresult nsContentUtils::FormatLocalizedString(PropertiesFile aFile,
uint32_t aParamsLength,
nsAString& aResult)
{
+ // When we spoof English, use en-US default strings in HTML forms.
+ if (aFile == eFORMS_PROPERTIES && sSpoofEnglish == 2) {
+ aFile = eFORMS_PROPERTIES_en_US;
+ }
+
nsresult rv = EnsureStringBundle(aFile);
NS_ENSURE_SUCCESS(rv, rv);
nsIStringBundle *bundle = sStringBundles[aFile];
@@ -5722,11 +5738,13 @@ nsContentUtils::GetLocalizedEllipsis()
{
static char16_t sBuf[4] = { 0, 0, 0, 0 };
if (!sBuf[0]) {
- nsAutoString tmp;
- Preferences::GetLocalizedString("intl.ellipsis", tmp);
- uint32_t len = std::min(uint32_t(tmp.Length()),
- uint32_t(ArrayLength(sBuf) - 1));
- CopyUnicodeTo(tmp, 0, sBuf, len);
+ if (sSpoofEnglish != 2) {
+ nsAutoString tmp;
+ Preferences::GetLocalizedString("intl.ellipsis", tmp);
+ uint32_t len = std::min(uint32_t(tmp.Length()),
+ uint32_t(ArrayLength(sBuf) - 1));
+ CopyUnicodeTo(tmp, 0, sBuf, len);
+ }
if (!sBuf[0])
sBuf[0] = char16_t(0x2026);
}
diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h
index 246dabf340de..135dafdbc052 100644
--- a/dom/base/nsContentUtils.h
+++ b/dom/base/nsContentUtils.h
@@ -1110,6 +1110,7 @@ public:
eMATHML_PROPERTIES,
eSECURITY_PROPERTIES,
eNECKO_PROPERTIES,
+ eFORMS_PROPERTIES_en_US,
PropertiesFile_COUNT
};
static nsresult ReportToConsole(uint32_t aErrorFlags,
@@ -3514,6 +3515,8 @@ private:
static int32_t sInnerOrOuterWindowCount;
static uint32_t sInnerOrOuterWindowSerialCounter;
+
+ static int32_t sSpoofEnglish;
};
/* static */ inline