forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			387 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			387 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| let contextMenu;
 | |
| let hasPocket = Services.prefs.getBoolPref("extensions.pocket.enabled");
 | |
| 
 | |
| const NAVIGATION_ITEMS =
 | |
|   AppConstants.platform == "macosx"
 | |
|     ? [
 | |
|         "context-back",
 | |
|         false,
 | |
|         "context-forward",
 | |
|         false,
 | |
|         "context-reload",
 | |
|         true,
 | |
|         "---",
 | |
|         null,
 | |
|         "context-bookmarkpage",
 | |
|         true,
 | |
|       ]
 | |
|     : [
 | |
|         "context-navigation",
 | |
|         null,
 | |
|         [
 | |
|           "context-back",
 | |
|           false,
 | |
|           "context-forward",
 | |
|           false,
 | |
|           "context-reload",
 | |
|           true,
 | |
|           "context-bookmarkpage",
 | |
|           true,
 | |
|         ],
 | |
|         null,
 | |
|         "---",
 | |
|         null,
 | |
|       ];
 | |
| 
 | |
| add_task(async function test_setup() {
 | |
|   const example_base =
 | |
|     // eslint-disable-next-line @microsoft/sdl/no-insecure-url
 | |
|     "http://example.com/browser/browser/base/content/test/contextMenu/";
 | |
|   const url = example_base + "subtst_contextmenu_input.html";
 | |
|   await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
 | |
| 
 | |
|   const chrome_base =
 | |
|     "chrome://mochitests/content/browser/browser/base/content/test/contextMenu/";
 | |
|   const contextmenu_common = chrome_base + "contextmenu_common.js";
 | |
|   /* import-globals-from contextmenu_common.js */
 | |
|   Services.scriptloader.loadSubScript(contextmenu_common, this);
 | |
| });
 | |
| 
 | |
| add_task(async function test_text_input() {
 | |
|   await test_contextmenu("#input_text", [
 | |
|     "context-undo",
 | |
|     false,
 | |
|     "context-redo",
 | |
|     false,
 | |
|     "---",
 | |
|     null,
 | |
|     "context-cut",
 | |
|     false,
 | |
|     "context-copy",
 | |
|     false,
 | |
|     "context-paste",
 | |
|     null, // ignore clipboard state
 | |
|     "context-delete",
 | |
|     false,
 | |
|     "context-selectall",
 | |
|     false,
 | |
|     "---",
 | |
|     null,
 | |
|     "spell-check-enabled",
 | |
|     true,
 | |
|   ]);
 | |
| });
 | |
| 
 | |
| add_task(async function test_text_input_disabled() {
 | |
|   await test_contextmenu(
 | |
|     "#input_disabled",
 | |
|     [
 | |
|       "context-undo",
 | |
|       false,
 | |
|       "context-redo",
 | |
|       false,
 | |
|       "---",
 | |
|       null,
 | |
|       "context-cut",
 | |
|       false,
 | |
|       "context-copy",
 | |
|       false,
 | |
|       "context-paste",
 | |
|       null, // ignore clipboard state
 | |
|       "context-delete",
 | |
|       false,
 | |
|       "context-selectall",
 | |
|       false,
 | |
|       "---",
 | |
|       null,
 | |
|       "spell-check-enabled",
 | |
|       true,
 | |
|     ],
 | |
|     { skipFocusChange: true }
 | |
|   );
 | |
| });
 | |
| 
 | |
| add_task(async function test_password_input() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       ["signon.generation.enabled", false],
 | |
|       ["layout.forms.reveal-password-context-menu.enabled", true],
 | |
|     ],
 | |
|   });
 | |
|   todo(
 | |
|     false,
 | |
|     "context-selectall is enabled on osx-e10s, and windows when" +
 | |
|       " it should be disabled"
 | |
|   );
 | |
