diff --git a/CLOBBER b/CLOBBER
index e5e64eaa8f8..03223e952fc 100644
--- a/CLOBBER
+++ b/CLOBBER
@@ -22,8 +22,4 @@
# 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
diff --git a/accessible/windows/msaa/AccessibleWrap.cpp b/accessible/windows/msaa/AccessibleWrap.cpp
index 099dd425c51..05e4f958dcd 100644
--- a/accessible/windows/msaa/AccessibleWrap.cpp
+++ b/accessible/windows/msaa/AccessibleWrap.cpp
@@ -1180,13 +1180,6 @@ 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,
diff --git a/browser/app-rules.mk b/browser/app-rules.mk
index 9672782a2cd..2c31653046f 100644
--- a/browser/app-rules.mk
+++ b/browser/app-rules.mk
@@ -1,4 +1 @@
PURGECACHES_DIRS = $(DIST)/bin/browser
-ifdef MOZ_METRO
-PURGECACHES_DIRS += $(DIST)/bin/metro
-endif
diff --git a/browser/app/moz.build b/browser/app/moz.build
index 626ccc0efc6..e085800f8d0 100644
--- a/browser/app/moz.build
+++ b/browser/app/moz.build
@@ -6,7 +6,7 @@
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')
@@ -43,10 +43,9 @@ LOCAL_INCLUDES += [
'/xpcom/build',
]
-if not CONFIG['MOZ_METRO']:
- DELAYLOAD_DLLS += [
- 'mozglue.dll',
- ]
+DELAYLOAD_DLLS += [
+ 'mozglue.dll',
+]
USE_LIBS += [
'mozglue',
diff --git a/browser/app/nsBrowserApp.cpp b/browser/app/nsBrowserApp.cpp
index 56fb4bb4587..33c75f020f9 100644
--- a/browser/app/nsBrowserApp.cpp
+++ b/browser/app/nsBrowserApp.cpp
@@ -31,10 +31,6 @@
#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
@@ -61,12 +57,6 @@ using namespace mozilla;
#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, ... )
{
@@ -128,40 +118,6 @@ static bool IsArg(const char* arg, const char* s)
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;
@@ -234,167 +190,28 @@ static int do_main(int argc, char* argv[], nsIFile *xreDirectory)
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
- }
+ ScopedAppData appData(&sAppData);
+ nsCOMPtr exeFile;
+ rv = mozilla::BinaryPath::GetFile(argv[0], getter_AddRefs(exeFile));
+ if (NS_FAILED(rv)) {
+ Output("Couldn't find the application directory.\n");
+ return 255;
}
-#endif
- // Desktop browser launch
- if (mainFlags != XRE_MAIN_FLAG_USE_METRO && !metroOnDesktop) {
- ScopedAppData appData(&sAppData);
- nsCOMPtr 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 greDir;
- exeFile->GetParent(getter_AddRefs(greDir));
+ nsCOMPtr greDir;
+ exeFile->GetParent(getter_AddRefs(greDir));
#ifdef XP_MACOSX
- greDir->SetNativeLeafName(NS_LITERAL_CSTRING(kOSXResourcesFolder));
+ greDir->SetNativeLeafName(NS_LITERAL_CSTRING(kOSXResourcesFolder));
#endif
- nsCOMPtr appSubdir;
- greDir->Clone(getter_AddRefs(appSubdir));
- appSubdir->Append(NS_LITERAL_STRING(kDesktopFolder));
+ nsCOMPtr appSubdir;
+ greDir->Clone(getter_AddRefs(appSubdir));
+ appSubdir->Append(NS_LITERAL_STRING(kDesktopFolder));
- SetStrongPtr(appData.directory, static_cast(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 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");
- 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(appSubdir.get()));
+ SetStrongPtr(appData.directory, static_cast(appSubdir.get()));
// xreDirectory already has a refcount from NS_NewLocalFile
- appData->xreDirectory = xreDirectory;
+ appData.xreDirectory = xreDirectory;
-#ifdef XP_WIN
- if (!metroOnDesktop) {
- nsCOMPtr 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;
- }
-
- // 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));
-
- 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
@@ -572,11 +389,8 @@ InitXPCOMGlue(const char *argv0, nsIFile **xreDirectory)
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';
@@ -597,9 +411,6 @@ InitXPCOMGlue(const char *argv0, nsIFile **xreDirectory)
int main(int argc, char* argv[])
{
-#ifdef DEBUG_delay_start_metro
- Sleep(5000);
-#endif
uint64_t start = TimeStamp_Now();
#ifdef XP_MACOSX
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index 955e5824598..c603c60e7a3 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -140,7 +140,6 @@ pref("app.update.cert.maxErrors", 5);
// |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.
@@ -162,17 +161,8 @@ pref("app.update.enabled", true);
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);
diff --git a/browser/base/content/browser-menubar.inc b/browser/base/content/browser-menubar.inc
index 53a3f1df11d..30b09d456d6 100644
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -48,15 +48,6 @@
command="Browser:OpenFile"
key="openFileKb"
accesskey="&openFileCmd.accesskey;"/>
-#ifdef HAVE_SHELL_SERVICE
-#ifdef XP_WIN
-#ifdef MOZ_METRO
-
-#endif
-#endif
-#endif
Some attack pages intentionally distribute harmful software, but many are compromised without the knowledge or permission of their owners.
">
-
-
-
-These types of web forgeries are used in scams known as phishing attacks, in which fraudulent web pages and emails are used to imitate sources you may trust.">
diff --git a/browser/metro/locales/en-US/chrome/preferences.dtd b/browser/metro/locales/en-US/chrome/preferences.dtd
deleted file mode 100644
index 49ba1ca5780..00000000000
--- a/browser/metro/locales/en-US/chrome/preferences.dtd
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/browser/metro/locales/en-US/chrome/region.properties b/browser/metro/locales/en-US/chrome/region.properties
deleted file mode 100644
index 94db18bac06..00000000000
--- a/browser/metro/locales/en-US/chrome/region.properties
+++ /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/.
-
-# LOCALIZATION NOTE: REVIEW_REQUIRED
-# For all locales: please do not commit any changes to this file without a
-# review from the l10n-drivers team. In order to get one, please file a bug,
-# add the "productization" keyword and CC l10n@mozilla.com.
-# en-US: if you're changing this file, please CC l10n@mozilla.com in the
-# associated bug to help us determine if these changes are relevant for other
-# locales and how to localize them.
-
-# Default search engine
-browser.search.defaultenginename=Bing
-
-# Search engine order (order displayed in the search bar dropdown)
-browser.search.order.1=Bing
-browser.search.order.2=Google
-browser.search.order.3=Yahoo
diff --git a/browser/metro/locales/en-US/chrome/searchPanel.dtd b/browser/metro/locales/en-US/chrome/searchPanel.dtd
deleted file mode 100644
index b0d80ccbe9e..00000000000
--- a/browser/metro/locales/en-US/chrome/searchPanel.dtd
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/browser/metro/locales/en-US/chrome/sync.dtd b/browser/metro/locales/en-US/chrome/sync.dtd
deleted file mode 100644
index 57a7660030b..00000000000
--- a/browser/metro/locales/en-US/chrome/sync.dtd
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/browser/metro/locales/en-US/chrome/sync.properties b/browser/metro/locales/en-US/chrome/sync.properties
deleted file mode 100644
index 383de10e4b1..00000000000
--- a/browser/metro/locales/en-US/chrome/sync.properties
+++ /dev/null
@@ -1,15 +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/.
-
-# LOCALIZATION NOTE: Used in the default os description when a new account
-# is being set up. Should be unique to Metro, so that it does not conflict
-# with Desktop. See /services/sync/modules/engines/clients.js locaName.
-sync.defaultAccountApplication=Metro %S
-
-# %S is the date and time at which the last sync successfully completed
-sync.flyout.connected.lastSynced=Last sync: %S
-# %S is the username logged in
-sync.flyout.connected.account=Account: %S
-# %S is the name that the user has chosen for this device
-sync.flyout.connected.device=Your device: %S
\ No newline at end of file
diff --git a/browser/metro/locales/generic/profile/bookmarks.json.in b/browser/metro/locales/generic/profile/bookmarks.json.in
deleted file mode 100644
index 4013f72414d..00000000000
--- a/browser/metro/locales/generic/profile/bookmarks.json.in
+++ /dev/null
@@ -1,17 +0,0 @@
-#filter substitution
-{"type":"text/x-moz-place-container","root":"placesRoot","children":
- [{"type":"text/x-moz-place-container","title":"@bookmarks_title@","annos":[{"name":"metro/bookmarksRoot","expires":4,"type":1,"value":1}],
- "children":
- [
- {"index":1,"title":"@firefox_about@", "type":"text/x-moz-place", "uri":"http://www.mozilla.org/@AB_CD@/about/",
- "iconUri":"data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AVVBO%2F1NOTv9UT07%2FVVBOAFVQTwBUT04AU05N%2F1ROTv9VT0%2F%2FVVBPAFROTgBUT04AVE5O%2F1VQTv9VUE7%2F%2F%2F%2F%2FAFVQTv9UTk7%2FVE5O%2F1NOTgBUTk4AVE9OAFRPTvdTTk7%2FVE5O%2F1NOTgBVUE4AU05OAFVQTv9UTk7%2FU05N%2F%2F%2F%2F%2FwBTTk7%2FVE5O%2F1VQTv9VUE4AVVBOAFROTgBUT073VE5O%2F1ROTv9TTk4AVE5OAFROTgBVUE7%2FVE5O%2F1VQT%2F%2F%2F%2F%2F8AVE5O%2F1VQTv9UTk7%2FVE5OAFRPTgBUTk4AVE9O91VQT%2F9UTk7%2FU05OAFRPTgBUT04AVE5O%2F1NOTv9UTk7%2F%2F%2F%2F%2FAFROTv9UTk7%2FVVBP%2F1ROTgBUTk4AVE5OAFVQTvdUTk7%2FU05N%2F1NOTQBTTk4AU05OAFVPT%2F9TTk7%2FVE5O%2F%2F%2F%2F%2FwBUTk7%2FVE9O%2F1ROTv9UTk4AVU9PAFVQTwBVT0%2F3VE9O%2F1ROTv9UTk4AVE9OAFNOTgBVUE7%2FU05O%2F1ROTv%2F%2F%2F%2F8AVE9O%2F1VQT%2F9VUE%2F%2FVE5OAFVQTgBUTk4AVE9O91ROTv9UTk7%2FVE5OAFNOTgBUTk4AVE5O%2F1NOTf9UTk7%2F%2F%2F%2F%2FAFVQTv9UT07%2FU05N%2F1ROTgBVUE4AVE5OAFVQTutVUE7%2FVE9O%2F1NOTQBUT04AVVBOAFROTv9UTk7%2FVE9O%2F1ROTiFUTk7%2FVE5O%2F1NOTf9UTk4%2B%2F%2F%2F%2FAP%2F%2F%2FwBUTk7%2FVVBO%2F1ROTv9UTk4%2BVE9OAFRPTgBTTk3%2FVE5O%2F1ROTv9UT05lU05O%2F1ROTv9VUE7%2FU05N%2F1VQToBUT06eU05O%2F1RPTv9UTk7%2FVE9O%2F1VPT51VT0%2BaVE5O%2F1ROTv9VT0%2F%2FVE5Or1VQTv9UTk7%2FU05N%2F1ROTv9TTk7%2FVVBO%2F1NOTf9TTk7%2FU05N%2BVNOTv9UTk7%2FVVBP%2F1RPTv9VUE%2F%2FU05OzP%2F%2F%2FwBUT07%2FU05N%2F1ROTo%2F%2F%2F%2F8AVE9O%2F1RPTv9UTk7%2FVE5OqFROTgBVUE5hU05O%2F1VQTv9TTk7%2FVE9O31ROTgD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2FAAD%2F%2FwAAjjgAAI44AACOOAAAjjgAAI44AACOOAAAjjgAAI44AACOOAAAgAAAAAAAAACIYQAA%2F%2F8AAP%2F%2FAAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk3BU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk26U05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk26U05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk26U05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk26U05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk32U05NAFNOTQBTTk0AU05NAFNOTQBTTk3LU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk1WU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk32U05NkVNOTQBTTk0AU05NHFNOTftTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk29U05NHFNOTQBTTk0cU05N%2B1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2FlNOTfBTTk3%2BU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N9lNOTf5TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfb%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk1aU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N3P%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTahTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf5TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3bU05N21NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk12%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NwVNOTftTTk3%2FU05N%2F1NOTf9TTk3%2FU05NHFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N3FNOTQBTTk0AU05NqVNOTf5TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NqVNOTQD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05NAFNOTTlTTk29U05N51NOTdxTTk0AU05NAFNOTXZTTk3cU05N9lNOTf9TTk37U05N51NOTXVTTk0AU05NAFNOTQBTTk0AU05NOFNOTc9TTk32U05N%2F1NOTf9TTk3wU05Nz1NOTThTTk0AU05NAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPgfA8D4HwPA%2BB8DwPgfA8D4HwPA%2BB8DwPgfA8D4HwPA%2BB8DwPgfA8D4HwPA%2BB8DwPgfA8D4HwPA%2BB8DwPgfA8A4BwPAAAADwAAAA4AAAAeBAGAH8cH4H%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F"
- },
- {"index":2,"title":"@firefox_feedback@", "type":"text/x-moz-place", "uri":"https://input.mozilla.org/feedback/metrofirefox",
- "iconUri":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA0xJREFUeNpUU11sFFUYPffO3d2Z7i677NIuNM3uUJRWBEMUTLARwYAlEEwISVMDPKHiz4OgiYEmYuID+OArPvDog0Ejhgcx4UdDaCk2soiW7lpafnZp6lK3u9vd7czszNwZ72wpwZN8+e795p5zJ9/5LnFdF1/K0g8ATh41eDratWtDt1Z4J8gbm9PhVBsWMCriioifRNzwCpXx880P5LGA621+jq89UfIF+/cXRjq9/T6Dg4jct+8rHD1Qx+R3152rf2iXtxdvflErGte8M1SQ93uLtwei2Dl7e8Aje2sPuQaQr3McP/URPjmtoPddlR7e477Bg6HL6suxvqYAIdgSi0tNwt7+GFIpHxYxFJHwcdSPsWoDfYd24vXPVXTu7sa2T5+XazV6es2u1uVUouSllc/6TC1vw6no2LAp/ESsKUiBKhjKyWfgBvz4djgK9ZUE4kklUn9kHaO+AGlv75D8lu4gqC7crs8lsGzHQZw9U4J7qYI/b87i9tUHcCAhM2libs5G1/Y45ovGViZ6uCQYpWCUQKtRhF5d1RRhvkwzT08UUM5kUZsuwHYY0lkKhXIkUjLmy7ybNQwnABuQV1AMXqzB+uUGpgtNU3Ci92tY33wvrOKC5EA3CBKqhuiSEsqaBqNqMxrwkXptThCEX7GEhNawgxVCzMPAhQ/w46ZfcXxjDtWZIsxqGa915IFyCfW/H0EJEY2J/v/1T97qCS+VsHqNjIejNtalGF7YKCMo2xjJ/QucuwK74z0klTwOrc+iUTAxNVSGRJxRZnP3zMSo+WIkzpS2pIyOdTHYJkf6t3nk7priP8ZwLPgWelrG8f6OWcSlBioTFWR+l+CPxi6RkwEaUiQMMkLWb+0PQw4wcM5AZQn3y34UqwZayDySbRZUNQBdWJodruNeTqkuT7Z2SdsYMXUXt8RVb06NmUG5haBF4aCWjbhPx6qQgYQM+B3qDT5yd2yMZyyjOKlvmblXusO8Zn1m8BEx0r0mcc+nh7X2eIiis8uPSIxAV8QBMR4zUxZygwSubmvFGadHVG89eUyLOBViKx2CI47r7uaUqNxecEcOECyNUINb7rl6xR34sG7fX+T8T+BpIZGeE9H+uDQtIvs0cRH/CTAA8jZdCaXrR1kAAAAASUVORK5CYII="
- },
- {"index":3,"title":"@firefox_community@", "type":"text/x-moz-place", "uri":"http://www.mozilla.org/@AB_CD@/contribute/",
- "iconUri":"data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AVVBO%2F1NOTv9UT07%2FVVBOAFVQTwBUT04AU05N%2F1ROTv9VT0%2F%2FVVBPAFROTgBUT04AVE5O%2F1VQTv9VUE7%2F%2F%2F%2F%2FAFVQTv9UTk7%2FVE5O%2F1NOTgBUTk4AVE9OAFRPTvdTTk7%2FVE5O%2F1NOTgBVUE4AU05OAFVQTv9UTk7%2FU05N%2F%2F%2F%2F%2FwBTTk7%2FVE5O%2F1VQTv9VUE4AVVBOAFROTgBUT073VE5O%2F1ROTv9TTk4AVE5OAFROTgBVUE7%2FVE5O%2F1VQT%2F%2F%2F%2F%2F8AVE5O%2F1VQTv9UTk7%2FVE5OAFRPTgBUTk4AVE9O91VQT%2F9UTk7%2FU05OAFRPTgBUT04AVE5O%2F1NOTv9UTk7%2F%2F%2F%2F%2FAFROTv9UTk7%2FVVBP%2F1ROTgBUTk4AVE5OAFVQTvdUTk7%2FU05N%2F1NOTQBTTk4AU05OAFVPT%2F9TTk7%2FVE5O%2F%2F%2F%2F%2FwBUTk7%2FVE9O%2F1ROTv9UTk4AVU9PAFVQTwBVT0%2F3VE9O%2F1ROTv9UTk4AVE9OAFNOTgBVUE7%2FU05O%2F1ROTv%2F%2F%2F%2F8AVE9O%2F1VQT%2F9VUE%2F%2FVE5OAFVQTgBUTk4AVE9O91ROTv9UTk7%2FVE5OAFNOTgBUTk4AVE5O%2F1NOTf9UTk7%2F%2F%2F%2F%2FAFVQTv9UT07%2FU05N%2F1ROTgBVUE4AVE5OAFVQTutVUE7%2FVE9O%2F1NOTQBUT04AVVBOAFROTv9UTk7%2FVE9O%2F1ROTiFUTk7%2FVE5O%2F1NOTf9UTk4%2B%2F%2F%2F%2FAP%2F%2F%2FwBUTk7%2FVVBO%2F1ROTv9UTk4%2BVE9OAFRPTgBTTk3%2FVE5O%2F1ROTv9UT05lU05O%2F1ROTv9VUE7%2FU05N%2F1VQToBUT06eU05O%2F1RPTv9UTk7%2FVE9O%2F1VPT51VT0%2BaVE5O%2F1ROTv9VT0%2F%2FVE5Or1VQTv9UTk7%2FU05N%2F1ROTv9TTk7%2FVVBO%2F1NOTf9TTk7%2FU05N%2BVNOTv9UTk7%2FVVBP%2F1RPTv9VUE%2F%2FU05OzP%2F%2F%2FwBUT07%2FU05N%2F1ROTo%2F%2F%2F%2F8AVE9O%2F1RPTv9UTk7%2FVE5OqFROTgBVUE5hU05O%2F1VQTv9TTk7%2FVE9O31ROTgD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2FAAD%2F%2FwAAjjgAAI44AACOOAAAjjgAAI44AACOOAAAjjgAAI44AACOOAAAgAAAAAAAAACIYQAA%2F%2F8AAP%2F%2FAAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk3BU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk26U05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk26U05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk26U05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3wU05NAFNOTQBTTk0AU05NAFNOTQBTTk26U05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk0AU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfBTTk0AU05NAFNOTQBTTk0AU05NAFNOTbpTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTQBTTk0AU05NAFNOTQBTTk0AU05N8FNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N8FNOTQBTTk0AU05NAFNOTQBTTk0AU05NulNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NAFNOTQBTTk0AU05NAFNOTQBTTk3wU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf%2F%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk32U05NAFNOTQBTTk0AU05NAFNOTQBTTk3LU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk1WU05NAFNOTQBTTk0AU05NAFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F%2F%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTQBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk32U05NkVNOTQBTTk0AU05NHFNOTftTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk29U05NHFNOTQBTTk0cU05N%2B1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2F%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NAFNOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2FlNOTfBTTk3%2BU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N9lNOTf5TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTfb%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk1aU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N3P%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAFNOTahTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf5TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3bU05N21NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk12%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8AU05NwVNOTftTTk3%2FU05N%2F1NOTf9TTk3%2FU05NHFNOTfBTTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05N3FNOTQBTTk0AU05NqVNOTf5TTk3%2FU05N%2F1NOTf9TTk3%2FU05N%2F1NOTf9TTk3%2FU05NqVNOTQD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwBTTk0AU05NAFNOTTlTTk29U05N51NOTdxTTk0AU05NAFNOTXZTTk3cU05N9lNOTf9TTk37U05N51NOTXVTTk0AU05NAFNOTQBTTk0AU05NOFNOTc9TTk32U05N%2F1NOTf9TTk3wU05Nz1NOTThTTk0AU05NAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2FwD%2F%2F%2F8A%2F%2F%2F%2FAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPgfA8D4HwPA%2BB8DwPgfA8D4HwPA%2BB8DwPgfA8D4HwPA%2BB8DwPgfA8D4HwPA%2BB8DwPgfA8D4HwPA%2BB8DwPgfA8A4BwPAAAADwAAAA4AAAAeBAGAH8cH4H%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F"
- }
- ]
- }]
-}
diff --git a/browser/metro/locales/import/Makefile.in b/browser/metro/locales/import/Makefile.in
deleted file mode 100644
index e4c50bb5436..00000000000
--- a/browser/metro/locales/import/Makefile.in
+++ /dev/null
@@ -1,53 +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/.
-
-# desktop specific resources - this defines LOCALE_SRCDIR
-relativesrcdir = browser/locales
-
-include $(topsrcdir)/config/config.mk
-
-#########################################
-# l10s prefs file
-
-# copying firefox-l10n.js over from LOCALE_SRCDIR or browser
-L10N_PREF_JS_EXPORTS = $(firstword $(wildcard $(LOCALE_SRCDIR)/firefox-l10n.js) \
- $(srcdir)/en-US/firefox-l10n.js )
-L10N_PREF_JS_EXPORTS_PATH = $(FINAL_TARGET)/$(PREF_DIR)
-L10N_PREF_JS_EXPORTS_FLAGS = $(PREF_PPFLAGS) --silence-missing-directive-warnings
-PP_TARGETS += L10N_PREF_JS_EXPORTS
-
-include $(topsrcdir)/config/rules.mk
-
-#########################################
-# Search plugins
-
-# Metro reuses desktop search plugins
-libs::
- $(MAKE) -C $(DEPTH)/browser/locales searchplugins \
- DIST_SUBDIR=$(DIST_SUBDIR) XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
-
-#########################################
-# Bookmarks
-
-# Pick up desktop's bookmarks.inc file
-ifdef LOCALE_MERGEDIR
-vpath book%.inc $(LOCALE_MERGEDIR)/browser/profile
-endif
-vpath book%.inc $(LOCALE_SRCDIR)/profile
-ifdef LOCALE_MERGEDIR
-vpath book%.inc @top_srcdir@/$(relativesrcdir)/en-US/profile
-endif
-
-bookmarks-src = $(srcdir)/../generic/profile/bookmarks.json.in
-
-# The resulting bookmarks.json will get picked up and packaged by the
-# processing of the jar file in the parent directory.
-bookmarks: bookmarks.inc
- @echo 'Generating: $@'
- $(call py_action,preprocessor, \
- -I $^ \
- -DAB_CD=$(AB_CD) \
- $(bookmarks-src) -o ../bookmarks.json)
-
-export:: bookmarks
diff --git a/browser/metro/locales/import/moz.build b/browser/metro/locales/import/moz.build
deleted file mode 100644
index 895d11993cf..00000000000
--- a/browser/metro/locales/import/moz.build
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- 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/.
-
diff --git a/browser/metro/locales/jar.mn b/browser/metro/locales/jar.mn
deleted file mode 100644
index 250e5d6a1ab..00000000000
--- a/browser/metro/locales/jar.mn
+++ /dev/null
@@ -1,45 +0,0 @@
-#filter substitution
-# 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/.
-
-#
-# Metro jar resources
-#
-
-@AB_CD@.jar:
-% locale browser @AB_CD@ %locale/browser/
- locale/browser/aboutCertError.dtd (%chrome/aboutCertError.dtd)
- locale/browser/browser.dtd (%chrome/browser.dtd)
- locale/browser/browser.properties (%chrome/browser.properties)
- locale/browser/config.dtd (%chrome/config.dtd)
- locale/browser/config.properties (%chrome/config.properties)
- locale/browser/region.properties (%chrome/region.properties)
- locale/browser/preferences.dtd (%chrome/preferences.dtd)
- locale/browser/aboutPanel.dtd (%chrome/aboutPanel.dtd)
- locale/browser/searchPanel.dtd (%chrome/searchPanel.dtd)
- locale/browser/checkbox.dtd (%chrome/checkbox.dtd)
- locale/browser/sync.dtd (%chrome/sync.dtd)
- locale/browser/sync.properties (%chrome/sync.properties)
- locale/browser/passwordmgr.properties (%chrome/passwordmgr.properties)
- locale/browser/phishing.dtd (%chrome/phishing.dtd)
-#ifdef MOZ_CRASHREPORTER
- locale/browser/crashprompt.dtd (%chrome/crashprompt.dtd)
-#endif
- locale/browser/aboutAddons.dtd (%chrome/aboutAddons.dtd)
-
-@AB_CD@.jar:
-% locale browser @AB_CD@ %locale/browser/
- locale/browser/bookmarks.json (bookmarks.json)
-
-#
-# Browser jar resources
-#
-
-@AB_CD@.jar:
-relativesrcdir browser/locales:
- locale/browser/syncBrand.dtd (%chrome/browser/syncBrand.dtd)
- locale/browser/netError.dtd (%chrome/overrides/netError.dtd)
-% override chrome://global/locale/netError.dtd chrome://browser/locale/netError.dtd
- locale/browser/appstrings.properties (%chrome/overrides/appstrings.properties)
-% override chrome://global/locale/appstrings.properties chrome://browser/locale/appstrings.properties
diff --git a/browser/metro/locales/moz.build b/browser/metro/locales/moz.build
deleted file mode 100644
index 07c483373c0..00000000000
--- a/browser/metro/locales/moz.build
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- 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/.
-
-# Process desktop related resource we reuse here.
-DIRS += ['import']
-
-JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
diff --git a/browser/metro/metroapp.ini.in b/browser/metro/metroapp.ini.in
deleted file mode 100644
index c7b6623aacc..00000000000
--- a/browser/metro/metroapp.ini.in
+++ /dev/null
@@ -1,21 +0,0 @@
-#filter substitution
-[App]
-Vendor=Mozilla
-Name=@MOZ_APP_BASENAME@
-UAName=Firefox
-Version=@GRE_MILESTONE@
-BuildID=@GRE_BUILDID@
-ID={99bceaaa-e3c6-48c1-b981-ef9b46b67d60}
-
-[Gecko]
-MinVersion=@GRE_MILESTONE@
-MaxVersion=@GRE_MILESTONE@
-
-[XRE]
-EnableProfileMigrator=0
-
-[Crash Reporter]
-#if MOZILLA_OFFICIAL
-Enabled=1
-#endif
-ServerURL=https://crash-reports.mozilla.com/submit?id={99bceaaa-e3c6-48c1-b981-ef9b46b67d60}&version=@GRE_MILESTONE@&buildid=@GRE_BUILDID@
diff --git a/browser/metro/modules/ContentUtil.jsm b/browser/metro/modules/ContentUtil.jsm
deleted file mode 100644
index 350db9c6b49..00000000000
--- a/browser/metro/modules/ContentUtil.jsm
+++ /dev/null
@@ -1,106 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-this.EXPORTED_SYMBOLS = ["ContentUtil"];
-
-const XHTML_NS = "http://www.w3.org/1999/xhtml";
-const nsIDOMKeyEvent = Components.interfaces.nsIDOMKeyEvent;
-
-this.ContentUtil = {
- populateFragmentFromString: function populateFragmentFromString(fragment, str) {
- let re = /^([^#]*)#(\d+)\b([^#]*)/,
- document = fragment.ownerDocument,
- // the remaining arguments are our {text, className} values
- replacements = Array.slice(arguments, 2),
- match;
-
- // walk over the string, building textNode/spans as nec. with replacement content
- // note that #1,#2 etc. may not appear in numerical order in the string
- while ((match = re.exec(str))) {
- let [mstring,pre,num,post] = match,
- replaceText = "",
- replaceClass,
- idx = num-1; // markers are 1-based, replacement indices 0 based
-
- str = str.substring(re.lastIndex+mstring.length);
-
- if (pre)
- fragment.appendChild(document.createTextNode(pre));
-
- if (replacements[idx]) {
- replaceText = replacements[idx].text;
- let spanNode = document.createElementNS(XHTML_NS, "span");
- spanNode.appendChild(document.createTextNode(replaceText));
- // add class to the span when provided
- if(replacements[idx].className)
- spanNode.classList.add(replacements[idx].className);
-
- fragment.appendChild(spanNode);
- } else {
- // put it back if no replacement was provided
- fragment.appendChild(document.createTextNode("#"+num));
- }
-
- if(post)
- fragment.appendChild(document.createTextNode(post));
- }
- if(str)
- fragment.appendChild(document.createTextNode(str));
-
- return fragment;
- },
-
- // Pass several objects in and it will combine them all into the first object and return it.
- // NOTE: Deep copy is not supported
- extend: function extend() {
- // copy reference to target object
- let target = arguments[0] || {};
- let length = arguments.length;
-
- if (length === 1) {
- return target;
- }
-
- // Handle case when target is a string or something
- if (typeof target != "object" && typeof target != "function") {
- target = {};
- }
-
- for (let i = 1; i < length; i++) {
- // Only deal with non-null/undefined values
- let options = arguments[i];
- if (options != null) {
- // Extend the base object
- for (let name in options) {
- let copy = options[name];
-
- // Prevent never-ending loop
- if (target === copy)
- continue;
-
- if (copy !== undefined)
- target[name] = copy;
- }
- }
- }
-
- // Return the modified object
- return target;
- },
-
- // Checks if a keycode is used for list navigation.
- isNavigationKey: function (keyCode) {
- let navigationKeys = [
- nsIDOMKeyEvent.DOM_VK_DOWN,
- nsIDOMKeyEvent.DOM_VK_UP,
- nsIDOMKeyEvent.DOM_VK_LEFT,
- nsIDOMKeyEvent.DOM_VK_RIGHT,
- nsIDOMKeyEvent.DOM_VK_PAGE_UP,
- nsIDOMKeyEvent.DOM_VK_PAGE_DOWN,
- nsIDOMKeyEvent.DOM_VK_ESCAPE];
-
- return navigationKeys.indexOf(keyCode) != -1;
- }
-};
diff --git a/browser/metro/modules/CrossSlide.jsm b/browser/metro/modules/CrossSlide.jsm
deleted file mode 100644
index 8823cc26679..00000000000
--- a/browser/metro/modules/CrossSlide.jsm
+++ /dev/null
@@ -1,280 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-this.EXPORTED_SYMBOLS = ["CrossSlide"];
-
-// needs DPI adjustment?
-let CrossSlideThresholds = {
- SELECTIONSTART: 25,
- SPEEDBUMPSTART: 30,
- SPEEDBUMPEND: 50,
- REARRANGESTART: 80
-};
-
-// see: http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.input.crossslidingstate.ASPx
-let CrossSlidingState = {
- STARTED: 0,
- DRAGGING: 1,
- SELECTING: 2,
- SELECT_SPEED_BUMPING: 3,
- SPEED_BUMPING: 4,
- REARRANGING: 5,
- COMPLETED: 6
-};
-
-let CrossSlidingStateNames = [
- 'started',
- 'dragging',
- 'selecting',
- 'selectSpeedBumping',
- 'speedBumping',
- 'rearranging',
- 'completed'
-];
-
-// --------------------------------
-// module helpers
-//
-
-function isSelectable(aElement) {
- // placeholder logic
- return aElement.nodeName == 'richgriditem' && aElement.hasAttribute("value");
-}
-function withinCone(aLen, aHeight) {
- // check pt falls within 45deg either side of the cross axis
- return aLen > aHeight;
-}
-function getScrollAxisFromElement(aElement) {
- // keeping it simple - just return apparent scroll axis for the document
- let win = aElement.ownerDocument.defaultView;
- let scrollX = win.scrollMaxX,
- scrollY = win.scrollMaxY;
- // determine scroll axis from scrollable content when possible
- if (scrollX || scrollY)
- return scrollX >= scrollY ? 'x' : 'y';
-
- // fall back to guessing at scroll axis from document aspect ratio
- let docElem = aElement.ownerDocument.documentElement;
- return docElem.clientWidth >= docElem.clientHeight ?
- 'x' : 'y';
-}
-function pointFromTouchEvent(aEvent) {
- let touch = aEvent.touches[0];
- return { x: touch.clientX, y: touch.clientY };
-}
-// This damping function has these important properties:
-// f(0) = 0
-// f'(0) = 1
-// limit as x -> Infinity of f(x) = 1
-function damp(aX) {
- return 2 / (1 + Math.exp(-2 * aX)) - 1;
-}
-function speedbump(aDelta, aStart, aEnd) {
- let x = Math.abs(aDelta);
- if (x <= aStart)
- return aDelta;
- let sign = aDelta / x;
-
- let d = aEnd - aStart;
- let damped = damp((x - aStart) / d);
- return sign * (aStart + (damped * d));
-}
-
-
-this.CrossSlide = {
- // -----------------------
- // Gesture constants
- Thresholds: CrossSlideThresholds,
- State: CrossSlidingState,
- StateNames: CrossSlidingStateNames,
- // -----------------------
- speedbump: speedbump
-};
-
-function CrossSlideHandler(aNode, aThresholds) {
- this.node = aNode;
- this.thresholds = Object.create(CrossSlideThresholds);
- // apply per-instance threshold configuration
- if (aThresholds) {
- for(let key in aThresholds)
- this.thresholds[key] = aThresholds[key];
- }
- aNode.addEventListener("touchstart", this, false);
- aNode.addEventListener("touchmove", this, false);
- aNode.addEventListener("touchend", this, false);
- aNode.addEventListener("touchcancel", this, false);
- aNode.ownerDocument.defaultView.addEventListener("scroll", this, false);
-}
-
-CrossSlideHandler.prototype = {
- node: null,
- drag: null,
-
- getCrossSlideState: function(aCrossAxisDistance, aScrollAxisDistance) {
- if (aCrossAxisDistance <= 0) {
- return CrossSlidingState.STARTED;
- }
- if (aCrossAxisDistance < this.thresholds.SELECTIONSTART) {
- return CrossSlidingState.DRAGGING;
- }
- if (aCrossAxisDistance < this.thresholds.SPEEDBUMPSTART) {
- return CrossSlidingState.SELECTING;
- }
- if (aCrossAxisDistance < this.thresholds.SPEEDBUMPEND) {
- return CrossSlidingState.SELECT_SPEED_BUMPING;
- }
- if (aCrossAxisDistance < this.thresholds.REARRANGESTART) {
- return CrossSlidingState.SPEED_BUMPING;
- }
- // out of bounds cross-slide
- return -1;
- },
-
- handleEvent: function handleEvent(aEvent) {
- switch (aEvent.type) {
- case "touchstart":
- this._onTouchStart(aEvent);
- break;
- case "touchmove":
- this._onTouchMove(aEvent);
- break;
- case "scroll":
- case "touchcancel":
- this.cancel(aEvent);
- break;
- case "touchend":
- this._onTouchEnd(aEvent);
- break;
- }
- },
-
- cancel: function(aEvent){
- this._fireProgressEvent("cancelled", aEvent);
- this.drag = null;
- },
-
- _onTouchStart: function onTouchStart(aEvent){
- if (aEvent.touches.length > 1)
- return;
- let touch = aEvent.touches[0];
- // cross-slide is a single touch gesture
- // the top target is the one we need here, touch.target not relevant
- let target = aEvent.target;
-
- if (!isSelectable(target))
- return;
-
- let scrollAxis = getScrollAxisFromElement(target);
-
- this.drag = {
- scrollAxis: scrollAxis,
- crossAxis: (scrollAxis=='x') ? 'y' : 'x',
- origin: pointFromTouchEvent(aEvent),
- state: -1
- };
- },
-
- _onTouchMove: function(aEvent){
- if (!this.drag) {
- return;
- }
-
- if (aEvent.touches.length!==1) {
- // cancel if another touch point gets involved
- return this.cancel(aEvent);
- }
-
- let startPt = this.drag.origin;
- let endPt = this.drag.position = pointFromTouchEvent(aEvent);
-
- let scrollAxis = this.drag.scrollAxis,
- crossAxis = this.drag.crossAxis;
-
- // distance from the origin along the axis perpendicular to scrolling
- let crossAxisDistance = Math.abs(endPt[crossAxis] - startPt[crossAxis]);
- // distance along the scrolling axis
- let scrollAxisDistance = Math.abs(endPt[scrollAxis] - startPt[scrollAxis]);
- let currState = this.drag.state;
- let newState = this.getCrossSlideState(crossAxisDistance, scrollAxisDistance);
-
- switch (newState) {
- case -1 :
- // dodgy input/out of bounds
- return this.cancel(aEvent);
- case CrossSlidingState.STARTED :
- break;
- case CrossSlidingState.DRAGGING :
- if (scrollAxisDistance > this.thresholds.SELECTIONSTART) {
- // looks like a pan/scroll was intended
- return this.cancel(aEvent);
- }
- // else fall-thru'
- case CrossSlidingState.SELECTING :
- case CrossSlidingState.SELECT_SPEED_BUMPING :
- case CrossSlidingState.SPEED_BUMPING :
- // we're committed to a cross-slide gesture,
- // so going out of bounds at this point means aborting
- if (!withinCone(crossAxisDistance, scrollAxisDistance)) {
- return this.cancel(aEvent);
- }
- // we're mid-gesture, consume this event
- aEvent.stopPropagation();
- break;
- }
-
- if (currState !== newState) {
- this.drag.state = newState;
- this._fireProgressEvent( CrossSlidingStateNames[newState], aEvent );
- }
- },
- _onTouchEnd: function(aEvent){
- if (!this.drag)
- return;
-
- if (this.drag.state < CrossSlidingState.SELECTING) {
- return this.cancel(aEvent);
- }
-
- this._fireProgressEvent("completed", aEvent);
- this._fireSelectEvent(aEvent);
- this.drag = null;
- },
-
- /**
- * Dispatches a custom Event on the drag node.
- * @param aEvent The source event.
- * @param aType The event type.
- */
- _fireProgressEvent: function CrossSliding_fireEvent(aState, aEvent) {
- if (!this.drag)
- return;
- let event = this.node.ownerDocument.createEvent("Events");
- let crossAxisName = this.drag.crossAxis;
- event.initEvent("MozCrossSliding", true, true);
- event.crossSlidingState = aState;
- if ('position' in this.drag) {
- event.position = this.drag.position;
- if (crossAxisName) {
- event.direction = crossAxisName;
- if('origin' in this.drag) {
- event.delta = this.drag.position[crossAxisName] - this.drag.origin[crossAxisName];
- }
- }
- }
- aEvent.target.dispatchEvent(event);
- },
-
- /**
- * Dispatches a custom Event on the given target node.
- * @param aEvent The source event.
- */
- _fireSelectEvent: function SelectTarget_fireEvent(aEvent) {
- let event = this.node.ownerDocument.createEvent("Events");
- event.initEvent("MozCrossSlideSelect", true, true);
- event.position = this.drag.position;
- aEvent.target.dispatchEvent(event);
- }
-};
-this.CrossSlide.Handler = CrossSlideHandler;
diff --git a/browser/metro/modules/View.jsm b/browser/metro/modules/View.jsm
deleted file mode 100644
index eb8554e4ea4..00000000000
--- a/browser/metro/modules/View.jsm
+++ /dev/null
@@ -1,157 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-this.EXPORTED_SYMBOLS = ["View"];
-
-Components.utils.import("resource://gre/modules/PlacesUtils.jsm");
-Components.utils.import("resource:///modules/colorUtils.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-// --------------------------------
-// module helpers
-//
-
-function makeURI(aURL, aOriginCharset, aBaseURI) {
- return Services.io.newURI(aURL, aOriginCharset, aBaseURI);
-}
-
-// --------------------------------
-
-
-// --------------------------------
-// View prototype for shared functionality
-
-function View(aSet) {
- this._set = aSet;
- this._set.controller = this;
- this._window = aSet.ownerDocument.defaultView;
- this._maxTiles = 8;
- this._tilePrefName = "unknown";
-
- this.onResize = () => this._adjustDOMforViewState();
- this._window.addEventListener("resize", this.onResize);
-
- ColorUtils.init();
- this._adjustDOMforViewState();
-}
-
-View.prototype = {
- set maxTiles(aVal) {
- this._maxTiles = aVal;
- },
-
- get maxTiles() {
- return this._maxTiles;
- },
-
- set showing(aFlag) {
- // 'vbox' must be defined on objects that inherit from us
- this.vbox.setAttribute("hidden", aFlag ? "false" : "true");
- },
-
- set tilePrefName(aStr) {
- // Should be called once on init by objects that inherit from us
- this._tilePrefName = aStr;
- this._maxTiles = Services.prefs.getIntPref(this._tilePrefName);
- Services.prefs.addObserver(this._tilePrefName, this, false);
- },
-
- destruct: function () {
- this._window.removeEventListener("resize", this.onResize);
- if (this._tilePrefName != "unknown") {
- Services.prefs.removeObserver(this._tilePrefName, this);
- }
- },
-
- _adjustDOMforViewState: function _adjustDOMforViewState(aState) {
- let grid = this._set;
- if (!grid) {
- return;
- }
- if (!aState) {
- aState = grid.getAttribute("viewstate");
- }
- switch (aState) {
- case "snapped":
- grid.setAttribute("nocontext", true);
- grid.selectNone();
- grid.disableCrossSlide();
- break;
- case "portrait":
- grid.removeAttribute("nocontext");
- grid.setAttribute("vertical", true);
- grid.enableCrossSlide();
- break;
- default:
- grid.removeAttribute("nocontext");
- grid.removeAttribute("vertical");
- grid.enableCrossSlide();
- }
- if ("arrangeItems" in grid) {
- grid.arrangeItems();
- }
- },
-
- _updateFavicon: function pv__updateFavicon(aItem, aUri) {
- if ("string" == typeof aUri) {
- aUri = makeURI(aUri);
- }
- PlacesUtils.favicons.getFaviconURLForPage(aUri, this._gotIcon.bind(this, aItem));
- },
-
- _gotIcon: function pv__gotIcon(aItem, aIconUri) {
- if (!aIconUri) {
- aItem.removeAttribute("iconURI");
- if (aItem.refresh) {
- aItem.refresh();
- }
- return;
- }
- if ("string" == typeof aIconUri) {
- aIconUri = makeURI(aIconUri);
- }
- let faviconURL = (PlacesUtils.favicons.getFaviconLinkForIcon(aIconUri)).spec;
- aItem.iconSrc = faviconURL;
-
- let xpFaviconURI = makeURI(faviconURL.replace("moz-anno:favicon:",""));
- Task.spawn(function() {
- let colorInfo = yield ColorUtils.getForegroundAndBackgroundIconColors(xpFaviconURI);
- if (!(colorInfo && colorInfo.background && colorInfo.foreground)) {
- return;
- }
- let { background, foreground } = colorInfo;
- aItem.style.color = foreground; //color text
- aItem.setAttribute("customColor", background);
- let matteColor = 0xffffff; // white
- let alpha = 0.04; // the tint weight
- let [,r,g,b] = background.match(/rgb\((\d+),(\d+),(\d+)/);
- // get the rgb value that represents this color at given opacity over a white matte
- let tintColor = ColorUtils.addRgbColors(matteColor, ColorUtils.createDecimalColorWord(r,g,b,alpha));
- aItem.setAttribute("tintColor", ColorUtils.convertDecimalToRgbColor(tintColor));
- // when bound, use the setter to propogate the color change through the tile
- if ('color' in aItem) {
- aItem.color = background;
- }
- });
- },
-
- refreshView: function () {
- },
-
- observe: function (aSubject, aTopic, aState) {
- switch (aTopic) {
- case "nsPref:changed": {
- if (aState == this._tilePrefName) {
- let count = Services.prefs.getIntPref(this._tilePrefName);
- this.maxTiles = count;
- this.showing = this.maxTiles > 0;
- this.refreshView();
- }
- break;
- }
- }
- }
-};
diff --git a/browser/metro/modules/colorUtils.jsm b/browser/metro/modules/colorUtils.jsm
deleted file mode 100644
index bd6dfd1c3b5..00000000000
--- a/browser/metro/modules/colorUtils.jsm
+++ /dev/null
@@ -1,173 +0,0 @@
-// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-'use strict';
-Components.utils.import("resource://gre/modules/Services.jsm");
-Components.utils.import("resource://gre/modules/Promise.jsm");
-
-const ColorAnalyzer = Components.classes["@mozilla.org/places/colorAnalyzer;1"]
- .getService(Components.interfaces.mozIColorAnalyzer);
-
-this.EXPORTED_SYMBOLS = ["ColorUtils"];
-
-let ColorUtils = {
- _initialized: false,
- init: function() {
- if (this._initialized)
- return;
- Services.obs.addObserver(this, "idle-daily", false);
- Services.obs.addObserver(this, "quit-application", false);
- this._initialized = true;
- },
- uninit: function() {
- Services.obs.removeObserver(this, "idle-daily");
- Services.obs.removeObserver(this, "quit-application");
- },
-
- // default to keeping icon colorInfo for max 1 day
- iconColorCacheMaxAge: 86400000,
-
- // in-memory store for favicon color data
- _uriColorsMap: (function() {
- let cache = new Map();
- // remove stale entries
- cache.purge = function(maxAgeMs = 0) {
- let cuttoff = Date.now() - (maxAgeMs || ColorUtils.iconColorCacheMaxAge);
- for (let [key, value] of this) {
- if (value.timestamp && value.timestamp >= cuttoff) {
- continue;
- }
- this.delete(key);
- }
- }
- return cache;
- })(),
- get iconColorCache() {
- return ColorUtils._uriColorsMap;
- },
-
- observe: function (aSubject, aTopic, aData) {
- switch (aTopic) {
- case "idle-daily":
- this.iconColorCache.purge();
- break;
- case "quit-application":
- this.uninit();
- break;
- }
- },
-
- /** Takes an icon and returns either an object with foreground and background color properties
- * or a promise for the same.
- * The foreground is the contrast color, the background is the primary/dominant one
- */
- getForegroundAndBackgroundIconColors: function getForegroundAndBackgroundIconColors(aIconURI) {
- let colorKey = aIconURI.spec;
- let colorInfo = this._uriColorsMap.get(colorKey);
- if (colorInfo) {
- return colorInfo;
- }
-
- let deferred = Promise.defer();
- let wrappedIcon = aIconURI;
- this._uriColorsMap.set(colorKey, deferred.promise);
-
- ColorAnalyzer.findRepresentativeColor(wrappedIcon, (success, color) => {
- if (!success) {
- this._uriColorsMap.delete(colorKey);
- deferred.reject();
- } else {
- colorInfo = {
- foreground: this.bestTextColorForContrast(color),
- background: this.convertDecimalToRgbColor(color),
- timestamp: Date.now()
- };
- deferred.resolve(colorInfo);
- }
- });
- return deferred.promise;
- },
-
- /** returns the best color for text readability on top of aColor
- * return color is in rgb(r,g,b) format, suitable to csss
- * The color bightness algorithm is currently: http://www.w3.org/TR/AERT#color-contrast
- */
- bestTextColorForContrast: function bestTextColorForContrast(aColor) {
- let r = (aColor & 0xff0000) >> 16;
- let g = (aColor & 0x00ff00) >> 8;
- let b = (aColor & 0x0000ff);
-
- let w3cContrastValue = ((r*299)+(g*587)+(b*114))/1000;
- w3cContrastValue = Math.round(w3cContrastValue);
- let textColor = "rgb(255,255,255)";
-
- if (w3cContrastValue > 125) {
- // bright/light, use black text
- textColor = "rgb(0,0,0)";
- }
- return textColor;
- },
-
- toCSSRgbColor: function toCSSRgbColor(r, g, b, a) {
- var values = [Math.round(r), Math.round(g), Math.round(b)];
- if (undefined !== a && a < 1) {
- values.push(a);
- return 'rgba('+values.join(',')+')';
- }
- return 'rgb('+values.join(',')+')';
- },
-
- /**
- * converts a decimal(base10) number into CSS rgb color value string
- */
- convertDecimalToRgbColor: function convertDecimalToRgbColor(aColor) {
- let [r,g,b,a] = this.unpackDecimalColorWord(aColor);
- return this.toCSSRgbColor(r,g,b,a);
- },
-
- /**
- * unpack a decimal(base10) word for r,g,b,a values
- */
- unpackDecimalColorWord: function unpackDecimalColorWord(aColor) {
- let a = (aColor & 0xff000000) >> 24;
- let r = (aColor & 0x00ff0000) >> 16;
- let g = (aColor & 0x0000ff00) >> 8;
- let b = (aColor & 0x000000ff);
- // NB: falsy alpha treated as undefined, fully opaque
- return a ? [r,g,b,a/255] : [r,g,b];
- },
-
- /**
- * create a decimal(base10) word for r,g,b values
- */
- createDecimalColorWord: function createDecimalColorWord(r, g, b, a) {
- let rgb = 0;
- rgb |= b;
- rgb |= (g << 8);
- rgb |= (r << 16);
- // pack alpha value if one is given
- if (undefined !== a && a < 1)
- rgb |= (Math.round(a*255) << 24);
- return rgb;
- },
-
- /**
- * Add 2 rgb(a) colors to get a flat color
- */
- addRgbColors: function addRgbColors(color1, color2) {
- let [r1, g1, b1] = this.unpackDecimalColorWord(color1);
- let [r2, g2, b2, alpha] = this.unpackDecimalColorWord(color2);
-
- let color = {};
- // early return if 2nd color is opaque
- if (!alpha || alpha >= 1)
- return color2;
-
- return this.createDecimalColorWord(
- Math.min(255, alpha * r2 + (1 - alpha) * r1),
- Math.min(255, alpha * g2 + (1 - alpha) * g1),
- Math.min(255, alpha * b2 + (1 - alpha) * b1)
- );
- }
-};
diff --git a/browser/metro/modules/moz.build b/browser/metro/modules/moz.build
deleted file mode 100644
index 0c9626a934c..00000000000
--- a/browser/metro/modules/moz.build
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- 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/.
-
-EXTRA_JS_MODULES += [
- 'colorUtils.jsm',
- 'ContentUtil.jsm',
- 'CrossSlide.jsm',
- 'View.jsm',
-]
-
diff --git a/browser/metro/moz.build b/browser/metro/moz.build
deleted file mode 100644
index d3eee1797ca..00000000000
--- a/browser/metro/moz.build
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- 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 += [
- 'base',
- 'components',
- 'modules',
- 'theme',
- 'profile',
- 'locales',
-]
-
-if CONFIG['OS_ARCH'] == 'WINNT':
- DIRS += ['shell']
-
-DIST_SUBDIR = 'metro'
-
-if CONFIG['MOZILLA_OFFICIAL']:
- DEFINES['MOZILLA_OFFICIAL'] = True
-
-DEFINES['GRE_MILESTONE'] = CONFIG['GRE_MILESTONE']
diff --git a/browser/metro/profile/metro.js b/browser/metro/profile/metro.js
deleted file mode 100644
index 38093ffd686..00000000000
--- a/browser/metro/profile/metro.js
+++ /dev/null
@@ -1,681 +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/. */
-
-#filter substitution
-
-#ifdef DEBUG
-// disable content and content script caching
-pref("nglayout.debug.disable_xul_cache", true);
-pref("nglayout.debug.disable_xul_fastload", true);
-pref("devtools.errorconsole.enabled", true);
-pref("devtools.chrome.enabled", true);
-#else
-pref("devtools.errorconsole.enabled", false);
-pref("devtools.chrome.enabled", false);
-#endif
-
-// Automatically submit crash reports
-#ifdef RELEASE_BUILD
-pref("app.crashreporter.autosubmit", false);
-pref("app.crashreporter.submitURLs", false);
-#else
-// For Nightly and Aurora we turn this on by default
-pref("app.crashreporter.autosubmit", true);
-pref("app.crashreporter.submitURLs", false);
-#endif
-// Has the user been prompted about crash reporting?
-pref("app.crashreporter.prompted", false);
-
-// Debug prefs, see input.js
-pref("metro.debug.colorizeInputOverlay", false);
-pref("metro.debug.selection.displayRanges", false);
-pref("metro.debug.selection.dumpRanges", false);
-pref("metro.debug.selection.dumpEvents", false);
-
-// Private browsing is disabled by default until implementation and testing are complete
-pref("metro.private_browsing.enabled", false);
-
-// Enable tab-modal prompts
-pref("prompts.tab_modal.enabled", true);
-
-// NewTabUtils pref related to top site thumbnail updating.
-pref("browser.newtabpage.enabled", true);
-
-// Enable off main thread compositing
-pref("layers.offmainthreadcomposition.enabled", true);
-pref("layers.async-pan-zoom.enabled", true);
-pref("layers.componentalpha.enabled", false);
-
-// Prefs to control the async pan/zoom behaviour
-pref("apz.touch_start_tolerance", "0.1"); // dpi * tolerance = pixel threshold
-pref("apz.pan_repaint_interval", 50); // prefer 20 fps
-pref("apz.fling_repaint_interval", 50); // prefer 20 fps
-pref("apz.smooth_scroll_repaint_interval", 50); // prefer 20 fps
-pref("apz.fling_stopped_threshold", "0.2");
-pref("apz.x_skate_size_multiplier", "2.5");
-pref("apz.y_skate_size_multiplier", "2.5");
-pref("apz.min_skate_speed", "10.0");
-// 0 = free, 1 = standard, 2 = sticky
-pref("apz.axis_lock.mode", 2);
-pref("apz.cross_slide.enabled", true);
-
-// Enable Microsoft TSF support by default for imes.
-pref("intl.tsf.enable", true);
-pref("intl.tsf.support_imm", false);
-pref("intl.tsf.hack.atok.create_native_caret", false);
-
-pref("general.autoScroll", true);
-pref("general.smoothScroll", true);
-pref("general.smoothScroll.durationToIntervalRatio", 200);
-pref("mousewheel.enable_pixel_scrolling", true);
-
-// For browser.xml binding
-//
-// cacheRatio* is a ratio that determines the amount of pixels to cache. The
-// ratio is multiplied by the viewport width or height to get the displayport's
-// width or height, respectively.
-//
-// (divide integer value by 1000 to get the ratio)
-//
-// For instance: cachePercentageWidth is 1500
-// viewport height is 500
-// => display port height will be 500 * 1.5 = 750
-//
-pref("toolkit.browser.cacheRatioWidth", 2000);
-pref("toolkit.browser.cacheRatioHeight", 3000);
-
-// How long before a content view (a handle to a remote scrollable object)
-// expires.
-pref("toolkit.browser.contentViewExpire", 3000);
-
-
-pref("toolkit.defaultChromeURI", "chrome://browser/content/browser.xul");
-pref("browser.chromeURL", "chrome://browser/content/");
-
-// Telemetry
-#ifdef MOZ_TELEMETRY_ON_BY_DEFAULT
-pref("toolkit.telemetry.enabledPreRelease", true);
-#else
-pref("toolkit.telemetry.enabled", true);
-#endif
-pref("toolkit.telemetry.prompted", 2);
-
-pref("toolkit.screen.lock", false);
-
-// From libpref/src/init/all.js. Disabling text zoom in favor of APZ zoom. See bug 936940.
-pref("zoom.minPercent", 100);
-pref("zoom.maxPercent", 100);
-pref("toolkit.zoomManager.zoomValues", "1");
-
-// Device pixel to CSS px ratio, in percent. Set to -1 to calculate based on display density.
-pref("browser.viewport.scaleRatio", -1);
-
-// use long press to display a context menu
-pref("ui.click_hold_context_menus", false);
-
-// offline cache prefs
-pref("browser.offline-apps.notify", true);
-
-// protocol warning prefs
-pref("network.protocol-handler.warn-external.tel", false);
-pref("network.protocol-handler.warn-external.mailto", false);
-pref("network.protocol-handler.warn-external.vnd.youtube", false);
-pref("network.protocol-handler.warn-external.ms-windows-store", false);
-pref("network.protocol-handler.external.ms-windows-store", true);
-
-/* startui prefs */
-// display the overlay nav buttons
-pref("browser.display.overlaynavbuttons", true);
-// max number of top site tiles to display in the startui
-pref("browser.display.startUI.topsites.maxresults", 8);
-// max items for the bookmarks compartment in the startui
-pref("browser.display.startUI.bookmarks.maxresults", 16);
-// max items for the history compartment in the startui
-pref("browser.display.startUI.history.maxresults", 16);
-// Number of times to display firstrun instructions on new tab page
-pref("browser.firstrun.count", 3);
-// Has the content first run been dismissed
-pref("browser.firstrun-content.dismissed", false);
-
-// Backspace and Shift+Backspace behavior
-// 0 goes Back/Forward
-// 1 act like PgUp/PgDown
-// 2 and other values, nothing
-pref("browser.backspace_action", 0);
-
-// session history
-pref("browser.sessionhistory.max_entries", 50);
-
-// On startup, don't automatically restore tabs
-pref("browser.startup.page", 1);
-
-/* session store */
-pref("browser.sessionstore.resume_from_crash", true);
-pref("browser.sessionstore.resume_session_once", false);
-pref("browser.sessionstore.resume_from_crash_timeout", 60); // minutes
-// minimal interval between two save operations in milliseconds
-pref("browser.sessionstore.interval", 15000); // milliseconds
-// maximum amount of POSTDATA to be saved in bytes per history entry (-1 = all of it)
-// (NB: POSTDATA will be saved either entirely or not at all)
-pref("browser.sessionstore.postdata", 0);
-// on which sites to save text data, POSTDATA and cookies
-// 0 = everywhere, 1 = unencrypted sites, 2 = nowhere
-pref("browser.sessionstore.privacy_level", 0);
-// the same as browser.sessionstore.privacy_level, but for saving deferred session data
-pref("browser.sessionstore.privacy_level_deferred", 1);
-// how many tabs can be reopened (per window)
-pref("browser.sessionstore.max_tabs_undo", 10);
-// number of crashes that can occur before the about:sessionrestore page is displayed
-// (this pref has no effect if more than 6 hours have passed since the last crash)
-pref("browser.sessionstore.max_resumed_crashes", 1);
-// restore_on_demand overrides MAX_CONCURRENT_TAB_RESTORES (sessionstore constant)
-// and restore_hidden_tabs. When true, tabs will not be restored until they are
-// focused (also applies to tabs that aren't visible). When false, the values
-// for MAX_CONCURRENT_TAB_RESTORES and restore_hidden_tabs are respected.
-// Selected tabs are always restored regardless of this pref.
-pref("browser.sessionstore.restore_on_demand", true);
-
-/* these should help performance */
-pref("mozilla.widget.force-24bpp", true);
-pref("mozilla.widget.use-buffer-pixmap", true);
-pref("mozilla.widget.disable-native-theme", false);
-pref("layout.reflow.synthMouseMove", false);
-
-/* "Preview" of framerate increase for animations, discussed in 710563. */
-pref("layout.frame_rate.precise", true);
-
-/* download manager (don't show the window or alert) */
-pref("browser.download.useDownloadDir", true);
-pref("browser.download.folderList", 1); // Default to ~/Downloads
-pref("browser.download.manager.showAlertOnComplete", false);
-pref("browser.download.manager.showAlertInterval", 2000);
-pref("browser.download.manager.retention", 2);
-pref("browser.download.manager.showWhenStarting", false);
-pref("browser.download.manager.closeWhenDone", true);
-pref("browser.download.manager.openDelay", 0);
-pref("browser.download.manager.focusWhenStarting", false);
-pref("browser.download.manager.flashCount", 2);
-pref("browser.download.manager.addToRecentDocs", true);
-pref("browser.download.manager.displayedHistoryDays", 7);
-pref("browser.download.manager.resumeOnWakeDelay", 10000);
-pref("browser.download.manager.quitBehavior", 0);
-
-/* download alerts (disabled above) */
-pref("alerts.totalOpenTime", 6000);
-
-/* download helper */
-pref("browser.helperApps.deleteTempFileOnExit", false);
-
-/* password manager */
-pref("signon.rememberSignons", true);
-
-// this will automatically enable inline spellchecking (if it is available) for
-// editable elements in HTML
-// 0 = spellcheck nothing
-// 1 = check multi-line controls [default]
-// 2 = check multi/single line controls
-pref("layout.spellcheckDefault", 1);
-
-/* extension manager and xpinstall */
-// Completely disable extensions
-pref("extensions.defaultProviders.enabled", false);
-// Disable version checks making addons compatible by default
-pref("extensions.strictCompatibility", false);
-// Disable all add-on locations other than the profile
-pref("extensions.enabledScopes", 1);
-// Auto-disable any add-ons that are "dropped in" to the profile
-pref("extensions.autoDisableScopes", 1);
-// Disable add-on installation via the web-exposed APIs
-pref("xpinstall.enabled", false);
-pref("xpinstall.whitelist.add", "addons.mozilla.org");
-pref("extensions.autoupdate.enabled", false);
-pref("extensions.update.enabled", false);
-
-/* blocklist preferences */
-pref("extensions.blocklist.enabled", true);
-pref("extensions.blocklist.interval", 86400);
-pref("extensions.blocklist.url", "https://blocklist.addons.mozilla.org/blocklist/3/%APP_ID%/%APP_VERSION%/%PRODUCT%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/%PING_COUNT%/%TOTAL_PING_COUNT%/%DAYS_SINCE_LAST_PING%/");
-pref("extensions.blocklist.detailsURL", "https://www.mozilla.org/%LOCALE%/blocklist/");
-pref("extensions.showMismatchUI", false);
-
-/* block popups by default, and notify the user about blocked popups */
-pref("dom.disable_open_during_load", true);
-pref("privacy.popups.showBrowserMessage", true);
-
-// Metro Firefox keeps this set to -1 when donottrackheader.enabled is false.
-pref("privacy.donottrackheader.value", -1);
-
-/* disable opening windows with the dialog feature */
-pref("dom.disable_window_open_dialog_feature", true);
-
-pref("keyword.enabled", true);
-pref("browser.fixup.domainwhitelist.localhost", true);
-
-pref("accessibility.typeaheadfind", false);
-pref("accessibility.typeaheadfind.timeout", 5000);
-pref("accessibility.typeaheadfind.flashBar", 1);
-pref("accessibility.typeaheadfind.linksonly", false);
-pref("accessibility.typeaheadfind.casesensitive", 0);
-
-// Trun on F7 caret browsing hot key
-pref("accessibility.browsewithcaret_shortcut.enabled", true);
-pref("accessibility.browsewithcaret", false);
-
-// Whether or not we show a dialog box informing the user that the update was
-// successfully applied.
-pref("app.update.showInstalledUI", false);
-
-// pointer to the default engine name
-pref("browser.search.defaultenginename", "chrome://browser/locale/region.properties");
-
-// SSL error page behaviour
-pref("browser.ssl_override_behavior", 2);
-pref("browser.xul.error_pages.expert_bad_cert", false);
-
-// disable logging for the search service by default
-pref("browser.search.log", false);
-
-// ordering of search engines in the engine list.
-pref("browser.search.order.1", "chrome://browser/locale/region.properties");
-pref("browser.search.order.2", "chrome://browser/locale/region.properties");
-pref("browser.search.order.3", "chrome://browser/locale/region.properties");
-
-// send ping to the server to update
-pref("browser.search.update", true);
-
-// disable logging for the search service update system by default
-pref("browser.search.update.log", false);
-
-// Check whether we need to perform engine updates every 6 hours
-pref("browser.search.update.interval", 21600);
-
-// enable search suggestions by default
-pref("browser.search.suggest.enabled", true);
-
-// tell the search service that we don't really expose the "current engine"
-pref("browser.search.noCurrentEngine", true);
-
-#ifdef MOZ_OFFICIAL_BRANDING
-// {moz:official} expands to "official"
-pref("browser.search.official", true);
-#endif
-
-// enable xul error pages
-pref("browser.xul.error_pages.enabled", true);
-
-// Let the faviconservice know that we display favicons as 25x25px so that it
-// uses the right size when optimizing favicons
-pref("places.favicons.optimizeToDimension", 25);
-
-// The default behavior for the urlbar can be configured to use any combination
-// of the match filters with each additional filter adding more results (union).
-pref("browser.urlbar.suggest.history", true);
-pref("browser.urlbar.suggest.bookmark", true);
-pref("browser.urlbar.suggest.openpage", true);
-pref("browser.urlbar.suggest.search", true);
-
-// Restrictions to current suggestions can also be applied (intersection).
-// Typed suggestion works only if history is set to true.
-pref("browser.urlbar.suggest.history.onlyTyped", false);
-
-// various and sundry awesomebar prefs (should remove/re-evaluate
-// these once bug 447900 is fixed)
-pref("browser.urlbar.trimURLs", true);
-pref("browser.urlbar.formatting.enabled", true);
-pref("browser.urlbar.clickSelectsAll", true);
-pref("browser.urlbar.doubleClickSelectsAll", true);
-pref("browser.urlbar.autoFill", false);
-pref("browser.urlbar.matchOnlyTyped", false);
-pref("browser.urlbar.matchBehavior", 1);
-pref("browser.urlbar.filter.javascript", true);
-pref("browser.urlbar.maxRichResults", 8);
-pref("browser.urlbar.search.chunkSize", 1000);
-pref("browser.urlbar.search.timeout", 100);
-pref("browser.urlbar.restrict.history", "^");
-pref("browser.urlbar.restrict.bookmark", "*");
-pref("browser.urlbar.restrict.tag", "+");
-pref("browser.urlbar.match.title", "#");
-pref("browser.urlbar.match.url", "@");
-pref("browser.history.grouping", "day");
-pref("browser.history.showSessions", false);
-pref("browser.sessionhistory.max_entries", 50);
-pref("browser.history_expire_sites", 40000);
-pref("browser.places.migratePostDataAnnotations", true);
-pref("browser.places.updateRecentTagsUri", true);
-pref("places.frecency.numVisits", 10);
-pref("places.frecency.numCalcOnIdle", 50);
-pref("places.frecency.numCalcOnMigrate", 50);
-pref("places.frecency.updateIdleTime", 60000);
-pref("places.frecency.firstBucketCutoff", 4);
-pref("places.frecency.secondBucketCutoff", 14);
-pref("places.frecency.thirdBucketCutoff", 31);
-pref("places.frecency.fourthBucketCutoff", 90);
-pref("places.frecency.firstBucketWeight", 100);
-pref("places.frecency.secondBucketWeight", 70);
-pref("places.frecency.thirdBucketWeight", 50);
-pref("places.frecency.fourthBucketWeight", 30);
-pref("places.frecency.defaultBucketWeight", 10);
-pref("places.frecency.embedVisitBonus", 0);
-pref("places.frecency.linkVisitBonus", 100);
-pref("places.frecency.typedVisitBonus", 2000);
-pref("places.frecency.bookmarkVisitBonus", 150);
-pref("places.frecency.downloadVisitBonus", 0);
-pref("places.frecency.permRedirectVisitBonus", 0);
-pref("places.frecency.tempRedirectVisitBonus", 0);
-pref("places.frecency.defaultVisitBonus", 0);
-pref("places.frecency.unvisitedBookmarkBonus", 140);
-pref("places.frecency.unvisitedTypedBonus", 200);
-
-// disable color management
-pref("gfx.color_management.mode", 0);
-
-// don't allow JS to move and resize existing windows
-pref("dom.disable_window_move_resize", true);
-
-// prevent click image resizing for nsImageDocument
-pref("browser.enable_click_image_resizing", false);
-
-// open in tab preferences
-// 0=default window, 1=current window/tab, 2=new window, 3=new tab in most window
-pref("browser.link.open_external", 3);
-pref("browser.link.open_newwindow", 3);
-// 0=force all new windows to tabs, 1=don't force, 2=only force those with no features set
-pref("browser.link.open_newwindow.restriction", 0);
-
-// controls which bits of private data to clear. by default we clear them all.
-pref("privacy.item.cache", true);
-pref("privacy.item.cookies", true);
-pref("privacy.item.offlineApps", true);
-pref("privacy.item.history", true);
-pref("privacy.item.formdata", true);
-pref("privacy.item.downloads", true);
-pref("privacy.item.passwords", true);
-pref("privacy.item.sessions", true);
-pref("privacy.item.geolocation", true);
-pref("privacy.item.siteSettings", true);
-pref("privacy.item.syncAccount", true);
-
-pref("plugins.force.wmode", "opaque");
-
-// What default should we use for the time span in the sanitizer:
-// 0 - Clear everything
-// 1 - Last Hour
-// 2 - Last 2 Hours
-// 3 - Last 4 Hours
-// 4 - Today
-pref("privacy.sanitize.timeSpan", 1);
-pref("privacy.sanitize.sanitizeOnShutdown", false);
-pref("privacy.sanitize.migrateFx3Prefs", false);
-
-// enable geo
-pref("geo.enabled", true);
-pref("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%");
-
-// snapped view
-pref("browser.ui.snapped.maxWidth", 600);
-
-// kinetic tweakables
-pref("browser.ui.kinetic.updateInterval", 16);
-pref("browser.ui.kinetic.exponentialC", 1400);
-pref("browser.ui.kinetic.polynomialC", 100);
-pref("browser.ui.kinetic.swipeLength", 160);
-pref("browser.ui.zoom.animationDuration", 200); // ms duration of double-tap zoom animation
-
-pref("ui.mouse.radius.enabled", true);
-pref("ui.touch.radius.enabled", true);
-
-// plugins
-pref("plugin.disable", true);
-pref("dom.ipc.plugins.enabled", true);
-
-// process priority
-// higher values give content process less CPU time
-pref("dom.ipc.content.nice", 1);
-
-// product URLs
-// The breakpad report server to link to in about:crashes
-pref("breakpad.reportURL", "https://crash-stats.mozilla.com/report/index/");
-// TODO: This is not the correct article for metro!!!
-pref("app.sync.tutorialURL", "https://support.mozilla.org/kb/sync-firefox-between-desktop-and-mobile");
-pref("app.support.baseURL", "https://support.mozilla.org/1/touch/%VERSION%/%OS%/%LOCALE%/");
-pref("app.support.inputURL", "https://input.mozilla.org/feedback/metrofirefox");
-pref("app.privacyURL", "http://www.mozilla.org/%LOCALE%/legal/privacy/firefox.html");
-pref("app.creditsURL", "http://www.mozilla.org/credits/");
-pref("app.channelURL", "http://www.mozilla.org/%LOCALE%/firefox/channel/");
-
-// Name of alternate about: page for certificate errors (when undefined, defaults to about:neterror)
-pref("security.alternate_certificate_error_page", "certerror");
-
-pref("security.warn_viewing_mixed", false); // Warning is disabled. See Bug 616712.
-
-// Override some named colors to avoid inverse OS themes
-
-/* app update prefs */
-
-#ifdef MOZ_UPDATER
-
-// Whether or not app updates are enabled
-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
-pref("app.update.mode", 0);
-
-// Enables update checking in the Metro environment.
-// add-on incompatibilities are ignored by updates in Metro.
-pref("app.update.metro.enabled", true);
-
-// If set to true, the Update Service will present no UI for any event.
-pref("app.update.silent", true);
-
-// If set to true, the Update Service will apply updates in the background
-// when it finishes downloading them.
-pref("app.update.staging.enabled", true);
-
-// Update service URL:
-pref("app.update.url", "https://aus4.mozilla.org/update/3/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml");
-
-// Show the Update Checking/Ready UI when the user was idle for x seconds
-pref("app.update.idletime", 60);
-
-// Whether or not we show a dialog box informing the user that the update was
-// successfully applied. This is off in Firefox by default since we show a
-// upgrade start page instead! Other apps may wish to show this UI, and supply
-// a whatsNewURL field in their brand.properties that contains a link to a page
-// which tells users what's new in this new update.
-pref("app.update.showInstalledUI", false);
-
-// 0 = suppress prompting for incompatibilities if there are updates available
-// to newer versions of installed addons that resolve them.
-// 1 = suppress prompting for incompatibilities only if there are VersionInfo
-// updates available to installed addons that resolve them, not newer
-// versions.
-pref("app.update.incompatible.mode", 0);
-
-// Whether or not to attempt using the service for updates.
-#ifdef MOZ_MAINTENANCE_SERVICE
-pref("app.update.service.enabled", true);
-#endif
-
-// The minimum delay in seconds for the timer to fire.
-// default=2 minutes
-pref("app.update.timerMinimumDelay", 120);
-
-// Enables some extra Application Update Logging (can reduce performance)
-pref("app.update.log", false);
-
-// The number of general background check failures to allow before notifying the
-// user of the failure. User initiated update checks always notify the user of
-// the failure.
-pref("app.update.backgroundMaxErrors", 10);
-
-// The aus update xml certificate checks for application update are disabled on
-// Windows since the mar signature check which is currently only implemented on
-// Windows is sufficient for preventing us from applying a mar that is not
-// valid.
-
-// When |app.update.cert.requireBuiltIn| is true or not specified the
-// final certificate and all certificates the connection is redirected to before
-// the final certificate for the url specified in the |app.update.url|
-// preference must be built-in.
-pref("app.update.cert.requireBuiltIn", false);
-
-// When |app.update.cert.checkAttributes| is true or not specified the
-// certificate attributes specified in the |app.update.certs.| preference branch
-// are checked against the certificate for the url specified by the
-// |app.update.url| preference.
-pref("app.update.cert.checkAttributes", false);
-
-// User-settable override to app.update.url for testing purposes.
-//pref("app.update.url.override", "");
-
-// replace newlines with spaces on paste into single-line text boxes
-pref("editor.singleLine.pasteNewlines", 2);
-
-#ifdef MOZ_SERVICES_SYNC
-// sync service
-pref("services.sync.registerEngines", "Tab,Bookmarks,Form,History,Password,Prefs");
-
-// prefs to sync by default
-pref("services.sync.prefs.sync.browser.tabs.warnOnClose", true);
-pref("services.sync.prefs.sync.devtools.errorconsole.enabled", true);
-pref("services.sync.prefs.sync.lightweightThemes.selectedThemeID", true);
-pref("services.sync.prefs.sync.lightweightThemes.usedThemes", true);
-pref("services.sync.prefs.sync.privacy.donottrackheader.enabled", true);
-pref("services.sync.prefs.sync.privacy.donottrackheader.value", true);
-pref("services.sync.prefs.sync.signon.rememberSignons", true);
-#endif
-
-// threshold where a tap becomes a drag, in 1/240" reference pixels
-// The names of the preferences are to be in sync with EventStateManager.cpp
-pref("ui.dragThresholdX", 50);
-pref("ui.dragThresholdY", 50);
-
-// prevent tooltips from showing up
-pref("browser.chrome.toolbar_tips", false);
-
-#ifdef NIGHTLY_BUILD
-// Completely disable pdf.js as an option to preview pdfs within firefox.
-// Note: if this is not disabled it does not necessarily mean pdf.js is the pdf
-// handler just that it is an option.
-pref("pdfjs.disabled", true);
-// Used by pdf.js to know the first time firefox is run with it installed so it
-// can become the default pdf viewer.
-pref("pdfjs.firstRun", true);
-// The values of preferredAction and alwaysAskBeforeHandling before pdf.js
-// became the default.
-pref("pdfjs.previousHandler.preferredAction", 0);
-pref("pdfjs.previousHandler.alwaysAskBeforeHandling", false);
-#endif
-
-#ifdef NIGHTLY_BUILD
-// Shumay is currently experimental. Toggle this pref to enable Shumway for
-// testing and development.
-pref("shumway.disabled", true);
-// When Shumway is enabled, use it all the time, not only when Flash is set to
-// click-to-play (because Metro doesn't even load the native Flash plugin).
-pref("shumway.ignoreCTP", true);
-#endif
-
-// The maximum amount of decoded image data we'll willingly keep around (we
-// might keep around more than this, but we'll try to get down to this value).
-// (This is intentionally on the high side; see bug 746055.)
-pref("image.mem.max_decoded_image_kb", 256000);
-
-// enable touch events interfaces
-pref("dom.w3c_touch_events.enabled", 1);
-pref("dom.w3c_touch_events.safetyX", 5); // escape borders in units of 1/240"
-pref("dom.w3c_touch_events.safetyY", 20); // escape borders in units of 1/240"
-
-#ifdef MOZ_SAFE_BROWSING
-// Safe browsing does nothing unless this pref is set
-pref("browser.safebrowsing.enabled", true);
-
-// Prevent loading of pages identified as malware
-pref("browser.safebrowsing.malware.enabled", true);
-
-// Non-enhanced mode (local url lists) URL list to check for updates
-pref("browser.safebrowsing.provider.0.updateURL", "https://safebrowsing.google.com/safebrowsing/downloads?client={moz:client}&appver={moz:version}&pver=2.2&key=%GOOGLE_API_KEY%");
-
-pref("browser.safebrowsing.dataProvider", 0);
-
-// Does the provider name need to be localizable?
-pref("browser.safebrowsing.provider.0.name", "Google");
-pref("browser.safebrowsing.provider.0.reportURL", "https://safebrowsing.google.com/safebrowsing/report?");
-pref("browser.safebrowsing.provider.0.gethashURL", "https://safebrowsing.google.com/safebrowsing/gethash?client={moz:client}&appver={moz:version}&pver=2.2");
-
-// HTML report pages
-pref("browser.safebrowsing.provider.0.reportGenericURL", "http://{moz:locale}.phish-generic.mozilla.com/?hl={moz:locale}");
-pref("browser.safebrowsing.provider.0.reportErrorURL", "http://{moz:locale}.phish-error.mozilla.com/?hl={moz:locale}");
-pref("browser.safebrowsing.provider.0.reportPhishURL", "http://{moz:locale}.phish-report.mozilla.com/?hl={moz:locale}");
-pref("browser.safebrowsing.provider.0.reportMalwareURL", "http://{moz:locale}.malware-report.mozilla.com/?hl={moz:locale}");
-pref("browser.safebrowsing.provider.0.reportMalwareErrorURL", "http://{moz:locale}.malware-error.mozilla.com/?hl={moz:locale}");
-
-// FAQ URLs
-pref("browser.geolocation.warning.infoURL", "https://www.mozilla.org/%LOCALE%/firefox/geolocation/");
-
-// Name of the about: page contributed by safebrowsing to handle display of error
-// pages on phishing/malware hits. (bug 399233)
-pref("urlclassifier.alternate_error_page", "blocked");
-
-// The number of random entries to send with a gethash request.
-pref("urlclassifier.gethashnoise", 4);
-
-// Gethash timeout for Safebrowsing.
-pref("urlclassifier.gethash.timeout_ms", 5000);
-
-// If an urlclassifier table has not been updated in this number of seconds,
-// a gethash request will be forced to check that the result is still in
-// the database.
-pref("urlclassifier.max-complete-age", 2700);
-
-// Maximum size of the sqlite3 cache during an update, in bytes
-pref("urlclassifier.updatecachemax", 41943040);
-
-// URL for checking the reason for a malware warning.
-pref("browser.safebrowsing.malware.reportURL", "https://safebrowsing.google.com/safebrowsing/diagnostic?client=%NAME%&hl=%LOCALE%&site=");
-#endif
-
-// True if this is the first time we are showing about:firstrun
-pref("browser.firstrun.show.localepicker", false);
-
-// True if you always want dump() to work
-pref("javascript.options.showInConsole", true);
-pref("browser.dom.window.dump.enabled", true);
-
-// controls if we want camera support
-pref("device.camera.enabled", true);
-pref("media.realtime_decoder.enabled", true);
-
-// Metro manages state by autodetection
-pref("network.manage-offline-status", true);
-
-// Enable HTML fullscreen API in content.
-pref("full-screen-api.enabled", true);
-// But don't require approval when content enters fullscreen; we'll keep our
-// UI/chrome visible still, so there's no need to approve entering fullscreen.
-pref("full-screen-api.approval-required", false);
-// Don't allow fullscreen requests to percolate across content/chrome boundary,
-// so that our chrome/UI remains visible after content enters fullscreen.
-pref("full-screen-api.content-only", true);
-// Don't make top-level widgets fullscreen. This only applies when running in
-// "metrodesktop" mode, not when running in full metro mode. This prevents the
-// window from changing size when we go fullscreen; the content expands to fill
-// the window, the window size doesn't change. This pref has no effect when
-// running in actual Metro mode, as the widget will already be fullscreen then.
-pref("full-screen-api.ignore-widgets", true);
-
-// image visibility prefs.
-// image visibility tries to only keep images near the viewport decoded instead
-// of keeping all images decoded.
-pref("layout.imagevisibility.numscrollportwidths", 1);
-pref("layout.imagevisibility.numscrollportheights", 1);
-
-// Don't enable yet as we don't have a color picker
-// implemented for Windows Metro (bug 895464)
-pref("dom.forms.color", false);
diff --git a/browser/metro/profile/moz.build b/browser/metro/profile/moz.build
deleted file mode 100644
index 78d3ef683fe..00000000000
--- a/browser/metro/profile/moz.build
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- 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/.
-
-JS_PREFERENCE_FILES += [
- 'metro.js',
-]
-
diff --git a/browser/metro/shell/Makefile.in b/browser/metro/shell/Makefile.in
deleted file mode 100644
index d3f02b3985a..00000000000
--- a/browser/metro/shell/Makefile.in
+++ /dev/null
@@ -1,6 +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/.
-
-export::
- $(NSINSTALL) $(srcdir)/resources.pri $(DIST)/bin
diff --git a/browser/metro/shell/commandexecutehandler/CEHHelper.cpp b/browser/metro/shell/commandexecutehandler/CEHHelper.cpp
deleted file mode 100644
index 35ec1087116..00000000000
--- a/browser/metro/shell/commandexecutehandler/CEHHelper.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; 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 "CEHHelper.h"
-#include
-#include "mozilla/widget/MetroD3DCheckHelper.h"
-
-#ifdef SHOW_CONSOLE
-#include // _open_osfhandle
-#endif
-
-HANDLE sCon;
-LPCWSTR metroDX10Available = L"MetroD3DAvailable";
-LPCWSTR metroLastAHE = L"MetroLastAHE";
-LPCWSTR cehDumpDebugStrings = L"CEHDump";
-extern const WCHAR* kFirefoxExe;
-
-void
-Log(const wchar_t *fmt, ...)
-{
-#if !defined(SHOW_CONSOLE)
- DWORD dwRes = 0;
- if (!GetDWORDRegKey(cehDumpDebugStrings, dwRes) || !dwRes) {
- return;
- }
-#endif
- va_list a = nullptr;
- wchar_t szDebugString[1024];
- if(!lstrlenW(fmt))
- return;
- va_start(a,fmt);
- vswprintf(szDebugString, 1024, fmt, a);
- va_end(a);
- if(!lstrlenW(szDebugString))
- return;
-
- DWORD len;
- WriteConsoleW(sCon, szDebugString, lstrlenW(szDebugString), &len, nullptr);
- WriteConsoleW(sCon, L"\n", 1, &len, nullptr);
-
- OutputDebugStringW(szDebugString);
- OutputDebugStringW(L"\n");
-}
-
-#if defined(SHOW_CONSOLE)
-void
-SetupConsole()
-{
- FILE *fp;
- AllocConsole();
- sCon = GetStdHandle(STD_OUTPUT_HANDLE);
- int fd = _open_osfhandle(reinterpret_cast(sCon), 0);
- fp = _fdopen(fd, "w");
- *stdout = *fp;
- setvbuf(stdout, nullptr, _IONBF, 0);
-}
-#endif
-
-bool
-IsImmersiveProcessDynamic(HANDLE process)
-{
- HMODULE user32DLL = LoadLibraryW(L"user32.dll");
- if (!user32DLL) {
- return false;
- }
-
- decltype(IsImmersiveProcess)* IsImmersiveProcessPtr =
- (decltype(IsImmersiveProcess)*) GetProcAddress(user32DLL,
- "IsImmersiveProcess");
- if (!IsImmersiveProcessPtr) {
- FreeLibrary(user32DLL);
- return false;
- }
-
- BOOL bImmersiveProcess = IsImmersiveProcessPtr(process);
- FreeLibrary(user32DLL);
- return bImmersiveProcess;
-}
-
-bool
-IsProcessRunning(const wchar_t *processName, bool bCheckIfMetro)
-{
- bool exists = false;
- PROCESSENTRY32W entry;
- entry.dwSize = sizeof(PROCESSENTRY32W);
-
- HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
-
- if (Process32First(snapshot, &entry)) {
- while (!exists && Process32Next(snapshot, &entry)) {
- if (!_wcsicmp(entry.szExeFile, processName)) {
- HANDLE process = OpenProcess(GENERIC_READ, FALSE, entry.th32ProcessID);
- bool isImmersiveProcess = IsImmersiveProcessDynamic(process);
- if ((bCheckIfMetro && isImmersiveProcess) ||
- (!bCheckIfMetro && !isImmersiveProcess)) {
- exists = true;
- }
- CloseHandle(process);
- }
- }
- }
-
- CloseHandle(snapshot);
- return exists;
-}
-
-bool
-IsMetroProcessRunning()
-{
- return IsProcessRunning(kFirefoxExe, true);
-}
-
-bool
-IsDesktopProcessRunning()
-{
- return IsProcessRunning(kFirefoxExe, false);
-}
-
-/*
- * Retrieve the last front end ui we launched so we can target it
- * again. This value is updated down in nsAppRunner when the browser
- * starts up.
- */
-AHE_TYPE
-GetLastAHE()
-{
- DWORD ahe;
- if (GetDWORDRegKey(metroLastAHE, ahe)) {
- return (AHE_TYPE) ahe;
- }
- return AHE_DESKTOP;
-}
-
-bool
-IsDX10Available()
-{
- DWORD isDX10Available;
- if (GetDWORDRegKey(metroDX10Available, isDX10Available)) {
- return isDX10Available;
- }
- bool check = D3DFeatureLevelCheck();
- SetDWORDRegKey(metroDX10Available, check);
- return check;
-}
-
-bool
-GetDWORDRegKey(LPCWSTR name, DWORD &value)
-{
- HKEY key;
- LONG result = RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Mozilla\\Firefox",
- 0, KEY_READ, &key);
- if (result != ERROR_SUCCESS) {
- return false;
- }
-
- DWORD bufferSize = sizeof(DWORD);
- DWORD type;
- result = RegQueryValueExW(key, name, nullptr, &type,
- reinterpret_cast(&value),
- &bufferSize);
- RegCloseKey(key);
- return result == ERROR_SUCCESS;
-}
-
-bool
-SetDWORDRegKey(LPCWSTR name, DWORD value)
-{
- HKEY key;
- LONG result = RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Mozilla\\Firefox",
- 0, KEY_WRITE, &key);
- if (result != ERROR_SUCCESS) {
- return false;
- }
-
- result = RegSetValueEx(key, name, 0, REG_DWORD,
- reinterpret_cast(&value),
- sizeof(DWORD));
- RegCloseKey(key);
- return result == ERROR_SUCCESS;
-}
diff --git a/browser/metro/shell/commandexecutehandler/CEHHelper.h b/browser/metro/shell/commandexecutehandler/CEHHelper.h
deleted file mode 100644
index 25e3333e101..00000000000
--- a/browser/metro/shell/commandexecutehandler/CEHHelper.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; 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/. */
-
-#undef WINVER
-#undef _WIN32_WINNT
-#define WINVER 0x602
-#define _WIN32_WINNT 0x602
-
-#include
-#include
-#include
-
-//#define SHOW_CONSOLE 1
-extern HANDLE sCon;
-
-void Log(const wchar_t *fmt, ...);
-
-#if defined(SHOW_CONSOLE)
-void SetupConsole();
-#endif
-
-AHE_TYPE GetLastAHE();
-bool SetLastAHE(AHE_TYPE ahe);
-bool IsDX10Available();
-bool GetDWORDRegKey(LPCWSTR name, DWORD &value);
-bool SetDWORDRegKey(LPCWSTR name, DWORD value);
-bool IsImmersiveProcessDynamic(HANDLE process);
-bool IsMetroProcessRunning();
-bool IsDesktopProcessRunning();
diff --git a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.cpp b/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.cpp
deleted file mode 100644
index 6c8d764e686..00000000000
--- a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.cpp
+++ /dev/null
@@ -1,952 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; 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 "CEHHelper.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#ifdef SHOW_CONSOLE
-#define DEBUG_DELAY_SHUTDOWN 1
-#endif
-
-// Heartbeat timer duration used while waiting for an incoming request.
-#define HEARTBEAT_MSEC 250
-// Total number of heartbeats we wait before giving up and shutting down.
-#define REQUEST_WAIT_TIMEOUT 30
-// Pulled from desktop browser's shell
-#define APP_REG_NAME L"Firefox"
-
-const WCHAR* kFirefoxExe = L"firefox.exe";
-static const WCHAR* kDefaultMetroBrowserIDPathKey = L"FirefoxURL";
-static const WCHAR* kMetroRestartCmdLine = L"--metro-restart";
-static const WCHAR* kMetroUpdateCmdLine = L"--metro-update";
-static const WCHAR* kDesktopRestartCmdLine = L"--desktop-restart";
-static const WCHAR* kNsisLaunchCmdLine = L"--launchmetro";
-static const WCHAR* kExplorerLaunchCmdLine = L"-Embedding";
-
-static bool GetDefaultBrowserPath(CStringW& aPathBuffer);
-
-/*
- * Retrieve our module dir path.
- *
- * @aPathBuffer Buffer to fill
- */
-static bool GetModulePath(CStringW& aPathBuffer)
-{
- WCHAR buffer[MAX_PATH];
- memset(buffer, 0, sizeof(buffer));
-
- if (!GetModuleFileName(nullptr, buffer, MAX_PATH)) {
- Log(L"GetModuleFileName failed.");
- return false;
- }
-
- WCHAR* slash = wcsrchr(buffer, '\\');
- if (!slash)
- return false;
- *slash = '\0';
-
- aPathBuffer = buffer;
- return true;
-}
-
-
-template void SafeRelease(T **ppT)
-{
- if (*ppT) {
- (*ppT)->Release();
- *ppT = nullptr;
- }
-}
-
-template HRESULT SetInterface(T **ppT, IUnknown *punk)
-{
- SafeRelease(ppT);
- return punk ? punk->QueryInterface(ppT) : E_NOINTERFACE;
-}
-
-class __declspec(uuid("5100FEC1-212B-4BF5-9BF8-3E650FD794A3"))
- CExecuteCommandVerb : public IExecuteCommand,
- public IObjectWithSelection,
- public IInitializeCommand,
- public IObjectWithSite,
- public IExecuteCommandApplicationHostEnvironment
-{
-public:
-
- CExecuteCommandVerb() :
- mRef(0),
- mShellItemArray(nullptr),
- mUnkSite(nullptr),
- mTargetIsFileSystemLink(false),
- mTargetIsDefaultBrowser(false),
- mTargetIsBrowser(false),
- mRequestType(DEFAULT_LAUNCH),
- mRequestMet(false),
- mDelayedLaunchType(NONE),
- mVerb(L"open")
- {
- }
-
- ~CExecuteCommandVerb()
- {
- }
-
- bool RequestMet() { return mRequestMet; }
- void SetRequestMet();
- long RefCount() { return mRef; }
- void HeartBeat();
-
- // IUnknown
- IFACEMETHODIMP QueryInterface(REFIID aRefID, void **aInt)
- {
- static const QITAB qit[] = {
- QITABENT(CExecuteCommandVerb, IExecuteCommand),
- QITABENT(CExecuteCommandVerb, IObjectWithSelection),
- QITABENT(CExecuteCommandVerb, IInitializeCommand),
- QITABENT(CExecuteCommandVerb, IObjectWithSite),
- QITABENT(CExecuteCommandVerb, IExecuteCommandApplicationHostEnvironment),
- { 0 },
- };
- return QISearch(this, qit, aRefID, aInt);
- }
-
- IFACEMETHODIMP_(ULONG) AddRef()
- {
- return InterlockedIncrement(&mRef);
- }
-
- IFACEMETHODIMP_(ULONG) Release()
- {
- long cRef = InterlockedDecrement(&mRef);
- if (!cRef) {
- delete this;
- }
- return cRef;
- }
-
- // IExecuteCommand
- IFACEMETHODIMP SetKeyState(DWORD aKeyState)
- {
- mKeyState = aKeyState;
- return S_OK;
- }
-
- IFACEMETHODIMP SetParameters(PCWSTR aParameters)
- {
- Log(L"SetParameters: '%s'", aParameters);
-
- if (!_wcsicmp(aParameters, kMetroRestartCmdLine)) {
- mRequestType = METRO_RESTART;
- } else if (_wcsicmp(aParameters, kMetroUpdateCmdLine) == 0) {
- mRequestType = METRO_UPDATE;
- } else if (_wcsicmp(aParameters, kDesktopRestartCmdLine) == 0) {
- mRequestType = DESKTOP_RESTART;
- } else {
- mParameters = aParameters;
- }
- return S_OK;
- }
-
- IFACEMETHODIMP SetPosition(POINT aPoint)
- { return S_OK; }
-
- IFACEMETHODIMP SetShowWindow(int aShowFlag)
- { return S_OK; }
-
- IFACEMETHODIMP SetNoShowUI(BOOL aNoUI)
- { return S_OK; }
-
- IFACEMETHODIMP SetDirectory(PCWSTR aDirPath)
- { return S_OK; }
-
- IFACEMETHODIMP Execute();
-
- // IObjectWithSelection
- IFACEMETHODIMP SetSelection(IShellItemArray *aArray)
- {
- if (!aArray) {
- return E_FAIL;
- }
-
- SetInterface(&mShellItemArray, aArray);
-
- DWORD count = 0;
- aArray->GetCount(&count);
- if (!count) {
- return E_FAIL;
- }
-
-#ifdef SHOW_CONSOLE
- Log(L"SetSelection param count: %d", count);
- for (DWORD idx = 0; idx < count; idx++) {
- IShellItem* item = nullptr;
- if (SUCCEEDED(aArray->GetItemAt(idx, &item))) {
- LPWSTR str = nullptr;
- if (FAILED(item->GetDisplayName(SIGDN_FILESYSPATH, &str))) {
- if (FAILED(item->GetDisplayName(SIGDN_URL, &str))) {
- Log(L"Failed to get a shell item array item.");
- item->Release();
- continue;
- }
- }
- item->Release();
- Log(L"SetSelection param: '%s'", str);
- CoTaskMemFree(str);
- }
- }
-#endif
-
- IShellItem* item = nullptr;
- if (FAILED(aArray->GetItemAt(0, &item))) {
- return E_FAIL;
- }
-
- bool isFileSystem = false;
- if (!SetTargetPath(item) || !mTarget.GetLength()) {
- Log(L"SetTargetPath failed.");
- return E_FAIL;
- }
- item->Release();
-
- Log(L"SetSelection target: %s", mTarget);
- return S_OK;
- }
-
- IFACEMETHODIMP GetSelection(REFIID aRefID, void **aInt)
- {
- *aInt = nullptr;
- return mShellItemArray ? mShellItemArray->QueryInterface(aRefID, aInt) : E_FAIL;
- }
-
- // IInitializeCommand
- IFACEMETHODIMP Initialize(PCWSTR aVerb, IPropertyBag* aPropBag)
- {
- if (!aVerb)
- return E_FAIL;
- // 'open', 'edit', etc. Based on our registry settings
- Log(L"Initialize(%s)", aVerb);
- mVerb = aVerb;
- return S_OK;
- }
-
- // IObjectWithSite
- IFACEMETHODIMP SetSite(IUnknown *aUnkSite)
- {
- SetInterface(&mUnkSite, aUnkSite);
- return S_OK;
- }
-
- IFACEMETHODIMP GetSite(REFIID aRefID, void **aInt)
- {
- *aInt = nullptr;
- return mUnkSite ? mUnkSite->QueryInterface(aRefID, aInt) : E_FAIL;
- }
-
- // IExecuteCommandApplicationHostEnvironment
- IFACEMETHODIMP GetValue(AHE_TYPE *aLaunchType)
- {
- Log(L"IExecuteCommandApplicationHostEnvironment::GetValue()");
- *aLaunchType = GetLaunchType();
- return S_OK;
- }
-
- /**
- * Choose the appropriate launch type based on the user's previously chosen
- * host environment, along with system constraints.
- *
- * AHE_DESKTOP = 0, AHE_IMMERSIVE = 1
- */
- AHE_TYPE GetLaunchType()
- {
- AHE_TYPE ahe = GetLastAHE();
- Log(L"Previous AHE: %d", ahe);
-
- // Default launch settings from GetLastAHE() can be overriden by
- // custom parameter values we receive.
- if (mRequestType == DESKTOP_RESTART) {
- Log(L"Restarting in desktop host environment.");
- return AHE_DESKTOP;
- } else if (mRequestType == METRO_RESTART) {
- Log(L"Restarting in metro host environment.");
- ahe = AHE_IMMERSIVE;
- } else if (mRequestType == METRO_UPDATE) {
- // Shouldn't happen from GetValue above, but might from other calls.
- ahe = AHE_IMMERSIVE;
- }
-
- if (ahe == AHE_IMMERSIVE) {
- if (!IsDefaultBrowser()) {
- Log(L"returning AHE_DESKTOP because we are not the default browser");
- return AHE_DESKTOP;
- }
-
- if (!IsDX10Available()) {
- Log(L"returning AHE_DESKTOP because DX10 is not available");
- return AHE_DESKTOP;
- }
- }
- return ahe;
- }
-
- bool DefaultLaunchIsDesktop()
- {
- return GetLaunchType() == AHE_DESKTOP;
- }
-
- bool DefaultLaunchIsMetro()
- {
- return GetLaunchType() == AHE_IMMERSIVE;
- }
-
- /*
- * Retrieve the target path if it is the default browser
- * or if not default, retreives the target path if it is a firefox browser
- * or if the target is not firefox, relies on a hack to get the
- * 'module dir path\firefox.exe'
- * The reason why it's not good to rely on the CEH path is because there is
- * no guarantee win8 will use the CEH at our expected path. It has an in
- * memory cache even if the registry is updated for the CEH path.
- *
- * @aPathBuffer Buffer to fill
- */
- bool GetDesktopBrowserPath(CStringW& aPathBuffer)
- {
- // If the target was the default browser itself then return early. Otherwise
- // rely on a hack to check CEH path and calculate it relative to it.
-
- if (mTargetIsDefaultBrowser || mTargetIsBrowser) {
- aPathBuffer = mTarget;
- return true;
- }
-
- if (!GetModulePath(aPathBuffer))
- return false;
-
- // ceh.exe sits in dist/bin root with the desktop browser. Since this
- // is a firefox only component, this hardcoded filename is ok.
- aPathBuffer.Append(L"\\");
- aPathBuffer.Append(kFirefoxExe);
- return true;
- }
-
- bool IsDefaultBrowser()
- {
- IApplicationAssociationRegistration* pAAR;
- HRESULT hr = CoCreateInstance(CLSID_ApplicationAssociationRegistration,
- nullptr,
- CLSCTX_INPROC,
- IID_IApplicationAssociationRegistration,
- (void**)&pAAR);
- if (FAILED(hr))
- return false;
-
- BOOL res = FALSE;
- hr = pAAR->QueryAppIsDefaultAll(AL_EFFECTIVE,
- APP_REG_NAME,
- &res);
- Log(L"QueryAppIsDefaultAll: %d", res);
- if (!res) {
- pAAR->Release();
- return false;
- }
- // Make sure the Prog ID matches what we have
- LPWSTR registeredApp;
- hr = pAAR->QueryCurrentDefault(L"http", AT_URLPROTOCOL, AL_EFFECTIVE,
- ®isteredApp);
- pAAR->Release();
- Log(L"QueryCurrentDefault: %X", hr);
- if (FAILED(hr))
- return false;
-
- Log(L"registeredApp=%s", registeredApp);
- bool result = !wcsicmp(registeredApp, kDefaultMetroBrowserIDPathKey);
- CoTaskMemFree(registeredApp);
- if (!result)
- return false;
-
- // If the registry points another browser's path,
- // activating the Metro browser will fail. So fallback to the desktop.
- CStringW selfPath;
- GetDesktopBrowserPath(selfPath);
- CStringW browserPath;
- GetDefaultBrowserPath(browserPath);
-
- return !selfPath.CompareNoCase(browserPath);
- }
-
- /*
- * Helper for nsis installer when it wants to launch the
- * default metro browser.
- */
- void CommandLineMetroLaunch()
- {
- mTargetIsDefaultBrowser = true;
- LaunchMetroBrowser();
- }
-
-private:
- void LaunchDesktopBrowser();
- bool LaunchMetroBrowser();
- bool SetTargetPath(IShellItem* aItem);
- bool TestForUpdateLock();
-
- /*
- * Defines the type of startup request we receive.
- */
- enum RequestType {
- DEFAULT_LAUNCH,
- DESKTOP_RESTART,
- METRO_RESTART,
- METRO_UPDATE,
- };
-
- RequestType mRequestType;
-
- /*
- * Defines the type of delayed launch we might do.
- */
- enum DelayedLaunchType {
- NONE,
- DESKTOP,
- METRO,
- };
-
- DelayedLaunchType mDelayedLaunchType;
-
- long mRef;
- IShellItemArray *mShellItemArray;
- IUnknown *mUnkSite;
- CStringW mVerb;
- CStringW mTarget;
- CStringW mParameters;
- bool mTargetIsFileSystemLink;
- bool mTargetIsDefaultBrowser;
- bool mTargetIsBrowser;
- DWORD mKeyState;
- bool mRequestMet;
-};
-
-/*
- * Retrieve the current default browser's path.
- *
- * @aPathBuffer Buffer to fill
- */
-static bool GetDefaultBrowserPath(CStringW& aPathBuffer)
-{
- WCHAR buffer[MAX_PATH];
- DWORD length = MAX_PATH;
-
- if (FAILED(AssocQueryStringW(ASSOCF_NOTRUNCATE | ASSOCF_INIT_IGNOREUNKNOWN,
- ASSOCSTR_EXECUTABLE,
- kDefaultMetroBrowserIDPathKey, nullptr,
- buffer, &length))) {
- Log(L"AssocQueryString failed.");
- return false;
- }
-
- // sanity check
- if (lstrcmpiW(PathFindFileNameW(buffer), kFirefoxExe))
- return false;
-
- aPathBuffer = buffer;
- return true;
-}
-
-/*
- * Retrieve the app model id of the firefox metro browser.
- *
- * @aPathBuffer Buffer to fill
- * @aCharLength Length of buffer to fill in characters
- */
-template
-static bool GetDefaultBrowserAppModelID(WCHAR (&aIDBuffer)[N])
-{
- HKEY key;
- if (RegOpenKeyExW(HKEY_CLASSES_ROOT, kDefaultMetroBrowserIDPathKey,
- 0, KEY_READ, &key) != ERROR_SUCCESS) {
- return false;
- }
- DWORD len = sizeof(aIDBuffer);
- 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;
-}
-
-namespace {
- const FORMATETC kPlainTextFormat =
- {CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
- const FORMATETC kPlainTextWFormat =
- {CF_UNICODETEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
-}
-
-bool HasPlainText(IDataObject* aDataObj) {
- return SUCCEEDED(aDataObj->QueryGetData((FORMATETC*)&kPlainTextWFormat)) ||
- SUCCEEDED(aDataObj->QueryGetData((FORMATETC*)&kPlainTextFormat));
-}
-
-bool GetPlainText(IDataObject* aDataObj, CStringW& cstrText)
-{
- if (!HasPlainText(aDataObj))
- return false;
-
- STGMEDIUM store;
-
- // unicode text
- if (SUCCEEDED(aDataObj->GetData((FORMATETC*)&kPlainTextWFormat, &store))) {
- // makes a copy
- cstrText = static_cast(GlobalLock(store.hGlobal));
- GlobalUnlock(store.hGlobal);
- ReleaseStgMedium(&store);
- return true;
- }
-
- // ascii text
- if (SUCCEEDED(aDataObj->GetData((FORMATETC*)&kPlainTextFormat, &store))) {
- // makes a copy
- cstrText = static_cast(GlobalLock(store.hGlobal));
- GlobalUnlock(store.hGlobal);
- ReleaseStgMedium(&store);
- return true;
- }
-
- return false;
-}
-
-/*
- * Updates the current target based on the contents of
- * a shell item.
- */
-bool CExecuteCommandVerb::SetTargetPath(IShellItem* aItem)
-{
- if (!aItem)
- return false;
-
- CString cstrText;
- CComPtr object;
- // Check the underlying data object first to insure we get
- // absolute uri. See chromium bug 157184.
- if (SUCCEEDED(aItem->BindToHandler(nullptr, BHID_DataObject,
- IID_IDataObject,
- reinterpret_cast(&object))) &&
- GetPlainText(object, cstrText)) {
- wchar_t scheme[16];
- URL_COMPONENTS components = {0};
- components.lpszScheme = scheme;
- components.dwSchemeLength = sizeof(scheme)/sizeof(scheme[0]);
- components.dwStructSize = sizeof(components);
- // note, more advanced use may have issues with paths with spaces.
- if (!InternetCrackUrlW(cstrText, 0, 0, &components)) {
- Log(L"Failed to identify object text '%s'", cstrText);
- return false;
- }
-
- mTargetIsFileSystemLink = (components.nScheme == INTERNET_SCHEME_FILE);
- mTarget = cstrText;
-
- return true;
- }
-
- Log(L"No data object or data object has no text.");
-
- // Use the shell item display name
- LPWSTR str = nullptr;
- mTargetIsFileSystemLink = true;
- if (FAILED(aItem->GetDisplayName(SIGDN_FILESYSPATH, &str))) {
- mTargetIsFileSystemLink = false;
- if (FAILED(aItem->GetDisplayName(SIGDN_URL, &str))) {
- Log(L"Failed to get parameter string.");
- return false;
- }
- }
- mTarget = str;
- CoTaskMemFree(str);
-
- CStringW defaultPath;
- GetDefaultBrowserPath(defaultPath);
- mTargetIsDefaultBrowser = !mTarget.CompareNoCase(defaultPath);
-
- size_t browserEXELen = wcslen(kFirefoxExe);
- mTargetIsBrowser = mTarget.GetLength() >= browserEXELen &&
- !mTarget.Right(browserEXELen).CompareNoCase(kFirefoxExe);
-
- return true;
-}
-
-/*
- * Desktop launch - Launch the destop browser to display the current
- * target using shellexecute.
- */
-void LaunchDesktopBrowserWithParams(CStringW& aBrowserPath, CStringW& aVerb,
- CStringW& aTarget, CStringW& aParameters,
- bool aTargetIsDefaultBrowser, bool aTargetIsBrowser)
-{
- // If a taskbar shortcut, link or local file is clicked, the target will
- // be the browser exe or file. Don't pass in -url for the target if the
- // target is known to be a browser. Otherwise, one instance of Firefox
- // will try to open another instance.
- CStringW params;
- if (!aTargetIsDefaultBrowser && !aTargetIsBrowser && !aTarget.IsEmpty()) {
- // Fallback to the module path if it failed to get the default browser.
- GetDefaultBrowserPath(aBrowserPath);
- params += "-url ";
- params += "\"";
- params += aTarget;
- params += "\"";
- }
-
- // Tack on any extra parameters we received (for example --profilemanager)
- if (!aParameters.IsEmpty()) {
- params += " ";
- params += aParameters;
- }
-
- Log(L"Desktop Launch: verb:'%s' exe:'%s' params:'%s'", aVerb, aBrowserPath, params);
-
- // Relaunch in Desktop mode uses a special URL to trick Windows into
- // switching environments. We shouldn't actually try to open this URL.
- if (!_wcsicmp(aTarget, L"http://-desktop/")) {
- // Ignore any params and just launch on desktop
- params.Empty();
- }
-
- PROCESS_INFORMATION procInfo;
- STARTUPINFO startInfo;
- memset(&procInfo, 0, sizeof(PROCESS_INFORMATION));
- memset(&startInfo, 0, sizeof(STARTUPINFO));
-
- startInfo.cb = sizeof(STARTUPINFO);
- startInfo.dwFlags = STARTF_USESHOWWINDOW;
- startInfo.wShowWindow = SW_SHOWNORMAL;
-
- BOOL result =
- CreateProcessW(aBrowserPath, static_cast(params.GetBuffer()),
- NULL, NULL, FALSE, 0, NULL, NULL, &startInfo, &procInfo);
- if (!result) {
- Log(L"CreateProcess failed! (%d)", GetLastError());
- return;
- }
- // Hand off foreground/focus rights to the browser we create. If we don't
- // do this the ceh will keep ownership causing desktop firefox to launch
- // deactivated.
- if (!AllowSetForegroundWindow(procInfo.dwProcessId)) {
- Log(L"AllowSetForegroundWindow failed! (%d)", GetLastError());
- }
- CloseHandle(procInfo.hThread);
- CloseHandle(procInfo.hProcess);
- Log(L"Desktop browser process id: %d", procInfo.dwProcessId);
-}
-
-void
-CExecuteCommandVerb::LaunchDesktopBrowser()
-{
- CStringW browserPath;
- if (!GetDesktopBrowserPath(browserPath)) {
- return;
- }
-
- LaunchDesktopBrowserWithParams(browserPath, mVerb, mTarget, mParameters,
- mTargetIsDefaultBrowser, mTargetIsBrowser);
-}
-
-void
-CExecuteCommandVerb::HeartBeat()
-{
- if (mRequestType == METRO_UPDATE && mDelayedLaunchType == DESKTOP &&
- !IsMetroProcessRunning()) {
- mDelayedLaunchType = NONE;
- LaunchDesktopBrowser();
- SetRequestMet();
- }
- if (mDelayedLaunchType == METRO && !TestForUpdateLock()) {
- mDelayedLaunchType = NONE;
- LaunchMetroBrowser();
- SetRequestMet();
- }
-}
-
-bool
-CExecuteCommandVerb::TestForUpdateLock()
-{
- CStringW browserPath;
- if (!GetDefaultBrowserPath(browserPath)) {
- return false;
- }
-
- HANDLE hFile = CreateFileW(browserPath,
- FILE_EXECUTE, FILE_SHARE_READ|FILE_SHARE_WRITE,
- nullptr, OPEN_EXISTING, 0, nullptr);
- if (hFile != INVALID_HANDLE_VALUE) {
- CloseHandle(hFile);
- return false;
- }
- return true;
-}
-
-bool
-CExecuteCommandVerb::LaunchMetroBrowser()
-{
- HRESULT hr;
-
- CComPtr activateMgr;
- hr = activateMgr.CoCreateInstance(CLSID_ApplicationActivationManager,
- nullptr, CLSCTX_LOCAL_SERVER);
- if (FAILED(hr)) {
- Log(L"CoCreateInstance failed, launching on desktop.");
- return false;
- }
-
- // Hand off focus rights to the out-of-process activation server. This will
- // fail if we don't have the rights to begin with. Log but don't bail.
- hr = CoAllowSetForegroundWindow(activateMgr, nullptr);
- if (FAILED(hr)) {
- Log(L"CoAllowSetForegroundWindow result %X", hr);
- }
-
- WCHAR appModelID[256];
- if (!GetDefaultBrowserAppModelID(appModelID)) {
- Log(L"GetDefaultBrowserAppModelID failed.");
- return false;
- }
-
- Log(L"Metro Launch: verb:'%s' appid:'%s' params:'%s'", mVerb, appModelID, mTarget);
-
- // shortcuts to the application
- DWORD processID;
- if (mTargetIsDefaultBrowser) {
- hr = activateMgr->ActivateApplication(appModelID, L"", AO_NONE, &processID);
- Log(L"ActivateApplication result %X", hr);
- // files
- } else if (mTargetIsFileSystemLink) {
- hr = activateMgr->ActivateForFile(appModelID, mShellItemArray, mVerb, &processID);
- Log(L"ActivateForFile result %X", hr);
- // protocols
- } else {
- hr = activateMgr->ActivateForProtocol(appModelID, mShellItemArray, &processID);
- Log(L"ActivateForProtocol result %X", hr);
- }
- return true;
-}
-
-void CExecuteCommandVerb::SetRequestMet()
-{
- SafeRelease(&mShellItemArray);
- SafeRelease(&mUnkSite);
- mRequestMet = true;
- Log(L"Request met, exiting.");
-}
-
-IFACEMETHODIMP CExecuteCommandVerb::Execute()
-{
- Log(L"Execute()");
-
- if (!mTarget.GetLength()) {
- // We shut down when this flips to true
- SetRequestMet();
- return E_FAIL;
- }
-
- if (!IsDX10Available()) {
- Log(L"Can't launch in metro due to missing hardware acceleration features.");
- mRequestType = DESKTOP_RESTART;
- }
-
- // Deal with metro restart for an update - launch desktop with a command
- // that tells it to run updater then launch the metro browser.
- if (mRequestType == METRO_UPDATE) {
- // We'll complete this in the heart beat callback from the main msg loop.
- // We do this because the last browser instance makes this call to Execute
- // sync. So we want to make sure it's completely shutdown before we do
- // the update.
- mParameters = kMetroUpdateCmdLine;
- mDelayedLaunchType = DESKTOP;
- return S_OK;
- }
-
- // Launch on the desktop
- if (mRequestType == DESKTOP_RESTART ||
- (mRequestType == DEFAULT_LAUNCH && DefaultLaunchIsDesktop())) {
- LaunchDesktopBrowser();
- SetRequestMet();
- return S_OK;
- }
-
- // If we have an update in the works, don't try to activate yet,
- // delay until the lock is removed.
- if (TestForUpdateLock()) {
- mDelayedLaunchType = METRO;
- return S_OK;
- }
-
- LaunchMetroBrowser();
- SetRequestMet();
- return S_OK;
-}
-
-class ClassFactory : public IClassFactory
-{
-public:
- ClassFactory(IUnknown *punkObject);
- ~ClassFactory();
- STDMETHODIMP Register(CLSCTX classContent, REGCLS classUse);
- STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
- STDMETHODIMP_(ULONG) AddRef() { return 2; }
- STDMETHODIMP_(ULONG) Release() { return 1; }
- STDMETHODIMP CreateInstance(IUnknown *punkOuter, REFIID riid, void **ppv);
- STDMETHODIMP LockServer(BOOL);
-private:
- IUnknown* mUnkObject;
- DWORD mRegID;
-};
-
-ClassFactory::ClassFactory(IUnknown* aUnkObj) :
- mUnkObject(aUnkObj),
- mRegID(0)
-{
- if (mUnkObject) {
- mUnkObject->AddRef();
- }
-}
-
-ClassFactory::~ClassFactory()
-{
- if (mRegID) {
- CoRevokeClassObject(mRegID);
- }
- mUnkObject->Release();
-}
-
-STDMETHODIMP
-ClassFactory::Register(CLSCTX aClass, REGCLS aUse)
-{
- return CoRegisterClassObject(__uuidof(CExecuteCommandVerb),
- static_cast(this),
- aClass, aUse, &mRegID);
-}
-
-STDMETHODIMP
-ClassFactory::QueryInterface(REFIID riid, void **ppv)
-{
- IUnknown *punk = nullptr;
- if (riid == IID_IUnknown || riid == IID_IClassFactory) {
- punk = static_cast(this);
- }
- *ppv = punk;
- if (punk) {
- punk->AddRef();
- return S_OK;
- } else {
- return E_NOINTERFACE;
- }
-}
-
-STDMETHODIMP
-ClassFactory::CreateInstance(IUnknown *punkOuter, REFIID riid, void **ppv)
-{
- *ppv = nullptr;
- if (punkOuter)
- return CLASS_E_NOAGGREGATION;
- return mUnkObject->QueryInterface(riid, ppv);
-}
-
-LONG gObjRefCnt;
-
-STDMETHODIMP
-ClassFactory::LockServer(BOOL fLock)
-{
- if (fLock)
- InterlockedIncrement(&gObjRefCnt);
- else
- InterlockedDecrement(&gObjRefCnt);
- Log(L"ClassFactory::LockServer() %d", gObjRefCnt);
- return S_OK;
-}
-
-int APIENTRY wWinMain(HINSTANCE, HINSTANCE, PWSTR pszCmdLine, int)
-{
-#if defined(SHOW_CONSOLE)
- SetupConsole();
-#endif
-
- // nsis installer uses this as a helper to launch metro
- if (pszCmdLine && StrStrI(pszCmdLine, kNsisLaunchCmdLine))
- {
- CoInitialize(nullptr);
- CExecuteCommandVerb *pHandler = new CExecuteCommandVerb();
- if (!pHandler)
- return E_OUTOFMEMORY;
- pHandler->CommandLineMetroLaunch();
- delete pHandler;
- CoUninitialize();
- return 0;
- }
-
- if (!wcslen(pszCmdLine) || StrStrI(pszCmdLine, kExplorerLaunchCmdLine))
- {
- CoInitialize(nullptr);
-
- CExecuteCommandVerb *pHandler = new CExecuteCommandVerb();
- if (!pHandler)
- return E_OUTOFMEMORY;
-
- IUnknown* ppi;
- pHandler->QueryInterface(IID_IUnknown, (void**)&ppi);
- if (!ppi)
- return E_FAIL;
-
- ClassFactory classFactory(ppi);
- ppi->Release();
- ppi = nullptr;
-
- // REGCLS_SINGLEUSE insures we only get used once and then discarded.
- if (FAILED(classFactory.Register(CLSCTX_LOCAL_SERVER, REGCLS_SINGLEUSE)))
- return -1;
-
- if (!SetTimer(nullptr, 1, HEARTBEAT_MSEC, nullptr)) {
- Log(L"Failed to set timer, can't process request.");
- return -1;
- }
-
- MSG msg;
- long beatCount = 0;
- while (GetMessage(&msg, 0, 0, 0) > 0) {
- if (msg.message == WM_TIMER) {
- pHandler->HeartBeat();
- if (++beatCount > REQUEST_WAIT_TIMEOUT ||
- (pHandler->RequestMet() && pHandler->RefCount() < 2)) {
- break;
- }
- }
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
-
-#ifdef DEBUG_DELAY_SHUTDOWN
- Sleep(10000);
-#endif
- CoUninitialize();
- return 0;
- }
- return 0;
-}
diff --git a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.def b/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.def
deleted file mode 100644
index 5adbfef6fb1..00000000000
--- a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.def
+++ /dev/null
@@ -1,6 +0,0 @@
-LIBRARY CommandExecuteHandler.dll
-
-EXPORTS
- DllCanUnloadNow PRIVATE
- DllGetClassObject PRIVATE
-
diff --git a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.exe.manifest b/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.exe.manifest
deleted file mode 100644
index ae9f93b1ef2..00000000000
--- a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.exe.manifest
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-Firefox Launcher
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.rc b/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.rc
deleted file mode 100644
index dca806f69cc..00000000000
--- a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.rc
+++ /dev/null
@@ -1,6 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; 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/. */
-
-1 24 "CommandExecuteHandler.exe.manifest"
diff --git a/browser/metro/shell/commandexecutehandler/Makefile.in b/browser/metro/shell/commandexecutehandler/Makefile.in
deleted file mode 100644
index 76e1da1c3d8..00000000000
--- a/browser/metro/shell/commandexecutehandler/Makefile.in
+++ /dev/null
@@ -1,11 +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/.
-
-ifndef MOZ_WINCONSOLE
-MOZ_WINCONSOLE = 0
-endif
-
-include $(topsrcdir)/config/rules.mk
-
-DIST_PROGRAM = CommandExecuteHandler$(BIN_SUFFIX)
diff --git a/browser/metro/shell/commandexecutehandler/moz.build b/browser/metro/shell/commandexecutehandler/moz.build
deleted file mode 100644
index fb47441be41..00000000000
--- a/browser/metro/shell/commandexecutehandler/moz.build
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- 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/.
-
-Program('CommandExecuteHandler')
-
-SOURCES += [
- 'CEHHelper.cpp',
- 'CommandExecuteHandler.cpp',
-]
-
-# We want this exe in dist/bin
-DIST_SUBDIR = ''
-
-for var in ('UNICODE', '_UNICODE', 'NS_NO_XPCOM'):
- DEFINES[var] = True
-
-NO_PGO = True
-
-RCINCLUDE = 'CommandExecuteHandler.rc'
-
-OS_LIBS += [
- 'kernel32',
- 'user32',
- 'ole32',
- 'shlwapi',
- 'propsys',
- 'advapi32',
- 'wininet',
-]
diff --git a/browser/metro/shell/linktool/linktool.cpp b/browser/metro/shell/linktool/linktool.cpp
deleted file mode 100644
index f10dbbd20e5..00000000000
--- a/browser/metro/shell/linktool/linktool.cpp
+++ /dev/null
@@ -1,296 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; 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/. */
-
-#undef WINVER
-#undef _WIN32_WINNT
-#define WINVER 0x602
-#define _WIN32_WINNT 0x602
-
-#include
-#include
-#include
-#include
-#include
-#define INITGUID
-#include
-#include
-#include
-
-// Indicates that an application supports dual desktop and immersive modes. In Windows 8, this property is only applicable for web browsers.
-//DEFINE_PROPERTYKEY(PKEY_AppUserModel_IsDualMode, 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 11);
-
-void DumpParameters(LPCWSTR aTargetPath, LPCWSTR aShortcutPath, LPCWSTR aAppModelID, LPCWSTR aDescription)
-{
- if (aTargetPath)
- wprintf(L"target path: '%s'\n", aTargetPath);
- if (aShortcutPath)
- wprintf(L"shortcut path: '%s'\n", aShortcutPath);
- if (aAppModelID)
- wprintf(L"app id: '%s'\n", aAppModelID);
- if (aDescription)
- wprintf(L"description: '%s'\n", aDescription);
-}
-
-HRESULT
-SetShortcutProps(LPCWSTR aShortcutPath, LPCWSTR aAppModelID, bool aSetID, bool aSetMode)
-{
- HRESULT hres;
- ::CoInitialize(nullptr);
-
- IPropertyStore *m_pps = nullptr;
- if (FAILED(hres = SHGetPropertyStoreFromParsingName(aShortcutPath,
- nullptr,
- GPS_READWRITE,
- IID_PPV_ARGS(&m_pps)))) {
- printf("SHGetPropertyStoreFromParsingName failed\n");
- goto Exit;
- }
-
- if (aSetMode) {
- PROPVARIANT propvar;
- if (FAILED(hres = InitPropVariantFromBoolean(true, &propvar)) ||
- FAILED(hres = m_pps->SetValue(PKEY_AppUserModel_IsDualMode, propvar))) {
- goto Exit;
- }
- PropVariantClear(&propvar);
- }
-
- if (aSetID && aAppModelID) {
- PROPVARIANT propvar;
- if (FAILED(hres = InitPropVariantFromString(aAppModelID, &propvar)) ||
- FAILED(hres = m_pps->SetValue(PKEY_AppUserModel_ID, propvar))) {
- goto Exit;
- }
- PropVariantClear(&propvar);
- }
-
- hres = m_pps->Commit();
-
- Exit:
-
- if (m_pps) {
- m_pps->Release();
- }
-
- CoUninitialize();
- return hres;
-}
-
-HRESULT
-PrintShortcutProps(LPCWSTR aTargetPath)
-{
- HRESULT hres;
- ::CoInitialize(nullptr);
-
- IPropertyStore *m_pps = nullptr;
- if (FAILED(hres = SHGetPropertyStoreFromParsingName(aTargetPath,
- nullptr,
- GPS_READWRITE,
- IID_PPV_ARGS(&m_pps)))) {
- printf("SHGetPropertyStoreFromParsingName failed\n");
- goto Exit;
- }
-
- bool found = false;
-
- PROPVARIANT propvar;
- if (SUCCEEDED(hres = m_pps->GetValue(PKEY_AppUserModel_IsDualMode, &propvar)) && propvar.vt == VT_BOOL && propvar.boolVal == -1) {
- printf("PKEY_AppUserModel_IsDualMode found\n");
- PropVariantClear(&propvar);
- found = true;
- }
-
- if (SUCCEEDED(hres = m_pps->GetValue(PKEY_AppUserModel_ID, &propvar)) && propvar.pwszVal) {
- printf("PKEY_AppUserModel_ID found ");
- wprintf(L"value: '%s'\n", propvar.pwszVal);
- PropVariantClear(&propvar);
- found = true;
- }
-
- if (!found) {
- printf("no known properties found.\n");
- }
-
- Exit:
-
- if (m_pps) {
- m_pps->Release();
- }
-
- CoUninitialize();
- return hres;
-}
-
-HRESULT
-CreateLink(LPCWSTR aTargetPath, LPCWSTR aShortcutPath, LPCWSTR aDescription)
-{
- HRESULT hres;
- IShellLink* psl;
-
- wprintf(L"creating shortcut: '%s'\n", aShortcutPath);
-
- CoInitialize(nullptr);
-
- hres = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER,
- IID_IShellLink, (LPVOID*)&psl);
- if (FAILED(hres)) {
- CoUninitialize();
- return hres;
- }
- psl->SetPath(aTargetPath);
- if (aDescription) {
- psl->SetDescription(aDescription);
- } else {
- psl->SetDescription(L"");
- }
-
- IPersistFile* ppf = nullptr;
- hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
-
- if (SUCCEEDED(hres)) {
- hres = ppf->Save(aShortcutPath, TRUE);
- ppf->Release();
- }
- psl->Release();
- CoUninitialize();
- return hres;
-}
-
-void DumpCommands()
-{
- printf("control options:\n");
- printf(" /CREATE create a shortcut for the target file.\n");
- printf(" /UPDATE update properties on the target file.\n");
- printf(" /PRINT print the known properties set on the target file.\n");
- printf("parameters:\n");
- printf(" /T(path) the full path and filename of the target file.\n");
- printf(" /S(path) with CREATE, the full path and filename of the shortcut to create.\n");
- printf(" /D(string) with CREATE, adds a description to the shortcut.\n");
- printf(" /A(id) the app model id to assign to the shortcut or target file.\n");
- printf(" /M enable support for dual desktop and immersive modes on the shortcut or target file.\n");
-}
-
-int wmain(int argc, WCHAR* argv[])
-{
- WCHAR shortcutPathStr[MAX_PATH];
- WCHAR targetPathStr[MAX_PATH];
- WCHAR appModelIDStr[MAX_PATH];
- WCHAR descriptionStr[MAX_PATH];
-
- shortcutPathStr[0] = '\0';
- targetPathStr[0] = '\0';
- appModelIDStr[0] = '\0';
- descriptionStr[0] = '\0';
-
- bool createShortcutFound = false;
- bool updateFound = false;
- bool shortcutPathFound = false;
- bool targetPathFound = false;
- bool appModelIDFound = false;
- bool modeFound = false;
- bool descriptionFound = false;
- bool printFound = false;
-
- int idx;
- for (idx = 1; idx < argc; idx++) {
- if (!wcscmp(L"/CREATE", argv[idx])) {
- createShortcutFound = true;
- continue;
- }
- if (!wcscmp(L"/UPDATE", argv[idx])) {
- updateFound = true;
- continue;
- }
- if (!wcscmp(L"/PRINT", argv[idx])) {
- printFound = true;
- continue;
- }
-
- if (!wcsncmp(L"/S", argv[idx], 2) && wcslen(argv[idx]) > 2) {
- wcscpy_s(shortcutPathStr, MAX_PATH, (argv[idx]+2));
- shortcutPathFound = true;
- continue;
- }
- if (!wcsncmp(L"/T", argv[idx], 2) && wcslen(argv[idx]) > 2) {
- wcscpy_s(targetPathStr, MAX_PATH, (argv[idx]+2));
- targetPathFound = true;
- continue;
- }
- if (!wcsncmp(L"/A", argv[idx], 2) && wcslen(argv[idx]) > 2) {
- wcscpy_s(appModelIDStr, MAX_PATH, (argv[idx]+2));
- appModelIDFound = true;
- continue;
- }
- if (!wcsncmp(L"/D", argv[idx], 2) && wcslen(argv[idx]) > 2 && wcslen(argv[idx]) < MAX_PATH) {
- wcscpy_s(descriptionStr, MAX_PATH, (argv[idx]+2));
- descriptionFound = true;
- continue;
- }
- if (!wcscmp(L"/M", argv[idx])) {
- modeFound = true;
- continue;
- }
- }
-
- DumpParameters(targetPathStr, shortcutPathStr, appModelIDStr, descriptionStr);
-
- if (!createShortcutFound && !updateFound && !printFound) {
- DumpCommands();
- return 0;
- }
-
- if (!targetPathFound) {
- printf("missing target file path.\n");
- return -1;
- }
-
- HRESULT hres;
-
- if (printFound) {
- if (FAILED(hres = PrintShortcutProps(targetPathStr))) {
- printf("failed printing target props HRESULT=%X\n", hres);
- return -1;
- }
- return 0;
- }
-
- if (createShortcutFound && !shortcutPathFound) {
- printf("missing shortcut file path.\n");
- return -1;
- }
-
- if (updateFound && !appModelIDFound && !modeFound) {
- printf("no properties selected.\n");
- return -1;
- }
-
- if (createShortcutFound) {
- if (FAILED(hres = CreateLink(targetPathStr,
- shortcutPathStr,
- (descriptionFound ? descriptionStr : nullptr)))) {
- printf("failed creating shortcut HRESULT=%X\n", hres);
- return -1;
- }
- }
-
- LPCWSTR target;
- if (createShortcutFound) {
- target = shortcutPathStr;
- } else {
- target = targetPathStr;
- }
-
- if (appModelIDFound || modeFound) {
- if (FAILED(hres = SetShortcutProps(target,
- (appModelIDFound ? appModelIDStr : nullptr),
- appModelIDFound, modeFound))) {
- printf("failed adding property HRESULT=%X\n", hres);
- return -1;
- }
- }
-
- return 0;
-}
-
diff --git a/browser/metro/shell/linktool/moz.build b/browser/metro/shell/linktool/moz.build
deleted file mode 100644
index 223928bf18c..00000000000
--- a/browser/metro/shell/linktool/moz.build
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- 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/.
-
-Program('linktool')
-
-SOURCES += [
- 'linktool.cpp',
-]
-
-DIST_SUBDIR = 'metro/install'
-
-for var in ('UNICODE', '_UNICODE'):
- DEFINES[var] = True
-
-NO_PGO = True
-
-OS_LIBS += [
- 'kernel32',
- 'user32',
- 'ole32',
- 'shlwapi',
- 'shell32',
- 'propsys',
-]
diff --git a/browser/metro/shell/moz.build b/browser/metro/shell/moz.build
deleted file mode 100644
index 6f76790d995..00000000000
--- a/browser/metro/shell/moz.build
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- 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 += [
- 'commandexecutehandler',
- 'linktool',
-]
-
-TEST_DIRS += ['testing']
-
diff --git a/browser/metro/shell/priconfig.xml b/browser/metro/shell/priconfig.xml
deleted file mode 100644
index b2bed133b55..00000000000
--- a/browser/metro/shell/priconfig.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/browser/metro/shell/resources.pri b/browser/metro/shell/resources.pri
deleted file mode 100644
index c57e50a7877..00000000000
Binary files a/browser/metro/shell/resources.pri and /dev/null differ
diff --git a/browser/metro/shell/testing/metrotestharness.cpp b/browser/metro/shell/testing/metrotestharness.cpp
deleted file mode 100644
index d228af9772f..00000000000
--- a/browser/metro/shell/testing/metrotestharness.cpp
+++ /dev/null
@@ -1,398 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; 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/. */
-
-#undef WINVER
-#undef _WIN32_WINNT
-#define WINVER 0x602
-#define _WIN32_WINNT 0x602
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-static const WCHAR* kFirefoxExe = L"firefox.exe";
-static const WCHAR* kDefaultMetroBrowserIDPathKey = L"FirefoxURL";
-
-// Logging pipe handle
-HANDLE gTestOutputPipe = INVALID_HANDLE_VALUE;
-// Logging pipe read buffer
-#define PIPE_BUFFER_SIZE 4096
-char buffer[PIPE_BUFFER_SIZE + 1];
-
-CString sAppParams;
-CString sFirefoxPath;
-
-// The tests file we write out for firefox.exe which contains test
-// startup command line paramters.
-#define kMetroTestFile "tests.ini"
-
-// Process exit codes for buildbotcustom logic. These are currently ignored, but
-// at some point releng expects to use these.
-#define SUCCESS 0
-#define WARNINGS 1
-#define FAILURE 2
-#define EXCEPTION 3
-#define RETRY 4
-
-static void Log(const wchar_t *fmt, ...)
-{
- va_list a = nullptr;
- wchar_t szDebugString[1024];
- if(!lstrlenW(fmt))
- return;
- va_start(a,fmt);
- vswprintf(szDebugString, 1024, fmt, a);
- va_end(a);
- if(!lstrlenW(szDebugString))
- return;
-
- wprintf(L"INFO | metrotestharness.exe | %s\n", szDebugString);
- fflush(stdout);
-}
-
-static void Fail(bool aRequestRetry, const wchar_t *fmt, ...)
-{
- va_list a = nullptr;
- wchar_t szDebugString[1024];
- if(!lstrlenW(fmt))
- return;
- va_start(a,fmt);
- vswprintf(szDebugString, 1024, fmt, a);
- va_end(a);
- if(!lstrlenW(szDebugString))
- return;
- if (aRequestRetry) {
- wprintf(L"FAIL-SHOULD-RETRY | metrotestharness.exe | %s\n", szDebugString);
- } else {
- wprintf(L"TEST-UNEXPECTED-FAIL | metrotestharness.exe | %s\n", szDebugString);
- }
- fflush(stdout);
-}
-
-/*
- * Retrieve our module dir path.
- *
- * @aPathBuffer Buffer to fill
- */
-static bool GetModulePath(CStringW& aPathBuffer)
-{
- WCHAR buffer[MAX_PATH];
- memset(buffer, 0, sizeof(buffer));
-
- if (!GetModuleFileName(nullptr, buffer, MAX_PATH)) {
- Fail(false, L"GetModuleFileName failed.");
- return false;
- }
-
- WCHAR* slash = wcsrchr(buffer, '\\');
- if (!slash)
- return false;
- *slash = '\0';
-
- aPathBuffer = buffer;
- return true;
-}
-
-/*
- * Retrieve 'module dir path\firefox.exe'
- *
- * @aPathBuffer Buffer to fill
- */
-static bool GetDesktopBrowserPath(CStringW& aPathBuffer)
-{
- if (!GetModulePath(aPathBuffer))
- return false;
-
- // ceh.exe sits in dist/bin root with the desktop browser. Since this
- // is a firefox only component, this hardcoded filename is ok.
- aPathBuffer.Append(L"\\");
- aPathBuffer.Append(kFirefoxExe);
- return true;
-}
-
-/*
- * Retrieve the app model id of the firefox metro browser.
- *
- * @aPathBuffer Buffer to fill
- * @aCharLength Length of buffer to fill in characters
- */
-static bool GetDefaultBrowserAppModelID(WCHAR* aIDBuffer,
- long aCharLength)
-{
- if (!aIDBuffer || aCharLength <= 0)
- return false;
-
- memset(aIDBuffer, 0, (sizeof(WCHAR)*aCharLength));
-
- 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;
-}
-
-// Tests.ini file cleanup helper
-class DeleteTestFileHelper
-{
- CStringA mTestFile;
-public:
- DeleteTestFileHelper(CStringA& aTestFile) :
- mTestFile(aTestFile) {}
- ~DeleteTestFileHelper() {
- if (mTestFile.GetLength()) {
- Log(L"Deleting %s", CStringW(mTestFile));
- DeleteFileA(mTestFile);
- }
- }
-};
-
-static bool SetupTestOutputPipe()
-{
- SECURITY_ATTRIBUTES saAttr;
- saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
- saAttr.bInheritHandle = TRUE;
- saAttr.lpSecurityDescriptor = nullptr;
-
- gTestOutputPipe =
- CreateNamedPipeW(L"\\\\.\\pipe\\metrotestharness",
- PIPE_ACCESS_INBOUND,
- PIPE_TYPE_BYTE|PIPE_WAIT,
- 1,
- PIPE_BUFFER_SIZE,
- PIPE_BUFFER_SIZE, 0, nullptr);
-
- if (gTestOutputPipe == INVALID_HANDLE_VALUE) {
- Log(L"Failed to create named logging pipe.");
- return false;
- }
- return true;
-}
-
-static void ReadPipe()
-{
- DWORD numBytesRead;
- while (ReadFile(gTestOutputPipe, buffer, PIPE_BUFFER_SIZE,
- &numBytesRead, nullptr) &&
- numBytesRead) {
- buffer[numBytesRead] = '\0';
- printf("%s", buffer);
- fflush(stdout);
- }
-}
-
-static int Launch()
-{
- Log(L"Launching browser...");
-
- DWORD processID;
-
- // The interface that allows us to activate the browser
- CComPtr activateMgr;
- if (FAILED(CoCreateInstance(CLSID_ApplicationActivationManager, nullptr,
- CLSCTX_LOCAL_SERVER,
- IID_IApplicationActivationManager,
- (void**)&activateMgr))) {
- Fail(false, L"CoCreateInstance CLSID_ApplicationActivationManager failed.");
- return FAILURE;
- }
-
- HRESULT hr;
- WCHAR appModelID[256];
- // Activation is based on the browser's registered app model id
- if (!GetDefaultBrowserAppModelID(appModelID, (sizeof(appModelID)/sizeof(WCHAR)))) {
- Fail(false, L"GetDefaultBrowserAppModelID failed.");
- return FAILURE;
- }
- Log(L"App model id='%s'", appModelID);
-
- // Hand off focus rights if the terminal has focus to the out-of-process
- // activation server (explorer.exe). Without this the metro interface
- // won't launch.
- hr = CoAllowSetForegroundWindow(activateMgr, nullptr);
- if (FAILED(hr)) {
- // Log but don't fail. This has happened on vms with certain terminals run by
- // QA during mozmill testing.
- Log(L"Windows focus rights hand off failed (HRESULT=0x%X). Ignoring.", hr);
- }
-
- Log(L"Harness process id: %d", GetCurrentProcessId());
-
- // If provided, validate the firefox path passed in.
- int binLen = wcslen(kFirefoxExe);
- if (sFirefoxPath.GetLength() && sFirefoxPath.Right(binLen) != kFirefoxExe) {
- Log(L"firefoxpath is missing a valid bin name! Assuming '%s'.", kFirefoxExe);
- if (sFirefoxPath.Right(1) != L"\\") {
- sFirefoxPath += L"\\";
- }
- sFirefoxPath += kFirefoxExe;
- }
-
- // Because we can't pass command line args, we store params in a
- // tests.ini file in dist/bin which the browser picks up on launch.
- CStringA testFilePath;
- if (sFirefoxPath.GetLength()) {
- // Use the firefoxpath passed to us by the test harness
- int index = sFirefoxPath.ReverseFind('\\');
- if (index == -1) {
- Fail(false, L"Bad firefoxpath path");
- return FAILURE;
- }
- testFilePath = sFirefoxPath.Mid(0, index);
- testFilePath += "\\";
- testFilePath += kMetroTestFile;
- } else {
- // Use the module path
- char path[MAX_PATH];
- if (!GetModuleFileNameA(nullptr, path, MAX_PATH)) {
- Fail(false, L"GetModuleFileNameA errorno=%d", GetLastError());
- return FAILURE;
- }
- char* slash = strrchr(path, '\\');
- if (!slash)
- return FAILURE;
- *slash = '\0'; // no trailing slash
- testFilePath = path;
- testFilePath += "\\";
- sFirefoxPath = testFilePath;
- sFirefoxPath += kFirefoxExe;
- testFilePath += kMetroTestFile;
- }
-
- // Make sure the firefox bin exists
- if (GetFileAttributesW(sFirefoxPath) == INVALID_FILE_ATTRIBUTES) {
- Fail(false, L"Invalid bin path: '%s'", sFirefoxPath);
- return FAILURE;
- }
-
- Log(L"Using bin path: '%s'", sFirefoxPath);
-
- Log(L"Writing out tests.ini to: '%s'", CStringW(testFilePath));
- HANDLE hTestFile = CreateFileA(testFilePath, GENERIC_WRITE,
- 0, nullptr, CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL,
- nullptr);
- if (hTestFile == INVALID_HANDLE_VALUE) {
- Fail(false, L"CreateFileA errorno=%d", GetLastError());
- return FAILURE;
- }
-
- DeleteTestFileHelper dtf(testFilePath);
-
- // nsAppRunner expects the first param to be the bin path, just like a
- // normal startup. So prepend our bin path to our param string we write.
- CStringA asciiParams = sFirefoxPath;
- asciiParams += " ";
- asciiParams += sAppParams;
- asciiParams.Trim();
- Log(L"Browser command line args: '%s'", CString(asciiParams));
- if (!WriteFile(hTestFile, asciiParams, asciiParams.GetLength(),
- nullptr, 0)) {
- CloseHandle(hTestFile);
- Fail(false, L"WriteFile errorno=%d", GetLastError());
- return FAILURE;
- }
- FlushFileBuffers(hTestFile);
- CloseHandle(hTestFile);
-
- // Create a named stdout pipe for the browser
- if (!SetupTestOutputPipe()) {
- Fail(false, L"SetupTestOutputPipe failed (errno=%d)", GetLastError());
- return FAILURE;
- }
-
- // Launch firefox
- hr = activateMgr->ActivateApplication(appModelID, L"", AO_NOERRORUI, &processID);
- if (FAILED(hr)) {
- Fail(true, L"ActivateApplication result %X", hr);
- return RETRY;
- }
-
- Log(L"Activation succeeded.");
-
- // automation.py picks up on this, don't mess with it.
- Log(L"METRO_BROWSER_PROCESS=%d", processID);
-
- HANDLE child = OpenProcess(SYNCHRONIZE, FALSE, processID);
- if (!child) {
- Fail(false, L"Couldn't find child process. (%d)", GetLastError());
- return FAILURE;
- }
-
- Log(L"Waiting on child process...");
-
- MSG msg;
- DWORD waitResult = WAIT_TIMEOUT;
- HANDLE handles[2] = { child, gTestOutputPipe };
- while ((waitResult = MsgWaitForMultipleObjects(2, handles, FALSE, INFINITE, QS_ALLINPUT)) != WAIT_OBJECT_0) {
- if (waitResult == WAIT_FAILED) {
- Log(L"Wait failed (errno=%d)", GetLastError());
- break;
- } else if (waitResult == WAIT_OBJECT_0 + 1) {
- ReadPipe();
- } else if (waitResult == WAIT_OBJECT_0 + 2 &&
- PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
-
- ReadPipe();
- CloseHandle(gTestOutputPipe);
- CloseHandle(child);
-
- Log(L"Exiting.");
- return SUCCESS;
-}
-
-int wmain(int argc, WCHAR* argv[])
-{
- CoInitialize(nullptr);
-
- int idx;
- bool firefoxParam = false;
- for (idx = 1; idx < argc; idx++) {
- CString param = argv[idx];
- param.Trim();
-
- // Pickup the firefox path param and store it, we'll need this
- // when we create the tests.ini file.
- if (param == "-firefoxpath") {
- firefoxParam = true;
- continue;
- } else if (firefoxParam) {
- firefoxParam = false;
- sFirefoxPath = param;
- continue;
- }
-
- sAppParams.Append(argv[idx]);
- sAppParams.Append(L" ");
- }
- sAppParams.Trim();
- int res = Launch();
- CoUninitialize();
- return res;
-}
diff --git a/browser/metro/shell/testing/moz.build b/browser/metro/shell/testing/moz.build
deleted file mode 100644
index 151d98bf1ff..00000000000
--- a/browser/metro/shell/testing/moz.build
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- 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/.
-
-Program('metrotestharness')
-
-SOURCES += [
- 'metrotestharness.cpp',
-]
-
-# We want this exe in dist/bin
-DIST_SUBDIR = ''
-
-for var in ('UNICODE', '_UNICODE'):
- DEFINES[var] = True
-
-NO_PGO = True
-
-# static win runtime linking
-USE_STATIC_LIBS = True
-
-OS_LIBS += [
- 'kernel32',
- 'user32',
- 'ole32',
- 'shlwapi',
- 'propsys',
- 'advapi32',
-]
diff --git a/browser/metro/shell/tileresources/Resources.resw b/browser/metro/shell/tileresources/Resources.resw
deleted file mode 100644
index 175b01970ed..00000000000
--- a/browser/metro/shell/tileresources/Resources.resw
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Custom String Value
-
-
diff --git a/browser/metro/shell/tileresources/layout.resfiles b/browser/metro/shell/tileresources/layout.resfiles
deleted file mode 100644
index 7dc302b5cf3..00000000000
--- a/browser/metro/shell/tileresources/layout.resfiles
+++ /dev/null
@@ -1,47 +0,0 @@
-images\PinnedSiteLogo.png
-images\PinnedSiteLogo.scale-100.png
-images\PinnedSiteLogo.scale-140.png
-images\PinnedSiteLogo.scale-180.png
-images\PinnedSiteLogo.scale-80.png
-images\PinnedSiteSmallLogo.png
-images\PinnedSiteSmallLogo.scale-100.png
-images\PinnedSiteSmallLogo.scale-140.png
-images\PinnedSiteSmallLogo.scale-180.png
-images\PinnedSiteSmallLogo.scale-80.png
-images\smallLogo.contrast-black_scale-100.png
-images\smallLogo.contrast-black_scale-140.png
-images\smallLogo.contrast-black_scale-180.png
-images\smallLogo.contrast-black_scale-80.png
-images\smallLogo.contrast-white_scale-100.png
-images\smallLogo.contrast-white_scale-140.png
-images\smallLogo.contrast-white_scale-180.png
-images\smallLogo.contrast-white_scale-80.png
-images\smallLogo.png
-images\smallLogo.scale-100.png
-images\smallLogo.scale-140.png
-images\smallLogo.scale-180.png
-images\smallLogo.scale-80.png
-images\splashscreen.contrast-black_scale-100.png
-images\splashscreen.contrast-black_scale-140.png
-images\splashscreen.contrast-black_scale-180.png
-images\splashscreen.contrast-white_scale-100.png
-images\splashscreen.contrast-white_scale-140.png
-images\splashscreen.contrast-white_scale-180.png
-images\splashscreen.png
-images\splashscreen.scale-100.png
-images\splashscreen.scale-140.png
-images\splashscreen.scale-180.png
-images\tileLogo.contrast-black_scale-100.png
-images\tileLogo.contrast-black_scale-140.png
-images\tileLogo.contrast-black_scale-180.png
-images\tileLogo.contrast-black_scale-80.png
-images\tileLogo.contrast-white_scale-100.png
-images\tileLogo.contrast-white_scale-140.png
-images\tileLogo.contrast-white_scale-180.png
-images\tileLogo.contrast-white_scale-80.png
-images\tileLogo.png
-images\tileLogo.scale-100.png
-images\tileLogo.scale-140.png
-images\images\tileLogo.scale-180.png
-images\tileLogo.scale-80.png
-xaml\MainPage.xaml
diff --git a/browser/metro/shell/tileresources/resources.resfiles b/browser/metro/shell/tileresources/resources.resfiles
deleted file mode 100644
index e5da0c4fb33..00000000000
--- a/browser/metro/shell/tileresources/resources.resfiles
+++ /dev/null
@@ -1 +0,0 @@
-Resources.resw
diff --git a/browser/metro/theme/about.css b/browser/metro/theme/about.css
deleted file mode 100644
index f3daef91262..00000000000
--- a/browser/metro/theme/about.css
+++ /dev/null
@@ -1,50 +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/. */
-
-html {
- background: #f0f0f0;
- padding: 0 1em;
- font-family: "Nokia Sans", Tahoma, sans-serif !important;
- font-size: 100% !important;
-}
-
-body {
- color: black;
- position: relative;
- min-width: 330px;
- max-width: 50em;
- margin: 1em auto;
- border: 1px solid gray;
- border-radius: 10px;
- padding: 3em;
- -moz-padding-start: 30px;
- background: white;
-}
-
-.aboutPageWideContainer {
- max-width: 80%;
-}
-
-#aboutLogoContainer {
- border: 1px solid lightgray;
- width: 300px;
- margin-bottom: 2em;
-}
-
-img {
- border: 0;
-}
-
-#version {
- font-weight: bold;
- color: #909090;
- margin: -24px 0 9px 17px;
-}
-
-ul {
- margin: 0;
- -moz-margin-start: 1.5em;
- padding: 0;
- list-style: square;
-}
diff --git a/browser/metro/theme/aboutAddons.css b/browser/metro/theme/aboutAddons.css
deleted file mode 100644
index 1f03f5426d2..00000000000
--- a/browser/metro/theme/aboutAddons.css
+++ /dev/null
@@ -1,52 +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/. */
-
-html, body {
- height: 100%;
- padding: 0;
- margin: 0;
-}
-
-body {
- display: flex;
-}
-
-#aboutAddonsTextTitle {
- font-weight: bold;
-}
-
-#floatingTextBox {
- flex: 1;
-
- position: relative;
- top: 20%;
- left: 60%;
-
- width: 375px;
- padding: 20px;
- font-family: "Segoe UI", sans-serif;
- font-size: 25px;
- text-align: left;
- word-wrap: normal;
-}
-
-#fox {
- flex: 1;
- background-image:url('chrome://browser/skin/images/aboutAddonsBackground.png'), url('chrome://browser/skin/images/aboutAddonsBackgroundFillSlice.png');
- background-size: contain;
- background-position: bottom center;
- background-repeat: no-repeat, repeat-x;
- background-color: rgb(230, 230, 230); /*color hand sampled from image*/
-
-}
-
-/* Snapped-view variation */
-@media (max-width: 330px) {
- #floatingTextBox {
- top: 20%;
- left: 5%;
- width: 90%;
- padding: 0;
- }
-}
diff --git a/browser/metro/theme/aboutPage.css b/browser/metro/theme/aboutPage.css
deleted file mode 100644
index 71bb7405b1b..00000000000
--- a/browser/metro/theme/aboutPage.css
+++ /dev/null
@@ -1,72 +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/. */
-
-#aboutLogoContainer {
- width: 300px;
-}
-
-#version {
- font-weight: bold;
- color: #909090;
- margin: -24px 20px 0 118px;
-}
-
-#update {
- float: right;
- padding: 8px;
- margin-top: -32px;
-}
-
-body[dir="rtl"] #update {
- float: left;
-}
-
-#update-message-checking,
-#update-message-none,
-#update-message-found {
- display: none;
- float: right;
- padding: 8px;
- margin-top: -32px;
-}
-
-body[dir="rtl"] #update-message-checking,
-body[dir="rtl"] #update-message-none,
-body[dir="rtl"] #update-message-found {
- float: left;
-}
-
-#aboutLinks {
- background-color: white;
- padding: 5px;
- border: 2px solid #e6e5e3;
- font-size: 24px;
-}
-
-#aboutLinks > li {
- clear: both;
- border-bottom: 2px solid #e6e5e3;
- list-style: none;
- -moz-padding-end: 16px;
-}
-
-#aboutLinks > li:last-child {
- border-bottom: 0;
-}
-
-#aboutLinks > li > a {
- padding: 16px;
- display: block;
- color: #3a3834;
- background: url("images/arrowright-16.png") right center no-repeat;
-}
-
-body[dir="rtl"] #aboutLinks > li > a {
- background: url("images/arrowleft-16.png") left center no-repeat;
-}
-
-#aboutDetails {
- margin-top: 15px;
- font-size: 18px;
-}
diff --git a/browser/metro/theme/browser.css b/browser/metro/theme/browser.css
deleted file mode 100644
index f892d6ce021..00000000000
--- a/browser/metro/theme/browser.css
+++ /dev/null
@@ -1,1402 +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/. */
-
-%filter substitution
-%include defines.inc
-
-%define forward_transition_length 200ms
-%define forward_spacing 50px
-
-/* Tab/StartUI tray ======================================================== */
-
-#tray {
- transition: transform @metro_animation_duration@ @metro_animation_easing@;
- transform: translateY(-@tabs_height@);
- width: 100%;
-}
-
-#tray {
- position: fixed;
-}
-
-#tray[expanded]:not([viewstate="snapped"]) {
- transform: none;
-}
-
-/* Tabs -------------------------------------------------------------------- */
-
-#tabs-container {
- background: @panel_dark_color@ @panel_dark_background@;
- padding: 0;
- -moz-padding-start: @metro_spacing_normal@;
- width: 100%;
-}
-
-#tabs {
- -moz-padding-start: 0;
-}
-
-#tabs .tabs-list {
- display: block;
- -moz-user-focus: ignore;
- padding: 0;
- background-color: transparent;
- margin: 0;
- overflow: auto;
-}
-
-.tabs-scrollbox > .scrollbutton-up[collapsed],
-.tabs-scrollbox > .scrollbutton-down[collapsed],
-#tabs[input="imprecise"] > .tabs-scrollbox > .scrollbutton-up,
-#tabs[input="imprecise"] > .tabs-scrollbox > .scrollbutton-down {
- visibility: hidden !important;
- pointer-events: none;
-}
-
-#tabs > .tabs-scrollbox > .scrollbutton-down:-moz-locale-dir(rtl),
-#tabs > .tabs-scrollbox > .scrollbutton-up {
- list-style-image: url("images/tab-arrows.png") !important;
- -moz-image-region: rect(15px 58px 63px 14px) !important;
- padding-right: 15px;
- width: @tabs_scrollarrow_width@;
-}
-#tabs > .tabs-scrollbox > .scrollbutton-down:hover:-moz-locale-dir(rtl),
-#tabs > .tabs-scrollbox > .scrollbutton-up:hover {
- -moz-image-region: rect(14px 102px 62px 58px) !important;
-}
-#tabs > .tabs-scrollbox > .scrollbutton-down:active:-moz-locale-dir(rtl),
-#tabs > .tabs-scrollbox > .scrollbutton-up:active {
- -moz-image-region: rect(14px 152px 62px 108px) !important;
-}
-#tabs > .tabs-scrollbox > .scrollbutton-down[disabled]:-moz-locale-dir(rtl),
-#tabs > .tabs-scrollbox > .scrollbutton-up[disabled] {
- -moz-image-region: rect(15px 196px 63px 152px) !important;
-}
-
-#tabs > .tabs-scrollbox > .scrollbutton-up:-moz-locale-dir(rtl),
-#tabs > .tabs-scrollbox > .scrollbutton-down {
- list-style-image: url("images/tab-arrows.png") !important;
- -moz-image-region: rect(73px 58px 121px 14px) !important;
- padding-left: 15px;
- width: @tabs_scrollarrow_width@;
-}
-#tabs > .tabs-scrollbox > .scrollbutton-up:hover:-moz-locale-dir(rtl),
-#tabs > .tabs-scrollbox > .scrollbutton-down:hover {
- -moz-image-region: rect(72px 102px 120px 58px) !important;
-}
-#tabs > .tabs-scrollbox > .scrollbutton-up:active:-moz-locale-dir(rtl),
-#tabs > .tabs-scrollbox > .scrollbutton-down:active {
- -moz-image-region: rect(72px 152px 120px 108px) !important;
-}
-#tabs > .tabs-scrollbox > .scrollbutton-up[disabled]:-moz-locale-dir(rtl),
-#tabs > .tabs-scrollbox > .scrollbutton-down[disabled] {
- -moz-image-region: rect(73px 196px 121px 152px) !important;
-}
-
-.tabs-scrollbox > .scrollbutton-up:not([disabled]):not([collapsed]):-moz-locale-dir(rtl)::after {
- right: calc(@tabs_scrollarrow_width@ + @metro_spacing_normal@);
-}
-
-.tabs-scrollbox > .scrollbutton-down:not([disabled]):not([collapsed]):-moz-locale-dir(rtl)::before {
- right: auto;
- left: calc(@tabs_scrollarrow_width@ + @newtab_button_width@);
-}
-
-.tabs-scrollbox > .scrollbutton-up:not([disabled]):not([collapsed])::after {
- content: "";
- visibility: visible;
- display: block;
- background-color: rgb(90, 91, 95);
- position: absolute;
- top: 0;
- left: calc(@tabs_scrollarrow_width@ + @metro_spacing_normal@); /* .scrollbutton-up width + #tabs-container left padding */
- width: 1px;
- height: @tabs_height@;
-}
-
-.tabs-scrollbox > .scrollbutton-down:not([disabled]):not([collapsed])::before {
- content: "";
- visibility: visible;
- display: block;
- background-color: rgb(90, 91, 95);
- position: absolute;
- top: 0;
- right: calc(@tabs_scrollarrow_width@ + @newtab_button_width@); /* .scrollbutton-down width + #newtab-button width */
- width: 1px;
- height: @tabs_height@;
-}
-
-/* Hack for bug 965550 */
-.tabs-scrollbox > .arrowscrollbox-scrollbox > .scrollbox-innerbox {
- -moz-padding-start: calc(2 * @tabs_scrollarrow_width@);
- -moz-margin-start: calc(-2 * @tabs_scrollarrow_width@);
-}
-
-#tabs-container[viewstate="snapped"] {
- visibility: hidden;
-}
-
-@-moz-keyframes open-documenttab {
- 0% {
- opacity: 0;
- transform: scale(0, 0);
- }
-
- 100% {
- opacity: 1;
- transform: scale(1, 1);
- }
-}
-
-@-moz-keyframes close-documenttab {
- 0% {
- opacity: 1;
- transform: scale(1, 1);
- }
-
- 100% {
- opacity: 0;
- transform: scale(0, 0);
- }
-}
-
-.documenttab-container {
- animation: open-documenttab 0.4s ease-out;
-}
-
-documenttab[closing] > .documenttab-container {
- animation: close-documenttab 0.4s ease-out;
- animation-fill-mode: forwards;
-}
-
-.documenttab-favicon {
- visibility: collapse;
-}
-
-.documenttab-thumbnail {
- margin: @metro_spacing_normal@ @metro_spacing_snormal@;
- background: white none center top no-repeat;
- background-size: cover;
- min-width: @thumbnail_width@;
- width: @thumbnail_width@;
- height: @thumbnail_height@;
-}
-#tray:not([expanded]) .documenttab-thumbnail {
- background-image: none!important;
-}
-
-/* TODO: Decide how and where to display private tabs.
- * For now, display them in the main tab strip but hide the thumbnail. */
-documenttab[private] .documenttab-thumbnail {
- background-color: purple;
-}
-
-.documenttab-title {
- margin: @metro_spacing_normal@ @metro_spacing_snormal@;
- margin-top: 0;
- font-size: @metro_font_normal@;
- width: @thumbnail_width@;
- padding: 4px @metro_spacing_snormal@ 8px;
-
- background: #000;
- opacity: 0.95;
- color: #fff;
- box-shadow: 0 0 @metro_spacing_snormal@ rgba(0, 0, 0, 0.25);
-}
-
-.documenttab-crop {
- background: transparent url("chrome://browser/skin/images/tab-crop.png") 50% 50% no-repeat;
-}
-
-.documenttab-selection {
- background: transparent -moz-image-rect(url("chrome://browser/skin/images/tab-overlay.png"), 0%, 100%, 50%, 0%) 50% 50% no-repeat;
-}
-
-documenttab[selected] .documenttab-selection {
- background: transparent -moz-image-rect(url("chrome://browser/skin/images/tab-overlay.png"), 50%, 100%, 100%, 0%) 50% 50% no-repeat;
-}
-
-.documenttab-crop:-moz-locale-dir(rtl),
-.documenttab-selection:-moz-locale-dir(rtl),
-documenttab[selected] .documenttab-selection:-moz-locale-dir(rtl) {
- transform: scaleX(-1);
-}
-
-.documenttab-close {
- background: none !important;
- padding: @metro_spacing_small@ !important;
- margin-top: @metro_spacing_snormal@;
- -moz-margin-end: @metro_spacing_xsmall@;
- border-color: transparent !important;
- list-style-image: url("chrome://browser/skin/images/closetab-default.png");
-}
-
-.documenttab-close > .button-box > .button-text {
- display: none;
-}
-
-#tabs-controls {
- -moz-box-align: start;
- -moz-box-orient: vertical;
-}
-
-#newtab-button {
- list-style-image: url(chrome://browser/skin/images/newtab-default.png);
-
- /* Add some extra padding for a larger target */
- padding: 18px 20px 30px 20px;
- width: @newtab_button_width@;
-}
-
-/* Start UI ----------------------------------------------------------------- */
-
-#urlbar-autocomplete[viewstate="snapped"],
-#urlbar-autocomplete[viewstate="portrait"]{
- -moz-box-orient: vertical;
-}
-
-#autocomplete-overlay {
- display: none;
- background-color: black;
- opacity: .3;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-
-#stack[autocomplete] > #page > #content-viewport > #autocomplete-overlay {
- display: -moz-box;
-}
-
-/* Browser Content Areas ==================================================== */
-
-/* a 'margin-top' is applied dynamically in ContentAreaObserver */
-#browsers {
- background: white;
- transition-property: margin-top;
- transition-duration: .3s;
- transition-timing-function: ease-in-out;
-}
-#browsers browser {
- /* unset padding-bottom immediately */
- transition-duration: 0s;
- transition-delay: 0s;
- transition-property: padding-bottom;
-}
-/* Selection overlay and monocles */
-#page,
-.selection-overlay {
- -moz-stack-sizing: ignore;
-}
-
-.selection-overlay {
- pointer-events: none;
-}
-
-.selection-overlay:-moz-focusring {
- outline: 0 !important;
-}
-
-.selection-overlay-hidden {
- display: none;
-}
-
-.selectionhandle {
- background-image: url("chrome://browser/skin/images/selection-monocle.png");
- background-repeat: no-repeat;
- background-size: 18px 18px;
- padding: 0px;
- margin-top: -19px;
- margin-left: -9px;
- pointer-events: auto;
-}
-
-@media (min-resolution: @min_res_140pc@) {
- /* Load 140% image when scaled by 140% */
- .selectionhandle {
- background-image: url("chrome://browser/skin/images/selection-monocle@1.4x.png");
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- /* Load 180% image when scaled by 180% */
- .selectionhandle {
- background-image: url("chrome://browser/skin/images/selection-monocle@1.8x.png");
- }
-}
-
-/* content scrollbars */
-.scroller {
- opacity: 0;
- background-color: rgba(0, 0, 0, 0.4) !important;
- -moz-border-top-colors: none !important;
- -moz-border-bottom-colors: none !important;
- -moz-border-right-colors: none !important;
- -moz-border-left-colors: none !important;
- border-radius: @border_radius_tiny@;
- border: @border_width_tiny@ solid rgba(255, 255, 255, 0.4) !important;
-}
-
-.scroller[panning] {
- opacity: 1;
-}
-
-.scroller[orient="vertical"] {
- min-width: @scroller_thickness@;
- width: @scroller_thickness@;
- min-height: @scroller_minimum@;
-}
-
-.scroller[orient="horizontal"] {
- min-height: @scroller_thickness@;
- height: @scroller_thickness@;
- min-width: @scroller_minimum@;
-}
-
-/* overlay buttons */
-
-.overlay-button {
- position: fixed;
- top: 50%;
- margin-top: -65px;
- width: 118px;
- height: 118px;
- background-color: hsla(210,30%,10%,.2);
- background-size: 60px;
- background-repeat: no-repeat;
- background-origin: padding-box;
- background-clip: padding-box;
- border: 6px solid hsla(0,0%,100%,.7);
- border-radius: 50%;
- box-shadow: 0 0 0 1px hsla(0,0%,0%,.04),
- 0 0 9px 0 hsla(0,0%,0%,.1);
- transition-property: left, right, transform, background-position,
- background-color, background-size, border-color,
- visibility, box-shadow, top;
- transition-duration: 550ms;
- transition-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
-}
-
-#overlay-back {
- background-image: url(chrome://browser/skin/images/overlay-back.png);
-}
-
-#overlay-plus {
- background-image: url(chrome://browser/skin/images/overlay-plus.png);
-}
-
-@media (min-resolution: @min_res_140pc@) {
- #overlay-back {
- background-image: url(chrome://browser/skin/images/overlay-back@1.4x.png);
- }
-
- #overlay-plus {
- background-image: url(chrome://browser/skin/images/overlay-plus@1.4x.png);
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- #overlay-back {
- background-image: url(chrome://browser/skin/images/overlay-back@1.8x.png);
- }
-
- #overlay-plus {
- background-image: url(chrome://browser/skin/images/overlay-plus@1.8x.png);
- }
-}
-
-#overlay-back:-moz-locale-dir(ltr),
-#overlay-plus:-moz-locale-dir(rtl) {
- left: -70px;
- background-position: right 6px center;
-}
-
-#overlay-plus:-moz-locale-dir(ltr) {
- right: -70px;
- background-position: left 6px center;
-}
-
-#stack[viewstate="snapped"] > .overlay-button,
-#stack[keyboardVisible] > .overlay-button,
-#stack[autocomplete] > .overlay-button,
-#stack[fullscreen] > .overlay-button,
-#appbar[visible] ~ .overlay-button,
-.overlay-button[disabled] {
- box-shadow: none;
- visibility: collapse;
-}
-
-#stack[keyboardVisible] > #overlay-back:-moz-locale-dir(ltr),
-#stack[keyboardVisible] > #overlay-plus:-moz-locale-dir(rtl),
-#stack[autocomplete] > #overlay-back:-moz-locale-dir(ltr),
-#stack[autocomplete] > #overlay-plus:-moz-locale-dir(rtl),
-#stack[fullscreen] > #overlay-back:-moz-locale-dir(ltr),
-#stack[fullscreen] > #overlay-plus:-moz-locale-dir(rtl),
-#appbar[visible] ~ #overlay-back:-moz-locale-dir(ltr),
-#appbar[visible] ~ #overlay-plus:-moz-locale-dir(rtl),
-#overlay-back[disabled]:-moz-locale-dir(ltr),
-#overlay-plus[disabled]:-moz-locale-dir(rtl) {
- transform: translateX(-60px);
-}
-
-#stack[keyboardVisible] > #overlay-plus:-moz-locale-dir(ltr),
-#stack[keyboardVisible] > #overlay-back:-moz-locale-dir(rtl),
-#stack[autocomplete] > #overlay-plus:-moz-locale-dir(ltr),
-#stack[autocomplete] > #overlay-back:-moz-locale-dir(rtl),
-#stack[fullscreen] > #overlay-plus:-moz-locale-dir(ltr),
-#stack[fullscreen] > #overlay-back:-moz-locale-dir(rtl),
-#appbar[visible] ~ #overlay-plus:-moz-locale-dir(ltr),
-#appbar[visible] ~ #overlay-back:-moz-locale-dir(rtl),
-#overlay-plus[disabled]:-moz-locale-dir(ltr),
-#overlay-back[disabled]:-moz-locale-dir(rtl) {
- transform: translateX(60px);
-}
-
-.overlay-button:hover {
- background-color: hsla(210,30%,10%,.4);
- background-size: 90px;
- border-color: hsla(0,0%,100%,.9);
-}
-
-#overlay-back:-moz-locale-dir(ltr):hover,
-#overlay-plus:-moz-locale-dir(rtl):hover {
- background-position: right 12px center;
- transform: translateX(40px) scale(1.2);
-}
-
-#overlay-plus:-moz-locale-dir(ltr):hover {
- background-position: left 12px center;
- transform: translateX(-40px) scale(1.2);
-}
-
-#overlay-back:-moz-locale-dir(rtl):hover {
- transform: translateX(-40px) scale(1.2) scaleX(-1);
-}
-
-#overlay-back:-moz-locale-dir(rtl) {
- transform: scaleX(-1);
- right: -70px;
- background-position: right 9px center;
-}
-
-#overlay-back[mousedrag],
-#overlay-plus[mousedrag] {
- transition-property: left, right, transform, background-position,
- background-color, background-size, border-color,
- visibility, box-shadow;
-}
-
-/* Navigation bar ========================================================== */
-
-/* Most appbars are hidden by default, but we want to keep #navbar visible so
- * we can show the progress bar at all times. Instead, we hide only the
- * toolbar portion of the navbar. */
-#navbar {
- visibility: visible;
-}
-#navbar:not([hiding]):not([visible]) > #toolbar-overlay {
- visibility: hidden;
-}
-
-#content-viewport[navbar="visible"] .active-tab-notificationbox:not([count="0"]):not([notificationsVisible="false"]) {
- padding-bottom: @toolbar_height@;
-}
-
-
-/* Progress meter ---------------------------------------------------------- */
-
-#progress-container {
- display: block;
- position: absolute;
- top: -@progress_height@;
- height: @progress_height@;
- width: 100%;
- background-color: hsla(210,5%,80%,1);
- box-shadow: 0 1px 0 hsla(210,5%,50%,.1) inset;
- -moz-user-focus: ignore;
-}
-#progress-container[startpage] {
- visibility: collapse;
-}
-
-#progress-control {
- display: block;
- height: @progress_height@;
- background-image: -moz-linear-gradient(left, hsla(200,100%,83%,.5),
- hsla(200,100%,83%,0)),
- -moz-linear-gradient(top, #1ab2ff, #0091ff);
- border-right: 1px solid #0082e5;
- transition: width .3s ease-in;
- -moz-user-focus: ignore;
-}
-
-#progress-control:-moz-dir(rtl) {
- transform: scaleX(-1);
-}
-
-#progress-control[fade] {
- opacity: 0;
- transition: width .3s ease-in, .5s opacity ease-in;
-}
-
-/* Toolbar ----------------------------------------------------------------- */
-
-#toolbar-overlay {
- background-color: @panel_light_color@;
-}
-
-#urlbar-autocomplete {
- padding-top: 0;
-}
-
-#toolbar {
- padding: 0 @toolbar_horizontal_padding@;
-}
-
-#toolbar[viewstate="snapped"] {
- padding: 0 @toolbar_snapped_horizontal_padding@;
-}
-
-#toolbar[viewstate="snapped"] > toolbarbutton {
- margin: 0 @toolbar_snapped_horizontal_spacing@;
-}
-
-/* Combined back/forward buttons */
-
-#back-button {
- list-style-image: url(chrome://browser/skin/images/navbar-back.png);
- position: relative;
- z-index: 1;
- transition: opacity @forward_transition_length@ ease-out;
-}
-
-#back-button:-moz-locale-dir(rtl),
-#forward-button:-moz-locale-dir(rtl) {
- transform: scaleX(-1);
-}
-
-#back-button[disabled] {
- visibility: visible;
- opacity: 0.5;
-}
-
-#forward-button {
- list-style-image: url(chrome://browser/skin/images/navbar-forward.png);
- transition: margin @forward_transition_length@ ease-out,
- visibility @forward_transition_length@ ease-out,
- opacity @forward_transition_length@ ease-out;
-}
-
-#forward-button[disabled] {
- -moz-margin-start: -@forward_spacing@ !important;
- visibility: hidden;
- opacity: 0;
- pointer-events: none;
-}
-
-@media (min-resolution: @min_res_140pc@) {
- #back-button {
- list-style-image: url(chrome://browser/skin/images/navbar-back@1.4x.png);
- }
-
- #forward-button {
- list-style-image: url(chrome://browser/skin/images/navbar-forward@1.4x.png);
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- #back-button {
- list-style-image: url(chrome://browser/skin/images/navbar-back@1.8x.png);
- }
-
- #forward-button {
- list-style-image: url(chrome://browser/skin/images/navbar-forward@1.8x.png);
- }
-}
-
-/* URL bar */
-#urlbar {
- border: @metro_border_thick@ solid @urlbar_border_color@;
- margin: 0 @toolbar_horizontal_spacing@;
- padding: 0;
- background-color: @field_background_color@;
- overflow: hidden;
-}
-
-#urlbar[editing] {
- border-color: @metro_orange@;
-}
-
-/* Identity widget */
-#identity-icon {
- margin: 0;
- padding: 0 @metro_spacing_snormal@;
- list-style-image: url("chrome://browser/skin/images/identity-icons-generic.png");
-}
-
-#identity-box.verifiedDomain > #identity-icon {
- list-style-image: url("chrome://browser/skin/images/identity-icons-https.png");
-}
-
-#identity-box.verifiedIdentity > #identity-icon {
- list-style-image: url("chrome://browser/skin/images/identity-icons-https-ev.png");
-}
-
-#toolbar[startpage] > #urlbar:not([autocomplete]) > #identity-box > #identity-icon {
- list-style-image: url("chrome://browser/skin/images/icons-identity-firefox.png");
-}
-
-#urlbar[autocomplete] > #identity-box > #identity-icon {
- list-style-image: url("chrome://browser/skin/images/icon-autocomplete-search.png");
-}
-
-/* Main URL textbox */
-#urlbar-edit {
- margin: 0 !important;
- min-height: @urlbar_edit_height@;
- -moz-appearance: none !important;
- border-radius: 0;
- border: 0 none !important;
- padding: 0 !important;
-}
-
-#urlbar-edit > hbox > .textbox-input-box > .textbox-input:invalid {
- /* Hide error glow around the address bar that shows by default
- * when URLs are made invalid by trmming. */
- box-shadow: none !important;
-}
-
-/* Combined stop-reload button */
-.urlbar-button {
- margin: 0;
- -moz-image-region: rect(0px, 30px, 30px, 0px);
-}
-
-.urlbar-button:hover:not(:active) {
- -moz-image-region: rect(0px, 60px, 30px, 30px);
- background-color: #dedfdf;
-}
-
-.urlbar-button:active {
- -moz-image-region: rect(0px, 90px, 30px, 60px);
- background-color: #6d7073;
-}
-
-.urlbar-button > .toolbarbutton-icon {
- width: 30px;
- height: 30px;
-}
-
-#go-button {
- list-style-image: url(chrome://browser/skin/images/urlbar-go.png)
-}
-
-#reload-button {
- list-style-image: url(chrome://browser/skin/images/urlbar-reload.png);
-}
-
-#stop-button {
- list-style-image: url(chrome://browser/skin/images/urlbar-stop.png);
-}
-
-@media (min-resolution: @min_res_140pc@) {
- .urlbar-button {
- -moz-image-region: rect(0px, 42px, 42px, 0px);
- }
-
- .urlbar-button:hover:not(:active) {
- -moz-image-region: rect(0px, 84px, 42px, 42px);
- }
-
- .urlbar-button:active {
- -moz-image-region: rect(0px, 126px, 42px, 84px);
- }
-
- #go-button {
- list-style-image: url(chrome://browser/skin/images/urlbar-go@1.4x.png)
- }
-
- #reload-button {
- list-style-image: url(chrome://browser/skin/images/urlbar-reload@1.4x.png);
- }
-
- #stop-button {
- list-style-image: url(chrome://browser/skin/images/urlbar-stop@1.4x.png);
- }
-
- #toolbar[startpage] > #urlbar:not([autocomplete]) > #identity-box > #identity-icon {
- list-style-image: url("chrome://browser/skin/images/icons-identity-firefox@1.4x.png");
- }
-
- #urlbar[autocomplete] > #identity-box > #identity-icon {
- list-style-image: url("chrome://browser/skin/images/icon-autocomplete-search@1.4x.png");
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- .urlbar-button {
- -moz-image-region: rect(0px, 54px, 54px, 0px);
- }
-
- .urlbar-button:hover:not(:active) {
- -moz-image-region: rect(0px, 108px, 54px, 54px);
- }
-
- .urlbar-button:active {
- -moz-image-region: rect(0px, 162px, 54px, 108px);
- }
-
- #go-button {
- list-style-image: url(chrome://browser/skin/images/urlbar-go@1.8x.png)
- }
-
- #reload-button {
- list-style-image: url(chrome://browser/skin/images/urlbar-reload@1.8x.png);
- }
-
- #stop-button {
- list-style-image: url(chrome://browser/skin/images/urlbar-stop@1.8x.png);
- }
-
- #toolbar[startpage] > #urlbar:not([autocomplete]) > #identity-box > #identity-icon {
- list-style-image: url("chrome://browser/skin/images/icons-identity-firefox@1.8x.png");
- }
-
- #urlbar[autocomplete] > #identity-box > #identity-icon {
- list-style-image: url("chrome://browser/skin/images/icon-autocomplete-search@1.8x.png");
- }
-}
-
-/* navbar edit button: one button out of three - when editing: go, when !editing,
- loading: stop, when !editing, !loading: reload */
-
-#go-button, #reload-button, #stop-button {
- visibility: collapse;
-}
-
-#urlbar[editing] > #go-button,
-#urlbar:not([editing])[loading] > #stop-button,
-#urlbar:not([editing]):not([loading]) > #reload-button {
- visibility: visible;
-}
-
-/* Contextual toolbar controls */
-
-#toolbar-context-autocomplete,
-.hide-on-start,
-#toolbar-context-page {
- transition-property: opacity, visibility;
- transition-duration: @forward_transition_length@;
- transition-timing-function: @metro_animation_easing@;
-}
-
-#toolbar-contextual:not([autocomplete]) #toolbar-context-autocomplete,
-#toolbar-contextual[startpage] .hide-on-start,
-#toolbar-contextual[autocomplete] #toolbar-context-page {
- opacity: 0;
- visibility: hidden;
- pointer-events: none;
-}
-
-#toolbar[viewstate="snapped"] #toolbar-contextual {
- visibility: collapse;
-}
-
-#download-progress:not([progress]) {
- visibility: collapse;
-}
-
-#download-progress {
- list-style-image: url(chrome://browser/skin/images/navbar-download.png);
-}
-
-#download-progress[progress="100"] {
- list-style-image: url(chrome://browser/skin/images/navbar-download-finished.png);
-}
-
-#pin-button {
- list-style-image: url(chrome://browser/skin/images/navbar-pin.png);
-}
-
-#star-button {
- list-style-image: url(chrome://browser/skin/images/navbar-star.png);
-}
-
-#menu-button {
- list-style-image: url(chrome://browser/skin/images/navbar-menu.png);
-}
-
-#close-button {
- list-style-image: url(chrome://browser/skin/images/navbar-close.png);
-}
-
-@media (min-resolution: @min_res_140pc@) {
- #download-progress {
- list-style-image: url(chrome://browser/skin/images/navbar-download@1.4x.png);
- }
-
- #download-progress[progress="100"] {
- list-style-image: url(chrome://browser/skin/images/navbar-download-finished@1.4x.png);
- }
-
- #pin-button {
- list-style-image: url(chrome://browser/skin/images/navbar-pin@1.4x.png);
- }
-
- #star-button {
- list-style-image: url(chrome://browser/skin/images/navbar-star@1.4x.png);
- }
-
- #menu-button {
- list-style-image: url(chrome://browser/skin/images/navbar-menu@1.4x.png);
- }
-
- #close-button {
- list-style-image: url(chrome://browser/skin/images/navbar-close@1.4x.png);
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- #download-progress {
- list-style-image: url(chrome://browser/skin/images/navbar-download@1.8x.png);
- }
-
- #download-progress[progress="100"] {
- list-style-image: url(chrome://browser/skin/images/navbar-download-finished@1.8x.png);
- }
-
- #pin-button {
- list-style-image: url(chrome://browser/skin/images/navbar-pin@1.8x.png);
- }
-
- #star-button {
- list-style-image: url(chrome://browser/skin/images/navbar-star@1.8x.png);
- }
-
- #menu-button {
- list-style-image: url(chrome://browser/skin/images/navbar-menu@1.8x.png);
- }
-
- #close-button {
- list-style-image: url(chrome://browser/skin/images/navbar-close@1.8x.png);
- }
-}
-
-/* Panel UI ================================================================ */
-
-#panel-container {
- padding: 60px 40px;
-}
-
-#panel-container[viewstate="snapped"] .canSnapTiles .richgrid-item-content {
- -moz-box-orient: horizontal;
-}
-
-#panel-close-button {
- -moz-margin-end: 40px;
- list-style-image: url(chrome://browser/skin/images/navbar-back.png);
- -moz-box-pack: center;
-}
-
-#panel-close-button:-moz-locale-dir(rtl) {
- transform: scaleX(-1);
-}
-
-@media (min-resolution: @min_res_140pc@) {
- #panel-close-button {
- list-style-image: url(chrome://browser/skin/images/navbar-back@1.4x.png);
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- #panel-close-button {
- list-style-image: url(chrome://browser/skin/images/navbar-back@1.8x.png);
- }
-}
-
-#panel-items {
- padding-top: 20px;
- -moz-padding-start: 88px;
-}
-
-#panel-container[viewstate="snapped"] #panel-items {
- padding-left: 0px;
-}
-
-/* Console Section - Panel UI ---------------------------------------------- */
-
-#console-filter-warnings,
-#console-filter-messages {
- visibility: visible;
-}
-
-@media (max-width: 499px) {
- #console-filter-warnings,
- #console-filter-messages {
- visibility: collapse;
- }
-}
-
-.console-error-msg,
-.console-msg-text {
- white-space: pre-wrap;
-}
-
-/* Find bar ================================================================ */
-
-#findbar {
- background-color: @metro_orange@;
- padding: 0;
-}
-
-#findbar > toolbar {
- min-height: @findbar_height@ !important;
-}
-
-#findbar-textbox {
- border: none !important;
- width: 20em;
-}
-
-/* Override the default box ordering and make the find textbox appear to the
- right of the icon */
-#findbar-textbox input {
- -moz-box-ordinal-group: 2
-}
-
-#findbar-textbox[status="1"] { /* Ci.nsITypeAheadFind.FIND_NOTFOUND */
- background: rgb(255,200,200);
-}
-
-#findbar-textbox:hover:active {
- background: #8db8d8;
-}
-
-.textbox-search-icon {
- list-style-image: url("chrome://browser/skin/images/search-glass-30.png");
- -moz-image-region: auto;
-}
-
-#findbar-previous-button {
- -moz-image-region: rect(0px, 400px, 40px, 360px);
-}
-
-#findbar-previous-button:hover:not(:active) {
- -moz-image-region: rect(40px, 400px, 80px, 360px);
-}
-
-#findbar-previous-button:active {
- -moz-image-region: rect(80px, 400px, 120px, 360px);
-}
-
-#findbar-next-button {
- -moz-image-region: rect(0px, 440px, 40px, 400px);
-}
-
-#findbar-next-button:hover:not(:active) {
- -moz-image-region: rect(40px, 440px, 80px, 400px);
-}
-
-#findbar-next-button:active {
- -moz-image-region: rect(80px, 440px, 120px, 400px);
-}
-
-#findbar-close-button {
- -moz-image-region: rect(0px, 480px, 40px, 440px);
-}
-
-#findbar-close-button:hover:not(:active) {
- -moz-image-region: rect(40px, 480px, 80px, 440px);
-}
-
-#findbar-close-button:active {
- -moz-image-region: rect(80px, 480px, 120px, 440px);
-}
-
-/* Contextual appbar ======================================================= */
-
-#contextualactions-tray {
- background-color: @metro_orange@;
-}
-
-#contextualactions-tray > toolbarbutton {
- opacity: 1;
-}
-#contextualactions-tray > toolbarbutton[fade] {
- opacity: 0;
-}
-#contextualactions-tray > toolbarbutton:not([immediate]) {
- transition-property: opacity;
- transition-duration: .3s;
- transition-timing-function: ease-in;
- transition-delay: 80ms;
-}
-#contextualactions-tray > toolbarbutton > .toolbarbutton-text {
- color: white;
-}
-
-#pin-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-pin.png);
-}
-
-#unpin-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-unpin.png);
-}
-
-#hide-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-hide.png);
-}
-
-#delete-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-delete.png);
-}
-
-#clear-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-clear.png);
-}
-
-#restore-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-restore.png);
-}
-
-@media (min-resolution: @min_res_140pc@) {
- #pin-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-pin@1.4x.png);
- }
-
- #unpin-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-unpin@1.4x.png);
- }
-
- #hide-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-hide@1.4x.png);
- }
-
- #delete-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-delete@1.4x.png);
- }
-
- #clear-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-clear@1.4x.png);
- }
-
- #restore-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-restore@1.4x.png);
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- #pin-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-pin@1.8x.png);
- }
-
- #unpin-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-unpin@1.8x.png);
- }
-
- #hide-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-hide@1.8x.png);
- }
-
- #delete-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-delete@1.8x.png);
- }
-
- #clear-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-clear@1.8x.png);
- }
-
- #restore-selected-button {
- list-style-image: url(chrome://browser/skin/images/navbar-contextual-restore@1.8x.png);
- }
-}
-
-/* Download notifications ======================================================= */
-
-.download-filename-text {
- font-weight: bold;
-}
-.download-host-text {
- font-weight: bold;
-}
-
-/* Autoscroll popup ======================================================== */
-
-.autoscroller {
- height: 28px;
- width: 28px;
- border: none;
- margin: -14px;
- padding: 0;
- background-image: url("chrome://browser/skin/images/autoscroll.png");
- background-color: transparent;
- position: fixed;
- visibility: hidden;
- background-repeat: no-repeat;
- background-origin: padding-box;
- background-clip: padding-box;
- background-position: right top;
- -moz-appearance: none;
-}
-
-.autoscroller[scrolldir="NS"] {
- background-position: right center;
-}
-
-.autoscroller[scrolldir="EW"] {
- background-position: right bottom;
-}
-
-/* Flyouts ================================================================= */
-
-/* don't add a margin to the very top settings entry in flyouts */
-flyoutpanel > settings:first-child {
- margin-top: 0px;
-}
-
-/* Sync flyout pane -------------------------------------------------------- */
-
-#sync-flyoutpanel {
- font-size: @metro_font_normal@;
- font-weight: 400;
-}
-
-#sync-flyoutpanel button {
- font-weight: 700;
-}
-
-#sync-flyoutpanel .syncHeader {
- font-weight: 600;
-}
-
-#sync-flyoutpanel .syncSecondaryText {
- font-weight: 100;
- font-size: @metro_font_snormal@;
-}
-
-#sync-flyoutpanel .syncInstructionText {
- font-style: italic;
-}
-
-.syncThrobber .progressBall {
- margin: 2px;
- width: 22px;
- height: 22px;
- }
-
-.syncThrobber .progressBallInner {
- width: 5px;
- height: 5px;
- border-radius: 3px;
-}
-
-#sync-flyoutpanel .syncErrorText {
- color: red;
-}
-
-#sync-flyoutpanel textbox {
- margin: @metro_spacing_small@;
- padding: @metro_spacing_xsmall@ @metro_spacing_snormal@;
- background: @field_background_color@;
- border: @metro_border_thick@ solid @field_mid_foreground_color@ !important;
- color: @field_foreground_color@;
-}
-
-#sync-setup-throbber {
- margin-top: 15px;
- margin-left: 25px;
-}
-
-#sync-connected-device {
- width: 200px;
-}
-
-#sync-manualsetup-failure {
- width: 200px;
-}
-
-#sync-flyoutpanel .syncJPAKECode {
- margin: @metro_spacing_small@;
- padding: @metro_spacing_xsmall@ @metro_spacing_snormal@;
- background: @field_background_color@;
- border: @metro_border_thick@ solid @field_mid_foreground_color@ !important;
- color: @field_foreground_color@;
- display: block !important;
- font-size: @metro_font_large@ !important;
- font-weight: 600;
- letter-spacing: 0.4em;
- text-align: center;
- width: 175px;
-}
-
-#sync-connected-device {
- margin-bottom: 0px;
- padding-bottom: 0px;
-}
-
-#sync-connected-lastSynced {
- margin-top: 0px;
- padding-top: 0px;
-}
-
-#sync-connected-throbber {
- margin-top: 12px;
- margin-left: 15px;
-}
-
-/* About flyout pane ------------------------------------------------------- */
-
-/* Colors are defined in /browser/branding//content/metro-about.css */
-
-#about-flyoutpanel {
- background-image: url('chrome://branding/content/metro-about-footer.png');
- background-repeat: no-repeat;
- background-attachment: fixed;
- background-position: right bottom;
-}
-
-#about-flyoutpanel .text-link {
- color: inherit;
-}
-
-#about-flyoutpanel > .flyoutpanel-wrapper > .flyoutpanel-header,
-#about-flyoutpanel > .flyoutpanel-wrapper > .flyoutpanel-contents {
- background-color: inherit;
- border: none;
-}
-
-#about-policy-label {
- padding: 1.5em @metro_spacing_large@;
- margin: 1em -@metro_spacing_large@;
-}
-
-#about-version-label {
- margin-top: 11pt;
-}
-
-#currentChannel {
- margin: 0;
- padding: 0;
- font-weight: bold;
-}
-
-/* Preferences flyout pane ------------------------------------------------- */
-
-/* Lay out each in a single row */
-setting {
- min-height: @touch_row@; /* row size */
- -moz-box-align: center;
- -moz-box-orient: horizontal;
-}
-
-/* ...except for some exceptions */
-.setting-expanded {
- -moz-box-align: start;
- -moz-box-orient: vertical;
-}
-
-setting > vbox {
- -moz-box-flex: 1;
-}
-
-settings {
- margin-top: 32px;
-}
-
-.settings-title {
- font-weight: bold;
-}
-
-/* elements that are not in a group get special treatment */
-#prefs-flyoutpanel > setting,
-#sync-flyoutpanel > setting {
- margin-top: 16px;
-}
-
-#prefs-flyoutpanel > setting .preferences-title {
- font-weight: bold;
-}
-
-setting[type="integer"] > .preferences-alignment,
-setting[type="string"] > .preferences-alignment {
- -moz-box-flex: 3;
-}
-
-setting[type="file"] > .preferences-alignment,
-setting[type="directory"] > .preferences-alignment {
- -moz-box-align: center;
-}
-
-/* Removes the left side title vbox on radio setting */
-setting[type="radio"] > vbox {
- display: none;
-}
-
-#prefs-homepage-options, #prefs-homepage-popup {
- min-width: 200px;
-}
-
-.options-box {
- -moz-margin-start: 28px; /* sized based on the 32px addon image */
-}
-
-.options-box > setting:last-child {
- border-bottom: 0;
-}
-
-.preferences-description {
- font-size: @font_small@ !important;
- color: grey;
-}
-
-.preferences-description:empty {
- display: none;
-}
-
-/* Clear private data prefs */
-
-/* hide subitems when other data checkbox is not checked */
-#prefs-privdata-other:not([checked]) + #prefs-privdata-subitems {
- display: none;
-}
-
-#prefs-privdata-subitems {
- display: block;
- padding-left: @metro_spacing_xnormal@;
- font-size: @metro_font_snormal@;
-}
-
-/* arrange sub-items in two columns */
-.privdata-subitem-item {
- display: inline-block;
- vertical-align: middle;
- margin: 0;
- width: 50%;
-}
-
-#clear-notification {
- max-height: 25px;
-}
-
-#clearprivacythrobber {
- max-width: 25px;
- max-height: 25px;
-}
-
-#clearprivacythrobber .progressContainer {
- width: 25px;
- height: 25px;
-}
-
-#clearprivacythrobber .progressBall {
- margin: 2px;
- width: 22px;
- height: 22px;
-}
-
-#clear-notification-done {
- font-weight: bold;
-}
diff --git a/browser/metro/theme/circularprogress.css b/browser/metro/theme/circularprogress.css
deleted file mode 100644
index 79a25d879be..00000000000
--- a/browser/metro/theme/circularprogress.css
+++ /dev/null
@@ -1,49 +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/. */
-
-%filter substitution
-%include defines.inc
-
-.circularprogressindicator-progressButton,
-.circularprogressindicator-progressRing,
-.circularprogressindicator-progressTrack,
-.circularprogressindicator-progressNotification {
- margin: 0 @toolbar_horizontal_spacing@;
-}
-
-.circularprogressindicator-progressRing,
-.circularprogressindicator-progressTrack {
- pointer-events:none;
- position: absolute;
-}
-
-.circularprogressindicator-progressTrack {
- width: 40px;
- height: 40px;
- background-repeat: no-repeat;
- background-size: 40px 40px;
- background-image: url(chrome://browser/skin/images/progresscircle-bg.png);
-}
-
-.circularprogressindicator-progressNotification {
- width: 40px;
- height: 40px;
- background-image: url(chrome://browser/skin/images/navbar-download-finished.png);
- visibility: hidden;
-}
-
-.circularprogressindicator-progressNotification.progressNotification-active {
- visibility: visible;
- opacity: 0;
- transform: scale(2);
- transition: opacity @metro_animation_duration@,
- transform @metro_animation_duration@;
-}
-
-.circularprogressindicator-progressRing:not([progress]),
-.circularprogressindicator-progressRing[progress="100"],
-.circularprogressindicator-progressTrack:not([progress]),
-.circularprogressindicator-progressTrack[progress="100"] {
- visibility: hidden;
-}
diff --git a/browser/metro/theme/config.css b/browser/metro/theme/config.css
deleted file mode 100644
index 5a6f9e04893..00000000000
--- a/browser/metro/theme/config.css
+++ /dev/null
@@ -1,345 +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/. */
-
-html,
-body {
- margin: 0;
- padding: 0;
- background-color: #ced7de;
- -moz-user-select: none;
- font-family: "Segoe UI", sans-serif;
- -moz-text-size-adjust: none;
-}
-
-.toolbar {
- width: 100%;
- height: 3em;
- position: fixed;
- top: 0;
- left: 0;
- z-index: 10;
- box-shadow: 0 0 3px #444;
- background-color: #ced7de;
- color: #000000;
- font-weight: bold;
- border-bottom: 2px solid;
- -moz-border-bottom-colors: #ff9100 #f27900;
-}
-
-.toolbar-container {
- max-width: 40em;
- margin-left: auto;
- margin-right: auto;
-}
-
-#filter-container {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
- margin-right: 0.5em;
- height: 2em;
- border: 1px solid transparent;
- border-image-source: url("chrome://browser/skin/images/textfield.png");
- border-image-slice: 1 1 3 1;
- border-image-width: 1px 1px 3px 1px;
- overflow: hidden;
- display: flex;
- flex-direction: row;
-}
-
-#filter-input {
- -moz-appearance: none;
- border: none;
- background-image: none;
- background-color: transparent;
- display: inline-block;
- width: 12em;
- min-width: 0;
- color: #000000;
- opacity: 1;
- flex: 1 1 auto;
-}
-
-#filter-input:-moz-placeholder {
- color: rgba(255,255,255,0.5);
-}
-
-.toolbar input {
- display: inline-block;
- height: 100%;
- min-width: 3em;
- box-sizing: border-box;
- opacity: 0.75;
-}
-
-#new-pref-toggle-button {
- background-position: center center;
- background-image: url("chrome://browser/skin/images/reader-plus-icon-xhdpi.png");
- background-size: 48px 48px;
- height: 48px;
- width: 48px;
- display: inline-block;
- outline-style: none;
-}
-
-#filter-search-button {
- background-image: url("chrome://browser/skin/images/search.png");
- background-size: 32px 32px;
- height: 32px;
- width: 32px;
- display: inline-block;
- outline-style: none;
-}
-
-#filter-input-clear-button {
- background-image: url("chrome://browser/skin/images/search-clear-30.png");
- background-size: 32px 32px;
- height: 32px;
- width: 32px;
- display: inline-block;
- outline-style: none;
-}
-
-#filter-input[value=""] + #filter-input-clear-button {
- display: none;
-}
-
-.toolbar-item {
- display: inline-block;
- height: 3em;
- min-width: 3em;
- float: right;
-}
-
-#content {
- position: relative;
- margin: 0;
- margin-left: auto;
- margin-right: auto;
- padding-top: 3em;
- padding-left: 0;
- padding-right: 0;
- min-height: 100%;
- max-width: 40em;
-}
-
-ul {
- list-style-position: inside;
- border: 1px solid #808080;
- background-color: #ffffff;
- min-height: 100%;
- width: 100%;
- padding-top: 0;
- margin: 0;
- padding-left: 0;
- box-sizing: border-box;
- box-shadow: 0 0 5px #000000;
- overflow-x: hidden;
-}
-
-#new-pref-container {
- width: 100%;
- margin: 0;
- background-color: #ffffff;
- box-sizing: border-box;
- box-shadow: 0 0 5px #000000;
- overflow-x: hidden;
- max-width: 40em;
- max-height: 100%;
- position: fixed;
- top: 3em;
- left: auto;
- display: none;
- z-index: 5;
-}
-
-#new-pref-container input,
-#new-pref-container select {
- border: none;
- background-image: none;
-}
-
-#new-pref-container.show {
- display: block;
-}
-
-li {
- list-style-type: none;
- border-bottom: 1px solid #d3d3d3;
- opacity: 1;
- background-color: #ffffff;
- cursor: pointer;
-}
-
-#new-pref-line-boolean,
-#new-pref-value-string,
-#new-pref-value-int {
- display: none;
-}
-#new-pref-item[typestyle="boolean"] #new-pref-line-boolean,
-#new-pref-item[typestyle="string"] #new-pref-value-string,
-#new-pref-item[typestyle="int"] #new-pref-value-int {
- display: block;
-}
-
-.pref-name,
-.pref-value {
- padding: 15px 10px;
- text-align: left;
- text-overflow: ellipsis;
- overflow: hidden;
- background-image: none;
-}
-
-.pref-value {
- color: rgba(0,0,0,0.5);
- flex: 1 1 auto;
- border: none;
- -moz-appearance: none;
- background-image: none;
- background-color: transparent;
-}
-
-.pref-name[locked] {
- padding-right: 20px;
- background-image: url("chrome://browser/skin/images/lock.png");
- background-repeat: no-repeat;
- background-position: right 50%;
- background-size: auto 60%;
-}
-
-#new-pref-name {
- width: 30em;
-}
-
-#new-pref-type {
- display: inline-block !important;
- border-left: 1px solid #d3d3d3;
- width: 10em;
- text-align: right;
-}
-
-.pref-item-line {
- border-top: 1px solid rgba(0,0,0,0.05);
- color: rgba(0,0,0,0.5);
- display: flex;
- flex-direction: row;
-}
-
-#new-pref-value-boolean {
- flex: 1 1 auto;
-}
-
-/* Disable newPref dialog spinbuttons, use custom version from Android */
-/* Filed Bug 962359 to enhance the default spinbutton style to be touch-friendly */
-#new-pref-value-int {
- -moz-appearance: textfield;
-}
-
-#new-pref-container .pref-button.toggle {
- display: inline-block;
- opacity: 1;
- flex: 0 1 auto;
- float: right;
-}
-
-#new-pref-container .pref-button.cancel,
-#new-pref-container .pref-button.create {
- display: inline-block;
- opacity: 1;
- flex: 1 1 auto;
-}
-
-.pref-item-line {
- pointer-events: none;
-}
-
-#new-pref-container .pref-item-line,
-.pref-item.selected .pref-item-line,
-.pref-item:not(.selected) .pref-button.reset {
- pointer-events: auto;
-}
-
-#new-pref-container .pref-button.create[disabled] {
- color: #d3d3d3;
-}
-
-.pref-item.selected {
- background-color: rgba(0,0,255,0.05);
-}
-
-.pref-button {
- display: inline-block;
- box-sizing: border-box;
- text-align: center;
- padding: 10px 1em;
- border-left: 1px solid rgba(0,0,0,0.1);
- opacity: 0;
- transition-property: opacity;
- transition-duration: 500ms;
-}
-
-.pref-item.selected .pref-item-line .pref-button {
- opacity: 1;
-}
-
-.pref-item:not(.selected) .pref-item-line .pref-button:not(.reset) {
- display: none;
-}
-
-.pref-item:not(.selected) .pref-button.reset {
- opacity: 1;
-}
-
-/* Disable detail list item spinbuttons, use custom version from Android */
-/* Filed Bug 962359 to enhance the default spinbutton style to be touch-friendly */
-.pref-item input[type="number"] {
- -moz-appearance: textfield;
-}
-
-.pref-button:active {
- background-color: rgba(0,0,255,0.2);
-}
-
-.pref-button[disabled] {
- display: none;
-}
-
-.pref-button.up {
- background-image: url("chrome://browser/skin/images/arrowup-16.png");
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.pref-button.down {
- background-image: url("chrome://browser/skin/images/arrowdown-16.png");
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-#prefs-shield {
- width: 100%;
- height: 100%;
- background-color: rgba(0,0,0,0.5);
- position: fixed;
- top: 0;
- left: 0;
- opacity: 0;
- transition-property: opacity;
- transition-duration: 500ms;
- display: none;
-}
-
-#prefs-shield[shown] {
- display: block;
- opacity: 1;
-}
-
-#loading-container > li {
- background-image: url(chrome://global/skin/media/throbber.png);
- background-position: center center;
- background-repeat: no-repeat;
- padding-left: 40px;
- height: 3em;
- width: 100%;
-}
diff --git a/browser/metro/theme/content.css b/browser/metro/theme/content.css
deleted file mode 100644
index 07d5cce40c9..00000000000
--- a/browser/metro/theme/content.css
+++ /dev/null
@@ -1,186 +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/. */
-
-%filter substitution
-%include defines.inc
-
-@namespace url("http://www.w3.org/1999/xhtml");
-@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
-
-/* Typography & General Styling -------------------------------------------- */
-
-::-moz-selection {
- color: white;
- background-color: @metro_orange@;
-}
-
-*:-moz-any-link:focus {
- outline-offset: -2px;
-}
-
-/* Input Styling -------------------------------------------- */
-
-select:not([size]):not([multiple]) > xul|scrollbar,
-select[size="1"] > xul|scrollbar,
-select:not([size]):not([multiple]) xul|scrollbarbutton,
-select[size="1"] xul|scrollbarbutton {
- display: block;
- margin-left: 0;
- min-width: 16px;
-}
-
-select[size],
-select[multiple],
-select[size][multiple],
-* > input:not([type="image"]) {
- border-style: solid;
- border-color: #7d7d7d;
- color: #414141;
-}
-
-/* For both mouse and touch, single-selects are handled by the SelectHelper popup.
- * Suppress mouse events on the popup itself. See also ../base/content/cursor.css */
-select[size="1"] :-moz-any(option, optgroup),
-select:not([size]):not([multiple]) :-moz-any(option, optgroup) {
- pointer-events: none;
-}
-
-input:-moz-placeholder {
- color: GrayText;
-}
-
-select:not([size]):not([multiple]),
-select[size="0"],
-select[size="1"],
-* > input[type="button"],
-* > input[type="submit"],
-* > input[type="reset"],
-button {
- border-style: solid;
- border-color: #7d7d7d;
- color: #414141;
-}
-
-input[type="checkbox"] {
- background: white linear-gradient(rgba(115,115,115,0.5) 0, rgba(215,215,215,0.5) 2px, rgba(255,255,255,0.2) 6px);
-}
-
-input[type="radio"] {
- background: radial-gradient(at 6px 6px, rgba(255,255,255,0.2) 3px, rgba(195,195,195,0.5) 5px, rgba(115,115,115,0.5) 100%);
-}
-
-select {
- border-width: 1px;
- padding: 1px;
-}
-
-select:not([size]):not([multiple]),
-select[size="0"],
-select[size="1"] {
- padding: 0 1px 0 1px;
-}
-
-* > input:not([type="image"]) {
- border-width: 1px;
- padding: 1px;
-}
-
-input[type="button"],
-input[type="submit"],
-input[type="reset"],
-button {
- border-width: 1px;
- padding: 0 7px 0 7px;
-}
-
-input[type="radio"],
-input[type="checkbox"] {
- max-width: 14px;
- max-height: 14px;
- border: 1px solid #a7a7a7 !important;
- padding: 2px 1px 2px 1px;
-}
-
-select > button {
- border-width: 1px !important;
- margin: 0px !important;
- padding: 0px !important;
- border-radius: 0;
- color: #414141;
- position: relative !important;
- font-size: inherit;
-}
-
-input[type="checkbox"]:focus,
-input[type="radio"]:focus {
- border-color: #99c6e0 !important;
-}
-
-input[type="checkbox"]:focus {
- background: white linear-gradient(rgba(27,113,177,0.5) 0, rgba(198,225,246,0.2) 2px, rgba(255,255,255,0.2) 6px);
-}
-
-input[type="radio"]:focus {
- background: radial-gradient(at 6px 6px, rgba(255,255,255,0.2) 3px, rgba(198,225,246,0.2) 5px, rgba(27,113,177,0.5) 100%);
-}
-
-/* we need to be specific for selects because the above rules are specific too */
-select[size][disabled],
-select[multiple][disabled],
-select[size][multiple][disabled],
-select:not([size]):not([multiple])[disabled],
-select[size="0"][disabled],
-select[size="1"][disabled],
-button[disabled],
-* > input:not([type="image"])[disabled] {
- color: rgba(0,0,0,0.3);
- border-color: rgba(125,125,125,0.4);
- border-style: solid;
- border-width: 1px;
- background: transparent linear-gradient(rgba(185,185,185,0.4) 0, rgba(235,235,235,0.4) 3px, rgba(255,255,255,0.4) 100%);
-}
-
-select:not([size]):not([multiple])[disabled],
-select[size="0"][disabled],
-select[size="1"][disabled] {
- background: transparent linear-gradient(rgba(255,255,255,0.4) 0, rgba(235,235,235,0.4) 3px, rgba(185,185,185,0.4) 100%);
-}
-
-input[type="button"][disabled],
-input[type="submit"][disabled],
-input[type="reset"][disabled],
-button[disabled] {
- padding: 0 7px 0 7px;
- background: transparent linear-gradient(rgba(255,255,255,0.4) 0, rgba(235,235,235,0.4) 3px, rgba(185,185,185,0.4) 100%);
-}
-
-input[type="radio"][disabled],
-input[type="radio"][disabled]:active,
-input[type="radio"][disabled]:hover,
-input[type="radio"][disabled]:hover:active,
-input[type="checkbox"][disabled],
-input[type="checkbox"][disabled]:active,
-input[type="checkbox"][disabled]:hover,
-input[type="checkbox"][disabled]:hover:active {
- border:1px solid rgba(125,125,125,0.4) !important;
-}
-
-select[disabled] > button {
- opacity: 0.6;
- padding: 1px 7px 1px 7px;
-}
-
-/* -moz-touch-enabled? media elements */
-video > xul|videocontrols,
-audio > xul|videocontrols {
- -moz-binding: url("chrome://global/content/bindings/videocontrols.xml#touchControls");
-}
-
-/*
- * Enforce nearest scaling for video in order not to lose too much performance
- * after fixing bug 598736 ("Use higher-quality imageinterpolation on mobile")
- */
-video {
- image-rendering: -moz-crisp-edges;
-}
diff --git a/browser/metro/theme/crashprompt.css b/browser/metro/theme/crashprompt.css
deleted file mode 100644
index d2e9587eb07..00000000000
--- a/browser/metro/theme/crashprompt.css
+++ /dev/null
@@ -1,134 +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/. */
-
-%filter substitution
-%include defines.inc
-
-body {
- background-color: #F4F4F4;
- margin-left: 16%;
- margin-right: 23%;
- margin-top: 115px;
-}
-
-a {
- text-decoration: none;
-}
-
-#detailsLink {
- color: black;
- display: table-row;
-}
-
-#detailsGrid {
- display: table;
-}
-
-#detailsContainer {
- display: table-row;
-}
-
-#detailsLinkLabel {
- display: table-cell;
-}
-
-.detailsSpacer {
- display: table-cell;
- padding-right: 8px;
-}
-
-#crashpromptDetailedMessage {
- font-size: @metro_font_snormal@;
- display: table-cell;
-}
-
-#crashPromptTitle {
- color: #737980;
- font-weight: normal;
-}
-
-.hidden {
- display: none !important;
-}
-
-#crashPromptButtonContainer {
- margin-top: 40px;
-}
-
-#lightboxBackdrop {
- position: fixed;
- top: 0%;
- left: 0%;
- width: 100%;
- height: 100%;
- z-index: 1001;
- background-color: rgba(0,0,0,0.7);
-}
-
-#lightbox {
- position: fixed;
- top: 20%;
- left: 15%;
- width: 70%;
- height: 60%;
- padding-bottom: 1%;
- padding-top: 1%;
- background-color: white;
- z-index: 1002;
-}
-
-#privacyPolicyTitle {
- margin-left: 10%;
-}
-
-#privacyPolicyBody {
- margin-left: 10%;
- margin-right: 10%;
- padding-right: 20px;
- max-height: 75%;
- overflow: auto;
-}
-
-#lightboxCloseButton {
- background-image: -moz-image-rect(url("chrome://browser/skin/images/infobar-close.png"), 0, 40, 40, 0);
- width: 40px;
- height: 40px;
- float: right;
- margin-right: 30px;
- margin-top: 10px;
-}
-
-button {
- color: #FFFFFF;
-}
-
-button:not([disabled]):hover {
- color: #FFFFFF;
-}
-
-#refuseButton {
- background: #847F7C;
-}
-
-#refuseButton:hover {
- background: #B0B0B0;
-}
-
-hr {
- border: 1px solid #C7C7C7;
-}
-
-#privacyPolicyLink {
- color: #649FEF;
-}
-
-.button-default {
- background: #649FEF;
- border-color: #9DCFF2;
-}
-
-.button-default:not([disabled]):hover {
- background: #2990D9;
- border-color: #8DBAD9;
-}
diff --git a/browser/metro/theme/cssthrobber.css b/browser/metro/theme/cssthrobber.css
deleted file mode 100644
index 8f79749b0df..00000000000
--- a/browser/metro/theme/cssthrobber.css
+++ /dev/null
@@ -1,94 +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/. */
-
-%filter substitution
-%include defines.inc
-
-#container[enabled] .progressBall {
- position: absolute;
- opacity: 0;
- transform: rotate(225deg);
- animation: orbit 7.15s infinite;
-}
-
-#container[enabled] .progressBall:nth-child(1) {
- animation-delay: 1.56s;
-}
-
-#container[enabled] .progressBall:nth-child(2) {
- animation-delay: 0.31s;
-}
-
-#container[enabled] .progressBall:nth-child(3) {
- animation-delay: 0.62s;
-}
-
-#container[enabled] .progressBall:nth-child(4) {
- animation-delay: 0.94s;
-}
-
-#container[enabled] .progressBall:nth-child(5) {
- animation-delay: 1.25s;
-}
-
-#container[enabled] .progressBall:nth-child(1)::after,
-#container[enabled] .progressBall:nth-child(2)::after,
-#container[enabled] .progressBall:nth-child(3)::after,
-#container[enabled] .progressBall:nth-child(4)::after,
-#container[enabled] .progressBall:nth-child(5)::after {
- content: "";
- display: block;
- width: 5px;
- height: 5px;
- border-radius: 5px;
- position: absolute;
- background: #0095dd;
- left: 0;
- top: 0;
-}
-
-
-@keyframes orbit {
- 0% {
- opacity: 1;
- z-index: 99;
- transform: rotate(180deg);
- animation-timing-function: ease-out;
- }
-
- 7% {
- opacity: 1;
- transform: rotate(300deg);
- animation-timing-function: linear;
- }
-
- 30% {
- opacity: 1;
- transform: rotate(410deg);
- animation-timing-function: ease-in-out;
- }
-
- 39% {
- opacity: 1;
- transform: rotate(645deg);
- animation-timing-function: linear;
- }
-
- 70% {
- opacity: 1;
- transform: rotate(770deg);
- animation-timing-function: ease-out;
- }
-
- 75% {
- opacity: 1;
- transform: rotate(900deg);
- animation-timing-function: ease-out;
- }
-
- 76%, 100% {
- opacity: 0;
- transform: rotate(900deg);
- }
-}
diff --git a/browser/metro/theme/defines.inc b/browser/metro/theme/defines.inc
deleted file mode 100644
index b094e6493fc..00000000000
--- a/browser/metro/theme/defines.inc
+++ /dev/null
@@ -1,123 +0,0 @@
-%filter substitution
-
-%define panel_dark_color #41464C
-%define panel_dark_background url(chrome://browser/skin/images/panel-dark.png)
-%define panel_light_color #F1F1F1
-
-%define field_sizing 30px
-%define field_foreground_color #000000
-%define field_disabled_foreground_color #999999
-%define field_mid_foreground_color #bababa
-%define field_background_color #FFFFFF
-
-%define border_color #BFC6CE
-%define selected_color #FF8000
-
-%define urlbar_border_color #BFC6CC
-%define urlbar_edit_height 36px
-
-%define toolbar_vertical_spacing 5px
-%define toolbar_horizontal_spacing 17px
-%define toolbar_horizontal_padding 21px
-%define toolbar_snapped_horizontal_padding 10px
-%define toolbar_snapped_horizontal_spacing 10px
-
-% XXX Per UX mockups, this should be 68px, but we need to make this
-% one pixel higher to reduce button clipping until bug 905453 is resolved
-%define toolbar_height 69px
-%define labelled_toolbar_height 90px
-%define tabs_height 178px
-%define newtab_button_width 63px
-%define tabs_scrollarrow_width 64px
-%define findbar_height 54px
-
-%define progress_height 5px
-
-%define metro_orange #FF8000
-
-%define thumbnail_width 232px
-%define thumbnail_height 148px
-
-%define grid_column_width 131px
-%define grid_double_column_width 262px
-%define grid_row_height 86px
-%define grid_double_row_height 172px
-%define grid_search_width 86px
-
-%define compactgrid_column_width 62px
-%define compactgrid_row_height 62px
-
-%define tile_border_color #dbdcde
-%define tile_spacing 12px
-%define tile_side_margin 6px
-
-%define scroller_thickness 4px
-%define scroller_minimum 8px
-
-%define metro_spacing_xsmall 3px
-%define metro_spacing_small 5px
-%define metro_spacing_snormal 10px
-%define metro_spacing_normal 15px
-%define metro_spacing_xnormal 20px
-%define metro_spacing_xxnormal 25px
-%define metro_spacing_xxxnormal 30px
-%define metro_spacing_large 40px
-
-%define metro_border_thin 1px
-%define metro_border_thick 2px
-%define metro_border_xthick 4px
-
-%define metro_font_snormal 14px
-%define metro_font_normal 15px
-%define metro_font_large 25px
-%define metro_font_xlarge 35px
-%define metro_font_xxlarge 45px
-
-%define font_normal 16px
-%define font_snormal 15px
-%define font_small 12px
-%define font_xsmall 11px
-
-%define touch_row 47px
-%define touch_button_small 37px
-%define touch_action_minwidth 133px
-%define touch_action_snapped_minwidth 80px
-
-%define margin_large 16px
-%define margin_xnormal 7px
-%define margin_normal 5px
-
-%define padding_xxnormal 8px
-%define padding_xnormal 7px
-%define padding_normal 5px
-
-%define border_width_large 2px
-%define border_width_small 1px
-%define border_width_tiny 1px
-
-%define border_radius_normal 5px
-%define border_radius_tiny 1px
-
-%define shadow_width_small 1px
-
-% easing function and duration for animations match winJS showPanel method
-%define metro_animation_duration 550ms
-%define metro_animation_easing cubic-bezier(0.1, 0.9, 0.2, 1)
-
-% duration and easing function to approximately match system keyboard
-% as animation cant be in lock-step with system OSK animation, some mismatch is inevitable
-% so we match velocity/cadence but delay to bring appbars in a tad after OSK
-%define appbar_keyboard_slideup_duration 420ms
-%define appbar_keyboard_slideup_delay 90ms
-%define appbar_keyboard_slideup_easing cubic-bezier(0, 1, 0.4, 0.96)
-
-% minimum resolution cutoffs for displaying 1.4x and 1.8x versions of icons
-% XXX currently, there's some weirdness with the dppx unit, as documented in
-% bug 895277. Because of that, we have to use 1.39dppx instead of 1.4dppx.
-%define min_res_140pc 1.39dppx
-%define min_res_180pc 1.8dppx
-
-% error page style constants
-%define error_page_background_color #eee
-%define error_page_warning_color #efd400
-%define error_page_error_color #bf0000
\ No newline at end of file
diff --git a/browser/metro/theme/firstrun.css b/browser/metro/theme/firstrun.css
deleted file mode 100644
index e046ff60449..00000000000
--- a/browser/metro/theme/firstrun.css
+++ /dev/null
@@ -1,265 +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/. */
-
-/* Rearrange about:start ---------------------- */
-
-/* Disable all instructions in snapped mode */
-#start-container[viewstate="snapped"] .firstrun {
- display: none;
-}
-
-/* Keep only first column of tiles */
-#start-container[viewstate="landscape"] #start-topsites-grid .richgrid-grid,
-#start-container:not([viewstate="snapped"]) #start-bookmarks-grid .richgrid-grid,
-#start-container:not([viewstate="snapped"]) #start-history-grid .richgrid-grid {
- -moz-column-count: 1 !important;
-}
-
-/* Add some bottom padding to make sure bottom tile will not be
-below instruction */
-#start-container[viewstate="landscape"] #start-topsites-grid .richgrid-grid {
- padding-bottom: 30px;
-}
-
-/* Keep only first few items */
-#start-container:not([viewstate="snapped"]) #start-history-grid richgriditem:nth-child(n+3),
-#start-container:not([viewstate="snapped"]) #start-bookmarks-grid richgriditem:nth-child(n+3),
-#start-container[viewstate="portrait"] #start-topsites-grid richgriditem:nth-child(n+4) {
- display: none;
-}
-
-/* Add some space for the instructions */
-#start-container[viewstate="portrait"] {
- padding-top: 120px;
- padding-bottom: 120px;
-}
-
-/* Remove watermark */
-.meta {
- background-image: none;
-}
-
-
-/* Welcome pane ---------------------- */
-
-/* Logo and welcome message */
-#firstrun-welcome {
- width: 550px;
- font-family: "Segoe UI", sans-serif;
- padding: 30px 0;
-}
-
-.welcome-image {
- background-image: url("chrome://branding/content/metro_firstrun_logo.png");
-
- width: 220px;
- height: 220px;
-}
-
-#firstrun-welcome .welcome-title {
- font-size: 25px;
- color: #4d4e53;
- line-height: 30px;
- padding-top: 20px;
-}
-
-#firstrun-welcome .welcome-subtitle {
- font-size: 16px;
- color: #808080;
- line-height: 22px;
- padding-top: 10px;
-}
-
-/* Instructions ---------------------- */
-
-.instruction-content-container {
- width: 380px;
-}
-
-.instruction-label {
- font-size: 16px;
- color: #808080;
- line-height: 22px;
-}
-
-.instruction-arrow {
- width: 76px;
- height: 76px;
-}
-
-.instruction-arrow.arrow-top,
-.instruction-arrow.arrow-down {
- background-image: url("chrome://browser/skin/images/arrow-top.png");
-}
-
-.instruction-arrow.arrow-down {
- transform: rotate(180deg);
-}
-.instruction-arrow.arrow-down:-moz-locale-dir(rtl) {
- transform: scaleY(-1);
-}
-
-.instruction-arrow.arrow-back,
-.instruction-arrow.arrow-forward,
-.instruction-arrow.arrow-back-straight,
-.instruction-arrow.arrow-forward-straight {
- background-image: url("chrome://browser/skin/images/arrow-left.png");
-}
-
-.instruction-arrow.arrow-back,
-.instruction-arrow.arrow-forward:-moz-locale-dir(rtl) {
- transform: rotate(0) scaleY(1);
-}
-
-.instruction-arrow.arrow-forward,
-.instruction-arrow.arrow-back:-moz-locale-dir(rtl) {
- transform: rotate(180deg) scaleY(-1);
-}
-
-.instruction-arrow.arrow-back-straight,
-.instruction-arrow.arrow-forward-straight:-moz-locale-dir(rtl) {
- transform: rotate(220deg) scaleX(-1);
-}
-
-.instruction-arrow.arrow-forward-straight,
-.instruction-arrow.arrow-back-straight:-moz-locale-dir(rtl) {
- transform: rotate(-220deg);
-}
-
-#instruction-tabs {
- position: absolute;
- top: 10px;
- transform: translateX(calc(630px - 50%));
-}
-#instruction-tabs:-moz-locale-dir(rtl) {
- right: 0;
- left: auto;
- transform: translateX(calc(50% - 630px));
-}
-
-#start-container[viewstate="portrait"] #instruction-tabs {
- transform: translateX(calc(50vw - 50%));
-}
-#start-container[viewstate="portrait"] #instruction-tabs:-moz-locale-dir(rtl) {
- transform: translateX(calc(-50vw + 50%));
-}
-
-#start-container[viewstate="landscape"] #instruction-topsites {
- position: absolute;
- bottom: 15%;
-}
-
-#start-container[viewstate="landscape"] #instruction-topsites .instruction-content-container {
- -moz-box-align: start;
-}
-
-#start-container[viewstate="portrait"] #instruction-topsites-box {
- margin-bottom: 20px;
-}
-
-#start-container[viewstate="portrait"] #instruction-topsites .instruction-content-container {
- -moz-box-align: center;
-}
-
-#start-container[viewstate="portrait"] #instruction-topsites .arrow-back-straight {
- display: none;
-}
-
-#start-container[viewstate="portrait"] #instruction-topsites .arrow-back {
- display: block;
-}
-
-#start-container[viewstate="landscape"] #instruction-topsites .arrow-back-straight {
- display: block;
-}
-
-#start-container[viewstate="landscape"] #instruction-topsites .arrow-back {
- display: none;
-}
-
-#start-container[viewstate="landscape"] #instruction-history,
-#start-container[viewstate="landscape"] #instruction-bookmarks {
- position: absolute;
- top: 310px;
- transform: translateX(calc(-300px - 50%));
-}
-#start-container[viewstate="landscape"] #instruction-history:-moz-locale-dir(rtl),
-#start-container[viewstate="landscape"] #instruction-bookmarks:-moz-locale-dir(rtl) {
- transform: translateX(calc(300px + 50%));
-}
-
-#start-container[viewstate="portrait"] #instruction-history,
-#start-container[viewstate="portrait"] #instruction-bookmarks,
-#start-container[viewstate="portrait"] #instruction-topsites {
- transform: translateX(-55px);
-}
-#start-container[viewstate="portrait"] #instruction-history:-moz-locale-dir(rtl),
-#start-container[viewstate="portrait"] #instruction-bookmarks:-moz-locale-dir(rtl),
-#start-container[viewstate="portrait"] #instruction-topsites:-moz-locale-dir(rtl) {
- transform: translateX(55px);
-}
-
-#start-container[viewstate="landscape"] #instruction-menu {
- position: fixed;
- bottom: 16px;
- right: 37px;
-}
-#start-container[viewstate="landscape"] #instruction-menu:-moz-locale-dir(rtl) {
- left: 37px;
- right: auto;
-}
-
-#start-container[viewstate="portrait"] #instruction-menu {
- position: absolute;
- right: 37px;
- transform: translateY(40px);
-}
-#start-container[viewstate="portrait"] #instruction-menu:-moz-locale-dir(rtl) {
- left: 37px;
- right: auto;
-}
-
-#start-container #instruction-menu .instruction-label {
- max-width: 300px;
-}
-
-#start-container[viewstate="landscape"] #start-history {
- padding-left: 50px;
-}
-
-/* Higher resolution images ---------------------- */
-
-@media (min-resolution: @min_res_140pc@) {
- /* Load 140% image when scaled by 140% */
- .instruction-arrow.arrow-top,
- .instruction-arrow.arrow-down {
- background-image: url("chrome://browser/skin/images/arrow-top@1.4x.png");
- }
-
- .instruction-arrow.arrow-back,
- .instruction-arrow.arrow-forward {
- background-image: url("chrome://browser/skin/images/arrow-left@1.4x.png");
- }
-
- .welcome-image {
- background-image: url("chrome://branding/content/metro_firstrun_logo@1.4x.png");
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- /* Load 180% image when scaled by 180% */
- .instruction-arrow.arrow-top,
- .instruction-arrow.arrow-down {
- background-image: url("chrome://browser/skin/images/arrow-top@1.8x.png");
- }
-
- .instruction-arrow.arrow-back,
- .instruction-arrow.arrow-forward {
- background-image: url("chrome://browser/skin/images/arrow-left@1.8x.png");
- }
-
- .welcome-image {
- background-image: url("chrome://branding/content/metro_firstrun_logo@1.8x.png");
- }
-}
diff --git a/browser/metro/theme/firstruncontent.css b/browser/metro/theme/firstruncontent.css
deleted file mode 100644
index c1aa492b85f..00000000000
--- a/browser/metro/theme/firstruncontent.css
+++ /dev/null
@@ -1,205 +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/. */
-
-%filter substitution
-%include defines.inc
-
-/* Disable firstrun in some cases */
-#stack[startpage] .firstrun-content {
- display: none;
-}
-
-@media (max-width: 900px) {
- .firstrun-content {
- display: none;
- }
-}
-
-/* bg transparent pane --------------- */
-
-#firstrun-bg-pane {
- position: absolute;
- background-color: rgba(0, 0, 0, .8);
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
-}
-
-/* Got it button ---------------------- */
-
-#firstrun-gotit {
- position: fixed;
- bottom: calc(@toolbar_height@ + 64px);
- left: 64px;
-}
-
-#firstrun-gotit:-moz-locale-dir(rtl) {
- left: auto;
- right: 64px;
-}
-
-.firstrun-button {
- padding: 15px 45px;
- font-family: "Segoe UI", sans-serif;
- font-size: 25px;
- background-image: -moz-linear-gradient(0deg, rgb(255, 128, 0) 0%, rgb(255, 149, 0) 100%);
- border: 0;
- color: #FFF;
-}
-
-/* Instructions arrows ---------------- */
-
-.instruction-arrow {
- width: 76px;
- height: 76px;
- background-repeat: no-repeat;
-}
-
-.instruction-arrow.arrow-top,
-.instruction-arrow.arrow-down,
-.instruction-arrow.arrow-down-reverse {
- background-image: url("chrome://browser/skin/images/arrow-top-light.png");
-}
-
-.instruction-arrow.arrow-down,
-.instruction-arrow.arrow-down-reverse:-moz-locale-dir(rtl) {
- transform: rotate(180deg);
-}
-
-.instruction-arrow.arrow-down-reverse,
-.instruction-arrow.arrow-down:-moz-locale-dir(rtl) {
- transform: rotate(180deg) scaleX(-1);
-}
-
-.instruction-arrow.arrow-back,
-.instruction-arrow.arrow-forward {
- background-image: url("chrome://browser/skin/images/arrow-left-light.png");
-}
-
-.instruction-arrow.arrow-forward,
-.instruction-arrow.arrow-back:-moz-locale-dir(rtl) {
- transform: rotate(180deg) scaleY(-1);
-}
-
-.instruction-arrow.arrow-forward:-moz-locale-dir(rtl) {
- transform: none;
-}
-
-/* Instructions text ------------------ */
-
-.instruction-content-container {
- width: 380px;
- vertical-align: bottom;
-}
-
-#instruction-back .instruction-content-container,
-#instruction-plus .instruction-content-container {
- width: 320px;
-}
-
-.instruction-label {
- font-size: 18px;
- color: #BBB;
- line-height: 22px;
-}
-
-#instruction-tabs {
- position: fixed;
- top: 10px;
- left: 50%;
- transform: translateX(-50%);
-}
-
-#instruction-back {
- position: fixed;
- top: 50%;
- left: 100px;
-}
-
-#instruction-back:-moz-locale-dir(rtl) {
- left: auto;
- right: 100px;
-}
-
-#instruction-plus {
- position: fixed;
- top: 50%;
- right: 100px;
-}
-
-#instruction-plus:-moz-locale-dir(rtl) {
- right: auto;
- left: 100px;
-}
-
-#instruction-star {
- position: fixed;
- bottom: @toolbar_height@;
- right: 145px;
-}
-
-#instruction-star:-moz-locale-dir(rtl) {
- right: auto;
- left: 145px;
-}
-
-#instruction-star .instruction-label {
- max-width: 250px;
-}
-
-#instruction-star .instruction-content-container:-moz-locale-dir(rtl) {
- -moz-box-align: start;
- vertical-align: top;
-}
-
-#instruction-pin {
- position: fixed;
- bottom: @toolbar_height@;
- right: 10px;
-}
-
-#instruction-pin:-moz-locale-dir(rtl) {
- right: auto;
- left: 10px;
-}
-
-#instruction-pin .instruction-label {
- max-width: 250px;
- margin-bottom: 20px;
-}
-
-#instruction-pin .instruction-arrow {
- -moz-margin-end: 65px;
-}
-
-/* Higher resolution images ---------------------- */
-
-@media (min-resolution: @min_res_140pc@) {
- /* Load 140% image when scaled by 140% */
- .instruction-arrow.arrow-top,
- .instruction-arrow.arrow-down,
- .instruction-arrow.arrow-down-reverse {
- background-image: url("chrome://browser/skin/images/arrow-top-light@1.4x.png");
- }
-
- .instruction-arrow.arrow-back,
- .instruction-arrow.arrow-forward {
- background-image: url("chrome://browser/skin/images/arrow-left-light@1.4x.png");
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- /* Load 180% image when scaled by 180% */
- .instruction-arrow.arrow-top,
- .instruction-arrow.arrow-down,
- .instruction-arrow.arrow-down-reverse {
- background-image: url("chrome://browser/skin/images/arrow-top-light@1.8x.png");
- }
-
- .instruction-arrow.arrow-back,
- .instruction-arrow.arrow-forward {
- background-image: url("chrome://browser/skin/images/arrow-left-light@1.8x.png");
- }
-}
diff --git a/browser/metro/theme/flyoutpanel.css b/browser/metro/theme/flyoutpanel.css
deleted file mode 100644
index ebbff291b14..00000000000
--- a/browser/metro/theme/flyoutpanel.css
+++ /dev/null
@@ -1,92 +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/. */
-
-%filter substitution
-%include defines.inc
-
-flyoutpanel {
- height: 100%;
- background-color: #ffffff;
- visibility: collapse;
- position: fixed;
- transition: transform @metro_animation_duration@ @metro_animation_easing@;
- transform: translateX(100%);
- font-size: 11pt;
- right: 0;
-}
-
-flyoutpanel:-moz-dir(rtl) {
- left: 0;
- right: auto;
- transform: translateX(-100%);
-}
-
-.flyoutpanel-slide-in {
- transform: translateX(0);
-}
-
-flyoutpanel[visible] {
- visibility: visible;
-}
-
-/* XUL flexbox layout doesn't work in a position:fixed container, so we have
- * this normally-positioned inside for layout purposes. */
-.flyoutpanel-wrapper {
- height: 100%;
- width: 100%;
-}
-
-.flyoutpanel-header {
- border-width: 1px;
- -moz-border-start-style: solid;
- border-color: #1b1b1b;
- background-color: #002147;
- height: 80px;
- width: 100%;
- color: #ffffff;
- font-weight: lighter;
- font-size: 20pt;
-}
-
-.flyout-close-button {
- margin-top: 30px !important;
- -moz-margin-start: 40px !important;
-}
-
-.flyout-header-label {
- margin-top: 30px !important;
- -moz-margin-start: 10px !important;
-}
-
-.flyoutpanel-contents {
- border-width: 1px;
- -moz-border-start-style: solid;
- border-color: #c2c2c2;
- padding: @metro_spacing_large@;
- width: 100%;
-}
-
-.flyoutpanel-contents[input="precise"] {
- overflow-y: scroll;
- overflow-x: hidden;
-}
-
-.flyout-close-button {
- border: 0 none;
- -moz-appearance: none;
- list-style-image: url(chrome://browser/skin/images/flyout-back-button.png);
- -moz-image-region: rect(0 32px 32px 0);
-}
-
-.flyout-close-button:-moz-locale-dir(rtl) {
- transform: scaleX(-1);
-}
-
-.flyout-close-button:hover {
- -moz-image-region: rect(0 64px 32px 32px);
-}
-
-.flyout-close-button:active {
- -moz-image-region: rect(0 96px 32px 64px);
-}
diff --git a/browser/metro/theme/images/aboutAddonsBackground.png b/browser/metro/theme/images/aboutAddonsBackground.png
deleted file mode 100644
index 5f265200dd1..00000000000
Binary files a/browser/metro/theme/images/aboutAddonsBackground.png and /dev/null differ
diff --git a/browser/metro/theme/images/aboutAddonsBackgroundFillSlice.png b/browser/metro/theme/images/aboutAddonsBackgroundFillSlice.png
deleted file mode 100644
index 17000f0578a..00000000000
Binary files a/browser/metro/theme/images/aboutAddonsBackgroundFillSlice.png and /dev/null differ
diff --git a/browser/metro/theme/images/alert-downloads-30.png b/browser/metro/theme/images/alert-downloads-30.png
deleted file mode 100644
index 2546352d28f..00000000000
Binary files a/browser/metro/theme/images/alert-downloads-30.png and /dev/null differ
diff --git a/browser/metro/theme/images/appbar-icons.png b/browser/metro/theme/images/appbar-icons.png
deleted file mode 100644
index 9c7b7914241..00000000000
Binary files a/browser/metro/theme/images/appbar-icons.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-left-light.png b/browser/metro/theme/images/arrow-left-light.png
deleted file mode 100644
index 33061fb8e2b..00000000000
Binary files a/browser/metro/theme/images/arrow-left-light.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-left-light@1.4x.png b/browser/metro/theme/images/arrow-left-light@1.4x.png
deleted file mode 100644
index a5b6c750a95..00000000000
Binary files a/browser/metro/theme/images/arrow-left-light@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-left-light@1.8x.png b/browser/metro/theme/images/arrow-left-light@1.8x.png
deleted file mode 100644
index b3393eff4ce..00000000000
Binary files a/browser/metro/theme/images/arrow-left-light@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-left.png b/browser/metro/theme/images/arrow-left.png
deleted file mode 100644
index 4df1e14dfff..00000000000
Binary files a/browser/metro/theme/images/arrow-left.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-left@1.4x.png b/browser/metro/theme/images/arrow-left@1.4x.png
deleted file mode 100644
index cdad27b2966..00000000000
Binary files a/browser/metro/theme/images/arrow-left@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-left@1.8x.png b/browser/metro/theme/images/arrow-left@1.8x.png
deleted file mode 100644
index 12814b528b7..00000000000
Binary files a/browser/metro/theme/images/arrow-left@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-top-light.png b/browser/metro/theme/images/arrow-top-light.png
deleted file mode 100644
index 8e6dc003f24..00000000000
Binary files a/browser/metro/theme/images/arrow-top-light.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-top-light@1.4x.png b/browser/metro/theme/images/arrow-top-light@1.4x.png
deleted file mode 100644
index fdc1e1d0bab..00000000000
Binary files a/browser/metro/theme/images/arrow-top-light@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-top-light@1.8x.png b/browser/metro/theme/images/arrow-top-light@1.8x.png
deleted file mode 100644
index f1bf29d762f..00000000000
Binary files a/browser/metro/theme/images/arrow-top-light@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-top.png b/browser/metro/theme/images/arrow-top.png
deleted file mode 100644
index 0b1c66bc40a..00000000000
Binary files a/browser/metro/theme/images/arrow-top.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-top@1.4x.png b/browser/metro/theme/images/arrow-top@1.4x.png
deleted file mode 100644
index c63124a8ae4..00000000000
Binary files a/browser/metro/theme/images/arrow-top@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrow-top@1.8x.png b/browser/metro/theme/images/arrow-top@1.8x.png
deleted file mode 100644
index c21be188c7f..00000000000
Binary files a/browser/metro/theme/images/arrow-top@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowbox-down-blue-filled.png b/browser/metro/theme/images/arrowbox-down-blue-filled.png
deleted file mode 100644
index efff2fd985b..00000000000
Binary files a/browser/metro/theme/images/arrowbox-down-blue-filled.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowbox-down-blue-filled@2x.png b/browser/metro/theme/images/arrowbox-down-blue-filled@2x.png
deleted file mode 100644
index 790791bb8a6..00000000000
Binary files a/browser/metro/theme/images/arrowbox-down-blue-filled@2x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowbox-horiz-blue-filled.png b/browser/metro/theme/images/arrowbox-horiz-blue-filled.png
deleted file mode 100644
index 07444ca41ab..00000000000
Binary files a/browser/metro/theme/images/arrowbox-horiz-blue-filled.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowbox-horiz-blue-filled@2x.png b/browser/metro/theme/images/arrowbox-horiz-blue-filled@2x.png
deleted file mode 100644
index a3f2f27940b..00000000000
Binary files a/browser/metro/theme/images/arrowbox-horiz-blue-filled@2x.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowdown-16.png b/browser/metro/theme/images/arrowdown-16.png
deleted file mode 100644
index c982426f2ad..00000000000
Binary files a/browser/metro/theme/images/arrowdown-16.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowdowndark-16.png b/browser/metro/theme/images/arrowdowndark-16.png
deleted file mode 100644
index 733d8a6b4ee..00000000000
Binary files a/browser/metro/theme/images/arrowdowndark-16.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowleft-16.png b/browser/metro/theme/images/arrowleft-16.png
deleted file mode 100644
index 464a4a866cd..00000000000
Binary files a/browser/metro/theme/images/arrowleft-16.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowleftdark-16.png b/browser/metro/theme/images/arrowleftdark-16.png
deleted file mode 100644
index 9cb7eeceea1..00000000000
Binary files a/browser/metro/theme/images/arrowleftdark-16.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowright-16.png b/browser/metro/theme/images/arrowright-16.png
deleted file mode 100644
index 859e98ba64b..00000000000
Binary files a/browser/metro/theme/images/arrowright-16.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowrightdark-16.png b/browser/metro/theme/images/arrowrightdark-16.png
deleted file mode 100644
index dcb3c654eed..00000000000
Binary files a/browser/metro/theme/images/arrowrightdark-16.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowup-16.png b/browser/metro/theme/images/arrowup-16.png
deleted file mode 100644
index 2a7e5648535..00000000000
Binary files a/browser/metro/theme/images/arrowup-16.png and /dev/null differ
diff --git a/browser/metro/theme/images/arrowupdark-16.png b/browser/metro/theme/images/arrowupdark-16.png
deleted file mode 100644
index b7ec24409ce..00000000000
Binary files a/browser/metro/theme/images/arrowupdark-16.png and /dev/null differ
diff --git a/browser/metro/theme/images/autoscroll.png b/browser/metro/theme/images/autoscroll.png
deleted file mode 100644
index 6aac3d98e9e..00000000000
Binary files a/browser/metro/theme/images/autoscroll.png and /dev/null differ
diff --git a/browser/metro/theme/images/closetab-default.png b/browser/metro/theme/images/closetab-default.png
deleted file mode 100644
index 8f9710f69f2..00000000000
Binary files a/browser/metro/theme/images/closetab-default.png and /dev/null differ
diff --git a/browser/metro/theme/images/errorpage-blocked-site.png b/browser/metro/theme/images/errorpage-blocked-site.png
deleted file mode 100644
index f93727cf728..00000000000
Binary files a/browser/metro/theme/images/errorpage-blocked-site.png and /dev/null differ
diff --git a/browser/metro/theme/images/errorpage-blocked-site@1.4x.png b/browser/metro/theme/images/errorpage-blocked-site@1.4x.png
deleted file mode 100644
index a5a8aa6a5a3..00000000000
Binary files a/browser/metro/theme/images/errorpage-blocked-site@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/errorpage-blocked-site@1.8x.png b/browser/metro/theme/images/errorpage-blocked-site@1.8x.png
deleted file mode 100644
index 28c45f2ba4c..00000000000
Binary files a/browser/metro/theme/images/errorpage-blocked-site@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/errorpage-cert-untrusted.png b/browser/metro/theme/images/errorpage-cert-untrusted.png
deleted file mode 100644
index b4ebcfdce4c..00000000000
Binary files a/browser/metro/theme/images/errorpage-cert-untrusted.png and /dev/null differ
diff --git a/browser/metro/theme/images/errorpage-cert-untrusted@1.4x.png b/browser/metro/theme/images/errorpage-cert-untrusted@1.4x.png
deleted file mode 100644
index fbd442041ed..00000000000
Binary files a/browser/metro/theme/images/errorpage-cert-untrusted@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/errorpage-cert-untrusted@1.8x.png b/browser/metro/theme/images/errorpage-cert-untrusted@1.8x.png
deleted file mode 100644
index cb76cbd97f2..00000000000
Binary files a/browser/metro/theme/images/errorpage-cert-untrusted@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/errorpage-warning.png b/browser/metro/theme/images/errorpage-warning.png
deleted file mode 100644
index 71366e38f6f..00000000000
Binary files a/browser/metro/theme/images/errorpage-warning.png and /dev/null differ
diff --git a/browser/metro/theme/images/errorpage-warning@1.4x.png b/browser/metro/theme/images/errorpage-warning@1.4x.png
deleted file mode 100644
index bd3232e9221..00000000000
Binary files a/browser/metro/theme/images/errorpage-warning@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/errorpage-warning@1.8x.png b/browser/metro/theme/images/errorpage-warning@1.8x.png
deleted file mode 100644
index c7c5615b88a..00000000000
Binary files a/browser/metro/theme/images/errorpage-warning@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/exitfullscreen-hdpi.png b/browser/metro/theme/images/exitfullscreen-hdpi.png
deleted file mode 100644
index 826e5340843..00000000000
Binary files a/browser/metro/theme/images/exitfullscreen-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/favicon-default-32.png b/browser/metro/theme/images/favicon-default-32.png
deleted file mode 100644
index 8e66e5ae57e..00000000000
Binary files a/browser/metro/theme/images/favicon-default-32.png and /dev/null differ
diff --git a/browser/metro/theme/images/firefox-watermark.png b/browser/metro/theme/images/firefox-watermark.png
deleted file mode 100644
index 7e862682c80..00000000000
Binary files a/browser/metro/theme/images/firefox-watermark.png and /dev/null differ
diff --git a/browser/metro/theme/images/flyout-back-button.png b/browser/metro/theme/images/flyout-back-button.png
deleted file mode 100644
index 114e763a6aa..00000000000
Binary files a/browser/metro/theme/images/flyout-back-button.png and /dev/null differ
diff --git a/browser/metro/theme/images/fullscreen-hdpi.png b/browser/metro/theme/images/fullscreen-hdpi.png
deleted file mode 100644
index 980e787310a..00000000000
Binary files a/browser/metro/theme/images/fullscreen-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/icon-autocomplete-search.png b/browser/metro/theme/images/icon-autocomplete-search.png
deleted file mode 100644
index 50a4ccd7202..00000000000
Binary files a/browser/metro/theme/images/icon-autocomplete-search.png and /dev/null differ
diff --git a/browser/metro/theme/images/icon-autocomplete-search@1.4x.png b/browser/metro/theme/images/icon-autocomplete-search@1.4x.png
deleted file mode 100644
index fb3739a3f78..00000000000
Binary files a/browser/metro/theme/images/icon-autocomplete-search@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/icon-autocomplete-search@1.8x.png b/browser/metro/theme/images/icon-autocomplete-search@1.8x.png
deleted file mode 100644
index b35f458450f..00000000000
Binary files a/browser/metro/theme/images/icon-autocomplete-search@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/icons-identity-firefox.png b/browser/metro/theme/images/icons-identity-firefox.png
deleted file mode 100644
index 1dec42cf932..00000000000
Binary files a/browser/metro/theme/images/icons-identity-firefox.png and /dev/null differ
diff --git a/browser/metro/theme/images/icons-identity-firefox@1.4x.png b/browser/metro/theme/images/icons-identity-firefox@1.4x.png
deleted file mode 100644
index 4867a82a00a..00000000000
Binary files a/browser/metro/theme/images/icons-identity-firefox@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/icons-identity-firefox@1.8x.png b/browser/metro/theme/images/icons-identity-firefox@1.8x.png
deleted file mode 100644
index 94eaa8aede6..00000000000
Binary files a/browser/metro/theme/images/icons-identity-firefox@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/identity-icons-generic.png b/browser/metro/theme/images/identity-icons-generic.png
deleted file mode 100644
index 1ec70272e67..00000000000
Binary files a/browser/metro/theme/images/identity-icons-generic.png and /dev/null differ
diff --git a/browser/metro/theme/images/identity-icons-https-ev.png b/browser/metro/theme/images/identity-icons-https-ev.png
deleted file mode 100644
index 80a370b44a4..00000000000
Binary files a/browser/metro/theme/images/identity-icons-https-ev.png and /dev/null differ
diff --git a/browser/metro/theme/images/identity-icons-https-mixed.png b/browser/metro/theme/images/identity-icons-https-mixed.png
deleted file mode 100644
index caf6097c40a..00000000000
Binary files a/browser/metro/theme/images/identity-icons-https-mixed.png and /dev/null differ
diff --git a/browser/metro/theme/images/identity-icons-https.png b/browser/metro/theme/images/identity-icons-https.png
deleted file mode 100644
index dbbb8a20907..00000000000
Binary files a/browser/metro/theme/images/identity-icons-https.png and /dev/null differ
diff --git a/browser/metro/theme/images/infobar-close.png b/browser/metro/theme/images/infobar-close.png
deleted file mode 100644
index 8ac6da55e74..00000000000
Binary files a/browser/metro/theme/images/infobar-close.png and /dev/null differ
diff --git a/browser/metro/theme/images/infobar-geolocation.png b/browser/metro/theme/images/infobar-geolocation.png
deleted file mode 100644
index 6e229eac1cc..00000000000
Binary files a/browser/metro/theme/images/infobar-geolocation.png and /dev/null differ
diff --git a/browser/metro/theme/images/infobar-key.png b/browser/metro/theme/images/infobar-key.png
deleted file mode 100644
index 721cca40370..00000000000
Binary files a/browser/metro/theme/images/infobar-key.png and /dev/null differ
diff --git a/browser/metro/theme/images/infobar-popup.png b/browser/metro/theme/images/infobar-popup.png
deleted file mode 100644
index 7658903f7ba..00000000000
Binary files a/browser/metro/theme/images/infobar-popup.png and /dev/null differ
diff --git a/browser/metro/theme/images/lock.png b/browser/metro/theme/images/lock.png
deleted file mode 100644
index 5ff3654d317..00000000000
Binary files a/browser/metro/theme/images/lock.png and /dev/null differ
diff --git a/browser/metro/theme/images/mute-hdpi.png b/browser/metro/theme/images/mute-hdpi.png
deleted file mode 100644
index 0bd1e60e6a3..00000000000
Binary files a/browser/metro/theme/images/mute-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-back.png b/browser/metro/theme/images/navbar-back.png
deleted file mode 100644
index 61a8e78f184..00000000000
Binary files a/browser/metro/theme/images/navbar-back.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-back@1.4x.png b/browser/metro/theme/images/navbar-back@1.4x.png
deleted file mode 100644
index 7f35011c7a0..00000000000
Binary files a/browser/metro/theme/images/navbar-back@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-back@1.8x.png b/browser/metro/theme/images/navbar-back@1.8x.png
deleted file mode 100644
index 59a2a1c092f..00000000000
Binary files a/browser/metro/theme/images/navbar-back@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-close.png b/browser/metro/theme/images/navbar-close.png
deleted file mode 100644
index c014e3cbee5..00000000000
Binary files a/browser/metro/theme/images/navbar-close.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-close@1.4x.png b/browser/metro/theme/images/navbar-close@1.4x.png
deleted file mode 100644
index 382c12d8ed8..00000000000
Binary files a/browser/metro/theme/images/navbar-close@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-close@1.8x.png b/browser/metro/theme/images/navbar-close@1.8x.png
deleted file mode 100644
index e8ab41b4671..00000000000
Binary files a/browser/metro/theme/images/navbar-close@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-clear.png b/browser/metro/theme/images/navbar-contextual-clear.png
deleted file mode 100644
index 5ade4c8411e..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-clear.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-clear@1.4x.png b/browser/metro/theme/images/navbar-contextual-clear@1.4x.png
deleted file mode 100644
index 6a3ba29b343..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-clear@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-clear@1.8x.png b/browser/metro/theme/images/navbar-contextual-clear@1.8x.png
deleted file mode 100644
index 92f78792379..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-clear@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-delete.png b/browser/metro/theme/images/navbar-contextual-delete.png
deleted file mode 100644
index 0ec2a345899..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-delete.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-delete@1.4x.png b/browser/metro/theme/images/navbar-contextual-delete@1.4x.png
deleted file mode 100644
index 6757eaf212c..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-delete@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-delete@1.8x.png b/browser/metro/theme/images/navbar-contextual-delete@1.8x.png
deleted file mode 100644
index 160fcc54ade..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-delete@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-hide.png b/browser/metro/theme/images/navbar-contextual-hide.png
deleted file mode 100644
index a40af1cc70e..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-hide.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-hide@1.4x.png b/browser/metro/theme/images/navbar-contextual-hide@1.4x.png
deleted file mode 100644
index a50c1d3c366..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-hide@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-hide@1.8x.png b/browser/metro/theme/images/navbar-contextual-hide@1.8x.png
deleted file mode 100644
index e9dcd36a8cf..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-hide@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-pin.png b/browser/metro/theme/images/navbar-contextual-pin.png
deleted file mode 100644
index 4758188a7db..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-pin.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-pin@1.4x.png b/browser/metro/theme/images/navbar-contextual-pin@1.4x.png
deleted file mode 100644
index b9a73e233bb..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-pin@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-pin@1.8x.png b/browser/metro/theme/images/navbar-contextual-pin@1.8x.png
deleted file mode 100644
index 3d5f886c9ba..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-pin@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-restore.png b/browser/metro/theme/images/navbar-contextual-restore.png
deleted file mode 100644
index 0dca549403d..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-restore.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-restore@1.4x.png b/browser/metro/theme/images/navbar-contextual-restore@1.4x.png
deleted file mode 100644
index ada02175a42..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-restore@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-restore@1.8x.png b/browser/metro/theme/images/navbar-contextual-restore@1.8x.png
deleted file mode 100644
index 1805719f677..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-restore@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-unpin.png b/browser/metro/theme/images/navbar-contextual-unpin.png
deleted file mode 100644
index 8207196cb49..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-unpin.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-unpin@1.4x.png b/browser/metro/theme/images/navbar-contextual-unpin@1.4x.png
deleted file mode 100644
index 6645ca6e663..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-unpin@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-contextual-unpin@1.8x.png b/browser/metro/theme/images/navbar-contextual-unpin@1.8x.png
deleted file mode 100644
index 2d884199c1e..00000000000
Binary files a/browser/metro/theme/images/navbar-contextual-unpin@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-download-finished.png b/browser/metro/theme/images/navbar-download-finished.png
deleted file mode 100644
index 38c1a904924..00000000000
Binary files a/browser/metro/theme/images/navbar-download-finished.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-download-finished@1.4x.png b/browser/metro/theme/images/navbar-download-finished@1.4x.png
deleted file mode 100644
index 729fec47351..00000000000
Binary files a/browser/metro/theme/images/navbar-download-finished@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-download-finished@1.8x.png b/browser/metro/theme/images/navbar-download-finished@1.8x.png
deleted file mode 100644
index 6cdb570f2f3..00000000000
Binary files a/browser/metro/theme/images/navbar-download-finished@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-download.png b/browser/metro/theme/images/navbar-download.png
deleted file mode 100644
index dcf190b1d1c..00000000000
Binary files a/browser/metro/theme/images/navbar-download.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-download@1.4x.png b/browser/metro/theme/images/navbar-download@1.4x.png
deleted file mode 100644
index 6f022030b7b..00000000000
Binary files a/browser/metro/theme/images/navbar-download@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-download@1.8x.png b/browser/metro/theme/images/navbar-download@1.8x.png
deleted file mode 100644
index 39815b94efe..00000000000
Binary files a/browser/metro/theme/images/navbar-download@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-forward.png b/browser/metro/theme/images/navbar-forward.png
deleted file mode 100644
index 7f4939fcb68..00000000000
Binary files a/browser/metro/theme/images/navbar-forward.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-forward@1.4x.png b/browser/metro/theme/images/navbar-forward@1.4x.png
deleted file mode 100644
index a05474c06c0..00000000000
Binary files a/browser/metro/theme/images/navbar-forward@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-forward@1.8x.png b/browser/metro/theme/images/navbar-forward@1.8x.png
deleted file mode 100644
index 11c208da217..00000000000
Binary files a/browser/metro/theme/images/navbar-forward@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-menu.png b/browser/metro/theme/images/navbar-menu.png
deleted file mode 100644
index 7a059d8d506..00000000000
Binary files a/browser/metro/theme/images/navbar-menu.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-menu@1.4x.png b/browser/metro/theme/images/navbar-menu@1.4x.png
deleted file mode 100644
index 2bce75bcc25..00000000000
Binary files a/browser/metro/theme/images/navbar-menu@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-menu@1.8x.png b/browser/metro/theme/images/navbar-menu@1.8x.png
deleted file mode 100644
index 763246cd45a..00000000000
Binary files a/browser/metro/theme/images/navbar-menu@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-pin.png b/browser/metro/theme/images/navbar-pin.png
deleted file mode 100644
index 4cbf202d325..00000000000
Binary files a/browser/metro/theme/images/navbar-pin.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-pin@1.4x.png b/browser/metro/theme/images/navbar-pin@1.4x.png
deleted file mode 100644
index 2f292f7fea5..00000000000
Binary files a/browser/metro/theme/images/navbar-pin@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-pin@1.8x.png b/browser/metro/theme/images/navbar-pin@1.8x.png
deleted file mode 100644
index ff5d2637747..00000000000
Binary files a/browser/metro/theme/images/navbar-pin@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-star.png b/browser/metro/theme/images/navbar-star.png
deleted file mode 100644
index 720dd26651a..00000000000
Binary files a/browser/metro/theme/images/navbar-star.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-star@1.4x.png b/browser/metro/theme/images/navbar-star@1.4x.png
deleted file mode 100644
index 2763ade09a7..00000000000
Binary files a/browser/metro/theme/images/navbar-star@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/navbar-star@1.8x.png b/browser/metro/theme/images/navbar-star@1.8x.png
deleted file mode 100644
index acc0fb6bc6a..00000000000
Binary files a/browser/metro/theme/images/navbar-star@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/newtab-default.png b/browser/metro/theme/images/newtab-default.png
deleted file mode 100644
index 3154764e741..00000000000
Binary files a/browser/metro/theme/images/newtab-default.png and /dev/null differ
diff --git a/browser/metro/theme/images/overlay-back.png b/browser/metro/theme/images/overlay-back.png
deleted file mode 100644
index 47f2e22be38..00000000000
Binary files a/browser/metro/theme/images/overlay-back.png and /dev/null differ
diff --git a/browser/metro/theme/images/overlay-back@1.4x.png b/browser/metro/theme/images/overlay-back@1.4x.png
deleted file mode 100644
index edd9d7b849b..00000000000
Binary files a/browser/metro/theme/images/overlay-back@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/overlay-back@1.8x.png b/browser/metro/theme/images/overlay-back@1.8x.png
deleted file mode 100644
index cd70472c00c..00000000000
Binary files a/browser/metro/theme/images/overlay-back@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/overlay-plus.png b/browser/metro/theme/images/overlay-plus.png
deleted file mode 100644
index e2399199c7a..00000000000
Binary files a/browser/metro/theme/images/overlay-plus.png and /dev/null differ
diff --git a/browser/metro/theme/images/overlay-plus@1.4x.png b/browser/metro/theme/images/overlay-plus@1.4x.png
deleted file mode 100644
index 2bf7aa3eb50..00000000000
Binary files a/browser/metro/theme/images/overlay-plus@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/overlay-plus@1.8x.png b/browser/metro/theme/images/overlay-plus@1.8x.png
deleted file mode 100644
index d2a452c819a..00000000000
Binary files a/browser/metro/theme/images/overlay-plus@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/panel-dark.png b/browser/metro/theme/images/panel-dark.png
deleted file mode 100644
index 2ade3d31d0f..00000000000
Binary files a/browser/metro/theme/images/panel-dark.png and /dev/null differ
diff --git a/browser/metro/theme/images/pause-hdpi.png b/browser/metro/theme/images/pause-hdpi.png
deleted file mode 100644
index e377d321ce0..00000000000
Binary files a/browser/metro/theme/images/pause-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/pinned-hdpi.png b/browser/metro/theme/images/pinned-hdpi.png
deleted file mode 100644
index 044b6fd1833..00000000000
Binary files a/browser/metro/theme/images/pinned-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/pinned.png b/browser/metro/theme/images/pinned.png
deleted file mode 100644
index f52bb068914..00000000000
Binary files a/browser/metro/theme/images/pinned.png and /dev/null differ
diff --git a/browser/metro/theme/images/play-hdpi.png b/browser/metro/theme/images/play-hdpi.png
deleted file mode 100644
index a8482eb4dd7..00000000000
Binary files a/browser/metro/theme/images/play-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/plus-24.png b/browser/metro/theme/images/plus-24.png
deleted file mode 100644
index d7533081cb2..00000000000
Binary files a/browser/metro/theme/images/plus-24.png and /dev/null differ
diff --git a/browser/metro/theme/images/plus-34.png b/browser/metro/theme/images/plus-34.png
deleted file mode 100644
index 632d6139313..00000000000
Binary files a/browser/metro/theme/images/plus-34.png and /dev/null differ
diff --git a/browser/metro/theme/images/popup-bg-hdpi.png b/browser/metro/theme/images/popup-bg-hdpi.png
deleted file mode 100644
index df8e20c929f..00000000000
Binary files a/browser/metro/theme/images/popup-bg-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/popup-selected-item-hdpi.png b/browser/metro/theme/images/popup-selected-item-hdpi.png
deleted file mode 100644
index dd511023c1f..00000000000
Binary files a/browser/metro/theme/images/popup-selected-item-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/progresscircle-bg.png b/browser/metro/theme/images/progresscircle-bg.png
deleted file mode 100644
index ce3f3299af2..00000000000
Binary files a/browser/metro/theme/images/progresscircle-bg.png and /dev/null differ
diff --git a/browser/metro/theme/images/progresscircle.png b/browser/metro/theme/images/progresscircle.png
deleted file mode 100644
index 3f74cdf6f76..00000000000
Binary files a/browser/metro/theme/images/progresscircle.png and /dev/null differ
diff --git a/browser/metro/theme/images/reader-plus-icon-xhdpi.png b/browser/metro/theme/images/reader-plus-icon-xhdpi.png
deleted file mode 100644
index abfdbec4b9a..00000000000
Binary files a/browser/metro/theme/images/reader-plus-icon-xhdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/scrubber-hdpi.png b/browser/metro/theme/images/scrubber-hdpi.png
deleted file mode 100644
index 49c60505f46..00000000000
Binary files a/browser/metro/theme/images/scrubber-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/search-clear-30.png b/browser/metro/theme/images/search-clear-30.png
deleted file mode 100644
index 8bab39a08d3..00000000000
Binary files a/browser/metro/theme/images/search-clear-30.png and /dev/null differ
diff --git a/browser/metro/theme/images/search-glass-30.png b/browser/metro/theme/images/search-glass-30.png
deleted file mode 100644
index 986ef1271ce..00000000000
Binary files a/browser/metro/theme/images/search-glass-30.png and /dev/null differ
diff --git a/browser/metro/theme/images/search.png b/browser/metro/theme/images/search.png
deleted file mode 100644
index 2369d03f336..00000000000
Binary files a/browser/metro/theme/images/search.png and /dev/null differ
diff --git a/browser/metro/theme/images/selection-monocle.png b/browser/metro/theme/images/selection-monocle.png
deleted file mode 100644
index b4754ffb97d..00000000000
Binary files a/browser/metro/theme/images/selection-monocle.png and /dev/null differ
diff --git a/browser/metro/theme/images/selection-monocle@1.4x.png b/browser/metro/theme/images/selection-monocle@1.4x.png
deleted file mode 100644
index 9f5b7130b91..00000000000
Binary files a/browser/metro/theme/images/selection-monocle@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/selection-monocle@1.8x.png b/browser/metro/theme/images/selection-monocle@1.8x.png
deleted file mode 100644
index 229c9b019ac..00000000000
Binary files a/browser/metro/theme/images/selection-monocle@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/tab-arrows.png b/browser/metro/theme/images/tab-arrows.png
deleted file mode 100644
index 1dd5e79d061..00000000000
Binary files a/browser/metro/theme/images/tab-arrows.png and /dev/null differ
diff --git a/browser/metro/theme/images/tab-crop.png b/browser/metro/theme/images/tab-crop.png
deleted file mode 100644
index bed41704cdd..00000000000
Binary files a/browser/metro/theme/images/tab-crop.png and /dev/null differ
diff --git a/browser/metro/theme/images/tab-overlay.png b/browser/metro/theme/images/tab-overlay.png
deleted file mode 100644
index 0c5c0dd8812..00000000000
Binary files a/browser/metro/theme/images/tab-overlay.png and /dev/null differ
diff --git a/browser/metro/theme/images/textfield.png b/browser/metro/theme/images/textfield.png
deleted file mode 100644
index 436853fa1ea..00000000000
Binary files a/browser/metro/theme/images/textfield.png and /dev/null differ
diff --git a/browser/metro/theme/images/tile-selected-check-hdpi.png b/browser/metro/theme/images/tile-selected-check-hdpi.png
deleted file mode 100644
index 7261a896813..00000000000
Binary files a/browser/metro/theme/images/tile-selected-check-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/tile-selected-check-rtl-hdpi.png b/browser/metro/theme/images/tile-selected-check-rtl-hdpi.png
deleted file mode 100644
index 8c28848ab0c..00000000000
Binary files a/browser/metro/theme/images/tile-selected-check-rtl-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/unmute-hdpi.png b/browser/metro/theme/images/unmute-hdpi.png
deleted file mode 100644
index 4dbb94f98f0..00000000000
Binary files a/browser/metro/theme/images/unmute-hdpi.png and /dev/null differ
diff --git a/browser/metro/theme/images/urlbar-go.png b/browser/metro/theme/images/urlbar-go.png
deleted file mode 100644
index 5019f2c7feb..00000000000
Binary files a/browser/metro/theme/images/urlbar-go.png and /dev/null differ
diff --git a/browser/metro/theme/images/urlbar-go@1.4x.png b/browser/metro/theme/images/urlbar-go@1.4x.png
deleted file mode 100644
index 8e44c82d870..00000000000
Binary files a/browser/metro/theme/images/urlbar-go@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/urlbar-go@1.8x.png b/browser/metro/theme/images/urlbar-go@1.8x.png
deleted file mode 100644
index 60187c84891..00000000000
Binary files a/browser/metro/theme/images/urlbar-go@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/urlbar-reload.png b/browser/metro/theme/images/urlbar-reload.png
deleted file mode 100644
index 41ad236a566..00000000000
Binary files a/browser/metro/theme/images/urlbar-reload.png and /dev/null differ
diff --git a/browser/metro/theme/images/urlbar-reload@1.4x.png b/browser/metro/theme/images/urlbar-reload@1.4x.png
deleted file mode 100644
index 09a0a9c3b4c..00000000000
Binary files a/browser/metro/theme/images/urlbar-reload@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/urlbar-reload@1.8x.png b/browser/metro/theme/images/urlbar-reload@1.8x.png
deleted file mode 100644
index 20a94d05bff..00000000000
Binary files a/browser/metro/theme/images/urlbar-reload@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/images/urlbar-stop.png b/browser/metro/theme/images/urlbar-stop.png
deleted file mode 100644
index 7a7eb1b9333..00000000000
Binary files a/browser/metro/theme/images/urlbar-stop.png and /dev/null differ
diff --git a/browser/metro/theme/images/urlbar-stop@1.4x.png b/browser/metro/theme/images/urlbar-stop@1.4x.png
deleted file mode 100644
index 11fc7270128..00000000000
Binary files a/browser/metro/theme/images/urlbar-stop@1.4x.png and /dev/null differ
diff --git a/browser/metro/theme/images/urlbar-stop@1.8x.png b/browser/metro/theme/images/urlbar-stop@1.8x.png
deleted file mode 100644
index 54b476a58b7..00000000000
Binary files a/browser/metro/theme/images/urlbar-stop@1.8x.png and /dev/null differ
diff --git a/browser/metro/theme/jar.mn b/browser/metro/theme/jar.mn
deleted file mode 100644
index 487eaeb63ce..00000000000
--- a/browser/metro/theme/jar.mn
+++ /dev/null
@@ -1,176 +0,0 @@
-#filter substitution
-# 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/.
-
-
-chrome.jar:
-% skin browser classic/1.0 %skin/
- skin/aboutPage.css (aboutPage.css)
- skin/aboutAddons.css (aboutAddons.css)
- skin/about.css (about.css)
-* skin/flyoutpanel.css (flyoutpanel.css)
-#ifdef MOZ_CRASHREPORTER
-* skin/crashprompt.css (crashprompt.css)
-#endif
-* skin/circularprogress.css (circularprogress.css)
-* skin/cssthrobber.css (cssthrobber.css)
-* skin/browser.css (browser.css)
-* skin/content.css (content.css)
- skin/config.css (config.css)
-* skin/platform.css (platform.css)
-* skin/tiles.css (tiles.css)
- skin/touchcontrols.css (touchcontrols.css)
-* skin/netError.css (netError.css)
- skin/firstrun.css (firstrun.css)
-* skin/firstruncontent.css (firstruncontent.css)
-* skin/start.css (start.css)
-% override chrome://global/skin/about.css chrome://browser/skin/about.css
-% override chrome://global/skin/media/videocontrols.css chrome://browser/skin/touchcontrols.css
-% override chrome://global/skin/netError.css chrome://browser/skin/netError.css
-
- skin/images/panel-dark.png (images/panel-dark.png)
- skin/images/navbar-back.png (images/navbar-back.png)
- skin/images/navbar-back@1.4x.png (images/navbar-back@1.4x.png)
- skin/images/navbar-back@1.8x.png (images/navbar-back@1.8x.png)
- skin/images/navbar-close.png (images/navbar-close.png)
- skin/images/navbar-close@1.4x.png (images/navbar-close@1.4x.png)
- skin/images/navbar-close@1.8x.png (images/navbar-close@1.8x.png)
- skin/images/navbar-contextual-clear.png (images/navbar-contextual-clear.png)
- skin/images/navbar-contextual-clear@1.4x.png (images/navbar-contextual-clear@1.4x.png)
- skin/images/navbar-contextual-clear@1.8x.png (images/navbar-contextual-clear@1.8x.png)
- skin/images/navbar-contextual-delete.png (images/navbar-contextual-delete.png)
- skin/images/navbar-contextual-delete@1.4x.png (images/navbar-contextual-delete@1.4x.png)
- skin/images/navbar-contextual-delete@1.8x.png (images/navbar-contextual-delete@1.8x.png)
- skin/images/navbar-contextual-hide.png (images/navbar-contextual-hide.png)
- skin/images/navbar-contextual-hide@1.4x.png (images/navbar-contextual-hide@1.4x.png)
- skin/images/navbar-contextual-hide@1.8x.png (images/navbar-contextual-hide@1.8x.png)
- skin/images/navbar-contextual-pin.png (images/navbar-contextual-pin.png)
- skin/images/navbar-contextual-pin@1.4x.png (images/navbar-contextual-pin@1.4x.png)
- skin/images/navbar-contextual-pin@1.8x.png (images/navbar-contextual-pin@1.8x.png)
- skin/images/navbar-contextual-restore.png (images/navbar-contextual-restore.png)
- skin/images/navbar-contextual-restore@1.4x.png (images/navbar-contextual-restore@1.4x.png)
- skin/images/navbar-contextual-restore@1.8x.png (images/navbar-contextual-restore@1.8x.png)
- skin/images/navbar-contextual-unpin.png (images/navbar-contextual-unpin.png)
- skin/images/navbar-contextual-unpin@1.4x.png (images/navbar-contextual-unpin@1.4x.png)
- skin/images/navbar-contextual-unpin@1.8x.png (images/navbar-contextual-unpin@1.8x.png)
- skin/images/navbar-download.png (images/navbar-download.png)
- skin/images/navbar-download@1.4x.png (images/navbar-download@1.4x.png)
- skin/images/navbar-download@1.8x.png (images/navbar-download@1.8x.png)
- skin/images/navbar-download-finished.png (images/navbar-download-finished.png)
- skin/images/navbar-download-finished@1.4x.png (images/navbar-download-finished@1.4x.png)
- skin/images/navbar-download-finished@1.8x.png (images/navbar-download-finished@1.8x.png)
- skin/images/navbar-forward.png (images/navbar-forward.png)
- skin/images/navbar-forward@1.4x.png (images/navbar-forward@1.4x.png)
- skin/images/navbar-forward@1.8x.png (images/navbar-forward@1.8x.png)
- skin/images/navbar-star.png (images/navbar-star.png)
- skin/images/navbar-star@1.4x.png (images/navbar-star@1.4x.png)
- skin/images/navbar-star@1.8x.png (images/navbar-star@1.8x.png)
- skin/images/navbar-pin.png (images/navbar-pin.png)
- skin/images/navbar-pin@1.4x.png (images/navbar-pin@1.4x.png)
- skin/images/navbar-pin@1.8x.png (images/navbar-pin@1.8x.png)
- skin/images/navbar-menu.png (images/navbar-menu.png)
- skin/images/navbar-menu@1.4x.png (images/navbar-menu@1.4x.png)
- skin/images/navbar-menu@1.8x.png (images/navbar-menu@1.8x.png)
- skin/images/urlbar-go.png (images/urlbar-go.png)
- skin/images/urlbar-go@1.4x.png (images/urlbar-go@1.4x.png)
- skin/images/urlbar-go@1.8x.png (images/urlbar-go@1.8x.png)
- skin/images/urlbar-reload.png (images/urlbar-reload.png)
- skin/images/urlbar-reload@1.4x.png (images/urlbar-reload@1.4x.png)
- skin/images/urlbar-reload@1.8x.png (images/urlbar-reload@1.8x.png)
- skin/images/urlbar-stop.png (images/urlbar-stop.png)
- skin/images/urlbar-stop@1.4x.png (images/urlbar-stop@1.4x.png)
- skin/images/urlbar-stop@1.8x.png (images/urlbar-stop@1.8x.png)
- skin/images/newtab-default.png (images/newtab-default.png)
- skin/images/closetab-default.png (images/closetab-default.png)
- skin/images/tab-arrows.png (images/tab-arrows.png)
- skin/images/tab-crop.png (images/tab-crop.png)
- skin/images/tab-overlay.png (images/tab-overlay.png)
- skin/images/identity-icons-generic.png (images/identity-icons-generic.png)
- skin/images/identity-icons-https-ev.png (images/identity-icons-https-ev.png)
- skin/images/identity-icons-https-mixed.png (images/identity-icons-https-mixed.png)
- skin/images/identity-icons-https.png (images/identity-icons-https.png)
- skin/images/icon-autocomplete-search.png (images/icon-autocomplete-search.png)
- skin/images/icon-autocomplete-search@1.4x.png (images/icon-autocomplete-search@1.4x.png)
- skin/images/icon-autocomplete-search@1.8x.png (images/icon-autocomplete-search@1.8x.png)
- skin/images/icons-identity-firefox.png (images/icons-identity-firefox.png)
- skin/images/icons-identity-firefox@1.4x.png (images/icons-identity-firefox@1.4x.png)
- skin/images/icons-identity-firefox@1.8x.png (images/icons-identity-firefox@1.8x.png)
- skin/images/infobar-close.png (images/infobar-close.png)
- skin/images/infobar-geolocation.png (images/infobar-geolocation.png)
- skin/images/infobar-key.png (images/infobar-key.png)
- skin/images/infobar-popup.png (images/infobar-popup.png)
- skin/images/firefox-watermark.png (images/firefox-watermark.png)
- skin/images/aboutAddonsBackground.png (images/aboutAddonsBackground.png)
- skin/images/aboutAddonsBackgroundFillSlice.png (images/aboutAddonsBackgroundFillSlice.png)
- skin/images/flyout-back-button.png (images/flyout-back-button.png)
- skin/images/arrowleft-16.png (images/arrowleft-16.png)
- skin/images/arrowright-16.png (images/arrowright-16.png)
- skin/images/arrowup-16.png (images/arrowup-16.png)
- skin/images/arrowdown-16.png (images/arrowdown-16.png)
- skin/images/arrowleftdark-16.png (images/arrowleftdark-16.png)
- skin/images/arrowrightdark-16.png (images/arrowrightdark-16.png)
- skin/images/arrowupdark-16.png (images/arrowupdark-16.png)
- skin/images/arrowdowndark-16.png (images/arrowdowndark-16.png)
- skin/images/popup-bg-hdpi.png (images/popup-bg-hdpi.png)
- skin/images/popup-selected-item-hdpi.png (images/popup-selected-item-hdpi.png)
- skin/images/arrowbox-horiz-blue-filled.png (images/arrowbox-horiz-blue-filled.png)
- skin/images/arrowbox-down-blue-filled.png (images/arrowbox-down-blue-filled.png)
- skin/images/favicon-default-32.png (images/favicon-default-32.png)
- skin/images/errorpage-warning.png (images/errorpage-warning.png)
- skin/images/errorpage-warning@1.4x.png (images/errorpage-warning@1.4x.png)
- skin/images/errorpage-warning@1.8x.png (images/errorpage-warning@1.8x.png)
- skin/images/errorpage-cert-untrusted.png (images/errorpage-cert-untrusted.png)
- skin/images/errorpage-cert-untrusted@1.4x.png (images/errorpage-cert-untrusted@1.4x.png)
- skin/images/errorpage-cert-untrusted@1.8x.png (images/errorpage-cert-untrusted@1.8x.png)
- skin/images/errorpage-blocked-site.png (images/errorpage-blocked-site.png)
- skin/images/errorpage-blocked-site@1.4x.png (images/errorpage-blocked-site@1.4x.png)
- skin/images/errorpage-blocked-site@1.8x.png (images/errorpage-blocked-site@1.8x.png)
- skin/images/alert-downloads-30.png (images/alert-downloads-30.png)
- skin/images/search-glass-30.png (images/search-glass-30.png)
- skin/images/play-hdpi.png (images/play-hdpi.png)
- skin/images/pause-hdpi.png (images/pause-hdpi.png)
- skin/images/mute-hdpi.png (images/mute-hdpi.png)
- skin/images/unmute-hdpi.png (images/unmute-hdpi.png)
- skin/images/fullscreen-hdpi.png (images/fullscreen-hdpi.png)
- skin/images/exitfullscreen-hdpi.png (images/exitfullscreen-hdpi.png)
- skin/images/scrubber-hdpi.png (images/scrubber-hdpi.png)
- skin/images/selection-monocle.png (images/selection-monocle.png)
- skin/images/selection-monocle@1.4x.png (images/selection-monocle@1.4x.png)
- skin/images/selection-monocle@1.8x.png (images/selection-monocle@1.8x.png)
- skin/images/appbar-icons.png (images/appbar-icons.png)
- skin/images/pinned-hdpi.png (images/pinned-hdpi.png)
- skin/images/tile-selected-check-hdpi.png (images/tile-selected-check-hdpi.png)
- skin/images/tile-selected-check-rtl-hdpi.png (images/tile-selected-check-rtl-hdpi.png)
- skin/images/plus-34.png (images/plus-34.png)
- skin/images/plus-24.png (images/plus-24.png)
- skin/images/progresscircle.png (images/progresscircle.png)
- skin/images/progresscircle-bg.png (images/progresscircle-bg.png)
-
- skin/images/overlay-back.png (images/overlay-back.png)
- skin/images/overlay-back@1.4x.png (images/overlay-back@1.4x.png)
- skin/images/overlay-back@1.8x.png (images/overlay-back@1.8x.png)
- skin/images/overlay-plus.png (images/overlay-plus.png)
- skin/images/overlay-plus@1.4x.png (images/overlay-plus@1.4x.png)
- skin/images/overlay-plus@1.8x.png (images/overlay-plus@1.8x.png)
- skin/images/autoscroll.png (images/autoscroll.png)
-
- skin/images/arrow-top.png (images/arrow-top.png)
- skin/images/arrow-top@1.4x.png (images/arrow-top@1.4x.png)
- skin/images/arrow-top@1.8x.png (images/arrow-top@1.8x.png)
- skin/images/arrow-left.png (images/arrow-left.png)
- skin/images/arrow-left@1.4x.png (images/arrow-left@1.4x.png)
- skin/images/arrow-left@1.8x.png (images/arrow-left@1.8x.png)
- skin/images/arrow-top-light.png (images/arrow-top-light.png)
- skin/images/arrow-top-light@1.4x.png (images/arrow-top-light@1.4x.png)
- skin/images/arrow-top-light@1.8x.png (images/arrow-top-light@1.8x.png)
- skin/images/arrow-left-light.png (images/arrow-left-light.png)
- skin/images/arrow-left-light@1.4x.png (images/arrow-left-light@1.4x.png)
- skin/images/arrow-left-light@1.8x.png (images/arrow-left-light@1.8x.png)
-
-# AboutConfig specific:
- skin/images/textfield.png (images/textfield.png)
- skin/images/reader-plus-icon-xhdpi.png (images/reader-plus-icon-xhdpi.png)
- skin/images/search.png (images/search.png)
- skin/images/search-clear-30.png (images/search-clear-30.png)
- skin/images/lock.png (images/lock.png)
diff --git a/browser/metro/theme/moz.build b/browser/metro/theme/moz.build
deleted file mode 100644
index c97072bba2d..00000000000
--- a/browser/metro/theme/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- 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/.
-
-JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
diff --git a/browser/metro/theme/netError.css b/browser/metro/theme/netError.css
deleted file mode 100644
index 9a93b14461e..00000000000
--- a/browser/metro/theme/netError.css
+++ /dev/null
@@ -1,275 +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/. */
-
-/*
- * This defines the look-and-feel styling of the error pages.
- * (see: netError.xhtml)
- *
- * Original styling by William Price
- * Updated for mobile by: Wes Johnston
- */
-
-%filter substitution
-%include defines.inc
-%include platform.css
-
-/*
- * In-browser content styles,
- * XXX: should be extracted and consolidated into a shared stylesheet for all in-browser content
- */
-body {
- background-color: #F4F4F4;
- color: rgb(51,51,51);
- font-family: "Segoe UI", sans-serif;
- font-size: @font_normal@;
- line-height: 23px;
-}
-
-h1 {
- font-size: @metro_font_xlarge@;
- font-weight: normal;
- line-height: @metro_spacing_large@;
-}
-h2 {
- font-size: @metro_font_large@;
- line-height: @metro_spacing_xxxnormal@;
- font-weight: normal;
-}
-h3 {
- font-size: @font_normal@;
- line-height: @metro_spacing_xxnormal@;
-}
-h4 {
- font-size: @font_normal@;
- line-height: @metro_spacing_xxnormal@;
- font-style: italic;
- display: inline;
-}
-
-/*
- * Net error page styles
- */
-
-a {
- text-decoration: none;
-}
-
-ul {
- margin: 0px;
- padding: 0px 0px 0px 1em;
-}
-
-li {
- margin: 0px;
- padding: 8px 0px;
-}
-
-#errorPage.certerror, #errorPage.blockedsite {
- background-color: @error_page_background_color@;
-}
-
-#errorPage button {
- margin: 5px 10px 5px 0;
-}
-
-#errorPage > .top-decoration {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 25px;
-}
-
-#errorPage.certerror > .top-decoration {
- background: linear-gradient(-45deg,
- @error_page_background_color@ 25%,
- @error_page_warning_color@ 25%,
- @error_page_warning_color@ 50%,
- @error_page_background_color@ 50%,
- @error_page_background_color@ 75%,
- @error_page_warning_color@ 75%,
- @error_page_warning_color@) repeat scroll 0% 0% /
- 80px 80px transparent;
-}
-
-#errorPage.blockedsite > .top-decoration {
- background: linear-gradient(-45deg,
- @error_page_background_color@ 25%,
- @error_page_error_color@ 25%,
- @error_page_error_color@ 50%,
- @error_page_background_color@ 50%,
- @error_page_background_color@ 75%,
- @error_page_error_color@ 75%,
- @error_page_error_color@) repeat scroll 0% 0% /
- 80px 80px transparent;
-}
-
-#errorPage #cert_domain_link {
- color: #0095dd;
-}
-
-#errorPage.certerror #errorPageContainer > .section-header,
-#errorPage.blockedsite #errorPageContainer > .section-header {
- border-bottom: @metro_border_thin@ solid rgb(133,137,140);
-}
-
-#errorPageContainer {
- max-width: 628px;
- margin-left: auto;
- margin-right: auto;
- margin-top: 60px;
- -moz-padding-start: 40px;
- -moz-padding-end: 24px;
-}
-
-#errorTitleIcon {
- background-image: url("chrome://browser/skin/images/errorpage-warning.png");
- background-position: center center;
- background-repeat: no-repeat;
- background-size: 40px 40px;
- background-origin: content-box;
- display: inline-block;
- -moz-margin-start: -64px;
- -moz-margin-end: 24px;
- height: 40px;
- vertical-align: middle;
- width: 40px;
-}
-
-#errorPage.certerror #errorTitleIcon, #errorPage.blockedsite #errorTitleIcon {
- background-size: 60px 60px;
- width: 60px;
- height: 60px;
- -moz-margin-start: -80px;
- -moz-margin-end: 10px;
-}
-
-#errorPage.certerror #errorTitleIcon {
- background-image: url("chrome://browser/skin/images/errorpage-cert-untrusted.png");
-}
-
-#errorPage.blockedsite #errorTitleIcon {
- background-image: url("chrome://browser/skin/images/errorpage-blocked-site.png");
-}
-
-@media (min-resolution: @min_res_140pc@) {
- /* Load 140% image when scaled by 140% */
- #errorTitleIcon {
- background-image: url("chrome://browser/skin/images/errorpage-warning@1.4x.png");
- }
-
- #errorPage.certerror #errorTitleIcon {
- background-image: url("chrome://browser/skin/images/errorpage-cert-untrusted@1.4x.png");
- }
-
- #errorPage.blockedsite #errorTitleIcon {
- background-image: url("chrome://browser/skin/images/errorpage-blocked-site@1.4x.png");
- }
-}
-
-@media (min-resolution: @min_res_180pc@) {
- /* Load 180% image when scaled by 180% */
- #errorTitleIcon {
- background-image: url("chrome://browser/skin/images/errorpage-warning@1.8x.png");
- }
-
- #errorPage.certerror #errorTitleIcon {
- background-image: url("chrome://browser/skin/images/errorpage-cert-untrusted@1.8x.png");
- }
-
- #errorPage.blockedsite #errorTitleIcon {
- background-image: url("chrome://browser/skin/images/errorpage-blocked-site@1.8x.png");
- }
-}
-
-@media (max-width: 760px) {
- #errorPage.certerror #errorTitleIcon, #errorPage.blockedsite #errorTitleIcon {
- display: block;
- -moz-margin-start: 0;
- -moz-margin-end: 0;
- }
-}
-
-.errorTitleText {
- padding: 0;
- display: inline-block;
- vertical-align: middle;
-}
-
-#errorPageContainer > .section-header {
- border-bottom: @metro_border_thin@ solid @border_color@;
- margin-top: @metro_spacing_xxxnormal@;
- padding-bottom: @metro_spacing_snormal@;
-}
-
-#errorPageContainer > .section-details {
- margin-top: @metro_spacing_xxxnormal@;
- padding-bottom: @metro_spacing_xxxnormal@;
-}
-
-#errorPageContainer > .section-footer {
- padding-bottom: @metro_spacing_xxxnormal@;
-}
-
-#errorShortDesc > p:empty {
- display: none;
-}
-
-#errorShortDesc > p {
- overflow: auto;
- padding-bottom: 1em;
- margin: 0;
-}
-
-#errorPage.blockedsite #errorShortDesc > p {
- font-weight: bold;
- border-bottom: none;
- padding-bottom: 0px;
-}
-
-
-#detailsLink {
- color: black;
- display: table-row;
-}
-
-#detailsGrid {
- display: table;
-}
-
-#detailsContainer {
- display: table-row;
-}
-
-#detailsLinkLabel {
- display: table-cell;
-}
-
-.detailsSpacer {
- display: table-cell;
- padding-right: 8px;
-}
-
-#securityOverrideDiv {
- padding-top: 10px;
-}
-
-.expandable-section {
- background: url("chrome://browser/skin/images/arrowdown-16.png") no-repeat left 0.6em;
- background-size: 11px 11px;
-}
-
-.expandable-section[collapsed] {
- background-image: url("chrome://browser/skin/images/arrowright-16.png");
-}
-
-.expandable-section[collapsed] > .expandable-content {
- display: none;
-}
-
-.expandable-section > .expandable-heading {
- cursor: pointer;
- -moz-padding-start: 15px;
- -moz-user-select: none;
-}
diff --git a/browser/metro/theme/platform.css b/browser/metro/theme/platform.css
deleted file mode 100644
index cdbd1384eb5..00000000000
--- a/browser/metro/theme/platform.css
+++ /dev/null
@@ -1,926 +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/. */
-
-/* Global Skin ------------------------------------------------------------- */
-
-@import url(chrome://global/skin/);
-
-%filter substitution
-%include defines.inc
-
-/* Typography & General Styling -------------------------------------------- */
-
-::-moz-selection {
- color: white;
- background-color: @metro_orange@;
-}
-
-:root {
- font-family: "Segoe UI", sans-serif !important;
- font-size: @font_normal@;
-}
-
-.text-link {
- color: @metro_orange@;
- text-decoration: none;
-}
-
-textbox,
-menulist {
- -moz-appearance: none;
- min-width: @field_sizing@; /* button size */
- min-height: @field_sizing@; /* button size */
- margin: @metro_spacing_small@;
- padding: @metro_spacing_xsmall@ @metro_spacing_small@;
-
- font-size: @metro_font_normal@;
- font-weight: normal !important;
-
- color: @field_foreground_color@;
- background: @field_background_color@;
- border: @metro_border_thick@ solid @field_foreground_color@ !important;
- border-radius: 0;
-}
-
-textbox[disabled],
-menulist[disabled] {
- border-color: @field_disabled_foreground_color@ !important;
- color: @field_disabled_foreground_color@;
-}
-
-menulist:not([disabled]):hover:active {
- color: @field_background_color@;
- background: @field_foreground_color@;
-}
-
-/* Button ------------------------------------------------------------------ */
-
-button {
- -moz-appearance: none;
- border: 1px solid;
- font-size: @metro_font_normal@;
- font-weight: normal;
- margin: @metro_spacing_small@;
- min-width: @field_sizing@;
- min-height: 32px;
- padding: 3px 16px;
-}
-
-/* Non-default button colors */
-
-button {
- background: linear-gradient(to bottom, hsl(210, 5%, 89%), hsl(210, 5%, 87%));
- border-color: hsl(220, 5%, 86%);
- color: hsl(0, 0%, 10%);
-}
-
-button:not([disabled]):hover {
- background: linear-gradient(to bottom, hsl(210, 5%, 75%), hsl(210, 5%, 73%));
- border-color: hsl(210, 5%, 71%);
- color: hsl(0, 0%, 10%);
-}
-
-/* Default button colors */
-
-button[default],
-.notification-button-default {
- background: linear-gradient(to bottom, hsl(35, 100%, 50%), hsl(30, 100%, 50%));
- border-color: hsl(30, 100%, 48%);
- color: white;
-}
-
-button[default]:not([disabled]):hover,
-.notification-button-default:not([disabled]):hover {
- background: linear-gradient(to bottom, hsl(25, 100%, 47%), hsl(25, 100%, 45%));
- border-color: hsl(25, 100%, 43%);
- color: white;
-}
-
-/* Pushed button colors (both default and non-default */
-
-/* Note: these need enough specificity to override all the :hover rules above. */
-button:not([disabled]):hover:active,
-button:not([disabled])[checked="true"],
-button[default]:not([disabled])[checked="true"],
-.notification-button-default:not([disabled])[checked="true"] {
- background: linear-gradient(to bottom, hsl(210, 5%, 28%), hsl(210, 5%, 25%));
- border-color: hsl(216, 4%, 27%);
- color: white;
-}
-
-/* Disabled button colors (both default and non-default */
-
-button[disabled] {
- background: linear-gradient(to bottom, hsl(210, 3%, 93%), hsl(210, 3%, 92%));
- border-color: hsl(210, 3%, 91%);
- color: hsl(0, 0%, 60%);
-}
-
-/* Textbox ----------------------------------------------------------------- */
-
-textbox[isempty="true"] {
- color: @field_mid_foreground_color@;
-}
-
-spinbuttons {
- border: none;
-}
-
-.spinbuttons-box {
- border: none;
- -moz-box-orient: horizontal;
- -moz-box-direction: reverse;
-}
-
-.spinbuttons-down,
-.spinbuttons-up {
- border: none !important;
-}
-
-.spinbuttons-down {
- list-style-image: url("chrome://browser/skin/images/arrowdown-16.png");
-}
-
-.spinbuttons-up {
- list-style-image: url("chrome://browser/skin/images/arrowup-16.png");
-}
-
-/* Menu List --------------------------------------------------------------- */
-
-menulist {
- -moz-user-focus: ignore;
- padding: @metro_spacing_xsmall@ 0;
- -moz-padding-start: @metro_spacing_small@;
- border-color: @field_disabled_foreground_color@ !important;
-}
-
-/* Popup Menus ------------------------------------------------------------- */
-
-.menu-container {
- position: absolute;
- opacity: 0;
-}
-
-.menu-container[showingfrom="below"] {
- transform: translateY(@metro_spacing_normal@);
-}
-
-.menu-container[showingfrom="above"] {
- transform: translateY(-@metro_spacing_normal@);
-}
-
-.menu-container[hiding],
-.menu-container[showing] {
- transition: opacity ease-out 0.2s,
- transform ease-out 0.2s;
-}
-
-.menu-container[showing] {
- opacity: 1;
- transform: none;
-}
-
-.menu-popup > richlistbox {
- padding: 3px 0;
- border: #000 solid @metro_border_thick@;
- -moz-appearance: none;
- display: -moz-box;
-}
-
-.menu-popup > richlistbox > scrollbox {
- width: 100%;
- overflow-x: hidden !important;
-}
-
-.menu-popup richlistitem {
- width: 100%;
- min-height: @touch_button_small@;
- min-width: @touch_action_minwidth@; /* keep the button from being too narrow */
- border: 0 none;
- -moz-box-align: center;
- font-weight: 600;
-}
-.menu-popup > richlistbox > richlistitem {
- -moz-padding-end: 50px;
-}
-/* Additional styles applied to popups for form