Merge.
authorDoug Turner <dougt@dougt.org>
Tue, 15 Nov 2011 01:09:26 -0800
changeset 81821 97283e503e1e4efa75d34234ab1dfaca9e496624
parent 81820 e2cfd16ab416aec39b252909d030d8bec0f28adf (current diff)
parent 80242 9ae1d4f44b8bed83024c14403d468fa45efc7fd5 (diff)
child 81822 68edbb64aaee95e4205758ac7a1bd6458eb7477f
push id373
push usertim.taubert@gmx.de
push dateWed, 07 Dec 2011 08:25:11 +0000
treeherderfx-team@658fad825c36 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone11.0a1
Merge.
browser/components/sessionstore/test/browser/browser_476161.js
browser/components/sessionstore/test/browser/browser_476161_sample.html
browser/themes/gnomestripe/browser/Geolocation-16.png
browser/themes/gnomestripe/browser/Geolocation-64.png
browser/themes/gnomestripe/browser/Go-arrow.png
browser/themes/gnomestripe/browser/Info.png
browser/themes/gnomestripe/browser/KUI-close.png
browser/themes/gnomestripe/browser/Makefile.in
browser/themes/gnomestripe/browser/Privacy-16.png
browser/themes/gnomestripe/browser/Privacy-32.png
browser/themes/gnomestripe/browser/Privacy-48.png
browser/themes/gnomestripe/browser/Privacy-64.png
browser/themes/gnomestripe/browser/Secure.png
browser/themes/gnomestripe/browser/Security-broken.png
browser/themes/gnomestripe/browser/Toolbar-small.png
browser/themes/gnomestripe/browser/Toolbar.png
browser/themes/gnomestripe/browser/aboutCertError.css
browser/themes/gnomestripe/browser/aboutPrivateBrowsing.css
browser/themes/gnomestripe/browser/aboutSessionRestore-window-icon.png
browser/themes/gnomestripe/browser/aboutSessionRestore.css
browser/themes/gnomestripe/browser/aboutSyncTabs.css
browser/themes/gnomestripe/browser/actionicon-tab.png
browser/themes/gnomestripe/browser/browser.css
browser/themes/gnomestripe/browser/devtools/arrows.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-end-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-end-selected.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-end.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-middle-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-middle-selected-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-middle-selected.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-middle.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-start-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-start-selected-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-start-selected.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-start.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-end-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-end-selected-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-end-selected.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-end.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-middle-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-middle-selected-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-middle-selected.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-middle.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-start-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-start-selected.png
browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-start.png
browser/themes/gnomestripe/browser/devtools/csshtmltree.css
browser/themes/gnomestripe/browser/devtools/gcli.css
browser/themes/gnomestripe/browser/devtools/goto-mdn.png
browser/themes/gnomestripe/browser/engineManager.css
browser/themes/gnomestripe/browser/feeds/audioFeedIcon.png
browser/themes/gnomestripe/browser/feeds/audioFeedIcon16.png
browser/themes/gnomestripe/browser/feeds/feedIcon.png
browser/themes/gnomestripe/browser/feeds/feedIcon16.png
browser/themes/gnomestripe/browser/feeds/subscribe-ui.css
browser/themes/gnomestripe/browser/feeds/subscribe.css
browser/themes/gnomestripe/browser/feeds/videoFeedIcon.png
browser/themes/gnomestripe/browser/feeds/videoFeedIcon16.png
browser/themes/gnomestripe/browser/fullscreen-video.css
browser/themes/gnomestripe/browser/icon.png
browser/themes/gnomestripe/browser/identity.png
browser/themes/gnomestripe/browser/inspector.css
browser/themes/gnomestripe/browser/jar.mn
browser/themes/gnomestripe/browser/monitor.png
browser/themes/gnomestripe/browser/monitor_16-10.png
browser/themes/gnomestripe/browser/page-livemarks.png
browser/themes/gnomestripe/browser/pageInfo.css
browser/themes/gnomestripe/browser/pageInfo.png
browser/themes/gnomestripe/browser/places/bookmarksMenu.png
browser/themes/gnomestripe/browser/places/bookmarksToolbar.png
browser/themes/gnomestripe/browser/places/calendar.png
browser/themes/gnomestripe/browser/places/downloads.png
browser/themes/gnomestripe/browser/places/editBookmarkOverlay.css
browser/themes/gnomestripe/browser/places/livemark-item.png
browser/themes/gnomestripe/browser/places/organizer.css
browser/themes/gnomestripe/browser/places/organizer.xml
browser/themes/gnomestripe/browser/places/pageStarred.png
browser/themes/gnomestripe/browser/places/places.css
browser/themes/gnomestripe/browser/places/query.png
browser/themes/gnomestripe/browser/places/searching_16.png
browser/themes/gnomestripe/browser/places/starPage.png
browser/themes/gnomestripe/browser/places/starred48.png
browser/themes/gnomestripe/browser/places/tag.png
browser/themes/gnomestripe/browser/places/toolbarDropMarker.png
browser/themes/gnomestripe/browser/places/unsortedBookmarks.png
browser/themes/gnomestripe/browser/places/unstarred48.png
browser/themes/gnomestripe/browser/preferences/Options-sync.png
browser/themes/gnomestripe/browser/preferences/Options.png
browser/themes/gnomestripe/browser/preferences/aboutPermissions.css
browser/themes/gnomestripe/browser/preferences/alwaysAsk.png
browser/themes/gnomestripe/browser/preferences/applications.css
browser/themes/gnomestripe/browser/preferences/mail.png
browser/themes/gnomestripe/browser/preferences/preferences.css
browser/themes/gnomestripe/browser/preview.png
browser/themes/gnomestripe/browser/sanitizeDialog.css
browser/themes/gnomestripe/browser/searchbar.css
browser/themes/gnomestripe/browser/section_collapsed-rtl.png
browser/themes/gnomestripe/browser/section_collapsed.png
browser/themes/gnomestripe/browser/section_expanded.png
browser/themes/gnomestripe/browser/setDesktopBackground.css
browser/themes/gnomestripe/browser/sync-128.png
browser/themes/gnomestripe/browser/sync-16-throbber.png
browser/themes/gnomestripe/browser/sync-16.png
browser/themes/gnomestripe/browser/sync-24-throbber.png
browser/themes/gnomestripe/browser/sync-32.png
browser/themes/gnomestripe/browser/sync-bg.png
browser/themes/gnomestripe/browser/sync-desktopIcon.png
browser/themes/gnomestripe/browser/sync-mobileIcon.png
browser/themes/gnomestripe/browser/sync-notification-24.png
browser/themes/gnomestripe/browser/syncCommon.css
browser/themes/gnomestripe/browser/syncProgress.css
browser/themes/gnomestripe/browser/syncQuota.css
browser/themes/gnomestripe/browser/syncSetup.css
browser/themes/gnomestripe/browser/tabbrowser/alltabs.png
browser/themes/gnomestripe/browser/tabbrowser/connecting.png
browser/themes/gnomestripe/browser/tabbrowser/loading.png
browser/themes/gnomestripe/browser/tabbrowser/tab-overflow-border.png
browser/themes/gnomestripe/browser/tabbrowser/tab.png
browser/themes/gnomestripe/browser/tabbrowser/tabDragIndicator.png
browser/themes/gnomestripe/browser/tabview/edit-light.png
browser/themes/gnomestripe/browser/tabview/search.png
browser/themes/gnomestripe/browser/tabview/stack-expander.png
browser/themes/gnomestripe/browser/tabview/tabview.css
browser/themes/gnomestripe/browser/tabview/tabview.png
browser/themes/gnomestripe/browser/urlbar-arrow.png
browser/themes/pinstripe/browser/Geolocation-16.png
browser/themes/pinstripe/browser/Geolocation-64.png
browser/themes/pinstripe/browser/Info.png
browser/themes/pinstripe/browser/KUI-background.png
browser/themes/pinstripe/browser/KUI-close.png
browser/themes/pinstripe/browser/Makefile.in
browser/themes/pinstripe/browser/Privacy-16.png
browser/themes/pinstripe/browser/Privacy-32.png
browser/themes/pinstripe/browser/Privacy-48.png
browser/themes/pinstripe/browser/Privacy-64.png
browser/themes/pinstripe/browser/Search.png
browser/themes/pinstripe/browser/Secure-Glyph-White.png
browser/themes/pinstripe/browser/Toolbar-lion.png
browser/themes/pinstripe/browser/Toolbar.png
browser/themes/pinstripe/browser/aboutCertError.css
browser/themes/pinstripe/browser/aboutPrivateBrowsing.css
browser/themes/pinstripe/browser/aboutSessionRestore-window-icon.png
browser/themes/pinstripe/browser/aboutSessionRestore.css
browser/themes/pinstripe/browser/aboutSyncTabs.css
browser/themes/pinstripe/browser/actionicon-tab.png
browser/themes/pinstripe/browser/browser.css
browser/themes/pinstripe/browser/devtools/arrows.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-end-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-end-selected.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-end.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-middle-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-middle-selected-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-middle-selected.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-middle.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-start-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-start-selected-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-start-selected.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-start.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-end-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-end-selected-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-end-selected.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-end.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-middle-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-middle-selected-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-middle-selected.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-middle.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-start-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-start-selected.png
browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-start.png
browser/themes/pinstripe/browser/devtools/csshtmltree.css
browser/themes/pinstripe/browser/devtools/gcli.css
browser/themes/pinstripe/browser/devtools/goto-mdn.png
browser/themes/pinstripe/browser/devtools/toolbarbutton-close.png
browser/themes/pinstripe/browser/engineManager.css
browser/themes/pinstripe/browser/feeds/audioFeedIcon.png
browser/themes/pinstripe/browser/feeds/audioFeedIcon16.png
browser/themes/pinstripe/browser/feeds/feedIcon.png
browser/themes/pinstripe/browser/feeds/feedIcon16.png
browser/themes/pinstripe/browser/feeds/subscribe-ui.css
browser/themes/pinstripe/browser/feeds/subscribe.css
browser/themes/pinstripe/browser/feeds/videoFeedIcon.png
browser/themes/pinstripe/browser/feeds/videoFeedIcon16.png
browser/themes/pinstripe/browser/fullscreen-video.css
browser/themes/pinstripe/browser/home.png
browser/themes/pinstripe/browser/hud-style-check-box-checked.png
browser/themes/pinstripe/browser/hud-style-check-box-empty.png
browser/themes/pinstripe/browser/hud-style-dropmarker-double-arrows.png
browser/themes/pinstripe/browser/hud-style-expander-closed.png
browser/themes/pinstripe/browser/hud-style-expander-open.png
browser/themes/pinstripe/browser/hud-style-new-folder-plus-sign.png
browser/themes/pinstripe/browser/hud-style-twisties.png
browser/themes/pinstripe/browser/icon.png
browser/themes/pinstripe/browser/identity.png
browser/themes/pinstripe/browser/inspector.css
browser/themes/pinstripe/browser/jar.mn
browser/themes/pinstripe/browser/keyhole-circle-lion.png
browser/themes/pinstripe/browser/keyhole-circle.png
browser/themes/pinstripe/browser/livemark-item.png
browser/themes/pinstripe/browser/menu-back.png
browser/themes/pinstripe/browser/menu-forward.png
browser/themes/pinstripe/browser/monitor.png
browser/themes/pinstripe/browser/monitor_16-10.png
browser/themes/pinstripe/browser/page-livemarks.png
browser/themes/pinstripe/browser/pageInfo.css
browser/themes/pinstripe/browser/places/allBookmarks.png
browser/themes/pinstripe/browser/places/bookmarksMenu.png
browser/themes/pinstripe/browser/places/bookmarksToolbar.png
browser/themes/pinstripe/browser/places/downloads.png
browser/themes/pinstripe/browser/places/editBookmarkOverlay.css
browser/themes/pinstripe/browser/places/expander-closed-active.png
browser/themes/pinstripe/browser/places/expander-closed.png
browser/themes/pinstripe/browser/places/expander-open-active.png
browser/themes/pinstripe/browser/places/expander-open.png
browser/themes/pinstripe/browser/places/folderDropArrow.png
browser/themes/pinstripe/browser/places/history.png
browser/themes/pinstripe/browser/places/minus-active.png
browser/themes/pinstripe/browser/places/minus.png
browser/themes/pinstripe/browser/places/organizer.css
browser/themes/pinstripe/browser/places/places.css
browser/themes/pinstripe/browser/places/plus-active.png
browser/themes/pinstripe/browser/places/plus.png
browser/themes/pinstripe/browser/places/query.png
browser/themes/pinstripe/browser/places/searching_16.png
browser/themes/pinstripe/browser/places/star-icons.png
browser/themes/pinstripe/browser/places/starPage.png
browser/themes/pinstripe/browser/places/starred48.png
browser/themes/pinstripe/browser/places/tag.png
browser/themes/pinstripe/browser/places/toolbar-lion.png
browser/themes/pinstripe/browser/places/toolbar.png
browser/themes/pinstripe/browser/places/toolbarDropMarker.png
browser/themes/pinstripe/browser/places/twisty-closed.gif
browser/themes/pinstripe/browser/places/twisty-open.gif
browser/themes/pinstripe/browser/places/unfiledBookmarks.png
browser/themes/pinstripe/browser/places/unstarred48.png
browser/themes/pinstripe/browser/preferences/Options-sync.png
browser/themes/pinstripe/browser/preferences/Options.png
browser/themes/pinstripe/browser/preferences/aboutPermissions.css
browser/themes/pinstripe/browser/preferences/alwaysAsk.png
browser/themes/pinstripe/browser/preferences/application.png
browser/themes/pinstripe/browser/preferences/applications.css
browser/themes/pinstripe/browser/preferences/preferences.css
browser/themes/pinstripe/browser/preferences/saveFile.png
browser/themes/pinstripe/browser/preview.png
browser/themes/pinstripe/browser/reload-stop-go.png
browser/themes/pinstripe/browser/sanitizeDialog.css
browser/themes/pinstripe/browser/searchbar-dropmarker.png
browser/themes/pinstripe/browser/searchbar.css
browser/themes/pinstripe/browser/section_collapsed-rtl.png
browser/themes/pinstripe/browser/section_collapsed.png
browser/themes/pinstripe/browser/section_expanded.png
browser/themes/pinstripe/browser/setDesktopBackground.css
browser/themes/pinstripe/browser/shared.inc
browser/themes/pinstripe/browser/sync-128.png
browser/themes/pinstripe/browser/sync-16.png
browser/themes/pinstripe/browser/sync-32.png
browser/themes/pinstripe/browser/sync-bg.png
browser/themes/pinstripe/browser/sync-desktopIcon.png
browser/themes/pinstripe/browser/sync-mobileIcon.png
browser/themes/pinstripe/browser/sync-notification-24.png
browser/themes/pinstripe/browser/sync-throbber.png
browser/themes/pinstripe/browser/syncCommon.css
browser/themes/pinstripe/browser/syncProgress.css
browser/themes/pinstripe/browser/syncQuota.css
browser/themes/pinstripe/browser/syncSetup.css
browser/themes/pinstripe/browser/tabbrowser/alltabs-box-bkgnd-icon-lion.png
browser/themes/pinstripe/browser/tabbrowser/alltabs-box-bkgnd-icon.png
browser/themes/pinstripe/browser/tabbrowser/connecting.png
browser/themes/pinstripe/browser/tabbrowser/loading.png
browser/themes/pinstripe/browser/tabbrowser/newtab.png
browser/themes/pinstripe/browser/tabbrowser/tab-arrow-left.png
browser/themes/pinstripe/browser/tabbrowser/tab-arrow-right.png
browser/themes/pinstripe/browser/tabbrowser/tab-bottom-hover-active.png
browser/themes/pinstripe/browser/tabbrowser/tab-bottom-normal-active.png
browser/themes/pinstripe/browser/tabbrowser/tab-bottom-selected-active.png
browser/themes/pinstripe/browser/tabbrowser/tab-overflow-border.png
browser/themes/pinstripe/browser/tabbrowser/tab-top-hover-active.png
browser/themes/pinstripe/browser/tabbrowser/tab-top-normal-active.png
browser/themes/pinstripe/browser/tabbrowser/tab-top-selected-active.png
browser/themes/pinstripe/browser/tabbrowser/tabDragIndicator.png
browser/themes/pinstripe/browser/tabbrowser/tabbar-bottom-bg-active.png
browser/themes/pinstripe/browser/tabbrowser/tabbar-bottom-bg-inactive.png
browser/themes/pinstripe/browser/tabbrowser/tabbar-top-bg-active.png
browser/themes/pinstripe/browser/tabbrowser/tabbar-top-bg-inactive.png
browser/themes/pinstripe/browser/tabview/close.png
browser/themes/pinstripe/browser/tabview/edit-light.png
browser/themes/pinstripe/browser/tabview/search.png
browser/themes/pinstripe/browser/tabview/stack-expander.png
browser/themes/pinstripe/browser/tabview/tabview-lion.png
browser/themes/pinstripe/browser/tabview/tabview.css
browser/themes/pinstripe/browser/tabview/tabview.png
browser/themes/pinstripe/browser/toolbarbutton-dropmarker-lion.png
browser/themes/pinstripe/browser/toolbarbutton-dropmarker.png
browser/themes/pinstripe/browser/urlbar-arrow.png
browser/themes/pinstripe/browser/urlbar-history-dropmarker.png
browser/themes/pinstripe/browser/urlbar-popup-blocked.png
browser/themes/winstripe/browser/Geolocation-16.png
browser/themes/winstripe/browser/Geolocation-64.png
browser/themes/winstripe/browser/Info-aero.png
browser/themes/winstripe/browser/Info.png
browser/themes/winstripe/browser/KUI-background.png
browser/themes/winstripe/browser/KUI-close.png
browser/themes/winstripe/browser/Makefile.in
browser/themes/winstripe/browser/Privacy-16-aero.png
browser/themes/winstripe/browser/Privacy-16.png
browser/themes/winstripe/browser/Privacy-32-aero.png
browser/themes/winstripe/browser/Privacy-32.png
browser/themes/winstripe/browser/Privacy-48-aero.png
browser/themes/winstripe/browser/Privacy-48.png
browser/themes/winstripe/browser/Privacy-64-aero.png
browser/themes/winstripe/browser/Privacy-64.png
browser/themes/winstripe/browser/Secure24-aero.png
browser/themes/winstripe/browser/Secure24.png
browser/themes/winstripe/browser/Toolbar-inverted.png
browser/themes/winstripe/browser/Toolbar.png
browser/themes/winstripe/browser/aboutCertError.css
browser/themes/winstripe/browser/aboutPrivateBrowsing.css
browser/themes/winstripe/browser/aboutSessionRestore-window-icon-aero.png
browser/themes/winstripe/browser/aboutSessionRestore-window-icon.png
browser/themes/winstripe/browser/aboutSessionRestore.css
browser/themes/winstripe/browser/aboutSyncTabs.css
browser/themes/winstripe/browser/actionicon-tab.png
browser/themes/winstripe/browser/appmenu-dropmarker.png
browser/themes/winstripe/browser/appmenu-icons.png
browser/themes/winstripe/browser/browser-aero.css
browser/themes/winstripe/browser/browser.css
browser/themes/winstripe/browser/devtools/arrows.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-end-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-end-selected.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-end.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-middle-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-middle-selected-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-middle-selected.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-middle.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-start-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-start-selected-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-start-selected.png
browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-start.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-end-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-end-selected-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-end-selected.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-end.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-middle-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-middle-selected-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-middle-selected.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-middle.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-start-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-start-selected.png
browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-start.png
browser/themes/winstripe/browser/devtools/csshtmltree.css
browser/themes/winstripe/browser/devtools/gcli.css
browser/themes/winstripe/browser/devtools/goto-mdn.png
browser/themes/winstripe/browser/devtools/toolbarbutton-close.png
browser/themes/winstripe/browser/engineManager.css
browser/themes/winstripe/browser/feeds/audioFeedIcon-aero.png
browser/themes/winstripe/browser/feeds/audioFeedIcon.png
browser/themes/winstripe/browser/feeds/audioFeedIcon16-aero.png
browser/themes/winstripe/browser/feeds/audioFeedIcon16.png
browser/themes/winstripe/browser/feeds/feedIcon-aero.png
browser/themes/winstripe/browser/feeds/feedIcon.png
browser/themes/winstripe/browser/feeds/feedIcon16-aero.png
browser/themes/winstripe/browser/feeds/feedIcon16.png
browser/themes/winstripe/browser/feeds/subscribe-ui.css
browser/themes/winstripe/browser/feeds/subscribe.css
browser/themes/winstripe/browser/feeds/videoFeedIcon-aero.png
browser/themes/winstripe/browser/feeds/videoFeedIcon.png
browser/themes/winstripe/browser/feeds/videoFeedIcon16-aero.png
browser/themes/winstripe/browser/feeds/videoFeedIcon16.png
browser/themes/winstripe/browser/fullscreen-video.css
browser/themes/winstripe/browser/icon-aero.png
browser/themes/winstripe/browser/icon.png
browser/themes/winstripe/browser/identity-aero.png
browser/themes/winstripe/browser/identity.png
browser/themes/winstripe/browser/inspector.css
browser/themes/winstripe/browser/jar.mn
browser/themes/winstripe/browser/keyhole-forward-mask.svg
browser/themes/winstripe/browser/livemark-folder-aero.png
browser/themes/winstripe/browser/livemark-folder.png
browser/themes/winstripe/browser/livemark-item-aero.png
browser/themes/winstripe/browser/livemark-item.png
browser/themes/winstripe/browser/mainwindow-dropdown-arrow-aero.png
browser/themes/winstripe/browser/mainwindow-dropdown-arrow-inverted.png
browser/themes/winstripe/browser/mainwindow-dropdown-arrow.png
browser/themes/winstripe/browser/menu-back-aero.png
browser/themes/winstripe/browser/menu-back.png
browser/themes/winstripe/browser/menu-forward-aero.png
browser/themes/winstripe/browser/menu-forward.png
browser/themes/winstripe/browser/monitor.png
browser/themes/winstripe/browser/monitor_16-10.png
browser/themes/winstripe/browser/pageInfo-aero.png
browser/themes/winstripe/browser/pageInfo.css
browser/themes/winstripe/browser/pageInfo.png
browser/themes/winstripe/browser/places/allBookmarks-aero.png
browser/themes/winstripe/browser/places/allBookmarks.png
browser/themes/winstripe/browser/places/bookmark.png
browser/themes/winstripe/browser/places/bookmarksMenu-aero.png
browser/themes/winstripe/browser/places/bookmarksMenu.png
browser/themes/winstripe/browser/places/bookmarksToolbar-aero.png
browser/themes/winstripe/browser/places/bookmarksToolbar.png
browser/themes/winstripe/browser/places/calendar-aero.png
browser/themes/winstripe/browser/places/calendar.png
browser/themes/winstripe/browser/places/downloads.png
browser/themes/winstripe/browser/places/editBookmark.png
browser/themes/winstripe/browser/places/editBookmarkOverlay.css
browser/themes/winstripe/browser/places/history-aero.png
browser/themes/winstripe/browser/places/history.png
browser/themes/winstripe/browser/places/libraryToolbar-aero.png
browser/themes/winstripe/browser/places/libraryToolbar.png
browser/themes/winstripe/browser/places/organizer-aero.css
browser/themes/winstripe/browser/places/organizer.css
browser/themes/winstripe/browser/places/places-aero.css
browser/themes/winstripe/browser/places/places.css
browser/themes/winstripe/browser/places/query-aero.png
browser/themes/winstripe/browser/places/query.png
browser/themes/winstripe/browser/places/searching_16-aero.png
browser/themes/winstripe/browser/places/searching_16.png
browser/themes/winstripe/browser/places/starred48-aero.png
browser/themes/winstripe/browser/places/starred48.png
browser/themes/winstripe/browser/places/tag-aero.png
browser/themes/winstripe/browser/places/tag.png
browser/themes/winstripe/browser/places/toolbarDropMarker-aero.png
browser/themes/winstripe/browser/places/toolbarDropMarker.png
browser/themes/winstripe/browser/places/unsortedBookmarks-aero.png
browser/themes/winstripe/browser/places/unsortedBookmarks.png
browser/themes/winstripe/browser/places/unstarred48.png
browser/themes/winstripe/browser/preferences/Options-aero.png
browser/themes/winstripe/browser/preferences/Options-sync.png
browser/themes/winstripe/browser/preferences/Options.png
browser/themes/winstripe/browser/preferences/aboutPermissions.css
browser/themes/winstripe/browser/preferences/alwaysAsk-aero.png
browser/themes/winstripe/browser/preferences/alwaysAsk.png
browser/themes/winstripe/browser/preferences/application-aero.png
browser/themes/winstripe/browser/preferences/application.png
browser/themes/winstripe/browser/preferences/applications.css
browser/themes/winstripe/browser/preferences/mail-aero.png
browser/themes/winstripe/browser/preferences/mail.png
browser/themes/winstripe/browser/preferences/plugin-aero.png
browser/themes/winstripe/browser/preferences/preferences.css
browser/themes/winstripe/browser/preferences/saveFile-aero.png
browser/themes/winstripe/browser/preferences/saveFile.png
browser/themes/winstripe/browser/preview.png
browser/themes/winstripe/browser/reload-stop-go.png
browser/themes/winstripe/browser/sanitizeDialog.css
browser/themes/winstripe/browser/searchbar.css
browser/themes/winstripe/browser/section_collapsed-rtl.png
browser/themes/winstripe/browser/section_collapsed.png
browser/themes/winstripe/browser/section_expanded.png
browser/themes/winstripe/browser/setDesktopBackground.css
browser/themes/winstripe/browser/sync-128.png
browser/themes/winstripe/browser/sync-16.png
browser/themes/winstripe/browser/sync-32.png
browser/themes/winstripe/browser/sync-bg.png
browser/themes/winstripe/browser/sync-desktopIcon.png
browser/themes/winstripe/browser/sync-mobileIcon.png
browser/themes/winstripe/browser/sync-notification-24.png
browser/themes/winstripe/browser/sync-throbber.png
browser/themes/winstripe/browser/syncCommon.css
browser/themes/winstripe/browser/syncProgress.css
browser/themes/winstripe/browser/syncQuota.css
browser/themes/winstripe/browser/syncSetup.css
browser/themes/winstripe/browser/tabbrowser/alltabs.png
browser/themes/winstripe/browser/tabbrowser/connecting.png
browser/themes/winstripe/browser/tabbrowser/loading.png
browser/themes/winstripe/browser/tabbrowser/newtab-inverted.png
browser/themes/winstripe/browser/tabbrowser/newtab.png
browser/themes/winstripe/browser/tabbrowser/tab-arrow-left-inverted.png
browser/themes/winstripe/browser/tabbrowser/tab-arrow-left.png
browser/themes/winstripe/browser/tabbrowser/tab-overflow-border.png
browser/themes/winstripe/browser/tabbrowser/tab.png
browser/themes/winstripe/browser/tabbrowser/tabDragIndicator.png
browser/themes/winstripe/browser/tabview/close.png
browser/themes/winstripe/browser/tabview/edit-light.png
browser/themes/winstripe/browser/tabview/grain.png
browser/themes/winstripe/browser/tabview/search.png
browser/themes/winstripe/browser/tabview/stack-expander.png
browser/themes/winstripe/browser/tabview/tabview-inverted.png
browser/themes/winstripe/browser/tabview/tabview.css
browser/themes/winstripe/browser/tabview/tabview.png
browser/themes/winstripe/browser/urlbar-arrow.png
browser/themes/winstripe/browser/urlbar-history-dropmarker.png
browser/themes/winstripe/browser/urlbar-popup-blocked.png
config/autoconf.mk.in
configure.in
content/base/src/nsFrameLoader.cpp
dom/base/nsGlobalWindow.cpp
dom/interfaces/threads/Makefile.in
dom/interfaces/threads/nsIDOMWorkers.idl
embedding/android/AndroidManifest.xml.in
embedding/android/GeckoAppShell.java
embedding/android/GeckoEvent.java
gfx/thebes/GLContextProviderEGL.cpp
js/src/jsapi-tests/testThreadGC.cpp
js/src/jsapi-tests/testThreads.cpp
layout/base/nsPresShell.cpp
layout/generic/nsFrame.cpp
layout/generic/nsIFrame.h
layout/reftests/svg/as-image/img-foreignObject-embed-2-helper.svg
layout/reftests/svg/as-image/img-foreignObject-embed-2.html
mobile/confvars.sh
other-licenses/android/APKOpen.cpp
toolkit/components/places/History.cpp
toolkit/components/places/Makefile.in
toolkit/components/places/nsNavHistory.cpp
toolkit/mozapps/extensions/test/browser/browser_bug623950.js
toolkit/mozapps/installer/packager.mk
toolkit/mozapps/update/nsUpdateService.js
toolkit/xre/Makefile.in
widget/public/nsIMenuRollup.h
widget/src/android/AndroidBridge.cpp
widget/src/android/AndroidBridge.h
widget/src/android/AndroidJNI.cpp
widget/src/android/AndroidJavaWrappers.cpp
widget/src/android/AndroidJavaWrappers.h
widget/src/android/Makefile.in
widget/src/android/nsAppShell.cpp
widget/src/android/nsIAndroidBridge.idl
widget/src/android/nsWidgetFactory.cpp
widget/src/android/nsWindow.cpp
widget/src/android/nsWindow.h
xpcom/base/nsConsoleService.cpp
--- a/.hgtags
+++ b/.hgtags
@@ -65,8 +65,9 @@ a95d426422816513477e5863add1b00ac7041dcb
 138f593553b66c9f815e8f57870c19d6347f7702 UPDATE_PACKAGING_R14
 9eae975b3d6fb7748fe5a3c0113d449b1c7cc0b2 AURORA_BASE_20110524
 138f593553b66c9f815e8f57870c19d6347f7702 UPDATE_PACKAGING_R14
 462c726144bc1fb45b61e774f64ac5d61b4e047c UPDATE_PACKAGING_R14
 5eb553dd2ceae5f88d80f27afc5ef3935c5d43b0 AURORA_BASE_20110705
 41b84b87c816403e1b74963d8094cff0406c989e AURORA_BASE_20110816
 c0983049bcaa9551e5f276d5a77ce154c151e0b0 AURORA_BASE_20110927
 462c726144bc1fb45b61e774f64ac5d61b4e047c UPDATE_PACKAGING_R15
+54bfd8bf682e295ffd7f22fa921ca343957b6c1c AURORA_BASE_20111108
--- a/Makefile.in
+++ b/Makefile.in
@@ -60,17 +60,17 @@ TIERS += base
 #
 tier_base_dirs = \
 	config \
 	build \
 	probes \
 	$(NULL)
 
 ifndef LIBXUL_SDK
-ifeq ($(OS_TARGET),Android)
+ifeq (android,$(MOZ_WIDGET_TOOLKIT))
 tier_base_dirs += other-licenses/android
 endif
 
 tier_base_dirs += memory
 endif
 
 ifdef COMPILE_ENVIRONMENT
 include $(topsrcdir)/$(MOZ_BUILD_APP)/build.mk
