commit aa8403be4bbd78a9da654f88dfd8e3fb477afc6f
parent f332ba95d3b0e36ea8ed118c22aae713be785c8d
Author: Thomas Wisniewski <twisniewski@mozilla.com>
Date: Tue, 2 Dec 2025 03:17:58 +0000
Bug 2003282 - change the buttons on the Report Broken Site preview panel's footer to cancel and send; r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D274603
Diffstat:
5 files changed, 48 insertions(+), 57 deletions(-)
diff --git a/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs b/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs
@@ -301,9 +301,15 @@ export class ViewState {
);
}
- get copyButton() {
+ get previewCancelButton() {
return this.#previewView.querySelector(
- "#report-broken-site-popup-preview-copy-button"
+ "#report-broken-site-popup-preview-cancel-button"
+ );
+ }
+
+ get previewSendButton() {
+ return this.#previewView.querySelector(
+ "#report-broken-site-popup-preview-send-button"
);
}
@@ -629,33 +635,36 @@ export var ReportBrokenSite = new (class ReportBrokenSite {
}
#initPreviewView(state) {
- state.copyButton.addEventListener("click", event => {
- event.preventDefault();
- const { cachedPreviewData } = state;
- if (!cachedPreviewData) {
- console.error("Report Broken Site: No cached preview data to copy?");
- return;
+ 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();
}
- this.#setClipboardToString(JSON.stringify(cachedPreviewData));
});
- }
- #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
- );
+ state.previewCancelButton.addEventListener("command", ({ target }) => {
+ target.ownerGlobal.CustomizableUI.hidePanelForNode(target);
+ state.reset();
+ });
}
#initReportSentView(state) {
diff --git a/browser/components/reportbrokensite/content/reportBrokenSitePanel.inc.xhtml b/browser/components/reportbrokensite/content/reportBrokenSitePanel.inc.xhtml
@@ -130,9 +130,13 @@
<vbox id="report-broken-site-panel-preview-items"/>
</vbox>
<html:moz-button-group class="panel-footer">
- <html:moz-button id="report-broken-site-popup-preview-copy-button"
- type="primary"
- data-l10n-id="report-broken-site-panel-button-copy"/>
+ <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-group>
</panelview>
diff --git a/browser/components/reportbrokensite/test/browser/browser_report_preview.js b/browser/components/reportbrokensite/test/browser/browser_report_preview.js
@@ -78,8 +78,6 @@ async function checkPreviewPanel(rbs, basic) {
})
);
}
- target = await pressKeyAndGetFocus("VK_TAB");
- 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,25 +108,6 @@ 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,10 +365,6 @@ class ReportBrokenSiteHelper {
await this.#assertClickAndViewChanges(this.okayButton, this.sentView);
}
- async clickPreviewCopy() {
- EventUtils.synthesizeMouseAtCenter(this.previewCopyButton, {}, this.win);
- }
-
async clickPreview() {
await this.#assertClickAndViewChanges(
this.previewButton,
@@ -478,8 +474,12 @@ class ReportBrokenSiteHelper {
return this.getViewNode("report-broken-site-popup-preview-button");
}
- get previewCopyButton() {
- return this.getViewNode("report-broken-site-popup-preview-copy-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 previewItems() {
diff --git a/browser/locales/en-US/browser/reportBrokenSite.ftl b/browser/locales/en-US/browser/reportBrokenSite.ftl
@@ -70,4 +70,3 @@ 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