Bug 1121681 - Add "Passwords" entry point in menu. r=mhaigh draft
authorChenxia Liu <liuche@mozilla.com>
Tue, 24 Feb 2015 16:29:38 -0800
changeset 245752 50f5c97e537141de3d5e369d35684ffa2cfc251e
parent 245723 c9da89e679b28476683a70ad6b68067ac10b73af
child 245788 eb1b74f093833f79283819e4edbe894d97d05eeb
push id796
push usercliu@mozilla.com
push dateWed, 25 Feb 2015 00:30:18 +0000
reviewersmhaigh
bugs1121681
milestone39.0a1
Bug 1121681 - Add "Passwords" entry point in menu. r=mhaigh
mobile/android/base/AboutPages.java
mobile/android/base/BrowserApp.java
mobile/android/base/locales/en-US/android_strings.dtd
mobile/android/base/preferences/GeckoPreferences.java
mobile/android/base/resources/menu-large-v11/browser_app_menu.xml
mobile/android/base/resources/menu-v11/browser_app_menu.xml
mobile/android/base/resources/menu-xlarge-v11/browser_app_menu.xml
mobile/android/base/resources/menu/browser_app_menu.xml
mobile/android/base/resources/xml/preferences_privacy.xml
mobile/android/base/strings.xml.in
mobile/android/base/tests/StringHelper.java
mobile/android/base/tests/testSettingsMenuItems.java
mobile/android/base/tests/testSystemPages.java
--- a/mobile/android/base/AboutPages.java
+++ b/mobile/android/base/AboutPages.java
@@ -14,16 +14,17 @@ public class AboutPages {
     // All of our special pages.
     public static final String ADDONS          = "about:addons";
     public static final String APPS            = "about:apps";
     public static final String CONFIG          = "about:config";
     public static final String DOWNLOADS       = "about:downloads";
     public static final String FIREFOX         = "about:firefox";
     public static final String HEALTHREPORT    = "about:healthreport";
     public static final String HOME            = "about:home";
+    public static final String PASSWORDS       = "about:passwords";
     public static final String PRIVATEBROWSING = "about:privatebrowsing";
     public static final String READER          = "about:reader";
     public static final String UPDATER         = "about:";
 
     public static final String URL_FILTER = "about:%";
 
     public static final String PANEL_PARAM = "panel";
 
--- a/mobile/android/base/BrowserApp.java
+++ b/mobile/android/base/BrowserApp.java
@@ -2966,16 +2966,17 @@ public class BrowserApp extends GeckoApp
         // (We check the pref last to save the pref read.)
         // In ICS+, it's easy to kill an app through the task switcher.
         final boolean visible = Versions.preICS ||
                                 HardwareUtils.isTelevision() ||
                                 !PrefUtils.getStringSet(GeckoSharedPrefs.forProfile(this),
                                                         ClearOnShutdownPref.PREF,
                                                         new HashSet<String>()).isEmpty();
         aMenu.findItem(R.id.quit).setVisible(visible);
+        aMenu.findItem(R.id.passwords).setVisible(AppConstants.NIGHTLY_BUILD);
 
         if (tab == null || tab.getURL() == null) {
             bookmark.setEnabled(false);
             back.setEnabled(false);
             forward.setEnabled(false);
             share.setEnabled(false);
             saveAsPDF.setEnabled(false);
             findInPage.setEnabled(false);
@@ -3194,16 +3195,21 @@ public class BrowserApp extends GeckoApp
             return true;
         }
 
         if (itemId == R.id.addons) {
             Tabs.getInstance().loadUrlInTab(AboutPages.ADDONS);
             return true;
         }
 
+        if (itemId == R.id.passwords) {
+            Tabs.getInstance().loadUrlInTab(AboutPages.PASSWORDS);
+            return true;
+        }
+
         if (itemId == R.id.apps) {
             Tabs.getInstance().loadUrlInTab(AboutPages.APPS);
             return true;
         }
 
         if (itemId == R.id.downloads) {
             Tabs.getInstance().loadUrlInTab(AboutPages.DOWNLOADS);
             return true;
--- a/mobile/android/base/locales/en-US/android_strings.dtd
+++ b/mobile/android/base/locales/en-US/android_strings.dtd
@@ -116,16 +116,17 @@
 <!ENTITY overlay_share_select_device "Select device">
 
 <!ENTITY pref_category_search3 "Search">
 <!ENTITY pref_category_search_summary "Customize your search providers">
 <!ENTITY pref_category_display "Display">
 <!ENTITY pref_category_display_summary "Text, title bar, full-screen browsing">
 <!ENTITY pref_category_privacy_short "Privacy">
 <!ENTITY pref_category_privacy_summary "Control passwords, cookies, tracking, data">
+<!ENTITY pref_manage_passwords "Manage passwords">
 <!ENTITY pref_category_vendor "&vendorShortName;">
 <!ENTITY pref_category_vendor_summary "About &brandShortName;, FAQs, data choices">
 <!ENTITY pref_category_datareporting "Data choices">
 <!ENTITY pref_learn_more "Learn more">
 <!ENTITY pref_category_installed_search_engines "Installed search engines">
 <!ENTITY pref_category_add_search_providers "Add more search providers">
 <!ENTITY pref_category_search_restore_defaults "Restore search engines">
 <!ENTITY pref_search_restore_defaults "Restore defaults">
@@ -281,16 +282,17 @@ size. -->
 <!ENTITY pref_update_autodownload_always "Always">
 
 <!-- Localization note (help_menu) : This string is used in the main menu-->
 <!ENTITY help_menu "Help">
 
 <!ENTITY quit "Quit">
 
 <!ENTITY addons "Add-ons">
+<!ENTITY passwords "Passwords">
 <!ENTITY downloads "Downloads">
 <!ENTITY apps "Apps">
 <!ENTITY char_encoding "Character Encoding">
 
 <!ENTITY share "Share">
 <!ENTITY share_title "Share via">
 <!ENTITY share_image_failed "Unable to share this image">
 <!ENTITY save_as_pdf "Save as PDF">
--- a/mobile/android/base/preferences/GeckoPreferences.java
+++ b/mobile/android/base/preferences/GeckoPreferences.java
@@ -110,16 +110,17 @@ OnSharedPreferenceChangeListener
 
     // These match keys in resources/xml*/preferences*.xml
     private static final String PREFS_SEARCH_RESTORE_DEFAULTS = NON_PREF_PREFIX + "search.restore_defaults";
     private static final String PREFS_DATA_REPORTING_PREFERENCES = NON_PREF_PREFIX + "datareporting.preferences";
     private static final String PREFS_TELEMETRY_ENABLED = "toolkit.telemetry.enabled";
     private static final String PREFS_CRASHREPORTER_ENABLED = "datareporting.crashreporter.submitEnabled";
     private static final String PREFS_MENU_CHAR_ENCODING = "browser.menu.showCharacterEncoding";
     private static final String PREFS_MP_ENABLED = "privacy.masterpassword.enabled";
+    private static final String PREFS_PASSWORD_MANAGE = NON_PREF_PREFIX + "signon.manage";
     private static final String PREFS_UPDATER_AUTODOWNLOAD = "app.update.autodownload";
     private static final String PREFS_UPDATER_URL = "app.update.url.android";
     private static final String PREFS_GEO_REPORTING = NON_PREF_PREFIX + "app.geo.reportdata";
     private static final String PREFS_GEO_LEARN_MORE = NON_PREF_PREFIX + "geo.learn_more";
     private static final String PREFS_HEALTHREPORT_LINK = NON_PREF_PREFIX + "healthreport.link";
     private static final String PREFS_DEVTOOLS_REMOTE_ENABLED = "devtools.debugger.remote-enabled";
     private static final String PREFS_DISPLAY_REFLOW_ON_ZOOM = "browser.zoom.reflowOnZoom";
     private static final String PREFS_DISPLAY_TITLEBAR_MODE = "browser.chrome.titlebarMode";
@@ -663,16 +664,20 @@ OnSharedPreferenceChangeListener
                 setupPreferences((PreferenceGroup) pref, prefs);
             } else {
                 pref.setOnPreferenceChangeListener(this);
                 if (!AppConstants.MOZ_UPDATER &&
                     PREFS_UPDATER_AUTODOWNLOAD.equals(key)) {
                     preferences.removePreference(pref);
                     i--;
                     continue;
+                } else if (!AppConstants.NIGHTLY_BUILD &&
+                           PREFS_PASSWORD_MANAGE.equals(key)) {
+                    preferences.removePreference(pref);
+                    i--;
                 } else if (AppConstants.RELEASE_BUILD &&
                            PREFS_DISPLAY_REFLOW_ON_ZOOM.equals(key)) {
                     // Remove UI for reflow on release builds.
                     preferences.removePreference(pref);
                     i--;
                     continue;
                 } else if (!AppConstants.NIGHTLY_BUILD &&
                            (PREFS_TRACKING_PROTECTION.equals(key) ||
--- a/mobile/android/base/resources/menu-large-v11/browser_app_menu.xml
+++ b/mobile/android/base/resources/menu-large-v11/browser_app_menu.xml
@@ -81,16 +81,19 @@
             <item android:id="@+id/downloads"
                   android:icon="@drawable/ic_menu_downloads"
                   android:title="@string/downloads"/>
 
             <item android:id="@+id/addons"
                   android:icon="@drawable/ic_menu_addons"
                   android:title="@string/addons"/>
 
+            <item android:id="@+id/passwords"
+                  android:title="@string/passwords"/>
+
             <item android:id="@+id/apps"
                   android:icon="@drawable/ic_menu_apps"
                   android:title="@string/apps"/>
 
             <item android:id="@+id/new_guest_session"
                   android:icon="@drawable/ic_menu_guest"
                   android:visible="false"
                   android:title="@string/new_guest_session"/>
--- a/mobile/android/base/resources/menu-v11/browser_app_menu.xml
+++ b/mobile/android/base/resources/menu-v11/browser_app_menu.xml
@@ -81,16 +81,19 @@
             <item android:id="@+id/downloads"
                   android:icon="@drawable/ic_menu_downloads"
                   android:title="@string/downloads"/>
 
             <item android:id="@+id/addons"
                   android:icon="@drawable/ic_menu_addons"
                   android:title="@string/addons"/>
 
+            <item android:id="@+id/passwords"
+                  android:title="@string/passwords"/>
+
             <item android:id="@+id/apps"
                   android:icon="@drawable/ic_menu_apps"
                   android:title="@string/apps"/>
 
             <item android:id="@+id/new_guest_session"
                   android:icon="@drawable/ic_menu_guest"
                   android:visible="false"
                   android:title="@string/new_guest_session"/>
--- a/mobile/android/base/resources/menu-xlarge-v11/browser_app_menu.xml
+++ b/mobile/android/base/resources/menu-xlarge-v11/browser_app_menu.xml
@@ -82,16 +82,19 @@
             <item android:id="@+id/downloads"
                   android:icon="@drawable/ic_menu_downloads"
                   android:title="@string/downloads"/>
 
             <item android:id="@+id/addons"
                   android:icon="@drawable/ic_menu_addons"
                   android:title="@string/addons"/>
 
+            <item android:id="@+id/passwords"
+                  android:title="@string/passwords"/>
+
             <item android:id="@+id/apps"
                   android:icon="@drawable/ic_menu_apps"
                   android:title="@string/apps"/>
 
             <item android:id="@+id/new_guest_session"
                   android:icon="@drawable/ic_menu_guest"
                   android:visible="false"
                   android:title="@string/new_guest_session"/>
--- a/mobile/android/base/resources/menu/browser_app_menu.xml
+++ b/mobile/android/base/resources/menu/browser_app_menu.xml
@@ -44,16 +44,19 @@
           android:checkable="true" />
 
     <item android:id="@+id/addons"
           android:title="@string/addons"/>
 
     <item android:id="@+id/downloads"
           android:title="@string/downloads"/>
 
+    <item android:id="@+id/passwords"
+          android:title="@string/passwords"/>
+
     <item android:id="@+id/apps"
           android:title="@string/apps"/>
 
     <item android:id="@+id/char_encoding"
           android:visible="false"
           android:title="@string/char_encoding"/>
 
     <item android:id="@+id/settings"
--- a/mobile/android/base/resources/xml/preferences_privacy.xml
+++ b/mobile/android/base/resources/xml/preferences_privacy.xml
@@ -35,16 +35,20 @@
                     android:entries="@array/pref_cookies_entries"
                     android:entryValues="@array/pref_cookies_values"
                     android:persistent="false" />
 
     <CheckBoxPreference android:key="signon.rememberSignons"
                         android:title="@string/pref_remember_signons"
                         android:persistent="false" />
 
+    <org.mozilla.gecko.preferences.LinkPreference android:key="android.not_a_preference.signon.manage"
+                                                  android:title="@string/pref_manage_passwords"
+                                                  url="about:passwords"/>
+
     <CheckBoxPreference android:key="privacy.masterpassword.enabled"
                         android:title="@string/pref_use_master_password"
                         android:persistent="false" />
 
     <!-- keys prefixed with "android.not_a_preference." are not synced with Gecko -->
     <PreferenceCategory android:title="@string/pref_clear_private_data_category">
 
         <org.mozilla.gecko.preferences.PrivateDataPreference
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -125,16 +125,17 @@
   <string name="pref_category_customize">&pref_category_customize;</string>
   <string name="pref_category_customize_summary">&pref_category_customize_summary;</string>
   <string name="pref_category_search">&pref_category_search3;</string>
   <string name="pref_category_search_summary">&pref_category_search_summary;</string>
   <string name="pref_category_display">&pref_category_display;</string>
   <string name="pref_category_display_summary">&pref_category_display_summary;</string>
   <string name="pref_category_privacy_short">&pref_category_privacy_short;</string>
   <string name="pref_category_privacy_summary">&pref_category_privacy_summary;</string>
+  <string name="pref_manage_passwords">&pref_manage_passwords;</string>
   <string name="pref_category_vendor">&pref_category_vendor;</string>
   <string name="pref_category_vendor_summary">&pref_category_vendor_summary;</string>
   <string name="pref_category_datareporting">&pref_category_datareporting;</string>
   <string name="pref_category_installed_search_engines">&pref_category_installed_search_engines;</string>
   <string name="pref_category_add_search_providers">&pref_category_add_search_providers;</string>
   <string name="pref_category_search_restore_defaults">&pref_category_search_restore_defaults;</string>
   <string name="pref_search_restore_defaults">&pref_search_restore_defaults;</string>
   <string name="pref_search_restore_defaults_summary">&pref_search_restore_defaults_summary;</string>
@@ -275,16 +276,17 @@
   <string name="site_security">&site_security;</string>
   <string name="close_tab">&close_tab;</string>
   <string name="new_tab_opened">&new_tab_opened;</string>
   <string name="new_private_tab_opened">&new_private_tab_opened;</string>
   <string name="switch_button_message">&switch_button_message;</string>
   <string name="one_tab">&one_tab;</string>
   <string name="num_tabs">&num_tabs2;</string>
   <string name="addons">&addons;</string>
+  <string name="passwords">&passwords;</string>
   <string name="downloads">&downloads;</string>
   <string name="apps">&apps;</string>
   <string name="char_encoding">&char_encoding;</string>
   <string name="new_tab">&new_tab;</string>
   <string name="new_private_tab">&new_private_tab;</string>
   <string name="close_all_tabs">&close_all_tabs;</string>
   <string name="close_private_tabs">&close_private_tabs;</string>
   <string name="tabs_normal">&tabs_normal;</string>
--- a/mobile/android/base/tests/StringHelper.java
+++ b/mobile/android/base/tests/StringHelper.java
@@ -29,16 +29,17 @@ public class StringHelper {
     public static final String ABOUT_FIREFOX_URL = "about:firefox";
     public static final String ABOUT_RIGHTS_URL = "about:rights";
     public static final String ABOUT_BUILDCONFIG_URL = "about:buildconfig";
     public static final String ABOUT_FEEDBACK_URL = "about:feedback";
     public static final String ABOUT_HEALTHREPORT_URL = "about:healthreport";
     public static final String ABOUT_DOWNLOADS_URL = "about:downloads";
     public static final String ABOUT_HOME_URL = "about:home";
     public static final String ABOUT_ADDONS_URL = "about:addons";
+    public static final String ABOUT_PASSWORDS_URL = "about:passwords";
     public static final String ABOUT_APPS_URL = "about:apps";
     public static final String ABOUT_ABOUT_URL = "about:about";
     public static final String ABOUT_SCHEME = "about:";
 
     // About pages' titles
     public static final String ABOUT_HOME_TITLE = "";
 
     // Context Menu item strings
@@ -179,16 +180,17 @@ public class StringHelper {
     public static final String SHOW_PAGE_TITLE_LABEL = "Show page title";
     public static final String SHOW_PAGE_ADDRESS_LABEL = "Show page address";
 
     // Privacy
     public static final String TRACKING_PROTECTION_LABEL = "Tracking protection";
     public static final String DNT_LABEL = "Do not track";
     public static final String COOKIES_LABEL = "Cookies";
     public static final String REMEMBER_PASSWORDS_LABEL = "Remember passwords";
+    public static final String MANAGE_PASSWORDS_LABEL = "Manage passwords";
     public static final String MASTER_PASSWORD_LABEL = "Use master password";
     public static final String CLEAR_PRIVATE_DATA_LABEL = "Clear now";
 
     // Mozilla
     public static final String BRAND_NAME = "(Fennec|Nightly|Aurora|Firefox Beta|Firefox)";
     public static final String ABOUT_LABEL = "About " + BRAND_NAME;
     public static final String FAQS_LABEL = "FAQs";
     public static final String FEEDBACK_LABEL = "Give feedback";
@@ -221,16 +223,17 @@ public class StringHelper {
     public static final String NEW_TAB_LABEL = "New Tab";
     public static final String NEW_PRIVATE_TAB_LABEL = "New Private Tab";
     public static final String SHARE_LABEL = "Share";
     public static final String FIND_IN_PAGE_LABEL = "Find in Page";
     public static final String DESKTOP_SITE_LABEL = "Request Desktop Site";
     public static final String PDF_LABEL = "Save as PDF";
     public static final String DOWNLOADS_LABEL = "Downloads";
     public static final String ADDONS_LABEL = "Add-ons";
+    public static final String PASSWORDS_LABEL = "Passwords";
     public static final String APPS_LABEL = "Apps";
     public static final String SETTINGS_LABEL = "Settings";
     public static final String GUEST_MODE_LABEL = "New Guest Session";
 
     // Android 3.0+
     public static final String TOOLS_LABEL = "Tools";
     public static final String PAGE_LABEL = "Page";
 
--- a/mobile/android/base/tests/testSettingsMenuItems.java
+++ b/mobile/android/base/tests/testSettingsMenuItems.java
@@ -54,21 +54,23 @@ public class testSettingsMenuItems exten
         { "Advanced" },
         { StringHelper.CHARACTER_ENCODING_LABEL, "Don't show menu", "Show menu", "Don't show menu" },
         { StringHelper.PLUGINS_LABEL, "Tap to play", "Enabled", "Tap to play", "Disabled" },
     };
 
     // Privacy menu items.
     String[] PATH_PRIVACY = { StringHelper.PRIVACY_SECTION_LABEL };
     final String[] TRACKING_PROTECTION_LABEL_ARR = { StringHelper.TRACKING_PROTECTION_LABEL };
+    final String[] MANAGE_PASSWORDS_ARR = { StringHelper.MANAGE_PASSWORDS_LABEL };
     String[][] OPTIONS_PRIVACY = {
         TRACKING_PROTECTION_LABEL_ARR,
         { StringHelper.DNT_LABEL },
         { StringHelper.COOKIES_LABEL, "Enabled", "Enabled, excluding 3rd party", "Disabled" },
         { StringHelper.REMEMBER_PASSWORDS_LABEL },
+        MANAGE_PASSWORDS_ARR,
         { StringHelper.MASTER_PASSWORD_LABEL },
         { StringHelper.CLEAR_PRIVATE_DATA_LABEL, "", "Browsing history", "Downloads", "Form & search history", "Cookies & active logins", "Saved passwords", "Cache", "Offline website data", "Site settings", "Clear data" },
     };
 
     // Mozilla/vendor menu items.
     String[] PATH_MOZILLA = { StringHelper.MOZILLA_SECTION_LABEL };
     String[][] OPTIONS_MOZILLA = {
         { StringHelper.ABOUT_LABEL },
@@ -166,17 +168,19 @@ public class testSettingsMenuItems exten
                 settingsMap.get(PATH_MOZILLA).add(networkReportingUi);
 
                 String[] learnMoreUi = { "Learn more" };
                 settingsMap.get(PATH_MOZILLA).add(learnMoreUi);
             }
         }
 
         if (!AppConstants.NIGHTLY_BUILD) {
-            settingsMap.get(PATH_PRIVACY).remove(TRACKING_PROTECTION_LABEL_ARR);
+            final List<String[]> privacy = settingsMap.get(PATH_PRIVACY);
+            privacy.remove(TRACKING_PROTECTION_LABEL_ARR);
+            privacy.remove(MANAGE_PASSWORDS_ARR);
         }
 
         // Automatic updates
         if (AppConstants.MOZ_UPDATER) {
             String[] autoUpdateUi = { "Download updates automatically", "Only over Wi-Fi", "Always", "Only over Wi-Fi", "Never" };
             settingsMap.get(PATH_CUSTOMIZE).add(autoUpdateUi);
         }
 
--- a/mobile/android/base/tests/testSystemPages.java
+++ b/mobile/android/base/tests/testSystemPages.java
@@ -1,30 +1,32 @@
 package org.mozilla.gecko.tests;
 
 import org.mozilla.gecko.Actions;
+import org.mozilla.gecko.AppConstants;
 
 /** This patch tests the System Pages first by loading system pages from
  *  the awesome bar and then from Firefox menu
  */
 public class testSystemPages extends PixelTest {
     final int mExpectedTabCount = 1;
     private static final int AFTER_BACK_SLEEP_MS = 500;
 
     public void testSystemPages() {
         blockForGeckoReady();
 
         final String urls [] = { StringHelper.ABOUT_FIREFOX_URL, StringHelper.ABOUT_RIGHTS_URL,
-                StringHelper.ABOUT_ADDONS_URL, StringHelper.ABOUT_DOWNLOADS_URL,
+                StringHelper.ABOUT_ADDONS_URL, StringHelper.ABOUT_DOWNLOADS_URL, StringHelper.ABOUT_PASSWORDS_URL,
                 StringHelper.ABOUT_BUILDCONFIG_URL, StringHelper.ABOUT_FEEDBACK_URL,
                 StringHelper.ABOUT_HEALTHREPORT_URL, StringHelper.ABOUT_SCHEME
         };
         // Pages to be tested from the menu and their expected urls. This if of the form { {{ <path to item> }, { <expected url> }}* }
         String menuItems [][][] = {{{ StringHelper.APPS_LABEL }, { StringHelper.ABOUT_APPS_URL }},
                                   {{ StringHelper.DOWNLOADS_LABEL }, { StringHelper.ABOUT_DOWNLOADS_URL}},
+                                  {{ StringHelper.PASSWORDS_LABEL}, { StringHelper.ABOUT_PASSWORDS_URL }},
                                   {{ StringHelper.ADDONS_LABEL }, { StringHelper.ABOUT_ADDONS_URL }},
                                   {{ StringHelper.SETTINGS_LABEL, StringHelper.MOZILLA_SECTION_LABEL, StringHelper.ABOUT_LABEL }, { StringHelper.ABOUT_SCHEME }},
                                   {{ StringHelper.SETTINGS_LABEL, StringHelper.MOZILLA_SECTION_LABEL, StringHelper.FEEDBACK_LABEL }, { StringHelper.ABOUT_FEEDBACK_URL }},
                                   {{ StringHelper.SETTINGS_LABEL, StringHelper.MOZILLA_SECTION_LABEL, StringHelper.MY_HEALTH_REPORT_LABEL }, { StringHelper.ABOUT_HEALTHREPORT_URL }}};
 
         /* Load system pages from url and check that the pages are loaded in the same tab */
         checkUrl(urls);
 
@@ -43,32 +45,39 @@ public class testSystemPages extends Pix
 
         // Load system pages by navigating through the UI.
         loadItemsByLevel(menuItems);
     }
 
     // Load from Url the about: pages,verify the Url and the tabs number
     public void checkUrl(String urls []) {
         for (String url:urls) {
+            if (skipItemURL(url)) {
+                continue;
+            }
             loadAndPaint(url);
             verifyTabCount(mExpectedTabCount);
             verifyUrl(url);
         }
     }
 
     public void loadItemsByLevel(String[][][] menuItems) {
         Actions.EventExpecter tabEventExpecter;
         Actions.EventExpecter contentEventExpecter;
         Actions.RepeatedEventExpecter paintExpecter = mActions.expectPaint();
         int expectedTabCount = mExpectedTabCount;
         // There's some special casing for about: because it's our starting page.
         for (String[][] item : menuItems) {
             String [] pathToItem = item[0];
             String expectedUrl = item[1][0];
 
+            if (skipItemURL(expectedUrl)) {
+                continue;
+            }
+
             expectedTabCount++;
 
             // Set up listeners to catch the page load we're about to do
             tabEventExpecter = mActions.expectGeckoEvent("Tab:Added");
             contentEventExpecter = mActions.expectGeckoEvent("DOMContentLoaded");
             selectMenuItemByPath(pathToItem);
 
             // Wait for the new tab and page to load
@@ -85,9 +94,16 @@ public class testSystemPages extends Pix
             verifyUrl(expectedUrl);
             if (StringHelper.ABOUT_SCHEME.equals(expectedUrl)) {
                 // Decreasing because we do not expect this to be in a different tab.
                 expectedTabCount--;
             }
             verifyTabCount(expectedTabCount);
         }
     }
+
+    private boolean skipItemURL(String item) {
+        if (StringHelper.ABOUT_PASSWORDS_URL.equals(item) && !AppConstants.NIGHTLY_BUILD) {
+            return true;
+        }
+        return false;
+    }
 }