merge mozilla-inbound to mozilla-central a=merge
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Fri, 24 Apr 2015 14:37:13 +0200
changeset 240895 86d3308ec8888fae794772b04f4c8aef59574402
parent 240836 dee8993cef060b138d9c78a45df8c7c1c921aa03 (current diff)
parent 240894 15a67288fd6fa6e2751c808bb7a9e757070741ed (diff)
child 240913 ad78fd77cf522ac97c518f18c6c2b0b9665e4d95
child 240969 a0cd3d2748db4e6ff5c43ba0a2091f0970095751
child 241123 237b579d8a2672ba6412af62254b08bd4c752ad3
push id28647
push usercbook@mozilla.com
push dateFri, 24 Apr 2015 12:37:38 +0000
treeherdermozilla-central@86d3308ec888 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone40.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
merge mozilla-inbound to mozilla-central a=merge
browser/app/profile/firefox.js
browser/base/content/browser.js
browser/branding/aurora/VisualElementsManifest.xml
browser/branding/aurora/content/VisualElements_logo.png
browser/branding/aurora/content/VisualElements_smalllogo.png
browser/branding/aurora/content/VisualElements_splashscreen.png
browser/branding/aurora/content/metro-about-footer.png
browser/branding/aurora/content/metro-about-wordmark.png
browser/branding/aurora/content/metro-about.css
browser/branding/aurora/content/metro_firstrun_logo.png
browser/branding/aurora/content/metro_firstrun_logo@1.4x.png
browser/branding/aurora/content/metro_firstrun_logo@1.8x.png
browser/branding/nightly/VisualElementsManifest.xml
browser/branding/nightly/content/VisualElements_logo.png
browser/branding/nightly/content/VisualElements_smalllogo.png
browser/branding/nightly/content/VisualElements_splashscreen.png
browser/branding/nightly/content/metro-about-footer.png
browser/branding/nightly/content/metro-about-wordmark.png
browser/branding/nightly/content/metro-about.css
browser/branding/nightly/content/metro_firstrun_logo.png
browser/branding/nightly/content/metro_firstrun_logo@1.4x.png
browser/branding/nightly/content/metro_firstrun_logo@1.8x.png
browser/branding/official/VisualElementsManifest.xml
browser/branding/official/content/VisualElements_logo.png
browser/branding/official/content/VisualElements_smalllogo.png
browser/branding/official/content/VisualElements_splashscreen.png
browser/branding/official/content/metro-about-footer.png
browser/branding/official/content/metro-about-wordmark.png
browser/branding/official/content/metro-about.css
browser/branding/official/content/metro_firstrun_logo.png
browser/branding/official/content/metro_firstrun_logo@1.4x.png
browser/branding/official/content/metro_firstrun_logo@1.8x.png
browser/branding/unofficial/VisualElementsManifest.xml
browser/branding/unofficial/content/VisualElements_logo.png
browser/branding/unofficial/content/VisualElements_smalllogo.png
browser/branding/unofficial/content/VisualElements_splashscreen.png
browser/branding/unofficial/content/metro-about-footer.png
browser/branding/unofficial/content/metro-about-wordmark.png
browser/branding/unofficial/content/metro-about.css
browser/branding/unofficial/content/metro_firstrun_logo.png
browser/branding/unofficial/content/metro_firstrun_logo@1.4x.png
browser/branding/unofficial/content/metro_firstrun_logo@1.8x.png
browser/locales/en-US/searchplugins/bingmetrofx.xml
browser/locales/en-US/searchplugins/googlemetrofx.xml
browser/locales/en-US/searchplugins/metrolist.txt
browser/locales/en-US/searchplugins/wikipediametrofx.xml
browser/locales/en-US/searchplugins/yahoometrofx.xml
browser/metro/Makefile.in
browser/metro/base/content/BrowserTouchHandler.js
browser/metro/base/content/ContentAreaObserver.js
browser/metro/base/content/ContextCommands.js
browser/metro/base/content/ContextUI.js
browser/metro/base/content/NavButtonSlider.js
browser/metro/base/content/Site.js
browser/metro/base/content/TopSites.js
browser/metro/base/content/Util.js
browser/metro/base/content/WebProgress.js
browser/metro/base/content/appbar.js
browser/metro/base/content/apzc.js
browser/metro/base/content/bindings.css
browser/metro/base/content/bindings/appbar.xml
browser/metro/base/content/bindings/bindings.xml
browser/metro/base/content/bindings/browser.js
browser/metro/base/content/bindings/browser.xml
browser/metro/base/content/bindings/circularprogress.xml
browser/metro/base/content/bindings/console.xml
browser/metro/base/content/bindings/cssthrobber.xml
browser/metro/base/content/bindings/dialog.xml
browser/metro/base/content/bindings/flyoutpanel.xml
browser/metro/base/content/bindings/grid.xml
browser/metro/base/content/bindings/notification.xml
browser/metro/base/content/bindings/popup.xml
browser/metro/base/content/bindings/selectionoverlay.xml
browser/metro/base/content/bindings/tabprompts.xml
browser/metro/base/content/bindings/tabs.xml
browser/metro/base/content/bindings/toggleswitch.xml
browser/metro/base/content/bindings/urlbar.xml
browser/metro/base/content/bookmarks.js
browser/metro/base/content/browser-scripts.js
browser/metro/base/content/browser-ui.js
browser/metro/base/content/browser.js
browser/metro/base/content/browser.xul
browser/metro/base/content/commandUtil.js
browser/metro/base/content/console.js
browser/metro/base/content/contenthandlers/ConsoleAPIObserver.js
browser/metro/base/content/contenthandlers/Content.js
browser/metro/base/content/contenthandlers/ContextMenuHandler.js
browser/metro/base/content/contenthandlers/FormHelper.js
browser/metro/base/content/contenthandlers/PluginHelper.js
browser/metro/base/content/contenthandlers/SelectionHandler.js
browser/metro/base/content/cursor.css
browser/metro/base/content/dbg-metro-actors.js
browser/metro/base/content/downloads.js
browser/metro/base/content/exceptions.js
browser/metro/base/content/flyoutpanels/AboutFlyoutPanel.js
browser/metro/base/content/flyoutpanels/FlyoutPanelsUI.js
browser/metro/base/content/flyoutpanels/PrefsFlyoutPanel.js
browser/metro/base/content/flyoutpanels/SearchFlyoutPanel.js
browser/metro/base/content/flyoutpanels/SettingsCharm.js
browser/metro/base/content/flyoutpanels/SyncFlyoutPanel.js
browser/metro/base/content/helperui/AlertsHelper.js
browser/metro/base/content/helperui/ChromeSelectionHandler.js
browser/metro/base/content/helperui/FindHelperUI.js
browser/metro/base/content/helperui/FormHelperUI.js
browser/metro/base/content/helperui/IndexedDB.js
browser/metro/base/content/helperui/ItemPinHelper.js
browser/metro/base/content/helperui/MenuUI.js
browser/metro/base/content/helperui/OfflineApps.js
browser/metro/base/content/helperui/SelectHelperUI.js
browser/metro/base/content/helperui/SelectionHelperUI.js
browser/metro/base/content/input.js
browser/metro/base/content/jsshell/shell.html
browser/metro/base/content/jsshell/shell.xul
browser/metro/base/content/library/SelectionPrototype.js
browser/metro/base/content/pages/aboutAddons.xhtml
browser/metro/base/content/pages/aboutCertError.xhtml
browser/metro/base/content/pages/aboutRights.xhtml
browser/metro/base/content/pages/blockedSite.xhtml
browser/metro/base/content/pages/config.js
browser/metro/base/content/pages/config.xhtml
browser/metro/base/content/pages/crashprompt.xhtml
browser/metro/base/content/pages/netError.xhtml
browser/metro/base/content/sanitize.js
browser/metro/base/content/sanitizeUI.js
browser/metro/base/content/startui/BookmarksView.js
browser/metro/base/content/startui/FirstRunContentOverlay.xul
browser/metro/base/content/startui/FirstRunOverlay.xul
browser/metro/base/content/startui/HistoryView.js
browser/metro/base/content/startui/RemoteTabsView.js
browser/metro/base/content/startui/Start.xul
browser/metro/base/content/startui/StartUI.js
browser/metro/base/content/startui/TopSitesView.js
browser/metro/base/content/startui/startui-scripts.js
browser/metro/base/jar.mn
browser/metro/base/moz.build
browser/metro/base/tests/mochiperf/browser_apzc.js
browser/metro/base/tests/mochiperf/browser_deck_01.js
browser/metro/base/tests/mochiperf/browser_firstx.js
browser/metro/base/tests/mochiperf/browser_layers_01.js
browser/metro/base/tests/mochiperf/browser_miscgfx_01.js
browser/metro/base/tests/mochiperf/browser_msgmgr_01.js
browser/metro/base/tests/mochiperf/browser_tabs_01.js
browser/metro/base/tests/mochiperf/head.js
browser/metro/base/tests/mochiperf/metro.ini
browser/metro/base/tests/mochiperf/msgmanagerecho.js
browser/metro/base/tests/mochiperf/res/divs_test.html
browser/metro/base/tests/mochiperf/res/fx.png
browser/metro/base/tests/mochiperf/res/ripples.html
browser/metro/base/tests/mochiperf/res/scroll_test.html
browser/metro/base/tests/mochiperf/res/scroll_test_tall.html
browser/metro/base/tests/mochiperf/res/tide.mp4
browser/metro/base/tests/mochiperf/res/tidevideo.html
browser/metro/base/tests/mochitest/browser_apzc_basic.js
browser/metro/base/tests/mochitest/browser_bookmarks.js
browser/metro/base/tests/mochitest/browser_canonizeURL.js
browser/metro/base/tests/mochitest/browser_circular_progress_indicator.js
browser/metro/base/tests/mochitest/browser_colorUtils.js
browser/metro/base/tests/mochitest/browser_context_menu_tests.js
browser/metro/base/tests/mochitest/browser_context_menu_tests_01.html
browser/metro/base/tests/mochitest/browser_context_menu_tests_02.html
browser/metro/base/tests/mochitest/browser_context_menu_tests_03.html
browser/metro/base/tests/mochitest/browser_context_menu_tests_04.html
browser/metro/base/tests/mochitest/browser_context_menu_tests_05.html
browser/metro/base/tests/mochitest/browser_context_ui.js
browser/metro/base/tests/mochitest/browser_crashprompt.js
browser/metro/base/tests/mochitest/browser_downloads.js
browser/metro/base/tests/mochitest/browser_findbar.html
browser/metro/base/tests/mochitest/browser_findbar.js
browser/metro/base/tests/mochitest/browser_flyouts.js
browser/metro/base/tests/mochitest/browser_form_auto_complete.html
browser/metro/base/tests/mochitest/browser_form_auto_complete.js
browser/metro/base/tests/mochitest/browser_form_selects.html
browser/metro/base/tests/mochitest/browser_form_selects.js
browser/metro/base/tests/mochitest/browser_history.js
browser/metro/base/tests/mochitest/browser_inputsource.js
browser/metro/base/tests/mochitest/browser_link_click.html
browser/metro/base/tests/mochitest/browser_link_click.js
browser/metro/base/tests/mochitest/browser_menu_hoverstate.js
browser/metro/base/tests/mochitest/browser_mouse_events.js
browser/metro/base/tests/mochitest/browser_notifications.js
browser/metro/base/tests/mochitest/browser_onscreen_keyboard.html
browser/metro/base/tests/mochitest/browser_onscreen_keyboard.js
browser/metro/base/tests/mochitest/browser_prefs_ui.js
browser/metro/base/tests/mochitest/browser_private_browsing.js
browser/metro/base/tests/mochitest/browser_progress_indicator.xul
browser/metro/base/tests/mochitest/browser_prompt.js
browser/metro/base/tests/mochitest/browser_remotetabs.js
browser/metro/base/tests/mochitest/browser_selection_basic.html
browser/metro/base/tests/mochitest/browser_selection_basic.js
browser/metro/base/tests/mochitest/browser_selection_caretfocus.html
browser/metro/base/tests/mochitest/browser_selection_caretfocus.js
browser/metro/base/tests/mochitest/browser_selection_contenteditable.html
browser/metro/base/tests/mochitest/browser_selection_contenteditable.js
browser/metro/base/tests/mochitest/browser_selection_frame_content.html
browser/metro/base/tests/mochitest/browser_selection_frame_content.js
browser/metro/base/tests/mochitest/browser_selection_frame_in_scrollable_container.html
browser/metro/base/tests/mochitest/browser_selection_frame_in_scrollable_container.js
browser/metro/base/tests/mochitest/browser_selection_frame_inputs.html
browser/metro/base/tests/mochitest/browser_selection_frame_inputs.js
browser/metro/base/tests/mochitest/browser_selection_frame_textarea.html
browser/metro/base/tests/mochitest/browser_selection_frame_textarea.js
browser/metro/base/tests/mochitest/browser_selection_inputs.html
browser/metro/base/tests/mochitest/browser_selection_inputs.js
browser/metro/base/tests/mochitest/browser_selection_textarea.html
browser/metro/base/tests/mochitest/browser_selection_textarea.js
browser/metro/base/tests/mochitest/browser_selection_urlbar.js
browser/metro/base/tests/mochitest/browser_sessionstore.js
browser/metro/base/tests/mochitest/browser_snappedState.js
browser/metro/base/tests/mochitest/browser_tabs.js
browser/metro/base/tests/mochitest/browser_tabs_container.js
browser/metro/base/tests/mochitest/browser_test.js
browser/metro/base/tests/mochitest/browser_tilegrid.xul
browser/metro/base/tests/mochitest/browser_tiles.js
browser/metro/base/tests/mochitest/browser_topsites.js
browser/metro/base/tests/mochitest/browser_ui_telemetry.js
browser/metro/base/tests/mochitest/browser_urlbar.js
browser/metro/base/tests/mochitest/browser_urlbar_highlightURLs.js
browser/metro/base/tests/mochitest/browser_urlbar_trimURLs.js
browser/metro/base/tests/mochitest/head.js
browser/metro/base/tests/mochitest/helpers/BookmarksHelper.js
browser/metro/base/tests/mochitest/helpers/HistoryHelper.js
browser/metro/base/tests/mochitest/helpers/ViewStateHelper.js
browser/metro/base/tests/mochitest/metro.ini
browser/metro/base/tests/mochitest/res/blankpage1.html
browser/metro/base/tests/mochitest/res/blankpage2.html
browser/metro/base/tests/mochitest/res/blankpage3.html
browser/metro/base/tests/mochitest/res/documentindesignmode.html
browser/metro/base/tests/mochitest/res/image01.png
browser/metro/base/tests/mochitest/res/testEngine.xml
browser/metro/base/tests/mochitest/res/textarea01.html
browser/metro/base/tests/mochitest/res/textblock01.html
browser/metro/base/tests/mochitest/res/textdivs01.html
browser/metro/base/tests/mochitest/res/textinput01.html
browser/metro/base/tests/unit/blank.xhtml
browser/metro/base/tests/unit/test_util_extend.js
browser/metro/base/tests/unit/test_util_populateFragmentFromString.js
browser/metro/base/tests/unit/xpcshell.ini
browser/metro/components/AboutRedirector.js
browser/metro/components/AlertsService.js
browser/metro/components/BrowserCLH.js
browser/metro/components/BrowserStartup.js
browser/metro/components/ContentDispatchChooser.js
browser/metro/components/ContentPermissionPrompt.js
browser/metro/components/DirectoryProvider.js
browser/metro/components/DownloadManagerUI.js
browser/metro/components/HelperAppDialog.js
browser/metro/components/LoginManagerPrompter.js
browser/metro/components/PromptService.js
browser/metro/components/SafeBrowsing.js
browser/metro/components/SessionStore.idl
browser/metro/components/SessionStore.js
browser/metro/components/Sidebar.js
browser/metro/components/components.manifest
browser/metro/components/moz.build
browser/metro/defs.mk
browser/metro/locales/Makefile.in
browser/metro/locales/en-US/chrome/aboutAddons.dtd
browser/metro/locales/en-US/chrome/aboutCertError.dtd
browser/metro/locales/en-US/chrome/aboutPanel.dtd
browser/metro/locales/en-US/chrome/browser.dtd
browser/metro/locales/en-US/chrome/browser.properties
browser/metro/locales/en-US/chrome/checkbox.dtd
browser/metro/locales/en-US/chrome/config.dtd
browser/metro/locales/en-US/chrome/config.properties
browser/metro/locales/en-US/chrome/crashprompt.dtd
browser/metro/locales/en-US/chrome/passwordmgr.properties
browser/metro/locales/en-US/chrome/phishing.dtd
browser/metro/locales/en-US/chrome/preferences.dtd
browser/metro/locales/en-US/chrome/region.properties
browser/metro/locales/en-US/chrome/searchPanel.dtd
browser/metro/locales/en-US/chrome/sync.dtd
browser/metro/locales/en-US/chrome/sync.properties
browser/metro/locales/generic/profile/bookmarks.json.in
browser/metro/locales/import/Makefile.in
browser/metro/locales/import/moz.build
browser/metro/locales/jar.mn
browser/metro/locales/moz.build
browser/metro/metroapp.ini.in
browser/metro/modules/ContentUtil.jsm
browser/metro/modules/CrossSlide.jsm
browser/metro/modules/View.jsm
browser/metro/modules/colorUtils.jsm
browser/metro/modules/moz.build
browser/metro/moz.build
browser/metro/profile/metro.js
browser/metro/profile/moz.build
browser/metro/shell/Makefile.in
browser/metro/shell/commandexecutehandler/CEHHelper.cpp
browser/metro/shell/commandexecutehandler/CEHHelper.h
browser/metro/shell/commandexecutehandler/CommandExecuteHandler.cpp
browser/metro/shell/commandexecutehandler/CommandExecuteHandler.def
browser/metro/shell/commandexecutehandler/CommandExecuteHandler.exe.manifest
browser/metro/shell/commandexecutehandler/CommandExecuteHandler.rc
browser/metro/shell/commandexecutehandler/Makefile.in
browser/metro/shell/commandexecutehandler/moz.build
browser/metro/shell/linktool/linktool.cpp
browser/metro/shell/linktool/moz.build
browser/metro/shell/moz.build
browser/metro/shell/priconfig.xml
browser/metro/shell/resources.pri
browser/metro/shell/testing/metrotestharness.cpp
browser/metro/shell/testing/moz.build
browser/metro/shell/tileresources/Resources.resw
browser/metro/shell/tileresources/layout.resfiles
browser/metro/shell/tileresources/resources.resfiles
browser/metro/theme/about.css
browser/metro/theme/aboutAddons.css
browser/metro/theme/aboutPage.css
browser/metro/theme/browser.css
browser/metro/theme/circularprogress.css
browser/metro/theme/config.css
browser/metro/theme/content.css
browser/metro/theme/crashprompt.css
browser/metro/theme/cssthrobber.css
browser/metro/theme/defines.inc
browser/metro/theme/firstrun.css
browser/metro/theme/firstruncontent.css
browser/metro/theme/flyoutpanel.css
browser/metro/theme/images/aboutAddonsBackground.png
browser/metro/theme/images/aboutAddonsBackgroundFillSlice.png
browser/metro/theme/images/alert-downloads-30.png
browser/metro/theme/images/appbar-icons.png
browser/metro/theme/images/arrow-left-light.png
browser/metro/theme/images/arrow-left-light@1.4x.png
browser/metro/theme/images/arrow-left-light@1.8x.png
browser/metro/theme/images/arrow-left.png
browser/metro/theme/images/arrow-left@1.4x.png
browser/metro/theme/images/arrow-left@1.8x.png
browser/metro/theme/images/arrow-top-light.png
browser/metro/theme/images/arrow-top-light@1.4x.png
browser/metro/theme/images/arrow-top-light@1.8x.png
browser/metro/theme/images/arrow-top.png
browser/metro/theme/images/arrow-top@1.4x.png
browser/metro/theme/images/arrow-top@1.8x.png
browser/metro/theme/images/arrowbox-down-blue-filled.png
browser/metro/theme/images/arrowbox-down-blue-filled@2x.png
browser/metro/theme/images/arrowbox-horiz-blue-filled.png
browser/metro/theme/images/arrowbox-horiz-blue-filled@2x.png
browser/metro/theme/images/arrowdown-16.png
browser/metro/theme/images/arrowdowndark-16.png
browser/metro/theme/images/arrowleft-16.png
browser/metro/theme/images/arrowleftdark-16.png
browser/metro/theme/images/arrowright-16.png
browser/metro/theme/images/arrowrightdark-16.png
browser/metro/theme/images/arrowup-16.png
browser/metro/theme/images/arrowupdark-16.png
browser/metro/theme/images/autoscroll.png
browser/metro/theme/images/closetab-default.png
browser/metro/theme/images/errorpage-blocked-site.png
browser/metro/theme/images/errorpage-blocked-site@1.4x.png
browser/metro/theme/images/errorpage-blocked-site@1.8x.png
browser/metro/theme/images/errorpage-cert-untrusted.png
browser/metro/theme/images/errorpage-cert-untrusted@1.4x.png
browser/metro/theme/images/errorpage-cert-untrusted@1.8x.png
browser/metro/theme/images/errorpage-warning.png
browser/metro/theme/images/errorpage-warning@1.4x.png
browser/metro/theme/images/errorpage-warning@1.8x.png
browser/metro/theme/images/exitfullscreen-hdpi.png
browser/metro/theme/images/favicon-default-32.png
browser/metro/theme/images/firefox-watermark.png
browser/metro/theme/images/flyout-back-button.png
browser/metro/theme/images/fullscreen-hdpi.png
browser/metro/theme/images/icon-autocomplete-search.png
browser/metro/theme/images/icon-autocomplete-search@1.4x.png
browser/metro/theme/images/icon-autocomplete-search@1.8x.png
browser/metro/theme/images/icons-identity-firefox.png
browser/metro/theme/images/icons-identity-firefox@1.4x.png
browser/metro/theme/images/icons-identity-firefox@1.8x.png
browser/metro/theme/images/identity-icons-generic.png
browser/metro/theme/images/identity-icons-https-ev.png
browser/metro/theme/images/identity-icons-https-mixed.png
browser/metro/theme/images/identity-icons-https.png
browser/metro/theme/images/infobar-close.png
browser/metro/theme/images/infobar-geolocation.png
browser/metro/theme/images/infobar-key.png
browser/metro/theme/images/infobar-popup.png
browser/metro/theme/images/lock.png
browser/metro/theme/images/mute-hdpi.png
browser/metro/theme/images/navbar-back.png
browser/metro/theme/images/navbar-back@1.4x.png
browser/metro/theme/images/navbar-back@1.8x.png
browser/metro/theme/images/navbar-close.png
browser/metro/theme/images/navbar-close@1.4x.png
browser/metro/theme/images/navbar-close@1.8x.png
browser/metro/theme/images/navbar-contextual-clear.png
browser/metro/theme/images/navbar-contextual-clear@1.4x.png
browser/metro/theme/images/navbar-contextual-clear@1.8x.png
browser/metro/theme/images/navbar-contextual-delete.png
browser/metro/theme/images/navbar-contextual-delete@1.4x.png
browser/metro/theme/images/navbar-contextual-delete@1.8x.png
browser/metro/theme/images/navbar-contextual-hide.png
browser/metro/theme/images/navbar-contextual-hide@1.4x.png
browser/metro/theme/images/navbar-contextual-hide@1.8x.png
browser/metro/theme/images/navbar-contextual-pin.png
browser/metro/theme/images/navbar-contextual-pin@1.4x.png
browser/metro/theme/images/navbar-contextual-pin@1.8x.png
browser/metro/theme/images/navbar-contextual-restore.png
browser/metro/theme/images/navbar-contextual-restore@1.4x.png
browser/metro/theme/images/navbar-contextual-restore@1.8x.png
browser/metro/theme/images/navbar-contextual-unpin.png
browser/metro/theme/images/navbar-contextual-unpin@1.4x.png
browser/metro/theme/images/navbar-contextual-unpin@1.8x.png
browser/metro/theme/images/navbar-download-finished.png
browser/metro/theme/images/navbar-download-finished@1.4x.png
browser/metro/theme/images/navbar-download-finished@1.8x.png
browser/metro/theme/images/navbar-download.png
browser/metro/theme/images/navbar-download@1.4x.png
browser/metro/theme/images/navbar-download@1.8x.png
browser/metro/theme/images/navbar-forward.png
browser/metro/theme/images/navbar-forward@1.4x.png
browser/metro/theme/images/navbar-forward@1.8x.png
browser/metro/theme/images/navbar-menu.png
browser/metro/theme/images/navbar-menu@1.4x.png
browser/metro/theme/images/navbar-menu@1.8x.png
browser/metro/theme/images/navbar-pin.png
browser/metro/theme/images/navbar-pin@1.4x.png
browser/metro/theme/images/navbar-pin@1.8x.png
browser/metro/theme/images/navbar-star.png
browser/metro/theme/images/navbar-star@1.4x.png
browser/metro/theme/images/navbar-star@1.8x.png
browser/metro/theme/images/newtab-default.png
browser/metro/theme/images/overlay-back.png
browser/metro/theme/images/overlay-back@1.4x.png
browser/metro/theme/images/overlay-back@1.8x.png
browser/metro/theme/images/overlay-plus.png
browser/metro/theme/images/overlay-plus@1.4x.png
browser/metro/theme/images/overlay-plus@1.8x.png
browser/metro/theme/images/panel-dark.png
browser/metro/theme/images/pause-hdpi.png
browser/metro/theme/images/pinned-hdpi.png
browser/metro/theme/images/pinned.png
browser/metro/theme/images/play-hdpi.png
browser/metro/theme/images/plus-24.png
browser/metro/theme/images/plus-34.png
browser/metro/theme/images/popup-bg-hdpi.png
browser/metro/theme/images/popup-selected-item-hdpi.png
browser/metro/theme/images/progresscircle-bg.png
browser/metro/theme/images/progresscircle.png
browser/metro/theme/images/reader-plus-icon-xhdpi.png
browser/metro/theme/images/scrubber-hdpi.png
browser/metro/theme/images/search-clear-30.png
browser/metro/theme/images/search-glass-30.png
browser/metro/theme/images/search.png
browser/metro/theme/images/selection-monocle.png
browser/metro/theme/images/selection-monocle@1.4x.png
browser/metro/theme/images/selection-monocle@1.8x.png
browser/metro/theme/images/tab-arrows.png
browser/metro/theme/images/tab-crop.png
browser/metro/theme/images/tab-overlay.png
browser/metro/theme/images/textfield.png
browser/metro/theme/images/tile-selected-check-hdpi.png
browser/metro/theme/images/tile-selected-check-rtl-hdpi.png
browser/metro/theme/images/unmute-hdpi.png
browser/metro/theme/images/urlbar-go.png
browser/metro/theme/images/urlbar-go@1.4x.png
browser/metro/theme/images/urlbar-go@1.8x.png
browser/metro/theme/images/urlbar-reload.png
browser/metro/theme/images/urlbar-reload@1.4x.png
browser/metro/theme/images/urlbar-reload@1.8x.png
browser/metro/theme/images/urlbar-stop.png
browser/metro/theme/images/urlbar-stop@1.4x.png
browser/metro/theme/images/urlbar-stop@1.8x.png
browser/metro/theme/jar.mn
browser/metro/theme/moz.build
browser/metro/theme/netError.css
browser/metro/theme/platform.css
browser/metro/theme/start.css
browser/metro/theme/tiles.css
browser/metro/theme/touchcontrols.css
browser/themes/windows/Metro_Glyph-inverted.png
browser/themes/windows/Metro_Glyph-menuPanel.png
browser/themes/windows/Metro_Glyph.png
configure.in
dom/media/MediaDecoderStateMachine.h
hal/android/AndroidGamepad.cpp
hal/cocoa/CocoaGamepad.cpp
hal/fallback/FallbackGamepad.cpp
hal/linux/LinuxGamepad.cpp
hal/linux/udev.h
hal/windows/WindowsGamepad.cpp
layout/reftests/writing-mode/ua-style-sheet-border-6-ref.html
layout/reftests/writing-mode/ua-style-sheet-border-6.html
modules/libpref/init/all.js
widget/MetroUIUtils.idl
widget/nsIWinMetroUtils.idl
widget/windows/winrt/APZController.cpp
widget/windows/winrt/APZController.h
widget/windows/winrt/DisplayInfo_sdk81.h
widget/windows/winrt/FrameworkView.cpp
widget/windows/winrt/FrameworkView.h
widget/windows/winrt/Makefile.in
widget/windows/winrt/MetroApp.cpp
widget/windows/winrt/MetroApp.h
widget/windows/winrt/MetroAppShell.cpp
widget/windows/winrt/MetroAppShell.h
widget/windows/winrt/MetroContracts.cpp
widget/windows/winrt/MetroD3DCheckHelper.h
widget/windows/winrt/MetroInput.cpp
widget/windows/winrt/MetroInput.h
widget/windows/winrt/MetroUIUtils.js
widget/windows/winrt/MetroUIUtils.manifest
widget/windows/winrt/MetroUtils.cpp
widget/windows/winrt/MetroUtils.h
widget/windows/winrt/MetroWidget.cpp
widget/windows/winrt/MetroWidget.h
widget/windows/winrt/ToastNotificationHandler.cpp
widget/windows/winrt/ToastNotificationHandler.h
widget/windows/winrt/UIAAccessibilityBridge.cpp
widget/windows/winrt/UIAAccessibilityBridge.h
widget/windows/winrt/UIABridge.cpp
widget/windows/winrt/UIABridge.idl
widget/windows/winrt/UIABridgePrivate.h
widget/windows/winrt/UIABridgePublic.h
widget/windows/winrt/WakeLockListener.cpp
widget/windows/winrt/WakeLockListener.h
widget/windows/winrt/moz.build
widget/windows/winrt/mozwrlbase.h
widget/windows/winrt/nsMetroFilePicker.cpp
widget/windows/winrt/nsMetroFilePicker.h
widget/windows/winrt/nsWinMetroUtils.cpp
widget/windows/winrt/nsWinMetroUtils.h
--- a/CLOBBER
+++ b/CLOBBER
@@ -17,13 +17,9 @@
 #
 # Modifying this file will now automatically clobber the buildbot machines \o/
 #
 
 # Are you updating CLOBBER because you think it's needed for your WebIDL
 # changes to stick? As of bug 928195, this shouldn't be necessary! Please
 # don't change CLOBBER for WebIDL changes any more.
 
