Merge b2ginbound to m-c a=merge CLOSED TREE
authorWes Kocher <wkocher@mozilla.com>
Thu, 19 Mar 2015 19:23:58 -0700
changeset 263408 02ca416c13a5d084f20b10147635bdc6c4f3932a
parent 263343 3257d9c4b257ee422629ca7d94fb83ee7883d523 (current diff)
parent 263407 7c15701dcea8c89461d57cf2215397ae34170f93 (diff)
child 263424 4d2d97b3ba34d95b0d29ce099f8f5dc0a2ae722d
child 263439 920b6513a1260fc115df17a7a5648a3c9c6b093e
child 263482 ed6fdb6e238e0a9127bfb575056f2408cb8f95f1
push id4718
push userraliiev@mozilla.com
push dateMon, 11 May 2015 18:39:53 +0000
treeherdermozilla-beta@c20c4ef55f08 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone39.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
Merge b2ginbound to m-c a=merge CLOSED TREE
testing/docker/tester/hgrc
--- a/b2g/components/DirectoryProvider.js
+++ b/b2g/components/DirectoryProvider.js
@@ -10,16 +10,17 @@ const Cr = Components.results;
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 const XRE_OS_UPDATE_APPLY_TO_DIR = "OSUpdApplyToD"
 const UPDATE_ARCHIVE_DIR = "UpdArchD"
 const LOCAL_DIR = "/data/local";
 const UPDATES_DIR = "updates/0";
 const FOTA_DIR = "updates/fota";
+const COREAPPSDIR_PREF = "b2g.coreappsdir"
 
 XPCOMUtils.defineLazyServiceGetter(Services, "env",
                                    "@mozilla.org/process/environment;1",
                                    "nsIEnvironment");
 
 XPCOMUtils.defineLazyServiceGetter(Services, "um",
                                    "@mozilla.org/updates/update-manager;1",
                                    "nsIUpdateManager");
@@ -92,22 +93,37 @@ DirectoryProvider.prototype = {
     if (prop == XRE_OS_UPDATE_APPLY_TO_DIR) {
       // getUpdateDir will set persistent to false since it may toggle between
       // /data/local/ and /mnt/sdcard based on free space and/or availability
       // of the sdcard.
       // before apply, check if free space is 1.1 times of update.mar
       return this.getUpdateDir(persistent, FOTA_DIR, 1.1);
     }
 #else
-    // In desktop builds, coreAppsDir is the same as the profile directory.
-    // We just need to get the path from the parent, and it is then used to
-    // build jar:remoteopenfile:// uris.
+    // In desktop builds, coreAppsDir is the same as the profile
+    // directory unless otherwise specified. We just need to get the
+    // path from the parent, and it is then used to build
+    // jar:remoteopenfile:// uris.
     if (prop == "coreAppsDir") {
-      let appsDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
-      appsDir.append("webapps");
+      let coreAppsDirPref;
+      try {
+        coreAppsDirPref = Services.prefs.getCharPref(COREAPPSDIR_PREF);
+      } catch (e) {
+        // coreAppsDirPref may not exist if we're on an older version
+        // of gaia, so just fail silently.
+      }
+      let appsDir;
+      // If pref doesn't exist or isn't set, default to old value
+      if (!coreAppsDirPref || coreAppsDirPref == "") {
+        appsDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
+        appsDir.append("webapps");
+      } else {
+        appsDir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile)
+        appsDir.initWithPath(coreAppsDirPref);
+      }
       persistent.value = true;
       return appsDir;
     } else if (prop == "ProfD") {
       let inParent = Cc["@mozilla.org/xre/app-info;1"]
                        .getService(Ci.nsIXULRuntime)
                        .processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
       if (inParent) {
         // Just bail out to use the default from toolkit.
--- a/b2g/config/dolphin/sources.xml
+++ b/b2g/config/dolphin/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="40f5ce12859076b63307480ff2f0bbdf42bbf258"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="acca7d20b79978cff975e755e5e0bac9f731a6f7"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="83760d213fb3bec7b4117d266fcfbf6fe2ba14ab"/>
   <project name="device/common" path="device/common" revision="6a2995683de147791e516aae2ccb31fdfbe2ad30"/>
@@ -133,12 +133,12 @@
   <project name="platform/frameworks/av" path="frameworks/av" revision="fd359e3a74a658d9eaab1c683440ba5412535777"/>
   <project name="platform/hardware/akm" path="hardware/akm" revision="6d3be412647b0eab0adff8a2768736cf4eb68039"/>
   <project groups="invensense" name="platform/hardware/invensense" path="hardware/invensense" revision="e6d9ab28b4f4e7684f6c07874ee819c9ea0002a2"/>
   <project name="platform/hardware/ril" path="hardware/ril" revision="865ce3b4a2ba0b3a31421ca671f4d6c5595f8690"/>
   <project name="kernel/common" path="kernel" revision="df636d2c31ad4434a7de2565359ad982b3767118"/>
   <project name="platform/system/core" path="system/core" revision="a626f6c0ef9e88586569331bd7387b569eaa5ed2"/>
   <project name="u-boot" path="u-boot" revision="f1502910977ac88f43da7bf9277c3523ad4b0b2f"/>
   <project name="vendor/sprd/gps" path="vendor/sprd/gps" revision="4c59900937dc2e978b7b14b7f1ea617e3d5d550e"/>
-  <project name="vendor/sprd/open-source" path="vendor/sprd/open-source" revision="1344e9e5b9d0b6c8f7909731f9d14fabeb1bdc8f"/>
+  <project name="vendor/sprd/open-source" path="vendor/sprd/open-source" revision="8a81f598126f4153b80c1a2425343174b6cffd79"/>
   <project name="vendor/sprd/partner" path="vendor/sprd/partner" revision="8649c7145972251af11b0639997edfecabfc7c2e"/>
   <project name="vendor/sprd/proprietories" path="vendor/sprd/proprietories" revision="d2466593022f7078aaaf69026adf3367c2adb7bb"/>
 </manifest>
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="173b3104bfcbd23fc9dccd4b0035fc49aae3d444">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="93f9ba577f68d772093987c2f1c0a4ae293e1802"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="527d1c939ee57deb7192166e56e2a3fffa8cb087"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/emulator-jb/sources.xml
+++ b/b2g/config/emulator-jb/sources.xml
@@ -12,20 +12,20 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="4efd19d199ae52656604f794c5a77518400220fd">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="40f5ce12859076b63307480ff2f0bbdf42bbf258"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="acca7d20b79978cff975e755e5e0bac9f731a6f7"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
--- a/b2g/config/emulator-kk/sources.xml
+++ b/b2g/config/emulator-kk/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="40f5ce12859076b63307480ff2f0bbdf42bbf258"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="acca7d20b79978cff975e755e5e0bac9f731a6f7"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="f92a936f2aa97526d4593386754bdbf02db07a12"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="6e47ff2790f5656b5b074407829ceecf3e6188c4"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="1950e4760fa14688b83cdbb5acaa1af9f82ef434"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="ac6eb97a37035c09fb5ede0852f0881e9aadf9ad"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="737f591c5f95477148d26602c7be56cbea0cdeb9"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="51da9b1981be481b92a59a826d4d78dc73d0989a"/>
   <project name="device/common" path="device/common" revision="798a3664597e6041985feab9aef42e98d458bc3d"/>
--- a/b2g/config/emulator-l/sources.xml
+++ b/b2g/config/emulator-l/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="52775e03a2d8532429dff579cb2cd56718e488c3">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="40f5ce12859076b63307480ff2f0bbdf42bbf258"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="acca7d20b79978cff975e755e5e0bac9f731a6f7"/>
   <!-- Stock Android things -->
   <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="50d1ca4ab8add54523b7bc692860d57e8ee4c0d1"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="fb3845864573857677f9b500040a8f011eaf5078"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="354496e8eddd28c743d8e02c02eeab02958367e6"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="b37c91354272b7413a0dc058b7445e677921d39e"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="a227c92e0170bcf2296a63386956946b0dd78ca7"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="884626610186b6dbea52cec5194b1c4bcfe1cb98"/>
   <project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="29f9b82faa1af9730f52e933dca848546cbea84c"/>
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="173b3104bfcbd23fc9dccd4b0035fc49aae3d444">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="93f9ba577f68d772093987c2f1c0a4ae293e1802"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="527d1c939ee57deb7192166e56e2a3fffa8cb087"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/flame-kk/sources.xml
+++ b/b2g/config/flame-kk/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="40f5ce12859076b63307480ff2f0bbdf42bbf258"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="acca7d20b79978cff975e755e5e0bac9f731a6f7"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="a32003194f707f66a2d8cdb913ed1869f1926c5d"/>
   <project name="device/common" path="device/common" revision="96d4d2006c4fcb2f19a3fa47ab10cb409faa017b"/>
--- a/b2g/config/flame/sources.xml
+++ b/b2g/config/flame/sources.xml
@@ -12,20 +12,20 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="4efd19d199ae52656604f794c5a77518400220fd">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="40f5ce12859076b63307480ff2f0bbdf42bbf258"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="acca7d20b79978cff975e755e5e0bac9f731a6f7"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="e95b4ce22c825da44d14299e1190ea39a5260bde"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="471afab478649078ad7c75ec6b252481a59e19b8"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
-        "git_revision": "c39e15f631de80c69467fda0d4ea0bcda9e194ca", 
+        "git_revision": "8837f94418d69a0b06c1f4843b0779e2bb72165a", 
         "remote": "https://git.mozilla.org/releases/gaia.git", 
         "branch": ""
     }, 
-    "revision": "a7732a117f9499b15cc27c022a11cd75ef71f477", 
+    "revision": "e034a24fa2dcff4623dce2d91f7828d582abf50d", 
     "repo_path": "integration/gaia-central"
 }
