Bug 1039866 - Rip out a bunch of metro-only code. r=jimm,gavin,rstrong
authorKartikaya Gupta <kgupta@mozilla.com>
Thu, 23 Apr 2015 15:10:30 -0400
changeset 272215 bf1d0c9242d9ac334c7f7521789840a7c711b418
parent 272214 f545b6dfa3da923617bd56e450321729be3be749
child 272216 38fa5894e45819540feadf2ac895a91b3a17be6f
push id863
push userraliiev@mozilla.com
push dateMon, 03 Aug 2015 13:22:43 +0000
treeherdermozilla-release@f6321b14228d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjimm, gavin, rstrong
bugs1039866
milestone40.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1039866 - Rip out a bunch of metro-only code. r=jimm,gavin,rstrong
CLOBBER
accessible/windows/msaa/AccessibleWrap.cpp
browser/app-rules.mk
browser/app/moz.build
browser/app/nsBrowserApp.cpp
browser/app/profile/firefox.js
browser/base/content/browser-menubar.inc
browser/base/content/browser.js
browser/base/content/sync/setup.js
browser/base/content/sync/setup.xul
browser/branding/aurora/Makefile.in
browser/branding/aurora/VisualElementsManifest.xml
browser/branding/aurora/content/Makefile.in
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/jar.mn
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/Makefile.in
browser/branding/nightly/VisualElementsManifest.xml
browser/branding/nightly/content/Makefile.in
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/jar.mn
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/Makefile.in
browser/branding/official/VisualElementsManifest.xml
browser/branding/official/content/Makefile.in
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/jar.mn
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/Makefile.in
browser/branding/unofficial/VisualElementsManifest.xml
browser/branding/unofficial/content/Makefile.in
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/jar.mn
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/build.mk
browser/components/customizableui/CustomizableUI.jsm
browser/components/customizableui/CustomizableWidgets.jsm
browser/components/customizableui/test/browser_876944_customize_mode_create_destroy.js
browser/components/customizableui/test/browser_880382_drag_wide_widgets_in_panel.js
browser/components/customizableui/test/browser_890140_orphaned_placeholders.js
browser/components/customizableui/test/head.js
browser/components/preferences/advanced.js
browser/components/preferences/advanced.xul
browser/components/preferences/in-content/advanced.js
browser/components/preferences/in-content/advanced.xul
browser/components/preferences/in-content/main.js
browser/components/preferences/main.js
browser/extensions/Makefile.in
browser/installer/package-manifest.in
browser/installer/windows/nsis/defines.nsi.in
browser/installer/windows/nsis/installer.nsi
browser/installer/windows/nsis/shared.nsh
browser/installer/windows/nsis/uninstaller.nsi
browser/locales/Makefile.in
browser/locales/en-US/chrome/browser/browser.dtd
browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties
browser/locales/en-US/chrome/browser/preferences/advanced.dtd
browser/locales/en-US/chrome/browser/preferences/preferences.properties
browser/locales/en-US/chrome/browser/syncSetup.dtd
browser/locales/en-US/profile/bookmarks.inc
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/locales/filter.py
browser/modules/BrowserUITelemetry.jsm
browser/moz.build
browser/themes/shared/browser.inc
browser/themes/windows/Metro_Glyph-inverted.png
browser/themes/windows/Metro_Glyph-menuPanel.png
browser/themes/windows/Metro_Glyph.png
browser/themes/windows/browser.css
browser/themes/windows/jar.mn
build/automation.py.in
build/win32/mozconfig.vs2010-win64
build/win32/mozconfig.vs2013-win64
build/win64/mozconfig.vs2010
build/win64/mozconfig.vs2013
config/recurse.mk
configure.in
dom/base/nsContentUtils.h
dom/svg/SVGDocument.cpp
gfx/doc/AsyncPanZoom.md
gfx/layers/d3d11/CompositorD3D11.cpp
gfx/thebes/gfxWindowsPlatform.cpp
ipc/glue/WindowsMessageLoop.cpp
js/src/configure.in
layout/reftests/forms/input/color/reftest.list
modules/libpref/Preferences.cpp
profile/dirserviceprovider/nsProfileDirServiceProvider.cpp
services/datareporting/DataReporting.manifest
services/sync/SyncComponents.manifest
services/sync/tps/extensions/mozmill/resource/driver/controller.js
services/sync/tps/extensions/mozmill/resource/stdlib/utils.js
startupcache/StartupCache.cpp
testing/mochitest/Makefile.in
testing/mochitest/browser-harness.xul
testing/mochitest/browser-test.js
testing/mozbase/mozrunner/mozrunner/runners.py
testing/profiles/prefs_general.js
toolkit/components/crashmonitor/CrashMonitor.jsm
toolkit/components/downloads/nsDownloadManager.cpp
toolkit/components/jsdownloads/src/DownloadIntegration.jsm
toolkit/components/startup/nsAppStartup.cpp
toolkit/components/startup/nsAppStartup.h
toolkit/components/startup/public/nsIAppStartup.idl
toolkit/content/widgets/browser.xml
toolkit/crashreporter/nsExceptionHandler.cpp
toolkit/library/moz.build
toolkit/locales/en-US/chrome/places/places.properties
toolkit/mozapps/installer/windows/nsis/common.nsh
toolkit/mozapps/update/common/updatehelper.cpp
toolkit/mozapps/update/common/updatehelper.h
toolkit/mozapps/update/nsIUpdateService.idl
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/webapps/WebappOSUtils.jsm
toolkit/xre/nsAppRunner.cpp
toolkit/xre/nsEmbedFunctions.cpp
toolkit/xre/nsUpdateDriver.cpp
toolkit/xre/nsWindowsWMain.cpp
toolkit/xre/nsXREDirProvider.cpp
tools/profiler/platform.cpp
uriloader/exthandler/nsExternalHelperAppService.cpp
widget/MetroUIUtils.idl
widget/NativeKeyToDOMKeyName.h
widget/moz.build
widget/nsAppShellSingleton.h
widget/nsIWinMetroUtils.idl
widget/nsWidgetsCID.h
widget/windows/KeyboardLayout.cpp
widget/windows/WinMouseScrollHandler.cpp
widget/windows/WinTaskbar.cpp
widget/windows/WinUtils.cpp
widget/windows/moz.build
widget/windows/nsClipboard.cpp
widget/windows/nsLookAndFeel.cpp
widget/windows/nsTextStore.cpp
widget/windows/nsTextStore.h
widget/windows/nsWidgetFactory.cpp
widget/windows/nsWindow.cpp
xpcom/base/ErrorList.h
xpcom/base/nsDebugImpl.cpp
xpcom/base/nsSystemInfo.cpp
xpcom/base/nsWindowsHelpers.h
xpcom/build/IOInterposer.cpp
xpcom/build/nsXULAppAPI.h
xpcom/io/nsAppDirectoryServiceDefs.h
xpcom/io/nsLocalFileWin.cpp
--- a/CLOBBER
+++ b/CLOBBER
@@ -17,13 +17,9 @@
 #
 # Modifying this file will now automatically clobber the buildbot machines \o/
 #
 
 # Are you updating CLOBBER because you think it's needed for your WebIDL
 # changes to stick? As of bug 928195, this shouldn't be necessary! Please
 # don't change CLOBBER for WebIDL changes any more.
 
-Bug 1155718: Merge Bluetooth v1/v2 files for all simple cases
-
-This patch set renames source files. This requires updating the
-build system's dependency information from scratch. The issue has
-been reported in bug 1154232.
+Bug 1039866: Removing the metro browser
--- a/accessible/windows/msaa/AccessibleWrap.cpp
+++ b/accessible/windows/msaa/AccessibleWrap.cpp
@@ -1175,23 +1175,16 @@ AccessibleWrap::GetNativeInterface(void*
 // Accessible
 
 nsresult
 AccessibleWrap::HandleAccEvent(AccEvent* aEvent)
 {
   nsresult rv = Accessible::HandleAccEvent(aEvent);
   NS_ENSURE_SUCCESS(rv, rv);
 
-  // Don't fire native MSAA events or mess with the system caret
-  // when running in metro mode. This confuses input focus tracking
-  // in metro's UIA implementation.
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    return NS_OK;
-  }
-
   uint32_t eventType = aEvent->GetEventType();
 
   static_assert(sizeof(gWinEventMap)/sizeof(gWinEventMap[0]) == nsIAccessibleEvent::EVENT_LAST_ENTRY,
                 "MSAA event map skewed");
 
   NS_ENSURE_TRUE(eventType > 0 && eventType < ArrayLength(gWinEventMap), NS_ERROR_FAILURE);
 
   uint32_t winEvent = gWinEventMap[eventType];
--- a/browser/app-rules.mk
+++ b/browser/app-rules.mk
@@ -1,4 +1,1 @@
 PURGECACHES_DIRS = $(DIST)/bin/browser
-ifdef MOZ_METRO
-PURGECACHES_DIRS += $(DIST)/bin/metro
-endif
--- a/browser/app/moz.build
+++ b/browser/app/moz.build
@@ -1,17 +1,17 @@
 # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 DIRS += ['profile/extensions']
 
-if CONFIG['OS_ARCH'] == 'WINNT' and (CONFIG['MOZ_METRO'] or CONFIG['MOZ_ASAN']):
+if CONFIG['OS_ARCH'] == 'WINNT' and CONFIG['MOZ_ASAN']:
     GeckoProgram(CONFIG['MOZ_APP_NAME'])
 else:
     GeckoProgram(CONFIG['MOZ_APP_NAME'], msvcrt='static')
 
 JS_PREFERENCE_FILES += [
     'profile/firefox.js',
 ]
 
@@ -38,20 +38,19 @@ GENERATED_INCLUDES += [
 ]
 
 LOCAL_INCLUDES += [
     '/toolkit/xre',
     '/xpcom/base',
     '/xpcom/build',
 ]
 
-if not CONFIG['MOZ_METRO']:
-  DELAYLOAD_DLLS += [
-      'mozglue.dll',
-  ]
+DELAYLOAD_DLLS += [
+    'mozglue.dll',
+]
 
 USE_LIBS += [
     'mozglue',
 ]
 
 if CONFIG['_MSC_VER']:
     # Always enter a Windows program through wmain, whether or not we're
     # a console application.
--- a/browser/app/nsBrowserApp.cpp
+++ b/browser/app/nsBrowserApp.cpp
@@ -26,20 +26,16 @@
 #include <stdio.h>
 #include <stdarg.h>
 #include <time.h>
 
 #include "nsCOMPtr.h"
 #include "nsIFile.h"
 #include "nsStringGlue.h"
 
-// Easy access to a five second startup delay used to get
-// a debugger attached in the metro environment. 
-// #define DEBUG_delay_start_metro
-
 #ifdef XP_WIN
 // we want a wmain entry point
 #ifdef MOZ_ASAN
 // ASAN requires firefox.exe to be built with -MD, and it's OK if we don't
 // support Windows XP SP2 in ASAN builds.
 #define XRE_DONT_SUPPORT_XPSP2
 #endif
 #include "nsWindowsWMain.cpp"
@@ -56,22 +52,16 @@
 #include "mozilla/WindowsDllBlocklist.h"
 
 using namespace mozilla;
 
 #ifdef XP_MACOSX
 #define kOSXResourcesFolder "Resources"
 #endif
 #define kDesktopFolder "browser"
-#define kMetroFolder "metro"
-#define kMetroAppIniFilename "metroapp.ini"
-#ifdef XP_WIN
-#define kMetroTestFile "tests.ini"
-const char* kMetroConsoleIdParam = "testconsoleid=";
-#endif
 
 static void Output(const char *fmt, ... )
 {
   va_list ap;
   va_start(ap, fmt);
 
 #ifndef XP_WIN
   vfprintf(stderr, fmt, ap);
@@ -123,50 +113,16 @@ static bool IsArg(const char* arg, const
 #if defined(XP_WIN)
   if (*arg == '/')
     return !strcasecmp(++arg, s);
 #endif
 
   return false;
 }
 
-#if defined(XP_WIN) && defined(MOZ_METRO)
-/*
- * AttachToTestHarness - Windows helper for when we are running
- * in the immersive environment. Firefox is launched by Windows in
- * response to a request by metrotestharness, which is launched by
- * runtests.py. As such stdout in fx doesn't point to the right
- * stream. This helper touches up stdout such that test output gets
- * routed to a named pipe metrotestharness creates and dumps to its
- * stdout.
- */
-static void AttachToTestHarness()
-{
-  // attach to the metrotestharness named logging pipe
-  HANDLE winOut = CreateFileA("\\\\.\\pipe\\metrotestharness",
-                              GENERIC_WRITE,
-                              FILE_SHARE_WRITE, 0,
-                              OPEN_EXISTING, 0, 0);
-  
-  if (winOut == INVALID_HANDLE_VALUE) {
-    OutputDebugStringW(L"Could not create named logging pipe.\n");
-    return;
-  }
-
-  // Set the c runtime handle
-  int stdOut = _open_osfhandle((intptr_t)winOut, _O_APPEND);
-  if (stdOut == -1) {
-    OutputDebugStringW(L"Could not open c-runtime handle.\n");
-    return;
-  }
-  FILE *fp = _fdopen(stdOut, "a");
-  *stdout = *fp;
-}
-#endif
-
 XRE_GetFileFromPathType XRE_GetFileFromPath;
 XRE_CreateAppDataType XRE_CreateAppData;
 XRE_FreeAppDataType XRE_FreeAppData;
 XRE_TelemetryAccumulateType XRE_TelemetryAccumulate;
 XRE_StartupTimelineRecordType XRE_StartupTimelineRecord;
 XRE_mainType XRE_main;
 XRE_StopLateWriteChecksType XRE_StopLateWriteChecks;
 
@@ -229,177 +185,38 @@ static int do_main(int argc, char* argv[
     }
     // xreDirectory already has a refcount from NS_NewLocalFile
     appData->xreDirectory = xreDirectory;
     int result = XRE_main(argc, argv, appData, mainFlags);
     XRE_FreeAppData(appData);
     return result;
   }
 
-  bool metroOnDesktop = false;
-
-#ifdef MOZ_METRO
-  if (argc > 1) {
-    // This command-line flag is passed to our executable when it is to be
-    // launched in metro mode (i.e. our EXE is registered as the default
-    // browser and the user has tapped our EXE's tile)
-    if (IsArg(argv[1], "ServerName:DefaultBrowserServer")) {
-      mainFlags = XRE_MAIN_FLAG_USE_METRO;
-      argv[1] = argv[0];
-      argv++;
-      argc--;
-    } else if (IsArg(argv[1], "BackgroundSessionClosed")) {
-      // This command line flag is used for indirect shutdowns, the OS
-      // relaunches Metro Firefox with this command line arg.
-      mainFlags = XRE_MAIN_FLAG_USE_METRO;
-    } else {
-#ifndef RELEASE_BUILD
-      // This command-line flag is used to test the metro browser in a desktop
-      // environment.
-      for (int idx = 1; idx < argc; idx++) {
-        if (IsArg(argv[idx], "metrodesktop")) {
-          metroOnDesktop = true;
-          // Disable crash reporting when running in metrodesktop mode.
-          char crashSwitch[] = "MOZ_CRASHREPORTER_DISABLE=1";
-          putenv(crashSwitch);
-          break;
-        } 
-      }
-#endif
-    }
-  }
-#endif
-
-  // Desktop browser launch
-  if (mainFlags != XRE_MAIN_FLAG_USE_METRO && !metroOnDesktop) {
-    ScopedAppData appData(&sAppData);
-    nsCOMPtr<nsIFile> exeFile;
-    rv = mozilla::BinaryPath::GetFile(argv[0], getter_AddRefs(exeFile));
-    if (NS_FAILED(rv)) {
-      Output("Couldn't find the application directory.\n");
-      return 255;
-    }
-
-    nsCOMPtr<nsIFile> greDir;
-    exeFile->GetParent(getter_AddRefs(greDir));
-#ifdef XP_MACOSX
-    greDir->SetNativeLeafName(NS_LITERAL_CSTRING(kOSXResourcesFolder));
-#endif
-    nsCOMPtr<nsIFile> appSubdir;
-    greDir->Clone(getter_AddRefs(appSubdir));
-    appSubdir->Append(NS_LITERAL_STRING(kDesktopFolder));
-
-    SetStrongPtr(appData.directory, static_cast<nsIFile*>(appSubdir.get()));
-    // xreDirectory already has a refcount from NS_NewLocalFile
-    appData.xreDirectory = xreDirectory;
-
-    return XRE_main(argc, argv, &appData, mainFlags);
-  }
-
-  // Metro browser launch
-#ifdef MOZ_METRO
-  nsCOMPtr<nsIFile> iniFile, appSubdir;
-
-  xreDirectory->Clone(getter_AddRefs(iniFile));
-  xreDirectory->Clone(getter_AddRefs(appSubdir));
-
-  iniFile->Append(NS_LITERAL_STRING(kMetroFolder));
-  iniFile->Append(NS_LITERAL_STRING(kMetroAppIniFilename));
-
-  appSubdir->Append(NS_LITERAL_STRING(kMetroFolder));
-
-  nsAutoCString path;
-  if (NS_FAILED(iniFile->GetNativePath(path))) {
-    Output("Couldn't get ini file path.\n");
+  ScopedAppData appData(&sAppData);
+  nsCOMPtr<nsIFile> exeFile;
+  rv = mozilla::BinaryPath::GetFile(argv[0], getter_AddRefs(exeFile));
+  if (NS_FAILED(rv)) {
+    Output("Couldn't find the application directory.\n");
     return 255;
   }
 
-  nsXREAppData *appData;
-  rv = XRE_CreateAppData(iniFile, &appData);
-  if (NS_FAILED(rv) || !appData) {
-    Output("Couldn't read application.ini");
-    return 255;
-  }
-
-  SetStrongPtr(appData->directory, static_cast<nsIFile*>(appSubdir.get()));
-  // xreDirectory already has a refcount from NS_NewLocalFile
-  appData->xreDirectory = xreDirectory;
-
-#ifdef XP_WIN
-  if (!metroOnDesktop) {
-    nsCOMPtr<nsIFile> testFile;
-
-    xreDirectory->Clone(getter_AddRefs(testFile));
-    testFile->Append(NS_LITERAL_STRING(kMetroTestFile));
-
-    nsAutoCString path;
-    if (NS_FAILED(testFile->GetNativePath(path))) {
-      Output("Couldn't get test file path.\n");
-      return 255;
-    }
+  nsCOMPtr<nsIFile> greDir;
+  exeFile->GetParent(getter_AddRefs(greDir));
+#ifdef XP_MACOSX
+  greDir->SetNativeLeafName(NS_LITERAL_CSTRING(kOSXResourcesFolder));
+#endif
+  nsCOMPtr<nsIFile> appSubdir;
+  greDir->Clone(getter_AddRefs(appSubdir));
+  appSubdir->Append(NS_LITERAL_STRING(kDesktopFolder));
 
-    // Check for a metro test harness command line args file
-    HANDLE hTestFile = CreateFileA(path.get(),
-                                   GENERIC_READ,
-                                   0, nullptr, OPEN_EXISTING,
-                                   FILE_ATTRIBUTE_NORMAL,
-                                   nullptr);
-    if (hTestFile != INVALID_HANDLE_VALUE) {
-      // Typical test harness command line args string is around 100 bytes.
-      char buffer[1024];
-      memset(buffer, 0, sizeof(buffer));
-      DWORD bytesRead = 0;
-      if (!ReadFile(hTestFile, (VOID*)buffer, sizeof(buffer)-1,
-                    &bytesRead, nullptr) || !bytesRead) {
-        CloseHandle(hTestFile);
-        printf("failed to read test file '%s'", testFile);
-        return -1;
-      }
-      CloseHandle(hTestFile);
-
-      // Build new args array
-      char* newArgv[20];
-      int newArgc = 1;
-
-      memset(newArgv, 0, sizeof(newArgv));
+  SetStrongPtr(appData.directory, static_cast<nsIFile*>(appSubdir.get()));
+  // xreDirectory already has a refcount from NS_NewLocalFile
+  appData.xreDirectory = xreDirectory;
 
-      char* ptr = buffer;
-      newArgv[0] = ptr;
-      while (*ptr != '\0' &&
-             (ptr - buffer) < sizeof(buffer) &&
-             newArgc < ARRAYSIZE(newArgv)) {
-        if (isspace(*ptr)) {
-          *ptr = '\0';
-          ptr++;
-          newArgv[newArgc] = ptr;
-          newArgc++;
-          continue;
-        }
-        ptr++;
-      }
-      if (ptr == newArgv[newArgc-1])
-        newArgc--;
-
-      // attach browser stdout to metrotestharness stdout
-      AttachToTestHarness();
-
-      int result = XRE_main(newArgc, newArgv, appData, mainFlags);
-      XRE_FreeAppData(appData);
-      return result;
-    }
-  }
-#endif
-
-  int result = XRE_main(argc, argv, appData, mainFlags);
-  XRE_FreeAppData(appData);
-  return result;
-#endif
-
-  NS_NOTREACHED("browser do_main failed to pickup proper initialization");
-  return 255;
+  return XRE_main(argc, argv, &appData, mainFlags);
 }
 
 #ifdef XP_WIN
 
 /**
  * Used only when GetTickCount64 is not available on the platform.
  * Last result of GetTickCount call. Kept in [ms].
  */
@@ -567,21 +384,18 @@ InitXPCOMGlue(const char *argv0, nsIFile
   }
 
   rv = XPCOMGlueLoadXULFunctions(kXULFuncs);
   if (NS_FAILED(rv)) {
     Output("Couldn't load XRE functions.\n");
     return rv;
   }
 
-#ifndef MOZ_METRO
-  // This will set this thread as the main thread, which in metro land is
-  // wrong. We initialize this later from the right thread in nsAppRunner.
+  // This will set this thread as the main thread.
   NS_LogInit();
-#endif
 
   // chop XPCOM_DLL off exePath
   *lastSlash = '\0';
 #ifdef XP_MACOSX
   lastSlash = strrchr(exePath, XPCOM_FILE_PATH_SEPARATOR[0]);
   strcpy(lastSlash + 1, kOSXResourcesFolder);
 #endif
 #ifdef XP_WIN
@@ -592,19 +406,16 @@ InitXPCOMGlue(const char *argv0, nsIFile
                              xreDirectory);
 #endif
 
   return rv;
 }
 
 int main(int argc, char* argv[])
 {
-#ifdef DEBUG_delay_start_metro
-  Sleep(5000);
-#endif
   uint64_t start = TimeStamp_Now();
 
 #ifdef XP_MACOSX
   TriggerQuirks();
 #endif
 
   int gotCounters;
 #if defined(XP_UNIX)
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -135,17 +135,16 @@ pref("app.update.cert.maxErrors", 5);
 // 2. the preference name must exist as an attribute name on the certificate and
 //    the value for the name must be the same as the value for the attribute name
 //    on the certificate.
 // If these conditions aren't met it will be treated the same as when there is
 // no update available. This validation will not be performed when the
 // |app.update.url.override| user preference has been set for testing updates or
 // when the |app.update.cert.checkAttributes| preference is set to false. Also,
 // the |app.update.url.override| preference should ONLY be used for testing.
-// IMPORTANT! metro.js should also be updated for updates to certs.X.issuerName
 // IMPORTANT! media.gmp-manager.certs.* prefs should also be updated if these
 // are updated.
 
 // Non-release builds (Nightly, Aurora, etc.) have been switched over to aus4.mozilla.org.
 // This condition protects us against accidentally using it for release builds.
 pref("app.update.certs.1.issuerName", "CN=DigiCert Secure Server CA,O=DigiCert Inc,C=US");
 pref("app.update.certs.1.commonName", "aus4.mozilla.org");
 
@@ -157,27 +156,18 @@ pref("app.update.certs.2.commonName", "a
 pref("app.update.enabled", true);
 
 // This preference turns on app.update.mode and allows automatic download and
 // install to take place. We use a separate boolean toggle for this to make
 // the UI easier to construct.
 pref("app.update.auto", true);
 
 // See chart in nsUpdateService.js source for more details
-// incompatibilities are ignored by updates in Metro
 pref("app.update.mode", 1);
 
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-// Enables update checking in the Metro environment.
-// add-on incompatibilities are ignored by updates in Metro.
-pref("app.update.metro.enabled", true);
-#endif
-#endif
-
 // If set to true, the Update Service will present no UI for any event.
 pref("app.update.silent", false);
 
 // If set to true, the hamburger button will show badges for update events.
 #ifndef RELEASE_BUILD
 pref("app.update.badge", true);
 #else
 pref("app.update.badge", false);
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -43,25 +43,16 @@
                           command="Browser:OpenLocation"
                           key="focusURLBar"/>
 #endif
                 <menuitem id="menu_openFile"
                           label="&openFileCmd.label;"
                           command="Browser:OpenFile"
                           key="openFileKb"
                           accesskey="&openFileCmd.accesskey;"/>
-#ifdef HAVE_SHELL_SERVICE
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-                <menuitem id="menu_switchToMetro"
-                          label="&switchToMetroCmd2.label;"
-                          oncommand="SwitchToMetro()"/>
-#endif
-#endif
-#endif
                 <menuitem id="menu_close"
                           class="show-only-for-keyboard"
                           label="&closeCmd.label;"
                           key="key_close"
                           accesskey="&closeCmd.accesskey;"
                           command="cmd_close"/>
                 <menuitem id="menu_closeWindow"
                           class="show-only-for-keyboard"
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1379,21 +1379,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);
 
@@ -1547,19 +1542,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();
@@ -3019,66 +3011,16 @@ function populateMirrorTabMenu(popup) {
     let item = doc.createElement("menuitem");
     item.setAttribute("label", service.friendlyName);
     item._service = service;
     item.addEventListener("command", mirrorMenuItemClicked);
     popup.appendChild(item);
   });
 };
 
-function _checkDefaultAndSwitchToMetro() {
-#ifdef HAVE_SHELL_SERVICE
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-  let shell = Components.classes["@mozilla.org/browser/shell-service;1"].
-    getService(Components.interfaces.nsIShellService);
-  let isDefault = shell.isDefaultBrowser(false, false);
-
-  if (isDefault) {
-    let appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"].
-    getService(Components.interfaces.nsIAppStartup);
-
-    Services.prefs.setBoolPref('browser.sessionstore.resume_session_once', true);
-
-    let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"]
-                     .createInstance(Ci.nsISupportsPRBool);
-    Services.obs.notifyObservers(cancelQuit, "quit-application-requested", "restart");
-
-    if (!cancelQuit.data) {
-      appStartup.quit(Components.interfaces.nsIAppStartup.eAttemptQuit |
-                      Components.interfaces.nsIAppStartup.eRestartTouchEnvironment);
-    }
-    return true;
-  }
-  return false;
-#endif
-#endif
-#endif
-}
-
-function SwitchToMetro() {
-#ifdef HAVE_SHELL_SERVICE
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-  if (this._checkDefaultAndSwitchToMetro()) {
-    return;
-  }
-
-  let shell = Components.classes["@mozilla.org/browser/shell-service;1"].
-    getService(Components.interfaces.nsIShellService);
-
-  shell.setDefaultBrowser(false, false);
-
-  let intervalID = window.setInterval(this._checkDefaultAndSwitchToMetro, 1000);
-  window.setTimeout(function() { window.clearInterval(intervalID); }, 10000);
-#endif
-#endif
-#endif
-}
-
 function getWebNavigation()
 {
   return gBrowser.webNavigation;
 }
 
 function BrowserReloadWithFlags(reloadFlags) {
   let url = gBrowser.currentURI.spec;
   if (gBrowser.updateBrowserRemotenessByURL(gBrowser.selectedBrowser, url)) {
--- a/browser/base/content/sync/setup.js
+++ b/browser/base/content/sync/setup.js
@@ -467,23 +467,16 @@ var gSyncSetup = {
                                                 challenge, response);
 
         if (error == null) {
           Weave.Service.identity.account = email;
           Weave.Service.identity.basicPassword = password;
           Weave.Service.identity.syncKey = Weave.Utils.generatePassphrase();
           this._handleNoScript(false);
           Weave.Svc.Prefs.set("firstSync", "newAccount");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-          if (document.getElementById("metroSetupCheckbox").checked) {
-            Services.metro.storeSyncInfo(email, password, Weave.Service.identity.syncKey);
-          }
-#endif
-#endif
           this.wizardFinish();
           return false;
         }
 
         image.setAttribute("status", "error");
         label.value = Weave.Utils.getErrorString(error);
         return false;
       case EXISTING_ACCOUNT_LOGIN_PAGE:
--- a/browser/base/content/sync/setup.xul
+++ b/browser/base/content/sync/setup.xul
@@ -167,30 +167,16 @@
         </row>
         <row id="serverFeedbackRow" align="center" hidden="true">
           <spacer/>
           <hbox>
             <image class="statusIcon"/>
             <label class="status" value=" "/>
           </hbox>
         </row>
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-        <row id="metroRow" align="center">
-          <spacer/>
-          <hbox align="center">
-            <checkbox label="&setup.setupMetro.label;"
-                      accesskey="&setup.setupMetro.accesskey;"
-                      control="weavePasswordConfirm"
-                      id="metroSetupCheckbox"
-                      checked="true"/>
-          </hbox>
-        </row>
-#endif
-#endif
         <row id="TOSRow" align="center">
           <spacer/>
           <hbox align="center">
             <checkbox id="tos"
                       accesskey="&setup.tosAgree1.accesskey;"
                       oncommand="this.focus(); gSyncSetup.checkFields();"/>
             <description id="tosDesc"
                          flex="1"
--- a/browser/branding/aurora/Makefile.in
+++ b/browser/branding/aurora/Makefile.in
@@ -1,16 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 include $(topsrcdir)/config/config.mk
 
-# On Windows only do this step for browser, skip for metro.
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows browser)
+ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
 BRANDING_FILES := \
 	firefox.ico \
 	document.ico \
 	branding.nsi \
 	appname.bmp \
 	bgintro.bmp \
 	clock.bmp \
 	particles.bmp \
@@ -42,15 +41,8 @@ BRANDING_FILES := \
 	default48.png \
 	mozicon128.png \
 	$(NULL)
 endif
 
 BRANDING_DEST := $(DIST)/branding
 BRANDING_TARGET := export
 INSTALL_TARGETS += BRANDING
-
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-VISUALMANIFEST := VisualElementsManifest.xml
-VISUALMANIFEST_FLAGS := -Fsubstitution -DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNAME}
-VISUALMANIFEST_PATH := $(DIST)/bin
-PP_TARGETS += VISUALMANIFEST
-endif
deleted file mode 100644
--- a/browser/branding/aurora/VisualElementsManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Application
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <VisualElements
-      DisplayName="@MOZ_APP_DISPLAYNAME@"
-      Logo="tileresources\VisualElements_logo.png"
-      SmallLogo="tileresources\VisualElements_smalllogo.png"
-      ForegroundText="light"
-      BackgroundColor="#1c112e">
-    <DefaultTile
-        ShortName="@MOZ_APP_DISPLAYNAME@"
-        ShowName="allLogos"
-            />
-    <SplashScreen
-        Image="tileresources\VisualElements_splashscreen.png" />
-  </VisualElements>
-</Application>
--- a/browser/branding/aurora/content/Makefile.in
+++ b/browser/branding/aurora/content/Makefile.in
@@ -1,13 +1,6 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Branding Makefile
 #  - jars chrome artwork
-
-# resources needed for the metro tile interface
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-TILE_FILES := $(wildcard $(srcdir)/VisualElements*)
-TILE_DEST := $(DIST)/bin/tileresources
-INSTALL_TARGETS += TILE
-endif
deleted file mode 100644
index a62a4ca37cdab53198758b4d839b30862ac61128..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f5c4352e5caa7b43a16280fc2085dee3a9b47f95..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 491a20909d52be00deca324c45b37d1e4c4ed761..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/aurora/content/jar.mn
+++ b/browser/branding/aurora/content/jar.mn
@@ -13,16 +13,8 @@ browser.jar:
   content/branding/icon64.png                    (icon64.png)
   content/branding/icon16.png                    (../default16.png)
   content/branding/icon32.png                    (../default32.png)
   content/branding/icon128.png                   (../mozicon128.png)
   content/branding/identity-icons-brand.png      (identity-icons-brand.png)
   content/branding/identity-icons-brand@2x.png   (identity-icons-brand@2x.png)
   content/branding/silhouette-40.svg             (silhouette-40.svg)
   content/branding/aboutDialog.css               (aboutDialog.css)
-#ifdef MOZ_METRO
-  content/branding/metro-about.css               (metro-about.css)
-  content/branding/metro-about-footer.png        (metro-about-footer.png)
-  content/branding/metro-about-wordmark.png      (metro-about-wordmark.png)
-  content/branding/metro_firstrun_logo.png       (metro_firstrun_logo.png)
-  content/branding/metro_firstrun_logo@1.4x.png  (metro_firstrun_logo@1.4x.png)
-  content/branding/metro_firstrun_logo@1.8x.png  (metro_firstrun_logo@1.8x.png)
-#endif
deleted file mode 100644
index 4f918ccdbc13ac106571b54c0da15100f8768fd1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b63d7d6abf1df210b18c6e97b5c1001d70b66d6a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/branding/aurora/content/metro-about.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#about-flyoutpanel {
-  background-color: #331e54;
-  color: white;
-}
-
-#about-policy-label:hover,
-#about-policy-label:active {
-  background: #181327;
-}
-
deleted file mode 100644
index 425eb1f9997bc9073436f79d5fad1d9a1f25d877..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a177b237e7b5eb7967b5e3607194fd76acb0f956..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0f313f5df809a240822cc8508a00280da1e250fb..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/nightly/Makefile.in
+++ b/browser/branding/nightly/Makefile.in
@@ -1,16 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 include $(topsrcdir)/config/config.mk
 
-# On Windows only do this step for browser, skip for metro.
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows browser)
+ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
 BRANDING_FILES := \
 	firefox.ico \
 	document.ico \
 	branding.nsi \
 	appname.bmp \
 	bgintro.bmp \
 	clock.bmp \
 	particles.bmp \
@@ -42,15 +41,8 @@ BRANDING_FILES := \
 	default48.png \
 	mozicon128.png \
 	$(NULL)
 endif
 
 BRANDING_DEST := $(DIST)/branding
 BRANDING_TARGET := export
 INSTALL_TARGETS += BRANDING
-
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-VISUALMANIFEST := VisualElementsManifest.xml
-VISUALMANIFEST_FLAGS := -Fsubstitution -DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNAME}
-VISUALMANIFEST_PATH := $(DIST)/bin
-PP_TARGETS += VISUALMANIFEST
-endif
deleted file mode 100644
--- a/browser/branding/nightly/VisualElementsManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Application
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <VisualElements
-      DisplayName="@MOZ_APP_DISPLAYNAME@"
-      Logo="tileresources\VisualElements_logo.png"
-      SmallLogo="tileresources\VisualElements_smalllogo.png"
-      ForegroundText="light"
-      BackgroundColor="#001226">
-    <DefaultTile
-        ShortName="@MOZ_APP_DISPLAYNAME@"
-        ShowName="allLogos"
-            />
-    <SplashScreen
-        Image="tileresources\VisualElements_splashscreen.png" />
-  </VisualElements>
-</Application>
--- a/browser/branding/nightly/content/Makefile.in
+++ b/browser/branding/nightly/content/Makefile.in
@@ -1,13 +1,6 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Branding Makefile
 #  - jars chrome artwork
-
-# resources needed for the metro tile interface
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-TILE_FILES := $(wildcard $(srcdir)/VisualElements*)
-TILE_DEST := $(DIST)/bin/tileresources
-INSTALL_TARGETS += TILE
-endif
deleted file mode 100644
index 3ed86be8996760a435427ab4d65e92cb1b29de9d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e0ec97d1e8827ff2737384ee0e99852ad12b53ce..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 264a44dbac5925f3e684282a14ad32b22ec5e8d1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/nightly/content/jar.mn
+++ b/browser/branding/nightly/content/jar.mn
@@ -13,16 +13,8 @@ browser.jar:
   content/branding/icon64.png                    (icon64.png)
   content/branding/icon16.png                    (../default16.png)
   content/branding/icon32.png                    (../default32.png)
   content/branding/icon128.png                   (../mozicon128.png)
   content/branding/identity-icons-brand.png      (identity-icons-brand.png)
   content/branding/identity-icons-brand@2x.png   (identity-icons-brand@2x.png)
   content/branding/silhouette-40.svg             (silhouette-40.svg)
   content/branding/aboutDialog.css               (aboutDialog.css)
