summaryrefslogtreecommitdiffstats
path: root/devtools/client/performance-new/test/browser/browser_popup-record-capture-view.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/performance-new/test/browser/browser_popup-record-capture-view.js')
-rw-r--r--devtools/client/performance-new/test/browser/browser_popup-record-capture-view.js143
1 files changed, 143 insertions, 0 deletions
diff --git a/devtools/client/performance-new/test/browser/browser_popup-record-capture-view.js b/devtools/client/performance-new/test/browser/browser_popup-record-capture-view.js
new file mode 100644
index 0000000000..144e63b63b
--- /dev/null
+++ b/devtools/client/performance-new/test/browser/browser_popup-record-capture-view.js
@@ -0,0 +1,143 @@
+/* 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 FRONTEND_BASE_HOST = "http://example.com";
+const FRONTEND_BASE_PATH =
+ "/browser/devtools/client/performance-new/test/browser/fake-frontend.html";
+const FRONTEND_BASE_URL = FRONTEND_BASE_HOST + FRONTEND_BASE_PATH;
+
+add_setup(async function setup() {
+ // The active tab view isn't enabled in all configurations. Let's make sure
+ // it's enabled in these tests.
+ SpecialPowers.pushPrefEnv({
+ set: [["devtools.performance.recording.active-tab-view.enabled", true]],
+ });
+});
+
+add_task(async function test() {
+ info(
+ "Test that the profiler pop-up correctly opens the captured profile on the " +
+ "correct frontend view by adding proper view query string"
+ );
+
+ // This test assumes that the Web Developer preset is set by default, which is
+ // not the case on Nightly and custom builds.
+ BackgroundJSM.changePreset(
+ "aboutprofiling",
+ "web-developer",
+ Services.profiler.GetFeatures()
+ );
+
+ await setProfilerFrontendUrl(FRONTEND_BASE_HOST, FRONTEND_BASE_PATH);
+ await makeSureProfilerPopupIsEnabled();
+
+ // First check for the "Media" preset which will have no "view" query
+ // string because it opens our traditional "full" view.
+ await openPopupAndAssertUrlForPreset({
+ window,
+ preset: "Media",
+ expectedUrl: FRONTEND_BASE_URL,
+ });
+
+ // Now, let's check for "web-developer" preset. This will open up the frontend
+ // with "active-tab" view query string. Frontend will understand and open the active tab view for it.
+ await openPopupAndAssertUrlForPreset({
+ window,
+ preset: "Web Developer",
+ expectedUrl: FRONTEND_BASE_URL + "?view=active-tab&implementation=js",
+ });
+});
+
+add_task(async function test_in_private_window() {
+ info(
+ "Test that the profiler pop-up correctly opens the captured profile on the " +
+ "correct frontend view by adding proper view query string. This also tests " +
+ "that a tab is opened on the non-private window even when the popup is used " +
+ "in the private window."
+ );
+
+ // This test assumes that the Web Developer preset is set by default, which is
+ // not the case on Nightly and custom builds.
+ BackgroundJSM.changePreset(
+ "aboutprofiling",
+ "web-developer",
+ Services.profiler.GetFeatures()
+ );
+
+ await setProfilerFrontendUrl(FRONTEND_BASE_HOST, FRONTEND_BASE_PATH);
+ await makeSureProfilerPopupIsEnabled();
+
+ info("Open a private window.");
+ const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+
+ // First check for the "Media" preset which will have no "view" query
+ // string because it opens our traditional "full" view.
+ // Note that this utility will check for a new tab in the main non-private
+ // window, which is exactly what we want here.
+ await openPopupAndAssertUrlForPreset({
+ window: privateWindow,
+ preset: "Media",
+ expectedUrl: FRONTEND_BASE_URL,
+ });
+
+ // Now, let's check for "web-developer" preset. This will open up the frontend
+ // with "active-tab" view query string. Frontend will understand and open the active tab view for it.
+ await openPopupAndAssertUrlForPreset({
+ window: privateWindow,
+ preset: "Web Developer",
+ expectedUrl: FRONTEND_BASE_URL + "?view=active-tab&implementation=js",
+ });
+
+ await BrowserTestUtils.closeWindow(privateWindow);
+});
+
+async function openPopupAndAssertUrlForPreset({ window, preset, expectedUrl }) {
+ // Let's capture a profile and assert newly created tab's url.
+ await openPopupAndEnsureCloses(window, async () => {
+ const { document } = window;
+ {
+ // Select the preset in the popup
+ const presetsInPopup = document.getElementById(
+ "PanelUI-profiler-presets"
+ );
+ presetsInPopup.menupopup.openPopup();
+ presetsInPopup.menupopup.activateItem(
+ await getElementByLabel(presetsInPopup, preset)
+ );
+
+ await TestUtils.waitForCondition(
+ () => presetsInPopup.label === preset,
+ `After selecting the preset in the popup, waiting until the preset is changed to ${preset} in the popup.`
+ );
+ }
+
+ {
+ const button = await getElementByLabel(document, "Start Recording");
+ info("Click the button to start recording.");
+ button.click();
+ }
+
+ {
+ const button = await getElementByLabel(document, "Capture");
+ info("Click the button to capture the recording.");
+ button.click();
+ }
+
+ info(
+ "If the profiler successfully captures a profile, it will create a new " +
+ "tab with the proper view query string depending on the preset."
+ );
+
+ await waitForTabUrl({
+ initialTitle: "Waiting on the profile",
+ successTitle: "Profile received",
+ errorTitle: "Error",
+ expectedUrl,
+ });
+ });
+}