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 }