From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../browser/openpgp/browser_viewPartialMessage.js | 239 +++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 comm/mail/test/browser/openpgp/browser_viewPartialMessage.js (limited to 'comm/mail/test/browser/openpgp/browser_viewPartialMessage.js') 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); +}); -- cgit v1.2.3