/* 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/. */ /** * Tests whether JavaScript in a local/remote message works. The test * mailnews/extensions/newsblog/test/browser/browser_feedDisplay.js does the * same thing for feeds. * * @note This assumes an existing local account. */ "use strict"; var { assert_nothing_selected, assert_selected_and_displayed, be_in_folder, create_folder, get_about_message, select_click_row, select_none, } = ChromeUtils.import( "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" ); var { close_compose_window, open_compose_with_forward, open_compose_with_reply, } = ChromeUtils.import("resource://testing-common/mozmill/ComposeHelpers.jsm"); var { MailE10SUtils } = ChromeUtils.import( "resource:///modules/MailE10SUtils.jsm" ); let aboutMessage = get_about_message(); var folder; registerCleanupFunction(async () => { let promptPromise = BrowserTestUtils.promiseAlertDialog("accept"); folder.deleteSelf(window.msgWindow); await promptPromise; Services.focus.focusedWindow = window; }); var url = "http://mochi.test:8888/browser/comm/mail/test/browser/content-policy/html/"; 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 \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" + "Content-Base: " + url + "remote-noscript.html\n" + "\n" + aBody + "\n"; aFolder.QueryInterface(Ci.nsIMsgLocalMailFolder); aFolder.gettingNewMessages = true; aFolder.addMessage(source); aFolder.gettingNewMessages = false; return aFolder.msgDatabase.getMsgHdrForMessageID(msgId); } /* * Runs in the browser process via SpecialPowers.spawn to check JavaScript * is disabled. */ function assertJSDisabled() { Assert.ok(content.location.href); Assert.ok( !content.wrappedJSObject.jsIsTurnedOn, "JS should not be turned on in content." ); let noscript = content.document.querySelector("noscript"); let display = content.getComputedStyle(noscript).display; Assert.equal(display, "inline", "noscript display should be 'inline'"); } /* * Runs in the browser process via SpecialPowers.spawn to check JavaScript * is enabled. */ function assertJSEnabled() { Assert.ok(content.location.href); Assert.ok( content.wrappedJSObject.jsIsTurnedOn, "JS should be turned on in content." ); let noscript = content.document.querySelector("noscript"); let display = content.getComputedStyle(noscript).display; Assert.equal(display, "none", "noscript display should be 'none'"); } var jsMsgBody = '\n' + "\n" + "\n" + "\n" + '\n' + "\n" + '\n' + "this is a test stuff\n" + "

\n" + "
\n" + "\n" + "\n" + "\n" + "\n" + "\n"; var gMsgNo = 0; var messagePane = aboutMessage.document.getElementById("messagepane"); add_setup(async function () { folder = await create_folder("jsContentPolicy"); }); /** * Check JavaScript is disabled when loading messages in the message pane. */ add_task(async function testJsInMail() { await be_in_folder(folder); let msgDbHdr = addToFolder("JS test message " + gMsgNo, jsMsgBody, folder); // select the newly created message let msgHdr = select_click_row(gMsgNo); Assert.equal( msgDbHdr, msgHdr, "selected message header should be the same as generated header" ); assert_selected_and_displayed(gMsgNo); await SpecialPowers.spawn(messagePane, [], assertJSDisabled); ++gMsgNo; select_none(); }); /** * Check JavaScript is enabled when loading local content in the message pane. */ add_task(async function testJsInNonMessageContent() { let loadedPromise = BrowserTestUtils.browserLoaded(messagePane); MailE10SUtils.loadURI( messagePane, "data:text/html;charset=utf-8,