Merge m-c to oak
authorRobert Strong <robert.bugzilla@gmail.com>
Fri, 24 Apr 2015 13:04:36 -0700
changeset 491414 0da3000e148b4eacdd6a597e2f577a563b4ef6ef
parent 491413 e0a53ff0d29654da0d7e1b250cc73399c3561ceb (current diff)
parent 259470 f214df6ac75f0202e40733be62c5b169d7a40b7f (diff)
child 491415 840e1753e441521e905133ce3fe5fbcd26acaae5
push id47343
push userbmo:dothayer@mozilla.com
push dateWed, 01 Mar 2017 22:58:58 +0000
milestone40.0a1
Merge m-c to oak
CLOBBER
b2g/installer/package-manifest.in
browser/app/nsBrowserApp.cpp
browser/app/profile/firefox.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/installer/package-manifest.in
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/bluetooth/BluetoothCommon.h
dom/bluetooth/BluetoothRilListener.cpp
dom/ipc/tests/test_NewUnmonitoredThread.html
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
testing/mozbase/mozinstall/tests/Installer-Stubs/firefox.exe
testing/taskcluster/scripts/phone-builder/build-dolphin.sh
toolkit/components/telemetry/TelemetryFile.jsm
toolkit/crashreporter/nsExceptionHandler.cpp
toolkit/mozapps/update/common/updatehelper.cpp
toolkit/mozapps/update/common/updatehelper.h
toolkit/mozapps/update/tests/chrome/utils.js
toolkit/mozapps/update/tests/data/shared.js
toolkit/mozapps/update/tests/data/xpcshellUtilsAUS.js
toolkit/mozapps/update/updater/updater.cpp
toolkit/xre/nsAppRunner.cpp
toolkit/xre/nsUpdateDriver.cpp
toolkit/xre/nsXREDirProvider.cpp
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/b2g/chrome/content/shell.js
+++ b/b2g/chrome/content/shell.js
@@ -1084,16 +1084,26 @@ window.addEventListener('ContentStart', 
   let stats = volumeService.createOrGetVolumeByPath(path).getStats();
 
   // We must set the size in KB, and keep a bit of free space.
   let size = Math.floor(stats.totalBytes / 1024) - 1024;
   Services.prefs.setIntPref("browser.cache.disk.capacity", size);
 })();
 #endif
 
