Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

/* 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,
});
});
}