Backed out 5161ded671e0 for causing Mulet failures
authorDave Townsend <dtownsend@oxymoronical.com>
Thu, 03 Dec 2015 20:01:43 -0800
changeset 309675 f32a93d9abd528102c124dbbaf6b14ac48c63a3c
parent 309674 f70ee6e84e82ec22a16f33c6a3f3da3402a36272
child 309676 a36cc9262f70b95c830ce1ff3bd415f346b46415
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)
milestone45.0a1
backs out5161ded671e09997eaf27a7e8d5f3e5823e51ac5
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
Backed out 5161ded671e0 for causing Mulet failures
.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/identity/FirefoxAccounts.jsm
toolkit/identity/moz.build
toolkit/profile/content/createProfileWizard.js
toolkit/profile/content/profileSelection.js
toolkit/profile/jar.mn
--- a/.eslintignore
+++ b/.eslintignore
@@ -39,16 +39,39 @@ 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/**
@@ -168,38 +191,8 @@ 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/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 = delta.diff.processes.map(proc => `${proc.processId} (${proc.isChildProcess?"child":"parent"})`);
+      let processes = [for (proc of delta.diff.processes) `${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 = Array.from(eltAddons.querySelectorAll("span.title"), elt => elt.textContent);
-        let webTitles = Array.from(eltWeb.querySelectorAll("span.title"), elt => elt.textContent);
+        let addonTitles = [for (eltContent of eltAddons.querySelectorAll("span.title")) eltContent.textContent];
+        let webTitles = [for (eltContent of eltWeb.querySelectorAll("span.title")) eltContent.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 @@
-/* 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");
+# -*- 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/.
 
 function AppPicker() {};
 
 var g_dialog = null;
 
 AppPicker.prototype = 
 {
     // Class members
@@ -112,29 +112,30 @@ AppPicker.prototype =
       var urlSpec = fph.getURLSpecFromFile(file);
       return "moz-icon://" + urlSpec + "?size=32";
     },
 
     /** 
     * Retrieve the pretty description from the file
     */ 
     getFileDisplayName: function getFileDisplayName(file) {
-      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) {}
-        }
+#ifdef XP_WIN
+      if (file instanceof Components.interfaces.nsILocalFileWin) {
+        try {
+          return file.getVersionInfoField("FileDescription");
+        } 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");
@@ -180,23 +181,25 @@ 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;
-      if (AppConstants.platform == "win") {
-        startLocation = "ProgF"; // Program Files
-      } else if (AppConstants.platform == "macosx") {
-        startLocation = "LocApp"; // Local Applications
-      } else {
-        startLocation = "Home";
-      }
+#ifdef XP_WIN
+    startLocation = "ProgF"; // Program Files
+#else
+#ifdef XP_MACOSX
+    startLocation = "LocApp"; // Local Applications
+#else
+    startLocation = "Home";
+#endif
+#endif
       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,28 +24,24 @@ 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)
-      throw ex;
+  } catch (ex if ex.result == Cr.NS_ERROR_NULL_POINTER) {
     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)
-      throw ex;
+  } catch (ex if ex.result == Cr.NS_ERROR_NULL_POINTER) {
     do_print("Initialisation thrown NS_ERROR_NULL_POINTER as expected.");
   }
 });
 
 /**
  * Test for removePath usage with null arguments.
  */
 add_task(function* test_null_args_removePath() {
@@ -57,23 +53,19 @@ 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)
-      throw ex;
+  } catch (ex if ex.result == Cr.NS_ERROR_NULL_POINTER) {
     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)
