summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/openpgp/browser_viewPartialMessage.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/openpgp/browser_viewPartialMessage.js')
-rw-r--r--comm/mail/test/browser/openpgp/browser_viewPartialMessage.js239
1 files changed, 239 insertions, 0 deletions
diff --git a/comm/mail/test/browser/openpgp/browser_viewPartialMessage.js b/comm/mail/test/browser/openpgp/browser_viewPartialMessage.js
new file mode 100644
index 0000000000..53edd7d10a
--- /dev/null
+++ b/comm/mail/test/browser/openpgp/browser_viewPartialMessage.js
@@ -0,0 +1,239 @@
+/* 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 for the display of OpenPGP signed/encrypted state in opened messages.
+ */
+
+"use strict";
+
+const { get_about_message, open_message_from_file } = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+const { close_window } = ChromeUtils.import(
+ "resource://testing-common/mozmill/WindowHelpers.jsm"
+);
+const { waitForCondition } = ChromeUtils.import(
+ "resource://testing-common/mozmill/utils.jsm"
+);
+const { get_notification_button, wait_for_notification_to_show } =
+ ChromeUtils.import(
+ "resource://testing-common/mozmill/NotificationBoxHelpers.jsm"
+ );
+const { OpenPGPTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mozmill/OpenPGPTestUtils.jsm"
+);
+
+const { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+const MSG_TEXT = "Sundays are nothing without callaloo.";
+
+function getMsgBodyTxt(mc) {
+ let msgPane = get_about_message(mc.window).getMessagePaneBrowser();
+ return msgPane.contentDocument.documentElement.textContent;
+}
+
+var aliceAcct;
+
+/**
+ * Set up the base account, identity and keys needed for the tests.
+ */
+add_setup(async function () {
+ aliceAcct = MailServices.accounts.createAccount();
+ aliceAcct.incomingServer = MailServices.accounts.createIncomingServer(
+ "alice",
+ "openpgp.example",
+ "pop3"
+ );
+ let aliceIdentity = MailServices.accounts.createIdentity();
+ aliceIdentity.email = "alice@openpgp.example";
+ aliceAcct.addIdentity(aliceIdentity);
+
+ // Set up the alice's private key.
+ let [id] = await OpenPGPTestUtils.importPrivateKey(
+ window,
+ new FileUtils.File(
+ getTestFilePath(
+ "data/keys/alice@openpgp.example-0xf231550c4f47e38e-secret.asc"
+ )
+ )
+ );
+
+ aliceIdentity.setUnicharAttribute("openpgp_key_id", id);
+
+ // Import and accept the public key for Bob, our verified sender.
+ await OpenPGPTestUtils.importPublicKey(
+ window,
+ new FileUtils.File(
+ getTestFilePath(
+ "data/keys/bob@openpgp.example-0xfbfcc82a015e7330-pub.asc"
+ )
+ )
+ );
+});
+
+let partialInlineTests = [
+ {
+ filename: "partial-encrypt-for-carol-plaintext.eml",
+ expectDecryption: true,
+ expectVerification: false,
+ expectSuccess: false,
+ },
+ {
+ filename: "partial-encrypt-for-carol-html.eml",
+ expectDecryption: true,
+ expectVerification: false,
+ expectSuccess: false,
+ },
+ {
+ filename: "partial-encrypt-for-alice-plaintext.eml",
+ expectDecryption: true,
+ expectVerification: false,
+ expectSuccess: true,
+ },
+ {
+ filename: "partial-encrypt-for-alice-html.eml",
+ expectDecryption: true,
+ expectVerification: false,
+ expectSuccess: true,
+ },
+ {
+ filename: "partial-signed-from-carol-plaintext.eml",
+ expectDecryption: false,
+ expectVerification: true,
+ expectSuccess: false,
+ },
+ {
+ filename: "partial-signed-from-carol-html.eml",
+ expectDecryption: false,
+ expectVerification: true,
+ expectSuccess: false,
+ },
+ {
+ filename: "partial-signed-from-bob-plaintext.eml",
+ expectDecryption: false,
+ expectVerification: true,
+ expectSuccess: true,
+ },
+ {
+ filename: "partial-signed-from-bob-html.eml",
+ expectDecryption: false,
+ expectVerification: true,
+ expectSuccess: true,
+ },
+];
+
+/**
+ * Test the notification/decryption/verification behavior for partially
+ * encrypted/signed inline PGP messages.
+ */
+add_task(async function testPartialInlinePGPDecrypt() {
+ for (let test of partialInlineTests) {
+ if (!test.filename) {
+ continue;
+ }
+
+ info(`Testing partial inline; filename=${test.filename}`);
+
+ // Setup the message.
+ let mc = await open_message_from_file(
+ new FileUtils.File(getTestFilePath("data/eml/" + test.filename))
+ );
+ let aboutMessage = get_about_message(mc.window);
+
+ let notificationBox = "mail-notification-top";
+ let notificationValue = "decryptInlinePG";
+
+ // Ensure the "partially encrypted notification" is visible.
+ wait_for_notification_to_show(
+ aboutMessage,
+ notificationBox,
+ notificationValue
+ );
+
+ let body = getMsgBodyTxt(mc);
+
+ Assert.ok(
+ body.includes("BEGIN PGP"),
+ "unprocessed PGP message should still be shown"
+ );
+
+ Assert.ok(body.includes("prefix"), "prefix should still be shown");
+ Assert.ok(body.includes("suffix"), "suffix should still be shown");
+
+ // Click on the button to process the message subset.
+ let processButton = get_notification_button(
+ aboutMessage,
+ notificationBox,
+ notificationValue,
+ {
+ popup: null,
+ }
+ );
+ EventUtils.synthesizeMouseAtCenter(processButton, {}, aboutMessage);
+
+ // Assert that the message was processed and the partial content reminder
+ // notification is visible.
+ wait_for_notification_to_show(
+ aboutMessage,
+ notificationBox,
+ "decryptInlinePGReminder"
+ );
+
+ // Get updated body text after processing the PGP subset.
+ body = getMsgBodyTxt(mc);
+
+ Assert.ok(!body.includes("prefix"), "prefix should not be shown");
+ Assert.ok(!body.includes("suffix"), "suffix should not be shown");
+
+ if (test.expectDecryption) {
+ let containsSecret = body.includes(
+ "Insert a coin to play your personal lucky melody."
+ );
+ if (test.expectSuccess) {
+ Assert.ok(containsSecret, "secret decrypted content should be shown");
+ Assert.ok(
+ OpenPGPTestUtils.hasEncryptedIconState(aboutMessage.document, "ok"),
+ "decryption success icon is shown"
+ );
+ } else {
+ Assert.ok(
+ !containsSecret,
+ "secret decrypted content should not be shown"
+ );
+ Assert.ok(
+ OpenPGPTestUtils.hasEncryptedIconState(
+ aboutMessage.document,
+ "notok"
+ ),
+ "decryption failure icon is shown"
+ );
+ }
+ } else if (test.expectVerification) {
+ if (test.expectSuccess) {
+ Assert.ok(
+ OpenPGPTestUtils.hasSignedIconState(
+ aboutMessage.document,
+ "verified"
+ ),
+ "ok verification icon is shown for " + test.filename
+ );
+ } else {
+ Assert.ok(
+ OpenPGPTestUtils.hasSignedIconState(aboutMessage.document, "unknown"),
+ "unknown verification icon is shown"
+ );
+ }
+ }
+
+ close_window(mc);
+ }
+});
+
+registerCleanupFunction(async function tearDown() {
+ MailServices.accounts.removeAccount(aliceAcct, true);
+ await OpenPGPTestUtils.removeKeyById("0xf231550c4f47e38e", true);
+});