-Bug 1155718: Merge Bluetooth v1/v2 files for all simple cases
-
-This patch set renames source files. This requires updating the
-build system's dependency information from scratch. The issue has
-been reported in bug 1154232.
+Bug 1039866: Removing the metro browser
--- a/accessible/windows/msaa/AccessibleWrap.cpp
+++ b/accessible/windows/msaa/AccessibleWrap.cpp
@@ -1175,23 +1175,16 @@ AccessibleWrap::GetNativeInterface(void*
 // Accessible
 
 nsresult
 AccessibleWrap::HandleAccEvent(AccEvent* aEvent)
 {
   nsresult rv = Accessible::HandleAccEvent(aEvent);
   NS_ENSURE_SUCCESS(rv, rv);
 
-  // Don't fire native MSAA events or mess with the system caret
-  // when running in metro mode. This confuses input focus tracking
-  // in metro's UIA implementation.
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    return NS_OK;
-  }
-
   uint32_t eventType = aEvent->GetEventType();
 
   static_assert(sizeof(gWinEventMap)/sizeof(gWinEventMap[0]) == nsIAccessibleEvent::EVENT_LAST_ENTRY,
                 "MSAA event map skewed");
 
   NS_ENSURE_TRUE(eventType > 0 && eventType < ArrayLength(gWinEventMap), NS_ERROR_FAILURE);
 
   uint32_t winEvent = gWinEventMap[eventType];
--- a/browser/app-rules.mk
+++ b/browser/app-rules.mk
@@ -1,4 +1,1 @@
 PURGECACHES_DIRS = $(DIST)/bin/browser
-ifdef MOZ_METRO
-PURGECACHES_DIRS += $(DIST)/bin/metro
-endif
--- a/browser/app/moz.build
+++ b/browser/app/moz.build
@@ -1,17 +1,17 @@
 # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 DIRS += ['profile/extensions']
 
-if CONFIG['OS_ARCH'] == 'WINNT' and (CONFIG['MOZ_METRO'] or CONFIG['MOZ_ASAN']):
+if CONFIG['OS_ARCH'] == 'WINNT' and CONFIG['MOZ_ASAN']:
     GeckoProgram(CONFIG['MOZ_APP_NAME'])
 else:
     GeckoProgram(CONFIG['MOZ_APP_NAME'], msvcrt='static')
 
 JS_PREFERENCE_FILES += [
     'profile/firefox.js',
 ]
 
@@ -38,20 +38,19 @@ GENERATED_INCLUDES += [
 ]
 
 LOCAL_INCLUDES += [
     '/toolkit/xre',
     '/xpcom/base',
     '/xpcom/build',
 ]
 
-if not CONFIG['MOZ_METRO']:
-  DELAYLOAD_DLLS += [
-      'mozglue.dll',
-  ]
+DELAYLOAD_DLLS += [
+    'mozglue.dll',
+]
 
 USE_LIBS += [
     'mozglue',
 ]
 
 if CONFIG['_MSC_VER']:
     # Always enter a Windows program through wmain, whether or not we're
     # a console application.
--- a/browser/app/nsBrowserApp.cpp
+++ b/browser/app/nsBrowserApp.cpp
@@ -26,20 +26,16 @@
 #include <stdio.h>
 #include <stdarg.h>
 #include <time.h>
 
 #include "nsCOMPtr.h"
 #include "nsIFile.h"
 #include "nsStringGlue.h"
 
-// Easy access to a five second startup delay used to get
-// a debugger attached in the metro environment. 
-// #define DEBUG_delay_start_metro
-
 #ifdef XP_WIN
 // we want a wmain entry point
 #ifdef MOZ_ASAN
 // ASAN requires firefox.exe to be built with -MD, and it's OK if we don't
 // support Windows XP SP2 in ASAN builds.
 #define XRE_DONT_SUPPORT_XPSP2
 #endif
 #include "nsWindowsWMain.cpp"
@@ -56,22 +52,16 @@
 #include "mozilla/WindowsDllBlocklist.h"
 
 using namespace mozilla;
 
 #ifdef XP_MACOSX
 #define kOSXResourcesFolder "Resources"
 #endif
 #define kDesktopFolder "browser"
-#define kMetroFolder "metro"
-#define kMetroAppIniFilename "metroapp.ini"
-#ifdef XP_WIN
-#define kMetroTestFile "tests.ini"
-const char* kMetroConsoleIdParam = "testconsoleid=";
-#endif
 
 static void Output(const char *fmt, ... )
 {
   va_list ap;
   va_start(ap, fmt);
 
 #ifndef XP_WIN
   vfprintf(stderr, fmt, ap);
@@ -123,50 +113,16 @@ static bool IsArg(const char* arg, const
 #if defined(XP_WIN)
   if (*arg == '/')
     return !strcasecmp(++arg, s);
 #endif
 
   return false;
 }
 
-#if defined(XP_WIN) && defined(MOZ_METRO)
-/*
- * AttachToTestHarness - Windows helper for when we are running
- * in the immersive environment. Firefox is launched by Windows in
- * response to a request by metrotestharness, which is launched by
- * runtests.py. As such stdout in fx doesn't point to the right
- * stream. This helper touches up stdout such that test output gets
- * routed to a named pipe metrotestharness creates and dumps to its
- * stdout.
- */
-static void AttachToTestHarness()
-{
-  // attach to the metrotestharness named logging pipe
-  HANDLE winOut = CreateFileA("\\\\.\\pipe\\metrotestharness",
-                              GENERIC_WRITE,
-                              FILE_SHARE_WRITE, 0,
-                              OPEN_EXISTING, 0, 0);
-  
-  if (winOut == INVALID_HANDLE_VALUE) {
-    OutputDebugStringW(L"Could not create named logging pipe.\n");
-    return;
-  }
-
-  // Set the c runtime handle
-  int stdOut = _open_osfhandle((intptr_t)winOut, _O_APPEND);
-  if (stdOut == -1) {
-    OutputDebugStringW(L"Could not open c-runtime handle.\n");
-    return;
-  }
-  FILE *fp = _fdopen(stdOut, "a");
-  *stdout = *fp;
-}
-#endif
-
 XRE_GetFileFromPathType XRE_GetFileFromPath;
 XRE_CreateAppDataType XRE_CreateAppData;
 XRE_FreeAppDataType XRE_FreeAppData;
 XRE_TelemetryAccumulateType XRE_TelemetryAccumulate;
 XRE_StartupTimelineRecordType XRE_StartupTimelineRecord;
 XRE_mainType XRE_main;
 XRE_StopLateWriteChecksType XRE_StopLateWriteChecks;
 
@@ -229,177 +185,38 @@ static int do_main(int argc, char* argv[
     }
     // xreDirectory already has a refcount from NS_NewLocalFile
     appData->xreDirectory = xreDirectory;
     int result = XRE_main(argc, argv, appData, mainFlags);
     XRE_FreeAppData(appData);
     return result;
   }
 
-  bool metroOnDesktop = false;
-
-#ifdef MOZ_METRO
-  if (argc > 1) {
-    // This command-line flag is passed to our executable when it is to be
-    // launched in metro mode (i.e. our EXE is registered as the default
-    // browser and the user has tapped our EXE's tile)
-    if (IsArg(argv[1], "ServerName:DefaultBrowserServer")) {
-      mainFlags = XRE_MAIN_FLAG_USE_METRO;
-      argv[1] = argv[0];
-      argv++;
-      argc--;
-    } else if (IsArg(argv[1], "BackgroundSessionClosed")) {
-      // This command line flag is used for indirect shutdowns, the OS
-      // relaunches Metro Firefox with this command line arg.
-      mainFlags = XRE_MAIN_FLAG_USE_METRO;
-    } else {
-#ifndef RELEASE_BUILD
-      // This command-line flag is used to test the metro browser in a desktop
-      // environment.
-      for (int idx = 1; idx < argc; idx++) {
-        if (IsArg(argv[idx], "metrodesktop")) {
-          metroOnDesktop = true;
-          // Disable crash reporting when running in metrodesktop mode.
-          char crashSwitch[] = "MOZ_CRASHREPORTER_DISABLE=1";
-          putenv(crashSwitch);
-          break;
-        } 
-      }
-#endif
-    }
-  }
-#endif
-
-  // Desktop browser launch
-  if (mainFlags != XRE_MAIN_FLAG_USE_METRO && !metroOnDesktop) {
-    ScopedAppData appData(&sAppData);
-    nsCOMPtr<nsIFile> exeFile;
-    rv = mozilla::BinaryPath::GetFile(argv[0], getter_AddRefs(exeFile));
-    if (NS_FAILED(rv)) {
-      Output("Couldn't find the application directory.\n");
-      return 255;
-    }
-
-    nsCOMPtr<nsIFile> greDir;
-    exeFile->GetParent(getter_AddRefs(greDir));
-#ifdef XP_MACOSX
-    greDir->SetNativeLeafName(NS_LITERAL_CSTRING(kOSXResourcesFolder));
-#endif
-    nsCOMPtr<nsIFile> appSubdir;
-    greDir->Clone(getter_AddRefs(appSubdir));
-    appSubdir->Append(NS_LITERAL_STRING(kDesktopFolder));
-
-    SetStrongPtr(appData.directory, static_cast<nsIFile*>(appSubdir.get()));
-    // xreDirectory already has a refcount from NS_NewLocalFile
-    appData.xreDirectory = xreDirectory;
-
-    return XRE_main(argc, argv, &appData, mainFlags);
-  }
-
-  // Metro browser launch
-#ifdef MOZ_METRO
-  nsCOMPtr<nsIFile> iniFile, appSubdir;
-
-  xreDirectory->Clone(getter_AddRefs(iniFile));
-  xreDirectory->Clone(getter_AddRefs(appSubdir));
-
-  iniFile->Append(NS_LITERAL_STRING(kMetroFolder));
-  iniFile->Append(NS_LITERAL_STRING(kMetroAppIniFilename));
-
-  appSubdir->Append(NS_LITERAL_STRING(kMetroFolder));
-
-  nsAutoCString path;
-  if (NS_FAILED(iniFile->GetNativePath(path))) {
-    Output("Couldn't get ini file path.\n");
+  ScopedAppData appData(&sAppData);
+  nsCOMPtr<nsIFile> exeFile;
+  rv = mozilla::BinaryPath::GetFile(argv[0], getter_AddRefs(exeFile));
+  if (NS_FAILED(rv)) {
+    Output("Couldn't find the application directory.\n");
     return 255;
   }
 
-  nsXREAppData *appData;
-  rv = XRE_CreateAppData(iniFile, &appData);
-  if (NS_FAILED(rv) || !appData) {
-    Output("Couldn't read application.ini");
-    return 255;
-  }
-
-  SetStrongPtr(appData->directory, static_cast<nsIFile*>(appSubdir.get()));
-  // xreDirectory already has a refcount from NS_NewLocalFile
-  appData->xreDirectory = xreDirectory;
-
-#ifdef XP_WIN
-  if (!metroOnDesktop) {
-    nsCOMPtr<nsIFile> testFile;
-
-    xreDirectory->Clone(getter_AddRefs(testFile));
-    testFile->Append(NS_LITERAL_STRING(kMetroTestFile));
-
-    nsAutoCString path;
-    if (NS_FAILED(testFile->GetNativePath(path))) {
-      Output("Couldn't get test file path.\n");
-      return 255;
-    }
+  nsCOMPtr<nsIFile> greDir;
+  exeFile->GetParent(getter_AddRefs(greDir));
+#ifdef XP_MACOSX
+  greDir->SetNativeLeafName(NS_LITERAL_CSTRING(kOSXResourcesFolder));
+#endif
+  nsCOMPtr<nsIFile> appSubdir;
+  greDir->Clone(getter_AddRefs(appSubdir));
+  appSubdir->Append(NS_LITERAL_STRING(kDesktopFolder));
 
-    // Check for a metro test harness command line args file
-    HANDLE hTestFile = CreateFileA(path.get(),
-                                   GENERIC_READ,
-                                   0, nullptr, OPEN_EXISTING,
-                                   FILE_ATTRIBUTE_NORMAL,
-                                   nullptr);
-    if (hTestFile != INVALID_HANDLE_VALUE) {
-      // Typical test harness command line args string is around 100 bytes.
-      char buffer[1024];
-      memset(buffer, 0, sizeof(buffer));
-      DWORD bytesRead = 0;
-      if (!ReadFile(hTestFile, (VOID*)buffer, sizeof(buffer)-1,
-                    &bytesRead, nullptr) || !bytesRead) {
-        CloseHandle(hTestFile);
-        printf("failed to read test file '%s'", testFile);
-        return -1;
-      }
-      CloseHandle(hTestFile);
-
-      // Build new args array
-      char* newArgv[20];
-      int newArgc = 1;
-
-      memset(newArgv, 0, sizeof(newArgv));
+  SetStrongPtr(appData.directory, static_cast<nsIFile*>(appSubdir.get()));
+  // xreDirectory already has a refcount from NS_NewLocalFile
+  appData.xreDirectory = xreDirectory;
 
-      char* ptr = buffer;
-      newArgv[0] = ptr;
-      while (*ptr != '\0' &&
-             (ptr - buffer) < sizeof(buffer) &&
-             newArgc < ARRAYSIZE(newArgv)) {
-        if (isspace(*ptr)) {
-          *ptr = '\0';
-          ptr++;
-          newArgv[newArgc] = ptr;
-          newArgc++;
-          continue;
-        }
-        ptr++;
-      }
-      if (ptr == newArgv[newArgc-1])
-        newArgc--;
-
-      // attach browser stdout to metrotestharness stdout
-      AttachToTestHarness();
-
-      int result = XRE_main(newArgc, newArgv, appData, mainFlags);
-      XRE_FreeAppData(appData);
-      return result;
-    }
-  }
-#endif
-
-  int result = XRE_main(argc, argv, appData, mainFlags);
-  XRE_FreeAppData(appData);
-  return result;
-#endif
-
-  NS_NOTREACHED("browser do_main failed to pickup proper initialization");
-  return 255;
+  return XRE_main(argc, argv, &appData, mainFlags);
 }
 
 #ifdef XP_WIN
 
 /**
  * Used only when GetTickCount64 is not available on the platform.
  * Last result of GetTickCount call. Kept in [ms].
  */
@@ -567,21 +384,18 @@ InitXPCOMGlue(const char *argv0, nsIFile
   }
 
   rv = XPCOMGlueLoadXULFunctions(kXULFuncs);
   if (NS_FAILED(rv)) {
     Output("Couldn't load XRE functions.\n");
     return rv;
   }
 
-#ifndef MOZ_METRO
-  // This will set this thread as the main thread, which in metro land is
-  // wrong. We initialize this later from the right thread in nsAppRunner.
+  // This will set this thread as the main thread.
   NS_LogInit();
-#endif
 
   // chop XPCOM_DLL off exePath
   *lastSlash = '\0';
 #ifdef XP_MACOSX
   lastSlash = strrchr(exePath, XPCOM_FILE_PATH_SEPARATOR[0]);
   strcpy(lastSlash + 1, kOSXResourcesFolder);
 #endif
 #ifdef XP_WIN
@@ -592,19 +406,16 @@ InitXPCOMGlue(const char *argv0, nsIFile
                              xreDirectory);
 #endif
 
   return rv;
 }
 
 int main(int argc, char* argv[])
 {
-#ifdef DEBUG_delay_start_metro
-  Sleep(5000);
-#endif
   uint64_t start = TimeStamp_Now();
 
 #ifdef XP_MACOSX
   TriggerQuirks();
 #endif
 
   int gotCounters;
 #if defined(XP_UNIX)
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -135,17 +135,16 @@ pref("app.update.cert.maxErrors", 5);
 // 2. the preference name must exist as an attribute name on the certificate and
 //    the value for the name must be the same as the value for the attribute name
 //    on the certificate.
 // If these conditions aren't met it will be treated the same as when there is
 // no update available. This validation will not be performed when the
 // |app.update.url.override| user preference has been set for testing updates or
 // when the |app.update.cert.checkAttributes| preference is set to false. Also,
 // the |app.update.url.override| preference should ONLY be used for testing.
-// IMPORTANT! metro.js should also be updated for updates to certs.X.issuerName
 // IMPORTANT! media.gmp-manager.certs.* prefs should also be updated if these
 // are updated.
 
 // Non-release builds (Nightly, Aurora, etc.) have been switched over to aus4.mozilla.org.
 // This condition protects us against accidentally using it for release builds.
 pref("app.update.certs.1.issuerName", "CN=DigiCert Secure Server CA,O=DigiCert Inc,C=US");
 pref("app.update.certs.1.commonName", "aus4.mozilla.org");
 
@@ -157,27 +156,18 @@ pref("app.update.certs.2.commonName", "a
 pref("app.update.enabled", true);
 
 // This preference turns on app.update.mode and allows automatic download and
 // install to take place. We use a separate boolean toggle for this to make
 // the UI easier to construct.
 pref("app.update.auto", true);
 
 // See chart in nsUpdateService.js source for more details
-// incompatibilities are ignored by updates in Metro
 pref("app.update.mode", 1);
 
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-// Enables update checking in the Metro environment.
-// add-on incompatibilities are ignored by updates in Metro.
-pref("app.update.metro.enabled", true);
-#endif
-#endif
-
 // If set to true, the Update Service will present no UI for any event.
 pref("app.update.silent", false);
 
 // If set to true, the hamburger button will show badges for update events.
 #ifndef RELEASE_BUILD
 pref("app.update.badge", true);
 #else
 pref("app.update.badge", false);
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -43,25 +43,16 @@
                           command="Browser:OpenLocation"
                           key="focusURLBar"/>
 #endif
                 <menuitem id="menu_openFile"
                           label="&openFileCmd.label;"
                           command="Browser:OpenFile"
                           key="openFileKb"
                           accesskey="&openFileCmd.accesskey;"/>
-#ifdef HAVE_SHELL_SERVICE
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-                <menuitem id="menu_switchToMetro"
-                          label="&switchToMetroCmd2.label;"
-                          oncommand="SwitchToMetro()"/>
-#endif
-#endif
-#endif
                 <menuitem id="menu_close"
                           class="show-only-for-keyboard"
                           label="&closeCmd.label;"
                           key="key_close"
                           accesskey="&closeCmd.accesskey;"
                           command="cmd_close"/>
                 <menuitem id="menu_closeWindow"
                           class="show-only-for-keyboard"
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1388,21 +1388,16 @@ var gBrowserInit = {
     // tabs and to postpone saving the pref to disk.
     try {
       const startupCrashEndDelay = 30 * 1000;
       setTimeout(Services.startup.trackStartupCrashEnd, startupCrashEndDelay);
     } catch (ex) {
       Cu.reportError("Could not end startup crash tracking: " + ex);
     }
 
-    if (typeof WindowsPrefSync !== 'undefined') {
-      // Pulls in Metro controlled prefs and pushes out Desktop controlled prefs
-      WindowsPrefSync.init();
-    }
-
     // Delay this a minute because there's no rush
     setTimeout(() => {
       this.gmpInstallManager = new GMPInstallManager();
       // We don't really care about the results, if someone is interested they
       // can check the log.
       this.gmpInstallManager.simpleCheckAndInstall().then(null, () => {});
     }, 1000 * 60);
 
@@ -1556,19 +1551,16 @@ var gBrowserInit = {
       window.messageManager.removeMessageListener("Browser:LoadURI", RedirectLoad);
 
       try {
         gPrefService.removeObserver(gHomeButton.prefDomain, gHomeButton);
       } catch (ex) {
         Cu.reportError(ex);
       }
 
-      if (typeof WindowsPrefSync !== 'undefined') {
-        WindowsPrefSync.uninit();
-      }
       if (this.gmpInstallManager) {
         this.gmpInstallManager.uninit();
       }
 
       BrowserOffline.uninit();
       OfflineApps.uninit();
       IndexedDBPromptHelper.uninit();
       LightweightThemeListener.uninit();
@@ -3032,66 +3024,16 @@ function populateMirrorTabMenu(popup) {
     let item = doc.createElement("menuitem");
     item.setAttribute("label", service.friendlyName);
     item._service = service;
     item.addEventListener("command", mirrorMenuItemClicked);
     popup.appendChild(item);
   });
 };
 
-function _checkDefaultAndSwitchToMetro() {
-#ifdef HAVE_SHELL_SERVICE
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-  let shell = Components.classes["@mozilla.org/browser/shell-service;1"].
-    getService(Components.interfaces.nsIShellService);
-  let isDefault = shell.isDefaultBrowser(false, false);
-
-  if (isDefault) {
-    let appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"].
-    getService(Components.interfaces.nsIAppStartup);
-
-    Services.prefs.setBoolPref('browser.sessionstore.resume_session_once', true);
-
-    let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"]
-                     .createInstance(Ci.nsISupportsPRBool);
-    Services.obs.notifyObservers(cancelQuit, "quit-application-requested", "restart");
-
-    if (!cancelQuit.data) {
-      appStartup.quit(Components.interfaces.nsIAppStartup.eAttemptQuit |
-                      Components.interfaces.nsIAppStartup.eRestartTouchEnvironment);
-    }
-    return true;
-  }
-  return false;
-#endif
-#endif
-#endif
-}
-
-function SwitchToMetro() {
-#ifdef HAVE_SHELL_SERVICE
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-  if (this._checkDefaultAndSwitchToMetro()) {
-    return;
-  }
-
-  let shell = Components.classes["@mozilla.org/browser/shell-service;1"].
-    getService(Components.interfaces.nsIShellService);
-
-  shell.setDefaultBrowser(false, false);
-
-  let intervalID = window.setInterval(this._checkDefaultAndSwitchToMetro, 1000);
-  window.setTimeout(function() { window.clearInterval(intervalID); }, 10000);
-#endif
-#endif
-#endif
-}
-
 function getWebNavigation()
 {
   return gBrowser.webNavigation;
 }
 
 function BrowserReloadWithFlags(reloadFlags) {
   let url = gBrowser.currentURI.spec;
   if (gBrowser.updateBrowserRemotenessByURL(gBrowser.selectedBrowser, url)) {
--- a/browser/base/content/sync/setup.js
+++ b/browser/base/content/sync/setup.js
@@ -467,23 +467,16 @@ var gSyncSetup = {
                                                 challenge, response);
 
         if (error == null) {
           Weave.Service.identity.account = email;
           Weave.Service.identity.basicPassword = password;
           Weave.Service.identity.syncKey = Weave.Utils.generatePassphrase();
           this._handleNoScript(false);
           Weave.Svc.Prefs.set("firstSync", "newAccount");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-          if (document.getElementById("metroSetupCheckbox").checked) {
-            Services.metro.storeSyncInfo(email, password, Weave.Service.identity.syncKey);
-          }
-#endif
-#endif
           this.wizardFinish();
           return false;
         }
 
         image.setAttribute("status", "error");
         label.value = Weave.Utils.getErrorString(error);
         return false;
       case EXISTING_ACCOUNT_LOGIN_PAGE:
--- a/browser/base/content/sync/setup.xul
+++ b/browser/base/content/sync/setup.xul
@@ -167,30 +167,16 @@
         </row>
         <row id="serverFeedbackRow" align="center" hidden="true">
           <spacer/>
           <hbox>
             <image class="statusIcon"/>
             <label class="status" value=" "/>
           </hbox>
         </row>
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-        <row id="metroRow" align="center">
-          <spacer/>
-          <hbox align="center">
-            <checkbox label="&setup.setupMetro.label;"
-                      accesskey="&setup.setupMetro.accesskey;"
-                      control="weavePasswordConfirm"
-                      id="metroSetupCheckbox"
-                      checked="true"/>
-          </hbox>
-        </row>
-#endif
-#endif
         <row id="TOSRow" align="center">
           <spacer/>
           <hbox align="center">
             <checkbox id="tos"
                       accesskey="&setup.tosAgree1.accesskey;"
                       oncommand="this.focus(); gSyncSetup.checkFields();"/>
             <description id="tosDesc"
                          flex="1"
--- a/browser/base/content/test/general/browser_bug710878.js
+++ b/browser/base/content/test/general/browser_bug710878.js
@@ -1,29 +1,26 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 function test()
 {
   waitForExplicitFinish();
 
-  let doc;
-
   gBrowser.selectedTab = gBrowser.addTab();
   gBrowser.selectedBrowser.addEventListener("load", function onload() {
     gBrowser.selectedBrowser.removeEventListener("load", onload, true);
-    doc = content.document;
     waitForFocus(performTest, content);
   }, true);
 
-  content.location = "data:text/html,<a href='%23xxx'><span>word1 <span> word2 </span></span><span> word3</span></a>";
+  content.location = "data:text/html;charset=utf-8,<a href='%23xxx'><span>word1 <span> word2 </span></span><span> word3</span></a>";
 
   function performTest()
   {
+    let doc = content.document;
     let link = doc.querySelector("a");;
     let text = gatherTextUnder(link);
     is(text, "word1 word2 word3", "Text under link is correctly computed.");
-    doc = null;
     gBrowser.removeCurrentTab();
     finish();
   }
 }
 
--- a/browser/branding/aurora/Makefile.in
+++ b/browser/branding/aurora/Makefile.in
@@ -1,16 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 include $(topsrcdir)/config/config.mk
 
-# On Windows only do this step for browser, skip for metro.
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows browser)
+ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
 BRANDING_FILES := \
 	firefox.ico \
 	document.ico \
 	branding.nsi \
 	appname.bmp \
 	bgintro.bmp \
 	clock.bmp \
 	particles.bmp \
@@ -42,15 +41,8 @@ BRANDING_FILES := \
 	default48.png \
 	mozicon128.png \
 	$(NULL)
 endif
 
 BRANDING_DEST := $(DIST)/branding
 BRANDING_TARGET := export
 INSTALL_TARGETS += BRANDING
-
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-VISUALMANIFEST := VisualElementsManifest.xml
-VISUALMANIFEST_FLAGS := -Fsubstitution -DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNAME}
-VISUALMANIFEST_PATH := $(DIST)/bin
-PP_TARGETS += VISUALMANIFEST
-endif
deleted file mode 100644
--- a/browser/branding/aurora/VisualElementsManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Application
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <VisualElements
-      DisplayName="@MOZ_APP_DISPLAYNAME@"
-      Logo="tileresources\VisualElements_logo.png"
-      SmallLogo="tileresources\VisualElements_smalllogo.png"
-      ForegroundText="light"
-      BackgroundColor="#1c112e">
-    <DefaultTile
-        ShortName="@MOZ_APP_DISPLAYNAME@"
-        ShowName="allLogos"
-            />
-    <SplashScreen
-        Image="tileresources\VisualElements_splashscreen.png" />
-  </VisualElements>
-</Application>
--- a/browser/branding/aurora/content/Makefile.in
+++ b/browser/branding/aurora/content/Makefile.in
@@ -1,13 +1,6 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Branding Makefile
 #  - jars chrome artwork
-
-# resources needed for the metro tile interface
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-TILE_FILES := $(wildcard $(srcdir)/VisualElements*)
-TILE_DEST := $(DIST)/bin/tileresources
-INSTALL_TARGETS += TILE
-endif
deleted file mode 100644
index a62a4ca37cdab53198758b4d839b30862ac61128..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f5c4352e5caa7b43a16280fc2085dee3a9b47f95..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 491a20909d52be00deca324c45b37d1e4c4ed761..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/aurora/content/jar.mn
+++ b/browser/branding/aurora/content/jar.mn
@@ -13,16 +13,8 @@ browser.jar:
   content/branding/icon64.png                    (icon64.png)
   content/branding/icon16.png                    (../default16.png)
   content/branding/icon32.png                    (../default32.png)
   content/branding/icon128.png                   (../mozicon128.png)
   content/branding/identity-icons-brand.png      (identity-icons-brand.png)
   content/branding/identity-icons-brand@2x.png   (identity-icons-brand@2x.png)
   content/branding/silhouette-40.svg             (silhouette-40.svg)
   content/branding/aboutDialog.css               (aboutDialog.css)
-#ifdef MOZ_METRO
-  content/branding/metro-about.css               (metro-about.css)
-  content/branding/metro-about-footer.png        (metro-about-footer.png)
-  content/branding/metro-about-wordmark.png      (metro-about-wordmark.png)
-  content/branding/metro_firstrun_logo.png       (metro_firstrun_logo.png)
-  content/branding/metro_firstrun_logo@1.4x.png  (metro_firstrun_logo@1.4x.png)
-  content/branding/metro_firstrun_logo@1.8x.png  (metro_firstrun_logo@1.8x.png)
-#endif
deleted file mode 100644
index 4f918ccdbc13ac106571b54c0da15100f8768fd1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b63d7d6abf1df210b18c6e97b5c1001d70b66d6a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/branding/aurora/content/metro-about.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#about-flyoutpanel {
-  background-color: #331e54;
-  color: white;
-}
-
-#about-policy-label:hover,
-#about-policy-label:active {
-  background: #181327;
-}
-
deleted file mode 100644
index 425eb1f9997bc9073436f79d5fad1d9a1f25d877..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a177b237e7b5eb7967b5e3607194fd76acb0f956..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0f313f5df809a240822cc8508a00280da1e250fb..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/nightly/Makefile.in
+++ b/browser/branding/nightly/Makefile.in
@@ -1,16 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 include $(topsrcdir)/config/config.mk
 
-# On Windows only do this step for browser, skip for metro.
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows browser)
+ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
 BRANDING_FILES := \
 	firefox.ico \
 	document.ico \
 	branding.nsi \
 	appname.bmp \
 	bgintro.bmp \
 	clock.bmp \
 	particles.bmp \
@@ -42,15 +41,8 @@ BRANDING_FILES := \
 	default48.png \
 	mozicon128.png \
 	$(NULL)
 endif
 
 BRANDING_DEST := $(DIST)/branding
 BRANDING_TARGET := export
 INSTALL_TARGETS += BRANDING
-
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-VISUALMANIFEST := VisualElementsManifest.xml
-VISUALMANIFEST_FLAGS := -Fsubstitution -DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNAME}
-VISUALMANIFEST_PATH := $(DIST)/bin
-PP_TARGETS += VISUALMANIFEST
-endif
deleted file mode 100644
--- a/browser/branding/nightly/VisualElementsManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Application
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <VisualElements
-      DisplayName="@MOZ_APP_DISPLAYNAME@"
-      Logo="tileresources\VisualElements_logo.png"
-      SmallLogo="tileresources\VisualElements_smalllogo.png"
-      ForegroundText="light"
-      BackgroundColor="#001226">
-    <DefaultTile
-        ShortName="@MOZ_APP_DISPLAYNAME@"
-        ShowName="allLogos"
-            />
-    <SplashScreen
-        Image="tileresources\VisualElements_splashscreen.png" />
-  </VisualElements>
-</Application>
--- a/browser/branding/nightly/content/Makefile.in
+++ b/browser/branding/nightly/content/Makefile.in
@@ -1,13 +1,6 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Branding Makefile
 #  - jars chrome artwork
-
-# resources needed for the metro tile interface
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-TILE_FILES := $(wildcard $(srcdir)/VisualElements*)
-TILE_DEST := $(DIST)/bin/tileresources
-INSTALL_TARGETS += TILE
-endif
deleted file mode 100644
index 3ed86be8996760a435427ab4d65e92cb1b29de9d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e0ec97d1e8827ff2737384ee0e99852ad12b53ce..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 264a44dbac5925f3e684282a14ad32b22ec5e8d1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/nightly/content/jar.mn
+++ b/browser/branding/nightly/content/jar.mn
@@ -13,16 +13,8 @@ browser.jar:
   content/branding/icon64.png                    (icon64.png)
   content/branding/icon16.png                    (../default16.png)
   content/branding/icon32.png                    (../default32.png)
   content/branding/icon128.png                   (../mozicon128.png)
   content/branding/identity-icons-brand.png      (identity-icons-brand.png)
   content/branding/identity-icons-brand@2x.png   (identity-icons-brand@2x.png)
   content/branding/silhouette-40.svg             (silhouette-40.svg)
   content/branding/aboutDialog.css               (aboutDialog.css)