|   await test_contextmenu(
 | |
|     "#input_password",
 | |
|     [
 | |
|       "manage-saved-logins",
 | |
|       true,
 | |
|       "---",
 | |
|       null,
 | |
|       "context-undo",
 | |
|       false,
 | |
|       "context-redo",
 | |
|       false,
 | |
|       "---",
 | |
|       null,
 | |
|       "context-cut",
 | |
|       false,
 | |
|       "context-copy",
 | |
|       false,
 | |
|       "context-paste",
 | |
|       null, // ignore clipboard state
 | |
|       "context-delete",
 | |
|       false,
 | |
|       "context-selectall",
 | |
|       null,
 | |
|       "context-reveal-password",
 | |
|       null,
 | |
|     ],
 | |
|     {
 | |
|       skipFocusChange: true,
 | |
|       // Need to dynamically add the "password" type or LoginManager
 | |
|       // will think that the form inputs on the page are part of a login form
 | |
|       // and will add fill-login context menu items. The element needs to be
 | |
|       // re-created as type=text afterwards since it uses hasBeenTypePassword.
 | |
|       async preCheckContextMenuFn() {
 | |
|         await SpecialPowers.spawn(
 | |
|           gBrowser.selectedBrowser,
 | |
|           [],
 | |
|           async function () {
 | |
|             let doc = content.document;
 | |
|             let input = doc.getElementById("input_password");
 | |
|             input.type = "password";
 | |
|             input.clientTop; // force layout flush
 | |
|           }
 | |
|         );
 | |
|       },
 | |
|       async postCheckContextMenuFn() {
 | |
|         await SpecialPowers.spawn(
 | |
|           gBrowser.selectedBrowser,
 | |
|           [],
 | |
|           async function () {
 | |
|             let doc = content.document;
 | |
|             let input = doc.getElementById("input_password");
 | |
|             input.outerHTML = `<input id=\"input_password\">`;
 | |
|             input.clientTop; // force layout flush
 | |
|           }
 | |
|         );
 | |
|       },
 | |
|     }
 | |
|   );
 | |
|   await SpecialPowers.popPrefEnv();
 | |
| });
 | |
| 
 | |
| add_task(async function firefox_relay_input() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [["signon.firefoxRelay.feature", "enabled"]],
 | |
|   });
 | |
| 
 | |
|   await test_contextmenu("#input_username", [
 | |
|     "use-relay-mask",
 | |
|     true,
 | |
|     "---",
 | |
|     null,
 | |
|     "context-undo",
 | |
|     false,
 | |
|     "context-redo",
 | |
|     false,
 | |
|     "---",
 | |
|     null,
 | |
|     "context-cut",
 | |
|     false,
 | |
|     "context-copy",
 | |
|     false,
 | |
|     "context-paste",
 | |
|     null, // ignore clipboard state
 | |
|     "context-delete",
 | |
|     false,
 | |
|     "context-selectall",
 | |
|     false,
 | |
|     "---",
 | |
|     null,
 | |
|     "spell-check-enabled",
 | |
|     true,
 | |
|   ]);
 | |
| 
 | |
|   await test_contextmenu(
 | |
|     "#input_email",
 | |
|     [
 | |
|       "use-relay-mask",
 | |
|       true,
 | |
|       "---",
 | |
|       null,
 | |
|       "context-undo",
 | |
|       false,
 | |
|       "context-redo",
 | |
|       false,
 | |
|       "---",
 | |
|       null,
 | |
|       "context-cut",
 | |
|       false,
 | |
|       "context-copy",
 | |
|       false,
 | |
|       "context-paste",
 | |
|       null, // ignore clipboard state
 | |
|       "context-delete",
 | |
|       false,
 | |
|       "context-selectall",
 | |
|       null,
 | |
|     ],
 | |
|     {
 | |
|       skipFocusChange: true,
 | |
|     }
 | |
|   );
 | |
| 
 | |
|   await SpecialPowers.popPrefEnv();
 | |
| });
 | |
| 
 | |