--- a/b2g/config/nexus-4/sources.xml
+++ b/b2g/config/nexus-4/sources.xml
@@ -12,20 +12,20 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="4efd19d199ae52656604f794c5a77518400220fd">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="40f5ce12859076b63307480ff2f0bbdf42bbf258"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="acca7d20b79978cff975e755e5e0bac9f731a6f7"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
--- a/b2g/config/nexus-5-l/sources.xml
+++ b/b2g/config/nexus-5-l/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="52775e03a2d8532429dff579cb2cd56718e488c3">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="c39e15f631de80c69467fda0d4ea0bcda9e194ca"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8837f94418d69a0b06c1f4843b0779e2bb72165a"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="86cd7486d8e50eaac8ef6fe2f51f09d25194577b"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="40f5ce12859076b63307480ff2f0bbdf42bbf258"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="acca7d20b79978cff975e755e5e0bac9f731a6f7"/>
   <!-- Stock Android things -->
   <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="50d1ca4ab8add54523b7bc692860d57e8ee4c0d1"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="fb3845864573857677f9b500040a8f011eaf5078"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="354496e8eddd28c743d8e02c02eeab02958367e6"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="b37c91354272b7413a0dc058b7445e677921d39e"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="a227c92e0170bcf2296a63386956946b0dd78ca7"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="884626610186b6dbea52cec5194b1c4bcfe1cb98"/>
   <project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="29f9b82faa1af9730f52e933dca848546cbea84c"/>
@@ -137,17 +137,16 @@
   <project name="platform_frameworks_av" path="frameworks/av" remote="b2g" revision="ea531874885eed7f68802048218ed86dde927f58"/>
   <project name="platform_frameworks_base" path="frameworks/base" remote="b2g" revision="df7e0cfbbc7e954ed26c73ac17832a5ff035f046"/>
   <project name="platform_frameworks_wilhelm" path="frameworks/wilhelm" remote="b2g" revision="73f7e7f12c8c5459f7a39e2fa343f083c942864d"/>
   <project name="platform_system_core" path="system/core" remote="b2g" revision="4df51d9abf6cc9a6ec49b965e621699e0e6dc4fb"/>
   <default remote="caf" revision="refs/tags/android-5.0.0_r6" sync-j="4"/>
   <!-- Nexus 5 specific things -->
   <project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="ba62cc8b78c30d36181b8060a2016cc8da166236"/>
   <project name="device-hammerhead" path="device/lge/hammerhead" remote="b2g" revision="c37663f828891cf7a49451a04f3f1ce7f7e5c054"/>
-  <project name="device/qcom/common" path="device/qcom/common" remote="caf" revision="3697e5acf25629b82658334e3f8ee3b6df5becab"/>
   <project name="device_lge_hammerhead-kernel" path="device/lge/hammerhead-kernel" remote="b2g" revision="1268f640184df5ef759ada669f101a613451673a"/>
   <project name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="0cb8574d338bf9f15b45ace7c08ad6deae9673ee"/>
   <project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="16abda2258c9aa1ed78f00bb0a9b2b43b4cb919e"/>
   <project name="platform/hardware/broadcom/libbt" path="hardware/broadcom/libbt" revision="3e856528121ae0af0ca26c97cb563160c7e16d85"/>
   <project name="platform/hardware/broadcom/wlan" path="hardware/broadcom/wlan" revision="d9e716e14e685f4fc124ae591a1cd0899bc4d7b5"/>
   <project name="platform/hardware/qcom/audio" path="hardware/qcom/audio" revision="505aa92674337b76ce7d038800f2a6d7dc340ac9"/>
   <project name="hardware_qcom_display" path="hardware/qcom/display" remote="b2g" revision="c43952000d57f08b93a0e4fb77052871ce587976"/>
   <project name="platform/hardware/qcom/keymaster" path="hardware/qcom/keymaster" revision="028649652cd8f8f18cfb47d34bd78c435eb030ca"/>
