browser_contextmenu_add_search_engine.js (6970B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 let contextMenu; 7 8 const example_base = 9 "https://example.com/browser/browser/base/content/test/contextMenu/"; 10 const chrome_base = 11 "chrome://mochitests/content/browser/browser/base/content/test/contextMenu/"; 12 13 const HTTP_URL = example_base + "subtst_contextmenu_add_search_engine.html"; 14 const CHROME_URL = chrome_base + "subtst_contextmenu_add_search_engine.html"; 15 16 const askChatMenu = [ 17 "context-ask-chat", 18 true, 19 // Need a blank entry here because the Ask Chat submenu is dynamically built with no ids. 20 "", 21 null, 22 ]; 23 24 add_task(async function test_setup() { 25 await BrowserTestUtils.openNewForegroundTab(gBrowser, HTTP_URL); 26 const contextmenu_common = chrome_base + "contextmenu_common.js"; 27 /* import-globals-from contextmenu_common.js */ 28 Services.scriptloader.loadSubScript(contextmenu_common, this); 29 }); 30 31 add_task(async function test_text_input_spellcheck_noform() { 32 await test_contextmenu( 33 "#input_text_no_form", 34 [ 35 "context-undo", 36 false, 37 "context-redo", 38 false, 39 "---", 40 null, 41 "context-cut", 42 null, // ignore the enabled/disabled states; there are race conditions 43 // in the edit commands but they're not relevant for what we're testing. 44 "context-copy", 45 null, 46 "context-paste", 47 null, // ignore clipboard state 48 "context-delete", 49 null, 50 "context-selectall", 51 null, 52 "---", 53 null, 54 ...askChatMenu, 55 "---", 56 null, 57 "spell-check-enabled", 58 true, 59 "spell-dictionaries", 60 true, 61 [ 62 "spell-check-dictionary-en-US", 63 true, 64 "---", 65 null, 66 "spell-add-dictionaries", 67 true, 68 ], 69 null, 70 ], 71 { 72 waitForSpellCheck: true, 73 async preCheckContextMenuFn() { 74 await SpecialPowers.spawn( 75 gBrowser.selectedBrowser, 76 [], 77 async function () { 78 let doc = content.document; 79 let input = doc.getElementById("input_text_no_form"); 80 input.setAttribute("spellcheck", "true"); 81 input.clientTop; // force layout flush 82 } 83 ); 84 }, 85 awaitOnMenuBuilt: { 86 id: "context-ask-chat", 87 }, 88 } 89 ); 90 }); 91 92 add_task(async function test_text_input_spellcheck_loginform() { 93 await test_contextmenu( 94 "#login_text", 95 [ 96 "manage-saved-logins", 97 true, 98 "---", 99 null, 100 "context-undo", 101 false, 102 "context-redo", 103 false, 104 "---", 105 null, 106 "context-cut", 107 null, // ignore the enabled/disabled states; there are race conditions 108 // in the edit commands but they're not relevant for what we're testing. 109 "context-copy", 110 null, 111 "context-paste", 112 null, // ignore clipboard state 113 "context-delete", 114 null, 115 "context-selectall", 116 null, 117 "---", 118 null, 119 ...askChatMenu, 120 "---", 121 null, 122 "spell-check-enabled", 123 true, 124 "spell-dictionaries", 125 true, 126 [ 127 "spell-check-dictionary-en-US", 128 true, 129 "---", 130 null, 131 "spell-add-dictionaries", 132 true, 133 ], 134 null, 135 ], 136 { 137 waitForSpellCheck: true, 138 async preCheckContextMenuFn() { 139 await SpecialPowers.spawn( 140 gBrowser.selectedBrowser, 141 [], 142 async function () { 143 let doc = content.document; 144 let input = doc.getElementById("login_text"); 145 input.setAttribute("spellcheck", "true"); 146 input.clientTop; // force layout flush 147 } 148 ); 149 }, 150 awaitOnMenuBuilt: { 151 id: "context-ask-chat", 152 }, 153 } 154 ); 155 }); 156 157 add_task(async function test_text_input_spellcheck_searchform() { 158 await test_contextmenu( 159 "#search_text", 160 [ 161 "context-undo", 162 false, 163 "context-redo", 164 false, 165 "---", 166 null, 167 "context-cut", 168 null, // ignore the enabled/disabled states; there are race conditions 169 // in the edit commands but they're not relevant for what we're testing. 170 "context-copy", 171 null, 172 "context-paste", 173 null, // ignore clipboard state 174 "context-delete", 175 null, 176 "context-selectall", 177 null, 178 "---", 179 null, 180 "context-add-engine", 181 null, 182 ...askChatMenu, 183 "---", 184 null, 185 "spell-check-enabled", 186 true, 187 "spell-dictionaries", 188 true, 189 [ 190 "spell-check-dictionary-en-US", 191 true, 192 "---", 193 null, 194 "spell-add-dictionaries", 195 true, 196 ], 197 null, 198 ], 199 { 200 waitForSpellCheck: true, 201 async preCheckContextMenuFn() { 202 await SpecialPowers.spawn( 203 gBrowser.selectedBrowser, 204 [], 205 async function () { 206 let doc = content.document; 207 let input = doc.getElementById("search_text"); 208 input.setAttribute("spellcheck", "true"); 209 input.clientTop; // force layout flush 210 } 211 ); 212 }, 213 awaitOnMenuBuilt: { 214 id: "context-ask-chat", 215 }, 216 } 217 ); 218 }); 219 220 // context-add-engine should not be available on non-http[s] pages. 221 add_task(async function test_searchform_non_http() { 222 let browserLoadedPromise = BrowserTestUtils.browserLoaded( 223 gBrowser, 224 false, 225 CHROME_URL 226 ); 227 BrowserTestUtils.startLoadingURIString(gBrowser, CHROME_URL); 228 await browserLoadedPromise; 229 230 await test_contextmenu( 231 "#search_text", 232 [ 233 "context-undo", 234 false, 235 "context-redo", 236 false, 237 "---", 238 null, 239 "context-cut", 240 null, // ignore the enabled/disabled states; there are race conditions 241 // in the edit commands but they're not relevant for what we're testing. 242 "context-copy", 243 null, 244 "context-paste", 245 null, // ignore clipboard state 246 "context-delete", 247 null, 248 "context-selectall", 249 null, 250 "---", 251 null, 252 ...askChatMenu, 253 "---", 254 null, 255 "spell-check-enabled", 256 true, 257 "spell-dictionaries", 258 true, 259 [ 260 "spell-check-dictionary-en-US", 261 true, 262 "---", 263 null, 264 "spell-add-dictionaries", 265 true, 266 ], 267 null, 268 ], 269 { 270 waitForSpellCheck: true, 271 async preCheckContextMenuFn() { 272 await SpecialPowers.spawn( 273 gBrowser.selectedBrowser, 274 [], 275 async function () { 276 let doc = content.document; 277 let input = doc.getElementById("search_text"); 278 input.setAttribute("spellcheck", "true"); 279 input.clientTop; // force layout flush 280 } 281 ); 282 }, 283 awaitOnMenuBuilt: { 284 id: "context-ask-chat", 285 }, 286 } 287 ); 288 }); 289 290 add_task(async function test_cleanup() { 291 BrowserTestUtils.removeTab(gBrowser.selectedTab); 292 });