-#ifdef MOZ_METRO
-  content/branding/metro-about.css               (metro-about.css)
-  content/branding/metro-about-footer.png        (metro-about-footer.png)
-  content/branding/metro-about-wordmark.png      (metro-about-wordmark.png)
-  content/branding/metro_firstrun_logo.png       (metro_firstrun_logo.png)
-  content/branding/metro_firstrun_logo@1.4x.png  (metro_firstrun_logo@1.4x.png)
-  content/branding/metro_firstrun_logo@1.8x.png  (metro_firstrun_logo@1.8x.png)
-#endif
deleted file mode 100644
index 8e507f174085347b918c8ac422374613713593be..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 94569858eeede9c42297637af3396b39b13587c9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/branding/nightly/content/metro-about.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#about-flyoutpanel {
-  background-color: #002147;
-  color: white;
-}
-
-#about-policy-label:hover,
-#about-policy-label:active {
-  background: #0a111c;
-}
-
deleted file mode 100644
index d54fb00af8b3ce510acb0af9e4339a28cbbfb8b8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d2a2fffc7d4192bb4ea7dc668ab5d0a2a0eb1c75..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2d5297f4c0bd942bbd6aa7ef1c330ae285df22de..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/official/Makefile.in
+++ b/browser/branding/official/Makefile.in
@@ -1,16 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 include $(topsrcdir)/config/config.mk
 
-# On Windows only do this step for browser, skip for metro.
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows browser)
+ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
 BRANDING_FILES := \
 	firefox.ico \
 	document.ico \
 	branding.nsi \
 	appname.bmp \
 	bgintro.bmp \
 	clock.bmp \
 	particles.bmp \
@@ -42,15 +41,8 @@ BRANDING_FILES := \
 	default48.png \
 	mozicon128.png \
 	$(NULL)
 endif
 
 BRANDING_DEST := $(DIST)/branding
 BRANDING_TARGET := export
 INSTALL_TARGETS += BRANDING
-
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-VISUALMANIFEST := VisualElementsManifest.xml
-VISUALMANIFEST_FLAGS := -Fsubstitution -DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNAME}
-VISUALMANIFEST_PATH := $(DIST)/bin
-PP_TARGETS += VISUALMANIFEST
-endif
deleted file mode 100644
--- a/browser/branding/official/VisualElementsManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Application
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <VisualElements
-      DisplayName="@MOZ_APP_DISPLAYNAME@"
-      Logo="tileresources\VisualElements_logo.png"
-      SmallLogo="tileresources\VisualElements_smalllogo.png"
-      ForegroundText="light"
-      BackgroundColor="#1895f5">
-    <DefaultTile
-        ShortName="@MOZ_APP_DISPLAYNAME@"
-        ShowName="allLogos"
-            />
-    <SplashScreen
-        Image="tileresources\VisualElements_splashscreen.png" />
-  </VisualElements>
-</Application>
--- a/browser/branding/official/content/Makefile.in
+++ b/browser/branding/official/content/Makefile.in
@@ -1,13 +1,6 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Branding Makefile
 #  - jars chrome artwork
-
-# resources needed for the metro tile interface
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-TILE_FILES := $(wildcard $(srcdir)/VisualElements*)
-TILE_DEST := $(DIST)/bin/tileresources
-INSTALL_TARGETS += TILE
-endif
deleted file mode 100644
index 808db79a4805d1ff029a11d94e3f8dcb9c9668f8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e9d5bbb4b29a5eb50de982bb66338e81d413364f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c9e21ba6d9c062d26abbdc61079056563be8f869..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/official/content/jar.mn
+++ b/browser/branding/official/content/jar.mn
@@ -12,16 +12,8 @@ browser.jar:
   content/branding/icon64.png                    (icon64.png)
   content/branding/icon16.png                    (../default16.png)
   content/branding/icon32.png                    (../default32.png)
   content/branding/icon128.png                   (../mozicon128.png)
   content/branding/identity-icons-brand.png      (identity-icons-brand.png)
   content/branding/identity-icons-brand@2x.png   (identity-icons-brand@2x.png)
   content/branding/silhouette-40.svg             (silhouette-40.svg)
   content/branding/aboutDialog.css               (aboutDialog.css)
-#ifdef MOZ_METRO
-  content/branding/metro-about.css               (metro-about.css)
-  content/branding/metro-about-footer.png        (metro-about-footer.png)
-  content/branding/metro-about-wordmark.png      (metro-about-wordmark.png)
-  content/branding/metro_firstrun_logo.png       (metro_firstrun_logo.png)
-  content/branding/metro_firstrun_logo@1.4x.png  (metro_firstrun_logo@1.4x.png)
-  content/branding/metro_firstrun_logo@1.8x.png  (metro_firstrun_logo@1.8x.png)
-#endif
deleted file mode 100644
index 00df16c62c4ed329a008af9fa041bb8ebebf625e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 496d769da996e7f78e93599378146601a1e566f3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/branding/official/content/metro-about.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#about-flyoutpanel {
-  background-color: #0095dd;
-  color: white;
-}
-
-#about-policy-label:hover,
-#about-policy-label:active {
-  background: #036fa4;
-}
-
deleted file mode 100644
index 3365ffb606d49e0894242aac91d5bbf050ec9b8a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 99acd0a499a69a2b0f73bdb10e1041156670376f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cdb8d339654f8a75794b4d696dff3be9cc53aa6e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/unofficial/Makefile.in
+++ b/browser/branding/unofficial/Makefile.in
@@ -1,16 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 include $(topsrcdir)/config/config.mk
 
-# On Windows only do this step for browser, skip for metro.
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows browser)
+ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
 BRANDING_FILES := \
 	firefox.ico \
 	document.ico \
 	branding.nsi \
 	appname.bmp \
 	bgintro.bmp \
 	clock.bmp \
 	particles.bmp \
@@ -42,15 +41,8 @@ BRANDING_FILES := \
 	default48.png \
 	mozicon128.png \
 	$(NULL)
 endif
 
 BRANDING_DEST := $(DIST)/branding
 BRANDING_TARGET := export
 INSTALL_TARGETS += BRANDING
-
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-VISUALMANIFEST := VisualElementsManifest.xml
-VISUALMANIFEST_FLAGS := -Fsubstitution -DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNAME}
-VISUALMANIFEST_PATH := $(DIST)/bin
-PP_TARGETS += VISUALMANIFEST
-endif
deleted file mode 100644
--- a/browser/branding/unofficial/VisualElementsManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Application
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <VisualElements
-      DisplayName="@MOZ_APP_DISPLAYNAME@"
-      Logo="tileresources\VisualElements_logo.png"
-      SmallLogo="tileresources\VisualElements_smalllogo.png"
-      ForegroundText="light"
-      BackgroundColor="#0a1833">
-    <DefaultTile
-        ShortName="@MOZ_APP_DISPLAYNAME@"
-        ShowName="allLogos"
-            />
-    <SplashScreen
-        Image="tileresources\VisualElements_splashscreen.png" />
-  </VisualElements>
-</Application>
--- a/browser/branding/unofficial/content/Makefile.in
+++ b/browser/branding/unofficial/content/Makefile.in
@@ -1,13 +1,6 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Branding Makefile
 #  - jars chrome artwork
-
-# resources needed for the metro tile interface
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-TILE_FILES := $(wildcard $(srcdir)/VisualElements*)
-TILE_DEST := $(DIST)/bin/tileresources
-INSTALL_TARGETS += TILE
-endif
deleted file mode 100644
index 7f8f5b9d69e2378a5933d376ff5b09ec54a5945d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8f60ca02a1e3c385170bed3243a922433ddc4841..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d7799109b4e16e7c947da0c76c58775122d8d2b8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/branding/unofficial/content/jar.mn
+++ b/browser/branding/unofficial/content/jar.mn
@@ -13,16 +13,8 @@ browser.jar:
   content/branding/icon64.png                    (icon64.png)
   content/branding/icon16.png                    (../default16.png)
   content/branding/icon32.png                    (../default32.png)
   content/branding/icon128.png                   (../mozicon128.png)
   content/branding/identity-icons-brand.png      (identity-icons-brand.png)
   content/branding/identity-icons-brand@2x.png   (identity-icons-brand@2x.png)
   content/branding/silhouette-40.svg             (silhouette-40.svg)
   content/branding/aboutDialog.css               (aboutDialog.css)
-#ifdef MOZ_METRO
-  content/branding/metro-about.css               (metro-about.css)
-  content/branding/metro-about-footer.png        (metro-about-footer.png)
-  content/branding/metro-about-wordmark.png      (metro-about-wordmark.png)
-  content/branding/metro_firstrun_logo.png       (metro_firstrun_logo.png)
-  content/branding/metro_firstrun_logo@1.4x.png  (metro_firstrun_logo@1.4x.png)
-  content/branding/metro_firstrun_logo@1.8x.png  (metro_firstrun_logo@1.8x.png)
-#endif
deleted file mode 100644
index 8e507f174085347b918c8ac422374613713593be..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 94569858eeede9c42297637af3396b39b13587c9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/branding/unofficial/content/metro-about.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#about-flyoutpanel {
-  background-color: #002147;
-  color: white;
-}
-
-#about-policy-label:hover,
-#about-policy-label:active {
-  background: #0a111c;
-}
-
deleted file mode 100644
index d54fb00af8b3ce510acb0af9e4339a28cbbfb8b8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d2a2fffc7d4192bb4ea7dc668ab5d0a2a0eb1c75..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2d5297f4c0bd942bbd6aa7ef1c330ae285df22de..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/build.mk
+++ b/browser/build.mk
@@ -47,14 +47,9 @@ ifdef ENABLE_TESTS
 mochitest-browser-chrome:
 	$(RUN_MOCHITEST) --browser-chrome
 	$(CHECK_TEST_ERROR)
 
 mochitest:: mochitest-browser-chrome
 
 .PHONY: mochitest-browser-chrome
 
-mochitest-metro-chrome:
-	$(RUN_MOCHITEST) --metro-immersive --browser-chrome
-	$(CHECK_TEST_ERROR)
-
-
 endif
--- a/browser/components/customizableui/CustomizableUI.jsm
+++ b/browser/components/customizableui/CustomizableUI.jsm
@@ -167,20 +167,16 @@ let CustomizableUIInternal = {
       "find-button",
       "preferences-button",
       "add-ons-button",
 #ifndef MOZ_DEV_EDITION
       "developer-button",
 #endif
     ];
 
-    if (gPalette.has("switch-to-metro-button")) {
-      panelPlacements.push("switch-to-metro-button");
-    }
-
 #ifdef E10S_TESTING_ONLY
     if (gPalette.has("e10s-button")) {
       let newWindowIndex = panelPlacements.indexOf("new-window-button");
       if (newWindowIndex > -1) {
         panelPlacements.splice(newWindowIndex + 1, 0, "e10s-button");
       }
     }
 #endif
