Backed out changeset d853ddfd853e (bug 1801019) for bc failures on browser_screenshots_telemetry_tests.js. CLOSED TREE

This commit is contained in:
Marian-Vasile Laza
2023-02-23 21:11:16 +02:00
parent 1885c82e8a
commit ac8ed92c6a
21 changed files with 123 additions and 680 deletions

View File

@@ -34,11 +34,11 @@ export class ScreenshotsComponentChild extends JSWindowActorChild {
switch (event.type) {
case "keydown":
if (event.key === "Escape") {
this.requestCancelScreenshot("escape");
this.requestCancelScreenshot();
}
break;
case "beforeunload":
this.requestCancelScreenshot("navigation");
this.requestCancelScreenshot();
break;
case "resize":
if (!this._resizeTask && this._overlay?._initialized) {
@@ -61,7 +61,7 @@ export class ScreenshotsComponentChild extends JSWindowActorChild {
event.target.visibilityState === "hidden" &&
this._overlay?.stateHandler.getState() === "crosshairs"
) {
this.requestCancelScreenshot("navigation");
this.requestCancelScreenshot();
}
break;
}
@@ -70,10 +70,9 @@ export class ScreenshotsComponentChild extends JSWindowActorChild {
/**
* Send a request to cancel the screenshot to the parent process
*/
requestCancelScreenshot(reason) {
requestCancelScreenshot() {
this.sendAsyncMessage("Screenshots:CancelScreenshot", {
closeOverlay: false,
reason,
});
this.endScreenshotsOverlay();
}
@@ -261,8 +260,4 @@ export class ScreenshotsComponentChild extends JSWindowActorChild {
};
return rect;
}
recordTelemetryEvent(type, object, args) {
Services.telemetry.recordEvent("screenshots", type, object, null, args);
}
}

View File

@@ -1497,11 +1497,7 @@ class nsContextMenu {
takeScreenshot() {
if (SCREENSHOT_BROWSER_COMPONENT) {
Services.obs.notifyObservers(
window,
"menuitem-screenshot",
"context_menu"
);
Services.obs.notifyObservers(window, "menuitem-screenshot", true);
} else {
Services.obs.notifyObservers(
null,

View File

@@ -494,8 +494,7 @@ if (!lazy.screenshotsDisabled) {
if (lazy.SCREENSHOT_BROWSER_COMPONENT) {
Services.obs.notifyObservers(
aEvent.currentTarget.ownerGlobal,
"menuitem-screenshot",
"toolbar_button"
"menuitem-screenshot"
);
} else {
Services.obs.notifyObservers(

View File

@@ -61,8 +61,6 @@ const MIN_DETECT_WIDTH = 100;
let MAX_DETECT_HEIGHT = 700;
let MAX_DETECT_WIDTH = 1000;
const REGION_CHANGE_THRESHOLD = 5;
const doNotAutoselectTags = {
H1: true,
H2: true,
@@ -189,19 +187,16 @@ class AnonymousContentOverlay {
* Add required event listeners to the overlay
*/
addEventListeners() {
let cancelScreenshotsFunciton = () => {
this.screenshotsChild.requestCancelScreenshot("overlay_cancel");
};
this.addEventListenerForElement(
"screenshots-cancel-button",
"click",
cancelScreenshotsFunciton
);
this.addEventListenerForElement(
"cancel",
"click",
cancelScreenshotsFunciton
(event, targetId) => {
this.screenshotsChild.requestCancelScreenshot();
}
);
this.addEventListenerForElement("cancel", "click", (event, targetId) => {
this.screenshotsChild.requestCancelScreenshot();
});
this.addEventListenerForElement("copy", "click", (event, targetId) => {
this.screenshotsChild.requestCopyScreenshot(
this.screenshotsContainer.getSelectionLayerBoxDimensions()
@@ -540,7 +535,6 @@ class StateHandler {
#lastY;
#screenshotsContainer;
#screenshotsChild;
#previousDimensions;
constructor(screenshotsContainer, screenshotsChild) {
this.#state = "crosshairs";
@@ -551,13 +545,6 @@ class StateHandler {
}
setState(newState) {
if (this.#state === "selected" && newState === "crosshairs") {
this.#screenshotsChild.recordTelemetryEvent(
"started",
"overlay_retry",
{}
);
}
this.#state = newState;
this.start();
}
@@ -566,10 +553,6 @@ class StateHandler {
return this.#state;
}
getHoverElementBoxRect() {
return this.#screenshotsContainer.hoverElementBoxRect;
}
/**
* At the start of the some states we need to perform some actions
*/
@@ -691,7 +674,6 @@ class StateHandler {
this.#screenshotsContainer.hideSelectionLayer();
this.#screenshotsContainer.showPreviewLayer();
this.#screenshotsChild.showPanel();
this.#previousDimensions = null;
}
/**
@@ -938,7 +920,6 @@ class StateHandler {
this.#screenshotsContainer.updateSelectionBoxFromRect(scrollX, scrollY);
this.#screenshotsContainer.drawSelectionBox();
this.setState("selected");
this.#screenshotsChild.recordTelemetryEvent("selected", "element", {});
} else {
this.setState("crosshairs");
}
@@ -956,26 +937,6 @@ class StateHandler {
});
this.#screenshotsContainer.sortSelectionLayerBoxCoords();
this.setState("selected");
let {
width,
height,
} = this.#screenshotsContainer.getSelectionLayerBoxDimensions();
if (
!this.#previousDimensions ||
(Math.abs(this.#previousDimensions.width - width) >
REGION_CHANGE_THRESHOLD &&
Math.abs(this.#previousDimensions.height - height) >
REGION_CHANGE_THRESHOLD)
) {
this.#screenshotsChild.recordTelemetryEvent(
"selected",
"region_selection",
{}
);
}
this.#previousDimensions = { width, height };
}
/**

View File

@@ -36,8 +36,6 @@ export class ScreenshotsComponentParent extends JSWindowActorParent {
switch (message.name) {
case "Screenshots:CancelScreenshot":
await ScreenshotsUtils.closePanel(browser);
let { reason } = message.data;
ScreenshotsUtils.recordTelemetryEvent("canceled", reason, {});
break;
case "Screenshots:CopyScreenshot":
await ScreenshotsUtils.closePanel(browser);
@@ -83,7 +81,6 @@ export var ScreenshotsUtils = {
) {
return;
}
Services.telemetry.setEventRecordingEnabled("screenshots", true);
Services.obs.addObserver(this, "menuitem-screenshot");
Services.obs.addObserver(this, "screenshots-take-screenshot");
this.initialized = true;
@@ -102,7 +99,6 @@ export var ScreenshotsUtils = {
handleEvent(event) {
if (event.type === "keydown" && event.key === "Escape") {
this.closePanel(event.view.gBrowser.selectedBrowser, true);
this.recordTelemetryEvent("canceled", "escape", {});
}
},
observe(subj, topic, data) {
@@ -117,7 +113,7 @@ export var ScreenshotsUtils = {
// if dialog box is found then the buttons are hidden and we return early
// else no dialog box is found and we need to toggle the buttons
// or if retry because the dialog box was closed and we need to show the panel
this.togglePanelAndOverlay(browser, data);
this.togglePanelAndOverlay(browser);
}
break;
case "screenshots-take-screenshot":
@@ -148,8 +144,7 @@ export var ScreenshotsUtils = {
if (Services.prefs.getBoolPref("screenshots.browser.component.enabled")) {
Services.obs.notifyObservers(
window.event.currentTarget.ownerGlobal,
"menuitem-screenshot",
type
"menuitem-screenshot"
);
} else {
Services.obs.notifyObservers(null, "menuitem-screenshot-extension", type);
@@ -201,24 +196,21 @@ export var ScreenshotsUtils = {
* Otherwise create or display the buttons.
* @param browser The current browser.
*/
async togglePanelAndOverlay(browser, data) {
async togglePanelAndOverlay(browser) {
let buttonsPanel = browser.ownerDocument.querySelector(
"#screenshotsPagePanel"
);
let isOverlayShowing = await this.getActor(browser).sendQuery(
"Screenshots:isOverlayShowing"
);
let actor = this.getActor(browser);
data = data === "retry" ? "preview_retry" : data;
if (buttonsPanel && (isOverlayShowing || buttonsPanel.state !== "closed")) {
buttonsPanel.hidePopup();
actor.sendQuery("Screenshots:HideOverlay");
this.recordTelemetryEvent("canceled", data, {});
} else {
actor.sendQuery("Screenshots:ShowOverlay");
this.createOrDisplayButtons(browser);
this.recordTelemetryEvent("started", data, {});
let actor = this.getActor(browser);
return actor.sendQuery("Screenshots:HideOverlay");
}
let actor = this.getActor(browser);
actor.sendQuery("Screenshots:ShowOverlay");
return this.createOrDisplayButtons(browser);
},
/**
* Gets the screenshots dialog box
@@ -341,7 +333,6 @@ export var ScreenshotsUtils = {
{ id: "screenshots-too-large-error-details" },
]);
this.showAlertMessage(errorTitle.value, errorMessage.value);
this.recordTelemetryEvent("failed", "screenshot_too_large", null);
}
},
/**
@@ -360,11 +351,9 @@ export var ScreenshotsUtils = {
let rect;
if (type === "full-page") {
rect = await this.fetchFullPageBounds(browser);
type = "full_page";
} else {
rect = await this.fetchVisibleBounds(browser);
}
this.recordTelemetryEvent("selected", type, {});
return this.takeScreenshot(browser, dialog, rect);
},
/**
@@ -438,8 +427,6 @@ export var ScreenshotsUtils = {
this.copyScreenshot(url, browser);
snapshot.close();
this.recordTelemetryEvent("copy", "overlay_copy", {});
},
/**
* Copy the image to the clipboard
@@ -491,8 +478,6 @@ export var ScreenshotsUtils = {
await this.downloadScreenshot(title, dataUrl, browser);
snapshot.close();
this.recordTelemetryEvent("download", "overlay_download", {});
},
/**
* Download the screenshot
@@ -530,8 +515,4 @@ export var ScreenshotsUtils = {
await download.start();
} catch (ex) {}
},
recordTelemetryEvent(type, object, args) {
Services.telemetry.recordEvent("screenshots", type, object, null, args);
},
};

View File

@@ -5,6 +5,10 @@
"use strict";
const { XPCOMUtils } = ChromeUtils.importESModule(
"resource://gre/modules/XPCOMUtils.sys.mjs"
);
ChromeUtils.defineESModuleGetters(this, {
Downloads: "resource://gre/modules/Downloads.sys.mjs",
FileUtils: "resource://gre/modules/FileUtils.sys.mjs",
@@ -48,7 +52,6 @@ class ScreenshotsUI extends HTMLElement {
async handleEvent(event) {
if (event.type == "click" && event.currentTarget == this._cancelButton) {
this.close();
ScreenshotsUtils.recordTelemetryEvent("canceled", "preview_cancel", {});
} else if (
event.type == "click" &&
event.currentTarget == this._copyButton
@@ -83,16 +86,12 @@ class ScreenshotsUI extends HTMLElement {
);
this.close();
ScreenshotsUtils.recordTelemetryEvent("download", "preview_download", {});
}
saveToClipboard(dataUrl) {
ScreenshotsUtils.copyScreenshot(dataUrl);
this.close();
ScreenshotsUtils.recordTelemetryEvent("copy", "preview_copy", {});
}
}
customElements.define("screenshots-ui", ScreenshotsUI);

View File

@@ -15,7 +15,6 @@ prefs =
[browser_screenshots_overlay_panel_sync.js]
[browser_screenshots_page_unload.js]
[browser_screenshots_short_page_test.js]
[browser_screenshots_telemetry_tests.js]
[browser_screenshots_test_downloads.js]
[browser_screenshots_test_escape.js]
[browser_screenshots_test_full_page.js]

View File

@@ -3,11 +3,6 @@
"use strict";
const SCREENSHOTS_EVENTS = [
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "canceled", object: "escape" },
];
add_task(async function testPanelFocused() {
await BrowserTestUtils.withNewTab(
{
@@ -15,7 +10,6 @@ add_task(async function testPanelFocused() {
url: TEST_PAGE,
},
async browser => {
await clearAllTelemetryEvents();
let helper = new ScreenshotsHelper(browser);
helper.triggerUIFromToolbar();
@@ -35,12 +29,6 @@ add_task(async function testPanelFocused() {
screenshotsButtons.activeElement,
"Visible button is focused"
);
EventUtils.synthesizeKey("KEY_Escape");
await helper.waitForOverlayClosed();
await assertScreenshotsEvents(SCREENSHOTS_EVENTS);
}
);
});

View File

@@ -3,11 +3,6 @@
"use strict";
const SCREENSHOTS_EVENTS = [
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "canceled", object: "navigation" },
];
add_task(async function test() {
await BrowserTestUtils.withNewTab(
{
@@ -15,7 +10,6 @@ add_task(async function test() {
url: TEST_PAGE,
},
async browser => {
await clearAllTelemetryEvents();
await SpecialPowers.spawn(browser, [TEST_PAGE], url => {
let a = content.document.createElement("a");
a.id = "clickMe";
@@ -28,15 +22,51 @@ add_task(async function test() {
// click toolbar button so panel shows
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = gBrowser.selectedBrowser.ownerDocument.querySelector(
"#screenshotsPagePanel"
);
await BrowserTestUtils.waitForMutationCondition(
panel,
{ attributes: true },
() => {
return BrowserTestUtils.is_visible(panel);
}
);
ok(BrowserTestUtils.is_visible(panel), "Panel buttons are visible");
await ContentTask.spawn(browser, null, async () => {
let screenshotsChild = content.windowGlobalChild.getActor(
"ScreenshotsComponent"
);
Assert.ok(screenshotsChild._overlay._initialized, "The overlay exists");
});
await SpecialPowers.spawn(browser, [], () => {
content.document.querySelector("#clickMe").click();
});
await helper.waitForOverlayClosed();
await BrowserTestUtils.waitForMutationCondition(
panel,
{ attributes: true },
() => {
return BrowserTestUtils.is_hidden(panel);
}
);
ok(
BrowserTestUtils.is_hidden(panel),
"Panel buttons are hidden after page unload"
);
await assertScreenshotsEvents(SCREENSHOTS_EVENTS);
await ContentTask.spawn(browser, null, async () => {
let screenshotsChild = content.windowGlobalChild.getActor(
"ScreenshotsComponent"
);
Assert.ok(
!screenshotsChild._overlay._initialized,
"The overlay doesn't exist"
);
});
}
);
});

View File

@@ -1,307 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const STARTED_AND_CANCELED_EVENTS = [
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "canceled", object: "toolbar_button" },
{ category: "screenshots", method: "started", object: "shortcut" },
{ category: "screenshots", method: "canceled", object: "shortcut" },
{ category: "screenshots", method: "started", object: "context_menu" },
{ category: "screenshots", method: "canceled", object: "context_menu" },
{ category: "screenshots", method: "started", object: "quick_actions" },
{ category: "screenshots", method: "canceled", object: "quick_actions" },
];
const STARTED_RETRY_EVENTS = [
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "selected", object: "visible" },
{ category: "screenshots", method: "started", object: "preview_retry" },
];
const CANCEL_EVENTS = [
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "selected", object: "full_page" },
{ category: "screenshots", method: "canceled", object: "preview_cancel" },
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "canceled", object: "overlay_cancel" },
];
const COPY_EVENTS = [
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "selected", object: "visible" },
{ category: "screenshots", method: "copy", object: "preview_copy" },
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "copy", object: "overlay_copy" },
];
const CONTENT_EVENTS = [
{ category: "screenshots", method: "selected", object: "region_selection" },
{ category: "screenshots", method: "started", object: "overlay_retry" },
{ category: "screenshots", method: "selected", object: "element" },
];
add_task(async function test_started_and_canceled_events() {
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_PAGE,
},
async browser => {
await clearAllTelemetryEvents();
let helper = new ScreenshotsHelper(browser);
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
helper.triggerUIFromToolbar();
await helper.waitForOverlayClosed();
EventUtils.synthesizeKey("s", { shiftKey: true, ctrlKey: true });
await helper.waitForOverlay();
EventUtils.synthesizeKey("s", { shiftKey: true, ctrlKey: true });
await helper.waitForOverlayClosed();
let contextMenu = document.getElementById("contentAreaContextMenu");
let popupShownPromise = BrowserTestUtils.waitForEvent(
contextMenu,
"popupshown"
);
await BrowserTestUtils.synthesizeMouseAtPoint(
50,
50,
{
type: "contextmenu",
button: 2,
},
browser
);
await popupShownPromise;
contextMenu.activateItem(
contextMenu.querySelector("#context-take-screenshot")
);
await helper.waitForOverlay();
popupShownPromise = BrowserTestUtils.waitForEvent(
contextMenu,
"popupshown"
);
await BrowserTestUtils.synthesizeMouseAtPoint(
50,
50,
{
type: "contextmenu",
button: 2,
},
browser
);
await popupShownPromise;
contextMenu.activateItem(
contextMenu.querySelector("#context-take-screenshot")
);
await helper.waitForOverlayClosed();
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: "screenshot",
waitForFocus: SimpleTest.waitForFocus,
});
let { result } = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
Assert.equal(result.type, UrlbarUtils.RESULT_TYPE.DYNAMIC);
Assert.equal(result.providerName, "quickactions");
info("Trigger the screenshot mode");
EventUtils.synthesizeKey("KEY_ArrowDown", {}, window);
EventUtils.synthesizeKey("KEY_Enter", {}, window);
await helper.waitForOverlay();
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: "screenshot",
waitForFocus: SimpleTest.waitForFocus,
});
({ result } = await UrlbarTestUtils.getDetailsOfResultAt(window, 1));
Assert.equal(result.type, UrlbarUtils.RESULT_TYPE.DYNAMIC);
Assert.equal(result.providerName, "quickactions");
info("Trigger the screenshot mode");
EventUtils.synthesizeKey("KEY_ArrowDown", {}, window);
EventUtils.synthesizeKey("KEY_Enter", {}, window);
await helper.waitForOverlayClosed();
await assertScreenshotsEvents(STARTED_AND_CANCELED_EVENTS);
}
);
});
add_task(async function test_started_retry() {
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_PAGE,
},
async browser => {
await clearAllTelemetryEvents();
let helper = new ScreenshotsHelper(browser);
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = await helper.waitForPanel();
let screenshotReady = TestUtils.topicObserved(
"screenshots-preview-ready"
);
// click the visible page button in panel
let visiblePageButton = panel
.querySelector("screenshots-buttons")
.shadowRoot.querySelector(".visible-page");
visiblePageButton.click();
await screenshotReady;
let dialog = helper.getDialog();
let retryButton = dialog._frame.contentDocument.querySelector(
".highlight-button-retry"
);
ok(retryButton, "Got the retry button");
retryButton.click();
await helper.waitForOverlay();
await assertScreenshotsEvents(STARTED_RETRY_EVENTS);
}
);
});
add_task(async function test_canceled() {
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_PAGE,
},
async browser => {
await clearAllTelemetryEvents();
let helper = new ScreenshotsHelper(browser);
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = await helper.waitForPanel();
let screenshotReady = TestUtils.topicObserved(
"screenshots-preview-ready"
);
// click the full page button in panel
let fullPageButton = panel
.querySelector("screenshots-buttons")
.shadowRoot.querySelector(".full-page");
fullPageButton.click();
await screenshotReady;
let dialog = helper.getDialog();
let cancelButton = dialog._frame.contentDocument.querySelector(
".highlight-button-cancel"
);
ok(cancelButton, "Got the cancel button");
cancelButton.click();
await helper.waitForOverlayClosed();
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
await helper.dragOverlay(50, 50, 300, 300);
helper.clickCancelButton();
await helper.waitForOverlayClosed();
await assertScreenshotsEvents(CANCEL_EVENTS);
}
);
});
add_task(async function test_copy() {
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_PAGE,
},
async browser => {
await clearAllTelemetryEvents();
let helper = new ScreenshotsHelper(browser);
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = await helper.waitForPanel();
let screenshotReady = TestUtils.topicObserved(
"screenshots-preview-ready"
);
// click the visible page button in panel
let visiblePageButton = panel
.querySelector("screenshots-buttons")
.shadowRoot.querySelector(".visible-page");
visiblePageButton.click();
await screenshotReady;
let dialog = helper.getDialog();
let copyButton = dialog._frame.contentDocument.querySelector(
".highlight-button-copy"
);
let clipboardChanged = helper.waitForRawClipboardChange();
// click copy button on dialog box
copyButton.click();
info("Waiting for clipboard change");
await clipboardChanged;
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
await helper.dragOverlay(50, 50, 300, 300);
clipboardChanged = helper.waitForRawClipboardChange();
helper.clickCopyButton();
info("Waiting for clipboard change");
await clipboardChanged;
await assertScreenshotsEvents(COPY_EVENTS);
}
);
});
add_task(async function test_content_events() {
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_PAGE,
},
async browser => {
await clearAllTelemetryEvents();
let helper = new ScreenshotsHelper(browser);
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
await helper.dragOverlay(50, 50, 300, 300);
mouse.click(11, 11);
await helper.waitForStateChange("crosshairs");
await helper.clickTestPageElement();
await assertScreenshotsEvents(CONTENT_EVENTS, "content");
}
);
});

View File

@@ -3,14 +3,6 @@
"use strict";
const SCREENSHOTS_EVENTS = [
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "download", object: "overlay_download" },
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "selected", object: "visible" },
{ category: "screenshots", method: "download", object: "preview_download" },
];
const MockFilePicker = SpecialPowers.MockFilePicker;
add_setup(async function() {
@@ -77,7 +69,6 @@ add_task(async function test_download_without_filepicker() {
url: TEST_PAGE,
},
async browser => {
await clearAllTelemetryEvents();
let helper = new ScreenshotsHelper(browser);
helper.triggerUIFromToolbar();
@@ -92,46 +83,6 @@ add_task(async function test_download_without_filepicker() {
ok(download.succeeded, "Download should succeed");
await publicDownloads.removeFinished();
await waitForScreenshotsEventCount(2);
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let screenshotReady = TestUtils.topicObserved(
"screenshots-preview-ready"
);
let panel = gBrowser.selectedBrowser.ownerDocument.querySelector(
"#screenshotsPagePanel"
);
// click the visible page button in panel
let visiblePageButton = panel
.querySelector("screenshots-buttons")
.shadowRoot.querySelector(".visible-page");
visiblePageButton.click();
let dialog = helper.getDialog();
await screenshotReady;
let downloadButton = dialog._frame.contentDocument.querySelector(
".highlight-button-download"
);
ok(downloadButton, "Got the download button");
// click download button on dialog box
downloadButton.click();
info("wait for download to finish");
download = await downloadFinishedPromise;
ok(download.succeeded, "Download should succeed");
await publicDownloads.removeFinished();
await assertScreenshotsEvents(SCREENSHOTS_EVENTS);
}
);
});

View File

@@ -3,11 +3,6 @@
"use strict";
const SCREENSHOTS_EVENTS = [
{ category: "screenshots", method: "started", object: "toolbar_button" },
{ category: "screenshots", method: "canceled", object: "escape" },
];
add_task(async function test_fullpageScreenshot() {
await BrowserTestUtils.withNewTab(
{
@@ -15,7 +10,6 @@ add_task(async function test_fullpageScreenshot() {
url: TEST_PAGE,
},
async browser => {
await clearAllTelemetryEvents();
let helper = new ScreenshotsHelper(browser);
// click toolbar button so panel shows
@@ -23,13 +17,9 @@ add_task(async function test_fullpageScreenshot() {
await helper.waitForOverlay();
EventUtils.synthesizeKey("KEY_F6", { shiftKey: true });
EventUtils.synthesizeKey("KEY_Escape");
await helper.waitForOverlayClosed();
await assertScreenshotsEvents(SCREENSHOTS_EVENTS);
}
);
});

View File

@@ -16,11 +16,18 @@ add_task(async function test_fullpageScreenshot() {
// click toolbar button so panel shows
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = gBrowser.selectedBrowser.ownerDocument.querySelector(
"#screenshotsPagePanel"
);
await BrowserTestUtils.waitForMutationCondition(
panel,
{ attributes: true },
() => {
return BrowserTestUtils.is_visible(panel);
}
);
ok(BrowserTestUtils.is_visible(panel), "Panel buttons are visible");
let screenshotReady = TestUtils.topicObserved(
"screenshots-preview-ready"
@@ -105,11 +112,18 @@ add_task(async function test_fullpageScreenshotScrolled() {
// click toolbar button so panel shows
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = gBrowser.selectedBrowser.ownerDocument.querySelector(
"#screenshotsPagePanel"
);
await BrowserTestUtils.waitForMutationCondition(
panel,
{ attributes: true },
() => {
return BrowserTestUtils.is_visible(panel);
}
);
ok(BrowserTestUtils.is_visible(panel), "Panel buttons are visible");
let screenshotReady = TestUtils.topicObserved(
"screenshots-preview-ready"

View File

@@ -14,11 +14,25 @@ add_task(async function test_fullpageScreenshot() {
// click toolbar button so UI shows
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = gBrowser.selectedBrowser.ownerDocument.querySelector(
"#screenshotsPagePanel"
);
await BrowserTestUtils.waitForMutationCondition(
panel,
{ attributes: true },
() => {
return BrowserTestUtils.is_visible(panel);
}
);
ok(BrowserTestUtils.is_visible(panel), "Panel buttons are visible");
await ContentTask.spawn(browser, null, async () => {
let screenshotsChild = content.windowGlobalChild.getActor(
"ScreenshotsComponent"
);
Assert.ok(screenshotsChild._overlay._initialized, "The overlay exists");
});
let waitForPanelHide = BrowserTestUtils.waitForMutationCondition(
panel,

View File

@@ -3,20 +3,12 @@
"use strict";
const SCREENSHOTS_EVENTS = [
{ category: "screenshots", method: "failed", object: "screenshot_too_large" },
{ category: "screenshots", method: "failed", object: "screenshot_too_large" },
{ category: "screenshots", method: "failed", object: "screenshot_too_large" },
{ category: "screenshots", method: "failed", object: "screenshot_too_large" },
];
const { sinon } = ChromeUtils.import("resource://testing-common/Sinon.jsm");
ChromeUtils.defineESModuleGetters(this, {
ScreenshotsUtils: "resource:///modules/ScreenshotsUtils.sys.mjs",
});
add_task(async function test_screenshot_too_large_cropped() {
await clearAllTelemetryEvents();
const screenshotsLocalization = new Localization(
["browser/screenshots.ftl"],
true
@@ -79,6 +71,4 @@ add_task(async function test_screenshot_too_large_cropped() {
);
showAlertMessageStub.restore();
await assertScreenshotsEvents(SCREENSHOTS_EVENTS);
});

View File

@@ -105,11 +105,18 @@ add_task(async function test_visibleScreenshotScrolled() {
// click toolbar button so panel shows
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = gBrowser.selectedBrowser.ownerDocument.querySelector(
"#screenshotsPagePanel"
);
await BrowserTestUtils.waitForMutationCondition(
panel,
{ attributes: true },
() => {
return BrowserTestUtils.is_visible(panel);
}
);
ok(BrowserTestUtils.is_visible(panel), "Panel buttons are visible");
let screenshotReady = TestUtils.topicObserved(
"screenshots-preview-ready"
@@ -193,11 +200,18 @@ add_task(async function test_visibleScreenshotScrolled() {
// click toolbar button so panel shows
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = gBrowser.selectedBrowser.ownerDocument.querySelector(
"#screenshotsPagePanel"
);
await BrowserTestUtils.waitForMutationCondition(
panel,
{ attributes: true },
() => {
return BrowserTestUtils.is_visible(panel);
}
);
ok(BrowserTestUtils.is_visible(panel), "Panel buttons are visible");
let screenshotReady = TestUtils.topicObserved(
"screenshots-preview-ready"
@@ -281,11 +295,18 @@ add_task(async function test_visibleScreenshotScrolled() {
// click toolbar button so panel shows
helper.triggerUIFromToolbar();
await helper.waitForOverlay();
let panel = gBrowser.selectedBrowser.ownerDocument.querySelector(
"#screenshotsPagePanel"
);
await BrowserTestUtils.waitForMutationCondition(
panel,
{ attributes: true },
() => {
return BrowserTestUtils.is_visible(panel);
}
);
ok(BrowserTestUtils.is_visible(panel), "Panel buttons are visible");
let screenshotReady = TestUtils.topicObserved(
"screenshots-preview-ready"

View File

@@ -3,13 +3,6 @@
"use strict";
const { TelemetryTestUtils } = ChromeUtils.importESModule(
"resource://testing-common/TelemetryTestUtils.sys.mjs"
);
const { UrlbarTestUtils } = ChromeUtils.importESModule(
"resource://testing-common/UrlbarTestUtils.sys.mjs"
);
const TEST_ROOT = getRootDirectory(gTestPath).replace(
"chrome://mochitests/content",
"http://example.com"
@@ -150,22 +143,6 @@ class ScreenshotsHelper {
await BrowserTestUtils.waitForCondition(async () => {
let state = await this.getOverlayState();
return state === newState;
}, `Waiting for state change to ${newState}`);
}
async getHoverElementRect() {
return ContentTask.spawn(this.browser, null, async () => {
let screenshotsChild = content.windowGlobalChild.getActor(
"ScreenshotsComponent"
);
return screenshotsChild._overlay.stateHandler.getHoverElementBoxRect();
});
}
async waitForHoverElementRect() {
return TestUtils.waitForCondition(async () => {
let rect = await this.getHoverElementRect();
return rect;
});
}
@@ -247,23 +224,6 @@ class ScreenshotsHelper {
mouse.click(this.endX - 230, this.endY + 30);
}
async clickTestPageElement() {
let rect = await ContentTask.spawn(this.browser, [], async () => {
let ele = content.document.getElementById("testPageElement");
return ele.getBoundingClientRect();
});
let x = Math.floor(rect.x + rect.width / 2);
let y = Math.floor(rect.y + rect.height / 2);
mouse.move(x, y);
await this.waitForHoverElementRect();
mouse.down(x, y);
await this.waitForStateChange("draggingReady");
mouse.up(x, y);
await this.waitForStateChange("selected");
}
async zoomBrowser(zoom) {
await SpecialPowers.spawn(this.browser, [zoom], zoomLevel => {
const { Layout } = ChromeUtils.import(
@@ -538,49 +498,3 @@ function getContentDevicePixelRatio(browser) {
return content.window.devicePixelRatio;
});
}
async function clearAllTelemetryEvents() {
// Clear everything.
info("Clearing all telemetry events");
await TestUtils.waitForCondition(() => {
Services.telemetry.clearEvents();
let events = Services.telemetry.snapshotEvents(
Ci.nsITelemetry.DATASET_PRERELEASE_CHANNELS,
true
);
let content = events.content;
let parent = events.parent;
return (!content && !parent) || (!content.length && !parent.length);
});
}
async function waitForScreenshotsEventCount(count, process = "parent") {
await TestUtils.waitForCondition(
() => {
let events = TelemetryTestUtils.getEvents(
{ category: "screenshots" },
{ process }
);
info(`Got ${events?.length} event(s)`);
info(`Actual events: ${JSON.stringify(events, null, 2)}`);
return events.length === count ? events : null;
},
`Waiting for ${count} ${process} event(s).`,
200,
100
);
}
async function assertScreenshotsEvents(expectedEvents, process = "parent") {
info(`Expected events: ${JSON.stringify(expectedEvents, null, 2)}`);
// Make sure we have recorded the correct number of events
await waitForScreenshotsEventCount(expectedEvents.length, process);
TelemetryTestUtils.assertEvents(
expectedEvents,
{ category: "screenshots", clear: true },
{ process }
);
}

View File

@@ -7,6 +7,5 @@
<title>Screenshots</title>
</head>
<body style="height:4000px; width:4000px; background-repeat: no-repeat; background-size: 4008px 4016px; background-color: rgb(111, 111, 111); background-image:linear-gradient(to right, transparent 50%, rgba(0, 200, 200, 0.5) 50%),linear-gradient(to bottom, transparent 50%, rgba(100, 0, 100, 0.5) 50%);">
<div id="testPageElement" style="position:absolute; top:91px; left:93px; width:92px; height:94px; border:solid red;"></div>
</body>
</html>

View File

@@ -180,11 +180,9 @@ const DEFAULT_ACTIONS = {
return !lazy.BrowserWindowTracker.getTopWindow().gScreenshots.shouldScreenshotsButtonBeDisabled();
},
onPick: () => {
Services.obs.notifyObservers(
lazy.BrowserWindowTracker.getTopWindow(),
"menuitem-screenshot",
"quick_actions"
);
lazy.BrowserWindowTracker.getTopWindow()
.document.getElementById("Browser:Screenshot")
.doCommand();
return { focusContent: true };
},
},

View File

@@ -3675,6 +3675,7 @@ firefoxview:
expiry_version: "never"
release_channel_collection: opt-out
search:
engine:
objects: ["change_default", "change_private"]
@@ -3720,93 +3721,3 @@ cookie_banner:
no_rule: There is no cookie banner rule for the reloading domain.
has_cookie_rule: There is a matching cookie rule for the reloading domain.
has_click_rule: There is a matching click rule for the reloading domain.
screenshots:
download:
objects: ["overlay_download", "preview_download"]
description: >
Recorded when a user downloads a screenshot from the overlay or the preview.
notification_emails:
- screenshots-dev@mozilla.org
products:
- "firefox"
record_in_processes:
- main
bug_numbers:
- 1801019
expiry_version: "never"
release_channel_collection: opt-out
copy:
objects: ["overlay_copy", "preview_copy"]
description: >
Recorded when a user copies a screenshot from the overlay or the preview.
notification_emails:
- screenshots-dev@mozilla.org
products:
- "firefox"
record_in_processes:
- main
bug_numbers:
- 1801019
expiry_version: "never"
release_channel_collection: opt-out
selected:
objects: ["element", "region_selection", "visible", "full_page"]
description: >
Recorded when a user selects a region by hand, selects an element, selects the save visible, or selects save full page.
Note that this is recorded independent of whether or not the screenshot is saved.
notification_emails:
- screenshots-dev@mozilla.org
products:
- "firefox"
record_in_processes:
- main
- content
bug_numbers:
- 1801019
expiry_version: "never"
release_channel_collection: opt-out
started:
objects: ["toolbar_button", "shortcut", "context_menu", "quick_actions", "preview_retry", "overlay_retry"]
description: >
Recorded when a user opens the screenshots ui.
notification_emails:
- screenshots-dev@mozilla.org
products:
- "firefox"
record_in_processes:
- main
- content
bug_numbers:
- 1801019
expiry_version: "never"
release_channel_collection: opt-out
canceled:
objects: ["toolbar_button", "shortcut", "context_menu", "quick_actions", "preview_cancel", "overlay_cancel", "escape", "navigation"]
description: >
Recorded when a user closes the screenshots ui. The screenshots ui is closed after
copying/downloading but we do not record that as canceling the screenshots ui.
notification_emails:
- screenshots-dev@mozilla.org
products:
- "firefox"
record_in_processes:
- main
bug_numbers:
- 1801019
expiry_version: "never"
release_channel_collection: opt-out
failed:
objects: ["screenshot_too_large"]
description: >
Recorded when a screenshot is too big to capture and we have to crop the screenshot.
notification_emails:
- screenshots-dev@mozilla.org
products:
- "firefox"
record_in_processes:
- main
bug_numbers:
- 1801019
expiry_version: "never"
release_channel_collection: opt-out

View File

@@ -4324,7 +4324,7 @@ notificationbar:
record_in_processes:
- 'main'
# The following section contains scalars for the Screenshots extension.
# The following section contains scalars for Screenshots.
screenshots:
download:
bug_numbers: