Bug 491921 Write tests for different content types for the content policy - Fix js content policy test and include in mozmill tests. r=asuth
--HG-- rename : mail/test/mozmill/content-policy/test-msg-content-policy.js => mail/test/mozmill/content-policy/test-js-content-policy.js
This commit is contained in:
Родитель
351de08db4
Коммит
eebeed4f69
|
@ -0,0 +1,156 @@
|
|||
/**
|
||||
* Test whether javascript in a local message works.
|
||||
*
|
||||
* @note This assumes an existing local account, and will cause the Trash
|
||||
* folder of that account to be emptied multiple times.
|
||||
*/
|
||||
|
||||
//
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2001
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Dan Mosedale <dmose@mozilla.org>
|
||||
* Joey Minta <jminta@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
var MODULE_NAME = 'test-js-content-policy';
|
||||
|
||||
var RELATIVE_ROOT = '../shared-modules';
|
||||
var MODULE_REQUIRES = ['folder-display-helpers', 'window-helpers'];
|
||||
|
||||
var folder = null;
|
||||
|
||||
var setupModule = function (module) {
|
||||
let fdh = collector.getModule('folder-display-helpers');
|
||||
fdh.installInto(module);
|
||||
let wh = collector.getModule('window-helpers');
|
||||
wh.installInto(module);
|
||||
|
||||
folder = create_folder("jsContentPolicy");
|
||||
};
|
||||
|
||||
function addToFolder(aSubject, aBody, aFolder) {
|
||||
|
||||
let msgId = Components.classes["@mozilla.org/uuid-generator;1"]
|
||||
.getService(Components.interfaces.nsIUUIDGenerator)
|
||||
.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(Components.interfaces.nsIMsgLocalMailFolder);
|
||||
aFolder.gettingNewMessages = true;
|
||||
|
||||
aFolder.addMessage(source);
|
||||
aFolder.gettingNewMessages = false;
|
||||
|
||||
return aFolder.msgDatabase.getMsgHdrForMessageID(msgId);
|
||||
}
|
||||
|
||||
const jsMsgBody = '<!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' +
|
||||
'this is a test<big><big><big> stuff\n' +
|
||||
'<br><br>\n' +
|
||||
'</big></big></big>\n' +
|
||||
'<script language="javascript"/>\n'+
|
||||
'var jsIsTurnedOn = true;\n' +
|
||||
'</script>\n' +
|
||||
'\n' +
|
||||
'</body>\n' +
|
||||
'</html>\n';
|
||||
|
||||
let gMsgNo = 0;
|
||||
|
||||
function checkJsInMail() {
|
||||
let msgDbHdr = addToFolder("JS test message " + gMsgNo, jsMsgBody, 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);
|
||||
|
||||
// This works because messagepane is type=content-primary in these tests.
|
||||
if (typeof mozmill.getMail3PaneController().window.content.wrappedJSObject.jsIsTurnedOn != 'undefined')
|
||||
throw new Error("JS is turned on in mail - it shouldn't be.");
|
||||
|
||||
++gMsgNo;
|
||||
}
|
||||
|
||||
function checkJsInNonMessageContent() {
|
||||
// Deselect everything so we can load our content
|
||||
select_none();
|
||||
|
||||
// load something non-message-like in the message pane
|
||||
mozmill.getMail3PaneController().window.GetMessagePaneFrame().location.href =
|
||||
"data:text/html;charset=utf-8,<script>var jsIsTurnedOn%3Dtrue%3B<%2Fscript>bar";
|
||||
|
||||
wait_for_message_display_completion();
|
||||
|
||||
if (!mozmill.getMail3PaneController().window.content.wrappedJSObject.jsIsTurnedOn)
|
||||
throw new Error("JS is not turned on in content - it should be.");
|
||||
}
|
||||
|
||||
function test_jsContentPolicy() {
|
||||
let folderTab = mc.tabmail.currentTabInfo;
|
||||
be_in_folder(folder);
|
||||
|
||||
assert_nothing_selected();
|
||||
|
||||
// run each test twice to ensure that there aren't any weird side effects,
|
||||
// given that these loads all happen in the same docshell
|
||||
checkJsInMail();
|
||||
checkJsInNonMessageContent();
|
||||
|
||||
checkJsInMail();
|
||||
checkJsInNonMessageContent();
|
||||
}
|
|
@ -1,216 +0,0 @@
|
|||
/**
|
||||
* Test whether javascript in a local message works.
|
||||
*
|
||||
* @note This assumes an existing local account, and will cause the Trash
|
||||
* folder of that account to be emptied multiple times.
|
||||
*/
|
||||
|
||||
//
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2001
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Dan Mosedale <dmose@mozilla.org>
|
||||
* Joey Minta <jminta@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// XXXdmose MozMill doesn't have much asynchronicity support in it yet. Once
|
||||
// that changes, we should be able to more thoroughly test that there aren't
|
||||
// any races here. As it stands, we use controller.sleep() a lot to wait for
|
||||
// things to finish loading before proceeding. Some of those calls could
|
||||
// probably be replaced with waitForEval/waitForPageLoad or a hypothetical
|
||||
// waitForEvent.
|
||||
|
||||
var controller = {};
|
||||
Components.utils.import('resource://mozmill/modules/controller.js', controller);
|
||||
|
||||
var jum = {};
|
||||
Components.utils.import('resource://mozmill/modules/jum.js', jum);
|
||||
|
||||
Components.utils.import("resource://gre/modules/iteratorUtils.jsm");
|
||||
|
||||
var mainWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"]
|
||||
.getService(Components.interfaces.nsIWindowMediator)
|
||||
.getMostRecentWindow("mail:3pane");
|
||||
var MC = new controller.MozMillController(mainWindow);
|
||||
|
||||
function addToFolder(aSubject, aBody, aFolder) {
|
||||
|
||||
let msgId = Components.classes["@mozilla.org/uuid-generator;1"]
|
||||
.getService(Components.interfaces.nsIUUIDGenerator)
|
||||
.generateUUID() +"@mozillamessaging.com";
|
||||
|
||||
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.com>\n" +
|
||||
"User-Agent: Thunderbird 3.0a2pre (Macintosh/2008052122)\n" +
|
||||
"MIME-Version: 1.0\n" +
|
||||
"To: recipient@mozillamessaging.com\n" +
|
||||
"Subject: " + aSubject + "\n" +
|
||||
"Content-Type: text/html; charset=ISO-8859-1\n" +
|
||||
"Content-Transfer-Encoding: 7bit\n" +
|
||||
"\n" + aBody + "\n";
|
||||
|
||||
aFolder.QueryInterface(Components.interfaces.nsIMsgLocalMailFolder);
|
||||
aFolder.gettingNewMessages = true;
|
||||
|
||||
// XXX this causes an identity NS_WARNING for unknown reasons
|
||||
aFolder.addMessage(source);
|
||||
aFolder.gettingNewMessages = false;
|
||||
aFolder.updateFolder(mainWindow.msgWindow);
|
||||
|
||||
return aFolder.msgDatabase.getMsgHdrForMessageID(msgId);
|
||||
}
|
||||
|
||||
const jsMsgBody = '<!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' +
|
||||
'this is a test<big><big><big> stuff\n' +
|
||||
'<br><br>\n' +
|
||||
'</big></big></big>\n' +
|
||||
'<script language="javascript"/>\n'+
|
||||
'var jsIsTurnedOn = true;\n' +
|
||||
'</script>\n' +
|
||||
'\n' +
|
||||
'</body>\n' +
|
||||
'</html>\n';
|
||||
|
||||
var Cc = Components.classes;
|
||||
var Ci = Components.interfaces;
|
||||
|
||||
const kTestFolderName = "testFolder";
|
||||
|
||||
let am = Cc["@mozilla.org/messenger/account-manager;1"].
|
||||
getService(Ci.nsIMsgAccountManager);
|
||||
|
||||
let localRootFolder = am.localFoldersServer.rootFolder;
|
||||
|
||||
function ensureFreshTestFolder() {
|
||||
|
||||
//delete any existing test folder
|
||||
try {
|
||||
// get trash folder
|
||||
let trashFolder = localRootFolder.getChildNamed("Trash");
|
||||
|
||||
// empty it without prompting
|
||||
trashFolder.emptyTrash(mainWindow.msgWindow, null);
|
||||
|
||||
// try and get any existing test folder
|
||||
let oldFolder = localRootFolder.getChildNamed(kTestFolderName);
|
||||
|
||||
// blow it away
|
||||
let array = toXPCOMArray([oldFolder], Ci.nsIMutableArray);
|
||||
oldFolder.parent.deleteSubFolders(array, null);
|
||||
} catch (ex) {
|
||||
dump("ignoring old folder deletion exception" + ex + "\n");
|
||||
}
|
||||
|
||||
try {
|
||||
localRootFolder.createSubfolder(kTestFolderName, mainWindow.msgWindow);
|
||||
} catch (ex) {
|
||||
dump("ignoring createSubfolder exception\n");
|
||||
}
|
||||
|
||||
return localRootFolder.findSubFolder(kTestFolderName);
|
||||
}
|
||||
|
||||
let gMsgNo = 0;
|
||||
|
||||
function checkJsInMail(aLocalTestFolder) {
|
||||
|
||||
let msgDbHdr = addToFolder("JS test message " + gMsgNo, jsMsgBody,
|
||||
aLocalTestFolder);
|
||||
|
||||
// select the newly created message
|
||||
mainWindow.GetThreadTree().view.selection.select(gMsgNo);
|
||||
MC.sleep(10000);
|
||||
|
||||
jum.assertUndefined(mainWindow.content.wrappedJSObject.jsIsTurnedOn);
|
||||
|
||||
++gMsgNo;
|
||||
return;
|
||||
}
|
||||
|
||||
function checkJsInNonMessageContent() {
|
||||
|
||||
// get rid of the header pane to make the display less confusing
|
||||
// to developers debugging this test.
|
||||
// XXX should perhaps clear the threadpane selection too for the same reason
|
||||
mainWindow.HideMessageHeaderPane();
|
||||
|
||||
// load something non-message-like in the message pane
|
||||
mainWindow.GetMessagePaneFrame().location.href =
|
||||
"data:text/html;charset=utf-8,<script>jsIsTurnedOn%3Dtrue%3B<%2Fscript>bar";
|
||||
MC.sleep(10000);
|
||||
|
||||
jum.assertTrue(mainWindow.content.wrappedJSObject.jsIsTurnedOn);
|
||||
return;
|
||||
}
|
||||
|
||||
// run each test twice to ensure that there aren't any weird side effects,
|
||||
// given that these loads all happen in the same docshell
|
||||
function test_jsContentPolicy() {
|
||||
dump("test_jsContentPolicy() starting\n");
|
||||
|
||||
// start from a known state.
|
||||
mainWindow.ClearMessagePane();
|
||||
MC.sleep(10000);
|
||||
|
||||
// blow away any existing test folder and create a fresh one
|
||||
let localTestFolder = ensureFreshTestFolder();
|
||||
|
||||
// XXXdmose icky workaround: if we don't select some other folder first,
|
||||
// selecting the test folder doesn't always cause the test folder to load,
|
||||
// perhaps because something thinks it has already loaded. Perhaps this is
|
||||
// related to commandglue.js:FolderPaneSelectionChanged() goofiness.
|
||||
let inbox = localRootFolder.getChildNamed("Inbox");
|
||||
mainWindow.gFolderTreeView.selectFolder(inbox);
|
||||
|
||||
// this starts the folder loading
|
||||
mainWindow.gFolderTreeView.selectFolder(localTestFolder);
|
||||
MC.sleep(10000);
|
||||
|
||||
checkJsInMail(localTestFolder);
|
||||
checkJsInNonMessageContent();
|
||||
checkJsInMail(localTestFolder);
|
||||
checkJsInNonMessageContent();
|
||||
|
||||
dump("finished test_jsContentPolicy()\n");
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
folder-display
|
||||
junk-commands
|
||||
search-window
|
||||
content-policy
|
||||
|
|
Загрузка…
Ссылка в новой задаче