| add_task(async function test_tel_email_url_number_input() {
 | |
|   todo(
 | |
|     false,
 | |
|     "context-selectall is enabled on osx-e10s, and windows when" +
 | |
|       " it should be disabled"
 | |
|   );
 | |
|   for (let selector of [
 | |
|     "#input_email",
 | |
|     "#input_url",
 | |
|     "#input_tel",
 | |
|     "#input_number",
 | |
|   ]) {
 | |
|     await test_contextmenu(
 | |
|       selector,
 | |
|       [
 | |
|         "context-undo",
 | |
|         false,
 | |
|         "context-redo",
 | |
|         false,
 | |
|         "---",
 | |
|         null,
 | |
|         "context-cut",
 | |
|         false,
 | |
|         "context-copy",
 | |
|         false,
 | |
|         "context-paste",
 | |
|         null, // ignore clipboard state
 | |
|         "context-delete",
 | |
|         false,
 | |
|         "context-selectall",
 | |
|         null,
 | |
|       ],
 | |
|       {
 | |
|         skipFocusChange: true,
 | |
|       }
 | |
|     );
 | |
|   }
 | |
| });
 | |
| 
 | |
| add_task(
 | |
|   async function test_date_time_color_range_month_week_datetimelocal_input() {
 | |
|     for (let selector of [
 | |
|       "#input_date",
 | |
|       "#input_time",
 | |
|       "#input_color",
 | |
|       "#input_range",
 | |
|       "#input_month",
 | |
|       "#input_week",
 | |
|       "#input_datetime-local",
 | |
|     ]) {
 | |
|       await test_contextmenu(
 | |
|         selector,
 | |
|         [
 | |
|           ...NAVIGATION_ITEMS,
 | |
|           "context-savepage",
 | |
|           true,
 | |
|           ...(hasPocket ? ["context-pocket", true] : []),
 | |
|           "context-selectall",
 | |
|           null,
 | |
|           "---",
 | |
|           null,
 | |
|           "context-viewsource",
 | |
|           true,
 | |
|         ],
 | |
|         {
 | |
|           skipFocusChange: true,
 | |
|         }
 | |
|       );
 | |
|     }
 | |
|   }
 | |
| );
 | |
| 
 | |
| add_task(async function test_search_input() {
 | |
|   todo(
 | |
|     false,
 | |
|     "context-selectall is enabled on osx-e10s, and windows when" +
 | |
|       " it should be disabled"
 | |
|   );
 | |
|   await test_contextmenu(
 | |
|     "#input_search",
 | |
|     [
 | |
|       "context-undo",
 | |
|       false,
 | |
|       "context-redo",
 | |
|       false,
 | |
|       "---",
 | |
|       null,
 | |
|       "context-cut",
 | |
|       false,
 | |
|       "context-copy",
 | |
|       false,
 | |
|       "context-paste",
 | |
|       null, // ignore clipboard state
 | |
|       "context-delete",
 | |
|       false,
 | |
|       "context-selectall",
 | |
|       null,
 | |
|       "---",
 | |
|       null,
 | |
|       "spell-check-enabled",
 | |
|       true,
 | |
|     ],
 | |
|     { skipFocusChange: true }
 | |
|   );
 | |
| });
 | |
| 
 | |
| add_task(async function test_text_input_readonly() {
 | |
|   todo(
 | |
|     false,
 | |
|     "context-selectall is enabled on osx-e10s, and windows when" +
 | |
|       " it should be disabled"
 | |
|   );
 | |
|   todo(
 | |
|     false,
 | |
|     "spell-check should not be enabled for input[readonly]. see bug 1246296"
 | |
|   );
 | |
|   await test_contextmenu(
 | |
|     "#input_readonly",
 | |
|     [
 | |
|       "context-undo",
 | |
|       false,
 | |
|       "context-redo",
 | |
|       false,
 | |
|       "---",
 | |
|       null,
 | |
|       "context-cut",
 | |
|       false,
 | |
|       "context-copy",
 | |
|       false,
 | |
|       "context-paste",
 | |
|       null, // ignore clipboard state
 | |
|       "context-delete",
 | |
|       false,
 | |
|       "context-selectall",
 | |
|       null,
 | |
|     ],
 | |
|     {
 | |
|       skipFocusChange: true,
 | |
|     }
 | |
|   );
 | |
| });
 | |
| 
 | |
| add_task(async function test_cleanup() {
 | |
|   BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | |
| });
 | 
