Bug 1524688: Part 6 - Convert profile migrators to static registration r=MattN
☠☠ backed out by 3b1b94e39795 ☠ ☠
authorKris Maglione <maglione.k@gmail.com>
Tue, 29 Jan 2019 18:20:19 -0800
changeset 458979 ab64ed7388ae
parent 458978 56607c5a301a
child 458980 5ce5986068f0
push id111909
push usermaglione.k@gmail.com
push dateThu, 14 Feb 2019 02:30:40 +0000
treeherdermozilla-inbound@81dc12cc9257 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersMattN
bugs1524688
milestone67.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1524688: Part 6 - Convert profile migrators to static registration r=MattN
browser/components/migration/360seProfileMigrator.js
browser/components/migration/360seProfileMigrator.jsm
browser/components/migration/BrowserProfileMigrators.manifest
browser/components/migration/ChromeProfileMigrator.js
browser/components/migration/ChromeProfileMigrator.jsm
browser/components/migration/EdgeProfileMigrator.js
browser/components/migration/EdgeProfileMigrator.jsm
browser/components/migration/FirefoxProfileMigrator.js
browser/components/migration/FirefoxProfileMigrator.jsm
browser/components/migration/IEProfileMigrator.js
browser/components/migration/IEProfileMigrator.jsm
browser/components/migration/ProfileMigrator.js
browser/components/migration/ProfileMigrator.jsm
browser/components/migration/SafariProfileMigrator.js
browser/components/migration/SafariProfileMigrator.jsm
browser/components/migration/components.conf
browser/components/migration/moz.build
browser/installer/package-manifest.in
rename from browser/components/migration/360seProfileMigrator.js
rename to browser/components/migration/360seProfileMigrator.jsm
--- a/browser/components/migration/360seProfileMigrator.js
+++ b/browser/components/migration/360seProfileMigrator.jsm
@@ -316,9 +316,9 @@ Qihoo360seProfileMigrator.prototype.getL
     return new Date(Math.max.apply(Math, dates));
   });
 };
 
 Qihoo360seProfileMigrator.prototype.classDescription = "360 Secure Browser Profile Migrator";
 Qihoo360seProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=360se";
 Qihoo360seProfileMigrator.prototype.classID = Components.ID("{d0037b95-296a-4a4e-94b2-c3d075d20ab1}");
 
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([Qihoo360seProfileMigrator]);
+var EXPORTED_SYMBOLS = ["Qihoo360seProfileMigrator"];
deleted file mode 100644
--- a/browser/components/migration/BrowserProfileMigrators.manifest
+++ /dev/null
@@ -1,38 +0,0 @@
-component {6F8BB968-C14F-4D6F-9733-6C6737B35DCE} ProfileMigrator.js
-contract @mozilla.org/toolkit/profile-migrator;1 {6F8BB968-C14F-4D6F-9733-6C6737B35DCE}
-
-#if defined(XP_WIN) || defined(XP_MACOSX)
-component {4bf85aa5-4e21-46ca-825f-f9c51a5e8c76} ChromeProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=canary {4bf85aa5-4e21-46ca-825f-f9c51a5e8c76}
-#else
-component {47f75963-840b-4950-a1f0-d9c1864f8b8e} ChromeProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=chrome-beta {47f75963-840b-4950-a1f0-d9c1864f8b8e}
-component {7370a02a-4886-42c3-a4ec-d48c726ec30a} ChromeProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=chrome-dev {7370a02a-4886-42c3-a4ec-d48c726ec30a}
-#endif
-component {4cec1de4-1671-4fc3-a53e-6c539dc77a26} ChromeProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=chrome {4cec1de4-1671-4fc3-a53e-6c539dc77a26}
-component {8cece922-9720-42de-b7db-7cef88cb07ca} ChromeProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=chromium {8cece922-9720-42de-b7db-7cef88cb07ca}
-
-component {91185366-ba97-4438-acba-48deaca63386} FirefoxProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=firefox {91185366-ba97-4438-acba-48deaca63386}
-
-#ifdef HAS_IE_MIGRATOR
-component {3d2532e3-4932-4774-b7ba-968f5899d3a4} IEProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=ie {3d2532e3-4932-4774-b7ba-968f5899d3a4}
-#endif
-
-#ifdef HAS_EDGE_MIGRATOR
-component {62e8834b-2d17-49f5-96ff-56344903a2ae} EdgeProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=edge {62e8834b-2d17-49f5-96ff-56344903a2ae}
-#endif
-
-#ifdef HAS_SAFARI_MIGRATOR
-component {4b609ecf-60b2-4655-9df4-dc149e474da1} SafariProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=safari {4b609ecf-60b2-4655-9df4-dc149e474da1}
-#endif
-#ifdef HAS_360SE_MIGRATOR
-component {d0037b95-296a-4a4e-94b2-c3d075d20ab1} 360seProfileMigrator.js
-contract @mozilla.org/profile/migrator;1?app=browser&type=360se {d0037b95-296a-4a4e-94b2-c3d075d20ab1}
-#endif
rename from browser/components/migration/ChromeProfileMigrator.js
rename to browser/components/migration/ChromeProfileMigrator.jsm
--- a/browser/components/migration/ChromeProfileMigrator.js
+++ b/browser/components/migration/ChromeProfileMigrator.jsm
@@ -11,17 +11,16 @@ const AUTH_TYPE = {
   SCHEME_BASIC: 1,
   SCHEME_DIGEST: 2,
 };
 
 const {AppConstants} = ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
 const {NetUtil} = ChromeUtils.import("resource://gre/modules/NetUtil.jsm");
 const {OS} = ChromeUtils.import("resource://gre/modules/osfile.jsm");
 const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 const {ChromeMigrationUtils} = ChromeUtils.import("resource:///modules/ChromeMigrationUtils.jsm");
 const {MigrationUtils, MigratorPrototype} = ChromeUtils.import("resource:///modules/MigrationUtils.jsm");
 
 ChromeUtils.defineModuleGetter(this, "PlacesUtils",
                                "resource://gre/modules/PlacesUtils.jsm");
 ChromeUtils.defineModuleGetter(this, "OSCrypto",
                                "resource://gre/modules/OSCrypto.jsm");
 
