summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/openpgp/browser_openPGPDrafts.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/openpgp/browser_openPGPDrafts.js')
-rw-r--r--comm/mail/test/browser/openpgp/browser_openPGPDrafts.js162
1 files changed, 162 insertions, 0 deletions
diff --git a/comm/mail/test/browser/openpgp/browser_openPGPDrafts.js b/comm/mail/test/browser/openpgp/browser_openPGPDrafts.js
new file mode 100644
index 0000000000..8a7ab4f945
--- /dev/null
+++ b/comm/mail/test/browser/openpgp/browser_openPGPDrafts.js
@@ -0,0 +1,162 @@
+/* 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";
+
+const { save_compose_message } = ChromeUtils.import(
+ "resource://testing-common/mozmill/ComposeHelpers.jsm"
+);
+const {
+ open_message_from_file,
+ be_in_folder,
+ get_about_message,
+ get_special_folder,
+ select_click_row,
+ open_selected_message,
+} = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+const { close_window } = ChromeUtils.import(
+ "resource://testing-common/mozmill/WindowHelpers.jsm"
+);
+const { OpenPGPTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mozmill/OpenPGPTestUtils.jsm"
+);
+
+const { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+function waitForComposeWindow() {
+ return BrowserTestUtils.domWindowOpened(null, async win => {
+ await BrowserTestUtils.waitForEvent(win, "load");
+ await BrowserTestUtils.waitForEvent(win, "focus", true);
+ return (
+ win.document.documentURI ===
+ "chrome://messenger/content/messengercompose/messengercompose.xhtml"
+ );
+ });
+}
+
+let aliceAcct;
+let aliceIdentity;
+let initialKeyIdPref = "";
+
+/**
+ * Setup a mail account with a private key and an imported public key for an
+ * address we can send messages to.
+ */
+add_setup(async function () {
+ aliceAcct = MailServices.accounts.createAccount();
+ aliceAcct.incomingServer = MailServices.accounts.createIncomingServer(
+ "alice",
+ "openpgp.example",
+ "imap"
+ );
+ 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 id received");
+
+ initialKeyIdPref = aliceIdentity.getUnicharAttribute("openpgp_key_id");
+ aliceIdentity.setUnicharAttribute("openpgp_key_id", id.split("0x").join(""));
+
+ await OpenPGPTestUtils.importPublicKey(
+ window,
+ new FileUtils.File(
+ getTestFilePath(
+ "data/keys/bob@openpgp.example-0xfbfcc82a015e7330-pub.asc"
+ )
+ )
+ );
+});
+
+/**
+ * Test the "Re:" prefix remains in the compose window when opening a draft
+ * reply for an encrypted message. See bug 1661510.
+ */
+add_task(async function testDraftReplyToEncryptedMessageKeepsRePrefix() {
+ let draftsFolder = await get_special_folder(
+ Ci.nsMsgFolderFlags.Drafts,
+ true,
+ aliceAcct.incomingServer.localFoldersServer
+ );
+
+ await be_in_folder(draftsFolder);
+
+ // Delete the messages we saved to drafts.
+ registerCleanupFunction(
+ async () =>
+ new Promise(resolve => {
+ let msgs = [...draftsFolder.msgDatabase.enumerateMessages()];
+
+ draftsFolder.deleteMessages(
+ msgs,
+ null,
+ true,
+ false,
+ { OnStopCopy: resolve },
+ false
+ );
+ })
+ );
+
+ // Test signed-encrypted and unsigned-encrypted messages.
+ let msgFiles = [
+ "data/eml/signed-by-0xfbfcc82a015e7330-encrypted-to-0xf231550c4f47e38e.eml",
+ "data/eml/unsigned-encrypted-to-0xf231550c4f47e38e-from-0xfbfcc82a015e7330.eml",
+ ];
+ let wantedRow = 0;
+
+ for (let msg of msgFiles) {
+ let mc = await open_message_from_file(
+ new FileUtils.File(getTestFilePath(msg))
+ );
+
+ let replyWindowPromise = waitForComposeWindow();
+ get_about_message(mc.window)
+ .document.querySelector("#hdrReplyButton")
+ .click();
+ close_window(mc);
+
+ let replyWindow = await replyWindowPromise;
+ await save_compose_message(replyWindow);
+ replyWindow.close();
+
+ await TestUtils.waitForCondition(
+ () => draftsFolder.getTotalMessages(true) > 0,
+ "message saved to drafts folder"
+ );
+
+ let draftWindowPromise = waitForComposeWindow();
+ select_click_row(wantedRow);
+ ++wantedRow;
+ open_selected_message();
+
+ let draftWindow = await draftWindowPromise;
+
+ Assert.ok(
+ draftWindow.document.querySelector("#msgSubject").value.startsWith("Re:"),
+ "the Re: prefix is applied"
+ );
+
+ draftWindow.close();
+ }
+});
+
+registerCleanupFunction(function tearDown() {
+ aliceIdentity.setUnicharAttribute("openpgp_key_id", initialKeyIdPref);
+ MailServices.accounts.removeIncomingServer(aliceAcct.incomingServer, true);
+ MailServices.accounts.removeAccount(aliceAcct);
+});