commit 77d076e38a89e197a0393a88c18cfd581d90d725
parent 5f26a17f96a7adec6c43a7f734ca7e9afefdefab
Author: agoloman <agoloman@mozilla.com>
Date: Tue, 2 Dec 2025 03:52:59 +0200
Revert "Bug 2003282 - change the buttons on the Report Broken Site preview panel's footer to cancel and send; r=Gijs" for causing bc failures @browser_report_preview.js.
This reverts commit 75d83b3a960ad02c4fb47e5d54a5210b1aab2bb3.
Diffstat:
5 files changed, 56 insertions(+), 49 deletions(-)
diff --git a/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs b/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs
@@ -301,15 +301,9 @@ export class ViewState {
);
}
- get previewCancelButton() {
+ get copyButton() {
return this.#previewView.querySelector(
- "#report-broken-site-popup-preview-cancel-button"
- );
- }
-
- get previewSendButton() {
- return this.#previewView.querySelector(
- "#report-broken-site-popup-preview-send-button"
+ "#report-broken-site-popup-preview-copy-button"
);
}
@@ -635,36 +629,33 @@ export var ReportBrokenSite = new (class ReportBrokenSite {
}
#initPreviewView(state) {
- state.previewSendButton.addEventListener("command", event => {
- // If the user has not entered a reason yet, then the form's validity
- // check will bring up the reason dropdown, despite it being out of view
- // (since we're looking at the preview panel, not the main one). This is
- // confusing, so we instead go back to the main view first if there is a
- // validity check failure (we also have to be careful to avoid possibly
- // racing with the user if they close the popup during this sequence, so
- // we don't leak any event listeners and world with them).
- if (!state.form.checkValidity()) {
- const view = event.target.closest("panelview").panelMultiView;
- const { document } = event.target.ownerGlobal;
- const listener = event => {
- document.removeEventListener("popuphiding", listener);
- view.removeEventListener("ViewShown", listener);
- if (event.type == "ViewShown") {
- state.form.requestSubmit();
- }
- };
- document.addEventListener("popuphiding", listener);
- view.addEventListener("ViewShown", listener);
- view.goBack();
- } else {
- state.form.requestSubmit();
+ state.copyButton.addEventListener("click", event => {
+ event.preventDefault();
+ const { cachedPreviewData } = state;
+ if (!cachedPreviewData) {
+ console.error("Report Broken Site: No cached preview data to copy?");
+ return;
}
+ this.#setClipboardToString(JSON.stringify(cachedPreviewData));
});
+ }
- state.previewCancelButton.addEventListener("command", ({ target }) => {
- target.ownerGlobal.CustomizableUI.hidePanelForNode(target);
- state.reset();
- });
+ #setClipboardToString(string) {
+ let str = Cc["@mozilla.org/supports-string;1"].createInstance(
+ Ci.nsISupportsString
+ );
+ str.data = string;
+ const xferable = Cc["@mozilla.org/widget/transferable;1"].createInstance(
+ Ci.nsITransferable
+ );
+ xferable.init(null);
+ xferable.addDataFlavor("text/plain");
+ xferable.setTransferData("text/plain", str);
+ Services.clipboard.setData(
+ xferable,
+ null,
+ Ci.nsIClipboard.kGlobalClipboard
+ );
}
#initReportSentView(state) {
diff --git a/browser/components/reportbrokensite/content/reportBrokenSitePanel.inc.xhtml b/browser/components/reportbrokensite/content/reportBrokenSitePanel.inc.xhtml
@@ -130,13 +130,9 @@
<vbox id="report-broken-site-panel-preview-items"/>
</vbox>
<html:moz-button-group class="panel-footer">
- <button id="report-broken-site-popup-preview-cancel-button"
- class="footer-button"
- data-l10n-id="report-broken-site-panel-button-cancel"/>
- <button id="report-broken-site-popup-preview-send-button"
- class="footer-button"
- default="true"
- data-l10n-id="report-broken-site-panel-button-send"/>
+ <html:moz-button id="report-broken-site-popup-preview-copy-button"
+ type="primary"
+ data-l10n-id="report-broken-site-panel-button-copy"/>
</html:moz-button-group>
</panelview>
diff --git a/browser/components/reportbrokensite/test/browser/browser_report_preview.js b/browser/components/reportbrokensite/test/browser/browser_report_preview.js
@@ -79,7 +79,7 @@ async function checkPreviewPanel(rbs, basic) {
);
}
target = await pressKeyAndGetFocus("VK_TAB");
- is(target, rbs.previewCancelButton, "Focus is on cancel button");
+ is(target, rbs.previewCopyButton, "Final focus is on copy button");
function adjustForWrapping(value) {
// match what we do to strings when generating the preview markup.
@@ -110,6 +110,25 @@ async function checkPreviewPanel(rbs, basic) {
areObjectsEqual(previewData, expectedPreviewData),
"Preview had the expected information"
);
+
+ setClipboard("did not copy");
+ rbs.clickPreviewCopy();
+ const copied = JSON.parse(getClipboardAsString());
+
+ // we don't adjust the copied text for wrapping like we do the markup.
+ const expectedCopyData = { basic };
+ for (const [category, values] of Object.entries(rawReportData)) {
+ expectedCopyData[category] = Object.fromEntries(
+ Object.entries(values)
+ .filter(([_, { do_not_preview }]) => !do_not_preview)
+ .map(([name, { value }]) => [name, value])
+ );
+ }
+
+ ok(
+ areObjectsEqual(copied, expectedCopyData),
+ "Copied the expected information"
+ );
}
add_task(async function testPreview() {
diff --git a/browser/components/reportbrokensite/test/browser/head.js b/browser/components/reportbrokensite/test/browser/head.js
@@ -365,6 +365,10 @@ class ReportBrokenSiteHelper {
await this.#assertClickAndViewChanges(this.okayButton, this.sentView);
}
+ async clickPreviewCopy() {
+ EventUtils.synthesizeMouseAtCenter(this.previewCopyButton, {}, this.win);
+ }
+
async clickPreview() {
await this.#assertClickAndViewChanges(
this.previewButton,
@@ -474,12 +478,8 @@ class ReportBrokenSiteHelper {
return this.getViewNode("report-broken-site-popup-preview-button");
}
- get previewCancelButton() {
- return this.getViewNode("report-broken-site-popup-preview-cancel-button");
- }
-
- get previewSendButton() {
- return this.getViewNode("report-broken-site-popup-preview-send-button");
+ get previewCopyButton() {
+ return this.getViewNode("report-broken-site-popup-preview-copy-button");
}
get previewItems() {
diff --git a/browser/locales/en-US/browser/reportBrokenSite.ftl b/browser/locales/en-US/browser/reportBrokenSite.ftl
@@ -70,3 +70,4 @@ report-broken-site-panel-preview-button =
.label = Preview report
report-broken-site-panel-preview-header =
.label = Preview report
+report-broken-site-panel-button-copy = Copy