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)