Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/* import-globals-from helper-backward-compat.js */
Services.scriptloader.loadSubScript(
CHROME_URL_ROOT + "helper-backward-compat.js",
this
);
Services.scriptloader.loadSubScript(
this
);
// Point the profiler frontend at the in-tree fake frontend, so that the test
// does not reach out to profiler.firefox.com. The origin has to be on the
// allowlist in validateProfilerWebChannelUrl for the WebChannel to work.
const FRONTEND_BASE_HOST = "https://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;
// Check that a profile can be recorded on the server from the runtime page, and
// that it is handed over to the profiler frontend.
addCompatTask(async function (config) {
await setProfilerFrontendUrl(FRONTEND_BASE_HOST, FRONTEND_BASE_PATH);
const { document, tab } = await openAboutDebuggingWithCompatServer(config);
await connectToRuntime(config.host, document);
await waitForRuntimePage(config.runtime.brandName, document);
info("Open the profiler dialog");
const profilerDocument = await openProfilerDialog(document);
// Use a preset without a dedicated view, so that the frontend URL is stable.
info("Select the firefox-platform preset");
const presetsSelect = await getNearestInputFromText(
profilerDocument,
"Settings"
);
setReactFriendlyInputValue(presetsSelect, "firefox-platform");
info("Start recording on the server");
const startRecording = await getActiveButtonFromText(
profilerDocument,
"Start recording"
);
startRecording.click();
info("Capture the recording");
const captureRecording = await getActiveButtonFromText(
profilerDocument,
"Capture recording"
);
captureRecording.click();
info("Wait until the profiler is available to record again");
await getActiveButtonFromText(profilerDocument, "Start recording");
info("Check that the profiler frontend was opened in a new tab");
await waitFor(
() => gBrowser.currentURI.spec === FRONTEND_BASE_URL,
`The profiler frontend was opened at ${FRONTEND_BASE_URL}`
);
info("Wait for the profile to be handed over to the profiler frontend");
// Also removes the profiler frontend tab.
await checkTabLoadedProfile({
initialTitle: "Waiting on the profile",
successTitle: "Profile received",
errorTitle: "Error",
});
await removeTab(tab);
});
/**
* Open the performance profiler dialog from the runtime page and return the
* document of the profiler iframe.
*/
async function openProfilerDialog(doc) {
info("Click on the Profile Runtime button");
doc.querySelector(".qa-profile-runtime-button").click();
info("Wait for the rendering of the profiler UI");
const profilerIframe = doc.querySelector(".profiler-dialog__frame");
await waitFor(
() => profilerIframe.contentDocument?.querySelector(".perf-presets"),
"Wait until the profiler presets are ready in the profiler UI"
);
return profilerIframe.contentDocument;
}