--- a/dom/apps/AppsUtils.jsm
+++ b/dom/apps/AppsUtils.jsm
@@ -920,16 +920,20 @@ ManifestHelper.prototype = {
     }
     return icon;
   },
 
   fullLaunchPath: function(aStartPoint) {
     // If no start point is specified, we use the root launch path.
     // In all error cases, we just return null.
     if ((aStartPoint || "") === "") {
+      // W3C start_url takes precedence over mozApps launch_path
+      if (this._localeProp("start_url")) {
+        return this._baseURI.resolve(this._localeProp("start_url") || "/");
+      }
       return this._baseURI.resolve(this._localeProp("launch_path") || "/");
     }
 
     // Search for the l10n entry_points property.
     let entryPoints = this._localeProp("entry_points");
     if (!entryPoints) {
       return null;
     }
--- a/dom/apps/Webapps.jsm
+++ b/dom/apps/Webapps.jsm
@@ -774,17 +774,17 @@ this.DOMApplicationRegistry = {
               appMigrator.observe(null, "webapps-before-update-merge", null);
           } catch(e) {
             debug("Exception running app migration: ");
             debug(e.name + " " + e.message);
             debug("Skipping app migration.");
           }
         }
 
-#ifdef MOZ_WIDGET_GONK
+#ifdef MOZ_B2G
         yield this.installSystemApps();
 #endif
 
         // At first run, install preloaded apps and set up their permissions.
         for (let id in this.webapps) {
           let isPreinstalled = this.installPreinstalledApp(id);
           this.removeIfHttpsDuplicate(id);
           if (!this.webapps[id]) {
new file mode 100644
--- /dev/null
+++ b/dom/apps/tests/unit/test_manifestHelper.js
@@ -0,0 +1,23 @@
+// Test that W3C start_url takes precedence over mozApps launch_path
+function run_test() {
+  Components.utils.import("resource:///modules/AppsUtils.jsm");
+
+  let manifest1 = {
+    launch_path: "other.html"
+  };
+
+  let manifest2 = {
+    start_url: "start.html",
+    launch_path: "other.html"
+  };
+
+  var helper = new ManifestHelper(manifest1, "http://foo.com",
+    "http://foo.com/manifest.json");
+  var path = helper.fullLaunchPath();
+  do_check_true(path == "http://foo.com/other.html");
+
+  helper = new ManifestHelper(manifest2, "http://foo.com",
+    "http://foo.com/manifest.json");
+  path = helper.fullLaunchPath();
+  do_check_true(path == "http://foo.com/start.html");
+}
--- a/dom/apps/tests/unit/xpcshell.ini
+++ b/dom/apps/tests/unit/xpcshell.ini
@@ -1,7 +1,8 @@
 [DEFAULT]
 head =
 tail =
 
 [test_has_widget_criterion.js]
 [test_inter_app_comm_service.js]
 [test_manifestSanitizer.js]
+[test_manifestHelper.js]
--- a/dom/mobilemessage/tests/marionette/test_getthreads.js
+++ b/dom/mobilemessage/tests/marionette/test_getthreads.js
@@ -1,407 +1,182 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-MARIONETTE_TIMEOUT = 40000;
-
-SpecialPowers.addPermission("sms", true, document);
-SpecialPowers.setBoolPref("dom.sms.enabled", true);
-
-let manager = window.navigator.mozMobileMessage;
-ok(manager instanceof MozMobileMessageManager,
-   "manager is instance of " + manager.constructor);
+MARIONETTE_TIMEOUT = 90000;
+MARIONETTE_HEAD_JS = 'head.js';
 
-let pendingEmulatorCmdCount = 0;
-function sendSmsToEmulator(from, text, callback) {
-  ++pendingEmulatorCmdCount;
+/**
+ * Create messages to be tested.
+ *
+ * @param aMessages
+ *        An array of
+ *          { 'incoming': [false|true],
+ *            'address': [Phone Number]
+ *            'text': [Text Body] };
+ *
+ * @return A deferred promise.
+ */
+function createMessages(aMessages) {
+  let promise = Promise.resolve();
+  aMessages.forEach((aMessage) => {
+    promise = promise.then((aMessage.incoming) ?
+      () => sendTextSmsToEmulatorAndWait(aMessage.address, aMessage.text) :
+      () => sendSmsWithSuccess(aMessage.address, aMessage.text));
+  });
 
-  let cmd = "sms send " + from + " " + text;
-  runEmulatorCmd(cmd, function(result) {
-    --pendingEmulatorCmdCount;
-
-    callback(result[0] == "OK");
-  });
+  return promise;
 }
 
-let tasks = {
-  // List of test fuctions. Each of them should call |tasks.next()| when
-  // completed or |tasks.finish()| to jump to the last one.
-  _tasks: [],
-  _nextTaskIndex: 0,
-
-  push: function(func) {
-    this._tasks.push(func);
-  },
-
-  next: function() {
-    let index = this._nextTaskIndex++;
-    let task = this._tasks[index];
-    try {
-      task.apply(null, Array.slice(arguments));
-    } catch (ex) {
-      ok(false, "test task[" + index + "] throws: " + ex);
-      // Run last task as clean up if possible.
-      if (index != this._tasks.length - 1) {
-        this.finish();
-      }
-    }
-  },
-
-  finish: function() {
-    this._tasks[this._tasks.length - 1]();
-  },
-
-  run: function() {
-    this.next();
-  }
-};
-
-function getAllMessages(callback, filter, reverse) {
-  let messages = [];
-  let request = manager.getMessages(filter, reverse || false);
-  request.onsuccess = function(event) {
-    if (!request.done) {
-      messages.push(request.result);
-      request.continue();
-      return;
-    }
-
-    window.setTimeout(callback.bind(null, messages), 0);
-  }
-}
+function checkThreads(aMessages, aNotMerged) {
+  return getAllThreads().then((aThreads) => {
+    let threadCount = aThreads.length;
 
-function deleteAllMessages() {
-  getAllMessages(function deleteAll(messages) {
-    let message = messages.shift();
-    if (!message) {
-      ok(true, "all messages deleted");
-      tasks.next();
-      return;
-    }
-
-    let request = manager.delete(message.id);
-    request.onsuccess = deleteAll.bind(null, messages);
-    request.onerror = function(event) {
-      ok(false, "failed to delete all messages");
-      tasks.finish();
-    }
-  });
-}
+    if (aNotMerged) {
+      // Threads are retrieved in reversed order of 'lastTimestamp'.
+      aThreads.reverse();
+      is(threadCount, aMessages.length, "Number of Threads.");
+      for (let i = 0; i < threadCount; i++) {
+        let thread = aThreads[i];
+        let message = aMessages[i];
+        is(thread.unreadCount, message.incoming ? 1 : 0, "Unread Count.");
+        is(thread.participants.length, 1, "Number of Participants.");
+        is(thread.participants[0], message.address, "Participants.");
+        is(thread.body, message.text, "Thread Body.");
+      }
 
-function sendMessage(to, body) {
-  manager.onsent = function() {
-    manager.onsent = null;
-    tasks.next();
-  };
-  let request = manager.send(to, body);
-  request.onerror = tasks.finish.bind(tasks);
-}
-
-function receiveMessage(from, body) {
-  manager.onreceived = function() {
-    manager.onreceived = null;
-    tasks.next();
-  };
-  sendSmsToEmulator(from, body, function(success) {
-    if (!success) {
-      tasks.finish();
-    }
-  });
-}
-
-function getAllThreads(callback) {
-  let threads = [];
-
-  let cursor = manager.getThreads();
-  ok(cursor instanceof DOMCursor,
-     "cursor is instanceof " + cursor.constructor);
-
-  cursor.onsuccess = function(event) {
-    if (!cursor.done) {
-      threads.push(cursor.result);
-      cursor.continue();
       return;
     }
 
-    window.setTimeout(callback.bind(null, threads), 0);
-  };
+    let lastBody = aMessages[aMessages.length - 1].text;
+    let unreadCount = 0;
+    let mergedThread = aThreads[0];
+    aMessages.forEach((aMessage) => {
+      if (aMessage.incoming) {
+        unreadCount++;
+      }
+    });
+    is(threadCount, 1, "Number of Threads.");
+    is(mergedThread.unreadCount, unreadCount, "Unread Count.");
+    is(mergedThread.participants.length, 1, "Number of Participants.");
+    is(mergedThread.participants[0], aMessages[0].address, "Participants.");
+    // Thread is updated according to the device 'timestamp' of the message record
+    // instead of the one from SMSC, so 'mergedThread.body' is expected to be the
+    // same to the body for the last saved SMS.
+    // See https://hg.mozilla.org/mozilla-central/annotate/436686833af0/dom/mobilemessage/gonk/MobileMessageDB.jsm#l2247
+    is(mergedThread.body, lastBody, "Thread Body.");
+  });
 }
 
-function checkThread(bodies, lastBody, unreadCount, participants,
-                     thread, callback) {
-  log("Validating MozMobileMessageThread attributes " +
-      JSON.stringify([bodies, lastBody, unreadCount, participants]));
-
-  ok(thread, "current thread should be valid.");
-
-  ok(thread.id, "thread id", "thread.id");
-  log("Got thread " + thread.id);
-
-  if (lastBody != null) {
-    is(thread.body, lastBody, "thread.body");
-  }
-
-  is(thread.unreadCount, unreadCount, "thread.unreadCount");
-
-  ok(Array.isArray(thread.participants), "thread.participants is array");
-  is(thread.participants.length, participants.length,
-     "thread.participants.length");
-  for (let i = 0; i < participants.length; i++) {
-    is(thread.participants[i], participants[i],
-       "thread.participants[" + i + "]");
-  }
-
-  // Check whether the thread does contain all the messages it supposed to have.
-  let filter = { threadId: thread.id };
-  getAllMessages(function(messages) {
-    is(messages.length, bodies.length, "messages.length and bodies.length");
-
-    for (let message of messages) {
-      let index = bodies.indexOf(message.body);
-      ok(index >= 0, "message.body '" + message.body +
-         "' should be found in bodies array.");
-      bodies.splice(index, 1);
-    }
-
-    is(bodies.length, 0, "bodies array length");
-
-    window.setTimeout(callback, 0);
-  }, filter, false);
+function testGetThreads(aMessages, aNotMerged) {
+  aNotMerged = !!aNotMerged;
+  log("aMessages: " + JSON.stringify(aMessages));
+  log("aNotMerged: " + aNotMerged);
+  return createMessages(aMessages)
+    .then(() => checkThreads(aMessages, aNotMerged))
+    .then(() => deleteAllMessages());
 }
 
-tasks.push(deleteAllMessages);
-
-tasks.push(getAllThreads.bind(null, function(threads) {
-  is(threads.length, 0, "Empty thread list at beginning.");
-  tasks.next();
-}));
-
-// Populate MobileMessageDB with messages.
-let checkFuncs = [];
-
-// [Thread 1]
-// One message only, body = "thread 1";
-// All sent message, unreadCount = 0;
-// One participant only, participants = ["5555211001"].
-tasks.push(sendMessage.bind(null, "5555211001", "thread 1"));
-checkFuncs.push(checkThread.bind(null, ["thread 1"],
-                                 "thread 1", 0, ["5555211001"]));
-
-// [Thread 2]
-// Two messages, body = "thread 2-2";
-// All sent message, unreadCount = 0;
-// One participant with two aliased addresses, participants = ["5555211002"].
-tasks.push(sendMessage.bind(null, "5555211002",   "thread 2-1"));
-tasks.push(sendMessage.bind(null, "+15555211002", "thread 2-2"));
-checkFuncs.push(checkThread.bind(null, ["thread 2-1", "thread 2-2"],
-                                 "thread 2-2", 0, ["5555211002"]));
-
-// [Thread 3]
-// Two messages, body = "thread 3-2";
-// All sent message, unreadCount = 0;
-// One participant with two aliased addresses, participants = ["+15555211003"].
-tasks.push(sendMessage.bind(null, "+15555211003", "thread 3-1"));
-tasks.push(sendMessage.bind(null, "5555211003",   "thread 3-2"));
-checkFuncs.push(checkThread.bind(null, ["thread 3-1", "thread 3-2"],
-                                 "thread 3-2", 0, ["+15555211003"]));
-
-// [Thread 4]
-// One message only, body = "thread 4";
-// All received message, unreadCount = 1;
-// One participant only, participants = ["5555211004"].
-tasks.push(receiveMessage.bind(null, "5555211004", "thread 4"));
-checkFuncs.push(checkThread.bind(null, ["thread 4"],
-                                 "thread 4", 1, ["5555211004"]));
-
-// [Thread 5]
-//
-// Thread body should be set to text body of the last message in this
-// thread. However due to BUG 840051, we're having SMSC time as message
-// timestamp and SMSC time resolution is 1 second. So it's likely that the two
-// messages have the same timestamp and we just can't tell which is the later
-// one.
-//
-// All received message, unreadCount = 2;
-// One participant with two aliased addresses, participants = ["5555211005"].
-tasks.push(receiveMessage.bind(null, "5555211005",   "thread 5-1"));
-tasks.push(receiveMessage.bind(null, "+15555211005", "thread 5-2"));
-checkFuncs.push(checkThread.bind(null, ["thread 5-1", "thread 5-2"],
-                                 null, 2, ["5555211005"]));
-
-// [Thread 6]
-//
-// Thread body should be set to text body of the last message in this
-// thread. However due to BUG 840051, we're having SMSC time as message
-// timestamp and SMSC time resolution is 1 second. So it's likely that the two
-// messages have the same timestamp and we just can't tell which is the later
-// one.
-//
-// All received message, unreadCount = 2;
-// One participant with two aliased addresses, participants = ["+15555211006"].
-tasks.push(receiveMessage.bind(null, "+15555211006", "thread 6-1"));
-tasks.push(receiveMessage.bind(null, "5555211006",   "thread 6-2"));
-checkFuncs.push(checkThread.bind(null, ["thread 6-1", "thread 6-2"],
-                                 null, 2, ["+15555211006"]));
-
-// [Thread 7]
-//
-// Thread body should be set to text body of the last message in this
-// thread. However due to BUG 840051, there might be time difference between
-// SMSC and device time. So the result of comparing the timestamps of sent and
-// received message may not follow the order of requests and may result in
-// UNEXPECTED-FAIL in following tests.
-//
-// Two received message, unreadCount = 2;
-// One participant with two aliased addresses, participants = ["5555211007"].
-tasks.push(sendMessage.bind(null,    "5555211007",   "thread 7-1"));
-tasks.push(sendMessage.bind(null,    "+15555211007", "thread 7-2"));
-tasks.push(receiveMessage.bind(null, "5555211007",   "thread 7-3"));
-tasks.push(receiveMessage.bind(null, "+15555211007", "thread 7-4"));
-checkFuncs.push(checkThread.bind(null, ["thread 7-1", "thread 7-2",
-                                        "thread 7-3", "thread 7-4"],
-                                 null, 2, ["5555211007"]));
-
-// [Thread 8]
-//
-// Thread body should be set to text body of the last message in this
-// thread. However due to BUG 840051, there might be time difference between
-// SMSC and device time. So the result of comparing the timestamps of sent and
-// received message may not follow the order of requests and may result in
-// UNEXPECTED-FAIL in following tests.
-//
-// Two received message, unreadCount = 2;
-// One participant with two aliased addresses, participants = ["5555211008"].
-tasks.push(receiveMessage.bind(null, "5555211008",   "thread 8-1"));
-tasks.push(receiveMessage.bind(null, "+15555211008", "thread 8-2"));
-tasks.push(sendMessage.bind(null,    "5555211008",   "thread 8-3"));
-tasks.push(sendMessage.bind(null,    "+15555211008", "thread 8-4"));
-checkFuncs.push(checkThread.bind(null, ["thread 8-1", "thread 8-2",
-                                        "thread 8-3", "thread 8-4"],
-                                 null, 2, ["5555211008"]));
-
-// [Thread 9]
-// Three sent message, unreadCount = 0;
-// One participant with three aliased addresses, participants = ["+15555211009"].
-tasks.push(sendMessage.bind(null, "+15555211009",  "thread 9-1"));
-tasks.push(sendMessage.bind(null, "01115555211009", "thread 9-2"));
-tasks.push(sendMessage.bind(null, "5555211009",    "thread 9-3"));
-checkFuncs.push(checkThread.bind(null, ["thread 9-1", "thread 9-2",
-                                        "thread 9-3"],
-                                 "thread 9-3", 0, ["+15555211009"]));
-
-// [Thread 10]
-// Three sent message, unreadCount = 0;
-// One participant with three aliased addresses, participants = ["+15555211010"].
-tasks.push(sendMessage.bind(null, "+15555211010",  "thread 10-1"));
-tasks.push(sendMessage.bind(null, "5555211010",    "thread 10-2"));
-tasks.push(sendMessage.bind(null, "01115555211010", "thread 10-3"));
-checkFuncs.push(checkThread.bind(null, ["thread 10-1", "thread 10-2",
-                                        "thread 10-3"],
-                                 "thread 10-3", 0, ["+15555211010"]));
-
-// [Thread 11]
-// Three sent message, unreadCount = 0;
-// One participant with three aliased addresses, participants = ["01115555211011"].
-tasks.push(sendMessage.bind(null, "01115555211011", "thread 11-1"));
-tasks.push(sendMessage.bind(null, "5555211011",    "thread 11-2"));
-tasks.push(sendMessage.bind(null, "+15555211011",  "thread 11-3"));
-checkFuncs.push(checkThread.bind(null, ["thread 11-1", "thread 11-2",
-                                        "thread 11-3"],
-                                 "thread 11-3", 0, ["01115555211011"]));
-
-// [Thread 12]
-// Three sent message, unreadCount = 0;
-// One participant with three aliased addresses, participants = ["01115555211012"].
-tasks.push(sendMessage.bind(null, "01115555211012", "thread 12-1"));
-tasks.push(sendMessage.bind(null, "+15555211012",  "thread 12-2"));
-tasks.push(sendMessage.bind(null, "5555211012",    "thread 12-3"));
-checkFuncs.push(checkThread.bind(null, ["thread 12-1", "thread 12-2",
-                                        "thread 12-3"],
-                                 "thread 12-3", 0, ["01115555211012"]));
-
-// [Thread 13]
-// Three sent message, unreadCount = 0;
-// One participant with three aliased addresses, participants = ["5555211013"].
-tasks.push(sendMessage.bind(null, "5555211013",    "thread 13-1"));
-tasks.push(sendMessage.bind(null, "+15555211013",  "thread 13-2"));
-tasks.push(sendMessage.bind(null, "01115555211013", "thread 13-3"));
-checkFuncs.push(checkThread.bind(null, ["thread 13-1", "thread 13-2",
-                                        "thread 13-3"],
-                                 "thread 13-3", 0, ["5555211013"]));
-
-// [Thread 14]
-// Three sent message, unreadCount = 0;
-// One participant with three aliased addresses, participants = ["5555211014"].
-tasks.push(sendMessage.bind(null, "5555211014",     "thread 14-1"));
-tasks.push(sendMessage.bind(null, "01115555211014", "thread 14-2"));
-tasks.push(sendMessage.bind(null, "+15555211014",   "thread 14-3"));
-checkFuncs.push(checkThread.bind(null, ["thread 14-1", "thread 14-2",
-                                        "thread 14-3"],
-                                 "thread 14-3", 0, ["5555211014"]));
-
-//[Thread 15]
-//Three sent message, unreadCount = 0;
-//One participant but might be merged to 555211015, participants = ["5555211015"].
-tasks.push(sendMessage.bind(null, "5555211015", "thread 15-1"));
-checkFuncs.push(checkThread.bind(null, ["thread 15-1"],
-                                 "thread 15-1", 0, ["5555211015"]));
-
-//[Thread 16]
-//Three sent message, unreadCount = 0;
-//One participant but might be merged to 5555211015, participants = ["555211015"].
-tasks.push(sendMessage.bind(null, "555211015", "thread 16-1"));
-checkFuncs.push(checkThread.bind(null, ["thread 16-1"],
-                                 "thread 16-1", 0, ["555211015"]));
-
-//[Thread 17]
-//Three sent message, unreadCount = 0;
-//One participant with two aliased addresses, participants = ["555211017"].
-tasks.push(sendMessage.bind(null, "+5511555211017", "thread 17-1"));
-tasks.push(sendMessage.bind(null, "555211017",      "thread 17-2"));
-checkFuncs.push(checkThread.bind(null, ["thread 17-1", "thread 17-2"],
-                                 "thread 17-2", 0, ["+5511555211017"]));
-
-//[Thread 18]
-//Three sent message, unreadCount = 0;
-//One participant with two aliased addresses, participants = ["555211018"].
-tasks.push(sendMessage.bind(null, "555211018",      "thread 18-1"));
-tasks.push(sendMessage.bind(null, "+5511555211018", "thread 18-2"));
-checkFuncs.push(checkThread.bind(null, ["thread 18-1", "thread 18-2"],
-                                 "thread 18-2", 0, ["555211018"]));
-
-// Check threads.
-tasks.push(getAllThreads.bind(null, function(threads) {
-  is(threads.length, checkFuncs.length, "number of threads got");
-
-  // Reverse threads as we iterate over them in reverse order
-  threads.reverse();
-
-  (function callback() {
-    if (!threads.length) {
-      tasks.next();
-      return;
-    }
-
-    checkFuncs.shift()(threads.shift(), callback);
-  })();
-}));
-
-tasks.push(deleteAllMessages);
-
-tasks.push(getAllThreads.bind(null, function(threads) {
-  is(threads.length, 0, "Empty thread list at the end.");
-  tasks.next();
-}));
-
-// WARNING: All tasks should be pushed before this!!!
-tasks.push(function cleanUp() {
-  if (pendingEmulatorCmdCount) {
-    window.setTimeout(cleanUp, 100);
-    return;
-  }
-
-  SpecialPowers.removePermission("sms", document);
-  SpecialPowers.clearUserPref("dom.sms.enabled");
-  finish();
+startTestCommon(function testCaseMain() {
+  // [Thread 1]
+  // One message only, body = "thread 1";
+  // All sent message, unreadCount = 0;
+  // One participant only, participants = ["5555211001"].
+  return testGetThreads([{ incoming: false, address: "5555211001", text: "thread 1" }])
+  // [Thread 2]
+  // Two messages, body = "thread 2-2";
+  // All sent message, unreadCount = 0;
+  // One participant with two aliased addresses, participants = ["5555211002"].
+    .then(() => testGetThreads([{ incoming: false, address: "5555211002", text: "thread 2-1" },
+                                { incoming: false, address: "+15555211002", text: "thread 2-2" }]))
+  // [Thread 3]
+  // Two messages, body = "thread 3-2";
+  // All sent message, unreadCount = 0;
+  // One participant with two aliased addresses, participants = ["+15555211003"].
+    .then(() => testGetThreads([{ incoming: false, address: "+15555211003", text: "thread 3-1" },
+                                { incoming: false, address: "5555211003", text: "thread 3-2" }]))
+  // [Thread 4]
+  // One message only, body = "thread 4";
+  // All received message, unreadCount = 1;
+  // One participant only, participants = ["5555211004"].
+    .then(() => testGetThreads([{ incoming: true, address: "5555211004", text: "thread 4" }]))
+  // [Thread 5]
+  // All received messages, unreadCount = 2;
+  // One participant with two aliased addresses, participants = ["5555211005"].
+    .then(() => testGetThreads([{ incoming: true, address: "5555211005", text: "thread 5-1" },
+                                { incoming: true, address: "+15555211005", text: "thread 5-2" },]))
+  // [Thread 6]
+  // All received messages, unreadCount = 2;
+  // One participant with two aliased addresses, participants = ["+15555211006"].
+    .then(() => testGetThreads([{ incoming: true, address: "+15555211006", text: "thread 6-1" },
+                                { incoming: true, address: "5555211006", text: "thread 6-2" }]))
+  // [Thread 7]
+  // 2 sent and then 2 received messages, unreadCount = 2;
+  // One participant with two aliased addresses, participants = ["5555211007"].
+    .then(() => testGetThreads([{ incoming: false, address: "5555211007", text: "thread 7-1" },
+                                { incoming: false, address: "+15555211007", text: "thread 7-2" },
+                                { incoming: true, address: "5555211007", text: "thread 7-3" },
+                                { incoming: true, address: "+15555211007", text: "thread 7-4" }]))
+  // [Thread 8]
+  // 2 received and then 2 sent messages, unreadCount = 2;
+  // One participant with two aliased addresses, participants = ["5555211008"].
+    .then(() => testGetThreads([{ incoming: true, address: "5555211008", text: "thread 8-1" },
+                                { incoming: true, address: "+15555211008", text: "thread 8-2" },
+                                { incoming: false, address: "5555211008", text: "thread 8-3" },
+                                { incoming: false, address: "+15555211008", text: "thread 8-4" }]))
+  // [Thread 9]
+  // Three sent message, unreadCount = 0;
+  // One participant with three aliased addresses, participants = ["+15555211009"].
+    .then(() => testGetThreads([{ incoming: false, address: "+15555211009", text: "thread 9-1" },
+                                { incoming: false, address: "01115555211009", text: "thread 9-2" },
+                                { incoming: false, address: "5555211009", text: "thread 9-3" }]))
+  // [Thread 10]
+  // Three sent message, unreadCount = 0;
+  // One participant with three aliased addresses, participants = ["+15555211010"].
+    .then(() => testGetThreads([{ incoming: false, address: "+15555211010", text: "thread 10-1" },
+                                { incoming: false, address: "5555211010", text: "thread 10-2" },
+                                { incoming: false, address: "01115555211010", text: "thread 10-3" }]))
+  // [Thread 11]
+  // Three sent message, unreadCount = 0;
+  // One participant with three aliased addresses, participants = ["01115555211011"].
+    .then(() => testGetThreads([{ incoming: false, address: "01115555211011", text: "thread 11-1" },
+                                { incoming: false, address: "5555211011", text: "thread 11-2" },
+                                { incoming: false, address: "+15555211011", text: "thread 11-3" }]))
+  // [Thread 12]
+  // Three sent message, unreadCount = 0;
+  // One participant with three aliased addresses, participants = ["01115555211012"].
+    .then(() => testGetThreads([{ incoming: false, address: "01115555211012", text: "thread 12-1" },
+                                { incoming: false, address: "+15555211012", text: "thread 12-2" },
+                                { incoming: false, address: "5555211012", text: "thread 12-3" }]))
+  // [Thread 13]
+  // Three sent message, unreadCount = 0;
+  // One participant with three aliased addresses, participants = ["5555211013"].
+    .then(() => testGetThreads([{ incoming: false, address: "5555211013", text: "thread 13-1" },
+                                { incoming: false, address: "+15555211013", text: "thread 13-2" },
+                                { incoming: false, address: "01115555211013", text: "thread 13-3" }]))
+  // [Thread 14]
+  // Three sent message, unreadCount = 0;
+  // One participant with three aliased addresses, participants = ["5555211014"].
+    .then(() => testGetThreads([{ incoming: false, address: "5555211014", text: "thread 14-1" },
+                                { incoming: false, address: "01115555211014", text: "thread 14-2" },
+                                { incoming: false, address: "+15555211014", text: "thread 14-3" }]))
+  // [Thread 15]
+  // One sent message, unreadCount = 0;
+  // One participant but might be merged to 555211015, participants = ["5555211015"].
+  // [Thread 16]
+  // One sent message, unreadCount = 0;
+  // One participant but might be merged to 5555211015, participants = ["555211015"].
+    .then(() => testGetThreads([{ incoming: false, address: "5555211015", text: "thread 15-1" },
+                                { incoming: false, address: "555211015", text: "thread 16-1" }],
+                                true))
+  // [Thread 17]
+  // Brazil number format: +55-aa-nnnnnnnn. (2-digit area code and 8-digit number)
+  // Two sent messages, unreadCount = 0;
+  // One participant with two aliased addresses, participants = ["+551155211017"].
+    .then(() => testGetThreads([{ incoming: false, address: "+551155211017", text: "thread 17-1" },
+                                { incoming: false, address: "1155211017", text: "thread 17-2" }]))
+  // [Thread 18]
+  // Brazil number format: +55-aa-nnnnnnnn. (2-digit area code and 8-digit number)
+  // All sent messages, unreadCount = 0;
+  // One participant with two aliased addresses, participants = ["1155211018"].
+    .then(() => testGetThreads([{ incoming: false, address: "1155211018", text: "thread 18-1" },
+                                { incoming: false, address: "+551155211018", text: "thread 18-2" }]));
 });
-
-tasks.run();
--- a/testing/docker/tester/Dockerfile
+++ b/testing/docker/tester/Dockerfile
@@ -1,27 +1,28 @@
 FROM          quay.io/mozilla/base-test:0.0.5
 MAINTAINER    Jonas Finnemann Jensen <jopsen@gmail.com>
 
 # Add utilities and configuration
 COPY           b2g-desktop-config.py         /home/worker/b2g-desktop-config.py
 COPY           dot-config                    /home/worker/.config
 COPY           dot-pulse                     /home/worker/.pulse
-COPY           hgrc                          /home/worker/.hgrc
 COPY           bin                           /home/worker/bin
 COPY           mozharness_configs            /home/worker/mozharness_configs
 COPY           buildprops.json               /home/worker/buildprops.json
+ADD            https://s3-us-west-2.amazonaws.com/test-caching/packages/linux64-stackwalk /usr/local/bin/linux64-minidump_stackwalk
 ADD            https://raw.githubusercontent.com/taskcluster/buildbot-step/master/buildbot_step /home/worker/bin/buildbot_step
 
 
 # Run test setup script
 RUN chmod u+x /home/worker/bin/buildbot_step
+RUN chmod u+x /usr/local/bin/linux64-minidump_stackwalk
 RUN apt-get install -y python-pip && pip install virtualenv;
 RUN mkdir Documents; mkdir Pictures; mkdir Music; mkdir Videos; mkdir artifacts
 RUN chown -R worker:worker /home/worker/* /home/worker/.*
-RUN npm install -g taskcluster-vcs@2.3.1
+RUN npm install -g taskcluster-vcs@2.3.4
 ENV PATH $PATH:/home/worker/bin
 
 # TODO Re-enable worker when bug 1093833 lands
 #USER          worker
 
 # Set a default command useful for debugging
 CMD ["/bin/bash", "--login"]
--- a/testing/docker/tester/VERSION
+++ b/testing/docker/tester/VERSION
@@ -1,1 +1,1 @@
-0.2.6
+0.2.8
deleted file mode 100644
--- a/testing/docker/tester/hgrc
+++ /dev/null
@@ -1,2 +0,0 @@
-[extensions]
-share =
--- a/testing/docker/tester/mozharness_configs/remove_executables.py
+++ b/testing/docker/tester/mozharness_configs/remove_executables.py
@@ -1,3 +1,6 @@
 config = {
+    # We bake this directly into the tester image now...
+    "download_minidump_stackwalk": False,
+    "minidump_stackwalk_path": "/usr/local/bin/linux64-minidump_stackwalk",
     "exes": {}
 }
--- a/testing/taskcluster/tasks/test.yml
+++ b/testing/taskcluster/tasks/test.yml
@@ -11,24 +11,22 @@ task:
   provisionerId: aws-provisioner
   schedulerId: task-graph-scheduler
 
   scopes:
     - 'docker-worker:image:{{#docker_image}}tester{{/docker_image}}'
     - 'queue:define-task:aws-provisioner/test-c4-2xlarge'
     - 'queue:create-task:aws-provisioner/test-c4-2xlarge'
     - 'docker-worker:cache:tc-vcs'
-    - 'docker-worker:cache:buildshare'
 
   payload:
     image: '{{#docker_image}}tester{{/docker_image}}'
     maxRunTime: 3600
     cache:
       tc-vcs: '/home/worker/.tc-vcs'
-      buildshare: '/builds/'
     env:
       GAIA_HEAD_REPOSITORY: '{{{gaia_head_repository}}}'
       GAIA_BASE_REPOSITORY: '{{{gaia_base_repository}}}'
       GAIA_REF: '{{{gaia_ref}}}'
       GAIA_REV: '{{{gaia_rev}}}'
       MOZHARNESS_REPOSITORY: '{{mozharness_repository}}'
       MOZHARNESS_REV: '{{mozharness_rev}}'
 
--- a/testing/taskcluster/tasks/tests/b2g_build_test.yml
+++ b/testing/taskcluster/tasks/tests/b2g_build_test.yml
@@ -10,16 +10,17 @@ task:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/gaia_build_integration.py
         --no-read-buildbot-config
         --config-file ./mozharness/configs/b2g/gaia_integration_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --download-symbols ondemand
         --gaia-repo https://hg.mozilla.org/integration/gaia-central
         --gaia-dir /home/worker
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre.linux-x86_64.zip
     artifacts:
       'public/build':
--- a/testing/taskcluster/tasks/tests/b2g_build_unit.yml
+++ b/testing/taskcluster/tasks/tests/b2g_build_unit.yml
@@ -10,16 +10,17 @@ task:
     command:
       - entrypoint
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/gaia_build_unit.py
         --no-read-buildbot-config
         --config-file ./mozharness/configs/b2g/gaia_integration_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --gaia-repo https://hg.mozilla.org/integration/gaia-central
         --gaia-dir /home/worker
     artifacts:
       'public/build':
         type: directory
--- a/testing/taskcluster/tasks/tests/b2g_emulator_cpp_unit.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_cpp_unit.yml
@@ -9,16 +9,17 @@ task:
   workerType: b2gtest-emulator
   payload:
     command:
       - entrypoint
       - >
         python ./mozharness/scripts/b2g_emulator_unittest.py
         --config-file ./mozharness/configs/b2g/emulator_automation_config.py
         --config-file ./mozharness_configs/emulator_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --test-suite cppunittest
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre_linux_x86.zip
     artifacts:
       'public/build':
         type: directory
--- a/testing/taskcluster/tasks/tests/b2g_emulator_crashtest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_crashtest.yml
@@ -10,16 +10,17 @@ task:
   payload:
     maxRunTime: 3600
     command:
       - entrypoint
       - >
         python ./mozharness/scripts/b2g_emulator_unittest.py
         --config-file ./mozharness/configs/b2g/emulator_automation_config.py
         --config-file ./mozharness_configs/emulator_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --test-suite crashtest
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre_linux_x86.zip
         --this-chunk {{chunk}}
         --total-chunk {{total_chunks}}
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_js_reftest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_js_reftest.yml
@@ -9,16 +9,17 @@ task:
   workerType: b2gtest-emulator
   payload:
     command:
       - entrypoint
       - >
         python ./mozharness/scripts/b2g_emulator_unittest.py
         --config-file ./mozharness/configs/b2g/emulator_automation_config.py
         --config-file ./mozharness_configs/emulator_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --test-suite jsreftest
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre_linux_x86.zip
         --this-chunk {{chunk}}
         --total-chunk {{total_chunks}}
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_mochitest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_mochitest.yml
@@ -11,16 +11,17 @@ task:
     maxRunTime: 7200
     command:
       - entrypoint
       - >
         python ./mozharness/scripts/b2g_emulator_unittest.py
         --config-file ./mozharness/configs/b2g/emulator_automation_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
         --config-file ./mozharness_configs/emulator_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --test-suite mochitest
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre_linux_x86.zip
         --this-chunk {{chunk}}
         --total-chunk {{total_chunks}}
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_mochitest_media.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_mochitest_media.yml
@@ -10,16 +10,17 @@ task:
   payload:
     command:
       - entrypoint
       - >
         python ./mozharness/scripts/b2g_emulator_unittest.py
         --config-file ./mozharness/configs/b2g/emulator_automation_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
         --config-file ./mozharness_configs/emulator_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --test-suite mochitest
         --test-path dom/media/tests/
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre_linux_x86.zip
     artifacts:
       'public/build':
--- a/testing/taskcluster/tasks/tests/b2g_emulator_reftest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_reftest.yml
@@ -9,16 +9,17 @@ task:
   workerType: b2gtest-emulator
   payload:
     command:
       - entrypoint
       - >
         python ./mozharness/scripts/b2g_emulator_unittest.py
         --config-file ./mozharness/configs/b2g/emulator_automation_config.py
         --config-file ./mozharness_configs/emulator_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --test-suite reftest
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre_linux_x86.zip
         --this-chunk {{chunk}}
         --total-chunk {{total_chunks}}
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_xpcshell.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_xpcshell.yml
@@ -10,16 +10,17 @@ task:
   payload:
     maxRunTime: 6000
     command:
       - entrypoint
       - >
         python ./mozharness/scripts/b2g_emulator_unittest.py
         --config-file ./mozharness/configs/b2g/emulator_automation_config.py
         --config-file ./mozharness_configs/emulator_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --test-suite xpcshell
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre_linux_x86.zip
     artifacts:
       'public/build':
         type: directory
--- a/testing/taskcluster/tasks/tests/b2g_emulator_xpcshell_chunked.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_xpcshell_chunked.yml
@@ -10,16 +10,17 @@ task:
   payload:
     maxRunTime: 6000
     command:
       - entrypoint
       - >
         python ./mozharness/scripts/b2g_emulator_unittest.py
         --config-file ./mozharness/configs/b2g/emulator_automation_config.py
         --config-file ./mozharness_configs/emulator_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --test-suite xpcshell
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre_linux_x86.zip
         --this-chunk {{chunk}}
         --total-chunk {{total_chunks}}
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml
@@ -10,16 +10,17 @@ task:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/gaia_integration.py
         --no-read-buildbot-config
         --config-file b2g/gaia_integration_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --download-symbols ondemand
         --total-chunk {{total_chunks}}
         --this-chunk {{chunk}}
         --gaia-repo https://hg.mozilla.org/integration/gaia-central
         --gaia-dir /home/worker
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_accessibility.yml
@@ -10,16 +10,17 @@ task:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/marionette.py
         --no-read-buildbot-config
         --config-file marionette/gaia_ui_test_prod_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --download-symbols ondemand
         --gip-suite accessibility
         --gaia-repo https://hg.mozilla.org/integration/gaia-central
         --gaia-dir /home/worker
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre.linux-x86_64.zip
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_functional.yml
@@ -10,16 +10,17 @@ task:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/marionette.py
         --no-read-buildbot-config
         --config-file marionette/gaia_ui_test_prod_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --download-symbols ondemand
         --gip-suite functional
         --total-chunk {{total_chunks}}
         --this-chunk {{chunk}}
         --gaia-repo https://hg.mozilla.org/integration/gaia-central
         --gaia-dir /home/worker
--- a/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gaia_ui_test_unit.yml
@@ -10,16 +10,17 @@ task:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/marionette.py
         --no-read-buildbot-config
         --config-file marionette/gaia_ui_test_prod_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --download-symbols ondemand
         --gip-suite unit
         --gaia-repo https://hg.mozilla.org/integration/gaia-central
         --gaia-dir /home/worker
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre.linux-x86_64.zip
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml
@@ -10,16 +10,17 @@ task:
     command:
       - entrypoint
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/gaia_unit.py
         --no-read-buildbot-config
         --config-file ./mozharness/configs/b2g/gaia_unit_production_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --download-symbols ondemand
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --gaia-repo https://hg.mozilla.org/integration/gaia-central
         --gaia-dir /home/worker
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre.linux-x86_64.zip
     artifacts:
       'public/build':
--- a/testing/taskcluster/tasks/tests/b2g_gaia_unit_oop.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gaia_unit_oop.yml
@@ -10,16 +10,17 @@ task:
     command:
       - entrypoint
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/gaia_unit.py
         --no-read-buildbot-config
         --config-file ./mozharness/configs/b2g/gaia_unit_production_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --browser-arg -oop
         --download-symbols ondemand
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --gaia-repo https://hg.mozilla.org/integration/gaia-central
         --gaia-dir /home/worker
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre.linux-x86_64.zip
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_gip_oop.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gip_oop.yml
@@ -10,16 +10,17 @@ task:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/marionette.py
         --no-read-buildbot-config
         --config-file marionette/gaia_ui_test_prod_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --app-arg -oop
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --download-symbols ondemand
         --gaia-repo https://hg.mozilla.org/integration/gaia-central
         --gaia-dir /home/worker
         --xre-url https://s3-us-west-2.amazonaws.com/test-caching/packages/xre.linux-x86_64.zip
     artifacts:
--- a/testing/taskcluster/tasks/tests/b2g_mochitest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_mochitest.yml
@@ -8,16 +8,17 @@ task:
 
   payload:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
       - >
         python ./mozharness/scripts/b2g_desktop_unittest.py
         --no-read-buildbot-config
         --config-file /home/worker/b2g-desktop-config.py
+        --config-file ./mozharness_configs/remove_executables.py
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --download-symbols ondemand
         --test-suite mochitest
         --total-chunk={{total_chunks}}
         --this-chunk={{chunk}}
     artifacts:
       'public/build':
--- a/testing/taskcluster/tasks/tests/mulet_gaia_js_integration_tests.yml
+++ b/testing/taskcluster/tasks/tests/mulet_gaia_js_integration_tests.yml
@@ -11,16 +11,17 @@ task:
       - entrypoint # entrypoint ensures we are running in xvfb
       - ./bin/pull_gaia.sh &&
       - >
         python ./mozharness/scripts/gaia_integration.py
         --application firefox
         --no-read-buildbot-config
         --config-file b2g/gaia_integration_config.py
         --config-file ./mozharness_configs/gaia_integration_override.py
+        --config-file ./mozharness_configs/remove_executables.py
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --download-symbols ondemand
         --total-chunk {{total_chunks}}
         --this-chunk {{chunk}}
         --gaia-repo {{gaia_head_repository}}
         --gaia-dir /home/worker
     artifacts:
--- a/testing/taskcluster/tasks/tests/mulet_mochitests.yml
+++ b/testing/taskcluster/tasks/tests/mulet_mochitests.yml
@@ -9,16 +9,17 @@ task:
   payload:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
       - >
         python ./mozharness/scripts/desktop_unittest.py
         --no-read-buildbot-config
         --config-file ./mozharness/configs/unittests/linux_unittest.py
         --config-file ./mozharness_configs/linux_mulet_config.py
+        --config-file ./mozharness_configs/remove_executables.py
         --installer-url {{build_url}}
         --test-url {{tests_url}}
         --download-symbols ondemand
         --mochitest-suite plain-chunked
         --total-chunk={{total_chunks}}
         --this-chunk={{chunk}}
     artifacts:
       'public/build':