tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_requestedlocales.js (3388B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 var { setTimeout } = ChromeUtils.importESModule(
      7  "resource://gre/modules/Timer.sys.mjs"
      8 );
      9 
     10 const REQ_LOC_CHANGE_EVENT = "intl:requested-locales-changed";
     11 
     12 function promiseLocaleChanged(requestedLocale) {
     13  return new Promise(resolve => {
     14    let localeObserver = {
     15      observe(aSubject, aTopic) {
     16        switch (aTopic) {
     17          case REQ_LOC_CHANGE_EVENT: {
     18            let reqLocs = Services.locale.requestedLocales;
     19            equal(reqLocs[0], requestedLocale);
     20            Services.obs.removeObserver(localeObserver, REQ_LOC_CHANGE_EVENT);
     21            resolve();
     22          }
     23        }
     24      },
     25    };
     26    Services.obs.addObserver(localeObserver, REQ_LOC_CHANGE_EVENT);
     27  });
     28 }
     29 
     30 function promiseLocaleNotChanged() {
     31  return new Promise(resolve => {
     32    let localeObserver = {
     33      observe(aSubject, aTopic) {
     34        switch (aTopic) {
     35          case REQ_LOC_CHANGE_EVENT:
     36            ok(false, "Locale should not change.");
     37            Services.obs.removeObserver(localeObserver, REQ_LOC_CHANGE_EVENT);
     38            resolve();
     39        }
     40      },
     41    };
     42    Services.obs.addObserver(localeObserver, REQ_LOC_CHANGE_EVENT);
     43    /* eslint-disable mozilla/no-arbitrary-setTimeout */
     44    setTimeout(function () {
     45      Services.obs.removeObserver(localeObserver, REQ_LOC_CHANGE_EVENT);
     46      resolve();
     47    }, 100);
     48  });
     49 }
     50 
     51 add_task(async function test_requested_locale_array() {
     52  let originalLocales = Services.locale.requestedLocales;
     53  let localePromise = promiseLocaleChanged("de");
     54  await setupPolicyEngineWithJson({
     55    policies: {
     56      RequestedLocales: ["de"],
     57    },
     58  });
     59  await localePromise;
     60  Services.locale.requestedLocales = originalLocales;
     61 });
     62 
     63 add_task(async function test_requested_locale_string() {
     64  let originalLocales = Services.locale.requestedLocales;
     65  let localePromise = promiseLocaleChanged("fr");
     66  await setupPolicyEngineWithJson({
     67    policies: {
     68      RequestedLocales: "fr",
     69    },
     70  });
     71  await localePromise;
     72  Services.locale.requestedLocales = originalLocales;
     73 });
     74 
     75 add_task(async function test_system_locale_string() {
     76  let originalLocales = Services.locale.requestedLocales;
     77 
     78  let localePromise = promiseLocaleChanged("und");
     79  Services.locale.requestedLocales = ["und"];
     80  await localePromise;
     81 
     82  let systemLocale = Cc["@mozilla.org/intl/ospreferences;1"].getService(
     83    Ci.mozIOSPreferences
     84  ).systemLocale;
     85  localePromise = promiseLocaleChanged(systemLocale);
     86 
     87  await setupPolicyEngineWithJson({
     88    policies: {
     89      RequestedLocales: "",
     90    },
     91  });
     92  await localePromise;
     93  Services.locale.requestedLocales = originalLocales;
     94 });
     95 
     96 add_task(async function test_user_requested_locale_change() {
     97  let originalLocales = Services.locale.requestedLocales;
     98  let localePromise = promiseLocaleChanged("fr");
     99  await setupPolicyEngineWithJson({
    100    policies: {
    101      RequestedLocales: "fr",
    102    },
    103  });
    104  await localePromise;
    105 
    106  // Simulate user change of locale
    107  localePromise = promiseLocaleChanged("de");
    108  Services.locale.requestedLocales = ["de"];
    109  await localePromise;
    110 
    111  localePromise = promiseLocaleNotChanged("fr");
    112  await setupPolicyEngineWithJson({
    113    policies: {
    114      RequestedLocales: "fr",
    115    },
    116  });
    117  await localePromise;
    118 
    119  Services.locale.requestedLocales = originalLocales;
    120 });