-#ifdef MOZ_METRO
-  content/branding/metro-about.css               (metro-about.css)
-  content/branding/metro-about-footer.png        (metro-about-footer.png)
-  content/branding/metro-about-wordmark.png      (metro-about-wordmark.png)
-  content/branding/metro_firstrun_logo.png       (metro_firstrun_logo.png)
-  content/branding/metro_firstrun_logo@1.4x.png  (metro_firstrun_logo@1.4x.png)
-  content/branding/metro_firstrun_logo@1.8x.png  (metro_firstrun_logo@1.8x.png)
-#endif
deleted file mode 100644
index 8e507f174085347b918c8ac422374613713593be..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 94569858eeede9c42297637af3396b39b13587c9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/branding/nightly/content/metro-about.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#about-flyoutpanel {
-  background-color: #002147;
-  color: white;
-}
-
-#about-policy-label:hover,
-#about-policy-label:active {
-  background: #0a111c;
-}
-
deleted file mode 100644
index d54fb00af8b3ce510acb0af9e4339a28cbbfb8b8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d2a2fffc7d4192bb4ea7dc668ab5d0a2a0eb1c75..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2d5297f4c0bd942bbd6aa7ef1c330ae285df22de..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/official/Makefile.in
+++ b/browser/branding/official/Makefile.in
@@ -1,16 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 include $(topsrcdir)/config/config.mk
 
-# On Windows only do this step for browser, skip for metro.
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows browser)
+ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
 BRANDING_FILES := \
 	firefox.ico \
 	document.ico \
 	branding.nsi \
 	appname.bmp \
 	bgintro.bmp \
 	clock.bmp \
 	particles.bmp \
@@ -42,15 +41,8 @@ BRANDING_FILES := \
 	default48.png \
 	mozicon128.png \
 	$(NULL)
 endif
 
 BRANDING_DEST := $(DIST)/branding
 BRANDING_TARGET := export
 INSTALL_TARGETS += BRANDING
-
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-VISUALMANIFEST := VisualElementsManifest.xml
-VISUALMANIFEST_FLAGS := -Fsubstitution -DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNAME}
-VISUALMANIFEST_PATH := $(DIST)/bin
-PP_TARGETS += VISUALMANIFEST
-endif
deleted file mode 100644
--- a/browser/branding/official/VisualElementsManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Application
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <VisualElements
-      DisplayName="@MOZ_APP_DISPLAYNAME@"
-      Logo="tileresources\VisualElements_logo.png"
-      SmallLogo="tileresources\VisualElements_smalllogo.png"
-      ForegroundText="light"
-      BackgroundColor="#1895f5">
-    <DefaultTile
-        ShortName="@MOZ_APP_DISPLAYNAME@"
-        ShowName="allLogos"
-            />
-    <SplashScreen
-        Image="tileresources\VisualElements_splashscreen.png" />
-  </VisualElements>
-</Application>
--- a/browser/branding/official/content/Makefile.in
+++ b/browser/branding/official/content/Makefile.in
@@ -1,13 +1,6 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Branding Makefile
 #  - jars chrome artwork
-
-# resources needed for the metro tile interface
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-TILE_FILES := $(wildcard $(srcdir)/VisualElements*)
-TILE_DEST := $(DIST)/bin/tileresources
-INSTALL_TARGETS += TILE
-endif
deleted file mode 100644
index 808db79a4805d1ff029a11d94e3f8dcb9c9668f8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e9d5bbb4b29a5eb50de982bb66338e81d413364f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c9e21ba6d9c062d26abbdc61079056563be8f869..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/official/content/jar.mn
+++ b/browser/branding/official/content/jar.mn
@@ -12,16 +12,8 @@ browser.jar:
   content/branding/icon64.png                    (icon64.png)
   content/branding/icon16.png                    (../default16.png)
   content/branding/icon32.png                    (../default32.png)
   content/branding/icon128.png                   (../mozicon128.png)
   content/branding/identity-icons-brand.png      (identity-icons-brand.png)
   content/branding/identity-icons-brand@2x.png   (identity-icons-brand@2x.png)
   content/branding/silhouette-40.svg             (silhouette-40.svg)
   content/branding/aboutDialog.css               (aboutDialog.css)
-#ifdef MOZ_METRO
-  content/branding/metro-about.css               (metro-about.css)
-  content/branding/metro-about-footer.png        (metro-about-footer.png)
-  content/branding/metro-about-wordmark.png      (metro-about-wordmark.png)
-  content/branding/metro_firstrun_logo.png       (metro_firstrun_logo.png)
-  content/branding/metro_firstrun_logo@1.4x.png  (metro_firstrun_logo@1.4x.png)
-  content/branding/metro_firstrun_logo@1.8x.png  (metro_firstrun_logo@1.8x.png)
-#endif
deleted file mode 100644
index 00df16c62c4ed329a008af9fa041bb8ebebf625e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 496d769da996e7f78e93599378146601a1e566f3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/branding/official/content/metro-about.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#about-flyoutpanel {
-  background-color: #0095dd;
-  color: white;
-}
-
-#about-policy-label:hover,
-#about-policy-label:active {
-  background: #036fa4;
-}
-
deleted file mode 100644
index 3365ffb606d49e0894242aac91d5bbf050ec9b8a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 99acd0a499a69a2b0f73bdb10e1041156670376f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cdb8d339654f8a75794b4d696dff3be9cc53aa6e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/unofficial/Makefile.in
+++ b/browser/branding/unofficial/Makefile.in
@@ -1,16 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 include $(topsrcdir)/config/config.mk
 
-# On Windows only do this step for browser, skip for metro.
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows browser)
+ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
 BRANDING_FILES := \
 	firefox.ico \
 	document.ico \
 	branding.nsi \
 	appname.bmp \
 	bgintro.bmp \
 	clock.bmp \
 	particles.bmp \
@@ -42,15 +41,8 @@ BRANDING_FILES := \
 	default48.png \
 	mozicon128.png \
 	$(NULL)
 endif
 
 BRANDING_DEST := $(DIST)/branding
 BRANDING_TARGET := export
 INSTALL_TARGETS += BRANDING
-
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-VISUALMANIFEST := VisualElementsManifest.xml
-VISUALMANIFEST_FLAGS := -Fsubstitution -DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNAME}
-VISUALMANIFEST_PATH := $(DIST)/bin
-PP_TARGETS += VISUALMANIFEST
-endif
deleted file mode 100644
--- a/browser/branding/unofficial/VisualElementsManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Application
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <VisualElements
-      DisplayName="@MOZ_APP_DISPLAYNAME@"
-      Logo="tileresources\VisualElements_logo.png"
-      SmallLogo="tileresources\VisualElements_smalllogo.png"
-      ForegroundText="light"
-      BackgroundColor="#0a1833">
-    <DefaultTile
-        ShortName="@MOZ_APP_DISPLAYNAME@"
-        ShowName="allLogos"
-            />
-    <SplashScreen
-        Image="tileresources\VisualElements_splashscreen.png" />
-  </VisualElements>
-</Application>
--- a/browser/branding/unofficial/content/Makefile.in
+++ b/browser/branding/unofficial/content/Makefile.in
@@ -1,13 +1,6 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Branding Makefile
 #  - jars chrome artwork
-
-# resources needed for the metro tile interface
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-TILE_FILES := $(wildcard $(srcdir)/VisualElements*)
-TILE_DEST := $(DIST)/bin/tileresources
-INSTALL_TARGETS += TILE
-endif
deleted file mode 100644
index 7f8f5b9d69e2378a5933d376ff5b09ec54a5945d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8f60ca02a1e3c385170bed3243a922433ddc4841..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d7799109b4e16e7c947da0c76c58775122d8d2b8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/unofficial/content/jar.mn
+++ b/browser/branding/unofficial/content/jar.mn
@@ -13,16 +13,8 @@ browser.jar:
   content/branding/icon64.png                    (icon64.png)
   content/branding/icon16.png                    (../default16.png)
   content/branding/icon32.png                    (../default32.png)
   content/branding/icon128.png                   (../mozicon128.png)
   content/branding/identity-icons-brand.png      (identity-icons-brand.png)
   content/branding/identity-icons-brand@2x.png   (identity-icons-brand@2x.png)
   content/branding/silhouette-40.svg             (silhouette-40.svg)
   content/branding/aboutDialog.css               (aboutDialog.css)
-#ifdef MOZ_METRO
-  content/branding/metro-about.css               (metro-about.css)
-  content/branding/metro-about-footer.png        (metro-about-footer.png)
-  content/branding/metro-about-wordmark.png      (metro-about-wordmark.png)
-  content/branding/metro_firstrun_logo.png       (metro_firstrun_logo.png)
-  content/branding/metro_firstrun_logo@1.4x.png  (metro_firstrun_logo@1.4x.png)
-  content/branding/metro_firstrun_logo@1.8x.png  (metro_firstrun_logo@1.8x.png)
-#endif
deleted file mode 100644
index 8e507f174085347b918c8ac422374613713593be..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 94569858eeede9c42297637af3396b39b13587c9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/branding/unofficial/content/metro-about.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#about-flyoutpanel {
-  background-color: #002147;
-  color: white;
-}
-
-#about-policy-label:hover,
-#about-policy-label:active {
-  background: #0a111c;
-}
-
deleted file mode 100644
index d54fb00af8b3ce510acb0af9e4339a28cbbfb8b8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d2a2fffc7d4192bb4ea7dc668ab5d0a2a0eb1c75..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2d5297f4c0bd942bbd6aa7ef1c330ae285df22de..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/build.mk
+++ b/browser/build.mk
@@ -47,14 +47,9 @@ ifdef ENABLE_TESTS
 mochitest-browser-chrome:
 	$(RUN_MOCHITEST) --browser-chrome
 	$(CHECK_TEST_ERROR)
 
 mochitest:: mochitest-browser-chrome
 
 .PHONY: mochitest-browser-chrome
 
-mochitest-metro-chrome:
-	$(RUN_MOCHITEST) --metro-immersive --browser-chrome
-	$(CHECK_TEST_ERROR)
-
-
 endif
--- a/browser/components/customizableui/CustomizableUI.jsm
+++ b/browser/components/customizableui/CustomizableUI.jsm
@@ -167,20 +167,16 @@ let CustomizableUIInternal = {
       "find-button",
       "preferences-button",
       "add-ons-button",
 #ifndef MOZ_DEV_EDITION
       "developer-button",
 #endif
     ];
 
-    if (gPalette.has("switch-to-metro-button")) {
-      panelPlacements.push("switch-to-metro-button");
-    }
-
 #ifdef E10S_TESTING_ONLY
     if (gPalette.has("e10s-button")) {
       let newWindowIndex = panelPlacements.indexOf("new-window-button");
       if (newWindowIndex > -1) {
         panelPlacements.splice(newWindowIndex + 1, 0, "e10s-button");
       }
     }
 #endif
