diff -Nru thunderbird-78.12.0+build1/BUILDID thunderbird-78.12.0+build2/BUILDID --- thunderbird-78.12.0+build1/BUILDID 2021-07-08 13:09:15.000000000 +0000 +++ thunderbird-78.12.0+build2/BUILDID 2021-07-13 10:08:19.000000000 +0000 @@ -1 +1 @@ -20210707211842 \ No newline at end of file +20210712120515 \ No newline at end of file diff -Nru thunderbird-78.12.0+build1/comm/mail/base/modules/ExtensionsUI.jsm thunderbird-78.12.0+build2/comm/mail/base/modules/ExtensionsUI.jsm --- thunderbird-78.12.0+build1/comm/mail/base/modules/ExtensionsUI.jsm 2021-07-08 13:01:57.000000000 +0000 +++ thunderbird-78.12.0+build2/comm/mail/base/modules/ExtensionsUI.jsm 2021-07-13 10:01:19.000000000 +0000 @@ -19,6 +19,7 @@ AppMenuNotifications: "resource://gre/modules/AppMenuNotifications.jsm", BrowserUtils: "resource://gre/modules/BrowserUtils.jsm", ExtensionData: "resource://gre/modules/Extension.jsm", + ExtensionParent: "resource://gre/modules/ExtensionParent.jsm", PluralForm: "resource://gre/modules/PluralForm.jsm", Services: "resource://gre/modules/Services.jsm", setTimeout: "resource://gre/modules/Timer.jsm", @@ -856,10 +857,19 @@ } } - // If this is an update with no promptable permissions, just apply it - if (info.type == "update" && !strings.msgs.length) { - info.resolve(); - return; + // If this is an update with no promptable permissions, just apply it. Skip + // prompts also, if this add-on already has full access via experiment_apis. + if (info.type == "update") { + let extension = ExtensionParent.GlobalManager.getExtension( + info.addon.id + ); + if ( + !strings.msgs.length || + (extension && extension.manifest.experiment_apis) + ) { + info.resolve(); + return; + } } let histkey; @@ -924,8 +934,13 @@ info.type = "update"; let strings = this._buildStrings(info); - // If we don't prompt for any new permissions, just apply it - if (!strings.msgs.length) { + // If we don't prompt for any new permissions, just apply it. Skip prompts + // also, if this add-on already has full access via experiment_apis. + let extension = ExtensionParent.GlobalManager.getExtension(info.addon.id); + if ( + !strings.msgs.length || + (extension && extension.manifest.experiment_apis) + ) { info.resolve(); return; } diff -Nru thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_extension_install_experiment.js thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_extension_install_experiment.js --- thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_extension_install_experiment.js 2021-07-08 13:01:57.000000000 +0000 +++ thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_extension_install_experiment.js 2021-07-13 10:01:19.000000000 +0000 @@ -70,7 +70,9 @@ let result = await installPromise; ok(!result, "Installation was cancelled"); - let addon = await AddonManager.getAddonByID("thisisatest@test.invalid"); + let addon = await AddonManager.getAddonByID( + "experiment_test@tests.mozilla.org" + ); is(addon, null, "Extension is not installed"); let tabmail = document.getElementById("tabmail"); diff -Nru thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_extension_update_background.js thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_extension_update_background.js --- thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_extension_update_background.js 2021-07-08 13:01:57.000000000 +0000 +++ thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_extension_update_background.js 2021-07-13 10:01:19.000000000 +0000 @@ -11,6 +11,7 @@ const ID = "update2@tests.mozilla.org"; const ID_ICON = "update_icon2@tests.mozilla.org"; const ID_PERMS = "update_perms@tests.mozilla.org"; +const ID_EXPERIMENT = "experiment_update@test.mozilla.org"; const FAKE_INSTALL_TELEMETRY_SOURCE = "fake-install-source"; requestLongerTimeout(2); @@ -245,6 +246,7 @@ checkDefaultIcon ) ); + function checkNonDefaultIcon(icon) { // The icon should come from the extension, don't bother with the precise // path, just make sure we've got a jar url pointing to the right path @@ -260,3 +262,13 @@ checkNonDefaultIcon ) ); + +// Check bug 1710359 did not introduce a loophole and a simple WebExtension being +// upgraded to an Experiment prompts for the permission update. +add_task(() => + backgroundUpdateTest( + `${BASE}/browser_webext_experiment_update1.xpi`, + ID_EXPERIMENT, + checkDefaultIcon + ) +); diff -Nru thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_extension_update_background_noprompt.js thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_extension_update_background_noprompt.js --- thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_extension_update_background_noprompt.js 2021-07-08 13:01:57.000000000 +0000 +++ thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_extension_update_background_noprompt.js 2021-07-13 10:01:19.000000000 +0000 @@ -14,6 +14,7 @@ const ID_PERMS = "update_perms@tests.mozilla.org"; const ID_ORIGINS = "update_origins@tests.mozilla.org"; +const ID_EXPERIMENT = "experiment_test@tests.mozilla.org"; function getBadgeStatus() { let menuButton = document.getElementById("button-appmenu"); @@ -111,3 +112,8 @@ add_task(() => testNoPrompt(`${BASE}/browser_webext_update_origins1.xpi`, ID_ORIGINS) ); + +// Test that an Experiment is not prompting for additional permissions. +add_task(() => + testNoPrompt(`${BASE}/browser_webext_experiment.xpi`, ID_EXPERIMENT) +); diff -Nru thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser.ini thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser.ini --- thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser.ini 2021-07-08 13:01:57.000000000 +0000 +++ thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser.ini 2021-07-13 10:01:19.000000000 +0000 @@ -13,6 +13,8 @@ file_install_extensions.html browser_webext_experiment.xpi browser_webext_experiment_permissions.xpi + browser_webext_experiment_update1.xpi + browser_webext_experiment_update2.xpi browser_webext_permissions.xpi browser_webext_nopermissions.xpi browser_webext_unsigned.xpi diff -Nru thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_update_interactive_noprompt.js thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_update_interactive_noprompt.js --- thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_update_interactive_noprompt.js 2021-07-08 13:01:57.000000000 +0000 +++ thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_update_interactive_noprompt.js 2021-07-13 10:01:19.000000000 +0000 @@ -1,15 +1,15 @@ -// Set some prefs that apply to all the tests in this file +// Set some prefs that apply to all the tests in this file. add_task(async function setup() { await SpecialPowers.pushPrefEnv({ set: [ - // We don't have pre-pinned certificates for the local mochitest server + // We don't have pre-pinned certificates for the local mochitest server. ["extensions.install.requireBuiltInCerts", false], ["extensions.update.requireBuiltInCerts", false], - // Don't require the extensions to be signed + // Don't require the extensions to be signed. ["xpinstall.signatures.required", false], - // Point updates to the local mochitest server + // Point updates to the local mochitest server. ["extensions.update.url", `${BASE}/browser_webext_update.json`], ], }); @@ -65,10 +65,18 @@ ); // Test that an update that narrows origin permissions is just applied without -// showing a notification prompt +// showing a notification prompt. add_task(() => testUpdateNoPrompt( "browser_webext_update_origins1.xpi", "update_origins@tests.mozilla.org" ) ); + +// Test that an Experiment is not prompting for additional permissions. +add_task(() => + testUpdateNoPrompt( + "browser_webext_experiment.xpi", + "experiment_test@tests.mozilla.org" + ) +); Binary files /tmp/tmp3fssoafv/R6jbM1AVJB/thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_webext_experiment_permissions.xpi and /tmp/tmp3fssoafv/qHzlyi3Q2J/thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_webext_experiment_permissions.xpi differ Binary files /tmp/tmp3fssoafv/R6jbM1AVJB/thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_webext_experiment_update1.xpi and /tmp/tmp3fssoafv/qHzlyi3Q2J/thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_webext_experiment_update1.xpi differ Binary files /tmp/tmp3fssoafv/R6jbM1AVJB/thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_webext_experiment_update2.xpi and /tmp/tmp3fssoafv/qHzlyi3Q2J/thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_webext_experiment_update2.xpi differ Binary files /tmp/tmp3fssoafv/R6jbM1AVJB/thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_webext_experiment.xpi and /tmp/tmp3fssoafv/qHzlyi3Q2J/thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_webext_experiment.xpi differ diff -Nru thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_webext_update.json thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_webext_update.json --- thunderbird-78.12.0+build1/comm/mail/base/test/webextensions/browser_webext_update.json 2021-07-08 13:01:57.000000000 +0000 +++ thunderbird-78.12.0+build2/comm/mail/base/test/webextensions/browser_webext_update.json 2021-07-13 10:01:19.000000000 +0000 @@ -51,6 +51,32 @@ } } ] + }, + "experiment_test@tests.mozilla.org": { + "updates": [ + { + "version": "2.0", + "update_link": "https://example.com/browser/comm/mail/base/test/webextensions/browser_webext_experiment_permissions.xpi", + "applications": { + "gecko": { + "strict_min_version": "1" + } + } + } + ] + }, + "experiment_update@test.mozilla.org": { + "updates": [ + { + "version": "2.0", + "update_link": "https://example.com/browser/comm/mail/base/test/webextensions/browser_webext_experiment_update2.xpi", + "applications": { + "gecko": { + "strict_min_version": "1" + } + } + } + ] } } } diff -Nru thunderbird-78.12.0+build1/comm/mail/components/extensions/parent/ext-mail.js thunderbird-78.12.0+build2/comm/mail/components/extensions/parent/ext-mail.js --- thunderbird-78.12.0+build1/comm/mail/components/extensions/parent/ext-mail.js 2021-07-08 13:01:57.000000000 +0000 +++ thunderbird-78.12.0+build2/comm/mail/components/extensions/parent/ext-mail.js 2021-07-13 10:01:19.000000000 +0000 @@ -1576,8 +1576,12 @@ function traverseSubfolders(folder, accountId) { let f = convertFolder(folder, accountId); f.subFolders = []; - for (let subFolder of fixIterator(folder.subFolders, Ci.nsIMsgFolder)) { - f.subFolders.push(traverseSubfolders(subFolder, accountId || f.accountId)); + if (folder.hasSubFolders) { + for (let subFolder of fixIterator(folder.subFolders, Ci.nsIMsgFolder)) { + f.subFolders.push( + traverseSubfolders(subFolder, accountId || f.accountId) + ); + } } return f; } diff -Nru thunderbird-78.12.0+build1/comm/SOURCE_CHANGESET thunderbird-78.12.0+build2/comm/SOURCE_CHANGESET --- thunderbird-78.12.0+build1/comm/SOURCE_CHANGESET 2021-07-08 13:01:58.000000000 +0000 +++ thunderbird-78.12.0+build2/comm/SOURCE_CHANGESET 2021-07-13 10:01:20.000000000 +0000 @@ -1 +1 @@ -a5fa5ecaf760c673ff1a54aa2dad69f29a932f90 \ No newline at end of file +6796ff47626a009d169a1e9fd1f307a6c14b7ed5 \ No newline at end of file diff -Nru thunderbird-78.12.0+build1/debian/changelog thunderbird-78.12.0+build2/debian/changelog --- thunderbird-78.12.0+build1/debian/changelog 2021-07-09 06:03:44.000000000 +0000 +++ thunderbird-78.12.0+build2/debian/changelog 2021-07-13 15:19:15.000000000 +0000 @@ -1,3 +1,9 @@ +thunderbird (1:78.12.0+build2-0ubuntu0.20.10.1) groovy; urgency=medium + + * New upstream stable release (78.12.0build2) + + -- Olivier Tilloy Tue, 13 Jul 2021 17:19:15 +0200 + thunderbird (1:78.12.0+build1-0ubuntu0.20.10.1) groovy; urgency=medium * New upstream stable release (78.12.0build1)