diff options
Diffstat (limited to 'comm/mail/test/browser/content-tabs/browser_contentTab.js')
-rw-r--r-- | comm/mail/test/browser/content-tabs/browser_contentTab.js | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/comm/mail/test/browser/content-tabs/browser_contentTab.js b/comm/mail/test/browser/content-tabs/browser_contentTab.js new file mode 100644 index 0000000000..194378e6af --- /dev/null +++ b/comm/mail/test/browser/content-tabs/browser_contentTab.js @@ -0,0 +1,170 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +var EventUtils = ChromeUtils.import( + "resource://testing-common/mozmill/EventUtils.jsm" +); + +var { assert_content_tab_has_favicon, open_content_tab_with_url } = + ChromeUtils.import("resource://testing-common/mozmill/ContentTabHelpers.jsm"); +var { assert_element_visible, assert_element_not_visible } = ChromeUtils.import( + "resource://testing-common/mozmill/DOMHelpers.jsm" +); + +var { be_in_folder, inboxFolder } = ChromeUtils.import( + "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" +); + +var { assert_tab_has_title, close_popup, mc, wait_for_popup_to_open } = + ChromeUtils.import( + "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" + ); + +var url = + "http://mochi.test:8888/browser/comm/mail/test/browser/content-tabs/html/"; +var whatsUrl = url + "whatsnew.html"; + +add_task(async function test_content_tab_open() { + // Need to open the thread pane to load the appropriate context menus. + await be_in_folder(inboxFolder); + let tab = open_content_tab_with_url(whatsUrl); + + assert_tab_has_title(tab, "What's New Content Test"); + // Check the location of the what's new image, this is via the link element + // and therefore should be set and not favicon.png. + // assert_content_tab_has_favicon(tab, url + "whatsnew.png"); + + // Check that window.content is set up correctly wrt content-primary and + // content-targetable. + if (tab.browser.currentURI.spec != whatsUrl) { + throw new Error( + 'window.content is not set to the url loaded, incorrect type="..."?' + ); + } + + tab.browser.focus(); +}); + +/** + * Just make sure that the context menu does what we expect in content tabs wrt. + * spell checking options. + */ +add_task(async function test_spellcheck_in_content_tabs() { + let tabmail = mc.window.document.getElementById("tabmail"); + + // Test a few random items + BrowserTestUtils.synthesizeMouseAtCenter( + "textarea", + {}, + tabmail.selectedTab.browser + ); + // Bug 364914 causes textareas to not be spell checked until they have been + // focused at last once, so give the event loop a chance to spin. + // Since bug 1370754 the inline spell checker waits 1 second, so let's + // wait 2 seconds to be on the safe side. + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + await new Promise(resolve => setTimeout(resolve, 2000)); + BrowserTestUtils.synthesizeMouseAtCenter( + "textarea", + { type: "contextmenu" }, + tabmail.selectedTab.browser + ); + let browserContext = mc.window.document.getElementById("browserContext"); + await wait_for_popup_to_open(browserContext); + assert_element_visible("browserContext-spell-dictionaries"); + assert_element_visible("browserContext-spell-check-enabled"); + await close_popup(mc, browserContext); + + // Different test + BrowserTestUtils.synthesizeMouseAtCenter( + "body > :first-child", + { type: "contextmenu" }, + tabmail.selectedTab.browser + ); + await wait_for_popup_to_open(browserContext); + assert_element_not_visible("browserContext-spell-dictionaries"); + assert_element_not_visible("browserContext-spell-check-enabled"); + await close_popup(mc, browserContext); + + // Right-click on "zombocom" and add to dictionary + BrowserTestUtils.synthesizeMouse( + "textarea", + 5, + 5, + { type: "contextmenu", button: 2 }, + tabmail.selectedTab.browser + ); + await wait_for_popup_to_open(browserContext); + let suggestions = + mc.window.document.getElementsByClassName("spell-suggestion"); + Assert.ok(suggestions.length > 0, "What, is zombocom a registered word now?"); + let addToDict = mc.window.document.getElementById( + "browserContext-spell-add-to-dictionary" + ); + if (AppConstants.platform == "macosx") { + // We need to use click() since the synthesizeMouseAtCenter doesn't work for + // context menu items on macos. + addToDict.click(); + } else { + EventUtils.synthesizeMouseAtCenter(addToDict, {}, addToDict.ownerGlobal); + } + await close_popup(mc, browserContext); + + // Now check we don't have any suggestionss + BrowserTestUtils.synthesizeMouse( + "textarea", + 5, + 5, + { type: "contextmenu", button: 2 }, + tabmail.selectedTab.browser + ); + await wait_for_popup_to_open(browserContext); + suggestions = mc.window.document.getElementsByClassName("spell-suggestion"); + Assert.ok(suggestions.length == 0, "But I just taught you this word!"); + await close_popup(mc, browserContext); +}); + +add_task(function test_content_tab_default_favicon() { + const whatsUrl2 = url + "whatsnew1.html"; + let tab = open_content_tab_with_url(whatsUrl2); + + assert_tab_has_title(tab, "What's New Content Test 1"); + // Check the location of the favicon, this should be the site favicon in this + // test. + assert_content_tab_has_favicon(tab, "http://mochi.test:8888/favicon.ico"); +}); + +add_task(async function test_content_tab_onbeforeunload() { + let tabmail = mc.window.document.getElementById("tabmail"); + let count = tabmail.tabContainer.allTabs.length; + let tab = tabmail.tabInfo[count - 1]; + await SpecialPowers.spawn(tab.browser, [], () => { + content.addEventListener("beforeunload", function (event) { + event.returnValue = "Green llama in your car"; + }); + }); + + const interactionPref = "dom.require_user_interaction_for_beforeunload"; + Services.prefs.setBoolPref(interactionPref, false); + + let dialogPromise = BrowserTestUtils.promiseAlertDialog("accept"); + tabmail.closeTab(tab); + await dialogPromise; + + Services.prefs.clearUserPref(interactionPref); +}); + +// XXX todo +// - test find bar +// - window.close within tab +// - zoom? + +registerCleanupFunction(function () { + let tabmail = mc.window.document.getElementById("tabmail"); + while (tabmail.tabInfo.length > 1) { + tabmail.closeTab(1); + } +}); |