--- a/accessible/src/base/nsAccDocManager.cpp
+++ b/accessible/src/base/nsAccDocManager.cpp
@@ -233,17 +233,18 @@ nsAccDocManager::OnProgressChange(nsIWeb
                                   PRInt32 aMaxTotalProgress)
 {
   NS_NOTREACHED("notification excluded in AddProgressListener(...)");
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsAccDocManager::OnLocationChange(nsIWebProgress *aWebProgress,
-                                  nsIRequest *aRequest, nsIURI *aLocation)
+                                  nsIRequest *aRequest, nsIURI *aLocation,
+                                  PRUint32 aFlags)
 {
   NS_NOTREACHED("notification excluded in AddProgressListener(...)");
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsAccDocManager::OnStatusChange(nsIWebProgress *aWebProgress,
                                 nsIRequest *aRequest, nsresult aStatus,
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -56,17 +56,17 @@ pref("extensions.logging.enabled", false
 
 // Enables strict compatibility. To be toggled in bug 698653, to make addons
 // compatibile by default.
 pref("extensions.strictCompatibility", true);
 
 // Preferences for AMO integration
 pref("extensions.getAddons.cache.enabled", true);
 pref("extensions.getAddons.maxResults", 15);
-pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/firefox/api/%API_VERSION%/search/guid:%IDS%?src=firefox&appOS=%OS%&appVersion=%VERSION%&tMain=%TIME_MAIN%&tFirstPaint=%TIME_FIRST_PAINT%&tSessionRestored=%TIME_SESSION_RESTORED%");
+pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/%LOCALE%/firefox/api/%API_VERSION%/search/guid:%IDS%?src=firefox&appOS=%OS%&appVersion=%VERSION%");
 pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%");
 pref("extensions.getAddons.search.url", "https://services.addons.mozilla.org/%LOCALE%/firefox/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%?src=firefox");
 pref("extensions.webservice.discoverURL", "https://services.addons.mozilla.org/%LOCALE%/firefox/discovery/pane/%VERSION%/%OS%");
 
 // Blocklist preferences
 pref("extensions.blocklist.enabled", true);
 pref("extensions.blocklist.interval", 86400);
 // Controls what level the blocklist switches from warning about items to forcibly
@@ -999,16 +999,17 @@ pref("services.sync.prefs.sync.spellchec
 pref("services.sync.prefs.sync.xpinstall.whitelist.required", true);
 #endif
 
 // Disable the error console
 pref("devtools.errorconsole.enabled", false);
 
 // Enable the Inspector
 pref("devtools.inspector.enabled", true);
+pref("devtools.inspector.htmlHeight", 112);
 
 // Enable the style inspector
 pref("devtools.styleinspector.enabled", true);
 
 // Enable the rules view
 pref("devtools.ruleview.enabled", true);
 
 // Enable the Scratchpad tool.
@@ -1058,8 +1059,11 @@ pref("devtools.editor.component", "orion
 // Whether the character encoding menu is under the main Firefox button. This
 // preference is a string so that localizers can alter it.
 pref("browser.menu.showCharacterEncoding", "chrome://browser/locale/browser.properties");
 
 // Allow using tab-modal prompts when possible.
 pref("prompts.tab_modal.enabled", true);
 // Whether the Panorama should animate going in/out of tabs
 pref("browser.panorama.animate_zoom", true);
+
+// Enable the DOM full-screen API.
+pref("full-screen-api.enabled", true);
--- a/browser/base/content/aboutSyncTabs.js
+++ b/browser/base/content/aboutSyncTabs.js
@@ -135,17 +135,17 @@ let RemoteTabViewer = {
                                      , type: "bookmark"
                                      , uri: uri
                                      , title: title
                                      , hiddenRows: [ "description"
                                                    , "location"
                                                    , "folderPicker"
                                                    , "loadInSidebar"
                                                    , "keyword" ]
-                                     });
+                                     }, window.top);
   },
 
   bookmarkSelectedTabs: function() {
     let items = this._tabsList.selectedItems;
     let URIs = [];
     for (let i = 0;i < items.length;i++) {
       if (items[i].getAttribute("type") == "tab") {
         let uri = Weave.Utils.makeURI(items[i].getAttribute("url"));
@@ -155,17 +155,17 @@ let RemoteTabViewer = {
         URIs.push(uri);
       }
     }
     if (URIs.length) {
       PlacesUIUtils.showBookmarkDialog({ action: "add"
                                        , type: "folder"
                                        , URIList: URIs
                                        , hiddenRows: [ "description" ]
-                                       });
+                                       }, window.top);
     }
   },
 
   _generateTabList: function() {
     let engine = Weave.Engines.get("tabs");
     let list = this._tabsList;
 
     // clear out existing richlistitems
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -383,23 +383,23 @@ var PlacesCommandHook = {
                                        , type: "bookmark"
                                        , uri: linkURI
                                        , title: aTitle
                                        , hiddenRows: [ "description"
                                                      , "location"
                                                      , "loadInSidebar"
                                                      , "folderPicker"
                                                      , "keyword" ]
-                                       });
+                                       }, window);
     }
     else {
       PlacesUIUtils.showBookmarkDialog({ action: "edit"
                                        , type: "bookmark"
                                        , itemId: itemId
-                                       });
+                                       }, window);
     }
   },
 
   /**
    * List of nsIURI objects characterizing the tabs currently open in the
    * browser, modulo pinned tabs.  The URIs will be in the order in which their
    * corresponding tabs appeared and duplicates are discarded.
    */
@@ -422,17 +422,17 @@ var PlacesCommandHook = {
    */
   bookmarkCurrentPages: function PCH_bookmarkCurrentPages() {
     let pages = this.uniqueCurrentPages;
     if (pages.length > 1) {
     PlacesUIUtils.showBookmarkDialog({ action: "add"
                                      , type: "folder"
                                      , URIList: pages
                                      , hiddenRows: [ "description" ]
-                                     });
+                                     }, window);
     }
   },
 
   /**
    * Updates disabled state for the "Bookmark All Tabs" command.
    */
   updateBookmarkAllTabsCommand:
   function PCH_updateBookmarkAllTabsCommand() {
@@ -473,17 +473,17 @@ var PlacesCommandHook = {
                                      , feedURI: feedURI
                                      , siteURI: gBrowser.currentURI
                                      , title: title
                                      , description: description
                                      , defaultInsertionPoint: toolbarIP
                                      , hiddenRows: [ "feedLocation"
                                                    , "siteLocation"
                                                    , "description" ]
-                                     });
+                                     }, window);
   },
 
   /**
    * Opens the Places Organizer. 
    * @param   aLeftPaneRoot
    *          The query to select in the organizer window - options
    *          are: History, AllBookmarks, BookmarksMenu, BookmarksToolbar,
    *          UnfiledBookmarks and Tags.
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -357,18 +357,18 @@ window[chromehidden~="toolbar"] toolbar:
   background: black;
 }
 
 #full-screen-warning-container {
   pointer-events: none;
   position: fixed;
   top: 0;
   left: 0;
-  min-width: 100%;
-  min-height: 100%;
+  width: 100%;
+  height: 100%;
 }
 
 #full-screen-warning-container[fade-warning-out] {
   -moz-transition-property: opacity !important;
   -moz-transition-duration: 500ms !important;
   opacity: 0.0;
 }
 
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -3160,17 +3160,17 @@ var bookmarksButtonObserver = {
                                        , type: "bookmark"
                                        , uri: makeURI(url)
                                        , title: name
                                        , hiddenRows: [ "description"
                                                      , "location"
                                                      , "loadInSidebar"
                                                      , "folderPicker"
                                                      , "keyword" ]
-                                       });
+                                       }, window);
     } catch(ex) { }
   },
 
   onDragOver: function (aEvent)
   {
     browserDragAndDrop.dragOver(aEvent);
     aEvent.dropEffect = "link";
   },
@@ -3908,24 +3908,46 @@ var FullScreen = {
     }
   },
 
   exitDomFullScreen : function(e) {
     document.mozCancelFullScreen();
   },
 
   enterDomFullScreen : function(event) {
+    if (!document.mozFullScreen) {
+      return;
+    }
+
     // We receive "mozfullscreenchange" events for each subdocument which
     // is an ancestor of the document containing the element which requested
     // full-screen. Only add listeners and show warning etc when the event we
     // receive is targeted at the chrome document, i.e. only once every time
     // we enter DOM full-screen mode.
-    if (!document.mozFullScreen || event.target.ownerDocument != document) {
+    let targetDoc = event.target.ownerDocument ? event.target.ownerDocument : event.target;
+    if (targetDoc != document) {
+      // However, if we receive a "mozfullscreenchange" event for a document
+      // which is not a subdocument of the currently selected tab, we know that
+      // we've switched tabs since the request to enter full-screen was made,
+      // so we should exit full-screen since the "full-screen document" isn't
+      // acutally visible.
+      if (targetDoc.defaultView.top != gBrowser.contentWindow) {
+        document.mozCancelFullScreen();
+      }
       return;
     }
+
+    let focusManger = Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager);
+    if (focusManger.activeWindow != window) {
+      // The top-level window has lost focus since the request to enter
+      // full-screen was made. Cancel full-screen.
+      document.mozCancelFullScreen();
+      return;
+    }
+
     this.showWarning(true);
 
     // Exit DOM full-screen mode upon open, close, or change tab.
     gBrowser.tabContainer.addEventListener("TabOpen", this.exitDomFullScreen);
     gBrowser.tabContainer.addEventListener("TabClose", this.exitDomFullScreen);
     gBrowser.tabContainer.addEventListener("TabSelect", this.exitDomFullScreen);
 
     // Exit DOM full-screen mode when the browser window loses focus (ALT+TAB, etc).
@@ -4559,17 +4581,17 @@ var XULBrowserWindow = {
           this.throbberElement.removeAttribute("busy");
 
         this.stopCommand.setAttribute("disabled", "true");
         CombinedStopReload.switchToReload(aRequest instanceof Ci.nsIRequest);
       }
     }
   },
 
-  onLocationChange: function (aWebProgress, aRequest, aLocationURI) {
+  onLocationChange: function (aWebProgress, aRequest, aLocationURI, aFlags) {
     var location = aLocationURI ? aLocationURI.spec : "";
     this._hostChanged = true;
 
     // Hide the form invalid popup.
     if (gFormSubmitObserver.panelIsOpen()) {
       gFormSubmitObserver.panel.hidePopup();
     }
 
@@ -5025,17 +5047,18 @@ var TabsProgressListener = {
         aBrowser.removeEventListener("pagehide", arguments.callee, true);
       }, true);
 
       // We also want to make changes to page UI for unprivileged about pages.
       BrowserOnAboutPageLoad(aWebProgress.DOMWindow.document);
     }
   },
 
-  onLocationChange: function (aBrowser, aWebProgress, aRequest, aLocationURI) {
+  onLocationChange: function (aBrowser, aWebProgress, aRequest, aLocationURI,
+                              aFlags) {
     // Filter out any sub-frame loads
     if (aBrowser.contentWindow == aWebProgress.DOMWindow)
       FullZoom.onLocationChange(aLocationURI, false, aBrowser);
   },
 
   onRefreshAttempted: function (aBrowser, aWebProgress, aURI, aDelay, aSameURI) {
     if (gPrefService.getBoolPref("accessibility.blockautorefresh")) {
       let brandBundle = document.getElementById("bundle_brand");
@@ -5766,17 +5789,17 @@ function contentAreaClick(event, isPanel
                                        , type: "bookmark"
                                        , uri: makeURI(href)
                                        , title: linkNode.getAttribute("title")
                                        , loadBookmarkInSidebar: true
                                        , hiddenRows: [ "description"
                                                      , "location"
                                                      , "folderPicker"
                                                      , "keyword" ]
-                                       });
+                                       }, window);
       event.preventDefault();
       return true;
     }
   }
 
   handleLinkClick(event, href, linkNode);
 
   // Mark the page as a user followed link.  This is done so that history can
@@ -6813,17 +6836,17 @@ function AddKeywordForSearchField() {
                                    , title: title
                                    , description: description
                                    , keyword: ""
                                    , postData: postData
                                    , charSet: charset
                                    , hiddenRows: [ "location"
                                                  , "loadInSidebar"
                                                  , "folderPicker" ]
-                                   });
+                                   }, window);
 }
 
 function SwitchDocumentDirection(aWindow) {
   aWindow.document.dir = (aWindow.document.dir == "ltr" ? "rtl" : "ltr");
   for (var run = 0; run < aWindow.frames.length; run++)
     SwitchDocumentDirection(aWindow.frames[run]);
 }
 
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -971,17 +971,17 @@
           style="min-width: 18em; width: 22em; max-width: 42em;" persist="width">
       <toolbar id="devtools-sidebar-toolbar" nowindowdrag="true"/>
       <deck id="devtools-sidebar-deck" flex="1"/>
     </vbox>
     <vbox id="browser-border-end" hidden="true" layer="true"/>
   </hbox>
 
   <hbox id="full-screen-warning-container" hidden="true" fadeout="true">
-    <hbox style="min-width: 100%;" pack="center"> <!-- Inner hbox needed due to bug 579776. -->
+    <hbox style="width: 100%;" pack="center"> <!-- Inner hbox needed due to bug 579776. -->
       <hbox id="full-screen-warning-message">
         <description id="full-screen-warning-text" value="&domFullScreenWarning.label;"></description>
       </hbox>
     </hbox>
   </hbox>
 
   <vbox id="browser-bottombox" layer="true">
     <toolbar id="inspector-toolbar"
@@ -1058,16 +1058,20 @@
   </svg:svg>
 #endif
 #ifdef XP_MACOSX
   <svg:svg height="0">
     <svg:mask id="pinstripe-keyhole-forward-mask" maskContentUnits="objectBoundingBox">
       <svg:rect x="0" y="0" width="1" height="1" fill="white"/>
       <svg:circle cx="-0.41" cy="0.5" r="0.65"/>
     </svg:mask>
+    <svg:mask id="pinstripe-urlbar-back-button-mask" maskContentUnits="userSpaceOnUse">
+      <svg:rect x="0" y="-5" width="10000" height="55" fill="white"/>
+      <svg:circle cx="-9" cy="11" r="15"/>
+    </svg:mask>
     <svg:mask id="pinstripe-tab-ontop-left-curve-mask" maskContentUnits="userSpaceOnUse">
       <svg:circle cx="9" cy="3" r="3" fill="white"/>
       <svg:rect x="9" y="0" width="3" height="3" fill="white"/>
       <svg:rect x="6" y="3" width="6" height="19" fill="white"/>
       <svg:rect x="1" y="17" width="5" height="5" fill="white"/>
       <svg:circle cx="1" cy="17" r="5"/>
       <svg:rect x="0" y="22" width="12" height="1" fill="white"/>
     </svg:mask>
--- a/browser/base/content/nsContextMenu.js
+++ b/browser/base/content/nsContextMenu.js
@@ -1403,23 +1403,23 @@ nsContextMenu.prototype = {
                                        , uri: uri
                                        , title: title
                                        , description: description
                                        , hiddenRows: [ "description"
                                                      , "location"
                                                      , "loadInSidebar"
                                                      , "folderPicker"
                                                      , "keyword" ]
-                                       });
+                                       }, window.top);
     }
     else {
       PlacesUIUtils.showBookmarkDialog({ action: "edit"
                                        , type: "bookmark"
                                        , itemId: itemId
-                                       });
+                                       }, window.top);
     }
   },
 
   savePageAs: function CM_savePageAs() {
     saveDocument(this.browser.contentDocument);
   },
 
   sendPage: function CM_sendPage() {
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -603,17 +603,18 @@
                 // reset cached temporary values at beginning and end
                 this.mMessage = "";
                 this.mTotalProgress = 0;
               }
               this.mStateFlags = aStateFlags;
               this.mStatus = aStatus;
             },
 
-            onLocationChange: function (aWebProgress, aRequest, aLocation) {
+            onLocationChange: function (aWebProgress, aRequest, aLocation,
+                                        aFlags) {
               // OnLocationChange is called for both the top-level content
               // and the subframes.
               let topLevel = aWebProgress.DOMWindow == this.mBrowser.contentWindow;
 
               if (topLevel) {
                 // The document loaded correctly, clear the value if we should
                 if (this.mBrowser.userTypedClear > 0)
                   this.mBrowser.userTypedValue = null;
@@ -636,17 +637,18 @@
                 if (aLocation.spec != "about:blank") {
                   autocomplete.registerOpenPage(aLocation);
                   this.mBrowser.registeredOpenURI = aLocation;
                 }
               }
 
               if (!this.mBlank) {
                 this._callProgressListeners("onLocationChange",
-                                            [aWebProgress, aRequest, aLocation]);
+                                            [aWebProgress, aRequest, aLocation,
+                                             aFlags]);
               }
 
               if (topLevel)
                 this.mBrowser.lastURI = aLocation;
             },
 
             onStatusChange: function (aWebProgress, aRequest, aStatus, aMessage) {
               if (this.mBlank)
@@ -885,17 +887,18 @@
 #ifdef MOZ_E10S_COMPAT
             // Bug 666801 - WebProgress support for e10s and
             // Bug 666809 - SecurityUI support for e10s
 #else
             var webProgress = this.mCurrentBrowser.webProgress;
             var securityUI = this.mCurrentBrowser.securityUI;
 
             this._callProgressListeners(null, "onLocationChange",
-                                        [webProgress, null, loc], true, false);
+                                        [webProgress, null, loc, 0], true,
+                                        false);
 
             if (securityUI) {
               this._callProgressListeners(null, "onSecurityChange",
                                           [webProgress, null, securityUI.state], true, false);
             }
 #endif
 
             var listener = this.mTabListeners[this.tabContainer.selectedIndex] || null;
--- a/browser/base/content/test/browser_alltabslistener.js
+++ b/browser/base/content/test/browser_alltabslistener.js
@@ -12,17 +12,17 @@ var gFrontProgressListener = {
   onStateChange: function (aWebProgress, aRequest, aStateFlags, aStatus) {
     var state = "onStateChange";
     info("FrontProgress: " + state + " 0x" + aStateFlags.toString(16));
     ok(gFrontNotificationsPos < gFrontNotifications.length, "Got an expected notification for the front notifications listener");
     is(state, gFrontNotifications[gFrontNotificationsPos], "Got a notification for the front notifications listener");
     gFrontNotificationsPos++;
   },
 
-  onLocationChange: function (aWebProgress, aRequest, aLocationURI) {
+  onLocationChange: function (aWebProgress, aRequest, aLocationURI, aFlags) {
     var state = "onLocationChange";
     info("FrontProgress: " + state + " " + aLocationURI.spec);
     ok(gFrontNotificationsPos < gFrontNotifications.length, "Got an expected notification for the front notifications listener");
     is(state, gFrontNotifications[gFrontNotificationsPos], "Got a notification for the front notifications listener");
     gFrontNotificationsPos++;
   },
   
   onStatusChange: function (aWebProgress, aRequest, aStatus, aMessage) {
@@ -48,17 +48,18 @@ var gAllProgressListener = {
 
     if ((aStateFlags & gCompleteState) == gCompleteState) {
       ok(gAllNotificationsPos == gAllNotifications.length, "Saw the expected number of notifications");
       ok(gFrontNotificationsPos == gFrontNotifications.length, "Saw the expected number of frontnotifications");
       executeSoon(gNextTest);
     }
   },
 
-  onLocationChange: function (aBrowser, aWebProgress, aRequest, aLocationURI) {
+  onLocationChange: function (aBrowser, aWebProgress, aRequest, aLocationURI,
+                              aFlags) {
     var state = "onLocationChange";
     info("AllProgress: " + state + " " + aLocationURI.spec);
     ok(aBrowser == gTestBrowser, state + " notification came from the correct browser");
     ok(gAllNotificationsPos < gAllNotifications.length, "Got an expected notification for the all notifications listener");
     is(state, gAllNotifications[gAllNotificationsPos], "Got a notification for the all notifications listener");
     gAllNotificationsPos++;
   },
   
--- a/browser/base/content/test/browser_bug422590.js
+++ b/browser/base/content/test/browser_bug422590.js
@@ -1,10 +1,11 @@
 function test() {
   waitForExplicitFinish();
+  ignoreAllUncaughtExceptions();
   
   // test the main (normal) browser window
   testCustomize(window, testChromeless);
 }
 
 function testChromeless() {
   // test a chromeless window
   var newWin = openDialog("chrome://browser/content/", "_blank",
--- a/browser/base/content/test/browser_bug599325.js
+++ b/browser/base/content/test/browser_bug599325.js
@@ -1,10 +1,11 @@
 function test() {
   waitForExplicitFinish();
+  ignoreAllUncaughtExceptions();
 
   testCustomize(window, finish);
 }
 
 function testCustomize(aWindow, aCallback) {
   var addonBar = aWindow.document.getElementById("addon-bar");
   ok(addonBar, "got addon bar");
   ok(!isElementVisible(addonBar), "addon bar initially hidden");
--- a/browser/base/content/test/browser_urlbarTrimURLs.js
+++ b/browser/base/content/test/browser_urlbarTrimURLs.js
@@ -27,17 +27,23 @@ function test() {
   testVal("http://mozilla.imaginatory/", "mozilla.imaginatory");
   testVal("http://www.mozilla.org/", "www.mozilla.org");
   testVal("http://sub.mozilla.org/", "sub.mozilla.org");
   testVal("http://sub1.sub2.sub3.mozilla.org/", "sub1.sub2.sub3.mozilla.org");
   testVal("http://mozilla.org/file.ext", "mozilla.org/file.ext");
   testVal("http://mozilla.org/sub/", "mozilla.org/sub/");
 
   testVal("http://ftp.mozilla.org/", "http://ftp.mozilla.org");
+  testVal("http://ftp1.mozilla.org/", "http://ftp1.mozilla.org");
+  testVal("http://ftp42.mozilla.org/", "http://ftp42.mozilla.org");
+  testVal("http://ftpx.mozilla.org/", "ftpx.mozilla.org");
   testVal("ftp://ftp.mozilla.org/", "ftp://ftp.mozilla.org");
+  testVal("ftp://ftp1.mozilla.org/", "ftp://ftp1.mozilla.org");
+  testVal("ftp://ftp42.mozilla.org/", "ftp://ftp42.mozilla.org");
+  testVal("ftp://ftpx.mozilla.org/", "ftp://ftpx.mozilla.org");
 
   testVal("https://user:pass@mozilla.org/", "https://user:pass@mozilla.org");
   testVal("http://user:pass@mozilla.org/", "http://user:pass@mozilla.org");
   testVal("http://sub.mozilla.org:666/", "sub.mozilla.org:666");
 
   testVal("https://[fe80::222:19ff:fe11:8c76]/file.ext");
   testVal("http://[fe80::222:19ff:fe11:8c76]/", "[fe80::222:19ff:fe11:8c76]");
   testVal("https://user:pass@[fe80::222:19ff:fe11:8c76]:666/file.ext");
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -630,13 +630,15 @@ function openPrefsHelp() {
   // since its probably behind the window.
   var instantApply = getBoolPref("browser.preferences.instantApply");
 
   var helpTopic = document.getElementsByTagName("prefwindow")[0].currentPane.helpTopic;
   openHelpLink(helpTopic, !instantApply);
 }
 
 function trimURL(aURL) {
+  // This function must not modify the given URL such that calling
+  // nsIURIFixup::createFixupURI with the result will produce a different URI.
   return aURL /* remove single trailing slash for http/https/ftp URLs */
              .replace(/^((?:http|https|ftp):\/\/[^/]+)\/$/, "$1")
-              /* remove http:// unless the host starts with "ftp." or contains "@" */
-             .replace(/^http:\/\/((?!ftp\.)[^\/@]+(?:\/|$))/, "$1");
+              /* remove http:// unless the host starts with "ftp\d*\." or contains "@" */
+             .replace(/^http:\/\/((?!ftp\d*\.)[^\/@]+(?:\/|$))/, "$1");
 }
--- a/browser/base/content/web-panels.js
+++ b/browser/base/content/web-panels.js
@@ -67,17 +67,17 @@ var panelProgressListener = {
         }
         else if (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP &&
                 aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) {
             window.parent.document.getElementById('sidebar-throbber').removeAttribute("loading");
         }
     }
     ,
 
-    onLocationChange : function(aWebProgress, aRequest, aLocation) {
+    onLocationChange : function(aWebProgress, aRequest, aLocation, aFlags) {
         UpdateBackForwardCommands(getPanelBrowser().webNavigation);
     },
 
     onStatusChange : function(aWebProgress, aRequest, aStatus, aMessage) {
     },
 
     onSecurityChange : function(aWebProgress, aRequest, aState) { 
     },
--- a/browser/components/about/Makefile.in
+++ b/browser/components/about/Makefile.in
@@ -39,17 +39,16 @@ topsrcdir = @top_srcdir@
 srcdir    = @srcdir@
 VPATH     = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 MODULE = browserabout
 LIBRARY_NAME = browserabout_s
 FORCE_STATIC_LIB = 1
-FORCE_USE_PIC = 1
 ifndef MOZ_MEMORY
 USE_STATIC_LIBS = 1
 endif
 
 
 EXPORTS_NAMESPACES = mozilla/browser
 
 EXPORTS_mozilla/browser = AboutRedirector.h
--- a/browser/components/dirprovider/Makefile.in
+++ b/browser/components/dirprovider/Makefile.in
@@ -45,17 +45,16 @@ include $(DEPTH)/config/autoconf.mk
 MODULE = browserdir
 LIBRARY_NAME = browserdir_s
 
 ifdef ENABLE_TESTS
 DIRS = tests
 endif
 
 FORCE_STATIC_LIB = 1
-FORCE_USE_PIC = 1
 
 # Because we are an application component, link against the CRT statically
 # (on Windows, but only if we're not building our own CRT for jemalloc)
 ifndef MOZ_MEMORY
 USE_STATIC_LIBS      = 1
 endif
 
 EXPORTS_NAMESPACES = mozilla/browser
--- a/browser/components/feeds/src/Makefile.in
+++ b/browser/components/feeds/src/Makefile.in
@@ -39,17 +39,16 @@ topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 MODULE = browser_feeds
 LIBRARY_NAME = browser_feeds_s
 FORCE_STATIC_LIB = 1
-FORCE_USE_PIC = 1
 ifndef MOZ_MEMORY
 USE_STATIC_LIBS = 1
 endif
 
 DEFINES += \
 	-DMOZ_APP_NAME=$(MOZ_APP_NAME) \
 	-DMOZ_APP_DISPLAYNAME=$(MOZ_APP_DISPLAYNAME) \
 	$(NULL)
--- a/browser/components/migration/src/Makefile.in
+++ b/browser/components/migration/src/Makefile.in
@@ -39,17 +39,16 @@ topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 MODULE		= migration
 LIBRARY_NAME	= migration_s
 FORCE_STATIC_LIB = 1
-FORCE_USE_PIC = 1
 ifndef MOZ_MEMORY
 USE_STATIC_LIBS = 1
 endif
 
 
 CPPSRCS  = nsProfileMigrator.cpp \
            nsBrowserProfileMigratorUtils.cpp \
            $(NULL)
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -634,18 +634,18 @@ BrowserGlue.prototype = {
                       }
                     }
                   ];
 
     // Set pref to indicate we've shown the notification.
     var currentVersion = Services.prefs.getIntPref("browser.rights.version");
     Services.prefs.setBoolPref("browser.rights." + currentVersion + ".shown", true);
 