@@ -427,32 +426,32 @@ function ChromiumProfileMigrator() {
   this._chromeUserDataPathSuffix = "Chromium";
 }
 
 ChromiumProfileMigrator.prototype = Object.create(ChromeProfileMigrator.prototype);
 ChromiumProfileMigrator.prototype.classDescription = "Chromium Profile Migrator";
 ChromiumProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=chromium";
 ChromiumProfileMigrator.prototype.classID = Components.ID("{8cece922-9720-42de-b7db-7cef88cb07ca}");
 
-var componentsArray = [ChromeProfileMigrator, ChromiumProfileMigrator];
+var EXPORTED_SYMBOLS = ["ChromeProfileMigrator", "ChromiumProfileMigrator"];
 
 /**
  * Chrome Canary
  * Not available on Linux
  **/
 function CanaryProfileMigrator() {
   this._chromeUserDataPathSuffix = "Canary";
 }
 CanaryProfileMigrator.prototype = Object.create(ChromeProfileMigrator.prototype);
 CanaryProfileMigrator.prototype.classDescription = "Chrome Canary Profile Migrator";
 CanaryProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=canary";
 CanaryProfileMigrator.prototype.classID = Components.ID("{4bf85aa5-4e21-46ca-825f-f9c51a5e8c76}");
 
 if (AppConstants.platform == "win" || AppConstants.platform == "macosx") {
-  componentsArray.push(CanaryProfileMigrator);
+  EXPORTED_SYMBOLS.push("CanaryProfileMigrator");
 }
 
 /**
  * Chrome Dev / Unstable and Beta. Only separate from `regular` chrome on Linux
  */
 if (AppConstants.platform != "win" && AppConstants.platform != "macosx") {
   function ChromeDevMigrator() {
     this._chromeUserDataPathSuffix = "Chrome Dev";
@@ -465,12 +464,10 @@ if (AppConstants.platform != "win" && Ap
   function ChromeBetaMigrator() {
     this._chromeUserDataPathSuffix = "Chrome Beta";
   }
   ChromeBetaMigrator.prototype = Object.create(ChromeProfileMigrator.prototype);
   ChromeBetaMigrator.prototype.classDescription = "Chrome Beta Profile Migrator";
   ChromeBetaMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=chrome-beta";
   ChromeBetaMigrator.prototype.classID = Components.ID("{47f75963-840b-4950-a1f0-d9c1864f8b8e}");
 
-  componentsArray.push(ChromeDevMigrator, ChromeBetaMigrator);
+  EXPORTED_SYMBOLS.push("ChromeDevMigrator", "ChromeBetaMigrator");
 }
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory(componentsArray);
rename from browser/components/migration/EdgeProfileMigrator.js
rename to browser/components/migration/EdgeProfileMigrator.jsm
--- a/browser/components/migration/EdgeProfileMigrator.js
+++ b/browser/components/migration/EdgeProfileMigrator.jsm
@@ -491,9 +491,9 @@ EdgeProfileMigrator.prototype.__defineGe
   return true;
 });
 
 
 EdgeProfileMigrator.prototype.classDescription = "Edge Profile Migrator";
 EdgeProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=edge";
 EdgeProfileMigrator.prototype.classID = Components.ID("{62e8834b-2d17-49f5-96ff-56344903a2ae}");
 
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([EdgeProfileMigrator]);
+var EXPORTED_SYMBOLS = ["EdgeProfileMigrator"];
rename from browser/components/migration/FirefoxProfileMigrator.js
rename to browser/components/migration/FirefoxProfileMigrator.jsm
--- a/browser/components/migration/FirefoxProfileMigrator.js
+++ b/browser/components/migration/FirefoxProfileMigrator.jsm
@@ -8,17 +8,16 @@
 
 /*
  * Migrates from a Firefox profile in a lossy manner in order to clean up a
  * user's profile.  Data is only migrated where the benefits outweigh the
  * potential problems caused by importing undesired/invalid configurations
  * from the source profile.
  */
 
