summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/content-policy/browser_pluginsPolicy.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/content-policy/browser_pluginsPolicy.js')
-rw-r--r--comm/mail/test/browser/content-policy/browser_pluginsPolicy.js245
1 files changed, 245 insertions, 0 deletions
diff --git a/comm/mail/test/browser/content-policy/browser_pluginsPolicy.js b/comm/mail/test/browser/content-policy/browser_pluginsPolicy.js
new file mode 100644
index 0000000000..9fcb1bde0c
--- /dev/null
+++ b/comm/mail/test/browser/content-policy/browser_pluginsPolicy.js
@@ -0,0 +1,245 @@
+/* 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/. */
+
+/**
+ * Checks if plugins are enabled in messages correctly or not.
+ * As of bug 1508942, plugins are no longer enabled in any context.
+ */
+
+"use strict";
+
+var { open_content_tab_with_url } = ChromeUtils.import(
+ "resource://testing-common/mozmill/ContentTabHelpers.jsm"
+);
+
+var {
+ assert_nothing_selected,
+ assert_selected_and_displayed,
+ be_in_folder,
+ close_message_window,
+ create_folder,
+ get_about_message,
+ mc,
+ open_selected_message,
+ select_click_row,
+ select_none,
+ set_open_message_behavior,
+ wait_for_message_display_completion,
+} = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+var { async_plan_for_new_window } = ChromeUtils.import(
+ "resource://testing-common/mozmill/WindowHelpers.jsm"
+);
+
+var { MailE10SUtils } = ChromeUtils.import(
+ "resource:///modules/MailE10SUtils.jsm"
+);
+
+var folder = null;
+var gMsgNo = 0;
+
+var url =
+ "http://mochi.test:8888/browser/comm/mail/test/browser/content-policy/html/";
+
+// These two constants are used to build the message body.
+var msgBody =
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n' +
+ "<html>\n" +
+ "<head>\n" +
+ "\n" +
+ '<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">\n' +
+ "</head>\n" +
+ '<body bgcolor="#ffffff" text="#000000">\n' +
+ '<embed id="testelement" type="application/x-test" width="400" height="400" border="1"></embed>\n' +
+ "</body>\n</html>\n";
+
+add_setup(async function () {
+ folder = await create_folder("pluginPolicy");
+});
+
+function addToFolder(aSubject, aBody, aFolder) {
+ let msgId = Services.uuid.generateUUID() + "@mozillamessaging.invalid";
+
+ let source =
+ "From - Sat Nov 1 12:39:54 2008\n" +
+ "X-Mozilla-Status: 0001\n" +
+ "X-Mozilla-Status2: 00000000\n" +
+ "Message-ID: <" +
+ msgId +
+ ">\n" +
+ "Date: Wed, 11 Jun 2008 20:32:02 -0400\n" +
+ "From: Tester <tests@mozillamessaging.invalid>\n" +
+ "User-Agent: Thunderbird 3.0a2pre (Macintosh/2008052122)\n" +
+ "MIME-Version: 1.0\n" +
+ "To: recipient@mozillamessaging.invalid\n" +
+ "Subject: " +
+ aSubject +
+ "\n" +
+ "Content-Type: text/html; charset=ISO-8859-1\n" +
+ "Content-Transfer-Encoding: 7bit\n" +
+ "\n" +
+ aBody +
+ "\n";
+
+ aFolder.QueryInterface(Ci.nsIMsgLocalMailFolder);
+ aFolder.gettingNewMessages = true;
+
+ aFolder.addMessage(source);
+ aFolder.gettingNewMessages = false;
+
+ return aFolder.msgDatabase.getMsgHdrForMessageID(msgId);
+}
+
+function isPluginLoaded(browser) {
+ return SpecialPowers.spawn(browser, [], () => {
+ let element = content.document.getElementById("testelement");
+
+ try {
+ // if setColor throws, then the plugin isn't running
+ element.setColor("FFFF0000");
+ return true;
+ } catch (ex) {
+ // Any errors and we'll just return false below - they may be expected.
+ }
+ return false;
+ });
+}
+
+async function addMsgToFolderAndCheckContent(loadAllowed) {
+ let msgDbHdr = addToFolder("Plugin test message " + gMsgNo, msgBody, folder);
+
+ // select the newly created message
+ let msgHdr = select_click_row(gMsgNo);
+
+ if (msgDbHdr != msgHdr) {
+ throw new Error(
+ "Selected Message Header is not the same as generated header"
+ );
+ }
+
+ assert_selected_and_displayed(gMsgNo);
+
+ ++gMsgNo;
+
+ // XXX It appears the assert_selected_and_displayed doesn't actually wait
+ // long enough for plugin load. However, I also can't find a way to wait for
+ // long enough in all situations, so this will have to do for now.
+ // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
+ await new Promise(resolve => setTimeout(resolve, 1000));
+
+ // Now check that the content hasn't been loaded
+ if (
+ (await isPluginLoaded(
+ get_about_message().document.getElementById("messagepane")
+ )) != loadAllowed
+ ) {
+ throw new Error(
+ loadAllowed
+ ? "Plugin has been unexpectedly blocked in message content"
+ : "Plugin has not been blocked in message as expected"
+ );
+ }
+}
+
+async function checkStandaloneMessageWindow(loadAllowed) {
+ let newWindowPromise = async_plan_for_new_window("mail:messageWindow");
+ // Open it
+ set_open_message_behavior("NEW_WINDOW");
+
+ open_selected_message();
+ let msgc = await newWindowPromise;
+ wait_for_message_display_completion(msgc, true);
+
+ // XXX It appears the wait_for_message_display_completion doesn't actually
+ // wait long enough for plugin load. However, I also can't find a way to wait
+ // for long enough in all situations, so this will have to do for now.
+ // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
+ await new Promise(resolve => setTimeout(resolve, 1000));
+
+ let aboutMessage = get_about_message(msgc.window);
+ if (
+ (await isPluginLoaded(
+ aboutMessage.document.getElementById("messagepane")
+ )) != loadAllowed
+ ) {
+ throw new Error(
+ loadAllowed
+ ? "Plugin has been unexpectedly blocked in standalone window"
+ : "Plugin has not been blocked in standalone window as expected"
+ );
+ }
+
+ // Clean up, close the window
+ close_message_window(msgc);
+}
+
+add_task(async function test_3paneWindowDenied() {
+ await be_in_folder(folder);
+
+ assert_nothing_selected();
+
+ await addMsgToFolderAndCheckContent(false);
+});
+
+add_task(async function test_checkPluginsInNonMessageContent() {
+ // Deselect everything so we can load our content
+ select_none();
+
+ // load something non-message-like in the message pane
+ let browser = get_about_message().document.getElementById("messagepane");
+ MailE10SUtils.loadURI(browser, url + "plugin.html");
+ await BrowserTestUtils.browserLoaded(browser);
+
+ if (await isPluginLoaded(browser)) {
+ throw new Error(
+ "Plugin is turned on in content in message pane - it should not be."
+ );
+ }
+});
+
+add_task(async function test_3paneWindowDeniedAgain() {
+ select_click_row(0);
+
+ assert_selected_and_displayed(0);
+
+ let browser = get_about_message().document.getElementById("messagepane");
+ // Now check that the content hasn't been loaded
+ if (await isPluginLoaded(browser)) {
+ throw new Error("Plugin has not been blocked in message as expected");
+ }
+});
+
+add_task(async function test_checkStandaloneMessageWindowDenied() {
+ await checkStandaloneMessageWindow(false);
+});
+
+add_task(async function test_checkContentTab() {
+ // To open a tab we're going to have to cheat and use tabmail so we can load
+ // in the data of what we want.
+ let preCount =
+ mc.window.document.getElementById("tabmail").tabContainer.allTabs.length;
+
+ let newTab = open_content_tab_with_url(url + "plugin.html");
+
+ if (await isPluginLoaded(newTab.browser)) {
+ throw new Error("Plugin has been unexpectedly not blocked in content tab");
+ }
+
+ mc.window.document.getElementById("tabmail").closeTab(newTab);
+
+ if (
+ mc.window.document.getElementById("tabmail").tabContainer.allTabs.length !=
+ preCount
+ ) {
+ throw new Error("The content tab didn't close");
+ }
+
+ Assert.report(
+ false,
+ undefined,
+ undefined,
+ "Test ran to completion successfully"
+ );
+});