summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/content-tabs/browser_contentTab.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/content-tabs/browser_contentTab.js')
-rw-r--r--comm/mail/test/browser/content-tabs/browser_contentTab.js170
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);
+ }
+});