Bug 574688 - replace the status bar with the addon bar (r=mano, a=blocking-beta7)
authorDietrich Ayala <dietrich@mozilla.com>
Thu, 16 Sep 2010 13:09:27 +0700
changeset 54522 eec9a82ad74029394c19a023700efb870f54bf17
parent 54521 9631d2f6c6a04ce3136a2bb9469809e07dc144b2
child 54523 36a9ff4549cc189acb2e0d9b69ef9c9c0673b2a6
push id15931
push userdietrich@mozilla.com
push dateThu, 23 Sep 2010 08:50:09 +0000
treeherdermozilla-central@eec9a82ad740 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmano, blocking-beta7
bugs574688
milestone2.0b7pre
first release with
nightly linux32
eec9a82ad740 / 4.0b7pre / 20100923030122 / files
nightly linux64
eec9a82ad740 / 4.0b7pre / 20100923030731 / files
nightly mac
eec9a82ad740 / 4.0b7pre / 20100923030749 / files
nightly win32
eec9a82ad740 / 4.0b7pre / 20100923041416 / files
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
Bug 574688 - replace the status bar with the addon bar (r=mano, a=blocking-beta7)
browser/app/profile/firefox.js
browser/base/content/browser-menubar.inc
browser/base/content/browser-places.js
browser/base/content/browser-sets.inc
browser/base/content/browser-syncui.js
browser/base/content/browser.js
browser/base/content/browser.xul
browser/base/content/pageReportFirstTime.xul
browser/base/content/tabbrowser.xml
browser/base/content/test/Makefile.in
browser/base/content/test/browser_addon_bar.js
browser/base/content/test/browser_pageInfo.js
browser/base/content/utilityOverlay.js
browser/components/places/content/bookmarksPanel.xul
browser/components/places/content/history-panel.xul
browser/components/places/content/sidebarUtils.js
browser/components/preferences/advanced-scripts.xul
browser/components/privatebrowsing/test/browser/Makefile.in
browser/components/privatebrowsing/test/browser/browser_privatebrowsing_popupblocker.js
browser/locales/en-US/chrome/browser/browser.dtd
browser/locales/en-US/chrome/browser/browser.properties
browser/locales/en-US/chrome/browser/pageReportFirstTime.dtd
browser/locales/en-US/chrome/browser/preferences/advanced-scripts.dtd
browser/locales/en-US/feedback/main.dtd
browser/themes/gnomestripe/browser/browser.css
browser/themes/pinstripe/browser/browser.css
browser/themes/winstripe/browser/browser.css
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -410,25 +410,22 @@ pref("javascript.options.showInConsole",
 pref("general.warnOnAboutConfig",                 false);
 #endif
 
 #ifdef WINCE
 // Set the threshold higher to avoid some slow script warnings
 pref("dom.max_script_run_time",                   20);
 #endif
 
-// Make the status bar reliably present and unaffected by pages
-pref("dom.disable_window_open_feature.status",    true);
 // This is the pref to control the location bar, change this to true to 
-// force this instead of or in addition to the status bar - this makes 
-// the origin of popup windows more obvious to avoid spoofing. We would 
-// rather not do it by default because it affects UE for web applications, but
-// without it there isn't a really good way to prevent chrome spoofing, see bug 337344
+// force this - this makes the origin of popup windows more obvious to avoid
+// spoofing. We would rather not do it by default because it affects UE for web
+// applications, but without it there isn't a really good way to prevent chrome
+// spoofing, see bug 337344
 pref("dom.disable_window_open_feature.location",  true);
-pref("dom.disable_window_status_change",          true);
 // allow JS to move and resize existing windows
 pref("dom.disable_window_move_resize",            false);
 // prevent JS from monkeying with window focus, etc
 pref("dom.disable_window_flip",                   true);
 
 // popups.policy 1=allow,2=reject
 pref("privacy.popups.policy",               1);
 pref("privacy.popups.usecustom",            true);
@@ -993,18 +990,16 @@ pref("services.sync.prefs.sync.browser.t
 pref("services.sync.prefs.sync.browser.tabs.warnOnOpen", true);
 pref("services.sync.prefs.sync.browser.urlbar.autocomplete.enabled", true);
 pref("services.sync.prefs.sync.browser.urlbar.autoFill", true);
 pref("services.sync.prefs.sync.browser.urlbar.default.behavior", true);
 pref("services.sync.prefs.sync.browser.urlbar.maxRichResults", true);
 pref("services.sync.prefs.sync.dom.disable_open_during_load", true);
 pref("services.sync.prefs.sync.dom.disable_window_flip", true);
 pref("services.sync.prefs.sync.dom.disable_window_move_resize", true);
-pref("services.sync.prefs.sync.dom.disable_window_open_feature.status", true);
-pref("services.sync.prefs.sync.dom.disable_window_status_change", true);
 pref("services.sync.prefs.sync.dom.event.contextmenu.enabled", true);
 pref("services.sync.prefs.sync.extensions.personas.current", true);
 pref("services.sync.prefs.sync.extensions.update.enabled", true);
 pref("services.sync.prefs.sync.general.autoScroll", true);
 pref("services.sync.prefs.sync.general.smoothScroll", true);
 pref("services.sync.prefs.sync.intl.accept_languages", true);
 pref("services.sync.prefs.sync.javascript.enabled", true);
 pref("services.sync.prefs.sync.layout.spellcheckDefault", true);
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -225,26 +225,16 @@
                               accesskey="&viewTabsOnTop.accesskey;"/>
                     <menuseparator/>
                     <menuitem id="menu_customizeToolbars"
                               label="&viewCustomizeToolbar.label;"
                               accesskey="&viewCustomizeToolbar.accesskey;"
                               command="cmd_CustomizeToolbars"/>
                   </menupopup>
                 </menu>
-                <menuitem id="toggle_taskbar"
-                          label="&taskbarCmd.label;"
-                          accesskey="&taskbarCmd.accesskey;"
-                          type="checkbox"
-                          command="cmd_toggleTaskbar"
-#ifndef WINCE
-                          checked="true" />
-#else
-                          checked="false" />
-#endif
                 <menu id="viewSidebarMenuMenu"
                       label="&viewSidebarMenu.label;"
                       accesskey="&viewSidebarMenu.accesskey;">
                   <menupopup id="viewSidebarMenu">
                     <menuitem id="menu_bookmarksSidebar"
                               key="viewBookmarksSidebarKb"
                               observes="viewBookmarksSidebar"
                               accesskey="&bookmarksButton.accesskey;"/>
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -630,18 +630,19 @@ HistoryMenu.prototype = {
         if (/^https?:/.test(iconURL))
           iconURL = "moz-anno:favicon:" + iconURL;
         m.setAttribute("image", iconURL);
       }
       m.setAttribute("class", "menuitem-iconic bookmark-item menuitem-with-favicon");
       m.setAttribute("value", i);
       m.setAttribute("oncommand", "undoCloseTab(" + i + ");");
 
-      // Set the targetURI attribute so it will be shown in tooltip and statusbar.
-      // SessionStore uses one-based indexes, so we need to normalize them.
+      // Set the targetURI attribute so it will be shown in tooltip and trigger
+      // onLinkHovered. SessionStore uses one-based indexes, so we need to
+      // normalize them.
       let tabData = undoItems[i].state;
       let activeIndex = (tabData.index || tabData.entries.length) - 1;
       if (activeIndex >= 0 && tabData.entries[activeIndex])
         m.setAttribute("targetURI", tabData.entries[activeIndex].url);
 
       m.addEventListener("click", this._undoCloseMiddleClick, false);
       if (i == 0)
         m.setAttribute("key", "key_undoCloseTab");
@@ -711,17 +712,17 @@ HistoryMenu.prototype = {
         // don't initiate a connection just to fetch a favicon (see bug 467828)
         if (/^https?:/.test(iconURL))
           iconURL = "moz-anno:favicon:" + iconURL;
         m.setAttribute("image", iconURL);
       }
       m.setAttribute("class", "menuitem-iconic bookmark-item menuitem-with-favicon");
       m.setAttribute("oncommand", "undoCloseWindow(" + i + ");");
 
-      // Set the targetURI attribute so it will be shown in tooltip and statusbar.
+      // Set the targetURI attribute so it will be shown in tooltip.
       // SessionStore uses one-based indexes, so we need to normalize them.
       let activeIndex = (selectedTab.index || selectedTab.entries.length) - 1;
       if (activeIndex >= 0 && selectedTab.entries[activeIndex])
         m.setAttribute("targetURI", selectedTab.entries[activeIndex].url);
 
       if (i == 0)
         m.setAttribute("key", "key_undoCloseWindow");
       undoPopup.appendChild(m);
@@ -1159,19 +1160,17 @@ let BookmarksMenuButton = {
       return;
     this._popupNeedsUpdating = false;
 
     let viewToolbar = document.getElementById("BMB_viewBookmarksToolbar");
     if (!this._popupInitialized) {
       // First popupshowing event, initialize immutable attributes.
       this._popupInitialized = true;
       // Update View bookmarks toolbar checkbox menuitem.
-      viewToolbar.setAttribute("toolbarindex",
-                               Array.indexOf(gNavToolbox.childNodes,
-                                             this.personalToolbar));
+      viewToolbar.setAttribute("toolbarId", this.personalToolbar.id);
 
       // Need to set the label on Unsorted Bookmarks menu.
       let unsortedBookmarksElt =
         document.getElementById("BMB_unsortedBookmarksFolderMenu");
       unsortedBookmarksElt.label =
         PlacesUtils.getString("UnsortedBookmarksFolderTitle");
     }
 
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -64,17 +64,16 @@
     <command id="Browser:SendLink"
              oncommand="MailIntegration.sendLinkForWindow(window.content);"/>
 
     <command id="cmd_pageSetup" oncommand="PrintUtils.showPageSetup();"/>
     <command id="cmd_print" oncommand="PrintUtils.print();"/>
     <command id="cmd_printPreview" oncommand="PrintUtils.printPreview(PrintPreviewListener);"/>
     <command id="cmd_close" oncommand="BrowserCloseTabOrWindow()"/>
     <command id="cmd_closeWindow" oncommand="BrowserTryToCloseWindow()"/>
-    <command id="cmd_toggleTaskbar" oncommand="goToggleToolbar('status-bar','toggle_taskbar');"/>
     <command id="cmd_ToggleTabsOnTop" oncommand="TabsOnTop.toggle()"/>
     <command id="cmd_CustomizeToolbars" oncommand="BrowserCustomizeToolbar()"/>
     <command id="cmd_quitApplication" oncommand="goQuitApplication()"/>
 
 
     <commandset id="editMenuCommands"/>
 
     <command id="View:PageSource" oncommand="BrowserViewSourceOfDocument(content.document);" observes="isImage"/>
--- a/browser/base/content/browser-syncui.js
+++ b/browser/base/content/browser-syncui.js
@@ -155,17 +155,17 @@ let gSyncUI = {
     menuitem.setAttribute("class", "alltabs-item");
     menuitem.setAttribute("oncommand", "BrowserOpenSyncTabs();");
 
     let sep = document.createElement("menuseparator");
     sep.setAttribute("id", "sync-tabs-sep");
 
     // Fake the tab object on the menu entries, so that we don't have to worry
     // about removing them ourselves. They will just get cleaned up by popup
-    // binding. This also makes sure the statusbar updates with the URL.
+    // binding.
     menuitem.tab = { "linkedBrowser": { "currentURI": { "spec": label } } };
     sep.tab = { "linkedBrowser": { "currentURI": { "spec": " " } } };
 
     popup.insertBefore(sep, popup.firstChild);
     popup.insertBefore(menuitem, sep);
   },
 
 
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -370,34 +370,24 @@ function findChildShell(aDocument, aDocS
     docShell = findChildShell(aDocument, docShell, aSoughtURI);
     if (docShell)
       return docShell;
   }
   return null;
 }
 
 const gPopupBlockerObserver = {
-  _reportButton: null,
 
   onUpdatePageReport: function (aEvent)
   {
     if (aEvent.originalTarget != gBrowser.selectedBrowser)
       return;
 
-    if (!this._reportButton)
-      this._reportButton = document.getElementById("page-report-button");
-
-    if (!gBrowser.pageReport) {
-      // Hide the popup blocker statusbar button
-      this._reportButton.hidden = true;
-
+    if (!gBrowser.pageReport)
       return;
-    }
-
-    this._reportButton.hidden = false;
 
     // Only show the notification again if we've not already shown it. Since
     // notifications are per-browser, we don't need to worry about re-adding
     // it.
     if (!gBrowser.pageReport.reported) {
       if (gPrefService.getBoolPref("privacy.popups.showBrowserMessage")) {
         var brandBundle = document.getElementById("bundle_brand");
         var brandShortName = brandBundle.getString("brandShortName");
@@ -545,20 +535,17 @@ const gPopupBlockerObserver = {
     if (foundUsablePopupURI)
       blockedPopupsSeparator.removeAttribute("hidden");
     else
       blockedPopupsSeparator.setAttribute("hidden", true);
 
     var blockedPopupDontShowMessage = document.getElementById("blockedPopupDontShowMessage");
     var showMessage = gPrefService.getBoolPref("privacy.popups.showBrowserMessage");
     blockedPopupDontShowMessage.setAttribute("checked", !showMessage);
-    if (aEvent.target.localName == "popup")
-      blockedPopupDontShowMessage.setAttribute("label", gNavigatorBundle.getString("popupWarningDontShowFromMessage"));
-    else
-      blockedPopupDontShowMessage.setAttribute("label", gNavigatorBundle.getString("popupWarningDontShowFromStatusbar"));
+    blockedPopupDontShowMessage.setAttribute("label", gNavigatorBundle.getString("popupWarningDontShowFromMessage"));
   },
 
   showBlockedPopup: function (aEvent)
   {
     var target = aEvent.target;
     var popupWindowURI = target.getAttribute("popupWindowURI");
     var features = target.getAttribute("popupWindowFeatures");
     var name = target.getAttribute("popupWindowName");
@@ -595,26 +582,29 @@ const gPopupBlockerObserver = {
     }
     else
       window.openDialog("chrome://browser/content/preferences/permissions.xul",
                         "_blank", "resizable,dialog=no,centerscreen", params);
   },
 
   dontShowMessage: function ()
   {
+#if 0 
+    // Disabled until bug 594294 is fixed.
     var showMessage = gPrefService.getBoolPref("privacy.popups.showBrowserMessage");
     var firstTime = gPrefService.getBoolPref("privacy.popups.firstTime");
 
     // If the info message is showing at the top of the window, and the user has never
     // hidden the message before, show an info box telling the user where the info
     // will be displayed.
     if (showMessage && firstTime)
       this._displayPageReportFirstTime();
 
     gPrefService.setBoolPref("privacy.popups.showBrowserMessage", !showMessage);
+#endif
 
     gBrowser.getNotificationBox().removeCurrentNotification();
   },
 
   _displayPageReportFirstTime: function ()
   {
     window.openDialog("chrome://browser/content/pageReportFirstTime.xul", "_blank",
                       "dependent");
@@ -1533,19 +1523,16 @@ function delayedStartup(isLoadingBlank, 
   // auto-resume downloads begin (such as after crashing or quitting with
   // active downloads) and speeds up the first-load of the download manager UI.
   // If the user manually opens the download manager before the timeout, the
   // downloads will start right away, and getting the service again won't hurt.
   setTimeout(function() {
     gDownloadMgr = Cc["@mozilla.org/download-manager;1"].
                    getService(Ci.nsIDownloadManager);
 
-    // Initialize the downloads monitor panel listener
-    DownloadMonitorPanel.init();
-
     if (Win7Features) {
       let tempScope = {};
       Cu.import("resource://gre/modules/DownloadTaskbarProgress.jsm",
                 tempScope);
       tempScope.DownloadTaskbarProgress.onBrowserWindowLoad(window);
     }
   }, 10000);
 
@@ -1657,17 +1644,16 @@ function BrowserShutdown()
   try {
     gPrefService.removeObserver(gHomeButton.prefDomain, gHomeButton);
   } catch (ex) {
     Components.utils.reportError(ex);
   }
 
   BrowserOffline.uninit();
   OfflineApps.uninit();
-  DownloadMonitorPanel.uninit();
   gPrivateBrowsingUI.uninit();
   IndexedDBPromptHelper.uninit();
 
   var enumerator = Services.wm.getEnumerator(null);
   enumerator.getNext();
   if (!enumerator.hasMoreElements()) {
     document.persist("sidebar-box", "sidebarcommand");
     document.persist("sidebar-box", "width");
@@ -1690,17 +1676,17 @@ function BrowserShutdown()
 // nonBrowserWindowStartup(), nonBrowserWindowDelayedStartup(), and
 // nonBrowserWindowShutdown() are used for non-browser windows in
 // macBrowserOverlay
 function nonBrowserWindowStartup()
 {
   // Disable inappropriate commands / submenus
   var disabledItems = ['Browser:SavePage',
                        'Browser:SendLink', 'cmd_pageSetup', 'cmd_print', 'cmd_find', 'cmd_findAgain',
-                       'viewToolbarsMenu', 'cmd_toggleTaskbar', 'viewSidebarMenuMenu', 'Browser:Reload',
+                       'viewToolbarsMenu', 'viewSidebarMenuMenu', 'Browser:Reload',
                        'viewFullZoomMenu', 'pageStyleMenu', 'charsetMenu', 'View:PageSource', 'View:FullScreen',
                        'viewHistorySidebar', 'Browser:AddBookmarkAs', 'View:PageInfo', 'Tasks:InspectPage'];
   var element;
 
   for (var id in disabledItems)
   {
     element = document.getElementById(disabledItems[id]);
     if (element)
@@ -2756,37 +2742,37 @@ var PrintPreviewListener = {
     this._chromeState.sidebarOpen = !sidebar.hidden;
     this._sidebarCommand = sidebar.getAttribute("sidebarcommand");
 
     var notificationBox = gBrowser.getNotificationBox();
     this._chromeState.notificationsOpen = !notificationBox.notificationsHidden;
     notificationBox.notificationsHidden = true;
 
     document.getElementById("sidebar").setAttribute("src", "about:blank");
-    var statusbar = document.getElementById("status-bar");
-    this._chromeState.statusbarOpen = !statusbar.hidden;
-    statusbar.hidden = true;
+    var addonBar = document.getElementById("addon-bar");
+    this._chromeState.addonBarOpen = !addonBar.collapsed;
+    addonBar.collapsed = true;
 
     this._chromeState.findOpen = gFindBarInitialized && !gFindBar.hidden;
     if (gFindBarInitialized)
       gFindBar.close();
 
     this._chromeState.syncNotificationsOpen = false;
     var syncNotifications = document.getElementById("sync-notifications");
     if (syncNotifications) {
       this._chromeState.syncNotificationsOpen = !syncNotifications.notificationsHidden;
       syncNotifications.notificationsHidden = true;
     }
   },
   _showChrome: function () {
     if (this._chromeState.notificationsOpen)
       gBrowser.getNotificationBox().notificationsHidden = false;
 
-    if (this._chromeState.statusbarOpen)
-      document.getElementById("status-bar").hidden = false;
+    if (this._chromeState.addonBarOpen)
+      document.getElementById("addon-bar").collapsed = false;
 
     if (this._chromeState.findOpen)
       gFindBar.open();
 
     if (this._chromeState.syncNotificationsOpen)
       document.getElementById("sync-notifications").notificationsHidden = false;
   }
 }
@@ -2906,18 +2892,17 @@ var browserDragAndDrop = {
   canDropLink: function (aEvent) Services.droppedLinkHandler.canDropLink(aEvent, true),
 
   dragOver: function (aEvent, statusString)
   {
     if (this.canDropLink(aEvent)) {
       aEvent.preventDefault();
 
       if (statusString) {
-        var statusTextFld = document.getElementById("statusbar-display");
-        statusTextFld.label = gNavigatorBundle.getString(statusString);
+        XULBrowserWindow.setStatusText(gNavigatorBundle.getString(statusString));
       }
     }
   },
 
   drop: function (aEvent, aName) Services.droppedLinkHandler.dropLink(aEvent, aName)
 };
 
 var homeButtonObserver = {
@@ -2928,18 +2913,17 @@ var homeButtonObserver = {
 
   onDragOver: function (aEvent)
     {
       browserDragAndDrop.dragOver(aEvent, "droponhomebutton");
       aEvent.dropEffect = "link";
     },
   onDragLeave: function (aEvent)
     {
-      var statusTextFld = document.getElementById("statusbar-display");
-      statusTextFld.label = "";
+      XULWindowBrowser.setStatusText("");
     }
 }
 
 function openHomeDialog(aURL)
 {
   var promptTitle = gNavigatorBundle.getString("droponhometitle");
   var promptMsg   = gNavigatorBundle.getString("droponhomemsg");
   var pressedVal  = Services.prompt.confirmEx(window, promptTitle, promptMsg,
@@ -2972,31 +2956,29 @@ var bookmarksButtonObserver = {
   onDragOver: function (aEvent)
   {
     browserDragAndDrop.dragOver(aEvent, "droponbookmarksbutton");
     aEvent.dropEffect = "link";
   },
 
   onDragLeave: function (aEvent)
   {
-    var statusTextFld = document.getElementById("statusbar-display");
-    statusTextFld.label = "";
+    XULWindowBrowser.setStatusText("");
   }
 }
 
 var newTabButtonObserver = {
   onDragOver: function (aEvent)
   {
     browserDragAndDrop.dragOver(aEvent, "droponnewtabbutton");
   },
 
   onDragLeave: function (aEvent)
   {
-    var statusTextFld = document.getElementById("statusbar-display");
-    statusTextFld.label = "";
+    XULWindowBrowser.setStatusText("");
   },
 
   onDrop: function (aEvent)
   {
     let url = browserDragAndDrop.drop(aEvent, { });
     var postData = {};
     url = getShortcutOrURI(url, postData);
     if (url) {
@@ -3008,47 +2990,44 @@ var newTabButtonObserver = {
 
 var newWindowButtonObserver = {
   onDragOver: function (aEvent)
   {
     browserDragAndDrop.dragOver(aEvent, "droponnewwindowbutton");
   },
   onDragLeave: function (aEvent)
   {
-    var statusTextFld = document.getElementById("statusbar-display");
-    statusTextFld.label = "";
+    XULWindowBrowser.setStatusText("");
   },
   onDrop: function (aEvent)
   {
     let url = browserDragAndDrop.drop(aEvent, { });
     var postData = {};
     url = getShortcutOrURI(url, postData);
     if (url) {
       // allow third-party services to fixup this URL
       openNewWindowWith(url, null, postData.value, true);
     }
   }
 }
 
 var DownloadsButtonDNDObserver = {
   onDragOver: function (aEvent)
   {
-    var statusTextFld = document.getElementById("statusbar-display");
-    statusTextFld.label = gNavigatorBundle.getString("dropondownloadsbutton");
+    XULWindowBrowser.setStatusText(gNavigatorBundle.getString("dropondownloadsbutton"));
     var types = aEvent.dataTransfer.types;
     if (types.contains("text/x-moz-url") ||
         types.contains("text/uri-list") ||
         types.contains("text/plain"))
       aEvent.preventDefault();
   },
 
   onDragLeave: function (aEvent)
   {
-    var statusTextFld = document.getElementById("statusbar-display");
-    statusTextFld.label = "";
+    XULWindowBrowser.setStatusText("");
   },
 
   onDrop: function (aEvent)
   {
     let name = { };
     let url = browserDragAndDrop.drop(aEvent, name);
     if (url)
       saveURL(url, name, null, true, true);
@@ -3633,19 +3612,18 @@ var FullScreen = {
   _XULNS: "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
   toggle: function (event) {
     var enterFS = window.fullScreen;
 
     // We get the fullscreen event _before_ the window transitions into or out of FS mode.
     if (event && event.type == "fullscreen")
       enterFS = !enterFS;
 
-    // show/hide all menubars, toolbars, and statusbars (except the full screen toolbar)
+    // show/hide all menubars, toolbars (except the full screen toolbar)
     this.showXULChrome("toolbar", !enterFS);
-    this.showXULChrome("statusbar", !enterFS);
     document.getElementById("View:FullScreen").setAttribute("checked", enterFS);
 
     if (enterFS) {
       // Add a tiny toolbar to receive mouseover and dragenter events, and provide affordance.
       // This will help simulate the "collapse" metaphor while also requiring less code and
       // events than raw listening of mouse coords.
       let fullScrToggler = document.getElementById("fullscr-toggler");
       if (!fullScrToggler) {
@@ -3981,24 +3959,16 @@ var XULBrowserWindow = {
   get stopCommand () {
     delete this.stopCommand;
     return this.stopCommand = document.getElementById("Browser:Stop");
   },
   get reloadCommand () {
     delete this.reloadCommand;
     return this.reloadCommand = document.getElementById("Browser:Reload");
   },
-  get statusTextField () {
-    delete this.statusTextField;
-    return this.statusTextField = document.getElementById("statusbar-display");
-  },
-  get securityButton () {
-    delete this.securityButton;
-    return this.securityButton = document.getElementById("security-button");
-  },
   get isImage () {
     delete this.isImage;
     return this.isImage = document.getElementById("isImage");
   },
   get _uriFixup () {
     delete this._uriFixup;
     return this._uriFixup = Cc["@mozilla.org/docshell/urifixup;1"]
                               .getService(Ci.nsIURIFixup);
@@ -4015,55 +3985,39 @@ var XULBrowserWindow = {
   },
 
   destroy: function () {
     // XXXjag to avoid leaks :-/, see bug 60729
     delete this.throbberElement;
     delete this.statusMeter;
     delete this.stopCommand;
     delete this.reloadCommand;
-    delete this.statusTextField;
-    delete this.securityButton;
     delete this.statusText;
   },
 
   setJSStatus: function (status) {
     this.jsStatus = status;
-    this.updateStatusField();
   },
 
   setJSDefaultStatus: function (status) {
     this.jsDefaultStatus = status;
-    this.updateStatusField();
   },
 
   setDefaultStatus: function (status) {
     this.defaultStatus = status;
-    this.updateStatusField();
   },
 
   setOverLink: function (link) {
     // Encode bidirectional formatting characters.
     // (RFC 3987 sections 3.2 and 4.1 paragraph 6)
     link = link.replace(/[\u200e\u200f\u202a\u202b\u202c\u202d\u202e]/g,
                         encodeURIComponent);
     gURLBar.setOverLink(link);
   },
 
-  updateStatusField: function () {
-    var text = this.status || this.jsStatus || this.jsDefaultStatus || this.defaultStatus;
-
-    // check the current value so we don't trigger an attribute change
-    // and cause needless (slow!) UI updates
-    if (this.statusText != text) {
-      this.statusTextField.label = text;
-      this.statusText = text;
-    }
-  },
-
   onLinkIconAvailable: function (aIconURL) {
     if (gProxyFavIcon && gBrowser.userTypedValue === null)
       PageProxySetIcon(aIconURL); // update the favicon in the URL bar
   },
 
   onProgressChange: function (aWebProgress, aRequest,
                               aCurSelfProgress, aMaxSelfProgress,
                               aCurTotalProgress, aMaxTotalProgress) {
@@ -4312,17 +4266,16 @@ var XULBrowserWindow = {
   },
 
   asyncUpdateUI: function () {
     FeedHandler.updateFeeds();
   },
 
   onStatusChange: function (aWebProgress, aRequest, aStatus, aMessage) {
     this.status = aMessage;
-    this.updateStatusField();
   },
 
   // Properties used to cache security state used to update the UI
   _state: null,
   _tooltipText: null,
   _hostChanged: false, // onLocationChange will flip this bit
 
   onSecurityChange: function (aWebProgress, aRequest, aState) {
@@ -4377,31 +4330,25 @@ var XULBrowserWindow = {
         level = "low";
         break;
       case wpl.STATE_IS_BROKEN:
         level = "broken";
         break;
     }
 
     if (level) {
-      this.securityButton.setAttribute("level", level);
-      this.securityButton.hidden = false;
       // We don't style the Location Bar based on the the 'level' attribute
       // anymore, but still set it for third-party themes.
       if (gURLBar)
         gURLBar.setAttribute("level", level);
     } else {
-      this.securityButton.hidden = true;
-      this.securityButton.removeAttribute("level");
       if (gURLBar)
         gURLBar.removeAttribute("level");
     }
 
-    this.securityButton.setAttribute("tooltiptext", this._tooltipText);
-
     // Don't pass in the actual location object, since it can cause us to
     // hold on to the window object too long.  Just pass in the fields we
     // care about. (bug 424829)
     var location = gBrowser.contentWindow.location;
     var locationObj = {};
     try {
       locationObj.host = location.host;
       locationObj.hostname = location.hostname;
@@ -4410,17 +4357,17 @@ var XULBrowserWindow = {
       // Can sometimes throw if the URL being visited has no host/hostname,
       // e.g. about:blank. The _state for these pages means we won't need these
       // properties anyways, though.
     }
     gIdentityHandler.checkIdentity(this._state, locationObj);
   },
 
   // simulate all change notifications after switching tabs
-  onUpdateCurrentBrowser: function (aStateFlags, aStatus, aMessage, aTotalProgress) {
+  onUpdateCurrentBrowser: function XWB_onUpdateCurrentBrowser(aStateFlags, aStatus, aMessage, aTotalProgress) {
     if (FullZoom.updateBackgroundTabs)
       FullZoom.onLocationChange(gBrowser.currentURI, true);
     var nsIWebProgressListener = Components.interfaces.nsIWebProgressListener;
     var loadingDone = aStateFlags & nsIWebProgressListener.STATE_STOP;
     // use a pseudo-object instead of a (potentially nonexistent) channel for getting
     // a correct error message - and make sure that the UI is always either in
     // loading (STATE_START) or done (STATE_STOP) mode
     this.onStateChange(
@@ -4431,31 +4378,31 @@ var XULBrowserWindow = {
     );
     // status message and progress value are undefined if we're done with loading
     if (loadingDone)
       return;
     this.onStatusChange(gBrowser.webProgress, null, 0, aMessage);
     this.onProgressChange(gBrowser.webProgress, 0, 0, aTotalProgress, 1);
   },
 
-  startDocumentLoad: function (aRequest) {
+  startDocumentLoad: function XWB_startDocumentLoad(aRequest) {
     // clear out feed data
     gBrowser.selectedBrowser.feeds = null;
 
     // clear out search-engine data
     gBrowser.selectedBrowser.engines = null;
 
     var uri = aRequest.QueryInterface(Ci.nsIChannel).URI;
     try {
       Services.obs.notifyObservers(content, "StartDocumentLoad", uri.spec);
     } catch (e) {
     }
   },
 
-  endDocumentLoad: function (aRequest, aStatus) {
+  endDocumentLoad: function XWB_endDocumentLoad(aRequest, aStatus) {
     var urlStr = aRequest.QueryInterface(Ci.nsIChannel).originalURI.spec;
 
     var notification = Components.isSuccessCode(aStatus) ? "EndDocumentLoad" : "FailDocumentLoad";
     try {
       Services.obs.notifyObservers(content, notification, urlStr);
     } catch (e) {
     }
   }
@@ -4717,55 +4664,57 @@ function onViewToolbarsPopupShowing(aEve
   if (popup != aEvent.currentTarget)
     return;
 
   var i;
 
   // Empty the menu
   for (i = popup.childNodes.length-1; i >= 0; --i) {
     var deadItem = popup.childNodes[i];
-    if (deadItem.hasAttribute("toolbarindex"))
+    if (deadItem.hasAttribute("toolbarId"))
       popup.removeChild(deadItem);
   }
 
   var firstMenuItem = aInsertPoint || popup.firstChild;
 
-  for (i = 0; i < gNavToolbox.childNodes.length; ++i) {
-    var toolbar = gNavToolbox.childNodes[i];
+  let toolbarNodes = [document.getElementById("addon-bar")];
+  for (i = 0; i < gNavToolbox.childNodes.length; ++i)
+    toolbarNodes.push(gNavToolbox.childNodes[i]);
+  toolbarNodes.forEach(function(toolbar) {
     var toolbarName = toolbar.getAttribute("toolbarname");
     if (toolbarName) {
       let menuItem = document.createElement("menuitem");
       let hidingAttribute = toolbar.getAttribute("type") == "menubar" ?
                             "autohide" : "collapsed";
-      menuItem.setAttribute("toolbarindex", i);
+      menuItem.setAttribute("id", "toggle_" + toolbar.id);
+      menuItem.setAttribute("toolbarId", toolbar.id);
       menuItem.setAttribute("type", "checkbox");
       menuItem.setAttribute("label", toolbarName);
       menuItem.setAttribute("checked", toolbar.getAttribute(hidingAttribute) != "true");
       if (popup.id != "appmenu_customizeMenu")
         menuItem.setAttribute("accesskey", toolbar.getAttribute("accesskey"));
       popup.insertBefore(menuItem, firstMenuItem);
 
       menuItem.addEventListener("command", onViewToolbarCommand, false);
     }
-    toolbar = toolbar.nextSibling;
-  }
+  }, this);
 }
 
 function onViewToolbarCommand(aEvent) {
-  var index = aEvent.originalTarget.getAttribute("toolbarindex");
-  var toolbar = gNavToolbox.childNodes[index];
-  var visible = aEvent.originalTarget.getAttribute("checked") == "true";
-  setToolbarVisibility(toolbar, visible);
-}
-
-function setToolbarVisibility(toolbar, visible) {
+  var toolbarId = aEvent.originalTarget.getAttribute("toolbarId");
+  var toolbar = document.getElementById(toolbarId);
+  var isVisible = aEvent.originalTarget.getAttribute("checked") == "true";
+  setToolbarVisibility(toolbar, isVisible);
+}
+
+function setToolbarVisibility(toolbar, isVisible) {
   var hidingAttribute = toolbar.getAttribute("type") == "menubar" ?
                         "autohide" : "collapsed";
 
-  toolbar.setAttribute(hidingAttribute, !visible);
+  toolbar.setAttribute(hidingAttribute, !isVisible);
   document.persist(toolbar.id, hidingAttribute);
 
   PlacesToolbarHelper.init();
   BookmarksMenuButton.updatePosition();
 
 #ifdef MENUBAR_CAN_AUTOHIDE
   updateAppButtonDisplay();
 #endif
@@ -7581,20 +7530,16 @@ let gPrivateBrowsingUI = {
       docElement.setAttribute("title",
         docElement.getAttribute("title_privatebrowsing"));
       docElement.setAttribute("titlemodifier",
         docElement.getAttribute("titlemodifier_privatebrowsing"));
       docElement.setAttribute("browsingmode", "private");
       gBrowser.updateTitlebar();
     }
 
-    setTimeout(function () {
-      DownloadMonitorPanel.updateStatus();
-    }, 0);
-
     if (!aOnWindowOpen && this._disableUIOnToggle)
       document.getElementById("Tools:PrivateBrowsing")
               .setAttribute("disabled", "true");
   },
 
   onExitPrivateBrowsing: function PBUI_onExitPrivateBrowsing() {
     if (BrowserSearch.searchBar) {
       let searchBox = BrowserSearch.searchBar.textbox;
@@ -7643,20 +7588,16 @@ let gPrivateBrowsingUI = {
     document.getElementById("appmenu_privateBrowsing")
             .removeAttribute("disabled");
 #endif
     document.getElementById("Tools:PrivateBrowsing")
             .removeAttribute("disabled");
 
     gLastOpenDirectory.reset();
 
-    setTimeout(function () {
-      DownloadMonitorPanel.updateStatus();
-    }, 0);
-
     if (this._disableUIOnToggle)
       document.getElementById("Tools:PrivateBrowsing")
               .setAttribute("disabled", "true");
   },
 
   _setPBMenuTitle: function PBUI__setPBMenuTitle(aMode) {
     let pbMenuItem = document.getElementById("privateBrowsingItem");
     pbMenuItem.setAttribute("label", pbMenuItem.getAttribute(aMode + "label"));
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -721,29 +721,25 @@
               <menuitem id="appmenu_customize"
                         label="&preferencesCmd.label;"
                         class="split-menuitem-item"
                         flex="1"
                         oncommand="openPreferences();"/>
               <menu class="split-menuitem-menu"
                     label="&preferencesCmd.label;">
                 <menupopup id="appmenu_customizeMenu"
-                           onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('appmenu_toggleStatusbar'));">
+                           onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('appmenu_preferences').nextSibling.nextSibling);">
                   <menuitem id="appmenu_preferences"
 #ifdef XP_UNIX
                             label="&preferencesCmdUnix.label;"
 #else
                             label="&preferencesCmd.label;"
 #endif
                             oncommand="openPreferences();"/>
                   <menuseparator/>
-                  <menuitem id="appmenu_toggleStatusbar"
-                            type="checkbox"
-                            command="cmd_toggleTaskbar"
-                            observes="toggle_taskbar"/>
                   <menuseparator/>
                   <menuitem id="appmenu_toggleTabsOnTop"
                             label="&viewTabsOnTop.label;"
                             type="checkbox"
                             command="cmd_ToggleTabsOnTop"/>
                   <menuitem id="appmenu_toolbarLayout"
                             label="&appMenuToolbarLayout.label;"
                             command="cmd_CustomizeToolbars"/>
@@ -1291,41 +1287,26 @@
                   tabcontainer="tabbrowser-tabs"
                   contentcontextmenu="contentAreaContextMenu"
                   autocompletepopup="PopupAutoComplete"
                   onclick="return contentAreaClick(event, false);"/>
     </vbox>
   </hbox>
 
   <vbox id="browser-bottombox" layer="true">
-    <statusbar class="chromeclass-status" id="status-bar"
-#ifdef WINCE
-               hidden="true"
-#endif
-               >
-      <statusbarpanel id="statusbar-display" label="" flex="1"/>
-      <statusbarpanel id="download-monitor" class="statusbarpanel-iconic-text"
-                      tooltiptext="&downloadMonitor2.tooltip;" hidden="true"
-                      command="Tools:Downloads"/>
-      <statusbarpanel id="security-button" class="statusbarpanel-iconic"
-                      hidden="true"
-                      onclick="if (event.button == 0 &amp;&amp; event.detail == 1) displaySecurityInfo();"/>
-      <statusbarpanel id="page-report-button" type="menu"
-                      class="statusbarpanel-menu-iconic"
-                      hidden="true"
-                      tooltiptext="&pageReportIcon.tooltip;">
-        <menupopup onpopupshowing="gPopupBlockerObserver.fillPopupList(event);">
-          <menuitem observes="blockedPopupAllowSite"/>
-          <menuitem observes="blockedPopupEditSettings"/>
-          <menuitem observes="blockedPopupDontShowMessage"/>
-          <menuseparator observes="blockedPopupsSeparator"/>
-        </menupopup>
-      </statusbarpanel>
-    </statusbar>
+    <toolbar id="addon-bar" toolbarname="&addonBarCmd.label;" collapsed="true"
+             class="toolbar-primary chromeclass-toolbar"
+             context="toolbar-context-menu" toolboxid="navigator-toolbox"
+             mode="icons" iconsize="small" defaulticonsize="small"
+             lockiconsize="true"
+             customizable="true" align="right">
+      <statusbar id="status-bar"/>
+    </toolbar>
   </vbox>
+
 #ifndef XP_UNIX
   <svg:svg height="0">
     <svg:mask id="winstripe-keyhole-forward-mask" maskContentUnits="objectBoundingBox">
       <svg:rect x="0" y="0" width="1" height="1" fill="white"/>
       <svg:circle cx="-0.46" cy="0.5" r="0.63"/>
     </svg:mask>
     <svg:mask id="winstripe-keyhole-forward-mask-hover" maskContentUnits="objectBoundingBox">
       <svg:rect x="0" y="0" width="1" height="1" fill="white"/>
--- a/browser/base/content/pageReportFirstTime.xul
+++ b/browser/base/content/pageReportFirstTime.xul
@@ -51,26 +51,23 @@
         title="&caption.label;"
         onload="setTimeout(function() { window.sizeToContent(); }, 100);"
         style="width: 40em;"
         buttons="accept"
         persist="screenX screenY"
         screenX="24" screenY="24">
               
   <description>
-    &startDescription.label;
+    &startDescriptionText.label;
   </description>
 
   <separator class="thin"/>
 
   <hbox pack="center">
-    <statusbar style="width:20em">
-      <statusbarpanel flex="1" pack="left"><description>&done.label;</description></statusbarpanel>
-      <statusbarpanel class="statusbarpanel-iconic" style="min-height:18px" id="page-report-button"/>
-    </statusbar>
+    <!-- insert example here! (bug 594294) -->
   </hbox>
 
   <separator class="thin"/>
 
   <description>
     &endDescription.label;
   </description>
 
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -338,17 +338,17 @@
         <body>
         <![CDATA[
           return ({
             mTabBrowser: this,
             mTab: aTab,
             mBrowser: aBrowser,
             mBlank: aStartsBlank,
 
-            // cache flags for correct status bar update after tab switching
+            // cache flags for correct status UI update after tab switching
             mStateFlags: 0,
             mStatus: 0,
             mMessage: "",
             mTotalProgress: 0,
 
             // count of open requests (should always be 0 or 1)
             mRequestCount: 0,
 
--- a/browser/base/content/test/Makefile.in
+++ b/browser/base/content/test/Makefile.in
@@ -215,16 +215,17 @@ endif
                  browser_tabMatchesInAwesomebar.js \
                  file_bug550565_popup.html \
                  file_bug550565_favicon.ico \
                  browser_overLinkInLocationBar.js \
                  $(NULL)
 
 ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 _BROWSER_FILES += \
+    browser_addon_bar.js \
 		browser_bug462289.js \
 		$(NULL)
 else
 _BROWSER_FILES += \
 		browser_customize.js \
 		$(NULL)
 endif
 
new file mode 100644
--- /dev/null
+++ b/browser/base/content/test/browser_addon_bar.js
@@ -0,0 +1,95 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is browser add-on bar test code.
+ *
+ * The Initial Developer of the Original Code is the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Dietrich Ayala <dietrich@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+function test() {
+  waitForExplicitFinish();
+
+  let addonbar = document.getElementById("addon-bar");
+  ok(addonbar.collapsed, "addon bar is collapsed by default");
+
+  let topMenu, toolbarMenu;
+
+  function onTopMenuShown(event) {
+    ok(1, "top menu popupshown listener called");
+    event.currentTarget.removeEventListener("popupshown", arguments.callee, false);
+    // open the customize or toolbars menu
+    toolbarMenu = document.getElementById("appmenu_customizeMenu") ||
+                      document.getElementById("viewToolbarsMenu").firstElementChild;
+    toolbarMenu.addEventListener("popupshown", onToolbarMenuShown, false);
+    toolbarMenu.addEventListener("popuphidden", onToolbarMenuHidden, false);
+    toolbarMenu.openPopup();
+  }
+
+  function onTopMenuHidden(event) {
+    ok(1, "top menu popuphidden listener called");
+    event.currentTarget.removeEventListener("popuphidden", arguments.callee, false);
+    finish();
+  }
+
+  function onToolbarMenuShown(event) {
+    ok(1, "sub menu popupshown listener called");
+    event.currentTarget.removeEventListener("popupshown", arguments.callee, false);
+
+    // test the menu item's default state
+    let menuitem = document.getElementById("toggle_addon-bar");
+    ok(menuitem, "found the menu item");
+    is(menuitem.getAttribute("checked"), "false", "menuitem is not checked by default");
+
+    // click on the menu item
+    // TODO: there's got to be a way to check+command in one shot
+    menuitem.setAttribute("checked", "true");
+    menuitem.click();
+
+    // now the addon bar should be visible and the menu checked
+    is(addonbar.getAttribute("collapsed"), "false", "addon bar is visible after executing the command");
+    is(menuitem.getAttribute("checked"), "true", "menuitem is checked after executing the command");
+
+    toolbarMenu.hidePopup();
+  }
+
+  function onToolbarMenuHidden(event) {
+    ok(1, "toolbar menu popuphidden listener called");
+    event.currentTarget.removeEventListener("popuphidden", arguments.callee, false);
+    topMenu.hidePopup();
+  }
+
+  // open the appmenu or view menu
+  topMenu = document.getElementById("appmenu-popup") ||
+            document.getElementById("menu_viewPopup");
+  topMenu.addEventListener("popupshown", onTopMenuShown, false);
+  topMenu.addEventListener("popuphidden", onTopMenuHidden, false);
+  topMenu.openPopup();
+}
--- a/browser/base/content/test/browser_pageInfo.js
+++ b/browser/base/content/test/browser_pageInfo.js
@@ -1,41 +1,26 @@
 function test() {
   waitForExplicitFinish();
 
-  var pageInfo, atTest = 0;
+  var pageInfo;
   gBrowser.selectedTab = gBrowser.addTab();
   gBrowser.selectedBrowser.addEventListener("load", function () {
     gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
     pageInfo = BrowserPageInfo();
     Services.obs.addObserver(observer, "page-info-dialog-loaded", false);
   }, true);
   content.location =
     "https://example.com/browser/browser/base/content/test/feed_tab.html";
 
   function observer(win, topic, data) {
     if (topic != "page-info-dialog-loaded")
       return;
 
-    switch (atTest) {
-      case 0:
-        atTest++;
-        handlePageInfo();
-        break;
-      case 1:
-        atTest++;
-        pageInfo = win;
-        testLockClick();
-        break;
-      case 2:
-        atTest++;
-        Services.obs.removeObserver(observer, "page-info-dialog-loaded");
-        testLockDoubleClick();
-        break;
-    }
+    handlePageInfo();
   }
 
   function $(aId) { return pageInfo.document.getElementById(aId) };
 
   function handlePageInfo() {
     var feedTab = $("feedTab");
     var feedListbox = $("feedListbox");
 
@@ -48,41 +33,13 @@ function test() {
 
 
     for (var i = 0; i < feedRowsNum; i++) {
       let feedItem = feedListbox.getItemAtIndex(i);
       ok(feedItem.getAttribute("name") == (i+1), 
          "Name given: " + feedItem.getAttribute("name") + ", should be " + (i+1));
     }
 
-    pageInfo.addEventListener("unload", function() {
-      pageInfo.removeEventListener("unload", arguments.callee, false);
-      var lockIcon = document.getElementById("security-button");
-      EventUtils.synthesizeMouse(lockIcon, 0, 0, {clickCount: 1});
-    }, false);
     pageInfo.close();
-  }
-
-  function testLockClick() {
-    var deck = $("mainDeck");
-    is(deck.selectedPanel.id, "securityPanel", "The security tab should open when the lock icon is clicked");
-    pageInfo.addEventListener("unload", function() {
-      pageInfo.removeEventListener("unload", arguments.callee, false);
-      var lockIcon = document.getElementById("security-button");
-      EventUtils.synthesizeMouse(lockIcon, 0, 0, {clickCount: 1});
-      EventUtils.synthesizeMouse(lockIcon, 0, 0, {clickCount: 2});
-    }, false);
-    pageInfo.close();
-  }
-
-  function testLockDoubleClick() {
-    var pageInfoDialogs = Services.wm.getEnumerator("Browser:page-info");
-    var i = 0;
-    while (pageInfoDialogs.hasMoreElements()) {
-      i++;
-      pageInfo = pageInfoDialogs.getNext();
-      pageInfo.close();
-    }
-    is(i, 1, "When the lock is clicked twice there should be only one page info dialog");
     gBrowser.removeCurrentTab();
     finish();
   }
 }
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -45,32 +45,16 @@ var TAB_DROP_TYPE = "application/x-moz-t
 
 var gBidiUI = false;
 
 function getBrowserURL()
 {
   return "chrome://browser/content/browser.xul";
 }
 
-function goToggleToolbar( id, elementID )
-{
-  var toolbar = document.getElementById(id);
-  var element = document.getElementById(elementID);
-  if (toolbar)
-  {
-    var isHidden = toolbar.hidden;
-    toolbar.hidden = !isHidden;
-    document.persist(id, 'hidden');
-    if (element) {
-      element.setAttribute("checked", isHidden ? "true" : "false");
-      document.persist(elementID, 'checked');
-    }
-  }
-}
-
 function getTopWin()
 {
   return Services.wm.getMostRecentWindow("navigator:browser");
 }
 
 function openTopWin( url )
 {
   openUILink(url, {})
--- a/browser/components/places/content/bookmarksPanel.xul
+++ b/browser/components/places/content/bookmarksPanel.xul
@@ -45,17 +45,17 @@
 <?xul-overlay href="chrome://browser/content/places/placesOverlay.xul"?>
 
 <!DOCTYPE page SYSTEM "chrome://browser/locale/places/places.dtd">
 
 <page id="bookmarksPanel"
       xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       onload="init();"
-      onunload="SidebarUtils.clearURLFromStatusBar();">
+      onunload="SidebarUtils.setMouseoverURL('');">
 
   <script type="application/javascript" 
           src="chrome://browser/content/bookmarks/sidebarUtils.js"/>
   <script type="application/javascript" 
           src="chrome://browser/content/bookmarks/bookmarksPanel.js"/>
 
   <commandset id="placesCommands"/>
   <commandset id="editMenuCommands"/>
@@ -74,16 +74,16 @@
 
   <tree id="bookmarks-view" class="sidebar-placesTree" type="places"
         flex="1"
         hidecolumnpicker="true"
         context="placesContext"
         onkeypress="SidebarUtils.handleTreeKeyPress(event);"
         onclick="SidebarUtils.handleTreeClick(this, event, true);"
         onmousemove="SidebarUtils.handleTreeMouseMove(event);"
-        onmouseout="SidebarUtils.clearURLFromStatusBar();">
+        onmouseout="SidebarUtils.setMouseoverURL('');">
     <treecols>
       <treecol id="title" flex="1" primary="true" hideheader="true"/>
     </treecols>
     <treechildren id="bookmarks-view-children" view="bookmarks-view"
                   class="sidebar-placesTreechildren" flex="1" tooltip="bhTooltip"/>
   </tree>
 </page>
--- a/browser/components/places/content/history-panel.xul
+++ b/browser/components/places/content/history-panel.xul
@@ -53,17 +53,17 @@
 ]>
 
 <!-- we need to keep id="history-panel" for upgrade and switching
      between versions of the browser -->
 
 <page id="history-panel" orient="vertical"
       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       onload="HistorySidebarInit();"
-      onunload="SidebarUtils.clearURLFromStatusBar();">
+      onunload="SidebarUtils.setMouseoverURL('');">
 
   <script type="application/javascript" 
           src="chrome://browser/content/bookmarks/sidebarUtils.js"/>
   <script type="application/javascript" 
           src="chrome://browser/content/places/history-panel.js"/>
 
   <commandset id="editMenuCommands"/>
   <commandset id="placesCommands"/>
@@ -117,15 +117,15 @@
         class="sidebar-placesTree"
         flex="1"
         type="places"
         context="placesContext"
         hidecolumnpicker="true"
         onkeypress="SidebarUtils.handleTreeKeyPress(event);"
         onclick="SidebarUtils.handleTreeClick(this, event, true);"
         onmousemove="SidebarUtils.handleTreeMouseMove(event);"
-        onmouseout="SidebarUtils.clearURLFromStatusBar();">
+        onmouseout="SidebarUtils.setMouseoverURL('');">
     <treecols>
       <treecol id="title" flex="1" primary="true" hideheader="true"/>
     </treecols>
     <treechildren class="sidebar-placesTreechildren" flex="1" tooltip="bhTooltip"/>
   </tree>
 </page>
--- a/browser/components/places/content/sidebarUtils.js
+++ b/browser/components/places/content/sidebarUtils.js
@@ -112,26 +112,25 @@ var SidebarUtils = {
       return;
 
     var tree = aEvent.target.parentNode;
     var tbo = tree.treeBoxObject;
     var row = { }, col = { }, obj = { };
     tbo.getCellAt(aEvent.clientX, aEvent.clientY, row, col, obj);
 
     // row.value is -1 when the mouse is hovering an empty area within the tree.
-    // To avoid showing a URL from a previously hovered node,
-    // for a currently hovered non-url node, we must clear the URL from the
-    // status bar in these cases.
+    // To avoid showing a URL from a previously hovered node for a currently
+    // hovered non-url node, we must clear the moused-over URL in these cases.
     if (row.value != -1) {
-      var cell = tree.view.nodeForTreeIndex(row.value);
-      if (PlacesUtils.nodeIsURI(cell))
-        window.top.XULBrowserWindow.setOverLink(cell.uri, null);
+      var node = tree.view.nodeForTreeIndex(row.value);
+      if (PlacesUtils.nodeIsURI(node))
+        this.setMouseoverURL(node.uri);
       else
-        this.clearURLFromStatusBar();
+        this.setMouseoverURL("");
     }
     else
-      this.clearURLFromStatusBar();
+      this.setMouseoverURL("");
   },
 
-  clearURLFromStatusBar: function SU_clearURLFromStatusBar() {
-    window.top.XULBrowserWindow.setOverLink("", null);
+  setMouseoverURL: function SU_setMouseoverURL(aURL) {
+    window.top.XULBrowserWindow.setOverLink(aURL, null);
   }
 };
--- a/browser/components/preferences/advanced-scripts.xul
+++ b/browser/components/preferences/advanced-scripts.xul
@@ -52,20 +52,16 @@
 
   <prefpane id="AdvancedJSDialogPane"
             helpTopic="prefs-advanced-javascript">
 
     <preferences>
      <preference id="dom.event.contextmenu.enabled"  name="dom.event.contextmenu.enabled"  type="bool"/>
      <preference id="dom.disable_window_move_resize" name="dom.disable_window_move_resize" type="bool" inverted="true"/>
      <preference id="dom.disable_window_flip"        name="dom.disable_window_flip"        type="bool" inverted="true"/>
-     <preference id="dom.disable_window_open_feature.status" inverted="true"
-                 name="dom.disable_window_open_feature.status" type="bool"/>
-     <preference id="dom.disable_window_status_change" inverted="true"
-                 name="dom.disable_window_status_change" type="bool"/>
     </preferences>
     
     <script type="application/javascript" src="chrome://browser/content/preferences/advanced-scripts.js"/>
 
     <stringbundle id="preferencesBundle" src="chrome://browser/locale/preferences/preferences.properties"/>
 
     <description value="&allowScripts.label;"/>
 
@@ -73,17 +69,11 @@
               accesskey="&moveResizeWindows.accesskey;"
               preference="dom.disable_window_move_resize"/>
     <checkbox id="raiseLowerWindows" label="&raiseLowerWindows.label;" 
               accesskey="&raiseLowerWindows.accesskey;"
               preference="dom.disable_window_flip"/>
     <checkbox id="disableContextMenus" label="&disableContextMenus.label;" 
               accesskey="&disableContextMenus.accesskey;"
               preference="dom.event.contextmenu.enabled"/>
-    <checkbox id="hideStatusBar" label="&hideStatusBar.label;" 
-              accesskey="&hideStatusBar.accesskey;"
-              preference="dom.disable_window_open_feature.status"/>
-    <checkbox id="changeStatusBar" label="&changeStatusBar.label;" 
-              accesskey="&changeStatusBar.accesskey;"
-              preference="dom.disable_window_status_change"/>
 
   </prefpane>
 </prefwindow>
--- a/browser/components/privatebrowsing/test/browser/Makefile.in
+++ b/browser/components/privatebrowsing/test/browser/Makefile.in
@@ -44,17 +44,16 @@ relativesrcdir  = browser/components/pri
 include $(DEPTH)/config/autoconf.mk
 include $(topsrcdir)/config/rules.mk
 
 _BROWSER_TEST_FILES =  \
 		browser_console_clear.js \
 		browser_privatebrowsing_certexceptionsui.js \
 		browser_privatebrowsing_commandline_toggle.js \
 		browser_privatebrowsing_crh.js \
-		browser_privatebrowsing_downloadmonitor.js \
 		browser_privatebrowsing_fastswitch.js \
 		browser_privatebrowsing_findbar.js \
 		browser_privatebrowsing_forgetthissite.js \
 		browser_privatebrowsing_geoprompt.js \
 		browser_privatebrowsing_geoprompt_page.html \
 		browser_privatebrowsing_import.js \
 		browser_privatebrowsing_newwindow_stopcmd.js \
 		browser_privatebrowsing_opendir.js \
@@ -79,16 +78,19 @@ include $(topsrcdir)/config/rules.mk
 		browser_privatebrowsing_zoomrestore.js \
 		ctxmenu.html \
 		ctxmenu-image.png \
 		popup.html \
 		staller.sjs \
 		title.sjs \
 		$(NULL)
 
+# Disabled until bug 564934 is fixed:
+#		browser_privatebrowsing_downloadmonitor.js \
+
 # Turn off private browsing tests that perma-timeout on Linux.
 ifneq (Linux,$(OS_ARCH))
 _BROWSER_TEST_FILES += \
 		browser_privatebrowsing_beforeunload_enter.js \
 		browser_privatebrowsing_beforeunload_exit.js \
 		browser_privatebrowsing_cookieacceptdialog.js \
 		$(NULL)
 endif
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_popupblocker.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_popupblocker.js
@@ -49,43 +49,43 @@ function test() {
   const TEST_URI = "http://mochi.test:8888/browser/browser/components/privatebrowsing/test/browser/popup.html";
 
   waitForExplicitFinish();
 
   function testPopupBlockerMenuItem(expectedDisabled, callback) {
     gBrowser.addEventListener("DOMUpdatePageReport", function() {
       gBrowser.removeEventListener("DOMUpdatePageReport", arguments.callee, false);
       executeSoon(function() {
-        let pageReportButton = document.getElementById("page-report-button");
         let notification = gBrowser.getNotificationBox().getNotificationWithValue("popup-blocked");
 
-        ok(!pageReportButton.hidden, "The page report button should not be hidden");
         ok(notification, "The notification box should be displayed");
 
         function checkMenuItem(callback) {
+          dump("CMI: in\n");
           document.addEventListener("popupshown", function(event) {
+            dump("CMI: popupshown\n");
             document.removeEventListener("popupshown", arguments.callee, false);
 
             if (expectedDisabled)
               is(document.getElementById("blockedPopupAllowSite").getAttribute("disabled"), "true",
                  "The allow popups menu item should be disabled");
 
             event.originalTarget.hidePopup();
+            dump("CMI: calling back\n");
             callback();
+            dump("CMI: called back\n");
           }, false);
+          dump("CMI: out\n");
         }
 
         checkMenuItem(function() {
-          checkMenuItem(function() {
-            gBrowser.removeTab(tab);
-            callback();
-          });
-          notification.querySelector("button").doCommand();
+          gBrowser.removeTab(tab);
+          callback();
         });
-        EventUtils.synthesizeMouse(document.getElementById("page-report-button"), 1, 1, {});
+        notification.querySelector("button").doCommand();
       });
     }, false);
 
     let tab = gBrowser.addTab(TEST_URI);
     gBrowser.selectedTab = tab;
   }
 
   testPopupBlockerMenuItem(false, function() {
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -65,18 +65,18 @@ can reach it easily. -->
 
 <!ENTITY menubarCmd.label "Menu Bar">
 <!ENTITY menubarCmd.accesskey "M">
 <!ENTITY navbarCmd.label "Navigation Toolbar">
 <!ENTITY navbarCmd.accesskey "N">
 <!ENTITY personalbarCmd.label "Bookmarks Toolbar">
 <!ENTITY personalbarCmd.accesskey "B">
 <!ENTITY bookmarksToolbarItem.label "Bookmarks Toolbar Items">
-<!ENTITY taskbarCmd.label "Status Bar">
-<!ENTITY taskbarCmd.accesskey "B">
+<!ENTITY addonBarCmd.label "Add-on Bar">
+<!ENTITY addonBarCmd.accesskey "B">
 
 <!ENTITY pageSourceCmd.label "Page Source">
 <!ENTITY pageSourceCmd.accesskey "o">
 <!ENTITY pageSourceCmd.commandkey "u">
 <!ENTITY pageInfoCmd.label "Page Info">
 <!ENTITY pageInfoCmd.accesskey "I">
 <!ENTITY pageInfoCmd.commandkey "i">
 <!ENTITY fullScreenCmd.label "Full Screen">
--- a/browser/locales/en-US/chrome/browser/browser.properties
+++ b/browser/locales/en-US/chrome/browser/browser.properties
@@ -83,17 +83,16 @@ popupWarning=%S prevented this site from
 popupWarningMultiple=%S prevented this site from opening %S pop-up windows.
 popupWarningButton=Options
 popupWarningButton.accesskey=O
 popupWarningButtonUnix=Preferences
 popupWarningButtonUnix.accesskey=P
 popupAllow=Allow pop-ups for %S
 popupBlock=Block pop-ups for %S
 popupWarningDontShowFromMessage=Don't show this message when pop-ups are blocked
-popupWarningDontShowFromStatusbar=Don't show info message when pop-ups are blocked
 popupShowPopupPrefix=Show '%S'
 
 # missing plugin installer
 missingpluginsMessage.title=Additional plugins are required to display all the media on this page.
 missingpluginsMessage.button.label=Install Missing Plugins…
 missingpluginsMessage.button.accesskey=I
 outdatedpluginsMessage.title=Some plugins used by this page are out of date.
 outdatedpluginsMessage.updateButton.label=Update Plugins…
--- a/browser/locales/en-US/chrome/browser/pageReportFirstTime.dtd
+++ b/browser/locales/en-US/chrome/browser/pageReportFirstTime.dtd
@@ -1,7 +1,7 @@
-<!ENTITY startDescription.label            "A web site has attempted to open a pop-up window without your permission. &brandShortName; has automatically closed the pop-up window.  Whenever &brandShortName; blocks these pop-ups, you will see an icon on the status bar.">
+<!ENTITY startDescriptionText.label        "A web site has attempted to open a pop-up window without your permission. &brandShortName; has automatically closed the pop-up window.">
 
 <!ENTITY endDescription.label              "You can click on this icon to see which sites &brandShortName; blocked and to allow those sites to open pop-ups if they are required for the site to function correctly.">
 
 <!ENTITY caption.label                     "About Pop-up Blocking">
 
 <!ENTITY done.label "Done">
--- a/browser/locales/en-US/chrome/browser/preferences/advanced-scripts.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/advanced-scripts.dtd
@@ -41,12 +41,8 @@
 <!ENTITY allowScripts.label             "Allow scripts to:">
 
 <!ENTITY moveResizeWindows.label        "Move or resize existing windows">
 <!ENTITY moveResizeWindows.accesskey    "M">
 <!ENTITY raiseLowerWindows.label        "Raise or lower windows">
 <!ENTITY raiseLowerWindows.accesskey    "R">
 <!ENTITY disableContextMenus.label      "Disable or replace context menus">
 <!ENTITY disableContextMenus.accesskey  "D">
-<!ENTITY hideStatusBar.label            "Hide the status bar">
-<!ENTITY hideStatusBar.accesskey        "H">
-<!ENTITY changeStatusBar.label          "Change status bar text">
-<!ENTITY changeStatusBar.accesskey      "C">
--- a/browser/locales/en-US/feedback/main.dtd
+++ b/browser/locales/en-US/feedback/main.dtd
@@ -1,10 +1,9 @@
 <!ENTITY testpilot.brand.label                      "Test Pilot">
-<!-- browser window: menu and status bar -->
 <!ENTITY testpilot.settings.label                   "Settings">
 <!ENTITY testpilot.settings.dataSubmission.label    "Data Submission">
 <!ENTITY testpilot.settings.notifications.label     "Notifications">
 <!ENTITY testpilot.settings.notifyWhen.label        "Notify me when…">
 <!ENTITY testpilot.settings.readyToSubmit.label     "A study is ready to submit">
 <!ENTITY testpilot.settings.newStudy.label          "There's a new study">
 <!ENTITY testpilot.settings.hasNewResults.label     "A study has new results">
 <!ENTITY testpilot.settings.alwaysSubmitData.label  "Automatically submit my data (don't ask me)">
--- a/browser/themes/gnomestripe/browser/browser.css
+++ b/browser/themes/gnomestripe/browser/browser.css
@@ -1384,38 +1384,16 @@ richlistitem[type~="action"][actiontype=
   min-width: 27em;
 }
 
 /* Content area */
 #sidebar {
   background-color: Window;
 }
 
-#status-bar {
-  border-top: none;
-}
-
-statusbarpanel#statusbar-display {
-  -moz-padding-start: 0;
-}
-
-#security-button[level="high"],
-#security-button[level="low"] {
-  list-style-image: url("chrome://browser/skin/Secure.png");
-}
-
-#security-button[level="broken"] {
-  list-style-image: url("chrome://browser/skin/Security-broken.png");
-}
-
-#page-report-button {
-  list-style-image: url("chrome://browser/skin/Info.png");
-  width: 20px;
-}
-
 /* Throbber */
 #navigator-throbber {
   width: 16px;
   min-height: 16px;
   margin: 0 3px;
 }
 
 #navigator-throbber[busy="true"] {
@@ -1672,21 +1650,16 @@ toolbarbutton.chevron > .toolbarbutton-m
 toolbarbutton.chevron > .toolbarbutton-icon {
   margin: 0;
 }
 
 toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
   display: -moz-box; /* display chevron icon in text mode */
 }
 
-/* Popup blocking dialog */
-#pageReportFirstTime statusbarpanel.statusbar-resizerpanel {
-  visibility: collapse;
-}
-
 #download-monitor {
   list-style-image: url("chrome://browser/skin/Toolbar-small.png");
   -moz-image-region: rect(0px 16px 16px 0px);
 }
 
 
 /* ::::: Keyboard UI Panel ::::: */
 
@@ -1779,8 +1752,27 @@ listitem.style-section {
   background-color: LightGray;
   color: black;
   font-weight: bold;
 }
 
 panel[dimmed="true"] {
   opacity: 0.5;
 }
+
+/* Remove the resizer from the statusbar compatibility shim */
+#status-bar .statusbar-resizerpanel {
+  display: none;
+}
+
+/* Vertically-center the statusbar compatibility shim, because
+   toolbars, even in small-icon mode, are a bit taller than 
+   statusbars. */
+#status-bar {
+  margin-top: .3em;
+}
+
+/* Remove all borders from statusbarpanel children of
+   the statusbar. */
+#status-bar > statusbarpanel {
+  border-width: 0;
+  -moz-appearance: none;
+}
--- a/browser/themes/pinstripe/browser/browser.css
+++ b/browser/themes/pinstripe/browser/browser.css
@@ -872,25 +872,16 @@ toolbar[mode="icons"] #zoom-in-button {
   -moz-margin-end: 3px;
 }
 
 #PopupAutoCompleteRichResult {
   direction: ltr !important;
   margin-top: 2px;
 }
 
-statusbarpanel#statusbar-display {
-  -moz-padding-start: 0;
-}
-
-.statusbarpanel-text {
-  margin-top: 2px;
-  margin-bottom: 0;
-}
-
 /* over-link in location bar */
 
 .urlbar-origin-label {
   padding: 0 0 0 1px;
   margin: 0;
 }
 
 .urlbar-origin-label:-moz-locale-dir(rtl) {
@@ -1502,34 +1493,16 @@ sidebarheader {
   list-style-image: url("chrome://global/skin/icons/loading_16.png");
 }
 
 sidebarheader > .tabs-closebutton > .toolbarbutton-text {
   display: none;
 }
 
 
-/* ----- SECURITY DISPLAY ----- */
-
-#security-button[level="high"] ,
-#security-button[level="low"] {
-  list-style-image: url("chrome://browser/skin/Secure-statusbar.png");
-}
-
-#security-button[level="broken"] {
-  list-style-image: url("chrome://browser/skin/Secure-statusbar-broken.png");
-}
-
-/* ----- PAGE REPORT DISPLAY ----- */
-
-#page-report-button {
-  list-style-image: url("chrome://browser/skin/Popup-blocked.png");
-  padding: 0px 3px 0px 3px;
-}
-
 /* ----- THROBBER ----- */
 
 #navigator-throbber {
   width: 17px;
   min-height: 16px;
   margin: 0 4px;
 }
 
@@ -2280,8 +2253,30 @@ listitem.style-section {
   background-color: LightGray;
   color: black;
   font-weight: bold;
 }
 
 panel[dimmed="true"] {
   opacity: 0.5;
 }
+
+/* Remove the resizer from the statusbar compatibility shim */
+#status-bar .statusbar-resizerpanel {
+  display: none;
+}
+
+/* Vertically-center the statusbar compatibility shim, because
+   toolbars, even in small-icon mode, are a bit taller than
+   statusbars. Also turn off the statusbar border. On Windows
+   we have to disable borders on statusbar *and* child statusbar
+   elements. */
+#status-bar {
+  margin-top: 0.3em;
+  -moz-appearance: none;
+}
+
+/* Remove all borders from statusbarpanel children of
+   the statusbar. */
+#status-bar > statusbarpanel {
+  border-width: 0;
+  -moz-appearance: none;
+}
--- a/browser/themes/winstripe/browser/browser.css
+++ b/browser/themes/winstripe/browser/browser.css
@@ -102,20 +102,16 @@
 #personal-bookmarks {
   min-height: 24px;
 }
 
 #print-preview-toolbar:not(:-moz-lwtheme) {
   -moz-appearance: toolbox;
 }
 
-statusbarpanel#statusbar-display {
-  -moz-padding-start: 0;
-}
-
 /* ::::: app menu button ::::: */
 
 #appmenu-button {
   -moz-appearance: none;
   background: -moz-linear-gradient(rgb(247,182,82), rgb(215,98,10) 95%);
   background-clip: padding-box;
   border-radius: 0 0 4px 4px;
   border: 1px solid rgba(83,42,6,.9);
@@ -1451,34 +1447,16 @@ richlistitem[type~="action"][actiontype=
 #sidebar {
   background-color: Window;
 }
 
 #sidebar-title {
   -moz-padding-start: 0px;
 }
 
-#status-bar {
-  border-top: none;
-}
-
-#security-button[level="high"],
-#security-button[level="low"] {
-  list-style-image: url("chrome://browser/skin/Secure.png");
-}
-
-#security-button[level="broken"] {
-  list-style-image: url("chrome://browser/skin/Security-broken.png");
-}
-
-#page-report-button {
-  width: 20px;
-  list-style-image: url("chrome://browser/skin/Info.png");
-}
-
 /* ::::: throbber ::::: */
 
 #navigator-throbber {
   width: 16px;
   min-height: 16px;
   margin: 0 3px;
 }
 
@@ -1805,21 +1783,16 @@ toolbar[mode="text"] toolbarbutton.chevr
   display: -moz-box; /* display chevron icon in text mode */
 }
 
 #sidebar-throbber[loading="true"] {
   list-style-image: url("chrome://global/skin/icons/loading_16.png");
   -moz-margin-end: 4px;
 }
 
-/* ::::: About Popup Blocking dialog ::::: */
-#pageReportFirstTime statusbarpanel.statusbar-resizerpanel {
-  visibility: collapse;
-}
-
 /* Bookmarks toolbar */
 #PlacesToolbarDropIndicator {
   list-style-image: url(chrome://browser/skin/places/toolbarDropMarker.png);
 }
 
 toolbarbutton.bookmark-item[dragover="true"][open="true"] {
   -moz-appearance: none;
   background: Highlight !important;
@@ -2181,8 +2154,31 @@ listitem.style-section {
   background-color: LightGray;
   color: black;
   font-weight: bold;
 }
 
 panel[dimmed="true"] {
   opacity: 0.5;
 }
+
+/* Remove the resizer from the statusbar compatibility shim */
+#status-bar .statusbar-resizerpanel {
+  display: none;
+}
+
+/* Vertically-center the statusbar compatibility shim, because
+   toolbars, even in small-icon mode, are a bit taller than
+   statusbars. Also turn off the statusbar border. On Windows
+   we have to disable borders on statusbar *and* child statusbar
+   elements. */
+#status-bar {
+  margin-top: .3em;
+  border-width: 0;
+  -moz-appearance: none;
+}
+
+/* Remove all borders from statusbarpanel children of
+   the statusbar. */
+#status-bar > statusbarpanel {
+  border-width: 0;
+  -moz-appearance: none;
+}