-    var box = notifyBox.appendNotification(notifyRightsText, "about-rights", null, notifyBox.PRIORITY_INFO_LOW, buttons);
-    box.persistence = 3; // arbitrary number, just so bar sticks around for a bit
+    var notification = notifyBox.appendNotification(notifyRightsText, "about-rights", null, notifyBox.PRIORITY_INFO_LOW, buttons);
+    notification.persistence = -1; // Until user closes it
   },
 
   _showUpdateNotification: function BG__showUpdateNotification() {
     Services.prefs.clearUserPref("app.update.postupdate");
 
     var um = Cc["@mozilla.org/updates/update-manager;1"].
              getService(Ci.nsIUpdateManager);
     try {
@@ -704,20 +704,20 @@ BrowserGlue.prototype = {
                         accessKey: key,
                         popup:     null,
                         callback: function(aNotificationBar, aButton) {
                           browser.selectedTab = browser.addTab(url);
                         }
                       }
                     ];
 
-      let box = notifyBox.appendNotification(text, "post-update-notification",
-                                             null, notifyBox.PRIORITY_INFO_LOW,
-                                             buttons);
-      box.persistence = 3;
+      let notification = notifyBox.appendNotification(text, "post-update-notification",
+                                                      null, notifyBox.PRIORITY_INFO_LOW,
+                                                      buttons);
+      notification.persistence = -1; // Until user closes it
     }
 
     if (actions.indexOf("showAlert") == -1)
       return;
 
     let notifier;
     try {
       notifier = Cc["@mozilla.org/alerts-service;1"].
@@ -788,17 +788,17 @@ BrowserGlue.prototype = {
     var brandBundle     = Services.strings.createBundle("chrome://branding/locale/brand.properties");
 
     var productName        = brandBundle.GetStringFromName("brandFullName");
     var serverOwner        = Services.prefs.getCharPref(PREF_TELEMETRY_SERVER_OWNER);
     var telemetryPrompt    = browserBundle.formatStringFromName("telemetryPrompt", [productName, serverOwner], 2);
 
     var buttons = [
                     {
-                      label:     browserBundle.GetStringFromName("telemetryYesButtonLabel"),
+                      label:     browserBundle.GetStringFromName("telemetryYesButtonLabel2"),
                       accessKey: browserBundle.GetStringFromName("telemetryYesButtonAccessKey"),
                       popup:     null,
                       callback:  function(aNotificationBar, aButton) {
                         Services.prefs.setBoolPref(PREF_TELEMETRY_ENABLED, true);
                       }
                     },
                     {
                       label:     browserBundle.GetStringFromName("telemetryNoButtonLabel"),
@@ -810,30 +810,31 @@ BrowserGlue.prototype = {
                     }
                   ];
 
     // Set pref to indicate we've shown the notification.
     Services.prefs.setIntPref(PREF_TELEMETRY_PROMPTED, TELEMETRY_PROMPT_REV);
 
     var notification = notifyBox.appendNotification(telemetryPrompt, "telemetry", null, notifyBox.PRIORITY_INFO_LOW, buttons);
     notification.setAttribute("hideclose", true);
-    notification.persistence = 6; // arbitrary number, just so bar sticks around for a bit
+    notification.persistence = -1;  // Until user closes it
 
     let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
     let link = notification.ownerDocument.createElementNS(XULNS, "label");
     link.className = "text-link telemetry-text-link";
     link.setAttribute("value", browserBundle.GetStringFromName("telemetryLinkLabel"));
     link.addEventListener('click', function() {
       // Open the learn more url in a new tab
       browser.selectedTab = browser.addTab(Services.prefs.getCharPref(PREF_TELEMETRY_INFOURL));
       // Remove the notification on which the user clicked
       notification.parentNode.removeNotification(notification, true);
       // Add a new notification to that tab, with no "Learn more" link
-      var notifyBox = browser.getNotificationBox();
-      notifyBox.appendNotification(telemetryPrompt, "telemetry", null, notifyBox.PRIORITY_INFO_LOW, buttons);
+      notifyBox = browser.getNotificationBox();
+      notification = notifyBox.appendNotification(telemetryPrompt, "telemetry", null, notifyBox.PRIORITY_INFO_LOW, buttons);
+      notification.persistence = -1; // Until user closes it
     }, false);
     let description = notification.ownerDocument.getAnonymousElementByAttribute(notification, "anonid", "messageText");
     description.appendChild(link);
   },
 #endif
 
   _showPluginUpdatePage: function BG__showPluginUpdatePage() {
     Services.prefs.setBoolPref(PREF_PLUGINS_NOTIFYUSER, false);
@@ -1087,20 +1088,20 @@ BrowserGlue.prototype = {
                       popup:     null,
                       callback:  function(aNotificationBar, aButton) {
                         browser.selectedTab = browser.addTab(url);
                       }
                     }
                   ];
 
     var notifyBox = browser.getNotificationBox();
-    var box = notifyBox.appendNotification(text, title, null,
-                                           notifyBox.PRIORITY_CRITICAL_MEDIUM,
-                                           buttons);
-    box.persistence = -1; // Until user closes it
+    var notification = notifyBox.appendNotification(text, title, null,
+                                                    notifyBox.PRIORITY_CRITICAL_MEDIUM,
+                                                    buttons);
+    notification.persistence = -1; // Until user closes it
   },
 
   _migrateUI: function BG__migrateUI() {
     const UI_VERSION = 5;
     const BROWSER_DOCURL = "chrome://browser/content/browser.xul#";
     let currentUIVersion = 0;
     try {
       currentUIVersion = Services.prefs.getIntPref("browser.migration.version");
--- a/browser/components/places/content/controller.js
+++ b/browser/components/places/content/controller.js
@@ -304,20 +304,21 @@ PlacesController.prototype = {
       break;
     case "placesCmd_createBookmark":
       let node = this._view.selectedNode;
       PlacesUIUtils.showBookmarkDialog({ action: "add"
                                        , type: "bookmark"
                                        , hiddenRows: [ "description"
                                                      , "keyword"
                                                      , "location"
+                                                     , "folderPicker"
                                                      , "loadInSidebar" ]
                                        , uri: NetUtil.newURI(node.uri)
                                        , title: node.title
-                                       }, window.top, true);
+                                       }, window.top);
       break;
     }
   },
 
   onEvent: function PC_onEvent(eventName) { },
 
 
   /**
@@ -763,17 +764,17 @@ PlacesController.prototype = {
     if (!ip)
       throw Cr.NS_ERROR_NOT_AVAILABLE;
 
     let performed =
       PlacesUIUtils.showBookmarkDialog({ action: "add"
                                        , type: aType
                                        , defaultInsertionPoint: ip
                                        , hiddenRows: [ "folderPicker" ]
-                                       }, window);
+                                       }, window.top);
     if (performed) {
       // Select the new item.
       let insertedNodeId = PlacesUtils.bookmarks
                                       .getIdForItemAt(ip.itemId, ip.index);
       this._view.selectItems([insertedNodeId], false);
     }
   },
 
--- a/browser/components/places/tests/browser/browser_library_middleclick.js
+++ b/browser/components/places/tests/browser/browser_library_middleclick.js
@@ -59,17 +59,18 @@ var gTabsListener = {
          "We have opened " + gCurrentTest.URIs.length + " new tab(s)");
     }
 
     var tab = aEvent.target;
     is(tab.ownerDocument.defaultView, window,
        "Tab has been opened in current browser window");
   },
 
-  onLocationChange: function(aBrowser, aWebProgress, aRequest, aLocationURI) {
+  onLocationChange: function(aBrowser, aWebProgress, aRequest, aLocationURI,
+                             aFlags) {
     var spec = aLocationURI.spec;
     ok(true, spec);
     // When a new tab is opened, location is first set to "about:blank", so
     // we can ignore those calls.
     // Ignore multiple notifications for the same URI too.
     if (spec == "about:blank" || this._loadedURIs.indexOf(spec) != -1)
       return;
 
--- a/browser/components/places/tests/browser/browser_sidebarpanels_click.js
+++ b/browser/components/places/tests/browser/browser_sidebarpanels_click.js
@@ -35,16 +35,17 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
 // This test makes sure that the items in the bookmarks and history sidebar
 // panels are clickable in both LTR and RTL modes.
 
 function test() {
   waitForExplicitFinish();
+  ignoreAllUncaughtExceptions();
 
   const BOOKMARKS_SIDEBAR_ID = "viewBookmarksSidebar";
   const BOOKMARKS_SIDEBAR_TREE_ID = "bookmarks-view";
   const HISTORY_SIDEBAR_ID = "viewHistorySidebar";
   const HISTORY_SIDEBAR_TREE_ID = "historyTree";
   const TEST_URL = "http://mochi.test:8888/browser/browser/components/places/tests/browser/sidebarpanels_click_test_page.html";
 
   // If a sidebar is already open, close it.
--- a/browser/components/privatebrowsing/src/Makefile.in
+++ b/browser/components/privatebrowsing/src/Makefile.in
@@ -40,17 +40,16 @@ topsrcdir = @top_srcdir@
 srcdir    = @srcdir@
 VPATH   = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 MODULE = privatebrowsing
 LIBRARY_NAME = privatebrowsing_s
 FORCE_STATIC_LIB = 1
-FORCE_USE_PIC = 1
 ifndef MOZ_MEMORY
 USE_STATIC_LIBS = 1
 endif
 
 
 CPPSRCS = \
 	nsPrivateBrowsingServiceWrapper.cpp \
 	$(NULL)
--- a/browser/components/safebrowsing/content/malware-warden.js
+++ b/browser/components/safebrowsing/content/malware-warden.js
@@ -52,24 +52,24 @@ function PROT_MalwareWarden() {
     this.prefs_.getPref(kMalwareWardenEnabledPref, null);
 
   // Get notifications when the malware warden enabled pref changes
   var malwareWardenPrefObserver =
     BindToObject(this.onMalwareWardenEnabledPrefChanged, this);
   this.prefs_.addObserver(kMalwareWardenEnabledPref, malwareWardenPrefObserver);
 
   // Add a test chunk to the database
-  var testData = "mozilla.com/firefox/its-an-attack.html";
+  var testData = "mozilla.org/firefox/its-an-attack.html";
 
   var testUpdate =
     "n:1000\ni:test-malware-simple\nad:1\n" +
     "a:1:32:" + testData.length + "\n" +
     testData;
     
-  testData = "mozilla.com/firefox/its-a-trap.html";
+  testData = "mozilla.org/firefox/its-a-trap.html";
   testUpdate +=
     "n:1000\ni:test-phish-simple\nad:1\n" +
     "a:1:32:" + testData.length + "\n" +
     testData;
 
   var dbService_ = Cc["@mozilla.org/url-classifier/dbservice;1"]
                    .getService(Ci.nsIUrlClassifierDBService);
 
--- a/browser/components/safebrowsing/content/test/browser_bug400731.js
+++ b/browser/components/safebrowsing/content/test/browser_bug400731.js
@@ -3,32 +3,32 @@
 function test() {
   waitForExplicitFinish();
   
   gBrowser.selectedTab = gBrowser.addTab();
   
   // Navigate to malware site.  Can't use an onload listener here since
   // error pages don't fire onload
   window.addEventListener("DOMContentLoaded", testMalware, true);
-  content.location = "http://www.mozilla.com/firefox/its-an-attack.html";
+  content.location = "http://www.mozilla.org/firefox/its-an-attack.html";
 }
 
 function testMalware() {
   window.removeEventListener("DOMContentLoaded", testMalware, true);
 
   // Confirm that "Ignore this warning" is visible - bug 422410
   var el = content.document.getElementById("ignoreWarningButton");
   ok(el, "Ignore warning button should be present for malware");
   
   var style = content.getComputedStyle(el, null);
   is(style.display, "inline", "Ignore Warning button should be display:inline for malware");
   
   // Now launch the phishing test
   window.addEventListener("DOMContentLoaded", testPhishing, true);
-  content.location = "http://www.mozilla.com/firefox/its-a-trap.html";
+  content.location = "http://www.mozilla.org/firefox/its-a-trap.html";
 }
 
 function testPhishing() {
   window.removeEventListener("DOMContentLoaded", testPhishing, true);
   
   var el = content.document.getElementById("ignoreWarningButton");
   ok(el, "Ignore warning button should be present for phishing");
   
--- a/browser/components/safebrowsing/content/test/browser_bug415846.js
+++ b/browser/components/safebrowsing/content/test/browser_bug415846.js
@@ -32,17 +32,17 @@ function testNormal_PopupListener() {
   var reportMenu = document.getElementById("menu_HelpPopup_reportPhishingtoolmenu");
   var errorMenu = document.getElementById("menu_HelpPopup_reportPhishingErrortoolmenu");
   is(reportMenu.hidden, false, "Report phishing menu should be visible on normal sites");
   is(errorMenu.hidden, true, "Report error menu item should be hidden on normal sites");
   menu.hidePopup();
   
   // Now launch the phishing test.  Can't use onload here because error pages don't
   // fire normal load events.
-  content.location = "http://www.mozilla.com/firefox/its-a-trap.html";
+  content.location = "http://www.mozilla.org/firefox/its-a-trap.html";
   setTimeout(testPhishing, 2000);
 }
 
 function testPhishing() {
   menu.addEventListener("popupshown", testPhishing_PopupListener, false);
   menu.openPopup(null, "", 0, 0, false, null);
 }
 
--- a/browser/components/sessionstore/src/nsSessionStore.js
+++ b/browser/components/sessionstore/src/nsSessionStore.js
@@ -112,21 +112,16 @@ eg: browser.docShell["allow" + aCapabili
 XXX keep these in sync with all the attributes starting
     with "allow" in /docshell/base/nsIDocShell.idl
 */
 const CAPABILITIES = [
   "Subframes", "Plugins", "Javascript", "MetaRedirects", "Images",
   "DNSPrefetch", "Auth", "WindowControl"
 ];
 
-// These keys are for internal use only - they shouldn't be part of the JSON
-// that gets saved to disk nor part of the strings returned by the API.
-const INTERNAL_KEYS = ["_tabStillLoading", "_hosts", "_formDataSaved",
-                       "_shouldRestore", "_host", "_scheme"];
-
 // These are tab events that we listen to.
 const TAB_EVENTS = ["TabOpen", "TabClose", "TabSelect", "TabShow", "TabHide",
                     "TabPinned", "TabUnpinned"];
 
 #ifndef XP_WIN
 #define BROKEN_WM_Z_ORDER
 #endif
 
