tor-browser

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

browser_accept_language_override.js (4769B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 */
      5 
      6 "use strict";
      7 
      8 const PAGE_URL = "https://example.com/browser/netwerk/test/browser/dummy.html";
      9 const SCRIPT_URL =
     10  "https://example.com/browser/netwerk/test/browser/request_accept_language.sjs";
     11 const languages = ["en-US", "es-ES", "fr-FR"];
     12 
     13 add_task(async function test_set_language_override() {
     14  const tab = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
     15  const browser = gBrowser.getBrowserForTab(tab);
     16 
     17  await BrowserTestUtils.browserLoaded(browser);
     18 
     19  info("Get default language");
     20  const defaultLanguage = await getAcceptLanguageHeader(browser);
     21  const browsingContext = browser.browsingContext;
     22  const languageOverride = getLanguageToOverride(defaultLanguage);
     23 
     24  info("Set language override");
     25  browser.browsingContext.languageOverride = languageOverride;
     26  is(
     27    await getAcceptLanguageHeader(browser),
     28    languageOverride,
     29    '"Accept-Language" header is overridden'
     30  );
     31 
     32  const secondLanguageOverride = getSecondLanguageToOverride(
     33    defaultLanguage,
     34    languageOverride
     35  );
     36 
     37  info("Set language override again");
     38  browsingContext.languageOverride = secondLanguageOverride;
     39  is(
     40    await getAcceptLanguageHeader(browser),
     41    secondLanguageOverride,
     42    '"Accept-Language" header is overridden'
     43  );
     44 
     45  info("Reset language override");
     46  browsingContext.languageOverride = "";
     47  is(
     48    await getAcceptLanguageHeader(browser),
     49    defaultLanguage,
     50    '"Accept-Language" header is not overridden'
     51  );
     52 
     53  BrowserTestUtils.removeTab(tab);
     54 });
     55 
     56 add_task(async function test_set_language_override_and_navigate() {
     57  const tab = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
     58  const browser = gBrowser.getBrowserForTab(tab);
     59 
     60  await BrowserTestUtils.browserLoaded(browser);
     61 
     62  info("Get default language");
     63  const defaultLanguage = await getAcceptLanguageHeader(browser);
     64  const browsingContext = browser.browsingContext;
     65  const languageOverride = getLanguageToOverride(defaultLanguage);
     66 
     67  info("Set language override");
     68  browsingContext.languageOverride = languageOverride;
     69  is(
     70    await getAcceptLanguageHeader(browser),
     71    languageOverride,
     72    '"Accept-Language" header is overridden'
     73  );
     74 
     75  info("Navigate browsing context");
     76  const url = "https://example.com/chrome/dom/base/test/dummy.html";
     77  const loaded = BrowserTestUtils.browserLoaded(browser, false, url, false);
     78  BrowserTestUtils.startLoadingURIString(browser, url);
     79  await loaded;
     80  is(
     81    await getAcceptLanguageHeader(browser),
     82    languageOverride,
     83    '"Accept-Language" header is overridden'
     84  );
     85 
     86  BrowserTestUtils.removeTab(tab);
     87 });
     88 
     89 add_task(async function test_set_language_override_in_different_contexts() {
     90  const tab1 = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
     91  const browser1 = gBrowser.getBrowserForTab(tab1);
     92 
     93  await BrowserTestUtils.browserLoaded(browser1);
     94 
     95  const tab2 = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
     96  const browser2 = gBrowser.getBrowserForTab(tab2);
     97 
     98  await BrowserTestUtils.browserLoaded(browser2);
     99 
    100  info("Get default language in the first tab");
    101  const defaultLanguage1 = await getAcceptLanguageHeader(browser1);
    102 
    103  info("Get default language in the second tab");
    104  const defaultLanguage2 = await getAcceptLanguageHeader(browser2);
    105 
    106  const browsingContext1 = browser1.browsingContext;
    107  const languageOverride = getLanguageToOverride(defaultLanguage1);
    108 
    109  info("Set language override to the first tab");
    110  browsingContext1.languageOverride = languageOverride;
    111  is(
    112    await getAcceptLanguageHeader(browser1),
    113    languageOverride,
    114    '"Accept-Language" header is overridden'
    115  );
    116 
    117  info("Make sure that in the second tab language is not overridden");
    118  browsingContext1.languageOverride = languageOverride;
    119  is(
    120    await getAcceptLanguageHeader(browser2),
    121    defaultLanguage2,
    122    '"Accept-Language" header is not overridden'
    123  );
    124 
    125  info("Reset language override");
    126  browsingContext1.languageOverride = "";
    127  is(
    128    await getAcceptLanguageHeader(browser1),
    129    defaultLanguage1,
    130    '"Accept-Language" header is not overridden'
    131  );
    132 
    133  BrowserTestUtils.removeTab(tab1);
    134  BrowserTestUtils.removeTab(tab2);
    135 });
    136 
    137 function getLanguageToOverride(defaultLanguage) {
    138  return languages.find(lang => lang !== defaultLanguage);
    139 }
    140 
    141 function getSecondLanguageToOverride(defaultLanguage, secondLanguage) {
    142  return languages.find(
    143    lang => lang !== defaultLanguage && lang !== secondLanguage
    144  );
    145 }
    146 
    147 async function getAcceptLanguageHeader(browser) {
    148  return SpecialPowers.spawn(browser, [SCRIPT_URL], async url => {
    149    const response = await content.fetch(url);
    150    return response.json();
    151  });
    152 }