commit 7150252e7a0213aeddfe3c0aed294aae4cfcb3b8 Author: Arthur Edelstein arthuredelstein@gmail.com Date: Mon Aug 20 15:42:08 2018 -0700
Bug 21787: Spoof en-US for date picker
When privacy.spoof_english === 2, then en-US spoofing is enabled. In that case, make sure the date picker does not leak the locale. --- dom/base/IntlUtils.cpp | 5 ++++ dom/base/IntlUtils.h | 2 ++ dom/webidl/IntlUtils.webidl | 6 +++++ toolkit/content/widgets/datetimebox.xml | 43 +++++++++++++++++-------------- toolkit/content/widgets/datetimepopup.xml | 3 ++- 5 files changed, 39 insertions(+), 20 deletions(-)
diff --git a/dom/base/IntlUtils.cpp b/dom/base/IntlUtils.cpp index 9fc21414fd58..89f2ebbdc026 100644 --- a/dom/base/IntlUtils.cpp +++ b/dom/base/IntlUtils.cpp @@ -141,5 +141,10 @@ IntlUtils::GetLocaleInfo(const Sequence<nsString>& aLocales, } }
+bool +IntlUtils::SpoofEnglish() const { + return Preferences::GetInt("privacy.spoof_english", 0) == 2; +} + } // dom namespace } // mozilla namespace diff --git a/dom/base/IntlUtils.h b/dom/base/IntlUtils.h index 76875497f293..55d8e823abfd 100644 --- a/dom/base/IntlUtils.h +++ b/dom/base/IntlUtils.h @@ -47,6 +47,8 @@ public: mozilla::dom::LocaleInfo& aResult, mozilla::ErrorResult& aError);
+ bool SpoofEnglish() const; + private: ~IntlUtils();
diff --git a/dom/webidl/IntlUtils.webidl b/dom/webidl/IntlUtils.webidl index c70e0f955c82..1fea1735997c 100644 --- a/dom/webidl/IntlUtils.webidl +++ b/dom/webidl/IntlUtils.webidl @@ -70,4 +70,10 @@ interface IntlUtils { */ [Throws] LocaleInfo getLocaleInfo(sequence<DOMString> locales); + + /** + * Attribute that indicates whether the user has chosen + * to spoof the locale as en-US in content. + */ + readonly attribute boolean spoofEnglish; }; diff --git a/toolkit/content/widgets/datetimebox.xml b/toolkit/content/widgets/datetimebox.xml index 2a7cdd50f64d..f4bb32ca35e7 100644 --- a/toolkit/content/widgets/datetimebox.xml +++ b/toolkit/content/widgets/datetimebox.xml @@ -27,13 +27,13 @@ <constructor> <![CDATA[ /* eslint-disable no-multi-spaces */ - this.mYearPlaceHolder = ]]>"&date.year.placeholder;"<![CDATA[; - this.mMonthPlaceHolder = ]]>"&date.month.placeholder;"<![CDATA[; - this.mDayPlaceHolder = ]]>"&date.day.placeholder;"<![CDATA[; + this.mYearPlaceHolder = this.mSpoofEnglish ? "yyyy" : ]]>"&date.year.placeholder;"<![CDATA[; + this.mMonthPlaceHolder = this.mSpoofEnglish ? "mm" : ]]>"&date.month.placeholder;"<![CDATA[; + this.mDayPlaceHolder = this.mSpoofEnglish ? "dd" : ]]>"&date.day.placeholder;"<![CDATA[;
- this.mYearLabel = ]]>"&date.year.label;"<![CDATA[; - this.mMonthLabel = ]]>"&date.month.label;"<![CDATA[; - this.mDayLabel = ]]>"&date.day.label;"<![CDATA[; + this.mYearLabel = this.mSpoofEnglish ? "Year" : ]]>"&date.year.label;"<![CDATA[; + this.mMonthLabel = this.mSpoofEnglish ? "Month" : ]]>"&date.month.label;"<![CDATA[; + this.mDayLabel = this.mSpoofEnglish ? "Day" : ]]>"&date.day.label;"<![CDATA[; /* eslint-enable no-multi-spaces */
this.mMinMonth = 1; @@ -451,17 +451,17 @@ this.mPMIndicator = pmString || kDefaultPMString;
/* eslint-disable no-multi-spaces */ - this.mHourPlaceHolder = ]]>"&time.hour.placeholder;"<![CDATA[; - this.mMinutePlaceHolder = ]]>"&time.minute.placeholder;"<![CDATA[; - this.mSecondPlaceHolder = ]]>"&time.second.placeholder;"<![CDATA[; - this.mMillisecPlaceHolder = ]]>"&time.millisecond.placeholder;"<![CDATA[; - this.mDayPeriodPlaceHolder = ]]>"&time.dayperiod.placeholder;"<![CDATA[; - - this.mHourLabel = ]]>"&time.hour.label;"<![CDATA[; - this.mMinuteLabel = ]]>"&time.minute.label;"<![CDATA[; - this.mSecondLabel = ]]>"&time.second.label;"<![CDATA[; - this.mMillisecLabel = ]]>"&time.millisecond.label;"<![CDATA[; - this.mDayPeriodLabel = ]]>"&time.dayperiod.label;"<![CDATA[; + this.mHourPlaceHolder = this.mSpoofEnglish ? "--" : ]]>"&time.hour.placeholder;"<![CDATA[; + this.mMinutePlaceHolder = this.mSpoofEnglish ? "--" : ]]>"&time.minute.placeholder;"<![CDATA[; + this.mSecondPlaceHolder = this.mSpoofEnglish ? "--" : ]]>"&time.second.placeholder;"<![CDATA[; + this.mMillisecPlaceHolder = this.mSpoofEnglish ? "--" : ]]>"&time.millisecond.placeholder;"<![CDATA[; + this.mDayPeriodPlaceHolder = this.mSpoofEnglish ? "--" : ]]>"&time.dayperiod.placeholder;"<![CDATA[; + + this.mHourLabel = this.mSpoofEnglish ? "Hours" : ]]>"&time.hour.label;"<![CDATA[; + this.mMinuteLabel = this.mSpoofEnglish ? "Minutes" :]]>"&time.minute.label;"<![CDATA[; + this.mSecondLabel = this.mSpoofEnglish ? "Seconds" :]]>"&time.second.label;"<![CDATA[; + this.mMillisecLabel = this.mSpoofEnglish ? "Milliseconds" :]]>"&time.millisecond.label;"<![CDATA[; + this.mDayPeriodLabel = this.mSpoofEnglish ? "AM/PM" :]]>"&time.dayperiod.label;"<![CDATA[; /* eslint-enable no-multi-spaces */
this.mHour12 = this.is12HourTime(this.mLocales); @@ -1218,10 +1218,11 @@ <![CDATA[ this.DEBUG = false; this.mInputElement = this.parentNode; - this.mLocales = window.getRegionalPrefsLocales(); + let intlUtils = window.intlUtils; + this.mSpoofEnglish = intlUtils.spoofEnglish; + this.mLocales = this.mSpoofEnglish ? ["en-US"] : window.getRegionalPrefsLocales();
this.mIsRTL = false; - let intlUtils = window.intlUtils; if (intlUtils) { this.mIsRTL = intlUtils.getLocaleInfo(this.mLocales).direction === "rtl"; @@ -1242,6 +1243,10 @@ this.mResetButton = document.getAnonymousElementByAttribute(this, "anonid", "reset-button"); this.mResetButton.style.visibility = "hidden"; + if (this.mSpoofEnglish) { + // Use the US English version of datetime.reset.label. + this.mResetButton.setAttribute("aria-label", "Clear"); + }
this.EVENTS.forEach((eventName) => { this.addEventListener(eventName, this, { mozSystemGroup: true }, false); diff --git a/toolkit/content/widgets/datetimepopup.xml b/toolkit/content/widgets/datetimepopup.xml index ddbdd9dd0fd3..e9fef1234929 100644 --- a/toolkit/content/widgets/datetimepopup.xml +++ b/toolkit/content/widgets/datetimepopup.xml @@ -110,7 +110,8 @@ <body><![CDATA[ // TODO: When bug 1376616 lands, replace this.setGregorian with // mozIntl.Locale for setting calendar to Gregorian - const locale = this.setGregorian(Services.locale.getAppLocaleAsBCP47()); + const locale = this.setGregorian( + window.intlUtils.spoofEnglish ? "en-US" : Services.locale.getAppLocaleAsBCP47()); const dir = this.mozIntl.getLocaleInfo(locale).direction;
switch (this.type) {
tbb-commits@lists.torproject.org