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 --- .../rs-blocklist/test_android_blocklist_dump.js | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/test_android_blocklist_dump.js (limited to 'toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/test_android_blocklist_dump.js') diff --git a/toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/test_android_blocklist_dump.js b/toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/test_android_blocklist_dump.js new file mode 100644 index 0000000000..c0221c446b --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/test_android_blocklist_dump.js @@ -0,0 +1,120 @@ +/* Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Blocklist v3 will be enabled on release in bug 1824863. +// TODO bug 1824863: Remove this when blocklist v3 is enabled. +const IS_USING_BLOCKLIST_V3 = AppConstants.NIGHTLY_BUILD; + +// When bug 1639050 is fixed, this whole test can be removed as it is already +// covered by test_blocklist_mlbf_dump.js. + +// A known blocked version from bug 1626602. +// Same as in test_blocklist_mlbf_dump.js. +const blockedAddon = { + id: "{6f62927a-e380-401a-8c9e-c485b7d87f0d}", + version: "9.2.0", + signedDate: new Date(1588098908496), // 2020-04-28 (dummy date) + signedState: AddonManager.SIGNEDSTATE_SIGNED, +}; + +// A known blocked version from bug 1681884, blocklist v3 only but not v2, +// i.e. not listed in services/settings/dumps/blocklists/addons.json. +const blockedAddonV3only = { + id: "{011f65f0-7143-470a-83ca-20ec4297f3f4}", + version: "1.0", + // omiting signedDate/signedState: in blocklist v2 those don't matter. + // In v3 those do matter, so if blocklist v3 were to be enabled, then + // the test would fail. +}; + +// A known add-on that is not blocked, as of writing. It is likely not going +// to be blocked because it does not have any executable code. +// Same as in test_blocklist_mlbf_dump.js. +const nonBlockedAddon = { + id: "disable-ctrl-q-and-cmd-q@robwu.nl", + version: "1", + signedDate: new Date(1482430349000), // 2016-12-22 (actual signing time). + signedState: AddonManager.SIGNEDSTATE_SIGNED, +}; + +add_task( + { skip_if: () => IS_USING_BLOCKLIST_V3 }, + async function verify_blocklistv2_dump_first_run() { + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1"); + + Assert.equal( + await Blocklist.getAddonBlocklistState(blockedAddon), + Ci.nsIBlocklistService.STATE_BLOCKED, + "A add-on that is known to be on the v2 blocklist should be blocked" + ); + Assert.equal( + await Blocklist.getAddonBlocklistState(blockedAddonV3only), + Ci.nsIBlocklistService.STATE_NOT_BLOCKED, + "An add-on that is not part of the v2 blocklist should not be blocked" + ); + + Assert.equal( + await Blocklist.getAddonBlocklistState(nonBlockedAddon), + Ci.nsIBlocklistService.STATE_NOT_BLOCKED, + "A known non-blocked add-on should not be blocked" + ); + } +); + +add_task( + { skip_if: () => !IS_USING_BLOCKLIST_V3 }, + async function verify_a_known_blocked_add_on_is_not_detected_as_blocked_at_first_run() { + const MLBF_LOAD_RESULTS = []; + const MLBF_LOAD_ATTEMPTS = []; + const onLoadAttempts = record => MLBF_LOAD_ATTEMPTS.push(record); + const onLoadResult = promise => MLBF_LOAD_RESULTS.push(promise); + spyOnExtensionBlocklistMLBF(onLoadAttempts, onLoadResult); + + // The addons blocklist data is not packaged and will be downloaded after install + Assert.equal( + await Blocklist.getAddonBlocklistState(blockedAddon), + Ci.nsIBlocklistService.STATE_NOT_BLOCKED, + "A known blocked add-on should not be blocked at first" + ); + + await Assert.rejects( + MLBF_LOAD_RESULTS[0], + /DownloadError: Could not download addons-mlbf.bin/, + "Should not find any packaged attachment" + ); + + MLBF_LOAD_ATTEMPTS.length = 0; + MLBF_LOAD_RESULTS.length = 0; + + Assert.equal( + await Blocklist.getAddonBlocklistState(blockedAddon), + Ci.nsIBlocklistService.STATE_NOT_BLOCKED, + "Blocklist is still not populated" + ); + Assert.deepEqual( + MLBF_LOAD_ATTEMPTS, + [], + "MLBF is not fetched again after the first lookup" + ); + } +); + +function spyOnExtensionBlocklistMLBF(onLoadAttempts, onLoadResult) { + const ExtensionBlocklistMLBF = getExtensionBlocklistMLBF(); + // Tapping into the internals of ExtensionBlocklistMLBF._fetchMLBF to observe + const originalFetchMLBF = ExtensionBlocklistMLBF._fetchMLBF; + ExtensionBlocklistMLBF._fetchMLBF = async function (record) { + onLoadAttempts(record); + let promise = originalFetchMLBF.apply(this, arguments); + onLoadResult(promise); + return promise; + }; + + registerCleanupFunction( + () => (ExtensionBlocklistMLBF._fetchMLBF = originalFetchMLBF) + ); + + return ExtensionBlocklistMLBF; +} -- cgit v1.2.3