diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 467b2eedf984..84c5ccb54555 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -1744,7 +1744,8 @@ pref("signon.showAutoCompleteFooter", true); pref("signon.management.page.enabled", false); pref("signon.showAutoCompleteOrigins", true); pref("signon.includeOtherSubdomainsInLookup", true); -pref("signon.feedbackURL", +pref("signon.management.page.faqURL", "https://lockwise.firefox.com/faq.html"); +pref("signon.management.page.feedbackURL", "https://www.surveygizmo.com/s3/5036102/Lockwise-feedback?ver=%VERSION%"); // Enable the "Simplify Page" feature in Print Preview. This feature diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index 02b2d53fca6b..743c6e112328 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -89,6 +89,7 @@ let LEGACY_ACTORS = { "AboutLoginsDeleteLogin": {wantUntrusted: true}, "AboutLoginsImport": {wantUntrusted: true}, "AboutLoginsInit": {wantUntrusted: true}, + "AboutLoginsOpenFAQ": {wantUntrusted: true}, "AboutLoginsOpenFeedback": {wantUntrusted: true}, "AboutLoginsOpenPreferences": {wantUntrusted: true}, "AboutLoginsOpenSite": {wantUntrusted: true}, @@ -583,6 +584,7 @@ const listeners = { "AboutLogins:CreateLogin": ["AboutLoginsParent"], "AboutLogins:DeleteLogin": ["AboutLoginsParent"], "AboutLogins:Import": ["AboutLoginsParent"], + "AboutLogins:OpenFAQ": ["AboutLoginsParent"], "AboutLogins:OpenFeedback": ["AboutLoginsParent"], "AboutLogins:OpenPreferences": ["AboutLoginsParent"], "AboutLogins:OpenSite": ["AboutLoginsParent"], diff --git a/browser/components/aboutlogins/AboutLoginsChild.jsm b/browser/components/aboutlogins/AboutLoginsChild.jsm index f1af32a15ce7..e2fa99b44fc0 100644 --- a/browser/components/aboutlogins/AboutLoginsChild.jsm +++ b/browser/components/aboutlogins/AboutLoginsChild.jsm @@ -42,14 +42,18 @@ class AboutLoginsChild extends ActorChild { this.mm.sendAsyncMessage("AboutLogins:DeleteLogin", {login: event.detail}); break; } - case "AboutLoginsOpenFeedback": { - this.mm.sendAsyncMessage("AboutLogins:OpenFeedback"); - break; - } case "AboutLoginsImport": { this.mm.sendAsyncMessage("AboutLogins:Import"); break; } + case "AboutLoginsOpenFAQ": { + this.mm.sendAsyncMessage("AboutLogins:OpenFAQ"); + break; + } + case "AboutLoginsOpenFeedback": { + this.mm.sendAsyncMessage("AboutLogins:OpenFeedback"); + break; + } case "AboutLoginsOpenPreferences": { this.mm.sendAsyncMessage("AboutLogins:OpenPreferences"); break; diff --git a/browser/components/aboutlogins/AboutLoginsParent.jsm b/browser/components/aboutlogins/AboutLoginsParent.jsm index 6023605e3e20..d937de43719c 100644 --- a/browser/components/aboutlogins/AboutLoginsParent.jsm +++ b/browser/components/aboutlogins/AboutLoginsParent.jsm @@ -29,9 +29,12 @@ const PRIVILEGEDABOUT_PROCESS_ENABLED = Services.prefs.getBoolPref(PRIVILEGEDABOUT_PROCESS_PREF, false); -const FEEDBACK_URL_PREF = "signon.feedbackURL"; +const FEEDBACK_URL_PREF = "signon.management.page.feedbackURL"; const FEEDBACK_URL = Services.urlFormatter.formatURLPref(FEEDBACK_URL_PREF); +const FAQ_URL_PREF = "signon.management.page.faqURL"; +const FAQ_URL = Services.prefs.getStringPref(FAQ_URL_PREF); + // When the privileged content process is enabled, we expect about:logins // to load in it. Otherwise, it's in a normal web content process. const EXPECTED_ABOUTLOGINS_REMOTE_TYPE = @@ -113,6 +116,10 @@ var AboutLoginsParent = { message.target.ownerGlobal.openWebLinkIn(FEEDBACK_URL, "tab", {relatedToCurrent: true}); break; } + case "AboutLogins:OpenFAQ": { + message.target.ownerGlobal.openWebLinkIn(FAQ_URL, "tab", {relatedToCurrent: true}); + break; + } case "AboutLogins:OpenPreferences": { message.target.ownerGlobal.openPreferences("privacy-logins"); break; diff --git a/browser/components/aboutlogins/content/aboutLogins.ftl b/browser/components/aboutlogins/content/aboutLogins.ftl index 843334c3790b..3a7623b66073 100644 --- a/browser/components/aboutlogins/content/aboutLogins.ftl +++ b/browser/components/aboutlogins/content/aboutLogins.ftl @@ -62,6 +62,7 @@ master-password-reload-button-accesskey = L menu-button = .button-title = Open menu + .menuitem-faq = Frequently Asked Questions .menuitem-feedback = Leave Feedback .menuitem-import = Import Passwords… .menuitem-preferences = diff --git a/browser/components/aboutlogins/content/aboutLogins.html b/browser/components/aboutlogins/content/aboutLogins.html index 5c80b36b863c..ac623497a042 100644 --- a/browser/components/aboutlogins/content/aboutLogins.html +++ b/browser/components/aboutlogins/content/aboutLogins.html @@ -28,6 +28,7 @@ @@ -150,6 +151,7 @@ + diff --git a/browser/components/aboutlogins/content/components/menu-button.css b/browser/components/aboutlogins/content/components/menu-button.css index 99c5442717da..55c4c62d0eb9 100644 --- a/browser/components/aboutlogins/content/components/menu-button.css +++ b/browser/components/aboutlogins/content/components/menu-button.css @@ -70,3 +70,7 @@ .menuitem-feedback { background-image: url("chrome://browser/content/aboutlogins/icons/feedback.svg"); } + +.menuitem-faq { + background-image: url("chrome://browser/content/aboutlogins/icons/faq.svg"); +} diff --git a/browser/components/aboutlogins/content/components/menu-button.js b/browser/components/aboutlogins/content/components/menu-button.js index 44437a609c1b..b3487a2a7fd0 100644 --- a/browser/components/aboutlogins/content/components/menu-button.js +++ b/browser/components/aboutlogins/content/components/menu-button.js @@ -34,6 +34,7 @@ export default class MenuButton extends ReflectedFluentElement { static get reflectedFluentIDs() { return [ "button-title", + "menuitem-faq", "menuitem-import", "menuitem-feedback", "menuitem-preferences", @@ -75,6 +76,7 @@ export default class MenuButton extends ReflectedFluentElement { } let classList = event.originalTarget.classList; if (classList.contains("menuitem-import") || + classList.contains("menuitem-faq") || classList.contains("menuitem-feedback") || classList.contains("menuitem-preferences")) { let eventName = event.originalTarget.dataset.eventName; diff --git a/browser/components/aboutlogins/content/icons/faq.svg b/browser/components/aboutlogins/content/icons/faq.svg new file mode 100644 index 000000000000..ddba407288a8 --- /dev/null +++ b/browser/components/aboutlogins/content/icons/faq.svg @@ -0,0 +1,6 @@ + + + + diff --git a/browser/components/aboutlogins/jar.mn b/browser/components/aboutlogins/jar.mn index fdb383fd92c9..cbd8f3fa3019 100644 --- a/browser/components/aboutlogins/jar.mn +++ b/browser/components/aboutlogins/jar.mn @@ -16,10 +16,11 @@ browser.jar: content/browser/aboutlogins/components/menu-button.css (content/components/menu-button.css) content/browser/aboutlogins/components/menu-button.js (content/components/menu-button.js) content/browser/aboutlogins/components/reflected-fluent-element.js (content/components/reflected-fluent-element.js) - content/browser/aboutlogins/icons/delete.svg (content/icons/delete.svg) - content/browser/aboutlogins/icons/edit.svg (content/icons/edit.svg) - content/browser/aboutlogins/icons/favicon.svg (content/icons/favicon.svg) - content/browser/aboutlogins/icons/feedback.svg (content/icons/feedback.svg) + content/browser/aboutlogins/icons/delete.svg (content/icons/delete.svg) + content/browser/aboutlogins/icons/edit.svg (content/icons/edit.svg) + content/browser/aboutlogins/icons/faq.svg (content/icons/faq.svg) + content/browser/aboutlogins/icons/favicon.svg (content/icons/favicon.svg) + content/browser/aboutlogins/icons/feedback.svg (content/icons/feedback.svg) content/browser/aboutlogins/icons/hide-password.svg (content/icons/hide-password.svg) content/browser/aboutlogins/icons/show-password.svg (content/icons/show-password.svg) content/browser/aboutlogins/aboutLogins.css (content/aboutLogins.css)