[tor-commits] [tor-messenger-build/master] Update js-locale.mozpatch

sukhbir at torproject.org sukhbir at torproject.org
Mon Jul 13 13:16:48 UTC 2015


commit fd6f7de06ff2ae1beffb8d62bb75d7d16d1037c6
Author: Sukhbir Singh <sukhbir at torproject.org>
Date:   Mon Jul 13 09:16:41 2015 -0400

    Update js-locale.mozpatch
---
 projects/instantbird/js-locale.mozpatch |  286 +++++++++++++++----------------
 1 file changed, 143 insertions(+), 143 deletions(-)

diff --git a/projects/instantbird/js-locale.mozpatch b/projects/instantbird/js-locale.mozpatch
index b135523..bf45525 100644
--- a/projects/instantbird/js-locale.mozpatch
+++ b/projects/instantbird/js-locale.mozpatch
@@ -1,204 +1,204 @@
 diff --git a/browser/base/content/test/general/mochitest.ini b/browser/base/content/test/general/mochitest.ini
-index a129d73..139133e 100644
+index 139133e..a129d73 100644
 --- a/browser/base/content/test/general/mochitest.ini
 +++ b/browser/base/content/test/general/mochitest.ini
-@@ -28,7 +28,6 @@ support-files =
+@@ -28,6 +28,7 @@ support-files =
  
  [test_bug364677.html]
  [test_bug395533.html]
--[test_bug_jsdefaultlocale.html]
++[test_bug_jsdefaultlocale.html]
  [test_contextmenu.html]
  skip-if = toolkit == "gtk2" || toolkit == "gtk3" || (os == 'mac' && os_version != '10.6') # disabled on Linux due to bug 513558, on Mac after 10.6 due to bug 792304
  [test_contextmenu_input.html]
 diff --git a/browser/base/content/test/general/test_bug_jsdefaultlocale.html b/browser/base/content/test/general/test_bug_jsdefaultlocale.html
-deleted file mode 100644
-index 6566ae0..0000000
---- a/browser/base/content/test/general/test_bug_jsdefaultlocale.html
-+++ /dev/null
-@@ -1,41 +0,0 @@
--<!DOCTYPE HTML>
--<html>
--<!--
--https://bugs.torproject.org/13019
---->
--<head>
--  <meta charset="utf-8">
--  <title>Test for Tor Bug #13019: Prevent fingerprinting of JS-exposed locale</title>
--  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
--  <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
--  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
--</head>
--<body>
--<a target="_blank" href="https://bugs.torproject.org">Bug 13019</a>
--<p id="display"></p>
--<pre id="test"></pre>
--<script type="application/javascript;version=1.8">
--let prefName = "javascript.use_us_english_locale",
--    originalPrefValue = null,
--    date = new Date();
--// Read the current pref value.
--try {
--  originalPrefValue = SpecialPowers.getBoolPref(prefName);
--} catch (e) { }
--// Enable pref "javascript.use_us_english_locale".
--SpecialPowers.setBoolPref(prefName, true);
--// Test that we are getting en-US locale everywhere it is exposed in JavaScript
--is(Intl.Collator().resolvedOptions().locale, "en-US", "content JS locale from Intl.Collator");
--is(Intl.DateTimeFormat().resolvedOptions().locale, "en-US", "content JS locale Intl.DateTimeFormat");
--is(Intl.NumberFormat().resolvedOptions().locale, "en-US", "content JS locale from Intl.NumberFormat");
--is(date.toLocaleString(), date.toLocaleString("en-US"), "Date formatted by JS locale");
--// Return pref to its original value, if it had one.
--if (originalPrefValue === null) {
--  SpecialPowers.clearUserPref(prefName);
--} else {
--  SpecialPowers.setBoolPref(prefName, originalPrefValue);
--}
--
--</script>
--</body>
--</html>
+new file mode 100644
+index 0000000..6566ae0
+--- /dev/null
++++ b/browser/base/content/test/general/test_bug_jsdefaultlocale.html
+@@ -0,0 +1,41 @@
++<!DOCTYPE HTML>
++<html>
++<!--
++https://bugs.torproject.org/13019
++-->
++<head>
++  <meta charset="utf-8">
++  <title>Test for Tor Bug #13019: Prevent fingerprinting of JS-exposed locale</title>
++  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
++  <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
++  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
++</head>
++<body>
++<a target="_blank" href="https://bugs.torproject.org">Bug 13019</a>
++<p id="display"></p>
++<pre id="test"></pre>
++<script type="application/javascript;version=1.8">
++let prefName = "javascript.use_us_english_locale",
++    originalPrefValue = null,
++    date = new Date();
++// Read the current pref value.
++try {
++  originalPrefValue = SpecialPowers.getBoolPref(prefName);
++} catch (e) { }
++// Enable pref "javascript.use_us_english_locale".
++SpecialPowers.setBoolPref(prefName, true);
++// Test that we are getting en-US locale everywhere it is exposed in JavaScript
++is(Intl.Collator().resolvedOptions().locale, "en-US", "content JS locale from Intl.Collator");
++is(Intl.DateTimeFormat().resolvedOptions().locale, "en-US", "content JS locale Intl.DateTimeFormat");
++is(Intl.NumberFormat().resolvedOptions().locale, "en-US", "content JS locale from Intl.NumberFormat");
++is(date.toLocaleString(), date.toLocaleString("en-US"), "Date formatted by JS locale");
++// Return pref to its original value, if it had one.
++if (originalPrefValue === null) {
++  SpecialPowers.clearUserPref(prefName);
++} else {
++  SpecialPowers.setBoolPref(prefName, originalPrefValue);
++}
++
++</script>
++</body>
++</html>
 diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