--- a/browser/components/customizableui/CustomizableWidgets.jsm
+++ b/browser/components/customizableui/CustomizableWidgets.jsm
@@ -988,40 +988,16 @@ const CustomizableWidgets = [
                 aEvent.target.ownerDocument &&
                 aEvent.target.ownerDocument.defaultView;
       if (win && typeof win.BrowserOpenApps == "function") {
         win.BrowserOpenApps();
       }
     }
   }];
 
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-if (Services.metro && Services.metro.supported) {
-  let widgetArgs = {tooltiptext: "switch-to-metro-button2.tooltiptext"};
-  let brandShortName = BrandBundle.GetStringFromName("brandShortName");
-  let metroTooltip = CustomizableUI.getLocalizedProperty(widgetArgs, "tooltiptext",
-                                                         [brandShortName]);
-  CustomizableWidgets.push({
-    id: "switch-to-metro-button",
-    label: "switch-to-metro-button2.label",
-    tooltiptext: metroTooltip,
-    defaultArea: CustomizableUI.AREA_PANEL,
-    showInPrivateBrowsing: false, /* See bug 928068 */
-    onCommand: function(aEvent) {
-      let win = aEvent.view;
-      if (win && typeof win.SwitchToMetro == "function") {
-        win.SwitchToMetro();
-      }
-    }
-  });
-}
-#endif
-#endif
-
 if (Services.prefs.getBoolPref("privacy.panicButton.enabled")) {
   CustomizableWidgets.push({
     id: "panic-button",
     type: "view",
     viewId: "PanelUI-panicView",
     _sanitizer: null,
     _ensureSanitizer: function() {
       if (!this.sanitizer) {
--- a/browser/components/customizableui/test/browser_876944_customize_mode_create_destroy.js
+++ b/browser/components/customizableui/test/browser_876944_customize_mode_create_destroy.js
@@ -22,26 +22,26 @@ add_task(function testWrapUnwrap() {
   ok(!wrapper, "There should be a wrapper");
   let item = document.getElementById(kTestWidget1);
   ok(!item, "There should no longer be an item");
 });
 
 // Creating and destroying a widget should correctly deal with panel placeholders
 add_task(function testPanelPlaceholders() {
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
-  let expectedPlaceholders = (isInWin8() ? 1 : 2) + (isInDevEdition() ? 1 : 0);
+  let expectedPlaceholders = 2 + (isInDevEdition() ? 1 : 0);
   is(panel.querySelectorAll(".panel-customization-placeholder").length, expectedPlaceholders, "The number of placeholders should be correct.");
   CustomizableUI.createWidget({id: kTestWidget2, label: 'Pretty label', tooltiptext: 'Pretty tooltip', defaultArea: CustomizableUI.AREA_PANEL});
   let elem = document.getElementById(kTestWidget2);
   let wrapper = document.getElementById("wrapper-" + kTestWidget2);
   ok(elem, "There should be an item");
   ok(wrapper, "There should be a wrapper");
   is(wrapper.firstChild.id, kTestWidget2, "Wrapper should have test widget");
   is(wrapper.parentNode, panel, "Wrapper should be in panel");
-  expectedPlaceholders = (isInWin8() ? 3 : 1) + (isInDevEdition() ? 1 : 0);
+  expectedPlaceholders = 1 + (isInDevEdition() ? 1 : 0);
   is(panel.querySelectorAll(".panel-customization-placeholder").length, expectedPlaceholders, "The number of placeholders should be correct.");
   CustomizableUI.destroyWidget(kTestWidget2);
   wrapper = document.getElementById("wrapper-" + kTestWidget2);
   ok(!wrapper, "There should be a wrapper");
   let item = document.getElementById(kTestWidget2);
   ok(!item, "There should no longer be an item");
   yield endCustomizing();
 });
--- a/browser/components/customizableui/test/browser_880382_drag_wide_widgets_in_panel.js
+++ b/browser/components/customizableui/test/browser_880382_drag_wide_widgets_in_panel.js
@@ -19,17 +19,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, printButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let newWindowButton = document.getElementById("new-window-button");
   simulateItemDrag(zoomControls, newWindowButton);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
@@ -46,17 +45,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, savePageButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(CustomizableUI.inDefaultState, "Should be in default state.");
 });
 
 
 // Dragging the zoom controls to be before the new-window button should not move any widgets.
 add_task(function() {
@@ -71,17 +69,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, newWindowButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the zoom controls to be before the history-panelmenu should move the zoom-controls in to the row higher than the history-panelmenu.
 add_task(function() {
   yield startCustomizing();
@@ -95,17 +92,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, historyPanelMenu);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let newWindowButton = document.getElementById("new-window-button");
   simulateItemDrag(zoomControls, newWindowButton);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
@@ -123,17 +119,16 @@ add_task(function() {
                              "history-panelmenu",
                              "fullscreen-button",
                              "zoom-controls",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(zoomControls, preferencesButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let newWindowButton = document.getElementById("new-window-button");
   simulateItemDrag(zoomControls, newWindowButton);
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
@@ -151,17 +146,16 @@ add_task(function() {
                                "print-button",
                                "history-panelmenu",
                                "fullscreen-button",
                                "find-button",
                                "preferences-button",
                                "add-ons-button",
                                "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterInsert);
-  addSwitchToMetroButtonInWindows8(placementsAfterInsert);
   simulateItemDrag(openFileButton, zoomControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterInsert);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let palette = document.getElementById("customization-palette");
   // Check that the palette items are re-wrapped correctly.
   let feedWrapper = document.getElementById("wrapper-feed-button");
   let feedButton = document.getElementById("feed-button");
   is(feedButton.parentNode, feedWrapper,
@@ -191,17 +185,16 @@ add_task(function() {
                                "print-button",
                                "history-panelmenu",
                                "fullscreen-button",
                                "find-button",
                                "preferences-button",
                                "add-ons-button",
                                "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterInsert);
-  addSwitchToMetroButtonInWindows8(placementsAfterInsert);
   simulateItemDrag(openFileButton, editControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterInsert);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   let palette = document.getElementById("customization-palette");
   // Check that the palette items are re-wrapped correctly.
   let feedWrapper = document.getElementById("wrapper-feed-button");
   let feedButton = document.getElementById("feed-button");
   is(feedButton.parentNode, feedWrapper,
@@ -228,17 +221,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, zoomControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to be before the new-window-button should
 // move the zoom-controls before the edit-controls.
 add_task(function() {
@@ -253,17 +245,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, newWindowButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to be before the privatebrowsing-button
@@ -281,17 +272,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, privateBrowsingButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to be before the save-page-button
@@ -309,17 +299,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, savePageButton);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to the panel itself should append
@@ -336,17 +325,16 @@ add_task(function() {
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "edit-controls",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, panel);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(editControls, zoomControls);
   ok(CustomizableUI.inDefaultState, "Should still be in default state.");
 });
 
 // Dragging the edit-controls to the customization-palette and
@@ -362,17 +350,16 @@ add_task(function() {
                              "print-button",
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   let paletteChildElementCount = palette.childElementCount;
   simulateItemDrag(editControls, palette);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   is(paletteChildElementCount + 1, palette.childElementCount,
      "The palette should have a new child, congratulations!");
   is(editControls.parentNode.id, "wrapper-edit-controls",
      "The edit-controls should be properly wrapped.");
   is(editControls.parentNode.getAttribute("place"), "palette",
@@ -385,17 +372,17 @@ add_task(function() {
 });
 
 // Dragging the edit-controls to each of the panel placeholders
 // should append the edit-controls to the bottom of the panel.
 add_task(function() {
   yield startCustomizing();
   let editControls = document.getElementById("edit-controls");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
-  let numPlaceholders = isInWin8() ? 1 : 2;
+  let numPlaceholders = 2;
   for (let i = 0; i < numPlaceholders; i++) {
     // NB: We can't just iterate over all of the placeholders
     // because each drag-drop action recreates them.
     let placeholder = panel.getElementsByClassName("panel-customization-placeholder")[i];
     let placementsAfterMove = ["zoom-controls",
                                "new-window-button",
                                "privatebrowsing-button",
                                "save-page-button",
@@ -403,17 +390,16 @@ add_task(function() {
                                "history-panelmenu",
                                "fullscreen-button",
                                "find-button",
                                "preferences-button",
                                "add-ons-button",
                                "edit-controls",
                                "developer-button"];
     removeDeveloperButtonIfDevEdition(placementsAfterMove);
-    addSwitchToMetroButtonInWindows8(placementsAfterMove);
     simulateItemDrag(editControls, placeholder);
     assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
     let zoomControls = document.getElementById("zoom-controls");
     simulateItemDrag(editControls, zoomControls);
     ok(CustomizableUI.inDefaultState, "Should still be in default state.");
   }
 });
 
@@ -446,28 +432,21 @@ add_task(function() {
                              "history-panelmenu",
                              "fullscreen-button",
                              "find-button",
                              "preferences-button",
                              "add-ons-button",
                              "edit-controls",
                              "developer-button"];
   removeDeveloperButtonIfDevEdition(placementsAfterMove);
-  addSwitchToMetroButtonInWindows8(placementsAfterMove);
   simulateItemDrag(editControls, target);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
   let itemToDrag = "sync-button";
   let button = document.getElementById(itemToDrag);
   placementsAfterMove.splice(11, 0, itemToDrag);
-  if (isInWin8()) {
-    placementsAfterMove[10] = placementsAfterMove[11];
-    placementsAfterMove[11] = placementsAfterMove[12];
-    placementsAfterMove[12] = placementsAfterMove[13];
-    placementsAfterMove[13] = "edit-controls";
-  }
   simulateItemDrag(button, editControls);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterMove);
 
   // Put stuff back:
   let palette = document.getElementById("customization-palette");
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(button, palette);
   simulateItemDrag(editControls, zoomControls);
--- a/browser/components/customizableui/test/browser_890140_orphaned_placeholders.js
+++ b/browser/components/customizableui/test/browser_890140_orphaned_placeholders.js
@@ -5,44 +5,37 @@
 "use strict";
 
 requestLongerTimeout(2);
 
 // One orphaned item should have two placeholders next to it.
 add_task(function() {
   yield startCustomizing();
 
-  if (isInWin8()) {
-    CustomizableUI.removeWidgetFromArea("switch-to-metro-button");
-    ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
-  }
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
     ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   }
-  if (!isInWin8() && !isInDevEdition()) {
+  if (!isInDevEdition()) {
     ok(CustomizableUI.inDefaultState, "Should be in default state.");
   } else {
-    ok(!CustomizableUI.inDefaultState, "Should not be in default state if on Win8 or DevEdition.");
+    ok(!CustomizableUI.inDefaultState, "Should not be in default state if on DevEdition.");
   }
 
   let btn = document.getElementById("open-file-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
 
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placements);
   is(getVisiblePlaceholderCount(panel), 2, "Should only have 2 visible placeholders before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), 2, "Should only have 2 visible placeholders after re-entering");
 
-  if (isInWin8()) {
-    CustomizableUI.addWidgetToArea("switch-to-metro-button", CustomizableUI.AREA_PANEL);
-  }
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
 // Two orphaned items should have one placeholder next to them (case 1).
@@ -53,42 +46,35 @@ add_task(function() {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
   }
 
   let btn = document.getElementById("open-file-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
   let placementsAfterAppend = placements;
 
-  if (!isInWin8()) {
-    placementsAfterAppend = placements.concat(["open-file-button"]);
-    simulateItemDrag(btn, panel);
-  }
+  placementsAfterAppend = placements.concat(["open-file-button"]);
+  simulateItemDrag(btn, panel);
 
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterAppend);
 
-  if (isInWin8() && !isInDevEdition()) {
-    ok(CustomizableUI.inDefaultState, "Should be in default state if on Win8 and not on DevEdition.");
-  } else {
-    ok(!CustomizableUI.inDefaultState, "Should not be in default state if not Win8 or on DevEdition.");
-  }
+  ok(!CustomizableUI.inDefaultState, "Should not be in default state.");
 
   is(getVisiblePlaceholderCount(panel), 1, "Should only have 1 visible placeholder before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), 1, "Should only have 1 visible placeholder after re-entering");
 
   let palette = document.getElementById("customization-palette");
   simulateItemDrag(btn, palette);
 
-  if (!isInWin8()) {
-    btn = document.getElementById("open-file-button");
-    simulateItemDrag(btn, palette);
-  }
+  btn = document.getElementById("open-file-button");
+  simulateItemDrag(btn, palette);
+
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
   ok(CustomizableUI.inDefaultState, "Should be in default state again."); 
 });
 
 // Two orphaned items should have one placeholder next to them (case 2).
@@ -96,45 +82,35 @@ add_task(function() {
   yield startCustomizing();
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
   }
 
   let btn = document.getElementById("add-ons-button");
   let btn2 = document.getElementById("developer-button");
-  let btn3 = document.getElementById("switch-to-metro-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let palette = document.getElementById("customization-palette");
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
 
   let placementsAfterAppend = placements.filter(p => p != btn.id && p != btn2.id);
   simulateItemDrag(btn, palette);
   simulateItemDrag(btn2, palette);
 
-  if (isInWin8()) {
-    placementsAfterAppend = placementsAfterAppend.filter(p => p != btn3.id);
-    simulateItemDrag(btn3, palette);
-  }
-
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterAppend);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   is(getVisiblePlaceholderCount(panel), 1, "Should only have 1 visible placeholder before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), 1, "Should only have 1 visible placeholder after re-entering");
 
   simulateItemDrag(btn, panel);
   simulateItemDrag(btn2, panel);
 
-  if (isInWin8()) {
-    simulateItemDrag(btn3, panel);
-  }
-
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placements);
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
@@ -144,73 +120,54 @@ add_task(function() {
   yield startCustomizing();
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_PANEL);
   }
 
   let btn = document.getElementById("edit-controls");
   let btn2 = document.getElementById("developer-button");
-  let btn3 = document.getElementById("switch-to-metro-button");
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   let palette = document.getElementById("customization-palette");
   let placements = getAreaWidgetIds(CustomizableUI.AREA_PANEL);
 
   placements.pop();
   simulateItemDrag(btn2, palette);
 
-  if (isInWin8()) {
-    // Remove switch-to-metro-button
-    placements.pop();
-    simulateItemDrag(btn3, palette);
-  }
-
   let placementsAfterAppend = placements.concat([placements.shift()]);
   simulateItemDrag(btn, panel);
   assertAreaPlacements(CustomizableUI.AREA_PANEL, placementsAfterAppend);
   ok(!CustomizableUI.inDefaultState, "Should no longer be in default state.");
   is(getVisiblePlaceholderCount(panel), 3, "Should have 3 visible placeholders before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
   is(getVisiblePlaceholderCount(panel), 3, "Should have 3 visible placeholders after re-entering");
 
   simulateItemDrag(btn2, panel);
 
-  if (isInWin8()) {
-    simulateItemDrag(btn3, panel);
-  }
-
   let zoomControls = document.getElementById("zoom-controls");
   simulateItemDrag(btn, zoomControls);
 
   if (isInDevEdition()) {
     CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR, 2);
   }
 
   ok(CustomizableUI.inDefaultState, "Should be in default state again.");
 });
 
 // The default placements should have two placeholders at the bottom (or 1 in win8).
 add_task(function() {
   yield startCustomizing();
   let numPlaceholders = -1;
 
-  if (isInWin8()) {
-    if (isInDevEdition()) {
-      numPlaceholders = 2;
-    } else {
-      numPlaceholders = 1;
-    }
+  if (isInDevEdition()) {
+    numPlaceholders = 3;
   } else {
-    if (isInDevEdition()) {
-      numPlaceholders = 3;
-    } else {
-      numPlaceholders = 2;
-    }
+    numPlaceholders = 2;
   }
 
   let panel = document.getElementById(CustomizableUI.AREA_PANEL);
   ok(CustomizableUI.inDefaultState, "Should be in default state.");
   is(getVisiblePlaceholderCount(panel), numPlaceholders, "Should have " + numPlaceholders + " visible placeholders before exiting");
 
   yield endCustomizing();
   yield startCustomizing();
--- a/browser/components/customizableui/test/head.js
+++ b/browser/components/customizableui/test/head.js
@@ -122,28 +122,16 @@ function isInDevEdition() {
 }
 
 function removeDeveloperButtonIfDevEdition(areaPanelPlacements) {
   if (isInDevEdition()) {
     areaPanelPlacements.splice(areaPanelPlacements.indexOf("developer-button"), 1);
   }
 }
 
-function isInWin8() {
-  if (!Services.metro)
-    return false;
-  return Services.metro.supported;
-}
-
-function addSwitchToMetroButtonInWindows8(areaPanelPlacements) {
-  if (isInWin8()) {
-    areaPanelPlacements.push("switch-to-metro-button");
-  }
-}
-
 function assertAreaPlacements(areaId, expectedPlacements) {
   let actualPlacements = getAreaWidgetIds(areaId);
   placementArraysEqual(areaId, actualPlacements, expectedPlacements);
 }
 
 function placementArraysEqual(areaId, actualPlacements, expectedPlacements) {
   is(actualPlacements.length, expectedPlacements.length,
      "Area " + areaId + " should have " + expectedPlacements.length + " items.");
--- a/browser/components/preferences/advanced.js
+++ b/browser/components/preferences/advanced.js
@@ -620,32 +620,20 @@ var gAdvancedPane = {
    *                   ii    *f*    t/f     *true*
    *                   iii   0/1/2  f       false
    *                   iii   0/1/2  *t*     *true*
    */
   updateReadPrefs: function ()
   {
     var enabledPref = document.getElementById("app.update.enabled");
     var autoPref = document.getElementById("app.update.auto");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    var metroEnabledPref = document.getElementById("app.update.metro.enabled");
-#endif
-#endif
     var radiogroup = document.getElementById("updateRadioGroup");
 
     if (!enabledPref.value)   // Don't care for autoPref.value in this case.
       radiogroup.value="manual";    // 3. Never check for updates.
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    // enabledPref.value && autoPref.value && metroEnabledPref.value
-    else if (metroEnabledPref.value && this._showingWin8Prefs)
-      radiogroup.value="autoMetro"; // 0. Automatically install updates for both Metro and Desktop
-#endif
-#endif
     else if (autoPref.value)  // enabledPref.value && autoPref.value
       radiogroup.value="auto";      // 1. Automatically install updates for Desktop only
     else                      // enabledPref.value && !autoPref.value
       radiogroup.value="checkOnly"; // 2. Check, but let me choose
 
     var canCheck = Components.classes["@mozilla.org/updates/update-service;1"].
                      getService(Components.interfaces.nsIApplicationUpdateService).
                      canCheckForUpdates;
@@ -654,24 +642,16 @@ var gAdvancedPane = {
     // A locked pref is sufficient to disable the radiogroup.
     radiogroup.disabled = !canCheck || enabledPref.locked || autoPref.locked;
 
     var modePref = document.getElementById("app.update.mode");
     var warnIncompatible = document.getElementById("warnIncompatible");
     // the warnIncompatible checkbox value is set by readAddonWarn
     warnIncompatible.disabled = radiogroup.disabled || modePref.locked ||
                                 !enabledPref.value || !autoPref.value;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    if (this._showingWin8Prefs) {
-      warnIncompatible.disabled |= metroEnabledPref.value;
-      warnIncompatible.checked |= metroEnabledPref.value;
-    }
-#endif
-#endif
 
 #ifdef MOZ_MAINTENANCE_SERVICE
     // Check to see if the maintenance service is installed.
     // If it is don't show the preference at all.
     var installed;
     try {
       var wrk = Components.classes["@mozilla.org/windows-registry-key;1"]
                 .createInstance(Components.interfaces.nsIWindowsRegKey);
@@ -710,63 +690,35 @@ var gAdvancedPane = {
    * Sets the pref values based on the selected item of the radiogroup,
    * and sets the disabled state of the warnIncompatible checkbox accordingly.
    */
   updateWritePrefs: function ()
   {
     var enabledPref = document.getElementById("app.update.enabled");
     var autoPref = document.getElementById("app.update.auto");
     var modePref = document.getElementById("app.update.mode");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    var metroEnabledPref = document.getElementById("app.update.metro.enabled");
-    // Initialize the pref to false only if we're showing the option
-    if (this._showingWin8Prefs) {
-      metroEnabledPref.value = false;
-    }
-#endif
-#endif
     var radiogroup = document.getElementById("updateRadioGroup");
     switch (radiogroup.value) {
       case "auto":      // 1. Automatically install updates for Desktop only
         enabledPref.value = true;
         autoPref.value = true;
         break;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-      case "autoMetro": // 0. Automatically install updates for both Metro and Desktop
-        enabledPref.value = true;
-        autoPref.value = true;
-        metroEnabledPref.value = true;
-        modePref.value = 1;
-        break;
-#endif
-#endif
       case "checkOnly": // 2. Check, but let me choose
         enabledPref.value = true;
         autoPref.value = false;
         break;
       case "manual":    // 3. Never check for updates.
         enabledPref.value = false;
         autoPref.value = false;
     }
 
     var warnIncompatible = document.getElementById("warnIncompatible");
     warnIncompatible.disabled = enabledPref.locked || !enabledPref.value ||
                                 autoPref.locked || !autoPref.value ||
                                 modePref.locked;
-
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    if (this._showingWin8Prefs) {
-      warnIncompatible.disabled |= metroEnabledPref.value;
-      warnIncompatible.checked |= metroEnabledPref.value;
-    }
-#endif
-#endif
   },
 
   /**
    * Stores the value of the app.update.mode preference, which is a tristate
    * integer preference.  We store the value here so that we can properly
    * restore the preference value if the UI reflecting the preference value
    * is in a state which can represent either of two integer values (as
    * opposed to only one possible value in the other UI state).
--- a/browser/components/preferences/advanced.xul
+++ b/browser/components/preferences/advanced.xul
@@ -56,21 +56,16 @@
                   name="browser.cache.disk.smart_size.enabled"
                   inverted="true"
                   type="bool"/>
 
      <!-- Update tab -->
 #ifdef MOZ_UPDATER
       <preference id="app.update.enabled"              name="app.update.enabled"              type="bool"/>
       <preference id="app.update.auto"                 name="app.update.auto"                 type="bool"/>
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-      <preference id="app.update.metro.enabled"        name="app.update.metro.enabled"        type="bool"/>
-#endif
-#endif
       <preference id="app.update.mode"                 name="app.update.mode"                 type="int"/>
 
       <preference id="app.update.disable_button.showUpdateHistory"
                   name="app.update.disable_button.showUpdateHistory"
                   type="bool"/>
 
 #ifdef MOZ_MAINTENANCE_SERVICE
       <preference id="app.update.service.enabled"
@@ -305,28 +300,16 @@
 
         <!-- Update -->
         <tabpanel id="updatePanel" orient="vertical">
 #ifdef MOZ_UPDATER
           <groupbox id="updateApp">
             <caption label="&updateApp.label;"/>
             <radiogroup id="updateRadioGroup"
                         oncommand="gAdvancedPane.updateWritePrefs();">
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-              <radio id="autoMetro"
-                     value="autoMetro"
-                     label="&updateAutoMetro.label;"
-                     accesskey="&updateAutoMetro.accesskey;"/>
-              <hbox id="autoMetroIndent"
-                    class="indent">
-                <label value="&updateAutoMetroWarn.label;"/>
-              </hbox>
-#endif
-#endif
               <radio id="autoDesktop"
                      value="auto"
                      label="&updateAuto1.label;"
                      accesskey="&updateAuto1.accesskey;"/>
               <hbox class="indent">
                 <checkbox id="warnIncompatible"
                           label="&updateAutoAddonWarn.label;"
                           accesskey="&updateAutoAddonWarn.accesskey;"
--- a/browser/components/preferences/in-content/advanced.js
+++ b/browser/components/preferences/in-content/advanced.js
@@ -658,32 +658,20 @@ var gAdvancedPane = {
    *                   ii    *f*    t/f     *true*
    *                   iii   0/1/2  f       false
    *                   iii   0/1/2  *t*     *true*
    */
   updateReadPrefs: function ()
   {
     var enabledPref = document.getElementById("app.update.enabled");
     var autoPref = document.getElementById("app.update.auto");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    var metroEnabledPref = document.getElementById("app.update.metro.enabled");
-#endif
-#endif
     var radiogroup = document.getElementById("updateRadioGroup");
 
     if (!enabledPref.value)   // Don't care for autoPref.value in this case.
       radiogroup.value="manual";    // 3. Never check for updates.
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    // enabledPref.value && autoPref.value && metroEnabledPref.value
-    else if (metroEnabledPref.value && this._showingWin8Prefs)
-      radiogroup.value="autoMetro"; // 0. Automatically install updates
-#endif
-#endif
     else if (autoPref.value)  // enabledPref.value && autoPref.value
       radiogroup.value="auto";      // 1. Automatically install updates
     else                      // enabledPref.value && !autoPref.value
       radiogroup.value="checkOnly"; // 2. Check, but let me choose
 
     var canCheck = Components.classes["@mozilla.org/updates/update-service;1"].
                      getService(Components.interfaces.nsIApplicationUpdateService).
                      canCheckForUpdates;
@@ -692,24 +680,16 @@ var gAdvancedPane = {
     // A locked pref is sufficient to disable the radiogroup.
     radiogroup.disabled = !canCheck || enabledPref.locked || autoPref.locked;
 
     var modePref = document.getElementById("app.update.mode");
     var warnIncompatible = document.getElementById("warnIncompatible");
     // the warnIncompatible checkbox value is set by readAddonWarn
     warnIncompatible.disabled = radiogroup.disabled || modePref.locked ||
                                 !enabledPref.value || !autoPref.value;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    if (this._showingWin8Prefs) {
-      warnIncompatible.disabled |= metroEnabledPref.value;
-      warnIncompatible.checked |= metroEnabledPref.value;
-    }
-#endif
-#endif
 
 #ifdef MOZ_MAINTENANCE_SERVICE
     // Check to see if the maintenance service is installed.
     // If it is don't show the preference at all.
     var installed;
     try {
       var wrk = Components.classes["@mozilla.org/windows-registry-key;1"]
                 .createInstance(Components.interfaces.nsIWindowsRegKey);
@@ -730,62 +710,35 @@ var gAdvancedPane = {
    * Sets the pref values based on the selected item of the radiogroup,
    * and sets the disabled state of the warnIncompatible checkbox accordingly.
    */
   updateWritePrefs: function ()
   {
     var enabledPref = document.getElementById("app.update.enabled");
     var autoPref = document.getElementById("app.update.auto");
     var modePref = document.getElementById("app.update.mode");
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    var metroEnabledPref = document.getElementById("app.update.metro.enabled");
-    // Initialize the pref to false only if we're showing the option
-    if (this._showingWin8Prefs) {
-      metroEnabledPref.value = false;
-    }
-#endif
-#endif
     var radiogroup = document.getElementById("updateRadioGroup");
     switch (radiogroup.value) {
       case "auto":      // 1. Automatically install updates for Desktop only
         enabledPref.value = true;
         autoPref.value = true;
         break;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-      case "autoMetro": // 0. Automatically install updates for both Metro and Desktop
-        enabledPref.value = true;
-        autoPref.value = true;
-        metroEnabledPref.value = true;
-        modePref.value = 1;
-        break;
-#endif
-#endif
       case "checkOnly": // 2. Check, but let me choose
         enabledPref.value = true;
         autoPref.value = false;
         break;
       case "manual":    // 3. Never check for updates.
         enabledPref.value = false;
         autoPref.value = false;
     }
 
     var warnIncompatible = document.getElementById("warnIncompatible");
     warnIncompatible.disabled = enabledPref.locked || !enabledPref.value ||
                                 autoPref.locked || !autoPref.value ||
                                 modePref.locked;
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-    if (this._showingWin8Prefs) {
-      warnIncompatible.disabled |= metroEnabledPref.value;
-      warnIncompatible.checked |= metroEnabledPref.value;
-    }
-#endif
-#endif
   },
 
   /**
    * Stores the value of the app.update.mode preference, which is a tristate
    * integer preference.  We store the value here so that we can properly
    * restore the preference value if the UI reflecting the preference value
    * is in a state which can represent either of two integer values (as
    * opposed to only one possible value in the other UI state).
--- a/browser/components/preferences/in-content/advanced.xul
+++ b/browser/components/preferences/in-content/advanced.xul
@@ -65,23 +65,16 @@
  <!-- Update tab -->
 #ifdef MOZ_UPDATER
   <preference id="app.update.enabled"
               name="app.update.enabled"
               type="bool"/>
   <preference id="app.update.auto"
               name="app.update.auto"
               type="bool"/>
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-  <preference id="app.update.metro.enabled"
-              name="app.update.metro.enabled"
-              type="bool"/>
-#endif
-#endif
   <preference id="app.update.mode"
               name="app.update.mode"
               type="int"/>
 
   <preference id="app.update.disable_button.showUpdateHistory"
               name="app.update.disable_button.showUpdateHistory"
               type="bool"/>
 
@@ -324,28 +317,16 @@
     </tabpanel>
 
     <!-- Update -->
     <tabpanel id="updatePanel" orient="vertical">
 #ifdef MOZ_UPDATER
       <groupbox id="updateApp" align="start">
         <caption><label>&updateApp.label;</label></caption>
         <radiogroup id="updateRadioGroup" align="start">
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-              <radio id="autoMetro"
-                     value="autoMetro"
-                     label="&updateAutoMetro.label;"
-                     accesskey="&updateAutoMetro.accesskey;"/>
-              <hbox id="autoMetroIndent"
-                    class="indent">
-                <label>&updateAutoMetroWarn.label;</label>
-              </hbox>
-#endif
-#endif
           <radio id="autoDesktop"
                  value="auto"
                  label="&updateAuto1.label;"
                  accesskey="&updateAuto1.accesskey;"/>
           <hbox class="indent">
             <checkbox id="warnIncompatible"
                       label="&updateAutoAddonWarn.label;"
                       accesskey="&updateAutoAddonWarn.accesskey;"
--- a/browser/components/preferences/in-content/main.js
+++ b/browser/components/preferences/in-content/main.js
@@ -22,41 +22,16 @@ var gMainPane = {
     this.updateSetDefaultBrowser();
 #ifdef XP_WIN
     // In Windows 8 we launch the control panel since it's the only
     // way to get all file type association prefs. So we don't know
     // when the user will select the default.  We refresh here periodically
     // in case the default changes.  On other Windows OS's defaults can also
     // be set while the prefs are open.
     window.setInterval(this.updateSetDefaultBrowser, 1000);
-
-#ifdef MOZ_METRO
-    // Pre Windows 8, we should hide the update related settings
-    // for the Metro browser
-    let version = Components.classes["@mozilla.org/system-info;1"].
-                  getService(Components.interfaces.nsIPropertyBag2).
-                  getProperty("version");
-    let preWin8 = parseFloat(version) < 6.2;
-    this._showingWin8Prefs = !preWin8;
-    if (preWin8) {
-      ["autoMetro", "autoMetroIndent"].forEach(
-        function(id) document.getElementById(id).collapsed = true
-      );
-    } else {
-      let brandShortName =
-        document.getElementById("bundleBrand").getString("brandShortName");
-      let bundlePrefs = document.getElementById("bundlePreferences");
-      let autoDesktop = document.getElementById("autoDesktop");
-      autoDesktop.label =
-        bundlePrefs.getFormattedString("updateAutoDesktop.label",
-                                       [brandShortName]);
-      autoDesktop.accessKey =
-        bundlePrefs.getString("updateAutoDesktop.accessKey");
-    }
-#endif
 #endif
 #endif
 
     // set up the "use current page" label-changing listener
     this._updateUseCurrentButton();
     window.addEventListener("focus", this._updateUseCurrentButton.bind(this), false);
 
     this.updateBrowserStartupLastSession();
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -21,41 +21,16 @@ var gMainPane = {
     this.updateSetDefaultBrowser();
 #ifdef XP_WIN
     // In Windows 8 we launch the control panel since it's the only
     // way to get all file type association prefs. So we don't know
     // when the user will select the default.  We refresh here periodically
     // in case the default changes.  On other Windows OS's defaults can also
     // be set while the prefs are open.
     window.setInterval(this.updateSetDefaultBrowser, 1000);
-
-#ifdef MOZ_METRO
-    // Pre Windows 8, we should hide the update related settings
-    // for the Metro browser
-    let version = Components.classes["@mozilla.org/system-info;1"].
-                  getService(Components.interfaces.nsIPropertyBag2).
-                  getProperty("version");
-    let preWin8 = parseFloat(version) < 6.2;
-    this._showingWin8Prefs = !preWin8;
-    if (preWin8) {
-      ["autoMetro", "autoMetroIndent"].forEach(
-        function(id) document.getElementById(id).collapsed = true
-      );
-    } else {
-      let brandShortName =
-        document.getElementById("bundleBrand").getString("brandShortName");
-      let bundlePrefs = document.getElementById("bundlePreferences");
-      let autoDesktop = document.getElementById("autoDesktop");
-      autoDesktop.label =
-        bundlePrefs.getFormattedString("updateAutoDesktop.label",
-                                       [brandShortName]);
-      autoDesktop.accessKey =
-        bundlePrefs.getString("updateAutoDesktop.accessKey");
-    }
-#endif
 #endif
 #endif
 
     // set up the "use current page" label-changing listener
     this._updateUseCurrentButton();
     window.addEventListener("focus", this._updateUseCurrentButton.bind(this), false);
 
     this.updateBrowserStartupLastSession();
--- a/browser/extensions/Makefile.in
+++ b/browser/extensions/Makefile.in
@@ -1,16 +1,12 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
 # You can obtain one at http://mozilla.org/MPL/2.0/.
 
-ifdef MOZ_METRO
-GENERATED_DIRS = $(DIST)/bin/metro/chrome
-endif
-
 include $(topsrcdir)/config/rules.mk
 
 exclude_files = \
   test \
   README.mozilla \
   $(NULL)
 
 $(FINAL_TARGET)/chrome/pdfjs.manifest: $(GLOBAL_DEPS)
@@ -29,32 +25,8 @@ ifdef NIGHTLY_BUILD
 
 libs:: $(FINAL_TARGET)/chrome/shumway.manifest
 	$(PYTHON) $(topsrcdir)/config/nsinstall.py \
 	  $(srcdir)/shumway \
           $(foreach exclude,$(exclude_files), -X $(srcdir)/shumway/$(exclude)) \
           $(FINAL_TARGET)/chrome
 	$(call py_action,buildlist,$(FINAL_TARGET)/chrome.manifest 'manifest chrome/shumway.manifest')
 endif
-
-ifdef MOZ_METRO
-ifdef NIGHTLY_BUILD
-$(DIST)/bin/metro/chrome/pdfjs.manifest: $(GLOBAL_DEPS)
-	printf 'manifest pdfjs/chrome.manifest' > $@
-
-libs:: $(DIST)/bin/metro/chrome/pdfjs.manifest
-	$(PYTHON) $(topsrcdir)/config/nsinstall.py \
-	  $(srcdir)/pdfjs \
-          $(foreach exclude,$(exclude_files), -X $(srcdir)/pdfjs/$(exclude)) \
-          $(DIST)/bin/metro/chrome
-	$(call py_action,buildlist,$(DIST)/bin/metro/chrome.manifest 'manifest chrome/pdfjs.manifest')
-
-$(DIST)/bin/metro/chrome/shumway.manifest: $(GLOBAL_DEPS)
-	printf 'manifest shumway/chrome.manifest' > $@
-
-libs:: $(DIST)/bin/metro/chrome/shumway.manifest
-	$(PYTHON) $(topsrcdir)/config/nsinstall.py \
-	  $(srcdir)/shumway \
-          $(foreach exclude,$(exclude_files), -X $(srcdir)/shumway/$(exclude)) \
-          $(DIST)/bin/metro/chrome
-	$(call py_action,buildlist,$(DIST)/bin/metro/chrome.manifest 'manifest chrome/shumway.manifest')
-endif
-endif
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -881,46 +881,16 @@ bin/libfreebl_32int64_3.so
 @RESPATH@/webapprt/modules/DownloadView.jsm
 @RESPATH@/webapprt/modules/Startup.jsm
 @RESPATH@/webapprt/modules/WebappRT.jsm
 @RESPATH@/webapprt/modules/WebappManager.jsm
 @RESPATH@/webapprt/modules/RemoteDebugger.jsm
 @RESPATH@/webapprt/modules/WebRTCHandler.jsm
 #endif
 
-#ifdef MOZ_METRO
-@RESPATH@/components/MetroUIUtils.js
-@RESPATH@/components/MetroUIUtils.manifest
-[metro]
-; gre resources
-@BINPATH@/CommandExecuteHandler@BIN_SUFFIX@
-@RESPATH@/resources.pri
-@RESPATH@/VisualElementsManifest.xml
-@RESPATH@/tileresources
-; app dir resources
-@RESPATH@/metro/chrome.manifest
-@RESPATH@/metro/searchplugins
-@RESPATH@/metro/metroapp.ini
-@RESPATH@/metro/chrome/browser@JAREXT@
-@RESPATH@/metro/chrome/browser.manifest
-@RESPATH@/metro/chrome/chrome@JAREXT@
-@RESPATH@/metro/chrome/chrome.manifest
-@RESPATH@/metro/chrome/@AB_CD@@JAREXT@
-@RESPATH@/metro/chrome/@AB_CD@.manifest
-#ifdef NIGHTLY_BUILD
-@RESPATH@/metro/chrome/shumway.manifest
-@RESPATH@/metro/chrome/shumway/*
-@RESPATH@/metro/chrome/pdfjs.manifest
-@RESPATH@/metro/chrome/pdfjs/*
-#endif
-@RESPATH@/metro/components
-@RESPATH@/metro/defaults
-@RESPATH@/metro/modules
-#endif
-
 @RESPATH@/components/DataStore.manifest
 @RESPATH@/components/DataStoreImpl.js
 @RESPATH@/components/dom_datastore.xpt
 
 ; Shutdown Terminator
 @RESPATH@/components/nsTerminatorTelemetry.js
 @RESPATH@/components/terminator.manifest
 
--- a/browser/installer/windows/nsis/defines.nsi.in
+++ b/browser/installer/windows/nsis/defines.nsi.in
@@ -69,20 +69,16 @@
 !define ARCH "x86"
 !define MinSupportedVer "Microsoft Windows XP SP2"
 #endif
 
 #ifdef MOZ_MAINTENANCE_SERVICE
 !define MOZ_MAINTENANCE_SERVICE
 #endif
 
-#ifdef MOZ_METRO
-!define MOZ_METRO
-#endif
-
 # File details shared by both the installer and uninstaller
 VIProductVersion "1.0.0.0"
 VIAddVersionKey "ProductName"     "${BrandShortName}"
 VIAddVersionKey "CompanyName"     "${CompanyName}"
 #ifdef MOZ_OFFICIAL_BRANDING
 VIAddVersionKey "LegalTrademarks" "${BrandShortName} is a Trademark of The Mozilla Foundation."
 #endif
 VIAddVersionKey "LegalCopyright"  "${CompanyName}"
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -95,19 +95,16 @@ VIAddVersionKey "OriginalFilename" "setu
 !insertmacro LogDesktopShortcut
 !insertmacro LogQuickLaunchShortcut
 !insertmacro LogStartMenuShortcut
 !insertmacro ManualCloseAppPrompt
 !insertmacro PinnedToStartMenuLnkCount
 !insertmacro RegCleanAppHandler
 !insertmacro RegCleanMain
 !insertmacro RegCleanUninstall
-!ifdef MOZ_METRO
-!insertmacro RemoveDEHRegistrationIfMatching
-!endif
 !insertmacro RemovePrecompleteEntries
 !insertmacro SetAppLSPCategories
 !insertmacro SetBrandNameVars
 !insertmacro UpdateShortcutAppModelIDs
 !insertmacro UnloadUAC
 !insertmacro WriteRegStr2
 !insertmacro WriteRegDWORD2
 
@@ -335,19 +332,16 @@ Section "-Application" APP_IDX
   ${If} $AddDesktopSC == ""
     StrCpy $AddDesktopSC "1"
   ${EndIf}
 
   ${LogHeader} "Adding Registry Entries"
   SetShellVarContext current  ; Set SHCTX to HKCU
   ${RegCleanMain} "Software\Mozilla"
   ${RegCleanUninstall}
-!ifdef MOZ_METRO
-  ${ResetWin8PromptKeys} "HKCU" ""
-!endif
   ${UpdateProtocolHandlers}
 
   ClearErrors
   WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
   ${If} ${Errors}
     StrCpy $TmpVal "HKCU" ; used primarily for logging
   ${Else}
     SetShellVarContext all  ; Set SHCTX to HKLM
@@ -423,34 +417,22 @@ Section "-Application" APP_IDX
     ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
     StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
     ${If} $AddDesktopSC == 1
     ${OrIf} $AddStartMenuSC == 1
       WriteRegDWORD HKCU "$0" "IconsVisible" 1
     ${Else}
       WriteRegDWORD HKCU "$0" "IconsVisible" 0
     ${EndIf}
-!ifdef MOZ_METRO
-    ${CleanupMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                        "FirefoxURL" \
-                                        "FirefoxHTML"
-    ${AddMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                    "$INSTDIR\CommandExecuteHandler.exe" \
-                                    $AppUserModelID \
-                                    "FirefoxURL" \
-                                    "FirefoxHTML"
-!else
-  ; The metro browser is not enabled by the mozconfig.
   ${If} ${AtLeastWin8}
     ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
                              $AppUserModelID \
                              "FirefoxURL" \
                              "FirefoxHTML"
   ${EndIf}
-!endif
   ${EndIf}
 
 !ifdef MOZ_MAINTENANCE_SERVICE
   ; If the maintenance service page was displayed then a value was already 
   ; explicitly selected for installing the maintenance service and 
   ; and so InstallMaintenanceService will already be 0 or 1.
   ; If the maintenance service page was not displayed then 
   ; InstallMaintenanceService will be equal to "".
@@ -810,31 +792,17 @@ Function LaunchApp
 !endif
 
   ClearErrors
   ${GetParameters} $0
   ${GetOptions} "$0" "/UAC:" $1
   ${If} ${Errors}
     StrCpy $1 "0"
     StrCpy $2 "0"
-!ifdef MOZ_METRO
-    ; Check to see if this install location is currently set as the
-    ; default browser.
-    AppAssocReg::QueryAppIsDefaultAll "${AppRegName}" "effective"
-    Pop $1
-    ; Check for a last run type to see if metro was the last browser
-    ; front end in use.
-    ReadRegDWORD $2 HKCU "Software\Mozilla\Firefox" "MetroLastAHE"
-!endif
     ${If} $1 == "1"
-    ${AndIf} $2 == "1" ; 1 equals AHE_IMMERSIVE
-      ; Launch into metro
-      Exec "$\"$INSTDIR\CommandExecuteHandler.exe$\" --launchmetro"
-    ${Else}
-      ; Launch into desktop
       Exec "$\"$INSTDIR\${FileMainEXE}$\""
     ${EndIf}
   ${Else}
     GetFunctionAddress $0 LaunchAppFromElevatedProcess
     UAC::ExecCodeSegment $0
   ${EndIf}
 FunctionEnd
 
@@ -845,30 +813,17 @@ Function LaunchAppFromElevatedProcess
   ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" ""
   ${GetPathFromString} "$0" $0
   ${GetParent} "$0" $1
   ; Set our current working directory to the application's install directory
   ; otherwise the 7-Zip temp directory will be in use and won't be deleted.
   SetOutPath "$1"
   StrCpy $2 "0"
   StrCpy $3 "0"
-!ifdef MOZ_METRO
-  ; Check to see if this install location is currently set as the
-  ; default browser.
-  AppAssocReg::QueryAppIsDefaultAll "${AppRegName}" "effective"
-  Pop $2
-  ; Check for a last run type to see if metro was the last browser
-  ; front end in use.
-  ReadRegDWORD $3 HKCU "Software\Mozilla\Firefox" "MetroLastAHE"
-!endif
   ${If} $2 == "1"
-  ${AndIf} $3 == "1" ; 1 equals AHE_IMMERSIVE
-    ; Launch into metro
-    Exec "$\"$1\CommandExecuteHandler.exe$\" --launchmetro"
-  ${Else}
     ; Launch into desktop
     Exec "$\"$0$\""
   ${EndIf}
 FunctionEnd
 
 ################################################################################
 # Language
 
@@ -945,25 +900,17 @@ Function preShortcuts
 FunctionEnd
 
 Function leaveShortcuts
   ${MUI_INSTALLOPTIONS_READ} $0 "shortcuts.ini" "Settings" "State"
   ${If} $0 != 0
     Abort
   ${EndIf}
   ${MUI_INSTALLOPTIONS_READ} $AddDesktopSC "shortcuts.ini" "Field 2" "State"
-
-  ; If we have a Metro browser and are Win8, then we don't have a Field 3
-!ifdef MOZ_METRO
-  ${Unless} ${AtLeastWin8}
-!endif
-    ${MUI_INSTALLOPTIONS_READ} $AddStartMenuSC "shortcuts.ini" "Field 3" "State"
-!ifdef MOZ_METRO
-  ${EndIf}
-!endif
+  ${MUI_INSTALLOPTIONS_READ} $AddStartMenuSC "shortcuts.ini" "Field 3" "State"
 
   ; Don't install the quick launch shortcut on Windows 7
   ${Unless} ${AtLeastWin7}
     ${MUI_INSTALLOPTIONS_READ} $AddQuickLaunchSC "shortcuts.ini" "Field 4" "State"
   ${EndUnless}
 
   ${If} $InstallType == ${INSTALLTYPE_CUSTOM}
     Call CheckExistingInstall
@@ -1232,31 +1179,23 @@ Function .onInit
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Text   "$(ICONS_DESKTOP)"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Left   "0"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Right  "-1"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Top    "20"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Bottom "30"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" State  "1"
   WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Flags  "GROUP"
 
-  ; Don't offer to install the start menu shortcut on Windows 8
-  ; for Metro builds.
-!ifdef MOZ_METRO
-  ${Unless} ${AtLeastWin8}
-!endif
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Type   "checkbox"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Text   "$(ICONS_STARTMENU)"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Left   "0"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Right  "-1"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Top    "40"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Bottom "50"
-    WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" State  "1"
-!ifdef MOZ_METRO
-  ${EndIf}
-!endif
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Type   "checkbox"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Text   "$(ICONS_STARTMENU)"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Left   "0"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Right  "-1"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Top    "40"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Bottom "50"
+  WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" State  "1"
 
   ; Don't offer to install the quick launch shortcut on Windows 7
   ${Unless} ${AtLeastWin7}
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Type   "checkbox"
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Text   "$(ICONS_QUICKLAUNCH)"
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Left   "0"
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Right  "-1"
     WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Top    "60"
--- a/browser/installer/windows/nsis/shared.nsh
+++ b/browser/installer/windows/nsis/shared.nsh
@@ -18,49 +18,16 @@
 !endif
 !ifndef SE_PRIVILEGE_ENABLED
   !define SE_PRIVILEGE_ENABLED    0x00000002
 !endif
 !ifndef HKEY_USERS
   !define HKEY_USERS              0x80000003
 !endif
 
-; Does metro registration for the command execute handler
-Function RegisterCEH
-!ifdef MOZ_METRO
-  ${If} ${AtLeastWin8}
-    ${CleanupMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                        "FirefoxURL" \
-                                        "FirefoxHTML"
-    ${AddMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                    "$INSTDIR\CommandExecuteHandler.exe" \
-                                    $AppUserModelID \
-                                    "FirefoxURL" \
-                                    "FirefoxHTML"
-  ${EndIf}
-!endif
-FunctionEnd
-
-; If we're in Win8 make sure we have a start menu shortcut and that it has
-; the correct AppuserModelID so that the Metro browser has a Metro tile.
-Function RegisterStartMenuTile
-!ifdef MOZ_METRO
-  ${If} ${AtLeastWin8}
-    CreateShortCut "$SMPROGRAMS\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}"
-    ${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk"
-      ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\${BrandFullName}.lnk" \
-                                             "$INSTDIR"
-      ${If} "$AppUserModelID" != ""
-        ApplicationID::Set "$SMPROGRAMS\${BrandFullName}.lnk" "$AppUserModelID" "true"
-      ${EndIf}
-    ${EndIf}
-  ${EndIf}
-!endif
-FunctionEnd
-
 !macro PostUpdate
 
   ; PostUpdate is called from both session 0 and from the user session
   ; for service updates, make sure that we only register with the user session
   ; Otherwise ApplicationID::Set can fail intermittently with a file in use error.
   System::Call "kernel32::GetCurrentProcessId() i.r0"
   System::Call "kernel32::ProcessIdToSessionId(i $0, *i ${NSIS_MAX_STRLEN} r9)"
 
@@ -71,20 +38,16 @@ FunctionEnd
   ${If} $0 == "FirefoxURL"
   ${AndIf} $9 != 0 ; We're not running in session 0
     ReadRegStr $0 HKCU "Software\Classes\FirefoxURL\shell\open\command" ""
     ${GetPathFromString} "$0" $0
     ${GetParent} "$0" $0
     ${If} ${FileExists} "$0"
       ${GetLongPath} "$0" $0
     ${EndIf}
-    ${If} "$0" == "$INSTDIR"
-      ; Win8 specific registration
-      Call RegisterStartMenuTile
-    ${EndIf}
   ${EndIf}
 
   ${CreateShortcutsLog}
 
   ; Remove registry entries for non-existent apps and for apps that point to our
   ; install location in the Software\Mozilla key and uninstall registry entries
   ; that point to our install location for both HKCU and HKLM.
   SetShellVarContext current  ; Set SHCTX to the current user (e.g. HKCU)
@@ -218,38 +181,22 @@ FunctionEnd
       ; IsAdmin check and the permissions check, the maintenance service
       ; will just fail to be attempted to be installed.
       nsExec::Exec "$\"$INSTDIR\maintenanceservice_installer.exe$\""
     ${EndIf}
   ${EndIf}
 !endif
 
 ; Register the DEH
-!ifdef MOZ_METRO
-  ${If} ${AtLeastWin8}
-  ${AndIf} $9 != 0 ; We're not running in session 0
-    ; If RegisterCEH is called too close to changing the shortcut AppUserModelID
-    ; and if the tile image is not already in cache.  Then Windows won't refresh
-    ; the tile image on the start screen.  So wait before calling RegisterCEH.
-    ; We only need to do this when the DEH doesn't already exist.
-    ReadRegStr $0 HKCU "Software\Classes\FirefoxURL\shell\open\command" "DelegateExecute"
-    ${If} $0 != ${DELEGATE_EXECUTE_HANDLER_ID}
-      Sleep 3000
-    ${EndIf}
-    Call RegisterCEH
-  ${EndIf}
-!else
-  ; The metro browser is not enabled by the mozconfig.
-  ${If} ${AtLeastWin8}
-    ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                             $AppUserModelID \
-                             "FirefoxURL" \
-                             "FirefoxHTML"
-  ${EndIf}
-!endif
+${If} ${AtLeastWin8}
+  ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
+                           $AppUserModelID \
+                           "FirefoxURL" \
+                           "FirefoxHTML"
+${EndIf}
 !macroend
 !define PostUpdate "!insertmacro PostUpdate"
 
 !macro SetAsDefaultAppGlobal
   ${RemoveDeprecatedKeys} ; Does not use SHCTX
 
   SetShellVarContext all      ; Set SHCTX to all users (e.g. HKLM)
   ${SetHandlers} ; Uses SHCTX
@@ -451,18 +398,16 @@ FunctionEnd
 
   ; An empty string is used for the 5th param because FirefoxHTML is not a
   ; protocol handler
   ${AddDisabledDDEHandlerValues} "FirefoxHTML" "$2" "$8,1" \
                                  "${AppRegName} HTML Document" ""
 
   ${AddDisabledDDEHandlerValues} "FirefoxURL" "$2" "$8,1" "${AppRegName} URL" \
                                  "true"
-  Call RegisterCEH
-
   ; An empty string is used for the 4th & 5th params because the following
   ; protocol handlers already have a display name and the additional keys
   ; required for a protocol handler.
   ${AddDisabledDDEHandlerValues} "ftp" "$2" "$8,1" "" ""
   ${AddDisabledDDEHandlerValues} "http" "$2" "$8,1" "" ""
   ${AddDisabledDDEHandlerValues} "https" "$2" "$8,1" "" ""
 !macroend
 !define SetHandlers "!insertmacro SetHandlers"
@@ -884,28 +829,16 @@ FunctionEnd
     DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxHTML_.shtml"
     DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxURL_ftp"
     DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxURL_http"
     DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxURL_https"
   ${EndIf}
 !macroend
 !define ResetWin8PromptKeys "!insertmacro ResetWin8PromptKeys"
 
-!ifdef MOZ_METRO
-; Resets Win8+ Metro specific splash screen info. Relies
-; on AppUserModelID.
-!macro ResetWin8MetroSplash
-  ${If} ${AtLeastWin8}
-  ${AndIf} "$AppUserModelID" != ""
-    DeleteRegKey HKCR "Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\DefaultBrowser_NOPUBLISHERID\SplashScreen\DefaultBrowser_NOPUBLISHERID!$AppUserModelID"
-  ${EndIf}
-!macroend
-!define ResetWin8MetroSplash "!insertmacro ResetWin8MetroSplash"
-!endif
-
 ; Adds SE_RESTORE_NAME privs
 !macro AcquireSERestoreName
   StrCpy $R1 0
 
   System::Call "kernel32::GetCurrentProcess() i .R0"
   System::Call "advapi32::OpenProcessToken(i R0, i ${TOKEN_QUERY}|${TOKEN_ADJUST_PRIVILEGES}, \
                                           *i R1R1) i .R0"
   ${If} $R0 != 0
@@ -1650,17 +1583,16 @@ Function SetAsDefaultAppUserHKCU
   ${EndUnless}
 
   SetShellVarContext current  ; Set SHCTX to the current user (e.g. HKCU)
 
   ${If} ${AtLeastWin8}
     ${SetStartMenuInternet} "HKCU"
     ${FixShellIconHandler} "HKCU"
     ${FixClassKeys} ; Does not use SHCTX
-    Call RegisterStartMenuTile
   ${EndIf}
 
   ${SetHandlers}
 
   ${If} ${AtLeastWinVista}
     ; Only register as the handler on Vista and above if the app registry name
     ; exists under the RegisteredApplications registry key. The protocol and
     ; file handlers set previously at the user level will associate this install
--- a/browser/installer/windows/nsis/uninstaller.nsi
+++ b/browser/installer/windows/nsis/uninstaller.nsi
@@ -79,19 +79,16 @@ VIAddVersionKey "OriginalFilename" "help
 !insertmacro IsUserAdmin
 !insertmacro LogDesktopShortcut
 !insertmacro LogQuickLaunchShortcut
 !insertmacro LogStartMenuShortcut
 !insertmacro PinnedToStartMenuLnkCount
 !insertmacro RegCleanAppHandler
 !insertmacro RegCleanMain
 !insertmacro RegCleanUninstall
-!ifdef MOZ_METRO
-!insertmacro RemoveDEHRegistrationIfMatching
-!endif
 !insertmacro SetAppLSPCategories
 !insertmacro SetBrandNameVars
 !insertmacro UpdateShortcutAppModelIDs
 !insertmacro UnloadUAC
 !insertmacro WriteRegDWORD2
 !insertmacro WriteRegStr2
 
 !insertmacro un.ChangeMUIHeaderImage
@@ -103,19 +100,16 @@ VIAddVersionKey "OriginalFilename" "help
 !insertmacro un.GetSecondInstallPath
 !insertmacro un.InitHashAppModelId
 !insertmacro un.ManualCloseAppPrompt
 !insertmacro un.RegCleanAppHandler
 !insertmacro un.RegCleanFileHandler
 !insertmacro un.RegCleanMain
 !insertmacro un.RegCleanUninstall
 !insertmacro un.RegCleanProtocolHandler
-!ifdef MOZ_METRO
-!insertmacro un.RemoveDEHRegistrationIfMatching
-!endif
 !insertmacro un.RemoveQuotesFromPath
 !insertmacro un.RemovePrecompleteEntries
 !insertmacro un.SetAppLSPCategories
 !insertmacro un.SetBrandNameVars
 
 !include shared.nsh
 
 ; Helper macros for ui callbacks. Insert these after shared.nsh
@@ -279,33 +273,22 @@ Section "Uninstall"
     DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
     StrCpy $TmpVal "HKLM" ; used primarily for logging
     ${un.RegCleanMain} "Software\Mozilla"
     ${un.RegCleanUninstall}
     ${un.DeleteShortcuts}
     ${un.SetAppLSPCategories}
   ${EndIf}
 
-!ifdef MOZ_METRO
-  ${If} ${AtLeastWin8}
-    ${un.CleanupMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                                           "FirefoxURL" \
-                                           "FirefoxHTML"
-  ${EndIf}
-  ${ResetWin8PromptKeys} "HKCU" ""
-  ${ResetWin8MetroSplash}
-!else
-  ; The metro browser is not enabled by the mozconfig.
   ${If} ${AtLeastWin8}
     ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
                              $AppUserModelID \
                              "FirefoxURL" \
                              "FirefoxHTML"
   ${EndIf}
-!endif
 
   ${un.RegCleanAppHandler} "FirefoxURL"
   ${un.RegCleanAppHandler} "FirefoxHTML"
   ${un.RegCleanProtocolHandler} "ftp"
   ${un.RegCleanProtocolHandler} "http"
   ${un.RegCleanProtocolHandler} "https"
 
   ClearErrors
--- a/browser/locales/Makefile.in
+++ b/browser/locales/Makefile.in
@@ -66,39 +66,28 @@ UNINSTALLER_PACKAGE_HOOK = $(RM) -r $(ST
 
 STUB_HOOK = $(NSINSTALL) -D '$(_ABS_DIST)/$(PKG_INST_PATH)'; \
     $(RM) '$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_STUB_BASENAME).exe'; \
     cp ../installer/windows/l10ngen/stub.exe '$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_STUB_BASENAME).exe'; \
     chmod 0755 '$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_STUB_BASENAME).exe'; \
     $(NULL)
 endif
 
-ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
-SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/metrolist.txt))
-else
 SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt)) ddg
-endif
 SEARCHPLUGINS_PATH := $(FINAL_TARGET)/searchplugins
-# metro build call a searchplugins target for search engine plugins
-.PHONY: searchplugins
 SEARCHPLUGINS_TARGET := libs searchplugins
 SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_NAMES)),$(or $(wildcard $(call EN_US_OR_L10N_FILE,searchplugins/$(plugin))),$(info Missing searchplugin: $(plugin))))
 # Some locale-specific search plugins may have preprocessor directives, but the
 # default en-US ones do not.
 SEARCHPLUGINS_FLAGS := --silence-missing-directive-warnings
 PP_TARGETS += SEARCHPLUGINS
 
 # Required for l10n.mk - defines a list of app sub dirs that should
 # be included in langpack xpis.
-ifdef MOZ_METRO
-# metro build, include both app folders
-DIST_SUBDIRS = browser metro
-else
 DIST_SUBDIRS = $(DIST_SUBDIR)
-endif
 
 include $(topsrcdir)/config/rules.mk
 
 include $(topsrcdir)/toolkit/locales/l10n.mk
 
 $(STAGEDIST): $(DIST)/branding
 
 $(DIST)/branding:
@@ -133,19 +122,16 @@ libs-%:
 	@$(MAKE) -C ../../toolkit/locales libs-$*
 	@$(MAKE) -C ../../services/sync/locales AB_CD=$* XPI_NAME=locale-$*
 ifdef MOZ_WEBAPP_RUNTIME
 	@$(MAKE) -C ../../webapprt/locales AB_CD=$* XPI_NAME=locale-$*
 endif
 	@$(MAKE) -C ../../extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$*
 	@$(MAKE) -C ../../intl/locales AB_CD=$* XPI_NAME=locale-$*
 	@$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR)
-ifdef MOZ_METRO
-	@$(MAKE) -C ../metro/locales AB_CD=$* XPI_NAME=locale-$*
-endif
 	@$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$*
 
 repackage-win32-installer: WIN32_INSTALLER_OUT=$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe
 repackage-win32-installer: $(call ESCAPE_WILDCARD,$(WIN32_INSTALLER_IN)) $(SUBMAKEFILES) libs-$(AB_CD)
 	@echo 'Repackaging $(WIN32_INSTALLER_IN) into $(WIN32_INSTALLER_OUT).'
 	$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY) export
 	$(MAKE) -C ../installer/windows CONFIG_DIR=l10ngen l10ngen/setup.exe l10ngen/7zSD.sfx
 	$(MAKE) repackage-zip \
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -807,18 +807,16 @@ just addresses the organization to follo
      and pluginActivateAlways.label strings above on a single line. This must be
      a CSS length value. -->
 <!ENTITY pluginNotification.width "28em">
 
 <!ENTITY uiTour.infoPanel.close "Close">
 
 <!ENTITY appMenuSidebars.label         "Sidebars">
 
-<!ENTITY switchToMetroCmd2.label       "Relaunch in &brandShortName; for Windows 8 Touch">
-
 <!-- LOCALIZATION NOTE: (panicButton.view.mainTimeframeDesc, panicButton.view.5min, panicButton.view.2hr, panicButton.view.day):
      The .mainTimeframeDesc string combined with any of the 3 others is meant to form a complete sentence, e.g. "Forget the last: Five minutes".
      Please ensure that this remains the case in the translation. -->
 <!ENTITY panicButton.view.mainTimeframeDesc       "Forget the last:">
 <!ENTITY panicButton.view.5min                    "Five minutes">
 <!ENTITY panicButton.view.2hr                     "Two hours">
 <!ENTITY panicButton.view.day                     "24 hours">
 
--- a/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties
+++ b/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties
@@ -28,20 +28,16 @@ developer-button.tooltiptext2 = Open Web
 
 sidebar-button.label = Sidebars
 sidebar-button.tooltiptext2 = Show sidebars
 
 add-ons-button.label = Add-ons
 # LOCALIZATION NOTE(add-ons-button.tooltiptext3): %S is the keyboard shortcut
 add-ons-button.tooltiptext3 = Manage your add-ons (%S)
 
-switch-to-metro-button2.label = Windows 8 Touch
-# LOCALIZATION NOTE(switch-to-metro-button2.tooltiptext): %S is the brand short name
-switch-to-metro-button2.tooltiptext = Relaunch in %S for Windows 8 Touch
-
 preferences-button.label = Preferences
 preferences-button.tooltiptext2 = Open preferences
 preferences-button.tooltiptext.withshortcut = Open preferences (%S)
 # LOCALIZATION NOTE (preferences-button.labelWin): Windows-only label for Options
 preferences-button.labelWin = Options
 # LOCALIZATION NOTE (preferences-button.tooltipWin): Windows-only tooltip for Options
 preferences-button.tooltipWin2 = Open options
 
--- a/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
@@ -69,33 +69,26 @@
 <!ENTITY clearOfflineAppCacheNow.label   "Clear Now">
 <!ENTITY clearOfflineAppCacheNow.accesskey "N">
 <!ENTITY overrideSmartCacheSize.label    "Override automatic cache management">
 <!ENTITY overrideSmartCacheSize.accesskey "O">
 
 <!ENTITY updateTab.label                 "Update">
 
 <!ENTITY updateApp.label                 "&brandShortName; updates:">
-<!-- Note either updateAuto1 is used or (updateAutoMetro and updateAutoDesktop),
-     so re-using accesss key in updateAuto1 is OK. updateAutoDesktop can be found
-     in preferences.properties -->
 <!ENTITY updateAuto1.label               "Automatically install updates (recommended: improved security)">
 <!ENTITY updateAuto1.accesskey           "A">
-<!ENTITY updateAutoMetro.label           "Automatically update from desktop and Windows 8 style &brandShortName;">
-<!ENTITY updateAutoMetro.accesskey       "s">
 <!ENTITY updateCheck.label               "Check for updates, but let me choose whether to install them">
 <!ENTITY updateCheck.accesskey           "C">
 <!ENTITY updateManual.label              "Never check for updates (not recommended: security risk)">
 <!ENTITY updateManual.accesskey          "N">
 
 <!ENTITY updateAutoAddonWarn.label       "Warn me if this will disable any of my add-ons">
 <!ENTITY updateAutoAddonWarn.accesskey   "W">
 
-<!ENTITY updateAutoMetroWarn.label       "(Windows 8 style &brandShortName; does not check add-on compatibility)">
-
 <!ENTITY updateHistory.label             "Show Update History">
 <!ENTITY updateHistory.accesskey         "p">
 
 <!ENTITY useService.label                "Use a background service to install updates">
 <!ENTITY useService.accesskey            "b">
 
 <!ENTITY updateOthers.label              "Automatically update:">
 <!ENTITY enableSearchUpdate.label        "Search Engines">
--- a/browser/locales/en-US/chrome/browser/preferences/preferences.properties
+++ b/browser/locales/en-US/chrome/browser/preferences/preferences.properties
@@ -131,21 +131,16 @@ actualDiskCacheSizeCalculated=Calculating web content cache sizeā€¦
 
 ####Preferences::Advanced::Network
 #LOCALIZATION NOTE: The next string is for the disk usage of the application cache.
 #   e.g., "Your application cache is currently using 200 MB"
 #   %1$S = size
 #   %2$S = unit (MB, KB, etc.)
 actualAppCacheSize=Your application cache is currently using %1$S %2$S of disk space
 
-###Preferences::Advanced::Update
-#LOCALIZATION NOTE: The next string is for updating in Windows 8 only instead of updateAuto1.label.  %S = brandShortName
-updateAutoDesktop.label=Automatically install updates from desktop %S
-updateAutoDesktop.accessKey=A
-
 syncUnlink.title=Do you want to unlink your device?
 syncUnlink.label=This device will no longer be associated with your Sync account. All of your personal data, both on this device and in your Sync account, will remain intact.
 syncUnlinkConfirm.label=Unlink
 
 # LOCALIZATION NOTE (featureEnableRequiresRestart, featureDisableRequiresRestart, restartTitle): %S = brandShortName
 featureEnableRequiresRestart=%S must restart to enable this feature.
 featureDisableRequiresRestart=%S must restart to disable this feature.
 shouldRestartTitle=Restart %S
--- a/browser/locales/en-US/chrome/browser/syncSetup.dtd
+++ b/browser/locales/en-US/chrome/browser/syncSetup.dtd
@@ -28,18 +28,16 @@
 <!-- New Account Page 1: Basic Account Info -->
 <!ENTITY setup.newAccountDetailsPage.title.label "Account Details">
 <!ENTITY setup.emailAddress.label     "Email Address">
 <!ENTITY setup.emailAddress.accesskey "E">
 <!ENTITY setup.choosePassword.label      "Choose a Password">
 <!ENTITY setup.choosePassword.accesskey  "P">
 <!ENTITY setup.confirmPassword.label     "Confirm Password">
 <!ENTITY setup.confirmPassword.accesskey "m">
-<!ENTITY setup.setupMetro.label     "Sync with Windows 8 style &brandShortName;">
-<!ENTITY setup.setupMetro.accesskey "S">
 
 <!-- LOCALIZATION NOTE: tosAgree1, tosLink, tosAgree2, ppLink, tosAgree3 are
      joined with implicit white space, so spaces in the strings aren't necessary -->
 <!ENTITY setup.tosAgree1.label      "I agree to the">
 <!ENTITY setup.tosAgree1.accesskey  "a">
 <!ENTITY setup.tosLink.label        "Terms of Service">
 <!ENTITY setup.tosAgree2.label      "and the">
 <!ENTITY setup.ppLink.label         "Privacy Policy">
--- a/browser/locales/en-US/profile/bookmarks.inc
+++ b/browser/locales/en-US/profile/bookmarks.inc
@@ -32,14 +32,9 @@
 # LOCALIZATION NOTE (firefox_community):
 # link title for https://www.mozilla.org/en-US/contribute/
 #define firefox_community Get Involved
 
 # LOCALIZATION NOTE (firefox_about):
 # link title for https://www.mozilla.org/en-US/about/
 #define firefox_about About Us
 
-# LOCALIZATION NOTE (firefox_feedback):
-# link title for browser feedback page
-# currently used by Metro only: https://input.mozilla.org/feedback/metrofirefox
-#define firefox_feedback Give Feedback
-
 #unfilter emptyLines
deleted file mode 100644
--- a/browser/locales/en-US/searchplugins/bingmetrofx.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-    <ShortName>Bing</ShortName>
-    <Description>Bing. Search by Microsoft.</Description>
-    <InputEncoding>UTF-8</InputEncoding>
-    <Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAEACADaCwAAJgAAACAgAAABAAgAlAIAAAAMAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIAgAAAJCRaDYAAAAJcEhZcwAACxMAAAsTAQCanBgAAApPaUNDUFBob3Rvc2hvcCBJQ0MgcHJvZmlsZQAAeNqdU2dUU+kWPffe9EJLiICUS29SFQggUkKLgBSRJiohCRBKiCGh2RVRwRFFRQQbyKCIA46OgIwVUSwMigrYB+Qhoo6Do4iKyvvhe6Nr1rz35s3+tdc+56zznbPPB8AIDJZIM1E1gAypQh4R4IPHxMbh5C5AgQokcAAQCLNkIXP9IwEA+H48PCsiwAe+AAF40wsIAMBNm8AwHIf/D+pCmVwBgIQBwHSROEsIgBQAQHqOQqYAQEYBgJ2YJlMAoAQAYMtjYuMAUC0AYCd/5tMAgJ34mXsBAFuUIRUBoJEAIBNliEQAaDsArM9WikUAWDAAFGZLxDkA2C0AMElXZkgAsLcAwM4QC7IACAwAMFGIhSkABHsAYMgjI3gAhJkAFEbyVzzxK64Q5yoAAHiZsjy5JDlFgVsILXEHV1cuHijOSRcrFDZhAmGaQC7CeZkZMoE0D+DzzAAAoJEVEeCD8/14zg6uzs42jrYOXy3qvwb/ImJi4/7lz6twQAAA4XR+0f4sL7MagDsGgG3+oiXuBGheC6B194tmsg9AtQCg6dpX83D4fjw8RaGQudnZ5eTk2ErEQlthyld9/mfCX8BX/Wz5fjz89/XgvuIkgTJdgUcE+ODCzPRMpRzPkgmEYtzmj0f8twv//B3TIsRJYrlYKhTjURJxjkSajPMypSKJQpIpxSXS/2Ti3yz7Az7fNQCwaj4Be5EtqF1jA/ZLJxBYdMDi9wAA8rtvwdQoCAOAaIPhz3f/7z/9R6AlAIBmSZJxAABeRCQuVMqzP8cIAABEoIEqsEEb9MEYLMAGHMEF3MEL/GA2hEIkxMJCEEIKZIAccmAprIJCKIbNsB0qYC/UQB00wFFohpNwDi7CVbgOPXAP+mEInsEovIEJBEHICBNhIdqIAWKKWCOOCBeZhfghwUgEEoskIMmIFFEiS5E1SDFSilQgVUgd8j1yAjmHXEa6kTvIADKC/Ia8RzGUgbJRPdQMtUO5qDcahEaiC9BkdDGajxagm9BytBo9jDah59CraA/ajz5DxzDA6BgHM8RsMC7Gw0KxOCwJk2PLsSKsDKvGGrBWrAO7ifVjz7F3BBKBRcAJNgR3QiBhHkFIWExYTthIqCAcJDQR2gk3CQOEUcInIpOoS7QmuhH5xBhiMjGHWEgsI9YSjxMvEHuIQ8Q3JBKJQzInuZACSbGkVNIS0kbSblIj6SypmzRIGiOTydpka7IHOZQsICvIheSd5MPkM+Qb5CHyWwqdYkBxpPhT4ihSympKGeUQ5TTlBmWYMkFVo5pS3aihVBE1j1pCraG2Uq9Rh6gTNHWaOc2DFklLpa2ildMaaBdo92mv6HS6Ed2VHk6X0FfSy+lH6JfoA/R3DA2GFYPHiGcoGZsYBxhnGXcYr5hMphnTixnHVDA3MeuY55kPmW9VWCq2KnwVkcoKlUqVJpUbKi9Uqaqmqt6qC1XzVctUj6leU32uRlUzU+OpCdSWq1WqnVDrUxtTZ6k7qIeqZ6hvVD+kfln9iQZZw0zDT0OkUaCxX+O8xiALYxmzeCwhaw2rhnWBNcQmsc3ZfHYqu5j9HbuLPaqpoTlDM0ozV7NS85RmPwfjmHH4nHROCecop5fzforeFO8p4ikbpjRMuTFlXGuqlpeWWKtIq1GrR+u9Nq7tp52mvUW7WfuBDkHHSidcJ0dnj84FnedT2VPdpwqnFk09OvWuLqprpRuhu0R3v26n7pievl6Ankxvp955vef6HH0v/VT9bfqn9UcMWAazDCQG2wzOGDzFNXFvPB0vx9vxUUNdw0BDpWGVYZfhhJG50Tyj1UaNRg+MacZc4yTjbcZtxqMmBiYhJktN6k3umlJNuaYppjtMO0zHzczNos3WmTWbPTHXMueb55vXm9+3YFp4Wiy2qLa4ZUmy5FqmWe62vG6FWjlZpVhVWl2zRq2drSXWu627pxGnuU6TTque1mfDsPG2ybaptxmw5dgG2662bbZ9YWdiF2e3xa7D7pO9k326fY39PQcNh9kOqx1aHX5ztHIUOlY63prOnO4/fcX0lukvZ1jPEM/YM+O2E8spxGmdU5vTR2cXZ7lzg/OIi4lLgssulz4umxvG3ci95Ep09XFd4XrS9Z2bs5vC7ajbr+427mnuh9yfzDSfKZ5ZM3PQw8hD4FHl0T8Ln5Uwa9+sfk9DT4FntecjL2MvkVet17C3pXeq92HvFz72PnKf4z7jPDfeMt5ZX8w3wLfIt8tPw2+eX4XfQ38j/2T/ev/RAKeAJQFnA4mBQYFbAvv4enwhv44/Ottl9rLZ7UGMoLlBFUGPgq2C5cGtIWjI7JCtIffnmM6RzmkOhVB+6NbQB2HmYYvDfgwnhYeFV4Y/jnCIWBrRMZc1d9HcQ3PfRPpElkTem2cxTzmvLUo1Kj6qLmo82je6NLo/xi5mWczVWJ1YSWxLHDkuKq42bmy+3/zt84fineIL43sXmC/IXXB5oc7C9IWnFqkuEiw6lkBMiE44lPBBECqoFowl8hN3JY4KecIdwmciL9E20YjYQ1wqHk7ySCpNepLskbw1eSTFM6Us5bmEJ6mQvEwNTN2bOp4WmnYgbTI9Or0xg5KRkHFCqiFNk7Zn6mfmZnbLrGWFsv7Fbou3Lx6VB8lrs5CsBVktCrZCpuhUWijXKgeyZ2VXZr/Nico5lqueK83tzLPK25A3nO+f/+0SwhLhkralhktXLR1Y5r2sajmyPHF52wrjFQUrhlYGrDy4irYqbdVPq+1Xl65+vSZ6TWuBXsHKgsG1AWvrC1UK5YV969zX7V1PWC9Z37Vh+oadGz4ViYquFNsXlxV/2CjceOUbh2/Kv5nclLSpq8S5ZM9m0mbp5t4tnlsOlqqX5pcObg3Z2rQN31a07fX2Rdsvl80o27uDtkO5o788uLxlp8nOzTs/VKRU9FT6VDbu0t21Ydf4btHuG3u89jTs1dtbvPf9Psm+21UBVU3VZtVl+0n7s/c/romq6fiW+21drU5tce3HA9ID/QcjDrbXudTVHdI9VFKP1ivrRw7HH77+ne93LQ02DVWNnMbiI3BEeeTp9wnf9x4NOtp2jHus4QfTH3YdZx0vakKa8ppGm1Oa+1tiW7pPzD7R1ureevxH2x8PnDQ8WXlK81TJadrpgtOTZ/LPjJ2VnX1+LvncYNuitnvnY87fag9v77oQdOHSRf+L5zu8O85c8rh08rLb5RNXuFearzpfbep06jz+k9NPx7ucu5quuVxrue56vbV7ZvfpG543zt30vXnxFv/W1Z45Pd2983pv98X39d8W3X5yJ/3Oy7vZdyfurbxPvF/0QO1B2UPdh9U/W/7c2O/cf2rAd6Dz0dxH9waFg8/+kfWPD0MFj5mPy4YNhuueOD45OeI/cv3p/KdDz2TPJp4X/qL+y64XFi9++NXr187RmNGhl/KXk79tfKX96sDrGa/bxsLGHr7JeDMxXvRW++3Bd9x3He+j3w9P5Hwgfyj/aPmx9VPQp/uTGZOT/wQDmPP8YzMt2wAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABBUlEQVR42mL8v4OBJMAEZ/0nTgMLnLXtitKRO9JmCi9cNR/wsP8mrOHfP8YbL4RvvBBWFXuvI/WGsJMYSHUSMujbY8LN/ttM4bmO1BtW5n+ENdipPmndbrHjqiIn6x9DuZc2yk8tlZ7hc5Kx/AtzxecMDAzff7Mcuys9/7gOAT8wMjAUOZ9x0XhI2A98HL+Eub/vuSG/8ozGmy+cEEF+zp/YNYjxfvPTv9O63fLpBx6ICCvz32DD24EGt7Fo4Gb/zcX2Z84RPbiIqfyLZJtL4rzfsDvJUf3R91+sC09o//7LJMn/NdXmkqHsSyzeQ0t8j9/znn8s7ql9Dy34cWogIbUSCQADAJ+jWQrH9LCsAAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAACW0lEQVR4nGP8v5OBpoCJtsbTwQIWTKGUxe5mCi9M5V/oSL9mZf5HoQWMmHEQOD0AwuBg/WMo+8pB/ZGZwguyLcDiAzj48Zvl+D2pTz/YKLGAcBxcfSZCtulEWUAhGDQW3HstcOOF8P//jKRagC+SkQE/58/0pa7c7L9N5V+aKTw3kH3FxvKXmhYI83y3VXl64Jbs3htye2/IsbH8NZB9Zabw3FT+JR/nTypYwMDAEGBw+8AtWQj71x/mU/clT92XZGT8ry7+zlzxhbnic0n+LxRZIC/8yUju5blH4siC//8z3nghfOOF8MLj2jKCnydH7EXTRVoqCjC4g0f2yXteTEHSLNCVft0WcNhM4QXxiYmEIIIATcm3mpJvn37gmX7Q8OozYYLqycloTz/wLDulRYzpDMT4QFf6NZz95gvnyjMa+27I/SM6xxGwQJj7R6rtJQYGhk8/2NaeU9t+RfH3X2ZcihWEP5Fmgazg53qfY9zsv1ed0dh4UeXbL5yKudl/R5tdd9O6T4IFGhJvyz1OHbkts/qc2qfv7LiUMTIwOGk8irW4yo8jP2O3wEzxubHcy7I1Dq+/cOIymoGBQVn0Q5rtRTXx93jUYLFAX+b1sw88p+5L4tHGy/Er2uy6m9YDRsb/eJRht8BS+emCY7q4NDAyMLhpPYixuMbD/gu/0VD1WBtezz7w9O81vvNKEE1cTfxdmu0lZdEPxBiNzwIGBoa//xhXndFYfU4NUsnwcf6Ms7jmpPGQ1BoHpwUQcOOF0OT9RoayryJNr3Oz/ybRcCIsoBwMmkp/8FoAADmgy6ulKggYAAAAAElFTkSuQmCC</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"
 
--- a/browser/modules/BrowserUITelemetry.jsm
+++ b/browser/modules/BrowserUITelemetry.jsm
@@ -72,20 +72,16 @@ XPCOMUtils.defineLazyGetter(this, "DEFAU
   let showCharacterEncoding = Services.prefs.getComplexValue(
     "browser.menu.showCharacterEncoding",
     Ci.nsIPrefLocalizedString
   ).data;
   if (showCharacterEncoding == "true") {
     result["PanelUI-contents"].push("characterencoding-button");
   }
 
-  if (Services.metro && Services.metro.supported) {
-    result["PanelUI-contents"].push("switch-to-metro-button");
-  }
-
   return result;
 });
 
 XPCOMUtils.defineLazyGetter(this, "DEFAULT_AREAS", function() {
   return Object.keys(DEFAULT_AREA_PLACEMENTS);
 });
 
 XPCOMUtils.defineLazyGetter(this, "PALETTE_ITEMS", function() {
--- a/browser/moz.build
+++ b/browser/moz.build
@@ -19,16 +19,13 @@ DIRS += [
     'extensions',
 ]
 
 DIRS += [
     'devtools',
     'app',
 ]
 
-if CONFIG['MOZ_METRO']:
-    DIRS += ['metro']
-
 if CONFIG['MAKENSISU']:
     DIRS += ['installer/windows']
 
 DIST_SUBDIR = 'browser'
 export('DIST_SUBDIR')
--- a/browser/themes/shared/browser.inc
+++ b/browser/themes/shared/browser.inc
@@ -1,13 +1,13 @@
 %filter substitution
 
 % Note that zoom-reset-button is a bit different since it doesn't use an image and thus has the image with display: none.
 %define nestedButtons #zoom-out-button, #zoom-reset-button, #zoom-in-button, #cut-button, #copy-button, #paste-button
-%define primaryToolbarButtons #back-button, #forward-button, #home-button, #print-button, #downloads-button, #bookmarks-menu-button, #new-tab-button, #new-window-button, #fullscreen-button, #sync-button, #feed-button, #tabview-button, #social-share-button, #open-file-button, #find-button, #developer-button, #preferences-button, #privatebrowsing-button, #save-page-button, #switch-to-metro-button, #add-ons-button, #history-panelmenu, #nav-bar-overflow-button, #PanelUI-menu-button, #characterencoding-button, #email-link-button, #sidebar-button, @nestedButtons@, #e10s-button, #panic-button, #web-apps-button, #webide-button, #loop-button
+%define primaryToolbarButtons #back-button, #forward-button, #home-button, #print-button, #downloads-button, #bookmarks-menu-button, #new-tab-button, #new-window-button, #fullscreen-button, #sync-button, #feed-button, #tabview-button, #social-share-button, #open-file-button, #find-button, #developer-button, #preferences-button, #privatebrowsing-button, #save-page-button, #add-ons-button, #history-panelmenu, #nav-bar-overflow-button, #PanelUI-menu-button, #characterencoding-button, #email-link-button, #sidebar-button, @nestedButtons@, #e10s-button, #panic-button, #web-apps-button, #webide-button, #loop-button
 
 %ifdef XP_MACOSX
 % Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button to exit fullscreen
 % and want it to behave like other toolbar buttons.
 %define primaryToolbarButtons @primaryToolbarButtons@, #restore-button
 %endif
 
 %define inAnyPanel :-moz-any(:not([cui-areatype="toolbar"]), [overflowedItem=true])
deleted file mode 100644
index 8c7b97ed643797cc2688f987097fbc12df098567..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1b77cff2a91e227520c7b0807ebc3bba10bcb3ff..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7a86a0ac67d7c0d11633e49987f9b112ac2c4914..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -2461,29 +2461,16 @@ notification[value="loop-sharing-notific
   text-shadow: none;
   background-image: linear-gradient(#B4211B, #8A1915);
   border-radius: 1px;
   -moz-margin-end: 5px;
 }
 
 /* Social toolbar item */
 
-#switch-to-metro-button[cui-areatype="toolbar"] {
-  list-style-image: url(chrome://browser/skin/Metro_Glyph.png);
-}
-
-toolbar[brighttext] #switch-to-metro-button[cui-areatype="toolbar"] {
-  list-style-image: url(chrome://browser/skin/Metro_Glyph-inverted.png);
-}
-
-#switch-to-metro-button[cui-areatype="menu-panel"],
-toolbarpaletteitem[place="palette"] > #switch-to-metro-button {
-  list-style-image: url(chrome://browser/skin/Metro_Glyph-menuPanel.png);
-}
-
 #social-undoactivation-button {
   -moz-margin-start: 0; /* override default label margin to match description margin */
 }
 
 #socialActivatedNotification .popup-notification-button-container {
   margin-left: 6px;
 }
 
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -60,19 +60,16 @@ browser.jar:
         skin/classic/browser/menu-forward-XP.png
         skin/classic/browser/menuPanel.png
         skin/classic/browser/menuPanel-aero.png
         skin/classic/browser/menuPanel-customize.png
         skin/classic/browser/menuPanel-exit.png
         skin/classic/browser/menuPanel-help.png
         skin/classic/browser/menuPanel-small.png
         skin/classic/browser/menuPanel-small-aero.png
-        skin/classic/browser/Metro_Glyph.png
-        skin/classic/browser/Metro_Glyph-inverted.png
-        skin/classic/browser/Metro_Glyph-menuPanel.png
         skin/classic/browser/bad-content-blocked-16.png             (../shared/bad-content-blocked-16.png)
         skin/classic/browser/bad-content-blocked-16@2x.png          (../shared/bad-content-blocked-16@2x.png)
         skin/classic/browser/bad-content-blocked-64.png             (../shared/bad-content-blocked-64.png)
         skin/classic/browser/bad-content-unblocked-16.png           (../shared/bad-content-unblocked-16.png)
         skin/classic/browser/bad-content-unblocked-64.png           (../shared/bad-content-unblocked-64.png)
         skin/classic/browser/monitor.png
         skin/classic/browser/monitor_16-10.png
         skin/classic/browser/notification-16.png
--- a/build/automation.py.in
+++ b/build/automation.py.in
@@ -701,22 +701,16 @@ class Automation(object):
         self.log.info(line.rstrip().decode("UTF-8", "ignore"))
         if "TEST-START" in line and "|" in line:
           self.lastTestSeen = line.split("|")[1].strip()
         if not debuggerInfo and "TEST-UNEXPECTED-FAIL" in line and "Test timed out" in line:
           self.dumpScreen(utilityPath)
 
         (line, didTimeout) = self.readWithTimeout(logsource, timeout)
 
-        if "METRO_BROWSER_PROCESS" in line:
-          index = line.find("=")
-          if index:
-            browserProcessId = line[index+1:].rstrip()
-            self.log.info("INFO | automation.py | metro browser sub process id detected: %s", browserProcessId)
-
         if not hitMaxTime and maxTime and datetime.now() - startTime > timedelta(seconds = maxTime):
           # Kill the application.
           hitMaxTime = True
           self.log.info("TEST-UNEXPECTED-FAIL | %s | application ran for longer than allowed maximum time of %d seconds", self.lastTestSeen, int(maxTime))
           self.killAndGetStack(proc.pid, utilityPath, debuggerInfo)
       if didTimeout:
         if line:
           self.log.info(line.rstrip().decode("UTF-8", "ignore"))
--- a/build/win32/mozconfig.vs2010-win64
+++ b/build/win32/mozconfig.vs2010-win64
@@ -4,18 +4,18 @@ if [ -d "/c/PROGRA~2/MICROS~2.0" ]; then
   _VSPATH="/c/PROGRA~2/MICROS~2.0"
 else
   _VSPATH="/c/tools/msvs10"
 fi
 
 ## SDK redist ##
 export WIN32_REDIST_DIR=${_VSPATH}/VC/redist/x86/Microsoft.VC100.CRT
 
-## includes: win8 sdk includes, winrt headers for metro, msvc 10 std library, directx sdk for d3d9 ##
-export INCLUDE=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/shared:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/um:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/winrt:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/winrt/wrl:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/winrt/wrl/wrappers:${_VSPATH}/vc/include:${_VSPATH}/vc/atlmfc/include:/c/tools/sdks/dx10/include
+## includes: win8 sdk includes, msvc 10 std library, directx sdk for d3d9 ##
+export INCLUDE=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/shared:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/um:${_VSPATH}/vc/include:${_VSPATH}/vc/atlmfc/include:/c/tools/sdks/dx10/include
 
 ## libs: win8 sdk x86 (32-bit) libs, msvc 10 (32-bit) std library, msvc 10 atl libs, directx sdk (32-bit) for d3d9  ##
 export LIBPATH=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/Lib/win8/um/x86:${_VSPATH}/vc/lib:${_VSPATH}/vc/atlmfc/lib:/c/tools/sdks/dx10/lib
 export LIB=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/Lib/win8/um/x86:${_VSPATH}/vc/lib:${_VSPATH}/vc/atlmfc/lib:/c/tools/sdks/dx10/lib
 
 ## paths: win8 sdk x86 (32-bit) tools, msvc 10 (32-bit) build toolchain, moz tools  ##
 export PATH="/c/Program Files (x86)/Windows Kits/8.0/bin/x86:${_VSPATH}/Common7/IDE:${_VSPATH}/VC/BIN:${_VSPATH}/Common7/Tools:${_VSPATH}/VC/VCPackages:/c/mozilla-build/moztools:${PATH}"
 
--- a/build/win32/mozconfig.vs2013-win64
+++ b/build/win32/mozconfig.vs2013-win64
@@ -1,13 +1,13 @@
 _VSPATH="/c/tools/vs2013"
 export WIN32_REDIST_DIR=${_VSPATH}/VC/redist/x86/Microsoft.VC120.CRT
 
-## includes: win8.1 sdk includes, winrt headers for metro, msvc std library, directx sdk for d3d9 ##
-export INCLUDE=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/shared:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/um:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/winrt:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/winrt/wrl:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/winrt/wrl/wrappers:${_VSPATH}/vc/include:${_VSPATH}/vc/atlmfc/include:/c/tools/sdks/dx10/include
+## includes: win8.1 sdk includes, msvc std library, directx sdk for d3d9 ##
+export INCLUDE=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/shared:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/um:${_VSPATH}/vc/include:${_VSPATH}/vc/atlmfc/include:/c/tools/sdks/dx10/include
 
 ## libs: win8.1 sdk x86 (32-bit) libs, msvc (32-bit) std library, msvc atl libs, directx sdk (32-bit) for d3d9  ##
 export LIBPATH=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/Lib/winv6.3/um/x86:${_VSPATH}/vc/lib:${_VSPATH}/vc/atlmfc/lib:/c/tools/sdks/dx10/lib
 export LIB=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/Lib/winv6.3/um/x86:${_VSPATH}/vc/lib:${_VSPATH}/vc/atlmfc/lib:/c/tools/sdks/dx10/lib
 
 ## paths: win8.1 sdk x86 (32-bit) tools, msvc (64-bit compiling 32-bit) build toolchain, moz tools  ##
 export PATH="/c/Program Files (x86)/Windows Kits/8.1/bin/x86:${_VSPATH}/Common7/IDE:${_VSPATH}/VC/BIN/amd64_x86:${_VSPATH}/VC/BIN/amd64:${_VSPATH}/Common7/Tools:${_VSPATH}/VC/VCPackages:/c/mozilla-build/moztools:${PATH}"
 
--- a/build/win64/mozconfig.vs2010
+++ b/build/win64/mozconfig.vs2010
@@ -4,18 +4,18 @@ if [ -d "/c/PROGRA~2/MICROS~2.0" ]; then
   _VSPATH="/c/PROGRA~2/MICROS~2.0"
 else
   _VSPATH="/c/tools/msvs10"
 fi
 
 ## SDK redist ##
 export WIN32_REDIST_DIR=${_VSPATH}/VC/redist/x64/Microsoft.VC100.CRT
 
-## includes: win8 sdk includes, winrt headers for metro, msvc 10 std library, directx sdk for d3d9 ##
-export INCLUDE=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/shared:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/um:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/winrt:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/winrt/wrl:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/winrt/wrl/wrappers:${_VSPATH}/vc/include:${_VSPATH}/vc/atlmfc/include:/c/tools/sdks/dx10/include
+## includes: win8 sdk includes, msvc 10 std library, directx sdk for d3d9 ##
+export INCLUDE=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/shared:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/include/um:${_VSPATH}/vc/include:${_VSPATH}/vc/atlmfc/include:/c/tools/sdks/dx10/include
 
 ## libs: win8 sdk x64 (64-bit) libs, msvc 10 (64-bit) std library, msvc 10 atl libs, directx sdk (64-bit) for d3d9  ##
 export LIBPATH=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/Lib/win8/um/x64:${_VSPATH}/vc/lib/amd64:${_VSPATH}/vc/atlmfc/lib/amd64:/c/tools/sdks/dx10/lib/x64
 export LIB=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.0/Lib/win8/um/x64:${_VSPATH}/vc/lib/amd64:${_VSPATH}/vc/atlmfc/lib/amd64:/c/tools/sdks/dx10/lib/x64
 
 ## paths: win8 sdk x64 (64-bit) tools, msvc 10 (64-bit) build toolchain, moz tools  ##
 export PATH="/c/Program Files (x86)/Windows Kits/8.0/bin/x64:${_VSPATH}/Common7/IDE:${_VSPATH}/VC/BIN/amd64:${_VSPATH}/VC/BIN/x86_amd64:${_VSPATH}/VC/BIN:${_VSPATH}/Common7/Tools:${_VSPATH}/VC/VCPackages:${PATH}"
 
--- a/build/win64/mozconfig.vs2013
+++ b/build/win64/mozconfig.vs2013
@@ -1,13 +1,13 @@
 _VSPATH="/c/tools/vs2013"
 export WIN32_REDIST_DIR=${_VSPATH}/VC/redist/x64/Microsoft.VC120.CRT
 
-## includes: win8.1 sdk includes, winrt headers for metro, msvc std library, directx sdk for d3d9 ##
-export INCLUDE=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/shared:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/um:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/winrt:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/winrt/wrl:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/winrt/wrl/wrappers:${_VSPATH}/vc/include:${_VSPATH}/vc/atlmfc/include:/c/tools/sdks/dx10/include
+## includes: win8.1 sdk includes, msvc std library, directx sdk for d3d9 ##
+export INCLUDE=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/shared:/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/include/um:${_VSPATH}/vc/include:${_VSPATH}/vc/atlmfc/include:/c/tools/sdks/dx10/include
 
 ## libs: win8.1 sdk x64 (64-bit) libs, msvc (64-bit) std library, msvc atl libs, directx sdk (64-bit) for d3d9  ##
 export LIBPATH=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/Lib/winv6.3/um/x64:${_VSPATH}/vc/lib/amd64:${_VSPATH}/vc/atlmfc/lib/amd64:/c/tools/sdks/dx10/lib/x64
 export LIB=/c/Program\ Files\ \(x86\)/Windows\ Kits/8.1/Lib/winv6.3/um/x64:${_VSPATH}/vc/lib/amd64:${_VSPATH}/vc/atlmfc/lib/amd64:/c/tools/sdks/dx10/lib/x64
 
 ## paths: win8.1 sdk x64 (64-bit) tools, msvc (64-bit) build toolchain, moz tools  ##
 export PATH="/c/Program Files (x86)/Windows Kits/8.1/bin/x64:${_VSPATH}/Common7/IDE:${_VSPATH}/VC/BIN/amd64:${_VSPATH}/VC/BIN/x86_amd64:${_VSPATH}/VC/BIN:${_VSPATH}/Common7/Tools:${_VSPATH}/VC/VCPackages:${PATH}"
 
--- a/config/recurse.mk
+++ b/config/recurse.mk
@@ -44,17 +44,17 @@ CURRENT_TIER := $(filter $(foreach tier,
 ifneq (,$(filter-out 0 1,$(words $(CURRENT_TIER))))
 $(error $(CURRENT_TIER) not supported on the same make command line)
 endif
 CURRENT_TIER := $(subst recurse_,,$(CURRENT_TIER:-deps=))
 
 # The rules here are doing directory traversal, so we don't want further
 # recursion to happen when running make -C subdir $tier. But some make files
 # further call make -C something else, and sometimes expect recursion to
-# happen in that case (see browser/metro/locales/Makefile.in for example).
+# happen in that case.
 # Conveniently, every invocation of make increases MAKELEVEL, so only stop
 # recursion from happening at current MAKELEVEL + 1.
 ifdef CURRENT_TIER
 ifeq (0,$(MAKELEVEL))
 export NO_RECURSE_MAKELEVEL=1
 else
 export NO_RECURSE_MAKELEVEL=$(word $(MAKELEVEL),2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)
 endif
--- a/configure.in
+++ b/configure.in
@@ -443,30 +443,16 @@ case "$target" in
 esac
 
 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
 
 dnl ========================================================
 dnl Special win32 checks
 dnl ========================================================
 
-MOZ_ARG_ENABLE_BOOL(metro,
-[  --enable-metro           Enable Windows Metro build targets],
-    MOZ_METRO=1,
-    MOZ_METRO=)
-if test -n "$MOZ_METRO"; then
-    AC_DEFINE(MOZ_METRO)
-    # toolkit/library/makefile.in needs these, see nsDllMain.
-    CRTDLLVERSION=110
-    CRTEXPDLLVERSION=1-1-0
-fi
-
-AC_SUBST(CRTDLLVERSION)
-AC_SUBST(CRTEXPDLLVERSION)
-
 # Target the Windows 8.1 SDK by default
 WINSDK_TARGETVER=603
 WINVER=502
 
 MOZ_ARG_WITH_STRING(windows-version,
 [  --with-windows-version=WINSDK_TARGETVER
                           Windows SDK version to target. Win8.1 (603) is
                           currently the minimum supported version.],
@@ -569,26 +555,16 @@ See https://developer.mozilla.org/en/Win
 
         if test -n "$WIN32_REDIST_DIR"; then
           if test ! -d "$WIN32_REDIST_DIR"; then
             AC_MSG_ERROR([Invalid Win32 Redist directory: ${WIN32_REDIST_DIR}])
           fi
           WIN32_REDIST_DIR=`cd "$WIN32_REDIST_DIR" && pwd`
         fi
 
-        dnl Confirm we have the pri tools on win8 builds
-        if test -n "$MOZ_METRO"; then
-          AC_MSG_CHECKING([for makepri])
-          AC_CHECK_PROGS(MAKEPRI, makepri, "")
-          if test -z "MAKEPRI" ; then
-              AC_MSG_ERROR([makepri.exe is required for generating metro browser install components. It should be in the Win8 SDK.])
-          fi
-          AC_SUBST(MAKEPRI)
-        fi
-
         dnl Ensure that mt.exe is 'Microsoft (R) Manifest Tool',
         dnl not something else like "magnetic tape manipulation utility".
         MSMT_TOOL=`${MT-mt} 2>&1|grep 'Microsoft (R) Manifest Tool'`
         if test -z "$MSMT_TOOL"; then
           AC_MSG_ERROR([Microsoft (R) Manifest Tool must be in your \$PATH.])
         fi
 
         changequote(,)
@@ -8461,18 +8437,16 @@ AC_SUBST(MOZ_ANGLE_RENDERER)
 AC_SUBST(MOZ_D3D_CPU_SUFFIX)
 AC_SUBST(MOZ_HAS_WINSDK_WITH_D3D)
 AC_SUBST(MOZ_D3DCOMPILER_VISTA_DLL)
 AC_SUBST(MOZ_D3DCOMPILER_VISTA_DLL_PATH)
 AC_SUBST(MOZ_DIRECTX_SDK_PATH)
 AC_SUBST(MOZ_D3DCOMPILER_XP_DLL)
 AC_SUBST(MOZ_D3DCOMPILER_XP_CAB)
 
-AC_SUBST(MOZ_METRO)
-
 AC_SUBST(MOZ_ANDROID_HISTORY)
 AC_SUBST(MOZ_WEBSMS_BACKEND)
 AC_SUBST(MOZ_ANDROID_BEAM)
 AC_SUBST(MOZ_LOCALE_SWITCHER)
 AC_SUBST(MOZ_DISABLE_GECKOVIEW)
 AC_SUBST(MOZ_ANDROID_GECKOLIBS_AAR)
 AC_SUBST(MOZ_ANDROID_READING_LIST_SERVICE)
 AC_SUBST(MOZ_ANDROID_SEARCH_ACTIVITY)
--- a/dom/base/nsContentUtils.h
+++ b/dom/base/nsContentUtils.h
@@ -1873,17 +1873,17 @@ public:
    * document will have a common ancestor with another fullscreen document
    * that is also fullscreen (since the only common ancestor they can have
    * is the chrome document, and that can't be fullscreen). i.e. multiple
    * child documents of the chrome document can be fullscreen, but the chrome
    * document won't be fullscreen.
    *
    * Making the fullscreen API content only is useful on platforms where we
    * still want chrome to be visible or accessible while content is
-   * fullscreen, like on Windows 8 in Metro mode.
+   * fullscreen.
    *
    * Note that if the fullscreen API is content only, chrome can still go
    * fullscreen by setting the "fullScreen" attribute on its XUL window.
    */
   static bool IsFullscreenApiContentOnly();
 
   /*
    * Returns true if the performance timing APIs are enabled.
--- a/dom/svg/SVGDocument.cpp
+++ b/dom/svg/SVGDocument.cpp
@@ -100,26 +100,26 @@ SVGDocument::EnsureNonSVGUserAgentStyleS
   if (mHasLoadedNonSVGUserAgentStyleSheets) {
     return;
   }
 
   mHasLoadedNonSVGUserAgentStyleSheets = true;
 
   if (IsBeingUsedAsImage()) {
     // nsDocumentViewer::CreateStyleSet skipped loading all user-agent/user
-    // style sheets in this case, but we'll need B2G/Fennec/Metro's
+    // style sheets in this case, but we'll need B2G/Fennec's
     // content.css. We could load all the sheets registered with the
     // nsIStyleSheetService (and maybe we should) but most likely it isn't
     // desirable or necessary for foreignObject in SVG-as-an-image. Instead we
     // only load the "agent-style-sheets" that nsStyleSheetService::Init()
     // pulls in from the category manager. That keeps memory use of
     // SVG-as-an-image down.
     //
     // We do this before adding UASheet() etc. below because
-    // EnsureOnDemandBuiltInUASheet prepends, and B2G/Fennec/Metro's
+    // EnsureOnDemandBuiltInUASheet prepends, and B2G/Fennec's
     // content.css must come after UASheet() etc.
     nsCOMPtr<nsICategoryManager> catMan =
     do_GetService(NS_CATEGORYMANAGER_CONTRACTID);
     if (catMan) {
       nsCOMPtr<nsISimpleEnumerator> sheets;
       catMan->EnumerateCategory("agent-style-sheets", getter_AddRefs(sheets));
       if (sheets) {
         bool hasMore;
--- a/gfx/doc/AsyncPanZoom.md
+++ b/gfx/doc/AsyncPanZoom.md
@@ -258,17 +258,17 @@ If the CSS touch-action property is enab
 </li>
 </ul>
 
 #### Threading considerations
 
 The bulk of the input processing in the APZ code happens on what we call "the input thread".
 In practice the input thread could be the Gecko main thread, the compositor thread, or some other thread.
 There are obvious downsides to using the Gecko main thread - that is, "asynchronous" panning and zooming is not really asynchronous as input events can only be processed while Gecko is idle.
-However, this is the current state of things on B2G and Metro.
+However, this is the current state of things on B2G.
 Using the compositor thread as the input thread could work on some platforms, but may be inefficient on others.
 For example, on Android (Fennec) we receive input events from the system on a dedicated UI thread.
 We would have to redispatch the input events to the compositor thread if we wanted to the input thread to be the same as the compositor thread.
 This introduces a potential for higher latency, particularly if the compositor does any blocking operations - blocking SwapBuffers operations, for example.
 As a result, the APZ code itself does not assume that the input thread will be the same as the Gecko main thread or the compositor thread.
 
 #### Active vs. inactive scrollframes
 
--- a/gfx/layers/d3d11/CompositorD3D11.cpp
+++ b/gfx/layers/d3d11/CompositorD3D11.cpp
@@ -350,57 +350,16 @@ CompositorD3D11::Initialize()
   }
 
   nsRefPtr<IDXGIDevice> dxgiDevice;
   nsRefPtr<IDXGIAdapter> dxgiAdapter;
 
   mDevice->QueryInterface(dxgiDevice.StartAssignment());
   dxgiDevice->GetAdapter(getter_AddRefs(dxgiAdapter));
 
-#ifdef MOZ_METRO
-  if (IsRunningInWindowsMetro()) {
-    nsRefPtr<IDXGIFactory2> dxgiFactory;
-    dxgiAdapter->GetParent(IID_PPV_ARGS(dxgiFactory.StartAssignment()));
-
-    nsIntRect rect;
-    mWidget->GetClientBounds(rect);
-
-    DXGI_SWAP_CHAIN_DESC1 swapDesc = { 0 };
-    // Automatically detect the width and the height from the winrt CoreWindow
-    swapDesc.Width = rect.width;
-    swapDesc.Height = rect.height;
-    // This is the most common swapchain format
-    swapDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
-    swapDesc.Stereo = false;
-    // Don't use multi-sampling
-    swapDesc.SampleDesc.Count = 1;
-    swapDesc.SampleDesc.Quality = 0;
-    swapDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
-    // Use double buffering to enable flip
-    swapDesc.BufferCount = 2;
-    swapDesc.Scaling = DXGI_SCALING_NONE;
-    // All Metro style apps must use this SwapEffect
-    swapDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
-    swapDesc.Flags = 0;
-
-    /**
-     * Create a swap chain, this swap chain will contain the backbuffer for
-     * the window we draw to. The front buffer is the full screen front
-     * buffer.
-    */
-    nsRefPtr<IDXGISwapChain1> swapChain1;
-    hr = dxgiFactory->CreateSwapChainForCoreWindow(
-           dxgiDevice, (IUnknown *)mWidget->GetNativeData(NS_NATIVE_ICOREWINDOW),
-           &swapDesc, nullptr, getter_AddRefs(swapChain1));
-    if (FAILED(hr)) {
-        return false;
-    }
-    mSwapChain = swapChain1;
-  } else
-#endif
   {
     nsRefPtr<IDXGIFactory> dxgiFactory;
     dxgiAdapter->GetParent(IID_PPV_ARGS(dxgiFactory.StartAssignment()));
 
     DXGI_SWAP_CHAIN_DESC swapDesc;
     ::ZeroMemory(&swapDesc, sizeof(swapDesc));
     swapDesc.BufferDesc.Width = 0;
     swapDesc.BufferDesc.Height = 0;
@@ -1231,26 +1190,19 @@ CompositorD3D11::VerifyBufferSize()
     // before resizing the swapchain.
     if (mCurrentRT == mDefaultRT) {
       mCurrentRT = nullptr;
     }
     MOZ_ASSERT(mDefaultRT->hasOneRef());
     mDefaultRT = nullptr;
   }
 
-  if (IsRunningInWindowsMetro()) {
-    hr = mSwapChain->ResizeBuffers(2, mSize.width, mSize.height,
-                                   DXGI_FORMAT_B8G8R8A8_UNORM,
-                                   0);
-    mDisableSequenceForNextFrame = true;
-  } else {
-    hr = mSwapChain->ResizeBuffers(1, mSize.width, mSize.height,
-                                   DXGI_FORMAT_B8G8R8A8_UNORM,
-                                   0);
-  }
+  hr = mSwapChain->ResizeBuffers(1, mSize.width, mSize.height,
+                                 DXGI_FORMAT_B8G8R8A8_UNORM,
+                                 0);
 
   return Succeeded(hr);
 }
 
 void
 CompositorD3D11::UpdateRenderTarget()
 {
   EnsureSize();
--- a/gfx/thebes/gfxWindowsPlatform.cpp
+++ b/gfx/thebes/gfxWindowsPlatform.cpp
@@ -112,18 +112,17 @@ DCFromDrawTarget::DCFromDrawTarget(DrawT
   }
 }
 
 #ifdef CAIRO_HAS_D2D_SURFACE
 
 static const char *kFeatureLevelPref =
   "gfx.direct3d.last_used_feature_level_idx";
 static const int kSupportedFeatureLevels[] =
-  { D3D10_FEATURE_LEVEL_10_1, D3D10_FEATURE_LEVEL_10_0,
-    D3D10_FEATURE_LEVEL_9_3 };
+  { D3D10_FEATURE_LEVEL_10_1, D3D10_FEATURE_LEVEL_10_0 };
 
 class GfxD2DSurfaceReporter final : public nsIMemoryReporter
 {
     ~GfxD2DSurfaceReporter() {}
 
 public:
     NS_DECL_ISUPPORTS
 
@@ -671,20 +670,16 @@ gfxWindowsPlatform::VerifyD2DDevice(bool
         SurfaceCache::DiscardAll();
     }
 
     mozilla::ScopedGfxFeatureReporter reporter("D2D", aAttemptForce);
 
     nsRefPtr<ID3D10Device1> device;
 
     int supportedFeatureLevelsCount = ArrayLength(kSupportedFeatureLevels);
-    // If we're not running in Metro don't allow DX9.3
-    if (!IsRunningInWindowsMetro()) {
-      supportedFeatureLevelsCount--;
-    }
 
     nsRefPtr<IDXGIAdapter1> adapter1 = GetDXGIAdapter();
 
     if (!adapter1) {
       // Unable to create adapter, abort acceleration.
       return;
     }
 
--- a/ipc/glue/WindowsMessageLoop.cpp
+++ b/ipc/glue/WindowsMessageLoop.cpp
@@ -74,19 +74,16 @@ using namespace mozilla::ipc::windows;
 // pulled from accessibility's win utils
 extern const wchar_t* kPropNameTabContent;
 #endif
 
 // widget related message id constants we need to defer
 namespace mozilla {
 namespace widget {
 extern UINT sAppShellGeckoMsgId;
-#ifdef MOZ_METRO
-extern UINT sDefaultBrowserMsgId;
-#endif
 }
 }
 
 namespace {
 
 const wchar_t kOldWndProcProp[] = L"MozillaIPCOldWndProc";
 const wchar_t k3rdPartyWindowProp[] = L"Mozilla3rdPartyWindow";
 
@@ -411,21 +408,16 @@ ProcessOrDeferMessage(HWND hwnd,
 #endif // ACCESSIBILITY
 
     default: {
       // Unknown messages only are logged in debug builds and sent to
       // DefWindowProc.
       if (uMsg && uMsg == mozilla::widget::sAppShellGeckoMsgId) {
         // Widget's registered native event callback
         deferred = new DeferredSendMessage(hwnd, uMsg, wParam, lParam);
-#ifdef MOZ_METRO
-      } else if (uMsg && uMsg == mozilla::widget::sDefaultBrowserMsgId) {
-        // Metro widget's system shutdown message
-        deferred = new DeferredSendMessage(hwnd, uMsg, wParam, lParam);
-#endif
       }
     }
   }
 
   // No deferred message was created and we land here, this is an
   // unhandled message.
   if (!deferred) {
     DumpNeuteredMessage(hwnd, uMsg);
@@ -493,23 +485,16 @@ WindowIsDeferredWindow(HWND hWnd)
   nsDependentString className(buffer, length);
   if (StringBeginsWith(className, NS_LITERAL_STRING("Mozilla")) ||
       StringBeginsWith(className, NS_LITERAL_STRING("Gecko")) ||
       className.EqualsLiteral("nsToolkitClass") ||
       className.EqualsLiteral("nsAppShell:EventWindowClass")) {
     return true;
   }
 
-#ifdef MOZ_METRO
-  // immersive UI ICoreWindow
-  if (className.EqualsLiteral("Windows.UI.Core.CoreWindow")) {
-    return true;
-  }
-#endif
-
   // Plugin windows that can trigger ipc calls in child:
   // 'ShockwaveFlashFullScreen' - flash fullscreen window
   // 'QTNSHIDDEN' - QuickTime
   // 'AGFullScreenWinClass' - silverlight fullscreen window
   if (className.EqualsLiteral("ShockwaveFlashFullScreen") ||
       className.EqualsLiteral("QTNSHIDDEN") ||
       className.EqualsLiteral("AGFullScreenWinClass")) {
     SetPropW(hWnd, k3rdPartyWindowProp, (HANDLE)1);
--- a/js/src/configure.in
+++ b/js/src/configure.in
@@ -290,24 +290,16 @@ fi
 
 MOZ_TOOL_VARIABLES
 
 MOZ_CHECK_COMPILER_WRAPPER
 
 dnl Special win32 checks
 dnl ========================================================
 
-MOZ_ARG_ENABLE_BOOL(metro,
-[  --enable-metro           Enable Windows Metro build targets],
-    MOZ_METRO=1,
-    MOZ_METRO=)
-if test -n "$MOZ_METRO"; then
-    AC_DEFINE(MOZ_METRO)
-fi
-
 # Target the Windows 8.1 SDK by default
 WINSDK_TARGETVER=603
 WINVER=502
 
 MOZ_ARG_WITH_STRING(windows-version,
 [  --with-windows-version=WINSDK_TARGETVER
                           Windows SDK version to target. Win8.1 (603) is
                           currently the minimum supported version.],
@@ -3735,17 +3727,16 @@ OS_LIBS="$LIBS"
 AC_SUBST(OS_CFLAGS)
 AC_SUBST(OS_CXXFLAGS)
 AC_SUBST(OS_CPPFLAGS)
 AC_SUBST(OS_COMPILE_CFLAGS)
 AC_SUBST(OS_COMPILE_CXXFLAGS)
 AC_SUBST(OS_LDFLAGS)
 AC_SUBST(OS_LIBS)
 AC_SUBST(CROSS_COMPILE)
-AC_SUBST(MOZ_METRO)
 
 AC_SUBST(HOST_CC)
 AC_SUBST(HOST_CXX)
 AC_SUBST(HOST_CFLAGS)
 AC_SUBST(HOST_CXXFLAGS)
 AC_SUBST(HOST_LDFLAGS)
 AC_SUBST(HOST_OPTIMIZE_FLAGS)
 AC_SUBST(HOST_AR)
--- a/layout/reftests/forms/input/color/reftest.list
+++ b/layout/reftests/forms/input/color/reftest.list
@@ -1,11 +1,10 @@
 # Simple test. Should fail on platforms where input type color isn't activated
-# yet. Missing platforms are B2G (bug 875751), Android (bug 875750) and Metro
-# (bug 895464).
+# yet. Missing platforms are B2G (bug 875751), Android (bug 875750).
 fails-if(B2G||Mulet||Android) == input-color-1.html input-color-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
 
 default-preferences pref(dom.forms.color,true)
 
 # Despite the "default-preferences" line above, B2G and Android are still
 # excluded from some style in forms.css, which makes the following tests fail.
 fails-if(B2G||Mulet||Android) == margin-padding-1.html margin-padding-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
 == block-invalidate-1.html block-invalidate-1-ref.html
--- a/modules/libpref/Preferences.cpp
+++ b/modules/libpref/Preferences.cpp
@@ -797,27 +797,18 @@ Preferences::NotifyServiceObservers(cons
   observerService->NotifyObservers(subject, aTopic, nullptr);
   
   return NS_OK;
 }
 
 nsresult
 Preferences::UseDefaultPrefFile()
 {
-  nsresult rv;
   nsCOMPtr<nsIFile> aFile;
-
-#if defined(XP_WIN) && defined(MOZ_METRO)
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    rv = NS_GetSpecialDirectory(NS_METRO_APP_PREFS_50_FILE, getter_AddRefs(aFile));
-  } else
-#endif
-  {
-    rv = NS_GetSpecialDirectory(NS_APP_PREFS_50_FILE, getter_AddRefs(aFile));
-  }
+  nsresult rv = NS_GetSpecialDirectory(NS_APP_PREFS_50_FILE, getter_AddRefs(aFile));
 
   if (NS_SUCCEEDED(rv)) {
     rv = ReadAndOwnUserPrefFile(aFile);
     // Most likely cause of failure here is that the file didn't
     // exist, so save a new one. mUserPrefReadFailed will be
     // used to catch an error in actually reading the file.
     if (NS_FAILED(rv)) {
       if (NS_FAILED(SavePrefFileInternal(aFile)))
--- a/profile/dirserviceprovider/nsProfileDirServiceProvider.cpp
+++ b/profile/dirserviceprovider/nsProfileDirServiceProvider.cpp
@@ -11,17 +11,16 @@
 #include "nsAppDirectoryServiceDefs.h"
 #include "nsISupportsUtils.h"
 #include "nsISimpleEnumerator.h"
 #include "nsIObserverService.h"
 
 // File Name Defines
 
 #define PREFS_FILE_50_NAME           NS_LITERAL_CSTRING("prefs.js")
-#define PREFS_FILE_METRO_50_NAME     NS_LITERAL_CSTRING("metro-prefs.js")
 #define USER_CHROME_DIR_50_NAME      NS_LITERAL_CSTRING("chrome")
 #define LOCAL_STORE_FILE_50_NAME     NS_LITERAL_CSTRING("localstore.rdf")
 #define PANELS_FILE_50_NAME          NS_LITERAL_CSTRING("panels.rdf")
 #define MIME_TYPES_FILE_50_NAME      NS_LITERAL_CSTRING("mimeTypes.rdf")
 #define BOOKMARKS_FILE_50_NAME       NS_LITERAL_CSTRING("bookmarks.html")
 #define DOWNLOADS_FILE_50_NAME       NS_LITERAL_CSTRING("downloads.rdf")
 #define SEARCH_FILE_50_NAME          NS_LITERAL_CSTRING("search.rdf" )
 
@@ -165,21 +164,16 @@ nsProfileDirServiceProvider::GetFile(con
   if (strcmp(prop, NS_APP_PREFS_50_DIR) == 0) {
     rv = domainDir->Clone(getter_AddRefs(localFile));
   }
   else if (strcmp(prop, NS_APP_PREFS_50_FILE) == 0) {
     rv = domainDir->Clone(getter_AddRefs(localFile));
     if (NS_SUCCEEDED(rv))
       rv = localFile->AppendNative(PREFS_FILE_50_NAME);
   }
-  else if (strcmp(prop, NS_METRO_APP_PREFS_50_FILE) == 0) {
-    rv = domainDir->Clone(getter_AddRefs(localFile));
-    if (NS_SUCCEEDED(rv))
-      rv = localFile->AppendNative(PREFS_FILE_METRO_50_NAME);
-  }
   else if (strcmp(prop, NS_APP_USER_PROFILE_50_DIR) == 0) {
     rv = domainDir->Clone(getter_AddRefs(localFile));
   }
   else if (strcmp(prop, NS_APP_USER_PROFILE_LOCAL_50_DIR) == 0) {
     rv = mLocalProfileDir->Clone(getter_AddRefs(localFile));
   }
   else if (strcmp(prop, NS_APP_USER_CHROME_DIR) == 0) {
     rv = domainDir->Clone(getter_AddRefs(localFile));
--- a/services/datareporting/DataReporting.manifest
+++ b/services/datareporting/DataReporting.manifest
@@ -1,14 +1,13 @@
 #   b2g:            {3c2e2abc-06d4-11e1-ac3b-374f68613e61}
 #   browser:        {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
 #   mobile/android: {aa3c5121-dab2-40e2-81ca-7ea25febc110}
 #   mobile/xul:     {a23983c0-fd0e-11dc-95ff-0800200c9a66}
 #   suite (comm):   {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
-#   metro browser:  {99bceaaa-e3c6-48c1-b981-ef9b46b67d60}
 
 # The Data Reporting Service drives collection and submission of metrics
 # and other useful data to Mozilla. It drives the display of the data
 # submission notification info bar and thus is required by Firefox Health
 # Report and Telemetry.
 
 component {41f6ae36-a79f-4613-9ac3-915e70f83789} DataReportingService.js
 contract @mozilla.org/datareporting/service;1 {41f6ae36-a79f-4613-9ac3-915e70f83789}
--- a/services/sync/SyncComponents.manifest
+++ b/services/sync/SyncComponents.manifest
@@ -3,17 +3,16 @@
 # so in order to prevent the instructions from being processed for WebappRT,
 # we need to restrict them to the applications that depend on them, i.e.:
 #
 #   b2g:            {3c2e2abc-06d4-11e1-ac3b-374f68613e61}
 #   browser:        {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
 #   mobile/android: {aa3c5121-dab2-40e2-81ca-7ea25febc110}
 #   mobile/xul:     {a23983c0-fd0e-11dc-95ff-0800200c9a66}
 #   suite (comm):   {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
-#   metro browser:  {99bceaaa-e3c6-48c1-b981-ef9b46b67d60}
 #
 # In theory we should do this for all these instructions, but in practice it is
 # sufficient to do it for the app-startup one, and the file is simpler that way.
 
 # Weave.js
 component {74b89fb0-f200-4ae8-a3ec-dd164117f6de} Weave.js
 contract @mozilla.org/weave/service;1 {74b89fb0-f200-4ae8-a3ec-dd164117f6de}
 category app-startup WeaveService service,@mozilla.org/weave/service;1 application={3c2e2abc-06d4-11e1-ac3b-374f68613e61} application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} application={aa3c5121-dab2-40e2-81ca-7ea25febc110} application={a23983c0-fd0e-11dc-95ff-0800200c9a66} application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} application={99bceaaa-e3c6-48c1-b981-ef9b46b67d60}
--- a/services/sync/tps/extensions/mozmill/resource/driver/controller.js
+++ b/services/sync/tps/extensions/mozmill/resource/driver/controller.js
@@ -281,17 +281,16 @@ MozMillController.prototype.__defineGett
 
 MozMillController.prototype.sleep = utils.sleep;
 MozMillController.prototype.waitFor = assert.waitFor;
 
 // Open the specified url in the current tab
 MozMillController.prototype.open = function (url) {
   switch (this.mozmillModule.Application) {
     case "Firefox":
-    case "MetroFirefox":
       // Stop a running page load to not overlap requests
       if (this.browserObject.selectedBrowser) {
         this.browserObject.selectedBrowser.stop();
       }
 
       this.browserObject.loadURI(url);
       break;
 
@@ -932,37 +931,22 @@ Tabs.prototype.__defineGetter__("activeT
 });
 
 Tabs.prototype.__defineGetter__("length", function () {
   return this.controller.browserObject.browsers.length;
 });
 
 Tabs.prototype.__defineGetter__("activeTabIndex", function () {
   var browser = this.controller.browserObject;
-
-  switch(this.controller.mozmillModule.Application) {
-    case "MetroFirefox":
-      return browser.tabs.indexOf(browser.selectedTab);
-    case "Firefox":
-    default:
-      return browser.tabContainer.selectedIndex;
-  }
+  return browser.tabContainer.selectedIndex;
 });
 
 Tabs.prototype.selectTabIndex = function (aIndex) {
   var browser = this.controller.browserObject;
-
-  switch(this.controller.mozmillModule.Application) {
-    case "MetroFirefox":
-      browser.selectedTab = browser.tabs[aIndex];
-      break;
-    case "Firefox":
-    default:
-      browser.selectTabAtIndex(aIndex);
-  }
+  browser.selectTabAtIndex(aIndex);
 }
 
 function browserAdditions (controller) {
   controller.tabs = new Tabs(controller);
 
   controller.waitForPageLoad = function (aDocument, aTimeout, aInterval) {
     var timeout = aTimeout || 30000;
     var win = null;
--- a/services/sync/tps/extensions/mozmill/resource/stdlib/utils.js
+++ b/services/sync/tps/extensions/mozmill/resource/stdlib/utils.js
@@ -14,18 +14,17 @@ const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
 
 Cu.import("resource://gre/modules/NetUtil.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 const applicationIdMap = {
-  '{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': 'Firefox',
-  '{99bceaaa-e3c6-48c1-b981-ef9b46b67d60}': 'MetroFirefox'
+  '{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': 'Firefox'
 }
 const applicationName = applicationIdMap[Services.appinfo.ID] || Services.appinfo.name;
 
 var assertions = {}; Cu.import('resource://mozmill/modules/assertions.js', assertions);
 var broker = {}; Cu.import('resource://mozmill/driver/msgbroker.js', broker);
 var errors = {}; Cu.import('resource://mozmill/modules/errors.js', errors);
 
 var assert = new assertions.Assert();
@@ -44,23 +43,17 @@ function Copy (obj) {
  * Returns the browser object of the specified window
  *
  * @param {Window} aWindow
  *        Window to get the browser element from.
  *
  * @returns {Object} The browser element
  */
 function getBrowserObject(aWindow) {
-  switch(applicationName) {
-    case "MetroFirefox":
-      return aWindow.Browser;
-    case "Firefox":
-    default:
-      return aWindow.gBrowser;
-  }
+  return aWindow.gBrowser;
 }
 
 function getChromeWindow(aWindow) {
   var chromeWin = aWindow.QueryInterface(Ci.nsIInterfaceRequestor)
                   .getInterface(Ci.nsIWebNavigation)
                   .QueryInterface(Ci.nsIDocShellTreeItem)
                   .rootTreeItem
                   .QueryInterface(Ci.nsIInterfaceRequestor)
--- a/startupcache/StartupCache.cpp
+++ b/startupcache/StartupCache.cpp
@@ -77,19 +77,16 @@ StartupCache::CollectReports(nsIHandleRe
          HeapSizeOfIncludingThis(StartupCacheMallocSizeOf),
          "Memory used by the startup cache for things other than the file "
          "mapping.");
 
   return NS_OK;
 }
 
 static const char sStartupCacheName[] = "startupCache." SC_WORDSIZE "." SC_ENDIAN;
-#if defined(XP_WIN) && defined(MOZ_METRO)
-static const char sMetroStartupCacheName[] = "metroStartupCache." SC_WORDSIZE "." SC_ENDIAN;
-#endif
 
 StartupCache*
 StartupCache::GetSingleton()
 {
   if (!gStartupCache) {
     if (XRE_GetProcessType() != GeckoProcessType_Default) {
       return nullptr;
     }
@@ -194,24 +191,17 @@ StartupCache::Init()
     rv = file->AppendNative(NS_LITERAL_CSTRING("startupCache"));
     NS_ENSURE_SUCCESS(rv, rv);
 
     // Try to create the directory if it's not there yet
     rv = file->Create(nsIFile::DIRECTORY_TYPE, 0777);
     if (NS_FAILED(rv) && rv != NS_ERROR_FILE_ALREADY_EXISTS)
       return rv;
 
-#if defined(XP_WIN) && defined(MOZ_METRO)
-    if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-      rv = file->AppendNative(NS_LITERAL_CSTRING(sMetroStartupCacheName));
-    } else
-#endif
-    {
-      rv = file->AppendNative(NS_LITERAL_CSTRING(sStartupCacheName));
-    }
+    rv = file->AppendNative(NS_LITERAL_CSTRING(sStartupCacheName));
 
     NS_ENSURE_SUCCESS(rv, rv);
 
     mFile = do_QueryInterface(file);
   }
 
   NS_ENSURE_TRUE(mFile, NS_ERROR_UNEXPECTED);
 
--- a/testing/mochitest/Makefile.in
+++ b/testing/mochitest/Makefile.in
@@ -51,19 +51,16 @@ TEST_HARNESS_BINS += fix_linux_stack.py
 endif
 
 ifeq (gtk2_1,$(MOZ_WIDGET_TOOLKIT)_$(MOZ_X11))
 TEST_HARNESS_BINS += screentopng
 endif
 
 ifeq (windows,$(MOZ_WIDGET_TOOLKIT))
 TEST_HARNESS_BINS += screenshot$(BIN_SUFFIX)
-ifdef MOZ_METRO
-TEST_HARNESS_BINS += metrotestharness$(BIN_SUFFIX)
-endif
 endif
 
 ifdef MOZ_DMD
 TEST_HARNESS_BINS += \
   dmd.py \
   SmokeDMD$(BIN_SUFFIX) \
   $(NULL)
 endif
--- a/testing/mochitest/browser-harness.xul
+++ b/testing/mochitest/browser-harness.xul
@@ -235,17 +235,16 @@
     function setStatus(aStatusString) {
       document.getElementById("status").value = aStatusString;
     }
 
     function createTester(links) {
       var windowMediator = Cc['@mozilla.org/appshell/window-mediator;1'].
                              getService(Ci.nsIWindowMediator);
       var winType = gConfig.testRoot == "browser" ? "navigator:browser" :
-                    gConfig.testRoot == "metro" ? "navigator:browser" :
                     gConfig.testRoot == "webapprtChrome" ? "webapprt:webapp" :
                     null;
       if (!winType) {
         throw new Error("Unrecognized gConfig.testRoot: " + gConfig.testRoot);
       }
       var testWin = windowMediator.getMostRecentWindow(winType);
 
       setStatus("Running...");
--- a/testing/mochitest/browser-test.js
+++ b/testing/mochitest/browser-test.js
@@ -83,17 +83,16 @@ let TabDestroyObserver = {
       this.promiseResolver = resolve;
     });
   },
 };
 
 function testInit() {
   gConfig = readConfig();
   if (gConfig.testRoot == "browser" ||
-      gConfig.testRoot == "metro" ||
       gConfig.testRoot == "webapprtChrome") {
     // Make sure to launch the test harness for the first opened window only
     var prefs = Services.prefs;
     if (prefs.prefHasUserValue("testing.browserTestHarness.running"))
       return;
 
     prefs.setBoolPref("testing.browserTestHarness.running", true);
 
--- a/testing/mozbase/mozrunner/mozrunner/runners.py
+++ b/testing/mozbase/mozrunner/mozrunner/runners.py
@@ -60,34 +60,16 @@ def ThunderbirdRunner(*args, **kwargs):
     :param process_args: Arguments to pass into process_class.
     :param symbols_path: Path to symbol files used for crash analysis.
     :returns: A GeckoRuntimeRunner for Thunderbird.
     """
     kwargs['app_ctx'] = get_app_context('thunderbird')()
     return GeckoRuntimeRunner(*args, **kwargs)
 
 
-def MetroRunner(*args, **kwargs):
-    """
-    Create a Windows metro Firefox runner.
-
-    :param binary: Path to metro Firefox binary.
-    :param cmdargs: Arguments to pass into binary.
-    :param profile: Profile object to use.
-    :param env: Environment variables to pass into the gecko process.
-    :param clean_profile: If True, restores profile back to original state.
-    :param process_class: Class used to launch the binary.
-    :param process_args: Arguments to pass into process_class.
-    :param symbols_path: Path to symbol files used for crash analysis.
-    :returns: A GeckoRuntimeRunner for metro Firefox.
-    """
-    kwargs['app_ctx'] = get_app_context('metro')()
-    return GeckoRuntimeRunner(*args, **kwargs)
-
-
 def B2GDesktopRunner(*args, **kwargs):
     """
     Create a B2G desktop runner.
 
     :param binary: Path to b2g desktop binary.
     :param cmdargs: Arguments to pass into binary.
     :param profile: Profile object to use.
     :param env: Environment variables to pass into the gecko process.
@@ -172,12 +154,11 @@ def B2GDeviceRunner(b2g_home=None,
 
 
 runners = {
  'default': Runner,
  'b2g_desktop': B2GDesktopRunner,
  'b2g_emulator': B2GEmulatorRunner,
  'b2g_device': B2GDeviceRunner,
  'firefox': FirefoxRunner,
- 'metro': MetroRunner,
  'thunderbird': ThunderbirdRunner,
 }
 
--- a/testing/profiles/prefs_general.js
+++ b/testing/profiles/prefs_general.js
@@ -192,20 +192,16 @@ user_pref("browser.pagethumbnails.captur
 // Indicate that the download panel has been shown once so that whichever
 // download test runs first doesn't show the popup inconsistently.
 user_pref("browser.download.panel.shown", true);
 
 // Assume the about:newtab page's intro panels have been shown to not depend on
 // which test runs first and happens to open about:newtab
 user_pref("browser.newtabpage.introShown", true);
 
-// prefs for firefox metro.
-// Disable first-tun tab
-user_pref("browser.firstrun.count", 0);
-
 // Tell the PBackground infrastructure to run a test at startup.
 user_pref("pbackground.testing", true);
 
 // Enable webapps testing mode, which bypasses native installation.
 user_pref("browser.webapps.testing", true);
 
 // Disable android snippets
 user_pref("browser.snippets.enabled", false);
--- a/toolkit/components/crashmonitor/CrashMonitor.jsm
+++ b/toolkit/components/crashmonitor/CrashMonitor.jsm
@@ -79,23 +79,19 @@ let CrashMonitorInternal = {
 
   /* Deferred for AsyncShutdown blocker */
   profileBeforeChangeDeferred: Promise.defer(),
 
   /**
    * Path to checkpoint file.
    *
    * Each time a new notification is received, this file is written to
-   * disc to reflect the information in |checkpoints|. Although Firefox for
-   * Desktop and Metro share the same profile, they need to keep record of
-   * crashes separately.
+   * disc to reflect the information in |checkpoints|.
    */
-  path: (Services.metro && Services.metro.immersive) ?
-    OS.Path.join(OS.Constants.Path.profileDir, "metro", "sessionCheckpoints.json"):
-    OS.Path.join(OS.Constants.Path.profileDir, "sessionCheckpoints.json"),
+  path: OS.Path.join(OS.Constants.Path.profileDir, "sessionCheckpoints.json"),
 
   /**
    * Load checkpoints from previous session asynchronously.
    *
    * @return {Promise} A promise that resolves/rejects once loading is complete
    */
   loadPreviousCheckpoints: function () {
     this.previousCheckpoints = Task.spawn(function*() {
@@ -173,19 +169,16 @@ this.CrashMonitor = {
     // Add shutdown blocker for profile-before-change
     OS.File.profileBeforeChange.addBlocker(
       "CrashMonitor: Writing notifications to file after receiving profile-before-change",
       CrashMonitorInternal.profileBeforeChangeDeferred.promise,
       () => this.checkpoints
     );
 
     CrashMonitorInternal.initialized = true;
-    if (Services.metro && Services.metro.immersive) {
-      OS.File.makeDir(OS.Path.join(OS.Constants.Path.profileDir, "metro"));
-    }
     return promise;
   },
 
   /**
    * Handle registered notifications.
    *
    * Update checkpoint file for every new notification received.
    */
--- a/toolkit/components/downloads/nsDownloadManager.cpp
+++ b/toolkit/components/downloads/nsDownloadManager.cpp
@@ -942,23 +942,18 @@ nsDownloadManager::Init()
   rv = bundleService->CreateBundle(DOWNLOAD_MANAGER_BUNDLE,
                                    getter_AddRefs(mBundle));
   NS_ENSURE_SUCCESS(rv, rv);
 
 #if !defined(MOZ_JSDOWNLOADS)
   // When MOZ_JSDOWNLOADS is undefined, we still check the preference that can
   // be used to enable the JavaScript API during the migration process.
   mUseJSTransfer = Preferences::GetBool(PREF_BD_USEJSTRANSFER, false);
-#elif defined(XP_WIN)
-    // When MOZ_JSDOWNLOADS is defined on Windows, this component is disabled
-    // unless we are running in Windows Metro.  The conversion of Windows Metro
-    // to use the JavaScript API for downloads is tracked in bug 906042.
-    mUseJSTransfer = !IsRunningInWindowsMetro();
 #else
-    mUseJSTransfer = true;
+  mUseJSTransfer = true;
 #endif
 
   if (mUseJSTransfer)
     return NS_OK;
 
   // Clean up any old downloads.rdf files from before Firefox 3
   {
     nsCOMPtr<nsIFile> oldDownloadsFile;
--- a/toolkit/components/jsdownloads/src/DownloadIntegration.jsm
+++ b/toolkit/components/jsdownloads/src/DownloadIntegration.jsm
@@ -456,23 +456,17 @@ this.DownloadIntegration = {
       let directoryPath = null;
 #ifdef XP_MACOSX
       directoryPath = yield this.getPreferredDownloadsDirectory();
 #elifdef MOZ_WIDGET_ANDROID
       directoryPath = yield this.getSystemDownloadsDirectory();
 #elifdef MOZ_WIDGET_GONK
       directoryPath = yield this.getSystemDownloadsDirectory();
 #else
-      // For Metro mode on Windows 8,  we want searchability for documents
-      // that the user chose to open with an external application.
-      if (Services.metro && Services.metro.immersive) {
-        directoryPath = yield this.getSystemDownloadsDirectory();
-      } else {
-        directoryPath = this._getDirectory("TmpD");
-      }
+      directoryPath = this._getDirectory("TmpD");
 #endif
       throw new Task.Result(directoryPath);
     }.bind(this));
   },
 
   /**
    * Checks to determine whether to block downloads for parental controls.
    *
--- a/toolkit/components/startup/nsAppStartup.cpp
+++ b/toolkit/components/startup/nsAppStartup.cpp
@@ -138,17 +138,16 @@ nsAppStartup::nsAppStartup() :
   mRunning(false),
   mShuttingDown(false),
   mStartingUp(true),
   mAttemptingQuit(false),
   mRestart(false),
   mInterrupted(false),
   mIsSafeModeNecessary(false),
   mStartupCrashTrackingEnded(false),
-  mRestartTouchEnvironment(false),
   mRestartNotSameProfile(false)
 { }
 
 
 nsresult
 nsAppStartup::Init()
 {
   nsresult rv;
@@ -279,19 +278,17 @@ nsAppStartup::Run(void)
     mRunning = true;
 
     nsresult rv = mAppShell->Run();
     if (NS_FAILED(rv))
       return rv;
   }
 
   nsresult retval = NS_OK;
-  if (mRestartTouchEnvironment) {
-    retval = NS_SUCCESS_RESTART_METRO_APP;
-  } else if (mRestart) {
+  if (mRestart) {
     retval = NS_SUCCESS_RESTART_APP;
   } else if (mRestartNotSameProfile) {
     retval = NS_SUCCESS_RESTART_APP_NOT_SAME_PROFILE;
   }
 
   return retval;
 }
 
@@ -379,27 +376,22 @@ nsAppStartup::Quit(uint32_t aMode)
     PROFILER_MARKER("Shutdown start");
     mozilla::RecordShutdownStartTimeStamp();
     mShuttingDown = true;
     if (!mRestart) {
       mRestart = (aMode & eRestart) != 0;
       gRestartMode = (aMode & 0xF0);
     }
 
-    if (!mRestartTouchEnvironment) {
-      mRestartTouchEnvironment = (aMode & eRestartTouchEnvironment) != 0;
-      gRestartMode = (aMode & 0xF0);
-    }
-
     if (!mRestartNotSameProfile) {
       mRestartNotSameProfile = (aMode & eRestartNotSameProfile) != 0;
       gRestartMode = (aMode & 0xF0);
     }
 
-    if (mRestart || mRestartTouchEnvironment || mRestartNotSameProfile) {
+    if (mRestart || mRestartNotSameProfile) {
       // Mark the next startup as a restart.
       PR_SetEnv("MOZ_APP_RESTART=1");
 
       /* Firefox-restarts reuse the process so regular process start-time isn't
          a useful indicator of startup time anymore. */
       TimeStamp::RecordProcessRestart();
     }
 
@@ -459,17 +451,17 @@ nsAppStartup::Quit(uint32_t aMode)
     // do it!
 
     // No chance of the shutdown being cancelled from here on; tell people
     // we're shutting down for sure while all services are still available.
     if (obsService) {
       NS_NAMED_LITERAL_STRING(shutdownStr, "shutdown");
       NS_NAMED_LITERAL_STRING(restartStr, "restart");
       obsService->NotifyObservers(nullptr, "quit-application",
-        (mRestart || mRestartTouchEnvironment || mRestartNotSameProfile) ?
+        (mRestart || mRestartNotSameProfile) ?
          restartStr.get() : shutdownStr.get());
     }
 
     if (!mRunning) {
       postedExitEvent = true;
     }
     else {
       // no matter what, make sure we send the exit event.  If
@@ -586,24 +578,16 @@ nsAppStartup::GetWasRestarted(bool *aRes
    * be unset or set to the empty string depending on the underlying platform
    * thus we have to check if the variable is present and not empty. */
   *aResult = mozAppRestart && (strcmp(mozAppRestart, "") != 0);
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
-nsAppStartup::GetRestartingTouchEnvironment(bool *aResult)
-{
-  NS_ENSURE_ARG_POINTER(aResult);
-  *aResult = mRestartTouchEnvironment;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
 nsAppStartup::SetInterrupted(bool aInterrupted)
 {
   mInterrupted = aInterrupted;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsAppStartup::GetInterrupted(bool *aInterrupted)
--- a/toolkit/components/startup/nsAppStartup.h
+++ b/toolkit/components/startup/nsAppStartup.h
@@ -55,17 +55,16 @@ private:
   bool mRunning;        // Have we started the main event loop?
   bool mShuttingDown;   // Quit method reentrancy check
   bool mStartingUp;     // Have we passed final-ui-startup?
   bool mAttemptingQuit; // Quit(eAttemptQuit) still trying
   bool mRestart;        // Quit(eRestart)
   bool mInterrupted;    // Was startup interrupted by an interactive prompt?
   bool mIsSafeModeNecessary;       // Whether safe mode is necessary
   bool mStartupCrashTrackingEnded; // Whether startup crash tracking has already ended
-  bool mRestartTouchEnvironment;   // Quit (eRestartTouchEnvironment)
   bool mRestartNotSameProfile;     // Quit(eRestartNotSameProfile)
 
 #if defined(XP_WIN)
   //Interaction with OS-provided profiling probes
   typedef mozilla::probes::ProbeManager ProbeManager;
   typedef mozilla::probes::Probe        Probe;
   nsRefPtr<ProbeManager> mProbesManager;
   nsRefPtr<Probe> mPlacesInitCompleteProbe;
--- a/toolkit/components/startup/public/nsIAppStartup.idl
+++ b/toolkit/components/startup/public/nsIAppStartup.idl
@@ -2,17 +2,17 @@
 /* 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 "nsISupports.idl"
 
 interface nsICmdLineService;
 
-[scriptable, uuid(bc0cb41f-4924-4c69-a65b-e35225a8650f)]
+[scriptable, uuid(6621f6d5-6c04-4a0e-9e74-447db221484e)]
 
 interface nsIAppStartup : nsISupports
 {
     /**
      * Create the hidden window.
      */
     void createHiddenWindow();
 
@@ -27,21 +27,16 @@ interface nsIAppStartup : nsISupports
      * defines the lifetime of the application. If there are no windows open
      * and no outstanding calls to enterLastWindowClosingSurvivalArea this
      * method will exit immediately.
      *
      * @returnCode NS_SUCCESS_RESTART_APP
      *             This return code indicates that the application should be
      *             restarted because quit was called with the eRestart flag.
 
-     * @returnCode NS_SUCCESS_RESTART_METRO_APP
-     *             This return code indicates that the application should be
-     *             restarted in metro because quit was called with the
-     *             eRestartTouchEnviroment flag.
-
      * @returnCode NS_SUCCESS_RESTART_APP_NOT_SAME_PROFILE
      *             This return code indicates that the application should be
      *             restarted without necessarily using the same profile because
      *             quit was called with the eRestartNotSameProfile flag.
      */
     void run();
 
     /**
@@ -128,23 +123,16 @@ interface nsIAppStartup : nsISupports
 
     /**
      * When restarting attempt to start in the x86_64 architecture. Only
      * supported on OSX.
      */
     const uint32_t eRestartx86_64 = 0x40;
 
     /**
-     * Restart the application in a touch-optimized environment (such as Metro)
-     * after quitting. The application will be restarted with the same profile
-     * and an empty command line.
-     */
-    const uint32_t eRestartTouchEnvironment = 0x80;
-
-    /**
      * Restart the application after quitting.  The application will be
      * restarted with an empty command line and the normal profile selection
      * process will take place on startup.
      */
     const uint32_t eRestartNotSameProfile = 0x100;
 
     /**
      * Exit the event loop, and shut down the app.
@@ -180,22 +168,16 @@ interface nsIAppStartup : nsISupports
     readonly attribute boolean restarting;
 
     /**
      * True if this is the startup following restart, i.e. if the application
      * was restarted using quit(eRestart*).
      */
     readonly attribute boolean wasRestarted;
 
-    /**
-     * True if the application is being restarted in a touch-optimized
-     * environment (such as Metro).
-     */
-    readonly attribute boolean restartingTouchEnvironment;
-
     /** 
      * Returns an object with main, process, firstPaint, sessionRestored properties.
      * Properties may not be available depending on platform or application
      */
     [implicit_jscontext] jsval getStartupInfo();
 
     /**
      * True if startup was interrupted by an interactive prompt.
--- a/toolkit/content/widgets/browser.xml
+++ b/toolkit/content/widgets/browser.xml
@@ -652,17 +652,17 @@
         <body><![CDATA[
           this.messageManager.sendAsyncMessage("PopupBlocking:UnblockPopup",
                                                {index: aPopupIndex});
         ]]></body>
       </method>
 
       <field name="blockedPopups">null</field>
 
-      <!-- Obsolete name for blockedPopups. Used by metro and android. -->
+      <!-- Obsolete name for blockedPopups. Used by android. -->
       <property name="pageReport"
          onget="return this.blockedPopups;"
          readonly="true"/>
 
       <property name="securityUI">
         <getter>
           <![CDATA[
             if (!this.docShell.securityUI) {
--- a/toolkit/crashreporter/nsExceptionHandler.cpp
+++ b/toolkit/crashreporter/nsExceptionHandler.cpp
@@ -1084,22 +1084,17 @@ nsresult SetExceptionHandler(nsIFile* aX
   if ((!envvar || !*envvar) && !force)
     return NS_OK;
 #endif
 
 #if defined(MOZ_WIDGET_GONK)
   doReport = false;
   headlessClient = true;
 #elif defined(XP_WIN)
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Desktop) {
-    doReport = ShouldReport();
-  } else {
-    doReport = false;
-    headlessClient = true;
-  }
+  doReport = ShouldReport();
 #else
   // this environment variable prevents us from launching
   // the crash reporter client
   doReport = ShouldReport();
 #endif
 
   // allocate our strings
   crashReporterAPIData = new nsCString();
--- a/toolkit/library/moz.build
+++ b/toolkit/library/moz.build
@@ -23,23 +23,16 @@ def Libxul(name):
         'psapi.dll',
         'rasapi32.dll',
         'rasdlg.dll',
         'secur32.dll',
         'wininet.dll',
         'winspool.drv'
     ]
 
-    if CONFIG['MOZ_METRO']:
-        DELAYLOAD_DLLS += [
-            'API-MS-WIN-CORE-WINRT-L' + CONFIG['CRTEXPDLLVERSION'] + '.DLL',
-            'API-MS-WIN-CORE-WINRT-STRING-L' + CONFIG['CRTEXPDLLVERSION'] + '.DLL',
-            'uiautomationcore.dll'
-        ]
-
     if CONFIG['ACCESSIBILITY']:
         DELAYLOAD_DLLS += ['oleacc.dll']
 
     if CONFIG['MOZ_WEBRTC']:
         DELAYLOAD_DLLS += ['msdmo.dll']
 
     if CONFIG['OS_ARCH'] == 'WINNT' and not CONFIG['GNU_CC']:
         LOCAL_INCLUDES += [
@@ -350,21 +343,16 @@ if CONFIG['OS_ARCH'] == 'WINNT':
         'wintrust',
         'wtsapi32',
         'locationapi'
     ]
     if CONFIG['ACCESSIBILITY']:
         OS_LIBS += [
             'oleacc',
         ]
-    if CONFIG['MOZ_METRO']:
-        OS_LIBS += [
-            'uiautomationcore',
-            'runtimeobject',
-        ]
 
 if CONFIG['MOZ_ENABLE_QT']:
     OS_LIBS += CONFIG['XEXT_LIBS']
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa' and CONFIG['MOZ_GSTREAMER']:
     OS_LIBS += CONFIG['GSTREAMER_LIBS']
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
--- a/toolkit/locales/en-US/chrome/places/places.properties
+++ b/toolkit/locales/en-US/chrome/places/places.properties
@@ -24,13 +24,8 @@ finduri-MonthYear=%1$S %2$S
 # This is used to generate local files container when history is grouped by site
 localhost=(local files)
 
 # LOCALIZATION NOTE
 # The string is used for showing file size of each backup in the "fileRestorePopup" popup
 # %1$S is the file size
 # %2$S is the file size unit
 backupFileSizeText=%1$S %2$S
-
-# LOCALIZATION NOTE (windows8TouchTitle): this is the name of the folder used
-# to store bookmarks created in Metro mode and share bookmarks between Metro
-# and Desktop.
-windows8TouchTitle=Windows 8 Touch
\ No newline at end of file
--- a/toolkit/mozapps/installer/windows/nsis/common.nsh
+++ b/toolkit/mozapps/installer/windows/nsis/common.nsh
@@ -7798,133 +7798,8 @@
   ; Convert from milliseconds to seconds
   System::Int64Op $0 / 1000
   Pop $0
 
   Pop $1
   Exch $0 ; return elapsed seconds
 !macroend
 
-!ifdef MOZ_METRO
-; Removes the CEH registration if it's set to our installation directory.
-; If it's set to some other installation directory, then it should be removed
-; by that installation.
-!macro RemoveDEHRegistrationIfMatchingCall un
-
-  Function ${un}RemoveDEHRegistrationIfMatchingCall
-    ; Retrieve DEH ID from the stack into $R9
-    Exch $R9
-    Exch 1
-
-    ; Retrieve Protocol Activation ID from stack into $R8
-    Exch $R8
-    Exch 2
-
-    ; Retrieve File Activation ID from stack into $R7
-    Exch $R7
-
-    ; Backup the old values of R6 and R5 on the stack
-    Push $R6
-    Push $R5
-
-    ; Conditionally remove the DEH as long as we are the default (HKCU)
-    ReadRegStr $R6 HKCU "Software\Classes\CLSID\$R9\LocalServer32" ""
-    ${${un}GetLongPath} "$INSTDIR" $R5
-    StrCmp "$R6" "" next +1
-    IfFileExists "$R6" +1 clearHKCU
-    ${${un}GetParent} "$R6" $R6
-    ${${un}GetLongPath} "$R6" $R6
-    StrCmp "$R5" "$R6" clearHKCU next
-    clearHKCU:
-    DeleteRegKey HKCU "Software\Classes\CLSID\$R9"
-    DeleteRegValue HKCU "Software\Classes\$R8\shell\open\command" "DelegateExecute"
-    DeleteRegValue HKCU "Software\Classes\$R7\shell\open\command" "DelegateExecute"
-    next:
-
-    ; Conditionally remove the DEH as long as we are the default (HKLM)
-    ReadRegStr $R6 HKLM "Software\Classes\CLSID\$R9\LocalServer32" ""
-    ${${un}GetLongPath} "$INSTDIR" $R5
-    StrCmp "$R6" "" done +1
-    IfFileExists "$R6" +1 clearHKLM
-    ${${un}GetParent} "$R6" $R6
-    ${${un}GetLongPath} "$R6" $R6
-    StrCmp "$R5" "$R6" clearHKLM done
-    clearHKLM:
-    DeleteRegKey HKLM "Software\Classes\CLSID\$R9"
-    DeleteRegValue HKLM "Software\Classes\$R8\shell\open\command" "DelegateExecute"
-    DeleteRegValue HKLM "Software\Classes\$R7\shell\open\command" "DelegateExecute"
-    done:
-
-    ; Always remove the AppUserModelID keys for this installation
-    DeleteRegKey HKCU "Software\Classes\$AppUserModelID"
-    DeleteRegKey HKLM "Software\Classes\$AppUserModelID"
-
-    ; Restore the registers back to their original state
-    Pop $R5
-    Pop $R6
-    Exch $R7
-    Exch 2
-    Exch $R8
-    Exch 1
-    Exch $R9
-  FunctionEnd
-!macroend
-
-!macro RemoveDEHRegistrationIfMatching
-  !insertmacro RemoveDEHRegistrationIfMatchingCall ""
-!macroend
-
-!macro un.RemoveDEHRegistrationIfMatching
-  !insertmacro RemoveDEHRegistrationIfMatchingCall "un."
-!macroend
-
-!macro CleanupMetroBrowserHandlerValues un DELEGATE_EXECUTE_HANDLER_ID \
-                                           PROTOCOL_ACTIVATION_ID \
-                                           FILE_ACTIVATION_ID
-  Push ${FILE_ACTIVATION_ID}
-  Push ${PROTOCOL_ACTIVATION_ID}
-  Push ${DELEGATE_EXECUTE_HANDLER_ID}
-  Call ${un}RemoveDEHRegistrationIfMatchingCall
-!macroend
-!define CleanupMetroBrowserHandlerValues '!insertmacro CleanupMetroBrowserHandlerValues ""'
-!define un.CleanupMetroBrowserHandlerValues '!insertmacro CleanupMetroBrowserHandlerValues "un."'
-
-!macro AddMetroBrowserHandlerValues DELEGATE_EXECUTE_HANDLER_ID \
-                                    DELEGATE_EXECUTE_HANDLER_PATH \
-                                    APP_USER_MODEL_ID \
-                                    PROTOCOL_ACTIVATION_ID \
-                                    FILE_ACTIVATION_ID
-  ; Win8 doesn't use conventional progid command data to launch anymore.
-  ; Instead it uses a delegate execute handler which is a light weight COM
-  ; server for choosing the metro or desktop browser to launch depending
-  ; on the current environment (metro/desktop) it was activated in.
-  WriteRegStr SHCTX "Software\Classes\${APP_USER_MODEL_ID}" "" ""
-  WriteRegStr SHCTX "Software\Classes\${APP_USER_MODEL_ID}\.exe" "" ""
-  WriteRegStr SHCTX "Software\Classes\${APP_USER_MODEL_ID}\.exe\shell" "" "open"
-  WriteRegStr SHCTX "Software\Classes\${APP_USER_MODEL_ID}\.exe\shell\open" "CommandId" "open"
-  WriteRegStr SHCTX "Software\Classes\${APP_USER_MODEL_ID}\.exe\shell\open\command" "" "$2"
-  WriteRegStr SHCTX "Software\Classes\${APP_USER_MODEL_ID}\.exe\shell\open\command" "DelegateExecute" "${DELEGATE_EXECUTE_HANDLER_ID}"
-
-  ; Augment the url handler registrations with additional data needed for Metro
-  WriteRegStr SHCTX "Software\Classes\${PROTOCOL_ACTIVATION_ID}" "AppUserModelID" "${APP_USER_MODEL_ID}"
-  WriteRegStr SHCTX "Software\Classes\${PROTOCOL_ACTIVATION_ID}\Application" "AppUserModelID" "${APP_USER_MODEL_ID}"
-  WriteRegStr SHCTX "Software\Classes\${PROTOCOL_ACTIVATION_ID}\Application" "ApplicationName" "$BrandShortName"
-  WriteRegStr SHCTX "Software\Classes\${PROTOCOL_ACTIVATION_ID}\Application" "ApplicationIcon" "$INSTDIR\${FileMainEXE},0"
-  WriteRegStr SHCTX "Software\Classes\${PROTOCOL_ACTIVATION_ID}\Application" "ApplicationCompany" "${CompanyName}"
-  WriteRegStr SHCTX "Software\Classes\${PROTOCOL_ACTIVATION_ID}\Application" "ApplicationDescription" "$(REG_APP_DESC)"
-  WriteRegStr SHCTX "Software\Classes\${PROTOCOL_ACTIVATION_ID}\shell" "" "open"
-  WriteRegStr SHCTX "Software\Classes\${PROTOCOL_ACTIVATION_ID}\shell\open" "CommandId" "open"
-  WriteRegStr SHCTX "Software\Classes\${PROTOCOL_ACTIVATION_ID}\shell\open\command" "DelegateExecute" "${DELEGATE_EXECUTE_HANDLER_ID}"
-
-  ; Augment the file handler registrations with additional data needed for Metro
-  WriteRegStr SHCTX "Software\Classes\${FILE_ACTIVATION_ID}" "AppUserModelID" "${APP_USER_MODEL_ID}"
-  WriteRegStr SHCTX "Software\Classes\${FILE_ACTIVATION_ID}\shell" "" "open"
-  WriteRegStr SHCTX "Software\Classes\${FILE_ACTIVATION_ID}\shell\open" "CommandId" "open"
-  WriteRegStr SHCTX "Software\Classes\${FILE_ACTIVATION_ID}\shell\open\command" "DelegateExecute" "${DELEGATE_EXECUTE_HANDLER_ID}"
-
-  ; Win8 Metro delegate execute handler registration
-  WriteRegStr SHCTX "Software\Classes\CLSID\${DELEGATE_EXECUTE_HANDLER_ID}" "" "$BrandShortName CommandExecuteHandler"
-  WriteRegStr SHCTX "Software\Classes\CLSID\${DELEGATE_EXECUTE_HANDLER_ID}" "AppId" "${DELEGATE_EXECUTE_HANDLER_ID}"
-  WriteRegStr SHCTX "Software\Classes\CLSID\${DELEGATE_EXECUTE_HANDLER_ID}\LocalServer32" "" "${DELEGATE_EXECUTE_HANDLER_PATH}"
-!macroend
-!define AddMetroBrowserHandlerValues "!insertmacro AddMetroBrowserHandlerValues"
-!endif ;end MOZ_METRO
-
--- a/toolkit/mozapps/update/common/updatehelper.cpp
+++ b/toolkit/mozapps/update/common/updatehelper.cpp
@@ -1,23 +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
-// Needed for COM calls to launch Metro applications
-#undef WINVER
-#undef _WIN32_WINNT
-#define WINVER 0x602
-#define _WIN32_WINNT 0x602
-#include <objbase.h>
-#include <shobjidl.h>
-#pragma comment(lib, "ole32.lib")
-#endif
-
 #include <windows.h>
 
 // Needed for CreateToolhelp32Snapshot
 #include <tlhelp32.h>
 #ifndef ONLY_SERVICE_LAUNCHING
 
 #include <stdio.h>
 #include "shlobj.h"
@@ -755,76 +744,8 @@ IsUnpromptedElevation(BOOL &isUnprompted
                                consent);
   success = success &&
             GetDWORDValue(baseKey, L"PromptOnSecureDesktop", secureDesktop);
   isUnpromptedElevation = !consent && !secureDesktop;
 
   RegCloseKey(baseKey);
   return success;
 }
-
-#ifdef MOZ_METRO
-  /*
-  * Retrieve the app model id of the firefox metro browser.
-  *
-  * @aPathBuffer Buffer to fill
-  * @aCharLength Length of buffer to fill in characters
-  */
-  bool GetDefaultBrowserAppModelID(WCHAR* aIDBuffer, long aCharLength)
-  {
-    if (!aIDBuffer || aCharLength <= 0)
-      return false;
-
-    memset(aIDBuffer, 0, (sizeof(WCHAR)*aCharLength));
-    static const WCHAR* kDefaultMetroBrowserIDPathKey = L"FirefoxURL";
-
-    HKEY key;
-    if (RegOpenKeyExW(HKEY_CLASSES_ROOT, kDefaultMetroBrowserIDPathKey,
-                      0, KEY_READ, &key) != ERROR_SUCCESS) {
-      return false;
-    }
-    DWORD len = aCharLength * sizeof(WCHAR);
-    memset(aIDBuffer, 0, len);
-    if (RegQueryValueExW(key, L"AppUserModelID", nullptr, nullptr,
-                         (LPBYTE)aIDBuffer, &len) != ERROR_SUCCESS || !len) {
-      RegCloseKey(key);
-      return false;
-    }
-    RegCloseKey(key);
-    return true;
-  }
-
-  HRESULT
-  LaunchDefaultMetroBrowser()
-  {
-    CoInitialize(nullptr);
-    HRESULT hr = E_FAIL;
-    // The interface that allows us to activate the browser
-    IApplicationActivationManager *activateMgr;
-    if (FAILED(hr = CoCreateInstance(CLSID_ApplicationActivationManager,
-                                     nullptr, CLSCTX_LOCAL_SERVER,
-                                     IID_IApplicationActivationManager,
-                                     (void**)&activateMgr))) {
-      CoUninitialize();
-      return hr;
-    }
-
-    // Activation is based on the browser's registered app model id
-    WCHAR appModelID[256];
-    if (!GetDefaultBrowserAppModelID(appModelID, (sizeof(appModelID)/sizeof(WCHAR)))) {
-      activateMgr->Release();
-      CoUninitialize();
-      return hr;
-    }
-
-    // Hand off focus rights to the out-of-process activation server. Without
-    // this the metro interface won't launch.
-    CoAllowSetForegroundWindow(activateMgr, nullptr);
-
-    // Launch default browser in Metro
-    DWORD processID;
-    hr = activateMgr->ActivateApplication(appModelID, L"", AO_NOERRORUI,
-                                          &processID);
-    activateMgr->Release();
-    CoUninitialize();
-    return hr;
-  }
-#endif
--- a/toolkit/mozapps/update/common/updatehelper.h
+++ b/toolkit/mozapps/update/common/updatehelper.h
@@ -27,13 +27,8 @@ BOOL IsUnpromptedElevation(BOOL &isUnpro
 // that will use automated tests.  Since automated tests always run from a
 // different directory for each test, the presence of this key bypasses the
 // "This is a valid installation directory" check.  This key also stores
 // the allowed name and issuer for cert checks so that the cert check
 // code can still be run unchanged.
 #define TEST_ONLY_FALLBACK_KEY_PATH \
   BASE_SERVICE_REG_KEY L"\\3932ecacee736d366d6436db0f55bce4"
 
-#ifdef MOZ_METRO
-  bool GetDefaultBrowserAppModelID(WCHAR* aIDBuffer, long aCharLength);
-  HRESULT LaunchDefaultMetroBrowser();
-#endif
-
--- a/toolkit/mozapps/update/nsIUpdateService.idl
+++ b/toolkit/mozapps/update/nsIUpdateService.idl
@@ -438,19 +438,18 @@ interface nsIApplicationUpdateService : 
    * this depends on whether the current user has write access to the install
    * directory.
    */
   readonly attribute boolean canApplyUpdates;
 
   /**
    * Whether or not a different instance is handling updates of this
    * installation.  This currently only ever returns true on Windows
-   * when 2 instances of an application are open or when both the Metro
-   * and Desktop browsers are open.  Only one of the instances will actually
-   * handle updates for the installation.
+   * when 2 instances of an application are open. Only one of the instances
+   * will actually handle updates for the installation.
    */
   readonly attribute boolean isOtherInstanceHandlingUpdates;
 
   /**
    * Whether the Update Service is able to stage updates.
    */
   readonly attribute boolean canStageUpdates;
 };
--- a/toolkit/mozapps/update/tests/chrome/utils.js
+++ b/toolkit/mozapps/update/tests/chrome/utils.js
@@ -198,17 +198,16 @@ var gTimeoutTimer;
 const CLOSE_WINDOW_TIMEOUT_MAXCOUNT = 10;
 // Counter for the SimpleTest.executeSoon when waiting on an update window to
 // close before giving up.
 var gCloseWindowTimeoutCounter = 0;
 
 // The following vars are for restoring previous preference values (if present)
 // when the test finishes.
 var gAppUpdateEnabled;            // app.update.enabled
-var gAppUpdateMetroEnabled;       // app.update.metro.enabled
 var gAppUpdateServiceEnabled;     // app.update.service.enabled
 var gAppUpdateStagingEnabled;     // app.update.staging.enabled
 var gAppUpdateURLDefault;         // app.update.url (default prefbranch)
 var gAppUpdateURL;                // app.update.url.override
 var gExtUpdateURL;                // extensions.update.url
 
 var gTestCounter = -1;
 var gWin;
@@ -961,21 +960,16 @@ function setupPrefs() {
     gAppUpdateURL = Services.prefs.getCharPref(PREF_APP_UPDATE_URL_OVERRIDE);
   }
 
   if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_ENABLED)) {
     gAppUpdateEnabled = Services.prefs.getBoolPref(PREF_APP_UPDATE_ENABLED);
   }
   Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, true);
 
-  if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_METRO_ENABLED)) {
-    gAppUpdateMetroEnabled = Services.prefs.getBoolPref(PREF_APP_UPDATE_METRO_ENABLED);
-  }
-  Services.prefs.setBoolPref(PREF_APP_UPDATE_METRO_ENABLED, true);
-
   if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_SERVICE_ENABLED)) {
     gAppUpdateServiceEnabled = Services.prefs.getBoolPref(PREF_APP_UPDATE_SERVICE_ENABLED);
   }
   Services.prefs.setBoolPref(PREF_APP_UPDATE_SERVICE_ENABLED, false);
 
   if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_STAGING_ENABLED)) {
     gAppUpdateStagingEnabled = Services.prefs.getBoolPref(PREF_APP_UPDATE_STAGING_ENABLED);
   }
@@ -1046,22 +1040,16 @@ function resetPrefs() {
   }
 
   if (gAppUpdateEnabled !== undefined) {
     Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, gAppUpdateEnabled);
   } else if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_ENABLED)) {
     Services.prefs.clearUserPref(PREF_APP_UPDATE_ENABLED);
   }
 
-  if (gAppUpdateMetroEnabled !== undefined) {
-    Services.prefs.setBoolPref(PREF_APP_UPDATE_METRO_ENABLED, gAppUpdateMetroEnabled);
-  } else if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_METRO_ENABLED)) {
-    Services.prefs.clearUserPref(PREF_APP_UPDATE_METRO_ENABLED);
-  }
-
   if (gAppUpdateServiceEnabled !== undefined) {
     Services.prefs.setBoolPref(PREF_APP_UPDATE_SERVICE_ENABLED, gAppUpdateServiceEnabled);
   } else if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_SERVICE_ENABLED)) {
     Services.prefs.clearUserPref(PREF_APP_UPDATE_SERVICE_ENABLED);
   }
 
   if (gAppUpdateStagingEnabled !== undefined) {
     Services.prefs.setBoolPref(PREF_APP_UPDATE_STAGING_ENABLED, gAppUpdateStagingEnabled);
--- a/toolkit/mozapps/update/tests/data/shared.js
+++ b/toolkit/mozapps/update/tests/data/shared.js
@@ -12,17 +12,16 @@ const PREF_APP_UPDATE_BACKGROUNDERRORS  
 const PREF_APP_UPDATE_BACKGROUNDMAXERRORS = "app.update.backgroundMaxErrors";
 const PREF_APP_UPDATE_CERTS_BRANCH        = "app.update.certs.";
 const PREF_APP_UPDATE_CERT_CHECKATTRS     = "app.update.cert.checkAttributes";
 const PREF_APP_UPDATE_CERT_ERRORS         = "app.update.cert.errors";
 const PREF_APP_UPDATE_CERT_MAXERRORS      = "app.update.cert.maxErrors";
 const PREF_APP_UPDATE_CERT_REQUIREBUILTIN = "app.update.cert.requireBuiltIn";
 const PREF_APP_UPDATE_CHANNEL             = "app.update.channel";
 const PREF_APP_UPDATE_ENABLED             = "app.update.enabled";
-const PREF_APP_UPDATE_METRO_ENABLED       = "app.update.metro.enabled";
 const PREF_APP_UPDATE_IDLETIME            = "app.update.idletime";
 const PREF_APP_UPDATE_LOG                 = "app.update.log";
 const PREF_APP_UPDATE_NEVER_BRANCH        = "app.update.never.";
 const PREF_APP_UPDATE_NOTIFIEDUNSUPPORTED = "app.update.notifiedUnsupported";
 const PREF_APP_UPDATE_PROMPTWAITTIME      = "app.update.promptWaitTime";
 const PREF_APP_UPDATE_SERVICE_ENABLED     = "app.update.service.enabled";
 const PREF_APP_UPDATE_SHOW_INSTALLED_UI   = "app.update.showInstalledUI";
 const PREF_APP_UPDATE_SILENT              = "app.update.silent";
--- a/toolkit/mozapps/update/tests/data/xpcshellUtilsAUS.js
+++ b/toolkit/mozapps/update/tests/data/xpcshellUtilsAUS.js
@@ -1010,17 +1010,16 @@ function doTestFinish() {
   do_execute_soon(do_test_finished);
 }
 
 /**
  * Sets the most commonly used preferences used by tests
  */
 function setDefaultPrefs() {
   Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, true);
-  Services.prefs.setBoolPref(PREF_APP_UPDATE_METRO_ENABLED, true);
   // Don't display UI for a successful installation. Some apps may not set this
   // pref to false like Firefox does.
   Services.prefs.setBoolPref(PREF_APP_UPDATE_SHOW_INSTALLED_UI, false);
   if (DEBUG_AUS_TEST) {
     // Enable Update logging
     Services.prefs.setBoolPref(PREF_APP_UPDATE_LOG, true);
   }
 }
--- a/toolkit/mozapps/update/updater/updater.cpp
+++ b/toolkit/mozapps/update/updater/updater.cpp
@@ -60,17 +60,16 @@
 // Amount of the progress bar to use in each of the 3 update stages,
 // should total 100.0.
 #define PROGRESS_PREPARE_SIZE 20.0f
 #define PROGRESS_EXECUTE_SIZE 75.0f
 #define PROGRESS_FINISH_SIZE   5.0f
 
 // Amount of time in ms to wait for the parent process to close
 #define PARENT_WAIT 5000
-#define IMMERSIVE_PARENT_WAIT 15000
 
 #if defined(XP_MACOSX)
 // These functions are defined in launchchild_osx.mm
 void LaunchChild(int argc, char **argv);
 void LaunchMacPostProcess(const char* aAppBundle);
 #endif
 
 #ifndef _O_BINARY
@@ -1726,33 +1725,16 @@ PatchIfFile::Finish(int status)
 
 //-----------------------------------------------------------------------------
 
 #ifdef XP_WIN
 #include "nsWindowsRestart.cpp"
 #include "nsWindowsHelpers.h"
 #include "uachelper.h"
 #include "pathhash.h"
-
-#ifdef MOZ_METRO
-/**
- * Determines if the update came from an Immersive browser
- * @return true if the update came from an immersive browser
- */
-bool
-IsUpdateFromMetro(int argc, NS_tchar **argv)
-{
-  for (int i = 0; i < argc; i++) {
-    if (!wcsicmp(L"-ServerName:DefaultBrowserServer", argv[i])) {
-      return true;
-    }
-  }
-  return false;
-}
-#endif
 #endif
 
 static void
 LaunchCallbackApp(const NS_tchar *workingDir,
                   int argc,
                   NS_tchar **argv,
                   bool usingService)
 {
@@ -1769,24 +1751,16 @@ LaunchCallbackApp(const NS_tchar *workin
 #if defined(USE_EXECV)
   execv(argv[0], argv);
 #elif defined(XP_MACOSX)
   LaunchChild(argc, argv);
 #elif defined(XP_WIN)
   // Do not allow the callback to run when running an update through the
   // service as session 0.  The unelevated updater.exe will do the launching.
   if (!usingService) {
-#if defined(MOZ_METRO)
-    // If our callback application is the default metro browser, then
-    // launch it now.
-    if (IsUpdateFromMetro(argc, argv)) {
-      LaunchDefaultMetroBrowser();
-      return;
-    }
-#endif
     WinLaunchChild(argv[0], argc, argv, nullptr);
   }
 #else
 # warning "Need implementaton of LaunchCallbackApp"
 #endif
 }
 
 static bool
@@ -2479,25 +2453,20 @@ int NS_main(int argc, NS_tchar **argv)
 
 #ifdef XP_WIN
   if (pid > 0) {
     HANDLE parent = OpenProcess(SYNCHRONIZE, false, (DWORD) pid);
     // May return nullptr if the parent process has already gone away.
     // Otherwise, wait for the parent process to exit before starting the
     // update.
     if (parent) {
-      bool updateFromMetro = false;
-#ifdef MOZ_METRO
-      updateFromMetro = IsUpdateFromMetro(argc, argv);
-#endif
-      DWORD waitTime = updateFromMetro ?
-                       IMMERSIVE_PARENT_WAIT : PARENT_WAIT;
+      DWORD waitTime = PARENT_WAIT;
       DWORD result = WaitForSingleObject(parent, waitTime);
       CloseHandle(parent);
-      if (result != WAIT_OBJECT_0 && !updateFromMetro)
+      if (result != WAIT_OBJECT_0)
         return 1;
     }
   }
 #else
   if (pid > 0)
     waitpid(pid, nullptr, 0);
 #endif
 
--- a/toolkit/webapps/WebappOSUtils.jsm
+++ b/toolkit/webapps/WebappOSUtils.jsm
@@ -219,17 +219,17 @@ this.WebappOSUtils = {
     if (!execFile) {
       return null;
     }
 
     return execFile.parent.path;
 #endif
 
 #endif
-    // Anything unsupported, like Metro
+    // Anything unsupported
     throw new Error("Unsupported apps platform");
   },
 
   getPackagePath: function(aApp) {
     let packagePath = this.getInstallPath(aApp);
 
     // Only for Firefox on Mac OS X
 #ifndef MOZ_B2G
--- a/toolkit/xre/nsAppRunner.cpp
+++ b/toolkit/xre/nsAppRunner.cpp
@@ -92,19 +92,16 @@
 
 #include "mozilla/unused.h"
 
 #ifdef XP_WIN
 #include "nsIWinAppHelper.h"
 #include <windows.h>
 #include "cairo/cairo-features.h"
 #include "mozilla/WindowsVersion.h"
-#ifdef MOZ_METRO
-#include <roapi.h>
-#endif
 
 #ifndef PROCESS_DEP_ENABLE
 #define PROCESS_DEP_ENABLE 0x1
 #endif
 #endif
 
 #ifdef ACCESSIBILITY
 #include "nsAccessibilityService.h"
@@ -123,20 +120,16 @@
 #include "nsPrintfCString.h"
 #include "nsVersionComparator.h"
 
 #include "nsAppDirectoryServiceDefs.h"
 #include "nsXULAppAPI.h"
 #include "nsXREDirProvider.h"
 #include "nsToolkitCompsCID.h"
 
-#if defined(XP_WIN) && defined(MOZ_METRO)
-#include "updatehelper.h"
-#endif
-
 #include "nsINIParser.h"
 #include "mozilla/Omnijar.h"
 #include "mozilla/StartupTimeline.h"
 #include "mozilla/LateWriteChecks.h"
 
 #include <stdlib.h>
 
 #ifdef XP_UNIX
@@ -572,26 +565,22 @@ ProcessDDE(nsINativeAppSupport* aNative,
     }
   }
 }
 #endif
 
 /**
  * Determines if there is support for showing the profile manager
  *
- * @return true in all environments except for Windows Metro
+ * @return true in all environments
 */
 static bool
 CanShowProfileManager()
 {
-#if defined(XP_WIN)
-  return XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Desktop;
-#else
   return true;
-#endif
 }
 
 bool gSafeMode = false;
 
 /**
  * The nsXULAppInfo object implements nsIFactory so that it can be its own
  * singleton.
  */
@@ -2874,48 +2863,16 @@ static DWORD WINAPI InitDwriteBG(LPVOID 
   return 0;
 }
 #endif
 
 #ifdef USE_GLX_TEST
 bool fire_glxtest_process();
 #endif
 
-#if defined(XP_WIN) && defined(MOZ_METRO)
-#ifndef AHE_TYPE
-enum AHE_TYPE {
-  AHE_DESKTOP = 0,
-  AHE_IMMERSIVE = 1
-};
-#endif
-
-/*
- * The Windows launcher uses this value to decide what front end ui
- * to launch. We always launch the same ui unless the user
- * specifically asks to switch. Update the value on every startup
- * based on the environment requested.
- */
-void
-SetLastWinRunType(AHE_TYPE aType)
-{
-  HKEY key;
-  LONG result = RegOpenKeyExW(HKEY_CURRENT_USER,
-                              L"SOFTWARE\\Mozilla\\Firefox",
-                              0, KEY_WRITE, &key);
-  if (result != ERROR_SUCCESS) {
-    return;
-  }
-  DWORD value = (DWORD)aType;
-  result = RegSetValueEx(key, L"MetroLastAHE", 0, REG_DWORD,
-                         reinterpret_cast<LPBYTE>(&value),
-                         sizeof(DWORD));
-  RegCloseKey(key);
-}
-#endif // defined(XP_WIN) && defined(MOZ_METRO)
-
 #include "GeckoProfiler.h"
 
 // Encapsulates startup and shutdown state for XRE_main
 class XREMain
 {
 public:
   XREMain() :
     mStartOffline(false)
@@ -2999,29 +2956,16 @@ XREMain::XRE_mainInit(bool* aExitFlag)
   // don't want the user to see its crashes. That's the whole reason for
   // doing this in a separate process.
   //
   // This call will cause a fork and the fork will terminate itself separately
   // from the usual shutdown sequence
   fire_glxtest_process();
 #endif
 
-#if defined(XP_WIN) && defined(MOZ_METRO)
-  // Don't remove this arg, we want to pass it on to nsUpdateDriver 
-  if (CheckArg("metro-update", false, nullptr, false) == ARG_FOUND ||
-      XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    // If we're doing a restart update that was initiated from metro land,
-    // we'll be running desktop to handle the actual update. Request that
-    // after the restart we launch into metro.
-    SetLastWinRunType(AHE_IMMERSIVE);
-  } else {
-    SetLastWinRunType(AHE_DESKTOP);
-  }
-#endif
-
   SetupErrorHandling(gArgv[0]);
 
 #ifdef CAIRO_HAS_DWRITE_FONT
   {
     // Bug 602792 - when DWriteCreateFactory is called the dwrite client dll
     // starts the FntCache service if it isn't already running (it's set
     // to manual startup by default in Windows 7 RTM).  Subsequent DirectWrite
     // calls cause the IDWriteFactory object to communicate with the FntCache
@@ -3730,22 +3674,16 @@ XREMain::XRE_mainStartup(bool* aExitFlag
                  gRestartArgc,
                  gRestartArgv,
                  mAppData->version);
   if (EnvHasValue("MOZ_PROCESS_UPDATES")) {
     SaveToEnv("MOZ_PROCESS_UPDATES=");
     *aExitFlag = true;
     return 0;
   }
-#if defined(XP_WIN) && defined(MOZ_METRO)
-  if (CheckArg("metro-update", false) == ARG_FOUND) {
-    *aExitFlag = true;
-    return 0;
-  }
-#endif
 #endif
 
   rv = NS_NewToolkitProfileService(getter_AddRefs(mProfileSvc));
   if (rv == NS_ERROR_FILE_ACCESS_DENIED) {
     PR_fprintf(PR_STDERR, "Error: Access was denied while trying to open files in " \
                 "your profile directory.\n");
   }
   if (NS_FAILED(rv)) {
@@ -4214,17 +4152,16 @@ XREMain::XRE_main(int argc, char* argv[]
 
 #ifdef MOZ_INSTRUMENT_EVENT_LOOP
   mozilla::ShutdownEventTracing();
 #endif
 
   // Check for an application initiated restart.  This is one that
   // corresponds to nsIAppStartup.quit(eRestart)
   if (rv == NS_SUCCESS_RESTART_APP
-      || rv == NS_SUCCESS_RESTART_METRO_APP
       || rv == NS_SUCCESS_RESTART_APP_NOT_SAME_PROFILE) {
     appInitiatedRestart = true;
 
     // We have an application restart don't do any shutdown checks here
     // In particular we don't want to poison IO for checking late-writes.
     gShutdownChecks = SCM_NOTHING;
   }
 
@@ -4259,22 +4196,16 @@ XREMain::XRE_main(int argc, char* argv[]
       SaveFileToEnvIfUnset("XRE_PROFILE_LOCAL_PATH", mProfLD);
       SaveWordToEnvIfUnset("XRE_PROFILE_NAME", mProfileName);
     }
 
 #ifdef MOZ_WIDGET_GTK
     MOZ_gdk_display_close(mGdkDisplay);
 #endif
 
-#if defined(MOZ_METRO) && defined(XP_WIN)
-    if (rv == NS_SUCCESS_RESTART_METRO_APP) {
-      LaunchDefaultMetroBrowser();
-      rv = NS_OK;
-    } else
-#endif
     {
       rv = LaunchChild(mNativeApp, true);
     }
 
 #ifdef MOZ_CRASHREPORTER
     if (mAppData->flags & NS_XRE_ENABLE_CRASH_REPORTER)
       CrashReporter::UnsetExceptionHandler();
 #endif
@@ -4292,174 +4223,28 @@ XREMain::XRE_main(int argc, char* argv[]
       CrashReporter::UnsetExceptionHandler();
 #endif
 
   XRE_DeinitCommandLine();
 
   return NS_FAILED(rv) ? 1 : 0;
 }
 
-#if defined(MOZ_METRO) && defined(XP_WIN)
-extern bool XRE_MetroCoreApplicationRun();
-static XREMain* xreMainPtr;
-
-// must be called by the thread we want as the main thread
-nsresult
-XRE_metroStartup(bool runXREMain)
-{
-  nsresult rv;
-
-  // XXX This call, odly enough, will set this thread as
-  // the main thread. (see bug 1033358)
-  ScopedLogging log;
-
-  bool exit = false;
-  if (xreMainPtr->XRE_mainStartup(&exit) != 0 || exit)
-    return NS_ERROR_FAILURE;
-
-  // Start the real application
-  xreMainPtr->mScopedXPCOM = MakeUnique<ScopedXPCOMStartup>();
-  if (!xreMainPtr->mScopedXPCOM)
-    return NS_ERROR_FAILURE;
-
-  rv = xreMainPtr->mScopedXPCOM->Initialize();
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  if (runXREMain) {
-    rv = xreMainPtr->XRE_mainRun();
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-  return NS_OK;
-}
-
-void
-XRE_metroShutdown()
-{
-  xreMainPtr->mScopedXPCOM = nullptr;
-
-#ifdef MOZ_INSTRUMENT_EVENT_LOOP
-  mozilla::ShutdownEventTracing();
-#endif
-
-  // unlock the profile after ScopedXPCOMStartup object (xpcom) 
-  // has gone out of scope.  see bug #386739 for more details
-  xreMainPtr->mProfileLock->Unlock();
-  gProfileLock = nullptr;
-
-#ifdef MOZ_CRASHREPORTER
-  if (xreMainPtr->mAppData->flags & NS_XRE_ENABLE_CRASH_REPORTER)
-      CrashReporter::UnsetExceptionHandler();
-#endif
-
-  XRE_DeinitCommandLine();
-}
-
-class WinRTInitWrapper
-{
-public:
-  WinRTInitWrapper() {
-    mResult = ::RoInitialize(RO_INIT_MULTITHREADED);
-  }
-  ~WinRTInitWrapper() {
-    if (SUCCEEDED(mResult)) {
-      ::RoUninitialize();
-    }
-  }
-  HRESULT mResult;
-};
-
-int
-XRE_mainMetro(int argc, char* argv[], const nsXREAppData* aAppData)
-{
-  char aLocal;
-  GeckoProfilerInitRAII profilerGuard(&aLocal);
-
-  PROFILER_LABEL("Startup", "XRE_Main",
-    js::ProfileEntry::Category::OTHER);
-
-  mozilla::IOInterposerInit ioInterposerGuard;
-
-  nsresult rv = NS_OK;
-
-  xreMainPtr = new XREMain();
-  if (!xreMainPtr) {
-    return 1;
-  }
-
-  // Inits Winrt and COM underneath it.
-  WinRTInitWrapper wrap;
-
-  gArgc = argc;
-  gArgv = argv;
-
-  NS_ENSURE_TRUE(aAppData, 2);
-
-  xreMainPtr->mAppData = new ScopedAppData(aAppData);
-  if (!xreMainPtr->mAppData)
-    return 1;
-  // used throughout this file
-  gAppData = xreMainPtr->mAppData;
-
-  // init
-  bool exit = false;
-  if (xreMainPtr->XRE_mainInit(&exit) != 0 || exit)
-    return 1;
-
-  // Located in widget, will call back into XRE_metroStartup and
-  // XRE_metroShutdown above.
-  if (!XRE_MetroCoreApplicationRun()) {
-    return 1;
-  }
-
-  // XRE_metroShutdown should have already been called on the worker
-  // thread that called XRE_metroStartup.
-  NS_ASSERTION(!xreMainPtr->mScopedXPCOM,
-               "XPCOM Shutdown hasn't occured, and we are exiting.");
-  return 0;
-}
-
-void SetWindowsEnvironment(WindowsEnvironmentType aEnvID);
-#endif // MOZ_METRO || !defined(XP_WIN)
-
 void
 XRE_StopLateWriteChecks(void) {
   mozilla::StopLateWriteChecks();
 }
 
 int
 XRE_main(int argc, char* argv[], const nsXREAppData* aAppData, uint32_t aFlags)
 {
-#if !defined(MOZ_METRO) || !defined(XP_WIN)
   XREMain main;
   int result = main.XRE_main(argc, argv, aAppData);
   mozilla::RecordShutdownEndTimeStamp();
   return result;
-#else
-  if (aFlags == XRE_MAIN_FLAG_USE_METRO) {
-    SetWindowsEnvironment(WindowsEnvironmentType_Metro);
-  }
-
-  // Desktop
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Desktop) {
-    XREMain main;
-    int result = main.XRE_main(argc, argv, aAppData);
-    mozilla::RecordShutdownEndTimeStamp();
-    return result;
-  }
-
-  // Metro
-  NS_ASSERTION(XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro,
-               "Unknown Windows environment");
-
-  SetLastWinRunType(AHE_IMMERSIVE);
-
-  int result = XRE_mainMetro(argc, argv, aAppData);
-  mozilla::RecordShutdownEndTimeStamp();
-  return result;
-#endif // MOZ_METRO || !defined(XP_WIN)
 }
 
 nsresult
 XRE_InitCommandLine(int aArgc, char* aArgv[])
 {
   nsresult rv = NS_OK;
 
 #if defined(OS_WIN)
--- a/toolkit/xre/nsEmbedFunctions.cpp
+++ b/toolkit/xre/nsEmbedFunctions.cpp
@@ -838,33 +838,16 @@ XRE_InstallX11ErrorHandler()
 #if (MOZ_WIDGET_GTK == 3)
   InstallGdkErrorHandler();
 #else
   InstallX11ErrorHandler();
 #endif
 }
 #endif
 
-#ifdef XP_WIN
-static WindowsEnvironmentType
-sWindowsEnvironmentType = WindowsEnvironmentType_Desktop;
-
-void
-SetWindowsEnvironment(WindowsEnvironmentType aEnvID)
-{
-  sWindowsEnvironmentType = aEnvID;
-}
-
-WindowsEnvironmentType
-XRE_GetWindowsEnvironment()
-{
-  return sWindowsEnvironmentType;
-}
-#endif // XP_WIN
-
 #ifdef MOZ_B2G_LOADER
 extern const nsXREAppData* gAppData;
 
 /**
  * Preload static data of Gecko for B2G loader.
  *
  * This function is supposed to be called before XPCOM is initialized.
  * For now, this function preloads
--- a/toolkit/xre/nsUpdateDriver.cpp
+++ b/toolkit/xre/nsUpdateDriver.cpp
@@ -326,29 +326,16 @@ IsOlderVersion(nsIFile *versionFile, con
     return false;
 
   if (mozilla::Version(appVersion) > buf)
     return true;
 
   return false;
 }
 
-#if defined(XP_WIN) && defined(MOZ_METRO)
-static bool
-IsWindowsMetroUpdateRequest(int appArgc, char **appArgv)
-{
-  for (int index = 0; index < appArgc; index++) {
-    if (!strcmp(appArgv[index], "--metro-update")) {
-      return true;
-    }
-  }
-  return false;
-}
-#endif
-
 static bool
 CopyFileIntoUpdateDir(nsIFile *parentDir, const char *leafName, nsIFile *updateDir)
 {
   nsDependentCString leaf(leafName);
   nsCOMPtr<nsIFile> file;
 
   // Make sure there is not an existing file in the target location.
   nsresult rv = updateDir->Clone(getter_AddRefs(file));
@@ -565,23 +552,16 @@ SwitchToUpdatedApp(nsIFile *greDir, nsIF
   pid.AppendInt((int32_t) getpid());
 #endif
 
   // Append a special token to the PID in order to let the updater know that it
   // just needs to replace the update directory.
   pid.AppendLiteral("/replace");
 
   int immersiveArgc = 0;
-#if defined(XP_WIN) && defined(MOZ_METRO)
-  // If this is desktop doing an update for metro, or if we're the metro browser
-  // we want to launch the metro browser after we're finished.
-  if (IsWindowsMetroUpdateRequest(appArgc, appArgv) || IsRunningInWindowsMetro()) {
-    immersiveArgc = 1;
-  }
-#endif
   int argc = appArgc + 6 + immersiveArgc;
   char **argv = new char*[argc + 1];
   if (!argv)
     return;
   argv[0] = (char*) updaterPath.get();
   argv[1] = (char*) updateDirPath.get();
   argv[2] = (char*) installDirPath.get();
   argv[3] = (char*) applyToDir.get();
@@ -837,23 +817,16 @@ ApplyUpdate(nsIFile *greDir, nsIFile *up
 #if defined(USE_EXECV)
     pid.AssignASCII("0");
 #else
     pid.AppendInt((int32_t) getpid());
 #endif
   }
 
   int immersiveArgc = 0;
-#if defined(XP_WIN) && defined(MOZ_METRO)
-  // If this is desktop doing an update for metro, or if we're the metro browser
-  // we want to launch the metro browser after we're finished.
-  if (IsWindowsMetroUpdateRequest(appArgc, appArgv) || IsRunningInWindowsMetro()) {
-    immersiveArgc = 1;
-  }
-#endif
   int argc = appArgc + 6 + immersiveArgc;
   char **argv = new char*[argc + 1 ];
   if (!argv)
     return;
   argv[0] = (char*) updaterPath.get();
   argv[1] = (char*) updateDirPath.get();
   argv[2] = (char*) installDirPath.get();
   argv[3] = (char*) applyToDir.get();
--- a/toolkit/xre/nsWindowsWMain.cpp
+++ b/toolkit/xre/nsWindowsWMain.cpp
@@ -11,17 +11,17 @@
 #endif
 
 #include "nsUTF8Utils.h"
 
 #ifndef XRE_DONT_PROTECT_DLL_LOAD
 #include "nsSetDllDirectory.h"
 #endif
 
-#if defined(MOZ_METRO) || defined(__GNUC__)
+#if defined(__GNUC__)
 #define XRE_DONT_SUPPORT_XPSP2
 #endif
 
 #ifndef XRE_DONT_SUPPORT_XPSP2
 #include "WindowsCrtPatch.h"
 #endif
 
 #ifdef __MINGW32__
--- a/toolkit/xre/nsXREDirProvider.cpp
+++ b/toolkit/xre/nsXREDirProvider.cpp
@@ -401,19 +401,16 @@ nsXREDirProvider::GetFile(const char* aP
 
   if (NS_SUCCEEDED(GetProfileDir(getter_AddRefs(file)))) {
     if (!strcmp(aProperty, NS_APP_PREFS_50_DIR)) {
       rv = NS_OK;
     }
     else if (!strcmp(aProperty, NS_APP_PREFS_50_FILE)) {
       rv = file->AppendNative(NS_LITERAL_CSTRING("prefs.js"));
     }
-    else if (!strcmp(aProperty, NS_METRO_APP_PREFS_50_FILE)) {
-      rv = file->AppendNative(NS_LITERAL_CSTRING("metro-prefs.js"));
-    }
     else if (!strcmp(aProperty, NS_LOCALSTORE_UNSAFE_FILE)) {
       rv = file->AppendNative(NS_LITERAL_CSTRING("localstore.rdf"));
     }
     else if (!strcmp(aProperty, NS_APP_LOCALSTORE_50_FILE)) {
       if (gSafeMode) {
         rv = file->AppendNative(NS_LITERAL_CSTRING("localstore-safe.rdf"));
         file->Remove(false);
       }
@@ -1095,18 +1092,17 @@ nsXREDirProvider::GetUpdateRootDir(nsIFi
                                      nsDependentString(regPath), appDirPath,
                                      pathHash);
     }
   }
 
   // Get the local app data directory and if a vendor name exists append it.
   // If only a product name exists, append it.  If neither exist fallback to
   // old handling.  We don't use the product name on purpose because we want a
-  // shared update directory for different apps run from the same path (like
-  // Metro & Desktop).
+  // shared update directory for different apps run from the same path.
   nsCOMPtr<nsIFile> localDir;
   if (pathHashResult && (hasVendor || gAppData->name) &&
       NS_SUCCEEDED(GetUserDataDirectoryHome(getter_AddRefs(localDir), true)) &&
       NS_SUCCEEDED(localDir->AppendNative(nsDependentCString(hasVendor ?
                                           gAppData->vendor : gAppData->name))) &&
       NS_SUCCEEDED(localDir->Append(NS_LITERAL_STRING("updates"))) &&
       NS_SUCCEEDED(localDir->Append(pathHash))) {
     localDir.forget(aResult);
--- a/tools/profiler/platform.cpp
+++ b/tools/profiler/platform.cpp
@@ -76,20 +76,17 @@ std::vector<ThreadInfo*>* Sampler::sRegi
 mozilla::Mutex* Sampler::sRegisteredThreadsMutex = nullptr;
 
 TableTicker* Sampler::sActiveSampler;
 
 static mozilla::StaticAutoPtr<mozilla::ProfilerIOInterposeObserver>
                                                             sInterposeObserver;
 
 // The name that identifies the gecko thread for calls to
-// profiler_register_thread. For all platform except metro
-// the thread that calls mozilla_sampler_init is considered
-// the gecko thread.  With metro the gecko thread is
-// registered later based on this thread name.
+// profiler_register_thread.
 static const char * gGeckoThreadName = "GeckoMain";
 
 void Sampler::Startup() {
   sRegisteredThreads = new std::vector<ThreadInfo*>();
   sRegisteredThreadsMutex = new mozilla::Mutex("sRegisteredThreads mutex");
 
   // We could create the sLUL object and read unwind info into it at
   // this point.  That would match the lifetime implied by destruction
@@ -462,20 +459,16 @@ void mozilla_sampler_init(void* stackTop
   stack_key_initialized = true;
 
   Sampler::Startup();
 
   PseudoStack *stack = PseudoStack::create();
   tlsPseudoStack.set(stack);
 
   bool isMainThread = true;
-#ifdef XP_WIN
-  // For metrofx, we'll register the main thread once it's created.
-  isMainThread = !(XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro);
-#endif
   Sampler::RegisterCurrentThread(isMainThread ?
                                    gGeckoThreadName : "Application Thread",
                                  stack, isMainThread, stackTop);
 
   // Read interval settings from MOZ_PROFILER_INTERVAL and stack-scan
   // threshhold from MOZ_PROFILER_STACK_SCAN.
   read_profiler_env_vars();
 
--- a/uriloader/exthandler/nsExternalHelperAppService.cpp
+++ b/uriloader/exthandler/nsExternalHelperAppService.cpp
@@ -395,26 +395,16 @@ static nsresult GetDownloadDirectory(nsI
     if (aSkipChecks) {
       dir.forget(_directory);
       return NS_OK;
     }
   }
   else {
     return NS_ERROR_FAILURE;
   }
-#elif defined(XP_WIN)
-  // On metro we want to be able to search opened files and the temp directory
-  // is exlcuded in searches.
-  nsresult rv;
-  if (IsRunningInWindowsMetro()) {
-    rv = NS_GetSpecialDirectory(NS_WIN_DEFAULT_DOWNLOAD_DIR, getter_AddRefs(dir));
-  } else {
-    rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(dir));
-  }
-  NS_ENSURE_SUCCESS(rv, rv);
 #else
   // On all other platforms, we default to the systems temporary directory.
   nsresult rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(dir));
   NS_ENSURE_SUCCESS(rv, rv);
 #endif
 
   NS_ASSERTION(dir, "Somehow we didn't get a download directory!");
   dir.forget(_directory);
deleted file mode 100644
--- a/widget/MetroUIUtils.idl
+++ /dev/null
@@ -1,36 +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 "nsISupports.idl"
-
-[scriptable, uuid(398fb953-335d-42f1-9e91-e238b56bf4ad)]
-
-interface nsIMetroUIUtils : nsISupports {
-  /**
-   * Obtains the current page URI
-  */
-  attribute AString currentPageURI;
-
-  /**
-   * Obtains the current page title
-  */
-  attribute AString currentPageTitle;
-
-  /**
-   * Determines if the browser has selected content
-  */
-  attribute boolean hasSelectedContent;
-
-  /**
-   * Determines the text that should be shared
-  */
-  attribute AString shareText;
-
-  /**
-   * Determines the HTML that should be shared
-  */
-  attribute AString shareHTML;
-};
-
--- a/widget/NativeKeyToDOMKeyName.h
+++ b/widget/NativeKeyToDOMKeyName.h
@@ -10,17 +10,17 @@
  * You must define NS_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX macro before include
  * this.
  *
  * It must have two arguments, (aNativeKey, aKeyNameIndex).
  * aNativeKey is a native keycode value.
  * aKeyNameIndex is the widget::KeyNameIndex value.
  */
 
-// Windows (both Desktop and Metro)
+// Windows
 #define KEY_MAP_WIN(aCPPKeyName, aNativeKey)
 #define KEY_MAP_WIN_JPN(aCPPKeyName, aNativeKey)
 #define KEY_MAP_WIN_KOR(aCPPKeyName, aNativeKey)
 #define KEY_MAP_WIN_OTH(aCPPKeyName, aNativeKey)
 #define KEY_MAP_WIN_CMD(aCPPKeyName, aAppCommand)
 // Mac OS X
 #define KEY_MAP_COCOA(aCPPKeyName, aNativeKey)
 // GTK
--- a/widget/moz.build
+++ b/widget/moz.build
@@ -80,22 +80,16 @@ XPIDL_SOURCES += [
     'nsIPrintSettings.idl',
     'nsIPrintSettingsService.idl',
     'nsIScreen.idl',
     'nsIScreenManager.idl',
     'nsISound.idl',
     'nsITransferable.idl',
 ]
 
-if CONFIG['MOZ_METRO']:
-    XPIDL_SOURCES += [
-        'MetroUIUtils.idl',
-        'nsIWinMetroUtils.idl',
-    ]
-
 XPIDL_MODULE = 'widget'
 
 EXPORTS += [
     'ContentHelper.h',
     'GfxDriverInfo.h',
     'GfxInfoBase.h',
     'GfxInfoCollector.h',
     'InputData.h',
--- a/widget/nsAppShellSingleton.h
+++ b/widget/nsAppShellSingleton.h
@@ -23,50 +23,31 @@
  * destructor.  If you already have a module destructor, then call
  * nsAppShellShutdown from your module destructor.
  *
  * The nsAppShellConstructor function is designed to be used as a factory
  * method for the nsAppShell class.
  */
 
 #include "nsXULAppAPI.h"
-#if defined(MOZ_METRO) && defined(XP_WIN)
-#include "winrt/MetroAppShell.h"
-#endif
 
 static nsIAppShell *sAppShell;
 
 static nsresult
 nsAppShellInit()
 {
   NS_ASSERTION(!sAppShell, "already initialized");
 
-#if !defined(MOZ_METRO) || !defined(XP_WIN)
   sAppShell = new nsAppShell();
-#else
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    sAppShell = new MetroAppShell();
-  } else {
-    sAppShell = new nsAppShell();
-  }
-#endif
   if (!sAppShell)
     return NS_ERROR_OUT_OF_MEMORY;
   NS_ADDREF(sAppShell);
 
   nsresult rv;
-#if !defined(MOZ_METRO) || !defined(XP_WIN)
   rv = static_cast<nsAppShell*>(sAppShell)->Init();
-#else
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    rv = static_cast<MetroAppShell*>(sAppShell)->Init();
-  } else {
-    rv = static_cast<nsAppShell*>(sAppShell)->Init();
-  }
-#endif
   if (NS_FAILED(rv)) {
     NS_RELEASE(sAppShell);
     return rv;
   }
 
   return NS_OK;
 }
 
deleted file mode 100644
--- a/widget/nsIWinMetroUtils.idl
+++ /dev/null
@@ -1,152 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 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/. */
-
-#include "nsISupports.idl"
-
-/**
- * Integration with the "Metro"/"Modern" UI environment in Windows 8.
- *
- * Note: browser/metro/base/content/browser.js contains a stub
- * implementation of this interface for non-Windows systems, for testing and
- * development purposes only.
- */
-[scriptable, uuid(319faae0-82ca-4c2f-8a24-2b2445e5a72a)]
-interface nsIWinMetroUtils : nsISupports
-{
-  /**
-   * Determine if the current device has the hardware capabilities to run
-   * in metro mode.
-   */
-  readonly attribute boolean supported;
-
-  /**
-   * Determine if the current browser is running in the metro immersive
-   * environment.
-   */
-  readonly attribute boolean immersive;
-
-  /**
-   * Determine the activation URI
-   */
-  readonly attribute AString activationURI;
-
-  /**
-   * Determine the previous execution state. The possible values of this
-   * attribute are exactly those values in the
-   * Windows::ApplicationModel::Activation enumeration.
-   */
-  readonly attribute long previousExecutionState;
-
-  /**
-   * Helper for our restart logic up in the about flyout. We set this
-   * right before we restart for an update so that MetroAppShell can
-   * communicate this to the ceh.
-   */
-  attribute boolean updatePending;
-
-  /*
-   * Determine if metro firefox is running in the foreground.
-   */
-  readonly attribute boolean foreground;
-
-   /**
-    * Show the settings flyout
-    */
-   void showSettingsFlyout();
-
-  /**
-   * Launches the specified application with the specified arguments and
-   * switches to Desktop mode if in metro mode.
-   */
-   void launchInDesktop(in AString aPath, in AString aArguments); 
-
-  /**
-   * Displays a native Windows 8 toast.
-   *
-   * @param aAppId  Application ID for current application.
-   *                If using Metro mode, it can be null string.
-   */
-   void showNativeToast(in AString aTitle, in AString aMessage,
-                        in AString anImage, in AString aCookie,
-                        [optional] in AString aAppId);
-
-  /**
-   * Secondary tiles are a Windows 8 specific feature for pinning new tiles
-   * to the start screen.   Tiles can later be activated whether the browser is
-   * already opened or not. 
-   */
-
-  /**
-   * Pins a new tile to the Windows 8 start screen.
-   * 
-   * @param aTileID         An ID which can later be used to remove the tile
-   *                        ID must only contain valid filesystem characters
-   * @param aShortName      A short name for the tile
-   * @param aDiplayName     The name that will be displayed on the tile
-   * @param aActivationArgs The arguments to pass to the browser upon 
-   *                        activation of the tile
-   * @param aTileImage An image for the normal tile view
-   * @param aSmallTileImage An image for the small tile view
-   */
-  void pinTileAsync(in AString aTileID,
-                    in AString aShortName,
-                    in AString aDisplayName,
-                    in AString aActivationArgs,
-                    in AString aTileImage,
-                    in AString aSmallTileImage);
-
-  /**
-   * Unpins a tile from the Windows 8 start screen.
-   * 
-   * @param aTileID An existing ID which was previously pinned
-   *                ID must only contain valid filesystem characters
-   */
-  void unpinTileAsync(in AString aTileID);
-
-  /**
-   * Determines if a tile is pinned to the Windows 8 start screen.
-   * 
-   * @param aTileID An ID which may have been pinned with pinTileAsync
-   *                ID must only contain valid filesystem characters
-   * @return true if the tile is pinned
-   */
-  bool isTilePinned(in AString aTileID);
-
-  /**
-   * Soft keyboard attributes. Used in unison with shown/hidden observer
-   * events sent via FrameworkView.
-   *
-   * keyboardVisible - returns true if the soft keyboard is currently
-   * displayed, false otherwise.
-   * keyboardX, keyboardY, keyboardWidth, keyboardHeight - occlude rect
-   * of the keyboard when displayed in device independent pixels.
-   */
-  readonly attribute boolean keyboardVisible;
-  readonly attribute unsigned long keyboardX;
-  readonly attribute unsigned long keyboardY;
-  readonly attribute unsigned long keyboardWidth;
-  readonly attribute unsigned long keyboardHeight;
-
-  /**
-   * Settings panel links. addSettingsPanelEntry adds an entry to
-   * the settings flyout panel that the user can invoke.
-   *
-   * @param aChromePanelId panel id invoked via nsIBrowserDOMWindow's
-   * ShowPanel api. Example: 'prefs-container'
-   * @return a unique identifier that will be passed as "data" in the
-   * "metro-settings-entry-selected" notification when the entry is clicked
-   */
-  unsigned long addSettingsPanelEntry(in AString aLabel);
-
-  /**
-   * Change the value of the "switch primary and secondary buttons" preference.
-   * See the Windows SwapMouseButton API docs for details.
-   * Included here for use in automated tests (see bug 839460).
-   *
-   * @param aSwap true to enable the preference, false to disable it.
-   * @return original value of the preference.
-   */
-  bool swapMouseButton(in bool aSwap);
-};
--- a/widget/nsWidgetsCID.h
+++ b/widget/nsWidgetsCID.h
@@ -121,20 +121,16 @@
 
 #define NS_WIN_TASKBAR_CID \
 { 0xb8e5bc54, 0xa22f, 0x4eb2, {0xb0, 0x61, 0x24, 0xcb, 0x6d, 0x19, 0xc1, 0x5f } }
 
 // {73A5946F-608D-454f-9D33-0B8F8C7294B6}
 #define NS_WIN_JUMPLISTBUILDER_CID \
 { 0x73a5946f, 0x608d, 0x454f, { 0x9d, 0x33, 0xb, 0x8f, 0x8c, 0x72, 0x94, 0xb6 } }
 
-// {DE95B8C9-F0E8-4AD5-95A2-06C12F53EC2E}
-#define NS_WIN_METROUTILS_CID \
-{ 0xde95b8c9, 0xf0e8, 0x4ad5, { 0x95, 0xa2, 0x06, 0xc1, 0x2f, 0x53, 0xec, 0x2e }}
-
 // {2B9A1F2C-27CE-45b6-8D4E-755D0E34F8DB}
 #define NS_WIN_JUMPLISTITEM_CID \
 { 0x2b9a1f2c, 0x27ce, 0x45b6, { 0x8d, 0x4e, 0x75, 0x5d, 0x0e, 0x34, 0xf8, 0xdb } }
 
 // {21F1F13B-F75A-42ad-867A-D91AD694447E}
 #define NS_WIN_JUMPLISTSEPARATOR_CID \
 { 0x21f1f13b, 0xf75a, 0x42ad, { 0x86, 0x7a, 0xd9, 0x1a, 0xd6, 0x94, 0x44, 0x7e } }
 
--- a/widget/windows/KeyboardLayout.cpp
+++ b/widget/windows/KeyboardLayout.cpp
@@ -294,21 +294,16 @@ void
 ModifierKeyState::InitMouseEvent(WidgetInputEvent& aMouseEvent) const
 {
   NS_ASSERTION(aMouseEvent.mClass == eMouseEventClass ||
                aMouseEvent.mClass == eWheelEventClass ||
                aMouseEvent.mClass == eDragEventClass ||
                aMouseEvent.mClass == eSimpleGestureEventClass,
                "called with non-mouse event");
 
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    // Buttons for immersive mode are handled in MetroInput.
-    return;
-  }
-
   WidgetMouseEventBase& mouseEvent = *aMouseEvent.AsMouseEventBase();
   mouseEvent.buttons = 0;
   if (::GetKeyState(VK_LBUTTON) < 0) {
     mouseEvent.buttons |= WidgetMouseEvent::eLeftButtonFlag;
   }
   if (::GetKeyState(VK_RBUTTON) < 0) {
     mouseEvent.buttons |= WidgetMouseEvent::eRightButtonFlag;
   }
--- a/widget/windows/WinMouseScrollHandler.cpp
+++ b/widget/windows/WinMouseScrollHandler.cpp
@@ -1081,21 +1081,16 @@ MouseScrollHandler::Device::GetWorkaroun
       return aValueIfAutomatic;
   }
 }
 
 /* static */
 void
 MouseScrollHandler::Device::Init()
 {
-  // Not supported in metro mode.
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    return;
-  }
-
   sFakeScrollableWindowNeeded =
     GetWorkaroundPref("ui.trackpoint_hack.enabled",
                       (TrackPoint::IsDriverInstalled() ||
                        UltraNav::IsObsoleteDriverInstalled()));
 
   PR_LOG(gMouseScrollLog, PR_LOG_ALWAYS,
     ("MouseScroll::Device::Init(): sFakeScrollableWindowNeeded=%s",
      GetBoolName(sFakeScrollableWindowNeeded)));
--- a/widget/windows/WinTaskbar.cpp
+++ b/widget/windows/WinTaskbar.cpp
@@ -238,21 +238,16 @@ WinTaskbar::~WinTaskbar() {
     NS_RELEASE(mTaskbar);
     ::CoUninitialize();
   }
 }
 
 // static
 bool
 WinTaskbar::GetAppUserModelID(nsAString & aDefaultGroupId) {
-  // For win8 metro builds, we can't set this. The value is static
-  // for the app.
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    return false;
-  }
   // If marked as such in prefs, use a hash of the profile path for the id
   // instead of the install path hash setup by the installer.
   bool useProfile =
     Preferences::GetBool("taskbar.grouping.useprofile", false);
   if (useProfile) {
     nsCOMPtr<nsIFile> profileDir;
     NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
                            getter_AddRefs(profileDir));
@@ -331,20 +326,16 @@ WinTaskbar::GetDefaultGroupId(nsAString 
 }
 
 // (static) Called from AppShell
 bool
 WinTaskbar::RegisterAppUserModelID() {
   if (!IsWin7OrLater())
     return false;
 
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    return false;
-  }
-
   SetCurrentProcessExplicitAppUserModelIDPtr funcAppUserModelID = nullptr;
   bool retVal = false;
 
   nsAutoString uid;
   if (!GetAppUserModelID(uid))
     return false;
 
   HMODULE hDLL = ::LoadLibraryW(kShellLibraryName);
--- a/widget/windows/WinUtils.cpp
+++ b/widget/windows/WinUtils.cpp
@@ -35,20 +35,16 @@
 #include "nsIDownloader.h"
 #include "nsINetUtil.h"
 #include "nsIChannel.h"
 #include "nsIObserver.h"
 #include "imgIEncoder.h"
 #include "nsIThread.h"
 #include "MainThreadUtils.h"
 #include "gfxColor.h"
-#ifdef MOZ_METRO
-#include "winrt/MetroInput.h"
-#include "winrt/MetroUtils.h"
-#endif // MOZ_METRO
 
 #ifdef NS_ENABLE_TSF
 #include <textstor.h>
 #include "nsTextStore.h"
 #endif // #ifdef NS_ENABLE_TSF
 
 #ifdef PR_LOGGING
 PRLogModuleInfo* gWindowsLog = nullptr;
@@ -533,36 +529,28 @@ WinUtils::Log(const char *fmt, ...)
   delete[] buffer;
 }
 
 /* static */
 double
 WinUtils::LogToPhysFactor()
 {
   // dpi / 96.0
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-#ifdef MOZ_METRO
-    return MetroUtils::LogToPhysFactor();
-#else
-    return 1.0;
-#endif
-  } else {
-    HDC hdc = ::GetDC(nullptr);
-    double result = ::GetDeviceCaps(hdc, LOGPIXELSY) / 96.0;
-    ::ReleaseDC(nullptr, hdc);
+  HDC hdc = ::GetDC(nullptr);
+  double result = ::GetDeviceCaps(hdc, LOGPIXELSY) / 96.0;
+  ::ReleaseDC(nullptr, hdc);
 
-    if (result == 0) {
-      // Bug 1012487 - This can occur when the Screen DC is used off the
-      // main thread on windows. For now just assume a 100% DPI for this
-      // drawing call.
-      // XXX - fixme!
-      result = 1.0;
-    }
-    return result;
+  if (result == 0) {
+    // Bug 1012487 - This can occur when the Screen DC is used off the
+    // main thread on windows. For now just assume a 100% DPI for this
+    // drawing call.
+    // XXX - fixme!
+    result = 1.0;
   }
+  return result;
 }
 
 /* static */
 double
 WinUtils::PhysToLogFactor()
 {
   // 1.0 / (dpi / 96.0)
   return 1.0 / LogToPhysFactor();
@@ -1680,18 +1668,13 @@ WinUtils::SetupKeyModifiersSequence(nsTA
     }
   }
 }
 
 /* static */
 bool
 WinUtils::ShouldHideScrollbars()
 {
-#ifdef MOZ_METRO
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    return widget::winrt::MetroInput::IsInputModeImprecise();
-  }
-#endif // MOZ_METRO
   return false;
 }
 
 } // namespace widget
 } // namespace mozilla
--- a/widget/windows/moz.build
+++ b/widget/windows/moz.build
@@ -1,17 +1,14 @@
 # -*- 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/.
 
-if CONFIG['MOZ_METRO']:
-    DIRS += ['winrt']
-
 TEST_DIRS += ['tests']
 
 EXPORTS += [
     'nsdefs.h',
     'WindowHook.h',
     'WinUtils.h',
 ]
 
--- a/widget/windows/nsClipboard.cpp
+++ b/widget/windows/nsClipboard.cpp
@@ -289,19 +289,16 @@ nsresult nsClipboard::GetGlobalData(HGLO
 
       GlobalUnlock(aHGBL);
       *aData = data;
       *aLen = allocSize;
 
       result = NS_OK;
     }
   } else {
-#ifdef MOZ_METRO
-    return result;
-#endif
     // We really shouldn't ever get here
     // but just in case
     *aData = nullptr;
     *aLen  = 0;
     LPVOID lpMsgBuf;
 
     FormatMessageW( 
         FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
--- a/widget/windows/nsLookAndFeel.cpp
+++ b/widget/windows/nsLookAndFeel.cpp
@@ -475,21 +475,20 @@ nsLookAndFeel::GetIntImpl(IntID aID, int
         break;
     case eIntID_ScrollbarButtonAutoRepeatBehavior:
         aResult = 0;
         break;
     case eIntID_SwipeAnimationEnabled:
         aResult = 0;
         break;
     case eIntID_ColorPickerAvailable:
-        // We don't have a color picker implemented on Metro yet (bug 895464)
-        aResult = (XRE_GetWindowsEnvironment() != WindowsEnvironmentType_Metro);
+        aResult = true;
         break;
     case eIntID_UseOverlayScrollbars:
-        aResult = (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro);
+        aResult = false;
         break;
     case eIntID_AllowOverlayScrollbarsOverlap:
         aResult = 0;
         break;
     case eIntID_ScrollbarDisplayOnMouseMove:
         aResult = 1;
         break;
     case eIntID_ScrollbarFadeBeginDelay:
--- a/widget/windows/nsTextStore.cpp
+++ b/widget/windows/nsTextStore.cpp
@@ -5,19 +5,16 @@
 
 #include <olectl.h>
 #include <algorithm>
 
 #include "prlog.h"
 
 #include "nscore.h"
 #include "nsWindow.h"
-#ifdef MOZ_METRO
-#include "winrt/MetroWidget.h"
-#endif
 #include "nsPrintfCString.h"
 #include "WinUtils.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/TextEvents.h"
 #include "mozilla/WindowsVersion.h"
 #include "nsIXULRuntime.h"
 
 #define INPUTSCOPE_INIT_GUID
@@ -3408,31 +3405,29 @@ nsTextStore::GetTextExt(TsViewCookie vcV
     return TS_E_INVALIDPOS; // but unexpected failure, maybe.
   }
   // IMEs don't like empty rects, fix here
   if (event.mReply.mRect.width <= 0)
     event.mReply.mRect.width = 1;
   if (event.mReply.mRect.height <= 0)
     event.mReply.mRect.height = 1;
 
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Desktop) {
-    // convert to unclipped screen rect
-    nsWindow* refWindow = static_cast<nsWindow*>(
-      event.mReply.mFocusedWidget ? event.mReply.mFocusedWidget : mWidget);
-    // Result rect is in top level widget coordinates
-    refWindow = refWindow->GetTopLevelWindow(false);
-    if (!refWindow) {
-      PR_LOG(sTextStoreLog, PR_LOG_ERROR,
-             ("TSF: 0x%p   nsTextStore::GetTextExt() FAILED due to "
-              "no top level window", this));
-      return E_FAIL;
-    }
-
-    event.mReply.mRect.MoveBy(refWindow->WidgetToScreenOffset());
-  }
+  // convert to unclipped screen rect
+  nsWindow* refWindow = static_cast<nsWindow*>(
+    event.mReply.mFocusedWidget ? event.mReply.mFocusedWidget : mWidget);
+  // Result rect is in top level widget coordinates
+  refWindow = refWindow->GetTopLevelWindow(false);
+  if (!refWindow) {
+    PR_LOG(sTextStoreLog, PR_LOG_ERROR,
+           ("TSF: 0x%p   nsTextStore::GetTextExt() FAILED due to "
+            "no top level window", this));
+    return E_FAIL;
+  }
+
+  event.mReply.mRect.MoveBy(refWindow->WidgetToScreenOffset());
 
   // get bounding screen rect to test for clipping
   if (!GetScreenExtInternal(*prc)) {
     PR_LOG(sTextStoreLog, PR_LOG_ERROR,
            ("TSF: 0x%p   nsTextStore::GetTextExt() FAILED due to "
             "GetScreenExtInternal() failure", this));
     return E_FAIL;
   }
@@ -3519,60 +3514,46 @@ nsTextStore::GetScreenExtInternal(RECT &
   mWidget->DispatchWindowEvent(&event);
   if (!event.mSucceeded) {
     PR_LOG(sTextStoreLog, PR_LOG_ERROR,
            ("TSF: 0x%p   nsTextStore::GetScreenExtInternal() FAILED due to "
             "NS_QUERY_EDITOR_RECT failure", this));
     return false;
   }
 
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    nsIntRect boundRect;
-    if (NS_FAILED(mWidget->GetClientBounds(boundRect))) {
-      PR_LOG(sTextStoreLog, PR_LOG_ERROR,
-             ("TSF: 0x%p   nsTextStore::GetScreenExtInternal() FAILED due to "
-              "failed to get the client bounds", this));
-      return false;
-    }
+  nsWindow* refWindow = static_cast<nsWindow*>(
+    event.mReply.mFocusedWidget ?
+      event.mReply.mFocusedWidget : mWidget);
+  // Result rect is in top level widget coordinates
+  refWindow = refWindow->GetTopLevelWindow(false);
+  if (!refWindow) {
+    PR_LOG(sTextStoreLog, PR_LOG_ERROR,
+           ("TSF: 0x%p   nsTextStore::GetScreenExtInternal() FAILED due to "
+            "no top level window", this));
+    return false;
+  }
+
+  nsIntRect boundRect;
+  if (NS_FAILED(refWindow->GetClientBounds(boundRect))) {
+    PR_LOG(sTextStoreLog, PR_LOG_ERROR,
+           ("TSF: 0x%p   nsTextStore::GetScreenExtInternal() FAILED due to "
+            "failed to get the client bounds", this));
+    return false;
+  }
+
+  boundRect.MoveTo(0, 0);
+
+  // Clip frame rect to window rect
+  boundRect.IntersectRect(LayoutDevicePixel::ToUntyped(event.mReply.mRect), boundRect);
+  if (!boundRect.IsEmpty()) {
+    boundRect.MoveBy(refWindow->WidgetToScreenOffsetUntyped());
     ::SetRect(&aScreenExt, boundRect.x, boundRect.y,
               boundRect.XMost(), boundRect.YMost());
   } else {
-    NS_ASSERTION(XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Desktop,
-                 "environment isn't WindowsEnvironmentType_Desktop!");
-    nsWindow* refWindow = static_cast<nsWindow*>(
-      event.mReply.mFocusedWidget ?
-        event.mReply.mFocusedWidget : mWidget);
-    // Result rect is in top level widget coordinates
-    refWindow = refWindow->GetTopLevelWindow(false);
-    if (!refWindow) {
-      PR_LOG(sTextStoreLog, PR_LOG_ERROR,
-             ("TSF: 0x%p   nsTextStore::GetScreenExtInternal() FAILED due to "
-              "no top level window", this));
-      return false;
-    }
-
-    nsIntRect boundRect;
-    if (NS_FAILED(refWindow->GetClientBounds(boundRect))) {
-      PR_LOG(sTextStoreLog, PR_LOG_ERROR,
-             ("TSF: 0x%p   nsTextStore::GetScreenExtInternal() FAILED due to "
-              "failed to get the client bounds", this));
-      return false;
-    }
-
-    boundRect.MoveTo(0, 0);
-
-    // Clip frame rect to window rect
-    boundRect.IntersectRect(LayoutDevicePixel::ToUntyped(event.mReply.mRect), boundRect);
-    if (!boundRect.IsEmpty()) {
-      boundRect.MoveBy(refWindow->WidgetToScreenOffsetUntyped());
-      ::SetRect(&aScreenExt, boundRect.x, boundRect.y,
-                boundRect.XMost(), boundRect.YMost());
-    } else {
-      ::SetRectEmpty(&aScreenExt);
-    }
+    ::SetRectEmpty(&aScreenExt);
   }
 
   PR_LOG(sTextStoreLog, PR_LOG_DEBUG,
          ("TSF: 0x%p   nsTextStore::GetScreenExtInternal() succeeded: "
           "aScreenExt={ left=%ld, top=%ld, right=%ld, bottom=%ld }",
           this, aScreenExt.left, aScreenExt.top,
           aScreenExt.right, aScreenExt.bottom));
   return true;
@@ -4493,21 +4474,16 @@ nsTextStore::OnMouseButtonEventInternal(
     }
   }
   return NS_OK;
 }
 
 void
 nsTextStore::CreateNativeCaret()
 {
-  // This method must work only on desktop application.
-  if (XRE_GetWindowsEnvironment() != WindowsEnvironmentType_Desktop) {
-    return;
-  }
-
   PR_LOG(sTextStoreLog, PR_LOG_DEBUG,
          ("TSF: 0x%p   nsTextStore::CreateNativeCaret(), "
           "mComposition.IsComposing()=%s",
           this, GetBoolName(mComposition.IsComposing())));
 
   Selection& currentSel = CurrentSelection();
   if (currentSel.IsDirty()) {
     PR_LOG(sTextStoreLog, PR_LOG_ERROR,
--- a/widget/windows/nsTextStore.h
+++ b/widget/windows/nsTextStore.h
@@ -288,17 +288,17 @@ protected:
                               ULONG aFilterCount,
                               const TS_ATTRID* aFilterAttrs);
   void     SetInputScope(const nsString& aHTMLInputType);
 
   // Creates native caret over our caret.  This method only works on desktop
   // application.  Otherwise, this does nothing.
   void     CreateNativeCaret();
 
-  // Holds the pointer to our current win32 or metro widget
+  // Holds the pointer to our current win32 widget
   nsRefPtr<nsWindowBase>       mWidget;
   // Document manager for the currently focused editor
   nsRefPtr<ITfDocumentMgr>     mDocumentMgr;
   // Edit cookie associated with the current editing context
   DWORD                        mEditCookie;
   // Editing context at the bottom of mDocumentMgr's context stack
   nsRefPtr<ITfContext>         mContext;
   // Currently installed notification sink
--- a/widget/windows/nsWidgetFactory.cpp
+++ b/widget/windows/nsWidgetFactory.cpp
@@ -26,23 +26,16 @@
 #include "nsXULAppAPI.h"
 // Desktop
 #include "nsFilePicker.h" // needs to be included before other shobjidl.h includes
 #include "nsColorPicker.h"
 #include "nsNativeThemeWin.h"
 #include "nsWindow.h"
 // Content processes
 #include "nsFilePickerProxy.h"
-// Metro
-#ifdef MOZ_METRO
-#include "winrt/MetroAppShell.h"
-#include "winrt/MetroWidget.h"
-#include "winrt/nsMetroFilePicker.h"
-#include "winrt/nsWinMetroUtils.h"
-#endif
 
 // Drag & Drop, Clipboard
 #include "nsClipboardHelper.h"
 #include "nsClipboard.h"
 #include "nsBidiKeyboard.h"
 #include "nsDragService.h"
 #include "nsTransferable.h"
 #include "nsHTMLFormatConverter.h"
@@ -63,94 +56,53 @@ using namespace mozilla::widget;
 static nsresult
 WindowConstructor(nsISupports *aOuter, REFNSIID aIID,
                   void **aResult)
 {
   *aResult = nullptr;
   if (aOuter != nullptr) {
     return NS_ERROR_NO_AGGREGATION;
   }
-  nsCOMPtr<nsIWidget> widget;
-
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-#ifdef MOZ_METRO
-    widget = new MetroWidget;
-#else
-    NS_RUNTIMEABORT("build does not support metro.");
-#endif
-  } else {
-    widget = new nsWindow;
-  }
-
+  nsCOMPtr<nsIWidget> widget = new nsWindow;
   return widget->QueryInterface(aIID, aResult);
 }
 
 static nsresult
 ChildWindowConstructor(nsISupports *aOuter, REFNSIID aIID,
                        void **aResult)
 {
   *aResult = nullptr;
   if (aOuter != nullptr) {
     return NS_ERROR_NO_AGGREGATION;
   }
-  nsCOMPtr<nsIWidget> widget;
-
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-    return NS_NOINTERFACE;
-  } else {
-    widget = new ChildWindow;
-  }
-
+  nsCOMPtr<nsIWidget> widget = new ChildWindow;
   return widget->QueryInterface(aIID, aResult);
 }
 
 static nsresult
 FilePickerConstructor(nsISupports *aOuter, REFNSIID aIID,
                       void **aResult)
 {
   *aResult = nullptr;
   if (aOuter != nullptr) {
     return NS_ERROR_NO_AGGREGATION;
   }
-  nsCOMPtr<nsIFilePicker> picker;
-
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-#ifdef MOZ_METRO
-    picker = new nsMetroFilePicker;
-#else
-    NS_RUNTIMEABORT("build does not support metro.");
-#endif
-  } else {
-    picker = new nsFilePicker;
-  }
+  nsCOMPtr<nsIFilePicker> picker = new nsFilePicker;
   return picker->QueryInterface(aIID, aResult);
 }
 
 static nsresult
 ColorPickerConstructor(nsISupports *aOuter, REFNSIID aIID,
                        void **aResult)
 {
   *aResult = nullptr;
   if (aOuter != nullptr) {
     return NS_ERROR_NO_AGGREGATION;
   }
-  nsCOMPtr<nsIColorPicker> picker;
-
-  if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-#ifdef MOZ_METRO
-    // TODO
-    // picker = new nsMetroColorPicker;
-    NS_ERROR("metro color picker isn't implemented currently");
-    return NS_ERROR_NO_INTERFACE;
-#else
-    NS_RUNTIMEABORT("build does not support metro.");
-#endif
-  } else {
-    picker = new nsColorPicker;
-  }
+  nsCOMPtr<nsIColorPicker> picker = new nsColorPicker;
   return picker->QueryInterface(aIID, aResult);
 }
 
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsScreenManagerWin)
 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIdleServiceWin, nsIdleServiceWin::GetInstance)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsClipboard)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsClipboardHelper)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound)
@@ -159,19 +111,16 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(JumpListB
 NS_GENERIC_FACTORY_CONSTRUCTOR(JumpListItem)
 NS_GENERIC_FACTORY_CONSTRUCTOR(JumpListSeparator)
 NS_GENERIC_FACTORY_CONSTRUCTOR(JumpListLink)
 NS_GENERIC_FACTORY_CONSTRUCTOR(JumpListShortcut)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsTransferable)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLFormatConverter)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsDragService)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsBidiKeyboard)
-#ifdef MOZ_METRO
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsWinMetroUtils)
-#endif
 #ifdef NS_PRINTING
 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintOptionsWin, Init)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsPrinterEnumeratorWin)
 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSession, Init)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceContextSpecWin)
 #endif
 
 namespace mozilla {
@@ -196,19 +145,16 @@ NS_DEFINE_NAMED_CID(NS_SOUND_CID);
 NS_DEFINE_NAMED_CID(NS_TRANSFERABLE_CID);
 NS_DEFINE_NAMED_CID(NS_HTMLFORMATCONVERTER_CID);
 NS_DEFINE_NAMED_CID(NS_WIN_TASKBAR_CID);
 NS_DEFINE_NAMED_CID(NS_WIN_JUMPLISTBUILDER_CID);
 NS_DEFINE_NAMED_CID(NS_WIN_JUMPLISTITEM_CID);
 NS_DEFINE_NAMED_CID(NS_WIN_JUMPLISTSEPARATOR_CID);
 NS_DEFINE_NAMED_CID(NS_WIN_JUMPLISTLINK_CID);
 NS_DEFINE_NAMED_CID(NS_WIN_JUMPLISTSHORTCUT_CID);
-#ifdef MOZ_METRO
-NS_DEFINE_NAMED_CID(NS_WIN_METROUTILS_CID);
-#endif
 NS_DEFINE_NAMED_CID(NS_DRAGSERVICE_CID);
 NS_DEFINE_NAMED_CID(NS_BIDIKEYBOARD_CID);
 #ifdef NS_PRINTING
 NS_DEFINE_NAMED_CID(NS_PRINTSETTINGSSERVICE_CID);
 NS_DEFINE_NAMED_CID(NS_PRINTER_ENUMERATOR_CID);
 NS_DEFINE_NAMED_CID(NS_PRINTSESSION_CID);
 NS_DEFINE_NAMED_CID(NS_DEVICE_CONTEXT_SPEC_CID);
 #endif
@@ -233,19 +179,16 @@ static const mozilla::Module::CIDEntry k
   { &kNS_WIN_TASKBAR_CID, false, nullptr, WinTaskbarConstructor },
   { &kNS_WIN_JUMPLISTBUILDER_CID, false, nullptr, JumpListBuilderConstructor },
   { &kNS_WIN_JUMPLISTITEM_CID, false, nullptr, JumpListItemConstructor },
   { &kNS_WIN_JUMPLISTSEPARATOR_CID, false, nullptr, JumpListSeparatorConstructor },
   { &kNS_WIN_JUMPLISTLINK_CID, false, nullptr, JumpListLinkConstructor },
   { &kNS_WIN_JUMPLISTSHORTCUT_CID, false, nullptr, JumpListShortcutConstructor },
   { &kNS_DRAGSERVICE_CID, false, nullptr, nsDragServiceConstructor, Module::MAIN_PROCESS_ONLY },
   { &kNS_BIDIKEYBOARD_CID, false, nullptr, nsBidiKeyboardConstructor },
-#ifdef MOZ_METRO
-  { &kNS_WIN_METROUTILS_CID, false, nullptr, nsWinMetroUtilsConstructor },
-#endif
 #ifdef NS_PRINTING
   { &kNS_PRINTSETTINGSSERVICE_CID, false, nullptr, nsPrintOptionsWinConstructor },
   { &kNS_PRINTER_ENUMERATOR_CID, false, nullptr, nsPrinterEnumeratorWinConstructor },
   { &kNS_PRINTSESSION_CID, false, nullptr, nsPrintSessionConstructor },
   { &kNS_DEVICE_CONTEXT_SPEC_CID, false, nullptr, nsDeviceContextSpecWinConstructor },
 #endif
   { nullptr }
 };
@@ -268,19 +211,16 @@ static const mozilla::Module::ContractID
   { "@mozilla.org/windows-taskbar;1", &kNS_WIN_TASKBAR_CID },
   { "@mozilla.org/windows-jumplistbuilder;1", &kNS_WIN_JUMPLISTBUILDER_CID },
   { "@mozilla.org/windows-jumplistitem;1", &kNS_WIN_JUMPLISTITEM_CID },
   { "@mozilla.org/windows-jumplistseparator;1", &kNS_WIN_JUMPLISTSEPARATOR_CID },
   { "@mozilla.org/windows-jumplistlink;1", &kNS_WIN_JUMPLISTLINK_CID },
   { "@mozilla.org/windows-jumplistshortcut;1", &kNS_WIN_JUMPLISTSHORTCUT_CID },
   { "@mozilla.org/widget/dragservice;1", &kNS_DRAGSERVICE_CID, Module::MAIN_PROCESS_ONLY },
   { "@mozilla.org/widget/bidikeyboard;1", &kNS_BIDIKEYBOARD_CID },
-#ifdef MOZ_METRO
-  { "@mozilla.org/windows-metroutils;1", &kNS_WIN_METROUTILS_CID },
-#endif
 #ifdef NS_PRINTING
   { "@mozilla.org/gfx/printsettings-service;1", &kNS_PRINTSETTINGSSERVICE_CID },
   { "@mozilla.org/gfx/printerenumerator;1", &kNS_PRINTER_ENUMERATOR_CID },
   { "@mozilla.org/gfx/printsession;1", &kNS_PRINTSESSION_CID },
   { "@mozilla.org/gfx/devicecontextspec;1", &kNS_DEVICE_CONTEXT_SPEC_CID },
 #endif
   { nullptr }
 };
--- a/widget/windows/nsWindow.cpp
+++ b/widget/windows/nsWindow.cpp
@@ -5388,33 +5388,16 @@ nsWindow::ProcessMessage(UINT msg, WPARA
       WidgetContentCommandEvent command(true, NS_CONTENT_COMMAND_REDO,
                                         this, true);
       DispatchWindowEvent(&command);
       *aRetValue = (LRESULT)(command.mSucceeded && command.mIsEnabled);
       result = true;
     }
     break;
 
-    case WM_SETTINGCHANGE:
-      if (IsWin8OrLater() && lParam &&
-          !wcsicmp(L"ConvertibleSlateMode", (wchar_t*)lParam)) {
-        // If we're switching into slate mode, switch to Metro for hardware
-        // that supports this feature if the pref is set.
-        if (GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 0 &&
-            Preferences::GetBool("browser.shell.desktop-auto-switch-enabled",
-                                 false)) {
-          nsCOMPtr<nsIAppStartup> appStartup(do_GetService(NS_APPSTARTUP_CONTRACTID));
-          if (appStartup) {
-            appStartup->Quit(nsIAppStartup::eForceQuit |
-                             nsIAppStartup::eRestartTouchEnvironment);
-          }
-        }
-      }
-    break;
-
     default:
     {
       if (msg == nsAppShell::GetTaskbarButtonCreatedMessage()) {
         SetHasTaskbarIconBeenCreated();
       }
     }
     break;
 
--- a/xpcom/base/ErrorList.h
+++ b/xpcom/base/ErrorList.h
@@ -904,17 +904,16 @@
    * DisplayLoadError */
   ERROR(NS_ERROR_DOCUMENT_IS_PRINTMODE,  FAILURE(2001)),
 
   ERROR(NS_SUCCESS_DONT_FIXUP,           SUCCESS(1)),
   /* This success code may be returned by nsIAppStartup::Run to indicate that
    * the application should be restarted.  This condition corresponds to the
    * case in which nsIAppStartup::Quit was called with the eRestart flag. */
   ERROR(NS_SUCCESS_RESTART_APP,          SUCCESS(1)),
-  ERROR(NS_SUCCESS_RESTART_METRO_APP,    SUCCESS(2)),
   ERROR(NS_SUCCESS_RESTART_APP_NOT_SAME_PROFILE,    SUCCESS(3)),
   ERROR(NS_SUCCESS_UNORM_NOTFOUND,  SUCCESS(17)),
 
 
   /* a11y */
   /* raised when current pivot's position is needed but it's not in the tree */
   ERROR(NS_ERROR_NOT_IN_TREE,  FAILURE(38)),
 
--- a/xpcom/base/nsDebugImpl.cpp
+++ b/xpcom/base/nsDebugImpl.cpp
@@ -36,19 +36,16 @@
 
 #if defined(XP_UNIX)
 #include <signal.h>
 #endif
 
 #if defined(XP_WIN)
 #include <tchar.h>
 #include "nsString.h"
-#ifdef MOZ_METRO
-#include "nsWindowsHelpers.h"
-#endif
 #endif
 
 #if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
  || defined(__NetBSD__) || defined(__OpenBSD__)
 #include <stdbool.h>
 #include <unistd.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
--- a/xpcom/base/nsSystemInfo.cpp
+++ b/xpcom/base/nsSystemInfo.cpp
@@ -189,32 +189,19 @@ nsSystemInfo::Init()
       if (NS_WARN_IF(NS_FAILED(rv))) {
         return rv;
       }
     } else {
       NS_WARNING("PR_GetSystemInfo failed");
     }
   }
 
-#if defined(XP_WIN) && defined(MOZ_METRO)
-  // Create "hasWindowsTouchInterface" property.
-  nsAutoString version;
-  rv = GetPropertyAsAString(NS_LITERAL_STRING("version"), version);
-  NS_ENSURE_SUCCESS(rv, rv);
-  double versionDouble = version.ToDouble(&rv);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  rv = SetPropertyAsBool(NS_ConvertASCIItoUTF16("hasWindowsTouchInterface"),
-                         versionDouble >= 6.2);
-  NS_ENSURE_SUCCESS(rv, rv);
-#else
   rv = SetPropertyAsBool(NS_ConvertASCIItoUTF16("hasWindowsTouchInterface"),
                          false);
   NS_ENSURE_SUCCESS(rv, rv);
-#endif
 
   // Additional informations not available through PR_GetSystemInfo.
   SetInt32Property(NS_LITERAL_STRING("pagesize"), PR_GetPageSize());
   SetInt32Property(NS_LITERAL_STRING("pageshift"), PR_GetPageShift());
   SetInt32Property(NS_LITERAL_STRING("memmapalign"), PR_GetMemMapAlignment());
   SetInt32Property(NS_LITERAL_STRING("cpucount"), PR_GetNumberOfProcessors());
   SetUint64Property(NS_LITERAL_STRING("memsize"), PR_GetPhysicalMemorySize());
   SetUint32Property(NS_LITERAL_STRING("umask"), nsSystemInfo::gUserUmask);
--- a/xpcom/base/nsWindowsHelpers.h
+++ b/xpcom/base/nsWindowsHelpers.h
@@ -122,46 +122,16 @@ public:
 
 typedef nsAutoRef<HKEY> nsAutoRegKey;
 typedef nsAutoRef<SC_HANDLE> nsAutoServiceHandle;
 typedef nsAutoRef<HANDLE> nsAutoHandle;
 typedef nsAutoRef<HMODULE> nsModuleHandle;
 
 namespace {
 
-bool inline
-IsRunningInWindowsMetro()
-{
-  static bool alreadyChecked = false;
-  static bool isMetro = false;
-  if (alreadyChecked) {
-    return isMetro;
-  }
-
-  HMODULE user32DLL = LoadLibraryW(L"user32.dll");
-  if (!user32DLL) {
-    return false;
-  }
-
-  typedef BOOL (WINAPI* IsImmersiveProcessFunc)(HANDLE aProcess);
-  IsImmersiveProcessFunc IsImmersiveProcessPtr =
-    (IsImmersiveProcessFunc)GetProcAddress(user32DLL,
-                                           "IsImmersiveProcess");
-  FreeLibrary(user32DLL);
-  if (!IsImmersiveProcessPtr) {
-    // isMetro is already set to false.
-    alreadyChecked = true;
-    return false;
-  }
-
-  isMetro = IsImmersiveProcessPtr(GetCurrentProcess());
-  alreadyChecked = true;
-  return isMetro;
-}
-
 HMODULE inline
 LoadLibrarySystem32(LPCWSTR aModule)
 {
   WCHAR systemPath[MAX_PATH + 1] = { L'\0' };
 
   // If GetSystemPath fails we accept that we'll load the DLLs from the
   // normal search path.
   GetSystemDirectoryW(systemPath, MAX_PATH + 1);
--- a/xpcom/build/IOInterposer.cpp
+++ b/xpcom/build/IOInterposer.cpp
@@ -423,22 +423,17 @@ IOInterposer::Init()
 {
   // Don't initialize twice...
   if (sMasterList) {
     return true;
   }
   if (!sThreadLocalData.init()) {
     return false;
   }
-#if defined(XP_WIN)
-  bool isMainThread =
-    XRE_GetWindowsEnvironment() != WindowsEnvironmentType_Metro;
-#else
   bool isMainThread = true;
-#endif
   RegisterCurrentThread(isMainThread);
   sMasterList = new MasterList();
 
   MainThreadIOLogger::Init();
 
   // Now we initialize the various interposers depending on platform
   InitPoisonIOInterposer();
   // We don't hook NSPR on Windows because PoisonIOInterposer captures a
--- a/xpcom/build/nsXULAppAPI.h
+++ b/xpcom/build/nsXULAppAPI.h
@@ -138,24 +138,16 @@
 /**
  * A directory service key which provides the directory where an OS update is
 *  applied.
  * At present this is supported only in Gonk.
  */
 #define XRE_OS_UPDATE_APPLY_TO_DIR "OSUpdApplyToD"
 
 /**
- * Platform flag values for XRE_main.
- *
- * XRE_MAIN_FLAG_USE_METRO - On Windows, use the winrt backend. Defaults
- * to win32 backend.
- */
-#define XRE_MAIN_FLAG_USE_METRO 0x01
-
-/**
  * Begin an XUL application. Does not return until the user exits the
  * application.
  *
  * @param argc/argv Command-line parameters to pass to the application. On
  *                  Windows, these should be in UTF8. On unix-like platforms
  *                  these are in the "native" character set.
  *
  * @param aAppData  Information about the application to be run.
@@ -457,34 +449,16 @@ XRE_API(void,
         XRE_StartupTimelineRecord, (int aEvent, PRTime aWhen))
 
 XRE_API(void,
         XRE_InitOmnijar, (nsIFile* aGreOmni,
                           nsIFile* aAppOmni))
 XRE_API(void,
         XRE_StopLateWriteChecks, (void))
 
-#ifdef XP_WIN
-/**
- * Valid environment types for XRE_GetWindowsEnvironment.
- */
-enum WindowsEnvironmentType
-{
-  WindowsEnvironmentType_Desktop = 0,
-  WindowsEnvironmentType_Metro = 1
-};
-
-/**
- * Retrieve the Windows desktop environment libXUL is running
- * under. Valid after a call to XRE_main.
- */
-XRE_API(WindowsEnvironmentType,
-        XRE_GetWindowsEnvironment, ())
-#endif // XP_WIN
-
 #ifdef MOZ_B2G_LOADER
 XRE_API(int,
         XRE_ProcLoaderServiceRun, (pid_t, int, int argc, const char* argv[],
                                    mozilla::Vector<int>& aReservedFds));
 XRE_API(void,
         XRE_ProcLoaderClientInit, (pid_t, int,
                                    mozilla::Vector<int>& aReservedFds));
 XRE_API(void,
--- a/xpcom/io/nsAppDirectoryServiceDefs.h
+++ b/xpcom/io/nsAppDirectoryServiceDefs.h
@@ -58,17 +58,16 @@
 // key with NS_SHARED returns a location that is shared by
 // other users of the profile. Without this prefix, the consumer
 // has exclusive access to this location.
 
 #define NS_SHARED                               "SHARED"
 
 #define NS_APP_PREFS_50_DIR                     "PrefD"         // Directory which contains user prefs       
 #define NS_APP_PREFS_50_FILE                    "PrefF"
-#define NS_METRO_APP_PREFS_50_FILE              "MetroPrefF"    // Metro browser prefs file
 #define NS_APP_PREFS_DEFAULTS_DIR_LIST          "PrefDL"
 #define NS_EXT_PREFS_DEFAULTS_DIR_LIST          "ExtPrefDL"
 #define NS_APP_PREFS_OVERRIDE_DIR               "PrefDOverride" // Directory for per-profile defaults
 
 #define NS_APP_USER_PROFILE_50_DIR              "ProfD"
 #define NS_APP_USER_PROFILE_LOCAL_50_DIR        "ProfLD"
 
 #define NS_APP_USER_CHROME_DIR                  "UChrm"
--- a/xpcom/io/nsLocalFileWin.cpp
+++ b/xpcom/io/nsLocalFileWin.cpp
@@ -207,19 +207,16 @@ private:
 
   // Launches the default shell operation for the file path
   nsresult Launch()
   {
     // use the app registry name to launch a shell execute....
     SHELLEXECUTEINFOW seinfo;
     memset(&seinfo, 0, sizeof(seinfo));
     seinfo.cbSize = sizeof(SHELLEXECUTEINFOW);
-    if (XRE_GetWindowsEnvironment() == WindowsEnvironmentType_Metro) {
-      seinfo.fMask  = SEE_MASK_FLAG_LOG_USAGE;
-    }
     seinfo.hwnd   = nullptr;
     seinfo.lpVerb = nullptr;
     seinfo.lpFile = mResolvedPath.get();
     seinfo.lpParameters =  nullptr;
     seinfo.lpDirectory  = nullptr;
     seinfo.nShow  = SW_SHOWNORMAL;
 
     // Use the directory of the file we're launching as the working