@@ -211,16 +206,19 @@ SessionStoreService.prototype = {
 
   // time in milliseconds when the session was started (saved across sessions),
   // defaults to now if no session was restored or timestamp doesn't exist
   _sessionStartTime: Date.now(),
 
   // states for all currently opened windows
   _windows: {},
 
+  // internal states for all open windows (data we need to associate, but not write to disk)
+  _internalWindows: {},
+
   // states for all recently closed windows
   _closedWindows: [],
 
   // not-"dirty" windows usually don't need to have their data updated
   _dirtyWindows: {},
 
   // collection of session states yet to be restored
   _statesToRestore: {},
@@ -374,16 +372,21 @@ SessionStoreService.prototype = {
 
           // make sure that at least the first window doesn't have anything hidden
           delete this._initialState.windows[0].hidden;
           // Since nothing is hidden in the first window, it cannot be a popup
           delete this._initialState.windows[0].isPopup;
           // We don't want to minimize and then open a window at startup.
           if (this._initialState.windows[0].sizemode == "minimized")
             this._initialState.windows[0].sizemode = "normal";
+          // clear any lastSessionWindowID attributes since those don't matter
+          // during normal restore
+          this._initialState.windows.forEach(function(aWindow) {
+            delete aWindow.__lastSessionWindowID;
+          });
         }
       }
       catch (ex) { debug("The session file is invalid: " + ex); }
     }
 
     if (this._resume_from_crash) {
       // create a backup if the session data file exists
       try {
@@ -545,27 +548,33 @@ SessionStoreService.prototype = {
       // quit-application notification so the browser is about to exit.
       if (this._loadState == STATE_QUITTING)
         return;
       this._lastSessionState = null;
       let openWindows = {};
       this._forEachBrowserWindow(function(aWindow) {
         Array.forEach(aWindow.gBrowser.tabs, function(aTab) {
           delete aTab.linkedBrowser.__SS_data;
+          delete aTab.linkedBrowser.__SS_tabStillLoading;
+          delete aTab.linkedBrowser.__SS_formDataSaved;
+          delete aTab.linkedBrowser.__SS_hostSchemeData;
           if (aTab.linkedBrowser.__SS_restoreState)
             this._resetTabRestoringState(aTab);
         });
         openWindows[aWindow.__SSi] = true;
       });
       // also clear all data about closed tabs and windows
       for (let ix in this._windows) {
-        if (ix in openWindows)
+        if (ix in openWindows) {
           this._windows[ix]._closedTabs = [];
-        else
+        }
+        else {
           delete this._windows[ix];
+          delete this._internalWindows[ix];
+        }
       }
       // also clear all data about closed windows
       this._closedWindows = [];
       // give the tabbrowsers a chance to clear their histories first
       var win = this._getMostRecentBrowserWindow();
       if (win)
         win.setTimeout(function() { _this.saveState(true); }, 0);
       else if (this._loadState == STATE_RUNNING)
@@ -792,16 +801,20 @@ SessionStoreService.prototype = {
         this._loadState == STATE_QUITTING)
       return;
 
     // assign it a unique identifier (timestamp)
     aWindow.__SSi = "window" + Date.now();
 
     // and create its data object
     this._windows[aWindow.__SSi] = { tabs: [], selected: 0, _closedTabs: [], busy: false };
+
+    // and create its internal data object
+    this._internalWindows[aWindow.__SSi] = { hosts: {} }
+
     if (!this._isWindowLoaded(aWindow))
       this._windows[aWindow.__SSi]._restoring = true;
     if (!aWindow.toolbar.visible)
       this._windows[aWindow.__SSi].isPopup = true;
     
     // perform additional initialization when the first window is loading
     if (this._loadState == STATE_STOPPED) {
       this._loadState = STATE_RUNNING;
@@ -963,17 +976,19 @@ SessionStoreService.prototype = {
     if (this._loadState == STATE_RUNNING) { // window not closed during a regular shut-down 
       // update all window data for a last time
       this._collectWindowData(aWindow);
       
       if (isFullyLoaded) {
         winData.title = aWindow.content.document.title || tabbrowser.selectedTab.label;
         winData.title = this._replaceLoadingTitle(winData.title, tabbrowser,
                                                   tabbrowser.selectedTab);
-        this._updateCookies([winData]);
+        let windows = {};
+        windows[aWindow.__SSi] = winData;
+        this._updateCookies(windows);
       }
 
 #ifndef XP_MACOSX
       // Until we decide otherwise elsewhere, this window is part of a series
       // of closing windows to quit.
       winData._shouldRestore = true;
 #endif
 
@@ -984,16 +999,17 @@ SessionStoreService.prototype = {
         delete winData.busy;
 
         this._closedWindows.unshift(winData);
         this._capClosedWindows();
       }
       
       // clear this window from the list
       delete this._windows[aWindow.__SSi];
+      delete this._internalWindows[aWindow.__SSi];
       
       // save the state without this window to disk
       this.saveStateDelayed();
     }
     
     for (let i = 0; i < tabbrowser.tabs.length; i++) {
       this.onTabRemove(aWindow, tabbrowser.tabs[i], true);
     }
@@ -1041,16 +1057,19 @@ SessionStoreService.prototype = {
     let browser = aTab.linkedBrowser;
     browser.removeEventListener("load", this, true);
     browser.removeEventListener("pageshow", this, true);
     browser.removeEventListener("change", this, true);
     browser.removeEventListener("input", this, true);
     browser.removeEventListener("DOMAutoComplete", this, true);
 
     delete browser.__SS_data;
+    delete browser.__SS_tabStillLoading;
+    delete browser.__SS_formDataSaved;
+    delete browser.__SS_hostSchemeData;
 
     // If this tab was in the middle of restoring or still needs to be restored,
     // we need to reset that state. If the tab was restoring, we will attempt to
     // restore the next tab.
     let previousState;
     if (previousState = browser.__SS_restoreState) {
       this._resetTabRestoringState(aTab);
       if (previousState == TAB_STATE_RESTORING)
@@ -1120,33 +1139,35 @@ SessionStoreService.prototype = {
     // overwriting tabs). We want to return early if the tab hasn't been restored yet.
     if ((aEvent.type != "load" && !aEvent.persisted) ||
         (aBrowser.__SS_restoreState &&
          aBrowser.__SS_restoreState == TAB_STATE_NEEDS_RESTORE)) {
       return;
     }
     
     delete aBrowser.__SS_data;
+    delete aBrowser.__SS_tabStillLoading;
+    delete aBrowser.__SS_formDataSaved;
     this.saveStateDelayed(aWindow);
     
     // attempt to update the current URL we send in a crash report
     this._updateCrashReportURL(aWindow);
   },
 
   /**
    * Called when a browser sends the "input" notification 
    * @param aWindow
    *        Window reference
    * @param aBrowser
    *        Browser reference
    */
   onTabInput: function sss_onTabInput(aWindow, aBrowser) {
-    if (aBrowser.__SS_data)
-      delete aBrowser.__SS_data._formDataSaved;
-    
+    // deleting __SS_formDataSaved will cause us to recollect form data
+    delete aBrowser.__SS_formDataSaved;
+
     this.saveStateDelayed(aWindow, 3000);
   },
 
   /**
    * When a tab is selected, save session data
    * @param aWindow
    *        Window reference
    */
@@ -1703,17 +1724,17 @@ SessionStoreService.prototype = {
    */
   _collectTabData: function sss_collectTabData(aTab, aFullData) {
     var tabData = { entries: [] };
     var browser = aTab.linkedBrowser;
     
     if (!browser || !browser.currentURI)
       // can happen when calling this function right after .addTab()
       return tabData;
-    else if (browser.__SS_data && browser.__SS_data._tabStillLoading) {
+    else if (browser.__SS_data && browser.__SS_tabStillLoading) {
       // use the data to be restored when the tab hasn't been completely loaded
       tabData = browser.__SS_data;
       if (aTab.pinned)
         tabData.pinned = true;
       else
         delete tabData.pinned;
       tabData.hidden = aTab.hidden;
 
@@ -1738,20 +1759,21 @@ SessionStoreService.prototype = {
     if (history && browser.__SS_data &&
         browser.__SS_data.entries[history.index] &&
         browser.__SS_data.entries[history.index].url == browser.currentURI.spec &&
         history.index < this._sessionhistory_max_entries - 1 && !aFullData) {
       tabData = browser.__SS_data;
       tabData.index = history.index + 1;
     }
     else if (history && history.count > 0) {
+      browser.__SS_hostSchemeData = [];
       try {
         for (var j = 0; j < history.count; j++) {
           let entry = this._serializeHistoryEntry(history.getEntryAtIndex(j, false),
-                                                  aFullData, aTab.pinned);
+                                                  aFullData, aTab.pinned, browser.__SS_hostSchemeData);
           tabData.entries.push(entry);
         }
         // If we make it through the for loop, then we're ok and we should clear
         // any indicator of brokenness.
         delete aTab.__SS_broken_history;
       }
       catch (ex) {
         // In some cases, getEntryAtIndex will throw. This seems to be due to
@@ -1830,25 +1852,26 @@ SessionStoreService.prototype = {
    * Get an object that is a serialized representation of a History entry
    * Used for data storage
    * @param aEntry
    *        nsISHEntry instance
    * @param aFullData
    *        always return privacy sensitive data (use with care)
    * @param aIsPinned
    *        the tab is pinned and should be treated differently for privacy
+   * @param aHostSchemeData
+   *        an array of objects with host & scheme keys
    * @returns object
    */
   _serializeHistoryEntry:
-    function sss_serializeHistoryEntry(aEntry, aFullData, aIsPinned) {
+    function sss_serializeHistoryEntry(aEntry, aFullData, aIsPinned, aHostSchemeData) {
     var entry = { url: aEntry.URI.spec };
 
     try {
-      entry._host = aEntry.URI.host;
-      entry._scheme = aEntry.URI.scheme;
+      aHostSchemeData.push({ host: aEntry.URI.host, scheme: aEntry.URI.scheme });
     }
     catch (ex) {
       // We just won't attempt to get cookies for this entry.
     }
 
     if (aEntry.title && aEntry.title != entry.url) {
       entry.title = aEntry.title;
     }
@@ -1941,17 +1964,17 @@ SessionStoreService.prototype = {
     }
     
     if (aEntry.childCount > 0) {
       entry.children = [];
       for (var i = 0; i < aEntry.childCount; i++) {
         var child = aEntry.GetChildAt(i);
         if (child) {
           entry.children.push(this._serializeHistoryEntry(child, aFullData,
-                                                          aIsPinned));
+                                                          aIsPinned, aHostSchemeData));
         }
         else { // to maintain the correct frame order, insert a dummy entry 
           entry.children.push({ url: "about:blank" });
         }
         // don't try to restore framesets containing wyciwyg URLs (cf. bug 424689 and bug 450595)
         if (/^wyciwyg:\/\//.test(entry.children[i].url)) {
           delete entry.children;
           break;
@@ -2039,17 +2062,17 @@ SessionStoreService.prototype = {
    * and innerHTML content of WYSIWYG editors
    * @param aWindow
    *        Window reference
    */
   _updateTextAndScrollData: function sss_updateTextAndScrollData(aWindow) {
     var browsers = aWindow.gBrowser.browsers;
     this._windows[aWindow.__SSi].tabs.forEach(function (tabData, i) {
       if (browsers[i].__SS_data &&
-          browsers[i].__SS_data._tabStillLoading)
+          browsers[i].__SS_tabStillLoading)
         return; // ignore incompletely initialized tabs
       try {
         this._updateTextAndScrollDataForTab(aWindow, browsers[i], tabData);
       }
       catch (ex) { debug(ex); } // get as much data as possible, ignore failures (might succeed the next time)
     }, this);
   },
 
@@ -2076,19 +2099,19 @@ SessionStoreService.prototype = {
                             this._getSelectedPageStyle(aBrowser.contentWindow);
     if (selectedPageStyle)
       aTabData.pageStyle = selectedPageStyle;
     else if (aTabData.pageStyle)
       delete aTabData.pageStyle;
     
     this._updateTextAndScrollDataForFrame(aWindow, aBrowser.contentWindow,
                                           aTabData.entries[tabIndex],
-                                          !aTabData._formDataSaved, aFullData,
+                                          !aBrowser.__SS_formDataSaved, aFullData,
                                           !!aTabData.pinned);
-    aTabData._formDataSaved = true;
+    aBrowser.__SS_formDataSaved = true;
     if (aBrowser.currentURI.spec == "about:config")
       aTabData.entries[tabIndex].formdata = {
         "#textbox": aBrowser.contentDocument.getElementById("textbox").value
       };
   },
 
   /**
    * go through all subframes and store all form data, the current
@@ -2255,108 +2278,133 @@ SessionStoreService.prototype = {
    * @param aHosts
    *        the hash that will be used to store hosts eg, { hostname: true }
    * @param aCheckPrivacy
    *        should we check the privacy level for https
    * @param aIsPinned
    *        is the entry we're evaluating for a pinned tab; used only if
    *        aCheckPrivacy
    */
-  _extractHostsForCookies:
-    function sss__extractHostsForCookies(aEntry, aHosts, aCheckPrivacy, aIsPinned) {
+  _extractHostsForCookiesFromEntry:
+    function sss__extractHostsForCookiesFromEntry(aEntry, aHosts, aCheckPrivacy, aIsPinned) {
 
     let host = aEntry._host,
         scheme = aEntry._scheme;
 
     // If host & scheme aren't defined, then we are likely here in the startup
     // process via _splitCookiesFromWindow. In that case, we'll turn aEntry.url
     // into an nsIURI and get host/scheme from that. This will throw for about:
     // urls in which case we don't need to do anything.
     if (!host && !scheme) {
       try {
         let uri = this._getURIFromString(aEntry.url);
         host = uri.host;
         scheme = uri.scheme;
+        this._extractHostsForCookiesFromHostScheme(host, scheme, aHosts, aCheckPrivacy, aIsPinned);
       }
       catch(ex) { }
     }
 
-    // host and scheme may not be set (for about: urls for example), in which
-    // case testing scheme will be sufficient.
-    if (/https?/.test(scheme) && !aHosts[host] &&
-        (!aCheckPrivacy ||
-         this._checkPrivacyLevel(scheme == "https", aIsPinned))) {
-      // By setting this to true or false, we can determine when looking at
-      // the host in _updateCookies if we should check for privacy.
-      aHosts[host] = aIsPinned;
-    }
-    else if (scheme == "file") {
-      aHosts[host] = true;
-    }
-
     if (aEntry.children) {
       aEntry.children.forEach(function(entry) {
-        this._extractHostsForCookies(entry, aHosts, aCheckPrivacy, aIsPinned);
+        this._extractHostsForCookiesFromEntry(entry, aHosts, aCheckPrivacy, aIsPinned);
       }, this);
     }
   },
 
   /**
+   * extract the base domain from a host & scheme
+   * @param aHost
+   *        the host of a uri (usually via nsIURI.host)
+   * @param aScheme
+   *        the scheme of a uri (usually via nsIURI.scheme)
+   * @param aHosts
+   *        the hash that will be used to store hosts eg, { hostname: true }
+   * @param aCheckPrivacy
+   *        should we check the privacy level for https
+   * @param aIsPinned
+   *        is the entry we're evaluating for a pinned tab; used only if
+   *        aCheckPrivacy
+   */
+  _extractHostsForCookiesFromHostScheme:
+    function sss__extractHostsForCookiesFromHostScheme(aHost, aScheme, aHosts, aCheckPrivacy, aIsPinned) {
+    // host and scheme may not be set (for about: urls for example), in which
+    // case testing scheme will be sufficient.
+    if (/https?/.test(aScheme) && !aHosts[aHost] &&
+        (!aCheckPrivacy ||
+         this._checkPrivacyLevel(aScheme == "https", aIsPinned))) {
+      // By setting this to true or false, we can determine when looking at
+      // the host in _updateCookies if we should check for privacy.
+      aHosts[aHost] = aIsPinned;
+    }
+    else if (aScheme == "file") {
+      aHosts[aHost] = true;
+    }
+  },
+
+  /**
    * store all hosts for a URL
    * @param aWindow
    *        Window reference
    */
   _updateCookieHosts: function sss_updateCookieHosts(aWindow) {
-    var hosts = this._windows[aWindow.__SSi]._hosts = {};
-
-    this._windows[aWindow.__SSi].tabs.forEach(function(aTabData) {
-      aTabData.entries.forEach(function(entry) {
-        this._extractHostsForCookies(entry, hosts, true, !!aTabData.pinned);
-      }, this);
-    }, this);
+    var hosts = this._internalWindows[aWindow.__SSi].hosts = {};
+
+    // Since _updateCookiesHosts is only ever called for open windows during a
+    // session, we can call into _extractHostsForCookiesFromHostScheme directly
+    // using data that is attached to each browser.
+    for (let i = 0; i < aWindow.gBrowser.tabs.length; i++) {
+      let tab = aWindow.gBrowser.tabs[i];
+      let hostSchemeData = tab.linkedBrowser.__SS_hostSchemeData || [];
+      for (let j = 0; j < hostSchemeData.length; j++) {
+        this._extractHostsForCookiesFromHostScheme(hostSchemeData[j].host,
+                                                   hostSchemeData[j].scheme,
+                                                   hosts, true, tab.pinned);
+      }
+    }
   },
 
   /**
    * Serialize cookie data
    * @param aWindows
-   *        array of Window references
+   *        JS object containing window data references
+   *        { id: winData, etc. }
    */
   _updateCookies: function sss_updateCookies(aWindows) {
     function addCookieToHash(aHash, aHost, aPath, aName, aCookie) {
       // lazily build up a 3-dimensional hash, with
       // aHost, aPath, and aName as keys
       if (!aHash[aHost])
         aHash[aHost] = {};
       if (!aHash[aHost][aPath])
         aHash[aHost][aPath] = {};
       aHash[aHost][aPath][aName] = aCookie;
     }
 
-    // collect the cookies per window
-    for (var i = 0; i < aWindows.length; i++)
-      aWindows[i].cookies = [];
-
     var jscookies = {};
     var _this = this;
     // MAX_EXPIRY should be 2^63-1, but JavaScript can't handle that precision
     var MAX_EXPIRY = Math.pow(2, 62);
-    aWindows.forEach(function(aWindow) {
-      if (!aWindow._hosts)
+
+    for (let [id, window] in Iterator(aWindows)) {
+      window.cookies = [];
+      let internalWindow = this._internalWindows[id];
+      if (!internalWindow.hosts)
         return;
-      for (var [host, isPinned] in Iterator(aWindow._hosts)) {
+      for (var [host, isPinned] in Iterator(internalWindow.hosts)) {
         let list;
         try {
           list = CookieSvc.getCookiesFromHost(host);
         }
         catch (ex) {
           debug("getCookiesFromHost failed. Host: " + host);
         }
         while (list && list.hasMoreElements()) {
           var cookie = list.getNext().QueryInterface(Ci.nsICookie2);
-          // aWindow._hosts will only have hosts with the right privacy rules,
+          // window._hosts will only have hosts with the right privacy rules,
           // so there is no need to do anything special with this call to
           // _checkPrivacyLevel.
           if (cookie.isSession && _this._checkPrivacyLevel(cookie.isSecure, isPinned)) {
             // use the cookie's host, path, and name as keys into a hash,
             // to make sure we serialize each cookie only once
             if (!(cookie.host in jscookies &&
                   cookie.path in jscookies[cookie.host] &&
                   cookie.name in jscookies[cookie.host][cookie.path])) {
@@ -2365,26 +2413,25 @@ SessionStoreService.prototype = {
               if (cookie.path) jscookie.path = cookie.path;
               if (cookie.name) jscookie.name = cookie.name;
               if (cookie.isSecure) jscookie.secure = true;
               if (cookie.isHttpOnly) jscookie.httponly = true;
               if (cookie.expiry < MAX_EXPIRY) jscookie.expiry = cookie.expiry;
 
               addCookieToHash(jscookies, cookie.host, cookie.path, cookie.name, jscookie);
             }
-            aWindow.cookies.push(jscookies[cookie.host][cookie.path][cookie.name]);
+            window.cookies.push(jscookies[cookie.host][cookie.path][cookie.name]);
           }
         }
       }
-    });
-
-    // don't include empty cookie sections
-    for (i = 0; i < aWindows.length; i++)
-      if (aWindows[i].cookies.length == 0)
-        delete aWindows[i].cookies;
+
+      // don't include empty cookie sections
+      if (!window.cookies.length)
+        delete window.cookies;
+    }
   },
 
   /**
    * Store window dimensions, visibility, sidebar
    * @param aWindow
    *        Window reference
    */
   _updateWindowFeatures: function sss_updateWindowFeatures(aWindow) {
@@ -2433,28 +2480,29 @@ SessionStoreService.prototype = {
         else { // always update the window features (whose change alone never triggers a save operation)
           this._updateWindowFeatures(aWindow);
         }
       });
       this._dirtyWindows = [];
     }
     
     // collect the data for all windows
-    var total = [], windows = [];
+    var total = [], windows = {}, ids = [];
     var nonPopupCount = 0;
     var ix;
     for (ix in this._windows) {
       if (this._windows[ix]._restoring) // window data is still in _statesToRestore
         continue;
       total.push(this._windows[ix]);
-      windows.push(ix);
+      ids.push(ix);
+      windows[ix] = this._windows[ix];
       if (!this._windows[ix].isPopup)
         nonPopupCount++;
     }
-    this._updateCookies(total);
+    this._updateCookies(windows);
 
     // collect the data for all windows yet to be restored
     for (ix in this._statesToRestore) {
       for each (let winData in this._statesToRestore[ix].windows) {
         total.push(winData);
         if (!winData.isPopup)
           nonPopupCount++;
       }
@@ -2495,17 +2543,17 @@ SessionStoreService.prototype = {
         return null;
 
       lastClosedWindowsCopy = [];
     }
 
     if (activeWindow) {
       this.activeWindowSSiCache = activeWindow.__SSi || "";
     }
-    ix = windows.indexOf(this.activeWindowSSiCache);
+    ix = ids.indexOf(this.activeWindowSSiCache);
     // We don't want to restore focus to a minimized window or a window which had all its
     // tabs stripped out (doesn't exist).
     if (ix != -1 && total[ix] && total[ix].sizemode == "minimized")
       ix = -1;
 
     let session = {
       state: this._loadState == STATE_RUNNING ? STATE_RUNNING_STR : STATE_STOPPED_STR,
       lastUpdate: Date.now(),
@@ -2534,20 +2582,22 @@ SessionStoreService.prototype = {
   _getWindowState: function sss_getWindowState(aWindow) {
     if (!this._isWindowLoaded(aWindow))
       return this._statesToRestore[aWindow.__SS_restoreID];
     
     if (this._loadState == STATE_RUNNING) {
       this._collectWindowData(aWindow);
     }
     
-    var total = [this._windows[aWindow.__SSi]];
-    this._updateCookies(total);
+    var winData = this._windows[aWindow.__SSi];
+    let windows = {};
+    windows[aWindow.__SSi] = winData;
+    this._updateCookies(windows);
     
-    return { windows: total };
+    return { windows: [winData] };
   },
 
   _collectWindowData: function sss_collectWindowData(aWindow) {
     if (!this._isWindowLoaded(aWindow))
       return;
     
     // update the internal state data for this window
     this._saveWindowHistory(aWindow);
@@ -2859,17 +2909,17 @@ SessionStoreService.prototype = {
       if (tabData.hidden)
         tabbrowser.hideTab(tab);
       else
         tabbrowser.showTab(tab);
 
       for (let name in tabData.attributes)
         this.xulAttributes[name] = true;
 
-      tabData._tabStillLoading = true;
+      browser.__SS_tabStillLoading = true;
 
       // keep the data around to prevent dataloss in case
       // a tab gets closed before it's been properly restored
       browser.__SS_data = tabData;
       browser.__SS_restoreState = TAB_STATE_NEEDS_RESTORE;
       tab.setAttribute("pending", "true");
 
       // Make sure that set/getTabValue will set/read the correct data by
@@ -2926,17 +2976,17 @@ SessionStoreService.prototype = {
    * @param aTabData
    *        Array of tab data
    * @param aIdMap
    *        Hash for ensuring unique frame IDs
    */
   restoreHistory:
     function sss_restoreHistory(aWindow, aTabs, aTabData, aIdMap, aDocIdentMap) {
     var _this = this;
-    while (aTabs.length > 0 && (!aTabData[0]._tabStillLoading || !aTabs[0].parentNode)) {
+    while (aTabs.length > 0 && (!aTabs[0].linkedBrowser.__SS_tabStillLoading || !aTabs[0].parentNode)) {
       aTabs.shift(); // this tab got removed before being completely restored
       aTabData.shift();
     }
     if (aTabs.length == 0) {
       // At this point we're essentially ready for consumers to read/write data
       // via the sessionstore API so we'll send the SSWindowStateReady event.
       this._setWindowStateReady(aWindow);
       return; // no more tabs to restore
@@ -3322,41 +3372,63 @@ SessionStoreService.prototype = {
         if (!hasExpectedURL(aDocument, aURL))
           return;
 
         let node = key.charAt(0) == "#" ? aDocument.getElementById(key.slice(1)) :
                                           XPathHelper.resolve(aDocument, key);
         if (!node)
           continue;
 
+        let eventType;
         let value = aData[key];
         if (typeof value == "string" && node.type != "file") {
           if (node.value == value)
             continue; // don't dispatch an input event for no change
 
           node.value = value;
-
-          let event = aDocument.createEvent("UIEvents");
-          event.initUIEvent("input", true, true, aDocument.defaultView, 0);
-          node.dispatchEvent(event);
+          eventType = "input";
         }
-        else if (typeof value == "boolean")
+        else if (typeof value == "boolean") {
+          if (node.checked == value)
+            continue; // don't dispatch a change event for no change
+
           node.checked = value;
-        else if (typeof value == "number")
+          eventType = "change";
+        }
+        else if (typeof value == "number") {
+          // We saved the value blindly since selects take more work to determine
+          // default values. So now we should check to avoid unnecessary events.
+          if (node.selectedIndex == value)
+            continue;
+
           try {
             node.selectedIndex = value;
+            eventType = "change";
           } catch (ex) { /* throws for invalid indices */ }
-        else if (value && value.fileList && value.type == "file" && node.type == "file")
+        }
+        else if (value && value.fileList && value.type == "file" && node.type == "file") {
           node.mozSetFileNameArray(value.fileList, value.fileList.length);
+          eventType = "input";
+        }
         else if (value && typeof value.indexOf == "function" && node.options) {
           Array.forEach(node.options, function(aOpt, aIx) {
             aOpt.selected = value.indexOf(aIx) > -1;
+
+            // Only fire the event here if this wasn't selected by default
+            if (!aOpt.defaultSelected)
+              eventType = "change";
           });
         }
-        // NB: dispatching "change" events might have unintended side-effects
+
+        // Fire events for this node if applicable
+        if (eventType) {
+          let event = aDocument.createEvent("UIEvents");
+          event.initUIEvent(eventType, true, true, aDocument.defaultView, 0);
+          node.dispatchEvent(event);
+        }
       }
     }
 
     let selectedPageStyle = aBrowser.__SS_restore_pageStyle;
     function restoreTextDataAndScrolling(aContent, aData, aPrefix) {
       if (aData.formdata)
         restoreFormData(aContent.document, aData.formdata, aData.url);
       if (aData.innerHTML) {
@@ -3558,16 +3630,17 @@ SessionStoreService.prototype = {
 
 #ifndef XP_MACOSX
     // We want to restore closed windows that are marked with _shouldRestore.
     // We're doing this here because we want to control this only when saving
     // the file.
     while (oState._closedWindows.length) {
       let i = oState._closedWindows.length - 1;
       if (oState._closedWindows[i]._shouldRestore) {
+        delete oState._closedWindows[i]._shouldRestore;
         oState.windows.unshift(oState._closedWindows.pop());
       }
       else {
         // We only need to go until we hit !needsRestore since we're going in reverse
         break;
       }
     }
 #endif
@@ -4026,17 +4099,17 @@ SessionStoreService.prototype = {
     function sss__splitCookiesFromWindow(aWinState, aTargetWinState) {
     if (!aWinState.cookies || !aWinState.cookies.length)
       return;
 
     // Get the hosts for history entries in aTargetWinState
     let cookieHosts = {};
     aTargetWinState.tabs.forEach(function(tab) {
       tab.entries.forEach(function(entry) {
-        this._extractHostsForCookies(entry, cookieHosts, false)
+        this._extractHostsForCookiesFromEntry(entry, cookieHosts, false);
       }, this);
     }, this);
 
     // By creating a regex we reduce overhead and there is only one loop pass
     // through either array (cookieHosts and aWinState.cookies).
     let hosts = Object.keys(cookieHosts).join("|").replace("\\.", "\\.", "g");
     // If we don't actually have any hosts, then we don't want to do anything.
     if (!hosts.length)
@@ -4057,28 +4130,17 @@ SessionStoreService.prototype = {
    * (see http://www.json.org/ for more information).
    *
    * The inverse operation consists of JSON.parse(JSON_string).
    *
    * @param aJSObject is the object to be converted
    * @returns the object's JSON representation
    */
   _toJSONString: function sss_toJSONString(aJSObject) {
-    // We never want to save __lastSessionWindowID across sessions, but we do
-    // want it exported to consumers when running (eg. Private Browsing).
-    let internalKeys = INTERNAL_KEYS;
-    if (this._loadState == STATE_QUITTING) {
-      internalKeys = internalKeys.slice();
-      internalKeys.push("__lastSessionWindowID");
-    }
-    function exclude(key, value) {
-      // returning undefined results in the exclusion of that key
-      return internalKeys.indexOf(key) == -1 ? value : undefined;
-    }
-    return JSON.stringify(aJSObject, exclude);
+    return JSON.stringify(aJSObject);
   },
 
   _sendRestoreCompletedNotifications: function sss_sendRestoreCompletedNotifications() {
     // not all windows restored, yet
     if (this._restoreCount > 1) {
       this._restoreCount--;
       return;
     }
--- a/browser/components/sessionstore/test/browser/Makefile.in
+++ b/browser/components/sessionstore/test/browser/Makefile.in
@@ -45,16 +45,18 @@ relativesrcdir  = browser/components/ses
 include $(DEPTH)/config/autoconf.mk
 include $(topsrcdir)/config/rules.mk
 
 # browser_506482.js is disabled because of frequent failures (bug 538672)
 # browser_526613.js is disabled because of frequent failures (bug 534489)
 
 _BROWSER_TEST_FILES = \
 	head.js \
+	browser_form_restore_events.js \
+	browser_form_restore_events_sample.html \
 	browser_248970_a.js \
 	browser_248970_b.js \
 	browser_248970_b_sample.html \
 	browser_339445.js \
 	browser_339445_sample.html \
 	browser_345898.js \
 	browser_346337.js \
 	browser_346337_sample.html \
@@ -93,18 +95,16 @@ include $(topsrcdir)/config/rules.mk
 	browser_464620_a.html \
 	browser_464620_b.js \
 	browser_464620_b.html \
 	browser_464620_xd.html \
 	browser_465215.js \
 	browser_465223.js \
 	browser_466937.js \
 	browser_466937_sample.html \
-	browser_476161.js \
-	browser_476161_sample.html \
 	browser_477657.js \
 	browser_480148.js \
 	browser_480893.js \
 	browser_483330.js \
 	browser_485482.js \
 	browser_485482_sample.html \
 	browser_485563.js \
 	browser_490040.js \
--- a/browser/components/sessionstore/test/browser/browser_579868.js
+++ b/browser/components/sessionstore/test/browser/browser_579868.js
@@ -45,17 +45,17 @@ function test() {
 
     // Tell the session storer that the tab is pinned
     let newTabState = '{"entries":[{"url":"about:robots"}],"pinned":true,"userTypedValue":"Hello World!"}';
     ss.setTabState(tab1, newTabState);
 
     // Undo pinning
     gBrowser.unpinTab(tab1);
 
-    is(tab1.linkedBrowser.__SS_data._tabStillLoading, true, 
+    is(tab1.linkedBrowser.__SS_tabStillLoading, true,
        "_tabStillLoading should be true.");
 
     // Close and restore tab
     gBrowser.removeTab(tab1);
     let savedState = JSON.parse(ss.getClosedTabData(window))[0].state;
     isnot(savedState.pinned, true, "Pinned should not be true");
     tab1 = ss.undoCloseTab(window, 0);
 
rename from browser/components/sessionstore/test/browser/browser_476161.js
rename to browser/components/sessionstore/test/browser/browser_form_restore_events.js
--- a/browser/components/sessionstore/test/browser/browser_476161.js
+++ b/browser/components/sessionstore/test/browser/browser_form_restore_events.js
@@ -30,39 +30,70 @@
  * 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() {
-  /** Test for Bug 476161 **/
-  
+  /** Originally a test for Bug 476161, but then expanded to include all input types in bug 640136 **/
+
   waitForExplicitFinish();
-  
+
+  let file = Components.classes["@mozilla.org/file/directory_service;1"]
+             .getService(Components.interfaces.nsIProperties)
+             .get("TmpD", Components.interfaces.nsIFile);
+
   let testURL = "http://mochi.test:8888/browser/" +
-    "browser/components/sessionstore/test/browser/browser_476161_sample.html";
+    "browser/components/sessionstore/test/browser/browser_form_restore_events_sample.html";
   let tab = gBrowser.addTab(testURL);
   tab.linkedBrowser.addEventListener("load", function(aEvent) {
     tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
     let doc = tab.linkedBrowser.contentDocument;
-    
-    doc.getElementById("modify1").value += Math.random();
-    doc.getElementById("modify2").value += " " + Date.now();
-    
+
+    // text fields
+    doc.getElementById("modify01").value += Math.random();
+    doc.getElementById("modify02").value += " " + Date.now();
+
+    // textareas
+    doc.getElementById("modify03").value += Math.random();
+    doc.getElementById("modify04").value += " " + Date.now();
+
+    // file
+    doc.getElementById("modify05").value = file.path;
+
+    // select
+    doc.getElementById("modify06").selectedIndex = 1;
+    var multipleChange = doc.getElementById("modify07");
+    Array.forEach(multipleChange.options, function(option) option.selected = true);
+
+    // checkbox
+    doc.getElementById("modify08").checked = true;
+    doc.getElementById("modify09").checked = false;
+
+    // radio
+    // select one then another in the same group - only last one should get event on restore
+    doc.getElementById("modify10").checked = true;
+    doc.getElementById("modify11").checked = true;
+
+
     let tab2 = gBrowser.duplicateTab(tab);
     tab2.linkedBrowser.addEventListener("load", function(aEvent) {
       tab2.linkedBrowser.removeEventListener("load", arguments.callee, true);
       let doc = tab2.linkedBrowser.contentDocument;
-      let changed = doc.getElementById("changed").textContent.trim().split();
-      
-      is(changed.sort().join(" "), "modify1 modify2",
-         "input events were only dispatched for modified text fields");
-      
+      let inputFired = doc.getElementById("inputFired").textContent.trim().split();
+      let changeFired = doc.getElementById("changeFired").textContent.trim().split();
+
+      is(inputFired.sort().join(" "), "modify01 modify02 modify03 modify04 modify05",
+         "input events were only dispatched for modified input, textarea fields");
+
+      is(changeFired.sort().join(" "), "modify06 modify07 modify08 modify09 modify11",
+         "change events were only dispatched for modified select, checkbox, radio fields");
+
       // clean up
       gBrowser.removeTab(tab2);
       gBrowser.removeTab(tab);
-      
+
       finish();
     }, true);
   }, true);
 }
rename from browser/components/sessionstore/test/browser/browser_476161_sample.html
rename to browser/components/sessionstore/test/browser/browser_form_restore_events_sample.html
--- a/browser/components/sessionstore/test/browser/browser_476161_sample.html
+++ b/browser/components/sessionstore/test/browser/browser_form_restore_events_sample.html
@@ -1,24 +1,98 @@
 <!DOCTYPE html>
-<title>Test for bug 476161</title>
+<title>Test for form restore events (originally bug 476161)</title>
 
 <script>
 
 document.addEventListener("input", function(aEvent) {
   var inputEl = aEvent.originalTarget;
-  var changedEl = document.getElementById("changed");
-  
+  var changedEl = document.getElementById("inputFired");
+  changedEl.textContent += " " + inputEl.id;
+}, false);
+
+document.addEventListener("change", function(aEvent) {
+  var inputEl = aEvent.originalTarget;
+  var changedEl = document.getElementById("changeFired");
   changedEl.textContent += " " + inputEl.id;
 }, false);
 
 </script>
 
+<!-- input events -->
 <h3>Text fields with changed text</h3>
 <input type="text" id="modify1">
 <input type="text" id="modify2" value="preset value">
+<input type="text" id="modify01">
+<input type="text" id="modify02" value="preset value">
 
 <h3>Text fields with unchanged text</h3>
 <input type="text" id="unchanged1">
 <input type="text" id="unchanged2" value="preset value">
+<input type="text" id="unchanged01">
+<input type="text" id="unchanged02" value="preset value">
+
+<h3>Textarea with changed text</h3>
+<textarea id="modify03"></textarea>
+<textarea id="modify04">preset value</textarea>
+
+<h3>Textarea with unchanged text</h3>
+<textarea id="unchanged03"></textarea>
+<textarea id="unchanged04">preset value</textarea>
+
+<h3>file field with changed value</h3>
+<input type="file" id="modify05">
+
+<h3>file field with unchanged value</h3>
+<input type="file" id="unchanged05">
+
+<!-- change events -->
+
+<h3>Select menu with changed selection</h3>
+<select id="modify06">
+  <option value="one">one</option>
+  <option value="two">two</option>
+  <option value="three">three</option>
+</select>
+
+<h3>Select menu with unchanged selection (change event still fires)</h3>
+<select id="unchanged06">
+  <option value="one">one</option>
+  <option value="two" selected>two</option>
+  <option value="three">three</option>
+</select>
+
+<h3>Multiple Select menu with changed selection</h3>
+<select id="modify07" multiple>
+  <option value="one">one</option>
+  <option value="two" selected>two</option>
+  <option value="three">three</option>
+</select>
+
+<h3>Select menu with unchanged selection</h3>
+<select id="unchanged07" multiple>
+  <option value="one">one</option>
+  <option value="two" selected>two</option>
+  <option value="three" selected>three</option>
+</select>
+
+<h3>checkbox with changed value</h3>
+<input type="checkbox" id="modify08">
+<input type="checkbox" id="modify09" checked>
+
+<h3>checkbox with unchanged value</h3>
+<input type="checkbox" id="unchanged08">
+<input type="checkbox" id="unchanged09" checked>
+
+<h3>radio with changed value</h3>
+<input type="radio" id="modify10"  name="group">Radio 1</input>
+<input type="radio" id="modify11"  name="group">Radio 2</input>
+<input type="radio" id="modify12" name="group" checked>Radio 3</input>
+
+<h3>radio with unchanged value</h3>
+<input type="radio" id="unchanged10"  name="group2">Radio 4</input>
+<input type="radio" id="unchanged11"  name="group2">Radio 5</input>
+<input type="radio" id="unchanged12" name="group2" checked>Radio 6</input>
 
 <h3>Changed field IDs</h3>
 <div id="changed"></div>
+<div id="inputFired"></div>
+<div id="changeFired"></div>
--- a/browser/components/shell/public/nsIWindowsShellService.idl
+++ b/browser/components/shell/public/nsIWindowsShellService.idl
@@ -33,25 +33,18 @@
  * 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 ***** */
 
 #include "nsIShellService.idl"
 
-[scriptable, uuid(16e7e8da-8bef-4f41-be5f-045b2e9918e1)]
+[scriptable, uuid(89b0a761-d9a0-4c39-ab83-d81566459a31)]
 interface nsIWindowsShellService : nsIShellService
 {
-    /** 
-     * The number of unread mail messages for the current user.
-     * 
-     * @return The number of unread (new) mail messages for the current user.
-     */
-    readonly attribute unsigned long unreadMailCount;
-
     /**
      * Provides the shell service an opportunity to do some Win7+ shortcut
      * maintenance needed on initial startup of the browser.
      */
     void shortcutMaintenance();
 };
 
--- a/browser/components/shell/src/Makefile.in
+++ b/browser/components/shell/src/Makefile.in
@@ -39,17 +39,16 @@ DEPTH   = ../../../..
 topsrcdir = @top_srcdir@
 srcdir    = @srcdir@
 VPATH   = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 MODULE = shellservice
 FORCE_STATIC_LIB = 1
-FORCE_USE_PIC = 1
 ifndef MOZ_MEMORY
 USE_STATIC_LIBS = 1
 endif
 
 
 ifeq ($(OS_ARCH),WINNT)
 CPPSRCS = nsWindowsShellService.cpp
 else
--- a/browser/components/shell/src/nsMacShellService.cpp
+++ b/browser/components/shell/src/nsMacShellService.cpp
@@ -230,17 +230,18 @@ nsMacShellService::OnProgressChange(nsIW
                                     PRInt32 aMaxTotalProgress)
 {
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsMacShellService::OnLocationChange(nsIWebProgress* aWebProgress,
                                     nsIRequest* aRequest,
-                                    nsIURI* aLocation)
+                                    nsIURI* aLocation,
+                                    PRUint32 aFlags)
 {
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsMacShellService::OnStatusChange(nsIWebProgress* aWebProgress,
                                   nsIRequest* aRequest,
                                   nsresult aStatus,
--- a/browser/components/shell/src/nsWindowsShellService.cpp
+++ b/browser/components/shell/src/nsWindowsShellService.cpp
@@ -799,76 +799,16 @@ nsWindowsShellService::SetDesktopBackgro
   }
   
   // Close the key we opened.
   ::RegCloseKey(key);
   return NS_OK;
 }
 
 NS_IMETHODIMP
-nsWindowsShellService::GetUnreadMailCount(PRUint32* aCount)
-{
-  *aCount = 0;
-
-  HKEY accountKey;
-  if (GetMailAccountKey(&accountKey)) {
-    DWORD type, unreadCount;
-    DWORD len = sizeof unreadCount;
-    DWORD res = ::RegQueryValueExW(accountKey, L"MessageCount", 0,
-                                   &type, (LPBYTE)&unreadCount, &len);
-    if (REG_SUCCEEDED(res))
-      *aCount = unreadCount;
-
-    // Close the key we opened.
-    ::RegCloseKey(accountKey);
-  }
-
-  return NS_OK;
-}
-
-bool
-nsWindowsShellService::GetMailAccountKey(HKEY* aResult)
-{
-  NS_NAMED_LITERAL_STRING(unread,
-    "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\UnreadMail\\");
-
-  HKEY mailKey;
-  DWORD res = ::RegOpenKeyExW(HKEY_CURRENT_USER, unread.get(), 0,
-                              KEY_ENUMERATE_SUB_KEYS, &mailKey);
-
-  PRInt32 i = 0;
-  do {
-    PRUnichar subkeyName[MAX_BUF];
-    DWORD len = sizeof subkeyName;
-    res = ::RegEnumKeyExW(mailKey, i++, subkeyName, &len, NULL, NULL,
-                          NULL, NULL);
-    if (REG_SUCCEEDED(res)) {
-      HKEY accountKey;
-      res = ::RegOpenKeyExW(mailKey, PromiseFlatString(subkeyName).get(),
-                            0, KEY_READ, &accountKey);
-      if (REG_SUCCEEDED(res)) {
-        *aResult = accountKey;
-    
-        // Close the key we opened.
-        ::RegCloseKey(mailKey);
-	 
-        return true;
-      }
-    }
-    else
-      break;
-  }
-  while (1);
-
-  // Close the key we opened.
-  ::RegCloseKey(mailKey);
-  return false;
-}
-
-NS_IMETHODIMP
 nsWindowsShellService::OpenApplicationWithURI(nsILocalFile* aApplication,
                                               const nsACString& aURI)
 {
   nsresult rv;
   nsCOMPtr<nsIProcess> process = 
     do_CreateInstance("@mozilla.org/process/util;1", &rv);
   if (NS_FAILED(rv))
     return rv;
--- a/browser/components/shell/src/nsWindowsShellService.h
+++ b/browser/components/shell/src/nsWindowsShellService.h
@@ -54,15 +54,13 @@ public:
 
   NS_DECL_ISUPPORTS
   NS_DECL_NSISHELLSERVICE
   NS_DECL_NSIWINDOWSSHELLSERVICE
 
 protected:
   bool      IsDefaultBrowserVista(bool* aIsDefaultBrowser);
 
-  bool      GetMailAccountKey(HKEY* aResult);
-
 private:
   bool      mCheckedThisSession;
 };
 
 #endif // nswindowsshellservice_h____
--- a/browser/components/sidebar/src/nsSidebar.js
+++ b/browser/components/sidebar/src/nsSidebar.js
@@ -106,21 +106,22 @@ function (aTitle, aContentURL, aCustomiz
     }
     catch(ex) { return; }
 
     win.PlacesUIUtils.showBookmarkDialog({ action: "add"
                                          , type: "bookmark"
                                          , hiddenRows: [ "description"
                                                        , "keyword"
                                                        , "location"
+                                                       , "folderPicker"
                                                        , "loadInSidebar" ]
                                          , uri: uri
                                          , title: aTitle
                                          , loadBookmarkInSidebar: true
-                                         }, win, true);
+                                         }, win);
 }
 
 nsSidebar.prototype.validateSearchEngine =
 function (engineURL, iconURL)
 {
   try
   {
     // Make sure the URLs are HTTP, HTTPS, or FTP.
new file mode 100644
--- /dev/null
+++ b/browser/config/mozconfigs/win32/vs2010-mozconfig
@@ -0,0 +1,12 @@
+export INCLUDE=/d/msvs10/vc/include:/d/msvs10/vc/atlmfc/include:/d/sdks/v7.0/include:/d/sdks/v7.0/include/atl:/d/msvs8/VC/PlatformSDK/include:/d/sdks/dx10/include
+export LIBPATH=/d/msvs10/vc/lib:/d/msvs10/vc/atlmfc/lib:/c/WINDOWS/Microsoft.NET/Framework/v2.0.50727
+export LIB=/d/msvs10/vc/lib:/d/msvs10/vc/atlmfc/lib:/d/sdks/v7.0/lib:/d/msvs8/VC/PlatformSDK/lib:/d/msvs8/SDK/v2.0/lib:/d/mozilla-build/atlthunk_compat:/d/sdks/dx10/lib/x86
+export PATH="/d/msvs10/VSTSDB/Deploy:/d/msvs10/Common7/IDE/:/d/msvs10/VC/BIN:/d/msvs10/Common7/Tools:/d/msvs10/VC/VCPackages:${PATH}"
+export WIN32_REDIST_DIR=/d/msvs10/VC/redist/x86/Microsoft.VC100.CRT
+
+
+mk_add_options "export LIB=$LIB"
+mk_add_options "export LIBPATH=$LIBPATH"
+mk_add_options "export PATH=$PATH"
+mk_add_options "export INCLUDE=$INCLUDE"
+mk_add_options "export WIN32_REDIST_DIR=$WIN32_REDIST_DIR"
--- a/browser/config/version.txt
+++ b/browser/config/version.txt
@@ -1,1 +1,1 @@
-10.0a1
+11.0a1
--- a/browser/devtools/highlighter/TreePanel.jsm
+++ b/browser/devtools/highlighter/TreePanel.jsm
@@ -222,17 +222,24 @@ TreePanel.prototype = {
   {
     let treeBox = null;
     let toolbar = this.IUI.toolbar.nextSibling; // Addons bar, typically
     let toolbarParent =
       this.IUI.browser.ownerDocument.getElementById("browser-bottombox");
     treeBox = this.document.createElement("vbox");
     treeBox.id = "inspector-tree-box";
     treeBox.state = "open"; // for the registerTools API.
-    treeBox.minHeight = 10;
+    try {
+      treeBox.height =
+        Services.prefs.getIntPref("devtools.inspector.htmlHeight");
+    } catch(e) {
+      treeBox.height = 112;
+    }
+                      
+    treeBox.minHeight = 64;
     treeBox.flex = 1;
     toolbarParent.insertBefore(treeBox, toolbar);
 
     this.IUI.toolbar.setAttribute("treepanel-open", "true");
 
     treeBox.appendChild(this.treeIFrame);
 
     let boundLoadedInitializeTreePanel = function loadedInitializeTreePanel()
@@ -257,16 +264,17 @@ TreePanel.prototype = {
    * Close the TreePanel.
    */
   close: function TP_close()
   {
     if (this.openInDock) {
       this.IUI.toolbar.removeAttribute("treepanel-open");
 
       let treeBox = this.container;
+      Services.prefs.setIntPref("devtools.inspector.htmlHeight", treeBox.height);
       let treeBoxParent = treeBox.parentNode;
       treeBoxParent.removeChild(treeBox);
     } else {
       this.container.hidePopup();
     }
 
     if (this.treePanelDiv) {
       this.treePanelDiv.ownerPanel = null;
--- a/browser/devtools/highlighter/inspector.jsm
+++ b/browser/devtools/highlighter/inspector.jsm
@@ -1344,20 +1344,34 @@ InspectorUI.prototype = {
   },
 
   /**
    * Open the CssRuleView.
    */
   openRuleView: function IUI_openRuleView()
   {
     let iframe = this.getToolIframe(this.ruleViewObject);
+    if (iframe.getAttribute("src")) {
+      // We're already loading this tool, let it finish.
+      return;
+    }
+
     let boundLoadListener = function() {
       iframe.removeEventListener("load", boundLoadListener, true);
       let doc = iframe.contentDocument;
-      this.ruleView = new CssRuleView(doc);
+
+      let winID = this.winID;
+      let ruleViewStore = this.store.getValue(winID, "ruleView");
+      if (!ruleViewStore) {
+        ruleViewStore = {};
+        this.store.setValue(winID, "ruleView", ruleViewStore);
+      }
+
+      this.ruleView = new CssRuleView(doc, ruleViewStore);
+
       this.boundRuleViewChanged = this.ruleViewChanged.bind(this);
       this.ruleView.element.addEventListener("CssRuleViewChanged",
                                              this.boundRuleViewChanged);
 
       doc.documentElement.appendChild(this.ruleView.element);
       this.ruleView.highlight(this.selection);
       Services.obs.notifyObservers(null,
         INSPECTOR_NOTIFICATIONS.RULEVIEWREADY, null);
--- a/browser/devtools/highlighter/test/Makefile.in
+++ b/browser/devtools/highlighter/test/Makefile.in
@@ -62,15 +62,17 @@ include $(topsrcdir)/config/rules.mk
 		browser_inspector_infobar.js \
 		browser_inspector_bug_690361.js \
 		browser_inspector_bug_672902_keyboard_shortcuts.js \
 		browser_inspector_keybindings.js \
 		browser_inspector_breadcrumbs.html \
 		browser_inspector_breadcrumbs.js \
 		browser_inspector_bug_699308_iframe_navigation.js \
         browser_inspector_changes.js \
+        browser_inspector_ruleviewstore.js \
+        browser_inspector_duplicate_ruleview.js \
 		$(NULL)
 
 # Disabled due to constant failures
 # 		browser_inspector_treePanel_click.js \
 
 libs::	$(_BROWSER_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir)
--- a/browser/devtools/highlighter/test/browser_inspector_breadcrumbs.js
+++ b/browser/devtools/highlighter/test/browser_inspector_breadcrumbs.js
@@ -1,14 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test()
 {
   waitForExplicitFinish();
+  ignoreAllUncaughtExceptions();
 
   let nodes = [
     {nodeId: "i1111", result: "i1 i11 i111 i1111"},
     {nodeId: "i22", result: "i2 i22 i221"},
     {nodeId: "i2111", result: "i2 i21 i211 i2111"},
     {nodeId: "i21", result: "i2 i21 i211 i2111"},
     {nodeId: "i22211", result: "i2 i22 i222 i2221 i22211"},
     {nodeId: "i22", result: "i2 i22 i222 i2221 i22211"},
new file mode 100644
--- /dev/null
+++ b/browser/devtools/highlighter/test/browser_inspector_duplicate_ruleview.js
@@ -0,0 +1,126 @@
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+
+let div;
+let tab1;
+let tab2;
+let tab1window;
+
+function inspectorTabOpen1()
+{
+  ok(window.InspectorUI, "InspectorUI variable exists");
+  ok(!InspectorUI.inspecting, "Inspector is not highlighting");
+  ok(InspectorUI.store.isEmpty(), "Inspector.store is empty");
+
+  Services.obs.addObserver(inspectorUIOpen1,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.OPENED, false);
+  InspectorUI.openInspectorUI();
+}
+
+function inspectorUIOpen1()
+{
+  Services.obs.removeObserver(inspectorUIOpen1,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.OPENED, false);
+
+  // Make sure the inspector is open.
+  ok(InspectorUI.inspecting, "Inspector is highlighting");
+  ok(!InspectorUI.treePanel.isOpen(), "Inspector Tree Panel is not open");
+  ok(!InspectorUI.isSidebarOpen, "Inspector Sidebar is not open");
+  ok(!InspectorUI.store.isEmpty(), "InspectorUI.store is not empty");
+  is(InspectorUI.store.length, 1, "Inspector.store.length = 1");
+
+  // Highlight a node.
+  div = content.document.getElementsByTagName("div")[0];
+  InspectorUI.inspectNode(div);
+  is(InspectorUI.selection, div, "selection matches the div element");
+
+  Services.obs.addObserver(inspectorRuleViewOpened,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.RULEVIEWREADY, false);
+
+  InspectorUI.showSidebar();
+  InspectorUI.openRuleView();
+}
+
+function inspectorRuleViewOpened() {
+  Services.obs.removeObserver(inspectorRuleViewOpened,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.RULEVIEWREADY);
+
+  // Open the second tab.
+  tab2 = gBrowser.addTab();
+  gBrowser.selectedTab = tab2;
+
+  gBrowser.selectedBrowser.addEventListener("load", function(evt) {
+    gBrowser.selectedBrowser.removeEventListener(evt.type, arguments.callee,
+      true);
+    waitForFocus(inspectorTabOpen2, content);
+  }, true);
+
+  content.location = "data:text/html,<p>tab 2: the inspector should close now";
+}
+
+function inspectorTabOpen2()
+{
+  // Make sure the inspector is closed.
+  ok(!InspectorUI.inspecting, "Inspector is not highlighting");
+  ok(!InspectorUI.treePanel, "Inspector Tree Panel is closed");
+  ok(!InspectorUI.isSidebarOpen, "Inspector Sidebar is not open");
+  is(InspectorUI.store.length, 1, "Inspector.store.length = 1");
+
+  Services.obs.addObserver(inspectorFocusTab1,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.RULEVIEWREADY, false);
+  // Switch back to tab 1.
+  executeSoon(function() {
+    gBrowser.selectedTab = tab1;
+  });
+}
+
+function inspectorFocusTab1()
+{
+  Services.obs.removeObserver(inspectorFocusTab1,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.RULEVIEWREADY, false);
+  Services.obs.addObserver(inspectorRuleTrap,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.RULEVIEWREADY, false);
+
+  // Make sure the inspector is open.
+  ok(InspectorUI.inspecting, "Inspector is highlighting");
+  ok(!InspectorUI.treePanel.isOpen(), "Inspector Tree Panel is not open");
+  is(InspectorUI.store.length, 1, "Inspector.store.length = 1");
+  is(InspectorUI.selection, div, "selection matches the div element");
+  ok(InspectorUI.isSidebarOpen, "sidebar is open");
+  ok(InspectorUI.isRuleViewOpen(), "rule view is open");
+  is(InspectorUI.ruleView.doc.documentElement.children.length, 1, "RuleView elements.length == 1");
+
+  requestLongerTimeout(4);
+  executeSoon(function() {
+    InspectorUI.closeInspectorUI();
+    gBrowser.removeCurrentTab(); // tab 1
+    gBrowser.removeCurrentTab(); // tab 2
+    finish();
+  });
+}
+
+function inspectorRuleTrap()
+{
+  Services.obs.removeObserver(inspectorRuleTrap,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.RULEVIEWREADY, false);
+  is(InspectorUI.ruleView.doc.documentElement.children.length, 1, "RuleView elements.length == 1");
+}
+
+function test()
+{
+  waitForExplicitFinish();
+
+  tab1 = gBrowser.addTab();
+  gBrowser.selectedTab = tab1;
+  gBrowser.selectedBrowser.addEventListener("load", function(evt) {
+    gBrowser.selectedBrowser.removeEventListener(evt.type, arguments.callee,
+      true);
+    waitForFocus(inspectorTabOpen1, content);
+  }, true);
+
+  content.location = "data:text/html,<p>tab switching tests for inspector" +
+    "<div>tab 1</div>";
+}
+
new file mode 100644
--- /dev/null
+++ b/browser/devtools/highlighter/test/browser_inspector_ruleviewstore.js
@@ -0,0 +1,152 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
+/* ***** 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 Inspector Tab Switch Tests.
+ *
+ * The Initial Developer of the Original Code is
+ * The Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Rob Campbell <rcampbell@mozilla.com>
+ *   Mihai Șucan <mihai.sucan@gmail.com>
+ *   Dave Camp <dcamp@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 ***** */
+
+/**
+ * Tests that properties disabled in the rule view survive a tab switch.
+ */
+
+let div;
+let tab1;
+
+function waitForRuleView(aCallback)
+{
+  if (InspectorUI.ruleView) {
+    aCallback();
+    return;
+  }
+
+  let ruleViewFrame = InspectorUI.getToolIframe(InspectorUI.ruleViewObject);
+  ruleViewFrame.addEventListener("load", function(evt) {
+    ruleViewFrame.removeEventListener(evt.type, arguments.callee, true);
+    executeSoon(function() {
+      aCallback();
+    });
+  }, true);
+}
+
+function inspectorTabOpen1()
+{
+  Services.obs.addObserver(inspectorUIOpen1,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.OPENED, false);
+  InspectorUI.openInspectorUI();
+}
+
+function inspectorUIOpen1()
+{
+  Services.obs.removeObserver(inspectorUIOpen1,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.OPENED, false);
+
+  // Highlight a node.
+  div = content.document.getElementsByTagName("div")[0];
+  InspectorUI.inspectNode(div);
+
+  // Open the rule view sidebar.
+  waitForRuleView(ruleViewOpened1);
+
+  InspectorUI.showSidebar();
+  InspectorUI.ruleButton.click();
+}
+
+function ruleViewOpened1()
+{
+  let prop = InspectorUI.ruleView._elementStyle.rules[0].textProps[0];
+  is(prop.name, "background-color", "First prop is the background color prop.");
+  prop.setEnabled(false);
+
+  // Open second tab and switch to it
+  tab2 = gBrowser.addTab();
+  gBrowser.selectedTab = tab2;
+
+  gBrowser.selectedBrowser.addEventListener("load", function(evt) {
+    gBrowser.selectedBrowser.removeEventListener(evt.type, arguments.callee,
+                                                 true);
+    waitForFocus(inspectorTabOpen2, content);
+  }, true);
+  content.location = "data:text/html,<p>tab 2: the inspector should close now";
+}
+
+function inspectorTabOpen2()
+{
+  // Switch back to tab 1.
+  executeSoon(function() {
+    Services.obs.addObserver(inspectorFocusTab1,
+      InspectorUI.INSPECTOR_NOTIFICATIONS.OPENED, false);
+    gBrowser.removeCurrentTab();
+    gBrowser.selectedTab = tab1;
+  });
+}
+
+function inspectorFocusTab1()
+{
+  Services.obs.removeObserver(inspectorFocusTab1,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.OPENED, false);
+
+  // Now wait for the rule view to load again...
+  waitForRuleView(ruleViewOpened2);
+}
+
+function ruleViewOpened2()
+{
+  let prop = InspectorUI.ruleView._elementStyle.rules[0].textProps[0];
+  is(prop.name, "background-color", "First prop is the background color prop.");
+  ok(!prop.enabled, "First prop should be disabled.");
+
+  gBrowser.removeCurrentTab();
+  InspectorUI.closeInspectorUI();
+  finish();
+}
+
+function test()
+{
+  waitForExplicitFinish();
+
+  tab1 = gBrowser.addTab();
+  gBrowser.selectedTab = tab1;
+  gBrowser.selectedBrowser.addEventListener("load", function(evt) {
+    gBrowser.selectedBrowser.removeEventListener(evt.type, arguments.callee,
+      true);
+    waitForFocus(inspectorTabOpen1, content);
+  }, true);
+
+  content.location = "data:text/html,<p>tab switching tests for inspector" +
+    '<div style="background-color: green;">tab 1</div>';
+}
+
new file mode 100644
--- /dev/null
+++ b/browser/devtools/highlighter/test/browser_inspector_tree_height.js
@@ -0,0 +1,144 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
+/* ***** 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 Inspector Tests.
+ *
+ * The Initial Developer of the Original Code is
+ * The Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Rob Campbell <rcampbell@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 ***** */
+let doc;
+let salutation;
+let closing;
+
+const NEWHEIGHT = 226;
+
+function createDocument()
+{
+  doc.body.innerHTML = '<div id="first" style="{ margin: 10em; ' +
+    'font-size: 14pt; font-family: helvetica, sans-serif; color: #AAA}">\n' +
+    '<h1>Some header text</h1>\n' +
+    '<p id="salutation" style="{font-size: 12pt}">hi.</p>\n' +
+    '<p id="body" style="{font-size: 12pt}">I am a test-case. This text exists ' +
+    'solely to provide some things to test the inspector initialization.</p>\n' +
+    'If you are reading this, you should go do something else instead. Maybe ' +
+    'read a book. Or better yet, write some test-cases for another bit of code. ' +
+    '<span style="{font-style: italic}">Maybe more inspector test-cases!</span></p>\n' +
+    '<p id="closing">end transmission</p>\n' +
+    '</div>';
+  doc.title = "Inspector Initialization Test";
+  startInspectorTests();
+}
+
+function startInspectorTests()
+{
+  ok(InspectorUI, "InspectorUI variable exists");
+  Services.obs.addObserver(runInspectorTests,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.OPENED, false);
+  InspectorUI.toggleInspectorUI();
+}
+
+function runInspectorTests()
+{
+  Services.obs.removeObserver(runInspectorTests,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.OPENED);
+
+  if (InspectorUI.treePanelEnabled) {
+    Services.obs.addObserver(treePanelTests,
+      InspectorUI.INSPECTOR_NOTIFICATIONS.TREEPANELREADY, false);
+
+    InspectorUI.stopInspecting();
+
+    InspectorUI.treePanel.open();
+  } else
+    finishInspectorTests();
+}
+
+function treePanelTests()
+{
+  Services.obs.removeObserver(treePanelTests,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.TREEPANELREADY);
+  Services.obs.addObserver(treePanelTests2,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.TREEPANELREADY, false);
+
+  ok(InspectorUI.treePanel.isOpen(), "Inspector Tree Panel is open");
+
+  let height = Services.prefs.getIntPref("devtools.inspector.htmlHeight");
+
+  is(InspectorUI.treePanel.container.height, height,
+     "Container height is " + height);
+
+  InspectorUI.treePanel.container.height = NEWHEIGHT;
+
+  executeSoon(function() {
+    InspectorUI.treePanel.close();
+    InspectorUI.treePanel.open();
+  });
+}
+
+function treePanelTests2()
+{
+  Services.obs.removeObserver(treePanelTests2,
+    InspectorUI.INSPECTOR_NOTIFICATIONS.TREEPANELREADY);
+
+  ok(InspectorUI.treePanel.isOpen(), "Inspector Tree Panel is open");
+
+  let height = Services.prefs.getIntPref("devtools.inspector.htmlHeight");
+
+  is(InspectorUI.treePanel.container.height, NEWHEIGHT,
+     "Container height is now " + height);
+
+  InspectorUI.treePanel.close();
+  executeSoon(function() {
+    finishInspectorTests()
+  });
+}
+
+function finishInspectorTests()
+{
+  gBrowser.removeCurrentTab();
+  finish();
+}
+
+function test()
+{
+  waitForExplicitFinish();
+  gBrowser.selectedTab = gBrowser.addTab();
+  gBrowser.selectedBrowser.addEventListener("load", function() {
+    gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
+    doc = content.document;
+    waitForFocus(createDocument, content);
+  }, true);
+
+  content.location = "data:text/html,basic tests for inspector";
+}
+
--- a/browser/devtools/styleinspector/CssHtmlTree.jsm
+++ b/browser/devtools/styleinspector/CssHtmlTree.jsm
@@ -38,25 +38,116 @@
  * 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 ***** */
 
 const Cu = Components.utils;
 const FILTER_CHANGED_TIMEOUT = 300;
 
+const HTML_NS = "http://www.w3.org/1999/xhtml";
+const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/PluralForm.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource:///modules/devtools/CssLogic.jsm");
 Cu.import("resource:///modules/devtools/Templater.jsm");
 
 var EXPORTED_SYMBOLS = ["CssHtmlTree", "PropertyView"];
 
 /**
+ * Helper for long-running processes that should yield occasionally to
+ * the mainloop.
+ *
+ * @param {Window} aWin
+ *        Timeouts will be set on this window when appropriate.
+ * @param {Generator} aGenerator
+ *        Will iterate this generator.
+ * @param {object} aOptions
+ *        Options for the update process:
+ *          onItem {function} Will be called with the value of each iteration.
+ *          onBatch {function} Will be called after each batch of iterations,
+ *            before yielding to the main loop.
+ *          onDone {function} Will be called when iteration is complete.
+ *          onCancel {function} Will be called if the process is canceled.
+ *          threshold {int} How long to process before yielding, in ms.
+ *
+ * @constructor
+ */
+function UpdateProcess(aWin, aGenerator, aOptions)
+{
+  this.win = aWin;
+  this.iter = Iterator(aGenerator);
+  this.onItem = aOptions.onItem || function() {};
+  this.onBatch = aOptions.onBatch || function () {};
+  this.onDone = aOptions.onDone || function() {};
+  this.onCancel = aOptions.onCancel || function() {};
+  this.threshold = aOptions.threshold || 45;
+
+  this.canceled = false;
+}
+
+UpdateProcess.prototype = {
+  /**
+   * Schedule a new batch on the main loop.
+   */
+  schedule: function UP_schedule()
+  {
+    if (this.cancelled) {
+      return;
+    }
+    this._timeout = this.win.setTimeout(this._timeoutHandler.bind(this), 0);
+  },
+
+  /**
+   * Cancel the running process.  onItem will not be called again,
+   * and onCancel will be called.
+   */
+  cancel: function UP_cancel()
+  {
+    if (this._timeout) {
+      this.win.clearTimeout(this._timeout);
+      this._timeout = 0;
+    }
+    this.canceled = true;
+    this.onCancel();
+  },
+
+  _timeoutHandler: function UP_timeoutHandler() {
+    this._timeout = null;
+    try {
+      this._runBatch();
+      this.schedule();
+    } catch(e) {
+      if (e instanceof StopIteration) {
+        this.onBatch();
+        this.onDone();
+        return;
+      }
+      throw e;
+    }
+  },
+
+  _runBatch: function Y_runBatch()
+  {
+    let time = Date.now();
+    while(!this.cancelled) {
+      // Continue until iter.next() throws...
+      let next = this.iter.next();
+      this.onItem(next[1]);
+      if ((Date.now() - time) > this.threshold) {
+        this.onBatch();
+        return;
+      }
+    }
+  }
+};
+
+/**
  * CssHtmlTree is a panel that manages the display of a table sorted by style.
  * There should be one instance of CssHtmlTree per style display (of which there
  * will generally only be one).
  *
  * @params {StyleInspector} aStyleInspector The owner of this CssHtmlTree
  * @constructor
  */
 function CssHtmlTree(aStyleInspector)
@@ -69,21 +160,18 @@ function CssHtmlTree(aStyleInspector)
   this.getRTLAttr = this.win.getComputedStyle(this.win.gBrowser).direction;
   this.propertyViews = [];
 
   // The document in which we display the results (csshtmltree.xul).
   this.styleDocument = this.styleWin.contentWindow.document;
 
   // Nodes used in templating
   this.root = this.styleDocument.getElementById("root");
-  this.path = this.styleDocument.getElementById("path");
   this.templateRoot = this.styleDocument.getElementById("templateRoot");
-  this.templatePath = this.styleDocument.getElementById("templatePath");
   this.propertyContainer = this.styleDocument.getElementById("propertyContainer");
-  this.templateProperty = this.styleDocument.getElementById("templateProperty");
   this.panel = aStyleInspector.panel;
 
   // No results text.
   this.noResults = this.styleDocument.getElementById("noResults");
 
   // The element that we're inspecting, and the document that it comes from.
   this.viewedElement = null;
   this.createStyleViews();
@@ -130,16 +218,20 @@ CssHtmlTree.processTemplate = function C
   while (duplicated.firstChild) {
     aDestination.appendChild(duplicated.firstChild);
   }
 };
 
 XPCOMUtils.defineLazyGetter(CssHtmlTree, "_strings", function() Services.strings
         .createBundle("chrome://browser/locale/devtools/styleinspector.properties"));
 
+XPCOMUtils.defineLazyGetter(CssHtmlTree, "HELP_LINK_TITLE", function() {
+  return CssHtmlTree.HELP_LINK_TITLE = CssHtmlTree.l10n("helpLinkTitle");
+});
+
 CssHtmlTree.prototype = {
   // Cache the list of properties that have matched and unmatched properties.
   _matchedProperties: null,
   _unmatchedProperties: null,
 
   htmlComplete: false,
 
   // Used for cancelling timeouts in the style filter.
@@ -171,116 +263,83 @@ CssHtmlTree.prototype = {
    * @param {nsIDOMElement} aElement The highlighted node to get styles for.
    */
   highlight: function CssHtmlTree_highlight(aElement)
   {
     this.viewedElement = aElement;
     this._unmatchedProperties = null;
     this._matchedProperties = null;
 
-    CssHtmlTree.processTemplate(this.templatePath, this.path, this);
-
     if (this.htmlComplete) {
       this.refreshPanel();
     } else {
-      if (this._panelRefreshTimeout) {
-        this.win.clearTimeout(this._panelRefreshTimeout);
+      if (this._refreshProcess) {
+        this._refreshProcess.cancel();
       }
 
       CssHtmlTree.processTemplate(this.templateRoot, this.root, this);
 
-      // We use a setTimeout loop to display the properties in batches of 15 at a
-      // time. This results in a perceptibly more responsive UI.
-      let i = 0;
-      let batchSize = 15;
-      let max = CssHtmlTree.propertyNames.length - 1;
-      function displayProperties() {
-        if (this.viewedElement == aElement && this.styleInspector.isOpen()) {
-          // Display the next 15 properties
-          for (let step = i + batchSize; i < step && i <= max; i++) {
-            let name = CssHtmlTree.propertyNames[i];
-            let propView = new PropertyView(this, name);
-            CssHtmlTree.processTemplate(this.templateProperty,
-              this.propertyContainer, propView, true);
-            if (propView.visible) {
-              this.numVisibleProperties++;
-            }
-            propView.refreshAllSelectors();
-            this.propertyViews.push(propView);
+      this.numVisibleProperties = 0;
+      let fragment = this.doc.createDocumentFragment();
+      this._refreshProcess = new UpdateProcess(this.win, CssHtmlTree.propertyNames, {
+        onItem: function(aPropertyName) {
+          // Per-item callback.
+          if (this.viewedElement != aElement || !this.styleInspector.isOpen()) {
+            return false;
+          }
+          let propView = new PropertyView(this, aPropertyName);
+          fragment.appendChild(propView.build());
+          if (propView.visible) {
+            this.numVisibleProperties++;
           }
-          if (i < max) {
-            // There are still some properties to display. We loop here to display
-            // the next batch of 15.
-            this._panelRefreshTimeout =
-              this.win.setTimeout(displayProperties.bind(this), 15);
-          } else {
-            this.htmlComplete = true;
-            this._panelRefreshTimeout = null;
-            this.noResults.hidden = this.numVisibleProperties > 0;
-            Services.obs.notifyObservers(null, "StyleInspector-populated", null);
-          }
-        }
-      }
-      this._panelRefreshTimeout =
-        this.win.setTimeout(displayProperties.bind(this), 15);
+          propView.refreshAllSelectors();
+          this.propertyViews.push(propView);
+        }.bind(this),
+        onDone: function() {
+          // Completed callback.
+          this.htmlComplete = true;
+          this.propertyContainer.appendChild(fragment);
+          this.noResults.hidden = this.numVisibleProperties > 0;
+          this._refreshProcess = null;
+          Services.obs.notifyObservers(null, "StyleInspector-populated", null);
+        }.bind(this)});
+
+      this._refreshProcess.schedule();
     }
   },
 
   /**
    * Refresh the panel content.
    */
   refreshPanel: function CssHtmlTree_refreshPanel()
   {
-    if (this._panelRefreshTimeout) {
-      this.win.clearTimeout(this._panelRefreshTimeout);
+    if (this._refreshProcess) {
+      this._refreshProcess.cancel();
     }
 
     this.noResults.hidden = true;
 
     // Reset visible property count
     this.numVisibleProperties = 0;
 
     // Reset zebra striping.
     this._darkStripe = true;
 
-    // We use a setTimeout loop to display the properties in batches of 15 at a
-    // time. This results in a perceptibly more responsive UI.
-    let i = 0;
-    let batchSize = 15;
-    let max = this.propertyViews.length - 1;
-    function refreshView() {
-      // Refresh the next 15 property views
-      for (let step = i + batchSize; i < step && i <= max; i++) {
-        this.propertyViews[i].refresh();
-      }
-      if (i < max) {
-        // There are still some property views to refresh. We loop here to
-        // display the next batch of 15.
-        this._panelRefreshTimeout = this.win.setTimeout(refreshView.bind(this), 15);
-      } else {
-        this._panelRefreshTimeout = null;
-        this.noResults.hidden = this.numVisibleProperties > 0;
+    let display = this.propertyContainer.style.display;
+    this._refreshProcess = new UpdateProcess(this.win, this.propertyViews, {
+      onItem: function(aPropView) {
+        aPropView.refresh();
+      }.bind(this),
+      onDone: function() {
+        this._refreshProcess = null;
+        this.noResults.hidden = this.numVisibleProperties > 0
         Services.obs.notifyObservers(null, "StyleInspector-populated", null);
-      }
-    }
-    this._panelRefreshTimeout = this.win.setTimeout(refreshView.bind(this), 15);
-  },
-
-  /**
-   * Called when the user clicks on a parent element in the "current element"
-   * path.
-   *
-   * @param {Event} aEvent the DOM Event object.
-   */
-  pathClick: function CssHtmlTree_pathClick(aEvent)
-  {
-    aEvent.preventDefault();
-    if (aEvent.target && this.viewedElement != aEvent.target.pathElement) {
-      this.styleInspector.selectFromPath(aEvent.target.pathElement);
-    }
+      }.bind(this)
+    });
+    this._refreshProcess.schedule();
   },
 
   /**
    * Called when the user enters a search term.
    *
    * @param {Event} aEvent the DOM Event object.
    */
   filterChanged: function CssHtmlTree_filterChanged(aEvent)
@@ -311,28 +370,16 @@ CssHtmlTree.prototype = {
     this._matchedProperties = null;
     this.cssLogic.sourceFilter = this.showOnlyUserStyles ?
                                  CssLogic.FILTER.ALL :
                                  CssLogic.FILTER.UA;
     this.refreshPanel();
   },
 
   /**
-   * Provide access to the path to get from document.body to the selected
-   * element.
-   *
-   * @return {array} the array holding the path from document.body to the
-   * selected element.
-   */
-  get pathElements()
-  {
-    return CssLogic.getShortNamePath(this.viewedElement);
-  },
-
-  /**
    * The CSS as displayed by the UI.
    */
   createStyleViews: function CssHtmlTree_createStyleViews()
   {
     if (CssHtmlTree.propertyNames) {
       return;
     }
 
@@ -415,20 +462,17 @@ CssHtmlTree.prototype = {
 
     // Remove event listeners
     this.onlyUserStylesCheckbox.removeEventListener("command",
       this.onlyUserStylesChanged);
     this.searchField.removeEventListener("command", this.filterChanged);
 
     // Nodes used in templating
     delete this.root;
-    delete this.path;
-    delete this.templatePath;
     delete this.propertyContainer;
-    delete this.templateProperty;
     delete this.panel;
 
     // The document in which we display the results (csshtmltree.xul).
     delete this.styleDocument;
 
     // The element that we're inspecting, and the document that it comes from.
     delete this.propertyViews;
     delete this.styleWin;
@@ -565,16 +609,60 @@ PropertyView.prototype = {
       this.tree._darkStripe = !this.tree._darkStripe;
       let darkValue = this.tree._darkStripe ?
                       "property-view darkrow" : "property-view";
       return darkValue;
     }
     return "property-view-hidden";
   },
 
+  build: function PropertyView_build()
+  {
+    let doc = this.tree.doc;
+    this.element = doc.createElementNS(HTML_NS, "div");
+    this.element.setAttribute("class", this.className);
+
+    this.propertyHeader = doc.createElementNS(XUL_NS, "hbox");
+    this.element.appendChild(this.propertyHeader);
+    this.propertyHeader.setAttribute("class", "property-header");
+    this.propertyHeader.addEventListener("click", this.propertyHeaderClick.bind(this), false);
+
+    this.matchedExpander = doc.createElementNS(HTML_NS, "div");
+    this.propertyHeader.appendChild(this.matchedExpander);
+    this.matchedExpander.setAttribute("class", "match expander");
+
+    let name = doc.createElementNS(HTML_NS, "div");
+    this.propertyHeader.appendChild(name);
+    name.setAttribute("class", "property-name");
+    name.textContent = this.name;
+
+    let helpcontainer = doc.createElementNS(HTML_NS, "div");
+    this.propertyHeader.appendChild(helpcontainer);
+    helpcontainer.setAttribute("class", "helplink-container");
+
+    let helplink = doc.createElementNS(HTML_NS, "a");
+    helpcontainer.appendChild(helplink);
+    helplink.setAttribute("class", "helplink");
+    helplink.setAttribute("title", CssHtmlTree.HELP_LINK_TITLE);
+    helplink.textContent = CssHtmlTree.HELP_LINK_TITLE;
+    helplink.addEventListener("click", this.mdnLinkClick.bind(this), false);
+
+    this.valueNode = doc.createElementNS(HTML_NS, "div");
+    this.propertyHeader.appendChild(this.valueNode);
+    this.valueNode.setAttribute("class", "property-value");
+    this.valueNode.setAttribute("dir", "ltr");
+    this.valueNode.textContent = this.value;
+
+    this.matchedSelectorsContainer = doc.createElementNS(HTML_NS, "div");
+    this.element.appendChild(this.matchedSelectorsContainer);
+    this.matchedSelectorsContainer.setAttribute("class", "rulelink");
+
+    return this.element;
+  },
+
   /**
    * Refresh the panel's CSS property value.
    */
   refresh: function PropertyView_refresh()
   {
     this.element.className = this.className;
 
     if (this.prevViewedElement != this.tree.viewedElement) {
--- a/browser/devtools/styleinspector/CssLogic.jsm
+++ b/browser/devtools/styleinspector/CssLogic.jsm
@@ -599,25 +599,29 @@ CssLogic.prototype = {
     if (!this._matchedRules) {
       this._buildMatchedRules();
     }
 
     let result = {};
 
     this._matchedRules.some(function(aValue) {
       let rule = aValue[0];
+      let status = aValue[1];
       aProperties = aProperties.filter(function(aProperty) {
-        if (rule.getPropertyValue(aProperty)) {
-          // We just need to find if a rule has this property while it matches
-          // the viewedElement (or its parents).
+        // We just need to find if a rule has this property while it matches
+        // the viewedElement (or its parents).
+        if (rule.getPropertyValue(aProperty) &&
+            (status == CssLogic.STATUS.MATCHED ||
+             (status == CssLogic.STATUS.PARENT_MATCH &&
+              this.domUtils.isInheritedProperty(aProperty)))) {
           result[aProperty] = true;
           return false;
         }
         return true; // Keep the property for the next rule.
-      });
+      }.bind(this));
       return aProperties.length == 0;
     }, this);
 
     return result;
   },
 
   /**
    * Build the array of matched rules for the currently highlighted element.
@@ -1655,17 +1659,20 @@ CssPropertyInfo.prototype = {
    * @private
    * @param {CssSelector} aSelector the matched CssSelector object.
    * @param {CssLogic.STATUS} aStatus the CssSelector match status.
    */
   _processMatchedSelector: function CssPropertyInfo_processMatchedSelector(aSelector, aStatus)
   {
     let cssRule = aSelector._cssRule;
     let value = cssRule.getPropertyValue(this.property);
-    if (value) {
+    if (value &&
+        (aStatus == CssLogic.STATUS.MATCHED ||
+         (aStatus == CssLogic.STATUS.PARENT_MATCH &&
+          this._cssLogic.domUtils.isInheritedProperty(this.property)))) {
       let selectorInfo = new CssSelectorInfo(aSelector, this.property, value,
           aStatus);
       this._matchedSelectors.push(selectorInfo);
       if (this._cssLogic._passId !== cssRule._passId && cssRule.sheetAllowed) {
         this._matchedRuleCount++;
       }
     }
   },
--- a/browser/devtools/styleinspector/CssRuleView.jsm
+++ b/browser/devtools/styleinspector/CssRuleView.jsm
@@ -84,21 +84,35 @@ var EXPORTED_SYMBOLS = ["CssRuleView",
  *     property declaration.
  *   Changes to the TextProperty are sent to its related Rule for
  *     application.
  */
 
 /**
  * ElementStyle maintains a list of Rule objects for a given element.
  *
+ * @param Element aElement
+ *        The element whose style we are viewing.
+ * @param object aStore
+ *        The ElementStyle can use this object to store metadata
+ *        that might outlast the rule view, particularly the current
+ *        set of disabled properties.
+ *
  * @constructor
  */
-function ElementStyle(aElement)
+function ElementStyle(aElement, aStore)
 {
   this.element = aElement;
+  this.store = aStore || {};
+  if (this.store.disabled) {
+    this.store.disabled = aStore.disabled;
+  } else {
+    this.store.disabled = WeakMap();
+  }
+
   let doc = aElement.ownerDocument;
 
   // To figure out how shorthand properties are interpreted by the
   // engine, we will set properties on a dummy element and observe
   // how their .style attribute reflects them as computed values.
   this.dummyElement = doc.createElementNS(this.element.namespaceURI,
                                           this.element.tagName);
   this._populate();
@@ -378,34 +392,46 @@ Rule.prototype = {
     let prop = new TextProperty(this, aName, aValue, aPriority);
     this.textProps.push(prop);
     this.applyProperties();
     return prop;
   },
 
   /**
    * Reapply all the properties in this rule, and update their
-   * computed styles.  Will re-mark overridden properties.
+   * computed styles.  Store disabled properties in the element
+   * style's store.  Will re-mark overridden properties.
    */
   applyProperties: function Rule_applyProperties()
   {
+    let disabledProps = [];
+
     for each (let prop in this.textProps) {
       if (!prop.enabled) {
+        disabledProps.push({
+          name: prop.name,
+          value: prop.value,
+          priority: prop.priority
+        });
         continue;
       }
 
       this.style.setProperty(prop.name, prop.value, prop.priority);
       // Refresh the property's value from the style, to reflect
       // any changes made during parsing.
       prop.value = this.style.getPropertyValue(prop.name);
       prop.priority = this.style.getPropertyPriority(prop.name);
       prop.updateComputed();
     }
     this.elementStyle._changed();
 
+    // Store disabled properties in the disabled store.
+    let disabled = this.elementStyle.store.disabled;
+    disabled.set(this.style, disabledProps);
+
     this.elementStyle.markOverridden();
   },
 
   /**
    * Renames a property.
    *
    * @param {TextProperty} aProperty
    *        The property to rename.
@@ -484,16 +510,29 @@ Rule.prototype = {
       if (this.inherited &&
           !this.elementStyle.domUtils.isInheritedProperty(name)) {
         continue;
       }
 
       let prop = new TextProperty(this, name, matches[2], matches[3] || "");
       this.textProps.push(prop);
     }
+
+    // Include properties from the disabled property store, if any.
+    let disabledProps = this.elementStyle.store.disabled.get(this.style);
+    if (!disabledProps) {
+      return;
+    }
+
+    for each (let prop in disabledProps) {
+      let textProp = new TextProperty(this, prop.name,
+                                      prop.value, prop.priority);
+      textProp.enabled = false;
+      this.textProps.push(textProp);
+    }
   },
 }
 
 /**
  * A single property in a rule's cssText.
  *
  * @param {Rule} aRule
  *        The rule this TextProperty came from.
@@ -600,25 +639,34 @@ TextProperty.prototype = {
 
 /**
  * CssRuleView is a view of the style rules and declarations that
  * apply to a given element.  After construction, the 'element'
  * property will be available with the user interface.
  *
  * @param Document aDocument
  *        The document that will contain the rule view.
+ * @param object aStore
+ *        The CSS rule view can use this object to store metadata
+ *        that might outlast the rule view, particularly the current
+ *        set of disabled properties.
  * @constructor
  */
-function CssRuleView(aDoc)
+function CssRuleView(aDoc, aStore)
 {
   this.doc = aDoc;
+  this.store = aStore;
 
   this.element = this.doc.createElementNS(HTML_NS, "div");
   this.element.setAttribute("tabindex", "0");
   this.element.classList.add("ruleview");
+
+  // Give a relative position for the inplace editor's measurement
+  // span to be placed absolutely against.
+  this.element.style.position = "relative";
 }
 
 CssRuleView.prototype = {
   // The element that we're inspecting.
   _viewedElement: null,
 
   /**
    * Update the highlighted element.
@@ -638,17 +686,17 @@ CssRuleView.prototype = {
     if (!this._viewedElement) {
       return;
     }
 
     if (this._elementStyle) {
       delete this._elementStyle.onChanged;
     }
 
-    this._elementStyle = new ElementStyle(aElement);
+    this._elementStyle = new ElementStyle(aElement, this.store);
     this._elementStyle.onChanged = function() {
       this._changed();
     }.bind(this);
 
     this._createEditors();
   },
 
   /**
--- a/browser/devtools/styleinspector/csshtmltree.xul
+++ b/browser/devtools/styleinspector/csshtmltree.xul
@@ -58,99 +58,49 @@
 ]>
 
 <xul:window xmlns="http://www.w3.org/1999/xhtml"
             xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
 <!-- The output from #templateRoot (below) is inserted here. -->
 <div id="root"></div>
 
-<!-- The output from #templatePath (below) is inserted here. -->
-<div id="path">
-</div>
-
 <!-- When no properties are found the following block is displayed. -->
 <div id="noResults" hidden="">
   &noPropertiesFound;
 </div>
 
 <!-- The output from #templateProperty (below) is appended here. -->
 <div id="propertyContainer">
 </div>
 
 <xul:hbox id="footer">
   <xul:label class="legendKey bestmatch">&bestMatch;</xul:label>
   <xul:label class="legendKey matched">&matched;</xul:label>
   <xul:label class="legendKey parentmatch">&parentMatch;</xul:label>
-  <xul:spacer flex="1"/>
-  <xul:resizer dir="bottomright"/>
 </xul:hbox>
 <!--
 To visually debug the templates without running firefox, alter the display:none
 -->
 <div style="display:none;">
   <!--
   templateRoot sits at the top of the window and contains the "include default
   styles" checkbox. For data it needs an instance of CssHtmlTree.
   -->
   <div id="templateRoot">
-    <xul:hbox class="headerControls" flex="1">
-      <label class="userStylesLabel">
-        <input class="onlyuserstyles" save="${onlyUserStylesCheckbox}"
-               type="checkbox" onchange="${onlyUserStylesChanged}" checked=""/>
-        &userStylesLabel;
-      </label>
+    <xul:hbox class="headerControls" flex="1" align="center">
+      <xul:checkbox class="onlyuserstyles" save="${onlyUserStylesCheckbox}"
+                    oncommand="${onlyUserStylesChanged}" checked="true"
+                    label="&userStylesLabel;"/>
       <xul:textbox class="searchfield" type="search" save="${searchField}"
-                   placeholder="&userStylesSearch;"
+                   placeholder="&userStylesSearch;" flex="1"
                    oncommand="${filterChanged}"/>
     </xul:hbox>
   </div>
 
-  <!--
-  templatePath sits just below the top of the window showing what we're looking
-  at. For data it needs an instance of CssHtmlTree.
-  -->
-  <div id="templatePath">
-    <span class="selectedElementLabel">
-      &selectedElementLabel;
-    </span>
-    <!-- following broken in RTL mode, see bug 699900 -->
-    <ol>
-      <li foreach="item in ${pathElements}">
-        <a href="#" onclick="${pathClick}" __pathElement="${item.element}">
-          ${__element.pathElement = item.element; item.display}
-        </a>
-      </li>
-    </ol>
-  </div>
-
-  <!--
-  TemplateProperty lists the properties themselves. Each needs data like this:
-  {
-    property: ... // PropertyView from CssHtmlTree.jsm
-  }
-  -->
-  <div id="templateProperty">
-    <div class="${className}" save="${element}">
-      <xul:hbox class="property-header" save="${propertyHeader}"
-                onclick="${propertyHeaderClick}">
-        <div save="${matchedExpander}" class="match expander"/>
-        <div class="property-name">${name}</div>
-        <div class="helplink-container">
-          <a href="${link}" class="helplink" title="&helpLinkTitle;" onclick="${mdnLinkClick}">
-            &helpLinkTitle;
-          </a>
-        </div>
-        <div save="${valueNode}" class="property-value" dir="ltr">${value}</div>
-      </xul:hbox>
-
-      <div save="${matchedSelectorsContainer}" class="rulelink">
-      </div>
-    </div>
-  </div>
 
   <!--
   A templateMatchedSelectors sits inside each templateProperties showing the
   list of selectors that affect that property. Each needs data like this:
   {
     matchedSelectorViews: ..., // from cssHtmlTree.propertyViews[name].matchedSelectorViews
   }
   This is a template so the parent does not need to be a table, except that
--- a/browser/devtools/styleinspector/test/browser/Makefile.in
+++ b/browser/devtools/styleinspector/test/browser/Makefile.in
@@ -48,16 +48,17 @@ include $(topsrcdir)/config/rules.mk
 _BROWSER_TEST_FILES = \
   browser_styleinspector.js \
   browser_styleinspector_webconsole.js \
   browser_bug683672.js \
   browser_styleinspector_bug_672746_default_styles.js \
   browser_styleinspector_bug_672744_search_filter.js \
   browser_styleinspector_bug_689759_no_results_placeholder.js \
   browser_bug_692400_element_style.js \
+  browser_csslogic_inherited.js \
   browser_ruleview_editor.js \
   browser_ruleview_inherit.js \
   browser_ruleview_manipulation.js \
   browser_ruleview_override.js \
   browser_ruleview_ui.js \
   head.js \
   $(NULL)
 
new file mode 100644
--- /dev/null
+++ b/browser/devtools/styleinspector/test/browser/browser_csslogic_inherited.js
@@ -0,0 +1,46 @@
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Test that inherited properties are treated correctly.
+
+Cu.import("resource:///modules/devtools/CssLogic.jsm");
+
+let doc;
+
+function createDocument()
+{
+  doc.body.innerHTML = '<div style="margin-left:10px; font-size: 5px"><div id="innerdiv">Inner div</div></div>';
+  doc.title = "Style Inspector Inheritance Test";
+
+  let cssLogic = new CssLogic();
+  cssLogic.highlight(doc.getElementById("innerdiv"));
+
+  let marginProp = cssLogic.getPropertyInfo("margin-left");
+  is(marginProp.matchedRuleCount, 0, "margin-left should not be included in matched selectors.");
+
+  let fontSizeProp = cssLogic.getPropertyInfo("font-size");
+  is(fontSizeProp.matchedRuleCount, 1, "font-size should be included in matched selectors.");
+
+  finishUp();
+}
+
+function finishUp()
+{
+  doc = null;
+  gBrowser.removeCurrentTab();
+  finish();
+}
+
+function test()
+{
+  waitForExplicitFinish();
+  gBrowser.selectedTab = gBrowser.addTab();
+  gBrowser.selectedBrowser.addEventListener("load", function onLoad(evt) {
+    gBrowser.selectedBrowser.removeEventListener(evt.type, onLoad, true);
+    doc = content.document;
+    waitForFocus(createDocument, content);
+  }, true);
+
+  content.location = "data:text/html,selector text test, bug 692400";
+}
--- a/browser/installer/removed-files.in
+++ b/browser/installer/removed-files.in
@@ -679,16 +679,17 @@ searchplugins/zoznam-sk.gif
 searchplugins/zoznam-sk.png
 searchplugins/zoznam-sk.src
 uninstall/UninstallDeerPark.exe
 uninstall/UninstallFirefox.exe
 uninstall/uninst.exe
 uninstall/uninstall.exe
 xpicleanup@BIN_SUFFIX@
 #ifdef MOZ_OMNIJAR
+  omni.jar
   chrome/af.jar
   chrome/af.manifest
   chrome/ar.jar
   chrome/ar.manifest
   chrome/as.jar
   chrome/as.manifest
   chrome/ast.jar
   chrome/ast.manifest
@@ -1082,16 +1083,17 @@ xpicleanup@BIN_SUFFIX@
   res/table-remove-column.gif
   res/table-remove-column-hover.gif
   res/table-remove-row-active.gif
   res/table-remove-row.gif
   res/table-remove-row-hover.gif
 #else
   components/binary.manifest
   omni.jar
+  omni.ja
 #endif
 #ifdef XP_MACOSX
   ../Plug-Ins/PrintPDE.plugin/Contents/Info.plist
   ../Plug-Ins/PrintPDE.plugin/Contents/MacOS/PrintPDE
   ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/Localizable.strings
   ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/PrintPDE.nib/classes.nib
   ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/PrintPDE.nib/info.nib
   ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/PrintPDE.nib/objects.xib
--- a/browser/locales/en-US/chrome/browser/browser.properties
+++ b/browser/locales/en-US/chrome/browser/browser.properties
@@ -326,12 +326,12 @@ syncPromoNotification.bookmarks.descript
 syncPromoNotification.passwords.description=You can access your passwords on all your devices with %S.\u0020
 syncPromoNotification.learnMoreLinkText=Learn More
 
 # Telemetry prompt
 # LOCALIZATION NOTE (telemetryPrompt): %1$S will be replaced by brandFullName,
 # and %2$S by the value of the toolkit.telemetry.server_owner preference.
 telemetryPrompt = Will you help improve %1$S by sending anonymous information about performance, hardware characteristics, feature usage, and browser customizations to %2$S?
 telemetryLinkLabel = Learn More
-telemetryYesButtonLabel = Yes
+telemetryYesButtonLabel2 = Yes, I want to help
 telemetryYesButtonAccessKey = Y
 telemetryNoButtonLabel = No
 telemetryNoButtonAccessKey = N
--- a/browser/locales/en-US/chrome/browser/devtools/styleinspector.dtd
+++ b/browser/locales/en-US/chrome/browser/devtools/styleinspector.dtd
@@ -7,22 +7,16 @@
   -  the search box when no search term has been entered. -->
 <!ENTITY userStylesSearch      "Search">
 
 <!-- LOCALIZATION NOTE (selectedElementLabel): This is the label for the path of
   -  the highlighted element in the web page. This path is based on the document
   -  tree. -->
 <!ENTITY selectedElementLabel  "Selected element:">
 
-<!-- LOCALIZATION NOTE (helpLinkTitle): For each style property
-  -  the user can hover it and get a help link button which allows one to
-  -  quickly jump to the documentation from the Mozilla Developer Network site.
-  -  This is the link title shown in the hover tooltip. -->
-<!ENTITY helpLinkTitle         "Read the documentation for this property">
-
 <!-- LOCALIZATION NOTE (noPropertiesFound): In the case where there are no CSS
   -  properties to display e.g. due to search criteria this message is
   -  displayed. -->
 <!ENTITY noPropertiesFound     "No CSS properties found.">
 
 <!-- LOCALIZATION NOTE (unmatchedSelectors): For each style property
   -  the panel shows whether there are any selectors that do not match the
   -  currently selected element. -->
--- a/browser/locales/en-US/chrome/browser/devtools/styleinspector.properties
+++ b/browser/locales/en-US/chrome/browser/devtools/styleinspector.properties
@@ -36,8 +36,13 @@ group.Lists=Lists
 group.Effects_and_Other=Effects and Other
 
 # LOCALIZATION NOTE (style.highlighter.button): These strings are used inside
 # sidebar of the Highlighter for the style inspector button
 style.highlighter.button.label1=Properties
 style.highlighter.accesskey1=P
 style.highlighter.button.tooltip=Inspect element styles
 
+# LOCALIZATION NOTE (helpLinkTitle): For each style property
+# the user can hover it and get a help link button which allows one to
+# quickly jump to the documentation from the Mozilla Developer Network site.
+# This is the link title shown in the hover tooltip.
+helpLinkTitle=Read the documentation for this property
--- a/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
@@ -67,16 +67,19 @@
 <!ENTITY updateManual.accesskey          "N">
 
 <!ENTITY updateAutoAddonWarn.label       "Warn me if this will disable any of my add-ons">
 <!ENTITY updateAutoAddonWarn.accesskey   "W">
 
 <!ENTITY updateHistory.label             "Show Update History">
 <!ENTITY updateHistory.accesskey         "p">
 
+<!ENTITY useService.label                "Use a background service to install updates">
+<!ENTITY useService.accesskey            "b">
+
 <!ENTITY updateOthers.label              "Automatically update:">
 <!ENTITY enableAddonsUpdate3.label       "Add-ons">
 <!ENTITY enableAddonsUpdate3.accesskey   "o">
 <!ENTITY enableSearchUpdate.label        "Search Engines">
 <!ENTITY enableSearchUpdate.accesskey    "E">
 
 <!ENTITY offlineNotify.label             "Tell me when a website asks to store data for offline use">
 <!ENTITY offlineNotify.accesskey         "T">
--- a/browser/locales/en-US/installer/custom.properties
+++ b/browser/locales/en-US/installer/custom.properties
@@ -52,16 +52,20 @@
 
 REG_APP_DESC=$BrandShortName delivers safe, easy web browsing. A familiar user interface, enhanced security features including protection from online identity theft, and integrated search let you get the most out of the web.
 CONTEXT_OPTIONS=$BrandShortName &Options
 CONTEXT_SAFE_MODE=$BrandShortName &Safe Mode
 OPTIONS_PAGE_TITLE=Setup Type
 OPTIONS_PAGE_SUBTITLE=Choose setup options
 SHORTCUTS_PAGE_TITLE=Set Up Shortcuts
 SHORTCUTS_PAGE_SUBTITLE=Create Program Icons
+COMPONENTS_PAGE_TITLE=Set Up Optional Components
+COMPONENTS_PAGE_SUBTITLE=Optional Recommended Components
+OPTIONAL_COMPONENTS_DESC=The Maintenance Service will allow you to update $BrandShortName silently in the background.
+MAINTENANCE_SERVICE_CHECKBOX_DESC=Install &Maintenance Service
 SUMMARY_PAGE_TITLE=Summary
 SUMMARY_PAGE_SUBTITLE=Ready to start installing $BrandShortName
 SUMMARY_INSTALLED_TO=$BrandShortName will be installed to the following location:
 SUMMARY_REBOOT_REQUIRED_INSTALL=A restart of your computer may be required to complete the installation.
 SUMMARY_REBOOT_REQUIRED_UNINSTALL=A restart of your computer may be required to complete the uninstall.
 SUMMARY_TAKE_DEFAULTS=U&se $BrandShortName as my default web browser
 SUMMARY_INSTALL_CLICK=Click Install to continue.
 SUMMARY_UPGRADE_CLICK=Click Upgrade to continue.
rename from browser/themes/gnomestripe/browser/Geolocation-16.png
rename to browser/themes/gnomestripe/Geolocation-16.png
rename from browser/themes/gnomestripe/browser/Geolocation-64.png
rename to browser/themes/gnomestripe/Geolocation-64.png
rename from browser/themes/gnomestripe/browser/Go-arrow.png
rename to browser/themes/gnomestripe/Go-arrow.png
rename from browser/themes/gnomestripe/browser/Info.png
rename to browser/themes/gnomestripe/Info.png
rename from browser/themes/gnomestripe/browser/KUI-close.png
rename to browser/themes/gnomestripe/KUI-close.png
--- a/browser/themes/gnomestripe/Makefile.in
+++ b/browser/themes/gnomestripe/Makefile.in
@@ -37,11 +37,22 @@
 
 DEPTH		= ../../..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
-DIRS = browser communicator
+DIRS = communicator
 
 include $(topsrcdir)/config/rules.mk
+
+FILES := \
+	icon.png \
+	preview.png \
+	$(NULL)
+
+libs:: $(FILES)
+	$(INSTALL) $(foreach f,$^,"$f") $(DIST)/bin/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
+
+install:: $(FILES)
+	$(SYSINSTALL) $(IFLAGS1) $(foreach f,$^,"$f") $(DESTDIR)$(mozappdir)/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
rename from browser/themes/gnomestripe/browser/Privacy-16.png
rename to browser/themes/gnomestripe/Privacy-16.png
rename from browser/themes/gnomestripe/browser/Privacy-32.png
rename to browser/themes/gnomestripe/Privacy-32.png
rename from browser/themes/gnomestripe/browser/Privacy-48.png
rename to browser/themes/gnomestripe/Privacy-48.png
rename from browser/themes/gnomestripe/browser/Privacy-64.png
rename to browser/themes/gnomestripe/Privacy-64.png
rename from browser/themes/gnomestripe/browser/Secure.png
rename to browser/themes/gnomestripe/Secure.png
rename from browser/themes/gnomestripe/browser/Security-broken.png
rename to browser/themes/gnomestripe/Security-broken.png
rename from browser/themes/gnomestripe/browser/Toolbar-small.png
rename to browser/themes/gnomestripe/Toolbar-small.png
rename from browser/themes/gnomestripe/browser/Toolbar.png
rename to browser/themes/gnomestripe/Toolbar.png
rename from browser/themes/gnomestripe/browser/aboutCertError.css
rename to browser/themes/gnomestripe/aboutCertError.css
rename from browser/themes/gnomestripe/browser/aboutPrivateBrowsing.css
rename to browser/themes/gnomestripe/aboutPrivateBrowsing.css
rename from browser/themes/gnomestripe/browser/aboutSessionRestore-window-icon.png
rename to browser/themes/gnomestripe/aboutSessionRestore-window-icon.png
rename from browser/themes/gnomestripe/browser/aboutSessionRestore.css
rename to browser/themes/gnomestripe/aboutSessionRestore.css
rename from browser/themes/gnomestripe/browser/aboutSyncTabs.css
rename to browser/themes/gnomestripe/aboutSyncTabs.css
rename from browser/themes/gnomestripe/browser/actionicon-tab.png
rename to browser/themes/gnomestripe/actionicon-tab.png
rename from browser/themes/gnomestripe/browser/browser.css
rename to browser/themes/gnomestripe/browser.css
--- a/browser/themes/gnomestripe/browser/browser.css
+++ b/browser/themes/gnomestripe/browser.css
@@ -46,17 +46,17 @@
  * ***** END LICENSE BLOCK ***** */
 %endif
 
 @import url("chrome://global/skin/");
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 @namespace html url("http://www.w3.org/1999/xhtml");
 
-%include ../../browserShared.inc
+%include ../browserShared.inc
 %filter substitution
 %define toolbarHighlight rgba(255,255,255,.3)
 %define selectedTabHighlight rgba(255,255,255,.8) 1px, rgba(255,255,255,.5) 3px
 %define forwardTransitionLength 150ms
 %define conditionalForwardWithUrlbar       window:not([chromehidden~=toolbar]) :-moz-any(#nav-bar[currentset*="unified-back-forward-button,urlbar-container"][mode=icons],                #nav-bar:not([currentset])[mode=icons])                 > #unified-back-forward-button
 %define conditionalForwardWithUrlbar_small window:not([chromehidden~=toolbar]) :-moz-any(#nav-bar[currentset*="unified-back-forward-button,urlbar-container"][mode=icons][iconsize=small],#nav-bar:not([currentset])[mode=icons][iconsize=small]) > #unified-back-forward-button
 %define conditionalForwardWithUrlbarWidth 32
 %define conditionalForwardWithUrlbarWidth_small 24
deleted file mode 100644
--- a/browser/themes/gnomestripe/browser/Makefile.in
+++ /dev/null
@@ -1,56 +0,0 @@
-# ***** 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 the Mozilla Browser code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2002
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#  Brian Ryner <bryner@brianryner.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 *****
-
-DEPTH		= ../../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-include $(topsrcdir)/config/rules.mk
-
-FILES := \
-	icon.png \
-	preview.png \
-	$(NULL)
-
-libs:: $(FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DIST)/bin/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
-
-install:: $(FILES)
-	$(SYSINSTALL) $(IFLAGS1) $(foreach f,$^,"$f") $(DESTDIR)$(mozappdir)/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
rename from browser/themes/gnomestripe/browser/devtools/arrows.png
rename to browser/themes/gnomestripe/devtools/arrows.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-end-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-end-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-end-selected-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-end-selected.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-end-selected.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-end.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-end.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-middle-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-middle-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-middle-selected-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-middle-selected-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-middle-selected.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-middle-selected.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-middle.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-middle.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-start-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-start-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-start-selected-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-start-selected-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-start-selected.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-start-selected.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/ltr-start.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/ltr-start.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-end-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-end-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-end-selected-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-end-selected-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-end-selected.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-end-selected.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-end.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-end.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-middle-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-middle-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-middle-selected-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-middle-selected-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-middle-selected.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-middle-selected.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-middle.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-middle.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-start-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-start-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-start-selected-pressed.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-start-selected.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-start-selected.png
rename from browser/themes/gnomestripe/browser/devtools/breadcrumbs/rtl-start.png
rename to browser/themes/gnomestripe/devtools/breadcrumbs/rtl-start.png
rename from browser/themes/gnomestripe/browser/devtools/csshtmltree.css
rename to browser/themes/gnomestripe/devtools/csshtmltree.css
--- a/browser/themes/gnomestripe/browser/devtools/csshtmltree.css
+++ b/browser/themes/gnomestripe/devtools/csshtmltree.css
@@ -43,45 +43,16 @@
   background: -moz-Field;
   color: -moz-FieldText;
 }
 
 #root {
   display: -moz-box;
 }
 
-#path {
-  font-size: 11px;
-  word-spacing: -1px;
-  margin-bottom: 0;
-  color: -moz-dialogtext;
-  background-color: -moz-dialog;
-  padding: 4px 5px 0;
-}
-#path ol {
-  list-style: none outside none;
-  margin: 0;
-  padding: 0;
-}
-#path li {
-  border-radius: 3px;
-  padding: 2px 3px;
-  font-size: 11px;
-  display: inline-block;
-}
-#path li:after {
-  content: " > ";
-}
-#path li:last-child {
-  font-weight: bold;
-  color: #0091ff;
-}
-#path li:last-child:after {
-  content: "";
-}
 
 .property-header {
   padding: 4px;
   -moz-padding-start: 0;
   -moz-padding-end: 5px;
 }
 
 .rule-unmatched {
@@ -199,57 +170,39 @@
 
 #propertyContainer {
   display: -moz-box;
   -moz-box-orient: vertical;
   -moz-box-flex: 1;
   overflow-y: auto;
 }
 
-.selectedElementLabel {
-  font-weight: bold;
-}
-
 .darkrow {
   background-color: rgba(0,0,0,.022);
 }
 
 #noResults {
   font-size: 18px;
   margin-top: 5px;
   text-align: center;
 }
 
 .headerControls {
   color: -moz-dialogtext;
   background-color: -moz-dialog;
   padding-top: 5px;
 }
 
-.onlyuserstyles,
-.userStylesLabel {
+.onlyuserstyles {
   cursor: pointer;
-}
-
-.userStylesLabel {
-  display: -moz-box;
-  white-space: nowrap;
-}
-
-.onlyuserstyles {
-  position: relative;
-  top: 3px;
-  font-family: sans-serif;
   font-size: 11px;
 }
 
 .searchfield {
-  display: -moz-box;
-  -moz-box-flex: 1;
-  margin-left: 10px;
+  -moz-margin-start: 10px;
 }
 
 .styleinspector-legend {
   -moz-margin-start: 12px;
 }
 
 #footer {
   border-top: 1px solid -moz-dialog;
rename from browser/themes/gnomestripe/browser/devtools/gcli.css
rename to browser/themes/gnomestripe/devtools/gcli.css
rename from browser/themes/gnomestripe/browser/devtools/goto-mdn.png
rename to browser/themes/gnomestripe/devtools/goto-mdn.png
rename from browser/themes/gnomestripe/browser/engineManager.css
rename to browser/themes/gnomestripe/engineManager.css
rename from browser/themes/gnomestripe/browser/feeds/audioFeedIcon.png
rename to browser/themes/gnomestripe/feeds/audioFeedIcon.png
rename from browser/themes/gnomestripe/browser/feeds/audioFeedIcon16.png
rename to browser/themes/gnomestripe/feeds/audioFeedIcon16.png
rename from browser/themes/gnomestripe/browser/feeds/feedIcon.png
rename to browser/themes/gnomestripe/feeds/feedIcon.png
rename from browser/themes/gnomestripe/browser/feeds/feedIcon16.png
rename to browser/themes/gnomestripe/feeds/feedIcon16.png
rename from browser/themes/gnomestripe/browser/feeds/subscribe-ui.css
rename to browser/themes/gnomestripe/feeds/subscribe-ui.css
rename from browser/themes/gnomestripe/browser/feeds/subscribe.css
rename to browser/themes/gnomestripe/feeds/subscribe.css
rename from browser/themes/gnomestripe/browser/feeds/videoFeedIcon.png
rename to browser/themes/gnomestripe/feeds/videoFeedIcon.png
rename from browser/themes/gnomestripe/browser/feeds/videoFeedIcon16.png
rename to browser/themes/gnomestripe/feeds/videoFeedIcon16.png
rename from browser/themes/gnomestripe/browser/fullscreen-video.css
rename to browser/themes/gnomestripe/fullscreen-video.css
rename from browser/themes/gnomestripe/browser/icon.png
rename to browser/themes/gnomestripe/icon.png
rename from browser/themes/gnomestripe/browser/identity.png
rename to browser/themes/gnomestripe/identity.png
rename from browser/themes/gnomestripe/browser/inspector.css
rename to browser/themes/gnomestripe/inspector.css
rename from browser/themes/gnomestripe/browser/jar.mn
rename to browser/themes/gnomestripe/jar.mn
rename from browser/themes/gnomestripe/browser/monitor.png
rename to browser/themes/gnomestripe/monitor.png
rename from browser/themes/gnomestripe/browser/monitor_16-10.png
rename to browser/themes/gnomestripe/monitor_16-10.png
rename from browser/themes/gnomestripe/browser/page-livemarks.png
rename to browser/themes/gnomestripe/page-livemarks.png
rename from browser/themes/gnomestripe/browser/pageInfo.css
rename to browser/themes/gnomestripe/pageInfo.css
rename from browser/themes/gnomestripe/browser/pageInfo.png
rename to browser/themes/gnomestripe/pageInfo.png
rename from browser/themes/gnomestripe/browser/places/bookmarksMenu.png
rename to browser/themes/gnomestripe/places/bookmarksMenu.png
rename from browser/themes/gnomestripe/browser/places/bookmarksToolbar.png
rename to browser/themes/gnomestripe/places/bookmarksToolbar.png
rename from browser/themes/gnomestripe/browser/places/calendar.png
rename to browser/themes/gnomestripe/places/calendar.png
rename from browser/themes/gnomestripe/browser/places/downloads.png
rename to browser/themes/gnomestripe/places/downloads.png
rename from browser/themes/gnomestripe/browser/places/editBookmarkOverlay.css
rename to browser/themes/gnomestripe/places/editBookmarkOverlay.css
rename from browser/themes/gnomestripe/browser/places/livemark-item.png
rename to browser/themes/gnomestripe/places/livemark-item.png
rename from browser/themes/gnomestripe/browser/places/organizer.css
rename to browser/themes/gnomestripe/places/organizer.css
rename from browser/themes/gnomestripe/browser/places/organizer.xml
rename to browser/themes/gnomestripe/places/organizer.xml
rename from browser/themes/gnomestripe/browser/places/pageStarred.png
rename to browser/themes/gnomestripe/places/pageStarred.png
rename from browser/themes/gnomestripe/browser/places/places.css
rename to browser/themes/gnomestripe/places/places.css
rename from browser/themes/gnomestripe/browser/places/query.png
rename to browser/themes/gnomestripe/places/query.png
rename from browser/themes/gnomestripe/browser/places/searching_16.png
rename to browser/themes/gnomestripe/places/searching_16.png
rename from browser/themes/gnomestripe/browser/places/starPage.png
rename to browser/themes/gnomestripe/places/starPage.png
rename from browser/themes/gnomestripe/browser/places/starred48.png
rename to browser/themes/gnomestripe/places/starred48.png
rename from browser/themes/gnomestripe/browser/places/tag.png
rename to browser/themes/gnomestripe/places/tag.png
rename from browser/themes/gnomestripe/browser/places/toolbarDropMarker.png
rename to browser/themes/gnomestripe/places/toolbarDropMarker.png
rename from browser/themes/gnomestripe/browser/places/unsortedBookmarks.png
rename to browser/themes/gnomestripe/places/unsortedBookmarks.png
rename from browser/themes/gnomestripe/browser/places/unstarred48.png
rename to browser/themes/gnomestripe/places/unstarred48.png
rename from browser/themes/gnomestripe/browser/preferences/Options-sync.png
rename to browser/themes/gnomestripe/preferences/Options-sync.png
rename from browser/themes/gnomestripe/browser/preferences/Options.png
rename to browser/themes/gnomestripe/preferences/Options.png
rename from browser/themes/gnomestripe/browser/preferences/aboutPermissions.css
rename to browser/themes/gnomestripe/preferences/aboutPermissions.css
rename from browser/themes/gnomestripe/browser/preferences/alwaysAsk.png
rename to browser/themes/gnomestripe/preferences/alwaysAsk.png
rename from browser/themes/gnomestripe/browser/preferences/applications.css
rename to browser/themes/gnomestripe/preferences/applications.css
rename from browser/themes/gnomestripe/browser/preferences/mail.png
rename to browser/themes/gnomestripe/preferences/mail.png
rename from browser/themes/gnomestripe/browser/preferences/preferences.css
rename to browser/themes/gnomestripe/preferences/preferences.css
rename from browser/themes/gnomestripe/browser/preview.png
rename to browser/themes/gnomestripe/preview.png
rename from browser/themes/gnomestripe/browser/sanitizeDialog.css
rename to browser/themes/gnomestripe/sanitizeDialog.css
rename from browser/themes/gnomestripe/browser/searchbar.css
rename to browser/themes/gnomestripe/searchbar.css
rename from browser/themes/gnomestripe/browser/section_collapsed-rtl.png
rename to browser/themes/gnomestripe/section_collapsed-rtl.png
rename from browser/themes/gnomestripe/browser/section_collapsed.png
rename to browser/themes/gnomestripe/section_collapsed.png
rename from browser/themes/gnomestripe/browser/section_expanded.png
rename to browser/themes/gnomestripe/section_expanded.png
rename from browser/themes/gnomestripe/browser/setDesktopBackground.css
rename to browser/themes/gnomestripe/setDesktopBackground.css
rename from browser/themes/gnomestripe/browser/sync-128.png
rename to browser/themes/gnomestripe/sync-128.png
rename from browser/themes/gnomestripe/browser/sync-16-throbber.png
rename to browser/themes/gnomestripe/sync-16-throbber.png
rename from browser/themes/gnomestripe/browser/sync-16.png
rename to browser/themes/gnomestripe/sync-16.png
rename from browser/themes/gnomestripe/browser/sync-24-throbber.png
rename to browser/themes/gnomestripe/sync-24-throbber.png
rename from browser/themes/gnomestripe/browser/sync-32.png
rename to browser/themes/gnomestripe/sync-32.png
rename from browser/themes/gnomestripe/browser/sync-bg.png
rename to browser/themes/gnomestripe/sync-bg.png
rename from browser/themes/gnomestripe/browser/sync-desktopIcon.png
rename to browser/themes/gnomestripe/sync-desktopIcon.png
rename from browser/themes/gnomestripe/browser/sync-mobileIcon.png
rename to browser/themes/gnomestripe/sync-mobileIcon.png
rename from browser/themes/gnomestripe/browser/sync-notification-24.png
rename to browser/themes/gnomestripe/sync-notification-24.png
rename from browser/themes/gnomestripe/browser/syncCommon.css
rename to browser/themes/gnomestripe/syncCommon.css
rename from browser/themes/gnomestripe/browser/syncProgress.css
rename to browser/themes/gnomestripe/syncProgress.css
rename from browser/themes/gnomestripe/browser/syncQuota.css
rename to browser/themes/gnomestripe/syncQuota.css
rename from browser/themes/gnomestripe/browser/syncSetup.css
rename to browser/themes/gnomestripe/syncSetup.css
rename from browser/themes/gnomestripe/browser/tabbrowser/alltabs.png
rename to browser/themes/gnomestripe/tabbrowser/alltabs.png
rename from browser/themes/gnomestripe/browser/tabbrowser/connecting.png
rename to browser/themes/gnomestripe/tabbrowser/connecting.png
rename from browser/themes/gnomestripe/browser/tabbrowser/loading.png
rename to browser/themes/gnomestripe/tabbrowser/loading.png
rename from browser/themes/gnomestripe/browser/tabbrowser/tab-overflow-border.png
rename to browser/themes/gnomestripe/tabbrowser/tab-overflow-border.png
rename from browser/themes/gnomestripe/browser/tabbrowser/tab.png
rename to browser/themes/gnomestripe/tabbrowser/tab.png
rename from browser/themes/gnomestripe/browser/tabbrowser/tabDragIndicator.png
rename to browser/themes/gnomestripe/tabbrowser/tabDragIndicator.png
rename from browser/themes/gnomestripe/browser/tabview/edit-light.png
rename to browser/themes/gnomestripe/tabview/edit-light.png
rename from browser/themes/gnomestripe/browser/tabview/search.png
rename to browser/themes/gnomestripe/tabview/search.png
rename from browser/themes/gnomestripe/browser/tabview/stack-expander.png
rename to browser/themes/gnomestripe/tabview/stack-expander.png
rename from browser/themes/gnomestripe/browser/tabview/tabview.css
rename to browser/themes/gnomestripe/tabview/tabview.css
rename from browser/themes/gnomestripe/browser/tabview/tabview.png
rename to browser/themes/gnomestripe/tabview/tabview.png
rename from browser/themes/gnomestripe/browser/urlbar-arrow.png
rename to browser/themes/gnomestripe/urlbar-arrow.png
rename from browser/themes/pinstripe/browser/Geolocation-16.png
rename to browser/themes/pinstripe/Geolocation-16.png
rename from browser/themes/pinstripe/browser/Geolocation-64.png
rename to browser/themes/pinstripe/Geolocation-64.png
rename from browser/themes/pinstripe/browser/Info.png
rename to browser/themes/pinstripe/Info.png
rename from browser/themes/pinstripe/browser/KUI-background.png
rename to browser/themes/pinstripe/KUI-background.png
rename from browser/themes/pinstripe/browser/KUI-close.png
rename to browser/themes/pinstripe/KUI-close.png
--- a/browser/themes/pinstripe/Makefile.in
+++ b/browser/themes/pinstripe/Makefile.in
@@ -37,11 +37,22 @@
 
 DEPTH		= ../../..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
-DIRS = browser communicator
+DIRS = communicator
 
 include $(topsrcdir)/config/rules.mk
+
+FILES := \
+	icon.png \
+	preview.png \
+	$(NULL)
+
+libs:: $(FILES)
+	$(INSTALL) $(foreach f,$^,"$f") $(DIST)/bin/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
+
+install:: $(FILES)
+	$(SYSINSTALL) $(IFLAGS1) $(foreach f,$^,"$f") $(DESTDIR)$(mozappdir)/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
rename from browser/themes/pinstripe/browser/Privacy-16.png
rename to browser/themes/pinstripe/Privacy-16.png
rename from browser/themes/pinstripe/browser/Privacy-32.png
rename to browser/themes/pinstripe/Privacy-32.png
rename from browser/themes/pinstripe/browser/Privacy-48.png
rename to browser/themes/pinstripe/Privacy-48.png
rename from browser/themes/pinstripe/browser/Privacy-64.png
rename to browser/themes/pinstripe/Privacy-64.png
rename from browser/themes/pinstripe/browser/Search.png
rename to browser/themes/pinstripe/Search.png
rename from browser/themes/pinstripe/browser/Secure-Glyph-White.png
rename to browser/themes/pinstripe/Secure-Glyph-White.png
rename from browser/themes/pinstripe/browser/Toolbar-lion.png
rename to browser/themes/pinstripe/Toolbar-lion.png
rename from browser/themes/pinstripe/browser/Toolbar.png
rename to browser/themes/pinstripe/Toolbar.png
rename from browser/themes/pinstripe/browser/aboutCertError.css
rename to browser/themes/pinstripe/aboutCertError.css
rename from browser/themes/pinstripe/browser/aboutPrivateBrowsing.css
rename to browser/themes/pinstripe/aboutPrivateBrowsing.css
rename from browser/themes/pinstripe/browser/aboutSessionRestore-window-icon.png
rename to browser/themes/pinstripe/aboutSessionRestore-window-icon.png
rename from browser/themes/pinstripe/browser/aboutSessionRestore.css
rename to browser/themes/pinstripe/aboutSessionRestore.css
rename from browser/themes/pinstripe/browser/aboutSyncTabs.css
rename to browser/themes/pinstripe/aboutSyncTabs.css
rename from browser/themes/pinstripe/browser/actionicon-tab.png
rename to browser/themes/pinstripe/actionicon-tab.png
rename from browser/themes/pinstripe/browser/browser.css
rename to browser/themes/pinstripe/browser.css
--- a/browser/themes/pinstripe/browser/browser.css
+++ b/browser/themes/pinstripe/browser.css
@@ -42,16 +42,20 @@
  * 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 ***** */
 
 @import url("chrome://global/skin/");
 
 %include shared.inc
+%filter substitution
+%define forwardTransitionLength 150ms
+%define conditionalForwardWithUrlbar window:not([chromehidden~=toolbar]) #navigator-toolbox[iconsize=large][mode=icons] > :-moz-any(#nav-bar[currentset*="unified-back-forward-button,urlbar-container"],#nav-bar:not([currentset])) > #unified-back-forward-button
+%define conditionalForwardWithUrlbarWidth 27
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 @namespace html url("http://www.w3.org/1999/xhtml");
 
 #urlbar:-moz-lwtheme:not([focused="true"]),
 .searchbar-textbox:-moz-lwtheme:not([focused="true"]) {
   opacity: .9;
 }
@@ -526,16 +530,81 @@ toolbar[mode="icons"] #forward-button {
   margin-left: 3px;
   margin-right: -1px;
 }
 
 #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #forward-button {
   mask: url(chrome://browser/content/browser.xul#pinstripe-keyhole-forward-mask);
 }
 
+@conditionalForwardWithUrlbar@ > #forward-button:not(:-moz-lwtheme) {
+  -moz-appearance: none;
+  -moz-padding-start: 2px;
+  background: -moz-linear-gradient(hsl(0,0%,99%), hsl(0,0%,67%)) padding-box;
+  border: 1px solid;
+  border-color: hsl(0,0%,31%) hsla(0,0%,29%,.6) hsl(0,0%,27%);
+  box-shadow: inset 0 1px 0 hsla(0,0%,100%,.35),
+              0 1px 0 hsla(0,0%,100%,.2);
+}
+
+@conditionalForwardWithUrlbar@ > #forward-button {
+  border-radius: 0;
+  -moz-margin-end: 0;
+}
+
+@conditionalForwardWithUrlbar@ > #forward-button:-moz-lwtheme {
+  -moz-padding-start: 2px;
+  -moz-padding-end: 0;
+}
+
+@conditionalForwardWithUrlbar@:not([switchingtabs]) > #forward-button {
+  -moz-transition: opacity @forwardTransitionLength@ ease-out;
+}
+
+@conditionalForwardWithUrlbar@ > #forward-button:hover:active:not(:-moz-lwtheme) {
+  background-image: -moz-linear-gradient(hsl(0,0%,74%), hsl(0,0%,61%));
+  box-shadow: inset rgba(0,0,0,.3) 0 -6px 10px,
+              inset #000 0 1px 3px,
+              inset rgba(0,0,0,.2) 0 1px 3px,
+              0 1px 0 hsla(0,0%,100%,.2);
+}
+
+@conditionalForwardWithUrlbar@ > #forward-button:-moz-window-inactive:not(:-moz-lwtheme) {
+  border-color: hsl(0,0%,64%) hsl(0,0%,65%) hsl(0,0%,66%);
+  background-image: -moz-linear-gradient(hsl(0,0%,99%), hsl(0,0%,82%));
+  box-shadow: inset 0 1px 0 hsla(0,0%,100%,.35);
+}
+
+@conditionalForwardWithUrlbar@:not(:hover) > #forward-button[disabled] {
+  opacity: 0;
+}
+
+@media (-moz-mac-lion-theme) {
+  @conditionalForwardWithUrlbar@ > #forward-button:not(:-moz-lwtheme) {
+    background-image: -moz-linear-gradient(hsla(0,0%,100%,.73), hsla(0,0%,100%,.05) 85%);
+    border-color: hsla(0,0%,0%,.35) hsla(0,0%,0%,.25) hsla(0,0%,0%,.2);
+    box-shadow: inset 0 1px 0 hsla(0,0%,100%,.2),
+                inset 0 0 1px hsla(0,0%,100%,.1),
+                0 1px 0 hsla(0,0%,100%,.2);
+  }
+
+  @conditionalForwardWithUrlbar@ > #forward-button:hover:active:not(:-moz-lwtheme) {
+    background-image: -moz-linear-gradient(hsla(0,0%,60%,.37), hsla(0,0%,100%,.35) 95%);
+    border-color: hsla(0,0%,0%,.43) hsla(0,0%,0%,.25) hsla(0,0%,0%,.37);
+    box-shadow: inset 0 1px 0 hsla(0,0%,0%,.02),
+                inset 0 1px 2px hsla(0,0%,0%,.2),
+                0 1px 0 hsla(0,0%,100%,.2);
+  }
+
+  @conditionalForwardWithUrlbar@ > #forward-button:-moz-window-inactive:not(:-moz-lwtheme) {
+    background-image: none;
+    border-color: hsla(0,0%,0%,.2);
+  }
+}
+
 #navigator-toolbox[iconsize="small"][mode="icons"] > #nav-bar #forward-button {
   width: 27px;
 }
 
 #navigator-toolbox[iconsize="small"][mode="icons"] > #nav-bar #forward-button:-moz-lwtheme {
   padding-left: 2px;
 }
 
@@ -837,16 +906,67 @@ toolbar[mode="icons"] #zoom-in-button {
   box-shadow: @focusRingShadow@;
 }
 
 #urlbar {
   -moz-padding-end: 4px;
   border-radius: @toolbarbuttonCornerRadius@;
 }
 
+@conditionalForwardWithUrlbar@ + #urlbar-container {
+  padding-left: @conditionalForwardWithUrlbarWidth@px;
+  -moz-margin-start: -@conditionalForwardWithUrlbarWidth@px;
+  position: relative;
+  pointer-events: none;
+}
+
+@conditionalForwardWithUrlbar@ + #urlbar-container > #urlbar {
+  -moz-border-start: none;
+  margin-left: 0;
+  pointer-events: all;
+}
+
+@conditionalForwardWithUrlbar@:not([switchingtabs]) + #urlbar-container > #urlbar {
+  -moz-transition: margin-left @forwardTransitionLength@ ease-out;
+}
+
+@conditionalForwardWithUrlbar@ + #urlbar-container > #urlbar:-moz-locale-dir(ltr) {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+@conditionalForwardWithUrlbar@ + #urlbar-container > #urlbar:-moz-locale-dir(rtl) {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+@conditionalForwardWithUrlbar@[forwarddisabled] + #urlbar-container {
+  mask: url("chrome://browser/content/browser.xul#pinstripe-urlbar-back-button-mask");
+}
+
+@conditionalForwardWithUrlbar@[forwarddisabled] + #urlbar-container > #urlbar {
+  margin-left: -@conditionalForwardWithUrlbarWidth@px;
+}
+
+@conditionalForwardWithUrlbar@[forwarddisabled]:hover:not([switchingtabs]) + #urlbar-container > #urlbar {
+  /* delay the hiding of the forward button when hovered to avoid accidental clicks on the url bar */
+  -moz-transition-delay: 100s;
+}
+
+@conditionalForwardWithUrlbar@[forwarddisabled]:not(:hover) + #urlbar-container > #urlbar {
+  /* when not hovered anymore, trigger a new transition to hide the forward button immediately */
+  margin-left: -@conditionalForwardWithUrlbarWidth@.01px;
+}
+
+@conditionalForwardWithUrlbar@ + #urlbar-container:-moz-locale-dir(rtl),
+@conditionalForwardWithUrlbar@ + #urlbar-container > #urlbar:-moz-locale-dir(rtl) {
+  /* let pinstripe-urlbar-back-button-mask clip the urlbar's right side for RTL */
+  -moz-transform: scaleX(-1);
+}
+
 #identity-box {
   background-image: -moz-linear-gradient(hsl(0,0%,98%), hsl(0,0%,92%));
   box-shadow: 0 1px 0 hsla(0,0%,0%,.05) inset;
   -moz-border-end: 1px solid hsla(0,0%,0%,.1);
   -moz-margin-end: 3px;
   padding: 1px 4px;
 }
 
@@ -855,16 +975,48 @@ toolbar[mode="icons"] #zoom-in-button {
   border-bottom-left-radius: 2px;
 }
 
 #identity-box:-moz-locale-dir(rtl) {
   border-top-right-radius: 2px;
   border-bottom-right-radius: 2px;
 }
 
+#notification-popup-box:not([hidden]) + #identity-box {
+  -moz-padding-start: 10px;
+  border-radius: 0;
+}
+
+@conditionalForwardWithUrlbar@ + #urlbar-container > #urlbar > #identity-box {
+  border-radius: 0;
+}
+
+@conditionalForwardWithUrlbar@[forwarddisabled] + #urlbar-container > #urlbar > #notification-popup-box[hidden] + #identity-box:-moz-locale-dir(ltr) {
+  -moz-transition: 0s padding-left;
+  padding-left: 10px;
+}
+
+@conditionalForwardWithUrlbar@[forwarddisabled] + #urlbar-container > #urlbar > #notification-popup-box[hidden] + #identity-box:-moz-locale-dir(rtl) {
+  -moz-transition: 0s padding-right;
+  padding-right: 10px;
+}
+
+@conditionalForwardWithUrlbar@[forwarddisabled]:hover:not([switchingtabs]) + #urlbar-container > #urlbar > #notification-popup-box[hidden] + #identity-box {
+  /* delay the hiding of the forward button when hovered to avoid accidental clicks on the url bar */
+  -moz-transition-delay: 100s;
+}
+
+@conditionalForwardWithUrlbar@[forwarddisabled]:not(:hover) + #urlbar-container > #urlbar > #notification-popup-box[hidden] + #identity-box:-moz-locale-dir(ltr) {
+  padding-left: 10.01px;
+}
+
+@conditionalForwardWithUrlbar@[forwarddisabled]:not(:hover) + #urlbar-container > #urlbar > #notification-popup-box[hidden] + #identity-box:-moz-locale-dir(rtl) {
+  padding-right: 10.01px;
+}
+
 #identity-box:active:hover,
 #identity-box[open="true"] {
   background-image: -moz-linear-gradient(hsl(0,0%,93%), hsl(0,0%,80%));
   box-shadow: 0 1px 1px hsla(0,0%,0%,.3) inset,
               0 1px 3px hsla(0,0%,0%,.3) inset;
 }
 
 #identity-box.verifiedDomain {
@@ -2150,19 +2302,18 @@ toolbarbutton.chevron > .toolbarbutton-m
   background-color: #fff;
   background-clip: padding-box;
   padding-left: 3px;
   border-radius: 2px 0 0 2px;
   -moz-border-image: url("chrome://browser/skin/urlbar-arrow.png") 0 8 0 0 / 0 8px 0 0;
   -moz-margin-end: -8px;
 }
 
-#notification-popup-box:not([hidden]) + #identity-box {
-  -moz-padding-start: 10px;
-  border-radius: 0;
+@conditionalForwardWithUrlbar@[forwarddisabled] + #urlbar-container > #urlbar > #notification-popup-box {
+  padding-left: 7px;
 }
 
 #notification-popup-box:-moz-locale-dir(rtl),
 .notification-anchor-icon:-moz-locale-dir(rtl) {
   -moz-transform: scaleX(-1);
 }
 
 .notification-anchor-icon {
deleted file mode 100644
--- a/browser/themes/pinstripe/browser/Makefile.in
+++ /dev/null
@@ -1,56 +0,0 @@
-# ***** 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 the Mozilla Browser code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2002
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#  Brian Ryner <bryner@brianryner.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 *****
-
-DEPTH		= ../../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-include $(topsrcdir)/config/rules.mk
-
-FILES := \
-	icon.png \
-	preview.png \
-	$(NULL)
-
-libs:: $(FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DIST)/bin/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
-
-install:: $(FILES)
-	$(SYSINSTALL) $(IFLAGS1) $(foreach f,$^,"$f") $(DESTDIR)$(mozappdir)/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
rename from browser/themes/pinstripe/browser/devtools/arrows.png
rename to browser/themes/pinstripe/devtools/arrows.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-end-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-end-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-end-selected-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-end-selected.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-end-selected.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-end.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-end.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-middle-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-middle-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-middle-selected-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-middle-selected-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-middle-selected.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-middle-selected.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-middle.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-middle.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-start-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-start-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-start-selected-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-start-selected-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-start-selected.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-start-selected.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/ltr-start.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/ltr-start.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-end-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-end-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-end-selected-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-end-selected-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-end-selected.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-end-selected.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-end.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-end.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-middle-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-middle-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-middle-selected-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-middle-selected-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-middle-selected.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-middle-selected.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-middle.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-middle.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-start-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-start-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-start-selected-pressed.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-start-selected.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-start-selected.png
rename from browser/themes/pinstripe/browser/devtools/breadcrumbs/rtl-start.png
rename to browser/themes/pinstripe/devtools/breadcrumbs/rtl-start.png
rename from browser/themes/pinstripe/browser/devtools/csshtmltree.css
rename to browser/themes/pinstripe/devtools/csshtmltree.css
--- a/browser/themes/pinstripe/browser/devtools/csshtmltree.css
+++ b/browser/themes/pinstripe/devtools/csshtmltree.css
@@ -43,45 +43,16 @@
   background: -moz-Field;
   color: -moz-FieldText;
 }
 
 #root {
   display: -moz-box;
 }
 
-#path {
-  font-size: 11px;
-  word-spacing: -1px;
-  margin-bottom: 0;
-  color: -moz-dialogtext;
-  background-color: -moz-dialog;
-  padding: 4px 5px 0;
-}
-#path ol {
-  list-style: none outside none;
-  margin: 0;
-  padding: 0;
-}
-#path li {
-  border-radius: 3px;
-  padding: 2px 3px;
-  font-size: 11px;
-  display: inline-block;
-}
-#path li:after {
-  content: " > ";
-}
-#path li:last-child {
-  font-weight: bold;
-  color: #0091ff;
-}
-#path li:last-child:after {
-  content: "";
-}
 
 .property-header {
   padding: 4px;
   -moz-padding-start: 0;
   -moz-padding-end: 5px;
 }
 
 .rule-unmatched {
@@ -201,57 +172,39 @@
 
 #propertyContainer {
   display: -moz-box;
   -moz-box-orient: vertical;
   -moz-box-flex: 1;
   overflow-y: auto;
 }
 
-.selectedElementLabel {
-  font-weight: bold;
-}
-
 .darkrow {
   background-color: rgba(0,0,0,.022);
 }
 
 #noResults {
   font-size: 18px;
   margin-top: 5px;
   text-align: center;
 }
 
 .headerControls {
   color: -moz-dialogtext;
   background-color: -moz-dialog;
   padding-top: 5px;
 }
 
-.onlyuserstyles,
-.userStylesLabel {
+.onlyuserstyles {
   cursor: pointer;
-}
-
-.userStylesLabel {
-  display: -moz-box;
-  white-space: nowrap;
-}
-
-.onlyuserstyles {
-  position: relative;
-  top: 3px;
-  font-family: sans-serif;
   font-size: 11px;
 }
 
 .searchfield {
-  display: -moz-box;
-  -moz-box-flex: 1;
-  margin-left: 10px;
+  -moz-margin-start: 10px;
 }
 
 .styleinspector-legend {
   -moz-margin-start: 12px;
 }
 
 #footer {
   border-top: 1px solid -moz-dialog;
rename from browser/themes/pinstripe/browser/devtools/gcli.css
rename to browser/themes/pinstripe/devtools/gcli.css
rename from browser/themes/pinstripe/browser/devtools/goto-mdn.png
rename to browser/themes/pinstripe/devtools/goto-mdn.png
rename from browser/themes/pinstripe/browser/devtools/toolbarbutton-close.png
rename to browser/themes/pinstripe/devtools/toolbarbutton-close.png
rename from browser/themes/pinstripe/browser/engineManager.css
rename to browser/themes/pinstripe/engineManager.css
rename from browser/themes/pinstripe/browser/feeds/audioFeedIcon.png
rename to browser/themes/pinstripe/feeds/audioFeedIcon.png
rename from browser/themes/pinstripe/browser/feeds/audioFeedIcon16.png
rename to browser/themes/pinstripe/feeds/audioFeedIcon16.png
rename from browser/themes/pinstripe/browser/feeds/feedIcon.png
rename to browser/themes/pinstripe/feeds/feedIcon.png
rename from browser/themes/pinstripe/browser/feeds/feedIcon16.png
rename to browser/themes/pinstripe/feeds/feedIcon16.png
rename from browser/themes/pinstripe/browser/feeds/subscribe-ui.css
rename to browser/themes/pinstripe/feeds/subscribe-ui.css
rename from browser/themes/pinstripe/browser/feeds/subscribe.css
rename to browser/themes/pinstripe/feeds/subscribe.css
rename from browser/themes/pinstripe/browser/feeds/videoFeedIcon.png
rename to browser/themes/pinstripe/feeds/videoFeedIcon.png
rename from browser/themes/pinstripe/browser/feeds/videoFeedIcon16.png
rename to browser/themes/pinstripe/feeds/videoFeedIcon16.png
rename from browser/themes/pinstripe/browser/fullscreen-video.css
rename to browser/themes/pinstripe/fullscreen-video.css
rename from browser/themes/pinstripe/browser/home.png
rename to browser/themes/pinstripe/home.png
rename from browser/themes/pinstripe/browser/hud-style-check-box-checked.png
rename to browser/themes/pinstripe/hud-style-check-box-checked.png
rename from browser/themes/pinstripe/browser/hud-style-check-box-empty.png
rename to browser/themes/pinstripe/hud-style-check-box-empty.png
rename from browser/themes/pinstripe/browser/hud-style-dropmarker-double-arrows.png
rename to browser/themes/pinstripe/hud-style-dropmarker-double-arrows.png
rename from browser/themes/pinstripe/browser/hud-style-expander-closed.png
rename to browser/themes/pinstripe/hud-style-expander-closed.png
rename from browser/themes/pinstripe/browser/hud-style-expander-open.png
rename to browser/themes/pinstripe/hud-style-expander-open.png
rename from browser/themes/pinstripe/browser/hud-style-new-folder-plus-sign.png
rename to browser/themes/pinstripe/hud-style-new-folder-plus-sign.png
rename from browser/themes/pinstripe/browser/hud-style-twisties.png
rename to browser/themes/pinstripe/hud-style-twisties.png
rename from browser/themes/pinstripe/browser/icon.png
rename to browser/themes/pinstripe/icon.png
rename from browser/themes/pinstripe/browser/identity.png
rename to browser/themes/pinstripe/identity.png
rename from browser/themes/pinstripe/browser/inspector.css
rename to browser/themes/pinstripe/inspector.css
rename from browser/themes/pinstripe/browser/jar.mn
rename to browser/themes/pinstripe/jar.mn
rename from browser/themes/pinstripe/browser/keyhole-circle-lion.png
rename to browser/themes/pinstripe/keyhole-circle-lion.png
rename from browser/themes/pinstripe/browser/keyhole-circle.png
rename to browser/themes/pinstripe/keyhole-circle.png
rename from browser/themes/pinstripe/browser/livemark-item.png
rename to browser/themes/pinstripe/livemark-item.png
rename from browser/themes/pinstripe/browser/menu-back.png
rename to browser/themes/pinstripe/menu-back.png
rename from browser/themes/pinstripe/browser/menu-forward.png
rename to browser/themes/pinstripe/menu-forward.png
rename from browser/themes/pinstripe/browser/monitor.png
rename to browser/themes/pinstripe/monitor.png
rename from browser/themes/pinstripe/browser/monitor_16-10.png
rename to browser/themes/pinstripe/monitor_16-10.png
rename from browser/themes/pinstripe/browser/page-livemarks.png
rename to browser/themes/pinstripe/page-livemarks.png
rename from browser/themes/pinstripe/browser/pageInfo.css
rename to browser/themes/pinstripe/pageInfo.css
rename from browser/themes/pinstripe/browser/places/allBookmarks.png
rename to browser/themes/pinstripe/places/allBookmarks.png
rename from browser/themes/pinstripe/browser/places/bookmarksMenu.png
rename to browser/themes/pinstripe/places/bookmarksMenu.png
rename from browser/themes/pinstripe/browser/places/bookmarksToolbar.png
rename to browser/themes/pinstripe/places/bookmarksToolbar.png
rename from browser/themes/pinstripe/browser/places/downloads.png
rename to browser/themes/pinstripe/places/downloads.png
rename from browser/themes/pinstripe/browser/places/editBookmarkOverlay.css
rename to browser/themes/pinstripe/places/editBookmarkOverlay.css
rename from browser/themes/pinstripe/browser/places/expander-closed-active.png
rename to browser/themes/pinstripe/places/expander-closed-active.png
rename from browser/themes/pinstripe/browser/places/expander-closed.png
rename to browser/themes/pinstripe/places/expander-closed.png
rename from browser/themes/pinstripe/browser/places/expander-open-active.png
rename to browser/themes/pinstripe/places/expander-open-active.png
rename from browser/themes/pinstripe/browser/places/expander-open.png
rename to browser/themes/pinstripe/places/expander-open.png
rename from browser/themes/pinstripe/browser/places/folderDropArrow.png
rename to browser/themes/pinstripe/places/folderDropArrow.png
rename from browser/themes/pinstripe/browser/places/history.png
rename to browser/themes/pinstripe/places/history.png
rename from browser/themes/pinstripe/browser/places/minus-active.png
rename to browser/themes/pinstripe/places/minus-active.png
rename from browser/themes/pinstripe/browser/places/minus.png
rename to browser/themes/pinstripe/places/minus.png
rename from browser/themes/pinstripe/browser/places/organizer.css
rename to browser/themes/pinstripe/places/organizer.css
rename from browser/themes/pinstripe/browser/places/places.css
rename to browser/themes/pinstripe/places/places.css
rename from browser/themes/pinstripe/browser/places/plus-active.png
rename to browser/themes/pinstripe/places/plus-active.png
rename from browser/themes/pinstripe/browser/places/plus.png
rename to browser/themes/pinstripe/places/plus.png
rename from browser/themes/pinstripe/browser/places/query.png
rename to browser/themes/pinstripe/places/query.png
rename from browser/themes/pinstripe/browser/places/searching_16.png
rename to browser/themes/pinstripe/places/searching_16.png
rename from browser/themes/pinstripe/browser/places/star-icons.png
rename to browser/themes/pinstripe/places/star-icons.png
rename from browser/themes/pinstripe/browser/places/starPage.png
rename to browser/themes/pinstripe/places/starPage.png
rename from browser/themes/pinstripe/browser/places/starred48.png
rename to browser/themes/pinstripe/places/starred48.png
rename from browser/themes/pinstripe/browser/places/tag.png
rename to browser/themes/pinstripe/places/tag.png
rename from browser/themes/pinstripe/browser/places/toolbar-lion.png
rename to browser/themes/pinstripe/places/toolbar-lion.png
rename from browser/themes/pinstripe/browser/places/toolbar.png
rename to browser/themes/pinstripe/places/toolbar.png
rename from browser/themes/pinstripe/browser/places/toolbarDropMarker.png
rename to browser/themes/pinstripe/places/toolbarDropMarker.png
rename from browser/themes/pinstripe/browser/places/twisty-closed.gif
rename to browser/themes/pinstripe/places/twisty-closed.gif
rename from browser/themes/pinstripe/browser/places/twisty-open.gif
rename to browser/themes/pinstripe/places/twisty-open.gif
rename from browser/themes/pinstripe/browser/places/unfiledBookmarks.png
rename to browser/themes/pinstripe/places/unfiledBookmarks.png
rename from browser/themes/pinstripe/browser/places/unstarred48.png
rename to browser/themes/pinstripe/places/unstarred48.png
rename from browser/themes/pinstripe/browser/preferences/Options-sync.png
rename to browser/themes/pinstripe/preferences/Options-sync.png
rename from browser/themes/pinstripe/browser/preferences/Options.png
rename to browser/themes/pinstripe/preferences/Options.png
rename from browser/themes/pinstripe/browser/preferences/aboutPermissions.css
rename to browser/themes/pinstripe/preferences/aboutPermissions.css
rename from browser/themes/pinstripe/browser/preferences/alwaysAsk.png
rename to browser/themes/pinstripe/preferences/alwaysAsk.png
rename from browser/themes/pinstripe/browser/preferences/application.png
rename to browser/themes/pinstripe/preferences/application.png
rename from browser/themes/pinstripe/browser/preferences/applications.css
rename to browser/themes/pinstripe/preferences/applications.css
rename from browser/themes/pinstripe/browser/preferences/preferences.css
rename to browser/themes/pinstripe/preferences/preferences.css
rename from browser/themes/pinstripe/browser/preferences/saveFile.png
rename to browser/themes/pinstripe/preferences/saveFile.png
rename from browser/themes/pinstripe/browser/preview.png
rename to browser/themes/pinstripe/preview.png
rename from browser/themes/pinstripe/browser/reload-stop-go.png
rename to browser/themes/pinstripe/reload-stop-go.png
rename from browser/themes/pinstripe/browser/sanitizeDialog.css
rename to browser/themes/pinstripe/sanitizeDialog.css
rename from browser/themes/pinstripe/browser/searchbar-dropmarker.png
rename to browser/themes/pinstripe/searchbar-dropmarker.png
rename from browser/themes/pinstripe/browser/searchbar.css
rename to browser/themes/pinstripe/searchbar.css
rename from browser/themes/pinstripe/browser/section_collapsed-rtl.png
rename to browser/themes/pinstripe/section_collapsed-rtl.png
rename from browser/themes/pinstripe/browser/section_collapsed.png
rename to browser/themes/pinstripe/section_collapsed.png
rename from browser/themes/pinstripe/browser/section_expanded.png
rename to browser/themes/pinstripe/section_expanded.png
rename from browser/themes/pinstripe/browser/setDesktopBackground.css
rename to browser/themes/pinstripe/setDesktopBackground.css
rename from browser/themes/pinstripe/browser/shared.inc
rename to browser/themes/pinstripe/shared.inc
--- a/browser/themes/pinstripe/browser/shared.inc
+++ b/browser/themes/pinstripe/shared.inc
@@ -1,6 +1,6 @@
-%include ../../../../toolkit/themes/pinstripe/global/shared.inc
-%include ../../browserShared.inc
+%include ../../../toolkit/themes/pinstripe/global/shared.inc
+%include ../browserShared.inc
 
 %define hudButton -moz-appearance: none; color: #fff; text-shadow: 0 -1px 0 rgba(0,0,0,.5); border-radius: 12px; border: 1px solid rgba(0,0,0,.65); background: -moz-linear-gradient(rgba(110,110,110,.9), rgba(70,70,70,.9) 49%, rgba(50,50,50,.9) 51%, rgba(40,40,40,.9)); box-shadow: inset 0 1px 0 rgba(255,255,255,.2), inset 0 0 1px rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); background-clip: padding-box; background-origin: padding-box; padding: 2px 9px;
 %define hudButtonPressed background: -moz-linear-gradient(rgba(40,40,40,.9), rgba(70,70,70,.9)); box-shadow: inset 0 0 3px rgba(0,0,0,.2), inset 0 1px 7px rgba(0,0,0,.4), 0 1px 0 rgba(255,255,255,.1);
 %define hudButtonFocused box-shadow: 0 0 1px -moz-mac-focusring inset, 0 0 4px 1px -moz-mac-focusring, 0 0 2px 1px -moz-mac-focusring;
rename from browser/themes/pinstripe/browser/sync-128.png
rename to browser/themes/pinstripe/sync-128.png
rename from browser/themes/pinstripe/browser/sync-16.png
rename to browser/themes/pinstripe/sync-16.png
rename from browser/themes/pinstripe/browser/sync-32.png
rename to browser/themes/pinstripe/sync-32.png
rename from browser/themes/pinstripe/browser/sync-bg.png
rename to browser/themes/pinstripe/sync-bg.png
rename from browser/themes/pinstripe/browser/sync-desktopIcon.png
rename to browser/themes/pinstripe/sync-desktopIcon.png
rename from browser/themes/pinstripe/browser/sync-mobileIcon.png
rename to browser/themes/pinstripe/sync-mobileIcon.png
rename from browser/themes/pinstripe/browser/sync-notification-24.png
rename to browser/themes/pinstripe/sync-notification-24.png
rename from browser/themes/pinstripe/browser/sync-throbber.png
rename to browser/themes/pinstripe/sync-throbber.png
rename from browser/themes/pinstripe/browser/syncCommon.css
rename to browser/themes/pinstripe/syncCommon.css
rename from browser/themes/pinstripe/browser/syncProgress.css
rename to browser/themes/pinstripe/syncProgress.css
rename from browser/themes/pinstripe/browser/syncQuota.css
rename to browser/themes/pinstripe/syncQuota.css
rename from browser/themes/pinstripe/browser/syncSetup.css
rename to browser/themes/pinstripe/syncSetup.css
rename from browser/themes/pinstripe/browser/tabbrowser/alltabs-box-bkgnd-icon-lion.png
rename to browser/themes/pinstripe/tabbrowser/alltabs-box-bkgnd-icon-lion.png
rename from browser/themes/pinstripe/browser/tabbrowser/alltabs-box-bkgnd-icon.png
rename to browser/themes/pinstripe/tabbrowser/alltabs-box-bkgnd-icon.png
rename from browser/themes/pinstripe/browser/tabbrowser/connecting.png
rename to browser/themes/pinstripe/tabbrowser/connecting.png
rename from browser/themes/pinstripe/browser/tabbrowser/loading.png
rename to browser/themes/pinstripe/tabbrowser/loading.png
rename from browser/themes/pinstripe/browser/tabbrowser/newtab.png
rename to browser/themes/pinstripe/tabbrowser/newtab.png
rename from browser/themes/pinstripe/browser/tabbrowser/tab-arrow-left.png
rename to browser/themes/pinstripe/tabbrowser/tab-arrow-left.png
rename from browser/themes/pinstripe/browser/tabbrowser/tab-arrow-right.png
rename to browser/themes/pinstripe/tabbrowser/tab-arrow-right.png
rename from browser/themes/pinstripe/browser/tabbrowser/tab-bottom-hover-active.png
rename to browser/themes/pinstripe/tabbrowser/tab-bottom-hover-active.png
rename from browser/themes/pinstripe/browser/tabbrowser/tab-bottom-normal-active.png
rename to browser/themes/pinstripe/tabbrowser/tab-bottom-normal-active.png
rename from browser/themes/pinstripe/browser/tabbrowser/tab-bottom-selected-active.png
rename to browser/themes/pinstripe/tabbrowser/tab-bottom-selected-active.png
rename from browser/themes/pinstripe/browser/tabbrowser/tab-overflow-border.png
rename to browser/themes/pinstripe/tabbrowser/tab-overflow-border.png
rename from browser/themes/pinstripe/browser/tabbrowser/tab-top-hover-active.png
rename to browser/themes/pinstripe/tabbrowser/tab-top-hover-active.png
rename from browser/themes/pinstripe/browser/tabbrowser/tab-top-normal-active.png
rename to browser/themes/pinstripe/tabbrowser/tab-top-normal-active.png
rename from browser/themes/pinstripe/browser/tabbrowser/tab-top-selected-active.png
rename to browser/themes/pinstripe/tabbrowser/tab-top-selected-active.png
rename from browser/themes/pinstripe/browser/tabbrowser/tabDragIndicator.png
rename to browser/themes/pinstripe/tabbrowser/tabDragIndicator.png
rename from browser/themes/pinstripe/browser/tabbrowser/tabbar-bottom-bg-active.png
rename to browser/themes/pinstripe/tabbrowser/tabbar-bottom-bg-active.png
rename from browser/themes/pinstripe/browser/tabbrowser/tabbar-bottom-bg-inactive.png
rename to browser/themes/pinstripe/tabbrowser/tabbar-bottom-bg-inactive.png
rename from browser/themes/pinstripe/browser/tabbrowser/tabbar-top-bg-active.png
rename to browser/themes/pinstripe/tabbrowser/tabbar-top-bg-active.png
rename from browser/themes/pinstripe/browser/tabbrowser/tabbar-top-bg-inactive.png
rename to browser/themes/pinstripe/tabbrowser/tabbar-top-bg-inactive.png
rename from browser/themes/pinstripe/browser/tabview/close.png
rename to browser/themes/pinstripe/tabview/close.png
rename from browser/themes/pinstripe/browser/tabview/edit-light.png
rename to browser/themes/pinstripe/tabview/edit-light.png
rename from browser/themes/pinstripe/browser/tabview/search.png
rename to browser/themes/pinstripe/tabview/search.png
rename from browser/themes/pinstripe/browser/tabview/stack-expander.png
rename to browser/themes/pinstripe/tabview/stack-expander.png
rename from browser/themes/pinstripe/browser/tabview/tabview-lion.png
rename to browser/themes/pinstripe/tabview/tabview-lion.png
rename from browser/themes/pinstripe/browser/tabview/tabview.css
rename to browser/themes/pinstripe/tabview/tabview.css
rename from browser/themes/pinstripe/browser/tabview/tabview.png
rename to browser/themes/pinstripe/tabview/tabview.png
rename from browser/themes/pinstripe/browser/toolbarbutton-dropmarker-lion.png
rename to browser/themes/pinstripe/toolbarbutton-dropmarker-lion.png
rename from browser/themes/pinstripe/browser/toolbarbutton-dropmarker.png
rename to browser/themes/pinstripe/toolbarbutton-dropmarker.png
rename from browser/themes/pinstripe/browser/urlbar-arrow.png
rename to browser/themes/pinstripe/urlbar-arrow.png
rename from browser/themes/pinstripe/browser/urlbar-history-dropmarker.png
rename to browser/themes/pinstripe/urlbar-history-dropmarker.png
rename from browser/themes/pinstripe/browser/urlbar-popup-blocked.png
rename to browser/themes/pinstripe/urlbar-popup-blocked.png
rename from browser/themes/winstripe/browser/Geolocation-16.png
rename to browser/themes/winstripe/Geolocation-16.png
rename from browser/themes/winstripe/browser/Geolocation-64.png
rename to browser/themes/winstripe/Geolocation-64.png
rename from browser/themes/winstripe/browser/Info-aero.png
rename to browser/themes/winstripe/Info-aero.png
rename from browser/themes/winstripe/browser/Info.png
rename to browser/themes/winstripe/Info.png
rename from browser/themes/winstripe/browser/KUI-background.png
rename to browser/themes/winstripe/KUI-background.png
rename from browser/themes/winstripe/browser/KUI-close.png
rename to browser/themes/winstripe/KUI-close.png
--- a/browser/themes/winstripe/Makefile.in
+++ b/browser/themes/winstripe/Makefile.in
@@ -37,11 +37,22 @@
 
 DEPTH		= ../../..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
-DIRS = browser communicator
+DIRS = communicator
 
 include $(topsrcdir)/config/rules.mk
+
+FILES := \
+	icon.png \
+	preview.png \
+	$(NULL)
+
+libs:: $(FILES)
+	$(INSTALL) $(foreach f,$^,"$f") $(DIST)/bin/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
+
+install:: $(FILES)
+	$(SYSINSTALL) $(IFLAGS1) $(foreach f,$^,"$f") $(DESTDIR)$(mozappdir)/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
rename from browser/themes/winstripe/browser/Privacy-16-aero.png
rename to browser/themes/winstripe/Privacy-16-aero.png
rename from browser/themes/winstripe/browser/Privacy-16.png
rename to browser/themes/winstripe/Privacy-16.png
rename from browser/themes/winstripe/browser/Privacy-32-aero.png
rename to browser/themes/winstripe/Privacy-32-aero.png
rename from browser/themes/winstripe/browser/Privacy-32.png
rename to browser/themes/winstripe/Privacy-32.png
rename from browser/themes/winstripe/browser/Privacy-48-aero.png
rename to browser/themes/winstripe/Privacy-48-aero.png
rename from browser/themes/winstripe/browser/Privacy-48.png
rename to browser/themes/winstripe/Privacy-48.png
rename from browser/themes/winstripe/browser/Privacy-64-aero.png
rename to browser/themes/winstripe/Privacy-64-aero.png
rename from browser/themes/winstripe/browser/Privacy-64.png
rename to browser/themes/winstripe/Privacy-64.png
rename from browser/themes/winstripe/browser/Secure24-aero.png
rename to browser/themes/winstripe/Secure24-aero.png
rename from browser/themes/winstripe/browser/Secure24.png
rename to browser/themes/winstripe/Secure24.png
rename from browser/themes/winstripe/browser/Toolbar-inverted.png
rename to browser/themes/winstripe/Toolbar-inverted.png
rename from browser/themes/winstripe/browser/Toolbar.png
rename to browser/themes/winstripe/Toolbar.png
rename from browser/themes/winstripe/browser/aboutCertError.css
rename to browser/themes/winstripe/aboutCertError.css
rename from browser/themes/winstripe/browser/aboutPrivateBrowsing.css
rename to browser/themes/winstripe/aboutPrivateBrowsing.css
rename from browser/themes/winstripe/browser/aboutSessionRestore-window-icon-aero.png
rename to browser/themes/winstripe/aboutSessionRestore-window-icon-aero.png
rename from browser/themes/winstripe/browser/aboutSessionRestore-window-icon.png
rename to browser/themes/winstripe/aboutSessionRestore-window-icon.png
rename from browser/themes/winstripe/browser/aboutSessionRestore.css
rename to browser/themes/winstripe/aboutSessionRestore.css
rename from browser/themes/winstripe/browser/aboutSyncTabs.css
rename to browser/themes/winstripe/aboutSyncTabs.css
rename from browser/themes/winstripe/browser/actionicon-tab.png
rename to browser/themes/winstripe/actionicon-tab.png
rename from browser/themes/winstripe/browser/appmenu-dropmarker.png
rename to browser/themes/winstripe/appmenu-dropmarker.png
rename from browser/themes/winstripe/browser/appmenu-icons.png
rename to browser/themes/winstripe/appmenu-icons.png
rename from browser/themes/winstripe/browser/browser-aero.css
rename to browser/themes/winstripe/browser-aero.css
rename from browser/themes/winstripe/browser/browser.css
rename to browser/themes/winstripe/browser.css
--- a/browser/themes/winstripe/browser/browser.css
+++ b/browser/themes/winstripe/browser.css
@@ -45,17 +45,17 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
 @import url("chrome://global/skin/");
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
 @namespace html url("http://www.w3.org/1999/xhtml");
 
-%include ../../browserShared.inc
+%include ../browserShared.inc
 %filter substitution
 %define toolbarHighlight rgba(255,255,255,.5)
 %define selectedTabHighlight rgba(255,255,255,.7)
 %define toolbarShadowColor rgba(10%,10%,10%,.4)
 %define toolbarShadowOnTab -moz-linear-gradient(bottom, rgba(10%,10%,10%,.4) 1px, transparent 1px)
 %define bgTabTexture -moz-linear-gradient(transparent, hsla(0,0%,45%,.1) 1px, hsla(0,0%,32%,.2) 80%, hsla(0,0%,0%,.2))
 %define bgTabTextureHover -moz-linear-gradient(hsla(0,0%,100%,.3) 1px, hsla(0,0%,75%,.2) 80%, hsla(0,0%,60%,.2))
 %define navbarTextboxCustomBorder border-color: rgba(0,0,0,.32);
deleted file mode 100644
--- a/browser/themes/winstripe/browser/Makefile.in
+++ /dev/null
@@ -1,56 +0,0 @@
-# ***** 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 the Mozilla Browser code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2002
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#  Brian Ryner <bryner@brianryner.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 *****
-
-DEPTH		= ../../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-include $(topsrcdir)/config/rules.mk
-
-FILES := \
-	icon.png \
-	preview.png \
-	$(NULL)
-
-libs:: $(FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DIST)/bin/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
-
-install:: $(FILES)
-	$(SYSINSTALL) $(IFLAGS1) $(foreach f,$^,"$f") $(DESTDIR)$(mozappdir)/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
rename from browser/themes/winstripe/browser/devtools/arrows.png
rename to browser/themes/winstripe/devtools/arrows.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-end-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-end-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-end-selected-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-end-selected.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-end-selected.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-end.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-end.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-middle-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-middle-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-middle-selected-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-middle-selected-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-middle-selected.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-middle-selected.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-middle.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-middle.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-start-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-start-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-start-selected-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-start-selected-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-start-selected.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-start-selected.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/ltr-start.png
rename to browser/themes/winstripe/devtools/breadcrumbs/ltr-start.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-end-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-end-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-end-selected-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-end-selected-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-end-selected.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-end-selected.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-end.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-end.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-middle-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-middle-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-middle-selected-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-middle-selected-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-middle-selected.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-middle-selected.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-middle.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-middle.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-start-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-start-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-start-selected-pressed.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-start-selected.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-start-selected.png
rename from browser/themes/winstripe/browser/devtools/breadcrumbs/rtl-start.png
rename to browser/themes/winstripe/devtools/breadcrumbs/rtl-start.png
rename from browser/themes/winstripe/browser/devtools/csshtmltree.css
rename to browser/themes/winstripe/devtools/csshtmltree.css
--- a/browser/themes/winstripe/browser/devtools/csshtmltree.css
+++ b/browser/themes/winstripe/devtools/csshtmltree.css
@@ -43,46 +43,16 @@
   background: -moz-Field;
   color: -moz-FieldText;
 }
 
 #root {
   display: -moz-box;
 }
 
-#path {
-  font-size: 11px;
-  word-spacing: -1px;
-  margin-bottom: 0;
-  color: -moz-dialogtext;
-  background-color: -moz-dialog;
-  padding: 4px 5px 0;
-}
-#path ol {
-  list-style: none outside none;
-  margin: 0;
-  padding: 0;
-}
-#path li {
-  border-radius: 3px;
-  padding: 2px 3px;
-  font-size: 11px;
-  display: inline-block;
-}
-#path li:after {
-  content: " > ";
-}
-#path li:last-child {
-  font-weight: bold;
-  color: #0091ff;
-}
-#path li:last-child:after {
-  content: "";
-}
-
 .property-header {
   padding: 4px;
   -moz-padding-start: 0;
   -moz-padding-end: 5px;
 }
 
 .rule-unmatched {
   cursor: pointer;
@@ -201,57 +171,39 @@
 
 #propertyContainer {
   display: -moz-box;
   -moz-box-orient: vertical;
   -moz-box-flex: 1;
   overflow-y: auto;
 }
 
