commit d37080e197da0eaff6b4e08d5b2c44701713039f parent d5e698f5aeecc7068a7804eccb1c1f6d7d917733 Author: Thomas Wisniewski <twisniewski@mozilla.com> Date: Mon, 6 Oct 2025 16:20:37 +0000 Bug 1987781 - Add an opt-in for users to include the list of origins blocked by ETP to broken site reports; r=Gijs,fluent-reviewers,desktop-theme-reviewers,bolsson,hjones Differential Revision: https://phabricator.services.mozilla.com/D265895 Diffstat:
9 files changed, 70 insertions(+), 11 deletions(-)
diff --git a/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs b/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs @@ -94,6 +94,12 @@ class ViewState { static REASON_CHOICES_ID_PREFIX = "report-broken-site-popup-reason-"; + get blockedTrackersCheckbox() { + return this.#mainView.querySelector( + "#report-broken-site-popup-blocked-trackers-checkbox" + ); + } + get reasonInput() { return this.#mainView.querySelector("#report-broken-site-popup-reason"); } @@ -159,6 +165,7 @@ class ViewState { reset() { this.currentTabWebcompatDetailsPromise = undefined; this.form.reset(); + this.blockedTrackersCheckbox.checked = false; this.resetURLToCurrentTab(); } @@ -526,7 +533,9 @@ export var ReportBrokenSite = new (class ReportBrokenSite { return; } const multiview = event.target.closest("panelmultiview"); - this.#recordGleanEvent("send"); + this.#recordGleanEvent("send", { + sent_with_blocked_trackers: !!state.blockedTrackersCheckbox.checked, + }); await this.#sendReportAsGleanPing(state); multiview.showSubView("report-broken-site-popup-reportSentView"); state.reset(); @@ -664,6 +673,7 @@ export var ReportBrokenSite = new (class ReportBrokenSite { } async #sendReportAsGleanPing({ + blockedTrackersCheckbox, currentTabWebcompatDetailsPromise, description, reason, @@ -707,8 +717,7 @@ export var ReportBrokenSite = new (class ReportBrokenSite { gGraphics.devicePixelRatio.set(devicePixelRatio); for (const [name, value] of Object.entries(antitracking)) { - // TODO: Blocked origins will be included in bug 1987781. - if (name !== "blockedOrigins" || Cu.isInAutomation) { + if (name !== "blockedOrigins" || blockedTrackersCheckbox.checked) { gAntitracking[name].set(value); } } diff --git a/browser/components/reportbrokensite/content/reportBrokenSitePanel.inc.xhtml b/browser/components/reportbrokensite/content/reportBrokenSitePanel.inc.xhtml @@ -95,7 +95,11 @@ <html:textarea id="report-broken-site-popup-description" form="report-broken-site-panel-form" allow-arrow-navigation="true" - rows="8"></html:textarea> + rows="4"></html:textarea> + <vbox> + <checkbox id="report-broken-site-popup-blocked-trackers-checkbox" data-l10n-id="report-broken-site-panel-blocked-trackers-label" /> + <html:p data-l10n-id="report-broken-site-panel-blocked-trackers-description"/> + </vbox> <hbox> <html:a id="report-broken-site-popup-send-more-info-link" href="#" diff --git a/browser/components/reportbrokensite/test/browser/browser_antitracking_data_sent.js b/browser/components/reportbrokensite/test/browser/browser_antitracking_data_sent.js @@ -40,7 +40,7 @@ add_task(async function testSendButton() { description: "another test description", antitracking: { blockList: "strict", - blockedOrigins: ["https://trackertest.org"], + blockedOrigins: null, isPrivateBrowsing: true, hasTrackingContentBlocked: true, hasMixedActiveContentBlocked: true, diff --git a/browser/components/reportbrokensite/test/browser/browser_tab_key_order.js b/browser/components/reportbrokensite/test/browser/browser_tab_key_order.js @@ -55,6 +55,7 @@ async function ensureExpectedTabOrder( order.push("#report-broken-site-popup-reason"); } order.push("#report-broken-site-popup-description"); + order.push("#report-broken-site-popup-blocked-trackers-checkbox"); if (expectSendMoreInfo) { order.push("#report-broken-site-popup-send-more-info-link"); } diff --git a/browser/components/reportbrokensite/test/browser/head.js b/browser/components/reportbrokensite/test/browser/head.js @@ -418,6 +418,16 @@ class ReportBrokenSiteHelper { return this.mainView.querySelector(".subviewbutton-back"); } + get blockedTrackersCheckbox() { + return this.getViewNode( + "report-broken-site-popup-blocked-trackers-checkbox" + ); + } + + set blockedTrackersCheckbox(checked) { + this.blockedTrackersCheckbox.checked = checked; + } + get sendButton() { return this.getViewNode("report-broken-site-popup-send-button"); } diff --git a/browser/components/reportbrokensite/test/browser/send.js b/browser/components/reportbrokensite/test/browser/send.js @@ -207,7 +207,7 @@ async function getExpectedWebCompatInfo(tab, snapshot, fullAppData = false) { devicePixelRatio: `${content.devicePixelRatio}`, antitracking: { blockList: "basic", - blockedOrigins: [], + blockedOrigins: null, isPrivateBrowsing: false, hasTrackingContentBlocked: false, hasMixedActiveContentBlocked: false, @@ -287,6 +287,10 @@ async function testSend(tab, menu, expectedOverrides = {}) { if (expectedOverrides.antitracking) { expected.tabInfo.antitracking = expectedOverrides.antitracking; + + if (expectedOverrides.antitracking.blockedOrigins) { + rbs.blockedTrackersCheckbox = true; + } } if (expectedOverrides.frameworks) { @@ -309,10 +313,14 @@ async function testSend(tab, menu, expectedOverrides = {}) { ["basic", "strict"].includes(tabInfo.antitracking.blockList), "Got a blockList" ); - ok( - Array.isArray(tabInfo.antitracking.blockedOrigins), - "Got an array for blockedOrigins" - ); + if (rbs.blockedTrackersCheckbox.checked) { + ok( + Array.isArray(tabInfo.antitracking.blockedOrigins), + "Got an array for blockedOrigins" + ); + } else { + ok(!tabInfo.antitracking.blockedOrigins, "No blockedOrigins included"); + } ok(tabInfo.useragentString?.length, "Got a final UA string"); ok( browserInfo.app.defaultUseragentString?.length, @@ -328,8 +336,20 @@ async function testSend(tab, menu, expectedOverrides = {}) { await rbs.clickOkay(); + const telemetry = Glean.webcompatreporting.send.testGetValue(); + is(telemetry?.length, 1, "Got a 'send' telemetry event"); + is( + telemetry[0].extra.sent_with_blocked_trackers, + String(!!expectedOverrides.antitracking?.blockedOrigins), + "Got correct 'sent_with_blocked_trackers' flag" + ); + // re-opening the panel, the url and description should be reset rbs = await menu.openReportBrokenSite(); rbs.isMainViewResetToCurrentTab(); + ok( + !rbs.blockedTrackersCheckbox.checked, + "blocked trackers checkbox is reset" + ); rbs.close(); } diff --git a/browser/components/reportbrokensite/test/browser/send_more_info.js b/browser/components/reportbrokensite/test/browser/send_more_info.js @@ -39,7 +39,7 @@ async function reformatExpectedWebCompatInfo(tab, overrides) { const atOverrides = overrides.antitracking; const blockList = atOverrides?.blockList ?? antitracking.blockList; const blockedOrigins = - atOverrides?.blockedOrigins ?? antitracking.blockedOrigins; + atOverrides?.blockedOrigins ?? antitracking.blockedOrigins ?? []; const hasMixedActiveContentBlocked = atOverrides?.hasMixedActiveContentBlocked ?? antitracking.hasMixedActiveContentBlocked; diff --git a/browser/locales/en-US/browser/reportBrokenSite.ftl b/browser/locales/en-US/browser/reportBrokenSite.ftl @@ -58,3 +58,7 @@ report-broken-site-panel-report-sent-text = Thank you for helping { -brand-produ report-broken-site-panel-invalid-url-label = Please enter a valid URL report-broken-site-panel-missing-reason-label = Please choose a reason + +report-broken-site-panel-blocked-trackers-label = + .label = Send URLs blocked by tracking protection +report-broken-site-panel-blocked-trackers-description = Enhanced Tracking Protection may block trackers and scripts that some websites need to work properly. diff --git a/browser/themes/shared/customizableui/panelUI-shared.css b/browser/themes/shared/customizableui/panelUI-shared.css @@ -2180,6 +2180,17 @@ radiogroup:focus-visible > .subviewradio[focused="true"] { line-height: 1.5; } + vbox > checkbox { + margin-block-start: var(--space-large); + } + + vbox > p { + font-size: 0.9em; + color: var(--text-color-deemphasized); + line-height: 1.2em; + margin-inline-start: calc(var(--space-medium) + var(--checkbox-size)); + } + textarea { resize: vertical; }