Loading toolkit/content/widgets/moz-support-link/moz-support-link.mjs +28 −19 Original line number Diff line number Diff line Loading @@ -17,7 +17,9 @@ window.MozXULElement?.insertFTLIfNeeded("toolkit/global/mozSupportLink.ftl"); export default class MozSupportLink extends HTMLAnchorElement { static SUPPORT_URL = "https://www.mozilla.org/"; static get observedAttributes() { return ["support-page", "utm-content"]; // We add tor-manual-page for pages hosted at tor project. Also shared with // base-browser/mullvad-browser. See tor-browser#42583. return ["support-page", "utm-content", "tor-manual-page"]; } /** Loading Loading @@ -87,12 +89,33 @@ export default class MozSupportLink extends HTMLAnchorElement { } attributeChangedCallback(attrName) { if (attrName === "support-page" || attrName === "utm-content") { if ( attrName === "support-page" || attrName === "utm-content" || attrName === "tor-manual-page" ) { this.#setHref(); } } #setHref() { let torManualPage = this.getAttribute("tor-manual-page"); if (torManualPage) { const [page, anchor] = torManualPage.split("_", 2); let locale = Services.locale.appLocaleAsBCP47; if (locale === "ja-JP-macos") { // Convert quirk-locale to the locale used for tor project. locale = "ja"; } let href = `https://tb-manual.torproject.org/${locale}/${page}/`; if (anchor) { href = `${href}#${anchor}`; } this.href = href; return; } let supportPage = this.getAttribute("support-page") ?? ""; let base = MozSupportLink.SUPPORT_URL + supportPage; this.href = this.hasAttribute("utm-content") Loading @@ -113,21 +136,7 @@ customElements.define("moz-support-link", MozSupportLink, { extends: "a" }); * Otherwise the url in unmodified form. */ export function formatUTMParams(contentAttribute, url) { if (!contentAttribute) { // Do not add utm parameters. See tor-browser#42583. // NOTE: This method is also present in about:addons. return url; } let parsedUrl = new URL(url); let domain = `.${parsedUrl.hostname}`; if ( !domain.endsWith(".mozilla.org") && // For testing: addons-dev.allizom.org and addons.allizom.org !domain.endsWith(".allizom.org") ) { return url; } parsedUrl.searchParams.set("utm_source", "firefox-browser"); parsedUrl.searchParams.set("utm_medium", "firefox-browser"); parsedUrl.searchParams.set("utm_content", contentAttribute); return parsedUrl.href; } Loading
toolkit/content/widgets/moz-support-link/moz-support-link.mjs +28 −19 Original line number Diff line number Diff line Loading @@ -17,7 +17,9 @@ window.MozXULElement?.insertFTLIfNeeded("toolkit/global/mozSupportLink.ftl"); export default class MozSupportLink extends HTMLAnchorElement { static SUPPORT_URL = "https://www.mozilla.org/"; static get observedAttributes() { return ["support-page", "utm-content"]; // We add tor-manual-page for pages hosted at tor project. Also shared with // base-browser/mullvad-browser. See tor-browser#42583. return ["support-page", "utm-content", "tor-manual-page"]; } /** Loading Loading @@ -87,12 +89,33 @@ export default class MozSupportLink extends HTMLAnchorElement { } attributeChangedCallback(attrName) { if (attrName === "support-page" || attrName === "utm-content") { if ( attrName === "support-page" || attrName === "utm-content" || attrName === "tor-manual-page" ) { this.#setHref(); } } #setHref() { let torManualPage = this.getAttribute("tor-manual-page"); if (torManualPage) { const [page, anchor] = torManualPage.split("_", 2); let locale = Services.locale.appLocaleAsBCP47; if (locale === "ja-JP-macos") { // Convert quirk-locale to the locale used for tor project. locale = "ja"; } let href = `https://tb-manual.torproject.org/${locale}/${page}/`; if (anchor) { href = `${href}#${anchor}`; } this.href = href; return; } let supportPage = this.getAttribute("support-page") ?? ""; let base = MozSupportLink.SUPPORT_URL + supportPage; this.href = this.hasAttribute("utm-content") Loading @@ -113,21 +136,7 @@ customElements.define("moz-support-link", MozSupportLink, { extends: "a" }); * Otherwise the url in unmodified form. */ export function formatUTMParams(contentAttribute, url) { if (!contentAttribute) { // Do not add utm parameters. See tor-browser#42583. // NOTE: This method is also present in about:addons. return url; } let parsedUrl = new URL(url); let domain = `.${parsedUrl.hostname}`; if ( !domain.endsWith(".mozilla.org") && // For testing: addons-dev.allizom.org and addons.allizom.org !domain.endsWith(".allizom.org") ) { return url; } parsedUrl.searchParams.set("utm_source", "firefox-browser"); parsedUrl.searchParams.set("utm_medium", "firefox-browser"); parsedUrl.searchParams.set("utm_content", contentAttribute); return parsedUrl.href; }