browser_contextmenu_input.js (9448B)
1 "use strict"; 2 3 let contextMenu; 4 5 const NAVIGATION_ITEMS = 6 AppConstants.platform == "macosx" 7 ? [ 8 "context-back", 9 false, 10 "context-forward", 11 false, 12 "context-reload", 13 true, 14 "---", 15 null, 16 "context-bookmarkpage", 17 true, 18 ] 19 : [ 20 "context-navigation", 21 null, 22 [ 23 "context-back", 24 false, 25 "context-forward", 26 false, 27 "context-reload", 28 true, 29 "context-bookmarkpage", 30 true, 31 ], 32 null, 33 "---", 34 null, 35 ]; 36 37 const askChatMenu = [ 38 "context-ask-chat", 39 true, 40 // Need a blank entry here because the Ask Chat submenu is dynamically built with no ids. 41 "", 42 null, 43 ]; 44 45 add_task(async function test_setup() { 46 const example_base = 47 // eslint-disable-next-line @microsoft/sdl/no-insecure-url 48 "http://example.com/browser/browser/base/content/test/contextMenu/"; 49 const url = example_base + "subtst_contextmenu_input.html"; 50 await BrowserTestUtils.openNewForegroundTab(gBrowser, url); 51 52 const chrome_base = 53 "chrome://mochitests/content/browser/browser/base/content/test/contextMenu/"; 54 const contextmenu_common = chrome_base + "contextmenu_common.js"; 55 /* import-globals-from contextmenu_common.js */ 56 Services.scriptloader.loadSubScript(contextmenu_common, this); 57 }); 58 59 add_task(async function test_text_input() { 60 await test_contextmenu( 61 "#input_text", 62 [ 63 "context-undo", 64 false, 65 "context-redo", 66 false, 67 "---", 68 null, 69 "context-cut", 70 false, 71 "context-copy", 72 false, 73 "context-paste", 74 null, // ignore clipboard state 75 "context-delete", 76 false, 77 "context-selectall", 78 false, 79 "---", 80 null, 81 ...askChatMenu, 82 "---", 83 null, 84 "spell-check-enabled", 85 true, 86 ], 87 { 88 awaitOnMenuBuilt: { 89 id: "context-ask-chat", 90 }, 91 } 92 ); 93 }); 94 95 add_task(async function test_text_input_disabled() { 96 await test_contextmenu( 97 "#input_disabled", 98 [ 99 "context-undo", 100 false, 101 "context-redo", 102 false, 103 "---", 104 null, 105 "context-cut", 106 false, 107 "context-copy", 108 false, 109 "context-paste", 110 null, // ignore clipboard state 111 "context-delete", 112 false, 113 "context-selectall", 114 false, 115 "---", 116 null, 117 ...askChatMenu, 118 "---", 119 null, 120 "spell-check-enabled", 121 true, 122 ], 123 { 124 skipFocusChange: true, 125 awaitOnMenuBuilt: { 126 id: "context-ask-chat", 127 }, 128 } 129 ); 130 }); 131 132 add_task(async function test_password_input() { 133 await SpecialPowers.pushPrefEnv({ 134 set: [["signon.generation.enabled", false]], 135 }); 136 todo( 137 false, 138 "context-selectall is enabled on osx-e10s, and windows when" + 139 " it should be disabled" 140 ); 141 await test_contextmenu( 142 "#input_password", 143 [ 144 "manage-saved-logins", 145 true, 146 "---", 147 null, 148 "context-undo", 149 false, 150 "context-redo", 151 false, 152 "---", 153 null, 154 "context-cut", 155 false, 156 "context-copy", 157 false, 158 "context-paste", 159 null, // ignore clipboard state 160 "context-delete", 161 false, 162 "context-selectall", 163 null, 164 "context-reveal-password", 165 null, 166 "---", 167 null, 168 ...askChatMenu, 169 ], 170 { 171 skipFocusChange: true, 172 // Need to dynamically add the "password" type or LoginManager 173 // will think that the form inputs on the page are part of a login form 174 // and will add fill-login context menu items. The element needs to be 175 // re-created as type=text afterwards since it uses hasBeenTypePassword. 176 async preCheckContextMenuFn() { 177 await SpecialPowers.spawn( 178 gBrowser.selectedBrowser, 179 [], 180 async function () { 181 let doc = content.document; 182 let input = doc.getElementById("input_password"); 183 input.type = "password"; 184 input.clientTop; // force layout flush 185 } 186 ); 187 }, 188 async postCheckContextMenuFn() { 189 await SpecialPowers.spawn( 190 gBrowser.selectedBrowser, 191 [], 192 async function () { 193 let doc = content.document; 194 let input = doc.getElementById("input_password"); 195 input.outerHTML = `<input id=\"input_password\">`; 196 input.clientTop; // force layout flush 197 } 198 ); 199 }, 200 awaitOnMenuBuilt: { 201 id: "context-ask-chat", 202 }, 203 } 204 ); 205 await SpecialPowers.popPrefEnv(); 206 }); 207 208 add_task(async function firefox_relay_input() { 209 await SpecialPowers.pushPrefEnv({ 210 set: [["signon.firefoxRelay.feature", "enabled"]], 211 }); 212 213 await test_contextmenu( 214 "#input_username", 215 [ 216 "use-relay-mask", 217 true, 218 "---", 219 null, 220 "context-undo", 221 false, 222 "context-redo", 223 false, 224 "---", 225 null, 226 "context-cut", 227 false, 228 "context-copy", 229 false, 230 "context-paste", 231 null, // ignore clipboard state 232 "context-delete", 233 false, 234 "context-selectall", 235 false, 236 "---", 237 null, 238 ...askChatMenu, 239 "---", 240 null, 241 "spell-check-enabled", 242 true, 243 ], 244 { 245 awaitOnMenuBuilt: { 246 id: "context-ask-chat", 247 }, 248 } 249 ); 250 251 await test_contextmenu( 252 "#input_email", 253 [ 254 "use-relay-mask", 255 true, 256 "---", 257 null, 258 "context-undo", 259 false, 260 "context-redo", 261 false, 262 "---", 263 null, 264 "context-cut", 265 false, 266 "context-copy", 267 false, 268 "context-paste", 269 null, // ignore clipboard state 270 "context-delete", 271 false, 272 "context-selectall", 273 null, 274 "---", 275 null, 276 ...askChatMenu, 277 ], 278 { 279 skipFocusChange: true, 280 awaitOnMenuBuilt: { 281 id: "context-ask-chat", 282 }, 283 } 284 ); 285 286 await SpecialPowers.popPrefEnv(); 287 }); 288 289 add_task(async function test_tel_email_url_number_input() { 290 todo( 291 false, 292 "context-selectall is enabled on osx-e10s, and windows when" + 293 " it should be disabled" 294 ); 295 for (let selector of [ 296 "#input_email", 297 "#input_url", 298 "#input_tel", 299 "#input_number", 300 ]) { 301 await test_contextmenu( 302 selector, 303 [ 304 "context-undo", 305 false, 306 "context-redo", 307 false, 308 "---", 309 null, 310 "context-cut", 311 false, 312 "context-copy", 313 false, 314 "context-paste", 315 null, // ignore clipboard state 316 "context-delete", 317 false, 318 "context-selectall", 319 null, 320 "---", 321 null, 322 ...askChatMenu, 323 ], 324 { 325 skipFocusChange: true, 326 awaitOnMenuBuilt: { 327 id: "context-ask-chat", 328 }, 329 } 330 ); 331 } 332 }); 333 334 add_task( 335 async function test_date_time_color_range_month_week_datetimelocal_input() { 336 for (let selector of [ 337 "#input_date", 338 "#input_time", 339 "#input_color", 340 "#input_range", 341 "#input_month", 342 "#input_week", 343 "#input_datetime-local", 344 ]) { 345 await test_contextmenu( 346 selector, 347 [ 348 ...NAVIGATION_ITEMS, 349 "context-savepage", 350 true, 351 "context-selectall", 352 null, 353 "---", 354 null, 355 "context-take-screenshot", 356 true, 357 "---", 358 null, 359 ...askChatMenu, 360 "---", 361 null, 362 "context-viewsource", 363 true, 364 ], 365 { 366 skipFocusChange: true, 367 awaitOnMenuBuilt: { 368 id: "context-ask-chat", 369 }, 370 } 371 ); 372 } 373 } 374 ); 375 376 add_task(async function test_search_input() { 377 todo( 378 false, 379 "context-selectall is enabled on osx-e10s, and windows when" + 380 " it should be disabled" 381 ); 382 await test_contextmenu( 383 "#input_search", 384 [ 385 "context-undo", 386 false, 387 "context-redo", 388 false, 389 "---", 390 null, 391 "context-cut", 392 false, 393 "context-copy", 394 false, 395 "context-paste", 396 null, // ignore clipboard state 397 "context-delete", 398 false, 399 "context-selectall", 400 null, 401 "---", 402 null, 403 ...askChatMenu, 404 "---", 405 null, 406 "spell-check-enabled", 407 true, 408 ], 409 { 410 skipFocusChange: true, 411 awaitOnMenuBuilt: { 412 id: "context-ask-chat", 413 }, 414 } 415 ); 416 }); 417 418 add_task(async function test_text_input_readonly() { 419 todo( 420 false, 421 "context-selectall is enabled on osx-e10s, and windows when" + 422 " it should be disabled" 423 ); 424 todo( 425 false, 426 "spell-check should not be enabled for input[readonly]. see bug 1246296" 427 ); 428 await test_contextmenu( 429 "#input_readonly", 430 [ 431 "context-undo", 432 false, 433 "context-redo", 434 false, 435 "---", 436 null, 437 "context-cut", 438 false, 439 "context-copy", 440 false, 441 "context-paste", 442 null, // ignore clipboard state 443 "context-delete", 444 false, 445 "context-selectall", 446 null, 447 "---", 448 null, 449 ...askChatMenu, 450 ], 451 { 452 skipFocusChange: true, 453 awaitOnMenuBuilt: { 454 id: "context-ask-chat", 455 }, 456 } 457 ); 458 }); 459 460 add_task(async function test_cleanup() { 461 BrowserTestUtils.removeTab(gBrowser.selectedTab); 462 });