-index 877056e..169981e9 100644
+index 169981e9..877056e 100644
 --- a/js/src/jsapi.cpp
 +++ b/js/src/jsapi.cpp
-@@ -5217,13 +5217,6 @@ JS_SetDefaultLocale(JSRuntime* rt, const char* locale)
+@@ -5217,6 +5217,13 @@ JS_SetDefaultLocale(JSRuntime* rt, const char* locale)
      return rt->setDefaultLocale(locale);
  }
  
--JS_PUBLIC_API(const char*)
--JS_GetDefaultLocale(JSRuntime *rt)
--{
--    AssertHeapIsIdle(rt);
--    return rt->getDefaultLocale();
--}
--
++JS_PUBLIC_API(const char*)
++JS_GetDefaultLocale(JSRuntime *rt)
++{
++    AssertHeapIsIdle(rt);
++    return rt->getDefaultLocale();
++}
++
  JS_PUBLIC_API(void)
  JS_ResetDefaultLocale(JSRuntime* rt)
  {
 diff --git a/js/src/jsapi.h b/js/src/jsapi.h
-index 2a6fe34..2b279b5 100644
+index 2b279b5..2a6fe34 100644
 --- a/js/src/jsapi.h
 +++ b/js/src/jsapi.h
-@@ -4266,15 +4266,6 @@ extern JS_PUBLIC_API(bool)
+@@ -4266,6 +4266,15 @@ extern JS_PUBLIC_API(bool)
  JS_SetDefaultLocale(JSRuntime* rt, const char* locale);
  
  /*
-- * Returns the default locale for the ECMAScript Internationalization API
-- * (Intl.Collator, Intl.NumberFormat, Intl.DateTimeFormat).
-- * Note that the Internationalization API encourages clients to
-- * specify their own locales.
-- */
--extern JS_PUBLIC_API(const char*)
--JS_GetDefaultLocale(JSRuntime *rt);
--
--/*
++ * Returns the default locale for the ECMAScript Internationalization API
++ * (Intl.Collator, Intl.NumberFormat, Intl.DateTimeFormat).
++ * Note that the Internationalization API encourages clients to
++ * specify their own locales.
++ */
++extern JS_PUBLIC_API(const char*)
++JS_GetDefaultLocale(JSRuntime *rt);
++
++/*
   * Reset the default locale to OS defaults.
   */
  extern JS_PUBLIC_API(void)
 diff --git a/xpcom/build/XPCOMInit.cpp b/xpcom/build/XPCOMInit.cpp
-index 292652d..a58d89c 100644
+index a58d89c..292652d 100644
 --- a/xpcom/build/XPCOMInit.cpp
 +++ b/xpcom/build/XPCOMInit.cpp
-@@ -8,7 +8,6 @@
+@@ -8,6 +8,7 @@
  
  #include "mozilla/Atomics.h"
  #include "mozilla/Poison.h"
--#include "mozilla/Preferences.h"
++#include "mozilla/Preferences.h"
  #include "mozilla/XPCOM.h"
  #include "nsXULAppAPI.h"
  
-@@ -44,8 +43,6 @@
+@@ -43,6 +44,8 @@
  #include "nsSupportsPrimitives.h"
  #include "nsConsoleService.h"
  
--#include "nsIJSRuntimeService.h"
--
++#include "nsIJSRuntimeService.h"
++
  #include "nsComponentManager.h"
  #include "nsCategoryManagerUtils.h"
  #include "nsIServiceManager.h"
-@@ -488,67 +485,6 @@ NS_IMPL_ISUPPORTS(NesteggReporter, nsIMemoryReporter)
+@@ -485,6 +488,67 @@ NS_IMPL_ISUPPORTS(NesteggReporter, nsIMemoryReporter)
  CountingAllocatorBase<NesteggReporter>::sAmount(0);
  #endif /* MOZ_WEBM */
  
--// Anonymous namespace for customizing the default locale that JavaScript
--// uses, according to the value of the "javascript.use_us_english_locale" pref.
--// The current default locale can be detected in JavaScript by calling
--// `Intl.DateTimeFormat().resolvedOptions().locale`
--namespace {
--
--#define USE_US_ENGLISH_LOCALE_PREF "javascript.use_us_english_locale"
--
--static char* sSystemLocale;
--static char* sJSLocale;
--
--// Returns a pointer to the current JS Runtime.
--static
--JSRuntime* GetRuntime() {
--  nsresult rv;
--  nsCOMPtr<nsIJSRuntimeService> rts = do_GetService("@mozilla.org/js/xpc/RuntimeService;1", &rv);
--  if (NS_FAILED(rv)) return NULL;
--  JSRuntime* rt;
--  rts->GetRuntime(&rt);
--  return rt;
--}
--
--// If the USE_US_ENGLISH_LOCALE_PREF is active, set all locales to US English.
--// Otherwise, fall back to the default system and JS locales.
--static
--void UseUSEnglishLocalePrefChangedCallback(const char* /* pref */, void* /* closure */) {
--  // Get a pointer to the default JS Runtime.
--  JSRuntime* rt = GetRuntime();
--  if (rt) {
--    // Read the pref to see if we will use US English locale.
--    bool useUSEnglishLocale = mozilla::Preferences::GetBool(USE_US_ENGLISH_LOCALE_PREF, false);
--    // Set the application-wide C-locale. Needed for Date.toLocaleFormat().
--    setlocale(LC_ALL, useUSEnglishLocale ? "C" : sSystemLocale);
--    // Now override the JavaScript Runtime Locale that is used by the Intl API
--    // as well as Date.toLocaleString, Number.toLocaleString, and String.localeCompare.
--    JS_SetDefaultLocale(rt, useUSEnglishLocale ? "en-US" : sJSLocale);
--  }
--}
--
--static
--void StartWatchingUseUSEnglishLocalePref() {
--  // Get the default system locale. To be used if US English locale pref is deactivated.
--  sSystemLocale = strdup(setlocale(LC_ALL,NULL));
--  // Store the default JavaScript locale.
--  JSRuntime* rt = GetRuntime();
--  if (rt) {
--    sJSLocale = strdup(JS_GetDefaultLocale(rt));
--  }
--  // Now keep the locale updated with the current pref value.
--  mozilla::Preferences::RegisterCallbackAndCall(UseUSEnglishLocalePrefChangedCallback, USE_US_ENGLISH_LOCALE_PREF);
--}
--
--static
--void StopWatchingUseUSEnglishLocalePref() {
--  mozilla::Preferences::UnregisterCallback(UseUSEnglishLocalePrefChangedCallback, USE_US_ENGLISH_LOCALE_PREF);
--  if (sSystemLocale) free(sSystemLocale);
--  if (sJSLocale) JS_free(nullptr, sJSLocale);
--}
--
--} // anonymous namespace for locale hiding
--
++// Anonymous namespace for customizing the default locale that JavaScript
++// uses, according to the value of the "javascript.use_us_english_locale" pref.
++// The current default locale can be detected in JavaScript by calling
++// `Intl.DateTimeFormat().resolvedOptions().locale`
++namespace {
++
++#define USE_US_ENGLISH_LOCALE_PREF "javascript.use_us_english_locale"
++
++static char* sSystemLocale;
++static char* sJSLocale;
++
++// Returns a pointer to the current JS Runtime.
++static
++JSRuntime* GetRuntime() {
++  nsresult rv;
++  nsCOMPtr<nsIJSRuntimeService> rts = do_GetService("@mozilla.org/js/xpc/RuntimeService;1", &rv);
++  if (NS_FAILED(rv)) return NULL;
++  JSRuntime* rt;
++  rts->GetRuntime(&rt);
++  return rt;
++}
++
++// If the USE_US_ENGLISH_LOCALE_PREF is active, set all locales to US English.
++// Otherwise, fall back to the default system and JS locales.
++static
++void UseUSEnglishLocalePrefChangedCallback(const char* /* pref */, void* /* closure */) {
++  // Get a pointer to the default JS Runtime.
++  JSRuntime* rt = GetRuntime();
++  if (rt) {
++    // Read the pref to see if we will use US English locale.
++    bool useUSEnglishLocale = mozilla::Preferences::GetBool(USE_US_ENGLISH_LOCALE_PREF, false);
++    // Set the application-wide C-locale. Needed for Date.toLocaleFormat().
++    setlocale(LC_ALL, useUSEnglishLocale ? "C" : sSystemLocale);
++    // Now override the JavaScript Runtime Locale that is used by the Intl API
++    // as well as Date.toLocaleString, Number.toLocaleString, and String.localeCompare.
++    JS_SetDefaultLocale(rt, useUSEnglishLocale ? "en-US" : sJSLocale);
++  }
++}
++
++static
++void StartWatchingUseUSEnglishLocalePref() {
++  // Get the default system locale. To be used if US English locale pref is deactivated.
++  sSystemLocale = strdup(setlocale(LC_ALL,NULL));
++  // Store the default JavaScript locale.
++  JSRuntime* rt = GetRuntime();
++  if (rt) {
++    sJSLocale = strdup(JS_GetDefaultLocale(rt));
++  }
++  // Now keep the locale updated with the current pref value.
++  mozilla::Preferences::RegisterCallbackAndCall(UseUSEnglishLocalePrefChangedCallback, USE_US_ENGLISH_LOCALE_PREF);
++}
++
++static
++void StopWatchingUseUSEnglishLocalePref() {
++  mozilla::Preferences::UnregisterCallback(UseUSEnglishLocalePrefChangedCallback, USE_US_ENGLISH_LOCALE_PREF);
++  if (sSystemLocale) free(sSystemLocale);
++  if (sJSLocale) JS_free(nullptr, sJSLocale);
++}
++
++} // anonymous namespace for locale hiding
++
  // Note that on OSX, aBinDirectory will point to .app/Contents/Resources/browser
  EXPORT_XPCOM_API(nsresult)
  NS_InitXPCOM2(nsIServiceManager** aResult,
-@@ -830,8 +766,6 @@ NS_InitXPCOM2(nsIServiceManager** aResult,
+@@ -766,6 +830,8 @@ NS_InitXPCOM2(nsIServiceManager** aResult,
    mozilla::eventtracer::Init();
  #endif
  
--  // Start watching the "javascript.use_us_english_locale" pref.
--  StartWatchingUseUSEnglishLocalePref();
++  // Start watching the "javascript.use_us_english_locale" pref.
++  StartWatchingUseUSEnglishLocalePref();
    return NS_OK;
  }
  
-@@ -1104,8 +1038,6 @@ ShutdownXPCOM(nsIServiceManager* aServMgr)
+@@ -1038,6 +1104,8 @@ ShutdownXPCOM(nsIServiceManager* aServMgr)
    delete sExitManager;
    sExitManager = nullptr;
  
--  StopWatchingUseUSEnglishLocalePref();
--
++  StopWatchingUseUSEnglishLocalePref();
++
    Omnijar::CleanUp();
  
    HangMonitor::Shutdown();



More information about the tor-commits mailing list