Bug 1229519: Fix miscellaneous parts of toolkit to pass eslint checks. r=MattN
authorDave Townsend <dtownsend@oxymoronical.com>
Thu, 03 Dec 2015 10:02:45 -0800
changeset 309771 2489a4b3a2a5fc17675499e56072ff4ef1a76d32
parent 309770 a258f7e89c8bdfda345641cf302b94cadcdcf06d
child 309772 de962dcbc06c89cfb889426b0a6d7d56a4deffe4
push id5513
push userraliiev@mozilla.com
push dateMon, 25 Jan 2016 13:55:34 +0000
treeherdermozilla-beta@5ee97dd05b5c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersMattN
bugs1229519
milestone45.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 1229519: Fix miscellaneous parts of toolkit to pass eslint checks. r=MattN
.eslintignore
toolkit/components/aboutperformance/content/aboutPerformance.js
toolkit/components/aboutperformance/tests/browser/browser_aboutperformance.js
toolkit/components/apppicker/content/appPicker.js
toolkit/components/apppicker/jar.mn
toolkit/components/filewatcher/tests/xpcshell/test_arguments.js
toolkit/components/lz4/tests/xpcshell/test_lz4_sync.js
toolkit/components/microformats/Microformats.js
toolkit/components/perfmonitoring/PerformanceStats.jsm
toolkit/components/promiseworker/PromiseWorker.jsm
toolkit/components/promiseworker/tests/xpcshell/test_Promise.js
toolkit/components/reader/ReaderMode.jsm
toolkit/components/search/tests/xpcshell/test_rel_searchform.js
toolkit/components/social/test/xpcshell/head.js
toolkit/components/social/test/xpcshell/test_SocialService.js
toolkit/components/social/test/xpcshell/test_SocialServiceMigration21.js
toolkit/components/social/test/xpcshell/test_SocialServiceMigration22.js
toolkit/components/social/test/xpcshell/test_SocialServiceMigration29.js
toolkit/components/startup/tests/unit/test_startup_crash.js
toolkit/components/terminator/nsTerminatorTelemetry.js
toolkit/components/viewsource/test/browser/browser_contextmenu.js
toolkit/components/workerloader/tests/moduleB-dependency.js
toolkit/components/workerloader/tests/moduleC-circular.js
toolkit/components/workerloader/tests/moduleD-circular.js
toolkit/components/workerloader/tests/moduleE-throws-during-require.js
toolkit/components/workerloader/tests/moduleG-throws-later.js
toolkit/crashreporter/content/crashes.js
toolkit/crashreporter/test/unit_ipc/test_content_annotation.js
toolkit/forgetaboutsite/ForgetAboutSite.jsm
toolkit/forgetaboutsite/test/unit/test_removeDataFromDomain.js
toolkit/profile/content/createProfileWizard.js
toolkit/profile/content/profileSelection.js
toolkit/profile/jar.mn
--- a/.eslintignore
+++ b/.eslintignore
@@ -39,39 +39,16 @@ parser/**
 probes/**
 python/**
 rdf/**
 security/**
 services/**
 startupcache/**
 storage/**
 testing/**
-toolkit/components/**
-toolkit/content/**
-toolkit/crashreporter/**
-toolkit/forgetaboutsite/**
-toolkit/identity/**
-toolkit/library/**
-toolkit/locales/**
-toolkit/modules/**
-# This file contains preprocessor statements.
-toolkit/mozapps/extensions/internal/AddonConstants.jsm
-toolkit/mozapps/downloads/**
-toolkit/mozapps/handling/**
-toolkit/mozapps/installer/**
-toolkit/mozapps/preferences/**
-toolkit/mozapps/update/**
-toolkit/obsolete/**
-toolkit/pluginproblem/**
-toolkit/profile/**
-toolkit/system/**
-toolkit/themes/**
-toolkit/toolkit.mozbuild/**
-toolkit/webapps/**
-toolkit/xre/**
 tools/**
 uriloader/**
 view/**
 webapprt/**
 widget/**
 xpcom/**
 xpfe/**
 xulrunner/**
@@ -191,8 +168,39 @@ mobile/android/modules/ContactService.js
 #   https://github.com/eslint/espree/issues/125
 mobile/android/modules/WebappManager.jsm
 
 # Non-standard `(catch ex if ...)`
 mobile/android/components/Snippets.js
 
 # Bug 1178739: Ignore this file as a quick fix for "Illegal yield expression"
 mobile/android/modules/HomeProvider.jsm
+
+# toolkit/ exclusions
+
+# Not part of the default build
+toolkit/components/help/**
+
+# Intentionally invalid JS
+toolkit/components/workerloader/tests/moduleF-syntax-error.js
+
+# Tests old non-star function generators
+toolkit/modules/tests/xpcshell/test_task.js
+
+# Not yet updated
+toolkit/components/osfile/**
+toolkit/components/passwordmgr/**
+toolkit/components/places/**
+toolkit/mozapps/extensions/**
+
+# Uses preprocessing
+toolkit/content/contentAreaUtils.js
+toolkit/components/jsdownloads/src/DownloadIntegration.jsm
+toolkit/components/search/nsSearchService.js
+toolkit/components/url-classifier/**
+toolkit/components/urlformatter/nsURLFormatter.js
+toolkit/identity/FirefoxAccounts.jsm 
+toolkit/modules/AppConstants.jsm
+toolkit/modules/SessionRecorder.jsm
+toolkit/mozapps/downloads/nsHelperAppDlg.js
+toolkit/mozapps/extensions/internal/AddonConstants.jsm
+toolkit/mozapps/update/tests/data/xpcshellConstantsPP.js
+toolkit/webapps/**
--- a/toolkit/components/aboutperformance/content/aboutPerformance.js
+++ b/toolkit/components/aboutperformance/content/aboutPerformance.js
@@ -556,17 +556,17 @@ var View = {
         throw new TypeError();
       }
       let cachedElements = this._grabOrCreateElements(delta, nature);
       toAdd.push(cachedElements);
       cachedElements.eltTitle.textContent = delta.readableName;
       cachedElements.eltName.textContent = `Full name: ${delta.fullName}.`;
       cachedElements.eltLoaded.textContent = `Measure start: ${Math.round(delta.age/1000)} seconds ago.`
 
-      let processes = [for (proc of delta.diff.processes) `${proc.processId} (${proc.isChildProcess?"child":"parent"})`];
+      let processes = delta.diff.processes.map(proc => `${proc.processId} (${proc.isChildProcess?"child":"parent"})`);
       cachedElements.eltProcess.textContent = `Processes: ${processes.join(", ")}`;
       let jankSuffix = "";
       let cpowSuffix = "";
       if (watcherAlerts) {
         let deltaAlerts = watcherAlerts.get(delta.diff.addonId);
         if (deltaAlerts) {
           jankSuffix = ` (${deltaAlerts.alerts.longestDuration || 0} alerts)`;
           cpowSuffix = ` (${deltaAlerts.alerts.totalCPOWTime || 0} alerts)`;
--- a/toolkit/components/aboutperformance/tests/browser/browser_aboutperformance.js
+++ b/toolkit/components/aboutperformance/tests/browser/browser_aboutperformance.js
@@ -159,18 +159,18 @@ function frameScript() {
       try {
         let eltWeb = content.document.getElementById("webpages");
         let eltAddons = content.document.getElementById("addons");
         if (!eltWeb || !eltAddons) {
           dump(`aboutperformance-test:hasItems: the page is not ready yet webpages:${eltWeb}, addons:${eltAddons}\n`);
           return;
         }
 
-        let addonTitles = [for (eltContent of eltAddons.querySelectorAll("span.title")) eltContent.textContent];
-        let webTitles = [for (eltContent of eltWeb.querySelectorAll("span.title")) eltContent.textContent];
+        let addonTitles = Array.from(eltAddons.querySelectorAll("span.title"), elt => elt.textContent);
+        let webTitles = Array.from(eltWeb.querySelectorAll("span.title"), elt => elt.textContent);
 
         hasTitleInAddons = addonTitles.includes(title);
         hasTitleInWebpages = webTitles.includes(title);
       } catch (ex) {
         Cu.reportError("Error in content: " + ex);
         Cu.reportError(ex.stack);
       } finally {
         sendAsyncMessage("aboutperformance-test:hasItems", {hasTitleInAddons, hasTitleInWebpages, mode});
--- a/toolkit/components/apppicker/content/appPicker.js
+++ b/toolkit/components/apppicker/content/appPicker.js
@@ -1,13 +1,13 @@
-# -*- 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/.
+/* 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/. */
+
+Components.utils.import("resource://gre/modules/AppConstants.jsm");
 
 function AppPicker() {};
 
 var g_dialog = null;
 
 AppPicker.prototype = 
 {
     // Class members
@@ -112,30 +112,29 @@ AppPicker.prototype =
       var urlSpec = fph.getURLSpecFromFile(file);
       return "moz-icon://" + urlSpec + "?size=32";
     },
 
     /** 
     * Retrieve the pretty description from the file
     */ 
     getFileDisplayName: function getFileDisplayName(file) {
-#ifdef XP_WIN
-      if (file instanceof Components.interfaces.nsILocalFileWin) {
-        try {
-          return file.getVersionInfoField("FileDescription");
-        } catch (e) {}
+      if (AppConstants.platform == "win") {
+        if (file instanceof Components.interfaces.nsILocalFileWin) {
+          try {
+            return file.getVersionInfoField("FileDescription");
+          } catch (e) {}
+        }
+      } else if (AppConstants.platform == "macosx") {
+        if (file instanceof Components.interfaces.nsILocalFileMac) {
+          try {
+            return file.bundleDisplayName;
+          } catch (e) {}
+        }
       }
-#endif
-#ifdef XP_MACOSX
-      if (file instanceof Components.interfaces.nsILocalFileMac) {
-        try {
-          return file.bundleDisplayName;
-        } catch (e) {}
-      }
-#endif
       return file.leafName;
     },
 
     /**
     * Double click accepts an app
     */
     appDoubleClick: function appDoubleClick() {
       var list = document.getElementById("app-picker-listbox");
@@ -181,25 +180,23 @@ AppPicker.prototype =
                createInstance(nsIFilePicker);
 
       fp.init(window, this._incomingParams.title, nsIFilePicker.modeOpen);
       fp.appendFilters(nsIFilePicker.filterApps);
       
       var fileLoc = Components.classes["@mozilla.org/file/directory_service;1"]
                             .getService(Components.interfaces.nsIProperties);
       var startLocation;
-#ifdef XP_WIN
-    startLocation = "ProgF"; // Program Files
-#else
-#ifdef XP_MACOSX
-    startLocation = "LocApp"; // Local Applications
-#else
-    startLocation = "Home";
-#endif
-#endif
+      if (AppConstants.platform == "win") {
+        startLocation = "ProgF"; // Program Files
+      } else if (AppConstants.platform == "macosx") {
+        startLocation = "LocApp"; // Local Applications
+      } else {
+        startLocation = "Home";
+      }
       fp.displayDirectory = 
         fileLoc.get(startLocation, Components.interfaces.nsILocalFile);
       
       if (fp.show() == nsIFilePicker.returnOK && fp.file) {
           var localHandlerApp = 
             Components.classes["@mozilla.org/uriloader/local-handler-app;1"].
             createInstance(Components.interfaces.nsILocalHandlerApp);
           localHandlerApp.executable = fp.file;
--- a/toolkit/components/apppicker/jar.mn
+++ b/toolkit/components/apppicker/jar.mn
@@ -1,8 +1,8 @@
 # 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/.
 
 toolkit.jar:
   content/global/appPicker.xul                     (content/appPicker.xul)
-* content/global/appPicker.js                      (content/appPicker.js)
+  content/global/appPicker.js                      (content/appPicker.js)
 
--- a/toolkit/components/filewatcher/tests/xpcshell/test_arguments.js
+++ b/toolkit/components/filewatcher/tests/xpcshell/test_arguments.js
@@ -24,24 +24,28 @@ add_task(function* test_null_args_addPat
   // expected to be called.
   let dummyFunc = function(changed) {
     do_throw("Not expected in this test.");
   };
 
   // Check for error when passing a null first argument
   try {
     watcher.addPath(testPath, null, dummyFunc);
-  } catch (ex if ex.result == Cr.NS_ERROR_NULL_POINTER) {
+  } catch (ex) {
+    if (ex.result != Cr.NS_ERROR_NULL_POINTER)
+      throw ex;
     do_print("Initialisation thrown NS_ERROR_NULL_POINTER as expected.");
   }
 
   // Check for error when passing both null arguments
   try {
     watcher.addPath(testPath, null, null);
-  } catch (ex if ex.result == Cr.NS_ERROR_NULL_POINTER) {
+  } catch (ex) {
+    if (ex.result != Cr.NS_ERROR_NULL_POINTER)
+      throw ex;
     do_print("Initialisation thrown NS_ERROR_NULL_POINTER as expected.");
   }
 });
 
 /**
  * Test for removePath usage with null arguments.
  */
 add_task(function* test_null_args_removePath() {
@@ -53,19 +57,23 @@ add_task(function* test_null_args_remove
   // expected to be called.
   let dummyFunc = function(changed) {
     do_throw("Not expected in this test.");
   };
 
   // Check for error when passing a null first argument
   try {
     watcher.removePath(testPath, null, dummyFunc);
-  } catch (ex if ex.result == Cr.NS_ERROR_NULL_POINTER) {
+  } catch (ex) {
+    if (ex.result != Cr.NS_ERROR_NULL_POINTER)
+      throw ex;
     do_print("Initialisation thrown NS_ERROR_NULL_POINTER as expected.");
   }
 
   // Check for error when passing both null arguments
   try {
     watcher.removePath(testPath, null, null);
-  } catch (ex if ex.result == Cr.NS_ERROR_NULL_POINTER) {
+  } catch (ex) {
+    if (ex.result != Cr.NS_ERROR_NULL_POINTER)
+      throw ex;
     do_print("Initialisation thrown NS_ERROR_NULL_POINTER as expected.");
   }
 });
--- a/toolkit/components/lz4/tests/xpcshell/test_lz4_sync.js
+++ b/toolkit/components/lz4/tests/xpcshell/test_lz4_sync.js
@@ -8,25 +8,25 @@ Cu.import("resource://gre/modules/osfile
 function run_test() {
   run_next_test();
 }
 
 function compare_arrays(a, b) {
   return Array.prototype.join.call(a) == Array.prototype.join.call(a);
 }
 
-add_task(function() {
+add_task(function*() {
   let path = OS.Path.join("data", "compression.lz");
   let data = yield OS.File.read(path);
   let decompressed = Lz4.decompressFileContent(data);
   let text = (new TextDecoder()).decode(decompressed);
   do_check_eq(text, "Hello, lz4");
 });
 
-add_task(function() {
+add_task(function*() {
   for (let length of [0, 1, 1024]) {
     let array = new Uint8Array(length);
     for (let i = 0; i < length; ++i) {
       array[i] = i % 256;
     }
 
     let compressed = Lz4.compressFileContent(array);
     do_print("Compressed " + array.byteLength + " bytes into " +
--- a/toolkit/components/microformats/Microformats.js
+++ b/toolkit/components/microformats/Microformats.js
@@ -4,17 +4,17 @@
 
 this.EXPORTED_SYMBOLS = ["Microformats", "adr", "tag", "hCard", "hCalendar", "geo"];
 
 this.Microformats = {
   /* When a microformat is added, the name is placed in this list */
   list: [],
   /* Custom iterator so that microformats can be enumerated as */
   /* for (i in Microformats) */
-  __iterator__: function () {
+  __iterator__: function* () {
     for (let i=0; i < this.list.length; i++) {
       yield this.list[i];
     }
   },
   /**
    * Retrieves microformats objects of the given type from a document
    * 
    * @param  name          The name of the microformat (required)
--- a/toolkit/components/perfmonitoring/PerformanceStats.jsm
+++ b/toolkit/components/perfmonitoring/PerformanceStats.jsm
@@ -398,17 +398,17 @@ function PerformanceMonitor(probes) {
   this._finalizer = finalizer.make(FINALIZATION_TOPIC, this._id)
   PerformanceMonitor._monitors.set(this._id, probes);
 }
 PerformanceMonitor.prototype = {
   /**
    * The names of probes activated in this monitor.
    */
   get probeNames() {
-    return [for (probe of this._probes) probe.name];
+    return this._probes.map(probe => probe.name);
   },
 
   /**
    * Return asynchronously a snapshot with the data
    * for each probe monitored by this PerformanceMonitor.
    *
    * All numeric values are non-negative and can only increase. Depending on
    * the probe and the underlying operating system, probes may not be available
@@ -466,17 +466,17 @@ PerformanceMonitor.prototype = {
   },
   promiseContentSnapshot: function(options = null) {
     this._checkBeforeSnapshot(options);
     return (new ProcessSnapshot(performanceStatsService.getSnapshot()));
   },
   promiseSnapshot: function(options = null) {
     let probes = this._checkBeforeSnapshot(options);
     return Task.spawn(function*() {
-      let childProcesses = yield Process.broadcastAndCollect("collect", {probeNames: [for (probe of probes) probe.name]});
+      let childProcesses = yield Process.broadcastAndCollect("collect", {probeNames: probes.map(p => p.name)});
       let xpcom = performanceStatsService.getSnapshot();
       return new ApplicationSnapshot({
         xpcom,
         childProcesses,
         probes,
         date: Cu.now()
       });
     });
@@ -747,45 +747,45 @@ function PerformanceDiff(current, old = 
   }
 
   // Now consolidate data
   for (let k of Object.keys(Probes)) {
     if (!(k in this._all[0])) {
       // The stats don't contain data from this probe.
       continue;
     }
-    let data = [for (item of this._all) item[k]];
+    let data = this._all.map(item => item[k]);
     let probe = Probes[k];
     this[k] = probe.compose(data);
   }
 }
 PerformanceDiff.prototype = {
   toString: function() {
     return `[PerformanceDiff] ${this.key}`;
   },
   get windowIds() {
-    return [for (item of this._all) item.windowId].filter(x => !!x);
+    return this._all.map(item => item.windowId).filter(x => !!x);
   },
   get groupIds() {
-    return [for (item of this._all) item.groupId];
+    return this._all.map(item => item.groupId);
   },
   get key() {
     if (this.addonId) {
       return this.addonId;
     }
     if (this._parent) {
       return this._parent.windowId;
     }
     return this._all[0].groupId;
   },
   get names() {
-    return [for (item of this._all) item.name];
+    return this._all.map(item => item.name);
   },
   get processes() {
-    return [for (item of this._all) { isChildProcess: item.isChildProcess, processId: item.processId}];
+    return this._all.map(item => ({ isChildProcess: item.isChildProcess, processId: item.processId}));
   }
 };
 
 /**
  * The delta between two instances of `PerformanceDataLeaf`.
  *
  * Used to monitor resource usage between two timestamps.
  */
--- a/toolkit/components/promiseworker/PromiseWorker.jsm
+++ b/toolkit/components/promiseworker/PromiseWorker.jsm
@@ -285,21 +285,23 @@ this.BasePromiseWorker.prototype = {
         });
       }
 
       let id = ++this._id;
       let message = {fun: fun, args: args, id: id};
       this.log("Posting message", message);
       try {
         this._worker.postMessage(message, ...[transfers]);
-      } catch (ex if typeof ex == "number") {
-        this.log("Could not post message", message, "due to xpcom error", ex);
-        // handle raw xpcom errors (see eg bug 961317)
-        throw new Components.Exception("Error in postMessage", ex);
       } catch (ex) {
+        if (typeof ex == "number") {
+          this.log("Could not post message", message, "due to xpcom error", ex);
+          // handle raw xpcom errors (see eg bug 961317)
+          throw new Components.Exception("Error in postMessage", ex);
+        }
+
         this.log("Could not post message", message, "due to error", ex);
         throw ex;
       }
 
       let deferred = Promise.defer();
       this._queue.push({deferred:deferred, closure: closure, id: id});
       this.log("Message posted");
 
--- a/toolkit/components/promiseworker/tests/xpcshell/test_Promise.js
+++ b/toolkit/components/promiseworker/tests/xpcshell/test_Promise.js
@@ -50,17 +50,19 @@ add_task(function* test_delayed_promise_
 
 // Test that messages with rejected promise cause appropriate errors
 add_task(function* test_rejected_promise_args() {
   let error = new Error();
   let message = ["test_promise_args", Promise.reject(error)];
   try {
     yield worker.post("bounce", message);
     do_throw("I shound have thrown an error by now");
-  } catch (ex if ex == error) {
+  } catch (ex) {
+    if (ex != error)
+      throw ex;
     do_print("I threw the right error");
   }
 });
 
 // Test that we can transfer to the worker using argument `transfer`
 add_task(function* test_transfer_args() {
   let array = new Uint8Array(4);
   for (let i = 0; i < 4; ++i) {
--- a/toolkit/components/reader/ReaderMode.jsm
+++ b/toolkit/components/reader/ReaderMode.jsm
@@ -250,17 +250,19 @@ this.ReaderMode = {
    * @resolves JS object representing the article, or null if no article is found.
    * @rejects OS.File.Error
    */
   getArticleFromCache: Task.async(function* (url) {
     let path = this._toHashedPath(url);
     try {
       let array = yield OS.File.read(path);
       return JSON.parse(new TextDecoder().decode(array));
-    } catch (e if e instanceof OS.File.Error && e.becauseNoSuchFile) {
+    } catch (e) {
+      if (!(e instanceof OS.File.Error) || !e.becauseNoSuchFile)
+        throw e;
       return null;
     }
   }),
 
   /**
    * Stores an article in the cache.
    *
    * @param article JS object representing article.
--- a/toolkit/components/search/tests/xpcshell/test_rel_searchform.js
+++ b/toolkit/components/search/tests/xpcshell/test_rel_searchform.js
@@ -21,13 +21,13 @@ add_task(function* test_rel_searchform()
     "engine-rel-searchform-post.xml",
   ];
 
   // The final searchForm of the engine should be a URL whose domain is the
   // <ShortName> in the engine's XML and that has a ?search parameter.  The
   // point of the ?search parameter is to avoid accidentally matching the value
   // returned as a last resort by Engine's searchForm getter, which is simply
   // the prePath of the engine's first HTML <Url>.
-  let items = [for (e of engineNames) { name: e, xmlFileName: e }];
+  let items = engineNames.map(e => ({ name: e, xmlFileName: e }));
   for (let engine of yield addTestEngines(items)) {
     do_check_eq(engine.searchForm, "http://" + engine.name + "/?search");
   }
 });
--- a/toolkit/components/social/test/xpcshell/head.js
+++ b/toolkit/components/social/test/xpcshell/head.js
@@ -108,33 +108,30 @@ function AsyncRunner() {
 }
 
 AsyncRunner.prototype = {
 
   appendIterator: function appendIterator(iter) {
     this._iteratorQueue.push(iter);
   },
 
-  next: function next(/* ... */) {
+  next: function next(arg) {
     if (!this._iteratorQueue.length) {
       this.destroy();
       this._callbacks.done();
       return;
     }
 
-    // send() discards all arguments after the first, so there's no choice here
-    // but to send only one argument to the yielder.
-    let args = [arguments.length <= 1 ? arguments[0] : Array.slice(arguments)];
     try {
-      var val = this._iteratorQueue[0].send.apply(this._iteratorQueue[0], args);
-    }
-    catch (err if err instanceof StopIteration) {
-      this._iteratorQueue.shift();
-      this.next();
-      return;
+      var { done, value: val } = this._iteratorQueue[0].next(arg);
+      if (done) {
+        this._iteratorQueue.shift();
+        this.next();
+        return;
+      }
     }
     catch (err) {
       this._callbacks.error(err);
     }
 
     // val is an iterator => prepend it to the queue and start on it
     // val is otherwise truthy => call next
     if (val) {
--- a/toolkit/components/social/test/xpcshell/test_SocialService.js
+++ b/toolkit/components/social/test/xpcshell/test_SocialService.js
@@ -36,59 +36,59 @@ function run_test() {
   runner.appendIterator(testAddRemoveProvider(manifests, next));
   runner.appendIterator(testIsSameOrigin(manifests, next));
   runner.appendIterator(testResolveUri  (manifests, next));
   runner.appendIterator(testOrderedProviders(manifests, next));
   runner.appendIterator(testRemoveProviders(manifests, next));
   runner.next();
 }
 
-function testAddProviders(manifests, next) {
+function* testAddProviders(manifests, next) {
   do_check_false(SocialService.enabled);
   let provider = yield SocialService.addProvider(manifests[0], next);
   do_check_true(SocialService.enabled);
   do_check_true(MozSocialAPI._enabled);
   do_check_false(provider.enabled);
   provider = yield SocialService.addProvider(manifests[1], next);
   do_check_false(provider.enabled);
 }
 
-function testRemoveProviders(manifests, next) {
+function* testRemoveProviders(manifests, next) {
   do_check_true(SocialService.enabled);
   yield SocialService.disableProvider(manifests[0].origin, next);
   yield SocialService.disableProvider(manifests[1].origin, next);
   do_check_false(SocialService.enabled);
 }
 
-function testGetProvider(manifests, next) {
+function* testGetProvider(manifests, next) {
   for (let i = 0; i < manifests.length; i++) {
     let manifest = manifests[i];
     let provider = yield SocialService.getProvider(manifest.origin, next);
     do_check_neq(provider, null);
     do_check_eq(provider.name, manifest.name);
     do_check_eq(provider.workerURL, manifest.workerURL);
     do_check_eq(provider.origin, manifest.origin);
   }
   do_check_eq((yield SocialService.getProvider("bogus", next)), null);
 }
 
-function testGetProviderList(manifests, next) {
+function* testGetProviderList(manifests, next) {
   let providers = yield SocialService.getProviderList(next);
   do_check_true(providers.length >= manifests.length);
   for (let i = 0; i < manifests.length; i++) {
     let providerIdx = providers.map(p => p.origin).indexOf(manifests[i].origin);
     let provider = providers[providerIdx];
     do_check_true(!!provider);
     do_check_false(provider.enabled);
     do_check_eq(provider.workerURL, manifests[i].workerURL);
     do_check_eq(provider.name, manifests[i].name);
   }
 }
 
-function testAddRemoveProvider(manifests, next) {
+function* testAddRemoveProvider(manifests, next) {
   var threw;
   try {
     // Adding a provider whose origin already exists should fail
     SocialService.addProvider(manifests[0]);
   } catch (ex) {
     threw = ex;
   }
   do_check_neq(threw.toString().indexOf("SocialService.addProvider: provider with this origin already exists"), -1);
@@ -111,17 +111,17 @@ function testAddRemoveProvider(manifests
   yield SocialService.disableProvider(newProvider.origin, next);
   providersAfter = yield SocialService.getProviderList(next);
   do_check_eq(providersAfter.length, originalProviders.length);
   do_check_eq(providersAfter.indexOf(newProvider), -1);
   newProvider = yield SocialService.getProvider(newProvider.origin, next);
   do_check_true(!newProvider);
 }
 
-function testIsSameOrigin(manifests, next) {
+function* testIsSameOrigin(manifests, next) {
   let providers = yield SocialService.getProviderList(next);
   let provider = providers[0];
   // provider.origin is a string.
   do_check_true(provider.isSameOrigin(provider.origin));
   do_check_true(provider.isSameOrigin(Services.io.newURI(provider.origin, null, null)));
   do_check_true(provider.isSameOrigin(provider.origin + "/some-sub-page"));
   do_check_true(provider.isSameOrigin(Services.io.newURI(provider.origin + "/some-sub-page", null, null)));
   do_check_false(provider.isSameOrigin("http://something.com"));
@@ -129,27 +129,27 @@ function testIsSameOrigin(manifests, nex
   do_check_false(provider.isSameOrigin("data:text/html,<p>hi"));
   do_check_true(provider.isSameOrigin("data:text/html,<p>hi", true));
   do_check_false(provider.isSameOrigin(Services.io.newURI("data:text/html,<p>hi", null, null)));
   do_check_true(provider.isSameOrigin(Services.io.newURI("data:text/html,<p>hi", null, null), true));
   // we explicitly handle null and return false
   do_check_false(provider.isSameOrigin(null));
 }
 
-function testResolveUri(manifests, next) {
+function* testResolveUri(manifests, next) {
   let providers = yield SocialService.getProviderList(next);
   let provider = providers[0];
   do_check_eq(provider.resolveUri(provider.origin).spec, provider.origin + "/");
   do_check_eq(provider.resolveUri("foo.html").spec, provider.origin + "/foo.html");
   do_check_eq(provider.resolveUri("/foo.html").spec, provider.origin + "/foo.html");
   do_check_eq(provider.resolveUri("http://somewhereelse.com/foo.html").spec, "http://somewhereelse.com/foo.html");
   do_check_eq(provider.resolveUri("data:text/html,<p>hi").spec, "data:text/html,<p>hi");
 }
 
-function testOrderedProviders(manifests, next) {
+function* testOrderedProviders(manifests, next) {
   let providers = yield SocialService.getProviderList(next);
 
   // add visits for only one of the providers
   let visits = [];
   let startDate = Date.now() * 1000;
   for (let i = 0; i < 10; i++) {
     visits.push({
       uri: Services.io.newURI(providers[1].sidebarURL + i, null, null),
--- a/toolkit/components/social/test/xpcshell/test_SocialServiceMigration21.js
+++ b/toolkit/components/social/test/xpcshell/test_SocialServiceMigration21.js
@@ -25,17 +25,17 @@ function run_test() {
   Cu.import("resource://gre/modules/SocialService.jsm");
 
   let runner = new AsyncRunner();
   let next = runner.next.bind(runner);
   runner.appendIterator(testMigration(manifest, next));
   runner.next();
 }
 
-function testMigration(manifest, next) {
+function* testMigration(manifest, next) {
   // look at social.activeProviders, we should have migrated into that, and
   // we should be set as a user level pref after migration
   do_check_false(MANIFEST_PREFS.prefHasUserValue(manifest.origin));
   // we need to access the providers for everything to initialize
   yield SocialService.getProviderList(next);
   do_check_true(SocialService.enabled);
   do_check_true(Services.prefs.prefHasUserValue("social.activeProviders"));
 
--- a/toolkit/components/social/test/xpcshell/test_SocialServiceMigration22.js
+++ b/toolkit/components/social/test/xpcshell/test_SocialServiceMigration22.js
@@ -35,17 +35,17 @@ function run_test() {
   Cu.import("resource://gre/modules/SocialService.jsm");
 
   let runner = new AsyncRunner();
   let next = runner.next.bind(runner);
   runner.appendIterator(testMigration(manifest, next));
   runner.next();
 }
 
-function testMigration(manifest, next) {
+function* testMigration(manifest, next) {
   // look at social.activeProviders, we should have migrated into that, and
   // we should be set as a user level pref after migration
   do_check_false(MANIFEST_PREFS.prefHasUserValue(manifest.origin));
   // we need to access the providers for everything to initialize
   yield SocialService.getProviderList(next);
   do_check_true(SocialService.enabled);
   do_check_true(Services.prefs.prefHasUserValue("social.activeProviders"));
 
--- a/toolkit/components/social/test/xpcshell/test_SocialServiceMigration29.js
+++ b/toolkit/components/social/test/xpcshell/test_SocialServiceMigration29.js
@@ -36,17 +36,17 @@ function run_test() {
   Cu.import("resource://gre/modules/SocialService.jsm");
 
   let runner = new AsyncRunner();
   let next = runner.next.bind(runner);
   runner.appendIterator(testMigration(manifest, next));
   runner.next();
 }
 
-function testMigration(manifest, next) {
+function* testMigration(manifest, next) {
   // look at social.activeProviders, we should have migrated into that, and
   // we should be set as a user level pref after migration
   do_check_true(Services.prefs.prefHasUserValue("social.enabled"));
   do_check_true(MANIFEST_PREFS.prefHasUserValue(manifest.origin));
   // we need to access the providers for everything to initialize
   yield SocialService.getProviderList(next);
   do_check_false(SocialService.enabled);
   do_check_false(Services.prefs.prefHasUserValue("social.enabled"));
--- a/toolkit/components/startup/tests/unit/test_startup_crash.js
+++ b/toolkit/components/startup/tests/unit/test_startup_crash.js
@@ -292,9 +292,9 @@ function test_maxResumed() {
   prefService.setIntPref(pref_max_resumed_crashes, -1);
 
   prefService.setIntPref(pref_recent_crashes, max_resumed + 1);
   prefService.setIntPref(pref_last_success, ms_to_s(replacedLockTime) - 24 * 60 * 60);
   appStartup.trackStartupCrashBegin();
   // should remain the same since the last startup was not a crash
   do_check_eq(max_resumed + 2, prefService.getIntPref(pref_recent_crashes));
   do_check_false(appStartup.automaticSafeModeNecessary);
-}
\ No newline at end of file
+}
--- a/toolkit/components/terminator/nsTerminatorTelemetry.js
+++ b/toolkit/components/terminator/nsTerminatorTelemetry.js
@@ -59,17 +59,20 @@ nsTerminatorTelemetry.prototype = {
       //
       yield new Promise(resolve => setTimeout(resolve, 3000));
 
       let PATH = OS.Path.join(OS.Constants.Path.localProfileDir,
         "ShutdownDuration.json");
       let raw;
       try {
         raw = yield OS.File.read(PATH, { encoding: "utf-8" });
-      } catch (ex if ex.becauseNoSuchFile) {
+      } catch (ex) {
+        if (!ex.becauseNoSuchFile) {
+          throw ex;
+        }
         return;
       }
       // Let other errors be reported by Promise's error-reporting.
 
       // Clean up
       OS.File.remove(PATH);
       OS.File.remove(PATH + ".tmp");
 
--- a/toolkit/components/viewsource/test/browser/browser_contextmenu.js
+++ b/toolkit/components/viewsource/test/browser/browser_contextmenu.js
@@ -72,17 +72,17 @@ function* onViewSourceWindowOpen(aWindow
   is(items[0], "view-source:http://example.com/", "Link has correct href");
   is(items[1], "mailto:abc@def.ghi", "Link has correct href");
 
   expectedData.push(["a[href]", true, false, "http://example.com/"]);
   expectedData.push(["a[href^=mailto]", false, true, "abc@def.ghi"]);
   expectedData.push(["span", false, false, null]);
 }
 
-function checkMenuItems(contextMenu, isTab, selector, copyLinkExpected, copyEmailExpected, expectedClipboardContent) {
+function* checkMenuItems(contextMenu, isTab, selector, copyLinkExpected, copyEmailExpected, expectedClipboardContent) {
 
   let browser = isTab ? gBrowser.selectedBrowser : gViewSourceWindow.gBrowser;
   yield ContentTask.spawn(browser, { selector: selector }, function* (arg) {
     content.document.querySelector(arg.selector).scrollIntoView();
   });
 
   let popupShownPromise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
   yield BrowserTestUtils.synthesizeMouseAtCenter(selector,
--- a/toolkit/components/workerloader/tests/moduleB-dependency.js
+++ b/toolkit/components/workerloader/tests/moduleB-dependency.js
@@ -3,9 +3,9 @@
 
 exports.B = true;
 exports.foo = "foo";
 
 // Side-effect to detect if we attempt to re-execute this module.
 if ("loadedB" in self) {
   throw new Error("B has been evaluted twice");
 }
-self.loadedB = true;
\ No newline at end of file
+self.loadedB = true;
--- a/toolkit/components/workerloader/tests/moduleC-circular.js
+++ b/toolkit/components/workerloader/tests/moduleC-circular.js
@@ -10,9 +10,9 @@ exports.enteredC = true;
 
 var D = require("chrome://mochitests/content/chrome/toolkit/components/workerloader/tests/moduleD-circular.js");
 
 // The following values are set after importing D.
 // copiedFromD.copiedFromC should have only one field |enteredC|
 exports.copiedFromD = JSON.parse(JSON.stringify(D));
 // exportedFromD.copiedFromC should have all the fields defined in |exports|
 exports.exportedFromD = D;
-exports.finishedC = true;
\ No newline at end of file
+exports.finishedC = true;
--- a/toolkit/components/workerloader/tests/moduleD-circular.js
+++ b/toolkit/components/workerloader/tests/moduleD-circular.js
@@ -3,9 +3,9 @@
 
 // Module C and module D have circular dependencies.
 // This should not prevent from loading them.
 
 exports.enteredD = true;
 var C = require("chrome://mochitests/content/chrome/toolkit/components/workerloader/tests/moduleC-circular.js");
 exports.copiedFromC = JSON.parse(JSON.stringify(C));
 exports.exportedFromC = C;
-exports.finishedD = true;
\ No newline at end of file
+exports.finishedD = true;
--- a/toolkit/components/workerloader/tests/moduleE-throws-during-require.js
+++ b/toolkit/components/workerloader/tests/moduleE-throws-during-require.js
@@ -2,9 +2,9 @@
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Skip a few lines
 // 5
 // 6
 // 7
 // 8
 // 9
-throw new Error("Let's see if this error is obtained with the right origin");
\ No newline at end of file
+throw new Error("Let's see if this error is obtained with the right origin");
--- a/toolkit/components/workerloader/tests/moduleG-throws-later.js
+++ b/toolkit/components/workerloader/tests/moduleG-throws-later.js
@@ -4,9 +4,9 @@
 // Skip a few lines
 // 5
 // 6
 // 7
 // 8
 // 9
 exports.doThrow = function doThrow() {
   Array.prototype.sort.apply("foo"); // This will raise a native TypeError
-};
\ No newline at end of file
+};
--- a/toolkit/crashreporter/content/crashes.js
+++ b/toolkit/crashreporter/content/crashes.js
@@ -134,17 +134,20 @@ var clearReports = Task.async(function*(
   let cleanupFolder = Task.async(function*(path, filter) {
     let iterator = new OS.File.DirectoryIterator(path);
     try {
       yield iterator.forEach(Task.async(function*(aEntry) {
         if (!filter || (yield filter(aEntry))) {
           yield OS.File.remove(aEntry.path);
         }
       }));
-    } catch (e if e instanceof OS.File.Error && e.becauseNoSuchFile) {
+    } catch (e) {
+      if (!(e instanceof OS.File.Error) || !e.becauseNoSuchFile) {
+        throw e;
+      }
     } finally {
       iterator.close();
     }
   });
 
   yield cleanupFolder(CrashReports.submittedDir.path, function*(aEntry) {
     return aEntry.name.startsWith("bp-") && aEntry.name.endsWith(".txt");
   });
--- a/toolkit/crashreporter/test/unit_ipc/test_content_annotation.js
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_annotation.js
@@ -14,9 +14,9 @@ function run_test()
                      crashReporter.appendAppNotesToCrashReport("!!!foo!!!");
 		   },
                    function(mdump, extra) {
                      do_check_eq(extra.TestKey, "TestValue");
                      do_check_true('StartupTime' in extra);
                      do_check_true('ProcessType' in extra);
                      do_check_neq(extra.Notes.indexOf("!!!foo!!!"), -1);
                    });
-}
\ No newline at end of file
+}
--- a/toolkit/forgetaboutsite/ForgetAboutSite.jsm
+++ b/toolkit/forgetaboutsite/ForgetAboutSite.jsm
@@ -120,17 +120,21 @@ this.ForgetAboutSite = {
     try {
       let logins = lm.getAllLogins();
       for (let i = 0; i < logins.length; i++)
         if (hasRootDomain(logins[i].hostname, aDomain))
           lm.removeLogin(logins[i]);
     }
     // XXXehsan: is there a better way to do this rather than this
     // hacky comparison?
-    catch (ex if ex.message.indexOf("User canceled Master Password entry") != -1) { }
+    catch (ex) {
+      if (ex.message.indexOf("User canceled Master Password entry") == -1) {
+        throw ex;
+      }
+    }
 
     // Clear any "do not save for this site" for this domain
     let disabledHosts = lm.getAllDisabledHosts();
     for (let i = 0; i < disabledHosts.length; i++)
       if (hasRootDomain(disabledHosts[i], aDomain))
         lm.setLoginSavingEnabled(disabledHosts, true);
 
     // Permissions
--- a/toolkit/forgetaboutsite/test/unit/test_removeDataFromDomain.js
+++ b/toolkit/forgetaboutsite/test/unit/test_removeDataFromDomain.js
@@ -249,37 +249,37 @@ function preference_exists(aURI)
   });
   return deferred.promise;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 //// Test Functions
 
 // History
-function test_history_cleared_with_direct_match()
+function* test_history_cleared_with_direct_match()
 {
   const TEST_URI = uri("http://mozilla.org/foo");
   do_check_false(yield promiseIsURIVisited(TEST_URI));
   yield PlacesTestUtils.addVisits(TEST_URI);
   do_check_true(yield promiseIsURIVisited(TEST_URI));
   ForgetAboutSite.removeDataFromDomain("mozilla.org");
   do_check_false(yield promiseIsURIVisited(TEST_URI));
 }
 
-function test_history_cleared_with_subdomain()
+function* test_history_cleared_with_subdomain()
 {
   const TEST_URI = uri("http://www.mozilla.org/foo");
   do_check_false(yield promiseIsURIVisited(TEST_URI));
   yield PlacesTestUtils.addVisits(TEST_URI);
   do_check_true(yield promiseIsURIVisited(TEST_URI));
   ForgetAboutSite.removeDataFromDomain("mozilla.org");
   do_check_false(yield promiseIsURIVisited(TEST_URI));
 }
 
-function test_history_not_cleared_with_uri_contains_domain()
+function* test_history_not_cleared_with_uri_contains_domain()
 {
   const TEST_URI = uri("http://ilovemozilla.org/foo");
   do_check_false(yield promiseIsURIVisited(TEST_URI));
   yield PlacesTestUtils.addVisits(TEST_URI);
   do_check_true(yield promiseIsURIVisited(TEST_URI));
   ForgetAboutSite.removeDataFromDomain("mozilla.org");
   do_check_true(yield promiseIsURIVisited(TEST_URI));
 
@@ -419,56 +419,56 @@ function waitForPurgeNotification() {
     }
   };
   Services.obs.addObserver(observer, "browser:purge-domain-data", false);
 
   return deferred.promise;
 }
 
 // Content Preferences
-function test_content_preferences_cleared_with_direct_match()
+function* test_content_preferences_cleared_with_direct_match()
 {
   const TEST_URI = uri("http://mozilla.org");
   do_check_false(yield preference_exists(TEST_URI));
   yield add_preference(TEST_URI);
   do_check_true(yield preference_exists(TEST_URI));
   ForgetAboutSite.removeDataFromDomain("mozilla.org");
   yield waitForPurgeNotification();
   do_check_false(yield preference_exists(TEST_URI));
 }
 
-function test_content_preferences_cleared_with_subdomain()
+function* test_content_preferences_cleared_with_subdomain()
 {
   const TEST_URI = uri("http://www.mozilla.org");
   do_check_false(yield preference_exists(TEST_URI));
   yield add_preference(TEST_URI);
   do_check_true(yield preference_exists(TEST_URI));
   ForgetAboutSite.removeDataFromDomain("mozilla.org");
   yield waitForPurgeNotification();
   do_check_false(yield preference_exists(TEST_URI));
 }
 
-function test_content_preferences_not_cleared_with_uri_contains_domain()
+function* test_content_preferences_not_cleared_with_uri_contains_domain()
 {
   const TEST_URI = uri("http://ilovemozilla.org");
   do_check_false(yield preference_exists(TEST_URI));
   yield add_preference(TEST_URI);
   do_check_true(yield preference_exists(TEST_URI));
   ForgetAboutSite.removeDataFromDomain("mozilla.org");
   yield waitForPurgeNotification();
   do_check_true(yield preference_exists(TEST_URI));
 
   // Reset state
   ForgetAboutSite.removeDataFromDomain("ilovemozilla.org");
   yield waitForPurgeNotification();
   do_check_false(yield preference_exists(TEST_URI));
 }
 
 // Push
-function test_push_cleared()
+function* test_push_cleared()
 {
   let ps;
   try {
     ps = Cc["@mozilla.org/push/NotificationService;1"].
            getService(Ci.nsIPushNotificationService);
   } catch(e) {
     // No push service, skip test.
     return;
@@ -545,17 +545,17 @@ function test_cache_cleared()
       do_test_finished();
     }
   };
   os.addObserver(observer, "cacheservice:empty-cache", false);
   ForgetAboutSite.removeDataFromDomain("mozilla.org");
   do_test_pending();
 }
 
-function test_storage_cleared()
+function* test_storage_cleared()
 {
   function getStorageForURI(aURI)
   {
     let ssm = Cc["@mozilla.org/scriptsecuritymanager;1"]
               .getService(Ci.nsIScriptSecurityManager);
     let principal = ssm.createCodebasePrincipal(aURI, {});
 
     let dsm = Cc["@mozilla.org/dom/localStorage-manager;1"].
--- a/toolkit/profile/content/createProfileWizard.js
+++ b/toolkit/profile/content/createProfileWizard.js
@@ -1,15 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 const C = Components.classes;
 const I = Components.interfaces;
 
+Components.utils.import("resource://gre/modules/AppConstants.jsm");
+
 const ToolkitProfileService = "@mozilla.org/toolkit/profile-service;1";
 
 var gProfileService;
 var gProfileManagerBundle;
 
 var gDefaultProfileParent;
 var gOldProfileName;
 
@@ -112,21 +114,22 @@ function checkCurrentInput(currentInput)
   var finishButton = document.documentElement.getButton("finish");
   var finishText = document.getElementById("finishText");
   var canAdvance;
 
   var errorMessage = checkProfileName(currentInput);
 
   if (!errorMessage) {
     finishText.className = "";
-#ifndef XP_MACOSX
-    finishText.firstChild.data = gProfileManagerBundle.getString("profileFinishText");
-#else
-    finishText.firstChild.data = gProfileManagerBundle.getString("profileFinishTextMac");
-#endif
+    if (AppConstants.platform == "macosx") {
+      finishText.firstChild.data = gProfileManagerBundle.getString("profileFinishText");
+    }
+    else {
+      finishText.firstChild.data = gProfileManagerBundle.getString("profileFinishTextMac");
+    }
     canAdvance = true;
   }
   else {
     finishText.className = "error";
     finishText.firstChild.data = errorMessage;
     canAdvance = false;
   }
 
--- a/toolkit/profile/content/profileSelection.js
+++ b/toolkit/profile/content/profileSelection.js
@@ -1,14 +1,15 @@
 /* -*- 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/. */
 
+Components.utils.import("resource://gre/modules/AppConstants.jsm");
 Components.utils.import("resource://gre/modules/Services.jsm");
 
 const C = Components.classes;
 const I = Components.interfaces;
 
 const ToolkitProfileService = "@mozilla.org/toolkit/profile-service;1";
 
 var gDialogParams;
@@ -126,22 +127,22 @@ function updateStartupPrefs()
 
   /* Bug 257777 */
   gProfileService.startOffline = document.getElementById("offlineState").checked;
 }
 
 // handle key event on listboxes
 function onProfilesKey(aEvent)
 {
-  switch( aEvent.keyCode ) 
+  switch( aEvent.keyCode )
   {
+  case KeyEvent.DOM_VK_BACK_SPACE:
+    if (AppConstants.platform != "macosx")
+      break;
   case KeyEvent.DOM_VK_DELETE:
-#ifdef XP_MACOSX
-  case KeyEvent.DOM_VK_BACK_SPACE:
-#endif
     ConfirmDelete();
     break;
   case KeyEvent.DOM_VK_F2:
     RenameProfile();
     break;
   }
 }
 
--- a/toolkit/profile/jar.mn
+++ b/toolkit/profile/jar.mn
@@ -1,9 +1,9 @@
 # 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/.
 
 toolkit.jar:
-* content/mozapps/profile/createProfileWizard.js  (content/createProfileWizard.js)
+  content/mozapps/profile/createProfileWizard.js  (content/createProfileWizard.js)
 * content/mozapps/profile/createProfileWizard.xul (content/createProfileWizard.xul)
-* content/mozapps/profile/profileSelection.js     (content/profileSelection.js)
+  content/mozapps/profile/profileSelection.js     (content/profileSelection.js)
   content/mozapps/profile/profileSelection.xul    (content/profileSelection.xul)