-.selectedElementLabel {
-  font-weight: bold;
-}
-
 .darkrow {
   background-color: rgba(0,0,0,.022);
 }
 
 #noResults {
   font-size: 18px;
   margin-top: 5px;
   text-align: center;
 }
 
 .headerControls {
   color: -moz-dialogtext;
   background-color: -moz-dialog;
   padding-top: 5px;
 }
 
-.onlyuserstyles,
-.userStylesLabel {
+.onlyuserstyles {
   cursor: pointer;
-}
-
-.userStylesLabel {
-  display: -moz-box;
-  white-space: nowrap;
-}
-
-.onlyuserstyles {
-  position: relative;
-  top: 3px;
-  font-family: sans-serif;
   font-size: 11px;
 }
 
 .searchfield {
-  display: -moz-box;
-  -moz-box-flex: 1;
-  margin-left: 10px;
+  -moz-margin-start: 10px;
 }
 
 .styleinspector-legend {
   -moz-margin-start: 12px;
 }
 
 #footer {
   border-top: 1px solid -moz-dialog;
rename from browser/themes/winstripe/browser/devtools/gcli.css
rename to browser/themes/winstripe/devtools/gcli.css
rename from browser/themes/winstripe/browser/devtools/goto-mdn.png
rename to browser/themes/winstripe/devtools/goto-mdn.png
rename from browser/themes/winstripe/browser/devtools/toolbarbutton-close.png
rename to browser/themes/winstripe/devtools/toolbarbutton-close.png
rename from browser/themes/winstripe/browser/engineManager.css
rename to browser/themes/winstripe/engineManager.css
rename from browser/themes/winstripe/browser/feeds/audioFeedIcon-aero.png
rename to browser/themes/winstripe/feeds/audioFeedIcon-aero.png
rename from browser/themes/winstripe/browser/feeds/audioFeedIcon.png
rename to browser/themes/winstripe/feeds/audioFeedIcon.png
rename from browser/themes/winstripe/browser/feeds/audioFeedIcon16-aero.png
rename to browser/themes/winstripe/feeds/audioFeedIcon16-aero.png
rename from browser/themes/winstripe/browser/feeds/audioFeedIcon16.png
rename to browser/themes/winstripe/feeds/audioFeedIcon16.png
rename from browser/themes/winstripe/browser/feeds/feedIcon-aero.png
rename to browser/themes/winstripe/feeds/feedIcon-aero.png
rename from browser/themes/winstripe/browser/feeds/feedIcon.png
rename to browser/themes/winstripe/feeds/feedIcon.png
rename from browser/themes/winstripe/browser/feeds/feedIcon16-aero.png
rename to browser/themes/winstripe/feeds/feedIcon16-aero.png
rename from browser/themes/winstripe/browser/feeds/feedIcon16.png
rename to browser/themes/winstripe/feeds/feedIcon16.png
rename from browser/themes/winstripe/browser/feeds/subscribe-ui.css
rename to browser/themes/winstripe/feeds/subscribe-ui.css
rename from browser/themes/winstripe/browser/feeds/subscribe.css
rename to browser/themes/winstripe/feeds/subscribe.css
rename from browser/themes/winstripe/browser/feeds/videoFeedIcon-aero.png
rename to browser/themes/winstripe/feeds/videoFeedIcon-aero.png
rename from browser/themes/winstripe/browser/feeds/videoFeedIcon.png
rename to browser/themes/winstripe/feeds/videoFeedIcon.png
rename from browser/themes/winstripe/browser/feeds/videoFeedIcon16-aero.png
rename to browser/themes/winstripe/feeds/videoFeedIcon16-aero.png
rename from browser/themes/winstripe/browser/feeds/videoFeedIcon16.png
rename to browser/themes/winstripe/feeds/videoFeedIcon16.png
rename from browser/themes/winstripe/browser/fullscreen-video.css
rename to browser/themes/winstripe/fullscreen-video.css
rename from browser/themes/winstripe/browser/icon-aero.png
rename to browser/themes/winstripe/icon-aero.png
rename from browser/themes/winstripe/browser/icon.png
rename to browser/themes/winstripe/icon.png
rename from browser/themes/winstripe/browser/identity-aero.png
rename to browser/themes/winstripe/identity-aero.png
rename from browser/themes/winstripe/browser/identity.png
rename to browser/themes/winstripe/identity.png
rename from browser/themes/winstripe/browser/inspector.css
rename to browser/themes/winstripe/inspector.css
rename from browser/themes/winstripe/browser/jar.mn
rename to browser/themes/winstripe/jar.mn
rename from browser/themes/winstripe/browser/keyhole-forward-mask.svg
rename to browser/themes/winstripe/keyhole-forward-mask.svg
rename from browser/themes/winstripe/browser/livemark-folder-aero.png
rename to browser/themes/winstripe/livemark-folder-aero.png
rename from browser/themes/winstripe/browser/livemark-folder.png
rename to browser/themes/winstripe/livemark-folder.png
rename from browser/themes/winstripe/browser/livemark-item-aero.png
rename to browser/themes/winstripe/livemark-item-aero.png
rename from browser/themes/winstripe/browser/livemark-item.png
rename to browser/themes/winstripe/livemark-item.png
rename from browser/themes/winstripe/browser/mainwindow-dropdown-arrow-aero.png
rename to browser/themes/winstripe/mainwindow-dropdown-arrow-aero.png
rename from browser/themes/winstripe/browser/mainwindow-dropdown-arrow-inverted.png
rename to browser/themes/winstripe/mainwindow-dropdown-arrow-inverted.png
rename from browser/themes/winstripe/browser/mainwindow-dropdown-arrow.png
rename to browser/themes/winstripe/mainwindow-dropdown-arrow.png
rename from browser/themes/winstripe/browser/menu-back-aero.png
rename to browser/themes/winstripe/menu-back-aero.png
rename from browser/themes/winstripe/browser/menu-back.png
rename to browser/themes/winstripe/menu-back.png
rename from browser/themes/winstripe/browser/menu-forward-aero.png
rename to browser/themes/winstripe/menu-forward-aero.png
rename from browser/themes/winstripe/browser/menu-forward.png
rename to browser/themes/winstripe/menu-forward.png
rename from browser/themes/winstripe/browser/monitor.png
rename to browser/themes/winstripe/monitor.png
rename from browser/themes/winstripe/browser/monitor_16-10.png
rename to browser/themes/winstripe/monitor_16-10.png
rename from browser/themes/winstripe/browser/pageInfo-aero.png
rename to browser/themes/winstripe/pageInfo-aero.png
rename from browser/themes/winstripe/browser/pageInfo.css
rename to browser/themes/winstripe/pageInfo.css
rename from browser/themes/winstripe/browser/pageInfo.png
rename to browser/themes/winstripe/pageInfo.png
rename from browser/themes/winstripe/browser/places/allBookmarks-aero.png
rename to browser/themes/winstripe/places/allBookmarks-aero.png
rename from browser/themes/winstripe/browser/places/allBookmarks.png
rename to browser/themes/winstripe/places/allBookmarks.png
rename from browser/themes/winstripe/browser/places/bookmark.png
rename to browser/themes/winstripe/places/bookmark.png
rename from browser/themes/winstripe/browser/places/bookmarksMenu-aero.png
rename to browser/themes/winstripe/places/bookmarksMenu-aero.png
rename from browser/themes/winstripe/browser/places/bookmarksMenu.png
rename to browser/themes/winstripe/places/bookmarksMenu.png
rename from browser/themes/winstripe/browser/places/bookmarksToolbar-aero.png
rename to browser/themes/winstripe/places/bookmarksToolbar-aero.png
rename from browser/themes/winstripe/browser/places/bookmarksToolbar.png
rename to browser/themes/winstripe/places/bookmarksToolbar.png
rename from browser/themes/winstripe/browser/places/calendar-aero.png
rename to browser/themes/winstripe/places/calendar-aero.png
rename from browser/themes/winstripe/browser/places/calendar.png
rename to browser/themes/winstripe/places/calendar.png
rename from browser/themes/winstripe/browser/places/downloads.png
rename to browser/themes/winstripe/places/downloads.png
rename from browser/themes/winstripe/browser/places/editBookmark.png
rename to browser/themes/winstripe/places/editBookmark.png
rename from browser/themes/winstripe/browser/places/editBookmarkOverlay.css
rename to browser/themes/winstripe/places/editBookmarkOverlay.css
rename from browser/themes/winstripe/browser/places/history-aero.png
rename to browser/themes/winstripe/places/history-aero.png
rename from browser/themes/winstripe/browser/places/history.png
rename to browser/themes/winstripe/places/history.png
rename from browser/themes/winstripe/browser/places/libraryToolbar-aero.png
rename to browser/themes/winstripe/places/libraryToolbar-aero.png
rename from browser/themes/winstripe/browser/places/libraryToolbar.png
rename to browser/themes/winstripe/places/libraryToolbar.png
rename from browser/themes/winstripe/browser/places/organizer-aero.css
rename to browser/themes/winstripe/places/organizer-aero.css
rename from browser/themes/winstripe/browser/places/organizer.css
rename to browser/themes/winstripe/places/organizer.css
rename from browser/themes/winstripe/browser/places/places-aero.css
rename to browser/themes/winstripe/places/places-aero.css
rename from browser/themes/winstripe/browser/places/places.css
rename to browser/themes/winstripe/places/places.css
rename from browser/themes/winstripe/browser/places/query-aero.png
rename to browser/themes/winstripe/places/query-aero.png
rename from browser/themes/winstripe/browser/places/query.png
rename to browser/themes/winstripe/places/query.png
rename from browser/themes/winstripe/browser/places/searching_16-aero.png
rename to browser/themes/winstripe/places/searching_16-aero.png
rename from browser/themes/winstripe/browser/places/searching_16.png
rename to browser/themes/winstripe/places/searching_16.png
rename from browser/themes/winstripe/browser/places/starred48-aero.png
rename to browser/themes/winstripe/places/starred48-aero.png
rename from browser/themes/winstripe/browser/places/starred48.png
rename to browser/themes/winstripe/places/starred48.png
rename from browser/themes/winstripe/browser/places/tag-aero.png
rename to browser/themes/winstripe/places/tag-aero.png
rename from browser/themes/winstripe/browser/places/tag.png
rename to browser/themes/winstripe/places/tag.png
rename from browser/themes/winstripe/browser/places/toolbarDropMarker-aero.png
rename to browser/themes/winstripe/places/toolbarDropMarker-aero.png
rename from browser/themes/winstripe/browser/places/toolbarDropMarker.png
rename to browser/themes/winstripe/places/toolbarDropMarker.png
rename from browser/themes/winstripe/browser/places/unsortedBookmarks-aero.png
rename to browser/themes/winstripe/places/unsortedBookmarks-aero.png
rename from browser/themes/winstripe/browser/places/unsortedBookmarks.png
rename to browser/themes/winstripe/places/unsortedBookmarks.png
rename from browser/themes/winstripe/browser/places/unstarred48.png
rename to browser/themes/winstripe/places/unstarred48.png
rename from browser/themes/winstripe/browser/preferences/Options-aero.png
rename to browser/themes/winstripe/preferences/Options-aero.png
rename from browser/themes/winstripe/browser/preferences/Options-sync.png
rename to browser/themes/winstripe/preferences/Options-sync.png
rename from browser/themes/winstripe/browser/preferences/Options.png
rename to browser/themes/winstripe/preferences/Options.png
rename from browser/themes/winstripe/browser/preferences/aboutPermissions.css
rename to browser/themes/winstripe/preferences/aboutPermissions.css
rename from browser/themes/winstripe/browser/preferences/alwaysAsk-aero.png
rename to browser/themes/winstripe/preferences/alwaysAsk-aero.png
rename from browser/themes/winstripe/browser/preferences/alwaysAsk.png
rename to browser/themes/winstripe/preferences/alwaysAsk.png
rename from browser/themes/winstripe/browser/preferences/application-aero.png
rename to browser/themes/winstripe/preferences/application-aero.png
rename from browser/themes/winstripe/browser/preferences/application.png
rename to browser/themes/winstripe/preferences/application.png
rename from browser/themes/winstripe/browser/preferences/applications.css
rename to browser/themes/winstripe/preferences/applications.css
rename from browser/themes/winstripe/browser/preferences/mail-aero.png
rename to browser/themes/winstripe/preferences/mail-aero.png
rename from browser/themes/winstripe/browser/preferences/mail.png
rename to browser/themes/winstripe/preferences/mail.png
rename from browser/themes/winstripe/browser/preferences/plugin-aero.png
rename to browser/themes/winstripe/preferences/plugin-aero.png
rename from browser/themes/winstripe/browser/preferences/preferences.css
rename to browser/themes/winstripe/preferences/preferences.css
rename from browser/themes/winstripe/browser/preferences/saveFile-aero.png
rename to browser/themes/winstripe/preferences/saveFile-aero.png
rename from browser/themes/winstripe/browser/preferences/saveFile.png
rename to browser/themes/winstripe/preferences/saveFile.png
rename from browser/themes/winstripe/browser/preview.png
rename to browser/themes/winstripe/preview.png
rename from browser/themes/winstripe/browser/reload-stop-go.png
rename to browser/themes/winstripe/reload-stop-go.png
rename from browser/themes/winstripe/browser/sanitizeDialog.css
rename to browser/themes/winstripe/sanitizeDialog.css
rename from browser/themes/winstripe/browser/searchbar.css
rename to browser/themes/winstripe/searchbar.css
rename from browser/themes/winstripe/browser/section_collapsed-rtl.png
rename to browser/themes/winstripe/section_collapsed-rtl.png
rename from browser/themes/winstripe/browser/section_collapsed.png
rename to browser/themes/winstripe/section_collapsed.png
rename from browser/themes/winstripe/browser/section_expanded.png
rename to browser/themes/winstripe/section_expanded.png
rename from browser/themes/winstripe/browser/setDesktopBackground.css
rename to browser/themes/winstripe/setDesktopBackground.css
rename from browser/themes/winstripe/browser/sync-128.png
rename to browser/themes/winstripe/sync-128.png
rename from browser/themes/winstripe/browser/sync-16.png
rename to browser/themes/winstripe/sync-16.png
rename from browser/themes/winstripe/browser/sync-32.png
rename to browser/themes/winstripe/sync-32.png
rename from browser/themes/winstripe/browser/sync-bg.png
rename to browser/themes/winstripe/sync-bg.png
rename from browser/themes/winstripe/browser/sync-desktopIcon.png
rename to browser/themes/winstripe/sync-desktopIcon.png
rename from browser/themes/winstripe/browser/sync-mobileIcon.png
rename to browser/themes/winstripe/sync-mobileIcon.png
rename from browser/themes/winstripe/browser/sync-notification-24.png
rename to browser/themes/winstripe/sync-notification-24.png
rename from browser/themes/winstripe/browser/sync-throbber.png
rename to browser/themes/winstripe/sync-throbber.png
rename from browser/themes/winstripe/browser/syncCommon.css
rename to browser/themes/winstripe/syncCommon.css
rename from browser/themes/winstripe/browser/syncProgress.css
rename to browser/themes/winstripe/syncProgress.css
rename from browser/themes/winstripe/browser/syncQuota.css
rename to browser/themes/winstripe/syncQuota.css
rename from browser/themes/winstripe/browser/syncSetup.css
rename to browser/themes/winstripe/syncSetup.css
rename from browser/themes/winstripe/browser/tabbrowser/alltabs.png
rename to browser/themes/winstripe/tabbrowser/alltabs.png
rename from browser/themes/winstripe/browser/tabbrowser/connecting.png
rename to browser/themes/winstripe/tabbrowser/connecting.png
rename from browser/themes/winstripe/browser/tabbrowser/loading.png
rename to browser/themes/winstripe/tabbrowser/loading.png
rename from browser/themes/winstripe/browser/tabbrowser/newtab-inverted.png
rename to browser/themes/winstripe/tabbrowser/newtab-inverted.png
rename from browser/themes/winstripe/browser/tabbrowser/newtab.png
rename to browser/themes/winstripe/tabbrowser/newtab.png
rename from browser/themes/winstripe/browser/tabbrowser/tab-arrow-left-inverted.png
rename to browser/themes/winstripe/tabbrowser/tab-arrow-left-inverted.png
rename from browser/themes/winstripe/browser/tabbrowser/tab-arrow-left.png
rename to browser/themes/winstripe/tabbrowser/tab-arrow-left.png
rename from browser/themes/winstripe/browser/tabbrowser/tab-overflow-border.png
rename to browser/themes/winstripe/tabbrowser/tab-overflow-border.png
rename from browser/themes/winstripe/browser/tabbrowser/tab.png
rename to browser/themes/winstripe/tabbrowser/tab.png
rename from browser/themes/winstripe/browser/tabbrowser/tabDragIndicator.png
rename to browser/themes/winstripe/tabbrowser/tabDragIndicator.png
rename from browser/themes/winstripe/browser/tabview/close.png
rename to browser/themes/winstripe/tabview/close.png
rename from browser/themes/winstripe/browser/tabview/edit-light.png
rename to browser/themes/winstripe/tabview/edit-light.png
rename from browser/themes/winstripe/browser/tabview/grain.png
rename to browser/themes/winstripe/tabview/grain.png
rename from browser/themes/winstripe/browser/tabview/search.png
rename to browser/themes/winstripe/tabview/search.png
rename from browser/themes/winstripe/browser/tabview/stack-expander.png
rename to browser/themes/winstripe/tabview/stack-expander.png
rename from browser/themes/winstripe/browser/tabview/tabview-inverted.png
rename to browser/themes/winstripe/tabview/tabview-inverted.png
rename from browser/themes/winstripe/browser/tabview/tabview.css
rename to browser/themes/winstripe/tabview/tabview.css
rename from browser/themes/winstripe/browser/tabview/tabview.png
rename to browser/themes/winstripe/tabview/tabview.png
rename from browser/themes/winstripe/browser/urlbar-arrow.png
rename to browser/themes/winstripe/urlbar-arrow.png
rename from browser/themes/winstripe/browser/urlbar-history-dropmarker.png
rename to browser/themes/winstripe/urlbar-history-dropmarker.png
rename from browser/themes/winstripe/browser/urlbar-popup-blocked.png
rename to browser/themes/winstripe/urlbar-popup-blocked.png
--- a/build/Makefile.in
+++ b/build/Makefile.in
@@ -51,17 +51,17 @@ endif
 
 ifeq (WINNT,$(OS_ARCH))
 DIRS = win32
 endif
 
 DIRS += pgo
 
 ifdef ENABLE_TESTS
-ifeq (Android,$(OS_TARGET))
+ifeq (android,$(MOZ_WIDGET_TOOLKIT))
   DIRS += mobile/sutagent/android \
           mobile/sutagent/android/watcher \
           mobile/sutagent/android/ffxcp \
           mobile/sutagent/android/fencp \
           $(NULL)
 endif
 endif
 
--- a/build/automation.py.in
+++ b/build/automation.py.in
@@ -413,27 +413,28 @@ user_pref("security.warn_submit_insecure
 user_pref("browser.shell.checkDefaultBrowser", false);
 user_pref("shell.checkDefaultClient", false);
 user_pref("browser.warnOnQuit", false);
 user_pref("accessibility.typeaheadfind.autostart", false);
 user_pref("javascript.options.showInConsole", true);
 user_pref("devtools.errorconsole.enabled", true);
 user_pref("layout.debug.enable_data_xbl", true);
 user_pref("browser.EULA.override", true);
+user_pref("javascript.options.jit_hardening", true);
 user_pref("gfx.color_management.force_srgb", true);
 user_pref("network.manage-offline-status", false);
 user_pref("test.mousescroll", true);
 user_pref("security.default_personal_cert", "Select Automatically"); // Need to client auth test be w/o any dialogs
 user_pref("network.http.prompt-temp-redirect", false);
 user_pref("media.cache_size", 100);
 user_pref("security.warn_viewing_mixed", false);
 user_pref("app.update.enabled", false);
 user_pref("browser.panorama.experienced_first_run", true); // Assume experienced
 user_pref("dom.w3c_touch_events.enabled", true);
-user_pref("toolkit.telemetry.prompted", true);
+user_pref("toolkit.telemetry.prompted", 2);
 
 // Only load extensions from the application and user profile
 // AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_APPLICATION
 user_pref("extensions.enabledScopes", 5);
 // Disable metadata caching for installed add-ons by default
 user_pref("extensions.getAddons.cache.enabled", false);
 // Disable intalling any distribution add-ons
 user_pref("extensions.installDistroAddons", false);
--- a/build/mobile/devicemanagerADB.py
+++ b/build/mobile/devicemanagerADB.py
@@ -251,21 +251,21 @@ class DeviceManagerADB(DeviceManager):
     return outputFile;
 
   # external function
   # returns:
   #  success: output from testagent
   #  failure: None
   def killProcess(self, appname):
     procs = self.getProcessList()
-    for proc in procs:
-      if (proc[1] == appname):
-        p = self.runCmd(["shell", "ps"])
+    for (pid, name, user) in procs:
+      if name == appname:
+        p = self.runCmdAs(["shell", "kill", pid])
         return p.stdout.read()
-      return None
+    return None
 
   # external function
   # returns:
   #  success: filecontents
   #  failure: None
   def catFile(self, remoteFile):
     #p = self.runCmd(["shell", "cat", remoteFile])
     #return p.stdout.read()
@@ -501,16 +501,22 @@ class DeviceManagerADB(DeviceManager):
       ret["systime"] = self.runCmd(["shell", "date"]).stdout.read()
     print ret
     return ret
 
   def runCmd(self, args):
     args.insert(0, "adb")
     return subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
+  def runCmdAs(self, args):
+    if self.useRunAs:
+      args.insert(1, "run-as")
+      args.insert(2, self.packageName)
+    return self.runCmd(args)
+
   def checkCmd(self, args):
     args.insert(0, "adb")
     return subprocess.check_call(args)
 
   def checkCmdAs(self, args):
     if (self.useRunAs):
       args.insert(1, "run-as")
       args.insert(2, self.packageName)
index 0fe4acb0462274872abe0dfbf54e8feb7cd7a79c..6e2c29365d412863dd306008cbd15e6bcd47ce79
GIT binary patch
literal 65536
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
l00000000000000000000000000000000000004ji{{fVl)29Fc
index 03924a3a19a6200491af6c79bf8bdbd202960f11..e13451b02d693db435a9f0712f57efc6e7234e1c
GIT binary patch
literal 61440
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