-      throw ex;
+  } catch (ex if ex.result == Cr.NS_ERROR_NULL_POINTER) {
     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 this._probes.map(probe => probe.name);
+    return [for (probe of this._probes) 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: probes.map(p => p.name)});
+      let childProcesses = yield Process.broadcastAndCollect("collect", {probeNames: [for (probe of probes) probe.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 = this._all.map(item => item[k]);
+    let data = [for (item of this._all) item[k]];
     let probe = Probes[k];
     this[k] = probe.compose(data);
   }
 }
 PerformanceDiff.prototype = {
   toString: function() {
     return `[PerformanceDiff] ${this.key}`;
   },
   get windowIds() {
-    return this._all.map(item => item.windowId).filter(x => !!x);
+    return [for (item of this._all) item.windowId].filter(x => !!x);
   },
   get groupIds() {
-    return this._all.map(item => item.groupId);
+    return [for (item of this._all) 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 this._all.map(item => item.name);
+    return [for (item of this._all) item.name];
   },
   get processes() {
-    return this._all.map(item => ({ isChildProcess: item.isChildProcess, processId: item.processId}));
+    return [for (item of this._all) { 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,23 +285,21 @@ 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,19 +50,17 @@ 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)
-      throw ex;
+  } catch (ex if ex == error) {
     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,19 +250,17 @@ 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)
-        throw e;
+    } catch (e if e instanceof OS.File.Error && e.becauseNoSuchFile) {
       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 = engineNames.map(e => ({ name: e, xmlFileName: e }));
+  let items = [for (e of engineNames) { 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,30 +108,33 @@ function AsyncRunner() {
 }
 
 AsyncRunner.prototype = {
 
   appendIterator: function appendIterator(iter) {
     this._iteratorQueue.push(iter);
   },
 
-  next: function next(arg) {
+  next: function next(/* ... */) {
     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 { done, value: val } = this._iteratorQueue[0].next(arg);
-      if (done) {
-        this._iteratorQueue.shift();
-        this.next();
-        return;
-      }
+      var val = this._iteratorQueue[0].send.apply(this._iteratorQueue[0], args);
+    }
+    catch (err if err instanceof StopIteration) {
+      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(manifest
   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, ne
   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,20 +59,17 @@ 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) {
-          throw ex;
-        }
+      } catch (ex if ex.becauseNoSuchFile) {
         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;
+self.loadedB = true;
\ No newline at end of file
--- 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;
+exports.finishedC = true;
\ No newline at end of file
--- 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;
+exports.finishedD = true;
\ No newline at end of file
--- 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");
+throw new Error("Let's see if this error is obtained with the right origin");
\ No newline at end of file
--- 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,20 +134,17 @@ 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) {
-        throw e;
-      }
+    } catch (e if e instanceof OS.File.Error && e.becauseNoSuchFile) {
     } 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,21 +120,17 @@ 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) {
-        throw ex;
-      }
-    }
+    catch (ex if ex.message.indexOf("User canceled Master Password entry") != -1) { }
 
     // 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/identity/FirefoxAccounts.jsm
+++ b/toolkit/identity/FirefoxAccounts.jsm
@@ -6,17 +6,16 @@
 
 this.EXPORTED_SYMBOLS = ["FirefoxAccounts"];
 
 const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
 
 Cu.import("resource://gre/modules/Log.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/identity/LogUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "objectCopy",
                                   "resource://gre/modules/identity/IdentityUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "makeMessageObject",
                                   "resource://gre/modules/identity/IdentityUtils.jsm");
 
@@ -31,28 +30,28 @@ try {
 } catch (e) {
   this.LOG_LEVEL = Log.Level.Error;
 }
 
 var log = Log.repository.getLogger("Identity.FxAccounts");
 log.level = LOG_LEVEL;
 log.addAppender(new Log.ConsoleAppender(new Log.BasicFormatter()));
 
-if (AppConstants.MOZ_B2G) {
-  XPCOMUtils.defineLazyModuleGetter(this, "FxAccountsManager",
-                                    "resource://gre/modules/FxAccountsManager.jsm",
-                                    "FxAccountsManager");
-  Cu.import("resource://gre/modules/FxAccountsCommon.js");
-} else {
-  log.warn("The FxAccountsManager is only functional in B2G at this time.");
-  var FxAccountsManager = null;
-  var ONVERIFIED_NOTIFICATION = null;
-  var ONLOGIN_NOTIFICATION = null;
-  var ONLOGOUT_NOTIFICATION = null;
-}
+#ifdef MOZ_B2G
+XPCOMUtils.defineLazyModuleGetter(this, "FxAccountsManager",
+                                  "resource://gre/modules/FxAccountsManager.jsm",
+                                  "FxAccountsManager");
+Cu.import("resource://gre/modules/FxAccountsCommon.js");
+#else
+log.warn("The FxAccountsManager is only functional in B2G at this time.");
+var FxAccountsManager = null;
+var ONVERIFIED_NOTIFICATION = null;
+var ONLOGIN_NOTIFICATION = null;
+var ONLOGOUT_NOTIFICATION = null;
+#endif
 
 function FxAccountsService() {
   Services.obs.addObserver(this, "quit-application-granted", false);
   if (ONVERIFIED_NOTIFICATION) {
     Services.obs.addObserver(this, ONVERIFIED_NOTIFICATION, false);
     Services.obs.addObserver(this, ONLOGIN_NOTIFICATION, false);
     Services.obs.addObserver(this, ONLOGOUT_NOTIFICATION, false);
   }
--- a/toolkit/identity/moz.build
+++ b/toolkit/identity/moz.build
@@ -13,21 +13,24 @@ XPIDL_SOURCES += [
 
 XPIDL_MODULE = 'identity'
 
 SOURCES += [
     'IdentityCryptoService.cpp',
 ]
 
 EXTRA_JS_MODULES.identity += [
-    'FirefoxAccounts.jsm',
     'Identity.jsm',
     'IdentityProvider.jsm',
     'IdentityStore.jsm',
     'IdentityUtils.jsm',
     'jwcrypto.jsm',
     'LogUtils.jsm',
     'MinimalIdentity.jsm',
     'RelyingParty.jsm',
     'Sandbox.jsm',
 ]
 
+EXTRA_PP_JS_MODULES.identity += [
+    'FirefoxAccounts.jsm',
+]
+
 FINAL_LIBRARY = 'xul'
--- a/toolkit/profile/content/createProfileWizard.js
+++ b/toolkit/profile/content/createProfileWizard.js
@@ -1,17 +1,15 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 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;
 
@@ -114,22 +112,21 @@ function checkCurrentInput(currentInput)
   var finishButton = document.documentElement.getButton("finish");
   var finishText = document.getElementById("finishText");
   var canAdvance;
 
   var errorMessage = checkProfileName(currentInput);
 
   if (!errorMessage) {
     finishText.className = "";
-    if (AppConstants.platform == "macosx") {
-      finishText.firstChild.data = gProfileManagerBundle.getString("profileFinishText");
-    }
-    else {
-      finishText.firstChild.data = gProfileManagerBundle.getString("profileFinishTextMac");
-    }
+#ifndef XP_MACOSX
+    finishText.firstChild.data = gProfileManagerBundle.getString("profileFinishText");
+#else
+    finishText.firstChild.data = gProfileManagerBundle.getString("profileFinishTextMac");
+#endif
     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,15 +1,14 @@
 /* -*- 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;
@@ -127,22 +126,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_DELETE:
+#ifdef XP_MACOSX
   case KeyEvent.DOM_VK_BACK_SPACE:
-    if (AppConstants.platform != "macosx")
-      break;
-  case KeyEvent.DOM_VK_DELETE:
+#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)