Bug 1668965 - Remove mention of Lockwise mobile apps from about:logins. r=sfoster,fluent-reviewers
☠☠ backed out by 1ee79a29229a ☠ ☠
authorTim Giles <tgiles@mozilla.com>
Tue, 27 Oct 2020 16:25:57 +0000
changeset 554737 6de570466e661b7ce1b61c81587b5c5ae9506765
parent 554736 efba64ab92d5184a0a8bafeb3a7b1310071a0487
child 554738 5cf9cee71f4c619d9c8d9e77b241a163c3d6f5ec
push id37898
push userabutkovits@mozilla.com
push dateWed, 28 Oct 2020 09:24:21 +0000
treeherdermozilla-central@83bf4fd3b1fb [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssfoster, fluent-reviewers
bugs1668965
milestone84.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1668965 - Remove mention of Lockwise mobile apps from about:logins. r=sfoster,fluent-reviewers Differential Revision: https://phabricator.services.mozilla.com/D93260
browser/app/profile/firefox.js
browser/base/content/test/static/browser_all_files_referenced.js
browser/components/BrowserGlue.jsm
browser/components/aboutlogins/AboutLoginsChild.jsm
browser/components/aboutlogins/AboutLoginsParent.jsm
browser/components/aboutlogins/content/aboutLogins.html
browser/components/aboutlogins/content/aboutLogins.js
browser/components/aboutlogins/content/components/login-footer.css
browser/components/aboutlogins/content/components/login-footer.js
browser/components/aboutlogins/content/components/login-item.css
browser/components/aboutlogins/content/components/menu-button.css
browser/components/aboutlogins/content/third-party/LICENSE
browser/components/aboutlogins/content/third-party/app-store/app_ar.png
browser/components/aboutlogins/content/third-party/app-store/app_az.png
browser/components/aboutlogins/content/third-party/app-store/app_bg.png
browser/components/aboutlogins/content/third-party/app-store/app_cs.png
browser/components/aboutlogins/content/third-party/app-store/app_da.png
browser/components/aboutlogins/content/third-party/app-store/app_de.png
browser/components/aboutlogins/content/third-party/app-store/app_el.png
browser/components/aboutlogins/content/third-party/app-store/app_en.png
browser/components/aboutlogins/content/third-party/app-store/app_es-mx.png
browser/components/aboutlogins/content/third-party/app-store/app_es.png
browser/components/aboutlogins/content/third-party/app-store/app_et.png
browser/components/aboutlogins/content/third-party/app-store/app_fi.png
browser/components/aboutlogins/content/third-party/app-store/app_fr.png
browser/components/aboutlogins/content/third-party/app-store/app_he.png
browser/components/aboutlogins/content/third-party/app-store/app_hu.png
browser/components/aboutlogins/content/third-party/app-store/app_id.png
browser/components/aboutlogins/content/third-party/app-store/app_it.png
browser/components/aboutlogins/content/third-party/app-store/app_ja.png
browser/components/aboutlogins/content/third-party/app-store/app_ko.png
browser/components/aboutlogins/content/third-party/app-store/app_lt.png
browser/components/aboutlogins/content/third-party/app-store/app_lv.png
browser/components/aboutlogins/content/third-party/app-store/app_my.png
browser/components/aboutlogins/content/third-party/app-store/app_nb.png
browser/components/aboutlogins/content/third-party/app-store/app_nl.png
browser/components/aboutlogins/content/third-party/app-store/app_nn.png
browser/components/aboutlogins/content/third-party/app-store/app_pl.png
browser/components/aboutlogins/content/third-party/app-store/app_pt-br.png
browser/components/aboutlogins/content/third-party/app-store/app_pt-pt.png
browser/components/aboutlogins/content/third-party/app-store/app_ro.png
browser/components/aboutlogins/content/third-party/app-store/app_ru.png
browser/components/aboutlogins/content/third-party/app-store/app_si.png
browser/components/aboutlogins/content/third-party/app-store/app_sk.png
browser/components/aboutlogins/content/third-party/app-store/app_sv.png
browser/components/aboutlogins/content/third-party/app-store/app_th.png
browser/components/aboutlogins/content/third-party/app-store/app_tl.png
browser/components/aboutlogins/content/third-party/app-store/app_tr.png
browser/components/aboutlogins/content/third-party/app-store/app_vi.png
browser/components/aboutlogins/content/third-party/app-store/app_zh-hans.png
browser/components/aboutlogins/content/third-party/app-store/app_zh-hant.png
browser/components/aboutlogins/content/third-party/play-store/play_af.png
browser/components/aboutlogins/content/third-party/play-store/play_ar.png
browser/components/aboutlogins/content/third-party/play-store/play_az.png
browser/components/aboutlogins/content/third-party/play-store/play_be.png
browser/components/aboutlogins/content/third-party/play-store/play_bg.png
browser/components/aboutlogins/content/third-party/play-store/play_bn.png
browser/components/aboutlogins/content/third-party/play-store/play_bs.png
browser/components/aboutlogins/content/third-party/play-store/play_ca.png
browser/components/aboutlogins/content/third-party/play-store/play_cs.png
browser/components/aboutlogins/content/third-party/play-store/play_da.png
browser/components/aboutlogins/content/third-party/play-store/play_de.png
browser/components/aboutlogins/content/third-party/play-store/play_el.png
browser/components/aboutlogins/content/third-party/play-store/play_en.png
browser/components/aboutlogins/content/third-party/play-store/play_es.png
browser/components/aboutlogins/content/third-party/play-store/play_et.png
browser/components/aboutlogins/content/third-party/play-store/play_eu.png
browser/components/aboutlogins/content/third-party/play-store/play_fa.png
browser/components/aboutlogins/content/third-party/play-store/play_fr.png
browser/components/aboutlogins/content/third-party/play-store/play_gl.png
browser/components/aboutlogins/content/third-party/play-store/play_gu.png
browser/components/aboutlogins/content/third-party/play-store/play_he.png
browser/components/aboutlogins/content/third-party/play-store/play_hi.png
browser/components/aboutlogins/content/third-party/play-store/play_hr.png
browser/components/aboutlogins/content/third-party/play-store/play_hu.png
browser/components/aboutlogins/content/third-party/play-store/play_hy.png
browser/components/aboutlogins/content/third-party/play-store/play_id.png
browser/components/aboutlogins/content/third-party/play-store/play_is.png
browser/components/aboutlogins/content/third-party/play-store/play_it.png
browser/components/aboutlogins/content/third-party/play-store/play_ja.png
browser/components/aboutlogins/content/third-party/play-store/play_ka.png
browser/components/aboutlogins/content/third-party/play-store/play_kk.png
browser/components/aboutlogins/content/third-party/play-store/play_km.png
browser/components/aboutlogins/content/third-party/play-store/play_kn.png
browser/components/aboutlogins/content/third-party/play-store/play_ko.png
browser/components/aboutlogins/content/third-party/play-store/play_lo.png
browser/components/aboutlogins/content/third-party/play-store/play_lt.png
browser/components/aboutlogins/content/third-party/play-store/play_lv.png
browser/components/aboutlogins/content/third-party/play-store/play_mk.png
browser/components/aboutlogins/content/third-party/play-store/play_mr.png
browser/components/aboutlogins/content/third-party/play-store/play_ms.png
browser/components/aboutlogins/content/third-party/play-store/play_my.png
browser/components/aboutlogins/content/third-party/play-store/play_nb.png
browser/components/aboutlogins/content/third-party/play-store/play_ne.png
browser/components/aboutlogins/content/third-party/play-store/play_nl.png
browser/components/aboutlogins/content/third-party/play-store/play_nn.png
browser/components/aboutlogins/content/third-party/play-store/play_pa.png
browser/components/aboutlogins/content/third-party/play-store/play_pl.png
browser/components/aboutlogins/content/third-party/play-store/play_pt-br.png
browser/components/aboutlogins/content/third-party/play-store/play_pt.png
browser/components/aboutlogins/content/third-party/play-store/play_ro.png
browser/components/aboutlogins/content/third-party/play-store/play_ru.png
browser/components/aboutlogins/content/third-party/play-store/play_si.png
browser/components/aboutlogins/content/third-party/play-store/play_sk.png
browser/components/aboutlogins/content/third-party/play-store/play_sl.png
browser/components/aboutlogins/content/third-party/play-store/play_sq.png
browser/components/aboutlogins/content/third-party/play-store/play_sr.png
browser/components/aboutlogins/content/third-party/play-store/play_sv.png
browser/components/aboutlogins/content/third-party/play-store/play_ta.png
browser/components/aboutlogins/content/third-party/play-store/play_te.png
browser/components/aboutlogins/content/third-party/play-store/play_th.png
browser/components/aboutlogins/content/third-party/play-store/play_tl.png
browser/components/aboutlogins/content/third-party/play-store/play_tr.png
browser/components/aboutlogins/content/third-party/play-store/play_uk.png
browser/components/aboutlogins/content/third-party/play-store/play_ur.png
browser/components/aboutlogins/content/third-party/play-store/play_uz.png
browser/components/aboutlogins/content/third-party/play-store/play_vi.png
browser/components/aboutlogins/content/third-party/play-store/play_zh-cn.png
browser/components/aboutlogins/content/third-party/play-store/play_zh-tw.png
browser/components/aboutlogins/jar.mn
browser/components/aboutlogins/tests/browser/browser.ini
browser/components/aboutlogins/tests/browser/browser_dismissFooter.js
browser/components/aboutlogins/tests/browser/browser_openPreferencesExternal.js
browser/components/aboutlogins/tests/chrome/test_menu_button.html
browser/installer/allowed-dupes.mn
browser/locales/en-US/browser/aboutLogins.ftl
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1721,18 +1721,16 @@ pref("browser.contentblocking.report.vpn
 pref("browser.contentblocking.report.monitor.url", "https://monitor.firefox.com/?entrypoint=protection_report_monitor&utm_source=about-protections");
 pref("browser.contentblocking.report.monitor.how_it_works.url", "https://monitor.firefox.com/about");
 pref("browser.contentblocking.report.monitor.sign_in_url", "https://monitor.firefox.com/oauth/init?entrypoint=protection_report_monitor&utm_source=about-protections&email=");
 pref("browser.contentblocking.report.monitor.preferences_url", "https://monitor.firefox.com/user/preferences");
 pref("browser.contentblocking.report.monitor.home_page_url", "https://monitor.firefox.com/user/dashboard");
 pref("browser.contentblocking.report.manage_devices.url", "https://accounts.firefox.com/settings/clients");
 pref("browser.contentblocking.report.endpoint_url", "https://monitor.firefox.com/user/breach-stats?includeResolved=true");
 pref("browser.contentblocking.report.proxy_extension.url", "https://fpn.firefox.com/browser?utm_source=firefox-desktop&utm_medium=referral&utm_campaign=about-protections&utm_content=about-protections");
-pref("browser.contentblocking.report.lockwise.mobile-ios.url", "https://apps.apple.com/app/id1314000270");
-pref("browser.contentblocking.report.lockwise.mobile-android.url", "https://play.google.com/store/apps/details?id=mozilla.lockbox&referrer=utm_source%3Dprotection_report%26utm_content%3Dmobile_promotion");
 pref("browser.contentblocking.report.mobile-ios.url", "https://apps.apple.com/app/firefox-private-safe-browser/id989804926");
 pref("browser.contentblocking.report.mobile-android.url", "https://play.google.com/store/apps/details?id=org.mozilla.firefox&referrer=utm_source%3Dprotection_report%26utm_content%3Dmobile_promotion");
 pref("browser.contentblocking.report.vpn.url", "https://vpn.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign=about-protections-card");
 pref("browser.contentblocking.report.vpn-promo.url", "https://vpn.mozilla.org/?utm_source=firefox-browser&utm_medium=firefox-browser&utm_campaign=about-protections-top-promo");
 pref("browser.contentblocking.report.vpn-android.url", "https://play.google.com/store/apps/details?id=org.mozilla.firefox.vpn&referrer=utm_source%3Dfirefox-browser%26utm_medium%3Dfirefox-browser%26utm_campaign%3Dabout-protections-mobile-vpn%26anid%3D--");
 pref("browser.contentblocking.report.vpn-ios.url", "https://apps.apple.com/us/app/firefox-private-network-vpn/id1489407738");
 
 // Protection Report's SUMO urls
@@ -1882,21 +1880,18 @@ pref("signon.management.page.fileImport.
 pref("signon.management.page.os-auth.enabled", false);
 #endif
 pref("signon.management.page.breach-alerts.enabled", true);
 pref("signon.management.page.vulnerable-passwords.enabled", true);
 pref("signon.management.page.sort", "name");
 // The utm_creative value is appended within the code (specific to the location on
 // where it is clicked). Be sure that if these two prefs are updated, that
 // the utm_creative param be last.
-pref("signon.management.page.mobileAndroidURL", "https://app.adjust.com/6tteyjo?redirect=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dmozilla.lockbox&utm_campaign=Desktop&utm_adgroup=InProduct&utm_creative=");
-pref("signon.management.page.mobileAppleURL", "https://app.adjust.com/6tteyjo?redirect=https%3A%2F%2Fitunes.apple.com%2Fapp%2Fid1314000270%3Fmt%3D8&utm_campaign=Desktop&utm_adgroup=InProduct&utm_creative=");
 pref("signon.management.page.breachAlertUrl",
      "https://monitor.firefox.com/breach-details/");
-pref("signon.management.page.hideMobileFooter", false);
 pref("signon.management.page.showPasswordSyncNotification", true);
 pref("signon.passwordEditCapture.enabled", true);
 pref("signon.showAutoCompleteFooter", true);
 pref("signon.showAutoCompleteImport", "import");
 pref("signon.suggestImportCount", 3);
 
 // Enable the "Simplify Page" feature in Print Preview. This feature
 // is disabled by default in toolkit.
--- a/browser/base/content/test/static/browser_all_files_referenced.js
+++ b/browser/base/content/test/static/browser_all_files_referenced.js
@@ -47,21 +47,16 @@ var gExceptionPaths = [
   "resource://formautofill/addressmetadata/",
 
   // Exclude all search-extensions because they aren't referenced by filename
   "resource://search-extensions/",
 
   // Exclude all services-automation because they are used through webdriver
   "resource://gre/modules/services-automation/",
   "resource://services-automation/ServicesAutomation.jsm",
-
-  // Bug 1550165 - Exclude localized App/Play store badges. These badges
-  // are displayed in a promo area on the first load of about:logins.
-  "chrome://browser/content/aboutlogins/third-party/app-store/",
-  "chrome://browser/content/aboutlogins/third-party/play-store/",
 ];
 
 // These are not part of the omni.ja file, so we find them only when running
 // the test on a non-packaged build.
 if (AppConstants.platform == "macosx") {
   gExceptionPaths.push("resource://gre/res/cursors/");
   gExceptionPaths.push("resource://gre/res/touchbar/");
 }
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -143,23 +143,20 @@ let JSWINDOWACTORS = {
     },
     child: {
       moduleURI: "resource:///actors/AboutLoginsChild.jsm",
       events: {
         AboutLoginsCopyLoginDetail: { wantUntrusted: true },
         AboutLoginsCreateLogin: { wantUntrusted: true },
         AboutLoginsDeleteLogin: { wantUntrusted: true },
         AboutLoginsDismissBreachAlert: { wantUntrusted: true },
-        AboutLoginsHideFooter: { wantUntrusted: true },
         AboutLoginsImportFromBrowser: { wantUntrusted: true },
         AboutLoginsImportFromFile: { wantUntrusted: true },
         AboutLoginsInit: { wantUntrusted: true },
         AboutLoginsGetHelp: { wantUntrusted: true },
-        AboutLoginsOpenMobileAndroid: { wantUntrusted: true },
-        AboutLoginsOpenMobileIos: { wantUntrusted: true },
         AboutLoginsOpenPreferences: { wantUntrusted: true },
         AboutLoginsOpenSite: { wantUntrusted: true },
         AboutLoginsRecordTelemetryEvent: { wantUntrusted: true },
         AboutLoginsSortChanged: { wantUntrusted: true },
         AboutLoginsSyncEnable: { wantUntrusted: true },
         AboutLoginsSyncOptions: { wantUntrusted: true },
         AboutLoginsUpdateLogin: { wantUntrusted: true },
         AboutLoginsExportPasswords: { wantUntrusted: true },
--- a/browser/components/aboutlogins/AboutLoginsChild.jsm
+++ b/browser/components/aboutlogins/AboutLoginsChild.jsm
@@ -127,48 +127,32 @@ class AboutLoginsChild extends JSWindowA
       case "AboutLoginsExportPasswords": {
         this.sendAsyncMessage("AboutLogins:ExportPasswords");
         break;
       }
       case "AboutLoginsGetHelp": {
         this.sendAsyncMessage("AboutLogins:GetHelp");
         break;
       }
-      case "AboutLoginsHideFooter": {
-        this.sendAsyncMessage("AboutLogins:HideFooter");
-        break;
-      }
       case "AboutLoginsImportFromBrowser": {
         this.sendAsyncMessage("AboutLogins:Import");
         recordTelemetryEvent({
           object: "import_from_browser",
           method: "mgmt_menu_item_used",
         });
         break;
       }
       case "AboutLoginsImportFromFile": {
         this.sendAsyncMessage("AboutLogins:ImportPasswords");
         recordTelemetryEvent({
           object: "import_from_csv",
           method: "mgmt_menu_item_used",
         });
         break;
       }
-      case "AboutLoginsOpenMobileAndroid": {
-        this.sendAsyncMessage("AboutLogins:OpenMobileAndroid", {
-          source: event.detail,
-        });
-        break;
-      }
-      case "AboutLoginsOpenMobileIos": {
-        this.sendAsyncMessage("AboutLogins:OpenMobileIos", {
-          source: event.detail,
-        });
-        break;
-      }
       case "AboutLoginsOpenPreferences": {
         this.sendAsyncMessage("AboutLogins:OpenPreferences");
         recordTelemetryEvent({
           object: "preferences",
           method: "mgmt_menu_item_used",
         });
         break;
       }
--- a/browser/components/aboutlogins/AboutLoginsParent.jsm
+++ b/browser/components/aboutlogins/AboutLoginsParent.jsm
@@ -55,141 +55,23 @@ XPCOMUtils.defineLazyPreferenceGetter(
 XPCOMUtils.defineLazyGetter(this, "AboutLoginsL10n", () => {
   return new Localization(["branding/brand.ftl", "browser/aboutLogins.ftl"]);
 });
 
 const ABOUT_LOGINS_ORIGIN = "about:logins";
 const MASTER_PASSWORD_NOTIFICATION_ID = "master-password-login-required";
 const PASSWORD_SYNC_NOTIFICATION_ID = "enable-password-sync";
 
-const HIDE_MOBILE_FOOTER_PREF = "signon.management.page.hideMobileFooter";
 const SHOW_PASSWORD_SYNC_NOTIFICATION_PREF =
   "signon.management.page.showPasswordSyncNotification";
 
 // about:logins will always use the privileged content process,
 // even if it is disabled for other consumers such as about:newtab.
 const EXPECTED_ABOUTLOGINS_REMOTE_TYPE = E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE;
 
-// App store badges sourced from https://developer.apple.com/app-store/marketing/guidelines/#section-badges.
-// This array mirrors the file names from the App store directory (./content/third-party/app-store)
-const APP_STORE_LOCALES = [
-  "az",
-  "ar",
-  "bg",
-  "cs",
-  "da",
-  "de",
-  "el",
-  "en",
-  "es-mx",
-  "es",
-  "et",
-  "fi",
-  "fr",
-  "he",
-  "hu",
-  "id",
-  "it",
-  "ja",
-  "ko",
-  "lt",
-  "lv",
-  "my",
-  "nb",
-  "nl",
-  "nn",
-  "pl",
-  "pt-br",
-  "pt-pt",
-  "ro",
-  "ru",
-  "si",
-  "sk",
-  "sv",
-  "th",
-  "tl",
-  "tr",
-  "vi",
-  "zh-hans",
-  "zh-hant",
-];
-
-// Google play badges sourced from https://play.google.com/intl/en_us/badges/
-// This array mirrors the file names from the play store directory (./content/third-party/play-store)
-const PLAY_STORE_LOCALES = [
-  "af",
-  "ar",
-  "az",
-  "be",
-  "bg",
-  "bn",
-  "bs",
-  "ca",
-  "cs",
-  "da",
-  "de",
-  "el",
-  "en",
-  "es",
-  "et",
-  "eu",
-  "fa",
-  "fr",
-  "gl",
-  "gu",
-  "he",
-  "hi",
-  "hr",
-  "hu",
-  "hy",
-  "id",
-  "is",
-  "it",
-  "ja",
-  "ka",
-  "kk",
-  "km",
-  "kn",
-  "ko",
-  "lo",
-  "lt",
-  "lv",
-  "mk",
-  "mr",
-  "ms",
-  "my",
-  "nb",
-  "ne",
-  "nl",
-  "nn",
-  "pa",
-  "pl",
-  "pt-br",
-  "pt",
-  "ro",
-  "ru",
-  "si",
-  "sk",
-  "sl",
-  "sq",
-  "sr",
-  "sv",
-  "ta",
-  "te",
-  "th",
-  "tl",
-  "tr",
-  "uk",
-  "ur",
-  "uz",
-  "vi",
-  "zh-cn",
-  "zh-tw",
-];
-
 const convertSubjectToLogin = subject => {
   subject.QueryInterface(Ci.nsILoginMetaInfo).QueryInterface(Ci.nsILoginInfo);
   const login = LoginHelper.loginToVanillaObject(subject);
   if (!LoginHelper.isUserFacingLogin(login)) {
     return null;
   }
   return augmentVanillaLoginObject(login);
 };
@@ -260,20 +142,16 @@ class AboutLoginsParent extends JSWindow
         }
         break;
       }
       case "AboutLogins:DeleteLogin": {
         let login = LoginHelper.vanillaObjectToLogin(message.data.login);
         Services.logins.removeLogin(login);
         break;
       }
-      case "AboutLogins:HideFooter": {
-        Services.prefs.setBoolPref(HIDE_MOBILE_FOOTER_PREF, true);
-        break;
-      }
       case "AboutLogins:SortChanged": {
         Services.prefs.setCharPref("signon.management.page.sort", message.data);
         break;
       }
       case "AboutLogins:SyncEnable": {
         ownerGlobal.gSync.openFxAEmailFirstPage("password-manager");
         break;
       }
@@ -295,41 +173,16 @@ class AboutLoginsParent extends JSWindow
         const SUPPORT_URL =
           Services.urlFormatter.formatURLPref("app.support.baseURL") +
           "firefox-lockwise";
         ownerGlobal.openWebLinkIn(SUPPORT_URL, "tab", {
           relatedToCurrent: true,
         });
         break;
       }
-      case "AboutLogins:OpenMobileAndroid": {
-        const MOBILE_ANDROID_URL_PREF =
-          "signon.management.page.mobileAndroidURL";
-        const linkTrackingSource = message.data.source;
-        let MOBILE_ANDROID_URL = Services.prefs.getStringPref(
-          MOBILE_ANDROID_URL_PREF
-        );
-        // Append the `utm_creative` query parameter value:
-        MOBILE_ANDROID_URL += linkTrackingSource;
-        ownerGlobal.openWebLinkIn(MOBILE_ANDROID_URL, "tab", {
-          relatedToCurrent: true,
-        });
-        break;
-      }
-      case "AboutLogins:OpenMobileIos": {
-        const MOBILE_IOS_URL_PREF = "signon.management.page.mobileAppleURL";
-        const linkTrackingSource = message.data.source;
-        let MOBILE_IOS_URL = Services.prefs.getStringPref(MOBILE_IOS_URL_PREF);
-        // Append the `utm_creative` query parameter value:
-        MOBILE_IOS_URL += linkTrackingSource;
-        ownerGlobal.openWebLinkIn(MOBILE_IOS_URL, "tab", {
-          relatedToCurrent: true,
-        });
-        break;
-      }
       case "AboutLogins:OpenPreferences": {
         ownerGlobal.openPreferences("privacy-logins");
         break;
       }
       case "AboutLogins:MasterPasswordRequest": {
         let messageId = message.data;
         if (!messageId) {
           throw new Error(
@@ -387,49 +240,29 @@ class AboutLoginsParent extends JSWindow
 
         const logins = await AboutLogins.getAllLogins();
         try {
           let syncState = AboutLogins.getSyncState();
           if (FXA_ENABLED) {
             AboutLogins.updatePasswordSyncNotificationState(syncState);
           }
 
-          const playStoreBadgeLanguage = Services.locale.negotiateLanguages(
-            Services.locale.appLocalesAsBCP47,
-            PLAY_STORE_LOCALES,
-            "en-us",
-            Services.locale.langNegStrategyLookup
-          )[0];
-
-          const appStoreBadgeLanguage = Services.locale.negotiateLanguages(
-            Services.locale.appLocalesAsBCP47,
-            APP_STORE_LOCALES,
-            "en-us",
-            Services.locale.langNegStrategyLookup
-          )[0];
-
-          const selectedBadgeLanguages = {
-            appStoreBadgeLanguage,
-            playStoreBadgeLanguage,
-          };
-
           let selectedSort = Services.prefs.getCharPref(
             "signon.management.page.sort",
             "name"
           );
           if (selectedSort == "breached") {
             // The "breached" value was used since Firefox 70 and
             // replaced with "alerts" in Firefox 76.
             selectedSort = "alerts";
           }
           this.sendAsyncMessage("AboutLogins:Setup", {
             logins,
             selectedSort,
             syncState,
-            selectedBadgeLanguages,
             masterPasswordEnabled: LoginHelper.isMasterPasswordSet(),
             passwordRevealVisible: Services.policies.isAllowed(
               "passwordReveal"
             ),
             importVisible:
               Services.policies.isAllowed("profileImport") &&
               AppConstants.platform != "linux",
           });
@@ -953,26 +786,20 @@ var AboutLogins = {
 
   getSyncState() {
     const state = UIState.get();
     // As long as Sync is configured, about:logins will treat it as
     // authenticated. More diagnostics and error states can be handled
     // by other more Sync-specific pages.
     const loggedIn = state.status != UIState.STATUS_NOT_CONFIGURED;
 
-    // Pass the pref set if user has dismissed mobile promo footer
-    const dismissedMobileFooter = Services.prefs.getBoolPref(
-      HIDE_MOBILE_FOOTER_PREF
-    );
-
     return {
       loggedIn,
       email: state.email,
       avatarURL: state.avatarURL,
-      hideMobileFooter: !loggedIn || dismissedMobileFooter,
       fxAccountsEnabled: FXA_ENABLED,
     };
   },
 
   updatePasswordSyncNotificationState(
     syncState,
     // Need to explicitly call the getter on lazy preference getters
     // to activate their observer.
--- a/browser/components/aboutlogins/content/aboutLogins.html
+++ b/browser/components/aboutlogins/content/aboutLogins.html
@@ -11,17 +11,16 @@
     <link rel="localization" href="branding/brand.ftl">
     <link rel="localization" href="browser/branding/sync-brand.ftl">
     <link rel="localization" href="browser/branding/brandings.ftl">
     <link rel="localization" href="browser/aboutLogins.ftl">
     <script type="module" src="chrome://browser/content/aboutlogins/components/confirmation-dialog.js"></script>
     <script type="module" src="chrome://browser/content/aboutlogins/components/fxaccounts-button.js"></script>
     <script type="module" src="chrome://browser/content/aboutlogins/components/login-filter.js"></script>
     <script type="module" src="chrome://browser/content/aboutlogins/components/login-intro.js"></script>
-    <script type="module" src="chrome://browser/content/aboutlogins/components/login-footer.js"></script>
     <script type="module" src="chrome://browser/content/aboutlogins/components/login-item.js"></script>
     <script type="module" src="chrome://browser/content/aboutlogins/components/login-list.js"></script>
     <script type="module" src="chrome://browser/content/aboutlogins/components/login-list-item.js"></script>
     <script type="module" src="chrome://browser/content/aboutlogins/components/menu-button.js"></script>
     <script type="module" src="chrome://browser/content/aboutlogins/aboutLogins.js"></script>
     <link rel="stylesheet" href="chrome://global/skin/in-content/common.css">
     <link rel="stylesheet" href="chrome://browser/content/aboutlogins/aboutLogins.css">
     <link rel="stylesheet" href="chrome://browser/content/aboutlogins/common.css">
@@ -251,17 +250,16 @@
             <div class="form-actions-row">
               <button class="save-changes-button" type="submit"></button>
               <button class="cancel-button" data-l10n-id="login-item-cancel-button" type="button"></button>
             </div>
             <p class="time-created meta-info" data-l10n-id="login-item-time-created" data-l10n-args='{"timeCreated": 0}'></p>
             <p class="time-changed meta-info" data-l10n-id="login-item-time-changed" data-l10n-args='{"timeChanged": 0}'></p>
             <p class="time-used meta-info" data-l10n-id="login-item-time-used" data-l10n-args='{"timeUsed": 0}'></p>
           </form>
-          <login-footer hidden></login-footer>
         </div>
       </div>
     </template>
 
     <template id="login-filter-template">
       <link rel="stylesheet" href="chrome://global/skin/in-content/common.css">
       <link rel="stylesheet" href="chrome://browser/content/aboutlogins/common.css">
       <link rel="stylesheet" href="chrome://browser/content/aboutlogins/components/login-filter.css">
@@ -276,35 +274,13 @@
       <ul class="menu" role="menu" hidden>
         <button role="menuitem" class="menuitem-button menuitem-import-browser ghost-button" hidden data-supported-platforms="Win32,MacIntel" data-event-name="AboutLoginsImportFromBrowser" data-l10n-id="about-logins-menu-menuitem-import-from-another-browser"></button>
         <button role="menuitem" class="menuitem-button menuitem-import-file ghost-button" data-event-name="AboutLoginsImportFromFile" data-l10n-id="about-logins-menu-menuitem-import-from-a-file"></button>
         <button role="menuitem" class="menuitem-button menuitem-export ghost-button" data-event-name="AboutLoginsExportPasswordsDialog" data-l10n-id="about-logins-menu-menuitem-export-logins"></button>
         <hr role="separator" class="menuitem-separator"></hr>
         <button role="menuitem" class="menuitem-button menuitem-preferences ghost-button" data-event-name="AboutLoginsOpenPreferences" data-l10n-id="menu-menuitem-preferences"></button>
         <hr role="separator" class="menuitem-separator"></hr>
         <button role="menuitem" class="menuitem-button menuitem-help ghost-button" data-event-name="AboutLoginsGetHelp" data-l10n-id="about-logins-menu-menuitem-help"></button>
-        <hr role="separator" class="menuitem-separator"></hr>
-        <button role="menuitem" class="menuitem-button menuitem-mobile menuitem-mobile-android ghost-button" data-event-name="AboutLoginsOpenMobileAndroid" data-l10n-id="menu-menuitem-android-app"></button>
-        <button role="menuitem" class="menuitem-button menuitem-mobile menuitem-mobile-ios ghost-button" data-event-name="AboutLoginsOpenMobileIos" data-l10n-id="menu-menuitem-iphone-app"></button>
       </ul>
     </template>
 
-    <template id="login-footer-template">
-      <link rel="stylesheet" href="chrome://global/skin/in-content/common.css">
-      <link rel="stylesheet" href="chrome://browser/content/aboutlogins/components/login-footer.css">
-      <footer>
-        <p>
-          <strong data-l10n-id="login-app-promo-title"></strong><br>
-          <span data-l10n-id="login-app-promo-subtitle"></span>
-        </p>
-        <div class="buttons">
-          <button class="app-store" data-event-name="AboutLoginsOpenMobileIos">
-            <img class="image-app-store" data-l10n-id="login-app-promo-apple" src="" alt=""/>
-          </button>
-          <button class="play-store" data-event-name="AboutLoginsOpenMobileAndroid">
-            <img class="image-play-store" data-l10n-id="login-app-promo-android" src="" alt=""/>
-          </button>
-        </div>
-        <button class="close" data-event-name="AboutLoginsHideFooter"></button>
-      </footer>
-    </template>
   </body>
 </html>
--- a/browser/components/aboutlogins/content/aboutLogins.js
+++ b/browser/components/aboutlogins/content/aboutLogins.js
@@ -10,20 +10,16 @@ import {
 // The init code isn't wrapped in a DOMContentLoaded/load event listener so the
 // page works properly when restored from session restore.
 const gElements = {
   fxAccountsButton: document.querySelector("fxaccounts-button"),
   loginList: document.querySelector("login-list"),
   loginIntro: document.querySelector("login-intro"),
   loginItem: document.querySelector("login-item"),
   loginFilter: document.querySelector("login-filter"),
-  // loginFooter is nested inside of loginItem
-  get loginFooter() {
-    return this.loginItem.shadowRoot.querySelector("login-footer");
-  },
 };
 
 let numberOfLogins = 0;
 
 function updateNoLogins() {
   document.documentElement.classList.toggle("no-logins", numberOfLogins == 0);
   gElements.loginList.classList.toggle("no-logins", numberOfLogins == 0);
   gElements.loginItem.classList.toggle("no-logins", numberOfLogins == 0);
@@ -32,17 +28,16 @@ function updateNoLogins() {
 function handleAllLogins(logins) {
   gElements.loginList.setLogins(logins);
   numberOfLogins = logins.length;
   updateNoLogins();
 }
 
 function handleSyncState(syncState) {
   gElements.fxAccountsButton.updateState(syncState);
-  gElements.loginFooter.hidden = syncState.hideMobileFooter;
   gElements.loginIntro.updateState(syncState);
 }
 
 window.addEventListener("AboutLoginsChromeToContent", event => {
   switch (event.detail.messageType) {
     case "AllLogins": {
       document.documentElement.classList.remove(
         "master-password-auth-required"
@@ -88,19 +83,16 @@ window.addEventListener("AboutLoginsChro
     }
     case "SetVulnerableLogins": {
       gElements.loginList.setVulnerableLogins(event.detail.value);
       gElements.loginItem.setVulnerableLogins(event.detail.value);
       break;
     }
     case "Setup": {
       handleAllLogins(event.detail.value.logins);
-      gElements.loginFooter.showStoreIconsForLocales(
-        event.detail.value.selectedBadgeLanguages
-      );
       handleSyncState(event.detail.value.syncState);
       gElements.loginList.setSortDirection(event.detail.value.selectedSort);
       document.documentElement.classList.add("initialized");
       gElements.loginList.classList.add("initialized");
       break;
     }
     case "ShowLoginItemError": {
       gElements.loginItem.showLoginItemError(event.detail.value);
deleted file mode 100644
--- a/browser/components/aboutlogins/content/components/login-footer.css
+++ /dev/null
@@ -1,70 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-footer {
-  background-color: var(--in-content-box-background);
-  border-radius: 4px;
-  box-shadow: var(--shadow-10);
-  position: relative;
-  padding-block: 8px;
-  padding-inline: 40px;
-  display: flex;
-  flex-wrap: wrap;
-  align-items: center;
-  margin-block: 20px;
-}
-
-footer > p {
-  display: inline-block;
-  line-height: 1.5;
-  margin: 0;
-  margin-inline-end: auto;
-}
-
-footer > .buttons {
-  display: inline-block;
-}
-
-footer button {
-  background-color: transparent !important; /* override common.css */
-  padding: 0;
-  cursor: pointer;
-  vertical-align: middle;
-}
-
-footer .app-store {
-  margin-inline-start: 0;
-}
-
-footer button:not(.close) img {
-  width: auto;
-  display: block;
-}
-
-footer .app-store img {
-  height: 40px;
-  padding: 10px;
-}
-
-footer .play-store img {
-  height: 60px;
-}
-
-footer .close {
-  -moz-context-properties: fill, fill-opacity;
-  background-image: url("chrome://global/skin/icons/close.svg");
-  background-repeat: no-repeat;
-  background-position: center;
-  cursor: pointer;
-  display: block;
-  fill: currentColor;
-  fill-opacity: 0;
-  height: 16px;
-  min-height: auto;
-  position: absolute;
-  inset-inline-end: 12px;
-  top: 12px;
-  width: 16px;
-  min-width: auto;
-}
deleted file mode 100644
--- a/browser/components/aboutlogins/content/components/login-footer.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-export default class LoginFooter extends HTMLElement {
-  connectedCallback() {
-    if (this.shadowRoot) {
-      return;
-    }
-
-    let LoginFooterTemplate = document.querySelector("#login-footer-template");
-    let shadowRoot = this.attachShadow({ mode: "open" });
-    document.l10n.connectRoot(shadowRoot);
-    shadowRoot.appendChild(LoginFooterTemplate.content.cloneNode(true));
-
-    this.shadowRoot.querySelector(".app-store").addEventListener("click", this);
-    this.shadowRoot
-      .querySelector(".play-store")
-      .addEventListener("click", this);
-    this.shadowRoot.querySelector(".close").addEventListener("click", this);
-    this._imageAppStore = shadowRoot.querySelector(".image-app-store");
-    this._imagePlayStore = shadowRoot.querySelector(".image-play-store");
-  }
-
-  handleEvent(event) {
-    switch (event.type) {
-      case "click": {
-        let target = event.currentTarget;
-        let classList = target.classList;
-
-        if (
-          classList.contains("play-store") ||
-          classList.contains("app-store") ||
-          classList.contains("close")
-        ) {
-          let eventName = target.dataset.eventName;
-          const linkTrackingSource = "Footer_Menu";
-          document.dispatchEvent(
-            new CustomEvent(eventName, {
-              bubbles: true,
-              detail: linkTrackingSource,
-            })
-          );
-
-          if (classList.contains("close")) {
-            this.shadowRoot.host.hidden = true;
-          }
-        }
-        break;
-      }
-    }
-  }
-
-  _setAppStoreImage(lang) {
-    let appStoreLink =
-      "chrome://browser/content/aboutlogins/third-party/app-store/app_" +
-      lang +
-      ".png";
-    this._imageAppStore.setAttribute("src", appStoreLink);
-  }
-
-  _setPlayStoreImage(lang) {
-    let playStoreLink =
-      "chrome://browser/content/aboutlogins/third-party/play-store/play_" +
-      lang +
-      ".png";
-    this._imagePlayStore.setAttribute("src", playStoreLink);
-  }
-
-  showStoreIconsForLocales(appLocales) {
-    this._setAppStoreImage(appLocales.appStoreBadgeLanguage);
-    this._setPlayStoreImage(appLocales.playStoreBadgeLanguage);
-  }
-}
-customElements.define("login-footer", LoginFooter);
--- a/browser/components/aboutlogins/content/components/login-item.css
+++ b/browser/components/aboutlogins/content/components/login-item.css
@@ -45,22 +45,20 @@ button {
 }
 
 form {
   flex-grow: 1;
 }
 
 :host([data-editing]) .edit-button,
 :host([data-editing]) .copy-button,
-:host([data-editing]) login-footer,
 :host([data-is-new-login].no-logins) .cancel-button,
 :host([data-is-new-login]) .delete-button,
 :host([data-is-new-login]) .origin-saved-value,
 :host([data-is-new-login]) .meta-info,
-:host([data-is-new-login]) login-footer,
 :host([data-is-new-login]) .login-item-title,
 :host(:not([data-is-new-login])) .new-login-title,
 :host(:not([data-editing])) .form-actions-row {
   display: none;
 }
 
 input[type="password"],
 input[type="text"],
--- a/browser/components/aboutlogins/content/components/menu-button.css
+++ b/browser/components/aboutlogins/content/components/menu-button.css
@@ -76,16 +76,8 @@
 
 .menuitem-export {
   background-image: url("chrome://browser/skin/save.svg");
 }
 
 .menuitem-preferences {
   background-image: url("chrome://global/skin/icons/settings.svg");
 }
-
-.menuitem-mobile-ios {
-  background-image: url("chrome://browser/skin/logo-ios.svg");
-}
-
-.menuitem-mobile-android {
-  background-image: url("chrome://browser/skin/logo-android.svg");
-}
deleted file mode 100644
--- a/browser/components/aboutlogins/content/third-party/LICENSE
+++ /dev/null
@@ -1,2 +0,0 @@
-// The image files in this folder are trademarks of Google and Apple.
-// Google and Apple's trademark policies govern their use.
deleted file mode 100644
index f5dcd4965af469f82ffbf48663e1af0528eb61ae..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 277247c5b13f5efa0e08452b61958804ce84c52c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ceca3eaa817f0305d4bc5fc8eda8b7de06bc65de..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 6e2c919c9ad79534fa205176d58b367777dc4e39..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f952d3af6adef037659802cfdb9bb049152f8c03..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 55af9c54f7e5dae31c2233570e6fa51735f18e93..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0e5dc5e564622a53480beb460a476785476c9aa9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d1350e6e7365d05cbde865c76dbdeb67da5d3772..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e75d694460ab1bededab15c7fd683f4e5a8b250d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1fc9378532f535351b34205283943b84f26dc9b8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 91ed4813606d94210589fc682cb170cfbdb3340f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a92138a1ff4e0155db5a625415d514e1fdc02513..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index bb91baf4db1ddeb5e0a41ae42a17eb10b40b50f7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 91316bff0a6d9c55a90f43d592b993a353ba1cd6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index bd0fefdd72b8ca6524da48159f9827b204ff0827..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 28a435b297ebc4cc0b02d5103b2d5996543072ba..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 68ff97cabc5ba1327f1038cbb251b25f9c6fa677..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e58b1c6747262a9ca3305421acb47458b1db2d15..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 16cb8bfe4a89f59bd39cbd80765a2daa8112ca07..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index af07ac1b6871eeec88936f3fc1866695f7f1b3b8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index efc8cd773b97d033b8393770febc1b18d5192455..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a1f8eb2c0d94f7f6ff423fe16526e2ff56ff4ba6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c295cff79a0988660ed3a6902aba160cd276f072..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 6a8de99df448ae822abf0aad48459f1fd76b9328..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c295cff79a0988660ed3a6902aba160cd276f072..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a729b7ceab1fd2f8265b50e18df64476b49f1fe8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f758a7ac2cc558495cb238f75c42d9405450ea83..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b71e6e2c94d409fd6b3ee428896ef17e6fa336fd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index adbccd224e10ddc742e63adcb2cf86d8d35efc0b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index acb08b0dfb16f5fb08a48f2fadbdfa3dbd9fb2d2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 6e905349e961f78d00a9c6ec36fb4a1552a0f2f5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 3cb90821e2aba9a6a0cb747bdd9d4bf8ee585d0f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 20b0829185c2256c9a302ca5d4bd40800cc91197..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7ef79146b76d3c18f4409f4764ac084e897241ef..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 3ba5dafa1b002c8c4f0416d27eba444dcc82488f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e49e185fe65e35a175ea2a2d6b618bce9d886d29..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b4330e847f52f15dcdd1d776e55baad26bf15428..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a41967e859f947cf3507169584461dad6704e9da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 4635231c7a23f57c682971ab8bff0b1c2d09b2f9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9dbb70b3aebe830757ae9855a0fa0e064c08fff1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a2e777fb37cda6b33b10bfebb6064e6ae4a16f28..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index df0bad9149ef084a77111a132f4aefc1e6bbc966..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8d56b8a1e23117de6b4e8b262c0a3c1d76d31dd5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ccd59950e722fc1f78a17e2de17d853bc6449623..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 14b0b92ae7ad2baad9aa02ca96ba30c024d49743..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7d79a8393844daf723ccfc7ca5d8c9f6a13944de..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index bbff41f5c12bca2e52798e1527b92df5500ab2d1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0fadff07dee5224a5cb4e31b6c10c978ecc73994..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 6a564aa52bff67f79f1fd622434b80decd95c754..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0e9af62986f0e4436c8db7805f72d1cdc1015855..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e5fa74dd0e4fa0582a6fba9bfccfa930342eb5bd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b9f69c49197c0c94ad5cdc01a3c04da0b094e890..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 6d2d5f65ccc6c344a756d9685fee14451827b89a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c2563b0940b5ad1f96c21b54fc77c518c2da38d0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d039d97ab1fc4bf4158c7b329b0c4f4a832da190..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b3f934f9db01d41c75fdf6ca8e639284e4e6f038..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0cdcc6ed5cb96b4544a26fcdfcff83b2eefe1910..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1dbed6cbe2f603fd24ea0e14d309286d20ac95e9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 75bcdf0918ff58e4f912e766ec7230d8df8927ef..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 72072308907f0926ce49a9ccf7fbee16e83d279b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 58ec04ef9fa54c5133c023827fba5c752d1a0209..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 3f7499dbfadee946e603b8c89f032de403311275..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f8cc979037e5bb24f911d1519514121b08d42168..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0fd0496cc718d0dd83339a91abb6436b65c4e688..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 230219c881a73828a6ea3351075f26ca513c695c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e5c00a9c94a098cebc8e15edcd823edaf2bbd164..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ccc51396b02440322079b45ad06b4bb22281d9f1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e34f5161037af9ce5f27c4733f6ea484f3a39973..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 612d25922870bde65922181b661de49863f2ee4b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 81761fdf01175bf4a165f8e273f159333ec73e25..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f4c66597777d6b25e19e2027d3bd0a4de6c69312..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 443143da0b1738bf9c535b89d7dc9697b49ed7f6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b3c138144dccf8a5f73657d6ee5512ec8ba288b1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2b33c6d520d37362305256e84960e8afece4c894..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 421652bc64e824f26e4dc018ee7b5df833c65d29..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 57da125245b4d451608e27c3679e140dfbbc7377..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 234f24ac9bd6ed9cddffcd484f82b263c7c48993..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index de57f97b221f649920d55429e7c6c07d02e70886..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2134e152c48d4b8ddd0c9347561462398b494d12..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c210b5040d9ea3e7a48c640b6794dc2312bac38f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b0d547c865d6ce19b6847778b5b2e4895e8638d9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1a7e26563541cc8cf451a5858f04e5d58ae4bea6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 91cce1a39647e76536e00f0ed916953cd6e4fb9d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b0d547c865d6ce19b6847778b5b2e4895e8638d9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b1c4f734abdafab3a5608312d4fc550987adef34..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 265f1a42eea16a47eb6ab4df5e751c5d7969bc45..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d7532f20b3cfb8de74182f291cd1ce457ed0850d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 776a41b85704afc24186d276c44af1f75b9cf9bb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b696de06662a1cfa23604860a84c6b75c38fe303..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e3f8541864a67dffe683b6f52d1e7a7e491633fb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f3c74fa1d2dad3ce78efcf31a6843a07cde701b1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 794c291455c622efefb4ceb7b8e7c2d53dde72ab..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7376bf61881fa8e47ea1b06e87653ad74fe30780..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index dbdc1a12c35e61f02ba46970ee92938b6337b806..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 98ca1cc97d192e1e25d85f5ca929aac6b9997df9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a92cffc4f4ffac61ac5eda5db6a46359373f0119..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e61a1d4f4a02337231dce4c6cbb96d0e51508994..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a057942321a6a161f17cad0305d85042969270b1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2f38d21f72810b141f59d853449457c419b922f4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5c34760aa928bb255cfcd7f1a1a7732c452cfaae..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 60e5fa394c5dd7388c814562d6411ee14fa65322..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e2608d8696b84e5b241baa96c6081c5700284d36..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5426bfe9561604190967dcd2a11be172bb05e7e3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index bdd340a5e8a92712c2d460661b266f8bb2948a67..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7871467a4ce0e0d47176d6f4c729c1792705f3b8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f3e23c4ce787b99f0c8e05ec8785d7c306700a97..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5830bf86347ad7cf39b9fc261c9f5ecf7d9a7afb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/components/aboutlogins/jar.mn
+++ b/browser/components/aboutlogins/jar.mn
@@ -1,25 +1,21 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 browser.jar:
-  content/browser/aboutlogins/third-party/app-store/   (content/third-party/app-store/*.png)
-  content/browser/aboutlogins/third-party/play-store/  (content/third-party/play-store/*.png)
   content/browser/aboutlogins/components/confirmation-dialog.css      (content/components/confirmation-dialog.css)
   content/browser/aboutlogins/components/confirmation-dialog.js       (content/components/confirmation-dialog.js)
   content/browser/aboutlogins/components/fxaccounts-button.css (content/components/fxaccounts-button.css)
   content/browser/aboutlogins/components/fxaccounts-button.js  (content/components/fxaccounts-button.js)
   content/browser/aboutlogins/components/login-filter.css      (content/components/login-filter.css)
   content/browser/aboutlogins/components/login-filter.js       (content/components/login-filter.js)
   content/browser/aboutlogins/components/login-intro.css       (content/components/login-intro.css)
   content/browser/aboutlogins/components/login-intro.js        (content/components/login-intro.js)
-  content/browser/aboutlogins/components/login-footer.css      (content/components/login-footer.css)
-  content/browser/aboutlogins/components/login-footer.js       (content/components/login-footer.js)
   content/browser/aboutlogins/components/login-item.css        (content/components/login-item.css)
   content/browser/aboutlogins/components/login-item.js         (content/components/login-item.js)
   content/browser/aboutlogins/components/login-list.css        (content/components/login-list.css)
   content/browser/aboutlogins/components/login-list.js         (content/components/login-list.js)
   content/browser/aboutlogins/components/login-list-item.js    (content/components/login-list-item.js)
   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/icons/breached-website.svg       (content/icons/breached-website.svg)
--- a/browser/components/aboutlogins/tests/browser/browser.ini
+++ b/browser/components/aboutlogins/tests/browser/browser.ini
@@ -13,17 +13,16 @@ prefs =
 skip-if = asan || ccov || debug || (os == "win" && !debug) # bug 1605494 is more prevalent on linux, Bug 1627419
 [browser_alertDismissedAfterChangingPassword.js]
 [browser_breachAlertShowingForAddedLogin.js]
 [browser_confirmDeleteDialog.js]
 [browser_contextmenuFillLogins.js]
 [browser_copyToClipboardButton.js]
 [browser_createLogin.js]
 [browser_deleteLogin.js]
-[browser_dismissFooter.js]
 [browser_fxAccounts.js]
 [browser_loginItemErrors.js]
 skip-if = debug # Bug 1577710
 [browser_loginListChanges.js]
 [browser_loginSortOrderRestored.js]
 skip-if = os == 'linux' && bits == 64 && os_version == '18.04' # Bug 1587625; Bug 1587626 for linux1804
 [browser_masterPassword.js]
 skip-if = (os == 'linux') # bug 1569789
deleted file mode 100644
--- a/browser/components/aboutlogins/tests/browser/browser_dismissFooter.js
+++ /dev/null
@@ -1,139 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-let syncService = {};
-ChromeUtils.import("resource://services-sync/service.js", syncService);
-const service = syncService.Service;
-const { UIState } = ChromeUtils.import("resource://services-sync/UIState.jsm");
-
-function mockState(state) {
-  UIState.get = () => ({
-    status: state.status,
-    lastSync: new Date(),
-    email: state.email,
-    avatarURL: state.avatarURL,
-  });
-}
-
-add_task(async function setup() {
-  let storageChangedPromised = TestUtils.topicObserved(
-    "passwordmgr-storage-changed",
-    (_, data) => data == "addLogin"
-  );
-  TEST_LOGIN1 = Services.logins.addLogin(TEST_LOGIN1);
-  await storageChangedPromised;
-  storageChangedPromised = TestUtils.topicObserved(
-    "passwordmgr-storage-changed",
-    (_, data) => data == "addLogin"
-  );
-  TEST_LOGIN2 = Services.logins.addLogin(TEST_LOGIN2);
-  await storageChangedPromised;
-  await BrowserTestUtils.openNewForegroundTab({
-    gBrowser,
-    url: "about:logins",
-  });
-  let getState = UIState.get;
-  registerCleanupFunction(() => {
-    BrowserTestUtils.removeTab(gBrowser.selectedTab);
-    UIState.get = getState;
-    SpecialPowers.clearUserPref("signon.management.page.hideMobileFooter");
-    Services.logins.removeAllLogins();
-  });
-});
-
-add_task(async function test_open_links() {
-  // urlFinal is what the full link should be. urlBase is what gets Footer_Menu
-  // appended to it.
-  const linkArray = [
-    {
-      urlFinal: "https://example.com/android?utm_creative=Footer_Menu",
-      urlBase: "https://example.com/android?utm_creative=",
-      pref: "signon.management.page.mobileAndroidURL",
-      selector: ".image-play-store",
-    },
-    {
-      urlFinal: "https://example.com/apple?utm_creative=Footer_Menu",
-      urlBase: "https://example.com/apple?utm_creative=",
-      pref: "signon.management.page.mobileAppleURL",
-      selector: ".image-app-store",
-    },
-  ];
-
-  for (const { urlFinal, urlBase, pref, selector } of linkArray) {
-    info("Test on " + urlFinal);
-    const TEST_EMAIL = "test@example.com";
-    const TEST_AVATAR_URL =
-      "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
-    mockState({
-      status: UIState.STATUS_SIGNED_IN,
-      email: TEST_EMAIL,
-      avatarURL: TEST_AVATAR_URL,
-    });
-
-    await SpecialPowers.pushPrefEnv({
-      set: [
-        [pref, urlBase],
-        ["services.sync.engine.passwords", true],
-      ],
-    });
-
-    Services.obs.notifyObservers(null, UIState.ON_UPDATE);
-
-    let promiseNewTab = BrowserTestUtils.waitForNewTab(gBrowser, urlFinal);
-    let browser = gBrowser.selectedBrowser;
-
-    await SpecialPowers.spawn(browser, [selector], async buttonClass => {
-      let footer = Cu.waiveXrays(
-        content.document
-          .querySelector("login-item")
-          .shadowRoot.querySelector("login-footer")
-      );
-      ok(!footer.hidden, "Footer is visible");
-      let button = footer.shadowRoot.querySelector(buttonClass);
-
-      button.click();
-    });
-
-    info("waiting for new tab to get opened");
-    let newTab = await promiseNewTab;
-    ok(true, "New tab opened to " + urlFinal);
-
-    BrowserTestUtils.removeTab(newTab);
-  }
-});
-
-add_task(async function dismissFooter() {
-  const TEST_EMAIL = "test@example.com";
-  const TEST_AVATAR_URL =
-    "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
-  mockState({
-    status: UIState.STATUS_SIGNED_IN,
-    email: TEST_EMAIL,
-    avatarURL: TEST_AVATAR_URL,
-  });
-  await SpecialPowers.pushPrefEnv({
-    set: [["services.sync.engine.passwords", true]],
-  });
-  Services.obs.notifyObservers(null, UIState.ON_UPDATE);
-
-  let browser = gBrowser.selectedBrowser;
-
-  await SpecialPowers.spawn(browser, [], async () => {
-    let footer = Cu.waiveXrays(
-      content.document
-        .querySelector("login-item")
-        .shadowRoot.querySelector("login-footer")
-    );
-    let dismissButton = footer.shadowRoot.querySelector(".close");
-
-    dismissButton.click();
-    await ContentTaskUtils.waitForCondition(
-      () => ContentTaskUtils.is_hidden(footer),
-      "Waiting for the footer to be hidden"
-    );
-    ok(
-      ContentTaskUtils.is_hidden(footer),
-      "Footer should be hidden after clicking dismiss button"
-    );
-  });
-});
--- a/browser/components/aboutlogins/tests/browser/browser_openPreferencesExternal.js
+++ b/browser/components/aboutlogins/tests/browser/browser_openPreferencesExternal.js
@@ -14,28 +14,16 @@ add_task(async function setup() {
 add_task(async function test_open_feedback() {
   const menuArray = [
     {
       urlFinal: "https://example.com/firefox-lockwise",
       urlBase: "https://example.com/",
       pref: "app.support.baseURL",
       selector: ".menuitem-help",
     },
-    {
-      urlFinal: "https://example.com/android?utm_creative=Elipsis_Menu",
-      urlBase: "https://example.com/android?utm_creative=",
-      pref: "signon.management.page.mobileAndroidURL",
-      selector: ".menuitem-mobile-android",
-    },
-    {
-      urlFinal: "https://example.com/apple?utm_creative=Elipsis_Menu",
-      urlBase: "https://example.com/apple?utm_creative=",
-      pref: "signon.management.page.mobileAppleURL",
-      selector: ".menuitem-mobile-ios",
-    },
   ];
 
   for (const { urlFinal, urlBase, pref, selector } of menuArray) {
     info("Test on " + urlFinal);
 
     await SpecialPowers.pushPrefEnv({
       set: [[pref, urlBase]],
     });
--- a/browser/components/aboutlogins/tests/chrome/test_menu_button.html
+++ b/browser/components/aboutlogins/tests/chrome/test_menu_button.html
@@ -142,18 +142,16 @@ add_task(async function test_menu_keyboa
   function getFocusedMenuItem() {
     return gMenuButton.shadowRoot.querySelector(".menuitem-button:focus");
   }
 
   let allItems = [
     "menuitem-export",
     "menuitem-preferences",
     "menuitem-help",
-    "menuitem-mobile-android",
-    "menuitem-mobile-ios",
   ];
   if (SpecialPowers.getBoolPref("signon.management.page.fileImport.enabled")) {
     allItems = ["menuitem-import-file", ...allItems];
   }
   if (navigator.platform == "Win32" || navigator.platform == "MacIntel") {
     allItems = ["menuitem-import-browser", ...allItems];
   }
 
--- a/browser/installer/allowed-dupes.mn
+++ b/browser/installer/allowed-dupes.mn
@@ -73,22 +73,16 @@ i686/gmp-clearkey/0.1/manifest.json
 browser/chrome/browser/search-extensions/amazon/favicon.ico
 browser/chrome/browser/search-extensions/amazondotcn/favicon.ico
 browser/chrome/browser/search-extensions/amazondotcom/favicon.ico
 browser/chrome/browser/search-extensions/mercadolibre/favicon.ico
 browser/chrome/browser/search-extensions/mercadolivre/favicon.ico
 browser/chrome/browser/search-extensions/qwant/favicon.ico
 browser/chrome/browser/search-extensions/qwantjr/favicon.ico
 
-# Bug 1550165 - We want to support both Norwegian languages codes (nb and nn) for App Store and Play Store icons
-browser/chrome/browser/content/browser/aboutlogins/third-party/app-store/app_nb.png
-browser/chrome/browser/content/browser/aboutlogins/third-party/app-store/app_nn.png
-browser/chrome/browser/content/browser/aboutlogins/third-party/play-store/play_nb.png
-browser/chrome/browser/content/browser/aboutlogins/third-party/play-store/play_nn.png
-
 # Bug 1606928 - There's no reliable way to connect Top Sites favicons with the favicons in the Search Service
 browser/chrome/browser/content/activity-stream/data/content/tippytop/favicons/bbc-uk.ico
 browser/chrome/browser/search-extensions/bbc-alba/favicon.ico
 browser/chrome/browser/content/activity-stream/data/content/tippytop/favicons/allegro-pl.ico
 browser/chrome/browser/search-extensions/allegro-pl/favicon.ico
 browser/chrome/browser/content/activity-stream/data/content/tippytop/favicons/amazon.ico
 browser/chrome/browser/content/activity-stream/data/content/tippytop/favicons/ebay.ico
 browser/chrome/browser/search-extensions/ebay/favicon.ico
--- a/browser/locales/en-US/browser/aboutLogins.ftl
+++ b/browser/locales/en-US/browser/aboutLogins.ftl
@@ -1,24 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 # NOTE: New strings should use the about-logins- prefix.
 
 about-logins-page-title = Logins & Passwords
 
-# "Google Play" and "App Store" are both branding and should not be translated
-
-login-app-promo-title = Take your passwords everywhere
-login-app-promo-subtitle = Get the free { -lockwise-brand-name } app
-login-app-promo-android =
-  .alt = Get it on Google Play
-login-app-promo-apple =
-  .alt = Download on the App Store
-
 login-filter =
   .placeholder = Search Logins
 
 create-login-button = Create New Login
 
 fxaccounts-sign-in-text = Get your passwords on your other devices
 fxaccounts-sign-in-button = Sign in to { -sync-brand-short-name }
 fxaccounts-avatar-button =
@@ -33,18 +24,16 @@ about-logins-menu-menuitem-import-from-another-browser = Import from Another Browser…
 about-logins-menu-menuitem-import-from-a-file = Import from a File…
 about-logins-menu-menuitem-export-logins = Export Logins…
 menu-menuitem-preferences =
   { PLATFORM() ->
       [windows] Options
      *[other] Preferences
   }
 about-logins-menu-menuitem-help = Help
-menu-menuitem-android-app = { -lockwise-brand-short-name } for Android
-menu-menuitem-iphone-app = { -lockwise-brand-short-name } for iPhone and iPad
 
 ## Login List
 
 login-list =
   .aria-label = Logins matching search query
 login-list-count =
   { $count ->
       [one] { $count } login