Backed out changeset d853ddfd853e (bug 1801019) for bc failures on browser_screenshots_telemetry_tests.js. CLOSED TREE
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 };
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
@@ -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"
|
||||
);
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
);
|
||||
});
|
||||
@@ -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);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 }
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 };
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user