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 --- .../extensions/test/xpcshell/rs-blocklist/head.js | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/head.js (limited to 'toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/head.js') diff --git a/toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/head.js b/toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/head.js new file mode 100644 index 0000000000..4007ec6988 --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/rs-blocklist/head.js @@ -0,0 +1,120 @@ +// Appease eslint. +/* import-globals-from ../head_addons.js */ + +var { AppConstants } = ChromeUtils.importESModule( + "resource://gre/modules/AppConstants.sys.mjs" +); + +// Initializing and asserting the expected telemetry is currently conditioned +// on this const. +// TODO(Bug 1752139) remove this along with initializing and asserting the expected +// telemetry also for android build, once `Services.fog.testResetFOG()` is implemented +// for Android builds. +const IS_ANDROID_BUILD = AppConstants.platform === "android"; +const IS_FOG_RESET_SUPPORTED = !IS_ANDROID_BUILD; +const DUMMY_TIME = 939420000000; // new Date(1999, 9, 9) +const DUMMY_STRING = "GleanDummyString"; +let gleanEventCount = 0; + +function _resetMetric(gleanMetric) { + let value = gleanMetric.testGetValue(); + if (value === undefined) { + return; // Never initialized, nothing to reset. + } + if (gleanMetric instanceof Ci.nsIGleanDatetime) { + gleanMetric.set(DUMMY_TIME * 1000); + } else if (gleanMetric instanceof Ci.nsIGleanString) { + gleanMetric.set(DUMMY_STRING); + } else if (gleanMetric instanceof Ci.nsIGleanEvent) { + // NOTE: this doesn't work when there is more than one event; + // for now we assume that there is only one: addonBlockChange. + // Cannot overwrite, so just store the current list length. + gleanEventCount = value.length; + } else { + throw new Error("Unsupported Glean metric type - cannot reset"); + } +} + +function testGetValue(gleanMetric) { + let value = gleanMetric.testGetValue(); + if (value === undefined || IS_FOG_RESET_SUPPORTED) { + return value; + } + if (gleanMetric instanceof Ci.nsIGleanDatetime) { + return value.getTime() === DUMMY_TIME ? undefined : value; + } + if (gleanMetric instanceof Ci.nsIGleanString) { + return value === DUMMY_STRING ? undefined : value; + } + if (gleanMetric instanceof Ci.nsIGleanEvent) { + // NOTE: this doesn't work when there is more than one event; + // for now we assume that there is only one: addonBlockChange. + value = value.slice(gleanEventCount); + return value.length ? value : undefined; + } + throw new Error("Unsupported Glean metric type"); +} + +function resetBlocklistTelemetry() { + if (IS_FOG_RESET_SUPPORTED) { + Services.fog.testResetFOG(); + return; + } + // TODO bug 1752139: fix testResetFOG and remove workarounds. + _resetMetric(Glean.blocklist.addonBlockChange); + _resetMetric(Glean.blocklist.lastModifiedRsAddonsMblf); + _resetMetric(Glean.blocklist.mlbfSource); + _resetMetric(Glean.blocklist.mlbfGenerationTime); + _resetMetric(Glean.blocklist.mlbfStashTimeOldest); + _resetMetric(Glean.blocklist.mlbfStashTimeNewest); +} + +const MLBF_RECORD = { + id: "A blocklist entry that refers to a MLBF file", + // Higher than any last_modified in addons-bloomfilters.json: + last_modified: Date.now(), + attachment: { + size: 32, + hash: "6af648a5d6ce6dbee99b0aab1780d24d204977a6606ad670d5372ef22fac1052", + filename: "does-not-matter.bin", + }, + attachment_type: "bloomfilter-base", + generation_time: 1577833200000, +}; + +function enable_blocklist_v2_instead_of_useMLBF() { + Blocklist.allowDeprecatedBlocklistV2 = true; + Services.prefs.setBoolPref("extensions.blocklist.useMLBF", false); + // Sanity check: blocklist v2 has been enabled. + const { BlocklistPrivate } = ChromeUtils.importESModule( + "resource://gre/modules/Blocklist.sys.mjs" + ); + Assert.equal( + Blocklist.ExtensionBlocklist, + BlocklistPrivate.ExtensionBlocklistRS, + "ExtensionBlocklistRS should have been enabled" + ); +} + +async function load_mlbf_record_as_blob() { + const url = Services.io.newFileURI( + do_get_file("../data/mlbf-blocked1-unblocked2.bin") + ).spec; + Cu.importGlobalProperties(["fetch"]); + return (await fetch(url)).blob(); +} + +function getExtensionBlocklistMLBF() { + // ExtensionBlocklist.Blocklist is an ExtensionBlocklistMLBF if the useMLBF + // pref is set to true. + const { + BlocklistPrivate: { ExtensionBlocklistMLBF }, + } = ChromeUtils.importESModule("resource://gre/modules/Blocklist.sys.mjs"); + if (Blocklist.allowDeprecatedBlocklistV2) { + Assert.ok( + Services.prefs.getBoolPref("extensions.blocklist.useMLBF", false), + "blocklist.useMLBF should be true" + ); + } + return ExtensionBlocklistMLBF; +} -- cgit v1.2.3