browser_languages_subdialog.js (6637B)
1 add_task(async function () { 2 await openPreferencesViaOpenPreferencesAPI("general", { leaveOpen: true }); 3 const contentDocument = gBrowser.contentDocument; 4 let dialogOverlay = content.gSubDialog._preloadDialog._overlay; 5 6 async function languagesSubdialogOpened() { 7 const promiseSubDialogLoaded = promiseLoadSubDialog( 8 "chrome://browser/content/preferences/dialogs/languages.xhtml" 9 ); 10 contentDocument.getElementById("chooseLanguage").click(); 11 const win = await promiseSubDialogLoaded; 12 dialogOverlay = content.gSubDialog._topDialog._overlay; 13 ok(!BrowserTestUtils.isHidden(dialogOverlay), "The dialog is visible."); 14 return win; 15 } 16 17 function acceptLanguagesSubdialog(win) { 18 const button = win.document.querySelector("dialog").getButton("accept"); 19 button.doCommand(); 20 } 21 22 function cancelLanguagesSubdialog(win) { 23 const button = win.document.querySelector("dialog").getButton("cancel"); 24 button.doCommand(); 25 } 26 27 ok(BrowserTestUtils.isHidden(dialogOverlay), "The dialog is invisible."); 28 let win = await languagesSubdialogOpened(); 29 ok( 30 win.document.getElementById("spoofEnglish").hidden, 31 "The 'Request English' checkbox is hidden." 32 ); 33 acceptLanguagesSubdialog(win); 34 ok(BrowserTestUtils.isHidden(dialogOverlay), "The dialog is invisible."); 35 36 await SpecialPowers.pushPrefEnv({ 37 set: [["intl.accept_languages", "en-US,en-XX,foo"]], 38 }); 39 win = await languagesSubdialogOpened(); 40 let activeLanguages = win.document.getElementById("activeLanguages").children; 41 Assert.equal( 42 activeLanguages[0].id, 43 "en-us", 44 "The ID for 'en-US' locale code is correctly set." 45 ); 46 Assert.equal( 47 activeLanguages[0].firstChild.value, 48 "English (United States) [en-us]", 49 "The name for known 'en-US' locale code is correctly resolved." 50 ); 51 Assert.equal( 52 activeLanguages[1].id, 53 "en-xx", 54 "The ID for 'en-XX' locale code is correctly set." 55 ); 56 Assert.equal( 57 activeLanguages[1].firstChild.value, 58 "English [en-xx]", 59 "The name for unknown 'en-XX' locale code is resolved using 'en'." 60 ); 61 Assert.equal( 62 activeLanguages[2].firstChild.value, 63 " [foo]", 64 "The name for unknown 'foo' locale code is empty." 65 ); 66 acceptLanguagesSubdialog(win); 67 await SpecialPowers.popPrefEnv(); 68 69 await SpecialPowers.pushPrefEnv({ 70 set: [ 71 ["privacy.resistFingerprinting", true], 72 ["privacy.spoof_english", 0], 73 ], 74 }); 75 76 win = await languagesSubdialogOpened(); 77 ok( 78 !win.document.getElementById("spoofEnglish").hidden, 79 "The 'Request English' checkbox isn't hidden." 80 ); 81 ok( 82 !win.document.getElementById("spoofEnglish").checked, 83 "The 'Request English' checkbox isn't checked." 84 ); 85 is( 86 win.Preferences.get("privacy.spoof_english").value, 87 0, 88 "The privacy.spoof_english pref is set to 0." 89 ); 90 91 win.document.getElementById("spoofEnglish").checked = true; 92 win.document.getElementById("spoofEnglish").doCommand(); 93 ok( 94 win.document.getElementById("spoofEnglish").checked, 95 "The 'Request English' checkbox is checked." 96 ); 97 is( 98 win.Preferences.get("privacy.spoof_english").value, 99 2, 100 "The privacy.spoof_english pref is set to 2." 101 ); 102 acceptLanguagesSubdialog(win); 103 104 win = await languagesSubdialogOpened(); 105 ok( 106 !win.document.getElementById("spoofEnglish").hidden, 107 "The 'Request English' checkbox isn't hidden." 108 ); 109 ok( 110 win.document.getElementById("spoofEnglish").checked, 111 "The 'Request English' checkbox is checked." 112 ); 113 is( 114 win.Preferences.get("privacy.spoof_english").value, 115 2, 116 "The privacy.spoof_english pref is set to 2." 117 ); 118 119 win.document.getElementById("spoofEnglish").checked = false; 120 win.document.getElementById("spoofEnglish").doCommand(); 121 ok( 122 !win.document.getElementById("spoofEnglish").checked, 123 "The 'Request English' checkbox isn't checked." 124 ); 125 is( 126 win.Preferences.get("privacy.spoof_english").value, 127 1, 128 "The privacy.spoof_english pref is set to 1." 129 ); 130 acceptLanguagesSubdialog(win); 131 132 win = await languagesSubdialogOpened(); 133 ok( 134 !win.document.getElementById("spoofEnglish").hidden, 135 "The 'Request English' checkbox isn't hidden." 136 ); 137 ok( 138 !win.document.getElementById("spoofEnglish").checked, 139 "The 'Request English' checkbox isn't checked." 140 ); 141 is( 142 win.Preferences.get("privacy.spoof_english").value, 143 1, 144 "The privacy.spoof_english pref is set to 1." 145 ); 146 acceptLanguagesSubdialog(win); 147 await SpecialPowers.popPrefEnv(); 148 149 await SpecialPowers.pushPrefEnv({ 150 set: [["intl.accept_languages", "en-US"]], 151 }); 152 win = await languagesSubdialogOpened(); 153 is( 154 win.document.getElementById("remove").disabled, 155 false, 156 "The Remove button is enabled when any language is selected on the list" 157 ); 158 159 win.document.getElementById("remove").doCommand(); 160 is( 161 win.Preferences.get("intl.accept_languages").value, 162 "", 163 "Accepted language has been removed from the preference" 164 ); 165 is( 166 win.document.getElementById("activeLanguages").itemCount, 167 0, 168 "Accepted languages list is empty" 169 ); 170 ok( 171 win.document.getElementById("remove").disabled, 172 "The Remove button is disabled when there is no language on the list" 173 ); 174 acceptLanguagesSubdialog(win); 175 176 // Testing adding from the available languages list 177 win = await languagesSubdialogOpened(); 178 ok( 179 win.document.getElementById("addButton").disabled, 180 "The Add button is disabled after opening the Languages dialog" 181 ); 182 183 win.document.getElementById("availableLanguages").click(); 184 ok( 185 win.document.getElementById("addButton").disabled, 186 "The Add button is disabled after clicking on the available languages list" 187 ); 188 189 let availableLanguages = 190 win.document.getElementById("availableLanguages").menupopup; 191 let target = availableLanguages.querySelector("#he"); 192 target.click(); 193 is( 194 win.document.getElementById("addButton").disabled, 195 false, 196 "The Add button is enabled after selecting a language from the available languages list" 197 ); 198 win.document.getElementById("addButton").click(); 199 activeLanguages = win.document.getElementById("activeLanguages").children; 200 Assert.equal( 201 activeLanguages[0].id, 202 "he", 203 "Hebrew language added as topmost item." 204 ); 205 206 ok( 207 win.document.getElementById("addButton").disabled, 208 "The Add button is disabled after the selected language has been added" 209 ); 210 is( 211 win.document.getElementById("activeLanguages").children[0].id, 212 "he", 213 "Hebrew language added as topmost item." 214 ); 215 216 cancelLanguagesSubdialog(win); 217 218 gBrowser.removeCurrentTab(); 219 });