-const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 const {MigrationUtils, MigratorPrototype} = ChromeUtils.import("resource:///modules/MigrationUtils.jsm");
 const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
 ChromeUtils.defineModuleGetter(this, "PlacesBackups",
                                "resource://gre/modules/PlacesBackups.jsm");
 ChromeUtils.defineModuleGetter(this, "SessionMigration",
                                "resource:///modules/sessionstore/SessionMigration.jsm");
 ChromeUtils.defineModuleGetter(this, "OS",
@@ -271,9 +270,9 @@ Object.defineProperty(FirefoxProfileMigr
   get: () => true,
 });
 
 
 FirefoxProfileMigrator.prototype.classDescription = "Firefox Profile Migrator";
 FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=firefox";
 FirefoxProfileMigrator.prototype.classID = Components.ID("{91185366-ba97-4438-acba-48deaca63386}");
 
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([FirefoxProfileMigrator]);
+var EXPORTED_SYMBOLS = ["FirefoxProfileMigrator"];
rename from browser/components/migration/IEProfileMigrator.js
rename to browser/components/migration/IEProfileMigrator.jsm
--- a/browser/components/migration/IEProfileMigrator.js
+++ b/browser/components/migration/IEProfileMigrator.jsm
@@ -351,9 +351,9 @@ IEProfileMigrator.prototype.getLastUsedD
     return new Date(Math.max.apply(Math, dates));
   });
 };
 
 IEProfileMigrator.prototype.classDescription = "IE Profile Migrator";
 IEProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=ie";
 IEProfileMigrator.prototype.classID = Components.ID("{3d2532e3-4932-4774-b7ba-968f5899d3a4}");
 
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([IEProfileMigrator]);
+var EXPORTED_SYMBOLS = ["IEProfileMigrator"];
rename from browser/components/migration/ProfileMigrator.js
rename to browser/components/migration/ProfileMigrator.jsm
--- a/browser/components/migration/ProfileMigrator.js
+++ b/browser/components/migration/ProfileMigrator.jsm
@@ -1,21 +1,20 @@
 /* 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";
 
-const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 const {MigrationUtils} = ChromeUtils.import("resource:///modules/MigrationUtils.jsm");
 
 function ProfileMigrator() {
 }
 
 ProfileMigrator.prototype = {
   migrate: MigrationUtils.startupMigration.bind(MigrationUtils),
   QueryInterface: ChromeUtils.generateQI([Ci.nsIProfileMigrator]),
   classDescription: "Profile Migrator",
   contractID: "@mozilla.org/toolkit/profile-migrator;1",
   classID: Components.ID("6F8BB968-C14F-4D6F-9733-6C6737B35DCE"),
 };
 
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([ProfileMigrator]);
+var EXPORTED_SYMBOLS = ["ProfileMigrator"];
rename from browser/components/migration/SafariProfileMigrator.js
rename to browser/components/migration/SafariProfileMigrator.jsm
--- a/browser/components/migration/SafariProfileMigrator.js
+++ b/browser/components/migration/SafariProfileMigrator.jsm
@@ -377,9 +377,9 @@ Object.defineProperty(SafariProfileMigra
     return this._mainPreferencesPropertyList;
   },
 });
 
 SafariProfileMigrator.prototype.classDescription = "Safari Profile Migrator";
 SafariProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=safari";
 SafariProfileMigrator.prototype.classID = Components.ID("{4b609ecf-60b2-4655-9df4-dc149e474da1}");
 
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([SafariProfileMigrator]);
+var EXPORTED_SYMBOLS = ["SafariProfileMigrator"];
new file mode 100644
--- /dev/null
+++ b/browser/components/migration/components.conf
@@ -0,0 +1,92 @@
+# -*- Mode: python; 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/.
+
+XP_WIN = buildconfig.substs['OS_ARCH'] == 'WINNT'
+XP_MACOSX = buildconfig.substs['MOZ_WIDGET_TOOLKIT'] == 'cocoa'
+
+Classes = [
+    {
+        'cid': '{6F8BB968-C14F-4D6F-9733-6C6737B35DCE}',
+        'contract_ids': ['@mozilla.org/toolkit/profile-migrator;1'],
+        'jsm': 'resource:///modules/ProfileMigrator.jsm',
+        'constructor': 'ProfileMigrator',
+    },
+    {
+        'cid': '{4cec1de4-1671-4fc3-a53e-6c539dc77a26}',
+        'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=chrome'],
+        'jsm': 'resource:///modules/ChromeProfileMigrator.jsm',
+        'constructor': 'ChromeProfileMigrator',
+    },
+    {
+        'cid': '{8cece922-9720-42de-b7db-7cef88cb07ca}',
+        'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=chromium'],
+        'jsm': 'resource:///modules/ChromeProfileMigrator.jsm',
+        'constructor': 'ChromiumProfileMigrator',
+    },
+    {
+        'cid': '{91185366-ba97-4438-acba-48deaca63386}',
+        'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=firefox'],
+        'jsm': 'resource:///modules/FirefoxProfileMigrator.jsm',
+        'constructor': 'FirefoxProfileMigrator',
+    },
+]
+
+if XP_WIN or XP_MACOSX:
+    Classes += [
+        {
+            'cid': '{4bf85aa5-4e21-46ca-825f-f9c51a5e8c76}',
+            'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=canary'],
+            'jsm': 'resource:///modules/ChromeProfileMigrator.jsm',
+            'constructor': 'CanaryProfileMigrator',
+        },
+    ]
+else:
+    Classes += [
+        {
+            'cid': '{47f75963-840b-4950-a1f0-d9c1864f8b8e}',
+            'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=chrome-beta'],
+            'jsm': 'resource:///modules/ChromeProfileMigrator.jsm',
+            'constructor': '  ChromeBetaMigrator',
+        },
+        {
+            'cid': '{7370a02a-4886-42c3-a4ec-d48c726ec30a}',
+            'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=chrome-dev'],
+            'jsm': 'resource:///modules/ChromeProfileMigrator.jsm',
+            'constructor': '  ChromeDevMigrator',
+        },
+    ]
+
+if XP_WIN:
+    Classes += [
+        {
+            'cid': '{3d2532e3-4932-4774-b7ba-968f5899d3a4}',
+            'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=ie'],
+            'jsm': 'resource:///modules/IEProfileMigrator.jsm',
+            'constructor': 'IEProfileMigrator',
+        },
+        {
+            'cid': '{62e8834b-2d17-49f5-96ff-56344903a2ae}',
+            'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=edge'],
+            'jsm': 'resource:///modules/EdgeProfileMigrator.jsm',
+            'constructor': 'EdgeProfileMigrator',
+        },
+        {
+            'cid': '{d0037b95-296a-4a4e-94b2-c3d075d20ab1}',
+            'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=360se'],
+            'jsm': 'resource:///modules/360seProfileMigrator.jsm',
+            'constructor': 'Qihoo360seProfileMigrator',
+        },
+    ]
+
+if XP_MACOSX:
+    Classes += [
+        {
+            'cid': '{4b609ecf-60b2-4655-9df4-dc149e474da1}',
+            'contract_ids': ['@mozilla.org/profile/migrator;1?app=browser&type=safari'],
+            'jsm': 'resource:///modules/SafariProfileMigrator.jsm',
+            'constructor': 'SafariProfileMigrator',
+        },
+    ]
--- a/browser/components/migration/moz.build
+++ b/browser/components/migration/moz.build
@@ -11,50 +11,41 @@ MARIONETTE_UNIT_MANIFESTS += ['tests/mar
 JAR_MANIFESTS += ['jar.mn']
 
 XPIDL_SOURCES += [
     'nsIBrowserProfileMigrator.idl',
 ]
 
 XPIDL_MODULE = 'migration'
 
-EXTRA_COMPONENTS += [
-    'ChromeProfileMigrator.js',
-    'FirefoxProfileMigrator.js',
-    'ProfileMigrator.js',
-]
-
-EXTRA_PP_COMPONENTS += [
-    'BrowserProfileMigrators.manifest',
-]
-
 EXTRA_JS_MODULES += [
     'ChromeMigrationUtils.jsm',
+    'ChromeProfileMigrator.jsm',
+    'FirefoxProfileMigrator.jsm',
     'MigrationUtils.jsm',
+    'ProfileMigrator.jsm',
 ]
 
 if CONFIG['OS_ARCH'] == 'WINNT':
     SOURCES += [
         'nsIEHistoryEnumerator.cpp',
     ]
-    EXTRA_COMPONENTS += [
-        '360seProfileMigrator.js',
-        'EdgeProfileMigrator.js',
-        'IEProfileMigrator.js',
-    ]
     EXTRA_JS_MODULES += [
+        '360seProfileMigrator.jsm',
+        'EdgeProfileMigrator.jsm',
         'ESEDBReader.jsm',
+        'IEProfileMigrator.jsm',
         'MSMigrationUtils.jsm',
     ]
-    DEFINES['HAS_360SE_MIGRATOR'] = True
-    DEFINES['HAS_IE_MIGRATOR'] = True
-    DEFINES['HAS_EDGE_MIGRATOR'] = True
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
-    EXTRA_COMPONENTS += [
-        'SafariProfileMigrator.js',
+    EXTRA_JS_MODULES += [
+        'SafariProfileMigrator.jsm',
     ]
-    DEFINES['HAS_SAFARI_MIGRATOR'] = True
+
+XPCOM_MANIFESTS += [
+    'components.conf',
+]
 
 FINAL_LIBRARY = 'browsercomps'
 
 with Files('**'):
     BUG_COMPONENT = ('Firefox', 'Migration')
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -249,27 +249,17 @@
 @RESPATH@/components/nsWebHandlerApp.manifest
 @RESPATH@/components/nsWebHandlerApp.js
 @RESPATH@/components/satchel.manifest
 @RESPATH@/components/nsFormAutoComplete.js
 @RESPATH@/components/FormHistoryStartup.js
 @RESPATH@/components/nsInputListAutoComplete.js
 @RESPATH@/components/contentAreaDropListener.manifest
 @RESPATH@/components/contentAreaDropListener.js
-@RESPATH@/browser/components/BrowserProfileMigrators.manifest
-@RESPATH@/browser/components/ProfileMigrator.js
-@RESPATH@/browser/components/ChromeProfileMigrator.js
-@RESPATH@/browser/components/FirefoxProfileMigrator.js
-#ifdef XP_WIN
-@RESPATH@/browser/components/360seProfileMigrator.js
-@RESPATH@/browser/components/EdgeProfileMigrator.js
-@RESPATH@/browser/components/IEProfileMigrator.js
-#endif
 #ifdef XP_MACOSX
-@RESPATH@/browser/components/SafariProfileMigrator.js
 @RESPATH@/browser/components/MacTouchBar.manifest
 @RESPATH@/browser/components/MacTouchBar.js
 #endif
 @RESPATH@/components/nsPrompter.manifest
 @RESPATH@/components/nsPrompter.js
 @RESPATH@/components/SyncComponents.manifest
 @RESPATH@/components/Weave.js
 @RESPATH@/components/FxAccountsComponents.manifest