summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_contextmenu_input.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/general/browser_contextmenu_input.js')
-rw-r--r--browser/base/content/test/general/browser_contextmenu_input.js243
1 files changed, 243 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_contextmenu_input.js b/browser/base/content/test/general/browser_contextmenu_input.js
new file mode 100644
index 000000000..cfc7b7529
--- /dev/null
+++ b/browser/base/content/test/general/browser_contextmenu_input.js
@@ -0,0 +1,243 @@
+"use strict";
+
+let contextMenu;
+let hasPocket = Services.prefs.getBoolPref("extensions.pocket.enabled");
+
+add_task(function* test_setup() {
+ const example_base = "http://example.com/browser/browser/base/content/test/general/";
+ const url = example_base + "subtst_contextmenu_input.html";
+ yield BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+
+ const chrome_base = "chrome://mochitests/content/browser/browser/base/content/test/general/";
+ const contextmenu_common = chrome_base + "contextmenu_common.js";
+ Services.scriptloader.loadSubScript(contextmenu_common, this);
+});
+
+add_task(function* test_text_input() {
+ yield test_contextmenu("#input_text",
+ ["context-undo", false,
+ "---", null,
+ "context-cut", true,
+ "context-copy", true,
+ "context-paste", null, // ignore clipboard state
+ "context-delete", false,
+ "---", null,
+ "context-selectall", false,
+ "---", null,
+ "spell-check-enabled", true]);
+});
+
+add_task(function* test_text_input_spellcheck() {
+ yield test_contextmenu("#input_spellcheck_no_value",
+ ["context-undo", false,
+ "---", null,
+ "context-cut", true,
+ "context-copy", true,
+ "context-paste", null, // ignore clipboard state
+ "context-delete", false,
+ "---", null,
+ "context-selectall", false,
+ "---", null,
+ "spell-check-enabled", true,
+ "spell-dictionaries", true,
+ ["spell-check-dictionary-en-US", true,
+ "---", null,
+ "spell-add-dictionaries", true], null],
+ {
+ waitForSpellCheck: true,
+ // Need to dynamically add/remove the "password" type or LoginManager
+ // will think that the form inputs on the page are part of a login
+ // and will add fill-login context menu items.
+ *preCheckContextMenuFn() {
+ yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() {
+ let doc = content.document;
+ let input = doc.getElementById("input_spellcheck_no_value");
+ input.setAttribute("spellcheck", "true");
+ input.clientTop; // force layout flush
+ });
+ },
+ }
+ );
+});
+
+add_task(function* test_text_input_spellcheckwrong() {
+ yield test_contextmenu("#input_spellcheck_incorrect",
+ ["*prodigality", true, // spelling suggestion
+ "spell-add-to-dictionary", true,
+ "---", null,
+ "context-undo", false,
+ "---", null,
+ "context-cut", true,
+ "context-copy", true,
+ "context-paste", null, // ignore clipboard state
+ "context-delete", false,
+ "---", null,
+ "context-selectall", true,
+ "---", null,
+ "spell-check-enabled", true,
+ "spell-dictionaries", true,
+ ["spell-check-dictionary-en-US", true,
+ "---", null,
+ "spell-add-dictionaries", true], null],
+ {waitForSpellCheck: true}
+ );
+});
+
+add_task(function* test_text_input_spellcheckcorrect() {
+ yield test_contextmenu("#input_spellcheck_correct",
+ ["context-undo", false,
+ "---", null,
+ "context-cut", true,
+ "context-copy", true,
+ "context-paste", null, // ignore clipboard state
+ "context-delete", false,
+ "---", null,
+ "context-selectall", true,
+ "---", null,
+ "spell-check-enabled", true,
+ "spell-dictionaries", true,
+ ["spell-check-dictionary-en-US", true,
+ "---", null,
+ "spell-add-dictionaries", true], null],
+ {waitForSpellCheck: true}
+ );
+});
+
+add_task(function* test_text_input_disabled() {
+ yield test_contextmenu("#input_disabled",
+ ["context-undo", false,
+ "---", null,
+ "context-cut", true,
+ "context-copy", true,
+ "context-paste", null, // ignore clipboard state
+ "context-delete", false,
+ "---", null,
+ "context-selectall", true,
+ "---", null,
+ "spell-check-enabled", true],
+ {skipFocusChange: true}
+ );
+});
+
+add_task(function* test_password_input() {
+ todo(false, "context-selectall is enabled on osx-e10s, and windows when" +
+ " it should be disabled");
+ yield test_contextmenu("#input_password",
+ ["context-undo", false,
+ "---", null,
+ "context-cut", true,
+ "context-copy", true,
+ "context-paste", null, // ignore clipboard state
+ "context-delete", false,
+ "---", null,
+ "context-selectall", null,
+ "---", null,
+ "fill-login", null,
+ ["fill-login-no-logins", false,
+ "---", null,
+ "fill-login-saved-passwords", true], null],
+ {
+ skipFocusChange: true,
+ // Need to dynamically add/remove the "password" type or LoginManager
+ // will think that the form inputs on the page are part of a login
+ // and will add fill-login context menu items.
+ *preCheckContextMenuFn() {
+ yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() {
+ let doc = content.document;
+ let input = doc.getElementById("input_password");
+ input.type = "password";
+ input.clientTop; // force layout flush
+ });
+ },
+ *postCheckContextMenuFn() {
+ yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() {
+ let doc = content.document;
+ let input = doc.getElementById("input_password");
+ input.type = "text";
+ input.clientTop; // force layout flush
+ });
+ },
+ }
+ );
+});
+
+add_task(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"]) {
+ yield test_contextmenu(selector,
+ ["context-undo", false,
+ "---", null,
+ "context-cut", true,
+ "context-copy", true,
+ "context-paste", null, // ignore clipboard state
+ "context-delete", false,
+ "---", null,
+ "context-selectall", null],
+ {skipFocusChange: true}
+ );
+ }
+});
+
+add_task(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"]) {
+ yield test_contextmenu(selector,
+ ["context-navigation", null,
+ ["context-back", false,
+ "context-forward", false,
+ "context-reload", true,
+ "context-bookmarkpage", true], null,
+ "---", null,
+ "context-savepage", true,
+ ...(hasPocket ? ["context-pocket", true] : []),
+ "---", null,
+ "context-viewbgimage", false,
+ "context-selectall", null,
+ "---", null,
+ "context-viewsource", true,
+ "context-viewinfo", true],
+ {skipFocusChange: true}
+ );
+ }
+});
+
+add_task(function* test_search_input() {
+ todo(false, "context-selectall is enabled on osx-e10s, and windows when" +
+ " it should be disabled");
+ yield test_contextmenu("#input_search",
+ ["context-undo", false,
+ "---", null,
+ "context-cut", true,
+ "context-copy", true,
+ "context-paste", null, // ignore clipboard state
+ "context-delete", false,
+ "---", null,
+ "context-selectall", null,
+ "---", null,
+ "spell-check-enabled", true],
+ {skipFocusChange: true}
+ );
+});
+
+add_task(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");
+ yield test_contextmenu("#input_readonly",
+ ["context-undo", false,
+ "---", null,
+ "context-cut", true,
+ "context-copy", true,
+ "context-paste", null, // ignore clipboard state
+ "context-delete", false,
+ "---", null,
+ "context-selectall", null],
+ {skipFocusChange: true}
+ );
+});
+
+add_task(function* test_cleanup() {
+ yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});