summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/openpgp/composition/browser_editDraftTemplate.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/openpgp/composition/browser_editDraftTemplate.js')
-rw-r--r--comm/mail/test/browser/openpgp/composition/browser_editDraftTemplate.js221
1 files changed, 221 insertions, 0 deletions
diff --git a/comm/mail/test/browser/openpgp/composition/browser_editDraftTemplate.js b/comm/mail/test/browser/openpgp/composition/browser_editDraftTemplate.js
new file mode 100644
index 0000000000..e1e49927a6
--- /dev/null
+++ b/comm/mail/test/browser/openpgp/composition/browser_editDraftTemplate.js
@@ -0,0 +1,221 @@
+/* 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";
+
+/**
+ * Tests that drafts and templates get the appropriate security properties
+ * when opened.
+ */
+
+var { open_compose_new_mail, setup_msg_contents } = ChromeUtils.import(
+ "resource://testing-common/mozmill/ComposeHelpers.jsm"
+);
+
+var {
+ be_in_folder,
+ get_about_3pane,
+ get_special_folder,
+ mc,
+ right_click_on_row,
+ select_click_row,
+} = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+var { OpenPGPTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mozmill/OpenPGPTestUtils.jsm"
+);
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+let aliceAcct;
+let aliceIdentity;
+let draftsFolder;
+let templatesFolder;
+
+/**
+ * Helper function to wait for a compose window to get opened.
+ *
+ * @returns The opened window.
+ */
+async function waitForComposeWindow() {
+ return BrowserTestUtils.domWindowOpened(null, async win => {
+ await BrowserTestUtils.waitForEvent(win, "load");
+ return (
+ win.document.documentURI ===
+ "chrome://messenger/content/messengercompose/messengercompose.xhtml"
+ );
+ });
+}
+
+function clearFolder(folder) {
+ return new Promise(resolve => {
+ let msgs = [...folder.msgDatabase.enumerateMessages()];
+
+ folder.deleteMessages(
+ msgs,
+ null,
+ true,
+ false,
+ { OnStopCopy: resolve },
+ false
+ );
+ });
+}
+
+add_setup(async function () {
+ aliceAcct = MailServices.accounts.createAccount();
+ aliceAcct.incomingServer = MailServices.accounts.createIncomingServer(
+ "alice",
+ "openpgp.example",
+ "pop3"
+ );
+ aliceIdentity = MailServices.accounts.createIdentity();
+ aliceIdentity.email = "alice@openpgp.example";
+ aliceAcct.addIdentity(aliceIdentity);
+
+ let [id] = await OpenPGPTestUtils.importPrivateKey(
+ window,
+ new FileUtils.File(
+ getTestFilePath(
+ "../data/keys/alice@openpgp.example-0xf231550c4f47e38e-secret.asc"
+ )
+ )
+ );
+
+ Assert.ok(id, "private key imported");
+
+ aliceIdentity.setUnicharAttribute("openpgp_key_id", id.split("0x").join(""));
+
+ draftsFolder = await get_special_folder(
+ Ci.nsMsgFolderFlags.Drafts,
+ true,
+ aliceAcct.incomingServer.localFoldersServer
+ );
+
+ templatesFolder = await get_special_folder(
+ Ci.nsMsgFolderFlags.Templates,
+ true,
+ aliceAcct.incomingServer.localFoldersServer
+ );
+});
+
+/**
+ * Create draft, make sure the sec properties are as they should after
+ * opening.
+ */
+add_task(async function testDraftSec() {
+ await be_in_folder(draftsFolder);
+ await doTestSecState(true, false); // draft, not secure
+ await doTestSecState(true, true); // draft, secure
+});
+
+/**
+ * Create template, make sure the sec properties are as they should after
+ * opening.
+ */
+add_task(async function testTemplSec() {
+ await be_in_folder(templatesFolder);
+ await doTestSecState(false, false); // template, not secure
+ await doTestSecState(false, true); // template, secure
+});
+
+/**
+ * Drafts/templates are stored encrypted before sent. Test that when composing
+ * and the reopening, the correct encryption states get set.
+ */
+async function doTestSecState(isDraft, secure) {
+ // Make sure to compose from alice.
+ let inbox = aliceAcct.incomingServer.rootFolder.getFolderWithFlags(
+ Ci.nsMsgFolderFlags.Inbox
+ );
+ await be_in_folder(inbox);
+
+ let cwc = open_compose_new_mail();
+ let type = isDraft ? "draft" : "template";
+ let theFolder = isDraft ? draftsFolder : templatesFolder;
+ let subject = `test ${type}; 🤐; secure=${secure}`;
+ setup_msg_contents(
+ cwc,
+ "test@example.invalid",
+ subject,
+ `This is a ${type}; secure=${secure}`
+ );
+ info(`Testing ${type}; secure=${secure}`);
+
+ if (secure) {
+ // Tick "Require encryption".
+ // Encryption and signing should get turned on.
+ await OpenPGPTestUtils.toggleMessageEncryption(cwc.window);
+ }
+
+ if (isDraft) {
+ cwc.window.SaveAsDraft();
+ } else {
+ cwc.window.SaveAsTemplate();
+ }
+
+ await TestUtils.waitForCondition(
+ () => !cwc.window.gSaveOperationInProgress && !cwc.window.gWindowLock,
+ "timeout waiting for saving to finish."
+ );
+
+ info(`Saved as ${type} with secure=${secure}`);
+ cwc.window.close();
+
+ await be_in_folder(theFolder);
+ select_click_row(0);
+
+ info(`Will open the ${type}`);
+ let draftWindowPromise = waitForComposeWindow();
+ select_click_row(0);
+ await right_click_on_row(0);
+
+ let about3Pane = get_about_3pane();
+ let mailContext = about3Pane.document.getElementById("mailContext");
+ if (isDraft) {
+ mailContext.activateItem(
+ about3Pane.document.getElementById("mailContext-editDraftMsg")
+ );
+ } else {
+ mailContext.activateItem(
+ about3Pane.document.getElementById("mailContext-newMsgFromTemplate")
+ );
+ }
+
+ let draftWindow = await draftWindowPromise;
+
+ Assert.equal(
+ draftWindow.document.getElementById("msgSubject").value,
+ subject,
+ "subject should be decrypted"
+ );
+
+ info(`Checking security props in the UI...`);
+
+ if (!secure) {
+ // Wait some to make sure it won't (soon) be showing.
+ // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
+ await new Promise(resolve => setTimeout(resolve, 100));
+ Assert.ok(
+ !draftWindow.document.getElementById("button-encryption").checked,
+ "should not use encryption"
+ );
+ } else {
+ await TestUtils.waitForCondition(
+ () => draftWindow.document.getElementById("button-encryption").checked,
+ "waited for encryption to get turned on"
+ );
+ }
+
+ draftWindow.close();
+ clearFolder(theFolder);
+}
+
+registerCleanupFunction(async function () {
+ MailServices.accounts.removeAccount(aliceAcct, true);
+ await OpenPGPTestUtils.removeKeyById("0xf231550c4f47e38e", true);
+});