diff options
Diffstat (limited to 'browser/base/content/test/general/browser_contextmenu.js')
-rw-r--r-- | browser/base/content/test/general/browser_contextmenu.js | 996 |
1 files changed, 996 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_contextmenu.js b/browser/base/content/test/general/browser_contextmenu.js new file mode 100644 index 000000000..3e0135848 --- /dev/null +++ b/browser/base/content/test/general/browser_contextmenu.js @@ -0,0 +1,996 @@ +"use strict"; + +let contextMenu; +let LOGIN_FILL_ITEMS = [ + "---", null, + "fill-login", null, + [ + "fill-login-no-logins", false, + "---", null, + "fill-login-saved-passwords", true + ], null, +]; +let hasPocket = Services.prefs.getBoolPref("extensions.pocket.enabled"); +let hasContainers = Services.prefs.getBoolPref("privacy.userContext.enabled"); + +const example_base = "http://example.com/browser/browser/base/content/test/general/"; +const chrome_base = "chrome://mochitests/content/browser/browser/base/content/test/general/"; + +Services.scriptloader.loadSubScript(chrome_base + "contextmenu_common.js", this); + +// Below are test cases for XUL element +add_task(function* test_xul_text_link_label() { + let url = chrome_base + "subtst_contextmenu_xul.xul"; + + yield BrowserTestUtils.openNewForegroundTab(gBrowser, url); + + yield test_contextmenu("#test-xul-text-link-label", + ["context-openlinkintab", true, + ...(hasContainers ? ["context-openlinkinusercontext-menu", true] : []), + // We need a blank entry here because the containers submenu is + // dynamically generated with no ids. + ...(hasContainers ? ["", null] : []), + "context-openlink", true, + "context-openlinkprivate", true, + "---", null, + "context-bookmarklink", true, + "context-savelink", true, + ...(hasPocket ? ["context-savelinktopocket", true] : []), + "context-copylink", true, + "context-searchselect", true + ] + ); + + // Clean up so won't affect HTML element test cases + lastElementSelector = null; + gBrowser.removeCurrentTab(); +}); + +// Below are test cases for HTML element + +add_task(function* test_setup_html() { + let url = example_base + "subtst_contextmenu.html"; + + yield BrowserTestUtils.openNewForegroundTab(gBrowser, url); + + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let doc = content.document; + let videoIframe = doc.querySelector("#test-video-in-iframe"); + let video = videoIframe.contentDocument.querySelector("video"); + let awaitPause = ContentTaskUtils.waitForEvent(video, "pause"); + video.pause(); + yield awaitPause; + + let audioIframe = doc.querySelector("#test-audio-in-iframe"); + // media documents always use a <video> tag. + let audio = audioIframe.contentDocument.querySelector("video"); + awaitPause = ContentTaskUtils.waitForEvent(audio, "pause"); + audio.pause(); + yield awaitPause; + }); +}); + +let plainTextItems; +add_task(function* test_plaintext() { + plainTextItems = ["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", true, + "---", null, + "context-viewsource", true, + "context-viewinfo", true + ]; + yield test_contextmenu("#test-text", plainTextItems); +}); + +add_task(function* test_link() { + yield test_contextmenu("#test-link", + ["context-openlinkintab", true, + ...(hasContainers ? ["context-openlinkinusercontext-menu", true] : []), + // We need a blank entry here because the containers submenu is + // dynamically generated with no ids. + ...(hasContainers ? ["", null] : []), + "context-openlink", true, + "context-openlinkprivate", true, + "---", null, + "context-bookmarklink", true, + "context-savelink", true, + ...(hasPocket ? ["context-savelinktopocket", true] : []), + "context-copylink", true, + "context-searchselect", true + ] + ); +}); + +add_task(function* test_mailto() { + yield test_contextmenu("#test-mailto", + ["context-copyemail", true, + "context-searchselect", true + ] + ); +}); + +add_task(function* test_image() { + yield test_contextmenu("#test-image", + ["context-viewimage", true, + "context-copyimage-contents", true, + "context-copyimage", true, + "---", null, + "context-saveimage", true, + "context-sendimage", true, + "context-setDesktopBackground", true, + "context-viewimageinfo", true + ] + ); +}); + +add_task(function* test_canvas() { + yield test_contextmenu("#test-canvas", + ["context-viewimage", true, + "context-saveimage", true, + "context-selectall", true + ] + ); +}); + +add_task(function* test_video_ok() { + yield test_contextmenu("#test-video-ok", + ["context-media-play", true, + "context-media-mute", true, + "context-media-playbackrate", null, + ["context-media-playbackrate-050x", true, + "context-media-playbackrate-100x", true, + "context-media-playbackrate-125x", true, + "context-media-playbackrate-150x", true, + "context-media-playbackrate-200x", true], null, + "context-media-loop", true, + "context-media-hidecontrols", true, + "context-video-fullscreen", true, + "---", null, + "context-viewvideo", true, + "context-copyvideourl", true, + "---", null, + "context-savevideo", true, + "context-video-saveimage", true, + "context-sendvideo", true, + "context-castvideo", null, + [], null + ] + ); +}); + +add_task(function* test_audio_in_video() { + yield test_contextmenu("#test-audio-in-video", + ["context-media-play", true, + "context-media-mute", true, + "context-media-playbackrate", null, + ["context-media-playbackrate-050x", true, + "context-media-playbackrate-100x", true, + "context-media-playbackrate-125x", true, + "context-media-playbackrate-150x", true, + "context-media-playbackrate-200x", true], null, + "context-media-loop", true, + "context-media-showcontrols", true, + "---", null, + "context-copyaudiourl", true, + "---", null, + "context-saveaudio", true, + "context-sendaudio", true + ] + ); +}); + +add_task(function* test_video_bad() { + yield test_contextmenu("#test-video-bad", + ["context-media-play", false, + "context-media-mute", false, + "context-media-playbackrate", null, + ["context-media-playbackrate-050x", false, + "context-media-playbackrate-100x", false, + "context-media-playbackrate-125x", false, + "context-media-playbackrate-150x", false, + "context-media-playbackrate-200x", false], null, + "context-media-loop", true, + "context-media-hidecontrols", false, + "context-video-fullscreen", false, + "---", null, + "context-viewvideo", true, + "context-copyvideourl", true, + "---", null, + "context-savevideo", true, + "context-video-saveimage", false, + "context-sendvideo", true, + "context-castvideo", null, + [], null + ] + ); +}); + +add_task(function* test_video_bad2() { + yield test_contextmenu("#test-video-bad2", + ["context-media-play", false, + "context-media-mute", false, + "context-media-playbackrate", null, + ["context-media-playbackrate-050x", false, + "context-media-playbackrate-100x", false, + "context-media-playbackrate-125x", false, + "context-media-playbackrate-150x", false, + "context-media-playbackrate-200x", false], null, + "context-media-loop", true, + "context-media-hidecontrols", false, + "context-video-fullscreen", false, + "---", null, + "context-viewvideo", false, + "context-copyvideourl", false, + "---", null, + "context-savevideo", false, + "context-video-saveimage", false, + "context-sendvideo", false, + "context-castvideo", null, + [], null + ] + ); +}); + +add_task(function* test_iframe() { + yield test_contextmenu("#test-iframe", + ["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", true, + "frame", null, + ["context-showonlythisframe", true, + "context-openframeintab", true, + "context-openframe", true, + "---", null, + "context-reloadframe", true, + "---", null, + "context-bookmarkframe", true, + "context-saveframe", true, + "---", null, + "context-printframe", true, + "---", null, + "context-viewframesource", true, + "context-viewframeinfo", true], null, + "---", null, + "context-viewsource", true, + "context-viewinfo", true + ] + ); +}); + +add_task(function* test_video_in_iframe() { + yield test_contextmenu("#test-video-in-iframe", + ["context-media-play", true, + "context-media-mute", true, + "context-media-playbackrate", null, + ["context-media-playbackrate-050x", true, + "context-media-playbackrate-100x", true, + "context-media-playbackrate-125x", true, + "context-media-playbackrate-150x", true, + "context-media-playbackrate-200x", true], null, + "context-media-loop", true, + "context-media-hidecontrols", true, + "context-video-fullscreen", true, + "---", null, + "context-viewvideo", true, + "context-copyvideourl", true, + "---", null, + "context-savevideo", true, + "context-video-saveimage", true, + "context-sendvideo", true, + "context-castvideo", null, + [], null, + "frame", null, + ["context-showonlythisframe", true, + "context-openframeintab", true, + "context-openframe", true, + "---", null, + "context-reloadframe", true, + "---", null, + "context-bookmarkframe", true, + "context-saveframe", true, + "---", null, + "context-printframe", true, + "---", null, + "context-viewframeinfo", true], null] + ); +}); + +add_task(function* test_audio_in_iframe() { + yield test_contextmenu("#test-audio-in-iframe", + ["context-media-play", true, + "context-media-mute", true, + "context-media-playbackrate", null, + ["context-media-playbackrate-050x", true, + "context-media-playbackrate-100x", true, + "context-media-playbackrate-125x", true, + "context-media-playbackrate-150x", true, + "context-media-playbackrate-200x", true], null, + "context-media-loop", true, + "---", null, + "context-copyaudiourl", true, + "---", null, + "context-saveaudio", true, + "context-sendaudio", true, + "frame", null, + ["context-showonlythisframe", true, + "context-openframeintab", true, + "context-openframe", true, + "---", null, + "context-reloadframe", true, + "---", null, + "context-bookmarkframe", true, + "context-saveframe", true, + "---", null, + "context-printframe", true, + "---", null, + "context-viewframeinfo", true], null] + ); +}); + +add_task(function* test_image_in_iframe() { + yield test_contextmenu("#test-image-in-iframe", + ["context-viewimage", true, + "context-copyimage-contents", true, + "context-copyimage", true, + "---", null, + "context-saveimage", true, + "context-sendimage", true, + "context-setDesktopBackground", true, + "context-viewimageinfo", true, + "frame", null, + ["context-showonlythisframe", true, + "context-openframeintab", true, + "context-openframe", true, + "---", null, + "context-reloadframe", true, + "---", null, + "context-bookmarkframe", true, + "context-saveframe", true, + "---", null, + "context-printframe", true, + "---", null, + "context-viewframeinfo", true], null] + ); +}); + +add_task(function* test_textarea() { + // Disabled since this is seeing spell-check-enabled + // instead of spell-add-dictionaries-main + todo(false, "spell checker tests are failing, bug 1246296"); + return; + + /* + yield test_contextmenu("#test-textarea", + ["context-undo", false, + "---", null, + "context-cut", true, + "context-copy", true, + "context-paste", null, + "context-delete", false, + "---", null, + "context-selectall", true, + "---", null, + "spell-add-dictionaries-main", true, + ], + { + skipFocusChange: true, + } + ); + */ +}); + +add_task(function* test_textarea_spellcheck() { + todo(false, "spell checker tests are failing, bug 1246296"); + return; + + /* + yield test_contextmenu("#test-textarea", + ["*chubbiness", 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, + offsetX: 6, + offsetY: 6, + postCheckContextMenuFn() { + document.getElementById("spell-add-to-dictionary").doCommand(); + } + } + ); + */ +}); + +add_task(function* test_plaintext2() { + yield test_contextmenu("#test-text", plainTextItems); +}); + +add_task(function* test_undo_add_to_dictionary() { + todo(false, "spell checker tests are failing, bug 1246296"); + return; + + /* + yield test_contextmenu("#test-textarea", + ["spell-undo-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, + postCheckContextMenuFn() { + document.getElementById("spell-undo-add-to-dictionary") + .doCommand(); + } + } + ); + */ +}); + +add_task(function* test_contenteditable() { + todo(false, "spell checker tests are failing, bug 1246296"); + return; + + /* + yield test_contextmenu("#test-contenteditable", + ["spell-no-suggestions", false, + "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_copylinkcommand() { + yield test_contextmenu("#test-link", null, { + postCheckContextMenuFn: function*() { + document.commandDispatcher + .getControllerForCommand("cmd_copyLink") + .doCommand("cmd_copyLink"); + + // The easiest way to check the clipboard is to paste the contents + // into a textbox. + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let doc = content.document; + let input = doc.getElementById("test-input"); + input.focus(); + input.value = ""; + }); + document.commandDispatcher + .getControllerForCommand("cmd_paste") + .doCommand("cmd_paste"); + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let doc = content.document; + let input = doc.getElementById("test-input"); + Assert.equal(input.value, "http://mozilla.com/", "paste for command cmd_paste"); + }); + } + }); +}); + +add_task(function* test_pagemenu() { + yield test_contextmenu("#test-pagemenu", + ["context-navigation", null, + ["context-back", false, + "context-forward", false, + "context-reload", true, + "context-bookmarkpage", true], null, + "---", null, + "+Plain item", {type: "", icon: "", checked: false, disabled: false}, + "+Disabled item", {type: "", icon: "", checked: false, disabled: true}, + "+Item w/ textContent", {type: "", icon: "", checked: false, disabled: false}, + "---", null, + "+Checkbox", {type: "checkbox", icon: "", checked: true, disabled: false}, + "---", null, + "+Radio1", {type: "checkbox", icon: "", checked: true, disabled: false}, + "+Radio2", {type: "checkbox", icon: "", checked: false, disabled: false}, + "+Radio3", {type: "checkbox", icon: "", checked: false, disabled: false}, + "---", null, + "+Item w/ icon", {type: "", icon: "favicon.ico", checked: false, disabled: false}, + "+Item w/ bad icon", {type: "", icon: "", checked: false, disabled: false}, + "---", null, + "generated-submenu-1", true, + ["+Radio1", {type: "checkbox", icon: "", checked: false, disabled: false}, + "+Radio2", {type: "checkbox", icon: "", checked: true, disabled: false}, + "+Radio3", {type: "checkbox", icon: "", checked: false, disabled: false}, + "---", null, + "+Checkbox", {type: "checkbox", icon: "", checked: false, disabled: false}], null, + "---", null, + "context-savepage", true, + ...(hasPocket ? ["context-pocket", true] : []), + "---", null, + "context-viewbgimage", false, + "context-selectall", true, + "---", null, + "context-viewsource", true, + "context-viewinfo", true + ], + {postCheckContextMenuFn: function*() { + let item = contextMenu.getElementsByAttribute("generateditemid", "1")[0]; + ok(item, "Got generated XUL menu item"); + item.doCommand(); + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let pagemenu = content.document.getElementById("test-pagemenu"); + Assert.ok(!pagemenu.hasAttribute("hopeless"), "attribute got removed"); + }); + } + }); +}); + +add_task(function* test_dom_full_screen() { + yield test_contextmenu("#test-dom-full-screen", + ["context-navigation", null, + ["context-back", false, + "context-forward", false, + "context-reload", true, + "context-bookmarkpage", true], null, + "---", null, + "context-leave-dom-fullscreen", true, + "---", null, + "context-savepage", true, + ...(hasPocket ? ["context-pocket", true] : []), + "---", null, + "context-viewbgimage", false, + "context-selectall", true, + "---", null, + "context-viewsource", true, + "context-viewinfo", true + ], + { + shiftkey: true, + *preCheckContextMenuFn() { + yield pushPrefs(["full-screen-api.allow-trusted-requests-only", false], + ["full-screen-api.transition-duration.enter", "0 0"], + ["full-screen-api.transition-duration.leave", "0 0"]) + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let doc = content.document; + let win = doc.defaultView; + let full_screen_element = doc.getElementById("test-dom-full-screen"); + let awaitFullScreenChange = + ContentTaskUtils.waitForEvent(win, "fullscreenchange"); + full_screen_element.requestFullscreen(); + yield awaitFullScreenChange; + }); + }, + *postCheckContextMenuFn() { + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let win = content.document.defaultView; + let awaitFullScreenChange = + ContentTaskUtils.waitForEvent(win, "fullscreenchange"); + content.document.exitFullscreen(); + yield awaitFullScreenChange; + }); + } + } + ); +}); + +add_task(function* test_pagemenu2() { + yield test_contextmenu("#test-text", + ["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", true, + "---", null, + "context-viewsource", true, + "context-viewinfo", true + ], + {shiftkey: true} + ); +}); + +add_task(function* test_select_text() { + yield test_contextmenu("#test-select-text", + ["context-copy", true, + "context-selectall", true, + "---", null, + "context-searchselect", true, + "context-viewpartialsource-selection", true + ], + { + offsetX: 6, + offsetY: 6, + *preCheckContextMenuFn() { + yield selectText("#test-select-text"); + } + } + ); +}); + +add_task(function* test_select_text_link() { + yield test_contextmenu("#test-select-text-link", + ["context-openlinkincurrent", true, + "context-openlinkintab", true, + ...(hasContainers ? ["context-openlinkinusercontext-menu", true] : []), + // We need a blank entry here because the containers submenu is + // dynamically generated with no ids. + ...(hasContainers ? ["", null] : []), + "context-openlink", true, + "context-openlinkprivate", true, + "---", null, + "context-bookmarklink", true, + "context-savelink", true, + "context-copy", true, + "context-selectall", true, + "---", null, + "context-searchselect", true, + "context-viewpartialsource-selection", true + ], + { + offsetX: 6, + offsetY: 6, + *preCheckContextMenuFn() { + yield selectText("#test-select-text-link"); + }, + *postCheckContextMenuFn() { + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let win = content.document.defaultView; + win.getSelection().removeAllRanges(); + }); + } + } + ); +}); + +add_task(function* test_imagelink() { + yield test_contextmenu("#test-image-link", + ["context-openlinkintab", true, + ...(hasContainers ? ["context-openlinkinusercontext-menu", true] : []), + // We need a blank entry here because the containers submenu is + // dynamically generated with no ids. + ...(hasContainers ? ["", null] : []), + "context-openlink", true, + "context-openlinkprivate", true, + "---", null, + "context-bookmarklink", true, + "context-savelink", true, + ...(hasPocket ? ["context-savelinktopocket", true] : []), + "context-copylink", true, + "---", null, + "context-viewimage", true, + "context-copyimage-contents", true, + "context-copyimage", true, + "---", null, + "context-saveimage", true, + "context-sendimage", true, + "context-setDesktopBackground", true, + "context-viewimageinfo", true + ] + ); +}); + +add_task(function* test_select_input_text() { + todo(false, "spell checker tests are failing, bug 1246296"); + return; + + /* + yield test_contextmenu("#test-select-input-text", + ["context-undo", false, + "---", null, + "context-cut", true, + "context-copy", true, + "context-paste", null, // ignore clipboard state + "context-delete", true, + "---", null, + "context-selectall", true, + "context-searchselect", true, + "---", null, + "spell-check-enabled", true + ].concat(LOGIN_FILL_ITEMS), + { + *preCheckContextMenuFn() { + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let doc = content.document; + let win = doc.defaultView; + win.getSelection().removeAllRanges(); + let element = doc.querySelector("#test-select-input-text"); + element.select(); + }); + } + } + ); + */ +}); + +add_task(function* test_select_input_text_password() { + todo(false, "spell checker tests are failing, bug 1246296"); + return; + + /* + yield test_contextmenu("#test-select-input-text-type-password", + ["context-undo", false, + "---", null, + "context-cut", true, + "context-copy", true, + "context-paste", null, // ignore clipboard state + "context-delete", true, + "---", null, + "context-selectall", true, + "---", null, + "spell-check-enabled", true, + // spell checker is shown on input[type="password"] on this testcase + "spell-dictionaries", true, + ["spell-check-dictionary-en-US", true, + "---", null, + "spell-add-dictionaries", true], null + ].concat(LOGIN_FILL_ITEMS), + { + *preCheckContextMenuFn() { + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let doc = content.document; + let win = doc.defaultView; + win.getSelection().removeAllRanges(); + let element = doc.querySelector("#test-select-input-text-type-password"); + element.select(); + }); + }, + *postCheckContextMenuFn() { + yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() { + let win = content.document.defaultView; + win.getSelection().removeAllRanges(); + }); + } + } + ); + */ +}); + +add_task(function* test_click_to_play_blocked_plugin() { + yield test_contextmenu("#test-plugin", + ["context-navigation", null, + ["context-back", false, + "context-forward", false, + "context-reload", true, + "context-bookmarkpage", true], null, + "---", null, + "context-ctp-play", true, + "context-ctp-hide", true, + "---", null, + "context-savepage", true, + ...(hasPocket ? ["context-pocket", true] : []), + "---", null, + "context-viewbgimage", false, + "context-selectall", true, + "---", null, + "context-viewsource", true, + "context-viewinfo", true + ], + { + preCheckContextMenuFn: function*() { + pushPrefs(["plugins.click_to_play", true]); + setTestPluginEnabledState(Ci.nsIPluginTag.STATE_CLICKTOPLAY); + }, + postCheckContextMenuFn: function*() { + getTestPlugin().enabledState = Ci.nsIPluginTag.STATE_ENABLED; + } + } + ); +}); + +add_task(function* test_longdesc() { + yield test_contextmenu("#test-longdesc", + ["context-viewimage", true, + "context-copyimage-contents", true, + "context-copyimage", true, + "---", null, + "context-saveimage", true, + "context-sendimage", true, + "context-setDesktopBackground", true, + "context-viewimageinfo", true, + "context-viewimagedesc", true + ] + ); +}); + +add_task(function* test_srcdoc() { + yield test_contextmenu("#test-srcdoc", + ["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", true, + "frame", null, + ["context-reloadframe", true, + "---", null, + "context-saveframe", true, + "---", null, + "context-printframe", true, + "---", null, + "context-viewframesource", true, + "context-viewframeinfo", true], null, + "---", null, + "context-viewsource", true, + "context-viewinfo", true + ] + ); +}); + +add_task(function* test_input_spell_false() { + todo(false, "spell checker tests are failing, bug 1246296"); + return; + + /* + yield test_contextmenu("#test-contenteditable-spellcheck-false", + ["context-undo", false, + "---", null, + "context-cut", true, + "context-copy", true, + "context-paste", null, // ignore clipboard state + "context-delete", false, + "---", null, + "context-selectall", true, + ] + ); + */ +}); + +const remoteClientsFixture = [ { id: 1, name: "Foo"}, { id: 2, name: "Bar"} ]; + +add_task(function* test_plaintext_sendpagetodevice() { + if (!gFxAccounts.sendTabToDeviceEnabled) { + return; + } + const oldGetter = setupRemoteClientsFixture(remoteClientsFixture); + + let plainTextItemsWithSendPage = + ["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-sendpagetodevice", true, + ["*Foo", true, + "*Bar", true, + "---", null, + "*All Devices", true], null, + "---", null, + "context-viewbgimage", false, + "context-selectall", true, + "---", null, + "context-viewsource", true, + "context-viewinfo", true + ]; + yield test_contextmenu("#test-text", plainTextItemsWithSendPage, { + *onContextMenuShown() { + yield openMenuItemSubmenu("context-sendpagetodevice"); + } + }); + + restoreRemoteClients(oldGetter); +}); + +add_task(function* test_link_sendlinktodevice() { + if (!gFxAccounts.sendTabToDeviceEnabled) { + return; + } + const oldGetter = setupRemoteClientsFixture(remoteClientsFixture); + + yield test_contextmenu("#test-link", + ["context-openlinkintab", true, + ...(hasContainers ? ["context-openlinkinusercontext-menu", true] : []), + // We need a blank entry here because the containers submenu is + // dynamically generated with no ids. + ...(hasContainers ? ["", null] : []), + "context-openlink", true, + "context-openlinkprivate", true, + "---", null, + "context-bookmarklink", true, + "context-savelink", true, + ...(hasPocket ? ["context-savelinktopocket", true] : []), + "context-copylink", true, + "context-searchselect", true, + "---", null, + "context-sendlinktodevice", true, + ["*Foo", true, + "*Bar", true, + "---", null, + "*All Devices", true], null, + ], + { + *onContextMenuShown() { + yield openMenuItemSubmenu("context-sendlinktodevice"); + } + }); + + restoreRemoteClients(oldGetter); +}); + +add_task(function* test_cleanup_html() { + gBrowser.removeCurrentTab(); +}); + +/** + * Selects the text of the element that matches the provided `selector` + * + * @param {String} selector + * A selector passed to querySelector to find + * the element that will be referenced. + */ +function* selectText(selector) { + yield ContentTask.spawn(gBrowser.selectedBrowser, selector, function*(contentSelector) { + info(`Selecting text of ${contentSelector}`); + let doc = content.document; + let win = doc.defaultView; + win.getSelection().removeAllRanges(); + let div = doc.createRange(); + let element = doc.querySelector(contentSelector); + Assert.ok(element, "Found element to select text from"); + div.setStartBefore(element); + div.setEndAfter(element); + win.getSelection().addRange(div); + }); +} |