+#ifdef MOZ_WIDGET_GONK
+try {
+  let gmpService = Cc["@mozilla.org/gecko-media-plugin-service;1"]
+                     .getService(Ci.mozIGeckoMediaPluginChromeService);
+  gmpService.addPluginDirectory("/system/b2g/gmp-clearkey/0.1");
+} catch(e) {
+  dump("Failed to add clearkey path! " + e + "\n");
+}
+#endif
+
 // Calling this observer will cause a shutdown an a profile reset.
 // Use eg. : Services.obs.notifyObservers(null, 'b2g-reset-profile', null);
 Services.obs.addObserver(function resetProfile(subject, topic, data) {
   Services.obs.removeObserver(resetProfile, topic);
 
   // Listening for 'profile-before-change2' which is late in the shutdown
   // sequence, but still has xpcom access.
   Services.obs.addObserver(function clearProfile(subject, topic, data) {
--- a/b2g/config/dolphin/sources.xml
+++ b/b2g/config/dolphin/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="90f848a40efad820ab00fa52bec52dff37255b12"/>
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="173b3104bfcbd23fc9dccd4b0035fc49aae3d444">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="9a9797062c6001d6346504161c51187a2968466b"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="46e1877c0d88b085f7ebc5f432d5bb8f1e2d1f3b"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/emulator-jb/sources.xml
+++ b/b2g/config/emulator-jb/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="4efd19d199ae52656604f794c5a77518400220fd">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="90f848a40efad820ab00fa52bec52dff37255b12"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
--- a/b2g/config/emulator-kk/sources.xml
+++ b/b2g/config/emulator-kk/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="90f848a40efad820ab00fa52bec52dff37255b12"/>
--- a/b2g/config/emulator-l/sources.xml
+++ b/b2g/config/emulator-l/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="61e82f99bb8bc78d52b5717e9a2481ec7267fa33">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="90f848a40efad820ab00fa52bec52dff37255b12"/>
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="173b3104bfcbd23fc9dccd4b0035fc49aae3d444">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="9a9797062c6001d6346504161c51187a2968466b"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="46e1877c0d88b085f7ebc5f432d5bb8f1e2d1f3b"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/flame-kk/sources.xml
+++ b/b2g/config/flame-kk/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="90f848a40efad820ab00fa52bec52dff37255b12"/>
--- a/b2g/config/flame/sources.xml
+++ b/b2g/config/flame/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="4efd19d199ae52656604f794c5a77518400220fd">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="90f848a40efad820ab00fa52bec52dff37255b12"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="e95b4ce22c825da44d14299e1190ea39a5260bde"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="471afab478649078ad7c75ec6b252481a59e19b8"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
-        "git_revision": "0c5e2ee1173f3c53379ef3cd10de714836258fe8", 
+        "git_revision": "b4c949cdc780893897c9b45c1adea46e2eb694ff", 
         "remote": "https://git.mozilla.org/releases/gaia.git", 
         "branch": ""
     }, 
-    "revision": "910522407a1dd40c9302f2e342f8cf1d4828fc3b", 
+    "revision": "70ab08a2dadc6cf89a4d9579c3696517faf807b8", 
     "repo_path": "integration/gaia-central"
 }
--- a/b2g/config/nexus-4/sources.xml
+++ b/b2g/config/nexus-4/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="4efd19d199ae52656604f794c5a77518400220fd">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="90f848a40efad820ab00fa52bec52dff37255b12"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
--- a/b2g/config/nexus-5-l/sources.xml
+++ b/b2g/config/nexus-5-l/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="61e82f99bb8bc78d52b5717e9a2481ec7267fa33">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="0c5e2ee1173f3c53379ef3cd10de714836258fe8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="b4c949cdc780893897c9b45c1adea46e2eb694ff"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="d3868ff4bb3a4b81382795e2784258c210fe6cb8"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="90f848a40efad820ab00fa52bec52dff37255b12"/>
--- a/b2g/installer/package-manifest.in
+++ b/b2g/installer/package-manifest.in
@@ -154,16 +154,17 @@
 @BINPATH@/components/browser-feeds.xpt
 @BINPATH@/components/caps.xpt
 @BINPATH@/components/chardet.xpt
 @BINPATH@/components/chrome.xpt
 @BINPATH@/components/commandhandler.xpt
 @BINPATH@/components/commandlines.xpt
 @BINPATH@/components/composer.xpt
 @BINPATH@/components/content_events.xpt
+@BINPATH@/components/content_geckomediaplugins.xpt
 @BINPATH@/components/content_html.xpt
 @BINPATH@/components/content_xslt.xpt
 @BINPATH@/components/cookie.xpt
 @BINPATH@/components/devtools_security.xpt
 @BINPATH@/components/directory.xpt
 @BINPATH@/components/diskspacewatcher.xpt
 @BINPATH@/components/docshell.xpt
 @BINPATH@/components/dom.xpt
--- 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);
@@ -1831,16 +1821,20 @@ pref("browser.eme.ui.enabled", true);
 // -1 means no experiment is run and we use the preferred value for frecency (6h)
 pref("browser.cache.frecency_experiment", 0);
 
 pref("browser.translation.detectLanguage", false);
 pref("browser.translation.neverForLanguages", "");
 // Show the translation UI bits, like the info bar, notification icon and preferences.
 pref("browser.translation.ui.show", false);
 
+// Telemetry settings.
+// Determines if Telemetry pings can be archived locally.
+pref("toolkit.telemetry.archive.enabled", true);
+
 // Telemetry experiments settings.
 pref("experiments.enabled", true);
 pref("experiments.manifest.fetchIntervalSeconds", 86400);
 pref("experiments.manifest.uri", "https://telemetry-experiment.cdn.mozilla.net/manifest/v1/firefox/%VERSION%/%CHANNEL%");
 // Whether experiments are supported by the current application profile.
 pref("experiments.supported", true);
 
 // Enable GMP support in the addon manager.
--- a/browser/base/content/baseMenuOverlay.xul
+++ b/browser/base/content/baseMenuOverlay.xul
@@ -76,16 +76,18 @@
         <menuitem id="feedbackPage"
                   accesskey="&helpFeedbackPage.accesskey;"
                   label="&helpFeedbackPage.label;"
                   oncommand="openFeedbackPage()"
                   onclick="checkForMiddleClick(this, event);"/>
         <menuitem id="helpSafeMode"
                   accesskey="&helpSafeMode.accesskey;"
                   label="&helpSafeMode.label;"
+                  stopaccesskey="&helpSafeMode.stop.accesskey;"
+                  stoplabel="&helpSafeMode.stop.label;"
                   oncommand="safeModeRestart();"/>
         <menuseparator id="aboutSeparator"/>
         <menuitem id="aboutName"
                   accesskey="&aboutProduct2.accesskey;"
                   label="&aboutProduct2.label;"
                   oncommand="openAboutDialog();"/>
       </menupopup>
     </menu>
--- 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-syncui.js
+++ b/browser/base/content/browser-syncui.js
@@ -131,16 +131,18 @@ let gSyncUI = {
       firstSync = Services.prefs.getCharPref("services.sync.firstSync");
     } catch (e) { }
 
     return Weave.Status.checkSetup() == Weave.CLIENT_NOT_CONFIGURED ||
            firstSync == "notReady";
   },
 
   _loginFailed: function () {
+    this.log.debug("_loginFailed has sync state=${sync}, readinglist state=${rl}",
+                   { sync: Weave.Status.login, rl: ReadingListScheduler.state});
     return Weave.Status.login == Weave.LOGIN_FAILED_LOGIN_REJECTED ||
            ReadingListScheduler.state == ReadingListScheduler.STATE_ERROR_AUTHENTICATION;
   },
 
   updateUI: function SUI_updateUI() {
     let needsSetup = this._needsSetup();
     let loginFailed = this._loginFailed();
 
@@ -229,18 +231,24 @@ let gSyncUI = {
     // if login fails, any other notifications are essentially moot
     Weave.Notifications.removeAll();
 
     // if we haven't set up the client, don't show errors
     if (this._needsSetup()) {
       this.updateUI();
       return;
     }
-    // if we are still waiting for the identity manager to initialize, don't show errors
-    if (Weave.Status.login == Weave.LOGIN_FAILED_NOT_READY) {
+    // if we are still waiting for the identity manager to initialize, or it's
+    // a network/server error, don't show errors.  If it weren't for the legacy
+    // provider we could just check LOGIN_FAILED_LOGIN_REJECTED, but the legacy
+    // provider has states like LOGIN_FAILED_INVALID_PASSPHRASE which we
+    // probably do want to surface.
+    if (Weave.Status.login == Weave.LOGIN_FAILED_NOT_READY ||
+        Weave.Status.login == Weave.LOGIN_FAILED_NETWORK_ERROR ||
+        Weave.Status.login == Weave.LOGIN_FAILED_SERVER_ERROR) {
       this.updateUI();
       return;
     }
     this.showLoginError();
     this.updateUI();
   },
 
   showLoginError() {
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1275,16 +1275,22 @@ var gBrowserInit = {
     BookmarkingUI.init();
 
     gPrefService.addObserver(gHomeButton.prefDomain, gHomeButton, false);
 
     var homeButton = document.getElementById("home-button");
     gHomeButton.updateTooltip(homeButton);
     gHomeButton.updatePersonalToolbarStyle(homeButton);
 
+    let safeMode = document.getElementById("helpSafeMode");
+    if (Services.appinfo.inSafeMode) {
+      safeMode.label = safeMode.getAttribute("stoplabel");
+      safeMode.accesskey = safeMode.getAttribute("stopaccesskey");
+    }
+
     // BiDi UI
     gBidiUI = isBidiEnabled();
     if (gBidiUI) {
       document.getElementById("documentDirection-separator").hidden = false;
       document.getElementById("documentDirection-swap").hidden = false;
       document.getElementById("textfieldDirection-separator").hidden = false;
       document.getElementById("textfieldDirection-swap").hidden = false;
     }
@@ -1382,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);
 
@@ -1550,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();
@@ -2389,19 +2387,21 @@ function URLBarSetURI(aURI) {
   }
 
   gURLBar.value = value;
   gURLBar.valueIsTyped = !valid;
   SetPageProxyState(valid ? "valid" : "invalid");
 }
 
 function losslessDecodeURI(aURI) {
-  var value = aURI.spec;
   if (aURI.schemeIs("moz-action"))
     throw new Error("losslessDecodeURI should never get a moz-action URI");
+
+  var value = aURI.spec;
+
   // Try to decode as UTF-8 if there's no encoding sequence that we would break.
   if (!/%25(?:3B|2F|3F|3A|40|26|3D|2B|24|2C|23)/i.test(value))
     try {
       value = decodeURI(value)
                 // 1. decodeURI decodes %25 to %, which creates unintended
                 //    encoding sequences. Re-encode it, unless it's part of
                 //    a sequence that survived decodeURI, i.e. one for:
                 //    ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '#'
@@ -3024,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)) {
@@ -7526,16 +7476,28 @@ Object.defineProperty(this, "HUDService"
     return devtools.require("devtools/webconsole/hudservice");
   },
   configurable: true,
   enumerable: true
 });
 
 // Prompt user to restart the browser in safe mode
 function safeModeRestart() {
+  if (Services.appinfo.inSafeMode) {
+    let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].
+                     createInstance(Ci.nsISupportsPRBool);
+    Services.obs.notifyObservers(cancelQuit, "quit-application-requested", "restart");
+
+    if (cancelQuit.data)
+      return;
+
+    Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
+    return;
+  }
+
   Services.obs.notifyObservers(null, "restart-in-safe-mode", "");
 }
 
 /* duplicateTabIn duplicates tab in a place specified by the parameter |where|.
  *
  * |where| can be:
  *  "tab"         new tab
  *  "tabshifted"  same as "tab" but in background if default is to select new
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -272,31 +272,49 @@ let AboutNetErrorListener = {
 AboutNetErrorListener.init(this);
 
 // An event listener for custom "WebChannelMessageToChrome" events on pages
 addEventListener("WebChannelMessageToChrome", function (e) {
   // if target is window then we want the document principal, otherwise fallback to target itself.
   let principal = e.target.nodePrincipal ? e.target.nodePrincipal : e.target.document.nodePrincipal;
 
   if (e.detail) {
-    sendAsyncMessage("WebChannelMessageToChrome", e.detail, null, principal);
+    sendAsyncMessage("WebChannelMessageToChrome", e.detail, { eventTarget: e.target }, principal);
   } else  {
     Cu.reportError("WebChannel message failed. No message detail.");
   }
 }, true, true);
 
 // Add message listener for "WebChannelMessageToContent" messages from chrome scripts
 addMessageListener("WebChannelMessageToContent", function (e) {
   if (e.data) {
-    content.dispatchEvent(new content.CustomEvent("WebChannelMessageToContent", {
-      detail: Cu.cloneInto({
-        id: e.data.id,
-        message: e.data.message,
-      }, content),
-    }));
+    // e.objects.eventTarget will be defined if sending a response to
+    // a WebChannelMessageToChrome event. An unsolicited send
+    // may not have an eventTarget defined, in this case send to the
+    // main content window.
+    let eventTarget = e.objects.eventTarget || content;
+
+    // if eventTarget is window then we want the document principal,
+    // otherwise use target itself.
+    let targetPrincipal = eventTarget instanceof Ci.nsIDOMWindow ? eventTarget.document.nodePrincipal : eventTarget.nodePrincipal;
+
+    if (e.principal.subsumes(targetPrincipal)) {
+      // if eventTarget is a window, use it as the targetWindow, otherwise
+      // find the window that owns the eventTarget.
+      let targetWindow = eventTarget instanceof Ci.nsIDOMWindow ? eventTarget : eventTarget.ownerDocument.defaultView;
+
+      eventTarget.dispatchEvent(new targetWindow.CustomEvent("WebChannelMessageToContent", {
+        detail: Cu.cloneInto({
+          id: e.data.id,
+          message: e.data.message,
+        }, targetWindow),
+      }));
+    } else {
+      Cu.reportError("WebChannel message failed. Principal mismatch.");
+    }
   } else {
     Cu.reportError("WebChannel message failed. No message data.");
   }
 });
 
 
 let ClickEventHandler = {
   init: function init() {
--- a/browser/base/content/nsContextMenu.js
+++ b/browser/base/content/nsContextMenu.js
@@ -1339,22 +1339,24 @@ nsContextMenu.prototype = {
   // Backwards-compatibility wrapper
   saveImage : function() {
     if (this.onCanvas || this.onImage)
         this.saveMedia();
   },
 
   // Save URL of the clicked upon image, video, or audio.
   saveMedia: function() {
-    var doc =  this.target.ownerDocument;
+    let doc = this.ownerDoc;
     let referrerURI = gContextMenuContentData.documentURIObject;
     if (this.onCanvas) {
       // Bypass cache, since it's a data: URL.
-      saveImageURL(this.target.toDataURL(), "canvas.png", "SaveImageTitle",
-                   true, false, referrerURI, doc);
+      this._canvasToDataURL(this.target).then(function(dataURL) {
+        saveImageURL(dataURL, "canvas.png", "SaveImageTitle",
+                     true, false, referrerURI, doc);
+      }, Cu.reportError);
     }
     else if (this.onImage) {
       urlSecurityCheck(this.mediaURL, this.principal);
       saveImageURL(this.mediaURL, null, "SaveImageTitle", false,
                    false, referrerURI, doc, gContextMenuContentData.contentType,
                    gContextMenuContentData.contentDisposition);
     }
     else if (this.onVideo || this.onAudio) {
--- 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/base/content/test/general/browser_syncui.js
+++ b/browser/base/content/test/general/browser_syncui.js
@@ -103,16 +103,69 @@ add_task(function* testSyncLoginError() 
   Weave.Status.login = Weave.LOGIN_SUCCEEDED;
   let promiseNotificationRemoved = promiseObserver("weave:notification:removed");
   Services.obs.notifyObservers(null, "weave:service:login:start", null);
   Services.obs.notifyObservers(null, "weave:service:login:finish", null);
   yield promiseNotificationRemoved;
   Assert.equal(Notifications.notifications.length, 0, "no notifications left");
 });
 
+add_task(function* testSyncLoginNetworkError() {
+  Assert.equal(Notifications.notifications.length, 0, "start with no notifications");
+
+  // This test relies on the fact that observers are synchronous, and that error
+  // notifications synchronously create the error notification, which itself
+  // fires an observer notification.
+  // ie, we should see the error notification *during* the notifyObservers call.
+
+  // To prove that, we cause a notification that *does* show an error and make
+  // sure we see the error notification during that call. We then cause a
+  // notification that *should not* show an error, and the lack of the
+  // notification during the call implies the error was ignored.
+
+  // IOW, if this first part of the test fails in the future, it means the
+  // above is no longer true and we need a different strategy to check for
+  // ignored errors.
+
+  let sawNotificationAdded = false;
+  let obs = (subject, topic, data) => {
+    sawNotificationAdded = true;
+  }
+  Services.obs.addObserver(obs, "weave:notification:added", false);
+  try {
+    // notify of a display-able error - we should synchronously see our flag set.
+    Weave.Status.sync = Weave.LOGIN_FAILED;
+    Weave.Status.login = Weave.LOGIN_FAILED_LOGIN_REJECTED;
+    Services.obs.notifyObservers(null, "weave:ui:login:error", null);
+    Assert.ok(sawNotificationAdded);
+
+    // clear the notification.
+    let promiseNotificationRemoved = promiseObserver("weave:notification:removed");
+    Services.obs.notifyObservers(null, "readinglist:sync:start", null);
+    Services.obs.notifyObservers(null, "readinglist:sync:finish", null);
+    yield promiseNotificationRemoved;
+
+    // cool - so reset the flag and test what should *not* show an error.
+    sawNotificationAdded = false;
+    Weave.Status.sync = Weave.LOGIN_FAILED;
+    Weave.Status.login = Weave.LOGIN_FAILED_NETWORK_ERROR;
+    Services.obs.notifyObservers(null, "weave:ui:login:error", null);
+    Assert.ok(!sawNotificationAdded);
+
+    // ditto for LOGIN_FAILED_SERVER_ERROR
+    Weave.Status.sync = Weave.LOGIN_FAILED;
+    Weave.Status.login = Weave.LOGIN_FAILED_SERVER_ERROR;
+    Services.obs.notifyObservers(null, "weave:ui:login:error", null);
+    Assert.ok(!sawNotificationAdded);
+    // we are done.
+  } finally {
+    Services.obs.removeObserver(obs, "weave:notification:added");
+  }
+});
+
 add_task(function* testRLLoginError() {
   let promiseNotificationAdded = promiseObserver("weave:notification:added");
   Assert.equal(Notifications.notifications.length, 0, "start with no notifications");
 
   // Pretend RL is in an auth error state
   getInternalScheduler().state = ReadingListScheduler.STATE_ERROR_AUTHENTICATION;
   Services.obs.notifyObservers(null, "readinglist:sync:start", null);
   Services.obs.notifyObservers(null, "readinglist:sync:error", null);
--- 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/in-content/sync.js
+++ b/browser/components/preferences/in-content/sync.js
@@ -568,18 +568,22 @@ let gSyncPane = {
       .then(url => {
         this.openContentInBrowser(url, {
           replaceQueryString: true
         });
       });
   },
 
   manageFirefoxAccount: function() {
-    let url = Services.prefs.getCharPref("identity.fxaccounts.settings.uri");
-    this.openContentInBrowser(url);
+    fxAccounts.promiseAccountsManageURI()
+      .then(url => {
+        this.openContentInBrowser(url, {
+          replaceQueryString: true
+        });
+      });
   },
 
   verifyFirefoxAccount: function() {
     fxAccounts.resendVerificationEmail().then(() => {
       fxAccounts.getSignedInUser().then(data => {
         let sb = this._accountsStringBundle;
         let title = sb.GetStringFromName("verificationSentTitle");
         let heading = sb.formatStringFromName("verificationSentHeading",
--- 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/components/preferences/sync.js
+++ b/browser/components/preferences/sync.js
@@ -400,18 +400,22 @@ let gSyncPane = {
 
   reSignIn: function() {
     this.openContentInBrowser("about:accounts?action=reauth&entrypoint=preferences", {
       replaceQueryString: true
     });
   },
 
   manageFirefoxAccount: function() {
-    let url = Services.prefs.getCharPref("identity.fxaccounts.settings.uri");
-    this.openContentInBrowser(url);
+    fxAccounts.promiseAccountsManageURI()
+      .then(url => {
+        this.openContentInBrowser(url, {
+          replaceQueryString: true
+        });
+      });
   },
 
   verifyFirefoxAccount: function() {
     fxAccounts.resendVerificationEmail().then(() => {
       fxAccounts.getSignedInUser().then(data => {
         let sb = Services.strings.createBundle("chrome://browser/locale/accounts.properties");
         let title = sb.GetStringFromName("verificationSentTitle");
         let heading = sb.formatStringFromName("verificationSentHeading",
--- a/browser/components/uitour/test/browser.ini
+++ b/browser/components/uitour/test/browser.ini
@@ -1,15 +1,17 @@
 [DEFAULT]
 support-files =
   head.js
   image.png
   uitour.html
   ../UITour-lib.js
 
+[browser_backgroundTab.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
 [browser_no_tabs.js]
 [browser_UITour.js]
 skip-if = os == "linux" || e10s # Intermittent failures, bug 951965
 [browser_UITour2.js]
 skip-if = e10s # Bug 1073247 - UITour.jsm not e10s friendly
 # [browser_UITour3.js] Bug 1113038
 # skip-if = os == "linux" || e10s # Linux: Bug 986760, Bug 989101; e10s: Bug 1073247 - UITour.jsm not e10s friendly
 [browser_UITour_availableTargets.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/uitour/test/browser_backgroundTab.js
@@ -0,0 +1,49 @@
+"use strict";
+
+let gTestTab;
+let gContentAPI;
+let gContentWindow;
+
+Components.utils.import("resource:///modules/UITour.jsm");
+
+function test() {
+  requestLongerTimeout(2);
+  UITourTest();
+}
+
+let tests = [
+  function test_bg_getConfiguration(done) {
+    info("getConfiguration is on the allowed list so should work");
+    loadForegroundTab().then(() => {
+      gContentAPI.getConfiguration("availableTargets", (data) => {
+        ok(data, "Got data from getConfiguration");
+        gBrowser.removeCurrentTab();
+        done();
+      });
+    });
+  },
+  taskify(function* test_bg_showInfo() {
+    info("showInfo isn't on the allowed action list so should be denied");
+    yield loadForegroundTab();
+
+    yield showInfoPromise("appMenu", "Hello from the backgrund", "Surprise!").then(
+      () => ok(false, "panel shouldn't have shown from a background tab"),
+      () => ok(true, "panel wasn't shown from a background tab"));
+
+    gBrowser.removeCurrentTab();
+  }),
+];
+
+
+function loadForegroundTab() {
+  let newTab = gBrowser.addTab("about:blank", {skipAnimation: true});
+  gBrowser.selectedTab = newTab;
+
+  return new Promise((resolve) => {
+    newTab.linkedBrowser.addEventListener("load", function onLoad() {
+      newTab.linkedBrowser.removeEventListener("load", onLoad, true);
+      isnot(gBrowser.selectedTab, gTestTab, "Make sure tour tab isn't selected");
+      resolve();
+    }, true);
+  });
+}
--- a/browser/devtools/performance/modules/front.js
+++ b/browser/devtools/performance/modules/front.js
@@ -425,17 +425,17 @@ PerformanceActorsConnection.prototype = 
    * @param RecordingModel model
    *        The corresponding RecordingModel that belongs to the recording session wished to stop.
    * @return RecordingModel
    *         Returns the same model, populated with the profiling data.
    */
   stopRecording: Task.async(function*(model) {
     // If model isn't in the PerformanceActorsConnections internal store,
     // then do nothing.
-    if (!this._recordings.includes(model)) {
+    if (this._recordings.indexOf(model) === -1) {
       return;
     }
 
     // Currently there are two ways profiles stop recording. Either manually in the
     // performance tool, or via console.profileEnd. Once a recording is done,
     // we want to deliver the model to the performance tool (either as a return
     // from the PerformanceFront or via `console-profile-end` event) and then
     // remove it from the internal store.
--- a/browser/devtools/styleinspector/rule-view.js
+++ b/browser/devtools/styleinspector/rule-view.js
@@ -2890,17 +2890,17 @@ TextPropertyEditor.prototype = {
         class: "ruleview-propertyname theme-fg-color5",
         textContent: computed.name
       });
       appendText(li, ": ");
 
       let outputParser = this.ruleEditor.ruleView._outputParser;
       let frag = outputParser.parseCssProperty(
         computed.name, computed.value, {
-          colorSwatchClass: "ruleview-colorswatch",
+          colorSwatchClass: "ruleview-swatch ruleview-colorswatch",
           urlClass: "theme-link",
           baseURI: this.sheetURI
         }
       );
 
       createChild(li, "span", {
         class: "ruleview-propertyvalue theme-fg-color1",
         child: frag
--- a/browser/devtools/webide/content/prefs.xhtml
+++ b/browser/devtools/webide/content/prefs.xhtml
@@ -42,17 +42,17 @@
       </li>
       <li>
         <label title="&prefs_options_autoconnectruntime_tooltip;">
           <input type="checkbox" data-pref="devtools.webide.autoConnectRuntime"/>
           <span>&prefs_options_autoconnectruntime;</span>
         </label>
       </li>
       <li>
-        <label title="&prefs_options_templatesurl_tooltip;">
+        <label class="text-input" title="&prefs_options_templatesurl_tooltip;">
           <span>&prefs_options_templatesurl;</span>
           <input data-pref="devtools.webide.templatesURL"/>
         </label>
       </li>
     </ul>
 
     <h2>&prefs_editor_title;</h2>
 
--- a/browser/devtools/webide/themes/deck.css
+++ b/browser/devtools/webide/themes/deck.css
@@ -13,16 +13,25 @@ html {
 }
 
 body {
   margin: 0;
   padding: 20px;
   background-image: linear-gradient(#fff, #ededed 100px);
 }
 
+.text-input {
+  display: flex;
+}
+
+.text-input input {
+  flex: 0.5;
+  margin-left: 5px;
+}
+
 h1 {
   font-size: 2.5em;
   font-weight: lighter;
   line-height: 1.2;
   margin: 0;
   margin-bottom: .5em;
 }
 
--- 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/extensions/pdfjs/test/browser_pdfjs_navigation.js
+++ b/browser/extensions/pdfjs/test/browser_pdfjs_navigation.js
@@ -184,21 +184,21 @@ function runTests(document, window, fini
 
   // Wait for outline items, the start the navigation actions
   waitForOutlineItems(document).then(function () {
     // The key navigation has to happen in page-fit, otherwise it won't scroll
     // trough a complete page
     setZoomToPageFit(document).then(function () {
       runNextTest(document, window, finish);
     }, function () {
-      ok(false, "Current scale has been ste to 'page-fit'");
+      ok(false, "Current scale has been set to 'page-fit'");
       finish();
     });
   }, function () {
-    ok(false, "Outline items have ben found");
+    ok(false, "Outline items have been found");
     finish();
   });
 }
 
 /**
  * As the page changes asynchronously, we have to wait for the event after
  * we trigger the action so we will be at the expected page number after each action
  *
@@ -262,43 +262,44 @@ function runNextTest(document, window, e
  * Outline Items gets appended to the document latter on we have to
  * wait for them before we start to navigate though document
  *
  * @param document
  * @returns {deferred.promise|*}
  */
 function waitForOutlineItems(document) {
   var deferred = Promise.defer();
-  var timeout = setTimeout(() => deferred.reject(), 10000);
-  var interval = setInterval(function () {
-    if (document.querySelectorAll(".outlineItem").length == PDF_OUTLINE_ITEMS) {
-      clearInterval(interval);
-      clearTimeout(timeout);
+  document.addEventListener("outlineloaded", function outlineLoaded(evt) {
+    document.removeEventListener("outlineloaded", outlineLoaded);
+    var outlineCount = evt.detail.outlineCount;
+
+    if (document.querySelectorAll(".outlineItem").length === outlineCount) {
       deferred.resolve();
+    } else {
+      deferred.reject();
     }
-  }, 500);
+  });
 
   return deferred.promise;
 }
 
 /**
  * The key navigation has to happen in page-fit, otherwise it won't scroll
  * trough a complete page
  *
  * @param document
  * @returns {deferred.promise|*}
  */
 function setZoomToPageFit(document) {
   var deferred = Promise.defer();
   document.addEventListener("pagerendered", function onZoom(e) {
-    document.removeEventListener("pagerendered", onZoom), false;
+    document.removeEventListener("pagerendered", onZoom);
     document.querySelector("#viewer").click();
     deferred.resolve();
-
-  }, false);
+  });
 
   var select = document.querySelector("select#scaleSelect");
   select.selectedIndex = 2;
   select.dispatchEvent(new Event("change"));
 
   return deferred.promise;
 }
 
--- 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/baseMenuOverlay.dtd
+++ b/browser/locales/en-US/chrome/browser/baseMenuOverlay.dtd
@@ -20,16 +20,18 @@
 <!ENTITY productHelp2.accesskey   "H">
 <!ENTITY helpMac.commandkey       "?">
 
 <!ENTITY helpKeyboardShortcuts.label     "Keyboard Shortcuts">
 <!ENTITY helpKeyboardShortcuts.accesskey "K">
 
 <!ENTITY helpSafeMode.label       "Restart with Add-ons Disabled…">
 <!ENTITY helpSafeMode.accesskey   "R">
+<!ENTITY helpSafeMode.stop.label       "Restart with Add-ons Enabled">
+<!ENTITY helpSafeMode.stop.accesskey   "R">
 
 <!ENTITY healthReport2.label      "&brandShorterName; Health Report">
 <!ENTITY healthReport2.accesskey  "e">
 
 <!ENTITY helpTroubleshootingInfo.label      "Troubleshooting Information">
 <!ENTITY helpTroubleshootingInfo.accesskey  "T">
 
 <!ENTITY helpFeedbackPage.label      "Submit Feedback…">
--- 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);