--- a/browser/components/customizableui/CustomizableWidgets.jsm
+++ b/browser/components/customizableui/CustomizableWidgets.jsm
@@ -988,40 +988,16 @@ const CustomizableWidgets = [
                 aEvent.target.ownerDocument &&
                 aEvent.target.ownerDocument.defaultView;
       if (win && typeof win.BrowserOpenApps == "function") {
         win.BrowserOpenApps();
       }
     }
   }];
 
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-if (Services.metro && Services.metro.supported) {
-  let widgetArgs = {tooltiptext: "switch-to-metro-button2.tooltiptext"};
-  let brandShortName = BrandBundle.GetStringFromName("brandShortName");
-  let metroTooltip = CustomizableUI.getLocalizedProperty(widgetArgs, "tooltiptext",
-                                                         [brandShortName]);
-  CustomizableWidgets.push({
-    id: "switch-to-metro-button",
-    label: "switch-to-metro-button2.label",
-    tooltiptext: metroTooltip,
-    defaultArea: CustomizableUI.AREA_PANEL,
-    showInPrivateBrowsing: false, /* See bug 928068 */
-    onCommand: function(aEvent) {
-      let win = aEvent.view;
-      if (win && typeof win.SwitchToMetro == "function") {
-        win.SwitchToMetro();
-      }
-    }
-  });
-}
-#endif
-#endif
-
 if (Services.prefs.getBoolPref("privacy.panicButton.enabled")) {
   CustomizableWidgets.push({
     id: "panic-button",
     type: "view",
     viewId: "PanelUI-panicView",
     _sanitizer: null,
     _ensureSanitizer: function() {
       if (!this.sanitizer) {
--- a/browser/components/customizableui/test/browser_876944_customize_mode_create_destroy.js
+++ b/browser/components/customizableui/test/browser_876944_customize_mode_create_destroy.js
@@ -22,26 +22,26 @@ add_task(function testWrapUnwrap() {
   ok(!wrapper, "There should be a wrapper");
   let item = document.getElementById(kTestWidget1);
   ok(!item, "There should no longer be an item");
 });
 
 // Creating and destroying a widget should correctly deal with panel placeholders
 add_task(function testPanelPlaceholders() {
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
-  let expectedPlaceholders = (isInWin8() ? 1 : 2) + (isInDevEdition() ? 1 : 0);
+  let expectedPlaceholders = 2 + (isInDevEdition() ? 1 : 0);
   is(panel.querySelectorAll(".panel-customization-placeholder").length, expectedPlaceholders, "The number of placeholders should be correct.");
   CustomizableUI.createWidget({id: kTestWidget2, label: 'Pretty label', tooltiptext: 'Pretty tooltip', defaultArea: CustomizableUI.AREA_PANEL});
   let elem = document.getElementById(kTestWidget2);
   let wrapper = document.getElementById("wrapper-" + kTestWidget2);
   ok(elem, "There should be an item");
   ok(wrapper, "There should be a wrapper");
   is(wrapper.firstChild.id, kTestWidget2, "Wrapper should have test widget");
   is(wrapper.parentNode, panel, "Wrapper should be in panel");
-  expectedPlaceholders = (isInWin8() ? 3 : 1) + (isInDevEdition() ? 1 : 0);
+  expectedPlaceholders = 1 + (isInDevEdition() ? 1 : 0);
   is(panel.querySelectorAll(".panel-customization-placeholder").length, expectedPlaceholders, "The number of placeholders should be correct.");
   CustomizableUI.destroyWidget(kTestWidget2);
   wrapper = document.getElementById("wrapper-" + kTestWidget2);
   ok(!wrapper, "There should be a wrapper");
   let item = document.getElementById(kTestWidget2);
   ok(!item, "There should no longer be an item");
   yield endCustomizing();
 });
--- a/browser/components/customizableui/test/browser_880382_drag_wide_widgets_in_panel.js
+++ b/browser/components/customizableui/test/browser_880382_drag_wide_widgets_in_panel.js
@@ -19,17 +19,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, printButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let newWindowButton = document.getElementById("new-window-button");
   simulateItemDrag(zoomControls, newWindowButton);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
@@ -46,17 +45,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, savePageButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(CustomizableUI.inDefaultState, "Should be in default state.");
 });
 
 
 // Dragging the zoom controls to be before the new-window button should not move any widgets.
 add_task(function() {
@@ -71,17 +69,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, newWindowButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the zoom controls to be before the history-panelmenu should move the zoom-controls in to the row higher than the history-panelmenu.
 add_task(function() {
   yield startCustomizing();
@@ -95,17 +92,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, historyPanelMenu);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let newWindowButton = document.getElementById("new-window-button");
   simulateItemDrag(zoomControls, newWindowButton);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
@@ -123,17 +119,16 @@ add_task(function() {
                              "history-panelmenu",
                              "fullscreen-button",
                              "zoom-controls",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, preferencesButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let newWindowButton = document.getElementById("new-window-button");
   simulateItemDrag(zoomControls, newWindowButton);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
@@ -151,17 +146,16 @@ add_task(function() {
                                "print-button",
                                "history-panelmenu",
                                "fullscreen-button",
                                "find-button",
                                "preferences-button",
                                "add-ons-button",
                                "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterInsert);
-  addSwitchToMetroButtonInWindows8(placementsAfterInsert);
   simulateItemDrag(openFileButton, zoomControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterInsert);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let palette = document.getElementById("customization-palette");
   // Check that the palette items are re-wrapped correctly.
   let feedWrapper = document.getElementById("wrapper-feed-button");
   let feedButton = document.getElementById("feed-button");
   is(feedButton.parentNode, feedWrapper,
@@ -191,17 +185,16 @@ add_task(function() {
                                "print-button",
                                "history-panelmenu",
                                "fullscreen-button",
                                "find-button",
                                "preferences-button",
                                "add-ons-button",
                                "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterInsert);
-  addSwitchToMetroButtonInWindows8(placementsAfterInsert);
   simulateItemDrag(openFileButton, editControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterInsert);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let palette = document.getElementById("customization-palette");
   // Check that the palette items are re-wrapped correctly.
   let feedWrapper = document.getElementById("wrapper-feed-button");
   let feedButton = document.getElementById("feed-button");
   is(feedButton.parentNode, feedWrapper,
@@ -228,17 +221,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, zoomControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to be before the new-window-button should
 // move the zoom-controls before the edit-controls.
 add_task(function() {
@@ -253,17 +245,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, newWindowButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to be before the privatebrowsing-button
@@ -281,17 +272,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, privateBrowsingButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to be before the save-page-button
@@ -309,17 +299,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, savePageButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to the panel itself should append
@@ -336,17 +325,16 @@ add_task(function() {
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "edit-controls",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, panel);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to the customization-palette and
@@ -362,17 +350,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   let paletteChildElementCount = palette.childElementCount;
   simulateItemDrag(editControls, palette);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   is(paletteChildElementCount + 1, palette.childElementCount,
      "The palette should have a new child, congratulations!");
   is(editControls.parentNode.id, "wrapper-edit-controls",
      "The edit-controls should be properly wrapped.");
   is(editControls.parentNode.getAttribute("place"), "palette",
@@ -385,17 +372,17 @@ add_task(function() {
 });
 
 // Dragging the edit-controls to each of the panel placeholders
 // should append the edit-controls to the bottom of the panel.
 add_task(function() {
   yield startCustomizing();
   let editControls = document.getElementById("edit-controls");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
-  let numPlaceholders = isInWin8() ? 1 : 2;
+  let numPlaceholders = 2;
   for (let i = 0; i < numPlaceholders; i++) {
     // NB: We can't just iterate over all of the placeholders
     // because each drag-drop action recreates them.
     let placeholder = panel.getElementsByClassName("panel-customization-placeholder")[i];
     let placementsAfterMove = ["zoom-controls",
                                "new-window-button",
                                "privatebrowsing-button",
                                "save-page-button",
@@ -403,17 +390,16 @@ add_task(function() {
                                "history-panelmenu",
                                "fullscreen-button",
                                "find-button",
                                "preferences-button",
                                "add-ons-button",
                                "edit-controls",
                                "developer-button"];
     removeDeveloperButtonIfDevEdition(placementsAfterMove);
-    addSwitchToMetroButtonInWindows8(placementsAfterMove);
     simulateItemDrag(editControls, placeholder);
     assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
     let zoomControls = document.getElementById("zoom-controls");
     simulateItemDrag(editControls, zoomControls);
     ok(CustomizableUI.inDefaultState, "Should still be in default state.");
   }
 });
 
@@ -446,28 +432,21 @@ add_task(function() {
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "edit-controls",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, target);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let itemToDrag = "sync-button";
   let button = document.getElementById(itemToDrag);
   placementsAfterMove.splice(11, 0, itemToDrag);
-  if (isInWin8()) {
-    placementsAfterMove[10] = placementsAfterMove[11];
-    placementsAfterMove[11] = placementsAfterMove[12];
-    placementsAfterMove[12] = placementsAfterMove[13];
-    placementsAfterMove[13] = "edit-controls";
-  }
   simulateItemDrag(button, editControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
 
   // Put stuff back:
   let palette = document.getElementById("customization-palette");
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(button, palette);
   simulateItemDrag(editControls, zoomControls);
--- a/browser/components/customizableui/test/browser_890140_orphaned_placeholders.js
+++ b/browser/components/customizableui/test/browser_890140_orphaned_placeholders.js
@@ -5,44 +5,37 @@
 "use strict";
 
 requestLongerTimeout(2);
 
 // One orphaned item should have two placeholders next to it.
 add_task(function() {
   yield startCustomizing();
 
-  if (isInWin8()) {
-    CustomizableUI.removeWidgetFromArea("switch-to-metro-button");
-    ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
-  }
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
     ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   }
-  if (!isInWin8() && !isInDevEdition()) {
+  if (!isInDevEdition()) {
     ok(CustomizableUI.inDefaultState, "Should be in default state.");
   } else {
-    ok(!CustomizableUI.inDefaultState, "Should not be in default state if on Win8 or DevEdition.");
+    ok(!CustomizableUI.inDefaultState, "Should not be in default state if on DevEdition.");
   }
 
   let btn = document.getElementById("open-file-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
 
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placements);
   is(getVisiblePlaceholderCount(panel), 2, "Should only have 2 visible placeholders before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), 2, "Should only have 2 visible placeholders after re-entering");
 
-  if (isInWin8()) {
-    CustomizableUI.addWidgetToArea("switch-to-metro-button", CustomizableUI.AREA_PANEL);
-  }
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
 // Two orphaned items should have one placeholder next to them (case 1).
@@ -53,42 +46,35 @@ add_task(function() {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
   }
 
   let btn = document.getElementById("open-file-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
   let placementsAfterAppend = placements;
 
-  if (!isInWin8()) {
-    placementsAfterAppend = placements.concat(["open-file-button"]);
-    simulateItemDrag(btn, panel);
-  }
+  placementsAfterAppend = placements.concat(["open-file-button"]);
+  simulateItemDrag(btn, panel);
 
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterAppend);
 
-  if (isInWin8() && !isInDevEdition()) {
-    ok(CustomizableUI.inDefaultState, "Should be in default state if on Win8 and not on DevEdition.");
-  } else {
-    ok(!CustomizableUI.inDefaultState, "Should not be in default state if not Win8 or on DevEdition.");
-  }
+  ok(!CustomizableUI.inDefaultState, "Should not be in default state.");
 
   is(getVisiblePlaceholderCount(panel), 1, "Should only have 1 visible placeholder before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), 1, "Should only have 1 visible placeholder after re-entering");
 
   let palette = document.getElementById("customization-palette");
   simulateItemDrag(btn, palette);
 
-  if (!isInWin8()) {
-    btn = document.getElementById("open-file-button");
-    simulateItemDrag(btn, palette);
-  }
+  btn = document.getElementById("open-file-button");
+  simulateItemDrag(btn, palette);
+
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
   ok(CustomizableUI.inDefaultState, "Should be in default state again."); 
 });
 
 // Two orphaned items should have one placeholder next to them (case 2).
@@ -96,45 +82,35 @@ add_task(function() {
   yield startCustomizing();
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
   }
 
   let btn = document.getElementById("add-ons-button");
   let btn2 = document.getElementById("developer-button");
-  let btn3 = document.getElementById("switch-to-metro-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let palette = document.getElementById("customization-palette");
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
 
   let placementsAfterAppend = placements.filter(p => p != btn.id && p != btn2.id);
   simulateItemDrag(btn, palette);
   simulateItemDrag(btn2, palette);
 
-  if (isInWin8()) {
-    placementsAfterAppend = placementsAfterAppend.filter(p => p != btn3.id);
-    simulateItemDrag(btn3, palette);
-  }
-
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterAppend);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   is(getVisiblePlaceholderCount(panel), 1, "Should only have 1 visible placeholder before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), 1, "Should only have 1 visible placeholder after re-entering");
 
   simulateItemDrag(btn, panel);
   simulateItemDrag(btn2, panel);
 
-  if (isInWin8()) {
-    simulateItemDrag(btn3, panel);
-  }
-
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placements);
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
@@ -144,73 +120,54 @@ add_task(function() {
   yield startCustomizing();
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
   }
 
   let btn = document.getElementById("edit-controls");
   let btn2 = document.getElementById("developer-button");
-  let btn3 = document.getElementById("switch-to-metro-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let palette = document.getElementById("customization-palette");
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
 
   placements.pop();
   simulateItemDrag(btn2, palette);
 
-  if (isInWin8()) {
-    // Remove switch-to-metro-button
-    placements.pop();
-    simulateItemDrag(btn3, palette);
-  }
-
   let placementsAfterAppend = placements.concat([placements.shift()]);
   simulateItemDrag(btn, panel);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterAppend);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   is(getVisiblePlaceholderCount(panel), 3, "Should have 3 visible placeholders before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), 3, "Should have 3 visible placeholders after re-entering");
 
   simulateItemDrag(btn2, panel);
 
-  if (isInWin8()) {
-    simulateItemDrag(btn3, panel);
-  }
-
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(btn, zoomControls);
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
 // The default placements should have two placeholders at the bottom (or 1 in win8).
 add_task(function() {
   yield startCustomizing();
   let numPlaceholders = -1;
 
-  if (isInWin8()) {
-    if (isInDevEdition()) {
-      numPlaceholders = 2;
-    } else {
-      numPlaceholders = 1;
-    }
+  if (isInDevEdition()) {
+    numPlaceholders = 3;
   } else {
-    if (isInDevEdition()) {
-      numPlaceholders = 3;
-    } else {
-      numPlaceholders = 2;
-    }
+    numPlaceholders = 2;
   }
 
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   ok(CustomizableUI.inDefaultState, "Should be in default state.");
   is(getVisiblePlaceholderCount(panel), numPlaceholders, "Should have " + numPlaceholders + " visible placeholders before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
--- a/browser/components/customizableui/test/head.js
+++ b/browser/components/customizableui/test/head.js
@@ -122,28 +122,16 @@ function isInDevEdition() {
 }
 
 function removeDeveloperButtonIfDevEdition(areaPanelPlacements) {
   if (isInDevEdition()) {
     areaPanelPlacements.splice(areaPanelPlacements.indexOf("developer-button"), 1);
   }
 }
 
-function isInWin8() {
-  if (!Services.metro)
-    return false;
-  return Services.metro.supported;
-}
-
-function addSwitchToMetroButtonInWindows8(areaPanelPlacements) {
-  if (isInWin8()) {
-    areaPanelPlacements.push("switch-to-metro-button");
-  }
-}
-
 function assertAreaPlacements(areaId, expectedPlacements) {
   let actualPlacements = getAreaWidgetIds(areaId);
   placementArraysEqual(areaId, actualPlacements, expectedPlacements);
 }
 
 function placementArraysEqual(areaId, actualPlacements, expectedPlacements) {
   is(actualPlacements.length, expectedPlacements.length,
      "Area " + areaId + " should have " + expectedPlacements.length + " items.");
--- a/browser/components/preferences/advanced.js
+++ b/browser/components/preferences/advanced.js
@@ -620,32 +620,20 @@ var gAdvancedPane = {
    *                   ii    *f*    t/f     *true*
    *                   iii   0/1/2  f       false
    *                   iii   0/1/2  *t*     *true*
    */
   updateReadPrefs: function ()
   {
     var enabledPref = document.getElementById("app.update.enabled");
     var autoPref = document.getElementById("app.update.auto");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    var metroEnabledPref = document.getElementById("app.update.metro.enabled");
-#endif
-#endif
     var radiogroup = document.getElementById("updateRadioGroup");
 
     if (!enabledPref.value)   // Don't care for autoPref.value in this case.
       radiogroup.value="manual";    // 3. Never check for updates.
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    // enabledPref.value && autoPref.value && metroEnabledPref.value
-    else if (metroEnabledPref.value && this._showingWin8Prefs)
-      radiogroup.value="autoMetro"; // 0. Automatically install updates for both Metro and Desktop
-#endif
-#endif
     else if (autoPref.value)  // enabledPref.value && autoPref.value
       radiogroup.value="auto";      // 1. Automatically install updates for Desktop only
     else                      // enabledPref.value && !autoPref.value
       radiogroup.value="checkOnly"; // 2. Check, but let me choose
 
     var canCheck = Components.classes["@mozilla.org/updates/update-service;1"].
                      getService(Components.interfaces.nsIApplicationUpdateService).
                      canCheckForUpdates;
@@ -654,24 +642,16 @@ var gAdvancedPane = {
     // A locked pref is sufficient to disable the radiogroup.
     radiogroup.disabled = !canCheck || enabledPref.locked || autoPref.locked;
 
     var modePref = document.getElementById("app.update.mode");
     var warnIncompatible = document.getElementById("warnIncompatible");
     // the warnIncompatible checkbox value is set by readAddonWarn
     warnIncompatible.disabled = radiogroup.disabled || modePref.locked ||
                                 !enabledPref.value || !autoPref.value;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    if (this._showingWin8Prefs) {
-      warnIncompatible.disabled |= metroEnabledPref.value;
-      warnIncompatible.checked |= metroEnabledPref.value;
-    }
-#endif
-#endif
 
 #ifdef MOZ_MAINTENANCE_SERVICE
     // Check to see if the maintenance service is installed.
     // If it is don't show the preference at all.
     var installed;
     try {
       var wrk = Components.classes["@mozilla.org/windows-registry-key;1"]
                 .createInstance(Components.interfaces.nsIWindowsRegKey);
@@ -710,63 +690,35 @@ var gAdvancedPane = {
    * Sets the pref values based on the selected item of the radiogroup,
    * and sets the disabled state of the warnIncompatible checkbox accordingly.
    */
   updateWritePrefs: function ()
   {
     var enabledPref = document.getElementById("app.update.enabled");
     var autoPref = document.getElementById("app.update.auto");
     var modePref = document.getElementById("app.update.mode");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    var metroEnabledPref = document.getElementById("app.update.metro.enabled");
-    // Initialize the pref to false only if we're showing the option
-    if (this._showingWin8Prefs) {
-      metroEnabledPref.value = false;
-    }
-#endif
-#endif
     var radiogroup = document.getElementById("updateRadioGroup");
     switch (radiogroup.value) {
       case "auto":      // 1. Automatically install updates for Desktop only
         enabledPref.value = true;
         autoPref.value = true;
         break;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-      case "autoMetro": // 0. Automatically install updates for both Metro and Desktop
-        enabledPref.value = true;
-        autoPref.value = true;
-        metroEnabledPref.value = true;
-        modePref.value = 1;
-        break;
-#endif
-#endif
       case "checkOnly": // 2. Check, but let me choose
         enabledPref.value = true;
         autoPref.value = false;
         break;
       case "manual":    // 3. Never check for updates.
         enabledPref.value = false;
         autoPref.value = false;
     }
 
     var warnIncompatible = document.getElementById("warnIncompatible");
     warnIncompatible.disabled = enabledPref.locked || !enabledPref.value ||
                                 autoPref.locked || !autoPref.value ||
                                 modePref.locked;
-
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    if (this._showingWin8Prefs) {
-      warnIncompatible.disabled |= metroEnabledPref.value;
-      warnIncompatible.checked |= metroEnabledPref.value;
-    }
-#endif
-#endif
   },
 
   /**
    * Stores the value of the app.update.mode preference, which is a tristate
    * integer preference.  We store the value here so that we can properly
    * restore the preference value if the UI reflecting the preference value
    * is in a state which can represent either of two integer values (as
    * opposed to only one possible value in the other UI state).
--- a/browser/components/preferences/advanced.xul
+++ b/browser/components/preferences/advanced.xul
@@ -56,21 +56,16 @@
                   name="browser.cache.disk.smart_size.enabled"
                   inverted="true"
                   type="bool"/>
 
      <!-- Update tab -->
 #ifdef MOZ_UPDATER
       <preference id="app.update.enabled"              name="app.update.enabled"              type="bool"/>
       <preference id="app.update.auto"                 name="app.update.auto"                 type="bool"/>
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-      <preference id="app.update.metro.enabled"        name="app.update.metro.enabled"        type="bool"/>
-#endif
-#endif
       <preference id="app.update.mode"                 name="app.update.mode"                 type="int"/>
 
       <preference id="app.update.disable_button.showUpdateHistory"
                   name="app.update.disable_button.showUpdateHistory"
                   type="bool"/>
 
 #ifdef MOZ_MAINTENANCE_SERVICE
       <preference id="app.update.service.enabled"
@@ -305,28 +300,16 @@
 
         <!-- Update -->
         <tabpanel id="updatePanel" orient="vertical">
 #ifdef MOZ_UPDATER
           <groupbox id="updateApp">
             <caption label="&updateApp.label;"/>
             <radiogroup id="updateRadioGroup"
                         oncommand="gAdvancedPane.updateWritePrefs();">
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-              <radio id="autoMetro"
-                     value="autoMetro"
-                     label="&updateAutoMetro.label;"
-                     accesskey="&updateAutoMetro.accesskey;"/>
-              <hbox id="autoMetroIndent"
-                    class="indent">
-                <label value="&updateAutoMetroWarn.label;"/>
-              </hbox>
-#endif
-#endif
               <radio id="autoDesktop"
                      value="auto"
                      label="&updateAuto1.label;"
                      accesskey="&updateAuto1.accesskey;"/>
               <hbox class="indent">
                 <checkbox id="warnIncompatible"
                           label="&updateAutoAddonWarn.label;"
                           accesskey="&updateAutoAddonWarn.accesskey;"
--- a/browser/components/preferences/in-content/advanced.js
+++ b/browser/components/preferences/in-content/advanced.js
@@ -658,32 +658,20 @@ var gAdvancedPane = {
    *                   ii    *f*    t/f     *true*
    *                   iii   0/1/2  f       false
    *                   iii   0/1/2  *t*     *true*
    */
   updateReadPrefs: function ()
   {
     var enabledPref = document.getElementById("app.update.enabled");
     var autoPref = document.getElementById("app.update.auto");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    var metroEnabledPref = document.getElementById("app.update.metro.enabled");
-#endif
-#endif
     var radiogroup = document.getElementById("updateRadioGroup");
 
     if (!enabledPref.value)   // Don't care for autoPref.value in this case.
       radiogroup.value="manual";    // 3. Never check for updates.
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    // enabledPref.value && autoPref.value && metroEnabledPref.value
-    else if (metroEnabledPref.value && this._showingWin8Prefs)
-      radiogroup.value="autoMetro"; // 0. Automatically install updates
-#endif
-#endif
     else if (autoPref.value)  // enabledPref.value && autoPref.value
       radiogroup.value="auto";      // 1. Automatically install updates
     else                      // enabledPref.value && !autoPref.value
       radiogroup.value="checkOnly"; // 2. Check, but let me choose
 
     var canCheck = Components.classes["@mozilla.org/updates/update-service;1"].
                      getService(Components.interfaces.nsIApplicationUpdateService).
                      canCheckForUpdates;
@@ -692,24 +680,16 @@ var gAdvancedPane = {
     // A locked pref is sufficient to disable the radiogroup.
     radiogroup.disabled = !canCheck || enabledPref.locked || autoPref.locked;
 
     var modePref = document.getElementById("app.update.mode");
     var warnIncompatible = document.getElementById("warnIncompatible");
     // the warnIncompatible checkbox value is set by readAddonWarn
     warnIncompatible.disabled = radiogroup.disabled || modePref.locked ||
                                 !enabledPref.value || !autoPref.value;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    if (this._showingWin8Prefs) {
-      warnIncompatible.disabled |= metroEnabledPref.value;
-      warnIncompatible.checked |= metroEnabledPref.value;
-    }
-#endif
-#endif
 
 #ifdef MOZ_MAINTENANCE_SERVICE
     // Check to see if the maintenance service is installed.
     // If it is don't show the preference at all.
     var installed;
     try {
       var wrk = Components.classes["@mozilla.org/windows-registry-key;1"]
                 .createInstance(Components.interfaces.nsIWindowsRegKey);
@@ -730,62 +710,35 @@ var gAdvancedPane = {
    * Sets the pref values based on the selected item of the radiogroup,
    * and sets the disabled state of the warnIncompatible checkbox accordingly.
    */
   updateWritePrefs: function ()
   {
     var enabledPref = document.getElementById("app.update.enabled");
     var autoPref = document.getElementById("app.update.auto");
     var modePref = document.getElementById("app.update.mode");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    var metroEnabledPref = document.getElementById("app.update.metro.enabled");
-    // Initialize the pref to false only if we're showing the option
-    if (this._showingWin8Prefs) {
-      metroEnabledPref.value = false;
-    }
-#endif
-#endif
     var radiogroup = document.getElementById("updateRadioGroup");
     switch (radiogroup.value) {
       case "auto":      // 1. Automatically install updates for Desktop only
         enabledPref.value = true;
         autoPref.value = true;
         break;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-      case "autoMetro": // 0. Automatically install updates for both Metro and Desktop
-        enabledPref.value = true;
-        autoPref.value = true;
-        metroEnabledPref.value = true;
-        modePref.value = 1;
-        break;
-#endif
-#endif
       case "checkOnly": // 2. Check, but let me choose
         enabledPref.value = true;
         autoPref.value = false;
         break;
       case "manual":    // 3. Never check for updates.
         enabledPref.value = false;
         autoPref.value = false;
     }
 
     var warnIncompatible = document.getElementById("warnIncompatible");
     warnIncompatible.disabled = enabledPref.locked || !enabledPref.value ||
                                 autoPref.locked || !autoPref.value ||
                                 modePref.locked;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    if (this._showingWin8Prefs) {
-      warnIncompatible.disabled |= metroEnabledPref.value;
-      warnIncompatible.checked |= metroEnabledPref.value;
-    }
-#endif
-#endif
   },
 
   /**
    * Stores the value of the app.update.mode preference, which is a tristate
    * integer preference.  We store the value here so that we can properly
    * restore the preference value if the UI reflecting the preference value
    * is in a state which can represent either of two integer values (as
    * opposed to only one possible value in the other UI state).
--- a/browser/components/preferences/in-content/advanced.xul
+++ b/browser/components/preferences/in-content/advanced.xul
@@ -65,23 +65,16 @@
  <!-- Update tab -->
 #ifdef MOZ_UPDATER
   <preference id="app.update.enabled"
               name="app.update.enabled"
               type="bool"/>
   <preference id="app.update.auto"
               name="app.update.auto"
               type="bool"/>
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-  <preference id="app.update.metro.enabled"
-              name="app.update.metro.enabled"
-              type="bool"/>
-#endif
-#endif
   <preference id="app.update.mode"
               name="app.update.mode"
               type="int"/>
 
   <preference id="app.update.disable_button.showUpdateHistory"
               name="app.update.disable_button.showUpdateHistory"
               type="bool"/>
 
@@ -324,28 +317,16 @@
     </tabpanel>
 
     <!-- Update -->
     <tabpanel id="updatePanel" orient="vertical">
 #ifdef MOZ_UPDATER
       <groupbox id="updateApp" align="start">
         <caption><label>&updateApp.label;</label></caption>
         <radiogroup id="updateRadioGroup" align="start">
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-              <radio id="autoMetro"
-                     value="autoMetro"
-                     label="&updateAutoMetro.label;"
-                     accesskey="&updateAutoMetro.accesskey;"/>
-              <hbox id="autoMetroIndent"
-                    class="indent">
-                <label>&updateAutoMetroWarn.label;</label>
-              </hbox>
-#endif
-#endif
           <radio id="autoDesktop"
                  value="auto"
                  label="&updateAuto1.label;"
                  accesskey="&updateAuto1.accesskey;"/>
           <hbox class="indent">
             <checkbox id="warnIncompatible"
                       label="&updateAutoAddonWarn.label;"
                       accesskey="&updateAutoAddonWarn.accesskey;"
--- a/browser/components/preferences/in-content/main.js
+++ b/browser/components/preferences/in-content/main.js
@@ -22,41 +22,16 @@ var gMainPane = {
     this.updateSetDefaultBrowser();
 #ifdef XP_WIN
     // In Windows 8 we launch the control panel since it's the only
     // way to get all file type association prefs. So we don't know
     // when the user will select the default.  We refresh here periodically
     // in case the default changes.  On other Windows OS's defaults can also
     // be set while the prefs are open.
     window.setInterval(this.updateSetDefaultBrowser, 1000);
-
-#ifdef MOZ_METRO
-    // Pre Windows 8, we should hide the update related settings
-    // for the Metro browser
-    let version = Components.classes["@mozilla.org/system-info;1"].
-                  getService(Components.interfaces.nsIPropertyBag2).
-                  getProperty("version");
-    let preWin8 = parseFloat(version) < 6.2;
-    this._showingWin8Prefs = !preWin8;
-    if (preWin8) {
-      ["autoMetro", "autoMetroIndent"].forEach(
-        function(id) document.getElementById(id).collapsed = true
-      );
-    } else {
-      let brandShortName =
-        document.getElementById("bundleBrand").getString("brandShortName");
-      let bundlePrefs = document.getElementById("bundlePreferences");
-      let autoDesktop = document.getElementById("autoDesktop");
-      autoDesktop.label =
-        bundlePrefs.getFormattedString("updateAutoDesktop.label",
-                                       [brandShortName]);
-      autoDesktop.accessKey =
-        bundlePrefs.getString("updateAutoDesktop.accessKey");
-    }
-#endif
 #endif
 #endif
 
     // set up the "use current page" label-changing listener
     this._updateUseCurrentButton();
     window.addEventListener("focus", this._updateUseCurrentButton.bind(this), false);
 
     this.updateBrowserStartupLastSession();
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -21,41 +21,16 @@ var gMainPane = {
     this.updateSetDefaultBrowser();
 #ifdef XP_WIN
     // In Windows 8 we launch the control panel since it's the only
     // way to get all file type association prefs. So we don't know
     // when the user will select the default.  We refresh here periodically
     // in case the default changes.  On other Windows OS's defaults can also
     // be set while the prefs are open.
     window.setInterval(this.updateSetDefaultBrowser, 1000);
-
-#ifdef MOZ_METRO
-    // Pre Windows 8, we should hide the update related settings
-    // for the Metro browser
-    let version = Components.classes["@mozilla.org/system-info;1"].
-                  getService(Components.interfaces.nsIPropertyBag2).
-                  getProperty("version");
-    let preWin8 = parseFloat(version) < 6.2;
-    this._showingWin8Prefs = !preWin8;
-    if (preWin8) {
-      ["autoMetro", "autoMetroIndent"].forEach(
-        function(id) document.getElementById(id).collapsed = true
-      );
-    } else {
-      let brandShortName =
-        document.getElementById("bundleBrand").getString("brandShortName");
-      let bundlePrefs = document.getElementById("bundlePreferences");
-      let autoDesktop = document.getElementById("autoDesktop");
-      autoDesktop.label =
-        bundlePrefs.getFormattedString("updateAutoDesktop.label",
-                                       [brandShortName]);
-      autoDesktop.accessKey =
-        bundlePrefs.getString("updateAutoDesktop.accessKey");
-    }
-#endif
 #endif
 #endif
 
     // set up the "use current page" label-changing listener
     this._updateUseCurrentButton();
     window.addEventListener("focus", this._updateUseCurrentButton.bind(this), false);
 
     this.updateBrowserStartupLastSession();
--- a/browser/extensions/Makefile.in
+++ b/browser/extensions/Makefile.in
@@ -1,16 +1,12 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
 # You can obtain one at http://mozilla.org/MPL/2.0/.
 
-ifdef MOZ_METRO
-GENERATED_DIRS = $(DIST)/bin/metro/chrome
-endif
-
 include $(topsrcdir)/config/rules.mk
 
 exclude_files = \
   test \
   README.mozilla \
   $(NULL)
 
 $(FINAL_TARGET)/chrome/pdfjs.manifest: $(GLOBAL_DEPS)
@@ -29,32 +25,8 @@ ifdef NIGHTLY_BUILD
 
 libs:: $(FINAL_TARGET)/chrome/shumway.manifest
 	$(PYTHON) $(topsrcdir)/config/nsinstall.py \
 	  $(srcdir)/shumway \
           $(foreach exclude,$(exclude_files), -X $(srcdir)/shumway/$(exclude)) \
           $(FINAL_TARGET)/chrome
 	$(call py_action,buildlist,$(FINAL_TARGET)/chrome.manifest 'manifest chrome/shumway.manifest')
 endif
-
-ifdef MOZ_METRO
-ifdef NIGHTLY_BUILD
-$(DIST)/bin/metro/chrome/pdfjs.manifest: $(GLOBAL_DEPS)
-	printf 'manifest pdfjs/chrome.manifest' > $@
-
-libs:: $(DIST)/bin/metro/chrome/pdfjs.manifest
-	$(PYTHON) $(topsrcdir)/config/nsinstall.py \
-	  $(srcdir)/pdfjs \
-          $(foreach exclude,$(exclude_files), -X $(srcdir)/pdfjs/$(exclude)) \
-          $(DIST)/bin/metro/chrome
-	$(call py_action,buildlist,$(DIST)/bin/metro/chrome.manifest 'manifest chrome/pdfjs.manifest')
-
-$(DIST)/bin/metro/chrome/shumway.manifest: $(GLOBAL_DEPS)
-	printf 'manifest shumway/chrome.manifest' > $@
-
-libs:: $(DIST)/bin/metro/chrome/shumway.manifest
-	$(PYTHON) $(topsrcdir)/config/nsinstall.py \
-	  $(srcdir)/shumway \
-          $(foreach exclude,$(exclude_files), -X $(srcdir)/shumway/$(exclude)) \
-          $(DIST)/bin/metro/chrome
-	$(call py_action,buildlist,$(DIST)/bin/metro/chrome.manifest 'manifest chrome/shumway.manifest')
-endif
-endif
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -881,46 +881,16 @@ bin/libfreebl_32int64_3.so
 @RESPATH@/webapprt/modules/DownloadView.jsm
 @RESPATH@/webapprt/modules/Startup.jsm
 @RESPATH@/webapprt/modules/WebappRT.jsm
 @RESPATH@/webapprt/modules/WebappManager.jsm
 @RESPATH@/webapprt/modules/RemoteDebugger.jsm
 @RESPATH@/webapprt/modules/WebRTCHandler.jsm
 #endif
 
-#ifdef MOZ_METRO
-@RESPATH@/components/MetroUIUtils.js
-@RESPATH@/components/MetroUIUtils.manifest
-[metro]
-; gre resources
-@BINPATH@/CommandExecuteHandler@BIN_SUFFIX@
-@RESPATH@/resources.pri
-@RESPATH@/VisualElementsManifest.xml
-@RESPATH@/tileresources
-; app dir resources
-@RESPATH@/metro/chrome.manifest
-@RESPATH@/metro/searchplugins
-@RESPATH@/metro/metroapp.ini
-@RESPATH@/metro/chrome/browser@JAREXT@
-@RESPATH@/metro/chrome/browser.manifest
-@RESPATH@/metro/chrome/chrome@JAREXT@
-@RESPATH@/metro/chrome/chrome.manifest
-@RESPATH@/metro/chrome/@AB_CD@@JAREXT@
-@RESPATH@/metro/chrome/@AB_CD@.manifest
-#ifdef NIGHTLY_BUILD
-@RESPATH@/metro/chrome/shumway.manifest
-@RESPATH@/metro/chrome/shumway/*
-@RESPATH@/metro/chrome/pdfjs.manifest
-@RESPATH@/metro/chrome/pdfjs/*
-#endif
-@RESPATH@/metro/components
-@RESPATH@/metro/defaults
-@RESPATH@/metro/modules
-#endif
-
 @RESPATH@/components/DataStore.manifest
 @RESPATH@/components/DataStoreImpl.js
 @RESPATH@/components/dom_datastore.xpt
 
 ; Shutdown Terminator
 @RESPATH@/components/nsTerminatorTelemetry.js
 @RESPATH@/components/terminator.manifest
 
--- a/browser/installer/windows/nsis/defines.nsi.in
+++ b/browser/installer/windows/nsis/defines.nsi.in
@@ -69,20 +69,16 @@
 !define ARCH "x86"
 !define MinSupportedVer "Microsoft Windows XP SP2"
 #endif
 
 #ifdef MOZ_MAINTENANCE_SERVICE
 !define MOZ_MAINTENANCE_SERVICE
 #endif
 
-#ifdef MOZ_METRO
-!define MOZ_METRO
-#endif
-
 # File details shared by both the installer and uninstaller
 VIProductVersion "1.0.0.0"
 VIAddVersionKey "ProductName"     "${BrandShortName}"
 VIAddVersionKey "CompanyName"     "${CompanyName}"
 #ifdef MOZ_OFFICIAL_BRANDING
 VIAddVersionKey "LegalTrademarks" "${BrandShortName} is a Trademark of The Mozilla Foundation."
 #endif
 VIAddVersionKey "LegalCopyright"  "${CompanyName}"
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -95,19 +95,16 @@ VIAddVersionKey "OriginalFilename" "setu
 !insertmacro LogDesktopShortcut
 !insertmacro LogQuickLaunchShortcut
 !insertmacro LogStartMenuShortcut
 !insertmacro ManualCloseAppPrompt
 !insertmacro PinnedToStartMenuLnkCount
 !insertmacro RegCleanAppHandler
 !insertmacro RegCleanMain
 !insertmacro RegCleanUninstall
-!ifdef MOZ_METRO
-!insertmacro RemoveDEHRegistrationIfMatching
-!endif
 !insertmacro RemovePrecompleteEntries
 !insertmacro SetAppLSPCategories
 !insertmacro SetBrandNameVars
 !insertmacro UpdateShortcutAppModelIDs
 !insertmacro UnloadUAC
 !insertmacro WriteRegStr2
 !insertmacro WriteRegDWORD2
 
@@ -335,19 +332,16 @@ Section "-Application" APP_IDX
   ${If} $AddDesktopSC == ""
     StrCpy $AddDesktopSC "1"
   ${EndIf}
 
   ${LogHeader} "Adding Registry Entries"
   SetShellVarContext current  ; Set SHCTX to HKCU
   ${RegCleanMain} "Software\Mozilla"
   ${RegCleanUninstall}
-!ifdef MOZ_METRO
-  ${ResetWin8PromptKeys} "HKCU" ""
-!endif
   ${UpdateProtocolHandlers}
 
   ClearErrors
   WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
   ${If} ${Errors}
     StrCpy $TmpVal "HKCU" ; used primarily for logging
   ${Else}
     SetShellVarContext all  ; Set SHCTX to HKLM
@@ -423,34 +417,22 @@ Section "-Application" APP_IDX
     ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
     StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
     ${If} $AddDesktopSC == 1
     ${OrIf} $AddStartMenuSC == 1
       WriteRegDWORD HKCU "$0" "IconsVisible" 1
     ${Else}
       WriteRegDWORD HKCU "$0" "IconsVisible" 0
     ${EndIf}
-!ifdef MOZ_METRO
-    ${CleanupMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                        "FirefoxURL" \
-                                        "FirefoxHTML"
-    ${AddMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                    "$INSTDIR\CommandExecuteHandler.exe" \
-                                    $AppUserModelID \
-                                    "FirefoxURL" \
-                                    "FirefoxHTML"
-!else
-  ; The metro browser is not enabled by the mozconfig.
   ${If} ${AtLeastWin8}
     ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
                              $AppUserModelID \
                              "FirefoxURL" \
                              "FirefoxHTML"
   ${EndIf}
-!endif
   ${EndIf}
 
 !ifdef MOZ_MAINTENANCE_SERVICE
   ; If the maintenance service page was displayed then a value was already 
   ; explicitly selected for installing the maintenance service and 
   ; and so InstallMaintenanceService will already be 0 or 1.
   ; If the maintenance service page was not displayed then 
   ; InstallMaintenanceService will be equal to "".
@@ -810,31 +792,17 @@ Function LaunchApp
 !endif
 
   ClearErrors
   ${GetParameters} $0
   ${GetOptions} "$0" "/UAC:" $1
   ${If} ${Errors}
     StrCpy $1 "0"
     StrCpy $2 "0"
-!ifdef MOZ_METRO
-    ; Check to see if this install location is currently set as the
-    ; default browser.
-    AppAssocReg::QueryAppIsDefaultAll "${AppRegName}" "effective"
-    Pop $1
-    ; Check for a last run type to see if metro was the last browser
-    ; front end in use.
-    ReadRegDWORD $2 HKCU "Software\Mozilla\Firefox" "MetroLastAHE"
-!endif
     ${If} $1 == "1"
-    ${AndIf} $2 == "1" ; 1 equals AHE_IMMERSIVE
-      ; Launch into metro
-      Exec "$\"$INSTDIR\CommandExecuteHandler.exe$\" --launchmetro"
-    ${Else}
-      ; Launch into desktop
       Exec "$\"$INSTDIR\${FileMainEXE}$\""
     ${EndIf}
   ${Else}
     GetFunctionAddress $0 LaunchAppFromElevatedProcess
     UAC::ExecCodeSegment $0
   ${EndIf}
 FunctionEnd
 
@@ -845,30 +813,17 @@ Function LaunchAppFromElevatedProcess
   ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" ""
   ${GetPathFromString} "$0" $0
   ${GetParent} "$0" $1
   ; Set our current working directory to the application's install directory
   ; otherwise the 7-Zip temp directory will be in use and won't be deleted.
   SetOutPath "$1"
   StrCpy $2 "0"
   StrCpy $3 "0"
-!ifdef MOZ_METRO
-  ; Check to see if this install location is currently set as the
-  ; default browser.
-  AppAssocReg::QueryAppIsDefaultAll "${AppRegName}" "effective"
-  Pop $2
-  ; Check for a last run type to see if metro was the last browser
-  ; front end in use.
-  ReadRegDWORD $3 HKCU "Software\Mozilla\Firefox" "MetroLastAHE"
-!endif
   ${If} $2 == "1"
-  ${AndIf} $3 == "1" ; 1 equals AHE_IMMERSIVE
-    ; Launch into metro
-    Exec "$\"$1\CommandExecuteHandler.exe$\" --launchmetro"
-  ${Else}
     ; Launch into desktop
     Exec "$\"$0$\""
   ${EndIf}
 FunctionEnd
 
 ################################################################################
 # Language
 
@@ -945,25 +900,17 @@ Function preShortcuts
 FunctionEnd
 
 Function leaveShortcuts
   ${MUI_INSTALLOPTIONS_READ} $0 "shortcuts.ini" "Settings" "State"
   ${If} $0 != 0
     Abort
   ${EndIf}
   ${MUI_INSTALLOPTIONS_READ} $AddDesktopSC "shortcuts.ini" "Field 2" "State"
-
-  ; If we have a Metro browser and are Win8, then we don't have a Field 3
-!ifdef MOZ_METRO
-  ${Unless} ${AtLeastWin8}
-!endif
-    ${MUI_INSTALLOPTIONS_READ} $AddStartMenuSC "shortcuts.ini" "Field 3" "State"
-!ifdef MOZ_METRO
-  ${EndIf}
-!endif
+  ${MUI_INSTALLOPTIONS_READ} $AddStartMenuSC "shortcuts.ini" "Field 3" "State"
 
   ; Don't install the quick launch shortcut on Windows 7
   ${Unless} ${AtLeastWin7}
     ${MUI_INSTALLOPTIONS_READ} $AddQuickLaunchSC "shortcuts.ini" "Field 4" "State"
   ${EndUnless}
 
   ${If} $InstallType == ${INSTALLTYPE_CUSTOM}
     Call CheckExistingInstall
@@ -1232,31 +1179,23 @@ Function .onInit
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Text   "$(ICONS_DESKTOP)"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Left   "0"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Right  "-1"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Top    "20"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Bottom "30"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" State  "1"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Flags  "GROUP"
 
-  ; Don't offer to install the start menu shortcut on Windows 8
-  ; for Metro builds.
-!ifdef MOZ_METRO
-  ${Unless} ${AtLeastWin8}
-!endif
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Type   "checkbox"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Text   "$(ICONS_STARTMENU)"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Left   "0"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Right  "-1"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Top    "40"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Bottom "50"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" State  "1"
-!ifdef MOZ_METRO
-  ${EndIf}
-!endif
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Type   "checkbox"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Text   "$(ICONS_STARTMENU)"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Left   "0"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Right  "-1"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Top    "40"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Bottom "50"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" State  "1"
 
   ; Don't offer to install the quick launch shortcut on Windows 7
   ${Unless} ${AtLeastWin7}
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Type   "checkbox"
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Text   "$(ICONS_QUICKLAUNCH)"
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Left   "0"
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Right  "-1"
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Top    "60"
--- a/browser/installer/windows/nsis/shared.nsh
+++ b/browser/installer/windows/nsis/shared.nsh
@@ -18,49 +18,16 @@
 !endif
 !ifndef SE_PRIVILEGE_ENABLED
   !define SE_PRIVILEGE_ENABLED    0x00000002
 !endif
 !ifndef HKEY_USERS
   !define HKEY_USERS              0x80000003
 !endif
 
-; Does metro registration for the command execute handler
-Function RegisterCEH
-!ifdef MOZ_METRO
-  ${If} ${AtLeastWin8}
-    ${CleanupMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                        "FirefoxURL" \
-                                        "FirefoxHTML"
-    ${AddMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                    "$INSTDIR\CommandExecuteHandler.exe" \
-                                    $AppUserModelID \
-                                    "FirefoxURL" \
-                                    "FirefoxHTML"
-  ${EndIf}
-!endif
-FunctionEnd
-
-; If we're in Win8 make sure we have a start menu shortcut and that it has
-; the correct AppuserModelID so that the Metro browser has a Metro tile.
-Function RegisterStartMenuTile
-!ifdef MOZ_METRO
-  ${If} ${AtLeastWin8}
-    CreateShortCut "$SMPROGRAMS\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}"
-    ${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk"
-      ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\${BrandFullName}.lnk" \
-                                             "$INSTDIR"
-      ${If} "$AppUserModelID" != ""
-        ApplicationID::Set "$SMPROGRAMS\${BrandFullName}.lnk" "$AppUserModelID" "true"
-      ${EndIf}
-    ${EndIf}
-  ${EndIf}
-!endif
-FunctionEnd
-
 !macro PostUpdate
 
   ; PostUpdate is called from both session 0 and from the user session
   ; for service updates, make sure that we only register with the user session
   ; Otherwise ApplicationID::Set can fail intermittently with a file in use error.
   System::Call "kernel32::GetCurrentProcessId() i.r0"
   System::Call "kernel32::ProcessIdToSessionId(i $0, *i ${NSIS_MAX_STRLEN} r9)"
 
@@ -71,20 +38,16 @@ FunctionEnd
   ${If} $0 == "FirefoxURL"
   ${AndIf} $9 != 0 ; We're not running in session 0
     ReadRegStr $0 HKCU "Software\Classes\FirefoxURL\shell\open\command" ""
     ${GetPathFromString} "$0" $0
     ${GetParent} "$0" $0
     ${If} ${FileExists} "$0"
       ${GetLongPath} "$0" $0
     ${EndIf}
-    ${If} "$0" == "$INSTDIR"
-      ; Win8 specific registration
-      Call RegisterStartMenuTile
-    ${EndIf}
   ${EndIf}
 
   ${CreateShortcutsLog}
 
   ; Remove registry entries for non-existent apps and for apps that point to our
   ; install location in the Software\Mozilla key and uninstall registry entries
   ; that point to our install location for both HKCU and HKLM.
   SetShellVarContext current  ; Set SHCTX to the current user (e.g. HKCU)
@@ -218,38 +181,22 @@ FunctionEnd
       ; IsAdmin check and the permissions check, the maintenance service
       ; will just fail to be attempted to be installed.
       nsExec::Exec "$\"$INSTDIR\maintenanceservice_installer.exe$\""
     ${EndIf}
   ${EndIf}
 !endif
 
 ; Register the DEH
-!ifdef MOZ_METRO
-  ${If} ${AtLeastWin8}
-  ${AndIf} $9 != 0 ; We're not running in session 0
-    ; If RegisterCEH is called too close to changing the shortcut AppUserModelID
-    ; and if the tile image is not already in cache.  Then Windows won't refresh
-    ; the tile image on the start screen.  So wait before calling RegisterCEH.
-    ; We only need to do this when the DEH doesn't already exist.
-    ReadRegStr $0 HKCU "Software\Classes\FirefoxURL\shell\open\command" "DelegateExecute"
-    ${If} $0 != ${DELEGATE_EXECUTE_HANDLER_ID}
-      Sleep 3000
-    ${EndIf}
-    Call RegisterCEH
-  ${EndIf}
-!else
-  ; The metro browser is not enabled by the mozconfig.
-  ${If} ${AtLeastWin8}
-    ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                             $AppUserModelID \
-                             "FirefoxURL" \
-                             "FirefoxHTML"
-  ${EndIf}
-!endif
+${If} ${AtLeastWin8}
+  ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
+                           $AppUserModelID \
+                           "FirefoxURL" \
+                           "FirefoxHTML"
+${EndIf}
 !macroend
 !define PostUpdate "!insertmacro PostUpdate"
 
 !macro SetAsDefaultAppGlobal
   ${RemoveDeprecatedKeys} ; Does not use SHCTX
 
   SetShellVarContext all      ; Set SHCTX to all users (e.g. HKLM)
   ${SetHandlers} ; Uses SHCTX
@@ -451,18 +398,16 @@ FunctionEnd
 
   ; An empty string is used for the 5th param because FirefoxHTML is not a
   ; protocol handler
   ${AddDisabledDDEHandlerValues} "FirefoxHTML" "$2" "$8,1" \
                                  "${AppRegName} HTML Document" ""
 
   ${AddDisabledDDEHandlerValues} "FirefoxURL" "$2" "$8,1" "${AppRegName} URL" \
                                  "true"
-  Call RegisterCEH
-
   ; An empty string is used for the 4th & 5th params because the following
   ; protocol handlers already have a display name and the additional keys
   ; required for a protocol handler.
   ${AddDisabledDDEHandlerValues} "ftp" "$2" "$8,1" "" ""
   ${AddDisabledDDEHandlerValues} "http" "$2" "$8,1" "" ""
   ${AddDisabledDDEHandlerValues} "https" "$2" "$8,1" "" ""
 !macroend
 !define SetHandlers "!insertmacro SetHandlers"
@@ -884,28 +829,16 @@ FunctionEnd
     DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxHTML_.shtml"
     DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxURL_ftp"
     DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxURL_http"
     DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxURL_https"
   ${EndIf}
 !macroend
 !define ResetWin8PromptKeys "!insertmacro ResetWin8PromptKeys"
 
-!ifdef MOZ_METRO
-; Resets Win8+ Metro specific splash screen info. Relies
-; on AppUserModelID.
-!macro ResetWin8MetroSplash
-  ${If} ${AtLeastWin8}
-  ${AndIf} "$AppUserModelID" != ""
-    DeleteRegKey HKCR "Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\DefaultBrowser_NOPUBLISHERID\SplashScreen\DefaultBrowser_NOPUBLISHERID!$AppUserModelID"
-  ${EndIf}
-!macroend
-!define ResetWin8MetroSplash "!insertmacro ResetWin8MetroSplash"
-!endif
-
 ; Adds SE_RESTORE_NAME privs
 !macro AcquireSERestoreName
   StrCpy $R1 0
 
   System::Call "kernel32::GetCurrentProcess() i .R0"
   System::Call "advapi32::OpenProcessToken(i R0, i ${TOKEN_QUERY}|${TOKEN_ADJUST_PRIVILEGES}, \
                                           *i R1R1) i .R0"
   ${If} $R0 != 0
@@ -1650,17 +1583,16 @@ Function SetAsDefaultAppUserHKCU
   ${EndUnless}
 
   SetShellVarContext current  ; Set SHCTX to the current user (e.g. HKCU)
 
   ${If} ${AtLeastWin8}
     ${SetStartMenuInternet} "HKCU"
     ${FixShellIconHandler} "HKCU"
     ${FixClassKeys} ; Does not use SHCTX
-    Call RegisterStartMenuTile
   ${EndIf}
 
   ${SetHandlers}
 
   ${If} ${AtLeastWinVista}
     ; Only register as the handler on Vista and above if the app registry name
     ; exists under the RegisteredApplications registry key. The protocol and
     ; file handlers set previously at the user level will associate this install
--- a/browser/installer/windows/nsis/uninstaller.nsi
+++ b/browser/installer/windows/nsis/uninstaller.nsi
@@ -79,19 +79,16 @@ VIAddVersionKey "OriginalFilename" "help
 !insertmacro IsUserAdmin
 !insertmacro LogDesktopShortcut
 !insertmacro LogQuickLaunchShortcut
 !insertmacro LogStartMenuShortcut
 !insertmacro PinnedToStartMenuLnkCount
 !insertmacro RegCleanAppHandler
 !insertmacro RegCleanMain
 !insertmacro RegCleanUninstall
-!ifdef MOZ_METRO
-!insertmacro RemoveDEHRegistrationIfMatching
-!endif
 !insertmacro SetAppLSPCategories
 !insertmacro SetBrandNameVars
 !insertmacro UpdateShortcutAppModelIDs
 !insertmacro UnloadUAC
 !insertmacro WriteRegDWORD2
 !insertmacro WriteRegStr2
 
 !insertmacro un.ChangeMUIHeaderImage
@@ -103,19 +100,16 @@ VIAddVersionKey "OriginalFilename" "help
 !insertmacro un.GetSecondInstallPath
 !insertmacro un.InitHashAppModelId
 !insertmacro un.ManualCloseAppPrompt
 !insertmacro un.RegCleanAppHandler
 !insertmacro un.RegCleanFileHandler
 !insertmacro un.RegCleanMain
 !insertmacro un.RegCleanUninstall
 !insertmacro un.RegCleanProtocolHandler
-!ifdef MOZ_METRO
-!insertmacro un.RemoveDEHRegistrationIfMatching
-!endif
 !insertmacro un.RemoveQuotesFromPath
 !insertmacro un.RemovePrecompleteEntries
 !insertmacro un.SetAppLSPCategories
 !insertmacro un.SetBrandNameVars
 
 !include shared.nsh
 
 ; Helper macros for ui callbacks. Insert these after shared.nsh
@@ -279,33 +273,22 @@ Section "Uninstall"
     DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
     StrCpy $TmpVal "HKLM" ; used primarily for logging
     ${un.RegCleanMain} "Software\Mozilla"
     ${un.RegCleanUninstall}
     ${un.DeleteShortcuts}
     ${un.SetAppLSPCategories}
   ${EndIf}
 
-!ifdef MOZ_METRO
-  ${If} ${AtLeastWin8}
-    ${un.CleanupMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                           "FirefoxURL" \
-                                           "FirefoxHTML"
-  ${EndIf}
-  ${ResetWin8PromptKeys} "HKCU" ""
-  ${ResetWin8MetroSplash}
-!else
-  ; The metro browser is not enabled by the mozconfig.
   ${If} ${AtLeastWin8}
     ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
                              $AppUserModelID \
                              "FirefoxURL" \
                              "FirefoxHTML"
   ${EndIf}
-!endif
 
   ${un.RegCleanAppHandler} "FirefoxURL"
   ${un.RegCleanAppHandler} "FirefoxHTML"
   ${un.RegCleanProtocolHandler} "ftp"
   ${un.RegCleanProtocolHandler} "http"
   ${un.RegCleanProtocolHandler} "https"
 
   ClearErrors
--- a/browser/locales/Makefile.in
+++ b/browser/locales/Makefile.in
@@ -66,39 +66,28 @@ UNINSTALLER_PACKAGE_HOOK = $(RM) -r $(ST
 
 STUB_HOOK = $(NSINSTALL) -D '$(_ABS_DIST)/$(PKG_INST_PATH)'; \
     $(RM) '$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_STUB_BASENAME).exe'; \
     cp ../installer/windows/l10ngen/stub.exe '$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_STUB_BASENAME).exe'; \
     chmod 0755 '$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_STUB_BASENAME).exe'; \
     $(NULL)
 endif
 
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/metrolist.txt))
-else
 SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt)) ddg
-endif
 SEARCHPLUGINS_PATH := $(FINAL_TARGET)/searchplugins
-# metro build call a searchplugins target for search engine plugins
-.PHONY: searchplugins
 SEARCHPLUGINS_TARGET := libs searchplugins
 SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_NAMES)),$(or $(wildcard $(call EN_US_OR_L10N_FILE,searchplugins/$(plugin))),$(info Missing searchplugin: $(plugin))))
 # Some locale-specific search plugins may have preprocessor directives, but the
 # default en-US ones do not.
 SEARCHPLUGINS_FLAGS := --silence-missing-directive-warnings
 PP_TARGETS += SEARCHPLUGINS
 
 # Required for l10n.mk - defines a list of app sub dirs that should
 # be included in langpack xpis.
-ifdef MOZ_METRO
-# metro build, include both app folders
-DIST_SUBDIRS = browser metro
-else
 DIST_SUBDIRS = $(DIST_SUBDIR)
-endif
 
 include $(topsrcdir)/config/rules.mk
 
 include $(topsrcdir)/toolkit/locales/l10n.mk
 
 $(STAGEDIST): $(DIST)/branding
 
 $(DIST)/branding:
@@ -133,19 +122,16 @@ libs-%:
 	@$(MAKE) -C ../../toolkit/locales libs-$*
 	@$(MAKE) -C ../../services/sync/locales AB_CD=$* XPI_NAME=locale-$*
 ifdef MOZ_WEBAPP_RUNTIME
 	@$(MAKE) -C ../../webapprt/locales AB_CD=$* XPI_NAME=locale-$*
 endif
 	@$(MAKE) -C ../../extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$*
 	@$(MAKE) -C ../../intl/locales AB_CD=$* XPI_NAME=locale-$*
 	@$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR)
-ifdef MOZ_METRO
-	@$(MAKE) -C ../metro/locales AB_CD=$* XPI_NAME=locale-$*
-endif
 	@$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$*
 
 repackage-win32-installer: WIN32_INSTALLER_OUT=$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe
 repackage-win32-installer: $(call ESCAPE_WILDCARD,$(WIN32_INSTALLER_IN)) $(SUBMAKEFILES) libs-$(AB_CD)
 	@echo 'Repackaging $(WIN32_INSTALLER_IN) into $(WIN32_INSTALLER_OUT).'
 	$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY) export
 	$(MAKE) -C ../installer/windows CONFIG_DIR=l10ngen l10ngen/setup.exe l10ngen/7zSD.sfx
 	$(MAKE) repackage-zip \
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -807,18 +807,16 @@ just addresses the organization to follo
      and pluginActivateAlways.label strings above on a single line. This must be
      a CSS length value. -->
 <!ENTITY pluginNotification.width "28em">
 
 <!ENTITY uiTour.infoPanel.close "Close">
 
 <!ENTITY appMenuSidebars.label         "Sidebars">
 
-<!ENTITY switchToMetroCmd2.label       "Relaunch in &brandShortName; for Windows 8 Touch">
-
 <!-- LOCALIZATION NOTE: (panicButton.view.mainTimeframeDesc, panicButton.view.5min, panicButton.view.2hr, panicButton.view.day):
      The .mainTimeframeDesc string combined with any of the 3 others is meant to form a complete sentence, e.g. "Forget the last: Five minutes".
      Please ensure that this remains the case in the translation. -->
 <!ENTITY panicButton.view.mainTimeframeDesc       "Forget the last:">
 <!ENTITY panicButton.view.5min                    "Five minutes">
 <!ENTITY panicButton.view.2hr                     "Two hours">
 <!ENTITY panicButton.view.day                     "24 hours">
 
--- a/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties
+++ b/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties
@@ -28,20 +28,16 @@ developer-button.tooltiptext2 = Open Web
 
 sidebar-button.label = Sidebars
 sidebar-button.tooltiptext2 = Show sidebars
 
 add-ons-button.label = Add-ons
 # LOCALIZATION NOTE(add-ons-button.tooltiptext3): %S is the keyboard shortcut
 add-ons-button.tooltiptext3 = Manage your add-ons (%S)
 
-switch-to-metro-button2.label = Windows 8 Touch
-# LOCALIZATION NOTE(switch-to-metro-button2.tooltiptext): %S is the brand short name
-switch-to-metro-button2.tooltiptext = Relaunch in %S for Windows 8 Touch
-
 preferences-button.label = Preferences
 preferences-button.tooltiptext2 = Open preferences
 preferences-button.tooltiptext.withshortcut = Open preferences (%S)
 # LOCALIZATION NOTE (preferences-button.labelWin): Windows-only label for Options
 preferences-button.labelWin = Options
 # LOCALIZATION NOTE (preferences-button.tooltipWin): Windows-only tooltip for Options
 preferences-button.tooltipWin2 = Open options
 
--- a/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
@@ -69,33 +69,26 @@
 <!ENTITY clearOfflineAppCacheNow.label   "Clear Now">
 <!ENTITY clearOfflineAppCacheNow.accesskey "N">
 <!ENTITY overrideSmartCacheSize.label    "Override automatic cache management">
 <!ENTITY overrideSmartCacheSize.accesskey "O">
 
 <!ENTITY updateTab.label                 "Update">
 
 <!ENTITY updateApp.label                 "&brandShortName; updates:">
-<!-- Note either updateAuto1 is used or (updateAutoMetro and updateAutoDesktop),
-     so re-using accesss key in updateAuto1 is OK. updateAutoDesktop can be found
-     in preferences.properties -->
 <!ENTITY updateAuto1.label               "Automatically install updates (recommended: improved security)">
 <!ENTITY updateAuto1.accesskey           "A">
-<!ENTITY updateAutoMetro.label           "Automatically update from desktop and Windows 8 style &brandShortName;">
-<!ENTITY updateAutoMetro.accesskey       "s">
 <!ENTITY updateCheck.label               "Check for updates, but let me choose whether to install them">
 <!ENTITY updateCheck.accesskey           "C">
 <!ENTITY updateManual.label              "Never check for updates (not recommended: security risk)">
 <!ENTITY updateManual.accesskey          "N">
 
 <!ENTITY updateAutoAddonWarn.label       "Warn me if this will disable any of my add-ons">
 <!ENTITY updateAutoAddonWarn.accesskey   "W">
 
-<!ENTITY updateAutoMetroWarn.label       "(Windows 8 style &brandShortName; does not check add-on compatibility)">
-
 <!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 enableSearchUpdate.label        "Search Engines">
--- a/browser/locales/en-US/chrome/browser/preferences/preferences.properties
+++ b/browser/locales/en-US/chrome/browser/preferences/preferences.properties
@@ -131,21 +131,16 @@ actualDiskCacheSizeCalculated=Calculating web content cache sizeā€¦
 
 ####Preferences::Advanced::Network
 #LOCALIZATION NOTE: The next string is for the disk usage of the application cache.
 #   e.g., "Your application cache is currently using 200 MB"
 #   %1$S = size
 #   %2$S = unit (MB, KB, etc.)
 actualAppCacheSize=Your application cache is currently using %1$S %2$S of disk space
 
-###Preferences::Advanced::Update
-#LOCALIZATION NOTE: The next string is for updating in Windows 8 only instead of updateAuto1.label.  %S = brandShortName
-updateAutoDesktop.label=Automatically install updates from desktop %S
-updateAutoDesktop.accessKey=A
-
 syncUnlink.title=Do you want to unlink your device?
 syncUnlink.label=This device will no longer be associated with your Sync account. All of your personal data, both on this device and in your Sync account, will remain intact.
 syncUnlinkConfirm.label=Unlink
 
 # LOCALIZATION NOTE (featureEnableRequiresRestart, featureDisableRequiresRestart, restartTitle): %S = brandShortName
 featureEnableRequiresRestart=%S must restart to enable this feature.
 featureDisableRequiresRestart=%S must restart to disable this feature.
 shouldRestartTitle=Restart %S
--- a/browser/locales/en-US/chrome/browser/syncSetup.dtd
+++ b/browser/locales/en-US/chrome/browser/syncSetup.dtd
@@ -28,18 +28,16 @@
 <!-- New Account Page 1: Basic Account Info -->
 <!ENTITY setup.newAccountDetailsPage.title.label "Account Details">
 <!ENTITY setup.emailAddress.label     "Email Address">
 <!ENTITY setup.emailAddress.accesskey "E">
 <!ENTITY setup.choosePassword.label      "Choose a Password">
 <!ENTITY setup.choosePassword.accesskey  "P">
 <!ENTITY setup.confirmPassword.label     "Confirm Password">
 <!ENTITY setup.confirmPassword.accesskey "m">
-<!ENTITY setup.setupMetro.label     "Sync with Windows 8 style &brandShortName;">
-<!ENTITY setup.setupMetro.accesskey "S">
 
 <!-- LOCALIZATION NOTE: tosAgree1, tosLink, tosAgree2, ppLink, tosAgree3 are
      joined with implicit white space, so spaces in the strings aren't necessary -->
 <!ENTITY setup.tosAgree1.label      "I agree to the">
 <!ENTITY setup.tosAgree1.accesskey  "a">
 <!ENTITY setup.tosLink.label        "Terms of Service">
 <!ENTITY setup.tosAgree2.label      "and the">
 <!ENTITY setup.ppLink.label         "Privacy Policy">
--- a/browser/locales/en-US/profile/bookmarks.inc
+++ b/browser/locales/en-US/profile/bookmarks.inc
@@ -32,14 +32,9 @@
 # LOCALIZATION NOTE (firefox_community):
 # link title for https://www.mozilla.org/en-US/contribute/
 #define firefox_community Get Involved
 
 # LOCALIZATION NOTE (firefox_about):
 # link title for https://www.mozilla.org/en-US/about/
 #define firefox_about About Us
 
-# LOCALIZATION NOTE (firefox_feedback):
-# link title for browser feedback page
-# currently used by Metro only: https://input.mozilla.org/feedback/metrofirefox
-#define firefox_feedback Give Feedback
-
 #unfilter emptyLines
deleted file mode 100644
--- a/browser/locales/en-US/searchplugins/bingmetrofx.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-    <ShortName>Bing</ShortName>
-    <Description>Bing. Search by Microsoft.</Description>
-    <InputEncoding>UTF-8</InputEncoding>
-    <Image width="16" height="16">data:image/x-icon;base64,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</Image>
-    <Image width="74" height="74">data:image/png;base64,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</Image>
-    <Url type="application/x-suggestions+json" template="http://api.bing.com/osjson.aspx">
-        <Param name="query" value="{searchTerms}"/>
-        <Param name="form" value="OSDJAS"/>
-        <Param name="language" value="{moz:locale}"/>
-    </Url>
-    <Url type="text/html" method="GET" template="http://www.bing.com/search">
-        <Param name="q" value="{searchTerms}"/>
-        <MozParam name="pc" condition="pref" pref="ms-pc-metro"/>
-        <Param name="form" value="MOZWSB"/>
-    </Url>
-    <SearchForm>http://www.bing.com/search</SearchForm>
-</SearchPlugin>
deleted file mode 100644
--- a/browser/locales/en-US/searchplugins/googlemetrofx.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Google</ShortName>
-<Description>Google Search</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAB9AQAAJgAAACAgAAAAAAAA8gIAAKMBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAFESURBVDjLpZNJSwNBEIXnt4lE4kHxovgT9BDwJHqPy0HEEOJBiAuCRg+KUdC4QS4KrpC4gCBGE3NQ48JsnZ6eZ3UOM6gjaePhQU93v6+qq2q0pqgeJj2S8EdJT1hr0OxBtKCD5iEd8QxDYpvhvOBAuMDKURX9C9aPu4GA1GEVkzvMg10UBfYveWAWgYAP00V01fa+R9M2bA51wJvhIn3qR+ybt3D3JNQBE5sMjCIOLFpoHzOwdsLRO22qA6R6kiZiWwxUvy/PUQZIhYZ1vFM9cvcOOsYNdcBgysISdSJBnZjJMlR0Fw8vAp0xoz5gao/h+NZBy4i/10XGwrPA+hmvDyhVRG2Avu/LwcrkFADZa16L1h330w1RNgc3DiJzCpPYRm1bpveXX11clQR28xwblHpk1vq1iP/5mcoS0CoXDZiL0vsJ+dzfl+3T/VYAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAK5SURBVFjDxVfrSxRRFJ9/Jta/oyWjF5XQm6D6EkHRgygIIgjUTcueVgqVWSRRkppEUQYWWB8ye1iGWilWlo/Ude489s7M6Zw7D9dlt53dmd29cFiWvXvO77x+51xpaaUsoSxBaUWZQ4ECy5xji2xKZDyCMlMEw6lCNiOSgwZKJK1SkcKeSealfP64t0mBjl4Ow39MkDUL0p2RSROOtqhZdeUEYM1pBl39XCg/fEeFtWcY7G9W4csvUxjlBkCsQ4Nt9QyWVfvT6RsAKXw3aoDGATZeYIt+W1kjw7cJG0RctWDTRebbKd8A6h5pwsDb70ba3w/eUr3wt/cmwgfw6Yft4TNMQaY7o1P2ncm4FT4ANQH/jQBJ2xv7kqIXEADDql8eS3+n8bku7oxNm+EDIM/dU92upb3T/NJGeaNbDx/AsbsLRUY5Xn92caWXY5d8RV6gWllxSg4fAEnTC90DQW13BLlgXR2D3dcUeDVkwOthA1bXspxILWcm3HdThcfvufB26LcJpkOEAz9NKI/lzqpSEC7feol5EWnpSeSlIxCALUkApmULdjUqxQVAQnl3D/X/yQda4QBEq2TYc12By091MQ17Bg3R88nHKlQbVmHvj89awNBLYrwT9zXY2aBAxTkGFdiSxP/Jp6FLDw+AS7GfsdJTJ2EqSO5khD43nGfBARy/ZxOQgZHe7GPM1jzUvChUtmnBAXQPcKGMJp3fdFGq6NByEhiAO4b/YptFfQJwNyQ/bZkVQGcf90Ja25ndIyrKBOa/f8wIpwi3X1G8UcxNu7ozUS7tiH0jBswwS3RIaF1w6LYKU/ML2+8sGnjygQswtKrVIy/Qd9qQP6LnO64q4fPAKpxyZIymHo1jWk6p1ag2BsdNwQMHcC+M5kHFJX+YlPxpVlbCx2mZ5DzPI04k4kUwHHdskU3pH76iftG8yWlkAAAAAElFTkSuQmCC</Image>
-<Image width="74" height="74">data:image/png;base64,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</Image>
-<Url type="application/x-suggestions+json" method="GET" template="https://www.google.com/complete/search?client=metrofirefox&amp;q={searchTerms}"/>
-<Url type="text/html" method="GET" template="https://www.google.com/search">
-  <Param name="q" value="{searchTerms}"/>
-  <Param name="ie" value="utf-8"/>
-  <Param name="oe" value="utf-8"/>
-  <Param name="client" value="metrofirefox"/>
-</Url>
-<SearchForm>https://www.google.com/</SearchForm>
-</SearchPlugin>
deleted file mode 100644
--- a/browser/locales/en-US/searchplugins/metrolist.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-bingmetrofx
-googlemetrofx
-wikipediametrofx
-yahoometrofx
deleted file mode 100644
--- a/browser/locales/en-US/searchplugins/wikipediametrofx.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Wikipedia (en)</ShortName>
-<Description>Wikipedia, the free encyclopedia</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAA4AQAAJgAAACAgAAAAAAAAJAMAAGQBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAEFSURBVDjLxZPRDYJAEESJoQjpgBoM/9IBtoAl4KcUQQlSAjYgJWAH0gPmyNtkzEEuxkQTPzawc3Ozc3MQTc/JfVPR/wW6a+eKQ+Hyfe54B2wvrfXVqXLDfTCMd3j0VHksrTcH9bl2aZq+BCgEwCCPj9E4TdPYGj0C9CYAKdkmBrIIxiIYbvpbb2sSl8AiA+ywAbJE5YLpCImLU/WRDyIAWRgu4k1s4v50ODru4haYSCk4ntkuM0wcMAINXiPKTJQ9CfgB40phBr8DyFjGKkKEhYhCY4iCDgpAYAM2EZBlhJnsZxQUYBNkSkfBvjDd0ttPeR0mxREQ+OhfYOJ6EmL+l/qzn2kGli9cAF3BOfkAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAIKSURBVFjD7ZdBSgNRDIYLguAB7FLwAkXwBl0JgiDYjQcY8ARduBJKu3I5C0EoWDxAT9AL9AK9QBeCIHQlCM/3DZOSmeZNZ2r1bQyEGV7yXv7kJZlJq6XIOXfs+crzwPPTnvnR863n05ZFufDD/T595Q4eauM37u/pWYwfeX53cegcABcuHg0AkEQE8AKAu4gAXv8BrAEMh0PXbrddt9t1vV4v406nk62laeqm02n2LjKYIuK5WCyyfeiLDF32yLn6TJ5mBFarlev3+9nBMMqsabkYhmezWcEd2ctTE/tYBwhgt14BhtmAV2VaLpdrAHioCW+VdwWy9IMAUBQjJcQFTwGqvcTD+Xy+oc8askZJyAYrnKEokCeWLpQkSSZvBIANYgSDVVEQQJaeyHQu1QIgiQNb6AmrTtaQ9+RFSLa1D4iXgfsrVITloeSFFZlaAEjAUMaXo2DJWQtVRe1OKF5aJUkf0NdglXO5VzQGoI2USwwD3LEl590CtdO3QBoT5WSFV+Q63Oha17ITgMlkslGSGBWPdeNiDR2SL1B6zQFINmOAkFOW5eTSURCdvX6OdUlapaWjsKX0dgOg26/VWHSUKhrPz35ISKwq76R9Wx+kKgC1f0o5mISsypUG3kPj2L/lDzKYvEUwzoh2JtPRdQQAo1jD6afne88H1oTMeH6ZK+x7PB/lQ/CJtvkNEgDh1dr/bVYAAAAASUVORK5CYII=</Image>
-<Image width="74" height="74">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEoAAABKCAIAAACTslUmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5ZWJkNTlmMy02ZDIzLTRjZWUtOWQyOS01OWY4ODY2OTRmNzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTA2MTE5RkU5QjQwMTFFM0IwODREMENBREVCMTMxOUIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTA2MTE5RkQ5QjQwMTFFM0IwODREMENBREVCMTMxOUIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MGIwYjJiY2EtNDlhOS00ZTNmLThiMzAtYTViMGFjZTQ3OTVjIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjllYmQ1OWYzLTZkMjMtNGNlZS05ZDI5LTU5Zjg4NjY5NGY3MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpbYde4AAATqSURBVHja7JpZKG1fHMeveYhMIXPodAxRElFmXlAyTw+eSBGivBiSPFCmPDhekJDiAZEiUaIQh8wiccpM5lm43+6u9d+dc/a5HMf/urf1e1p7re9e+/ux9t6/39qH0tvb249/N5R//NNB8SgexaN4FI/iUTyKR/EoHsWjeBSP4lE8ikfxKN47Q/X9Uk9Pz+fnZx6PZ2VlZWBgoKmp+fj4eHNzc3d3d3V1tb6+fnZ2trCw0NfXV1hYaGdn5+zsbGRkBBnOury8PDk52djY2NvbGxoagj4uLs7W1tbBwQFT6erqYqr9/f3Nzc2dnZ3+/v6Hh4fY2Fh7e3s+n49JtLW1b29vce7i4qKSktL09PR7Tb+9O3A9gHHNo6KiEhAQAJcjIyMeHh5SNUD18fERiUQrKytoSAqA4efnt7u7yyUwMzNLTEx8v+cP4DGxvLwcGBgodtXMzEwxGVYyJCSErcnIyBDTYFXZmo6ODjEB/lj+/v7MqIaGxuDg4EfdfhiPCdxUxJaamtrT05OkBub09PSIrKWlRVLT3t7OjHZ1dUm9EBEMDAzI4VNOPKFQ+N/bSVl5bW1NqkwgEBAZ7lhJQXp6OoZSUlK4LlRRUQFBaGiofD7lxEOw76usrCwumaWlJZGNjo6yhy4uLlR+xfX1NdfpTk5OOHF+fv7/xhsbGyO+8WDgFSpV1tTUxLWAzNJVVlZyXWJychICd3d3uU3Kjyf2BFZVVUnVvLy8GBsbE9nExATTjzSAQ0NDQxnz456U+6lTAB57ZSwsLLhk1dXVRIbXPdMZExODw7a2Nq6zGH4TE5PPOPwUHt6NSMrEemdnp1TZ/f09+xUK3+hBA2ldxuT5+fnQ1NfX/zE8REFBAfHt5ubGJSstLSWyhISE+Ph4NIaHh7n0SImoAVRVVVG+/Em8w8NDdu5GuSRVhioMdtlKX19fGdM2NzdDk5eX90l7n8VjijViOioqikuWm5vLruBQo8qY08bGBrKDg4M/jzczM8NeFtTEUmXHx8eob0ihg+qZa8KpqSlowsPDP+9NAXgIdg2dk5PDJSsuLiaysLAw2QUDNh/fBa+7u5u9LeBK8bW1tex1XlpaktRgu4AhV1dXhRhTDB7C1NSU+AaGpABbPuzr2HgRERGSsuzsbAxhy/e98MrLy4lvbAslBWlpaRhCNkOlQpSrq6tsDXYeKND19fUV5UpheOfn5+rq6sR3T08Pe/To6Aidjo6OaCclJXG9aRsbG9FZU1Pz7fAQqampXNVzdHQ0yYpzc3PsW3RjY4PIzM3N0YNi6DviIZWxfc/OzjL9W1tbOAwICCBKtNlFDNM5Pj4udVP/XfAQ5NsBAumeDbO9vU1k2DdIpkrm48rnU/kX4g0ODop9pzo9PUUjOTlZTOnl5UVkhYWFuCHRCA4OVqwfBeMh7O3tie+ysrLIyEg0kBXEZKiniQyPHMDQEAqF3x2voaFB7DtaSUmJVKWLiwtb5u3trXAzisfDXk5HR4eYRpZ7fX39ba2D6O3t/QvwENjIENOtra0ylDwej5FZW1t/hZMvwROJRIxpPp8vWwl4RllXV/fX4CGCgoJgemRk5PcOfsXd3d1X2FD9op9mioqKUIIxkLJDIBBgy6+lpfUVNpTe6L+KUzyKR/EoHsWjeBSP4lE8ikfxKB7Fo3gUj+JRvHfFTwEGAAgMbrUkfQalAAAAAElFTkSuQmCC</Image>
-<Url type="application/x-suggestions+json" method="GET" template="http://en.wikipedia.org/w/api.php">
-  <Param name="action" value="opensearch"/>
-  <Param name="search" value="{searchTerms}"/>
-</Url>
-<Url type="text/html" method="GET" template="http://en.wikipedia.org/wiki/Special:Search">
-  <Param name="search" value="{searchTerms}"/>
-  <Param name="sourceid" value="Mozilla-search"/>
-</Url>
-<SearchForm>http://en.wikipedia.org/wiki/Special:Search</SearchForm>
-</SearchPlugin>
deleted file mode 100644
--- a/browser/locales/en-US/searchplugins/yahoometrofx.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Yahoo</ShortName>
-<Description>Yahoo Search</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/x-icon;base64,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</Image>
-<Image width="74" height="74">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEoAAABKCAIAAACTslUmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2xpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGMkQ1NjY1OTQzMjA2ODExOEFCM0NBQTM2NzFDMUYwRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNTI5NTE2NzcwQ0IxMUUzQUZGRUQxNzZFRDEwMkU1NiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNTI5NTE2NjcwQ0IxMUUzQUZGRUQxNzZFRDEwMkU1NiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NDY2MGVjYzAtNDBiNy00NzFlLTg0NTgtOTQzNTNmOWM4YzYyIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjkzMUIyODkyMTQ5QjExRTM5QkRGOUUwM0ZBM0MwMDNBIi8+IDwvcmRmOkRl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</Image>
-<Url type="application/x-suggestions+json" method="GET"
-     template="http://ff.search.yahoo.com/gossip?output=fxjson&amp;command={searchTerms}" />
-<Url type="text/html" method="GET" template="http://search.yahoo.com/search">
-  <Param name="p" value="{searchTerms}"/>
-  <Param name="ei" value="UTF-8"/>
-  <MozParam name="fr" condition="pref" pref="yahoo-fr-metro" />
-</Url>
-<SearchForm>http://search.yahoo.com/</SearchForm>
-</SearchPlugin>
--- a/browser/locales/filter.py
+++ b/browser/locales/filter.py
@@ -15,18 +15,17 @@ def test(mod, path, entity = None):
   if mod not in ("browser", "extensions/spellcheck"):
     # we only have exceptions for browser and extensions/spellcheck
     return "error"
   if not entity:
     # the only files to ignore are spell checkers and search
     if mod == "extensions/spellcheck":
       return "ignore"
     # browser
-    if (re.match(r"searchplugins\/.+\.xml", path) or
-        path == "searchplugins/metrolist.txt"):
+    if (re.match(r"searchplugins\/.+\.xml", path):
       return "ignore"
     return "error"
   if mod == "extensions/spellcheck":
     # l10n ships en-US dictionary or something, do compare
     return "error"
   if path == "defines.inc":
     return "ignore" if entity == "MOZ_LANGPACK_CONTRIBUTORS" else "error"
 
deleted file mode 100644
--- a/browser/metro/Makefile.in
+++ /dev/null
@@ -1,23 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-include $(topsrcdir)/config/rules.mk
-
-#########################################
-# application.ini
-
-GRE_BUILDID := $(shell cat $(DEPTH)/config/buildid)
-DEFINES += -DGRE_BUILDID=$(GRE_BUILDID) -DMOZ_APP_BASENAME=$(MOZ_APP_BASENAME)
-
-# 'application.ini' breaks firefox build config. So we use something different.
-metroapp.ini: metroapp.ini.in $(DEPTH)/config/buildid $(topsrcdir)/config/milestone.txt
-	$(RM) metroapp.ini
-	$(call py_action,preprocessor,$(DEFINES) $< -o $@)
-
-libs:: metroapp.ini
-	$(INSTALL) metroapp.ini $(FINAL_TARGET)
-
-#########################################
-
-GARBAGE += metroapp.ini
deleted file mode 100644
--- a/browser/metro/base/content/BrowserTouchHandler.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * BrowserTouchHandler
- *
- * Receives touch events from our input event capturing in input.js
- * and relays appropriate events to content. Also handles requests
- * from content for UI.
- */
-
-const BrowserTouchHandler = {
-  _debugEvents: false,
-
-  init: function init() {
-    // Misc. events we catch during the bubbling phase
-    document.addEventListener("PopupChanged", this, false);
-    document.addEventListener("CancelTouchSequence", this, false);
-
-    // Messages sent from content.js
-    messageManager.addMessageListener("Content:ContextMenu", this);
-    messageManager.addMessageListener("Content:SelectionCaret", this);
-  },
-
-  // Content forwarding the contextmenu command
-  _onContentContextMenu: function _onContentContextMenu(aMessage) {
-    // Note, target here is the target of the message manager message,
-    // usually the browser.
-    // Touch input selection handling
-    if (!InputSourceHelper.isPrecise &&
-        !SelectionHelperUI.isActive &&
-        SelectionHelperUI.canHandleContextMenuMsg(aMessage)) {
-      SelectionHelperUI.openEditSession(aMessage.target,
-                                        aMessage.json.xPos,
-                                        aMessage.json.yPos);
-      return;
-    }
-
-    // Check to see if we have context menu item(s) that apply to what
-    // was clicked on.
-    let contextInfo = { name: aMessage.name,
-                        json: aMessage.json,
-                        target: aMessage.target };
-    if (ContextMenuUI.showContextMenu(contextInfo)) {
-      let event = document.createEvent("Events");
-      event.initEvent("CancelTouchSequence", true, false);
-      document.dispatchEvent(event);
-    } else {
-      // Send the MozEdgeUIGesture to input.js to
-      // toggle the context ui.
-      let event = document.createEvent("Events");
-      event.initEvent("MozEdgeUICompleted", true, false);
-      window.dispatchEvent(event);
-    }
-  },
-
-  /*
-   * Called when Content wants to initiate selection management
-   * due to a tap in a form input.
-   */
-  _onCaretSelectionStarted: function _onCaretSelectionStarted(aMessage) {
-    SelectionHelperUI.attachToCaret(aMessage.target,
-                                    aMessage.json.xPos,
-                                    aMessage.json.yPos);
-  },
-
-  /*
-   * Events
-   */
-
-  handleEvent: function handleEvent(aEvent) {
-    // ignore content events we generate
-    if (aEvent.target == document)
-      return;
-
-    if (this._debugEvents)
-      Util.dumpLn("BrowserTouchHandler:", aEvent.type);
-
-    switch (aEvent.type) {
-      case "PopupChanged":
-      case "CancelTouchSequence":
-        if (!aEvent.detail)
-          ContextMenuUI.reset();
-        break;
-    }
-  },
-
-  receiveMessage: function receiveMessage(aMessage) {
-    if (this._debugEvents) Util.dumpLn("BrowserTouchHandler:", aMessage.name);
-    switch (aMessage.name) {
-      // Content forwarding the contextmenu command
-      case "Content:ContextMenu":
-        this._onContentContextMenu(aMessage);
-        break;
-      case "Content:SelectionCaret":
-        this._onCaretSelectionStarted(aMessage);
-        break;
-    }
-  },
-};
deleted file mode 100644
--- a/browser/metro/base/content/ContentAreaObserver.js
+++ /dev/null
@@ -1,361 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- /*
-  * ContentAreaObserver manages tracking the viewable area within the browser.
-  * It also handles certain tasks like positioning of input elements within
-  * content when the viewable area changes.
-  *
-  * ContentAreaObserver creates styles that content can apply and also fires
-  * events when things change. The 'width' and 'height' properties of the
-  * styles are updated whenever various parts of the UI are resized.
-  *
-  *  styles: window-width, window-height
-  *  events: SizeChanged
-  *
-  *  The innerWidth/innerHeight of the main chrome window.
-  *
-  *  styles: content-width, content-height
-  *  events: ContentSizeChanged
-  *
-  *  The area of the window dedicated to web content; this is equal to the
-  *  innerWidth/Height minus any toolbars or similar chrome.
-  *
-  *  styles: viewable-width, viewable-height
-  *  events: ViewableSizeChanged
-  *
-  *  The portion of the content area that is not obscured by the on-screen
-  *  keyboard.
-  *
-  * ContentAreaObserver also manages soft keyboard related events. Events
-  * fired include:
-  *
-  *  KeyboardChanged - fired after the visibility of the soft keyboard changes
-  *  and after any view related changes are made to accomidate view dim
-  *  changes as a result.
-  *
-  *  MozDeckOffsetChanging, MozDeckOffsetChanged - interim events fired when
-  *  the browser deck is being repositioned to move focused elements out of
-  *  the way of the keyboard.
-  */
-
-var ContentAreaObserver = {
-  styles: {},
-  _shiftAmount: 0,
-  _deckTransitioning: false,
-
-  /*
-   * Properties
-   */
-
-  get width() {
-    return window.innerWidth || 1366;
-  },
-
-  get height() {
-    return window.innerHeight || 768;
-  },
-
-  get contentHeight() {
-    return this._getContentHeightForWindow(this.height);
-  },
-
-  get viewableHeight() {
-    return this._getViewableHeightForContent(this.contentHeight);
-  },
-
-  get isKeyboardOpened() {
-    return Services.metro.keyboardVisible;
-  },
-
-  get isKeyboardTransitioning() {
-    return this._deckTransitioning;
-  },
-
-  get viewstate() {
-    if (this.width < Services.prefs.getIntPref("browser.ui.snapped.maxWidth")) {
-      return "snapped";
-    }
-    return (this.height > this.width) ? "portrait" : "landscape";
-  },
-
-  /*
-   * Public apis
-   */
-
-  init: function init() {
-    window.addEventListener("resize", this, false);
-
-    // Message manager msgs we listen for
-    messageManager.addMessageListener("Content:RepositionInfoResponse", this);
-
-    // Observer msgs we listen for
-    Services.obs.addObserver(this, "metro_softkeyboard_shown", false);
-    Services.obs.addObserver(this, "metro_softkeyboard_hidden", false);
-
-    // setup initial values for browser form repositioning
-    this.shiftBrowserDeck(0);
-
-    // initialize our custom width and height styles
-    this._initStyles();
-
-    // apply default styling
-    this.update();
-  },
-
-  shutdown: function shutdown() {
-    messageManager.removeMessageListener("Content:RepositionInfoResponse", this);
-    Services.obs.removeObserver(this, "metro_softkeyboard_shown");
-    Services.obs.removeObserver(this, "metro_softkeyboard_hidden");
-  },
-
-  update: function cao_update (width, height) {
-    let oldWidth = parseInt(this.styles["window-width"].width);
-    let oldHeight = parseInt(this.styles["window-height"].height);
-
-    let newWidth = width || this.width;
-    let newHeight = height || this.height;
-
-    if (newHeight == oldHeight && newWidth == oldWidth) {
-      return;
-    }
-
-    this.styles["window-width"].width = newWidth + "px";
-    this.styles["window-width"].maxWidth = newWidth + "px";
-    this.styles["window-height"].height = newHeight + "px";
-    this.styles["window-height"].maxHeight = newHeight + "px";
-
-    this._updateViewState();
-
-    this.updateContentArea(newWidth, this._getContentHeightForWindow(newHeight));
-    this._dispatchBrowserEvent("SizeChanged");
-  },
-
-  updateContentArea: function cao_updateContentArea (width, height) {
-    let oldHeight = parseInt(this.styles["content-height"].height);
-    let oldWidth = parseInt(this.styles["content-width"].width);
-
-    let newWidth = width || this.width;
-    let newHeight = height || this.contentHeight;
-
-    if (newHeight == oldHeight && newWidth == oldWidth) {
-      return;
-    }
-
-    this.styles["content-height"].height = newHeight + "px";
-    this.styles["content-height"].maxHeight = newHeight + "px";
-    this.styles["content-width"].width = newWidth + "px";
-    this.styles["content-width"].maxWidth = newWidth + "px";
-
-    this.updateViewableArea(newWidth, this._getViewableHeightForContent(newHeight));
-    this._dispatchBrowserEvent("ContentSizeChanged");
-  },
-
-  updateViewableArea: function cao_updateViewableArea (width, height) {
-    let oldHeight = parseInt(this.styles["viewable-height"].height);
-    let oldWidth = parseInt(this.styles["viewable-width"].width);
-
-    let newWidth = width || this.width;
-    let newHeight = height || this.viewableHeight;
-
-    if (newHeight == oldHeight && newWidth == oldWidth) {
-      return;
-    }
-
-    this.styles["viewable-height"].height = newHeight + "px";
-    this.styles["viewable-height"].maxHeight = newHeight + "px";
-    this.styles["viewable-width"].width = newWidth + "px";
-    this.styles["viewable-width"].maxWidth = newWidth + "px";
-
-    this.updateAppBarPosition();
-
-    // Update the back/tab button states. If the keyboard is up
-    // these are hidden.
-    BrowserUI._updateButtons();
-
-    this._dispatchBrowserEvent("ViewableSizeChanged");
-  },
-
-  updateAppBarPosition: function updateAppBarPosition(aForceDown) {
-    // Adjust the app and find bar position above the soft keyboard
-    let keyboardHeight = aForceDown ? 0 : Services.metro.keyboardHeight;
-    Elements.navbar.style.bottom = keyboardHeight + "px";
-    Elements.contextappbar.style.bottom = keyboardHeight + "px";
-    Elements.findbar.style.bottom = keyboardHeight + "px";
-  },
-
-  /*
-   * Called by BrowserUI right before we blur the nav bar edit. We use
-   * this to get a head start on shuffling app bars around before the
-   * soft keyboard transitions down.
-   */
-  navBarWillBlur: function navBarWillBlur() {
-    this.updateAppBarPosition(true);
-  },
-
-  onBrowserCreated: function onBrowserCreated(aBrowser) {
-    let notificationBox = aBrowser.parentNode.parentNode;
-    notificationBox.classList.add("content-width");
-    notificationBox.classList.add("content-height");
-  },
-
-  /*
-   * Event handling
-   */
-
-  _onKeyboardDisplayChanging: function _onKeyboardDisplayChanging(aNewState) {
-    if (aNewState) {
-      Elements.stack.setAttribute("keyboardVisible", true);
-    } else {
-      Elements.stack.removeAttribute("keyboardVisible");
-    }
-
-    this.updateViewableArea();
-
-    if (!aNewState) {
-      this.shiftBrowserDeck(0);
-      return;
-    }
-
-    // Request info about the target form element to see if we
-    // need to reposition the browser above the keyboard.
-    if (SelectionHelperUI.layerMode === 2 /*kContentLayer*/) {
-      Browser.selectedBrowser.messageManager.sendAsyncMessage("Browser:RepositionInfoRequest", {
-        viewHeight: this.viewableHeight,
-      });
-    }
-  },
-
-  _onRepositionResponse: function _onRepositionResponse(aJsonMsg) {
-    if (!aJsonMsg.reposition || !this.isKeyboardOpened) {
-      this.shiftBrowserDeck(0);
-      return;
-    }
-    this.shiftBrowserDeck(aJsonMsg.raiseContent);
-  },
-
-  observe: function cao_observe(aSubject, aTopic, aData) {
-    // Note these are fired before the transition starts. Also per MS specs
-    // we should not do anything "heavy" here. We have about 100ms before
-    // windows just ignores the event and starts the animation.
-    switch (aTopic) {
-      case "metro_softkeyboard_hidden":
-      case "metro_softkeyboard_shown":
-        // Mark that we are in a transition state. Auto-complete and other
-        // popups will wait for an event before displaying anything.
-        this._deckTransitioning = true;
-        // This also insures tap events are delivered before we fire
-        // this event. Form repositioning requires the selection handler
-        // be running before we send this.
-        let self = this;
-        let state = aTopic == "metro_softkeyboard_shown";
-        Util.executeSoon(function () {
-          self._onKeyboardDisplayChanging(state);
-        });
-        break;
-    }
-  },
-
-  handleEvent: function cao_handleEvent(aEvent) {
-    switch (aEvent.type) {
-      case 'resize':
-        if (aEvent.target != window)
-          return;
-        ContentAreaObserver.update();
-        break;
-    }
-  },
-
-  receiveMessage: function sh_receiveMessage(aMessage) {
-    switch (aMessage.name) {
-      case "Content:RepositionInfoResponse":
-        this._onRepositionResponse(aMessage.json);
-        break;
-    }
-  },
-
-  /*
-   * Internal helpers
-   */
-
-  _updateViewState: function (aState) {
-    let oldViewstate = Elements.windowState.getAttribute("viewstate");
-    let viewstate = aState || this.viewstate;
-    if (viewstate != oldViewstate) {
-      Elements.windowState.setAttribute("viewstate", viewstate);
-      Services.obs.notifyObservers(null, "metro_viewstate_changed", viewstate);
-    }
-  },
-
-  shiftBrowserDeck: function (aAmount) {
-    if (aAmount == 0) {
-      this._deckTransitioning = false;
-      this._dispatchWindowEvent("KeyboardChanged", this.isKeyboardOpened);
-    }
-
-    if (this._shiftAmount == aAmount)
-      return;
-
-    this._shiftAmount = aAmount;
-    this._dispatchWindowEvent("MozDeckOffsetChanging", aAmount);
-
-    // Elements.browsers is the deck all browsers sit in
-    let self = this;
-    Elements.browsers.addEventListener("transitionend", function () {
-      Elements.browsers.removeEventListener("transitionend", arguments.callee, true);
-      self._deckTransitioning = false;
-      self._dispatchWindowEvent("MozDeckOffsetChanged", aAmount);
-      self._dispatchWindowEvent("KeyboardChanged", self.isKeyboardOpened);
-    }, true);
-
-    // selectAtPoint bug 858471
-    //Elements.browsers.style.transform = "translateY(" + (-1 * aAmount) + "px)";
-    Elements.browsers.style.marginTop = "" + (-1 * aAmount) + "px";
-  },
-
-  _dispatchWindowEvent: function _dispatchWindowEvent(aEventName, aDetail) {
-    let event = document.createEvent("UIEvents");
-    event.initUIEvent(aEventName, true, false, window, aDetail);
-    window.dispatchEvent(event);
-  },
-
-  _dispatchBrowserEvent: function (aName, aDetail) {
-    setTimeout(function() {
-      let event = document.createEvent("Events");
-      event.initEvent(aName, true, false);
-      Elements.browsers.dispatchEvent(event);
-    }, 0);
-  },
-
-  _initStyles: function _initStyles() {
-    let stylesheet = document.styleSheets[0];
-    for (let style of ["window-width", "window-height",
-                       "content-height", "content-width",
-                       "viewable-height", "viewable-width"]) {
-      let index = stylesheet.insertRule("." + style + " {}", stylesheet.cssRules.length);
-      this.styles[style] = stylesheet.cssRules[index].style;
-    }
-  },
-
-  _getContentHeightForWindow: function (windowHeight) {
-    return windowHeight;
-  },
-
-  _getViewableHeightForContent: function (contentHeight) {
-    let keyboardHeight = Services.metro.keyboardHeight;
-    return contentHeight - keyboardHeight;
-  },
-
-  _debugDumpDims: function _debugDumpDims() {
-    let width = parseInt(this.styles["window-width"].width);
-    let height = parseInt(this.styles["window-height"].height);
-    Util.dumpLn("window:", width, height);
-    width = parseInt(this.styles["content-width"].width);
-    height = parseInt(this.styles["content-height"].height);
-    Util.dumpLn("content:", width, height);
-    width = parseInt(this.styles["viewable-width"].width);
-    height = parseInt(this.styles["viewable-height"].height);
-    Util.dumpLn("viewable:", width, height);
-  }
-};
deleted file mode 100644
--- a/browser/metro/base/content/ContextCommands.js
+++ /dev/null
@@ -1,436 +0,0 @@
-// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- /*
-  * context menu command handlers
-  */
-
-var ContextCommands = {
-  _picker: null,
-
-  get _ellipsis() {
-    delete this._ellipsis;
-    this._ellipsis = "\u2026";
-    try {
-      this._ellipsis = Services.prefs.getComplexValue("intl.ellipsis", Ci.nsIPrefLocalizedString).data;
-    } catch (ex) { }
-    return this._ellipsis;
-  },
-
-  get clipboard() {
-    return Cc["@mozilla.org/widget/clipboardhelper;1"]
-             .getService(Ci.nsIClipboardHelper);
-  },
-
-  get docRef() {
-    return Browser.selectedBrowser.contentWindow.document;
-  },
-
-  /*
-   * Context menu handlers
-   */
-
-  // Text specific
-
-  cut: function cc_cut() {
-    let target = ContextMenuUI.popupState.target;
-
-    if (!target) {
-      return;
-    }
-
-    if (target.localName === "browser") {
-      // content
-      if (ContextMenuUI.popupState.string) {
-        this.sendCommand("cut");
-
-        SelectionHelperUI.closeEditSession(true);
-      }
-    } else {
-      // chrome
-      CommandUpdater.doCommand("cmd_cut");
-    }
-
-    target.focus();
-  },
-
-  copy: function cc_copy() {
-    let target = ContextMenuUI.popupState.target;
-
-    if (!target) {
-      return;
-    }
-
-    if (target.localName == "browser") {
-      // content
-      if (ContextMenuUI.popupState.string) {
-        this.sendCommand("copy");
-      }
-    } else if (ContextMenuUI.popupState.string) {
-      this.clipboard.copyString(ContextMenuUI.popupState.string, this.docRef);
-    } else {
-      // chrome
-      CommandUpdater.doCommand("cmd_copy");
-    }
-
-    target.focus();
-  },
-
-  paste: function cc_paste() {
-    let target = ContextMenuUI.popupState.target;
-
-    if (!target) {
-      return;
-    }
-
-    if (target.localName == "browser") {
-      // content
-      let x = ContextMenuUI.popupState.x;
-      let y = ContextMenuUI.popupState.y;
-      let json = {x: x, y: y, command: "paste" };
-      target.messageManager.sendAsyncMessage("Browser:ContextCommand", json);
-    } else {
-      // chrome
-      CommandUpdater.doCommand("cmd_paste");
-      target.focus();
-    }
-    SelectionHelperUI.closeEditSession();
-  },
-
-  pasteAndGo: function cc_pasteAndGo() {
-    let target = ContextMenuUI.popupState.target;
-    target.editor.selectAll();
-    target.editor.paste(Ci.nsIClipboard.kGlobalClipboard);
-    BrowserUI.goToURI();
-  },
-
-  select: function cc_select() {
-    SelectionHelperUI.openEditSession(ContextMenuUI.popupState.target,
-                                      ContextMenuUI.popupState.xPos,
-                                      ContextMenuUI.popupState.yPos,
-                                      true);
-  },
-
-  selectAll: function cc_selectAll() {
-    let target = ContextMenuUI.popupState.target;
-    if (target.localName == "browser") {
-      // content
-      let x = ContextMenuUI.popupState.xPos;
-      let y = ContextMenuUI.popupState.yPos;
-      let json = {x: x, y: y, command: "select-all" };
-      target.messageManager.sendAsyncMessage("Browser:ContextCommand", json);
-      SelectionHelperUI.attachEditSession(target, x, y);
-    } else {
-      // chrome
-      target.editor.selectAll();
-      target.focus();
-    }
-  },
-
-  // called on display of the search text menu item
-  searchTextSetup: function cc_searchTextSetup(aRichListItem, aSearchString) {
-    let defaultURI;
-    let defaultName;
-    aSearchString = aSearchString.trim();
-    try {
-      let defaultPB = Services.prefs.getDefaultBranch(null);
-      const nsIPLS = Ci.nsIPrefLocalizedString;
-      defaultName = defaultPB.getComplexValue("browser.search.defaultenginename", nsIPLS).data;
-      let defaultEngine = Services.search.getEngineByName(defaultName);
-      defaultURI = defaultEngine.getSubmission(aSearchString).uri.spec;
-    } catch (ex) {
-      Cu.reportError(ex);
-      return false;
-    }
-    let displayString = aSearchString;
-    if (displayString.length > 15) {
-      displayString = displayString.substring(0, 15) + this._ellipsis;
-    }
-    // label child node
-    let label = Services.strings
-                        .createBundle("chrome://browser/locale/browser.properties")
-                        .formatStringFromName("browser.search.contextTextSearchLabel2",
-                                              [defaultName, displayString], 2);
-    aRichListItem.childNodes[0].setAttribute("value", label);
-    aRichListItem.setAttribute("searchString", defaultURI);
-    return true;
-  },
-
-  searchText: function cc_searchText(aRichListItem) {
-    let defaultURI = aRichListItem.getAttribute("searchString");
-    aRichListItem.childNodes[0].setAttribute("value", "");
-    aRichListItem.setAttribute("searchString", "");
-    BrowserUI.addAndShowTab(defaultURI, Browser.selectedTab);
-  },
-
-  // Link specific
-
-  openLinkInNewTab: function cc_openLinkInNewTab() {
-    let url = ContextMenuUI.popupState.linkURL;
-    BrowserUI.openLinkInNewTab(url, false, Browser.selectedTab);
-  },
-
-  copyLink: function cc_copyLink() {
-    this.clipboard.copyString(ContextMenuUI.popupState.linkURL,
-                              this.docRef);
-  },
-
-  bookmarkLink: function cc_bookmarkLink() {
-    let state = ContextMenuUI.popupState;
-    let uri = Util.makeURI(state.linkURL);
-    let title = state.linkTitle || state.linkURL;
-
-    try {
-      Bookmarks.addForURI(uri, title);
-    } catch (e) {
-      return;
-    }
-  },
-
-  // Image specific
-
-  saveImageToLib: function cc_saveImageToLib() {
-    this.saveToWinLibrary("Pict");
-  },
-
-  copyImage: function cc_copyImage() {
-    // copy to clibboard
-    this.sendCommand("copy-image-contents");
-  },
-
-  copyImageSrc: function cc_copyImageSrc() {
-    this.clipboard.copyString(ContextMenuUI.popupState.mediaURL,
-                              this.docRef);
-  },
-
-  openImageInNewTab: function cc_openImageInNewTab() {
-    BrowserUI.addAndShowTab(ContextMenuUI.popupState.mediaURL, Browser.selectedTab);
-  },
-
-  // Video specific
-
-  saveVideoToLib: function cc_saveVideoToLib() {
-    this.saveToWinLibrary("Vids");
-  },
-
-  copyVideoSrc: function cc_copyVideoSrc() {
-    this.clipboard.copyString(ContextMenuUI.popupState.mediaURL,
-                              this.docRef);
-  },
-
-  openVideoInNewTab: function cc_openVideoInNewTab() {
-    BrowserUI.addAndShowTab(ContextMenuUI.popupState.mediaURL, Browser.selectedTab);
-  },
-
-  // Bookmarks
-
-  editBookmark: function cc_editBookmark() {
-    let target = ContextMenuUI.popupState.target;
-    target.startEditing();
-  },
-
-  removeBookmark: function cc_removeBookmark() {
-    let target = ContextMenuUI.popupState.target;
-    target.remove();
-  },
-
-  // App bar
-
-  errorConsole: function cc_errorConsole() {
-    PanelUI.show("console-container");
-  },
-
-  jsShell: function cc_jsShell() {
-    // XXX for debugging, this only works when running on the desktop.
-    if (!Services.metro.immersive)
-      window.openDialog("chrome://browser/content/shell.xul", "_blank",
-                        "all=no,scrollbars=yes,resizable=yes,dialog=no");
-  },
-
-  findInPage: function cc_findInPage() {
-    FindHelperUI.show();
-  },
-
-  viewOnDesktop: function cc_viewOnDesktop() {
-    Appbar.onViewOnDesktop();
-  },
-
-  // Checks for MS app store specific meta data, and if present opens
-  // the Windows Store to the appropriate app
-  openWindowsStoreLink: function cc_openWindowsStoreLink() {
-    let storeLink = this.getStoreLink();
-    if (storeLink) {
-      Browser.selectedBrowser.contentWindow.document.location = storeLink;
-    }
-  },
-
-  getStoreLink: function cc_getStoreLink() {
-    let metaData = Browser.selectedBrowser.contentWindow.document.getElementsByTagName("meta");
-    let msApplicationName = metaData.namedItem("msApplication-PackageFamilyName");
-    if (msApplicationName) {
-      return "ms-windows-store:PDP?PFN=" + msApplicationName.getAttribute("content");
-    }
-    return null;
-  },
-
-  getPageSource: function cc_getPageSource() {
-    let uri = Services.io.newURI(Browser.selectedBrowser.currentURI.spec, null, null);
-    if (!uri.schemeIs("view-source")) {
-      return "view-source:" + Browser.selectedBrowser.currentURI.spec;
-    }
-    return null;
-  },
-
-  viewPageSource: function cc_viewPageSource() {
-    let uri = this.getPageSource();
-    if (uri) {
-      BrowserUI.addAndShowTab(uri, Browser.selectedTab);
-    }
-  },
-
-  /*
-   * Utilities
-   */
-
-  saveToWinLibrary: function cc_saveToWinLibrary(aType) {
-    let popupState = ContextMenuUI.popupState;
-    let browser = popupState.target;
-
-    // ContentAreaUtils internalSave relies on various desktop related prefs,
-    // values, and functionality. We want to be more direct by saving the
-    // image to the users Windows Library. If users want to specify the
-    // save location they can use the context menu option 'Save (type) To'.
-
-    let dirSvc = Components.classes["@mozilla.org/file/directory_service;1"]
-                           .getService(Components.interfaces.nsIProperties);
-    let saveLocationPath = dirSvc.get(aType, Components.interfaces.nsIFile);
-
-    let fileInfo = new ContentAreaUtils.FileInfo();
-    ContentAreaUtils.initFileInfo(fileInfo, popupState.mediaURL,
-                                  browser.documentURI.originCharset,
-                                  null, null, null);
-    let filename =
-      ContentAreaUtils.getNormalizedLeafName(fileInfo.fileName, fileInfo.fileExt);
-    saveLocationPath.append(filename);
-
-    // Start the background save process
-    ContentAreaUtils.internalPersist({
-      sourceURI         : fileInfo.uri,
-      sourceDocument    : null,
-      sourceReferrer    : browser.documentURI,
-      targetContentType : popupState.contentType,
-      targetFile        : saveLocationPath,
-      sourceCacheKey    : null,
-      sourcePostData    : null,
-      bypassCache       : false,
-      initiatingWindow  : this.docRef.defaultView
-    });
-  },
-
-  sendCommand: function sendCommand(aCommand) {
-    // Send via message manager over to ContextMenuHandler
-    let browser = ContextMenuUI.popupState.target;
-    browser.messageManager.sendAsyncMessage("Browser:ContextCommand", { command: aCommand });
-  },
-
-  /*
-   * isAccessibleDirectory
-   *
-   * Test to see if the directory exists and is writable.
-   */
-  isAccessibleDirectory: function isAccessibleDirectory(aDirectory) {
-    return aDirectory && aDirectory.exists() && aDirectory.isDirectory() &&
-           aDirectory.isWritable();
-  },
-
-  /*
-   * saveFileAs
-   *
-   * Browse for a location and then save a file to the local system using
-   * standard download prefs.
-   *
-   * @param aFileUriString path to file
-   */
-  saveFileAs: function saveFileAs(aPopupState) {
-    let srcUri = null;
-    let mediaURL = aPopupState.mediaURL;
-    try {
-      srcUri = Util.makeURI(mediaURL, null, null);
-    } catch (ex) {
-      Util.dumpLn("could not parse:", mediaURL);
-      return;
-    }
-
-    let picker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
-    let windowTitle = Strings.browser.GetStringFromName("browserForSaveLocation");
-
-    picker.init(window, windowTitle, Ci.nsIFilePicker.modeSave);
-
-    // prefered filename
-    let fileName = mediaURL.substring(mediaURL.lastIndexOf("/") + 1);
-    if (fileName.length)
-      picker.defaultString = fileName;
-
-    // prefered file extension
-    let fileExtension = mediaURL.substring(mediaURL.lastIndexOf(".") + 1);
-    if (fileExtension.length)
-      picker.defaultExtension = fileExtension;
-    picker.appendFilters(Ci.nsIFilePicker.filterImages);
-
-    // prefered save location
-    Task.spawn(function() {
-      let preferredDir = yield Downloads.getPreferredDownloadsDirectory();
-      picker.displayDirectory = new FileUtils.File(preferredDir);
-
-      try {
-        let lastDir = Services.prefs.getComplexValue("browser.download.lastDir", Ci.nsILocalFile);
-        if (this.isAccessibleDirectory(lastDir))
-          picker.displayDirectory = lastDir;
-      }
-      catch (e) { }
-
-      this._picker = picker;
-      this._pickerUrl = mediaURL;
-      this._pickerContentDisp = aPopupState.contentDisposition;
-      this._contentType = aPopupState.contentType;
-      picker.open(ContextCommands);
-    }.bind(this));
-  },
-
-  /*
-   * Filepicker callback
-   */
-  done: function done(aSuccess) {
-    let picker = this._picker;
-    this._picker = null;
-
-    if (aSuccess == Ci.nsIFilePicker.returnCancel)
-      return;
-
-    let file = picker.file;
-    if (file == null)
-      return;
-
-    try {
-      if (file.exists())
-        file.remove(false);
-    } catch (e) {}
-
-    ContentAreaUtils.internalSave(this._pickerUrl, null, null,
-                                  this._pickerContentDisp,
-                                  this._contentType, false, "SaveImageTitle",
-                                  new AutoChosen(file, Util.makeURI(this._pickerUrl, null, null)),
-                                  getBrowser().documentURI, this.docRef, true, null);
-
-    var newDir = file.parent.QueryInterface(Ci.nsILocalFile);
-    Services.prefs.setComplexValue("browser.download.lastDir", Ci.nsILocalFile, newDir);
-  },
-};
-
-function AutoChosen(aFileAutoChosen, aUriAutoChosen) {
-  this.file = aFileAutoChosen;
-  this.uri  = aUriAutoChosen;
-}
-
deleted file mode 100644
--- a/browser/metro/base/content/ContextUI.js
+++ /dev/null
@@ -1,399 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// Fired when the tabtray is displayed
-const kContextUITabsShowEvent = "MozContextUITabsShow";
-// add more as needed...
-
-/*
- * Manages context UI (navbar, tabbar, appbar) and track visibility. Also
- * tracks events that summon and hide the context UI.
- */
-var ContextUI = {
-  _expandable: true,
-  _hidingId: 0,
-
-  /*******************************************
-   * init
-   */
-
-  init: function init() {
-    Elements.browsers.addEventListener('URLChanged', this, true);
-    Elements.browsers.addEventListener("AlertActive", this, true);
-    Elements.browsers.addEventListener("AlertClose", this, true);
-    Elements.tabList.addEventListener('TabSelect', this, true);
-    Elements.panelUI.addEventListener('ToolPanelShown', this, false);
-    Elements.panelUI.addEventListener('ToolPanelHidden', this, false);
-
-    Elements.tray.addEventListener("mousemove", this, false);
-    Elements.tray.addEventListener("mouseleave", this, false);
-
-    window.addEventListener("touchstart", this, true);
-    window.addEventListener("mousedown", this, true);
-    window.addEventListener("MozEdgeUIStarted", this, true);
-    window.addEventListener("MozEdgeUICanceled", this, true);
-    window.addEventListener("MozEdgeUICompleted", this, true);
-    window.addEventListener("keypress", this, true);
-    window.addEventListener("KeyboardChanged", this, false);
-    window.addEventListener("MozFlyoutPanelShowing", this, false);
-
-    Elements.tray.addEventListener("transitionend", this, true);
-
-    Appbar.init();
-  },
-
-  /*******************************************
-   * Context UI state getters & setters
-   */
-
-  // any visiblilty
-  get isVisible() {
-    return this.navbarVisible || this.tabbarVisible || this.contextAppbarVisible;
-  },
-
-  // navbar visiblilty
-  get navbarVisible() {
-    return (Elements.navbar.hasAttribute("visible") ||
-            Elements.navbar.hasAttribute("startpage"));
-  },
-
-  // tabbar visiblilty
-  get tabbarVisible() {
-    return Elements.tray.hasAttribute("expanded");
-  },
-
-  // appbar visiblilty
-  get contextAppbarVisible() {
-    return Elements.contextappbar.isShowing;
-  },
-
-  // currently not in use, for the always show tabs feature
-  get isExpandable() { return this._expandable; },
-  set isExpandable(aFlag) {
-    this._expandable = aFlag;
-    if (!this._expandable)
-      this.dismiss();
-  },
-
-  /*******************************************
-   * Public api
-   */
-
-  /*
-   * Toggle the current nav UI state. Fires context ui events.
-   */
-  toggleNavUI: function () {
-    // The navbar is forced open when the start page is visible. appbar.js
-    // controls the "visible" property, and browser-ui controls the "startpage"
-    // property. Hence we rely on the tabbar for current toggle state.
-    if (this.tabbarVisible) {
-      this.dismiss();
-    } else {
-      this.displayNavUI();
-    }
-  },
-
-  /*
-   * Show the nav and tabs bar. Returns true if any non-visible UI
-   * was shown. Fires context ui events.
-   */
-  displayNavUI: function () {
-    let shown = false;
-
-    if (!this.navbarVisible) {
-      BrowserUI.updateURI();
-      this.displayNavbar();
-      shown = true;
-    }
-
-    if (!this.tabbarVisible) {
-      this.displayTabs();
-      shown = true;
-    }
-
-    if (shown) {
-      ContentAreaObserver.updateContentArea();
-    }
-
-    return shown;
-  },
-
-  /*
-   * Dismiss any context UI currently visible. Returns true if any
-   * visible UI was dismissed. Fires context ui events.
-   */
-  dismiss: function () {
-    let dismissed = false;
-
-    this._clearDelayedTimeout();
-
-    // No assurances this will hide the nav bar. It may have the
-    // 'startpage' property set. This removes the 'visible' property.
-    if (this.navbarVisible) {
-      BrowserUI.blurNavBar();
-      this.dismissNavbar();
-      dismissed = true;
-    }
-    if (this.tabbarVisible) {
-      this.dismissTabs();
-      dismissed = true;
-    }
-    if (Elements.contextappbar.isShowing) {
-      this.dismissContextAppbar();
-      dismissed = true;
-    }
-
-    if (dismissed) {
-      ContentAreaObserver.updateContentArea();
-    }
-
-    return dismissed;
-  },
-
-  /*
-   * Briefly show the tab bar and then hide it. Fires context ui events.
-   */
-  peekTabs: function peekTabs(aDelay) {
-    if (!this.tabbarVisible)
-      this.displayTabs();
-
-    ContextUI.dismissTabsWithDelay(aDelay);
-  },
-
-  /*
-   * Dismiss tab bar after a delay. Fires context ui events.
-   */
-  dismissTabsWithDelay: function (aDelay) {
-    aDelay = aDelay || kForegroundTabAnimationDelay;
-    this._clearDelayedTimeout();
-    this._lastTimeoutDelay = aDelay;
-    this._hidingId = setTimeout(function () {
-        ContextUI.dismissTabs();
-      }, aDelay);
-  },
-
-  /*
-   * Display the nav bar.
-   *
-   * @return false if we were already visible, and didn't do anything.
-   */
-  displayNavbar: function () {
-    if (Elements.chromeState.getAttribute("navbar") == "visible") {
-      return false;
-    }
-
-    Elements.navbar.show();
-    Elements.chromeState.setAttribute("navbar", "visible");
-    ContentAreaObserver.updateContentArea();
-    return true;
-  },
-
-  // Display the tab tray
-  displayTabs: function () {
-    this._clearDelayedTimeout();
-    this._setIsExpanded(true);
-  },
-
-  // Dismiss the navbar if visible.
-  dismissNavbar: function dismissNavbar() {
-    if (!BrowserUI.isStartTabVisible) {
-      Elements.autocomplete.closePopup();
-      Elements.navbar.dismiss();
-      Elements.chromeState.removeAttribute("navbar");
-      ContentAreaObserver.updateContentArea();
-    }
-  },
-
-  // Dismiss the tabstray if visible.
-  dismissTabs: function dimissTabs() {
-    this._clearDelayedTimeout();
-    this._setIsExpanded(false);
-  },
-
-  // Dismiss the appbar if visible.
-  dismissContextAppbar: function dismissContextAppbar() {
-    Elements.contextappbar.dismiss();
-  },
-
-  /*******************************************
-   * Internal utils
-   */
-
-  // tabtray state
-  _setIsExpanded: function _setIsExpanded(aFlag, setSilently) {
-    // if the tray can't be expanded, don't expand it.
-    if (!this.isExpandable || this.tabbarVisible == aFlag)
-      return;
-
-    if (aFlag)
-      Elements.tray.setAttribute("expanded", "true");
-    else
-      Elements.tray.removeAttribute("expanded");
-
-    if (!setSilently)
-      this._fire(kContextUITabsShowEvent);
-  },
-
-  _clearDelayedTimeout: function _clearDelayedTimeout() {
-    if (this._hidingId) {
-      clearTimeout(this._hidingId);
-      this._hidingId = 0;
-      this._delayedHide = false;
-    }
-  },
-
-  _resetDelayedTimeout: function () {
-    this._hidingId = setTimeout(function () {
-        ContextUI.dismissTabs();
-      }, this._lastTimeoutDelay);
-  },
-
-  /*******************************************
-   * Events
-   */
-
-  _onEdgeUIStarted: function(aEvent) {
-    this._hasEdgeSwipeStarted = true;
-    this._clearDelayedTimeout();
-    this.toggleNavUI();
-  },
-
-  _onEdgeUICanceled: function(aEvent) {
-    this._hasEdgeSwipeStarted = false;
-    this.dismiss();
-  },
-
-  _onEdgeUICompleted: function(aEvent) {
-    if (this._hasEdgeSwipeStarted) {
-      this._hasEdgeSwipeStarted = false;
-      return;
-    }
-
-    this._clearDelayedTimeout();
-    this.toggleNavUI();
-  },
-
-  onDownInput: function onDownInput(aEvent) {
-    if (!this.isVisible) {
-      return;
-    }
-
-    // Various ui element containers we do not update context ui for.
-    let whitelist = [
-      // Clicks on tab bar elements should not close the tab bar. the tabbar
-      // handles this.
-      Elements.tabs,
-      // Don't let a click on an infobar button dismiss the appbar or navbar.
-      // Note the notification box should always hover above these other two
-      // bars.
-      Browser.getNotificationBox()
-    ];
-
-    if (whitelist.some(elem => elem.contains(aEvent.target))) {
-      return;
-    }
-
-    // If a start tab is visible only dismiss the tab bar.
-    if (BrowserUI.isStartTabVisible) {
-      ContextUI.dismissTabs();
-      return;
-    }
-
-    // content, dismiss anything visible
-    if (aEvent.target.ownerDocument.defaultView.top == getBrowser().contentWindow) {
-      this.dismiss();
-      return;
-    }
-
-    // dismiss tabs and context app bar if visible
-    this.dismissTabs();
-    this.dismissContextAppbar();
-  },
-
-  onMouseMove: function (aEvent) {
-    if (this._hidingId) {
-      this._clearDelayedTimeout();
-      this._delayedHide = true;
-    }
-  },
-
-  onMouseLeave: function (aEvent) {
-    if (this._delayedHide) {
-      this._delayedHide = false;
-      this._resetDelayedTimeout();
-    }
-  },
-
-  handleEvent: function handleEvent(aEvent) {
-    switch (aEvent.type) {
-      case "URLChanged":
-        // "aEvent.detail" is a boolean value that indicates whether actual URL
-        // has changed ignoring URL fragment changes.
-        if (aEvent.target == Browser.selectedBrowser && aEvent.detail) {
-          this.displayNavbar();
-        }
-        break;
-      case "MozEdgeUIStarted":
-        this._onEdgeUIStarted(aEvent);
-        break;
-      case "MozEdgeUICanceled":
-        this._onEdgeUICanceled(aEvent);
-        break;
-      case "MozEdgeUICompleted":
-        this._onEdgeUICompleted(aEvent);
-        break;
-      case "keypress":
-        if (String.fromCharCode(aEvent.which) == "z" &&
-            aEvent.getModifierState("Win"))
-          this.toggleNavUI();
-        break;
-      case "transitionend":
-        setTimeout(function () {
-          ContentAreaObserver.updateContentArea();
-        }, 0);
-        break;
-      case "KeyboardChanged":
-        this.dismissTabs();
-        break;
-      case "mousedown":
-        if (aEvent.button != 0) {
-          break;
-        }
-        this.onDownInput(aEvent);
-        break;
-      case "mousemove":
-        this.onMouseMove(aEvent);
-        break;
-      case "mouseleave":
-        this.onMouseLeave(aEvent);
-        break;
-      case "touchstart":
-        this.onDownInput(aEvent);
-        break;
-      case "ToolPanelShown":
-      case "ToolPanelHidden":
-        this.dismiss();
-        break;
-      case "AlertActive":
-      case "AlertClose":
-      case "TabSelect":
-        ContentAreaObserver.updateContentArea();
-        break;
-      case "MozFlyoutPanelShowing":
-        if (BrowserUI.isStartTabVisible) {
-          this.dismissTabs();
-          this.dismissContextAppbar();
-        } else {
-          this.dismiss();
-        }
-        break;
-    }
-  },
-
-  _fire: function (name) {
-    let event = document.createEvent("Events");
-    event.initEvent(name, true, true);
-    window.dispatchEvent(event);
-  }
-};
deleted file mode 100644
--- a/browser/metro/base/content/NavButtonSlider.js
+++ /dev/null
@@ -1,217 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
- * Handles nav overlay button positioning.
- */
-
-// minimum amount of movement using the mouse after which we cancel the button click handlers
-const kOnClickMargin = 3;
-
-const kNavButtonPref = "browser.display.overlaynavbuttons";
-
-var NavButtonSlider = {
-  _back: document.getElementById("overlay-back"),
-  _plus: document.getElementById("overlay-plus"),
-  _mouseMoveStarted: false,
-  _mouseDown: false,
-  _yPos: -1,
-
-  get back() {
-    return this._back;
-  },
-
-  get plus() {
-    return this._plus;
-  },
-
-  /*
-   * custom dragger, see input.js
-   */
-
-  freeDrag: function freeDrag() {
-    return true;
-  },
-
-  isDraggable: function isDraggable(aTarget, aContent) {
-    return { x: false, y: true };
-  },
-
-  dragStart: function dragStart(aX, aY, aTarget, aScroller) {
-    return true;
-  },
-
-  dragStop: function dragStop(aDx, aDy, aScroller) {
-    return true;
-  },
-
-  dragMove: function dragMove(aDx, aDy, aScroller, aIsKenetic, aClientX, aClientY) {
-    // Note if aIsKenetic is true this is synthetic movement,
-    // we don't want that so return false.
-    if (aIsKenetic) {
-      return false;
-    }
-    
-    this._updatePosition(aClientY);
-
-    // return true if we moved, false otherwise. The result
-    // is used in deciding if we should repaint between drags.
-    return true;
-  },
-
-  /*
-   * logic
-   */
-
-  init: function init() {
-    // Touch drag support provided by input.js
-    this._back.customDragger = this;
-    this._plus.customDragger = this;
-    Elements.browsers.addEventListener("ContentSizeChanged", this, true);
-    let events = ["mousedown", "mouseup", "mousemove", "click", "touchstart", "touchmove", "touchend"];
-    events.forEach(function (value) {
-      this._back.addEventListener(value, this, true);
-      this._plus.addEventListener(value, this, true);
-    }, this);
-
-    this._updateStops();
-    this._updateVisibility();
-    Services.prefs.addObserver(kNavButtonPref, this, false);
-  },
-
-  observe: function (aSubject, aTopic, aData) {
-    if (aTopic == "nsPref:changed" && aData == kNavButtonPref) {
-      this._updateVisibility();
-    }
-  },
-
-  _updateVisibility: function () {
-    if (Services.prefs.getBoolPref(kNavButtonPref)) {
-      this._back.removeAttribute("hidden");
-      this._plus.removeAttribute("hidden");
-    } else {
-      this._back.setAttribute("hidden", true);
-      this._plus.setAttribute("hidden", true);
-    }
-  },
-
-  _updateStops: function () {
-    this._contentHeight = ContentAreaObserver.contentHeight;
-    this._imageHeight = 118;
-    this._topStop = this._imageHeight * .7;
-    this._bottomStop = this._contentHeight - (this._imageHeight * .7);
-
-    // Check to see if we need to move the slider into view
-    if (this._yPos != -1 &&
-        (this._topStop > this._yPos || this._bottomStop < this._yPos)) {
-      this._back.style.top = "50%";
-      this._plus.style.top = "50%";
-    }
-  },
-
-  _getPosition: function _getPosition() {
-    this._yPos = parseInt(getComputedStyle(this._back).top);
-  },
-
-  _setPosition: function _setPosition() {
-    this._back.style.top = this._yPos + "px";
-    this._plus.style.top = this._yPos + "px";
-  },
-
-  _updatePosition: function (aClientY) {
-    if (this._topStop > aClientY || this._bottomStop < aClientY)
-      return;
-    this._yPos = aClientY;
-    this._setPosition();
-  },
-
-  _updateOffset: function (aOffset) {
-    let newPos = this._yPos + aOffset;
-    if (this._topStop > newPos || this._bottomStop < newPos)
-      return;
-    this._yPos = newPos;
-    this._setPosition();
-  },
-
-  /*
-   * Events
-   */
-
-  handleEvent: function handleEvent(aEvent) {
-    switch (aEvent.type) {
-      case "ContentSizeChanged":
-        this._updateStops();
-        break;
-
-      case "touchstart":
-        if (aEvent.touches.length != 1)
-          break;
-        aEvent.preventDefault();
-        aEvent = aEvent.touches[0];
-      case "mousedown":
-        this._getPosition();
-        this._mouseDown = true;
-        this._mouseMoveStarted = false;
-        this._mouseY = aEvent.clientY;
-        if (aEvent.originalTarget)
-          aEvent.originalTarget.setCapture();
-        this._back.setAttribute("mousedrag", true);
-        this._plus.setAttribute("mousedrag", true);
-        break;
-
-      case "touchend":
-        if (aEvent.touches.length != 0)
-          break;
-        this._mouseDown = false;
-        this._back.removeAttribute("mousedrag");
-        this._plus.removeAttribute("mousedrag");
-        if (!this._mouseMoveStarted) {
-          if (aEvent.originalTarget == this._back) {
-            CommandUpdater.doCommand('cmd_back');
-          } else {
-            CommandUpdater.doCommand('cmd_newTab');
-          }
-        }
-        break;
-      case "mouseup":
-        this._mouseDown = false;
-        this._back.removeAttribute("mousedrag");
-        this._plus.removeAttribute("mousedrag");
-        break;
-
-      case "touchmove":
-        if (aEvent.touches.length != 1)
-          break;
-        aEvent = aEvent.touches[0];
-      case "mousemove":
-        // Check to be sure this is a drag operation
-        if (!this._mouseDown) {
-          return;
-        }
-        // Don't start a drag until we've passed a threshold
-        let dy = aEvent.clientY - this._mouseY;
-        if (!this._mouseMoveStarted && Math.abs(dy) < kOnClickMargin) {
-          return;
-        }
-        // Start dragging via the mouse
-        this._mouseMoveStarted = true;
-        this._mouseY = aEvent.clientY;
-        this._updateOffset(dy);
-        break;
-      case "click":
-        // Don't invoke the click action if we've moved the buttons via the mouse.
-        if (this._mouseMoveStarted) {
-          return;
-        }
-        if (aEvent.originalTarget == this._back) {
-           CommandUpdater.doCommand('cmd_back');
-        } else {
-           CommandUpdater.doCommand('cmd_newTab');
-        }
-        break;
-    }
-  },
-};
-
-
deleted file mode 100644
--- a/browser/metro/base/content/Site.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-'use strict';
-
-/**
- * dumb model class to provide default values for sites.
- * link parameter/model object expected to have a .url property, and optionally .title
- */
-function Site(aLink) {
-  if (!aLink.url) {
-    throw Cr.NS_ERROR_INVALID_ARG;
-  }
-  this._link = aLink;
-}
-
-Site.prototype = {
-  icon: '',
-  get url() {
-    return this._link.url;
-  },
-  get title() {
-    // use url if no title was recorded
-    return this._link.title || this._link.url;
-  },
-  get label() {
-    // alias for .title
-    return this.title;
-  },
-  get pinned() {
-    return NewTabUtils.pinnedLinks.isPinned(this);
-  },
-  get contextActions() {
-    return [
-      'delete', // delete means hide here
-      this.pinned ? 'unpin' : 'pin'
-    ];
-  },
-  get blocked() {
-    return NewTabUtils.blockedLinks.isBlocked(this);
-  },
-  get attributeValues() {
-    return {
-      value: this.url,
-      label: this.title,
-      pinned: this.pinned ? true : undefined,
-      selected: this.selected,
-      customColor: this.color,
-      customImage: this.backgroundImage,
-      iconURI: this.icon,
-      "data-contextactions": this.contextActions.join(',')
-    };
-  },
-  applyToTileNode: function(aNode) {
-    // apply this site's properties as attributes on a tile element
-    // the decorated node acts as a view-model for the tile binding
-    let attrs = this.attributeValues;
-    for (let key in attrs) {
-      if (undefined === attrs[key]) {
-        aNode.removeAttribute(key);
-      } else {
-        aNode.setAttribute(key, attrs[key]);
-      }
-    }
-    // is binding already applied?
-    if ('refresh' in aNode) {
-      // just update it
-      aNode.refresh();
-    } else {
-      // these attribute values will get picked up later when the binding is applied
-    }
-  }
-};
deleted file mode 100644
--- a/browser/metro/base/content/TopSites.js
+++ /dev/null
@@ -1,158 +0,0 @@
-// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-'use strict';
-
-/**
- * singleton to provide data-level functionality to the views
- */
-let TopSites = {
-  prepareCache: function(aForce){
-    // front to the NewTabUtils' links cache
-    //  -ensure NewTabUtils.links links are pre-cached
-
-    // avoid re-fetching links data while a fetch is in flight
-    if (this._promisedCache && !aForce) {
-      return this._promisedCache;
-    }
-    let deferred = Promise.defer();
-    this._promisedCache = deferred.promise;
-
-    NewTabUtils.links.populateCache(function () {
-      deferred.resolve();
-      this._promisedCache = null;
-      this._sites = null;  // reset our sites cache so they are built anew
-      this._sitesDirty.clear();
-    }.bind(this), true);
-    return this._promisedCache;
-  },
-
-  _sites: null,
-  _sitesDirty: new Set(),
-  getSites: function() {
-    if (this._sites) {
-      return this._sites;
-    }
-
-    let links = NewTabUtils.links.getLinks();
-    let sites = links.map(function(aLink){
-      let site = new Site(aLink);
-      return site;
-    });
-
-    // reset state
-    this._sites = sites;
-    this._sitesDirty.clear();
-    return this._sites;
-  },
-
-  /**
-   * Get list of top site as in need of update/re-render
-   * @param aSite Optionally add Site arguments to be refreshed/updated
-   */
-  dirty: function() {
-    // add any arguments for more fine-grained updates rather than invalidating the whole collection
-    for (let i=0; i<arguments.length; i++) {
-      this._sitesDirty.add(arguments[i]);
-    }
-    return this._sitesDirty;
-  },
-
-  /**
-   * Cause update of top sites
-   */
-  update: function() {
-    NewTabUtils.allPages.update();
-    // then clear all the dirty flags
-    this._sitesDirty.clear();
-  },
-
-  /**
-   * Pin top site at a given index
-   * @param aSites array of sites to be pinned
-   * @param aSlotIndices indices corresponding to the site to be pinned
-   */
-  pinSites: function(aSites, aSlotIndices) {
-    if (aSites.length !== aSlotIndices.length)
-        throw new Error("TopSites.pinSites: Mismatched sites/indices arguments");
-
-    for (let i=0; i<aSites.length && i<aSlotIndices.length; i++){
-      let site = aSites[i],
-          idx = aSlotIndices[i];
-      if (!(site && site.url)) {
-        throw Cr.NS_ERROR_INVALID_ARG
-      }
-      // pinned state is a pref, using Storage apis therefore sync
-      NewTabUtils.pinnedLinks.pin(site, idx);
-      this.dirty(site);
-    }
-    this.update();
-  },
-
-  /**
-   * Unpin top sites
-   * @param aSites array of sites to be unpinned
-   */
-  unpinSites: function(aSites) {
-    for (let site of aSites) {
-      if (!(site && site.url)) {
-        throw Cr.NS_ERROR_INVALID_ARG
-      }
-      // pinned state is a pref, using Storage apis therefore sync
-      NewTabUtils.pinnedLinks.unpin(site);
-      this.dirty(site);
-    }
-    this.update();
-  },
-
-  /**
-   * Hide (block) top sites
-   * @param aSites array of sites to be unpinned
-   */
-  hideSites: function(aSites) {
-    for (let site of aSites) {
-      if (!(site && site.url)) {
-        throw Cr.NS_ERROR_INVALID_ARG
-      }
-
-      site._restorePinIndex = NewTabUtils.pinnedLinks._indexOfLink(site);
-      // blocked state is a pref, using Storage apis therefore sync
-      NewTabUtils.blockedLinks.block(site);
-    }
-    // clear out the cache, we'll fetch and re-render
-    this._sites = null;
-    this._sitesDirty.clear();
-    this.update();
-  },
-
-  /**
-   * Un-hide (restore) top sites
-   * @param aSites array of sites to be restored
-   */
-  restoreSites: function(aSites) {
-    for (let site of aSites) {
-      if (!(site && site.url)) {
-        throw Cr.NS_ERROR_INVALID_ARG
-      }
-      NewTabUtils.blockedLinks.unblock(site);
-      let pinIndex = site._restorePinIndex;
-
-      if (!isNaN(pinIndex) && pinIndex > -1) {
-        NewTabUtils.pinnedLinks.pin(site, pinIndex);
-      }
-    }
-    // clear out the cache, we'll fetch and re-render
-    this._sites = null;
-    this._sitesDirty.clear();
-    this.update();
-  },
-
-  _linkFromNode: function _linkFromNode(aNode) {
-    return {
-      url: aNode.getAttribute("value"),
-      title: aNode.getAttribute("label")
-    };
-  }
-};
-
deleted file mode 100644
--- a/browser/metro/base/content/Util.js
+++ /dev/null
@@ -1,430 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-let Cc = Components.classes;
-let Ci = Components.interfaces;
-
-Components.utils.import("resource:///modules/ContentUtil.jsm");
-
-let Util = {
-  /*
-   * General purpose utilities
-   */
-
-  getWindowUtils: function getWindowUtils(aWindow) {
-    return aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
-  },
-
-  // Put the Mozilla networking code into a state that will kick the
-  // auto-connection process.
-  forceOnline: function forceOnline() {
-    Services.io.offline = false;
-  },
-
-  /*
-   * Timing utilties
-   */
-
-  // Executes aFunc after other events have been processed.
-  executeSoon: function executeSoon(aFunc) {
-    Services.tm.mainThread.dispatch({
-      run: function() {
-        aFunc();
-      }
-    }, Ci.nsIThread.DISPATCH_NORMAL);
-  },
-
-  /*
-   * Console printing utilities
-   */
-
-  // Like dump, but each arg is handled and there's an automatic newline
-  dumpLn: function dumpLn() {
-    for (let i = 0; i < arguments.length; i++)
-      dump(arguments[i] + " ");
-    dump("\n");
-  },
-
-  /*
-   * Element utilities
-   */
-
-  transitionElementVisibility: function(aNodes, aVisible) {
-    // accept single node or a collection of nodes
-    aNodes = aNodes.length ? aNodes : [aNodes];
-    let defd = Promise.defer();
-    let pending = 0;
-    Array.forEach(aNodes, function(aNode) {
-      if (aVisible) {
-        aNode.hidden = false;
-        aNode.removeAttribute("fade"); // trigger transition to full opacity
-      } else {
-        aNode.setAttribute("fade", true); // trigger transition to 0 opacity
-      }
-      aNode.addEventListener("transitionend", function onTransitionEnd(aEvent){
-        aNode.removeEventListener("transitionend", onTransitionEnd);
-        if (!aVisible) {
-          aNode.hidden = true;
-        }
-        pending--;
-        if (!pending){
-          defd.resolve(true);
-        }
-      }, false);
-      pending++;
-    });
-    return defd.promise;
-  },
-
-  isTextInput: function isTextInput(aElement) {
-    return ((aElement instanceof Ci.nsIDOMHTMLInputElement &&
-             aElement.mozIsTextField(false)) ||
-            aElement instanceof Ci.nsIDOMHTMLTextAreaElement);
-  },
-
-  /**
-   * Checks whether aElement's content can be edited either if it(or any of its
-   * parents) has "contenteditable" attribute set to "true" or aElement's
-   * ownerDocument is in design mode.
-   */
-  isEditableContent: function isEditableContent(aElement) {
-    return !!aElement && (aElement.isContentEditable ||
-                          this.isOwnerDocumentInDesignMode(aElement));
-
-  },
-
-  isEditable: function isEditable(aElement) {
-    if (!aElement) {
-      return false;
-    }
-
-    if (this.isTextInput(aElement) || this.isEditableContent(aElement)) {
-      return true;
-    }
-
-    // If a body element is editable and the body is the child of an
-    // iframe or div we can assume this is an advanced HTML editor
-    if ((aElement instanceof Ci.nsIDOMHTMLIFrameElement ||
-         aElement instanceof Ci.nsIDOMHTMLDivElement) &&
-        aElement.contentDocument &&
-        this.isEditableContent(aElement.contentDocument.body)) {
-      return true;
-    }
-
-    return false;
-  },
-
-  /**
-   * Checks whether aElement's owner document has design mode turned on.
-   */
-  isOwnerDocumentInDesignMode: function(aElement) {
-    return !!aElement && !!aElement.ownerDocument &&
-           aElement.ownerDocument.designMode == "on";
-  },
-
-  isMultilineInput: function isMultilineInput(aElement) {
-    return (aElement instanceof Ci.nsIDOMHTMLTextAreaElement);
-  },
-
-  isLink: function isLink(aElement) {
-    return ((aElement instanceof Ci.nsIDOMHTMLAnchorElement && aElement.href) ||
-            (aElement instanceof Ci.nsIDOMHTMLAreaElement && aElement.href) ||
-            aElement instanceof Ci.nsIDOMHTMLLinkElement ||
-            aElement.getAttributeNS(kXLinkNamespace, "type") == "simple");
-  },
-
-  isText: function isText(aElement) {
-    return (aElement instanceof Ci.nsIDOMHTMLParagraphElement ||
-            aElement instanceof Ci.nsIDOMHTMLDivElement ||
-            aElement instanceof Ci.nsIDOMHTMLLIElement ||
-            aElement instanceof Ci.nsIDOMHTMLPreElement ||
-            aElement instanceof Ci.nsIDOMHTMLHeadingElement ||
-            aElement instanceof Ci.nsIDOMHTMLTableCellElement ||
-            aElement instanceof Ci.nsIDOMHTMLBodyElement);
-  },
-
-  /*
-   * Rect and nsIDOMRect utilities
-   */
-
-  getCleanRect: function getCleanRect() {
-    return {
-      left: 0, top: 0, right: 0, bottom: 0
-    };
-  },
-
-  pointWithinRect: function pointWithinRect(aX, aY, aRect) {
-    return (aRect.left < aX && aRect.top < aY &&
-            aRect.right > aX && aRect.bottom > aY);
-  },
-
-  pointWithinDOMRect: function pointWithinDOMRect(aX, aY, aRect) {
-    if (!aRect.width || !aRect.height)
-      return false;
-    return this.pointWithinRect(aX, aY, aRect);
-  },
-
-  isEmptyDOMRect: function isEmptyDOMRect(aRect) {
-    if ((aRect.bottom - aRect.top) <= 0 &&
-        (aRect.right - aRect.left) <= 0)
-      return true;
-    return false;
-  },
-
-  // Dumps the details of a dom rect to the console
-  dumpDOMRect: function dumpDOMRect(aMsg, aRect) {
-    try {
-      Util.dumpLn(aMsg,
-                  "left:" + Math.round(aRect.left) + ",",
-                  "top:" + Math.round(aRect.top) + ",",
-                  "right:" + Math.round(aRect.right) + ",",
-                  "bottom:" + Math.round(aRect.bottom) + ",",
-                  "width:" + Math.round(aRect.right - aRect.left) + ",",
-                  "height:" + Math.round(aRect.bottom - aRect.top) );
-    } catch (ex) {
-      Util.dumpLn("dumpDOMRect:", ex.message);
-    }
-  },
-
-  /*
-   * DownloadUtils.convertByteUnits returns [size, localized-unit-string]
-   * so they are joined for a single download size string.
-   */
-  getDownloadSize: function dv__getDownloadSize (aSize) {
-    let [size, units] = DownloadUtils.convertByteUnits(aSize);
-    if (aSize > 0)
-      return size + units;
-    else
-      return Strings.browser.GetStringFromName("downloadsUnknownSize");
-  },
-
-  /*
-   * URIs and schemes
-   */
-
-  makeURI: function makeURI(aURL, aOriginCharset, aBaseURI) {
-    return Services.io.newURI(aURL, aOriginCharset, aBaseURI);
-  },
-
-  makeURLAbsolute: function makeURLAbsolute(base, url) {
-    // Note:  makeURI() will throw if url is not a valid URI
-    return this.makeURI(url, null, this.makeURI(base)).spec;
-  },
-
-  isLocalScheme: function isLocalScheme(aURL) {
-    return ((aURL.indexOf("about:") == 0 &&
-             aURL != "about:blank" &&
-             aURL != "about:empty" &&
-             aURL != "about:start") ||
-            aURL.indexOf("chrome:") == 0);
-  },
-
-  // Don't display anything in the urlbar for these special URIs.
-  isURLEmpty: function isURLEmpty(aURL) {
-    return (!aURL ||
-            aURL == "about:blank" ||
-            aURL == "about:empty" ||
-            aURL == "about:home" ||
-            aURL == "about:newtab" ||
-            aURL.startsWith("about:newtab"));
-  },
-
-  // Title to use for emptyURL tabs.
-  getEmptyURLTabTitle: function getEmptyURLTabTitle() {
-    let browserStrings = Services.strings.createBundle("chrome://browser/locale/browser.properties");
-
-    return browserStrings.GetStringFromName("tabs.emptyTabTitle");
-  },
-
-  // Don't remember these pages in the session store.
-  isURLMemorable: function isURLMemorable(aURL) {
-    return !(aURL == "about:blank" ||
-             aURL == "about:empty" ||
-             aURL == "about:start");
-  },
-
-  /*
-   * Math utilities
-   */
-
-  clamp: function(num, min, max) {
-    return Math.max(min, Math.min(max, num));
-  },
-
-  /*
-   * Screen and layout utilities
-   */
-
-   /*
-    * translateToTopLevelWindow - Given an element potentially within
-    * a subframe, calculate the offsets up to the top level browser.
-    */
-  translateToTopLevelWindow: function translateToTopLevelWindow(aElement) {
-    let offsetX = 0;
-    let offsetY = 0;
-    let element = aElement;
-    while (element &&
-           element.ownerDocument &&
-           element.ownerDocument.defaultView != content) {
-      element = element.ownerDocument.defaultView.frameElement;
-      let rect = element.getBoundingClientRect();
-      offsetX += rect.left;
-      offsetY += rect.top;
-    }
-    let win = null;
-    if (element == aElement)
-      win = content;
-    else
-      win = element.contentDocument.defaultView;
-    return { targetWindow: win, offsetX: offsetX, offsetY: offsetY };
-  },
-
-  get displayDPI() {
-    delete this.displayDPI;
-    return this.displayDPI = this.getWindowUtils(window).displayDPI;
-  },
-
-  /*
-   * aViewHeight - the height of the viewable area in the browser
-   * aRect - a bounding rectangle of a selection or element.
-   *
-   * return - number of pixels for the browser to be shifted up by such
-   * that aRect is centered vertically within aViewHeight.
-   */
-  centerElementInView: function centerElementInView(aViewHeight, aRect) {
-    // If the bottom of the target bounds is higher than the new height,
-    // there's no need to adjust. It will be above the keyboard.
-    if (aRect.bottom <= aViewHeight) {
-      return 0;
-    }
-
-    // height of the target element
-    let targetHeight = aRect.bottom - aRect.top;
-    // height of the browser view.
-    let viewBottom = content.innerHeight;
-
-    // If the target is shorter than the new content height, we can go ahead
-    // and center it.
-    if (targetHeight <= aViewHeight) {
-      // Try to center the element vertically in the new content area, but
-      // don't position such that the bottom of the browser view moves above
-      // the top of the chrome. We purposely do not resize the browser window
-      // by making it taller when trying to center elements that are near the
-      // lower bounds. This would trigger reflow which can cause content to
-      // shift around.
-      let splitMargin = Math.round((aViewHeight - targetHeight) * .5);
-      let distanceToPageBounds = viewBottom - aRect.bottom;
-      let distanceFromChromeTop = aRect.bottom - aViewHeight;
-      let distanceToCenter =
-        distanceFromChromeTop + Math.min(distanceToPageBounds, splitMargin);
-      return distanceToCenter;
-    }
-  },
-
-  /*
-   * Local system utilities
-   */
-
-  copyImageToClipboard: function Util_copyImageToClipboard(aImageLoadingContent) {
-    let image = aImageLoadingContent.QueryInterface(Ci.nsIImageLoadingContent);
-    if (!image) {
-      Util.dumpLn("copyImageToClipboard error: image is not an nsIImageLoadingContent");
-      return;
-    }
-    try {
-      let xferable = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable);
-      xferable.init(null);
-      let imgRequest = aImageLoadingContent.getRequest(Ci.nsIImageLoadingContent.CURRENT_REQUEST);
-      let mimeType = imgRequest.mimeType;
-      let imgContainer = imgRequest.image;
-      let imgPtr = Cc["@mozilla.org/supports-interface-pointer;1"].createInstance(Ci.nsISupportsInterfacePointer);
-      imgPtr.data = imgContainer;
-      xferable.setTransferData(mimeType, imgPtr, null);
-      let clip = Cc["@mozilla.org/widget/clipboard;1"].getService(Ci.nsIClipboard);
-      clip.setData(xferable, null, Ci.nsIClipboard.kGlobalClipboard);
-    } catch (e) {
-      Util.dumpLn(e.message);
-    }
-  },
-};
-
-
-/*
- * Timeout
- *
- * Helper class to nsITimer that adds a little more pizazz.  Callback can be an
- * object with a notify method or a function.
- */
-Util.Timeout = function(aCallback) {
-  this._callback = aCallback;
-  this._timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
-  this._type = null;
-};
-
-Util.Timeout.prototype = {
-  // Timer callback. Don't call this manually.
-  notify: function notify() {
-    if (this._type == this._timer.TYPE_ONE_SHOT)
-      this._type = null;
-
-    if (this._callback.notify)
-      this._callback.notify();
-    else
-      this._callback.apply(null);
-  },
-
-  // Helper function for once and interval.
-  _start: function _start(aDelay, aType, aCallback) {
-    if (aCallback)
-      this._callback = aCallback;
-    this.clear();
-    this._timer.initWithCallback(this, aDelay, aType);
-    this._type = aType;
-    return this;
-  },
-
-  // Do the callback once.  Cancels other timeouts on this object.
-  once: function once(aDelay, aCallback) {
-    return this._start(aDelay, this._timer.TYPE_ONE_SHOT, aCallback);
-  },
-
-  // Do the callback every aDelay msecs. Cancels other timeouts on this object.
-  interval: function interval(aDelay, aCallback) {
-    return this._start(aDelay, this._timer.TYPE_REPEATING_SLACK, aCallback);
-  },
-
-  // Clear any pending timeouts.
-  clear: function clear() {
-    if (this.isPending()) {
-      this._timer.cancel();
-      this._type = null;
-    }
-    return this;
-  },
-
-  // If there is a pending timeout, call it and cancel the timeout.
-  flush: function flush() {
-    if (this.isPending()) {
-      this.notify();
-      this.clear();
-    }
-    return this;
-  },
-
-  // Return true if we are waiting for a callback.
-  isPending: function isPending() {
-    return this._type !== null;
-  }
-};
-
-// Mixin the ContentUtil module exports
-{
-  for (let name in ContentUtil) {
-    let copy = ContentUtil[name];
-    if (copy !== undefined)
-      Util[name] = copy;
-  }
-}
-
-this.Util = Util;
deleted file mode 100644
--- a/browser/metro/base/content/WebProgress.js
+++ /dev/null
@@ -1,244 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// Progress heartbeat timer duration (ms)
-const kHeartbeatDuration = 1000;
-// Start and end progress screen css margins as percentages
-const kProgressMarginStart = 30;
-const kProgressMarginEnd = 70;
-
-const WebProgress = {
-  get _identityBox() { return document.getElementById("identity-box"); },
-
-  init: function init() {
-    messageManager.addMessageListener("Content:StateChange", this);
-    messageManager.addMessageListener("Content:LocationChange", this);
-    messageManager.addMessageListener("Content:SecurityChange", this);
-
-    Elements.progress.addEventListener("transitionend", this, true);
-    Elements.tabList.addEventListener("TabSelect", this, true);
-
-    let urlBar = document.getElementById("urlbar-edit");
-    urlBar.addEventListener("input", this, false);
-
-    return this;
-  },
-
-  receiveMessage: function receiveMessage(aMessage) {
-    let json = aMessage.json;
-    let tab = Browser.getTabForBrowser(aMessage.target);
-
-    switch (aMessage.name) {
-      case "Content:StateChange": {
-        if (json.stateFlags & Ci.nsIWebProgressListener.STATE_IS_WINDOW) {
-          if (json.stateFlags & Ci.nsIWebProgressListener.STATE_START)
-            this._windowStart(json, tab);
-          else if (json.stateFlags & Ci.nsIWebProgressListener.STATE_STOP)
-            this._windowStop(json, tab);
-        }
-
-        if (json.stateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) {
-          if (json.stateFlags & Ci.nsIWebProgressListener.STATE_START)
-            this._networkStart(json, tab);
-          else if (json.stateFlags & Ci.nsIWebProgressListener.STATE_STOP)
-            this._networkStop(json, tab);
-        }
-
-        this._progressStep(tab);
-        break;
-      }
-
-      case "Content:LocationChange": {
-        this._locationChange(json, tab);
-        this._progressStep(tab);
-        break;
-      }
-
-      case "Content:SecurityChange": {
-        this._securityChange(json, tab);
-        this._progressStep(tab);
-        break;
-      }
-    }
-  },
-
-  handleEvent: function handleEvent(aEvent) {
-    switch (aEvent.type) {
-      case "transitionend":
-        this._progressTransEnd(aEvent);
-        break;
-      case "TabSelect":
-        this._onTabSelect(aEvent);
-        break;
-      case "input":
-        this._onUrlBarInput(aEvent);
-        break;
-    }
-  },
-
-  _securityChange: function _securityChange(aJson, aTab) {
-    let state = aJson.state;
-    let nsIWebProgressListener = Ci.nsIWebProgressListener;
-
-    if (state & nsIWebProgressListener.STATE_IDENTITY_EV_TOPLEVEL) {
-      aTab._identityState = "verifiedIdentity";
-    } else if (state & nsIWebProgressListener.STATE_IS_SECURE) {
-      aTab._identityState = "verifiedDomain";
-    } else {
-      aTab._identityState = "";
-    }
-
-    if (aTab == Browser.selectedTab) {
-      this._identityBox.className = aTab._identityState;
-    }
-  },
-
-  _locationChange: function _locationChange(aJson, aTab) {
-    let spec = aJson.location;
-    let location = spec.split("#")[0]; // Ignore fragment identifier changes.
-
-    if (aTab == Browser.selectedTab) {
-      BrowserUI.updateURI();
-      BrowserUI.update();
-      BrowserUI.updateStartURIAttributes(aJson.location);
-    }
-
-    let locationHasChanged = (location != aTab.browser.lastLocation);
-    if (locationHasChanged) {
-      Browser.getNotificationBox(aTab.browser).removeTransientNotifications();
-      aTab.browser.lastLocation = location;
-      aTab.browser.userTypedValue = "";
-      aTab.browser.appIcon = { href: null, size:-1 };
-
-#ifdef MOZ_CRASHREPORTER
-      if (CrashReporter.enabled)
-        CrashReporter.annotateCrashReport("URL", spec);
-#endif
-    }
-
-    let event = document.createEvent("UIEvents");
-    event.initUIEvent("URLChanged", true, false, window, locationHasChanged);
-    aTab.browser.dispatchEvent(event);
-  },
-
-  _networkStart: function _networkStart(aJson, aTab) {
-    aTab.startLoading();
-
-    if (aTab == Browser.selectedTab) {
-      // NO_STARTUI_VISIBILITY since the current uri for the tab has not
-      // been updated yet. If we're coming off of the start page, this
-      // would briefly show StartUI until _locationChange is called.
-      BrowserUI.update(BrowserUI.NO_STARTUI_VISIBILITY);
-    }
-  },
-
-  _networkStop: function _networkStop(aJson, aTab) {
-    aTab.endLoading();
-
-    if (aTab == Browser.selectedTab) {
-      BrowserUI.update();
-    }
-  },
-
-  _windowStart: function _windowStart(aJson, aTab) {
-    this._progressStart(aJson, aTab);
-  },
-
-  _windowStop: function _windowStop(aJson, aTab) {
-    this._progressStop(aJson, aTab);
-  },
-
-  _progressStart: function _progressStart(aJson, aTab) {
-    // We will get multiple calls from _windowStart, so
-    // only process once.
-    if (aTab._progressActive)
-      return;
-
-    aTab._progressActive = true;
-
-    // 'Whoosh' in
-    aTab._progressCount = kProgressMarginStart;
-    this._showProgressBar(aTab);
-  },
-
-  _showProgressBar: function (aTab) {
-    // display the track
-    if (aTab == Browser.selectedTab) {
-      Elements.progressContainer.removeAttribute("collapsed");
-      Elements.progress.style.width = aTab._progressCount + "%";
-      Elements.progress.removeAttribute("fade");
-    }
-
-    // Create a pulse timer to keep things moving even if we don't
-    // collect any state changes.
-    setTimeout(function() {
-      WebProgress._progressStepTimer(aTab);
-    }, kHeartbeatDuration, this);
-  },
-
-  _stepProgressCount: function _stepProgressCount(aTab) {
-    // Step toward the end margin in smaller slices as we get closer
-    let left = kProgressMarginEnd - aTab._progressCount;
-    let step = left * .05;
-    aTab._progressCount += Math.ceil(step);
-
-    // Don't go past the 'whoosh out' margin.
-    if (aTab._progressCount > kProgressMarginEnd) {
-      aTab._progressCount = kProgressMarginEnd;
-    }
-  },
-
-  _progressStep: function _progressStep(aTab) {
-    if (!aTab._progressActive)
-      return;
-    this._stepProgressCount(aTab);
-    if (aTab == Browser.selectedTab) {
-      Elements.progress.style.width = aTab._progressCount + "%";
-    }
-  },
-
-  _progressStepTimer: function _progressStepTimer(aTab) {
-    if (!aTab._progressActive)
-      return;
-    this._progressStep(aTab);
-
-    setTimeout(function() {
-      WebProgress._progressStepTimer(aTab);
-    }, kHeartbeatDuration, this);
-  },
-
-  _progressStop: function _progressStop(aJson, aTab) {
-    aTab._progressActive = false;
-    // 'Whoosh out' and fade
-    if (aTab == Browser.selectedTab) {
-      Elements.progress.style.width = "100%";
-      Elements.progress.setAttribute("fade", true);
-    }
-  },
-
-  _progressTransEnd: function _progressTransEnd(aEvent) {
-    if (!Elements.progress.hasAttribute("fade"))
-      return;
-    // Close out fade finished, reset
-    if (aEvent.propertyName == "opacity") {
-      Elements.progress.style.width = "0px";
-      Elements.progressContainer.setAttribute("collapsed", true);
-    }
-  },
-
-  _onTabSelect: function(aEvent) {
-    let tab = Browser.getTabFromChrome(aEvent.originalTarget);
-    this._identityBox.className = tab._identityState || "";
-    if (tab._progressActive) {
-      this._showProgressBar(tab);
-    } else {
-      Elements.progress.setAttribute("fade", true);
-      Elements.progressContainer.setAttribute("collapsed", true);
-    }
-  },
-
-  _onUrlBarInput: function(aEvent) {
-    Browser.selectedTab._identityState = this._identityBox.className = "";
-  },
-};
deleted file mode 100644
--- a/browser/metro/base/content/appbar.js
+++ /dev/null
@@ -1,323 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-var Appbar = {
-  get starButton()    { return document.getElementById('star-button'); },
-  get pinButton()     { return document.getElementById('pin-button'); },
-  get menuButton()    { return document.getElementById('menu-button'); },
-
-  // track selected/active richgrid/tilegroup - the context for contextual action buttons
-  activeTileset: null,
-
-  init: function Appbar_init() {
-    // fired from appbar bindings
-    Elements.contextappbar.addEventListener('MozAppbarShowing', this, false);
-    Elements.contextappbar.addEventListener('MozAppbarDismissing', this, false);
-
-    // fired when a context sensitive item (bookmarks) changes state
-    window.addEventListener('MozContextActionsChange', this, false);
-
-    // browser events we need to update button state on
-    Elements.browsers.addEventListener('URLChanged', this, true);
-    Elements.tabList.addEventListener('TabSelect', this, true);
-
-    // tilegroup selection events for all modules get bubbled up
-    window.addEventListener("selectionchange", this, false);
-    Services.obs.addObserver(this, "metro_on_async_tile_created", false);
-
-    // gather appbar telemetry data
-    try {
-      UITelemetry.addSimpleMeasureFunction("metro-appbar",
-                                           this.getAppbarMeasures.bind(this));
-    } catch (ex) {
-      // swallow exception that occurs if metro-appbar measure is already set up
-    }
-  },
-
-  observe: function(aSubject, aTopic, aData) {
-    switch (aTopic) {
-      case "metro_on_async_tile_created":
-        this._updatePinButton();
-        break;
-    }
-  },
-
-  handleEvent: function Appbar_handleEvent(aEvent) {
-    switch (aEvent.type) {
-      case 'URLChanged':
-      case 'TabSelect':
-        this.update();
-        this.flushActiveTileset(aEvent.lastTab);
-        break;
-
-      case 'MozAppbarShowing':
-        this.update();
-        break;
-
-      case 'MozAppbarDismissing':
-        if (this.activeTileset && ('isBound' in this.activeTileset)) {
-          this.activeTileset.clearSelection();
-        }
-        this._clearContextualActions();
-        this.activeTileset = null;
-        break;
-
-      case 'MozContextActionsChange':
-        let actions = aEvent.actions;
-        let setName = aEvent.target.contextSetName;
-        // could transition in old, new buttons?
-        this.showContextualActions(actions, setName);
-        break;
-
-      case "selectionchange":
-        let nodeName = aEvent.target.nodeName;
-        if ('richgrid' === nodeName) {
-          this._onTileSelectionChanged(aEvent);
-        }
-        break;
-    }
-  },
-
-  flushActiveTileset: function flushActiveTileset(aTab) {
-    try {
-      let tab = aTab || Browser.selectedTab;
-      // Switching away from or loading a site into a startui tab that has actions
-      // pending, we consider this confirmation that the user wants to flush changes.
-      if (this.activeTileset && tab && tab.browser && tab.browser.currentURI.spec == kStartURI) {
-        ContextUI.dismiss();
-      }
-    } catch (ex) {}
-  },
-
-  shutdown: function shutdown() {
-    this.flushActiveTileset();
-  },
-
-  /*
-   * Called from various places when the visible content
-   * has changed such that button states may need to be
-   * updated.
-   */
-  update: function update() {
-    this._updatePinButton();
-    this._updateStarButton();
-  },
-
-  onPinButton: function() {
-    if (this.pinButton.checked) {
-      Browser.pinSite();
-    } else {
-      Browser.unpinSite();
-    }
-  },
-
-  onStarButton: function(aValue) {
-    if (aValue === undefined) {
-      aValue = this.starButton.checked;
-    }
-
-    if (aValue) {
-      Browser.starSite(function () {
-        Appbar._updateStarButton();
-      });
-    } else {
-      Browser.unstarSite(function () {
-        Appbar._updateStarButton();
-      });
-    }
-  },
-
-  onMenuButton: function(aEvent) {
-      let typesArray = [];
-
-      if (BrowserUI.isPrivateBrowsingEnabled) {
-        typesArray.push("private-browsing");
-      }
-      if (!BrowserUI.isStartTabVisible) {
-        typesArray.push("find-in-page");
-        if (ContextCommands.getPageSource())
-          typesArray.push("view-page-source");
-      }
-      if (ContextCommands.getStoreLink())
-        typesArray.push("ms-meta-data");
-      if (ConsolePanelView.enabled)
-        typesArray.push("open-error-console");
-      if (!Services.metro.immersive)
-        typesArray.push("open-jsshell");
-
-      typesArray.push("view-on-desktop");
-
-      var x = this.menuButton.getBoundingClientRect().left;
-      var y = Elements.toolbar.getBoundingClientRect().top;
-      ContextMenuUI.showContextMenu({
-        json: {
-          types: typesArray,
-          string: '',
-          xPos: x,
-          yPos: y,
-          leftAligned: true,
-          bottomAligned: true
-      }
-
-      });
-  },
-
-  onViewOnDesktop: function() {
-    let appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"].
-      getService(Components.interfaces.nsIAppStartup);
-
-    Services.prefs.setBoolPref('browser.sessionstore.resume_session_once', true);
-    this._incrementCountableEvent("switch-to-desktop-button");
-    appStartup.quit(Components.interfaces.nsIAppStartup.eAttemptQuit |
-                    Components.interfaces.nsIAppStartup.eRestart);
-  },
-
-  onAutocompleteCloseButton: function () {
-    Elements.autocomplete.closePopup();
-  },
-
-  dispatchContextualAction: function(aActionName){
-    let activeTileset = this.activeTileset;
-    if (activeTileset && ('isBound' in this.activeTileset)) {
-      // fire event on the richgrid, others can listen
-      // but we keep coupling loose so grid doesn't need to know about appbar
-      let event = document.createEvent("Events");
-      event.action = aActionName;
-      event.initEvent("context-action", true, true); // is cancelable
-      activeTileset.dispatchEvent(event);
-      if (!event.defaultPrevented) {
-        activeTileset.clearSelection();
-        Elements.contextappbar.dismiss();
-      }
-    }
-  },
-
-  showContextualActions: function(aVerbs, aSetName) {
-    // When the appbar is not visible, we want the icons to refresh right away
-    let immediate = !Elements.contextappbar.isShowing;
-
-    if (aVerbs.length) {
-      Elements.contextappbar.show();
-    }
-
-    // Look up all of the buttons for the verbs that should be visible.
-    let idsToVisibleVerbs = new Map();
-    for (let verb of aVerbs) {
-      let id = verb + "-selected-button";
-      if (!document.getElementById(id)) {
-        throw new Error("Appbar.showContextualActions: no button for " + verb);
-      }
-      idsToVisibleVerbs.set(id, verb);
-    }
-
-    // Sort buttons into 2 buckets - needing showing and needing hiding.
-    let toHide = [], toShow = [];
-    let buttons = Elements.contextappbar.getElementsByTagName("toolbarbutton");
-    for (let button of buttons) {
-      let verb = idsToVisibleVerbs.get(button.id);
-      if (verb != undefined) {
-        // Button should be visible, and may or may not be showing.
-        this._updateContextualActionLabel(button, verb, aSetName);
-        if (button.hidden) {
-          toShow.push(button);
-        }
-      } else if (!button.hidden) {
-        // Button is visible, but shouldn't be.
-        toHide.push(button);
-      }
-    }
-
-    if (immediate) {
-      toShow.forEach(function(element) {
-        element.removeAttribute("fade");
-        element.hidden = false;
-      });
-      toHide.forEach(function(element) {
-        element.setAttribute("fade", true);
-        element.hidden = true;
-      });
-      return;
-    }
-
-    return Task.spawn(function() {
-      if (toHide.length) {
-        yield Util.transitionElementVisibility(toHide, false);
-      }
-      if (toShow.length) {
-        yield Util.transitionElementVisibility(toShow, true);
-      }
-    });
-  },
-
-  _clearContextualActions: function() {
-    this.showContextualActions([]);
-  },
-
-  _updateContextualActionLabel: function(aButton, aVerb, aSetName) {
-    // True if the action's label string contains the set name and
-    // thus has to be selected based on the list passed in.
-    let usesSetName = aButton.hasAttribute("label-uses-set-name");
-    let name = "contextAppbar2." + aVerb + (usesSetName ? "." + aSetName : "");
-    aButton.label = Strings.browser.GetStringFromName(name);
-  },
-
-  _onTileSelectionChanged: function _onTileSelectionChanged(aEvent){
-    let activeTileset = aEvent.target;
-
-    // deselect tiles in other tile groups,
-    // ensure previousyl-activeTileset is bound before calling methods on it
-    if (this.activeTileset &&
-          ('isBound' in this.activeTileset) &&
-          this.activeTileset !== activeTileset) {
-      this.activeTileset.clearSelection();
-    }
-    // keep track of which view is the target/scope for the contextual actions
-    this.activeTileset = activeTileset;
-
-    // ask the view for the list verbs/action-names it thinks are
-    // appropriate for the tiles selected
-    let contextActions = activeTileset.contextActions;
-    let verbs = [v for (v of contextActions)];
-
-    // fire event with these verbs as payload
-    let event = document.createEvent("Events");
-    event.actions = verbs;
-    event.initEvent("MozContextActionsChange", true, false);
-    activeTileset.dispatchEvent(event);
-
-    if (verbs.length) {
-      Elements.contextappbar.show(); // should be no-op if we're already showing
-    } else {
-      Elements.contextappbar.dismiss();
-    }
-  },
-
-  // track certain appbar events and interactions for the UITelemetry probe
-  _countableEvents: {},
-
-  _incrementCountableEvent: function(aName) {
-    if (!(aName in this._countableEvents)) {
-      this._countableEvents[aName] = 0;
-    }
-    this._countableEvents[aName]++;
-  },
-
-  getAppbarMeasures: function() {
-    return {
-      countableEvents: this._countableEvents
-    };
-  },
-
-  _updatePinButton: function() {
-    this.pinButton.checked = Browser.isSitePinned();
-  },
-
-  _updateStarButton: function() {
-    Browser.isSiteStarredAsync(function (isStarred) {
-      this.starButton.checked = isStarred;
-    }.bind(this));
-  },
-
-};
deleted file mode 100644
--- a/browser/metro/base/content/apzc.js
+++ /dev/null
@@ -1,153 +0,0 @@
-// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-let Cc = Components.classes;
-let Ci = Components.interfaces;
-let Cu = Components.utils;
-let Cr = Components.results;
-
-/**
- * Misc. front end utilities for apzc management.
- * the pref: layers.async-pan-zoom.enabled is true.
- */
-
-var APZCObserver = {
-  _debugEvents: false,
-  _enabled: false,
-
-  get enabled() {
-    return this._enabled;
-  },
-
-  init: function() {
-    this._enabled = Services.prefs.getBoolPref(kAsyncPanZoomEnabled);
-    if (!this._enabled) {
-      return;
-    }
-
-    let os = Services.obs;
-    os.addObserver(this, "apzc-transform-begin", false);
-
-    Elements.tabList.addEventListener("TabSelect", this, true);
-    Elements.browsers.addEventListener("pageshow", this, true);
-    messageManager.addMessageListener("Content:ZoomToRect", this);
-  },
-
-  shutdown: function shutdown() {
-    if (!this._enabled) {
-      return;
-    }
-
-    let os = Services.obs;
-    os.removeObserver(this, "apzc-transform-begin");
-
-    Elements.tabList.removeEventListener("TabSelect", this, true);
-    Elements.browsers.removeEventListener("pageshow", this, true);
-    messageManager.removeMessageListener("Content:ZoomToRect", this);
-  },
-
-  handleEvent: function APZC_handleEvent(aEvent) {
-    switch (aEvent.type) {
-      case 'TabSelect':
-        this._resetDisplayPort();
-        break;
-
-      case 'pageshow':
-        if (aEvent.target != Browser.selectedBrowser.contentDocument) {
-          break;
-        }
-        this._resetDisplayPort();
-        break;
-    }
-  },
-
-  observe: function ao_observe(aSubject, aTopic, aData) {
-    if (aTopic == "apzc-transform-begin") {
-      // When we're panning, hide the main scrollbars by setting imprecise
-      // input (which sets a property on the browser which hides the scrollbar
-      // via CSS).  This reduces jittering from left to right. We may be able
-      // to get rid of this once we implement axis locking in /gfx APZC.
-      if (InputSourceHelper.isPrecise) {
-        InputSourceHelper._imprecise();
-      }
-    }
-  },
-
-  receiveMessage: function(aMessage) {
-    let json = aMessage.json;
-    let browser = aMessage.target;
-    switch (aMessage.name) {
-      case "Content:ZoomToRect": {
-        let { presShellId, viewId } = json;
-        let rect = Rect.fromRect(json.rect);
-        if (this.isRectZoomedIn(rect, browser.contentViewportBounds)) {
-          // If we're already zoomed in, zoom out instead.
-          rect = new Rect(0,0,0,0);
-        }
-        let data = [rect.x, rect.y, rect.width, rect.height, presShellId, viewId].join(",");
-        Services.obs.notifyObservers(null, "apzc-zoom-to-rect", data);
-      }
-    }
-  },
-
-  /**
-   * Check to see if the area of the rect visible in the viewport is
-   * approximately the max area of the rect we can show.
-   * Based on code from BrowserElementPanning.js
-   */
-  isRectZoomedIn: function (aRect, aViewport) {
-    let overlap = aViewport.intersect(aRect);
-    let overlapArea = overlap.width * overlap.height;
-    let availHeight = Math.min(aRect.width * aViewport.height / aViewport.width, aRect.height);
-    let showing = overlapArea / (aRect.width * availHeight);
-    let ratioW = (aRect.width / aViewport.width);
-    let ratioH = (aRect.height / aViewport.height);
-
-    return (showing > 0.9 && (ratioW > 0.9 || ratioH > 0.9));
-  },
-
-  _resetDisplayPort: function () {
-    // Start off with something reasonable. The apzc will handle these
-    // calculations once scrolling starts.
-    let doc = Browser.selectedBrowser.contentDocument.documentElement;
-    // While running tests, sometimes this can be null. If we don't have a
-    // root document, there's no point in setting a scrollable display port.
-    if (!doc) {
-      return;
-    }
-    let win = Browser.selectedBrowser.contentWindow;
-    let factor = 0.2;
-    let portX = 0;
-    let portY = 0;
-    let portWidth = ContentAreaObserver.width;
-    let portHeight = ContentAreaObserver.height;
-
-    if (portWidth < doc.scrollWidth) {
-      portWidth += ContentAreaObserver.width * factor;
-      if (portWidth > doc.scrollWidth) {
-        portWidth = doc.scrollWidth;
-      }
-    }
-    if (portHeight < doc.scrollHeight) {
-      portHeight += ContentAreaObserver.height * factor;
-      if (portHeight > doc.scrollHeight) {
-        portHeight = doc.scrollHeight;
-      }
-    }
-    if (win.scrollX > 0) {
-      portX -= ContentAreaObserver.width * factor;
-    }
-    if (win.scrollY > 0) {
-      portY -= ContentAreaObserver.height * factor;
-    }
-    let cwu = Browser.selectedBrowser.contentWindow
-                      .QueryInterface(Ci.nsIInterfaceRequestor)
-                      .getInterface(Ci.nsIDOMWindowUtils);
-    cwu.setDisplayPortForElement(portX, portY,
-                                 portWidth, portHeight,
-                                 Browser.selectedBrowser.contentDocument.documentElement,
-                                 0);
-  }
-};
deleted file mode 100644
--- a/browser/metro/base/content/bindings.css
+++ /dev/null
@@ -1,215 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-browser[tabmodalPromptShowing] {
-  -moz-user-focus: none !important;
-}
-
-browser[remote="false"] {
-  -moz-binding: url("chrome://browser/content/bindings/browser.xml#local-browser");
-}
-
-browser[remote="true"] {
-  -moz-binding: url("chrome://browser/con