summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_geckoProfiler_schema.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_geckoProfiler_schema.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_geckoProfiler_schema.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_geckoProfiler_schema.js b/toolkit/components/extensions/test/xpcshell/test_ext_geckoProfiler_schema.js
new file mode 100644
index 0000000000..6d96731a3c
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_geckoProfiler_schema.js
@@ -0,0 +1,68 @@
+"use strict";
+
+add_task(async function () {
+ // The startupCache is removed whenever the buildid changes by code that runs
+ // during Firefox startup but not during xpcshell startup, remove it by hand
+ // before running this test to avoid failures with --conditioned-profile
+ let file = PathUtils.join(
+ Services.dirsvc.get("ProfLD", Ci.nsIFile).path,
+ "startupCache",
+ "webext.sc.lz4"
+ );
+ await IOUtils.remove(file, { ignoreAbsent: true });
+
+ const acceptedExtensionIdsPref =
+ "extensions.geckoProfiler.acceptedExtensionIds";
+ Services.prefs.setCharPref(
+ acceptedExtensionIdsPref,
+ "profilertest@mozilla.com"
+ );
+
+ let extension = ExtensionTestUtils.loadExtension({
+ background: () => {
+ browser.test.sendMessage(
+ "features",
+ Object.values(browser.geckoProfiler.ProfilerFeature)
+ );
+ },
+ manifest: {
+ permissions: ["geckoProfiler"],
+ browser_specific_settings: {
+ gecko: {
+ id: "profilertest@mozilla.com",
+ },
+ },
+ },
+ });
+
+ await extension.startup();
+ let acceptedFeatures = await extension.awaitMessage("features");
+ await extension.unload();
+
+ Services.prefs.clearUserPref(acceptedExtensionIdsPref);
+
+ const allFeaturesAcceptedByProfiler = Services.profiler.GetAllFeatures();
+ ok(
+ allFeaturesAcceptedByProfiler.length >= 2,
+ "Either we've massively reduced the profiler's feature set, or something is wrong."
+ );
+
+ // Check that the list of available values in the ProfilerFeature enum
+ // matches the list of features supported by the profiler.
+ for (const feature of allFeaturesAcceptedByProfiler) {
+ // If this fails, check the lists in {,Base}ProfilerState.h and geckoProfiler.json.
+ ok(
+ acceptedFeatures.includes(feature),
+ `The schema of the geckoProfiler.start() method should accept the "${feature}" feature.`
+ );
+ }
+ for (const feature of acceptedFeatures) {
+ // If this fails, check the lists in {,Base}ProfilerState.h and geckoProfiler.json.
+ ok(
+ // Bug 1594566 - ignore Responsiveness until the extension is updated
+ allFeaturesAcceptedByProfiler.includes(feature) ||
+ feature == "responsiveness",
+ `The schema of the geckoProfiler.start() method mentions a "${feature}" feature which is not supported by the profiler.`
+ );
+ }
+});