summaryrefslogtreecommitdiffstats
path: root/devtools/client/performance/test/browser_perf-private-browsing.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/performance/test/browser_perf-private-browsing.js')
-rw-r--r--devtools/client/performance/test/browser_perf-private-browsing.js136
1 files changed, 136 insertions, 0 deletions
diff --git a/devtools/client/performance/test/browser_perf-private-browsing.js b/devtools/client/performance/test/browser_perf-private-browsing.js
new file mode 100644
index 0000000000..8a2c7b93c4
--- /dev/null
+++ b/devtools/client/performance/test/browser_perf-private-browsing.js
@@ -0,0 +1,136 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+/**
+ * Tests that the frontend is disabled when in private browsing mode.
+ */
+
+const { SIMPLE_URL } = require("devtools/client/performance/test/helpers/urls");
+const {
+ initPerformanceInNewTab,
+ teardownToolboxAndRemoveTab,
+} = require("devtools/client/performance/test/helpers/panel-utils");
+const {
+ startRecording,
+ stopRecording,
+} = require("devtools/client/performance/test/helpers/actions");
+const {
+ once,
+} = require("devtools/client/performance/test/helpers/event-utils");
+
+let gPanelWinTuples = [];
+
+add_task(async function() {
+ await testNormalWindow();
+ await testPrivateWindow();
+ await testRecordingFailingInWindow(0);
+ await testRecordingFailingInWindow(1);
+ await teardownPerfInWindow(1, { shouldCloseWindow: true });
+ await testRecordingSucceedingInWindow(0);
+ await teardownPerfInWindow(0, { shouldCloseWindow: false });
+
+ gPanelWinTuples = null;
+});
+
+async function createPanelInNewWindow(options) {
+ const win = await BrowserTestUtils.openNewBrowserWindow(options);
+ return createPanelInWindow(options, win);
+}
+
+async function createPanelInWindow(options, win = window) {
+ const { panel } = await initPerformanceInNewTab(
+ {
+ url: SIMPLE_URL,
+ win: win,
+ },
+ options
+ );
+
+ gPanelWinTuples.push({ panel, win });
+ return { panel, win };
+}
+
+async function testNormalWindow() {
+ const { panel } = await createPanelInWindow({
+ private: false,
+ });
+
+ const { PerformanceView } = panel.panelWin;
+
+ is(
+ PerformanceView.getState(),
+ "empty",
+ "The initial state of the performance panel view is correct (1)."
+ );
+}
+
+async function testPrivateWindow() {
+ const { panel } = await createPanelInNewWindow({
+ private: true,
+ // The add-on SDK can't seem to be able to listen to "ready" or "close"
+ // events for private tabs. Don't really absolutely need to though.
+ dontWaitForTabReady: true,
+ });
+
+ const { PerformanceView } = panel.panelWin;
+
+ is(
+ PerformanceView.getState(),
+ "unavailable",
+ "The initial state of the performance panel view is correct (2)."
+ );
+}
+
+async function testRecordingFailingInWindow(index) {
+ const { panel } = gPanelWinTuples[index];
+ const { EVENTS, PerformanceController } = panel.panelWin;
+
+ const onRecordingStarted = () => {
+ ok(false, "Recording should not start while a private window is present.");
+ };
+
+ PerformanceController.on(EVENTS.RECORDING_STATE_CHANGE, onRecordingStarted);
+
+ const whenFailed = once(
+ PerformanceController,
+ EVENTS.BACKEND_FAILED_AFTER_RECORDING_START
+ );
+ PerformanceController.startRecording();
+ await whenFailed;
+ ok(true, "Recording has failed.");
+
+ PerformanceController.off(EVENTS.RECORDING_STATE_CHANGE, onRecordingStarted);
+}
+
+async function testRecordingSucceedingInWindow(index) {
+ const { panel } = gPanelWinTuples[index];
+ const { EVENTS, PerformanceController } = panel.panelWin;
+
+ const onRecordingFailed = () => {
+ ok(false, "Recording should start while now private windows are present.");
+ };
+
+ PerformanceController.on(
+ EVENTS.BACKEND_FAILED_AFTER_RECORDING_START,
+ onRecordingFailed
+ );
+
+ await startRecording(panel);
+ await stopRecording(panel);
+ ok(true, "Recording has succeeded.");
+
+ PerformanceController.off(
+ EVENTS.BACKEND_FAILED_AFTER_RECORDING_START,
+ onRecordingFailed
+ );
+}
+
+async function teardownPerfInWindow(index, options) {
+ const { panel, win } = gPanelWinTuples[index];
+ await teardownToolboxAndRemoveTab(panel);
+
+ if (options.shouldCloseWindow) {
+ win.close();
+ }
+}