summaryrefslogtreecommitdiffstats
path: root/devtools/client/performance-new/test/xpcshell
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/performance-new/test/xpcshell')
-rw-r--r--devtools/client/performance-new/test/xpcshell/.eslintrc.js6
-rw-r--r--devtools/client/performance-new/test/xpcshell/head.js14
-rw-r--r--devtools/client/performance-new/test/xpcshell/test_popup_initial_state.js110
-rw-r--r--devtools/client/performance-new/test/xpcshell/test_webchannel-urls.js63
-rw-r--r--devtools/client/performance-new/test/xpcshell/xpcshell.ini7
5 files changed, 200 insertions, 0 deletions
diff --git a/devtools/client/performance-new/test/xpcshell/.eslintrc.js b/devtools/client/performance-new/test/xpcshell/.eslintrc.js
new file mode 100644
index 0000000000..b6aacf458f
--- /dev/null
+++ b/devtools/client/performance-new/test/xpcshell/.eslintrc.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = {
+ // Extend from the shared list of defined globals for xpcshell tests.
+ extends: "../../../../.eslintrc.xpcshell.js",
+};
diff --git a/devtools/client/performance-new/test/xpcshell/head.js b/devtools/client/performance-new/test/xpcshell/head.js
new file mode 100644
index 0000000000..fb1cc73b6a
--- /dev/null
+++ b/devtools/client/performance-new/test/xpcshell/head.js
@@ -0,0 +1,14 @@
+/* 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/. */
+"use strict";
+
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+registerCleanupFunction(() => {
+ // Always clean up the prefs after every test.
+ const { revertRecordingPreferences } = ChromeUtils.import(
+ "resource://devtools/client/performance-new/popup/background.jsm.js"
+ );
+ revertRecordingPreferences();
+});
diff --git a/devtools/client/performance-new/test/xpcshell/test_popup_initial_state.js b/devtools/client/performance-new/test/xpcshell/test_popup_initial_state.js
new file mode 100644
index 0000000000..bd75fb9c65
--- /dev/null
+++ b/devtools/client/performance-new/test/xpcshell/test_popup_initial_state.js
@@ -0,0 +1,110 @@
+/* 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/. */
+"use strict";
+
+/**
+ * Tests the initial state of the background script for the popup.
+ */
+
+function setupBackgroundJsm() {
+ return ChromeUtils.import(
+ "resource://devtools/client/performance-new/popup/background.jsm.js"
+ );
+}
+
+add_task(function test() {
+ info("Test that we get the default preference values from the browser.");
+ const { getRecordingPreferences } = setupBackgroundJsm();
+
+ const preferences = getRecordingPreferences(
+ "aboutprofiling",
+ Services.profiler.GetFeatures()
+ );
+
+ Assert.notEqual(
+ preferences.entries,
+ undefined,
+ "The initial state has the default entries."
+ );
+ Assert.notEqual(
+ preferences.interval,
+ undefined,
+ "The initial state has the default interval."
+ );
+ Assert.notEqual(
+ preferences.features,
+ undefined,
+ "The initial state has the default features."
+ );
+ Assert.equal(
+ preferences.features.includes("js"),
+ true,
+ "The js feature is initialized to the default."
+ );
+ Assert.notEqual(
+ preferences.threads,
+ undefined,
+ "The initial state has the default threads."
+ );
+ Assert.equal(
+ preferences.threads.includes("GeckoMain"),
+ true,
+ "The GeckoMain thread is initialized to the default."
+ );
+ Assert.notEqual(
+ preferences.objdirs,
+ undefined,
+ "The initial state has the default objdirs."
+ );
+ Assert.notEqual(
+ preferences.duration,
+ undefined,
+ "The duration is initialized to the duration."
+ );
+});
+
+add_task(function test() {
+ info(
+ "Test that the state and features are properly validated. This ensures that as " +
+ "we add and remove features, the stored preferences do not cause the Gecko " +
+ "Profiler interface to crash with invalid values."
+ );
+ const {
+ getRecordingPreferences,
+ setRecordingPreferences,
+ changePreset,
+ } = setupBackgroundJsm();
+
+ const supportedFeatures = Services.profiler.GetFeatures();
+
+ changePreset("aboutprofiling", "custom", supportedFeatures);
+
+ Assert.ok(
+ getRecordingPreferences(
+ "aboutprofiling",
+ supportedFeatures
+ ).features.includes("js"),
+ "The js preference is present initially."
+ );
+
+ const settings = getRecordingPreferences("aboutprofiling", supportedFeatures);
+ settings.features = settings.features.filter(feature => feature !== "js");
+ settings.features.push("UNKNOWN_FEATURE_FOR_TESTS");
+ setRecordingPreferences("aboutprofiling", settings);
+
+ Assert.ok(
+ !getRecordingPreferences(
+ "aboutprofiling",
+ supportedFeatures
+ ).features.includes("UNKNOWN_FEATURE_FOR_TESTS"),
+ "The unknown feature is removed."
+ );
+ Assert.ok(
+ !getRecordingPreferences(
+ "aboutprofiling",
+ supportedFeatures
+ ).features.includes("js"),
+ "The js preference is still flipped from the default."
+ );
+});
diff --git a/devtools/client/performance-new/test/xpcshell/test_webchannel-urls.js b/devtools/client/performance-new/test/xpcshell/test_webchannel-urls.js
new file mode 100644
index 0000000000..5f9582af0f
--- /dev/null
+++ b/devtools/client/performance-new/test/xpcshell/test_webchannel-urls.js
@@ -0,0 +1,63 @@
+/* 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/. */
+
+"use strict";
+
+const { validateProfilerWebChannelUrl } = ChromeUtils.import(
+ "resource:///modules/DevToolsStartup.jsm"
+);
+
+add_task(function test() {
+ info(
+ "Since the WebChannel can communicate with a content page, test that only " +
+ "trusted URLs can be used with this mechanism."
+ );
+
+ const { checkUrlIsValid, checkUrlIsInvalid } = setup();
+
+ info("Check all of the valid URLs");
+ checkUrlIsValid("https://profiler.firefox.com");
+ checkUrlIsValid("http://example.com");
+ checkUrlIsValid("http://localhost:4242");
+ checkUrlIsValid("http://localhost:32343434");
+ checkUrlIsValid("http://localhost:4242/");
+ checkUrlIsValid("https://deploy-preview-1234--perf-html.netlify.com");
+ checkUrlIsValid("https://deploy-preview-1234--perf-html.netlify.com/");
+ checkUrlIsValid("https://deploy-preview-1234--perf-html.netlify.app");
+ checkUrlIsValid("https://deploy-preview-1234--perf-html.netlify.app/");
+ checkUrlIsValid("https://main--perf-html.netlify.app/");
+
+ info("Check all of the invalid URLs");
+ checkUrlIsInvalid("https://profiler.firefox.com/some-other-path");
+ checkUrlIsInvalid("http://localhost:4242/some-other-path");
+ checkUrlIsInvalid("http://profiler.firefox.com.example.com");
+ checkUrlIsInvalid("http://mozilla.com");
+ checkUrlIsInvalid("https://deploy-preview-1234--perf-html.netlify.dev");
+ checkUrlIsInvalid("https://anything--perf-html.netlify.app/");
+});
+
+function setup() {
+ function checkUrlIsValid(url) {
+ info(`Check that ${url} is valid`);
+ equal(
+ validateProfilerWebChannelUrl(url),
+ url,
+ `"${url}" is a valid WebChannel URL.`
+ );
+ }
+
+ function checkUrlIsInvalid(url) {
+ info(`Check that ${url} is invalid`);
+ equal(
+ validateProfilerWebChannelUrl(url),
+ "https://profiler.firefox.com",
+ `"${url}" was not valid, and was reset to the base URL.`
+ );
+ }
+
+ return {
+ checkUrlIsValid,
+ checkUrlIsInvalid,
+ };
+}
diff --git a/devtools/client/performance-new/test/xpcshell/xpcshell.ini b/devtools/client/performance-new/test/xpcshell/xpcshell.ini
new file mode 100644
index 0000000000..6aff202a65
--- /dev/null
+++ b/devtools/client/performance-new/test/xpcshell/xpcshell.ini
@@ -0,0 +1,7 @@
+[DEFAULT]
+tags = devtools
+head = head.js
+firefox-appdir = browser
+
+[test_popup_initial_state.js]
+[test_webchannel-urls.js]