browser_moreFromMozilla_locales.js (11866B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const { EnterprisePolicyTesting } = ChromeUtils.importESModule( 7 "resource://testing-common/EnterprisePolicyTesting.sys.mjs" 8 ); 9 10 let { Region } = ChromeUtils.importESModule( 11 "resource://gre/modules/Region.sys.mjs" 12 ); 13 14 const initialHomeRegion = Region._home; 15 const initialCurrentRegion = Region._current; 16 17 // Helper to run tests for specific regions 18 async function setupRegions(home, current) { 19 Region._setHomeRegion(home || ""); 20 Region._setCurrentRegion(current || ""); 21 } 22 23 function setLocale(language) { 24 Services.locale.availableLocales = [language]; 25 Services.locale.requestedLocales = [language]; 26 } 27 28 async function clearPolicies() { 29 // Ensure no active policies are set 30 await EnterprisePolicyTesting.setupPolicyEngineWithJson(""); 31 } 32 33 async function getPromoCards() { 34 await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", { 35 leaveOpen: true, 36 }); 37 38 let doc = gBrowser.contentDocument; 39 let vpnPromoCard = doc.getElementById("mozilla-vpn"); 40 let monitorPromoCard = doc.getElementById("mozilla-monitor"); 41 let mobileCard = doc.getElementById("firefox-mobile"); 42 let relayPromoCard = doc.getElementById("firefox-relay"); 43 44 return { 45 vpnPromoCard, 46 monitorPromoCard, 47 mobileCard, 48 relayPromoCard, 49 }; 50 } 51 52 let mockFxA, unmockFxA; 53 54 // The Relay promo is only shown if the default FxA instance is detected, and 55 // tests override it to a dummy address, so we need to make the dummy address 56 // appear like it's the default (using the actual default instance might cause a 57 // remote connection, crashing the test harness). 58 add_setup(async function () { 59 let { mock, unmock } = await mockDefaultFxAInstance(); 60 mockFxA = mock; 61 unmockFxA = unmock; 62 }); 63 64 add_task(async function test_VPN_promo_enabled() { 65 await clearPolicies(); 66 await SpecialPowers.pushPrefEnv({ 67 set: [ 68 ["browser.preferences.moreFromMozilla", true], 69 ["browser.vpn_promo.enabled", true], 70 ], 71 }); 72 73 let { vpnPromoCard, mobileCard } = await getPromoCards(); 74 75 ok(vpnPromoCard, "The VPN promo is visible"); 76 ok(mobileCard, "The Mobile promo is visible"); 77 78 BrowserTestUtils.removeTab(gBrowser.selectedTab); 79 }); 80 81 add_task(async function test_VPN_promo_disabled() { 82 await clearPolicies(); 83 await SpecialPowers.pushPrefEnv({ 84 set: [["browser.vpn_promo.enabled", false]], 85 }); 86 87 let { vpnPromoCard, mobileCard } = await getPromoCards(); 88 89 ok(!vpnPromoCard, "The VPN promo is not visible"); 90 ok(mobileCard, "The Mobile promo is visible"); 91 92 Services.prefs.clearUserPref("browser.vpn_promo.enabled"); 93 BrowserTestUtils.removeTab(gBrowser.selectedTab); 94 }); 95 96 add_task(async function test_VPN_promo_in_disallowed_home_region() { 97 await clearPolicies(); 98 const disallowedRegion = "SY"; 99 100 setupRegions(disallowedRegion); 101 102 // Promo should not show in disallowed regions even when vpn_promo pref is enabled 103 await SpecialPowers.pushPrefEnv({ 104 set: [["browser.vpn_promo.enabled", true]], 105 }); 106 107 let { vpnPromoCard, mobileCard } = await getPromoCards(); 108 109 ok(!vpnPromoCard, "The VPN promo is not visible"); 110 ok(mobileCard, "The Mobile promo is visible"); 111 112 setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions 113 BrowserTestUtils.removeTab(gBrowser.selectedTab); 114 }); 115 116 add_task(async function test_VPN_promo_in_illegal_home_region() { 117 await clearPolicies(); 118 const illegalRegion = "CN"; 119 120 setupRegions(illegalRegion); 121 122 // Promo should not show in illegal regions even if the list of disallowed regions is somehow altered (though changing this preference is blocked) 123 await SpecialPowers.pushPrefEnv({ 124 set: [["browser.vpn_promo.disallowedRegions", "SY, CU"]], 125 }); 126 127 let { vpnPromoCard, mobileCard } = await getPromoCards(); 128 129 ok(!vpnPromoCard, "The VPN promo is not visible"); 130 ok(mobileCard, "The Mobile promo is visible"); 131 132 setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions 133 BrowserTestUtils.removeTab(gBrowser.selectedTab); 134 }); 135 136 add_task(async function test_VPN_promo_in_disallowed_current_region() { 137 await clearPolicies(); 138 const allowedRegion = "US"; 139 const disallowedRegion = "SY"; 140 141 setupRegions(allowedRegion, disallowedRegion); 142 143 // Promo should not show in disallowed regions even when vpn_promo pref is enabled 144 await SpecialPowers.pushPrefEnv({ 145 set: [["browser.vpn_promo.enabled", true]], 146 }); 147 148 let { vpnPromoCard, mobileCard } = await getPromoCards(); 149 150 ok(!vpnPromoCard, "The VPN promo is not visible"); 151 ok(mobileCard, "The Mobile promo is visible"); 152 153 setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions 154 BrowserTestUtils.removeTab(gBrowser.selectedTab); 155 }); 156 157 add_task(async function test_VPN_promo_in_illegal_current_region() { 158 await clearPolicies(); 159 const allowedRegion = "US"; 160 const illegalRegion = "CN"; 161 162 setupRegions(allowedRegion, illegalRegion); 163 164 // Promo should not show in illegal regions even if the list of disallowed regions is somehow altered (though changing this preference is blocked) 165 await SpecialPowers.pushPrefEnv({ 166 set: [["browser.vpn_promo.disallowedRegions", "SY, CU"]], 167 }); 168 169 let { vpnPromoCard, mobileCard } = await getPromoCards(); 170 171 ok(!vpnPromoCard, "The VPN promo is not visible"); 172 ok(mobileCard, "The Mobile promo is visible"); 173 174 setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions 175 BrowserTestUtils.removeTab(gBrowser.selectedTab); 176 }); 177 178 add_task(async function test_aboutpreferences_partnerCNRepack() { 179 let defaultBranch = Services.prefs.getDefaultBranch(null); 180 defaultBranch.setCharPref("distribution.id", "MozillaOnline"); 181 182 await SpecialPowers.pushPrefEnv({ 183 set: [ 184 ["browser.preferences.moreFromMozilla", true], 185 ["browser.preferences.moreFromMozilla.template", "simple"], 186 ], 187 }); 188 await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", { 189 leaveOpen: true, 190 }); 191 192 let doc = gBrowser.contentDocument; 193 let tab = gBrowser.selectedTab; 194 195 let productCards = doc.querySelectorAll("vbox.simple"); 196 Assert.ok(productCards, "Simple template loaded"); 197 198 const expectedUrl = "https://www.firefox.com.cn/browsers/mobile/"; 199 200 let link = doc.getElementById("simple-fxMobile"); 201 Assert.ok(link.getAttribute("href").startsWith(expectedUrl)); 202 203 defaultBranch.setCharPref("distribution.id", ""); 204 BrowserTestUtils.removeTab(tab); 205 }); 206 207 add_task(async function test_send_to_device_email_link_for_supported_locale() { 208 // Email is supported for Brazilian Portuguese 209 const supportedLocale = "pt-BR"; 210 const initialLocale = Services.locale.appLocaleAsBCP47; 211 setLocale(supportedLocale); 212 213 await SpecialPowers.pushPrefEnv({ 214 set: [["browser.preferences.moreFromMozilla.template", "simple"]], 215 }); 216 217 await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", { 218 leaveOpen: true, 219 }); 220 221 let doc = gBrowser.contentDocument; 222 let emailLink = doc.getElementById("simple-qr-code-send-email"); 223 224 ok(!BrowserTestUtils.isHidden(emailLink), "Email link should be visible"); 225 226 await SpecialPowers.popPrefEnv(); 227 BrowserTestUtils.removeTab(gBrowser.selectedTab); 228 setLocale(initialLocale); // revert changes to language 229 }); 230 231 add_task( 232 async function test_send_to_device_email_link_for_unsupported_locale() { 233 // Email is not supported for Afrikaans 234 const unsupportedLocale = "af"; 235 const initialLocale = Services.locale.appLocaleAsBCP47; 236 setLocale(unsupportedLocale); 237 238 await SpecialPowers.pushPrefEnv({ 239 set: [["browser.preferences.moreFromMozilla.template", "simple"]], 240 }); 241 242 await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", { 243 leaveOpen: true, 244 }); 245 246 let doc = gBrowser.contentDocument; 247 let emailLink = doc.getElementById("simple-qr-code-send-email"); 248 249 ok(BrowserTestUtils.isHidden(emailLink), "Email link should be hidden"); 250 251 await SpecialPowers.popPrefEnv(); 252 BrowserTestUtils.removeTab(gBrowser.selectedTab); 253 setLocale(initialLocale); // revert changes to language 254 } 255 ); 256 257 add_task( 258 async function test_VPN_promo_in_unsupported_current_region_with_supported_home_region() { 259 await clearPolicies(); 260 const supportedRegion = "US"; 261 const unsupportedRegion = "LY"; 262 263 setupRegions(supportedRegion, unsupportedRegion); 264 265 let { vpnPromoCard, mobileCard } = await getPromoCards(); 266 267 ok(vpnPromoCard, "The VPN promo is visible"); 268 ok(mobileCard, "The Mobile promo is visible"); 269 270 setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions 271 BrowserTestUtils.removeTab(gBrowser.selectedTab); 272 } 273 ); 274 275 add_task( 276 async function test_VPN_promo_in_supported_current_region_with_unsupported_home_region() { 277 await clearPolicies(); 278 const supportedRegion = "US"; 279 const unsupportedRegion = "LY"; 280 281 setupRegions(unsupportedRegion, supportedRegion); 282 283 let { vpnPromoCard, mobileCard } = await getPromoCards(); 284 285 ok(vpnPromoCard, "The VPN promo is visible"); 286 ok(mobileCard, "The Mobile promo is visible"); 287 288 setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions 289 BrowserTestUtils.removeTab(gBrowser.selectedTab); 290 } 291 ); 292 293 add_task(async function test_VPN_promo_with_active_enterprise_policy() { 294 // set up an arbitrary enterprise policy 295 await EnterprisePolicyTesting.setupPolicyEngineWithJson({ 296 policies: { 297 EnableTrackingProtection: { 298 Value: true, 299 }, 300 }, 301 }); 302 303 let { vpnPromoCard, mobileCard } = await getPromoCards(); 304 ok(!vpnPromoCard, "The VPN promo is not visible"); 305 ok(mobileCard, "The Mobile promo is visible"); 306 307 setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions 308 await clearPolicies(); 309 BrowserTestUtils.removeTab(gBrowser.selectedTab); 310 }); 311 312 add_task(async function test_relay_promo_with_supported_fxa_server() { 313 await clearPolicies(); 314 315 let { relayPromoCard } = await getPromoCards(); 316 ok(relayPromoCard, "The Relay promo is visible"); 317 318 BrowserTestUtils.removeTab(gBrowser.selectedTab); 319 }); 320 321 add_task(async function test_relay_promo_with_unsupported_fxa_server() { 322 await clearPolicies(); 323 // Set the default pref value to something other than the current value so it 324 // will appear to be user-set and treated as invalid (actually setting the 325 // pref would cause a remote connection and crash the test harness) 326 unmockFxA(); 327 328 let { relayPromoCard } = await getPromoCards(); 329 ok(!relayPromoCard, "The Relay promo is not visible"); 330 331 BrowserTestUtils.removeTab(gBrowser.selectedTab); 332 mockFxA(); 333 }); 334 335 add_task(async function test_Monitor_US_region_desc() { 336 const supportedRegion = "US"; 337 setupRegions(supportedRegion); 338 339 let { monitorPromoCard } = await getPromoCards(); 340 ok(monitorPromoCard, "The Monitor promo is visible"); 341 342 let monitorDescElement = 343 monitorPromoCard.nextElementSibling.querySelector(".description"); 344 is( 345 monitorDescElement.getAttribute("data-l10n-id"), 346 "more-from-moz-mozilla-monitor-global-description", 347 "US Region desc set" 348 ); 349 350 setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions 351 BrowserTestUtils.removeTab(gBrowser.selectedTab); 352 }); 353 354 add_task(async function test_Monitor_global_region_desc() { 355 const supportedRegion = "UK"; 356 setupRegions(supportedRegion); 357 358 let { monitorPromoCard } = await getPromoCards(); 359 ok(monitorPromoCard, "The Monitor promo is visible"); 360 361 let monitorDescElement = 362 monitorPromoCard.nextElementSibling.querySelector(".description"); 363 is( 364 monitorDescElement.getAttribute("data-l10n-id"), 365 "more-from-moz-mozilla-monitor-global-description", 366 "Global Region desc set" 367 ); 368 369 setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions 370 BrowserTestUtils.removeTab(gBrowser.selectedTab); 371 });