diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /devtools/client/performance-new/test/browser/browser_popup-record-capture-view.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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.js | 143 |
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, + }); + }); +} |