merge b2g-inbound to mozilla-central
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Mon, 26 May 2014 15:26:11 +0200
changeset 192303 545c35907effa5b0335aa05991e8c29548042bdd
parent 192264 ca41feb4523e0808dde703eda8e75bca71638ab2 (current diff)
parent 192302 b1f349b0ee5fde087c623f099eae7b947d79d5db (diff)
child 192304 37cc88af76692349789ec65e91c1c6156c7704b6
child 192312 2070a25529b65b786fedc83bdc507416fcc4e197
child 192341 5a56f6d4dd6356c77448633b0fd0bde245b15092
child 192445 76f83b6745f1bad697d06a0eeaff0509d590f30e
push id3741
push userasasaki@mozilla.com
push dateMon, 21 Jul 2014 20:25:18 +0000
treeherdermozilla-esr52@4d6f46f5af68 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone32.0a1
merge b2g-inbound to mozilla-central
layout/tools/reftest/mach_commands.py
layout/xul/reftest/reftest.list
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,23 +14,23 @@
   <!--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="2a165bebfa19b11b697837409f9550dd2917c46c">
     <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="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="ca283b9db2b151d465cfd2e19346cf58fe89e413"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="e5f4683183a1dec2cfdb21b76509819977e9d09c"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
   <project name="platform/bionic" path="bionic" revision="c72b8f6359de7ed17c11ddc9dfdde3f615d188a9"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="425f8b5fadf5889834c5acd27d23c9e0b2129c28"/>
   <project name="device/common" path="device/common" revision="42b808b7e93d0619286ae8e59110b176b7732389"/>
   <project name="device/sample" path="device/sample" revision="237bd668d0f114d801a8d6455ef5e02cc3577587"/>
   <project name="platform_external_apriori" path="external/apriori" remote="b2g" revision="11816ad0406744f963537b23d68ed9c2afb412bd"/>
   <project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="52a1a862a8bac319652b8f82d9541ba40bfa45ce"/>
--- 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="e6383e6e785cc3ea237e902beb1092f9aa88e29d">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <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"/>
@@ -126,11 +126,11 @@
   <!-- Emulator specific things -->
   <project name="android-development" path="development" remote="b2g" revision="dab55669da8f48b6e57df95d5af9f16b4a87b0b1"/>
   <project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="3a9a17613cc685aa232432566ad6cc607eab4ec1"/>
   <project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="c3ee0c875393607430086f942950d1b3f496ab0e"/>
   <project name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="7d33aaf740bbf6c7c6e9c34a92b371eda311b66b"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="acbdbe5196f06589da05c3bd1f14b27a6cae69c2"/>
   <project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="0e56e450367cd802241b27164a2979188242b95f"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="dd94b2e17a146cb782d71933d25dcaa9c060e6ce"/>
-  <project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="1997f7f20aebbe95fb10111465c0db945bd041fe"/>
+  <project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="56e7fe044cb6a0ad689b96ad7a3636d65e769b34"/>
   <project name="android-sdk" path="sdk" remote="b2g" revision="8b1365af38c9a653df97349ee53a3f5d64fd590a"/>
 </manifest>
--- a/b2g/config/emulator-kk/sources.xml
+++ b/b2g/config/emulator-kk/sources.xml
@@ -10,24 +10,24 @@
   <!--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="276ce45e78b09c4a4ee643646f691d22804754c1">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <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="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <!-- 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/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -14,23 +14,23 @@
   <!--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="2a165bebfa19b11b697837409f9550dd2917c46c">
     <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="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="ca283b9db2b151d465cfd2e19346cf58fe89e413"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="e5f4683183a1dec2cfdb21b76509819977e9d09c"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
   <project name="platform/bionic" path="bionic" revision="c72b8f6359de7ed17c11ddc9dfdde3f615d188a9"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="425f8b5fadf5889834c5acd27d23c9e0b2129c28"/>
   <project name="device/common" path="device/common" revision="42b808b7e93d0619286ae8e59110b176b7732389"/>
   <project name="device/sample" path="device/sample" revision="237bd668d0f114d801a8d6455ef5e02cc3577587"/>
   <project name="platform_external_apriori" path="external/apriori" remote="b2g" revision="11816ad0406744f963537b23d68ed9c2afb412bd"/>
   <project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="52a1a862a8bac319652b8f82d9541ba40bfa45ce"/>
--- a/b2g/config/flame/sources.xml
+++ b/b2g/config/flame/sources.xml
@@ -13,20 +13,20 @@
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="e6383e6e785cc3ea237e902beb1092f9aa88e29d">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <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"/>
@@ -115,33 +115,33 @@
   <project name="platform/system/netd" path="system/netd" revision="ea8103eae5642621ca8202e00620f4ca954ed413"/>
   <project name="platform/system/security" path="system/security" revision="360f51f7af191316cd739f229db1c5f7233be063"/>
   <project name="platform/system/vold" path="system/vold" revision="153df4d067a4149c7d78f1c92fed2ce2bd6a272e"/>
   <default remote="caf" revision="jb_3.2" sync-j="4"/>
   <!-- Flame specific things -->
   <project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="e8a318f7690092e639ba88891606f4183e846d3f"/>
   <project name="device/qcom/common" path="device/qcom/common" revision="34ed8345250bb97262d70a052217a92e83444ede"/>
   <project name="device-flame" path="device/t2m/flame" remote="b2g" revision="1b3322cfd1179ea11fa5083d600717b65e5923e6"/>
-  <project name="kernel/msm" path="kernel" revision="2051bfa495412f5077065e555ec662ba3d30e6e6"/>
+  <project name="kernel/msm" path="kernel" revision="d53af82d7013c7121470a245420e42808b8ff531"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="f2914eacee9120680a41463708bb6ee8291749fc"/>
-  <project name="platform/external/bluetooth/bluedroid" path="external/bluetooth/bluedroid" revision="4b7ae991637a216d745e154cd49b4db6ca55a19e"/>
+  <project name="platform/external/bluetooth/bluedroid" path="external/bluetooth/bluedroid" revision="81c4a859d75d413ad688067829d21b7ba9205f81"/>
   <project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="f0689ac1914cdbc59e53bdc9edd9013dc157c299"/>
   <project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="dd925f76e4f149c3d5571b80e12f7e24bbe89c59"/>
   <project name="platform/external/dbus" path="external/dbus" revision="ea87119c843116340f5df1d94eaf8275e1055ae8"/>
   <project name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="494c177966fdc31183a5f7af82dc9130f523da4b"/>
   <project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="320b05a5761eb2a4816f7529c91ea49422979b55"/>
-  <project name="platform/frameworks/av" path="frameworks/av" revision="1df6dac11d7370a2fffca8e31d65b80f537faec5"/>
+  <project name="platform/frameworks/av" path="frameworks/av" revision="5b934dc57dae25f286b0e7210dc6ff47f3244927"/>
   <project name="platform/frameworks/base" path="frameworks/base" revision="655ac07f6574d279c759c6983ed4389369a9c96c"/>
   <project name="platform/frameworks/native" path="frameworks/native" revision="33a2b51f78416536e1bfba0c0b7776db307f3a4f"/>
   <project name="platform/hardware/libhardware" path="hardware/libhardware" revision="484802559ed106bac4811bd01c024ca64f741e60"/>
   <project name="platform/hardware/qcom/audio" path="hardware/qcom/audio" revision="d30227d7ae5cbe8bac8775358b472f44504a20d2"/>
   <project name="platform/hardware/qcom/camera" path="hardware/qcom/camera" revision="81afa7f775b7559da52f468150d1fe090c3fbdc5"/>
   <project name="platform/hardware/qcom/display" path="hardware/qcom/display" revision="e38444b6ce12c7c25883272a439800376d5308eb"/>
   <project name="platform/hardware/qcom/gps" path="hardware/qcom/gps" revision="5dc48bd46f9589653f8bf297be5d73676f2e2867"/>
   <project name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="8a0d0b0d9889ef99c4c6317c810db4c09295f15a"/>
   <project name="platform/hardware/qcom/wlan" path="hardware/qcom/wlan" revision="2208fa3537ace873b8f9ec2355055761c79dfd5f"/>
   <project name="platform/hardware/ril" path="hardware/ril" revision="c4e2ac95907a5519a0e09f01a0d8e27fec101af0"/>
   <project name="platform/system/bluetooth" path="system/bluetooth" revision="e1eb226fa3ad3874ea7b63c56a9dc7012d7ff3c2"/>
   <project name="platform/system/core" path="system/core" revision="bbf7212289fc8311e43f9d11e10788e310d36a08"/>
-  <project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="1997f7f20aebbe95fb10111465c0db945bd041fe"/>
+  <project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="56e7fe044cb6a0ad689b96ad7a3636d65e769b34"/>
   <project name="platform/system/qcom" path="system/qcom" revision="1cdab258b15258b7f9657da70e6f06ebd5a2fc25"/>
   <project name="platform/vendor/qcom/msm8610" path="device/qcom/msm8610" revision="4ae5df252123591d5b941191790e7abed1bce5a4"/>
 </manifest>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
         "git_revision": "", 
         "remote": "", 
         "branch": ""
     }, 
-    "revision": "6a6778c8ff4a7a1802c30105b8dcc4d707a2e773", 
+    "revision": "b2ee4c07dd640cbb47f94e6acdad203c1e835eed", 
     "repo_path": "/integration/gaia-central"
 }
--- a/b2g/config/hamachi/sources.xml
+++ b/b2g/config/hamachi/sources.xml
@@ -12,22 +12,22 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <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="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="746bc48f34f5060f90801925dcdd964030c1ab6d"/>
   <project name="platform/development" path="development" revision="2460485184bc8535440bb63876d4e63ec1b4770c"/>
   <project name="device/common" path="device/common" revision="0dcc1e03659db33b77392529466f9eb685cdd3c7"/>
   <project name="device/sample" path="device/sample" revision="68b1cb978a20806176123b959cb05d4fa8adaea4"/>
   <project name="platform_external_apriori" path="external/apriori" remote="b2g" revision="11816ad0406744f963537b23d68ed9c2afb412bd"/>
--- a/b2g/config/helix/sources.xml
+++ b/b2g/config/helix/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <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="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
--- a/b2g/config/inari/sources.xml
+++ b/b2g/config/inari/sources.xml
@@ -14,22 +14,22 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <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="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="e0a9ac010df3afaa47ba107192c05ac8b5516435"/>
   <project name="platform/development" path="development" revision="a384622f5fcb1d2bebb9102591ff7ae91fe8ed2d"/>
   <project name="device/common" path="device/common" revision="7c65ea240157763b8ded6154a17d3c033167afb7"/>
   <project name="device/sample" path="device/sample" revision="c328f3d4409db801628861baa8d279fb8855892f"/>
   <project name="platform_external_apriori" path="external/apriori" remote="b2g" revision="11816ad0406744f963537b23d68ed9c2afb412bd"/>
--- a/b2g/config/leo/sources.xml
+++ b/b2g/config/leo/sources.xml
@@ -12,22 +12,22 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <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="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="575fdbf046e966a5915b1f1e800e5d6ad0ea14c0"/>
   <project name="platform/development" path="development" revision="b1025ec93beeb480caaf3049d171283c3846461d"/>
   <project name="device/common" path="device/common" revision="0dcc1e03659db33b77392529466f9eb685cdd3c7"/>
   <project name="device/sample" path="device/sample" revision="68b1cb978a20806176123b959cb05d4fa8adaea4"/>
--- a/b2g/config/mako/sources.xml
+++ b/b2g/config/mako/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="e6383e6e785cc3ea237e902beb1092f9aa88e29d">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <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"/>
@@ -122,17 +122,17 @@
   <project name="platform/system/netd" path="system/netd" revision="56112dd7b811301b718d0643a82fd5cac9522073"/>
   <project name="platform/system/security" path="system/security" revision="f48ff68fedbcdc12b570b7699745abb6e7574907"/>
   <project name="platform/system/vold" path="system/vold" revision="8de05d4a52b5a91e7336e6baa4592f945a6ddbea"/>
   <default remote="caf" revision="refs/tags/android-4.3_r2.1" sync-j="4"/>
   <!-- Nexus 4 specific things -->
   <project name="device-mako" path="device/lge/mako" remote="b2g" revision="78d17f0c117f0c66dd55ee8d5c5dde8ccc93ecba"/>
   <project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="3a9a17613cc685aa232432566ad6cc607eab4ec1"/>
   <project name="device/lge/mako-kernel" path="device/lge/mako-kernel" revision="d1729e53d71d711c8fde25eab8728ff2b9b4df0e"/>
-  <project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="1997f7f20aebbe95fb10111465c0db945bd041fe"/>
+  <project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="56e7fe044cb6a0ad689b96ad7a3636d65e769b34"/>
   <project name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="7d33aaf740bbf6c7c6e9c34a92b371eda311b66b"/>
   <project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="0e56e450367cd802241b27164a2979188242b95f"/>
   <project name="platform/hardware/broadcom/wlan" path="hardware/broadcom/wlan" revision="0e1929fa3aa38bf9d40e9e953d619fab8164c82e"/>
   <project name="platform/hardware/qcom/audio" path="hardware/qcom/audio" revision="b0a528d839cfd9d170d092fe3743b5252b4243a6"/>
   <project name="platform/hardware/qcom/bt" path="hardware/qcom/bt" revision="380945eaa249a2dbdde0daa4c8adb8ca325edba6"/>
   <project name="platform/hardware/qcom/display" path="hardware/qcom/display" revision="6f3b0272cefaffeaed2a7d2bb8f633059f163ddc"/>
   <project name="platform/hardware/qcom/keymaster" path="hardware/qcom/keymaster" revision="16da8262c997a5a0d797885788a64a0771b26910"/>
   <project name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="689b476ba3eb46c34b81343295fe144a0e81a18e"/>
--- a/b2g/config/wasabi/sources.xml
+++ b/b2g/config/wasabi/sources.xml
@@ -12,22 +12,22 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <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="f3b5d74dd3428c89cab06db734c62f3c9dbb8c4d"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="6a391274cd436f8f0d1fad2db8c6b4805703259c"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="996b5c6a2fd2b8a0124c0eab80eb72a4daece7bc"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="8f3a51b20a2a7d1310e4342c32c87bf31b87be97"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="69523cbb9d42ad531d418743c4f6137708111250"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
   <project name="platform/bootable/recovery" path="bootable/recovery" revision="e0a9ac010df3afaa47ba107192c05ac8b5516435"/>
   <project name="platform/development" path="development" revision="a384622f5fcb1d2bebb9102591ff7ae91fe8ed2d"/>
   <project name="device/common" path="device/common" revision="7c65ea240157763b8ded6154a17d3c033167afb7"/>
   <project name="device/sample" path="device/sample" revision="c328f3d4409db801628861baa8d279fb8855892f"/>
--- a/content/html/content/reftests/toblob-todataurl/reftest.list
+++ b/content/html/content/reftests/toblob-todataurl/reftest.list
@@ -1,16 +1,16 @@
-fuzzy-if(Android,105,482) == toblob-quality-0.html quality-0-ref.html
-fuzzy-if(Android,38,2024) == toblob-quality-25.html quality-25-ref.html
-fuzzy-if(Android,29,2336) == toblob-quality-50.html quality-50-ref.html
-fuzzy-if(Android,23,3533) == toblob-quality-75.html quality-75-ref.html
-fuzzy-if(Android,16,4199) == toblob-quality-92.html quality-92-ref.html
-fuzzy-if(Android,8,2461) == toblob-quality-100.html quality-100-ref.html
-fuzzy-if(Android,16,4199) == toblob-quality-undefined.html quality-92-ref.html
-fuzzy-if(Android,16,4199) == toblob-quality-default.html quality-92-ref.html
+fuzzy-if(Android,105,482) random-if(B2G&&browserIsRemote) == toblob-quality-0.html quality-0-ref.html
+fuzzy-if(Android,38,2024) random-if(B2G&&browserIsRemote) == toblob-quality-25.html quality-25-ref.html
+fuzzy-if(Android,29,2336) random-if(B2G&&browserIsRemote) == toblob-quality-50.html quality-50-ref.html
+fuzzy-if(Android,23,3533) random-if(B2G&&browserIsRemote) == toblob-quality-75.html quality-75-ref.html
+fuzzy-if(Android,16,4199) random-if(B2G&&browserIsRemote) == toblob-quality-92.html quality-92-ref.html
+fuzzy-if(Android,8,2461) random-if(B2G&&browserIsRemote) == toblob-quality-100.html quality-100-ref.html
+fuzzy-if(Android,16,4199) random-if(B2G&&browserIsRemote) == toblob-quality-undefined.html quality-92-ref.html
+fuzzy-if(Android,16,4199) random-if(B2G&&browserIsRemote) == toblob-quality-default.html quality-92-ref.html
 fuzzy-if(Android,105,482) == todataurl-quality-0.html quality-0-ref.html
 fuzzy-if(Android,38,2024) == todataurl-quality-25.html quality-25-ref.html
 fuzzy-if(Android,29,2336) == todataurl-quality-50.html quality-50-ref.html
 fuzzy-if(Android,23,3533) == todataurl-quality-75.html quality-75-ref.html
 fuzzy-if(Android,16,4199) == todataurl-quality-92.html quality-92-ref.html
 fuzzy-if(Android,8,2461) == todataurl-quality-100.html quality-100-ref.html
 fuzzy-if(Android,16,4199) == todataurl-quality-undefined.html quality-92-ref.html
 fuzzy-if(Android,16,4199) == todataurl-quality-default.html quality-92-ref.html
\ No newline at end of file
--- a/dom/alarm/test/test_alarm_add_data.html
+++ b/dom/alarm/test/test_alarm_add_data.html
@@ -194,32 +194,45 @@
     domRequest.onerror = function(e) {
       ok(false, "Unable to add alarm for tomorrow for null test.");
       SimpleTest.finish();
     };
 
   }
 
   function startTests() {
-
-    SpecialPowers.pushPrefEnv({"set": [["dom.mozAlarms.enabled", true]]}, function() {
+    SpecialPowers.pushPrefEnv({
+      "set": [["dom.mozAlarms.enabled", true]]
+    }, function() {
+      var isAllowedToTest = true;
 
-      // Currently applicable only on FxOS
-      if (navigator.userAgent.indexOf("Mobile") != -1 &&
-          navigator.appVersion.indexOf("Android") == -1) {
+      if (navigator.appVersion.indexOf("Android") !== -1) {
+        ok(true, "mozAlarms is not allowed on Android for now. " +
+                 "TODO Bug 863557.");
+        isAllowedToTest = false;
+      } else if (SpecialPowers.wrap(document).nodePrincipal.appStatus ==
+                 SpecialPowers.Ci.nsIPrincipal.APP_STATUS_NOT_INSTALLED) {
+        ok(true, "mozAlarms is not allowed for non-installed apps. " +
+                 "TODO Bug 876981.");
+        isAllowedToTest = false;
+      }
 
+      if (isAllowedToTest) {
+        ok(true, "Start to test...");
         testEmptyObject();
+      } else {
+        // A sanity check to make sure we must run tests on Firefox OS (B2G).
+        if (navigator.userAgent.indexOf("Mobile") != -1 &&
+            navigator.appVersion.indexOf("Android") == -1) {
+          ok(false, "Should run the test on Firefox OS (B2G)!");
+        }
 
-      } else {
-        ok(true, "mozAlarms on Firefox OS only.");
         SimpleTest.finish();
       }
-
     });
-
   }
 
   SimpleTest.expectAssertions(0, 9);
   SimpleTest.waitForExplicitFinish();
   if (SpecialPowers.hasPermission("alarms", document)) {
     startTests();
   } else {
     // Add the permission and reload the page so it propogates
--- a/dom/alarm/test/test_alarm_add_date.html
+++ b/dom/alarm/test/test_alarm_add_date.html
@@ -52,17 +52,17 @@
     var domRequest;
     try {
       domRequest = navigator.mozAlarms.add(yesterday, "honorTimezone", {});
     } catch (e) {
       ok(false,
          "Unexpected exception trying to add alarm for yesterday.");
 
       // Move on to the next test.
-      testNullDate();
+      return testNullDate();
     }
     domRequest.onsuccess = function(e) {
       navigator.mozAlarms.remove(e.target.result);
 
       ok(true, "Should be able to add alarm for already past date, which should fire immediately.");
 
       // Move on to the next test.
       testNullDate();
@@ -94,25 +94,42 @@
       ok(false, "Expected an exception to be thrown while testing bad time zone arg.");
     } catch(e) {
       ok(true, "Exception thrown while testing bad time zone arg.");
     }
     SimpleTest.finish();
   }
 
   function startTests() {
+    SpecialPowers.pushPrefEnv({
+      "set": [["dom.mozAlarms.enabled", true]]
+    }, function() {
+      var isAllowedToTest = true;
 
-    SpecialPowers.pushPrefEnv({"set": [["dom.mozAlarms.enabled", true]]}, function() {
-      // Currently applicable only on FxOS
-      if (navigator.userAgent.indexOf("Mobile") != -1 &&
-          navigator.appVersion.indexOf("Android") == -1)
-      {
+      if (navigator.appVersion.indexOf("Android") !== -1) {
+        ok(true, "mozAlarms is not allowed on Android for now. " +
+                 "TODO Bug 863557.");
+        isAllowedToTest = false;
+      } else if (SpecialPowers.wrap(document).nodePrincipal.appStatus ==
+                 SpecialPowers.Ci.nsIPrincipal.APP_STATUS_NOT_INSTALLED) {
+        ok(true, "mozAlarms is not allowed for non-installed apps. " +
+                 "TODO Bug 876981.");
+        isAllowedToTest = false;
+      }
+
+      if (isAllowedToTest) {
+        ok(true, "Start to test...");
         testFutureDate();
       } else {
-        ok(true, "mozAlarms on Firefox OS only.");
+        // A sanity check to make sure we must run tests on Firefox OS (B2G).
+        if (navigator.userAgent.indexOf("Mobile") != -1 &&
+            navigator.appVersion.indexOf("Android") == -1) {
+          ok(false, "Should run the test on Firefox OS (B2G)!");
+        }
+
         SimpleTest.finish();
       }
     });
   }
 
   SimpleTest.expectAssertions(0, 9);
   SimpleTest.waitForExplicitFinish();
   if (SpecialPowers.hasPermission("alarms", document)) {
--- a/dom/alarm/test/test_alarm_add_respectTimezone.html
+++ b/dom/alarm/test/test_alarm_add_respectTimezone.html
@@ -112,35 +112,50 @@
     domRequest.onsuccess = function(e) {
       // The misspelled word should not be valid
       ok(false, "Misspelt parameter should fail.");
       SimpleTest.finish();
     };
   }
 
   function startTests() {
-
-    SpecialPowers.pushPrefEnv({"set": [["dom.mozAlarms.enabled", true]]}, function() {
+    SpecialPowers.pushPrefEnv({
+      "set": [["dom.mozAlarms.enabled", true]]
+    }, function() {
+      var isAllowedToTest = true;
 
-      // Currently applicable only on FxOS
-      if (navigator.userAgent.indexOf("Mobile") != -1 &&
-          navigator.appVersion.indexOf("Android") == -1) {
+      if (navigator.appVersion.indexOf("Android") !== -1) {
+        ok(true, "mozAlarms is not allowed on Android for now. " +
+                 "TODO Bug 863557.");
+        isAllowedToTest = false;
+      } else if (SpecialPowers.wrap(document).nodePrincipal.appStatus ==
+                 SpecialPowers.Ci.nsIPrincipal.APP_STATUS_NOT_INSTALLED) {
+        ok(true, "mozAlarms is not allowed for non-installed apps. " +
+                 "TODO Bug 876981.");
+        isAllowedToTest = false;
+      }
+
+      if (isAllowedToTest) {
+        ok(true, "Start to test...");
 
         // Arbitrary date to use for tests
         var tomorrow = new Date();
         tomorrow.setDate(tomorrow.getDate() + 1);
 
         // Kick off the tests
         testHonorTimezone(tomorrow);
+      } else {
+        // A sanity check to make sure we must run tests on Firefox OS (B2G).
+        if (navigator.userAgent.indexOf("Mobile") != -1 &&
+            navigator.appVersion.indexOf("Android") == -1) {
+          ok(false, "Should run the test on Firefox OS (B2G)!");
+        }
 
-      } else {
-        ok(true, "mozAlarms on Firefox OS only.");
         SimpleTest.finish();
       }
-
     });
   }
 
   SimpleTest.expectAssertions(0, 9);
   SimpleTest.waitForExplicitFinish();
   if (SpecialPowers.hasPermission("alarms", document)) {
     startTests();
   } else {
--- a/dom/alarm/test/test_alarm_remove.html
+++ b/dom/alarm/test/test_alarm_remove.html
@@ -16,16 +16,17 @@
 
   function checkNumberOfAlarms(n, cbk) {
     var domRequest;
     try {
       domRequest = navigator.mozAlarms.getAll();
     } catch (e) {
       ok(false,
          "Unexpected exception trying to get all alarms.");
+      return cbk();
     }
     domRequest.onsuccess = function(e) {
       ok(e.target.result.length === n, "Correct number of alarms set.");
       cbk();
     }
   }
 
   // Add alarm and then remove it
@@ -66,30 +67,44 @@
         });
       }
 
     }
 
   }
 
   function startTests() {
-
-    SpecialPowers.pushPrefEnv({"set": [["dom.mozAlarms.enabled", true]]}, function() {
+    SpecialPowers.pushPrefEnv({
+      "set": [["dom.mozAlarms.enabled", true]]
+    }, function() {
+      var isAllowedToTest = true;
 
-      // Currently applicable only on FxOS
-      if (navigator.userAgent.indexOf("Mobile") != -1 &&
-          navigator.appVersion.indexOf("Android") == -1) {
+      if (navigator.appVersion.indexOf("Android") !== -1) {
+        ok(true, "mozAlarms is not allowed on Android for now. " +
+                 "TODO Bug 863557.");
+        isAllowedToTest = false;
+      } else if (SpecialPowers.wrap(document).nodePrincipal.appStatus ==
+                 SpecialPowers.Ci.nsIPrincipal.APP_STATUS_NOT_INSTALLED) {
+        ok(true, "mozAlarms is not allowed for non-installed apps. " +
+                 "TODO Bug 876981.");
+        isAllowedToTest = false;
+      }
 
+      if (isAllowedToTest) {
+        ok(true, "Start to test...");
         testAddRemove();
+      } else {
+        // A sanity check to make sure we must run tests on Firefox OS (B2G).
+        if (navigator.userAgent.indexOf("Mobile") != -1 &&
+            navigator.appVersion.indexOf("Android") == -1) {
+          ok(false, "Should run the test on Firefox OS (B2G)!");
+        }
 
-      } else {
-        ok(true, "mozAlarms on Firefox OS only.");
         SimpleTest.finish();
       }
-
     });
   }
 
   SimpleTest.expectAssertions(0, 9);
   SimpleTest.waitForExplicitFinish();
   if (SpecialPowers.hasPermission("alarms", document)) {
     startTests();
   } else {
--- a/dom/apps/src/AppsServiceChild.jsm
+++ b/dom/apps/src/AppsServiceChild.jsm
@@ -3,76 +3,337 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
 const Cu = Components.utils;
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
-// This module exposes a subset of the functionnalities of the parent DOM
-// Registry to content processes, to be be used from the AppsService component.
+// This module exposes a subset of the functionalities of the parent DOM
+// Registry to content processes, to be used from the AppsService component.
 
-this.EXPORTED_SYMBOLS = ["DOMApplicationRegistry"];
+this.EXPORTED_SYMBOLS = ["DOMApplicationRegistry", "WrappedManifestCache"];
 
 Cu.import("resource://gre/modules/AppsUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 function debug(s) {
   //dump("-*- AppsServiceChild.jsm: " + s + "\n");
 }
 
+const APPS_IPC_MSG_NAMES = [
+  "Webapps:AddApp",
+  "Webapps:RemoveApp",
+  "Webapps:UpdateApp",
+  "Webapps:CheckForUpdate:Return:KO",
+  "Webapps:FireEvent",
+  "Webapps:UpdateState"
+];
+
+// A simple cache for the wrapped manifests.
+this.WrappedManifestCache = {
+  _cache: { },
+
+  // Gets an entry from the cache, and populates the cache if needed.
+  get: function mcache_get(aManifestURL, aManifest, aWindow, aInnerWindowID) {
+    if (!(aManifestURL in this._cache)) {
+      this._cache[aManifestURL] = { };
+    }
+
+    let winObjs = this._cache[aManifestURL];
+    if (!(aInnerWindowID in winObjs)) {
+      winObjs[aInnerWindowID] = Cu.cloneInto(aManifest, aWindow);
+    }
+
+    return winObjs[aInnerWindowID];
+  },
+
+  // Invalidates an entry in the cache.
+  evict: function mcache_evict(aManifestURL, aInnerWindowID) {
+    debug("Evicting manifest " + aManifestURL + " window ID " +
+          aInnerWindowID);
+    if (aManifestURL in this._cache) {
+      let winObjs = this._cache[aManifestURL];
+      if (aInnerWindowID in winObjs) {
+        delete winObjs[aInnerWindowID];
+      }
+
+      if (Object.keys(winObjs).length == 0) {
+        delete this._cache[aManifestURL];
+      }
+    }
+  },
+
+  observe: function(aSubject, aTopic, aData) {
+    // Clear the cache on memory pressure.
+    this._cache = { };
+    Cu.forceGC();
+  },
+
+  init: function() {
+    Services.obs.addObserver(this, "memory-pressure", false);
+  }
+};
+
+this.WrappedManifestCache.init();
+
+
+// DOMApplicationRegistry keeps a cache containing a list of apps in the device.
+// This information is updated with the data received from the main process and
+// it is queried by the DOM objects to set their state.
+// This module handle all the messages broadcasted from the parent process,
+// including DOM events, which are dispatched to the corresponding DOM objects.
+
 this.DOMApplicationRegistry = {
+  // DOMApps will hold a list of arrays of weak references to
+  // mozIDOMApplication objects indexed by manifest URL.
+  DOMApps: {},
+
   init: function init() {
-    debug("init");
     this.cpmm = Cc["@mozilla.org/childprocessmessagemanager;1"]
                   .getService(Ci.nsISyncMessageSender);
 
-    ["Webapps:AddApp", "Webapps:RemoveApp"].forEach((function(aMsgName) {
+    APPS_IPC_MSG_NAMES.forEach((function(aMsgName) {
       this.cpmm.addMessageListener(aMsgName, this);
     }).bind(this));
 
+    this.cpmm.sendAsyncMessage("Webapps:RegisterForMessages", {
+      messages: APPS_IPC_MSG_NAMES
+    });
+
     // We need to prime the cache with the list of apps.
-    // XXX shoud we do this async and block callers if it's not yet there?
-    this.webapps = this.cpmm.sendSyncMessage("Webapps:GetList", { })[0];
+    // XXX should we do this async and block callers if it's not yet there?
+    let list = this.cpmm.sendSyncMessage("Webapps:GetList", { })[0];
+    this.webapps = list.webapps;
 
     // We need a fast mapping from localId -> app, so we add an index.
+    // And add the manifest to the app object.
     this.localIdIndex = { };
     for (let id in this.webapps) {
       let app = this.webapps[id];
       this.localIdIndex[app.localId] = app;
+      app.manifest = list.manifests[id];
     }
 
     Services.obs.addObserver(this, "xpcom-shutdown", false);
   },
 
   observe: function(aSubject, aTopic, aData) {
-    // cpmm.addMessageListener causes the DOMApplicationRegistry object to live
-    // forever if we don't clean up properly.
+    // cpmm.addMessageListener causes the DOMApplicationRegistry object to
+    // live forever if we don't clean up properly.
     this.webapps = null;
-    ["Webapps:AddApp", "Webapps:RemoveApp"].forEach((function(aMsgName) {
+    this.DOMApps = null;
+
+    APPS_IPC_MSG_NAMES.forEach((aMsgName) => {
       this.cpmm.removeMessageListener(aMsgName, this);
-    }).bind(this));
+    });
+
+    this.cpmm.sendAsyncMessage("Webapps:UnregisterForMessages",
+                               APPS_IPC_MSG_NAMES)
   },
 
   receiveMessage: function receiveMessage(aMessage) {
     debug("Received " + aMessage.name + " message.");
-    let msg = aMessage.json;
+    let msg = aMessage.data;
     switch (aMessage.name) {
       case "Webapps:AddApp":
         this.webapps[msg.id] = msg.app;
         this.localIdIndex[msg.app.localId] = msg.app;
         break;
       case "Webapps:RemoveApp":
+        delete this.DOMApps[this.webapps[msg.id].manifestURL];
         delete this.localIdIndex[this.webapps[msg.id].localId];
         delete this.webapps[msg.id];
         break;
+      case "Webapps:UpdateApp":
+        let app = this.webapps[msg.oldId];
+        if (!app) {
+          return;
+        }
+
+        if (msg.app) {
+          for (let prop in msg.app) {
+            app[prop] = msg.app[prop];
+          }
+        }
+
+        this.webapps[msg.newId] = app;
+        this.localIdIndex[app.localId] = app;
+        delete this.webapps[msg.oldId];
+
+        let apps = this.DOMApps[msg.app.manifestURL];
+        if (!apps) {
+          return;
+        }
+        for (let i = 0; i < apps.length; i++) {
+          let domApp = apps[i].get();
+          if (!domApp) {
+            apps.splice(i);
+            continue;
+          }
+          domApp._proxy = new Proxy(domApp, {
+            get: function(target, prop) {
+              if (!DOMApplicationRegistry.webapps[msg.newId]) {
+                return;
+              }
+              return DOMApplicationRegistry.webapps[msg.newId][prop];
+            },
+            set: function(target, prop, val) {
+              if (!DOMApplicationRegistry.webapps[msg.newId]) {
+                return;
+              }
+              DOMApplicationRegistry.webapps[msg.newId][prop] = val;
+              return;
+            },
+          });
+        }
+        break;
+      case "Webapps:FireEvent":
+        this._fireEvent(aMessage);
+        break;
+      case "Webapps:UpdateState":
+        this._updateState(msg);
+        break;
+      case "Webapps:CheckForUpdate:Return:KO":
+        let DOMApps = this.DOMApps[msg.manifestURL];
+        if (!DOMApps || !msg.requestID) {
+          return;
+        }
+        DOMApps.forEach((DOMApp) => {
+          let domApp = DOMApp.get();
+          if (domApp && msg.requestID) {
+            domApp._fireRequestResult(aMessage, true /* aIsError */);
+          }
+        });
+        break;
     }
   },
 
+  /**
+   * mozIDOMApplication management
+   */
+
+  // Every time a DOM app is created, we save a weak reference to it that will
+  // be used to dispatch events and fire request results.
+  addDOMApp: function(aApp, aManifestURL, aId) {
+    let weakRef = Cu.getWeakReference(aApp);
+
+    if (!this.DOMApps[aManifestURL]) {
+      this.DOMApps[aManifestURL] = [];
+    }
+
+    let apps = this.DOMApps[aManifestURL];
+
+    // Get rid of dead weak references.
+    for (let i = 0; i < apps.length; i++) {
+      if (!apps[i].get()) {
+        apps.splice(i);
+      }
+    }
+
+    apps.push(weakRef);
+
+    // Each DOM app contains a proxy object used to build their state. We
+    // return the handler for this proxy object with traps to get and set
+    // app properties kept in the DOMApplicationRegistry app cache.
+    return {
+      get: function(target, prop) {
+        if (!DOMApplicationRegistry.webapps[aId]) {
+          return;
+        }
+        return DOMApplicationRegistry.webapps[aId][prop];
+      },
+      set: function(target, prop, val) {
+        if (!DOMApplicationRegistry.webapps[aId]) {
+          return;
+        }
+        DOMApplicationRegistry.webapps[aId][prop] = val;
+        return;
+      },
+    };
+  },
+
+  _fireEvent: function(aMessage) {
+    let msg = aMessage.data;
+    debug("_fireEvent " + JSON.stringify(msg));
+    if (!this.DOMApps || !msg.manifestURL || !msg.eventType) {
+      return;
+    }
+
+    let DOMApps = this.DOMApps[msg.manifestURL];
+    if (!DOMApps) {
+      return;
+    }
+
+    // The parent might ask childs to trigger more than one event in one
+    // shot, so in order to avoid needless IPC we allow an array for the
+    // 'eventType' IPC message field.
+    if (!Array.isArray(msg.eventType)) {
+      msg.eventType = [msg.eventType];
+    }
+
+    DOMApps.forEach((DOMApp) => {
+      let domApp = DOMApp.get();
+      if (!domApp) {
+        return;
+      }
+      msg.eventType.forEach((aEventType) => {
+        if ('on' + aEventType in domApp) {
+          domApp._fireEvent(aEventType);
+        }
+      });
+
+      if (msg.requestID) {
+        aMessage.data.result = msg.manifestURL;
+        domApp._fireRequestResult(aMessage);
+      }
+    });
+  },
+
+  _updateState: function(aMessage) {
+    if (!this.DOMApps || !aMessage.id) {
+      return;
+    }
+
+    let app = this.webapps[aMessage.id];
+    if (!app) {
+      return;
+    }
+
+    if (aMessage.app) {
+      for (let prop in aMessage.app) {
+        app[prop] = aMessage.app[prop];
+      }
+    }
+
+    if (aMessage.error) {
+      app.downloadError = aMessage.error;
+    }
+
+    if (aMessage.manifest) {
+      app.manifest = aMessage.manifest;
+      // Evict the wrapped manifest cache for all the affected DOM objects.
+      let DOMApps = this.DOMApps[app.manifestURL];
+      if (!DOMApps) {
+        return;
+      }
+      DOMApps.forEach((DOMApp) => {
+        let domApp = DOMApp.get();
+        if (!domApp) {
+          return;
+        }
+        WrappedManifestCache.evict(app.manifestURL, domApp.innerWindowID);
+      });
+    }
+  },
+
+  /**
+   * nsIAppsService API
+   */
   getAppByManifestURL: function getAppByManifestURL(aManifestURL) {
     debug("getAppByManifestURL " + aManifestURL);
     return AppsUtils.getAppByManifestURL(this.webapps, aManifestURL);
   },
 
   getAppLocalIdByManifestURL: function getAppLocalIdByManifestURL(aManifestURL) {
     debug("getAppLocalIdByManifestURL " + aManifestURL);
     return AppsUtils.getAppLocalIdByManifestURL(this.webapps, aManifestURL);
--- a/dom/apps/src/Webapps.js
+++ b/dom/apps/src/Webapps.js
@@ -7,16 +7,17 @@ const Ci = Components.interfaces;
 const Cu = Components.utils;
 const Cr = Components.results;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/DOMRequestHelper.jsm");
 Cu.import("resource://gre/modules/AppsUtils.jsm");
 Cu.import("resource://gre/modules/BrowserElementPromptService.jsm");
+Cu.import("resource://gre/modules/AppsServiceChild.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
                                    "@mozilla.org/childprocessmessagemanager;1",
                                    "nsIMessageSender");
 
 function convertAppsArray(aApps, aWindow) {
   let apps = new aWindow.Array();
   for (let i = 0; i < aApps.length; i++) {
@@ -259,134 +260,121 @@ WebappsRegistry.prototype = {
                                     flags: Ci.nsIClassInfo.DOM_OBJECT,
                                     classDescription: "Webapps Registry"})
 }
 
 /**
   * mozIDOMApplication object
   */
 
-// A simple cache for the wrapped manifests.
-let manifestCache = {
-  _cache: { },
-
-  // Gets an entry from the cache, and populates the cache if needed.
-  get: function mcache_get(aManifestURL, aManifest, aWindow, aInnerWindowID) {
-    if (!(aManifestURL in this._cache)) {
-      this._cache[aManifestURL] = { };
-    }
-
-    let winObjs = this._cache[aManifestURL];
-    if (!(aInnerWindowID in winObjs)) {
-      winObjs[aInnerWindowID] = Cu.cloneInto(aManifest, aWindow);
-    }
-
-    return winObjs[aInnerWindowID];
-  },
-
-  // Invalidates an entry in the cache.
-  evict: function mcache_evict(aManifestURL, aInnerWindowID) {
-    if (aManifestURL in this._cache) {
-      let winObjs = this._cache[aManifestURL];
-      if (aInnerWindowID in winObjs) {
-        delete winObjs[aInnerWindowID];
-      }
-
-      if (Object.keys(winObjs).length == 0) {
-        delete this._cache[aManifestURL];
-      }
-    }
-  },
-
-  observe: function(aSubject, aTopic, aData) {
-    // Clear the cache on memory pressure.
-    this._cache = { };
-  },
-
-  init: function() {
-    Services.obs.addObserver(this, "memory-pressure", false);
-  }
-};
-
 function createApplicationObject(aWindow, aApp) {
-  let app = Cc["@mozilla.org/webapps/application;1"].createInstance(Ci.mozIDOMApplication);
+  let app = Cc["@mozilla.org/webapps/application;1"]
+              .createInstance(Ci.mozIDOMApplication);
   app.wrappedJSObject.init(aWindow, aApp);
   return app;
 }
 
 function WebappsApplication() {
   this.wrappedJSObject = this;
 }
 
 WebappsApplication.prototype = {
   __proto__: DOMRequestIpcHelper.prototype,
 
   init: function(aWindow, aApp) {
+    let proxyHandler = DOMApplicationRegistry.addDOMApp(this,
+                                                        aApp.manifestURL,
+                                                        aApp.id);
+    this._proxy = new Proxy(this, proxyHandler);
+
     this._window = aWindow;
-    let principal = this._window.document.nodePrincipal;
-    this._appStatus = principal.appStatus;
-    this.origin = aApp.origin;
-    this._manifest = aApp.manifest;
-    this._updateManifest = aApp.updateManifest;
-    this.manifestURL = aApp.manifestURL;
-    this.receipts = aApp.receipts;
-    this.installOrigin = aApp.installOrigin;
-    this.installTime = aApp.installTime;
-    this.installState = aApp.installState || "installed";
-    this.removable = aApp.removable;
-    this.lastUpdateCheck = aApp.lastUpdateCheck ? aApp.lastUpdateCheck
-                                                : Date.now();
-    this.updateTime = aApp.updateTime ? aApp.updateTime
-                                      : aApp.installTime;
-    this.progress = NaN;
-    this.downloadAvailable = aApp.downloadAvailable;
-    this.downloading = aApp.downloading;
-    this.readyToApplyDownload = aApp.readyToApplyDownload;
-    this.downloadSize = aApp.downloadSize || 0;
 
     this._onprogress = null;
     this._ondownloadsuccess = null;
     this._ondownloaderror = null;
     this._ondownloadavailable = null;
     this._ondownloadapplied = null;
 
-    this._downloadError = null;
+    this.initDOMRequestHelper(aWindow);
+  },
+
+  get _appStatus() {
+    return this._proxy.appStatus;
+  },
+
+  get downloadAvailable() {
+    return this._proxy.downloadAvailable;
+  },
+
+  get downloading() {
+    return this._proxy.downloading;
+  },
 
-    this.initDOMRequestHelper(aWindow, [
-      { name: "Webapps:CheckForUpdate:Return:KO", weakRef: true },
-      { name: "Webapps:Connect:Return:OK", weakRef: true },
-      { name: "Webapps:Connect:Return:KO", weakRef: true },
-      { name: "Webapps:FireEvent", weakRef: true },
-      { name: "Webapps:GetConnections:Return:OK", weakRef: true },
-      { name: "Webapps:UpdateState", weakRef: true }
-    ]);
+  get downloadSize() {
+    return this._proxy.downloadSize;
+  },
+
+  get installOrigin() {
+    return this._proxy.installOrigin;
+  },
+
+  get installState() {
+    return this._proxy.installState;
+  },
+
+  get installTime() {
+    return this._proxy.installTime;
+  },
 
-    cpmm.sendAsyncMessage("Webapps:RegisterForMessages", {
-      messages: ["Webapps:FireEvent",
-                 "Webapps:UpdateState"],
-      app: {
-        id: this.id,
-        manifestURL: this.manifestURL,
-        installState: this.installState,
-        downloading: this.downloading
-      }
-    });
+  get lastUpdateCheck() {
+    return this._proxy.lastUpdateCheck;
+  },
+
+  get manifestURL() {
+    return this._proxy.manifestURL;
+  },
+
+  get origin() {
+    return this._proxy.origin;
+  },
+
+  get progress() {
+    return this._proxy.progress;
+  },
+
+  get readyToApplyDownload() {
+    return this._proxy.readyToApplyDownload;
+  },
+
+  get receipts() {
+    return this._proxy.receipts;
+  },
+
+  set receipts(aReceipts) {
+    this._proxy.receipts = aReceipts;
+  },
+
+  get removable() {
+    return this._proxy.removable;
+  },
+
+  get updateTime() {
+    return this._proxy.updateTime;
   },
 
   get manifest() {
-    return manifestCache.get(this.manifestURL,
-                             this._manifest,
-                             this._window,
-                             this.innerWindowID);
+    return WrappedManifestCache.get(this.manifestURL,
+                                    this._proxy.manifest,
+                                    this._window,
+                                    this.innerWindowID);
   },
 
   get updateManifest() {
-    return this.updateManifest =
-      this._updateManifest ? Cu.cloneInto(this._updateManifest, this._window)
-                           : null;
+    return this._proxy.updateManifest ?
+      Cu.cloneInto(this._proxy.updateManifest, this._window) : null;
   },
 
   set onprogress(aCallback) {
     this._onprogress = aCallback;
   },
 
   get onprogress() {
     return this._onprogress;
@@ -420,17 +408,17 @@ WebappsApplication.prototype = {
     this._ondownloadapplied = aCallback;
   },
 
   get ondownloadapplied() {
     return this._ondownloadapplied;
   },
 
   get downloadError() {
-    return new this._window.DOMError(this._downloadError || '');
+    return new this._window.DOMError(this._proxy.downloadError || '');
   },
 
   download: function() {
     cpmm.sendAsyncMessage("Webapps:Download",
                           { manifestURL: this.manifestURL });
   },
 
   cancelDownload: function() {
@@ -462,51 +450,55 @@ WebappsApplication.prototype = {
   },
 
   clearBrowserData: function() {
     let request = this.createRequest();
     let browserChild =
       BrowserElementPromptService.getBrowserElementChildForWindow(this._window);
     if (browserChild) {
       this.addMessageListeners("Webapps:ClearBrowserData:Return");
-      browserChild.messageManager.sendAsyncMessage(
-        "Webapps:ClearBrowserData",
-        { manifestURL: this.manifestURL,
-          oid: this._id,
-          requestID: this.getRequestId(request) }
-      );
+      browserChild.messageManager.sendAsyncMessage("Webapps:ClearBrowserData", {
+        manifestURL: this.manifestURL,
+        oid: this._id,
+        requestID: this.getRequestId(request)
+      });
     } else {
       Services.DOMRequest.fireErrorAsync(request, "NO_CLEARABLE_BROWSER");
     }
     return request;
   },
 
   connect: function(aKeyword, aRules) {
+    this.addMessageListeners(["Webapps:Connect:Return:OK",
+                              "Webapps:Connect:Return:KO"]);
     return this.createPromise(function (aResolve, aReject) {
-      cpmm.sendAsyncMessage("Webapps:Connect",
-                            { keyword: aKeyword,
-                              rules: aRules,
-                              manifestURL: this.manifestURL,
-                              outerWindowID: this._id,
-                              requestID: this.getPromiseResolverId({
-                                resolve: aResolve,
-                                reject: aReject
-                              })});
+      cpmm.sendAsyncMessage("Webapps:Connect", {
+        keyword: aKeyword,
+        rules: aRules,
+        manifestURL: this.manifestURL,
+        outerWindowID: this._id,
+        requestID: this.getPromiseResolverId({
+          resolve: aResolve,
+          reject: aReject
+        })
+      });
     }.bind(this));
   },
 
   getConnections: function() {
+    this.addMessageListeners("Webapps:GetConnections:Return:OK");
     return this.createPromise(function (aResolve, aReject) {
-      cpmm.sendAsyncMessage("Webapps:GetConnections",
-                            { manifestURL: this.manifestURL,
-                              outerWindowID: this._id,
-                              requestID: this.getPromiseResolverId({
-                                resolve: aResolve,
-                                reject: aReject
-                              })});
+      cpmm.sendAsyncMessage("Webapps:GetConnections", {
+        manifestURL: this.manifestURL,
+        outerWindowID: this._id,
+        requestID: this.getPromiseResolverId({
+          resolve: aResolve,
+          reject: aReject
+        })
+      });
     }.bind(this));
   },
 
   addReceipt: function(receipt) {
     let request = this.createRequest();
 
     this.addMessageListeners(["Webapps:AddReceipt:Return:OK",
                               "Webapps:AddReceipt:Return:KO"]);
@@ -545,134 +537,91 @@ WebappsApplication.prototype = {
                                                       oid: this._id,
                                                       requestID: this.getRequestId(request) });
 
     return request;
   },
 
   uninit: function() {
     this._onprogress = null;
-    cpmm.sendAsyncMessage("Webapps:UnregisterForMessages", [
-      "Webapps:FireEvent",
-      "Webapps:UpdateState"
-    ]);
-
-    manifestCache.evict(this.manifestURL, this.innerWindowID);
+    WrappedManifestCache.evict(this.manifestURL, this.innerWindowID);
   },
 
   _fireEvent: function(aName) {
     let handler = this["_on" + aName];
     if (handler) {
       let event = new this._window.MozApplicationEvent(aName, {
         application: this
       });
       try {
         handler.handleEvent(event);
       } catch (ex) {
         dump("Event handler expection " + ex + "\n");
       }
     }
   },
 
-  _updateState: function(aMsg) {
-    if (aMsg.app) {
-      for (let prop in aMsg.app) {
-        this[prop] = aMsg.app[prop];
-      }
+  _fireRequestResult: function(aMessage, aIsError) {
+    let req;
+    let msg = aMessage.data;
+    req = this.takeRequest(msg.requestID);
+    if (!req) {
+      return;
     }
-
-    if (aMsg.error) {
-      this._downloadError = aMsg.error;
-    }
-
-    if (aMsg.manifest) {
-      this._manifest = aMsg.manifest;
-      manifestCache.evict(this.manifestURL, this.innerWindowID);
-    }
+    aIsError ? Services.DOMRequest.fireError(req, msg.error)
+             : Services.DOMRequest.fireSuccess(req, msg.result);
   },
 
   receiveMessage: function(aMessage) {
     let msg = aMessage.json;
     let req;
     if (aMessage.name == "Webapps:Connect:Return:OK" ||
         aMessage.name == "Webapps:Connect:Return:KO" ||
         aMessage.name == "Webapps:GetConnections:Return:OK") {
       req = this.takePromiseResolver(msg.requestID);
     } else {
       req = this.takeRequest(msg.requestID);
     }
 
-    // ondownload* callbacks should be triggered on all app instances
-    if ((msg.oid != this._id || !req) &&
-        aMessage.name !== "Webapps:FireEvent" &&
-        aMessage.name !== "Webapps:UpdateState") {
+    if (msg.oid != this._id || !req) {
       return;
     }
 
     switch (aMessage.name) {
       case "Webapps:Launch:Return:KO":
         this.removeMessageListeners(["Webapps:Launch:Return:OK",
                                      "Webapps:Launch:Return:KO"]);
         Services.DOMRequest.fireError(req, "APP_INSTALL_PENDING");
         break;
       case "Webapps:Launch:Return:OK":
         this.removeMessageListeners(["Webapps:Launch:Return:OK",
                                      "Webapps:Launch:Return:KO"]);
         Services.DOMRequest.fireSuccess(req, null);
         break;
-      case "Webapps:CheckForUpdate:Return:KO":
-        Services.DOMRequest.fireError(req, msg.error);
-        break;
-      case "Webapps:FireEvent":
-        if (msg.manifestURL != this.manifestURL) {
-           return;
-        }
-
-        // The parent might ask childs to trigger more than one event in one
-        // shot, so in order to avoid needless IPC we allow an array for the
-        // 'eventType' IPC message field.
-        if (!Array.isArray(msg.eventType)) {
-          msg.eventType = [msg.eventType];
-        }
-
-        msg.eventType.forEach((aEventType) => {
-          if ("_on" + aEventType in this) {
-            this._fireEvent(aEventType);
-          } else {
-            dump("Unsupported event type " + aEventType + "\n");
-          }
-        });
-
-        if (req) {
-          Services.DOMRequest.fireSuccess(req, this.manifestURL);
-        }
-        break;
-      case "Webapps:UpdateState":
-        if (msg.manifestURL != this.manifestURL) {
-          return;
-        }
-
-        this._updateState(msg);
-        break;
       case "Webapps:ClearBrowserData:Return":
         this.removeMessageListeners(aMessage.name);
         Services.DOMRequest.fireSuccess(req, null);
         break;
       case "Webapps:Connect:Return:OK":
+        this.removeMessageListeners(["Webapps:Connect:Return:OK",
+                                     "Webapps:Connect:Return:KO"]);
         let messagePorts = [];
         msg.messagePortIDs.forEach((aPortID) => {
           let port = new this._window.MozInterAppMessagePort(aPortID);
           messagePorts.push(port);
         });
         req.resolve(messagePorts);
         break;
       case "Webapps:Connect:Return:KO":
+        this.removeMessageListeners(["Webapps:Connect:Return:OK",
+                                     "Webapps:Connect:Return:KO"]);
         req.reject("No connections registered");
         break;
       case "Webapps:GetConnections:Return:OK":
+        this.removeMessageListeners(aMessage.name);
         let connections = [];
         msg.connections.forEach((aConnection) => {
           let connection =
             new this._window.MozInterAppConnection(aConnection.keyword,
                                                    aConnection.pubAppManifestURL,
                                                    aConnection.subAppManifestURL);
           connections.push(connection);
         });
@@ -844,22 +793,18 @@ WebappsApplicationMgmt.prototype = {
           let app = msg.app;
           let event = new this._window.MozApplicationEvent("applicationinstall",
                            { application : createApplicationObject(this._window, app) });
           this._oninstall.handleEvent(event);
         }
         break;
       case "Webapps:Uninstall:Broadcast:Return:OK":
         if (this._onuninstall) {
-          let detail = {
-            manifestURL: msg.manifestURL,
-            origin: msg.origin
-          };
           let event = new this._window.MozApplicationEvent("applicationuninstall",
-                           { application : createApplicationObject(this._window, detail) });
+                           { application : createApplicationObject(this._window, msg) });
           this._onuninstall.handleEvent(event);
         }
         break;
       case "Webapps:Uninstall:Return:OK":
         Services.DOMRequest.fireSuccess(req, msg.origin);
         break;
       case "Webapps:Uninstall:Return:KO":
         Services.DOMRequest.fireError(req, "NOT_INSTALLED");
@@ -878,12 +823,10 @@ WebappsApplicationMgmt.prototype = {
 
   classInfo: XPCOMUtils.generateCI({classID: Components.ID("{8c1bca96-266f-493a-8d57-ec7a95098c15}"),
                                     contractID: "@mozilla.org/webapps/application-mgmt;1",
                                     interfaces: [Ci.mozIDOMApplicationMgmt],
                                     flags: Ci.nsIClassInfo.DOM_OBJECT,
                                     classDescription: "Webapps Application Mgmt"})
 }
 
-manifestCache.init();
-
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([WebappsRegistry,
                                                      WebappsApplication]);
--- a/dom/apps/src/Webapps.jsm
+++ b/dom/apps/src/Webapps.jsm
@@ -1116,18 +1116,17 @@ this.DOMApplicationRegistry = {
         break;
       case "Webapps:UnregisterForMessages":
         this.removeMessageListener(msg, mm);
         break;
       case "child-process-shutdown":
         this.removeMessageListener(["Webapps:Internal:AllMessages"], mm);
         break;
       case "Webapps:GetList":
-        this.addMessageListener(["Webapps:AddApp", "Webapps:RemoveApp"], null, mm);
-        return this.webapps;
+        return { webapps: this.webapps, manifests: this._manifestCache };
       case "Webapps:Download":
         this.startDownload(msg.manifestURL);
         break;
       case "Webapps:CancelDownload":
         this.cancelDownload(msg.manifestURL);
         break;
       case "Webapps:CheckForUpdate":
         this.checkForUpdate(msg, mm);
@@ -1299,17 +1298,17 @@ this.DOMApplicationRegistry = {
     this._saveApps().then(() => {
       this.broadcastMessage("Webapps:UpdateState", {
         app: {
           progress: 0,
           installState: download.previousState,
           downloading: false
         },
         error: error,
-        manifestURL: app.manifestURL,
+        id: app.id
       })
       this.broadcastMessage("Webapps:FireEvent", {
         eventType: "downloaderror",
         manifestURL: app.manifestURL
       });
     });
     AppDownloadManager.remove(aManifestURL);
   },
@@ -1329,17 +1328,17 @@ this.DOMApplicationRegistry = {
       return;
     }
 
     // If the caller is trying to start a download but we have nothing to
     // download, send an error.
     if (!app.downloadAvailable) {
       this.broadcastMessage("Webapps:UpdateState", {
         error: "NO_DOWNLOAD_AVAILABLE",
-        manifestURL: app.manifestURL
+        id: app.id
       });
       this.broadcastMessage("Webapps:FireEvent", {
         eventType: "downloaderror",
         manifestURL: app.manifestURL
       });
       return;
     }
 
@@ -1377,17 +1376,17 @@ this.DOMApplicationRegistry = {
         debug("No appcache found, sending 'downloaded' for " + aManifestURL);
         app.downloadAvailable = false;
 
         yield this._saveApps();
 
         this.broadcastMessage("Webapps:UpdateState", {
           app: app,
           manifest: jsonManifest,
-          manifestURL: aManifestURL
+          id: app.id
         });
         this.broadcastMessage("Webapps:FireEvent", {
           eventType: "downloadsuccess",
           manifestURL: aManifestURL
         });
       }
 
       return;
@@ -1421,17 +1420,17 @@ this.DOMApplicationRegistry = {
     app.downloadAvailable = false;
     app.readyToApplyDownload = true;
     app.updateTime = Date.now();
 
     yield this._saveApps();
 
     this.broadcastMessage("Webapps:UpdateState", {
       app: app,
-      manifestURL: aManifestURL
+      id: app.id
     });
     this.broadcastMessage("Webapps:FireEvent", {
       eventType: "downloadsuccess",
       manifestURL: aManifestURL
     });
     if (app.installState == "pending") {
       // We restarted a failed download, apply it automatically.
       this.applyDownload(aManifestURL);
@@ -1521,17 +1520,17 @@ this.DOMApplicationRegistry = {
                 manifestURL: app.manifestURL },
               true);
           }
           this.updateDataStore(this.webapps[id].localId, app.origin,
                                app.manifestURL, aData, app.appStatus);
           this.broadcastMessage("Webapps:UpdateState", {
             app: app,
             manifest: aData,
-            manifestURL: app.manifestURL
+            id: app.id
           });
           this.broadcastMessage("Webapps:FireEvent", {
             eventType: "downloadapplied",
             manifestURL: app.manifestURL
           });
         });
       });
     });
@@ -1561,17 +1560,17 @@ this.DOMApplicationRegistry = {
     aApp.progress = 0;
     DOMApplicationRegistry._saveApps().then(() => {
       DOMApplicationRegistry.broadcastMessage("Webapps:UpdateState", {
         app: {
           downloading: true,
           installState: aApp.installState,
           progress: 0
         },
-        manifestURL: aApp.manifestURL
+        id: aApp.id
       });
       let cacheUpdate = updateSvc.scheduleAppUpdate(
         appcacheURI, docURI, aApp.localId, false, aProfileDir);
 
       // We save the download details for potential further usage like
       // cancelling it.
       let download = {
         cacheUpdate: cacheUpdate,
@@ -1611,16 +1610,17 @@ this.DOMApplicationRegistry = {
       this.notifyAppsRegistryReady();
     }
   },
 
   checkForUpdate: function(aData, aMm) {
     debug("checkForUpdate for " + aData.manifestURL);
 
     function sendError(aError) {
+      debug("checkForUpdate error " + aError);
       aData.error = aError;
       aMm.sendAsyncMessage("Webapps:CheckForUpdate:Return:KO", aData);
     }
 
     let id = this._appIdForManifestURL(aData.manifestURL);
     let app = this.webapps[id];
 
     // We cannot update an app that does not exists.
@@ -1640,71 +1640,67 @@ this.DOMApplicationRegistry = {
       sendError("APP_IS_DOWNLOADING");
       return;
     }
 
     // If the app is packaged and its manifestURL has an app:// scheme,
     // then we can't have an update.
     if (app.origin.startsWith("app://") &&
         app.manifestURL.startsWith("app://")) {
-      aData.error = "NOT_UPDATABLE";
-      aMm.sendAsyncMessage("Webapps:CheckForUpdate:Return:KO", aData);
+      sendError("NOT_UPDATABLE");
       return;
     }
 
     // For non-removable hosted apps that lives in the core apps dir we
     // only check the appcache because we can't modify the manifest even
     // if it has changed.
     let onlyCheckAppCache = false;
 
 #ifdef MOZ_WIDGET_GONK
     let appDir = FileUtils.getDir("coreAppsDir", ["webapps"], false);
     onlyCheckAppCache = (app.basePath == appDir.path);
 #endif
 
     if (onlyCheckAppCache) {
       // Bail out for packaged apps.
       if (app.origin.startsWith("app://")) {
-        aData.error = "NOT_UPDATABLE";
-        aMm.sendAsyncMessage("Webapps:CheckForUpdate:Return:KO", aData);
+        sendError("NOT_UPDATABLE");
         return;
       }
 
       // We need the manifest to check if we have an appcache.
       this._readManifests([{ id: id }]).then((aResult) => {
         let manifest = aResult[0].manifest;
         if (!manifest.appcache_path) {
-          aData.error = "NOT_UPDATABLE";
-          aMm.sendAsyncMessage("Webapps:CheckForUpdate:Return:KO", aData);
+          sendError("NOT_UPDATABLE");
           return;
         }
 
         debug("Checking only appcache for " + aData.manifestURL);
         // Check if the appcache is updatable, and send "downloadavailable" or
         // "downloadapplied".
         let updateObserver = {
           observe: function(aSubject, aTopic, aObsData) {
             debug("onlyCheckAppCache updateSvc.checkForUpdate return for " +
                   app.manifestURL + " - event is " + aTopic);
             if (aTopic == "offline-cache-update-available") {
               app.downloadAvailable = true;
               this._saveApps().then(() => {
                 this.broadcastMessage("Webapps:UpdateState", {
                   app: app,
-                  manifestURL: app.manifestURL
+                  id: app.id
                 });
                 this.broadcastMessage("Webapps:FireEvent", {
                   eventType: "downloadavailable",
                   manifestURL: app.manifestURL,
                   requestID: aData.requestID
                 });
               });
             } else {
-              aData.error = "NOT_UPDATABLE";
-              aMm.sendAsyncMessage("Webapps:CheckForUpdate:Return:KO", aData);
+              sendError("NOT_UPDATABLE");
             }
           }
         };
         let helper = new ManifestHelper(manifest, aData.manifestURL);
         debug("onlyCheckAppCache - launch updateSvc.checkForUpdate for " +
               helper.fullAppcachePath());
         updateSvc.checkForUpdate(Services.io.newURI(helper.fullAppcachePath(), null, null),
                                  app.localId, false, updateObserver);
@@ -1754,17 +1750,17 @@ this.DOMApplicationRegistry = {
             } else {
               this._saveApps().then(() => {
                 // Like if we got a 304, just send a 'downloadapplied'
                 // or downloadavailable event.
                 let eventType = app.downloadAvailable ? "downloadavailable"
                                                       : "downloadapplied";
                 aMm.sendAsyncMessage("Webapps:UpdateState", {
                   app: app,
-                  manifestURL: app.manifestURL
+                  id: app.id
                 });
                 aMm.sendAsyncMessage("Webapps:FireEvent", {
                   eventType: eventType,
                   manifestURL: app.manifestURL,
                   requestID: aData.requestID
                 });
               });
             }
@@ -1781,17 +1777,17 @@ this.DOMApplicationRegistry = {
           app.lastCheckedUpdate = Date.now();
           this._saveApps().then(() => {
             // If the app is a packaged app, we just send a 'downloadapplied'
             // or downloadavailable event.
             let eventType = app.downloadAvailable ? "downloadavailable"
                                                   : "downloadapplied";
             aMm.sendAsyncMessage("Webapps:UpdateState", {
               app: app,
-              manifestURL: app.manifestURL
+              id: app.id
             });
             aMm.sendAsyncMessage("Webapps:FireEvent", {
               eventType: eventType,
               manifestURL: app.manifestURL,
               requestID: aData.requestID
             });
           });
         } else {
@@ -1890,17 +1886,17 @@ this.DOMApplicationRegistry = {
     // event.
     aApp.downloadAvailable = true;
     aApp.downloadSize = manifest.size;
     aApp.updateManifest = aNewManifest;
     yield this._saveApps();
 
     this.broadcastMessage("Webapps:UpdateState", {
       app: aApp,
-      manifestURL: aApp.manifestURL
+      id: aApp.id
     });
     this.broadcastMessage("Webapps:FireEvent", {
       eventType: "downloadavailable",
       manifestURL: aApp.manifestURL,
       requestID: aData.requestID
     });
   }),
 
@@ -1956,17 +1952,17 @@ this.DOMApplicationRegistry = {
     // Update the registry.
     this.webapps[aId] = aApp;
     yield this._saveApps();
 
     if (!manifest.appcache_path) {
       this.broadcastMessage("Webapps:UpdateState", {
         app: aApp,
         manifest: aApp.manifest,
-        manifestURL: aApp.manifestURL
+        id: aApp.id
       });
       this.broadcastMessage("Webapps:FireEvent", {
         eventType: "downloadapplied",
         manifestURL: aApp.manifestURL,
         requestID: aData.requestID
       });
     } else {
       // Check if the appcache is updatable, and send "downloadavailable" or
@@ -1990,17 +1986,17 @@ this.DOMApplicationRegistry = {
                                                   : "downloadapplied";
 
       aApp.downloadAvailable = (eventType == "downloadavailable");
       yield this._saveApps();
 
       this.broadcastMessage("Webapps:UpdateState", {
         app: aApp,
         manifest: aApp.manifest,
-        manifestURL: aApp.manifestURL
+        id: aApp.id
       });
       this.broadcastMessage("Webapps:FireEvent", {
         eventType: eventType,
         manifestURL: aApp.manifestURL,
         requestID: aData.requestID
       });
     }
 
@@ -2518,16 +2514,18 @@ this.DOMApplicationRegistry = {
       };
     }
 
     // We notify about the successful installation via mgmt.oninstall and the
     // corresponding DOMRequest.onsuccess event as soon as the app is properly
     // saved in the registry.
     yield this._saveApps();
 
+    aData.isPackage ? appObject.updateManifest = jsonManifest :
+                      appObject.manifest = jsonManifest;
     this.broadcastMessage("Webapps:AddApp", { id: id, app: appObject });
     if (aData.isPackage && aData.autoInstall) {
       // Skip directly to onInstallSuccessAck, since there isn't
       // a WebappsRegistry to receive Webapps:Install:Return:OK and respond
       // Webapps:Install:Return:Ack when an app is being auto-installed.
       this.onInstallSuccessAck(app.manifestURL);
     } else {
       // Broadcast Webapps:Install:Return:OK so the WebappsRegistry can notify
@@ -2611,17 +2609,17 @@ this.DOMApplicationRegistry = {
     }
 
     this.updateDataStore(this.webapps[aId].localId, aNewApp.origin,
                          aNewApp.manifestURL, aManifest, aNewApp.appStatus);
 
     this.broadcastMessage("Webapps:UpdateState", {
       app: app,
       manifest: aManifest,
-      manifestURL: aNewApp.manifestURL
+      id: app.id
     });
 
     // Check if we have asm.js code to preload for this application.
     yield ScriptPreloader.preload(aNewApp, aManifest);
 
     this.broadcastMessage("Webapps:FireEvent", {
       eventType: ["downloadsuccess", "downloadapplied"],
       manifestURL: aNewApp.manifestURL
@@ -2725,24 +2723,21 @@ this.DOMApplicationRegistry = {
 
       debug("About to download " + fullPackagePath);
 
       let requestChannel = this._getRequestChannel(fullPackagePath,
                                                    isLocalFileInstall,
                                                    oldApp,
                                                    aNewApp);
 
-      AppDownloadManager.add(
-        aNewApp.manifestURL,
-        {
-          channel: requestChannel,
-          appId: id,
-          previousState: aIsUpdate ? "installed" : "pending"
-        }
-      );
+      AppDownloadManager.add(aNewApp.manifestURL, {
+        channel: requestChannel,
+        appId: id,
+        previousState: aIsUpdate ? "installed" : "pending"
+      });
 
       // We set the 'downloading' flag to true right before starting the fetch.
       oldApp.downloading = true;
 
       // We determine the app's 'installState' according to its previous
       // state. Cancelled download should remain as 'pending'. Successfully
       // installed apps should morph to 'updating'.
       oldApp.installState = aIsUpdate ? "updating" : "pending";
@@ -2755,17 +2750,17 @@ this.DOMApplicationRegistry = {
 
       let responseStatus = requestChannel.responseStatus;
       let oldPackage = (responseStatus == 304 || hash == oldApp.packageHash);
 
       if (oldPackage) {
         debug("package's etag or hash unchanged; sending 'applied' event");
         // The package's Etag or hash has not changed.
         // We send a "applied" event right away.
-        this._sendAppliedEvent(aNewApp, oldApp, id);
+        this._sendAppliedEvent(oldApp);
         return;
       }
 
       let newManifest = yield this._openAndReadPackage(zipFile, oldApp, aNewApp,
               isLocalFileInstall, aIsUpdate, aManifest, requestChannel, hash);
 
       AppDownloadManager.remove(aNewApp.manifestURL);
 
@@ -2895,17 +2890,17 @@ this.DOMApplicationRegistry = {
     return requestChannel;
   },
 
   _sendDownloadProgressEvent: function(aNewApp, aProgress) {
     this.broadcastMessage("Webapps:UpdateState", {
       app: {
         progress: aProgress
       },
-      manifestURL: aNewApp.manifestURL
+      id: aNewApp.id
     });
     this.broadcastMessage("Webapps:FireEvent", {
       eventType: "progress",
       manifestURL: aNewApp.manifestURL
     });
   },
 
   _getPackage: function(aRequestChannel, aId, aOldApp, aNewApp) {
@@ -3012,56 +3007,53 @@ this.DOMApplicationRegistry = {
   /**
    * Send an "applied" event right away for the package being installed.
    *
    * XXX We use this to exit the app update process early when the downloaded
    * package is identical to the last one we installed.  Presumably we do
    * something similar after updating the app, and we could refactor both cases
    * to use the same code to send the "applied" event.
    *
-   * @param aNewApp {Object} the new app data
-   * @param aOldApp {Object} the currently stored app data
-   * @param aId {String} the unique id of the app
+   * @param aApp {Object} app data
    */
-  _sendAppliedEvent: function(aNewApp, aOldApp, aId) {
-    aOldApp.downloading = false;
-    aOldApp.downloadAvailable = false;
-    aOldApp.downloadSize = 0;
-    aOldApp.installState = "installed";
-    aOldApp.readyToApplyDownload = false;
-    if (aOldApp.staged && aOldApp.staged.manifestHash) {
+  _sendAppliedEvent: function(aApp) {
+    aApp.downloading = false;
+    aApp.downloadAvailable = false;
+    aApp.downloadSize = 0;
+    aApp.installState = "installed";
+    aApp.readyToApplyDownload = false;
+    if (aApp.staged && aApp.staged.manifestHash) {
       // If we're here then the manifest has changed but the package
       // hasn't. Let's clear this, so we don't keep offering
       // a bogus update to the user
-      aOldApp.manifestHash = aOldApp.staged.manifestHash;
-      aOldApp.etag = aOldApp.staged.etag || aOldApp.etag;
-      aOldApp.staged = {};
-
-      // Move the staged update manifest to a non staged one.
+      aApp.manifestHash = aApp.staged.manifestHash;
+      aApp.etag = aApp.staged.etag || aApp.etag;
+      aApp.staged = {};
+     // Move the staged update manifest to a non staged one.
       try {
-        let staged = this._getAppDir(aId);
+        let staged = this._getAppDir(aApp.id);
         staged.append("staged-update.webapp");
         staged.moveTo(staged.parent, "update.webapp");
       } catch (ex) {
         // We don't really mind much if this fails.
       }
     }
 
     // Save the updated registry, and cleanup the tmp directory.
     this._saveApps().then(() => {
       this.broadcastMessage("Webapps:UpdateState", {
-        app: aOldApp,
-        manifestURL: aNewApp.manifestURL
+        app: aApp,
+        id: aApp.id
       });
       this.broadcastMessage("Webapps:FireEvent", {
-        manifestURL: aNewApp.manifestURL,
+        manifestURL: aApp.manifestURL,
         eventType: ["downloadsuccess", "downloadapplied"]
       });
     });
-    let file = FileUtils.getFile("TmpD", ["webapps", aId], false);
+    let file = FileUtils.getFile("TmpD", ["webapps", aApp.id], false);
     if (file && file.exists()) {
       file.remove(true);
     }
   },
 
   _openAndReadPackage: function(aZipFile, aOldApp, aNewApp, aIsLocalFileInstall,
                                 aIsUpdate, aManifest, aRequestChannel, aHash) {
     return Task.spawn((function*() {
@@ -3356,19 +3348,20 @@ this.DOMApplicationRegistry = {
         delete this.webapps[oldId];
         // Rename the directories where the files are installed.
         [DIRECTORY_NAME, "TmpD"].forEach(function(aDir) {
           let parent = FileUtils.getDir(aDir, ["webapps"], true, true);
           let dir = FileUtils.getDir(aDir, ["webapps", oldId], true, true);
           dir.moveTo(parent, newId);
         });
         // Signals that we need to swap the old id with the new app.
-        this.broadcastMessage("Webapps:RemoveApp", { id: oldId });
-        this.broadcastMessage("Webapps:AddApp", { id: newId,
-                                                  app: aOldApp });
+        this.broadcastMessage("Webapps:UpdateApp", { oldId: oldId,
+                                                     newId: newId,
+                                                     app: aOldApp });
+
       }
     }
   },
 
   _getIds: function(aIsSigned, aZipReader, aConverter, aNewApp, aOldApp,
                     aIsUpdate) {
     // Get ids.json if the file is signed
     if (aIsSigned) {
@@ -3461,17 +3454,17 @@ this.DOMApplicationRegistry = {
     if (aOldApp.staged) {
       delete aOldApp.staged;
     }
 
     this._saveApps().then(() => {
       this.broadcastMessage("Webapps:UpdateState", {
         app: aOldApp,
         error: aError,
-        manifestURL: aNewApp.manifestURL
+        id: aNewApp.id
       });
       this.broadcastMessage("Webapps:FireEvent", {
         eventType: "downloaderror",
         manifestURL:  aNewApp.manifestURL
       });
     });
     AppDownloadManager.remove(aNewApp.manifestURL);
   },
@@ -4011,17 +4004,17 @@ let AppcacheObserver = function(aApp) {
 };
 
 AppcacheObserver.prototype = {
   // nsIOfflineCacheUpdateObserver implementation
   _sendProgressEvent: function() {
     let app = this.app;
     DOMApplicationRegistry.broadcastMessage("Webapps:UpdateState", {
       app: app,
-      manifestURL: app.manifestURL
+      id: app.id
     });
     DOMApplicationRegistry.broadcastMessage("Webapps:FireEvent", {
       eventType: "progress",
       manifestURL: app.manifestURL
     });
   },
 
   updateStateChanged: function appObs_Update(aUpdate, aState) {
@@ -4043,31 +4036,31 @@ AppcacheObserver.prototype = {
         return;
       }
 
       app.updateTime = Date.now();
       app.downloading = false;
       app.downloadAvailable = false;
       DOMApplicationRegistry.broadcastMessage("Webapps:UpdateState", {
         app: app,
-        manifestURL: app.manifestURL
+        id: app.id
       });
       DOMApplicationRegistry.broadcastMessage("Webapps:FireEvent", {
         eventType: ["downloadsuccess", "downloadapplied"],
         manifestURL: app.manifestURL
       });
     }
 
     let setError = function appObs_setError(aError) {
       debug("Offlinecache setError to " + aError);
       app.downloading = false;
       DOMApplicationRegistry.broadcastMessage("Webapps:UpdateState", {
         app: app,
         error: aError,
-        manifestURL: app.manifestURL
+        id: app.id
       });
       DOMApplicationRegistry.broadcastMessage("Webapps:FireEvent", {
         eventType: "downloaderror",
         manifestURL: app.manifestURL
       });
       mustSave = true;
     }
 
--- a/dom/apps/tests/test_packaged_app_common.js
+++ b/dom/apps/tests/test_packaged_app_common.js
@@ -93,16 +93,17 @@ var PackagedTestHelper = (function Packa
       ok(false, "Got unexpected " + evt.target.error.name);
       finish();
     };
 
     navigator.mozApps.mgmt.oninstall = function(evt) {
       var aApp = evt.application;
       aApp.ondownloaderror = function(evt) {
         var error = aApp.downloadError.name;
+        ok(true, "Got downloaderror " + error);
         if (error == aExpectedError) {
           ok(true, "Got expected " + aExpectedError);
           var expected = {
             name: aName,
             manifestURL: aMiniManifestURL,
             installOrigin: gInstallOrigin,
             progress: 0,
             installState: "pending",
--- a/dom/apps/tests/test_packaged_app_update.html
+++ b/dom/apps/tests/test_packaged_app_update.html
@@ -74,26 +74,25 @@ function checkLastAppState(aMiniManifest
 
 function updateApp(aExpectedReady, aPreviousVersion, aNextVersion) {
   var lApp = PackagedTestHelper.gApp;
 
   var ondownloadappliedhandler =
     checkLastAppState.bind(PackagedTestHelper, miniManifestURL, false, false,
                            aNextVersion, PackagedTestHelper.next);
 
-    var ondownloadsuccesshandler =
-      checkLastAppState.bind(undefined, miniManifestURL,
-                             aExpectedReady, false, aPreviousVersion,
-                             function() {
-        navigator.mozApps.mgmt.applyDownload(lApp);
-    });
+  var ondownloadsuccesshandler =
+    checkLastAppState.bind(undefined, miniManifestURL,
+                           aExpectedReady, false, aPreviousVersion,
+                           function() {
+      navigator.mozApps.mgmt.applyDownload(lApp);
+  });
 
-    checkForUpdate(true, ondownloadsuccesshandler, ondownloadappliedhandler, null,
-                   true);
-
+  checkForUpdate(true, ondownloadsuccesshandler, ondownloadappliedhandler, null,
+                 true);
 }
 
 
 var steps = [
   function() {
     // Set up
     SpecialPowers.setAllAppsLaunchable(true);
     SpecialPowers.addPermission("webapps-manage", true, document);
@@ -169,17 +168,17 @@ var steps = [
   },
   function() {
     ok(true, "== TEST == Update packaged app - Updating a pending app");
     miniManifestURL = PackagedTestHelper.gSJS +
                       "?getManifest=true" +
                       "&appName=arandomname" +
                       "&appToFail1";
     PackagedTestHelper.checkAppDownloadError(miniManifestURL,
-                                            "MANIFEST_MISMATCH", 2, false, true,
+                                            "MANIFEST_MISMATCH", 1, false, true,
                                              "arandomname",
                                              function () {
       checkForUpdate(false, null, null, null, false,
                      function (request) {
         if (request.error.name === "PENDING_APP_NOT_UPDATABLE") {
           ok(true, "Got expected PENDING_APP_NOT_UPDATEABLE");
         } else {
           ok(false, "Got unexpected " + request.error.name);
--- a/dom/apps/tests/test_receipt_operations.html
+++ b/dom/apps/tests/test_receipt_operations.html
@@ -238,9 +238,9 @@ function runTest() {
   ok(true, "App uninstalled");
 }
 
 addLoadEvent(go);
 
 </script>
 </pre>
 </body>
-</html>
\ No newline at end of file
+</html>
--- a/dom/bluetooth2/moz.build
+++ b/dom/bluetooth2/moz.build
@@ -86,17 +86,20 @@ if CONFIG['MOZ_B2G_BT']:
         'ipc',
     ]
 
 EXPORTS.mozilla.dom.bluetooth.ipc += [
     'ipc/BluetoothMessageUtils.h',
 ]
 
 EXPORTS.mozilla.dom.bluetooth += [
+    'BluetoothAdapter.h',
     'BluetoothCommon.h',
+    'BluetoothDevice.h',
+    'BluetoothManager.h',
 ]
 
 IPDL_SOURCES += [
     'ipc/BluetoothTypes.ipdlh',
     'ipc/PBluetooth.ipdl',
     'ipc/PBluetoothRequest.ipdl',
 ]
 
--- a/dom/events/test/test_all_synthetic_events.html
+++ b/dom/events/test/test_all_synthetic_events.html
@@ -39,16 +39,24 @@ const kEventConstructors = {
                                                          e.initEvent(aName, aProps.bubbles, aProps.cancelable);
                                                          return e;
                                                        },
                                              },
   BlobEvent:                                 { create: function (aName, aProps) {
                                                          return new BlobEvent(aName, aProps);
                                                        },
                                              },
+  BluetoothAdapterEvent:                     { create: function (aName, aProps) {
+                                                          return new BluetoothAdapterEvent(aName, aProps);
+                                                       },
+                                             },
+  BluetoothAttributeEvent:                   { create: function (aName, aProps) {
+                                                          return new BluetoothAttributeEvent(aName, aProps);
+                                                       },
+                                             },
   BluetoothDeviceEvent:                      { create: function (aName, aProps) {
                                                           return new BluetoothDeviceEvent(aName, aProps);
                                                        },
                                              },
   BluetoothDiscoveryStateChangedEvent:       { create: function (aName, aProps) {
                                                           return new BluetoothDiscoveryStateChangedEvent(aName, aProps);
                                                        },
                                              },
--- a/dom/telephony/test/marionette/test_outgoing_emergency_in_airplane_mode.js
+++ b/dom/telephony/test/marionette/test_outgoing_emergency_in_airplane_mode.js
@@ -1,120 +1,42 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 MARIONETTE_TIMEOUT = 60000;
 MARIONETTE_HEAD_JS = 'head.js';
 
-let connection;
-let number = "112";
-let outgoing;
+function setRadioEnabled(enabled) {
+  log("Set radio enabled: " + enabled + ".");
 
-function setRadioEnabled(enabled, callback) {
-  let request  = connection.setRadioEnabled(enabled);
   let desiredRadioState = enabled ? 'enabled' : 'disabled';
-
-  let pending = ['onradiostatechange', 'onsuccess'];
-  let done = callback;
+  let deferred = Promise.defer();
+  let connection = navigator.mozMobileConnections[0];
+  ok(connection instanceof MozMobileConnection,
+     "connection is instanceof " + connection.constructor);
 
   connection.onradiostatechange = function() {
     let state = connection.radioState;
     log("Received 'radiostatechange' event, radioState: " + state);
 
-    if (state == desiredRadioState) {
-      gReceivedPending('onradiostatechange', pending, done);
+    // We are waiting for 'desiredRadioState.' Ignore any transient state.
+    if (state === desiredRadioState) {
+      connection.onradiostatechange = null;
+      deferred.resolve();
     }
   };
-
-  request.onsuccess = function onsuccess() {
-    gReceivedPending('onsuccess', pending, done);
-  };
-
-  request.onerror = function onerror() {
-    ok(false, "setRadioEnabled should be ok");
-  };
-}
-
-function dial() {
-  log("Make an outgoing call.");
-
-  telephony.dial(number).then(call => {
-    outgoing = call;
-    ok(outgoing);
-    is(outgoing.number, number);
-    is(outgoing.state, "dialing");
-
-    is(outgoing, telephony.active);
-    is(telephony.calls.length, 1);
-    is(telephony.calls[0], outgoing);
-
-    outgoing.onalerting = function onalerting(event) {
-      log("Received 'onalerting' call event.");
-      is(outgoing, event.call);
-      is(outgoing.state, "alerting");
-
-      emulator.run("gsm list", function(result) {
-        log("Call list is now: " + result);
-        is(result[0], "outbound to  " + number + "        : ringing");
-        is(result[1], "OK");
-        answer();
-      });
-    };
-  });
-}
-
-function answer() {
-  log("Answering the outgoing call.");
+  connection.setRadioEnabled(enabled);
 
-  // We get no "connecting" event when the remote party answers the call.
-
-  outgoing.onconnected = function onconnected(event) {
-    log("Received 'connected' call event.");
-    is(outgoing, event.call);
-    is(outgoing.state, "connected");
-
-    is(outgoing, telephony.active);
-
-    emulator.run("gsm list", function(result) {
-      log("Call list is now: " + result);
-      is(result[0], "outbound to  " + number + "        : active");
-      is(result[1], "OK");
-      hangUp();
-    });
-  };
-  emulator.run("gsm accept " + number);
-}
-
-function hangUp() {
-  log("Hanging up the outgoing call.");
-
-  // We get no "disconnecting" event when the remote party terminates the call.
-
-  outgoing.ondisconnected = function ondisconnected(event) {
-    log("Received 'disconnected' call event.");
-    is(outgoing, event.call);
-    is(outgoing.state, "disconnected");
-
-    is(telephony.active, null);
-    is(telephony.calls.length, 0);
-
-    emulator.run("gsm list", function(result) {
-      log("Call list is now: " + result);
-      is(result[0], "OK");
-      cleanUp();
-    });
-  };
-  emulator.run("gsm cancel " + number);
-}
-
-function cleanUp() {
-  finish();
+  return deferred.promise;
 }
 
 startTestWithPermissions(['mobileconnection'], function() {
-  connection = navigator.mozMobileConnections[0];
-  ok(connection instanceof MozMobileConnection,
-     "connection is instanceof " + connection.constructor);
-
-  setRadioEnabled(false, function() {
-    dial();
-  });
+  let outCall;
+  setRadioEnabled(false)
+    .then(() => gDial("112"))
+    .then(call => { outCall = call; })
+    .then(() => gRemoteAnswer(outCall))
+    .then(() => gRemoteHangUp(outCall))
+    .then(null, () => {
+      ok(false, "promise rejects during test.");
+    })
+    .then(finish);
 });
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothAdapterEvent.webidl
@@ -0,0 +1,19 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+[Func="Navigator::HasBluetoothSupport",
+ Constructor(DOMString type, optional BluetoothAdapterEventInit eventInitDict)]
+interface BluetoothAdapterEvent : Event
+{
+  readonly attribute BluetoothAdapter? adapter;
+  readonly attribute DOMString?        address;
+};
+
+dictionary BluetoothAdapterEventInit : EventInit
+{
+  BluetoothAdapter? adapter = null;
+  DOMString?        address = "";
+};
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothAttributeEvent.webidl
@@ -0,0 +1,25 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+[Func="Navigator::HasBluetoothSupport",
+ Constructor(DOMString type,
+             optional BluetoothAttributeEventInit eventInitDict)]
+interface BluetoothAttributeEvent : Event
+{
+  readonly attribute unsigned short   attr;
+  readonly attribute any              value;
+  // We don't support sequences in unions yet (Bug 767924)
+  /* readonly attribute (BluetoothAdapter or BluetoothAdapterState or
+   *                     BluetoothClassOfDevice or boolean or
+   *                     DOMString or sequence<DOMString>) value;
+   */
+};
+
+dictionary BluetoothAttributeEventInit : EventInit
+{
+  unsigned short attr  = 0;
+  any            value = null;
+};
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -649,19 +649,28 @@ GENERATED_EVENTS_WEBIDL_FILES = [
 if CONFIG['MOZ_GAMEPAD']:
     GENERATED_EVENTS_WEBIDL_FILES += [
         'GamepadAxisMoveEvent.webidl',
         'GamepadButtonEvent.webidl',
         'GamepadEvent.webidl',
     ]
 
 if CONFIG['MOZ_B2G_BT']:
+    if CONFIG['MOZ_B2G_BT_API_V2']:
+        GENERATED_EVENTS_WEBIDL_FILES += [
+            'BluetoothAdapterEvent.webidl',
+            'BluetoothAttributeEvent.webidl',
+        ]
+    else:
+        GENERATED_EVENTS_WEBIDL_FILES += [
+            'BluetoothDiscoveryStateChangedEvent.webidl',
+        ]
+
     GENERATED_EVENTS_WEBIDL_FILES += [
         'BluetoothDeviceEvent.webidl',
-        'BluetoothDiscoveryStateChangedEvent.webidl',
         'BluetoothStatusChangedEvent.webidl',
     ]
 
 if CONFIG['MOZ_BUILD_APP'] in ['browser', 'xulrunner']:
     WEBIDL_FILES += [
         'BrowserFeedWriter.webidl',
     ]
 
--- a/editor/reftests/xul/reftest.list
+++ b/editor/reftests/xul/reftest.list
@@ -1,29 +1,29 @@
-fails-if(Android||B2G) == empty-1.xul empty-ref.xul # bug 783658
-!= empty-2.xul empty-ref.xul
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == empty-1.xul empty-ref.xul # bug 783658
+skip-if(B2G&&browserIsRemote) != empty-2.xul empty-ref.xul
 # There is no way to simulate an autocomplete textbox in windows XP/Vista/7 default theme using CSS.
 # Therefore, the equlity tests below should be marked as failing.
-fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) == autocomplete-1.xul autocomplete-ref.xul # bug 783658
-fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) == emptyautocomplete-1.xul emptyautocomplete-ref.xul # bug 783658
-!= emptymultiline-1.xul emptymultiline-ref.xul
-fails-if(Android||B2G) == emptymultiline-2.xul emptymultiline-ref.xul # bug 783658
-fails-if(Android||B2G) == emptytextbox-1.xul emptytextbox-ref.xul # bug 783658
-fails-if(Android||B2G) == emptytextbox-2.xul emptytextbox-ref.xul # bug 783658
-!= emptytextbox-3.xul emptytextbox-ref.xul
-!= emptytextbox-4.xul emptytextbox-ref.xul
-fails-if(Android||B2G) == emptytextbox-5.xul emptytextbox-ref.xul # bug 783658
+fails-if(Android||(B2G&&browserIsRemote)) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == autocomplete-1.xul autocomplete-ref.xul # bug 783658
+fails-if(Android||(B2G&&browserIsRemote)) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == emptyautocomplete-1.xul emptyautocomplete-ref.xul # bug 783658
+skip-if(B2G&&browserIsRemote) != emptymultiline-1.xul emptymultiline-ref.xul
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == emptymultiline-2.xul emptymultiline-ref.xul # bug 783658
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == emptytextbox-1.xul emptytextbox-ref.xul # bug 783658
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == emptytextbox-2.xul emptytextbox-ref.xul # bug 783658
+skip-if(B2G&&browserIsRemote) != emptytextbox-3.xul emptytextbox-ref.xul
+skip-if(B2G&&browserIsRemote) != emptytextbox-4.xul emptytextbox-ref.xul
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == emptytextbox-5.xul emptytextbox-ref.xul # bug 783658
 # There is no way to simulate a number textbox in windows XP/Vista/7 default theme using CSS.
 # Therefore, the equlity tests below should be marked as failing.
-!= number-1.xul number-ref.xul
-!= number-2.xul number-ref.xul
-fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) == number-3.xul number-ref.xul # bug 783658
-!= number-4.xul number-ref.xul
-fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) == number-5.xul number-ref.xul # bug 783658
-fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) == numberwithvalue-1.xul numberwithvalue-ref.xul # bug 783658
-fails-if(Android||B2G) == passwd-1.xul passwd-ref.xul # bug 783658
-fails-if(Android||B2G) == passwd-2.xul passwd-ref.xul # bug 783658
-!= passwd-3.xul passwd-ref.xul
-fails-if(Android||B2G) == plain-1.xul plain-ref.xul # bug 783658
-fails-if(Android||B2G) == textbox-1.xul textbox-ref.xul
-!= textbox-disabled.xul textbox-ref.xul
+skip-if(B2G&&browserIsRemote) != number-1.xul number-ref.xul
+skip-if(B2G&&browserIsRemote) != number-2.xul number-ref.xul
+fails-if(Android||(B2G&&browserIsRemote)) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == number-3.xul number-ref.xul # bug 783658
+skip-if(B2G&&browserIsRemote) != number-4.xul number-ref.xul
+fails-if(Android||(B2G&&browserIsRemote)) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == number-5.xul number-ref.xul # bug 783658
+fails-if(Android||(B2G&&browserIsRemote)) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == numberwithvalue-1.xul numberwithvalue-ref.xul # bug 783658
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == passwd-1.xul passwd-ref.xul # bug 783658
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == passwd-2.xul passwd-ref.xul # bug 783658
+skip-if(B2G&&browserIsRemote) != passwd-3.xul passwd-ref.xul
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == plain-1.xul plain-ref.xul # bug 783658
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == textbox-1.xul textbox-ref.xul
+skip-if(B2G&&browserIsRemote) != textbox-disabled.xul textbox-ref.xul
 # Read-only textboxes look like normal textboxes in windows Vista/7 default theme
-fails-if(windowsDefaultTheme&&/^Windows\x20NT\x206\.[012]/.test(http.oscpu)) != textbox-readonly.xul textbox-ref.xul
+fails-if(windowsDefaultTheme&&/^Windows\x20NT\x206\.[012]/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) != textbox-readonly.xul textbox-ref.xul
--- a/image/test/reftest/bmp/bmp-corrupted/reftest.list
+++ b/image/test/reftest/bmp/bmp-corrupted/reftest.list
@@ -3,10 +3,10 @@
 == wrapper.html?invalid-signature.bmp about:blank
 == wrapper.html?invalid-bpp.bmp about:blank
 == wrapper.html?os2-invalid-bpp.bmp about:blank
 # Tests for an unsupported compression value
 == wrapper.html?invalid-compression.bmp about:blank
 # Tests for RLE4 with an invalid BPP
 == wrapper.html?invalid-compression-RLE4.bmp about:blank
 # Tests for RLE8 with an invalid BPP
-== wrapper.html?invalid-compression-RLE8.bmp about:blank
+random-if(B2G&&browserIsRemote) == wrapper.html?invalid-compression-RLE8.bmp about:blank # Bug 921207
 
--- a/image/test/reftest/ico/ico-bmp-corrupted/reftest.list
+++ b/image/test/reftest/ico/ico-bmp-corrupted/reftest.list
@@ -1,15 +1,15 @@
 # ICOs containing corrupted BMP tests
 
 # Invalid value for bits per pixel (BPP)
 == wrapper.html?invalid-bpp.ico about:blank
 # Invalid BPP values for RLE4
-== wrapper.html?invalid-compression-RLE4.ico about:blank
+random-if(B2G&&browserIsRemote) == wrapper.html?invalid-compression-RLE4.ico about:blank
 # Invalid BPP values for RLE8
-== wrapper.html?invalid-compression-RLE8.ico about:blank
+random-if(B2G&&browserIsRemote) == wrapper.html?invalid-compression-RLE8.ico about:blank
 # Invalid compression value
 == wrapper.html?invalid-compression.ico about:blank
 
 # Invalid ICO width and heigth should be ignored if the
 # contained BMP is correct.
 == invalid_ico_height.ico 16x16.png
 == invalid_ico_width.ico 16x16.png
--- a/layout/reftests/abs-pos/reftest.list
+++ b/layout/reftests/abs-pos/reftest.list
@@ -1,9 +1,9 @@
-== font-size-wrap.html font-size-wrap-ref.html
+random-if(B2G&&browserIsRemote) == font-size-wrap.html font-size-wrap-ref.html
 == abs-pos-auto-margin-1.html abs-pos-auto-margin-1-ref.html
 fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azureSkia,73,1) == auto-offset-inline-block-1.html auto-offset-inline-block-1-ref.html # bug 696670
 == fieldset-1.html fieldset-1-ref.html
 == table-1.html table-1-ref.html
 == table-2.html table-2-ref.html
 == table-3.html table-3-ref.html
 == table-cell-1.html table-internal-1-ref.html
 == table-cell-2.html table-internal-2-ref.html
--- a/layout/reftests/bidi/reftest.list
+++ b/layout/reftests/bidi/reftest.list
@@ -81,18 +81,18 @@ random-if(winWidget) == 267459-1.html 26
 random-if(winWidget) == 305643-1.html 305643-1-ref.html # depends on windows version, see bug 590101
 == 332655-1.html 332655-1-ref.html
 == 332655-2.html 332655-2-ref.html
 == 381279-1.html 381279-1-ref.html
 == 386339.html 386339-ref.html
 == 409375.html 409375-ref.html
 == 413542-1.html 413542-1-ref.html
 == 413542-2.html 413542-2-ref.html
-== 413928-1.html 413928-1-ref.html
-== 413928-2.html 413928-2-ref.html
+random-if(B2G&&browserIsRemote) == 413928-1.html 413928-1-ref.html
+random-if(B2G&&browserIsRemote) == 413928-2.html 413928-2-ref.html
 == 425338-1a.html 425338-1-ref.html
 == 425338-1b.html 425338-1-ref.html
 == 489517-1.html 489517-1-ref.html
 == 489887-1.html 489887-1-ref.html
 == 492231-1.html 492231-1-ref.html
 == 496006-1.html 496006-1-ref.html
 == 503269-1.html 503269-1-ref.html
 == 503957-1.html 503957-1-ref.html
@@ -134,11 +134,11 @@ skip-if(B2G) == 726420-1.html 726420-1-r
 == 730562-1.html 730562-1-ref.html
 == 746987-1.html 746987-1-ref.html
 == 746987-2.html 746987-2-ref.html
 == 746987-3.html 746987-3-ref.html
 == 746987-4.html 746987-4-ref.html
 == 779003-1.html 779003-1-ref.html
 == 779003-1-dynamic.html 779003-1-ref.html
 == 847242-1.html 847242-1-ref.html
-== 869833-1.xul 869833-1-ref.xul
+skip-if(B2G&&browserIsRemote) == 869833-1.xul 869833-1-ref.xul
 fails-if(B2G) == 922530-1.html 922530-1-ref.html # B2G kerning
 == 922550-1.html 922550-1-ref.html
--- a/layout/reftests/border-image/reftest.list
+++ b/layout/reftests/border-image/reftest.list
@@ -5,17 +5,17 @@
 == multicolor-image-1.html multicolor-image-1-ref.html
 == multicolor-image-2.html multicolor-image-2-ref.html
 == multicolor-image-3.html multicolor-image-3-ref.html
 == multicolor-image-4.html multicolor-image-4-ref.html
 == multicolor-image-5.html multicolor-image-5-ref.html
 == transparent-image-1.html transparent-image-1-ref.html
 != repeat-image-1.html repeat-image-1-ref.html
 == 470250-1.html 470250-1-ref.html
-== 470250-2.html 470250-2-ref.html
+fails-if(B2G&&browserIsRemote) == 470250-2.html 470250-2-ref.html
 != different-h-v-1.html different-h-v-ref.html
 != different-h-v-2.html different-h-v-ref.html
 != different-h-v-1.html different-h-v-2.html
 == center-scaling-1.html center-scaling-1-ref.html
 fails-if(Android||B2G) == center-scaling-2.html center-scaling-2-ref.html # Android/B2G: very different scaling (blurriness) on some sides
 fails-if(Android||B2G) == center-scaling-3.html center-scaling-3-ref.html # Android/B2G: very different scaling (blurriness) on some sides
 == center-scaling-4t.html center-scaling-4t-ref.html
 == center-scaling-4r.html center-scaling-4r-ref.html
--- a/layout/reftests/box-ordinal/reftest.list
+++ b/layout/reftests/box-ordinal/reftest.list
@@ -1,7 +1,7 @@
-== box-ordinal-with-out-of-flow-1.html box-ordinal-with-out-of-flow-1-ref.html
-== dynamic-1-remove-to-none-grouped.xul dynamic-1-ref.xul
-== dynamic-1-add-to-one-grouped.xul dynamic-1-ref.xul
-== dynamic-1-remove-to-one-grouped-1.xul dynamic-1-ref.xul
-fails == dynamic-1-remove-to-one-grouped-2.xul dynamic-1-ref.xul # bug 575500
-== dynamic-1-add-to-two-grouped-1.xul dynamic-1-ref.xul
-== dynamic-1-add-to-two-grouped-2.xul dynamic-1-ref.xul
+skip-if(B2G&&browserIsRemote) == box-ordinal-with-out-of-flow-1.html box-ordinal-with-out-of-flow-1-ref.html
+skip-if(B2G&&browserIsRemote) == dynamic-1-remove-to-none-grouped.xul dynamic-1-ref.xul
+skip-if(B2G&&browserIsRemote) == dynamic-1-add-to-one-grouped.xul dynamic-1-ref.xul
+skip-if(B2G&&browserIsRemote) == dynamic-1-remove-to-one-grouped-1.xul dynamic-1-ref.xul
+fails skip-if(B2G&&browserIsRemote) == dynamic-1-remove-to-one-grouped-2.xul dynamic-1-ref.xul # bug 575500
+skip-if(B2G&&browserIsRemote) == dynamic-1-add-to-two-grouped-1.xul dynamic-1-ref.xul
+skip-if(B2G&&browserIsRemote) == dynamic-1-add-to-two-grouped-2.xul dynamic-1-ref.xul
--- a/layout/reftests/box-properties/reftest.list
+++ b/layout/reftests/box-properties/reftest.list
@@ -1,9 +1,9 @@
-== outline-radius-percent-1.html outline-radius-percent-1-ref.html
+random-if(B2G&&browserIsRemote) == outline-radius-percent-1.html outline-radius-percent-1-ref.html
 == min-width-1.html min-width-1-ref.html
 == min-height-1.html min-height-1-ref.html
 == max-width-1.html max-width-1-ref.html
 == max-height-1.html max-height-1-ref.html
 == width-special-values-block.html width-special-values-block-ref.html
 == width-special-values-float.html width-special-values-block-ref.html
 == width-special-values-image-block.html width-special-values-image-block-ref.html
 == width-special-values-image.html width-special-values-image-ref.html
--- a/layout/reftests/box-shadow/reftest.list
+++ b/layout/reftests/box-shadow/reftest.list
@@ -9,17 +9,17 @@ random != boxshadow-blur-2.html boxshado
 == tableboxshadow-trshadow.html tableboxshadow-trshadow-ref.html
 == tableboxshadow-tdshadow.html tableboxshadow-tdshadow-ref.html
 == boxshadow-rounding.html boxshadow-rounding-ref.html
 fails-if(Android||B2G) == boxshadow-button.html boxshadow-button-ref.html
 fails-if(Android||B2G) == boxshadow-fileupload.html boxshadow-fileupload-ref.html
 == boxshadow-inner-basic.html boxshadow-inner-basic-ref.svg
 random-if(layersGPUAccelerated) == boxshadow-mixed.html boxshadow-mixed-ref.html
 random-if(d2d) == boxshadow-rounded-spread.html boxshadow-rounded-spread-ref.html
-HTTP(..) == boxshadow-dynamic.xul boxshadow-dynamic-ref.xul
+skip-if(B2G&&browserIsRemote) HTTP(..) == boxshadow-dynamic.xul boxshadow-dynamic-ref.xul
 random-if(d2d) == boxshadow-onecorner.html boxshadow-onecorner-ref.html
 random-if(d2d) == boxshadow-twocorners.html boxshadow-twocorners-ref.html
 random-if(d2d) == boxshadow-threecorners.html boxshadow-threecorners-ref.html
 == boxshadow-skiprect.html boxshadow-skiprect-ref.html
 == boxshadow-opacity.html boxshadow-opacity-ref.html
 == boxshadow-color-rounding.html boxshadow-color-rounding-ref.html
 
 == overflow-not-scrollable-1.html overflow-not-scrollable-1-ref.html
--- a/layout/reftests/bugs/reftest.list
+++ b/layout/reftests/bugs/reftest.list
@@ -301,17 +301,17 @@ skip-if(B2G) == 273681-1.html 273681-1-r
 == 289384-1.xhtml 289384-ref.xhtml
 random-if(d2d) fuzzy-if(Android&&AndroidVersion>=15,8,1439) skip-if(B2G&&browserIsRemote) HTTP == 289480.html#top 289480-ref.html # basically-verbatim acid2 test, HTTP for a 404 page -- bug 578114 for the d2d failures
 == 290129-1.html 290129-1-ref.html
 skip-if(B2G) == 291078-1.html 291078-1-ref.html
 == 291078-2.html 291078-2-ref.html
 == 291262-1.html 291262-1-ref.html
 == 294306-1.html 294306-1a-ref.html
 != 294306-1.html 294306-1b-ref.html
-== 296361-1.html 296361-ref.html
+fails-if(B2G&&browserIsRemote) == 296361-1.html 296361-ref.html
 == 296904-1.html 296904-1-ref.html
 skip-if(B2G) == 299136-1.html 299136-1-ref.html
 == 299837-1.html 299837-1-ref.html
 skip-if(B2G&&browserIsRemote) == 299837-2.xul 299837-2-ref.xul # bug 974780
 random-if(d2d) skip-if(B2G&&browserIsRemote) == 299837-3.xul 299837-3-ref.xul # bug 587631, 974780
 == 300691-1a.html 300691-1-ref.html
 == 300691-1b.html 300691-1-ref.html
 == 300691-1c.html 300691-1-ref.html
@@ -461,17 +461,17 @@ skip-if(B2G&&browserIsRemote) == 346189-
 == 347348-1.xhtml 347348-1-ref.xhtml
 == 347496-1.xhtml 347496-1-ref.xhtml
 == 347912-1.html 347912-1-ref.html
 skip-if(B2G&&browserIsRemote) == 348049-1.xhtml 348049-1-ref.xhtml
 == 348516-1.html 348516-1-ref.html
 == 348516-2.html 348516-2-ref.html
 != 348516-2.html 348516-2-notref.html
 != 348516-3.html 348516-3-notref.html
-== 348597-1.html 348597-ref.html
+fails-if(B2G&&browserIsRemote) == 348597-1.html 348597-ref.html
 == 348809-1a.html 348809-1-ref.html
 == 348809-1b.html 348809-1-ref.html
 == 348809-1c.html 348809-1-ref.html
 == 348809-1d.html 348809-1-ref.html
 == 348809-1e.html 348809-1-ref.html
 == 348809-1f.html 348809-1-ref.html
 == 348809-2a.html 348809-2-ref.html
 == 348809-2b.html 348809-2-ref.html
@@ -535,17 +535,17 @@ skip-if(B2G) == 359903-1.html 359903-1-r
 == 362594-2a.html 362594-2-quirks-ref.html
 != 362594-2b.html 362594-1-standards-ref.html
 == 362594-2b.html 362594-2-standards-ref.html
 == 362594-2c.html 362594-2-standards-ref.html
 == 362901-1.html 362901-1-ref.html
 == 363247-1.html 363247-1-ref.html
 == 363329-1.html 363329-1-ref.html
 == 363329-2.html 363329-2-ref.html
-== 363370-1.html 363370-1-ref.html
+fails-if(B2G&&browserIsRemote) == 363370-1.html 363370-1-ref.html
 == 363402-1.html 363402-1-ref.html
 == 363637-1.html 363637-1-ref.html
 skip-if(Android) == 363706-1.html 363706-1-ref.html
 != 363706-1.html about:blank
 == 363728-1.html 363728-1-ref.html
 == 363728-2.html 363728-2-ref.html
 skip-if(B2G) == 363858-1.html 363858-1-ref.html
 skip-if(B2G) == 363858-2.html 363858-2-ref.html
@@ -693,22 +693,22 @@ skip-if(B2G) == 379349-3a.xhtml 379349-3
 skip-if(B2G) == 379349-3b.xhtml 379349-3-ref.xhtml
 == 379361-1.html 379361-1-ref.html
 == 379361-2.html 379361-2-ref.html
 == 379361-3.html 379361-3-ref.html
 == 379461-1.xhtml 379461-1.html
 == 379461-2.xhtml 379461-2.html
 skip-if(B2G) == 379461-3-container-xhtml.html 379461-3-container-html.html
 skip-if(B2G) fails-if(Android) != 379461-3-container-xhtml.html 379461-3-container-blank.html # there is a scrollbar
-== 380004-1.html 380004-1-ref.html
-== 380227-1.html 380227-1-ref.html
+random-if(B2G&&browserIsRemote) == 380004-1.html 380004-1-ref.html
+random-if(B2G&&browserIsRemote) == 380227-1.html 380227-1-ref.html
 == 380825-1.html 380825-1-ref.html
 == 380842-1.html 380842-1-ref.html
 == 381130-1.html 381130-1-ref.html
-== 381507-1.html 381507-1-ref.html
+random-if(B2G&&browserIsRemote) == 381507-1.html 381507-1-ref.html
 == 381746-1.html 381746-1-ref.html
 == 382600-1.html 382600-1-ref.html
 == 382916-1.html 382916-1-ref.html
 == 383035-1.html about:blank
 == 383035-2.html about:blank
 == 383488-1.html 383488-1-ref.html
 == 383551-1.html 383551-1-ref.html
 == 383883-1.html 383883-1-ref.html
@@ -736,18 +736,18 @@ fails == 385823-2b.html 385823-2-ref.htm
 == 386014-1c.html 386014-1-ref.html
 == 386065-1.html 386065-1-ref.html
 == 386065-2.html about:blank
 skip-if(B2G) fails == 386147-1.html 386147-1-ref.html # bug 447460
 == 386310-1a.html 386310-1-ref.html
 == 386310-1b.html 386310-1-ref.html
 == 386310-1c.html 386310-1-ref.html
 == 386310-1d.html 386310-1-ref.html
-== 386401-1.html 386401-1-ref.html
-== 386401-2.html 386401-2-ref.html
+random-if(B2G&&browserIsRemote) == 386401-1.html 386401-1-ref.html
+random-if(B2G&&browserIsRemote) == 386401-2.html 386401-2-ref.html
 == 386401-3.html 386401-3-ref.html
 == 386470-1a.html 386470-1-ref.html
 == 386470-1b.html 386470-1-ref.html
 == 386470-1c.html 386470-1-ref.html
 == 386920-1.html 386920-1-ref.html
 == 387201-1.html 387201-1-ref.html
 == 387201-2.html about:blank  # Really an assertion test rather than a rendering test
 == 387201-3.html about:blank  # Really an assertion test rather than a rendering test
@@ -755,18 +755,18 @@ skip-if(B2G) fails == 386147-1.html 3861
 == 387227-2.html 387227-2-ref.html
 fails == 387344-1.html 387344-1-ref.html # scrolling rowgroups were removed in bug 28800
 == 387876-1.html 387876-1-ref.html
 == 387876-2.html 387876-2-ref.html
 == 387876-3a.html 387876-3-ref.html
 == 387876-3b.html 387876-3-ref.html
 == 388026-1.html 388026-1-ref.html
 == 389074-1.html 389074-1-ref.html
-== 389224-1.html 389224-1-ref.html
-== 389224-2.html about:blank
+fails-if(B2G&&browserIsRemote) == 389224-1.html 389224-1-ref.html
+fails-if(B2G&&browserIsRemote) == 389224-2.html about:blank
 skip-if(B2G) == 389468-1.html 389468-1-ref.html
 == 389623-1.html 389623-1-ref.html
 skip-if(B2G&&browserIsRemote) == 389636-1.html about:blank  # assertion test # bug 975911
 == 389924-1a.html 389924-1-ref.html
 == 389924-1b.html 389924-1-ref.html
 != 389924-1a.html about:blank
 == 390318-1a.html 390318-1-ref.html
 == 390318-1b.html 390318-1-ref.html
@@ -841,19 +841,19 @@ fails-if(winWidget) fails-if(cocoaWidget
 == 400813-1.html 400813-1-ref.html
 == 400826-1.html 400826-1-ref.html
 skip-if(B2G&&browserIsRemote) == 401946-1.xul about:blank # bug 974780
 == 402338-1.html 402338-1-ref.html
 == 402567-1.html 402567-1-ref.html
 == 402567-2.html 402567-2-ref.html
 == 402567-3.html 402567-3-ref.html
 skip-if(B2G) == 402567-4.html 402567-4-ref.html
-== 402629-1.html 402629-1-ref.html
-== 402629-2.html 402629-2-ref.html
-== 402629-3.html 402629-3-ref.html
+random-if(B2G&&browserIsRemote) == 402629-1.html 402629-1-ref.html
+random-if(B2G&&browserIsRemote) == 402629-2.html 402629-2-ref.html
+random-if(B2G&&browserIsRemote) == 402629-3.html 402629-3-ref.html
 skip-if(B2G) == 402807-1.html 402807-1-ref.html
 == 402940-1.html 402940-1-ref.html
 == 402940-1b.html 402940-1-ref.html
 != 402940-2.html 402940-2-notref.html
 != 402940-3.html 402940-3-notref.html
 == 402950-1.html 402950-1-ref.html
 == 403129-1.html 403129-1-ref.html
 == 403129-2.html 403129-2-ref.html
@@ -958,17 +958,17 @@ fails == 413027-3.html 413027-3-ref.html
 == 413286-2a.html 413286-2-ref.html
 == 413286-2b.html 413286-2-ref.html
 == 413286-2c.html 413286-2-ref.html
 == 413286-3.html 413286-3-ref.html
 == 413286-4a.html 413286-4-ref.html
 == 413286-4b.html 413286-4-ref.html
 == 413286-5.html 413286-5-ref.html
 == 413286-6.html 413286-6-ref.html
-skip-if(cocoaWidget) == 413292-1.html 413292-1-ref.html # disabling due to failure loading on some mac tinderboxes. See bug 432954
+skip-if(cocoaWidget) random-if(B2G&&browserIsRemote) == 413292-1.html 413292-1-ref.html # disabling due to failure loading on some mac tinderboxes. See bug 432954
 == 413361-1.html 413361-1-ref.html
 == 413840-background-unchanged.html 413840-background-unchanged-ref.html
 == 413840-ltr-offsets.html 413840-ltr-offsets-ref.html
 == 413840-rtl-offsets.html 413840-rtl-offsets-ref.html
 == 413840-pushed-line-bullet.html 413840-pushed-line-bullet-ref.html
 == 413840-bullet-first-line.html 413840-bullet-first-line-ref.html
 == 413982.html 413982-ref.html
 == 414123.xhtml 414123-ref.xhtml
@@ -1000,17 +1000,17 @@ skip-if(B2G&&browserIsRemote) == 421203-
 skip-if(B2G&&browserIsRemote) == 421203-5.xul 321402-5-ref.xul # bug 974780
 skip-if(B2G&&browserIsRemote) == 421203-6.xul 321402-6-ref.xul # bug 974780
 skip-if(B2G) == 421234-1.html 421234-1-ref.html
 == 421239-1.html 421239-1-ref.html
 == 421239-2.html 421239-2-ref.html
 == 421419-1.html 421419-1-ref.html
 == 421436-1a.html 421436-1-ref.html
 == 421436-1b.html 421436-1-ref.html
-== 421632-1.html 421632-1-ref.html
+fails-if(B2G&&browserIsRemote) == 421632-1.html 421632-1-ref.html
 != 421710-1.html about:blank
 skip-if(B2G) fails-if(Android) == 421885-1.xml 421885-1-ref.xml
 == 421955-1.html 421955-1-ref.html
 skip-if(B2G) == 422249-1.html 422249-1-ref.html
 == 422394-1.html 422394-1-ref.html
 == 422678-1.html 422678-1-ref.html
 == 423130-1.html 423130-1-ref.html
 == 423385-1.html 423385-1-ref.html
@@ -1027,17 +1027,17 @@ random-if(gtk2Widget) skip-if(B2G&&brows
 == 424236-5.html 424236-5-ref.html
 == 424236-6.html 424236-6-ref.html
 == 424236-7.html 424236-7-ref.html
 == 424236-8.html 424236-8-ref.html
 == 424236-9.html 424236-9-ref.html
 == 424236-10.html 424236-10-ref.html
 == 424236-11.html 424236-3-ref.html
 == 424434-1.html 424434-1-ref.html
-== 424465-1.html 424465-1-ref.html
+fails-if(B2G&&browserIsRemote) == 424465-1.html 424465-1-ref.html
 == 424631-1.html 424631-1-ref.html
 == 424710-1.html 424710-1-ref.html
 skip-if(B2G) == 424766-1.html 424766-1-ref.html
 == 425972-1.html 425972-1-ref.html
 == 425972-2.html 425972-2-ref.html
 != 425972-1.html 425972-2.html
 == 426629-1.html 426629-1-ref.html
 asserts(3) != 427017-1.xhtml about:blank # crash test (needs reftest-print). existing assertions are bug 457400.
@@ -1126,17 +1126,17 @@ skip-if(B2G) == 430412-1.html 430412-1-r
 == 431341-1.html 431341-1-ref.html
 == 431341-2.html 431341-2-ref.html
 == 431520-1.html 431520-1-ref.html
 == 431948-1.html 431948-1-ref.html
 == 433640-1.html 433640-1-ref.html
 == 433700.html 433700-ref.html
 == 436356-1.html 436356-1-ref.html
 == 436356-2.html 436356-2-ref.html
-== 438537-1.html 438537-1-ref.html
+fails-if(B2G&&browserIsRemote) == 438537-1.html 438537-1-ref.html
 == 438981-1.xhtml about:blank
 == 438987-1.html 438987-1-ref.html
 == 438987-2a.html 438987-2-ref.html
 == 438987-2b.html 438987-2-ref.html
 == 438987-2c.html 438987-2-ref.html
 != about:blank 438987-2-ref.html # check that backgrounds work at all
 == 439004-1.html 439004-1-ref.html
 == 439639-1.html 439639-1-ref.html
@@ -1169,17 +1169,17 @@ skip-if(B2G) == 447749-1.html 447749-1-r
 fuzzy(127,2) == 448193.html 448193-ref.html
 != 449149-1a.html about:blank
 != 449149-1b.html about:blank
 # Retry the above with XBL scopes
 test-pref(dom.use_xbl_scopes_for_remote_xul,true) != 449149-1a.html about:blank
 test-pref(dom.use_xbl_scopes_for_remote_xul,true) != 449149-1b.html about:blank
 == 449149-2.html 449149-2-ref.html
 == 449171-1.html 449171-ref.html
-== 449362-1.html 449362-1-ref.html
+fails-if(B2G&&browserIsRemote) == 449362-1.html 449362-1-ref.html
 == 449519-1.html 449519-1-ref.html
 == 450670-1.html 450670-1-ref.html
 == 451168-1.html 451168-1-ref.html
 == 451876-1.html 451876-1-ref.html
 == 451876-2.html 451876-2-ref.html
 == 452915-1.html 452915-1-ref.html
 == 452964-1.html 452964-1-ref.html
 == 454361.html about:blank
@@ -1247,17 +1247,17 @@ fails skip-if(B2G&&browserIsRemote) == 4
 skip-if(B2G&&browserIsRemote) == 472500-1.xul 472500-1-ref.xul # bug 974780
 == 472769-1a.html 472769-1-ref.html
 == 472769-1b.html 472769-1-ref.html
 == 472769-2.html 472769-2-ref.html
 == 472769-3.html 472769-3-ref.html
 skip-if(B2G&&browserIsRemote) == 473847-1.xul 473847-1-ref.xul # bug 974780
 skip-if(B2G&&browserIsRemote) == 474336-1.xul 474336-1-ref.xul # bug 974780
 skip-if(B2G) == 474417-1.html 474417-1-ref.html
-== 474472-1.html 474472-1-ref.html
+random-if(B2G&&browserIsRemote) == 474472-1.html 474472-1-ref.html
 == 475986-1a.html 475986-1-ref.html
 == 475986-1b.html 475986-1-ref.html
 == 475986-1c.html 475986-1-ref.html
 == 475986-1d.html 475986-1-ref.html
 == 475986-1e.html 475986-1-ref.html
 == 475986-1f.html 475986-1-ref.html
 == 475986-2a.html 475986-2-ref.html
 == 475986-2b.html 475986-2-ref.html
@@ -1311,37 +1311,37 @@ skip-if(B2G) fails-if(Android) == 481024
 == 481024-1d.html 481024-1-ref.html
 == 481024-1e.html 481024-1-ref.html
 != 481948-1.html 481948-1-ref.html
 != 481948-2.html 481948-2-ref.html
 skip-if(B2G) fails-if(Android) random-if(winWidget) fails-if(gtk2Widget) == 481948-3.html 481948-3-ref.html # questionable test, see bug 488364
 == 482398-1.html 482398-1-ref.html
 random-if(d2d) skip-if(B2G&&browserIsRemote) == 482592-1a.xhtml 482592-1-ref.html # bug 586771
 random-if(d2d) skip-if(B2G&&browserIsRemote) == 482592-1b.xhtml 482592-1-ref.html # bug 586771
-random-if(winWidget) == 482659-1a.html 482659-1-ref.html
-== 482659-1b.html 482659-1-ref.html
-== 482659-1c.html 482659-1-ref.html
-== 482659-1d.html 482659-1-ref.html
+random-if(winWidget) fails-if(B2G&&browserIsRemote) == 482659-1a.html 482659-1-ref.html
+random-if(B2G&&browserIsRemote) == 482659-1b.html 482659-1-ref.html
+random-if(B2G&&browserIsRemote) == 482659-1c.html 482659-1-ref.html
+random-if(B2G&&browserIsRemote) == 482659-1d.html 482659-1-ref.html
 skip-if(B2G&&browserIsRemote) == 483565.xul 483565-ref.xul # bug 974780
 == 484256-1.html 484256-1-ref.html
 == 484256-2.html 484256-1-ref.html
 == 485012-1.html 485012-1-ref.html
 == 485275-1.html 485275-1-ref.html
 == 485275-1.svg 485275-1-ref.html
 == 486052-1.html 486052-1-ref.html
 == 486052-2a.html 486052-2-ref.html
 == 486052-2b.html 486052-2-ref.html
 == 486052-2c.html 486052-2-ref.html
 == 486052-2d.html 486052-2-ref.html
 == 486052-2e.html 486052-2-ref.html
 == 486052-2f.html 486052-2-ref.html
 == 486052-2g.html 486052-2-ref.html
 == 486065-1.html 486065-1-ref.html
 skip-if(B2G&&browserIsRemote) == 486848-1.xul 486848-1-ref.xul # bug 974780
-== 487539-1.html about:blank
+random-if(B2G&&browserIsRemote) == 487539-1.html about:blank
 == 488390-1.html 488390-1-ref.html
 == 488649-1.html 488649-1-ref.html
 == 488685-1.html 488685-1-ref.html
 == 488692-1.html 488692-1-ref.html
 == 489868-1.svg 489868-1-ref.svg
 == 490173-1.html 490173-1-ref.html
 == 490173-2.html 490173-2-ref.html
 == 490176-1.html 490176-1-ref.html
@@ -1361,17 +1361,17 @@ skip-if(B2G&&browserIsRemote) == 495354-
 skip-if(B2G&&browserIsRemote) == 495354-1b.xhtml 495354-1-ref.xhtml # bug 974780
 == 495385-1a.html 495385-1-ref.html
 == 495385-1b.html 495385-1-ref.html
 == 495385-1c.html 495385-1-ref.html
 == 495385-1d.html 495385-1-ref.html
 == 495385-1e.html 495385-1-ref.html
 == 495385-1f.html 495385-1-ref.html
 == 495385-2a.html 495385-2-ref.html
-== 495385-2b.html 495385-2-ref.html
+fails-if(B2G&&browserIsRemote) == 495385-2b.html 495385-2-ref.html
 == 495385-2c.html 495385-2-ref.html
 == 495385-2d.html 495385-2-ref.html
 == 495385-2e.html 495385-2-ref.html
 pref(dom.use_xbl_scopes_for_remote_xul,true) skip-if(B2G&&browserIsRemote) == 495385-2f.xhtml 495385-2-ref.html
 == 495385-2g.html 495385-2-ref.html
 == 495385-2h.html 495385-2-ref.html
 == 495385-2i.html 495385-2-ref.html
 == 495385-3.html 495385-3-ref.html
@@ -1379,68 +1379,68 @@ pref(dom.use_xbl_scopes_for_remote_xul,t
 == 495385-5.html 495385-5-ref.html
 asserts(1) == 496032-1.html 496032-1-ref.html # bug 399262
 == 496840-1.html 496840-1-ref.html
 skip-if(B2G&&browserIsRemote) == 498228-1.xul 498228-1-ref.xul # bug 974780
 == 501037.html 501037-ref.html
 == 501257-1a.html 501257-1-ref.html
 == 501257-1b.html 501257-1-ref.html
 == 501257-1.xhtml 501257-1-ref.xhtml
-== 501627-1.html 501627-1-ref.html
-== 502288-1.html 502288-1-ref.html
+skip-if(B2G&&browserIsRemote) == 501627-1.html 501627-1-ref.html # Bug 989165
+fails-if(B2G&&browserIsRemote) == 502288-1.html 502288-1-ref.html
 skip-if(B2G) == 502447-1.html 502447-1-ref.html
 == 502795-1.html 502795-1-ref.html
 == 502942-1.html 502942-1-ref.html
 == 503364-1a.html 503364-1-ref.html
 == 503364-1b.html 503364-1-ref.html
 == 503399.html 503399-ref.html
 # Reftest for bug 503531 marked as failing; should be re-enabled when
 # bug 607548 gets resolved.
 needs-focus fails == 503531-1.html 503531-1-ref.html
 == 504032-1.html 504032-1-ref.html
-== 505743-1.html about:blank
+fails-if(B2G&&browserIsRemote) == 505743-1.html about:blank
 skip-if(B2G) == 506481-1.html 506481-1-ref.html
 == 507187-1.html 507187-1-ref.html
 == 507487-1.html 507487-1-ref.html
 == 507487-2.xhtml 507487-2-ref.xhtml
 == 507762-1.html 507762-1-ref.html
 == 507762-2.html 507762-2-ref.html
 == 507762-3.html 507762-1-ref.html
 == 507762-4.html 507762-2-ref.html
 skip-if(B2G) random-if(cocoaWidget) == 508816-1.xul 508816-1-ref.xul # Bug 631982
 skip-if(B2G) == 508816-2.html 508816-2-ref.html
 skip-if(B2G&&browserIsRemote) == 508908-1.xul 508908-1-ref.xul # bug 974780
-== 508919-1.xhtml 508919-1-ref.xhtml
-== 509155-1.xhtml 509155-1-ref.xhtml
+fails-if(B2G&&browserIsRemote) == 508919-1.xhtml 508919-1-ref.xhtml
+fails-if(B2G&&browserIsRemote) == 509155-1.xhtml 509155-1-ref.xhtml
 skip-if(B2G) == 512410.html 512410-ref.html
 == 512631-1.html 512631-1-ref.html
-== 513153-1a.html 513153-1-ref.html
-== 513153-1b.html 513153-1-ref.html
-== 513153-2a.html 513153-2-ref.html
-== 513153-2b.html 513153-2-ref.html
+fails-if(B2G&&browserIsRemote) == 513153-1a.html 513153-1-ref.html
+fails-if(B2G&&browserIsRemote) == 513153-1b.html 513153-1-ref.html
+fails-if(B2G&&browserIsRemote) == 513153-2a.html 513153-2-ref.html
+fails-if(B2G&&browserIsRemote) == 513153-2b.html 513153-2-ref.html
 skip-if(B2G&&browserIsRemote) == 513318-1.xul 513318-1-ref.xul # bug 974780
 skip-if(B2G) fails-if(Android) != 513318-2.xul 513318-2-ref.xul
 == 514917-1.html 514917-1-ref.html
 HTTP(..) == 518172-1a.html 518172-a-ref.html
 HTTP(..) == 518172-1b.html 518172-b-ref.html
 HTTP(..) == 518172-2a.html 518172-a-ref.html
 HTTP(..) == 518172-2b.html 518172-b-ref.html
-== 520421-1.html 520421-1-ref.html
+fails-if(B2G&&browserIsRemote) == 520421-1.html 520421-1-ref.html
 == 520563-1.xhtml 520563-1-ref.xhtml
 == 521525-1.html 521525-1-ref.html
 == 521525-2.html 521525-2-ref.html
 == 521539-1.html 521539-1-ref.html
 == 521542-1.xhtml 521542-1-ref.xhtml
 == 521602.html 521602-ref.html
 == 521685-1.html 521685-1-ref.html
 == 522632-1.html 522632-1-ref.html
 == 523096-1.html 523096-1-ref.html
 random-if(d2d) == 523468-1.html 523468-1-ref.html
 == 524175-1.html 524175-1-ref.html
-== 526463-1.html 526463-1-ref.html
+fails-if(B2G&&browserIsRemote) == 526463-1.html 526463-1-ref.html
 == 527464-1.html 527464-ref.html
 == 528038-1a.html 528038-1-ref.html
 == 528038-1b.html 528038-1-ref.html
 == 528038-1c.html 528038-1-ref.html
 == 528038-1d.html 528038-1-ref.html
 == 528038-1e.html 528038-1-ref.html
 == 528038-1f.html 528038-1-ref.html
 == 528038-2.html 528038-2-ref.html
@@ -1456,32 +1456,32 @@ skip-if(B2G) == 530686-1.html 530686-1-r
 == 534808-2.html 534808-2-ref.html
 fails-if(OSX==10.7) == 534919-1.html 534919-1-ref.html # Bug 705044
 random == 536061.html 536061-ref.html # fixedpoint division in blur code makes this fail
 == 537471-1.html 537471-1-ref.html
 skip-if(B2G&&browserIsRemote) == 537507-1.xul 537507-1-ref.xul # bug 974780
 skip-if(B2G&&browserIsRemote) == 537507-2.html 537507-2-ref.html # bug 974780
 == 538909-1.html 538909-1-ref.html
 == 538935-1.html 538935-1-ref.html
-== 539226-1.html about:blank
+fails-if(B2G&&browserIsRemote) == 539226-1.html about:blank
 == 539323-1.html 539323-1-ref.html
 == 539323-2.html 539323-2-ref.html
 == 539323-3.html 539323-3-ref.html
 == 539880-1.html 539880-1-ref.html
 == 539880-1-dynamic.html 539880-1-ref.html
 skip-if(B2G) fuzzy-if(Android&&AndroidVersion>=15,12,1000) == 539949-1.html#test2 539949-1-ref.html#test2
 == 541382-1.html 541382-1-ref.html
 random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)||!haveTestPlugin) == 541406-1.html 541406-1-ref.html
 needs-focus != 542116-1.html 542116-1-ref.html
 needs-focus != 542116-2.html 542116-2-ref.html
 needs-focus != 542116-3.html 542116-3-ref.html
 == 542317-1.html 542317-1-ref.html
 fuzzy-if(Android,17,2) skip-if(B2G&&browserIsRemote) == 542605-hidden-unscrollable.xul 542605-hidden-unscrollable-ref.xul # bug 974780
 == 542620-1.html 542620-1-ref.html
-== 545049-1.html 545049-1-ref.html
+fails-if(B2G&&browserIsRemote) == 545049-1.html 545049-1-ref.html
 == 546033-1.html 546033-1-ref.html
 random-if(!haveTestPlugin) == 546071-1.html 546071-1-ref.html
 == 549184-1.html 549184-1-ref.html
 == 550325-1.html 550325-1-ref.html
 == 550325-2.html 550325-1-ref.html
 == 550325-3.html 550325-1-ref.html
 == 550716-1.html 550716-1-ref.html
 skip-if(B2G) fuzzy-if(Android&&AndroidVersion>=15,12,300) == 551463-1.html 551463-1-ref.html
@@ -1556,45 +1556,45 @@ skip-if(B2G) == 569006-1.html 569006-1-r
 == 574898-1.html 574898-ref.html
 # 574907 is a windows-only issue, result on other platforms depends on details of font support
 random-if(!winWidget) == 574907-1.html 574907-1-ref.html
 random-if(!winWidget) == 574907-2.html 574907-2-ref.html
 # 574907-3 only worked under directwrite, and even there it now depends on the rendering mode; marking as random for now
 random-if(!winWidget) fails-if(winWidget&&!d2d) random-if(winWidget&&d2d) != 574907-3.html 574907-3-notref.html
 == 577838-1.html 577838-1-ref.html
 == 577838-2.html 577838-2-ref.html
-== 579323-1.html 579323-1-ref.html
+fails-if(B2G&&browserIsRemote) == 579323-1.html 579323-1-ref.html
 == 579349-1.html 579349-1-ref.html
 == 579655-1.html 579655-1-ref.html
 skip-if(B2G) fails-if(Android) == 579808-1.html 579808-1-ref.html
 skip-if(B2G) fails-if(Android) random-if(layersGPUAccelerated) == 579985-1.html 579985-1-ref.html # bug 623452 for WinXP; this bug was only for a regression in BasicLayers anyway
 skip-if(B2G) skip-if(Android) == 580160-1.html 580160-1-ref.html # bug 920927 for Android; issues without the test-plugin
 HTTP(..) == 580863-1.html 580863-1-ref.html
 skip-if(B2G) fails-if(Android) random-if(layersGPUAccelerated) == 581317-1.html 581317-1-ref.html
 == 581579-1.html 581579-1-ref.html
-== 582037-1a.html 582037-1-ref.html
+random-if(B2G&&browserIsRemote) == 582037-1a.html 582037-1-ref.html
 == 582037-1b.html 582037-1-ref.html
 skip-if(B2G) == 582037-2a.html 582037-2-ref.html
 skip-if(B2G) == 582037-2b.html 582037-2-ref.html
 asserts(1-2) == 582146-1.html about:blank
 skip-if(B2G) == 582476-1.svg 582476-1-ref.svg
 == 584400-dash-length.svg 584400-dash-length-ref.svg
-== 584699-1.html 584699-1-ref.html
+fails-if(B2G&&browserIsRemote) == 584699-1.html 584699-1-ref.html
 == 585598-2.xhtml 585598-2-ref.xhtml
 == 586400-1.html 586400-1-ref.html
 skip-if(B2G) fuzzy-if(d2d,52,1051) fuzzy-if(OSX==10.8,129,1068) == 586683-1.html 586683-1-ref.html
 == 589615-1a.xhtml 589615-1-ref.html
 == 589615-1b.html 589615-1-ref.html
 == 589672-1.html 589672-1-ref.html
 != 589682-1.html 589682-1-notref.html
-skip-if(!browserIsRemote) == 593243-1.html 593243-1-ref.html # bug 593168
-skip-if(!browserIsRemote) == 593243-2.html 593243-2-ref.html # bug 593168
+skip-if(!browserIsRemote) fails-if(B2G&&browserIsRemote) == 593243-1.html 593243-1-ref.html # bug 593168
+skip-if(!browserIsRemote) fails-if(B2G&&browserIsRemote) == 593243-2.html 593243-2-ref.html # bug 593168
 == 593544-1.html 593544-1-ref.html
-random-if(Android) == 594333-1.html 594333-1-ref.html
-== 594624-1.html 594624-1-ref.html
+random-if(Android) fails-if(B2G&&browserIsRemote) == 594333-1.html 594333-1-ref.html
+fails-if(B2G&&browserIsRemote) == 594624-1.html 594624-1-ref.html
 == 594737-1.html 594737-1-ref.html
 == 597721-1.html 597721-1-ref.html
 random-if(winWidget) fuzzy-if(Android,38,539) needs-focus == 598726-1.html 598726-1-ref.html # Fails on Windows, bug 782196
 == 599113-1.html 599113-1-ref.html
 fails-if(!haveTestPlugin) == 599476.html 599476-ref.html
 == 599882-1a.html 599882-1-ref.html
 == 599882-1b.html 599882-1-ref.html
 == 599882-2.html 599882-2-ref.html
@@ -1604,17 +1604,17 @@ skip-if(B2G) == 600803-1.html 600803-1-r
 == 600974-2.html 600974-1-ref.html
 == 600974-3.html 600974-1-ref.html
 == 602200-1.html 602200-1-ref.html
 == 602200-2.html 602200-2-ref.html
 fuzzy-if(Android&&AndroidVersion>=15,8,20) == 602200-3.html 602200-3-ref.html
 == 602200-4.html 602200-4-ref.html
 == 603423-1.html 603423-1-ref.html
 == 604737.html 604737-ref.html
-== 605138-1.html 605138-1-ref.html
+random-if(B2G&&browserIsRemote) == 605138-1.html 605138-1-ref.html # Bug 988758
 == 605157-1.xhtml 605157-1-ref.xhtml
 == 607267-1.html 607267-1-ref.html
 == 608636-1.html 608636-1-ref.html
 == 608756-1a.html 608756-1-ref.html
 == 608756-1b.html 608756-1-ref.html
 == 608756-2.html 608756-2-ref.html
 == 609272-1.html 609272-1-ref.html
 needs-focus == 613433-1.html 613433-1-ref.html
@@ -1626,28 +1626,28 @@ needs-focus == 613433-2.html 613433-3-re
 needs-focus == 613433-3.html 613433-1-ref.html
 needs-focus == 613433-3.html 613433-2-ref.html
 needs-focus == 613433-3.html 613433-3-ref.html
 == 614272-1.svg  614272-1-ref.svg
 HTTP(..) == 615121-1.html 615121-1-ref.html
 HTTP(..) != 615121-2.html 615121-2-notref.html
 fails-if(Android&&AndroidVersion!=10&&AndroidVersion!=17) == 617242-1.html 617242-1-ref.html
 != 618071.html 618071-notref.html
-== 619117-1.html 619117-1-ref.html
+fails-if(B2G&&browserIsRemote) == 619117-1.html 619117-1-ref.html
 HTTP(..) == 619511-1.html 619511-1-ref.html
 skip-if(Android||(B2G&&browserIsRemote)) HTTP(..) == 621253-1-externalFilter.html 621253-1-ref.html
 skip-if(Android||(B2G&&browserIsRemote)) == 621253-1-internalFilter.html 621253-1-ref.html
-HTTP(..) == 621253-2-externalFilter.html 621253-2-ref.html
+random-if(B2G&&browserIsRemote) HTTP(..) == 621253-2-externalFilter.html 621253-2-ref.html
 == 621253-2-internalFilter.html 621253-2-ref.html
 skip-if(B2G) random-if(winWidget) fuzzy-if(OSX==10.8,19,17) == 621918-1.svg 621918-1-ref.svg # 1-pixel diacritic positioning discrepancy in rotated text (may depend on platform fonts)
 random-if(winWidget) HTTP(..) == 621918-2.svg 621918-2-ref.svg # same 1px issue as above, and HTTP(..) for filters.svg, used to mask antialiasing issues where glyphs touch
 fuzzy-if(d2d,5,1) == 622585-1.html 622585-1-ref.html # bug 789402
 fuzzy-if(Android&&AndroidVersion>=15,8,300) == 625409-1.html 625409-1-ref.html
-== 627393-1.html about:blank
-== 630835-1.html about:blank
+fails-if(B2G&&browserIsRemote) == 627393-1.html about:blank
+fails-if(B2G&&browserIsRemote) == 630835-1.html about:blank
 == 631352-1.html 631352-1-ref.html
 skip-if(B2G) fails-if(Android) == 632423-1.html 632423-1-ref.html
 skip-if(Android||B2G) random-if(winWidget) == 632781-verybig.html 632781-ref.html
 == 632781-normalsize.html 632781-ref.html
 == 633344-1.html 633344-1-ref.html
 == 634232-1.html 634232-1-ref.html
 fails-if(Android&&AndroidVersion<17&&AndroidVersion!=10) == 635302-1.html 635302-1-ref.html
 skip-if(B2G) random-if(d2d) fails-if(Android) fuzzy-if(winWidget&&!d2d,1,11) == 635373-1.html 635373-1-ref.html
@@ -1658,17 +1658,17 @@ HTTP(..) == 635639-2.html 635639-2-ref.h
 random == 637597-1.html 637597-1-ref.html # bug 637597 was never really fixed!
 skip-if(B2G) fuzzy-if(Android&&AndroidVersion>=15,8,500) == 637852-1.html 637852-1-ref.html # bug 839735
 fuzzy-if(Android&&AndroidVersion>=15,8,500) == 637852-2.html 637852-2-ref.html
 fuzzy-if(Android&&AndroidVersion>=15,8,500) == 637852-3.html 637852-3-ref.html
 skip-if(B2G) == 641770-1.html 641770-1-ref.html
 == 641856-1.html 641856-1-ref.html
 == 645491-1.html 645491-1-ref.html
 == 645768-1.html 645768-1-ref.html
-fails-if(layersGPUAccelerated&&cocoaWidget) fails-if(Android&&AndroidVersion<15&&AndroidVersion!=10) == 650228-1.html 650228-1-ref.html # Quartz alpha blending doesn't match GL alpha blending
+fails-if(layersGPUAccelerated&&cocoaWidget) fails-if(Android&&AndroidVersion<15&&AndroidVersion!=10) fails-if(B2G&&browserIsRemote) == 650228-1.html 650228-1-ref.html # Quartz alpha blending doesn't match GL alpha blending
 needs-focus == 652301-1a.html 652301-1-ref.html
 needs-focus == 652301-1b.html 652301-1-ref.html
 == 652775-1.html 652775-1-ref.html
 == 653930-1.html 653930-1-ref.html
 HTTP(..) == 654057-1.html 654057-1-ref.html
 fails-if(layersGPUAccelerated&&cocoaWidget) fails-if(Android&&AndroidVersion!=17&&AndroidVersion!=10) == 654950-1.html 654950-1-ref.html # Quartz alpha blending doesn't match GL alpha blending
 == 655549-1.html 655549-1-ref.html
 == 655836-1.html 655836-1-ref.html
@@ -1696,73 +1696,73 @@ needs-focus != 703186-1.html 703186-2.ht
 == 712849-1.html 712849-1-ref.html
 == 713856-static.html  713856-ref.html
 == 713856-dynamic.html 713856-ref.html
 == 714519-1-as.html 714519-1-ref.html
 == 714519-1-q.html 714519-1-ref.html
 == 714519-2-as.html 714519-2-ref.html
 == 714519-2-q.html 714519-2-ref.html
 skip-if(B2G) fuzzy-if(true,1,21) fuzzy-if(cocoaWidget,1,170) fuzzy-if(Android&&browserIsRemote,7,157) fails-if(Android&&!browserIsRemote&&AndroidVersion!=17&&AndroidVersion!=10) == 718521.html 718521-ref.html # bug 760270 # bug 773482
-== 720987.html 720987-ref.html
-== 722888-1.html 722888-1-ref.html
-== 722923-1.html 722923-1-ref.html
-== 723484-1.html 723484-1-ref.html
-random-if(Android) == 728983-1.html 728983-1-ref.html
+random-if(B2G&&browserIsRemote) == 720987.html 720987-ref.html
+random-if(B2G&&browserIsRemote) == 722888-1.html 722888-1-ref.html
+random-if(B2G&&browserIsRemote) == 722923-1.html 722923-1-ref.html
+random-if(B2G&&browserIsRemote) == 723484-1.html 723484-1-ref.html
+random-if(Android||(B2G&&browserIsRemote)) == 728983-1.html 728983-1-ref.html
 skip-if(B2G) == 729143-1.html 729143-1-ref.html
 == 731521-1.html 731521-1-ref.html
 needs-focus == 731726-1.html 731726-1-ref.html
 == 735481-1.html 735481-1-ref.html
 == 745934-1.html 745934-1-ref.html
 == 748692-1a.html 748692-1-ref.html
 == 748692-1b.html 748692-1-ref.html
 skip-if(B2G) == 748803-1.html 748803-1-ref.html
 == 750551-1.html 750551-1-ref.html
 skip-if(B2G) == 751012-1a.html 751012-1-ref.html
 skip-if(B2G) == 751012-1b.html 751012-1-ref.html
-random-if(Android) == 753329-1.html about:blank
+random-if(Android) random-if(B2G&&browserIsRemote) == 753329-1.html about:blank
 == 758561-1.html 758561-1-ref.html
 fuzzy-if(true,1,19) fails-if(d2d) random-if(Android&&AndroidVersion<15) == 759036-1.html 759036-1-ref.html
 fuzzy-if(true,17,5879) random-if(Android&&AndroidVersion<15) == 759036-2.html 759036-2-ref.html
 random-if(Android&&AndroidVersion<15) == 776265-1a.html 776265-1-ref.html
 == 776265-1b.html 776265-1-ref.html
 == 776265-1c.html 776265-1-ref.html
 == 776265-1d.html 776265-1-ref.html
 == 776265-2a.html 776265-2-ref.html
 == 776265-2b.html 776265-2-ref.html
 == 776265-2c.html 776265-2-ref.html
 == 776265-2d.html 776265-2-ref.html
 == 776443-1.html 776443-1-ref.html
 == 776443-2.html 776443-2-ref.html
 == 786254-1.html 786254-1-ref.html
 == 787947-1.html 787947-1-ref.html
-== 796847-1.svg 796847-1-ref.svg
+fails-if(B2G&&browserIsRemote) == 796847-1.svg 796847-1-ref.svg
 fuzzy(40,850) fuzzy-if(azureQuartz,73,542) == 797797-1.html 797797-1-ref.html # 'opacity:N' and rgba(,,,N) text don't match precisely
 fuzzy(40,850) fuzzy-if(azureQuartz,68,586) == 797797-2.html 797797-2-ref.html # 'opacity:N' and rgba(,,,N) text don't match precisely
 == 801681-1.html 801681-1-ref.html
 == 801681-2.html 801681-2-ref.html
 == 801994-1.html 801994-1-ref.html
 == 804323-1.html 804323-1-ref.html
 fuzzy-if(Android,8,608) skip-if(B2G&&browserIsRemote) == 811301-1.html 811301-1-ref.html
 == 812824-1.html 812824-1-ref.html
 == 814677.html 814677-ref.html
 skip-if(B2G) == 814952-1.html 814952-1-ref.html
 skip-if(B2G) fuzzy-if(Android,4,400) == 815593-1.html 815593-1-ref.html
 == 816359-1.html 816359-1-ref.html
-== 816458-1.html 816458-1-ref.html
+fails-if(B2G&&browserIsRemote) == 816458-1.html 816458-1-ref.html
 == 816948-1.html 816948-1-ref.html
 == 817019-1.html about:blank
 skip-if(B2G) == 818276-1.html 818276-1-ref.html
 == 825999.html 825999-ref.html
 == 827577-1a.html 827577-1-ref.html
-== 827577-1b.html 827577-1-ref.html
+fails-if(B2G&&browserIsRemote) == 827577-1b.html 827577-1-ref.html
 == 827799-1.html about:blank
 == 829958.html 829958-ref.html
 == 836844-1.html 836844-1-ref.html
 == 841192-1.html 841192-1-ref.html
-== 844178.html 844178-ref.html
+fails-if(B2G&&browserIsRemote) == 844178.html 844178-ref.html
 == 846144-1.html 846144-1-ref.html
 == 847850-1.html 847850-1-ref.html
 == 848421-1.html 848421-1-ref.html
 random-if(B2G) == 849407-1.html 849407-1-ref.html
 == 849996-1.html 849996-1-ref.html
 skip-if(B2G&&browserIsRemote) == 858803-1.html 858803-1-ref.html # bug 974780
 == 860242-1.html 860242-1-ref.html
 != 860370.html 860370-notref.html
@@ -1770,44 +1770,44 @@ skip-if(B2G&&browserIsRemote) == 858803-
 == 875060-1.html 875060-1-ref.html
 == 883987-1a.html 883987-1-ref.html
 == 883987-1b.html 883987-1-ref.html
 == 883987-1c.html 883987-1-ref.html
 == 883987-1d.html 883987-1-ref.html
 == 883987-1e.html 883987-1-ref.html
 == 883987-1f.html 883987-1-ref.html
 == 890495-1.html 890495-1-ref.html
-== 894931-1.html 894931-1-ref.html
+fails-if(B2G&&browserIsRemote) == 894931-1.html 894931-1-ref.html
 == 897491-1.html 897491-1-ref.html
 == 897491-2.html 897491-2-ref.html
 fuzzy(1,10000) fuzzy-if(Android&&AndroidVersion>=15,5,10000) == 902330-1.html 902330-1-ref.html
 fuzzy-if(Android,8,400) == 906199-1.html 906199-1-ref.html
 == 921716-1.html 921716-1-ref.html
-test-pref(layout.css.sticky.enabled,true) == 926155-1.html 926155-1-ref.html
-fuzzy-if(cocoaWidget,1,40) == 928607-1.html 928607-1-ref.html
-== 931464-1.html 931464-1-ref.html
+test-pref(layout.css.sticky.enabled,true) fails-if(B2G&&browserIsRemote) == 926155-1.html 926155-1-ref.html
+fuzzy-if(cocoaWidget,1,40) fails-if(B2G&&browserIsRemote) == 928607-1.html 928607-1-ref.html
+fails-if(B2G&&browserIsRemote) == 931464-1.html 931464-1-ref.html
 == 931853.html 931853-ref.html
 == 931853-quirks.html 931853-quirks-ref.html
 fuzzy-if(OSX==10.6,2,30) skip-if(B2G&&browserIsRemote) == 933264-1.html 933264-1-ref.html
 == 936670-1.svg 936670-1-ref.svg
 == 941940-1.html 941940-1-ref.html
 fails == 942017.html 942017-ref.html # bug 942017
 == 942672-1.html 942672-1-ref.html
 == 953334-win32-clipping.html 953334-win32-clipping-ref.html
 == 956513-1.svg 956513-1-ref.svg
-== 944291-1.html 944291-1-ref.html
+fails-if(B2G&&browserIsRemote) == 944291-1.html 944291-1-ref.html
 == 950436-1.html 950436-1-ref.html
 == 957770-1.svg 957770-1-ref.svg
 == 960277-1.html 960277-1-ref.html
 pref(layout.css.overflow-clip-box.enabled,true) fuzzy(50,31) == 966992-1.html 966992-1-ref.html
 skip-if(Android) == 966510-1.html 966510-1-ref.html # scrollable elements other than the root probably won't work well on android until bug 776030 is fixed
 skip-if(Android) == 966510-2.html 966510-2-ref.html # same as above
-== 978911-1.svg 978911-1-ref.svg
+fails-if(B2G&&browserIsRemote) == 978911-1.svg 978911-1-ref.svg
 == 983084-1.html 983084-1-ref.html
-== 983084-2.html 983084-2-ref.html
-== 983084-3.html 983084-1-ref.html
+fails-if(B2G&&browserIsRemote) == 983084-2.html 983084-2-ref.html
+fails-if(B2G&&browserIsRemote) == 983084-3.html 983084-1-ref.html
 == 983691-1.html 983691-ref.html
 == 985303-1a.html 985303-1-ref.html
 == 985303-1b.html 985303-1-ref.html
 == 987680-1.html 987680-1-ref.html
 fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,24) == 991046-1.html 991046-1-ref.html
 pref(layout.css.overflow-clip-box.enabled,true) == 992447.html 992447-ref.html
 pref(layout.css.sticky.enabled,true) == 1005405-1.html 1005405-1-ref.html
--- a/layout/reftests/canvas/reftest.list
+++ b/layout/reftests/canvas/reftest.list
@@ -1,12 +1,12 @@
 == default-size.html default-size-ref.html
 skip-if(B2G) fuzzy-if(Android&&AndroidVersion>=15,8,1000) == size-1.html size-1-ref.html
 
-== empty-transaction-1.html empty-transaction-1-ref.html
+fails-if(B2G&&browserIsRemote) == empty-transaction-1.html empty-transaction-1-ref.html
 
 == image-rendering-test.html image-rendering-ref.html
 == image-shadow.html image-shadow-ref.html
 
 skip-if(B2G) asserts-if(cocoaWidget,0-2) == size-change-1.html size-change-1-ref.html
 
 random-if(cocoaWidget) == subpixel-1.html about:blank
 
--- a/layout/reftests/columns/reftest.list
+++ b/layout/reftests/columns/reftest.list
@@ -14,18 +14,18 @@
 == column-balancing-000.html column-balancing-000.ref.html
 == column-balancing-001.html column-balancing-000.ref.html
 == column-balancing-002.html column-balancing-002.ref.html
 == column-balancing-003.html column-balancing-000.ref.html
 == column-balancing-004.html column-balancing-004.ref.html
 == column-box-alignment-rtl.html column-box-alignment-rtl-ref.html
 HTTP(..) == columnfill-balance.html columnfill-balance-ref.html
 HTTP(..) == columnfill-auto.html columnfill-auto-ref.html
-HTTP(..) == columnfill-auto-2.html columnfill-auto-2-ref.html
-HTTP(..) == columnfill-auto-3.html columnfill-auto-2-ref.html
+random-if(B2G&&browserIsRemote) HTTP(..) == columnfill-auto-2.html columnfill-auto-2-ref.html
+random-if(B2G&&browserIsRemote) HTTP(..) == columnfill-auto-3.html columnfill-auto-2-ref.html
 skip-if(B2G) == columnrule-basic.html columnrule-basic-ref.html # bug 773482
 skip-if(B2G) == columnrule-complex.html columnrule-complex-ref.html # bug 773482
 != columnrule-linestyles.html columnrule-linestyles-notref.html
 == columnrule-padding.html columnrule-padding-ref.html
 skip-if(B2G) == columnfill-overflow.html columnfill-overflow-ref.html # bug 773482
 == margin-collapsing-bug616722-1.html margin-collapsing-bug616722-1-ref.html
 == margin-collapsing-bug616722-2.html margin-collapsing-bug616722-2-ref.html
 == column-balancing-nested-000.html column-balancing-nested-000-ref.html
--- a/layout/reftests/counters/reftest.list
+++ b/layout/reftests/counters/reftest.list
@@ -33,26 +33,26 @@
 == t1202-counters-14-b-test.html t1202-counters-14-b-reference.html
 == t1202-counters-15-b-test.html t1202-counters-15-b-reference.html
 == t1202-counters-16-c-test.html t1202-counters-16-c-reference.html
 == t1202-counters-17-d-test.html t1202-counters-17-d-reference.html
 == t1202-counters-18-f-test.html t1202-counters-18-f-reference.html
 == t1204-implied-00-b-test.html t1204-implied-00-b-reference.html
 == t1204-implied-01-c-test.html t1204-implied-01-c-reference.html
 == t1204-implied-02-d-test.html t1204-implied-02-d-reference.html
-== t1204-increment-00-c-o-test.html t1204-increment-00-c-o-reference.html
-== t1204-increment-01-c-o-test.html t1204-increment-01-c-o-reference.html
-== t1204-increment-02-c-o-test.html t1204-increment-02-c-o-reference.html
+fails-if(B2G&&browserIsRemote) == t1204-increment-00-c-o-test.html t1204-increment-00-c-o-reference.html
+fails-if(B2G&&browserIsRemote) == t1204-increment-01-c-o-test.html t1204-increment-01-c-o-reference.html
+fails-if(B2G&&browserIsRemote) == t1204-increment-02-c-o-test.html t1204-increment-02-c-o-reference.html
 == t1204-multiple-00-c-test.html t1204-multiple-00-c-reference.html
 == t1204-multiple-01-c-test.html t1204-multiple-01-c-reference.html
 == t1204-order-00-c-test.html t1204-order-00-c-reference.html
 == t1204-order-01-d-test.html t1204-order-01-d-reference.html
-== t1204-reset-00-c-o-test.html t1204-reset-00-c-o-reference.html
-== t1204-reset-01-c-o-test.html t1204-reset-01-c-o-reference.html
-== t1204-reset-02-c-o-test.html t1204-reset-02-c-o-reference.html
+fails-if(B2G&&browserIsRemote) == t1204-reset-00-c-o-test.html t1204-reset-00-c-o-reference.html
+fails-if(B2G&&browserIsRemote) == t1204-reset-01-c-o-test.html t1204-reset-01-c-o-reference.html
+fails-if(B2G&&browserIsRemote) == t1204-reset-02-c-o-test.html t1204-reset-02-c-o-reference.html
 == t1204-root-e-test.html t1204-root-e-reference.html
 == t120401-scope-00-b-test.html t120401-scope-00-b-reference.html
 == t120401-scope-01-c-test.html t120401-scope-01-c-reference.html
 == t120401-scope-02-c-test.html t120401-scope-02-c-reference.html
 == t120401-scope-03-c-test.html t120401-scope-03-c-reference.html
 == t120401-scope-04-d-test.html t120401-scope-04-d-reference.html
 == t120403-content-none-00-c-test.html t120403-content-none-00-c-reference.html
 == t120403-display-none-00-c-test.html t120403-display-none-00-c-reference.html
--- a/layout/reftests/css-invalid/input/reftest.list
+++ b/layout/reftests/css-invalid/input/reftest.list
@@ -1,10 +1,10 @@
 == input-valid.html input-ref.html
-fuzzy(11,4) == input-customerror.html input-ref.html
+fuzzy(11,4) fails-if(B2G&&browserIsRemote) == input-customerror.html input-ref.html
 skip-if(B2G) fails-if(Android) == input-disabled.html input-ref.html
 skip-if(B2G) fails-if(Android) == input-dyn-disabled.html input-ref.html
 == input-dyn-not-disabled.html input-ref.html
 == input-readonly.html input-ref.html
 == input-dyn-readonly.html input-ref.html
 == input-dyn-not-readonly.html input-ref.html
 == input-maxlength-valid.html input-ref.html
 == input-maxlength-invalid.html input-withtext-ref.html
@@ -14,17 +14,17 @@ skip-if(B2G) fails-if(Android) == input-
 == input-reset.html input-button-ref.html
 == input-email-invalid.html input-withtext-ref.html
 == input-email-valid.html input-email-ref.html
 == input-url-invalid.html input-withtext-ref.html
 == input-url-valid.html input-url-ref.html
 == input-pattern-valid.html input-withtext-ref.html
 == input-pattern-invalid.html input-withtext-ref.html
 == input-type-barred.html input-button-ref.html
-fuzzy(11,4) == input-type-invalid.html input-ref.html
+fuzzy(11,4) fails-if(B2G&&browserIsRemote) == input-type-invalid.html input-ref.html
 == input-disabled-fieldset-1.html input-fieldset-ref.html
 == input-disabled-fieldset-2.html input-fieldset-ref.html
 == input-fieldset-legend.html input-fieldset-legend-ref.html
 == input-radio-required.html input-radio-ref.html
 == input-radio-customerror.html input-radio-ref.html
 == input-radio-dyn-valid-1.html input-radio-checked-ref.html
 == input-radio-dyn-valid-2.html input-radio-ref.html
 == input-radio-nogroup-required-valid.html input-radio-ref.html
--- a/layout/reftests/css-invalid/textarea/reftest.list
+++ b/layout/reftests/css-invalid/textarea/reftest.list
@@ -1,15 +1,15 @@
 == textarea-valid.html textarea-ref.html
-== textarea-customerror.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-customerror.html textarea-ref.html
 fails-if(Android||B2G) == textarea-disabled.html textarea-ref.html
 fails-if(Android||B2G) == textarea-dyn-disabled.html textarea-ref.html
-== textarea-dyn-not-disabled.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-dyn-not-disabled.html textarea-ref.html
 == textarea-readonly.html textarea-ref.html
-== textarea-dyn-readonly.html textarea-ref.html
-== textarea-dyn-not-readonly.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-dyn-readonly.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-dyn-not-readonly.html textarea-ref.html
 == textarea-maxlength-valid.html textarea-ref.html
 == textarea-maxlength-invalid.html textarea-withtext-ref.html
 == textarea-required-valid.html textarea-withtext-ref.html
 == textarea-required-invalid.html textarea-ref.html
 == textarea-disabled-fieldset-1.html textarea-fieldset-ref.html
 == textarea-disabled-fieldset-2.html textarea-fieldset-ref.html
 == textarea-fieldset-legend.html textarea-fieldset-legend-ref.html
--- a/layout/reftests/css-mediaqueries/reftest.list
+++ b/layout/reftests/css-mediaqueries/reftest.list
@@ -10,10 +10,10 @@ skip-if(B2G) == mq_print_orientation.xht
 skip-if(B2G) == mq_print_maxheight.xhtml mq_print-ref.xhtml # bug 773482
 skip-if(B2G) == mq_print_maxwidth.xhtml mq_print-ref.xhtml # bug 773482
 
 skip-if(B2G) == mq_print_maxwidth_updown.xhtml mq_print-ref.xhtml # bug 773482
 skip-if(B2G) == mq_print_maxheight_updown.xhtml mq_print-ref.xhtml # bug 773482
 skip-if(B2G) == mq_print_minheight_updown.xhtml mq_print-ref.xhtml # bug 773482
 skip-if(B2G) == mq_print_minwidth_updown.xhtml mq_print-ref.xhtml # bug 773482
 
-== scoped-mq-update.html scoped-mq-update-ref.html
+fails-if(B2G&&browserIsRemote) == scoped-mq-update.html scoped-mq-update-ref.html
 == system-metrics-1.html system-metrics-1-ref.html
--- a/layout/reftests/css-ui-invalid/input/reftest.list
+++ b/layout/reftests/css-ui-invalid/input/reftest.list
@@ -1,10 +1,10 @@
 == input-valid.html input-ref.html
-fuzzy(64,4) == input-customerror.html input-ref.html
+fuzzy(64,4) fails-if(B2G&&browserIsRemote) == input-customerror.html input-ref.html
 skip-if(B2G) fails-if(Android) == input-disabled.html input-ref.html
 skip-if(B2G) fails-if(Android) == input-dyn-disabled.html input-ref.html
 == input-dyn-not-disabled.html input-ref.html
 == input-readonly.html input-ref.html
 == input-dyn-readonly.html input-ref.html
 == input-dyn-not-readonly-not-changed.html input-ref.html
 == input-dyn-not-readonly-changed.html input-ref.html
 == input-maxlength-valid.html input-ref.html
@@ -20,17 +20,17 @@ skip-if(B2G) fails-if(Android) == input-
 == input-email-valid.html input-email-ref.html
 == input-url-invalid-changed.html input-withtext-ref.html
 == input-url-invalid-default.html input-withtext-ref.html
 == input-url-valid.html input-url-ref.html
 == input-pattern-valid.html input-withtext-ref.html
 == input-pattern-invalid-default.html input-withtext-ref.html
 == input-pattern-invalid-changed.html input-withtext-ref.html
 == input-type-barred.html input-button-ref.html
-fuzzy(64,4) == input-type-invalid.html input-ref.html
+fuzzy(64,4) fails-if(B2G&&browserIsRemote) == input-type-invalid.html input-ref.html
 == input-disabled-fieldset-1.html input-fieldset-ref.html
 == input-disabled-fieldset-2.html input-fieldset-ref.html
 == input-fieldset-legend.html input-fieldset-legend-ref.html
 == input-checkbox-required-invalid-changed.html success-ref.html
 == input-checkbox-required-invalid-default.html success-ref.html
 == input-radio-required-invalid-changed.html success-ref.html
 == input-radio-required-invalid-default.html success-ref.html
 == input-file-required-invalid-changed.html input-file-ref.html
--- a/layout/reftests/css-ui-invalid/textarea/reftest.list
+++ b/layout/reftests/css-ui-invalid/textarea/reftest.list
@@ -1,18 +1,18 @@
 == textarea-valid.html textarea-ref.html
-== textarea-customerror.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-customerror.html textarea-ref.html
 skip-if(B2G) fails-if(Android) == textarea-disabled.html textarea-ref.html
 fails-if(Android||B2G) == textarea-dyn-disabled.html textarea-ref.html
-== textarea-dyn-not-disabled.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-dyn-not-disabled.html textarea-ref.html
 == textarea-readonly.html textarea-ref.html
 == textarea-dyn-readonly.html textarea-ref.html
 == textarea-dyn-not-readonly-not-changed.html textarea-ref.html
-== textarea-dyn-not-readonly-changed.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-dyn-not-readonly-changed.html textarea-ref.html
 == textarea-maxlength-valid.html textarea-ref.html
 == textarea-maxlength-invalid.html textarea-withtext-ref.html
 == textarea-maxlength-default-value-invalid.html textarea-withtext-ref.html
 == textarea-required-valid.html textarea-withtext-ref.html
 == textarea-required-invalid.html textarea-ref.html
-== textarea-required-invalid-changed.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-required-invalid-changed.html textarea-ref.html
 == textarea-disabled-fieldset-1.html textarea-fieldset-ref.html
 == textarea-disabled-fieldset-2.html textarea-fieldset-ref.html
 == textarea-novalidate.html textarea-ref.html
--- a/layout/reftests/css-ui-valid/input/reftest.list
+++ b/layout/reftests/css-ui-valid/input/reftest.list
@@ -21,17 +21,17 @@ fails-if(Android||B2G) == input-dyn-disa
 == input-email-valid-changed.html input-email-ref.html
 == input-url-invalid.html input-withtext-ref.html
 == input-url-valid.html input-url-ref.html
 == input-url-valid-changed.html input-url-ref.html
 == input-pattern-valid.html input-withtext-ref.html
 == input-pattern-valid-changed.html input-withtext-ref.html
 == input-pattern-invalid.html input-withtext-ref.html
 == input-type-barred.html input-button-ref.html
-fuzzy(64,4) == input-type-invalid.html input-ref.html
+fuzzy(64,4) fails-if(B2G&&browserIsRemote) == input-type-invalid.html input-ref.html
 == input-disabled-fieldset-1.html input-fieldset-ref.html
 == input-disabled-fieldset-2.html input-fieldset-ref.html
 == input-fieldset-legend.html input-fieldset-legend-ref.html
 == input-checkbox-valid-changed.html success-ref.html
 == input-checkbox-valid-default.html success-ref.html
 == input-file-valid-changed.html input-file-ref.html
 == input-file-valid-default.html input-file-ref.html
 == input-radio-required.html success-ref.html
--- a/layout/reftests/css-ui-valid/select/reftest.list
+++ b/layout/reftests/css-ui-valid/select/reftest.list
@@ -6,13 +6,13 @@ needs-focus == select-dyn-disabled.html 
 needs-focus == select-dyn-not-disabled.html select-ref.html
 needs-focus == select-required-invalid.html select-required-ref.html
 needs-focus == select-required-valid-1.html select-required-ref.html
 needs-focus == select-required-valid-2.html select-required-ref.html
 needs-focus == select-required-valid-changed-1.html select-required-ref.html
 needs-focus == select-required-valid-changed-2.html select-required-ref.html
 needs-focus == select-required-multiple-invalid.html select-required-multiple-ref.html
 needs-focus == select-required-multiple-valid.html select-required-multiple-ref.html
-fuzzy(64,4) needs-focus == select-required-multiple-valid-changed.html select-required-multiple-ref.html
+fuzzy(64,4) fails-if(B2G&&browserIsRemote) needs-focus == select-required-multiple-valid-changed.html select-required-multiple-ref.html
 fails-if(Android||B2G) needs-focus == select-disabled-fieldset-1.html select-fieldset-ref.html
 fails-if(Android||B2G) needs-focus == select-disabled-fieldset-2.html select-fieldset-ref.html
 needs-focus == select-fieldset-legend.html select-fieldset-legend-ref.html
 needs-focus == select-novalidate.html select-required-ref.html
--- a/layout/reftests/css-ui-valid/textarea/reftest.list
+++ b/layout/reftests/css-ui-valid/textarea/reftest.list
@@ -1,20 +1,20 @@
 == textarea-valid.html textarea-ref.html
 == textarea-customerror.html textarea-ref.html
 fails-if(Android||B2G) == textarea-disabled.html textarea-ref.html
-fails-if(Android||B2G) == textarea-dyn-disabled.html textarea-ref.html
-== textarea-dyn-not-disabled.html textarea-ref.html
-== textarea-dyn-not-disabled-changed.html textarea-ref.html
+random-if(Android||B2G) == textarea-dyn-disabled.html textarea-ref.html
+random-if(B2G&&browserIsRemote) == textarea-dyn-not-disabled.html textarea-ref.html
+random-if(B2G&&browserIsRemote) == textarea-dyn-not-disabled-changed.html textarea-ref.html
 == textarea-readonly.html textarea-ref.html
 == textarea-dyn-readonly.html textarea-ref.html
 == textarea-dyn-not-readonly.html textarea-ref.html
-== textarea-dyn-not-readonly-changed.html textarea-ref.html
+random-if(B2G&&browserIsRemote) == textarea-dyn-not-readonly-changed.html textarea-ref.html
 == textarea-maxlength-valid.html textarea-ref.html
-== textarea-maxlength-valid-changed.html textarea-ref.html
+random-if(B2G&&browserIsRemote) == textarea-maxlength-valid-changed.html textarea-ref.html
 == textarea-maxlength-invalid.html textarea-withtext-ref.html
 == textarea-required-valid.html textarea-withtext-ref.html
 == textarea-required-valid-changed.html textarea-withtext-ref.html
 == textarea-required-invalid.html textarea-ref.html
 == textarea-disabled-fieldset-1.html textarea-fieldset-ref.html
 == textarea-disabled-fieldset-2.html textarea-fieldset-ref.html
 == textarea-fieldset-legend.html textarea-fieldset-legend-ref.html
 == textarea-novalidate.html textarea-withtext-ref.html
--- a/layout/reftests/css-valid/input/reftest.list
+++ b/layout/reftests/css-valid/input/reftest.list
@@ -1,10 +1,10 @@
 == input-valid.html input-ref.html
-fuzzy(64,4) == input-customerror.html input-ref.html
+fuzzy(64,4) random-if(B2G&&browserIsRemote) == input-customerror.html input-ref.html
 fails-if(Android||B2G) == input-disabled.html input-ref.html
 fails-if(Android||B2G) == input-dyn-disabled.html input-ref.html
 == input-dyn-not-disabled.html input-ref.html
 == input-readonly.html input-ref.html
 == input-dyn-readonly.html input-ref.html
 == input-dyn-not-readonly.html input-ref.html
 == input-maxlength-valid.html input-ref.html
 == input-maxlength-invalid.html input-withtext-ref.html
@@ -14,17 +14,17 @@ fails-if(Android||B2G) == input-dyn-disa
 == input-reset.html input-button-ref.html
 == input-email-invalid.html input-withtext-ref.html
 == input-email-valid.html input-email-ref.html
 == input-url-invalid.html input-withtext-ref.html
 == input-url-valid.html input-url-ref.html
 == input-pattern-valid.html input-withtext-ref.html
 == input-pattern-invalid.html input-withtext-ref.html
 == input-type-barred.html input-button-ref.html
-fuzzy(64,4) == input-type-invalid.html input-ref.html
+fuzzy(64,4) fails-if(B2G&&browserIsRemote) == input-type-invalid.html input-ref.html
 == input-disabled-fieldset-1.html input-fieldset-ref.html
 == input-disabled-fieldset-2.html input-fieldset-ref.html
 == input-fieldset-legend.html input-fieldset-legend-ref.html
 == input-radio-required.html success-ref.html
 == input-radio-customerror.html success-ref.html
 == input-radio-dyn-valid-1.html success-ref.html
 == input-radio-dyn-valid-2.html success-ref.html
 == input-radio-nogroup-required-valid.html success-ref.html
--- a/layout/reftests/css-valid/textarea/reftest.list
+++ b/layout/reftests/css-valid/textarea/reftest.list
@@ -1,15 +1,15 @@
 == textarea-valid.html textarea-ref.html
-== textarea-customerror.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-customerror.html textarea-ref.html
 fails-if(Android||B2G) == textarea-disabled.html textarea-ref.html
 fails-if(Android||B2G) == textarea-dyn-disabled.html textarea-ref.html
-== textarea-dyn-not-disabled.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-dyn-not-disabled.html textarea-ref.html
 == textarea-readonly.html textarea-ref.html
-== textarea-dyn-readonly.html textarea-ref.html
-== textarea-dyn-not-readonly.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-dyn-readonly.html textarea-ref.html
+fails-if(B2G&&browserIsRemote) == textarea-dyn-not-readonly.html textarea-ref.html
 == textarea-maxlength-valid.html textarea-ref.html
 == textarea-maxlength-invalid.html textarea-withtext-ref.html
 == textarea-required-valid.html textarea-withtext-ref.html
 == textarea-required-invalid.html textarea-ref.html
 == textarea-disabled-fieldset-1.html textarea-fieldset-ref.html
 == textarea-disabled-fieldset-2.html textarea-fieldset-ref.html
 == textarea-fieldset-legend.html textarea-fieldset-legend-ref.html
--- a/layout/reftests/dom/reftest.list
+++ b/layout/reftests/dom/reftest.list
@@ -26,30 +26,30 @@
 # multiple range inserts
 == insertmultiplemultiple-1.html insertmultiplemultiple-ref.html
 # a range insert and an append
 == insertmultiplemultiple-2.html insertmultiplemultiple-ref.html
 # multiple range inserts and an append
 == insertmultiplemultiple-2.html insertmultiplemultiple-ref.html
 
 # testing bindings that have multiple insertion points
-== multipleinsertionpoints-ref2.xhtml multipleinsertionpoints-ref.xhtml
+fails-if(B2G&&browserIsRemote) == multipleinsertionpoints-ref2.xhtml multipleinsertionpoints-ref.xhtml #Bug 988759
 # append a single element
 skip-if(B2G) == multipleinsertionpoints-appendsingle-1.xhtml multipleinsertionpoints-ref.xhtml # bug 773482
 skip-if(B2G) == multipleinsertionpoints-appendsingle-2.xhtml multipleinsertionpoints-ref.xhtml # bug 773482
 # append several elements
 skip-if(B2G) == multipleinsertionpoints-appendmultiple.xhtml multipleinsertionpoints-ref.xhtml # bug 773482
 # insert a single element
 skip-if(B2G) == multipleinsertionpoints-insertsingle-1.xhtml multipleinsertionpoints-ref.xhtml # bug 773482
 skip-if(B2G) == multipleinsertionpoints-insertsingle-2.xhtml multipleinsertionpoints-ref.xhtml # bug 773482
 # insert several elements
 skip-if(B2G) == multipleinsertionpoints-insertmultiple.xhtml multipleinsertionpoints-ref.xhtml # bug 773482
 
 # test appending some nodes whose frame construction should be done lazily
 # followed by appending a node that might not be done lazily
-== multipleappendwithxul.xhtml multipleappendwithxul-ref.xhtml
+skip-if(B2G&&browserIsRemote) == multipleappendwithxul.xhtml multipleappendwithxul-ref.xhtml # Bug 974780
 == multipleappendwithinput.xhtml multipleappendwithinput-ref.xhtml
 == multipleappendwitheditable.xhtml multipleappendwitheditable-ref.xhtml
 
 skip-if(B2G) == xbl-children-1.xhtml xbl-children-1-ref.xhtml
 skip-if(B2G) == xbl-children-2.xhtml about:blank
 skip-if(B2G) == xbl-children-3.xhtml xbl-children-3-ref.html
 skip-if(B2G) == xbl-children-4.xhtml xbl-children-4-ref.html
--- a/layout/reftests/first-line/reftest.list
+++ b/layout/reftests/first-line/reftest.list
@@ -21,17 +21,17 @@ load stress-5.html # assertion/crash tes
 load stress-6.html # assertion/crash test
 load stress-7.html # assertion/crash test
 == stress-8.html stress-8-ref.html # assertion/crash test
 == stress-9.html stress-9-ref.html # assertion/crash test
 load stress-10.html # crash test
 == stress-11.xhtml stress-11-ref.xhtml
 
 == border-not-apply.html border-not-apply-ref.html
-== 287088-1.html 287088-1-ref.html
+skip-if(B2G&&browserIsRemote) == 287088-1.html 287088-1-ref.html # Bug 975254
 == 287088-2.html 287088-2-ref.html
 == 403177-1.html 403177-1-ref.html
 == 469227-2.html 469227-2-ref.html
 == 469227-3.html 469227-3-ref.html
 
 == restyle-inside-first-line.html restyle-inside-first-line-ref.html
 == font-styles.html font-styles-ref.html
 == font-styles-nooverflow.html font-styles-ref.html
--- a/layout/reftests/flexbox/reftest.list
+++ b/layout/reftests/flexbox/reftest.list
@@ -51,40 +51,40 @@ fuzzy-if(B2G,10,3) random-if(winWidget) 
 == flexbox-box-sizing-on-container-horiz-1.html flexbox-box-sizing-on-container-horiz-1-ref.html
 == flexbox-box-sizing-on-container-vert-1.html flexbox-box-sizing-on-container-vert-1-ref.html
 == flexbox-box-sizing-on-items-horiz-1a.html flexbox-box-sizing-on-items-horiz-1-ref.html
 == flexbox-box-sizing-on-items-horiz-1b.html flexbox-box-sizing-on-items-horiz-1-ref.html
 == flexbox-box-sizing-on-items-vert-1a.html flexbox-box-sizing-on-items-vert-1-ref.html
 == flexbox-box-sizing-on-items-vert-1b.html flexbox-box-sizing-on-items-vert-1-ref.html
 
 # Tests for dynamic modifications of content inside/around a flex container
-== flexbox-dyn-changeFrameWidth-1.xhtml flexbox-dyn-changeFrameWidth-1-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-changeFrameWidth-1.xhtml flexbox-dyn-changeFrameWidth-1-ref.xhtml
 == flexbox-dyn-changeFrameWidth-2.xhtml flexbox-dyn-changeFrameWidth-2-ref.xhtml
 == flexbox-dyn-changeFrameWidth-3.xhtml flexbox-dyn-changeFrameWidth-3-ref.xhtml
-== flexbox-dyn-changeFrameWidth-4.xhtml flexbox-dyn-changeFrameWidth-4-ref.xhtml
-== flexbox-dyn-changePadding-1a.xhtml flexbox-dyn-changePadding-1-ref.xhtml
-== flexbox-dyn-changePadding-1b.xhtml flexbox-dyn-changePadding-1-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-changeFrameWidth-4.xhtml flexbox-dyn-changeFrameWidth-4-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-changePadding-1a.xhtml flexbox-dyn-changePadding-1-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-changePadding-1b.xhtml flexbox-dyn-changePadding-1-ref.xhtml
 
 # Tests for dynamic insertions of content into a flex container
 # (with existing [div | span | text] inside the flexbox, and new content
 # inserted adjacent to that existing content.)
 == flexbox-dyn-insertAroundDiv-1.xhtml flexbox-dyn-insertAroundDiv-1-ref.xhtml
-== flexbox-dyn-insertAroundDiv-2.xhtml flexbox-dyn-insertAroundDiv-2-ref.xhtml
-== flexbox-dyn-insertAroundDiv-3.xhtml flexbox-dyn-insertAroundDiv-3-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-insertAroundDiv-2.xhtml flexbox-dyn-insertAroundDiv-2-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-insertAroundDiv-3.xhtml flexbox-dyn-insertAroundDiv-3-ref.xhtml
 
 == flexbox-dyn-insertAroundSpan-1.xhtml flexbox-dyn-insertAroundDiv-1-ref.xhtml
-== flexbox-dyn-insertAroundSpan-2.xhtml flexbox-dyn-insertAroundDiv-2-ref.xhtml
-== flexbox-dyn-insertAroundSpan-3.xhtml flexbox-dyn-insertAroundDiv-3-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-insertAroundSpan-2.xhtml flexbox-dyn-insertAroundDiv-2-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-insertAroundSpan-3.xhtml flexbox-dyn-insertAroundDiv-3-ref.xhtml
 
 == flexbox-dyn-insertAroundText-1.xhtml flexbox-dyn-insertAroundText-1-ref.xhtml
-== flexbox-dyn-insertAroundText-2.xhtml flexbox-dyn-insertAroundText-2-ref.xhtml
-== flexbox-dyn-insertAroundText-3.xhtml flexbox-dyn-insertAroundText-3-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-insertAroundText-2.xhtml flexbox-dyn-insertAroundText-2-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-insertAroundText-3.xhtml flexbox-dyn-insertAroundText-3-ref.xhtml
 
 # Variant of one of the above tests, to regression-test an invalidation issue
-== flexbox-dyn-insertEmptySpan-1.xhtml flexbox-dyn-insertEmptySpan-1-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-dyn-insertEmptySpan-1.xhtml flexbox-dyn-insertEmptySpan-1-ref.xhtml
 
 # Tests for empty flexboxes (with no flex items)
 == flexbox-empty-1a.xhtml  flexbox-empty-1-ref.xhtml
 == flexbox-empty-1b.xhtml  flexbox-empty-1-ref.xhtml
 
 # Tests for handling of floated elements inside a flexbox
 == flexbox-float-1a.xhtml  flexbox-float-1-ref.xhtml
 == flexbox-float-1b.xhtml  flexbox-float-1-ref.xhtml
@@ -109,31 +109,31 @@ fails == flexbox-paint-ordering-3.html  
 fuzzy-if(Android&&AndroidVersion>=15,16,400) == flexbox-position-fixed-1.xhtml     flexbox-position-fixed-1-ref.xhtml
 fuzzy-if(Android&&AndroidVersion>=15,16,400) == flexbox-position-fixed-2.xhtml     flexbox-position-fixed-2-ref.xhtml
 == flexbox-position-fixed-3.xhtml     flexbox-position-fixed-3-ref.xhtml
 == flexbox-position-fixed-4.xhtml     flexbox-position-fixed-4-ref.xhtml
 
 # Tests for inline content in a flexbox that gets wrapped in an anonymous block
 fails == flexbox-inlinecontent-horiz-1a.xhtml flexbox-inlinecontent-horiz-1-ref.xhtml # reference case rendering is incorrect; bug 858333
 fails == flexbox-inlinecontent-horiz-1b.xhtml flexbox-inlinecontent-horiz-1-ref.xhtml # reference case rendering is incorrect; bug 858333
-== flexbox-inlinecontent-horiz-2.xhtml  flexbox-inlinecontent-horiz-2-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-inlinecontent-horiz-2.xhtml  flexbox-inlinecontent-horiz-2-ref.xhtml
 == flexbox-inlinecontent-horiz-3a.xhtml flexbox-inlinecontent-horiz-3-ref.xhtml
-== flexbox-inlinecontent-horiz-3b.xhtml flexbox-inlinecontent-horiz-3-ref.xhtml
-== flexbox-inlinecontent-horiz-3c.xhtml flexbox-inlinecontent-horiz-3-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-inlinecontent-horiz-3b.xhtml flexbox-inlinecontent-horiz-3-ref.xhtml
+fails-if(B2G&&browserIsRemote) == flexbox-inlinecontent-horiz-3c.xhtml flexbox-inlinecontent-horiz-3-ref.xhtml
 == flexbox-inlinecontent-horiz-4.xhtml  flexbox-inlinecontent-horiz-4-ref.xhtml
 == flexbox-inlinecontent-horiz-5.xhtml  flexbox-inlinecontent-horiz-5-ref.xhtml
 
 # Tests for intrinsic sizing of flexboxes
 == flexbox-intrinsic-sizing-horiz-1a.xhtml flexbox-intrinsic-sizing-horiz-1-ref.xhtml
 == flexbox-intrinsic-sizing-horiz-1b.xhtml flexbox-intrinsic-sizing-horiz-1-ref.xhtml
 == flexbox-intrinsic-sizing-horiz-2a.xhtml flexbox-intrinsic-sizing-horiz-2-ref.xhtml
 == flexbox-intrinsic-sizing-horiz-2b.xhtml flexbox-intrinsic-sizing-horiz-2-ref.xhtml
 
 # Tests for invalidation after dynamic modifications
-== flexbox-invalidation-1.html flexbox-invalidation-1-ref.html
+fails-if(B2G&&browserIsRemote) == flexbox-invalidation-1.html flexbox-invalidation-1-ref.html
 
 # Tests for flexbox in an iframe that gets resized.
 skip-if(B2G) == flexbox-resizeviewport-1.xhtml flexbox-resizeviewport-1-ref.xhtml
 
 # Tests for flexbox styling on things that don't support it
 == flexbox-styling-on-svg-1.svg flexbox-styling-on-svg-1-ref.svg
 
 # Tests with widgets as flex items
--- a/layout/reftests/floats/reftest.list
+++ b/layout/reftests/floats/reftest.list
@@ -12,9 +12,9 @@ fuzzy-if(gtk2Widget,1,10) == float-outsi
 fails == zero-height-float.html zero-height-float-ref.html # bug 81710
 fails == 345369-1.html 345369-1-ref.html
 fails == 345369-2.html 345369-2-ref.html
 == 345369-3.html 345369-3-ref.html
 == 345369-4.html 345369-4-ref.html
 == 345369-5.html 345369-5-ref.html
 == 429974-1.html 429974-1-ref.html
 == 546048-1.html 546048-1-ref.html
-== 775350-1.html 775350-1-ref.html
+random-if(B2G&&browserIsRemote) == 775350-1.html 775350-1-ref.html
--- a/layout/reftests/forms/fieldset/reftest.list
+++ b/layout/reftests/forms/fieldset/reftest.list
@@ -1,13 +1,13 @@
-== dynamic-legend-scroll-1.html dynamic-legend-scroll-1-ref.html
+fails-if(B2G&&browserIsRemote) == dynamic-legend-scroll-1.html dynamic-legend-scroll-1-ref.html
 == fieldset-hidden-1.html fieldset-hidden-1-ref.html
 == fieldset-intrinsic-width-1.html fieldset-intrinsic-width-1-ref.html
 == fieldset-percentage-padding-1.html fieldset-percentage-padding-1-ref.html
 == fieldset-scroll-1.html fieldset-scroll-1-ref.html
-== fieldset-scrolled-1.html fieldset-scrolled-1-ref.html
+fails-if(B2G&&browserIsRemote) == fieldset-scrolled-1.html fieldset-scrolled-1-ref.html
 random-if(B2G) == fieldset-overflow-auto-1.html fieldset-overflow-auto-1-ref.html
 == positioned-container-1.html positioned-container-1-ref.html
 == relpos-legend-1.html relpos-legend-1-ref.html
 == relpos-legend-2.html relpos-legend-2-ref.html
 test-pref(layout.css.sticky.enabled,true) skip-if(B2G&&browserIsRemote) == sticky-legend-1.html sticky-legend-1-ref.html
 == abs-pos-child-sizing.html abs-pos-child-sizing-ref.html
 == overflow-hidden.html overflow-hidden-ref.html
--- a/layout/reftests/forms/input/number/reftest.list
+++ b/layout/reftests/forms/input/number/reftest.list
@@ -6,27 +6,27 @@ skip-if(Android||B2G) != not-other-type-
 skip-if(Android||B2G) != not-other-type-unthemed-1.html not-other-type-unthemed-1b-notref.html
 # only valid on Android/B2G where type=number looks the same as type=text
 skip-if(!Android&&!B2G) == number-same-as-text-unthemed.html number-same-as-text-unthemed-ref.html
 
 # should look the same as type=text, except for the spin box
 == number-similar-to-text-unthemed.html number-similar-to-text-unthemed-ref.html
 
 # dynamic type changes:
-fuzzy-if(/^Windows\x20NT\x205\.1/.test(http.oscpu),64,4) fuzzy-if(cocoaWidget,63,4) == to-number-from-other-type-unthemed-1.html to-number-from-other-type-unthemed-1-ref.html
-== from-number-to-other-type-unthemed-1.html from-number-to-other-type-unthemed-1-ref.html
+fuzzy-if(/^Windows\x20NT\x205\.1/.test(http.oscpu),64,4) fuzzy-if(cocoaWidget,63,4) fails-if(B2G&&browserIsRemote) == to-number-from-other-type-unthemed-1.html to-number-from-other-type-unthemed-1-ref.html
+fails-if(B2G&&browserIsRemote) == from-number-to-other-type-unthemed-1.html from-number-to-other-type-unthemed-1-ref.html
 
 # dynamic value changes:
 == show-value.html show-value-ref.html
 
 # disabled
 == number-disabled.html number-disabled-ref.html
 
 # auto width:
-== number-auto-width-1.html number-auto-width-1-ref.html
+random-if(B2G&&browserIsRemote) == number-auto-width-1.html number-auto-width-1-ref.html
 
 # min-height/max-height tests:
 skip-if(B2G||Android) == number-min-height-1.html number-min-height-1-ref.html
 skip-if(B2G||Android) == number-min-height-2.html number-min-height-2-ref.html
 skip-if(B2G||Android) == number-max-height-1.html number-max-height-1-ref.html
 skip-if(B2G||Android) == number-max-height-2.html number-max-height-2-ref.html
 
 # number of significant fractional digits:
--- a/layout/reftests/forms/input/range/reftest.list
+++ b/layout/reftests/forms/input/range/reftest.list
@@ -1,32 +1,31 @@
-
 # sanity checks:
 != not-other-type-unthemed-1.html not-other-type-unthemed-1a-notref.html
 != not-other-type-unthemed-1.html not-other-type-unthemed-1b-notref.html
 != not-other-type-unthemed-1.html not-other-type-unthemed-1c-notref.html
 
 # dynamic type changes:
-== to-range-from-other-type-unthemed-1.html to-range-from-other-type-unthemed-1-ref.html
-== from-range-to-other-type-unthemed-1.html from-range-to-other-type-unthemed-1-ref.html
+fails-if(B2G&&browserIsRemote) == to-range-from-other-type-unthemed-1.html to-range-from-other-type-unthemed-1-ref.html
+fails-if(B2G&&browserIsRemote) == from-range-to-other-type-unthemed-1.html from-range-to-other-type-unthemed-1-ref.html
 
 # for different values:
 != different-fraction-of-range-unthemed-1.html different-fraction-of-range-unthemed-1-notref.html
 == same-fraction-of-range-unthemed-1.html same-fraction-of-range-unthemed-1-ref.html
 
 # dynamic value changes:
-== value-prop-unthemed.html 75pct-unthemed-common-ref.html
-== value-prop.html 75pct-common-ref.html
-== valueAsNumber-prop-unthemed.html 75pct-unthemed-common-ref.html
-== valueAsNumber-prop.html 75pct-common-ref.html
-== stepDown-unthemed.html 75pct-unthemed-common-ref.html
-== stepDown.html 75pct-common-ref.html
-== stepUp-unthemed.html 75pct-unthemed-common-ref.html
-== stepUp.html 75pct-common-ref.html
-fuzzy-if(B2G,1,1) == max-prop.html 100pct-common-ref.html
+random-if(B2G&&browserIsRemote) == value-prop-unthemed.html 75pct-unthemed-common-ref.html
+random-if(B2G&&browserIsRemote) == value-prop.html 75pct-common-ref.html
+random-if(B2G&&browserIsRemote) == valueAsNumber-prop-unthemed.html 75pct-unthemed-common-ref.html
+random-if(B2G&&browserIsRemote) == valueAsNumber-prop.html 75pct-common-ref.html
+random-if(B2G&&browserIsRemote) == stepDown-unthemed.html 75pct-unthemed-common-ref.html # Bug 878916
+random-if(B2G&&browserIsRemote) == stepDown.html 75pct-common-ref.html # Bug 878916
+random-if(B2G&&browserIsRemote) == stepUp-unthemed.html 75pct-unthemed-common-ref.html # Bug 969256
+random-if(B2G&&browserIsRemote) == stepUp.html 75pct-common-ref.html # Bug 969256
+fuzzy-if(B2G,1,1) fails-if(B2G&&browserIsRemote) == max-prop.html 100pct-common-ref.html
 
 # 'direction' property:
 == direction-unthemed-1.html direction-unthemed-1-ref.html
 
 # ::-moz-range-progress pseudo-element:
 fails-if(B2G||Android) == moz-range-progress-1.html moz-range-progress-1-ref.html
 == moz-range-progress-2.html moz-range-progress-2-ref.html
 == moz-range-progress-3.html moz-range-progress-3-ref.html
--- a/layout/reftests/forms/meter/reftest.list
+++ b/layout/reftests/forms/meter/reftest.list
@@ -17,11 +17,11 @@ skip-if(B2G) == bar-pseudo-element-verti
 # transformations will not behave exactly the same for <meter> and two divs.
 # However, it would be possible to manually check those.
 # == transformations.html transformations-ref.html
 
 # default style
 include default-style/reftest.list
 
 # Tests for bugs:
-== block-invalidate.html block-invalidate-ref.html
+random-if(B2G&&browserIsRemote) == block-invalidate.html block-invalidate-ref.html
 == in-cells.html in-cells-ref.html
 == max-height.html max-height-ref.html
--- a/layout/reftests/forms/textarea/reftest.list
+++ b/layout/reftests/forms/textarea/reftest.list
@@ -4,10 +4,10 @@ skip-if(B2G) fails-if(Android) skip-if(w
 skip-if(B2G) fails-if(Android) != ltr.html rtl.html
 skip-if(B2G) fails-if(Android) != ltr-scrollbar.html rtl-scrollbar.html
 skip-if(B2G) fails-if(Android) != in-ltr-doc-scrollbar.html in-rtl-doc-scrollbar.html
 skip-if(B2G) fails-if(Android) != ltr.html no-resize.html
 skip-if(B2G) fails-if(Android) fails-if(gtk2Widget) != rtl.html no-resize.html # bug 834724
 == rtl.html rtl-dynamic-attr.html
 == rtl.html rtl-dynamic-style.html
 == rtl.html in-dynamic-rtl-doc.html
-== setvalue-framereconstruction-1.html setvalue-framereconstruction-ref.html
+fails-if(B2G&&browserIsRemote) == setvalue-framereconstruction-1.html setvalue-framereconstruction-ref.html
 == padding-scrollbar-placement.html padding-scrollbar-placement-ref.html
--- a/layout/reftests/ib-split/reftest.list
+++ b/layout/reftests/ib-split/reftest.list
@@ -59,17 +59,17 @@
 == insert-into-split-inline-13-ref.html insert-into-split-inline-13-noib-ref.html
 == insert-into-split-inline-14.html insert-into-split-inline-14-ref.html
 == insert-into-split-inline-14-ref.html insert-into-split-inline-14-noib-ref.html
 == insert-into-split-inline-15.html insert-into-split-inline-15-ref.html
 == insert-into-split-inline-15-ref.html insert-into-split-inline-15-noib-ref.html
 == insert-into-split-inline-16a.html insert-into-split-inline-16-ref.html
 == insert-into-split-inline-16b.html insert-into-split-inline-16-ref.html
 == insert-into-split-inline-16-ref.html insert-into-split-inline-16-noib-ref.html
-== float-inside-inline-between-blocks-1.html float-inside-inline-between-blocks-1-ref.html
+random-if(B2G&&browserIsRemote) == float-inside-inline-between-blocks-1.html float-inside-inline-between-blocks-1-ref.html
 == table-pseudo-in-part3-1.html table-pseudo-in-part3-1-ref.html
 == emptyspan-1.html emptyspan-1-ref.html
 == emptyspan-2.html emptyspan-2-ref.html
 == emptyspan-3.html emptyspan-3-ref.html
 == emptyspan-4.html emptyspan-4-ref.html
 == split-inner-inline-1.html split-inner-inline-1-ref.html
 == split-inner-inline-2.html split-inner-inline-2-ref.html
 == whitespace-present-1a.html whitespace-present-1-ref.html
--- a/layout/reftests/image-element/reftest.list
+++ b/layout/reftests/image-element/reftest.list
@@ -39,9 +39,9 @@ fuzzy(1,9674) random-if(!cocoaWidget) ==
 fuzzy(1,9674) random-if(!cocoaWidget) == gradient-html-06b.html gradient-html-06c.html
 == gradient-html-06c.html gradient-html-06d.html
 == gradient-html-06d.html gradient-html-06e.html
 random-if(!cocoaWidget) fuzzy-if(azureQuartz,1,11367) == gradient-html-07a.html gradient-html-07b.html
 fuzzy(1,16900) == gradient-html-07c.html gradient-html-07d.html
 HTTP == invalidate-1.html invalidate-1-ref.html
 == pattern-html-01.html pattern-html-01-ref.svg
 == pattern-html-02.html pattern-html-02-ref.svg
-== referenced-from-binding-01.html referenced-from-binding-01-ref.html
+fails-if(B2G&&browserIsRemote) == referenced-from-binding-01.html referenced-from-binding-01-ref.html # Bug 988763
--- a/layout/reftests/image-region/reftest.list
+++ b/layout/reftests/image-region/reftest.list
@@ -1,1 +1,1 @@
-== image-region.xul image-region-ref.xul
+skip-if(B2G&&browserIsRemote) == image-region.xul image-region-ref.xul
--- a/layout/reftests/invalidation/reftest.list
+++ b/layout/reftests/invalidation/reftest.list
@@ -1,12 +1,12 @@
 == table-repaint-a.html table-repaint-a-ref.html
-== table-repaint-b.html table-repaint-b-ref.html
+fails-if(B2G&&browserIsRemote) == table-repaint-b.html table-repaint-b-ref.html
 == table-repaint-c.html table-repaint-c-ref.html
-== table-repaint-d.html table-repaint-d-ref.html
+fails-if(B2G&&browserIsRemote) == table-repaint-d.html table-repaint-d-ref.html
 skip-if(B2G&&browserIsRemote) == 540247-1.xul 540247-1-ref.xul  # bug 974780
 skip-if(B2G&&browserIsRemote) == 543681-1.html 543681-1-ref.html
 == test-image-layers.html test-image-layers-ref.html
 pref(layout.animated-image-layers.enabled,true) == test-animated-image-layers.html test-animated-image-layers-ref.html
 pref(layout.animated-image-layers.enabled,true) == test-animated-image-layers-background.html test-animated-image-layers-ref.html
 == box-shadow-border-radius.html box-shadow-border-radius-ref.html
 == filter-userspace-offset.svg?offsetContainer=rect filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=use filter-userspace-offset.svg
@@ -15,34 +15,34 @@ pref(layout.animated-image-layers.enable
 == filter-userspace-offset.svg?offsetContainer=rect&filter=flood-boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=use&filter=flood-boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=innerSVG&filter=flood-boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=foreignObject&filter=flood-boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=rect&filter=matrix-boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=use&filter=matrix-boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=innerSVG&filter=matrix-boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=foreignObject&filter=matrix-boundingBox filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=rect&filter=flood-userSpace-at100 filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=use&filter=flood-userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=rect&filter=flood-userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=use&filter=flood-userSpace-at100 filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=innerSVG&filter=flood-userSpace-atZero filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=foreignObject&filter=flood-userSpace-at100 filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=rect&filter=matrix-userSpace-at100 filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=use&filter=matrix-userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=foreignObject&filter=flood-userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=rect&filter=matrix-userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=use&filter=matrix-userSpace-at100 filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=innerSVG&filter=matrix-userSpace-atZero filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=foreignObject&filter=matrix-userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=foreignObject&filter=matrix-userSpace-at100 filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=rect&mask=boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=use&mask=boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=innerSVG&mask=boundingBox filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=foreignObject&mask=boundingBox filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=rect&mask=userSpace-at100 filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=use&mask=userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=rect&mask=userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=use&mask=userSpace-at100 filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=innerSVG&mask=userSpace-atZero filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=foreignObject&mask=userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=foreignObject&mask=userSpace-at100 filter-userspace-offset.svg
 == filter-userspace-offset.svg?offsetContainer=rect&filter=matrix-fillPaint-boundingBox filter-userspace-offset.svg
-== filter-userspace-offset.svg?offsetContainer=rect&filter=matrix-fillPaint-userSpace-at100 filter-userspace-offset.svg
+fails-if(B2G&&browserIsRemote) == filter-userspace-offset.svg?offsetContainer=rect&filter=matrix-fillPaint-userSpace-at100 filter-userspace-offset.svg
 == scroll-inactive-layers.html scroll-inactive-layers.html
 == scroll-inactive-layers-2.html scroll-inactive-layers-2.html
 != inactive-layertree-visible-region-1.html about:blank
 != inactive-layertree-visible-region-2.html about:blank
 != transform-floating-point-invalidation.html about:blank
 != transform-floating-point-invalidation.html?reverse about:blank
 != nudge-to-integer-invalidation.html about:blank
 != nudge-to-integer-invalidation.html?reverse about:blank
--- a/layout/reftests/layers/reftest.list
+++ b/layout/reftests/layers/reftest.list
@@ -1,2 +1,2 @@
-== move-to-background-1.html move-to-background-1-ref.html
-fuzzy-if(cocoaWidget,2,6) random-if(Android&&!browserIsRemote) == component-alpha-exit-1.html component-alpha-exit-1-ref.html # bug 760275
+random-if(B2G&&browserIsRemote) == move-to-background-1.html move-to-background-1-ref.html
+fuzzy-if(cocoaWidget,2,6) random-if(Android&&!browserIsRemote) fails-if(B2G&&browserIsRemote) == component-alpha-exit-1.html component-alpha-exit-1-ref.html # bug 760275
--- a/layout/reftests/margin-collapsing/reftest.list
+++ b/layout/reftests/margin-collapsing/reftest.list
@@ -73,31 +73,31 @@ skip-if(B2G) == inline-table-horizontal-
 == block-sibling-1c.html block-sibling-1-ref2.html
 != block-sibling-1c.html block-sibling-1-noref2.html
 == block-sibling-2.html block-sibling-2-ref.html
 == block-sibling-2.html block-sibling-2-ref2.html
 != block-sibling-2.html block-sibling-2-noref.html
 == block-sibling-3.html block-sibling-1-ref.html
 == block-sibling-3.html block-sibling-1-ref2.html
 != block-sibling-3.html block-sibling-1-noref.html
-== block-sibling-1a-dyn.html block-sibling-1-ref.html
-== block-sibling-1a-dyn.html block-sibling-1-ref2.html
-!= block-sibling-1a-dyn.html block-sibling-1-noref.html
-== block-sibling-1b-dyn.html block-sibling-1-ref.html
-== block-sibling-1b-dyn.html block-sibling-1-ref2.html
-!= block-sibling-1b-dyn.html block-sibling-1-noref.html
-== block-sibling-1c-dyn.html block-sibling-1-ref.html
-== block-sibling-1c-dyn.html block-sibling-1-ref2.html
-!= block-sibling-1c-dyn.html block-sibling-1-noref2.html
+random-if(B2G&&browserIsRemote) == block-sibling-1a-dyn.html block-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == block-sibling-1a-dyn.html block-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) != block-sibling-1a-dyn.html block-sibling-1-noref.html
+random-if(B2G&&browserIsRemote) == block-sibling-1b-dyn.html block-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == block-sibling-1b-dyn.html block-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) != block-sibling-1b-dyn.html block-sibling-1-noref.html
+random-if(B2G&&browserIsRemote) == block-sibling-1c-dyn.html block-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == block-sibling-1c-dyn.html block-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) != block-sibling-1c-dyn.html block-sibling-1-noref2.html
 skip-if(B2G) == block-sibling-2-dyn.html block-sibling-2-ref.html # bug 773482
-== block-sibling-2-dyn.html block-sibling-2-ref2.html
-!= block-sibling-2-dyn.html block-sibling-2-noref.html
-== block-sibling-3-dyn.html block-sibling-1-ref.html
-== block-sibling-3-dyn.html block-sibling-1-ref2.html
-!= block-sibling-3-dyn.html block-sibling-1-noref.html
+random-if(B2G&&browserIsRemote) == block-sibling-2-dyn.html block-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) != block-sibling-2-dyn.html block-sibling-2-noref.html
+random-if(B2G&&browserIsRemote) == block-sibling-3-dyn.html block-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == block-sibling-3-dyn.html block-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) != block-sibling-3-dyn.html block-sibling-1-noref.html
 # "In the case of negative margins, the maximum of the absolute values of the
 #  negative adjoining margins is deducted from the maximum of the positive
 #  adjoining margins. If there are no positive margins, the maximum of the
 #  absolute values of the adjoining margins is deducted from zero."
 # These tests feature sibling block boxes where one or two margins are negative.
 # The norefs depict possible incorrect addition or subtraction of margins.
 == block-negative-1a.html block-negative-1-ref.html
 != block-negative-1a.html block-negative-1-noref1.html
@@ -126,80 +126,80 @@ skip-if(B2G) == block-sibling-2-dyn.html
 == block-negative-4b.html block-negative-4-ref.html
 == block-negative-4b.html block-negative-4-ref2.html
 != block-negative-4b.html block-negative-4-noref1.html
 != block-negative-4b.html block-negative-4-noref2.html
 == block-negative-5.html block-negative-5-ref.html
 == block-negative-5.html block-negative-5-ref2.html
 != block-negative-5.html block-negative-5-noref1.html
 != block-negative-5.html block-negative-5-noref2.html
-== block-negative-1a-dyn1.html block-negative-1-ref.html
-!= block-negative-1a-dyn1.html block-negative-1-noref1.html
-!= block-negative-1a-dyn1.html block-negative-1-noref2.html
-== block-negative-1a-dyn2.html block-negative-1-ref.html
-!= block-negative-1a-dyn2.html block-negative-1-noref1.html
-!= block-negative-1a-dyn2.html block-negative-1-noref2.html
-== block-negative-1b-dyn1.html block-negative-1-ref.html
-!= block-negative-1b-dyn1.html block-negative-1-noref1.html
-!= block-negative-1b-dyn1.html block-negative-1-noref2.html
-== block-negative-1b-dyn2.html block-negative-1-ref.html
-!= block-negative-1b-dyn2.html block-negative-1-noref1.html
-!= block-negative-1b-dyn2.html block-negative-1-noref2.html
-== block-negative-2a-dyn1.html block-negative-2-ref.html
-!= block-negative-2a-dyn1.html block-negative-2-noref1.html
-!= block-negative-2a-dyn1.html block-negative-2-noref2.html
-== block-negative-2a-dyn2.html block-negative-2-ref.html
-!= block-negative-2a-dyn2.html block-negative-2-noref1.html
-!= block-negative-2a-dyn2.html block-negative-2-noref2.html
-== block-negative-2b-dyn1.html block-negative-2-ref.html
-!= block-negative-2b-dyn1.html block-negative-2-noref1.html
-!= block-negative-2b-dyn1.html block-negative-2-noref2.html
-== block-negative-2b-dyn2.html block-negative-2-ref.html
-!= block-negative-2b-dyn2.html block-negative-2-noref1.html
-!= block-negative-2b-dyn2.html block-negative-2-noref2.html
-== block-negative-3a-dyn1.html block-negative-3-ref.html
-== block-negative-3a-dyn1.html block-negative-3-ref2.html
-!= block-negative-3a-dyn1.html block-negative-3-noref1.html
-!= block-negative-3a-dyn1.html block-negative-3-noref2.html
-== block-negative-3a-dyn2.html block-negative-3-ref.html
-== block-negative-3a-dyn2.html block-negative-3-ref2.html
-!= block-negative-3a-dyn2.html block-negative-3-noref1.html
-!= block-negative-3a-dyn2.html block-negative-3-noref2.html
-== block-negative-3b-dyn1.html block-negative-3-ref.html
-== block-negative-3b-dyn1.html block-negative-3-ref2.html
-!= block-negative-3b-dyn1.html block-negative-3-noref1.html
-!= block-negative-3b-dyn1.html block-negative-3-noref2.html
-== block-negative-3b-dyn2.html block-negative-3-ref.html
-== block-negative-3b-dyn2.html block-negative-3-ref2.html
-!= block-negative-3b-dyn2.html block-negative-3-noref1.html
-!= block-negative-3b-dyn2.html block-negative-3-noref2.html
-== block-negative-4a-dyn1.html block-negative-4-ref.html
-== block-negative-4a-dyn1.html block-negative-4-ref2.html
-!= block-negative-4a-dyn1.html block-negative-4-noref1.html
-!= block-negative-4a-dyn1.html block-negative-4-noref2.html
-== block-negative-4a-dyn2.html block-negative-4-ref.html
-== block-negative-4a-dyn2.html block-negative-4-ref2.html
-!= block-negative-4a-dyn2.html block-negative-4-noref1.html
-!= block-negative-4a-dyn2.html block-negative-4-noref2.html
-== block-negative-4b-dyn1.html block-negative-4-ref.html
-== block-negative-4b-dyn1.html block-negative-4-ref2.html
-!= block-negative-4b-dyn1.html block-negative-4-noref1.html
-!= block-negative-4b-dyn1.html block-negative-4-noref2.html
-== block-negative-4b-dyn2.html block-negative-4-ref.html
-== block-negative-4b-dyn2.html block-negative-4-ref2.html
-!= block-negative-4b-dyn2.html block-negative-4-noref1.html
-!= block-negative-4b-dyn2.html block-negative-4-noref2.html
-== block-negative-5-dyn1.html block-negative-5-ref.html
-== block-negative-5-dyn1.html block-negative-5-ref2.html
-!= block-negative-5-dyn1.html block-negative-5-noref1.html
-!= block-negative-5-dyn1.html block-negative-5-noref2.html
-== block-negative-5-dyn2.html block-negative-5-ref.html
-== block-negative-5-dyn2.html block-negative-5-ref2.html
-!= block-negative-5-dyn2.html block-negative-5-noref1.html
-!= block-negative-5-dyn2.html block-negative-5-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-1a-dyn1.html block-negative-1-ref.html
+random-if(B2G&&browserIsRemote) != block-negative-1a-dyn1.html block-negative-1-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-1a-dyn1.html block-negative-1-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-1a-dyn2.html block-negative-1-ref.html
+random-if(B2G&&browserIsRemote) != block-negative-1a-dyn2.html block-negative-1-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-1a-dyn2.html block-negative-1-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-1b-dyn1.html block-negative-1-ref.html
+random-if(B2G&&browserIsRemote) != block-negative-1b-dyn1.html block-negative-1-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-1b-dyn1.html block-negative-1-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-1b-dyn2.html block-negative-1-ref.html
+random-if(B2G&&browserIsRemote) != block-negative-1b-dyn2.html block-negative-1-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-1b-dyn2.html block-negative-1-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-2a-dyn1.html block-negative-2-ref.html
+random-if(B2G&&browserIsRemote) != block-negative-2a-dyn1.html block-negative-2-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-2a-dyn1.html block-negative-2-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-2a-dyn2.html block-negative-2-ref.html
+random-if(B2G&&browserIsRemote) != block-negative-2a-dyn2.html block-negative-2-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-2a-dyn2.html block-negative-2-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-2b-dyn1.html block-negative-2-ref.html
+random-if(B2G&&browserIsRemote) != block-negative-2b-dyn1.html block-negative-2-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-2b-dyn1.html block-negative-2-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-2b-dyn2.html block-negative-2-ref.html
+random-if(B2G&&browserIsRemote) != block-negative-2b-dyn2.html block-negative-2-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-2b-dyn2.html block-negative-2-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-3a-dyn1.html block-negative-3-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-3a-dyn1.html block-negative-3-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-3a-dyn1.html block-negative-3-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-3a-dyn1.html block-negative-3-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-3a-dyn2.html block-negative-3-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-3a-dyn2.html block-negative-3-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-3a-dyn2.html block-negative-3-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-3a-dyn2.html block-negative-3-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-3b-dyn1.html block-negative-3-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-3b-dyn1.html block-negative-3-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-3b-dyn1.html block-negative-3-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-3b-dyn1.html block-negative-3-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-3b-dyn2.html block-negative-3-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-3b-dyn2.html block-negative-3-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-3b-dyn2.html block-negative-3-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-3b-dyn2.html block-negative-3-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-4a-dyn1.html block-negative-4-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-4a-dyn1.html block-negative-4-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-4a-dyn1.html block-negative-4-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-4a-dyn1.html block-negative-4-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-4a-dyn2.html block-negative-4-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-4a-dyn2.html block-negative-4-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-4a-dyn2.html block-negative-4-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-4a-dyn2.html block-negative-4-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-4b-dyn1.html block-negative-4-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-4b-dyn1.html block-negative-4-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-4b-dyn1.html block-negative-4-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-4b-dyn1.html block-negative-4-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-4b-dyn2.html block-negative-4-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-4b-dyn2.html block-negative-4-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-4b-dyn2.html block-negative-4-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-4b-dyn2.html block-negative-4-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-5-dyn1.html block-negative-5-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-5-dyn1.html block-negative-5-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-5-dyn1.html block-negative-5-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-5-dyn1.html block-negative-5-noref2.html
+random-if(B2G&&browserIsRemote) == block-negative-5-dyn2.html block-negative-5-ref.html
+random-if(B2G&&browserIsRemote) == block-negative-5-dyn2.html block-negative-5-ref2.html
+random-if(B2G&&browserIsRemote) != block-negative-5-dyn2.html block-negative-5-noref1.html
+random-if(B2G&&browserIsRemote) != block-negative-5-dyn2.html block-negative-5-noref2.html
 # "Two margins are adjoining if and only if:" [...]
 # "both belong to vertically-adjacent box edges,
 #  i.e. form one of the following pairs:" [...]
 # "top margin of a box and top margin of its first in-flow child"
 # "bottom margin of a last in-flow child and bottom margin of its parent
 #  if the parent has 'auto' computed height"
 # "A collapsed margin is considered adjoining to another margin if
 #  any of its component margins is adjoining to that margin."
@@ -237,61 +237,61 @@ skip-if(B2G) == block-sibling-2-dyn.html
 == block-non-sibling-3b.html block-non-sibling-3-ref.html
 == block-non-sibling-3b.html block-non-sibling-3-ref2.html
 == block-non-sibling-3c.html block-non-sibling-3-ref.html
 == block-non-sibling-3c.html block-non-sibling-3-ref2.html
 == block-non-sibling-3d.html block-non-sibling-3-ref.html
 == block-non-sibling-3d.html block-non-sibling-3-ref2.html
 == block-non-sibling-4.html block-non-sibling-4-ref.html
 == block-non-sibling-4.html block-non-sibling-4-ref2.html
-== block-non-sibling-1a-dyn.html block-non-sibling-1-ref2.html
-== block-non-sibling-1b-dyn.html block-non-sibling-1-ref2.html
-== block-non-sibling-1c-dyn.html block-non-sibling-1-ref2.html
-== block-non-sibling-1d-dyn.html block-non-sibling-1-ref2.html
-== block-non-sibling-1e-dyn.html block-non-sibling-1-ref2.html
-== block-non-sibling-1f-dyn.html block-non-sibling-1-ref2.html
-== block-non-sibling-2a-dyn.html block-non-sibling-2-ref2.html
-== block-non-sibling-2b-dyn.html block-non-sibling-2-ref2.html
-== block-non-sibling-2c-dyn.html block-non-sibling-2-ref2.html
-== block-non-sibling-2d-dyn.html block-non-sibling-2-ref2.html
-== block-non-sibling-2e-dyn.html block-non-sibling-2-ref2.html
-== block-non-sibling-2f-dyn.html block-non-sibling-2-ref2.html
-== block-non-sibling-3a-dyn.html block-non-sibling-3-ref2.html
-== block-non-sibling-3b-dyn.html block-non-sibling-3-ref2.html
-== block-non-sibling-3c-dyn.html block-non-sibling-3-ref2.html
-== block-non-sibling-3d-dyn.html block-non-sibling-3-ref2.html
-== block-non-sibling-4-dyn.html block-non-sibling-4-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-1a-dyn.html block-non-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-1b-dyn.html block-non-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-1c-dyn.html block-non-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-1d-dyn.html block-non-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-1e-dyn.html block-non-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-1f-dyn.html block-non-sibling-1-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-2a-dyn.html block-non-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-2b-dyn.html block-non-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-2c-dyn.html block-non-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-2d-dyn.html block-non-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-2e-dyn.html block-non-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-2f-dyn.html block-non-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-3a-dyn.html block-non-sibling-3-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-3b-dyn.html block-non-sibling-3-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-3c-dyn.html block-non-sibling-3-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-3d-dyn.html block-non-sibling-3-ref2.html
+random-if(B2G&&browserIsRemote) == block-non-sibling-4-dyn.html block-non-sibling-4-ref2.html
 # The first-child series tests cases where the top margin of a box collapses
 # with the top margin of its parent element.
 # This series is more extensive than the non-sibling series, because
 # various combinations of positive and negative margins are tested.
 == block-first-child-1a.html block-first-child-1-ref.html
 == block-first-child-1b.html block-first-child-1-ref.html
 == block-first-child-1c.html block-first-child-1-ref.html
 == block-first-child-2.html block-first-child-2-ref.html
 == block-first-child-3.html block-first-child-3-ref.html
 == block-first-child-4.html block-first-child-4-ref.html
 == block-first-child-5.html block-first-child-5-ref.html
 == block-first-child-6.html block-first-child-6-ref.html
 == block-first-child-7.html block-first-child-7-ref.html
 == block-first-child-8a.html block-first-child-8-ref.html
 == block-first-child-8b.html block-first-child-8-ref.html
 == block-first-child-8c.html block-first-child-8-ref.html
-== block-first-child-1a-dyn.html block-first-child-1-ref.html
-== block-first-child-1b-dyn.html block-first-child-1-ref.html
-== block-first-child-1c-dyn.html block-first-child-1-ref.html
-== block-first-child-2-dyn.html block-first-child-2-ref.html
-== block-first-child-3-dyn.html block-first-child-3-ref.html
-== block-first-child-4-dyn.html block-first-child-4-ref.html
-== block-first-child-5-dyn.html block-first-child-5-ref.html
-== block-first-child-6-dyn.html block-first-child-6-ref.html
-== block-first-child-7-dyn.html block-first-child-7-ref.html
-== block-first-child-8a-dyn.html block-first-child-8-ref.html
-== block-first-child-8b-dyn.html block-first-child-8-ref.html
-== block-first-child-8c-dyn.html block-first-child-8-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-1a-dyn.html block-first-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-1b-dyn.html block-first-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-1c-dyn.html block-first-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-2-dyn.html block-first-child-2-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-3-dyn.html block-first-child-3-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-4-dyn.html block-first-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-5-dyn.html block-first-child-5-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-6-dyn.html block-first-child-6-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-7-dyn.html block-first-child-7-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-8a-dyn.html block-first-child-8-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-8b-dyn.html block-first-child-8-ref.html
+random-if(B2G&&browserIsRemote) == block-first-child-8c-dyn.html block-first-child-8-ref.html
 # "The bottom margin of an in-flow block box with a 'height' of 'auto'
 #  collapses with its last in-flow block-level child's bottom margin"
 # Note: The block-auto-height-last-child series automatically covers
 # all cases where 'min-height' is '0' and 'max-height' is 'none' as
 # these are the default values of those properties.
 == block-auto-height-last-child-1a.html block-auto-height-last-child-1-ref.html
 == block-auto-height-last-child-1b.html block-auto-height-last-child-1-ref.html
 == block-auto-height-last-child-1c.html block-auto-height-last-child-1-ref.html
@@ -299,28 +299,28 @@ skip-if(B2G) == block-sibling-2-dyn.html
 == block-auto-height-last-child-3.html block-auto-height-last-child-3-ref.html
 == block-auto-height-last-child-4.html block-auto-height-last-child-4-ref.html
 == block-auto-height-last-child-5.html block-auto-height-last-child-5-ref.html
 == block-auto-height-last-child-6.html block-auto-height-last-child-6-ref.html
 == block-auto-height-last-child-7.html block-auto-height-last-child-7-ref.html
 == block-auto-height-last-child-8a.html block-auto-height-last-child-8-ref.html
 == block-auto-height-last-child-8b.html block-auto-height-last-child-8-ref.html
 == block-auto-height-last-child-8c.html block-auto-height-last-child-8-ref.html
-== block-auto-height-last-child-1a-dyn.html block-auto-height-last-child-1-ref.html
-== block-auto-height-last-child-1b-dyn.html block-auto-height-last-child-1-ref.html
-== block-auto-height-last-child-1c-dyn.html block-auto-height-last-child-1-ref.html
-== block-auto-height-last-child-2-dyn.html block-auto-height-last-child-2-ref.html
-== block-auto-height-last-child-3-dyn.html block-auto-height-last-child-3-ref.html
-== block-auto-height-last-child-4-dyn.html block-auto-height-last-child-4-ref.html
-== block-auto-height-last-child-5-dyn.html block-auto-height-last-child-5-ref.html
-== block-auto-height-last-child-6-dyn.html block-auto-height-last-child-6-ref.html
-== block-auto-height-last-child-7-dyn.html block-auto-height-last-child-7-ref.html
-== block-auto-height-last-child-8a-dyn.html block-auto-height-last-child-8-ref.html
-== block-auto-height-last-child-8b-dyn.html block-auto-height-last-child-8-ref.html
-== block-auto-height-last-child-8c-dyn.html block-auto-height-last-child-8-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-1a-dyn.html block-auto-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-1b-dyn.html block-auto-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-1c-dyn.html block-auto-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-2-dyn.html block-auto-height-last-child-2-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-3-dyn.html block-auto-height-last-child-3-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-4-dyn.html block-auto-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-5-dyn.html block-auto-height-last-child-5-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-6-dyn.html block-auto-height-last-child-6-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-7-dyn.html block-auto-height-last-child-7-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-8a-dyn.html block-auto-height-last-child-8-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-8b-dyn.html block-auto-height-last-child-8-ref.html
+random-if(B2G&&browserIsRemote) == block-auto-height-last-child-8c-dyn.html block-auto-height-last-child-8-ref.html
 # The last-child series is an older variant of the
 # block-auto-height-last-child tests.
 == block-last-child-1a.html block-last-child-1-ref.html
 == block-last-child-1b.html block-last-child-1-ref.html
 == block-last-child-1c.html block-last-child-1-ref.html
 == block-last-child-2a.html block-last-child-2-ref.html
 == block-last-child-2b.html block-last-child-2-ref.html
 == block-last-child-2c.html block-last-child-2-ref.html
@@ -388,39 +388,39 @@ fails == block-min-height-last-child-3a.
 == block-min-height-last-child-7b.html block-min-height-last-child-7-ref.html
 == block-min-height-last-child-7c.html block-min-height-last-child-7-ref.html
 == block-min-height-last-child-8a.html block-min-height-last-child-8-ref.html
 == block-min-height-last-child-8b.html block-min-height-last-child-8-ref.html
 == block-min-height-last-child-9a.html block-min-height-last-child-9-ref.html
 == block-min-height-last-child-9b.html block-min-height-last-child-9-ref.html
 == block-min-height-last-child-9c.html block-min-height-last-child-9-ref.html
 fails == block-min-height-last-child-1a-dyn.html block-min-height-last-child-1-ref.html # Bug 616339
-== block-min-height-last-child-1b-dyn.html block-min-height-last-child-1-ref.html
-== block-min-height-last-child-1c-dyn.html block-min-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-1b-dyn.html block-min-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-1c-dyn.html block-min-height-last-child-1-ref.html
 fails == block-min-height-last-child-2a-dyn.html block-min-height-last-child-2-ref.html # Bug 616339
 fails == block-min-height-last-child-2b-dyn.html block-min-height-last-child-2-ref.html # Bug 616339
 fails == block-min-height-last-child-3a-dyn.html block-min-height-last-child-3-ref.html # Bug 616339
-== block-min-height-last-child-3b-dyn.html block-min-height-last-child-3-ref.html
-== block-min-height-last-child-3c-dyn.html block-min-height-last-child-3-ref.html
-== block-min-height-last-child-4a-dyn.html block-min-height-last-child-4-ref.html
-== block-min-height-last-child-4b-dyn.html block-min-height-last-child-4-ref.html
-== block-min-height-last-child-4c-dyn.html block-min-height-last-child-4-ref.html
-== block-min-height-last-child-5a-dyn.html block-min-height-last-child-5-ref.html
-== block-min-height-last-child-5b-dyn.html block-min-height-last-child-5-ref.html
-== block-min-height-last-child-6a-dyn.html block-min-height-last-child-6-ref.html
-== block-min-height-last-child-6b-dyn.html block-min-height-last-child-6-ref.html
-== block-min-height-last-child-6c-dyn.html block-min-height-last-child-6-ref.html
-== block-min-height-last-child-7a-dyn.html block-min-height-last-child-7-ref.html
-== block-min-height-last-child-7b-dyn.html block-min-height-last-child-7-ref.html
-== block-min-height-last-child-7c-dyn.html block-min-height-last-child-7-ref.html
-== block-min-height-last-child-8a-dyn.html block-min-height-last-child-8-ref.html
-== block-min-height-last-child-8b-dyn.html block-min-height-last-child-8-ref.html
-== block-min-height-last-child-9a-dyn.html block-min-height-last-child-9-ref.html
-== block-min-height-last-child-9b-dyn.html block-min-height-last-child-9-ref.html
-== block-min-height-last-child-9c-dyn.html block-min-height-last-child-9-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-3b-dyn.html block-min-height-last-child-3-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-3c-dyn.html block-min-height-last-child-3-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-4a-dyn.html block-min-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-4b-dyn.html block-min-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-4c-dyn.html block-min-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-5a-dyn.html block-min-height-last-child-5-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-5b-dyn.html block-min-height-last-child-5-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-6a-dyn.html block-min-height-last-child-6-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-6b-dyn.html block-min-height-last-child-6-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-6c-dyn.html block-min-height-last-child-6-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-7a-dyn.html block-min-height-last-child-7-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-7b-dyn.html block-min-height-last-child-7-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-7c-dyn.html block-min-height-last-child-7-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-8a-dyn.html block-min-height-last-child-8-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-8b-dyn.html block-min-height-last-child-8-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-9a-dyn.html block-min-height-last-child-9-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-9b-dyn.html block-min-height-last-child-9-ref.html
+random-if(B2G&&browserIsRemote) == block-min-height-last-child-9c-dyn.html block-min-height-last-child-9-ref.html
 # If a parent box's height is 'auto' and its 'max-height' is not 'none'
 # then its bottom margin collapses with its last-child's bottom margin.
 # According to CSS 2.1 §10.7 (Minimum and maximum heights) this is true,
 # even if the descendant's height is bigger than the defined max-height.
 == block-max-height-last-child-1a.html block-max-height-last-child-1-ref.html
 == block-max-height-last-child-1b.html block-max-height-last-child-1-ref.html
 == block-max-height-last-child-1c.html block-max-height-last-child-1-ref.html
 == block-max-height-last-child-2a.html block-max-height-last-child-2-ref.html
@@ -439,40 +439,40 @@ fails == block-min-height-last-child-3a-
 fails == block-max-height-last-child-7a.html block-max-height-last-child-7-ref.html # Bug 616339
 == block-max-height-last-child-7b.html block-max-height-last-child-7-ref.html
 == block-max-height-last-child-7c.html block-max-height-last-child-7-ref.html
 fails == block-max-height-last-child-8a.html block-max-height-last-child-8-ref.html # Bug 616339
 fails == block-max-height-last-child-8b.html block-max-height-last-child-8-ref.html # Bug 616339
 fails == block-max-height-last-child-9a.html block-max-height-last-child-9-ref.html # Bug 616339
 == block-max-height-last-child-9b.html block-max-height-last-child-9-ref.html
 == block-max-height-last-child-9c.html block-max-height-last-child-9-ref.html
-== block-max-height-last-child-1a-dyn.html block-max-height-last-child-1-ref.html
-== block-max-height-last-child-1b-dyn.html block-max-height-last-child-1-ref.html
-== block-max-height-last-child-1c-dyn.html block-max-height-last-child-1-ref.html
-== block-max-height-last-child-2a-dyn.html block-max-height-last-child-2-ref.html
-== block-max-height-last-child-2b-dyn.html block-max-height-last-child-2-ref.html
-== block-max-height-last-child-3a-dyn.html block-max-height-last-child-3-ref.html
-== block-max-height-last-child-3b-dyn.html block-max-height-last-child-3-ref.html
-== block-max-height-last-child-3c-dyn.html block-max-height-last-child-3-ref.html
-== block-max-height-last-child-4a-dyn.html block-max-height-last-child-4-ref.html
-== block-max-height-last-child-4b-dyn.html block-max-height-last-child-4-ref.html
-== block-max-height-last-child-4c-dyn.html block-max-height-last-child-4-ref.html
-== block-max-height-last-child-5a-dyn.html block-max-height-last-child-5-ref.html
-== block-max-height-last-child-5b-dyn.html block-max-height-last-child-5-ref.html
-== block-max-height-last-child-6a-dyn.html block-max-height-last-child-6-ref.html
-== block-max-height-last-child-6b-dyn.html block-max-height-last-child-6-ref.html
-== block-max-height-last-child-6c-dyn.html block-max-height-last-child-6-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-1a-dyn.html block-max-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-1b-dyn.html block-max-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-1c-dyn.html block-max-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-2a-dyn.html block-max-height-last-child-2-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-2b-dyn.html block-max-height-last-child-2-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-3a-dyn.html block-max-height-last-child-3-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-3b-dyn.html block-max-height-last-child-3-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-3c-dyn.html block-max-height-last-child-3-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-4a-dyn.html block-max-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-4b-dyn.html block-max-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-4c-dyn.html block-max-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-5a-dyn.html block-max-height-last-child-5-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-5b-dyn.html block-max-height-last-child-5-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-6a-dyn.html block-max-height-last-child-6-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-6b-dyn.html block-max-height-last-child-6-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-6c-dyn.html block-max-height-last-child-6-ref.html
 fails == block-max-height-last-child-7a-dyn.html block-max-height-last-child-7-ref.html # Bug 616339
-== block-max-height-last-child-7b-dyn.html block-max-height-last-child-7-ref.html
-== block-max-height-last-child-7c-dyn.html block-max-height-last-child-7-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-7b-dyn.html block-max-height-last-child-7-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-7c-dyn.html block-max-height-last-child-7-ref.html
 fails == block-max-height-last-child-8a-dyn.html block-max-height-last-child-8-ref.html # Bug 616339
 fails == block-max-height-last-child-8b-dyn.html block-max-height-last-child-8-ref.html # Bug 616339
 fails == block-max-height-last-child-9a-dyn.html block-max-height-last-child-9-ref.html # Bug 616339
-== block-max-height-last-child-9b-dyn.html block-max-height-last-child-9-ref.html
-== block-max-height-last-child-9c-dyn.html block-max-height-last-child-9-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-9b-dyn.html block-max-height-last-child-9-ref.html
+random-if(B2G&&browserIsRemote) == block-max-height-last-child-9c-dyn.html block-max-height-last-child-9-ref.html
 # If a parent box's height is not 'auto' then its bottom margin
 # never collapses with its last-child's bottom margin,
 # as these margins are not considered 'adjoining'.
 # According to CSS 2.1 §10.7 (Minimum and maximum heights) this is true,
 # even if the value of min- or max-height is used instead.
 == block-fix-height-last-child-1a.html block-fix-height-last-child-1-ref.html
 == block-fix-height-last-child-1b.html block-fix-height-last-child-1-ref.html
 == block-fix-height-last-child-2a.html block-fix-height-last-child-2-ref.html
@@ -482,30 +482,30 @@ fails == block-max-height-last-child-9a-
 == block-fix-height-last-child-4a.html block-fix-height-last-child-4-ref.html
 == block-fix-height-last-child-4b.html block-fix-height-last-child-4-ref.html
 == block-fix-height-last-child-4c.html block-fix-height-last-child-4-ref.html
 == block-fix-height-last-child-4d.html block-fix-height-last-child-4-ref.html
 == block-fix-height-last-child-4e.html block-fix-height-last-child-4-ref.html
 == block-fix-height-last-child-4f.html block-fix-height-last-child-4-ref.html
 == block-fix-height-last-child-4g.html block-fix-height-last-child-4-ref.html
 == block-fix-height-last-child-4h.html block-fix-height-last-child-4-ref.html
-== block-fix-height-last-child-1a-dyn.html block-fix-height-last-child-1-ref.html
-== block-fix-height-last-child-1b-dyn.html block-fix-height-last-child-1-ref.html
-== block-fix-height-last-child-2a-dyn.html block-fix-height-last-child-2-ref.html
-== block-fix-height-last-child-2b-dyn.html block-fix-height-last-child-2-ref.html
-== block-fix-height-last-child-3a-dyn.html block-fix-height-last-child-3-ref.html
-== block-fix-height-last-child-3b-dyn.html block-fix-height-last-child-3-ref.html
-== block-fix-height-last-child-4a-dyn.html block-fix-height-last-child-4-ref.html
-== block-fix-height-last-child-4b-dyn.html block-fix-height-last-child-4-ref.html
-== block-fix-height-last-child-4c-dyn.html block-fix-height-last-child-4-ref.html
-== block-fix-height-last-child-4d-dyn.html block-fix-height-last-child-4-ref.html
-== block-fix-height-last-child-4e-dyn.html block-fix-height-last-child-4-ref.html
-== block-fix-height-last-child-4f-dyn.html block-fix-height-last-child-4-ref.html
-== block-fix-height-last-child-4g-dyn.html block-fix-height-last-child-4-ref.html
-== block-fix-height-last-child-4h-dyn.html block-fix-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-1a-dyn.html block-fix-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-1b-dyn.html block-fix-height-last-child-1-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-2a-dyn.html block-fix-height-last-child-2-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-2b-dyn.html block-fix-height-last-child-2-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-3a-dyn.html block-fix-height-last-child-3-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-3b-dyn.html block-fix-height-last-child-3-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-4a-dyn.html block-fix-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-4b-dyn.html block-fix-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-4c-dyn.html block-fix-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-4d-dyn.html block-fix-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-4e-dyn.html block-fix-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-4f-dyn.html block-fix-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-4g-dyn.html block-fix-height-last-child-4-ref.html
+random-if(B2G&&browserIsRemote) == block-fix-height-last-child-4h-dyn.html block-fix-height-last-child-4-ref.html
 # "Two margins are adjoining if and only if:" [...]
 # "both belong to vertically-adjacent box edges,
 #  i.e. form one of the following pairs:" [...]
 # "top and bottom margins of a box that does not establish a new block
 #  formatting context and that has zero computed 'min-height', zero or
 #  'auto' computed 'height', and no in-flow children"
 # Note that "if the top and bottom margins of a box are adjoining, then it is
 # possible for margins to collapse through it."
@@ -530,36 +530,36 @@ fails == block-max-height-last-child-9a-
 == block-no-content-5b.html block-no-content-5-ref.html
 == block-no-content-6.html block-no-content-6-ref.html
 == block-no-content-7.html block-no-content-7-ref.html
 # "If the top margin of a box with non-zero computed 'min-height' and 'auto'
 #  computed 'height' collapses with the bottom margin of its last in-flow
 #  child, then the child's bottom margin does not collapse with the parent's
 #  bottom margin."
 == block-no-content-8.html block-no-content-8-ref.html
-== block-no-content-1a-dyn.html block-no-content-1-ref.html
-== block-no-content-1b-dyn.html block-no-content-1-ref.html
-== block-no-content-1c-dyn.html block-no-content-1-ref.html
-== block-no-content-1d-dyn.html block-no-content-1-ref.html
-== block-no-content-2a-dyn.html block-no-content-2-ref.html
-== block-no-content-2b-dyn.html block-no-content-2-ref.html
-== block-no-content-2c-dyn.html block-no-content-2-ref.html
-== block-no-content-2d-dyn.html block-no-content-2-ref.html
-== block-no-content-2e-dyn.html block-no-content-2-ref.html
-== block-no-content-3a-dyn.html block-no-content-3-ref.html
-== block-no-content-3b-dyn.html block-no-content-3-ref.html
-== block-no-content-3c-dyn.html block-no-content-3-ref.html
-== block-no-content-4a-dyn.html block-no-content-4-ref.html
-== block-no-content-4b-dyn.html block-no-content-4-ref.html
-== block-no-content-4c-dyn.html block-no-content-4-ref.html
-== block-no-content-5a-dyn.html block-no-content-5-ref.html
-== block-no-content-5b-dyn.html block-no-content-5-ref.html
-== block-no-content-6-dyn.html block-no-content-6-ref.html
-== block-no-content-7-dyn.html block-no-content-7-ref.html
-== block-no-content-8-dyn.html block-no-content-8-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-1a-dyn.html block-no-content-1-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-1b-dyn.html block-no-content-1-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-1c-dyn.html block-no-content-1-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-1d-dyn.html block-no-content-1-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-2a-dyn.html block-no-content-2-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-2b-dyn.html block-no-content-2-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-2c-dyn.html block-no-content-2-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-2d-dyn.html block-no-content-2-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-2e-dyn.html block-no-content-2-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-3a-dyn.html block-no-content-3-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-3b-dyn.html block-no-content-3-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-3c-dyn.html block-no-content-3-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-4a-dyn.html block-no-content-4-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-4b-dyn.html block-no-content-4-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-4c-dyn.html block-no-content-4-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-5a-dyn.html block-no-content-5-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-5b-dyn.html block-no-content-5-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-6-dyn.html block-no-content-6-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-7-dyn.html block-no-content-7-ref.html
+random-if(B2G&&browserIsRemote) == block-no-content-8-dyn.html block-no-content-8-ref.html
 # These tests are similar to the no-content ones, except that some boxes
 # have height: 0; declared on them.
 == block-zero-height-1a.html block-zero-height-1a-ref.html
 == block-zero-height-1b.html block-zero-height-1b-ref.html
 == block-zero-height-2a.html block-zero-height-2a-ref.html
 == block-zero-height-2b.html block-zero-height-2b-ref.html
 == block-zero-height-2c.html block-zero-height-2c-ref.html
 == block-zero-height-3a.html block-zero-height-3-ref.html
@@ -582,44 +582,44 @@ skip-if(B2G) == block-overflow-4.html bl
 == block-overflow-5a.html block-overflow-5-ref.html
 == block-overflow-5a.html block-overflow-5-ref2.html
 == block-overflow-5b.html block-overflow-5-ref.html
 == block-overflow-5b.html block-overflow-5-ref2.html
 == block-overflow-5c.html block-overflow-5c-ref.html
 == block-overflow-5c.html block-overflow-5c-ref2.html
 == block-overflow-5d.html block-overflow-5-ref.html
 == block-overflow-5d.html block-overflow-5-ref2.html
-== block-overflow-1-dyn.html block-overflow-1-ref2.html
-== block-overflow-2-dyn.html block-overflow-2-ref2.html
+random-if(B2G&&browserIsRemote) == block-overflow-1-dyn.html block-overflow-1-ref2.html
+random-if(B2G&&browserIsRemote) == block-overflow-2-dyn.html block-overflow-2-ref2.html
 skip-if(B2G) == block-overflow-3-dyn.html block-overflow-3-ref2.html # bug 773482
 skip-if(B2G) == block-overflow-4-dyn.html block-overflow-4-ref2.html
 == block-overflow-5a-dyn.html block-overflow-5-ref2.html
 == block-overflow-5b-dyn.html block-overflow-5-ref2.html
 == block-overflow-5c-dyn.html block-overflow-5c-ref2.html
 == block-overflow-5d-dyn.html block-overflow-5-ref2.html
 # * 'fieldset' elements, per HTML5 (Candidate Recommendation 6 August 2013):
 # §10.3.13 (The fieldset and legend elements): "The fieldset element is
 # expected to establish a new block formatting context."
-== fieldset-sibling-1a.html fieldset-sibling-1-ref.html
-== fieldset-sibling-1b.html fieldset-sibling-1-ref.html
-== fieldset-sibling-1c.html fieldset-sibling-1-ref.html
-== fieldset-sibling-2a.html fieldset-sibling-2-ref1.html
-== fieldset-sibling-2b.html fieldset-sibling-2-ref1.html
-== fieldset-sibling-2c.html fieldset-sibling-2-ref1.html
-== fieldset-sibling-2a.html fieldset-sibling-2-ref2.html
-== fieldset-sibling-2b.html fieldset-sibling-2-ref2.html
-== fieldset-sibling-2c.html fieldset-sibling-2-ref2.html
-== fieldset-sibling-1a-dyn.html fieldset-sibling-1-ref.html
-== fieldset-sibling-1b-dyn.html fieldset-sibling-1-ref.html
-== fieldset-sibling-1c-dyn.html fieldset-sibling-1-ref.html
-== fieldset-sibling-2a-dyn.html fieldset-sibling-2-ref2.html
-== fieldset-sibling-2b-dyn.html fieldset-sibling-2-ref2.html
-== fieldset-sibling-2c-dyn.html fieldset-sibling-2-ref2.html
-== fieldset-child-1.html fieldset-child-1-ref.html
-== fieldset-child-1-dyn.html fieldset-child-1-ref.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-1a.html fieldset-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-1b.html fieldset-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-1c.html fieldset-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-2a.html fieldset-sibling-2-ref1.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-2b.html fieldset-sibling-2-ref1.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-2c.html fieldset-sibling-2-ref1.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-2a.html fieldset-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-2b.html fieldset-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-2c.html fieldset-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-1a-dyn.html fieldset-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-1b-dyn.html fieldset-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-1c-dyn.html fieldset-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-2a-dyn.html fieldset-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-2b-dyn.html fieldset-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == fieldset-sibling-2c-dyn.html fieldset-sibling-2-ref2.html
+random-if(B2G&&browserIsRemote) == fieldset-child-1.html fieldset-child-1-ref.html
+random-if(B2G&&browserIsRemote) == fieldset-child-1-dyn.html fieldset-child-1-ref.html
 # * Tables, per CSS 2.1 §17.4 (Tables in the visual formatting model):
 # "The table wrapper box establishes a block formatting context."
 # "The table wrapper box is a 'block' box if the table is block-level [...]"
 == table-sibling-1a.html table-sibling-1-ref.html
 != table-sibling-1a.html table-sibling-1-noref.html
 == table-sibling-1b.html table-sibling-1-ref.html
 != table-sibling-1b.html table-sibling-1-noref.html
 == table-sibling-1c.html table-sibling-1-ref.html
@@ -651,43 +651,43 @@ skip-if(B2G) == table-sibling-3-dyn.html
 # of the table wrapper box. They can collapse with the margins of other
 # table-captions, though, if they share the same caption-side.
 == table-caption-1a.html table-caption-1-ref.html
 == table-caption-1b.html table-caption-1-ref.html
 == table-caption-1c.html table-caption-1-ref.html
 == table-caption-2a.html table-caption-2-ref.html
 == table-caption-2b.html table-caption-2-ref.html
 == table-caption-2c.html table-caption-2-ref.html
-== table-caption-1a-dyn.html table-caption-1-ref.html
-== table-caption-1b-dyn.html table-caption-1-ref.html
-== table-caption-1c-dyn.html table-caption-1-ref.html
-== table-caption-2a-dyn.html table-caption-2-ref.html
-== table-caption-2b-dyn.html table-caption-2-ref.html
-== table-caption-2c-dyn.html table-caption-2-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-1a-dyn.html table-caption-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-1b-dyn.html table-caption-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-1c-dyn.html table-caption-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-2a-dyn.html table-caption-2-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-2b-dyn.html table-caption-2-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-2c-dyn.html table-caption-2-ref.html
 # Note: CSS 2.1 suggests that the 'caption-side' values 'top-outside' and
 # 'bottom-outside' will be used in a future CSS Module to restore the
 # CSS 2 definition of 'top' and 'bottom' (which is different from CSS 2.1's).
 # Since Bug #659828 was fixed, 'top-outside' and 'bottom-outside' act as an 
 # alias for the CSS 2.1 values 'top' and 'bottom' respectively.
 == table-caption-top-1.html table-caption-top-1-ref.html
 == table-caption-top-2.html table-caption-top-2-ref.html
 == table-caption-top-outside-1.html table-caption-top-1-ref.html
 == table-caption-top-outside-2.html table-caption-top-1-ref.html
 == table-caption-bottom-1.html table-caption-bottom-1-ref.html
 == table-caption-bottom-2.html table-caption-bottom-2-ref.html
 == table-caption-bottom-outside-1.html table-caption-bottom-1-ref.html
 == table-caption-bottom-outside-2.html table-caption-bottom-1-ref.html
-== table-caption-top-1-dyn.html table-caption-top-1-ref.html
-== table-caption-top-2-dyn.html table-caption-top-1-ref.html
-== table-caption-top-outside-1-dyn.html table-caption-top-1-ref.html
-== table-caption-top-outside-2-dyn.html table-caption-top-2-ref.html
-== table-caption-bottom-1-dyn.html table-caption-bottom-1-ref.html
-== table-caption-bottom-2-dyn.html table-caption-bottom-1-ref.html
-== table-caption-bottom-outside-1-dyn.html table-caption-bottom-1-ref.html
-== table-caption-bottom-outside-2-dyn.html table-caption-bottom-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-top-1-dyn.html table-caption-top-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-top-2-dyn.html table-caption-top-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-top-outside-1-dyn.html table-caption-top-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-top-outside-2-dyn.html table-caption-top-2-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-bottom-1-dyn.html table-caption-bottom-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-bottom-2-dyn.html table-caption-bottom-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-bottom-outside-1-dyn.html table-caption-bottom-1-ref.html
+random-if(B2G&&browserIsRemote) == table-caption-bottom-outside-2-dyn.html table-caption-bottom-1-ref.html
 fails == caption-sibling-1a.html caption-sibling-1-ref.html # Bug 144517
 != caption-sibling-1a.html caption-sibling-1-noref.html
 fails == caption-sibling-1b.html caption-sibling-1-ref.html # Bug 144517
 != caption-sibling-1b.html caption-sibling-1-noref.html
 fails == caption-sibling-1c.html caption-sibling-1-ref.html # Bug 144517
 != caption-sibling-1c.html caption-sibling-1-noref2.html
 fails == caption-sibling-1a-dyn.html caption-sibling-1-ref.html # Bug 144517
 != caption-sibling-1a-dyn.html caption-sibling-1-noref.html
@@ -700,75 +700,75 @@ fails == caption-sibling-2-dyn.html capt
 == caption-child-1.html caption-child-1-ref.html
 == caption-child-1-dyn.html caption-child-1-ref.html
 # * Multi-column elements, per CSS Multi-column Layout Module
 # (Candidate Recommendation 12 April 2011):
 # "A multi-column element establishes a new block formatting context [...]"
 == column-sibling-1a.html column-sibling-1-ref.html
 == column-sibling-1b.html column-sibling-1-ref.html
 == column-sibling-1c.html column-sibling-1-ref.html
-== column-sibling-1a-dyn.html column-sibling-1-ref.html
-== column-sibling-1b-dyn.html column-sibling-1-ref.html
-== column-sibling-1c-dyn.html column-sibling-1-ref.html
-== column-sibling-2a.html column-sibling-2-ref.html
-== column-sibling-2b.html column-sibling-2-ref.html
-== column-sibling-2c.html column-sibling-2-ref.html
-== column-sibling-2a-dyn.html column-sibling-2-ref.html
-== column-sibling-2b-dyn.html column-sibling-2-ref.html
-== column-sibling-2c-dyn.html column-sibling-2-ref.html
-== column-child-1.html column-child-1-ref.html
-== column-child-1-dyn.html column-child-1-ref.html
+random-if(B2G&&browserIsRemote) == column-sibling-1a-dyn.html column-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == column-sibling-1b-dyn.html column-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == column-sibling-1c-dyn.html column-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == column-sibling-2a.html column-sibling-2-ref.html
+random-if(B2G&&browserIsRemote) == column-sibling-2b.html column-sibling-2-ref.html
+random-if(B2G&&browserIsRemote) == column-sibling-2c.html column-sibling-2-ref.html
+random-if(B2G&&browserIsRemote) == column-sibling-2a-dyn.html column-sibling-2-ref.html
+random-if(B2G&&browserIsRemote) == column-sibling-2b-dyn.html column-sibling-2-ref.html
+random-if(B2G&&browserIsRemote) == column-sibling-2c-dyn.html column-sibling-2-ref.html
+random-if(B2G&&browserIsRemote) == column-child-1.html column-child-1-ref.html
+random-if(B2G&&browserIsRemote) == column-child-1-dyn.html column-child-1-ref.html
 # * inline-block boxes
 # "Margins of inline-block boxes do not collapse
 #  (not even with their in-flow children)."
 == inline-block-sibling-1a.html inline-block-sibling-1-ref.html
 == inline-block-sibling-1b.html inline-block-sibling-1-ref.html
 == inline-block-sibling-1c.html inline-block-sibling-1-ref.html
 == inline-block-sibling-2.html inline-block-sibling-2-ref.html
 != inline-block-sibling-2.html inline-block-sibling-2-noref.html
-== inline-block-sibling-1a-dyn.html inline-block-sibling-1-ref.html
-== inline-block-sibling-1b-dyn.html inline-block-sibling-1-ref.html
-== inline-block-sibling-1c-dyn.html inline-block-sibling-1-ref.html
-== inline-block-sibling-2-dyn.html inline-block-sibling-2-ref.html
+random-if(B2G&&browserIsRemote) == inline-block-sibling-1a-dyn.html inline-block-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == inline-block-sibling-1b-dyn.html inline-block-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == inline-block-sibling-1c-dyn.html inline-block-sibling-1-ref.html
+random-if(B2G&&browserIsRemote) == inline-block-sibling-2-dyn.html inline-block-sibling-2-ref.html
 == inline-block-child-1.html inline-block-child-1-ref.html
 == inline-block-child-2.html inline-block-child-2-ref.html
 != inline-block-child-2.html inline-block-child-2-noref.html
 == inline-block-child-3.html inline-block-child-3-ref.html
 == inline-block-child-1-dyn.html inline-block-child-1-ref.html
-== inline-block-child-2-dyn.html inline-block-child-2-ref.html
-== inline-block-child-3-dyn.html inline-block-child-3-ref.html
+random-if(B2G&&browserIsRemote) == inline-block-child-2-dyn.html inline-block-child-2-ref.html
+random-if(B2G&&browserIsRemote) == inline-block-child-3-dyn.html inline-block-child-3-ref.html
 # * absolutely positioned elements
 # "Margins of absolutely positioned boxes do not collapse
 #  (not even with their in-flow children)."
 == block-abs-pos-1.html block-abs-pos-1-ref.html
 == block-abs-pos-2.html block-abs-pos-2-ref.html
 == block-abs-pos-2.html block-abs-pos-2-ref2.html
-== block-abs-pos-1-dyn.html block-abs-pos-1-ref.html
-== block-abs-pos-2-dyn.html block-abs-pos-2-ref2.html
+random-if(B2G&&browserIsRemote) == block-abs-pos-1-dyn.html block-abs-pos-1-ref.html
+random-if(B2G&&browserIsRemote) == block-abs-pos-2-dyn.html block-abs-pos-2-ref2.html
 # * Floats
 # "Margins between a floated box and any other box do not collapse
 #  (not even between a float and its in-flow children)."
 == block-float-1a.html block-float-1a-ref.html
 == block-float-1a.html block-float-1a-ref2.html
 != block-float-1a.html block-float-1a-noref.html
 == block-float-1b.html block-float-1b-ref.html
 == block-float-1b.html block-float-1b-ref2.html
 != block-float-1b.html block-float-1b-noref.html
 == block-float-2a.html block-float-2a-ref.html
 != block-float-2a.html block-float-2a-noref.html
 == block-float-2b.html block-float-2b-ref.html
 != block-float-2b.html block-float-2b-noref.html
 == block-float-3a.html block-float-3a-ref.html
 == block-float-3b.html block-float-3b-ref.html
-== block-float-1a-dyn.html block-float-1a-ref.html
-== block-float-1b-dyn.html block-float-1b-ref.html
-== block-float-2a-dyn.html block-float-2a-ref.html
-== block-float-2b-dyn.html block-float-2b-ref.html
-== block-float-3a-dyn.html block-float-3a-ref.html
-== block-float-3b-dyn.html block-float-3b-ref.html
+random-if(B2G&&browserIsRemote) == block-float-1a-dyn.html block-float-1a-ref.html
+random-if(B2G&&browserIsRemote) == block-float-1b-dyn.html block-float-1b-ref.html
+random-if(B2G&&browserIsRemote) == block-float-2a-dyn.html block-float-2a-ref.html
+random-if(B2G&&browserIsRemote) == block-float-2b-dyn.html block-float-2b-ref.html
+random-if(B2G&&browserIsRemote) == block-float-3a-dyn.html block-float-3a-ref.html
+random-if(B2G&&browserIsRemote) == block-float-3b-dyn.html block-float-3b-ref.html
 # Tests for various cases where clearance is applied and collapsing is
 # prevented or only allows for certain margins.
 fails == block-clear-1a.html block-clear-1a-ref.html # Bug 451791
 fails == block-clear-1b.html block-clear-1b-ref.html # Bug 451791
 == block-clear-2.html block-clear-2-ref.html
 != block-clear-2.html block-clear-2-noref.html
 == block-clear-3a.html block-clear-3-ref-left.html
 == block-clear-3b.html block-clear-3-ref-right.html
@@ -848,17 +848,17 @@ fails == block-clear-7g-left.html block-
 != block-root-1a.html block-root-1a-noref2.html
 == block-root-1b.html block-root-1b-ref.html
 == block-root-1b.html block-root-1b-ref2.html
 == block-html-body-1.html block-html-body-1-ref.html
 == block-html-body-1.html block-html-body-1-ref2.html
 != block-html-body-1.html block-html-body-1-noref.html
 # Some basic tests for margins given in percent and em.
 == block-percent-1.html block-percent-1-ref.html
-== block-percent-1-dyn.html block-percent-1-ref.html
-== block-percent-2.html block-percent-2-ref.html
-== block-percent-2-dyn.html block-percent-2-ref.html
+random-if(B2G&&browserIsRemote) == block-percent-1-dyn.html block-percent-1-ref.html
+random-if(B2G&&browserIsRemote) == block-percent-2.html block-percent-2-ref.html
+random-if(B2G&&browserIsRemote) == block-percent-2-dyn.html block-percent-2-ref.html
 == block-em-length-1.html block-em-length-1-ref.html
-== block-em-length-1-dyn.html block-em-length-1-ref.html
+random-if(B2G&&browserIsRemote) == block-em-length-1-dyn.html block-em-length-1-ref.html
 # Other tests.
 == dynamic-add-text-1.html dynamic-add-text-1-ref.html # Bug 467321
 == scrollable-vertical-margin.html scrollable-vertical-margin-ref.html
 == scrollable-horizontal-margin.html scrollable-horizontal-margin-ref.html
--- a/layout/reftests/marquee/reftest.list
+++ b/layout/reftests/marquee/reftest.list
@@ -1,9 +1,9 @@
-== 166591-dynamic-1.html 166591-dynamic-1-ref.html
+fails-if(B2G&&browserIsRemote) == 166591-dynamic-1.html 166591-dynamic-1-ref.html
 fuzzy-if(Android&&AndroidVersion>=15,8,50) == 336736-1a.html 336736-1-ref.html
 fuzzy-if(Android&&AndroidVersion>=15,8,50) == 336736-1b.html 336736-1-ref.html
 == 406073-1.html 406073-1-ref.html
 == 407016-2.html 407016-2-ref.html
 fuzzy-if(Android&&AndroidVersion>=15,8,220) == 413027-4.html 413027-4-ref.html
 fuzzy-if(Android&&AndroidVersion>=15,8,30) == 425247-1.html 425247-1-ref.html
 fuzzy-if(Android&&AndroidVersion>=15,8,30) == 425247-2.html 425247-2-ref.html
 random == 429849-1.html 429849-1-ref.html # bug 432288
--- a/layout/reftests/mathml/reftest.list
+++ b/layout/reftests/mathml/reftest.list
@@ -3,22 +3,22 @@
 == dir-3.html dir-3-ref.html
 == dir-4.html dir-4-ref.html
 == dir-5.html dir-5-ref.html
 == dir-6.html dir-6-ref.html
 == dir-7.html dir-7-ref.html
 fails == dir-8.html dir-8-ref.html
 fails == dir-9.html dir-9-ref.html # Bug 787215
 == dir-10.html dir-10-ref.html
-== dir-11.html dir-11-ref.html
+random-if(B2G&&browserIsRemote) == dir-11.html dir-11-ref.html
 == displaystyle-1.html displaystyle-1-ref.html
 == displaystyle-2.html displaystyle-2-ref.html
 == displaystyle-3.html displaystyle-3-ref.html
-== displaystyle-4.html displaystyle-4-ref.html
-skip-if(B2G) fails-if(smallScreen&&Android) fuzzy(255,200) == mirror-op-1.html mirror-op-1-ref.html
+random-if(B2G&&browserIsRemote) == displaystyle-4.html displaystyle-4-ref.html
+skip-if(B2G&&browserIsRemote) random-if(smallScreen&&Android) fuzzy(255,200) == mirror-op-1.html mirror-op-1-ref.html
 != mirror-op-2.html mirror-op-2-ref.html
 != mirror-op-3.html mirror-op-3-ref.html
 != mirror-op-4.html mirror-op-4-ref.html
 == dynamic-mi.xhtml dynamic-mi-ref.xhtml
 == mfenced-1.xhtml mfenced-1-ref.xhtml
 == mfenced-2a.xhtml mfenced-2-ref.xhtml
 == mfenced-2b.xhtml mfenced-2-ref.xhtml
 == mfenced-3a.xhtml mfenced-3-ref.xhtml
@@ -64,17 +64,17 @@ skip-if(B2G) == quotes-1.xhtml quotes-1-
 != embellished-op-3-3.html embellished-op-3-3-ref.html
 != embellished-op-3-4.html embellished-op-3-4-ref.html
 != embellished-op-3-5.html embellished-op-3-5-ref.html
 == embellished-op-4-1.html embellished-op-4-1-ref.html
 == embellished-op-4-2.html embellished-op-4-2-ref.html
 == embellished-op-4-3.html embellished-op-4-3-ref.html
 == embellished-op-5-1.html embellished-op-5-ref.html
 == embellished-op-5-2.html embellished-op-5-ref.html
-fails-if(winWidget&&!/^Windows\x20NT\x205\.1/.test(http.oscpu)) == semantics-1.xhtml semantics-1-ref.xhtml # Windows versions with Cambria Math
+random-if(winWidget&&!/^Windows\x20NT\x205\.1/.test(http.oscpu)) == semantics-1.xhtml semantics-1-ref.xhtml # Windows versions with Cambria Math
 == semantics-2.html semantics-2-ref.html
 == semantics-3.html semantics-3-ref.html
 != mathcolor-1.xml mathcolor-1-ref.xml
 != mathcolor-2.xml mathcolor-2-ref.xml
 != mathcolor-3.xml mathcolor-3-ref.xml
 == mathcolor-4.xml mathcolor-4-ref.xml
 != mathbackground-1.xml mathbackground-1-ref.xml
 != mathbackground-2.xml mathbackground-2-ref.xml
@@ -94,19 +94,19 @@ fails-if(winWidget&&!/^Windows\x20NT\x20
 == mspace-1.html mspace-1-ref.html
 == mpadded-1.html mpadded-1-ref.html
 == mpadded-2.html mpadded-2-ref.html
 == mpadded-3.html mpadded-3-ref.html
 == mpadded-4.html mpadded-4-ref.html
 == mpadded-5.html mpadded-5-ref.html
 == mpadded-1-2.html mpadded-1-2-ref.html
 == mpadded-6.html mpadded-6-ref.html
-fails-if(B2G) == mpadded-7.html mpadded-7-ref.html # B2G: slight character width variation
-fails-if(B2G) == mpadded-8.html mpadded-8-ref.html # B2G: slight character width variation
-fails-if(B2G) == mpadded-9.html mpadded-9-ref.html # B2G: slight character width variation
+random-if(B2G&&browserIsRemote) == mpadded-7.html mpadded-7-ref.html # B2G: slight character width variation
+random-if(B2G&&browserIsRemote) == mpadded-8.html mpadded-8-ref.html # B2G: slight character width variation
+random-if(B2G&&browserIsRemote) == mpadded-9.html mpadded-9-ref.html # B2G: slight character width variation
 == math-display.html math-display-ref.html
 == scriptlevel-1.html scriptlevel-1-ref.html
 == scriptlevel-movablelimits-1.html scriptlevel-movablelimits-1-ref.html
 == munderover-align-accent-false.html munderover-align-accent-false-ref.html
 == munderover-align-accent-true.html munderover-align-accent-true-ref.html
 == munder-mover-align-accent-true.html munder-mover-align-accent-true-ref.html
 == munder-mover-align-accent-false.html munder-mover-align-accent-false-ref.html
 == mfrac-linethickness-1.xhtml mfrac-linethickness-1-ref.xhtml
@@ -114,55 +114,55 @@ fails-if(B2G) == mpadded-9.html mpadded-
 == mfrac-linethickness-3.xhtml mfrac-linethickness-3-ref.xhtml
 == mathml-negativespace.html mathml-negativespace-ref.html
 == negative-mspace-1.html negative-mspace-1-ref.html
 != link-1.xhtml link-ref.xhtml
 == munderover-empty-scripts.html munderover-empty-scripts-ref.html
 == positive-namedspace.html positive-namedspace-ref.html
 == mtable-align-whitespace.html mtable-align-whitespace-ref.html
 == mtable-width.html mtable-width-ref.html
-== mtable-rowlines-single-mtable-dynamic.html mtable-rowlines-single-ref.html
-== mtable-rowlines-multi-mtable-dynamic.html mtable-rowlines-multi-ref.html
-== mtable-rowalign-single-mtr.html mtable-rowalign-single-ref.html
-== mtable-rowalign-single-mtr-dynamic.html mtable-rowalign-single-ref.html
-== mtable-rowalign-single-mtable.html mtable-rowalign-single-ref.html
-== mtable-rowalign-single-mtable-dynamic.html mtable-rowalign-single-ref.html
-== mtable-rowalign-multi-mtable.html mtable-rowalign-multi-ref.html
-== mtable-rowalign-multi-mtable-dynamic.html mtable-rowalign-multi-ref.html
-== mtable-columnlines-single-mtable-dynamic.html mtable-columnlines-single-ref.html
-== mtable-columnlines-multi-mtable-dynamic.html mtable-columnlines-multi-ref.html
+random-if(B2G&&browserIsRemote) == mtable-rowlines-single-mtable-dynamic.html mtable-rowlines-single-ref.html
+random-if(B2G&&browserIsRemote) == mtable-rowlines-multi-mtable-dynamic.html mtable-rowlines-multi-ref.html
+random-if(B2G&&browserIsRemote) == mtable-rowalign-single-mtr.html mtable-rowalign-single-ref.html
+random-if(B2G&&browserIsRemote) == mtable-rowalign-single-mtr-dynamic.html mtable-rowalign-single-ref.html
+random-if(B2G&&browserIsRemote) == mtable-rowalign-single-mtable.html mtable-rowalign-single-ref.html
+random-if(B2G&&browserIsRemote) == mtable-rowalign-single-mtable-dynamic.html mtable-rowalign-single-ref.html
+random-if(B2G&&browserIsRemote) == mtable-rowalign-multi-mtable.html mtable-rowalign-multi-ref.html
+random-if(B2G&&browserIsRemote) == mtable-rowalign-multi-mtable-dynamic.html mtable-rowalign-multi-ref.html
+random-if(B2G&&browserIsRemote) == mtable-columnlines-single-mtable-dynamic.html mtable-columnlines-single-ref.html
+random-if(B2G&&browserIsRemote) == mtable-columnlines-multi-mtable-dynamic.html mtable-columnlines-multi-ref.html
 == mtable-columnalign-single-mtr.html mtable-columnalign-single-ref.html
-== mtable-columnalign-single-mtr-dynamic.html mtable-columnalign-single-ref.html
+random-if(B2G&&browserIsRemote) == mtable-columnalign-single-mtr-dynamic.html mtable-columnalign-single-ref.html
 == mtable-columnalign-single-mtable.html mtable-columnalign-single-ref.html
-== mtable-columnalign-single-mtable-dynamic.html mtable-columnalign-single-ref.html
-== mtable-columnalign-multi-mtr.html mtable-columnalign-multi-ref.html
-== mtable-columnalign-multi-mtr-dynamic.html mtable-columnalign-multi-ref.html
-== mtable-columnalign-multi-mtable.html mtable-columnalign-multi-ref.html
-== mtable-columnalign-multi-mtable-dynamic.html mtable-columnalign-multi-ref.html
+random-if(B2G&&browserIsRemote) == mtable-columnalign-single-mtable-dynamic.html mtable-columnalign-single-ref.html
+random-if(B2G&&browserIsRemote) == mtable-columnalign-multi-mtr.html mtable-columnalign-multi-ref.html
+random-if(B2G&&browserIsRemote) == mtable-columnalign-multi-mtr-dynamic.html mtable-columnalign-multi-ref.html
+random-if(B2G&&browserIsRemote) == mtable-columnalign-multi-mtable.html mtable-columnalign-multi-ref.html
+random-if(B2G&&browserIsRemote) == mtable-columnalign-multi-mtable-dynamic.html mtable-columnalign-multi-ref.html
 == maction-selection.html maction-selection-ref.html
 == maction-dynamic-embellished-op.html maction-dynamic-embellished-op-ref.html
 skip-if(B2G) == maction-dynamic-1.html maction-dynamic-1-ref.html # bug 773482
 == maction-dynamic-2.html maction-dynamic-2-ref.html
 == mo-lspace-rspace.html mo-lspace-rspace-ref.html
 == mo-lspace-rspace-2.html mo-lspace-rspace-2-ref.html
 == mo-lspace-rspace-3.html mo-lspace-rspace-3-ref.html
 == mo-lspace-rspace-4.html mo-lspace-rspace-4-ref.html
 == mo-invisibleoperators.html mo-invisibleoperators-ref.html
 == mo-invisibleoperators-2.html mo-invisibleoperators-2-ref.html
 skip-if(B2G) == maction-dynamic-3.html maction-dynamic-3-ref.html # bug 773482
 == whitespace-trim-1.html whitespace-trim-1-ref.html
 == whitespace-trim-2.html whitespace-trim-2-ref.html
 == whitespace-trim-3.html whitespace-trim-3-ref.html
 fails == whitespace-trim-4.html whitespace-trim-4-ref.html # Bug 787215
 == whitespace-trim-5.html whitespace-trim-5-ref.html
-fails-if(winWidget&&!d2d) == opentype-stretchy.html opentype-stretchy-ref.html
+random-if(winWidget&&!d2d) == opentype-stretchy.html opentype-stretchy-ref.html
 == operator-1.xhtml operator-1-ref.xhtml
 == scriptshift-1.xhtml scriptshift-1-ref.xhtml
 == number-size-1.xhtml number-size-1-ref.xhtml
-fails-if(B2G) == multiscripts-1.html multiscripts-1-ref.html # B2G - slight height variation from font metrics
+random-if(B2G&&browserIsRemote) == multiscripts-1.html multiscripts-1-ref.html # B2G - slight height variation from font metrics
 == mathml-mmultiscript-base.html mathml-mmultiscript-base-ref.html
 == mathml-mmultiscript-mprescript.html mathml-mmultiscript-mprescript-ref.html
 != menclose-1a.html menclose-1-ref.html
 != menclose-1b.html menclose-1-ref.html
 != menclose-1c.html menclose-1-ref.html
 != menclose-1d.html menclose-1-ref.html
 != menclose-1e.html menclose-1-ref.html
 != menclose-1f.html menclose-1-ref.html
@@ -175,17 +175,17 @@ fails-if(B2G) == multiscripts-1.html mul
 != menclose-1m.html menclose-1-ref.html
 != menclose-1n.html menclose-1-ref.html
 != menclose-1o.html menclose-1-ref.html
 != menclose-1p.html menclose-1-ref.html
 != menclose-1q.html menclose-1-ref.html
 fails-if(B2G) == menclose-2-actuarial.html menclose-2-actuarial-ref.html # B2G slight thickness variation
 == menclose-2-bottom.html menclose-2-bottom-ref.html
 fails-if(B2G) == menclose-2-box.html menclose-2-box-ref.html # B2G slight thickness variation
-== menclose-2-circle.html menclose-2-circle-ref.html
+fails-if(B2G) == menclose-2-circle.html menclose-2-circle-ref.html
 == menclose-2-downdiagonalstrike.html menclose-2-downdiagonalstrike-ref.html
 == menclose-2-horizontalstrike.html menclose-2-horizontalstrike-ref.html
 fails-if(B2G) == menclose-2-left.html menclose-2-left-ref.html # B2G slight thickness variation
 == menclose-2-longdiv.html menclose-2-longdiv-ref.html
 == menclose-2-right.html menclose-2-right-ref.html
 fails-if(B2G) == menclose-2-roundedbox.html menclose-2-roundedbox-ref.html # B2G slight thickness variation
 fails-if(B2G) == menclose-2-top.html menclose-2-top-ref.html # B2G slight thickness variation
 fails-if(B2G) == menclose-2-updiagonalarrow.html menclose-2-updiagonalarrow-ref.html # B2G slight thickness variation
@@ -195,71 +195,71 @@ fails-if(B2G) == menclose-2-roundedbox.h
 == menclose-2-phasorangle.html menclose-2-phasorangle-ref.html
 == menclose-3-box.html menclose-3-box-ref.html
 == menclose-3-madruwb.html menclose-3-madruwb-ref.html
 fails-if(B2G||Android||OSX==10.6) == menclose-3-radical.html menclose-3-radical-ref.html # Bug 973917
 == menclose-3-default.html menclose-3-default-ref.html
 == menclose-3-invalid.html menclose-3-invalid-ref.html
 == menclose-3-multiple.html menclose-3-multiple-ref.html
 == menclose-3-unknown.html menclose-3-unknown.html
-== menclose-4.html data:text/html,<body>Pass
-== menclose-5-actuarial.html menclose-5-actuarial-ref.html
-== menclose-5-bottom.html menclose-5-bottom-ref.html
-== menclose-5-box.html menclose-5-box-ref.html
-fuzzy-if(OSX,1,100) == menclose-5-circle.html menclose-5-circle-ref.html
-== menclose-5-downdiagonalstrike.html menclose-5-downdiagonalstrike-ref.html
-== menclose-5-horizontalstrike.html menclose-5-horizontalstrike-ref.html
-== menclose-5-left.html menclose-5-left-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-4.html data:text/html,<body>Pass
+fails-if(B2G&&browserIsRemote) == menclose-5-actuarial.html menclose-5-actuarial-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-bottom.html menclose-5-bottom-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-box.html menclose-5-box-ref.html
+fuzzy-if(OSX,1,100) fails-if(B2G&&browserIsRemote) == menclose-5-circle.html menclose-5-circle-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-downdiagonalstrike.html menclose-5-downdiagonalstrike-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-horizontalstrike.html menclose-5-horizontalstrike-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-left.html menclose-5-left-ref.html
 == menclose-5-longdiv.html menclose-5-longdiv-ref.html
-== menclose-5-madruwb.html menclose-5-madruwb-ref.html
-== menclose-5-radical.html menclose-5-radical-ref.html
-== menclose-5-right.html menclose-5-right-ref.html
-== menclose-5-roundedbox.html menclose-5-roundedbox-ref.html
-== menclose-5-top.html menclose-5-top-ref.html
-== menclose-5-updiagonalarrow.html menclose-5-updiagonalarrow-ref.html
-== menclose-5-updiagonalstrike.html menclose-5-updiagonalstrike-ref.html
-== menclose-5-verticalstrike.html menclose-5-verticalstrike-ref.html
-== menclose-5-phasorangle.html menclose-5-phasorangle-ref.html
-== menclose-6-actuarial.html menclose-6-ref.html
-== menclose-6-bottom.html menclose-6-ref.html
-== menclose-6-box.html menclose-6-ref.html
-== menclose-6-circle.html menclose-6-ref.html
-== menclose-6-downdiagonalstrike.html menclose-6-ref.html
-== menclose-6-horizontalstrike.html menclose-6-ref.html
-== menclose-6-left.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-madruwb.html menclose-5-madruwb-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-radical.html menclose-5-radical-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-right.html menclose-5-right-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-roundedbox.html menclose-5-roundedbox-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-top.html menclose-5-top-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-updiagonalarrow.html menclose-5-updiagonalarrow-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-updiagonalstrike.html menclose-5-updiagonalstrike-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-verticalstrike.html menclose-5-verticalstrike-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-5-phasorangle.html menclose-5-phasorangle-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-actuarial.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-bottom.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-box.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-circle.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-downdiagonalstrike.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-horizontalstrike.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-left.html menclose-6-ref.html
 == menclose-6-longdiv.html menclose-6-ref.html
-== menclose-6-madruwb.html menclose-6-ref.html
-== menclose-6-radical.html menclose-6-ref.html
-== menclose-6-right.html menclose-6-ref.html
-== menclose-6-roundedbox.html menclose-6-ref.html
-== menclose-6-top.html menclose-6-ref.html
-== menclose-6-updiagonalarrow.html menclose-6-ref.html
-== menclose-6-updiagonalstrike.html menclose-6-ref.html
-== menclose-6-verticalstrike.html menclose-6-ref.html
-== menclose-6-phasorangle.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-madruwb.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-radical.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-right.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-roundedbox.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-top.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-updiagonalarrow.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-updiagonalstrike.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-verticalstrike.html menclose-6-ref.html
+fails-if(B2G&&browserIsRemote) == menclose-6-phasorangle.html menclose-6-ref.html
 == mmultiscript-align.html mmultiscript-align-ref.html
 fails-if(winWidget&&!/^Windows\x20NT\x205\.1/.test(http.oscpu)) == subscript-italic-correction.html subscript-italic-correction-ref.html # Windows versions with Cambria Math, bug 961482
 fails-if(B2G||Android||/^Windows\x20NT\x205\.1/.test(http.oscpu)||OSX==10.6) == mathvariant-1a.html mathvariant-1a-ref.html # Bug 1010679
 fails-if(B2G||Android||/^Windows\x20NT\x205\.1/.test(http.oscpu)||OSX==10.6) == mathvariant-1b.html mathvariant-1b-ref.html # Bug 1010679
 fails-if(B2G||Android||/^Windows\x20NT\x205\.1/.test(http.oscpu)||OSX==10.6) == mathvariant-1c.html mathvariant-1c-ref.html # Bug 1010679
 == mathvariant-1d.html mathvariant-1d-ref.html
 fails-if(B2G||Android||/^Windows\x20NT\x205\.1/.test(http.oscpu)||OSX) == mathvariant-2.html mathvariant-2-ref.html # Bugs 1010678, 1010679
 == mathvariant-3.html mathvariant-3-ref.html
 == mathvariant-4.html mathvariant-4-ref.html
-== mathvariant-5.html mathvariant-5-ref.html
+random-if(B2G&&browserIsRemote) == mathvariant-5.html mathvariant-5-ref.html
 == ssty-1.html ssty-1-ref.html
 == ssty-2.html ssty-2-ref.html
 == ssty-3.html ssty-3-ref.html
-== ssty-4.html ssty-4-ref.html
+random-if(B2G&&browserIsRemote) == ssty-4.html ssty-4-ref.html
 == mathscript-1.html mathscript-1-ref.html
 == mathscript-2.html mathscript-2-ref.html
-== mo-accent-dynamic.html mo-accent-dynamic-ref.html
-== mo-movablelimits-dynamic.html mo-movablelimits-dynamic-ref.html
-== munderover-accent-dynamic.html munderover-accent-dynamic-ref.html
-== munderover-accentunder-dynamic.html munderover-accentunder-dynamic-ref.html
+random-if(B2G&&browserIsRemote) == mo-accent-dynamic.html mo-accent-dynamic-ref.html
+random-if(B2G&&browserIsRemote) == mo-movablelimits-dynamic.html mo-movablelimits-dynamic-ref.html
+random-if(B2G&&browserIsRemote) == munderover-accent-dynamic.html munderover-accent-dynamic-ref.html
+random-if(B2G&&browserIsRemote) == munderover-accentunder-dynamic.html munderover-accentunder-dynamic-ref.html
 == columnlines-1a.html columnlines-1-ref.html
 != columnlines-1b.html columnlines-1-ref.html
 != columnlines-1c.html columnlines-1-ref.html
 == columnlines-2a.html columnlines-2-ref.html
 == columnlines-2b.html columnlines-2-ref.html
 != columnlines-3-1.html columnlines-3-1-ref.html
 == columnlines-3-2.html columnlines-3-2-ref.html
 == rowlines-1a.html rowlines-1-ref.html
@@ -285,24 +285,24 @@ fails-if(B2G||Android||/^Windows\x20NT\x
 == mfrac-A-1.html mfrac-A-1-ref.html
 == mfrac-A-2.html mfrac-A-2-ref.html
 == mfrac-A-3.html mfrac-A-3-ref.html
 == mfrac-A-4.html mfrac-A-4-ref.html
 == mfrac-A-5.html mfrac-A-5-ref.html
 == mfrac-A-6.html mfrac-A-6-ref.html
 == mfrac-A-7.html mfrac-A-7-ref.html
 == mfrac-A-8.html mfrac-A-8-ref.html
-== mfrac-B-1.html mfrac-B-1-ref.html
-== mfrac-B-2.html mfrac-B-2-3-ref.html
-== mfrac-B-3.html mfrac-B-2-3-ref.html
-== mfrac-B-4.html mfrac-B-4-5-ref.html
-== mfrac-B-5.html mfrac-B-4-5-ref.html
-== mfrac-B-6.html mfrac-B-6-7-ref.html
-== mfrac-B-7.html mfrac-B-6-7-ref.html
-fuzzy-if(OSX,1,100) == mfrac-C-1.html mfrac-C-1-ref.html
-== mfrac-C-2.html mfrac-C-2-ref.html
-== mfrac-C-3.html mfrac-C-3-ref.html
-== mfrac-C-4.html mfrac-C-4-ref.html
-fuzzy-if(OSX,1,100) == mfrac-D-1.html mfrac-D-1-ref.html
-== mfrac-D-2.html mfrac-D-2-ref.html
-== mfrac-D-3.html mfrac-D-3-ref.html
-== mfrac-D-4.html mfrac-D-4-ref.html
-== mfrac-E-1.html mfrac-E-1-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-B-1.html mfrac-B-1-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-B-2.html mfrac-B-2-3-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-B-3.html mfrac-B-2-3-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-B-4.html mfrac-B-4-5-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-B-5.html mfrac-B-4-5-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-B-6.html mfrac-B-6-7-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-B-7.html mfrac-B-6-7-ref.html
+fuzzy-if(OSX,1,100) random-if(B2G&&browserIsRemote) == mfrac-C-1.html mfrac-C-1-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-C-2.html mfrac-C-2-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-C-3.html mfrac-C-3-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-C-4.html mfrac-C-4-ref.html
+fuzzy-if(OSX,1,100) random-if(B2G&&browserIsRemote) == mfrac-D-1.html mfrac-D-1-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-D-2.html mfrac-D-2-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-D-3.html mfrac-D-3-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-D-4.html mfrac-D-4-ref.html
+random-if(B2G&&browserIsRemote) == mfrac-E-1.html mfrac-E-1-ref.html
--- a/layout/reftests/object/reftest.list
+++ b/layout/reftests/object/reftest.list
@@ -49,9 +49,9 @@ fails == svg-with-type.html svg-with-typ
 #
 # XXX missing test 033 from http://biesi.damowmow.com/object/ here; not sure
 #     how nullplugin testing should work
 #
 #
 # XXX missing test 034 from http://biesi.damowmow.com/object/ here; would
 #     need to require Flash on the test machine to run them
 #
-== malformed-uri.html malformed-uri-ref.html
+random-if(B2G&&browserIsRemote) == malformed-uri.html malformed-uri-ref.html
--- a/layout/reftests/position-dynamic-changes/horizontal/reftest_border_abspos.list
+++ b/layout/reftests/position-dynamic-changes/horizontal/reftest_border_abspos.list
@@ -1,18 +1,17 @@
 # Please see the comment at the beginning of reftest.list
-
-== leftN-widthA-rightA.html?border_abspos leftN-widthA-rightA-ref.html?border_abspos
-== leftN-widthA-rightA-2.html?border_abspos leftN-widthA-rightA-2-ref.html?border_abspos
-== leftN-widthA-rightN.html?border_abspos leftN-widthA-rightN-ref.html?border_abspos
-== leftN-widthA-rightN-2.html?border_abspos leftN-widthA-rightN-2-ref.html?border_abspos
-== leftA-widthN-rightA.html?border_abspos leftA-widthN-rightA-ref.html?border_abspos
-== leftN-widthN-rightA.html?border_abspos leftN-widthN-rightA-ref.html?border_abspos
-== leftA-widthN-rightN.html?border_abspos leftA-widthN-rightN-ref.html?border_abspos
-== leftA-widthA-rightN.html?border_abspos leftA-widthA-rightN-ref.html?border_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA.html?border_abspos leftN-widthA-rightA-ref.html?border_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA-2.html?border_abspos leftN-widthA-rightA-2-ref.html?border_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN.html?border_abspos leftN-widthA-rightN-ref.html?border_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN-2.html?border_abspos leftN-widthA-rightN-2-ref.html?border_abspos
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightA.html?border_abspos leftA-widthN-rightA-ref.html?border_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthN-rightA.html?border_abspos leftN-widthN-rightA-ref.html?border_abspos
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightN.html?border_abspos leftA-widthN-rightN-ref.html?border_abspos
+fails-if(B2G&&browserIsRemote) == leftA-widthA-rightN.html?border_abspos leftA-widthA-rightN-ref.html?border_abspos
 == toauto-leftN-widthA-rightA.html?border_abspos toauto-leftN-widthA-rightA-ref.html?border_abspos
 == toauto-leftN-widthA-rightA-2.html?border_abspos toauto-leftN-widthA-rightA-2-ref.html?border_abspos
 == toauto-leftN-widthA-rightN.html?border_abspos toauto-leftN-widthA-rightN-ref.html?border_abspos
 == toauto-leftN-widthA-rightN-2.html?border_abspos toauto-leftN-widthA-rightN-2-ref.html?border_abspos
 == toauto-leftA-widthN-rightA.html?border_abspos toauto-leftA-widthN-rightA-ref.html?border_abspos
 == toauto-leftN-widthN-rightA.html?border_abspos toauto-leftN-widthN-rightA-ref.html?border_abspos
 == toauto-leftA-widthN-rightN.html?border_abspos toauto-leftA-widthN-rightN-ref.html?border_abspos
 == toauto-leftA-widthA-rightN.html?border_abspos toauto-leftA-widthA-rightN-ref.html?border_abspos
--- a/layout/reftests/position-dynamic-changes/horizontal/reftest_border_parent.list
+++ b/layout/reftests/position-dynamic-changes/horizontal/reftest_border_parent.list
@@ -1,18 +1,18 @@
 # Please see the comment at the beginning of reftest.list
 
-== leftN-widthA-rightA.html?border_parent leftN-widthA-rightA-ref.html?border_parent
-== leftN-widthA-rightA-2.html?border_parent leftN-widthA-rightA-2-ref.html?border_parent
-== leftN-widthA-rightN.html?border_parent leftN-widthA-rightN-ref.html?border_parent
-== leftN-widthA-rightN-2.html?border_parent leftN-widthA-rightN-2-ref.html?border_parent
-== leftA-widthN-rightA.html?border_parent leftA-widthN-rightA-ref.html?border_parent
-== leftN-widthN-rightA.html?border_parent leftN-widthN-rightA-ref.html?border_parent
-== leftA-widthN-rightN.html?border_parent leftA-widthN-rightN-ref.html?border_parent
-== leftA-widthA-rightN.html?border_parent leftA-widthA-rightN-ref.html?border_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA.html?border_parent leftN-widthA-rightA-ref.html?border_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA-2.html?border_parent leftN-widthA-rightA-2-ref.html?border_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN.html?border_parent leftN-widthA-rightN-ref.html?border_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN-2.html?border_parent leftN-widthA-rightN-2-ref.html?border_parent
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightA.html?border_parent leftA-widthN-rightA-ref.html?border_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthN-rightA.html?border_parent leftN-widthN-rightA-ref.html?border_parent
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightN.html?border_parent leftA-widthN-rightN-ref.html?border_parent
+fails-if(B2G&&browserIsRemote) == leftA-widthA-rightN.html?border_parent leftA-widthA-rightN-ref.html?border_parent
 == toauto-leftN-widthA-rightA.html?border_parent toauto-leftN-widthA-rightA-ref.html?border_parent
 == toauto-leftN-widthA-rightA-2.html?border_parent toauto-leftN-widthA-rightA-2-ref.html?border_parent
 == toauto-leftN-widthA-rightN.html?border_parent toauto-leftN-widthA-rightN-ref.html?border_parent
 == toauto-leftN-widthA-rightN-2.html?border_parent toauto-leftN-widthA-rightN-2-ref.html?border_parent
 == toauto-leftA-widthN-rightA.html?border_parent toauto-leftA-widthN-rightA-ref.html?border_parent
 == toauto-leftN-widthN-rightA.html?border_parent toauto-leftN-widthN-rightA-ref.html?border_parent
 == toauto-leftA-widthN-rightN.html?border_parent toauto-leftA-widthN-rightN-ref.html?border_parent
 == toauto-leftA-widthA-rightN.html?border_parent toauto-leftA-widthA-rightN-ref.html?border_parent
--- a/layout/reftests/position-dynamic-changes/horizontal/reftest_margin_abspos.list
+++ b/layout/reftests/position-dynamic-changes/horizontal/reftest_margin_abspos.list
@@ -1,18 +1,18 @@
 # Please see the comment at the beginning of reftest.list
 
-== leftN-widthA-rightA.html?margin_abspos leftN-widthA-rightA-ref.html?margin_abspos
-== leftN-widthA-rightA-2.html?margin_abspos leftN-widthA-rightA-2-ref.html?margin_abspos
-== leftN-widthA-rightN.html?margin_abspos leftN-widthA-rightN-ref.html?margin_abspos
-== leftN-widthA-rightN-2.html?margin_abspos leftN-widthA-rightN-2-ref.html?margin_abspos
-== leftA-widthN-rightA.html?margin_abspos leftA-widthN-rightA-ref.html?margin_abspos
-== leftN-widthN-rightA.html?margin_abspos leftN-widthN-rightA-ref.html?margin_abspos
-== leftA-widthN-rightN.html?margin_abspos leftA-widthN-rightN-ref.html?margin_abspos
-== leftA-widthA-rightN.html?margin_abspos leftA-widthA-rightN-ref.html?margin_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA.html?margin_abspos leftN-widthA-rightA-ref.html?margin_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA-2.html?margin_abspos leftN-widthA-rightA-2-ref.html?margin_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN.html?margin_abspos leftN-widthA-rightN-ref.html?margin_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN-2.html?margin_abspos leftN-widthA-rightN-2-ref.html?margin_abspos
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightA.html?margin_abspos leftA-widthN-rightA-ref.html?margin_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthN-rightA.html?margin_abspos leftN-widthN-rightA-ref.html?margin_abspos
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightN.html?margin_abspos leftA-widthN-rightN-ref.html?margin_abspos
+fails-if(B2G&&browserIsRemote) == leftA-widthA-rightN.html?margin_abspos leftA-widthA-rightN-ref.html?margin_abspos
 == toauto-leftN-widthA-rightA.html?margin_abspos toauto-leftN-widthA-rightA-ref.html?margin_abspos
 == toauto-leftN-widthA-rightA-2.html?margin_abspos toauto-leftN-widthA-rightA-2-ref.html?margin_abspos
 == toauto-leftN-widthA-rightN.html?margin_abspos toauto-leftN-widthA-rightN-ref.html?margin_abspos
 == toauto-leftN-widthA-rightN-2.html?margin_abspos toauto-leftN-widthA-rightN-2-ref.html?margin_abspos
 == toauto-leftA-widthN-rightA.html?margin_abspos toauto-leftA-widthN-rightA-ref.html?margin_abspos
 == toauto-leftN-widthN-rightA.html?margin_abspos toauto-leftN-widthN-rightA-ref.html?margin_abspos
 == toauto-leftA-widthN-rightN.html?margin_abspos toauto-leftA-widthN-rightN-ref.html?margin_abspos
 == toauto-leftA-widthA-rightN.html?margin_abspos toauto-leftA-widthA-rightN-ref.html?margin_abspos
--- a/layout/reftests/position-dynamic-changes/horizontal/reftest_margin_parent.list
+++ b/layout/reftests/position-dynamic-changes/horizontal/reftest_margin_parent.list
@@ -1,18 +1,18 @@
 # Please see the comment at the beginning of reftest.list
 
-== leftN-widthA-rightA.html?margin_parent leftN-widthA-rightA-ref.html?margin_parent
-== leftN-widthA-rightA-2.html?margin_parent leftN-widthA-rightA-2-ref.html?margin_parent
-== leftN-widthA-rightN.html?margin_parent leftN-widthA-rightN-ref.html?margin_parent
-== leftN-widthA-rightN-2.html?margin_parent leftN-widthA-rightN-2-ref.html?margin_parent
-== leftA-widthN-rightA.html?margin_parent leftA-widthN-rightA-ref.html?margin_parent
-== leftN-widthN-rightA.html?margin_parent leftN-widthN-rightA-ref.html?margin_parent
-== leftA-widthN-rightN.html?margin_parent leftA-widthN-rightN-ref.html?margin_parent
-== leftA-widthA-rightN.html?margin_parent leftA-widthA-rightN-ref.html?margin_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA.html?margin_parent leftN-widthA-rightA-ref.html?margin_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA-2.html?margin_parent leftN-widthA-rightA-2-ref.html?margin_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN.html?margin_parent leftN-widthA-rightN-ref.html?margin_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN-2.html?margin_parent leftN-widthA-rightN-2-ref.html?margin_parent
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightA.html?margin_parent leftA-widthN-rightA-ref.html?margin_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthN-rightA.html?margin_parent leftN-widthN-rightA-ref.html?margin_parent
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightN.html?margin_parent leftA-widthN-rightN-ref.html?margin_parent
+fails-if(B2G&&browserIsRemote) == leftA-widthA-rightN.html?margin_parent leftA-widthA-rightN-ref.html?margin_parent
 == toauto-leftN-widthA-rightA.html?margin_parent toauto-leftN-widthA-rightA-ref.html?margin_parent
 == toauto-leftN-widthA-rightA-2.html?margin_parent toauto-leftN-widthA-rightA-2-ref.html?margin_parent
 == toauto-leftN-widthA-rightN.html?margin_parent toauto-leftN-widthA-rightN-ref.html?margin_parent
 == toauto-leftN-widthA-rightN-2.html?margin_parent toauto-leftN-widthA-rightN-2-ref.html?margin_parent
 == toauto-leftA-widthN-rightA.html?margin_parent toauto-leftA-widthN-rightA-ref.html?margin_parent
 == toauto-leftN-widthN-rightA.html?margin_parent toauto-leftN-widthN-rightA-ref.html?margin_parent
 == toauto-leftA-widthN-rightN.html?margin_parent toauto-leftA-widthN-rightN-ref.html?margin_parent
 == toauto-leftA-widthA-rightN.html?margin_parent toauto-leftA-widthA-rightN-ref.html?margin_parent
--- a/layout/reftests/position-dynamic-changes/horizontal/reftest_padding_abspos.list
+++ b/layout/reftests/position-dynamic-changes/horizontal/reftest_padding_abspos.list
@@ -1,18 +1,18 @@
 # Please see the comment at the beginning of reftest.list
 
-== leftN-widthA-rightA.html?padding_abspos leftN-widthA-rightA-ref.html?padding_abspos
-== leftN-widthA-rightA-2.html?padding_abspos leftN-widthA-rightA-2-ref.html?padding_abspos
-== leftN-widthA-rightN.html?padding_abspos leftN-widthA-rightN-ref.html?padding_abspos
-== leftN-widthA-rightN-2.html?padding_abspos leftN-widthA-rightN-2-ref.html?padding_abspos
-== leftA-widthN-rightA.html?padding_abspos leftA-widthN-rightA-ref.html?padding_abspos
-== leftN-widthN-rightA.html?padding_abspos leftN-widthN-rightA-ref.html?padding_abspos
-== leftA-widthN-rightN.html?padding_abspos leftA-widthN-rightN-ref.html?padding_abspos
-== leftA-widthA-rightN.html?padding_abspos leftA-widthA-rightN-ref.html?padding_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA.html?padding_abspos leftN-widthA-rightA-ref.html?padding_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA-2.html?padding_abspos leftN-widthA-rightA-2-ref.html?padding_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN.html?padding_abspos leftN-widthA-rightN-ref.html?padding_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN-2.html?padding_abspos leftN-widthA-rightN-2-ref.html?padding_abspos
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightA.html?padding_abspos leftA-widthN-rightA-ref.html?padding_abspos
+fails-if(B2G&&browserIsRemote) == leftN-widthN-rightA.html?padding_abspos leftN-widthN-rightA-ref.html?padding_abspos
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightN.html?padding_abspos leftA-widthN-rightN-ref.html?padding_abspos
+fails-if(B2G&&browserIsRemote) == leftA-widthA-rightN.html?padding_abspos leftA-widthA-rightN-ref.html?padding_abspos
 == toauto-leftN-widthA-rightA.html?padding_abspos toauto-leftN-widthA-rightA-ref.html?padding_abspos
 == toauto-leftN-widthA-rightA-2.html?padding_abspos toauto-leftN-widthA-rightA-2-ref.html?padding_abspos
 == toauto-leftN-widthA-rightN.html?padding_abspos toauto-leftN-widthA-rightN-ref.html?padding_abspos
 == toauto-leftN-widthA-rightN-2.html?padding_abspos toauto-leftN-widthA-rightN-2-ref.html?padding_abspos
 == toauto-leftA-widthN-rightA.html?padding_abspos toauto-leftA-widthN-rightA-ref.html?padding_abspos
 == toauto-leftN-widthN-rightA.html?padding_abspos toauto-leftN-widthN-rightA-ref.html?padding_abspos
 == toauto-leftA-widthN-rightN.html?padding_abspos toauto-leftA-widthN-rightN-ref.html?padding_abspos
 == toauto-leftA-widthA-rightN.html?padding_abspos toauto-leftA-widthA-rightN-ref.html?padding_abspos
--- a/layout/reftests/position-dynamic-changes/horizontal/reftest_padding_parent.list
+++ b/layout/reftests/position-dynamic-changes/horizontal/reftest_padding_parent.list
@@ -1,18 +1,18 @@
 # Please see the comment at the beginning of reftest.list
 
-== leftN-widthA-rightA.html?padding_parent leftN-widthA-rightA-ref.html?padding_parent
-== leftN-widthA-rightA-2.html?padding_parent leftN-widthA-rightA-2-ref.html?padding_parent
-== leftN-widthA-rightN.html?padding_parent leftN-widthA-rightN-ref.html?padding_parent
-== leftN-widthA-rightN-2.html?padding_parent leftN-widthA-rightN-2-ref.html?padding_parent
-== leftA-widthN-rightA.html?padding_parent leftA-widthN-rightA-ref.html?padding_parent
-== leftN-widthN-rightA.html?padding_parent leftN-widthN-rightA-ref.html?padding_parent
-== leftA-widthN-rightN.html?padding_parent leftA-widthN-rightN-ref.html?padding_parent
-== leftA-widthA-rightN.html?padding_parent leftA-widthA-rightN-ref.html?padding_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA.html?padding_parent leftN-widthA-rightA-ref.html?padding_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA-2.html?padding_parent leftN-widthA-rightA-2-ref.html?padding_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN.html?padding_parent leftN-widthA-rightN-ref.html?padding_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN-2.html?padding_parent leftN-widthA-rightN-2-ref.html?padding_parent
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightA.html?padding_parent leftA-widthN-rightA-ref.html?padding_parent
+fails-if(B2G&&browserIsRemote) == leftN-widthN-rightA.html?padding_parent leftN-widthN-rightA-ref.html?padding_parent
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightN.html?padding_parent leftA-widthN-rightN-ref.html?padding_parent
+fails-if(B2G&&browserIsRemote) == leftA-widthA-rightN.html?padding_parent leftA-widthA-rightN-ref.html?padding_parent
 == toauto-leftN-widthA-rightA.html?padding_parent toauto-leftN-widthA-rightA-ref.html?padding_parent
 == toauto-leftN-widthA-rightA-2.html?padding_parent toauto-leftN-widthA-rightA-2-ref.html?padding_parent
 == toauto-leftN-widthA-rightN.html?padding_parent toauto-leftN-widthA-rightN-ref.html?padding_parent
 == toauto-leftN-widthA-rightN-2.html?padding_parent toauto-leftN-widthA-rightN-2-ref.html?padding_parent
 == toauto-leftA-widthN-rightA.html?padding_parent toauto-leftA-widthN-rightA-ref.html?padding_parent
 == toauto-leftN-widthN-rightA.html?padding_parent toauto-leftN-widthN-rightA-ref.html?padding_parent
 == toauto-leftA-widthN-rightN.html?padding_parent toauto-leftA-widthN-rightN-ref.html?padding_parent
 == toauto-leftA-widthA-rightN.html?padding_parent toauto-leftA-widthA-rightN-ref.html?padding_parent
--- a/layout/reftests/position-dynamic-changes/horizontal/reftest_plain.list
+++ b/layout/reftests/position-dynamic-changes/horizontal/reftest_plain.list
@@ -1,18 +1,18 @@
 # Please see the comment at the beginning of reftest.list
 
-== leftN-widthA-rightA.html leftN-widthA-rightA-ref.html
-== leftN-widthA-rightA-2.html leftN-widthA-rightA-2-ref.html
-== leftN-widthA-rightN.html leftN-widthA-rightN-ref.html
-== leftN-widthA-rightN-2.html leftN-widthA-rightN-2-ref.html
-== leftA-widthN-rightA.html leftA-widthN-rightA-ref.html
-== leftN-widthN-rightA.html leftN-widthN-rightA-ref.html
-== leftA-widthN-rightN.html leftA-widthN-rightN-ref.html
-== leftA-widthA-rightN.html leftA-widthA-rightN-ref.html
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA.html leftN-widthA-rightA-ref.html
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightA-2.html leftN-widthA-rightA-2-ref.html
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN.html leftN-widthA-rightN-ref.html
+fails-if(B2G&&browserIsRemote) == leftN-widthA-rightN-2.html leftN-widthA-rightN-2-ref.html
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightA.html leftA-widthN-rightA-ref.html
+fails-if(B2G&&browserIsRemote) == leftN-widthN-rightA.html leftN-widthN-rightA-ref.html
+fails-if(B2G&&browserIsRemote) == leftA-widthN-rightN.html leftA-widthN-rightN-ref.html
+fails-if(B2G&&browserIsRemote) == leftA-widthA-rightN.html leftA-widthA-rightN-ref.html
 == toauto-leftN-widthA-rightA.html toauto-leftN-widthA-rightA-ref.html
 == toauto-leftN-widthA-rightA-2.html toauto-leftN-widthA-rightA-2-ref.html
 == toauto-leftN-widthA-rightN.html toauto-leftN-widthA-rightN-ref.html
 == toauto-leftN-widthA-rightN-2.html toauto-leftN-widthA-rightN-2-ref.html
 == toauto-leftA-widthN-rightA.html toauto-leftA-widthN-rightA-ref.html
 == toauto-leftN-widthN-rightA.html toauto-leftN-widthN-rightA-ref.html
 == toauto-leftA-widthN-rightN.html toauto-leftA-widthN-rightN-ref.html
 == toauto-leftA-widthA-rightN.html toauto-leftA-widthA-rightN-ref.html
--- a/layout/reftests/position-dynamic-changes/reftest.list
+++ b/layout/reftests/position-dynamic-changes/reftest.list
@@ -1,10 +1,10 @@
 include horizontal/reftest.list
-include vertical/reftest.list
-include mixed/reftest.list
-include mixed-abspos-root/reftest.list
-include relative/reftest.list
+skip-if(B2G&&browserIsRemote) include vertical/reftest.list
+skip-if(B2G&&browserIsRemote) include mixed/reftest.list
+skip-if(B2G&&browserIsRemote) include mixed-abspos-root/reftest.list
+skip-if(B2G&&browserIsRemote) include relative/reftest.list
 
-== multiple-changes.html multiple-changes-ref.html
-== shrink-wrap.html shrink-wrap-ref.html
-== max-width.html max-width-ref.html
-fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,2) == min-width.html min-width-ref.html # Bug 761770
+random-if(B2G&&browserIsRemote) == multiple-changes.html multiple-changes-ref.html
+random-if(B2G&&browserIsRemote) == shrink-wrap.html shrink-wrap-ref.html
+random-if(B2G&&browserIsRemote) == max-width.html max-width-ref.html
+fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,2) fails-if(B2G&&browserIsRemote) == min-width.html min-width-ref.html # Bug 761770
--- a/layout/reftests/position-sticky/reftest.list
+++ b/layout/reftests/position-sticky/reftest.list
@@ -37,17 +37,17 @@ fuzzy-if(Android,2,3) == stacking-contex
 == left-right-1.html left-right-1-ref.html
 == left-right-2.html left-right-2-ref.html
 == left-right-3.html left-right-3-ref.html
 fuzzy-if(Android,4,810) == containing-block-1.html containing-block-1-ref.html
 == overconstrained-1.html overconstrained-1-ref.html
 == overconstrained-2.html overconstrained-2-ref.html
 == overconstrained-3.html overconstrained-3-ref.html
 == inline-1.html inline-1-ref.html
-== inline-2.html inline-2-ref.html
+fails-if(B2G&&browserIsRemote) == inline-2.html inline-2-ref.html
 fuzzy-if(OSX==10.6||OSX==10.7,64,100) fuzzy-if(OSX==10.8,99,210) == inline-3.html inline-3-ref.html
 fails == column-contain-1a.html column-contain-1-ref.html
 == column-contain-1b.html column-contain-1-ref.html
 == column-contain-2.html column-contain-2-ref.html
 == block-in-inline-1.html block-in-inline-1-ref.html
 fuzzy-if(Android,8,1533) skip-if(B2G&&browserIsRemote) == block-in-inline-2.html block-in-inline-2-ref.html
 fuzzy-if(Android,8,630) fuzzy-if(OSX==10.8,1,11) skip-if(B2G&&browserIsRemote) == block-in-inline-3.html block-in-inline-3-ref.html
 == block-in-inline-continuations.html block-in-inline-continuations-ref.html
--- a/layout/reftests/printing/reftest.list
+++ b/layout/reftests/printing/reftest.list
@@ -1,34 +1,34 @@
 # Sanity check
 == blank.html blank.html
 
 # Bugs
 == 272830-1.html 272830-1-ref.html
 == 318022-1.html 318022-1-ref.html
 == 403669-1.html 403669-1-ref.html
-fails-if(B2G) == 381497-n.html 381497-f.html # reftest-print doesn't work on B2G (scrollbar difference only)
+random-if(B2G&&browserIsRemote) == 381497-n.html 381497-f.html # reftest-print doesn't work on B2G (scrollbar difference only)
 == test-async-print.html 272830-1-ref.html
 fails-if(B2G) == 129941-1a.html 129941-1-ref.html # reftest-print doesn't work on B2G
 == 129941-1b.html 129941-1-ref.html
 == 609227-1.html 609227-1-ref.html
 fails-if(B2G) == 609227-2a.html 609227-2-ref.html # reftest-print doesn't work on B2G
 fails-if(B2G) == 609227-2b.html 609227-2-ref.html # reftest-print doesn't work on B2G
 == 577450-1.html 577450-1-ref.html
 == 626395-1a.html 626395-1-ref.html
 == 626395-1b.html 626395-1-ref.html
 == 626395-2a.html 626395-2-ref.html
 == 626395-2b.html 626395-2-ref.html
 == 626395-2c.html 626395-2-ref.html
 == 626395-2d.html 626395-2-ref.html
 == 652178-1.html 652178-1-ref.html
-fails-if(B2G) == 115199-1.html 115199-1-ref.html # reftest-print doesn't work on B2G
-== 115199-2a.html 115199-2-ref.html
-== 115199-2b.html 115199-2-ref.html
+random-if(B2G&&browserIsRemote) == 115199-1.html 115199-1-ref.html # reftest-print doesn't work on B2G
+random-if(B2G&&browserIsRemote) == 115199-2a.html 115199-2-ref.html
+random-if(B2G&&browserIsRemote) == 115199-2b.html 115199-2-ref.html
 == 652178-1.html 652178-1-ref2.html
 skip-if(B2G) fuzzy-if(cocoaWidget,1,5000) == 745025-1.html 745025-1-ref.html # reftest-print doesn't work on B2G
 == 820496-1.html 820496-1-ref.html
 
 # NOTE: These tests don't yet rigorously test what they're
 # trying to test (shrink-to-fit behavior), due to bug 967311.
-fails-if(B2G) == 960822.html 960822-ref.html # reftest-print doesn't work on B2G (scrollbar difference only)
+random-if(B2G&&browserIsRemote) == 960822.html 960822-ref.html # reftest-print doesn't work on B2G (scrollbar difference only)
 == 966419-1.html 966419-1-ref.html
 == 966419-2.html 966419-2-ref.html
--- a/layout/reftests/reftest.list
+++ b/layout/reftests/reftest.list
@@ -166,17 +166,17 @@ include floats/reftest.list
 
 # font-face
 include font-face/reftest.list
 
 # font features (opentype)
 include font-features/reftest.list
 
 # mobile font size inflation
-include font-inflation/reftest.list
+skip-if(B2G&&browserIsRemote) include font-inflation/reftest.list # Bug 972697
 
 # font matching
 include font-matching/reftest.list
 
 # forms
 include forms/reftest.list
 
 # gfx
@@ -263,17 +263,17 @@ include pagination/reftest.list
 
 # <style scoped>
 include scoped-style/reftest.list
 
 # scrolling 
 include scrolling/reftest.list
 
 # selection
-include selection/reftest.list
+skip-if(B2G&&browserIsRemote) include selection/reftest.list
 
 # sticky positioning
 include position-sticky/reftest.list
 
 # svg/
 include svg/reftest.list
 
 # tab-size/
--- a/layout/reftests/scrolling/reftest.list
+++ b/layout/reftests/scrolling/reftest.list
@@ -1,24 +1,24 @@
 skip-if(B2G&&browserIsRemote) HTTP == deferred-anchor.xhtml#d deferred-anchor-ref.xhtml#d
 HTTP == fixed-1.html fixed-1.html?ref
 HTTP == fixed-opacity-1.html fixed-opacity-1.html?ref
 skip-if(B2G) HTTP == fixed-opacity-2.html fixed-opacity-2.html?ref
 skip-if(B2G) random-if(gtk2Widget) fuzzy-if(Android,3,60) HTTP == fixed-text-1.html fixed-text-1.html?ref
 HTTP == fixed-text-2.html fixed-text-2.html?ref
 random-if(Android&&!browserIsRemote) skip-if(B2G&&browserIsRemote) == iframe-border-radius.html iframe-border-radius-ref.html # bug 760269
-random-if(Android) HTTP == image-1.html image-1.html?ref
-random-if(Android&&!browserIsRemote) HTTP == opacity-mixed-scrolling-1.html opacity-mixed-scrolling-1.html?ref # bug 760269
+random-if(Android) fails-if(B2G&&browserIsRemote) HTTP == image-1.html image-1.html?ref
+random-if(Android&&!browserIsRemote) random-if(B2G&&browserIsRemote) HTTP == opacity-mixed-scrolling-1.html opacity-mixed-scrolling-1.html?ref # bug 760269
 skip-if(B2G) random-if(cocoaWidget) HTTP == opacity-mixed-scrolling-2.html opacity-mixed-scrolling-2.html?ref # see bug 625357
 skip-if(B2G&&browserIsRemote) HTTP == simple-1.html simple-1.html?ref
 skip-if(B2G) HTTP == subpixel-1.html#d subpixel-1-ref.html#d
-fuzzy-if(Android,4,120) HTTP == text-1.html text-1.html?ref
-fuzzy-if(Android,4,120) HTTP == text-2.html?up text-2.html?ref
+fuzzy-if(Android,4,120) fails-if(B2G&&browserIsRemote) HTTP == text-1.html text-1.html?ref
+fuzzy-if(Android,4,120) fails-if(B2G&&browserIsRemote) HTTP == text-2.html?up text-2.html?ref
 skip-if(B2G) fuzzy-if(Android&&AndroidVersion<15,251,722) HTTP == transformed-1.html transformed-1.html?ref
-HTTP == transformed-1.html?up transformed-1.html?ref
+fails-if(B2G&&browserIsRemote) HTTP == transformed-1.html?up transformed-1.html?ref
 fuzzy-if(Android,5,20000) == uncovering-1.html uncovering-1-ref.html
 fuzzy-if(Android,5,20000) == uncovering-2.html uncovering-2-ref.html
 skip-if(B2G) == less-than-scrollbar-height.html less-than-scrollbar-height-ref.html
 skip-if(B2G) == huge-horizontal-overflow.html huge-horizontal-overflow-ref.html
 skip-if(B2G) == huge-vertical-overflow.html huge-vertical-overflow-ref.html
 == iframe-scrolling-attr-1.html iframe-scrolling-attr-ref.html
 skip-if(B2G&&browserIsRemote) == iframe-scrolling-attr-2.html iframe-scrolling-attr-ref.html
 == frame-scrolling-attr-1.html frame-scrolling-attr-ref.html
--- a/layout/reftests/svg/as-image/reftest.list
+++ b/layout/reftests/svg/as-image/reftest.list
@@ -7,20 +7,20 @@ include zoom/reftest.list
 == background-display-none-1.html  about:blank
 skip-if(B2G) == background-simple-1.html  lime100x100-ref.html # bug 773482
 == background-simple-2.html  lime100x100-ref.html
 
 # Sightly trickier background-image test
 == background-viewBox-1.html  lime100x100-ref.html
 
 # background tests with the background area getting resized
-== background-resize-1.html  lime100x100-ref.html
-== background-resize-2.html  lime100x100-ref.html
-== background-resize-3.html  lime100x100-ref.html
-== background-resize-4.html  lime100x100-ref.html
+fails-if(B2G&&browserIsRemote) == background-resize-1.html  lime100x100-ref.html
+fails-if(B2G&&browserIsRemote) == background-resize-2.html  lime100x100-ref.html
+fails-if(B2G&&browserIsRemote) == background-resize-3.html  lime100x100-ref.html
+fails-if(B2G&&browserIsRemote) == background-resize-4.html  lime100x100-ref.html
 
 # Test for stretching background images by different amounts in each dimension
 == background-stretch-1.html background-stretch-1-ref.html
 
 # Tests for scaling background images
 == background-scale-no-viewbox-1.html   background-scale-no-viewbox-1-ref.html
 == background-scale-with-viewbox-1.html background-scale-with-viewbox-1-ref.html
 
@@ -37,21 +37,21 @@ skip-if(B2G) == background-image-rect-1s
 == canvas-drawImage-simple-1a.html lime100x100-ref.html
 == canvas-drawImage-simple-1b.html lime100x100-ref.html
 
 skip-if(B2G) == canvas-drawImage-scale-1a.html lime100x100-ref.html
 skip-if(B2G) == canvas-drawImage-scale-1b.html lime100x100-ref.html
 skip-if(B2G) == canvas-drawImage-scale-1c.html lime100x100-ref.html
 
 # Fuzzyness and fails for scaling should be fixed by bug 941467
-fuzzy(1,2) fails-if(Android&&AndroidVersion<15&&AndroidVersion!=10) == canvas-drawImage-scale-2a.html canvas-drawImage-scale-2-ref.html
+fuzzy(1,2) fails-if(Android&&AndroidVersion<15&&AndroidVersion!=10) fails-if(B2G&&browserIsRemote) == canvas-drawImage-scale-2a.html canvas-drawImage-scale-2-ref.html
 fails == canvas-drawImage-scale-2b.html canvas-drawImage-scale-2-ref.html
 
 skip-if(B2G) == canvas-drawImage-slice-1a.html lime100x100-ref.html
-== canvas-drawImage-slice-1b.html lime100x100-ref.html
+fails-if(B2G&&browserIsRemote) == canvas-drawImage-slice-1b.html lime100x100-ref.html
 
 == canvas-drawImage-origin-clean-1.html lime100x100-ref.html
 
 # Simple <img> tests
 == img-simple-1.html  lime100x100-ref.html
 == img-simple-2.html  lime100x100-ref.html
 == img-simple-3.html  img-simple-3-ref.html
 == img-simple-4.html  lime100x100-ref.html
@@ -59,17 +59,17 @@ skip-if(B2G) == canvas-drawImage-slice-1
 skip-if(B2G) == img-simple-6.html  lime100x100-ref.html # bug 773482
 == img-simple-7.html  img-simple-7-ref.html
 
 # Test with mix of <html:img> and <svg:image> referring to the same images,
 # with a variety of preserveAspectRatio values in play.
 random == img-and-image-1.html img-and-image-1-ref.svg # bug 645267
 
 # More complex <img> tests
-== img-blobURI-1.html lime100x100-ref.html
+fails-if(B2G&&browserIsRemote) == img-blobURI-1.html lime100x100-ref.html
 random == img-blobURI-2.html lime100x100-ref.html
 == img-content-outside-viewBox-1.html img-content-outside-viewBox-1-ref.html
 == img-display-none-1.html about:blank
 == img-dyn-1.html img-dyn-1-ref.html
 == img-foreignObject-1.html lime100x100-ref.html
 
 # The following tests check that content embedded via <iframe> and <embed>
 # doesn't load (or execute scripts) in SVG-as-an-image.
--- a/layout/reftests/svg/filters/reftest.list
+++ b/layout/reftests/svg/filters/reftest.list
@@ -1,14 +1,14 @@
 # In general, the fe*-1 tests test basic functionality clipped to a filter primitive
 # subregion. The fe*-2 tests test with no clipping (which stresses
 # the automatic optimal surface-size computation a bit more).
 
 skip-if(B2G) == dynamic-filtered-foreignObject-01.svg pass.svg # bug 773482
-== dynamic-filter-invalidation-01.svg pass.svg
+fails-if(B2G&&browserIsRemote) == dynamic-filter-invalidation-01.svg pass.svg
 == dynamic-filter-invalidation-02.svg pass.svg
 
 == feBlend-1.svg feBlend-1-ref.svg
 == feBlend-2.svg feBlend-2-ref.svg
 
 fuzzy-if(d2d,1,6400) == feColorMatrix-1.svg feColorMatrix-1-ref.svg
 fuzzy-if(d2d,1,10000) == feColorMatrix-2.svg feColorMatrix-2-ref.svg
 
--- a/layout/reftests/svg/image/reftest.list
+++ b/layout/reftests/svg/image/reftest.list
@@ -33,9 +33,9 @@ skip-if(B2G&&browserIsRemote) == image-s
 
 # Tests for <image> with preserveAspectRatio
 skip-if(B2G) == image-preserveAspectRatio-01-raster.svg image-preserveAspectRatio-01-ref.svg # bug 773482
 skip-if(B2G) == image-preserveAspectRatio-01-svg.svg    image-preserveAspectRatio-01-ref.svg # bug 773482
 skip-if(B2G) == image-preserveAspectRatio-02-raster.svg image-preserveAspectRatio-02-ref.svg # bug 773482
 skip-if(B2G) == image-preserveAspectRatio-02-svg.svg    image-preserveAspectRatio-02-ref.svg # bug 773482
 skip-if(B2G) == image-preserveAspectRatio-03.svg        image-preserveAspectRatio-03-ref.svg # bug 773482
 skip-if(B2G) == image-preserveAspectRatio-04.svg        image-preserveAspectRatio-04-ref.svg # bug 773482
-== image-preserveAspectRatio-05.svg ../pass.svg
+fails-if(B2G&&browserIsRemote) == image-preserveAspectRatio-05.svg ../pass.svg
--- a/layout/reftests/svg/reftest.list
+++ b/layout/reftests/svg/reftest.list
@@ -72,29 +72,29 @@ fuzzy-if(/^Windows\x20NT\x206\.[12]/.tes
 == dynamic-conditions-10.svg about:blank
 == dynamic-conditions-11.svg pass.svg
 == dynamic-conditions-12.svg pass.svg
 == dynamic-conditions-13.svg about:blank
 fuzzy-if(Android,4,87) skip-if(B2G) == dynamic-clipPath-01.svg pass.svg
 == dynamic-clipPath-02.svg pass.svg
 == dynamic-feFlood-01.svg pass.svg
 asserts(0-1) == dynamic-feImage-01.svg pass.svg # intermittent assertions (bug 886080)
-== dynamic-fill-01.svg dynamic-fill-01-ref.svg
+fails-if(B2G&&browserIsRemote) == dynamic-fill-01.svg dynamic-fill-01-ref.svg
 skip-if(B2G) fuzzy-if(d2d,1,10000) == dynamic-filter-contents-01a.svg dynamic-filter-contents-01-ref.svg
 skip-if(B2G) fuzzy-if(d2d,1,10000) == dynamic-filter-contents-01b.svg dynamic-filter-contents-01-ref.svg
 skip-if(B2G) == dynamic-gradient-contents-01.svg pass.svg
 skip-if(B2G) == dynamic-gradient-contents-02.svg pass.svg
 skip-if(B2G) == dynamic-inner-svg-01.svg pass.svg
 == dynamic-link-style-01.svg pass.svg
 skip-if(B2G) == dynamic-marker-01.svg pass.svg
 skip-if(B2G) == dynamic-marker-02.svg dynamic-marker-02-ref.svg
 skip-if(B2G) == dynamic-marker-03.svg pass.svg
 == dynamic-mask-01.svg pass.svg
 skip-if(B2G) == dynamic-mask-contents-01.svg pass.svg
-== dynamic-opacity-property-01.svg pass.svg
+fails-if(B2G&&browserIsRemote) == dynamic-opacity-property-01.svg pass.svg
 skip-if(B2G) == dynamic-pattern-01.svg pass.svg
 skip-if(B2G) == dynamic-pattern-02.svg pass.svg
 skip-if(B2G) == dynamic-pattern-contents-01.svg pass.svg
 skip-if(B2G) == dynamic-pattern-contents-02.svg pass.svg
 == dynamic-rect-01.svg dynamic-rect-01-ref.svg
 fuzzy-if(d2d&&layersGPUAccelerated,3,1200) == dynamic-rect-02.svg dynamic-rect-02-ref.svg # bug 776038 for Win7, Win8
 == dynamic-rect-03.svg dynamic-rect-03-ref.svg
 == dynamic-rect-04.xhtml pass.svg
@@ -110,25 +110,25 @@ fuzzy-if(d2d&&layersGPUAccelerated,3,120
 fuzzy-if(d2d&&layersGPUAccelerated,3,12739) == dynamic-text-02.svg dynamic-text-02-ref.svg # bug 776038 for Win7, Win8
 fuzzy-if(d2d&&layersGPUAccelerated,2,10539) == dynamic-text-03.svg dynamic-text-03-ref.svg # bug 776038 for Win7
 random-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),47,89) == dynamic-text-04.svg dynamic-text-04-ref.svg # bug 421587 for WinXP, bug 776038 for Win7
 skip-if(B2G) == dynamic-text-05.svg pass.svg
 skip-if(B2G) == dynamic-text-06.svg pass.svg
 == dynamic-text-07.svg dynamic-text-07-ref.svg
 == dynamic-text-08.svg dynamic-text-08-ref.svg
 skip-if(B2G) == dynamic-textPath-01.svg dynamic-textPath-01-ref.svg
-== dynamic-textPath-02.svg dynamic-textPath-02-ref.svg
-== dynamic-textPath-03.svg dynamic-textPath-03-ref.svg
+fails-if(B2G&&browserIsRemote) == dynamic-textPath-02.svg dynamic-textPath-02-ref.svg
+fails-if(B2G&&browserIsRemote) == dynamic-textPath-03.svg dynamic-textPath-03-ref.svg
 == dynamic-use-01.svg pass.svg
 == dynamic-use-02.svg pass.svg
 skip-if(B2G) == dynamic-use-03.svg pass.svg
 skip-if(B2G) == dynamic-use-04.svg pass.svg
 skip-if(B2G) == dynamic-use-05.svg pass.svg
-== dynamic-use-06.svg pass.svg
-== dynamic-use-07.svg pass.svg
+fails-if(B2G&&browserIsRemote) == dynamic-use-06.svg pass.svg
+fails-if(B2G&&browserIsRemote) == dynamic-use-07.svg pass.svg
 random == dynamic-use-nested-01a.svg dynamic-use-nested-01-ref.svg
 random == dynamic-use-nested-01b.svg dynamic-use-nested-01-ref.svg
 == dynamic-use-remove-width.svg dynamic-use-remove-width-ref.svg
 == fragmentIdentifier-01.xhtml pass.svg
 == linked-filter-01.svg pass.svg
 == linked-pattern-01.svg pass.svg
 == use-01.svg pass.svg
 skip-if(B2G) == use-01-extref.svg pass.svg
@@ -205,58 +205,58 @@ pref(svg.marker-improvements.enabled,tru
 pref(layout.css.masking.enabled,true) fuzzy-if(d2d,1,6400) == mask-type-01.svg mask-type-01-ref.svg
 pref(layout.css.masking.enabled,true) fuzzy-if(d2d,1,6400) == mask-type-02.svg mask-type-01-ref.svg
 pref(layout.css.masking.enabled,true) fuzzy-if(d2d,1,6400) == mask-type-03.svg mask-type-01-ref.svg
 pref(layout.css.masking.enabled,true) fuzzy-if(d2d,1,6400) == mask-type-04.svg mask-type-01-ref.svg
 == nested-viewBox-01.svg pass.svg
 == nesting-invalid-01.svg nesting-invalid-01-ref.svg
 == non-scaling-stroke-01.svg non-scaling-stroke-01-ref.svg 
 fuzzy-if(Android||B2G,1,99) fuzzy-if(!contentSameGfxBackendAsCanvas,9,99) == non-scaling-stroke-02.svg non-scaling-stroke-02-ref.svg
-== non-scaling-stroke-03.svg non-scaling-stroke-03-ref.svg 
+fails-if(B2G&&browserIsRemote) == non-scaling-stroke-03.svg non-scaling-stroke-03-ref.svg 
 == objectBoundingBox-and-clipPath.svg pass.svg
 # Bug 588684
 random-if(gtk2Widget) == objectBoundingBox-and-fePointLight-01.svg objectBoundingBox-and-fePointLight-01-ref.svg
 random-if(gtk2Widget) == objectBoundingBox-and-fePointLight-02.svg objectBoundingBox-and-fePointLight-02-ref.svg
 == objectBoundingBox-and-mask.svg pass.svg
 == objectBoundingBox-and-mask-02.svg pass.svg
 == objectBoundingBox-and-pattern-01a.svg objectBoundingBox-and-pattern-01-ref.svg
 == objectBoundingBox-and-pattern-01b.svg objectBoundingBox-and-pattern-01-ref.svg
 == objectBoundingBox-and-pattern-01c.svg objectBoundingBox-and-pattern-01-ref.svg
 == objectBoundingBox-and-pattern-02.svg pass.svg
 == objectBoundingBox-and-pattern-03.svg objectBoundingBox-and-pattern-03-ref.svg
 == opacity-and-gradient-01.svg pass.svg
 skip-if(d2d) fuzzy-if(azureQuartz,1,99974) == opacity-and-gradient-02.svg opacity-and-gradient-02-ref.svg
 == opacity-and-pattern-01.svg pass.svg
 == opacity-and-transform-01.svg opacity-and-transform-01-ref.svg
-fuzzy-if(Android&&AndroidVersion>=15,8,200) == outer-svg-border-and-padding-01.svg outer-svg-border-and-padding-01-ref.svg
+fuzzy-if(Android&&AndroidVersion>=15,8,200) random-if(B2G&&browserIsRemote) == outer-svg-border-and-padding-01.svg outer-svg-border-and-padding-01-ref.svg
 == overflow-on-outer-svg-01.svg overflow-on-outer-svg-01-ref.svg
 == overflow-on-outer-svg-02a.xhtml overflow-on-outer-svg-02-ref.xhtml
 == overflow-on-outer-svg-02b.xhtml overflow-on-outer-svg-02-ref.xhtml
 == overflow-on-outer-svg-02c.xhtml overflow-on-outer-svg-02-ref.xhtml
-== overflow-on-outer-svg-02d.xhtml overflow-on-outer-svg-02-ref.xhtml
-== overflow-on-outer-svg-03a.xhtml overflow-on-outer-svg-03-ref.xhtml
-== overflow-on-outer-svg-03b.xhtml overflow-on-outer-svg-03-ref.xhtml
+random-if(B2G&&browserIsRemote) == overflow-on-outer-svg-02d.xhtml overflow-on-outer-svg-02-ref.xhtml
+random-if(B2G&&browserIsRemote) == overflow-on-outer-svg-03a.xhtml overflow-on-outer-svg-03-ref.xhtml
+random-if(B2G&&browserIsRemote) == overflow-on-outer-svg-03b.xhtml overflow-on-outer-svg-03-ref.xhtml
 pref(svg.paint-order.enabled,true) == paint-order-01.svg paint-order-01-ref.svg
 pref(svg.paint-order.enabled,true) == paint-order-02.svg paint-order-02-ref.svg
 pref(svg.paint-order.enabled,true) == paint-order-03.svg paint-order-03-ref.svg
 fuzzy-if(azureQuartz,6,47) == path-01.svg path-01-ref.svg
 == path-02.svg pass.svg
 == path-03.svg pass.svg
-== path-04.svg pass.svg
+fails-if(B2G&&browserIsRemote) == path-04.svg pass.svg
 == path-05.svg pass.svg
 == path-06.svg path-06-ref.svg
 == path-07.svg path-07-ref.svg
 == path-08.svg pass.svg
 == pathLength-01.svg pass.svg
 == pathLength-02.svg pass.svg
 == pattern-basic-01.svg pass.svg
 == pattern-invalid-01.svg pattern-invalid-01-ref.svg
-== pattern-live-01a.svg pattern-live-01-ref.svg
-== pattern-live-01b.svg pattern-live-01-ref.svg
-== pattern-live-01c.svg pattern-live-01-ref.svg
+fails-if(B2G&&browserIsRemote) == pattern-live-01a.svg pattern-live-01-ref.svg
+fails-if(B2G&&browserIsRemote) == pattern-live-01b.svg pattern-live-01-ref.svg
+fails-if(B2G&&browserIsRemote) == pattern-live-01c.svg pattern-live-01-ref.svg
 == pattern-scale-01a.svg pattern-scale-01-ref.svg
 == pattern-scale-01b.svg pattern-scale-01-ref.svg
 == pattern-scale-01c.svg pattern-scale-01-ref.svg
 == pattern-transform-presence-01.svg pattern-transform-presence-01-ref.svg
 == pattern-transformed-01.svg pattern-transformed-01-ref.svg
 == polygon-marker-01.svg pass.svg
 == polygon-points-negative-01.svg pass.svg
 == polyline-points-invalid-01.svg pass.svg
@@ -274,19 +274,19 @@ fuzzy-if(azureQuartz,6,47) == path-01.sv
 == rect-03.svg pass.svg
 == rect-04.svg pass.svg
 == rect-with-rx-and-ry-01.svg pass.svg
 == rect-with-rx-or-ry-01.svg rect-with-rx-or-ry-01-ref.svg
 == rootElement-null-01.svg pass.svg
 == script-empty-01.svg pass.svg
 == selector-01.svg pass.svg
 == stroke-width-percentage-01.svg pass.svg
-== stroke-width-percentage-02a.svg stroke-width-percentage-02-ref.svg
-== stroke-width-percentage-02b.svg stroke-width-percentage-02-ref.svg
-== stroke-width-percentage-03.xhtml stroke-width-percentage-03-ref.xhtml
+fails-if(B2G&&browserIsRemote) == stroke-width-percentage-02a.svg stroke-width-percentage-02-ref.svg
+fails-if(B2G&&browserIsRemote) == stroke-width-percentage-02b.svg stroke-width-percentage-02-ref.svg
+fails-if(B2G&&browserIsRemote) == stroke-width-percentage-03.xhtml stroke-width-percentage-03-ref.xhtml
 == style-property-on-script-element-01.svg pass.svg
 == style-without-type-attribute.svg pass.svg
 == svg-in-foreignObject-01.xhtml svg-in-foreignObject-01-ref.xhtml
 == svg-in-foreignObject-02.xhtml svg-in-foreignObject-01-ref.xhtml # reuse -01-ref.xhtml
 == switch-01.svg pass.svg
 == suspend-01.svg pass.svg
 == suspend-02.svg pass.svg
 == suspend-03.svg pass.svg
--- a/layout/reftests/svg/sizing/reftest.list
+++ b/layout/reftests/svg/sizing/reftest.list
@@ -279,26 +279,26 @@ HTTP(../..) == inline--position-relative
 # in the future.
 #
 # Since we have given the replaced element algorithm a reasonable workout in
 # the standalone tests, for the embedded by reference tests we will simply
 # check that the embedded SVG's intrinsic dimensions are used. The following
 # tests do not have any width or height on the <object> element so they should
 # be sized purely by the embedded SVG's intrinsic size.
 
-random-if(Android) == object--auto-auto--0-0.html          pass-empty.svg # XXX add border
-random-if(Android) == object--auto-auto--0-pct.html        object--auto-auto--0-pct--ref.html
-random-if(Android) == object--auto-auto--0-px.html         object--auto-auto--0-px--ref.html
-random-if(Android) == object--auto-auto--pct-0.html        object--auto-auto--pct-0--ref.html
+random-if(Android||(B2G&&browserIsRemote)) == object--auto-auto--0-0.html          pass-empty.svg # XXX add border
+random-if(Android||(B2G&&browserIsRemote)) == object--auto-auto--0-pct.html        object--auto-auto--0-pct--ref.html
+random-if(Android||(B2G&&browserIsRemote)) == object--auto-auto--0-px.html         object--auto-auto--0-px--ref.html
+random-if(Android||(B2G&&browserIsRemote)) == object--auto-auto--pct-0.html        object--auto-auto--pct-0--ref.html
 # The following four commented out tests fail post bug 428023:
 #== object--auto-auto--pct-pct.html      object--auto-auto--pct-pct--ref.html
 #== object--auto-auto--pct-px.html       object--auto-auto--pct-px--ref.html
-random-if(Android) == object--auto-auto--px-0.html         object--auto-auto--px-0--ref.html
+random-if(Android||(B2G&&browserIsRemote)) == object--auto-auto--px-0.html         object--auto-auto--px-0--ref.html
 #== object--auto-auto--px-pct.html       object--auto-auto--px-pct--ref.html
-random-if(Android) == object--auto-auto--px-px.html        object--auto-auto--px-px--ref.html
+random-if(Android||(B2G&&browserIsRemote)) == object--auto-auto--px-px.html        object--auto-auto--px-px--ref.html
 #== object--pct-pct--0-0.html            pass.svg
 
 
 # Assorted tests to check that dynamic changes work correctly
 #
 # Here we have an assortment of different tests to check that updates occur
 # correctly when changes are made that should result in a change in the size
 # or position of the SVG.
--- a/layout/reftests/svg/smil/container/reftest.list
+++ b/layout/reftests/svg/smil/container/reftest.list
@@ -4,15 +4,15 @@
 
 random == enveloped-tree-1.xhtml enveloped-tree-1-ref.xhtml  # bug 470868
 fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,3) == promoted-tree-1.xhtml promoted-tree-1-ref.xhtml
 random == moved-tree-1.xhtml moved-tree-1-ref.xhtml  # bug 470868
 random-if(cocoaWidget||d2d) == deferred-anim-1.xhtml deferred-anim-1-ref.xhtml # bug 470868, bug 585484
 random-if(cocoaWidget&&layersGPUAccelerated) == deferred-tree-1.xhtml deferred-tree-1-ref.xhtml # bug 470868
 random-if(cocoaWidget&&layersGPUAccelerated) == deferred-tree-2a.xhtml deferred-tree-2-ref.xhtml # bug 470868
 random-if(cocoaWidget&&layersGPUAccelerated) == deferred-tree-2b.xhtml deferred-tree-2-ref.xhtml # bug 470868
-fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,16) == deferred-tree-3a.xhtml deferred-tree-3-ref.xhtml
+fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,16) random-if(B2G&&browserIsRemote) == deferred-tree-3a.xhtml deferred-tree-3-ref.xhtml
 fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,16) == deferred-tree-3b.xhtml deferred-tree-3-ref.xhtml
 fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,16) == deferred-tree-3c.xhtml deferred-tree-3-ref.xhtml
 fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,16) == deferred-tree-3d.xhtml deferred-tree-3-ref.xhtml
 # this will occasionally fail until we correctly clear animation effects from
 # no-longer-targeted elements
 random == invalid-elem-1.xhtml invalid-elem-1-ref.xhtml
--- a/layout/reftests/svg/smil/event/reftest.list
+++ b/layout/reftests/svg/smil/event/reftest.list
@@ -1,32 +1,32 @@
 # Tests related to SVG Animation (using SMIL) that use event timing.
 
 == event-begin-1.svg green-box-ref.svg
 == event-begin-offset-1.svg green-box-ref.svg
 == event-begin-offset-2.svg green-box-ref.svg
 == event-begin-timeevent-1.svg green-box-ref.svg
 == event-begin-timeevent-2.svg green-box-ref.svg
-random-if(Android) == event-begin-timeevent-3.svg green-box-ref.svg
+random-if(Android) random-if(B2G&&browserIsRemote) == event-begin-timeevent-3.svg green-box-ref.svg
 == event-begin-load-1.svg green-box-ref.svg
 == event-bubble-1.svg green-box-ref.svg
 == event-custom-1.svg green-box-ref.svg
 == event-end-1.svg green-box-ref.svg
 == event-end-2.svg green-box-ref.svg
 == event-end-open-1.svg green-box-ref.svg
 == event-end-trimmed-1.svg green-box-ref.svg
 == event-preventDefault-1.svg green-box-ref.svg
-== event-seek-1.svg green-box-ref.svg
+fails-if(B2G&&browserIsRemote) == event-seek-1.svg green-box-ref.svg
 == event-target-default-1.svg green-box-ref.svg
 == event-target-default-2.svg green-box-ref.svg
 == event-target-id-change-1.svg green-box-ref.svg
 == event-target-id-change-2.svg green-box-ref.svg
 == event-target-id-change-3.svg green-box-ref.svg
 == event-target-xlink-change-1.svg green-box-ref.svg
 == event-target-xlink-change-2.svg green-box-ref.svg
 == event-target-xlink-change-3.svg green-box-ref.svg
 == event-target-xlink-change-4.svg green-box-ref.svg
 == event-target-surgery-1.svg green-box-ref.svg
 == event-target-surgery-2.svg green-box-ref.svg
 == event-target-surgery-3.svg green-box-ref.svg
-== event-target-non-svg-1.xhtml green-box-ref.xhtml
+fails-if(B2G&&browserIsRemote) == event-target-non-svg-1.xhtml green-box-ref.xhtml
 == accesskey-entity-1.svg green-box-ref.svg
 == accesskey-entity-2.svg green-box-ref.svg
--- a/layout/reftests/svg/smil/motion/reftest.list
+++ b/layout/reftests/svg/smil/motion/reftest.list
@@ -1,21 +1,21 @@
 # Tests related to SVG Animation (using SMIL), focusing on the animateMotion
 # element.
 
-== animateMotion-by-1.svg      lime.svg
+random-if(B2G&&browserIsRemote) == animateMotion-by-1.svg      lime.svg
 == animateMotion-by-2.svg      lime.svg
-fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,800) == animateMotion-flattening-1.svg lime.svg # bug 951541
-== animateMotion-from-to-1.svg lime.svg
+fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,800) fails-if(B2G&&browserIsRemote) == animateMotion-flattening-1.svg lime.svg # bug 951541
+random-if(B2G&&browserIsRemote) == animateMotion-from-to-1.svg lime.svg
 == animateMotion-indefinite-to-1.svg lime.svg
 == animateMotion-indefinite-to-2.svg lime.svg
-== animateMotion-rotate-1a.svg lime.svg
-== animateMotion-rotate-1b.svg lime.svg
+random-if(B2G&&browserIsRemote) == animateMotion-rotate-1a.svg lime.svg
+random-if(B2G&&browserIsRemote) == animateMotion-rotate-1b.svg lime.svg
 == animateMotion-rotate-2.svg  lime.svg
 == animateMotion-to-overridden-1.svg lime.svg
 == animateMotion-values-linear-1.svg animateMotion-values-linear-1-ref.svg
 == animateMotion-values-paced-1a.svg animateMotion-values-paced-1-ref.svg
 == animateMotion-values-paced-1b.svg animateMotion-values-paced-1-ref.svg
 
 # Tests involving <mpath> sub-element
-== animateMotion-mpath-pathLength-1.svg lime.svg
-== animateMotion-mpath-targetChange-1.svg lime.svg
+random-if(B2G&&browserIsRemote) == animateMotion-mpath-pathLength-1.svg lime.svg
+random-if(B2G&&browserIsRemote) == animateMotion-mpath-targetChange-1.svg lime.svg
 == animateMotion-mpath-target-transform-1.svg lime.svg
--- a/layout/reftests/svg/smil/reftest.list
+++ b/layout/reftests/svg/smil/reftest.list
@@ -94,17 +94,17 @@ fails == anim-fillcolor-1.svg      anim-
 == anim-conditions-02.svg lime.svg
 
 # animate some <length> attributes:
 == anim-filter-primitive-size-01.svg lime.svg
 == anim-filter-size-01.svg lime.svg
 == anim-length-reset-01.svg lime.svg
 == anim-nonpixel-length-reset-01.svg lime.svg
 == anim-use-length-01.svg lime.svg
-== anim-use-length-02.svg lime.svg
+random-if(B2G&&browserIsRemote) == anim-use-length-02.svg lime.svg
 
 # animate some <number> attributes:
 == anim-feComponentTransfer-01.svg lime.svg
 == anim-feDistantLight-01.svg anim-feDistantLight-01-ref.svg
 == anim-feOffset-01.svg lime.svg
 == anim-feSpotLight-01.svg anim-feSpotLight-01-ref.svg
 == anim-offset-01.svg lime.svg
 == anim-pathLength-01.svg anim-pathLength-01-ref.svg
@@ -138,17 +138,17 @@ fails == anim-fillcolor-1.svg      anim-
 
 # animate some viewBox attributes
 fuzzy-if(Android,4,1) == anim-svg-viewBox-01.svg lime.svg
 == anim-svg-viewBox-02.svg lime.svg
 == anim-svg-viewBox-03.svg lime.svg
 == anim-view-01.svg#view lime.svg
 
 # animate some preserveAspectRatio attributes
-== anim-feImage-preserveAspectRatio-01.svg lime.svg
+fails-if(B2G&&browserIsRemote) == anim-feImage-preserveAspectRatio-01.svg lime.svg
 == anim-svg-preserveAspectRatio-01.svg lime.svg
 
 # animate some string attributes:
 == anim-filter-href-01.svg lime.svg
 == anim-gradient-href-01.svg lime.svg
 == anim-image-href-01.svg lime.svg
 == anim-pattern-href-01.svg lime.svg
 == anim-use-href-01.svg lime.svg
@@ -241,17 +241,17 @@ fuzzy-if(cocoaWidget&&layersGPUAccelerat
 == freeze-applied-late-3.svg anim-standard-ref.svg
 == freeze-applied-late-4.svg anim-standard-ref.svg
 == frozen-to-anim-1.svg lime.svg
 
 == inactivate-with-active-unchanged-1.svg anim-standard-ref.svg
 == inactivate-with-active-unchanged-2.svg anim-standard-ref.svg
 
 == mapped-attr-long-url-1.svg lime.svg
-== mapped-attr-long-url-2.svg lime.svg
+fails-if(B2G&&browserIsRemote) == mapped-attr-long-url-2.svg lime.svg
 
 # interaction between xml mapped attributes and their css equivalents
 == mapped-attr-vs-css-prop-1.svg lime.svg
 
 == min-1.svg lime.svg
 
 == smil-transitions-interaction-1a.svg lime.svg
 == smil-transitions-interaction-1b.svg lime.svg
--- a/layout/reftests/svg/smil/sort/reftest.list
+++ b/layout/reftests/svg/smil/sort/reftest.list
@@ -1,12 +1,12 @@
 # Tests related to SVG Animation (using SMIL), focusing on animation-sorting
 # to see which animation takes precedence (out of multiple animations on the
 # same attribute)
 
 == sort-startAfter-1.svg sort-startAfter-1-ref.svg
 == sort-startAfter-2.svg sort-startAfter-2-ref.svg
 == sort-startAfter-3.svg sort-startAfter-3-ref.svg
 == sort-startSame-1a.svg sort-startSame-1-ref.svg
-== sort-startSame-1b.svg sort-startSame-1-ref.svg
+fails-if(B2G&&browserIsRemote) == sort-startSame-1b.svg sort-startSame-1-ref.svg
 == sort-startSame-2a.svg sort-startSame-2-ref.svg
 == sort-startSame-2b.svg sort-startSame-2-ref.svg
 random == sort-additive-1.svg sort-additive-1-ref.svg # bug 547801
--- a/layout/reftests/svg/smil/syncbase/reftest.list
+++ b/layout/reftests/svg/smil/syncbase/reftest.list
@@ -88,12 +88,12 @@
 == sandwich-priority-9.svg green-box-ref.svg
 == sandwich-priority-10.svg green-box-ref.svg
 == sandwich-priority-11.svg green-box-ref.svg
 == sandwich-priority-12.svg green-box-ref.svg
 
 # Cross-time container dependencies
 == cross-container-1.xhtml green-box-ref.xhtml
 == cross-container-2.xhtml green-box-ref.xhtml
-== cross-container-3.xhtml green-box-ref.xhtml
+random-if(B2G&&browserIsRemote) == cross-container-3.xhtml green-box-ref.xhtml
 
 # Filtering
 == filtered-interval-1.svg green-box-ref.svg
--- a/layout/reftests/svg/smil/transform/reftest.list
+++ b/layout/reftests/svg/smil/transform/reftest.list
@@ -4,14 +4,14 @@
 fuzzy(110,1802) == additive-1.svg additive-1-ref.svg # bug 981344
 == animate-width-1.svg lime.svg
 fuzzy-if(cocoaWidget,1,32) fuzzy-if(winWidget,1,1) == paced-1.svg paced-1-ref.svg # bug 981640
 == rotate-angle-1.svg rotate-angle-ref.svg
 == rotate-angle-2.svg rotate-angle-ref.svg
 == rotate-angle-3.svg rotate-angle-ref.svg
 == rotate-angle-4.svg rotate-angle-ref.svg
 == rotate-angle-5.svg rotate-angle-ref.svg
-fuzzy(12,27) == scale-1.svg scale-1-ref.svg  # bug 981004
+fuzzy(12,27) fails-if(B2G&&browserIsRemote) == scale-1.svg scale-1-ref.svg  # bug 981004
 == set-transform-1.svg lime.svg
 fuzzy-if(winWidget,1,3) == skew-1.svg skew-1-ref.svg # bug 983671
-== translate-clipPath-1.svg lime.svg
-fails-if(OSX==10.6) == translate-gradient-1.svg lime.svg
-== translate-pattern-1.svg lime.svg
+fails-if(B2G&&browserIsRemote) == translate-clipPath-1.svg lime.svg
+fails-if(OSX==10.6) fails-if(B2G&&browserIsRemote) == translate-gradient-1.svg lime.svg
+fails-if(B2G&&browserIsRemote) == translate-pattern-1.svg lime.svg
--- a/layout/reftests/svg/text/reftest.list
+++ b/layout/reftests/svg/text/reftest.list
@@ -19,17 +19,17 @@
 == simple-dx-anchor-middle-bidi.svg simple-dx-anchor-middle-bidi-ref.svg
 == simple-dx-anchor-middle-rtl.svg simple-dx-anchor-middle-rtl-ref.svg
 == simple-dx-anchor-middle.svg simple-dx-anchor-middle-ref.svg
 == simple-dx-bidi.svg simple-dx-bidi-ref.svg
 == simple-dx-bidi-2.svg simple-dx-bidi-2-ref.svg
 == simple-dx-rtl.svg simple-dx-rtl-ref.svg
 == simple-dx-rtl-2.svg simple-dx-rtl-2-ref.svg
 
-== simple-fill-color-dynamic.svg simple-fill-color-dynamic-ref.svg
+fails-if(B2G&&browserIsRemote) == simple-fill-color-dynamic.svg simple-fill-color-dynamic-ref.svg
 == simple-fill-color.svg simple-fill-color-ref.html
 HTTP(../..) == simple-fill-gradient.svg simple-fill-gradient-ref.svg
 == simple-fill-none.svg simple.svg
 == simple-pointer-events.svg simple.svg
 
 == simple-multiple-dx.svg simple-multiple-dx-ref.html
 == simple-multiple-dx-2.svg simple-multiple-dx.svg
 == simple-multiple-dx-anchor-end-bidi.svg simple-multiple-dx-anchor-end-bidi-ref.svg
@@ -66,17 +66,17 @@ HTTP(../..) == simple-transform-rotate.s
 == multiple-x-holes-rtl.svg multiple-x-holes-rtl-ref.svg
 == multiple-x-multiple-dx-bidi.svg multiple-x-multiple-dx-bidi-ref.svg
 == multiple-x-multiple-dx-rtl.svg multiple-x-multiple-dx-rtl-ref.svg
 == multiple-x-multiple-dx.svg multiple-x-multiple-dx-ref.svg
 == multiple-x-multiple-dx-anchor-end-bidi.svg multiple-x-multiple-dx-anchor-end-bidi-ref.svg
 == multiple-x-multiple-dx-anchor-end-rtl.svg multiple-x-multiple-dx-anchor-end-rtl-ref.svg
 == multiple-x-multiple-dx-anchor-end.svg multiple-x-multiple-dx-anchor-end-ref.svg
 
-== multiple-x-percentages.svg multiple-x-percentages-ref.svg
+fails-if(B2G&&browserIsRemote) == multiple-x-percentages.svg multiple-x-percentages-ref.svg
 == multiple-x-percentages-2.html multiple-x-percentages-2-ref.html
 == multiple-x-percentages-3.html multiple-x-percentages-3-ref.html
 
 == multiple-x-white-space.svg multiple-x-white-space-ref.svg
 
 == multiple-chunks-bidi.svg multiple-chunks-bidi-ref.svg
 == multiple-chunks-different-anchor-bidi.svg multiple-chunks-different-anchor-bidi-ref.svg
 == multiple-chunks-different-anchor-rtl.svg multiple-chunks-different-anchor-rtl-ref.svg
@@ -160,17 +160,17 @@ fuzzy-if(/^Windows\x20NT\x206\.[12]/.tes
 # dynamic document changes
 == dynamic-font-size.svg dynamic-font-size-ref.svg
 == dynamic-font-size-2.svg dynamic-font-size-2-ref.svg
 == dynamic-font-size-3.svg dynamic-font-size-3-ref.svg
 == dynamic-font-size-4.svg dynamic-font-size-4-ref.svg
 == dynamic-dominant-baseline.svg dynamic-dominant-baseline-ref.svg
 == dynamic-multiple-x.svg dynamic-multiple-x-ref.svg
 fuzzy-if(!d2d,14,2) fuzzy-if(azureQuartz,1,6) == dynamic-non-scaling-stroke.svg dynamic-non-scaling-stroke-ref.svg #Bug 885316
-== dynamic-text-shadow.svg text-shadow-ref.svg
+fails-if(B2G&&browserIsRemote) == dynamic-text-shadow.svg text-shadow-ref.svg
 
 # text and masks
 HTTP(../..) == mask-applied.svg mask-applied-ref.svg
 HTTP(../..) == mask-content.svg mask-content-ref.svg
 HTTP(../..) == mask-content-2.svg mask-content-2-ref.svg
 
 # text and clipPaths
 HTTP(../..) == clipPath-applied.svg clipPath-applied-ref.svg
--- a/layout/reftests/tab-size/reftest.list
+++ b/layout/reftests/tab-size/reftest.list
@@ -2,10 +2,10 @@
 == tab-size-8.html            spaces-8.html
 == tab-size-4.html            spaces-4.html
 == tab-size-4-span.html       spaces-4.html
 == tab-size-4-spanoffset.html spaces-4-offset.html
 == tab-size-4-multiple.html   spaces-4-multiple.html
 == tab-size-1.html            spaces-1.html
 == tab-size-0.html            spaces-0.html
 == tab-size-negative.html     tab-size-initial.html
-== tab-size-change-1a.html     tab-size-change-1-ref.html
-== tab-size-change-1b.html     tab-size-change-1-ref.html
+fails-if(B2G&&browserIsRemote) == tab-size-change-1a.html     tab-size-change-1-ref.html
+fails-if(B2G&&browserIsRemote) == tab-size-change-1b.html     tab-size-change-1-ref.html
--- a/layout/reftests/text-shadow/reftest.list
+++ b/layout/reftests/text-shadow/reftest.list
@@ -1,13 +1,13 @@
-== basic.xul basic-ref.xul
-random-if(Android) == basic-negcoord.xul basic-negcoord-ref.xul
-!= blur.xul blur-notref.xul
-== color-inherit.xul color-inherit-ref.xul
-== multiple-noblur.xul multiple-noblur-ref.xul
+skip-if(B2G&&browserIsRemote) == basic.xul basic-ref.xul
+random-if(Android) skip-if(B2G&&browserIsRemote) == basic-negcoord.xul basic-negcoord-ref.xul
+skip-if(B2G&&browserIsRemote) != blur.xul blur-notref.xul
+skip-if(B2G&&browserIsRemote) == color-inherit.xul color-inherit-ref.xul
+skip-if(B2G&&browserIsRemote) == multiple-noblur.xul multiple-noblur-ref.xul
 HTTP(..) == blur-opacity.html blur-opacity-ref.html
 
 == basic.html basic-ref.html
 == basic-negcoord.html basic-negcoord-ref.html
 == basic-opacity.html basic-opacity-ref.html
 != blur.html blur-notref.html
 == color-inherit.html color-inherit-ref.html
 == color-parserorder.html color-parserorder-ref.html
--- a/layout/reftests/text-svgglyphs/reftest.list
+++ b/layout/reftests/text-svgglyphs/reftest.list
@@ -15,9 +15,9 @@ pref(gfx.font_rendering.opentype_svg.ena
 pref(gfx.font_rendering.opentype_svg.enabled,true)    fuzzy(1,12) == svg-glyph-objectopacity.svg svg-glyph-objectopacity-ref.svg # see bug 871961#c5
 pref(gfx.font_rendering.opentype_svg.enabled,true)    == svg-glyph-objectopacity2.svg svg-glyph-objectopacity2-ref.svg
 pref(gfx.font_rendering.opentype_svg.enabled,true)    == svg-glyph-paintnone.svg svg-glyph-paintnone-ref.svg
 pref(gfx.font_rendering.opentype_svg.enabled,true)    == svg-glyph-cachedopacity.svg svg-glyph-cachedopacity-ref.svg
 pref(gfx.font_rendering.opentype_svg.enabled,true)    fuzzy-if(cocoaWidget,255,100) == svg-glyph-objectvalue.svg svg-glyph-objectvalue-ref.svg
 pref(gfx.font_rendering.opentype_svg.enabled,true)    fails == svg-glyph-mask.svg svg-glyph-mask-ref.svg # bug 872483
 pref(gfx.font_rendering.opentype_svg.enabled,true)    == svg-glyph-paint-server.svg svg-glyph-paint-server-ref.svg
 pref(gfx.font_rendering.opentype_svg.enabled,true)    == svg-glyph-transform.svg svg-glyph-transform-ref.svg
-pref(gfx.font_rendering.opentype_svg.enabled,true)    == svg-glyph-extents.html svg-glyph-extents-ref.html
+pref(gfx.font_rendering.opentype_svg.enabled,true)    random-if(B2G&&browserIsRemote) == svg-glyph-extents.html svg-glyph-extents-ref.html
--- a/layout/reftests/text/reftest.list
+++ b/layout/reftests/text/reftest.list
@@ -12,21 +12,21 @@ random-if(!cocoaWidget) == font-size-adj
 # see bug #366138 for some (inconclusive) discussion
 # == font-size-adjust-03.html font-size-adjust-03-ref.html
 == justification-1.html justification-1-ref.html
 == justification-2a.html justification-2-ref.html
 == justification-2b.html justification-2-ref.html
 == justification-2c.html justification-2-ref.html
 != justification-2d.html justification-2-ref.html
 HTTP(..) load ligature-with-space-1.html
-== line-editing-1a.html line-editing-1-ref.html
-== line-editing-1b.html line-editing-1-ref.html
-== line-editing-1c.html line-editing-1-ref.html
-== line-editing-1d.html line-editing-1-ref.html
-== line-editing-1e.html line-editing-1-ref.html
+random-if(B2G&&browserIsRemote) == line-editing-1a.html line-editing-1-ref.html
+random-if(B2G&&browserIsRemote) == line-editing-1b.html line-editing-1-ref.html
+random-if(B2G&&browserIsRemote) == line-editing-1c.html line-editing-1-ref.html
+random-if(B2G&&browserIsRemote) == line-editing-1d.html line-editing-1-ref.html
+random-if(B2G&&browserIsRemote) == line-editing-1e.html line-editing-1-ref.html
 fails-if(cocoaWidget||winWidget) HTTP(..) == lineheight-metrics-1.html lineheight-metrics-1-ref.html # bug 657864
 == lineheight-percentage-1.html lineheight-percentage-1-ref.html
 skip-if(B2G) == long-1.html long-ref.html
 fuzzy-if(Android,255,42) == pre-line-1.html pre-line-1-ref.html
 == pre-line-2.html pre-line-2-ref.html
 == pre-line-3.html pre-line-3-ref.html
 == pre-line-4.html pre-line-4-ref.html
 == pre-discard-newlines-1.html pre-discard-newlines-1-ref.html
@@ -96,17 +96,17 @@ HTTP(..) == synthetic-bold-papyrus-01.ht
 != text-align-center-last-end.html text-align-center-last-justify.html
 != text-align-center-last-center.html text-align-center-last-justify.html
 != text-align-justify-last-start.html text-align-justify-last-end.html
 != text-align-justify-last-start.html text-align-justify-last-center.html
 != text-align-justify-last-start.html text-align-justify-last-justify.html
 != text-align-justify-last-end.html text-align-justify-last-center.html
 != text-align-justify-last-end.html text-align-justify-last-justify.html
 != text-align-justify-last-center.html text-align-justify-last-justify.html
-== text-align-left-in-rtl-block.html text-align-left-in-rtl-block-ref.html
+fails-if(B2G&&browserIsRemote) == text-align-left-in-rtl-block.html text-align-left-in-rtl-block-ref.html
 HTTP(..) == variation-selector-unsupported-1.html variation-selector-unsupported-1-ref.html
 == white-space-1a.html white-space-1-ref.html
 == white-space-1b.html white-space-1-ref.html
 == white-space-2.html white-space-2-ref.html
 == wordbreak-1.html wordbreak-1-ref.html
 == wordbreak-2.html wordbreak-2-ref.html
 == wordbreak-3.html wordbreak-3-ref.html
 skip-if((Android&&(AndroidVersion==10||AndroidVersion==17))||(B2G&&browserIsRemote)) == wordbreak-4a.html wordbreak-4a-ref.html
@@ -158,17 +158,17 @@ random-if(!winWidget) == arial-bold-lam-
 # in the 'cmap' will prevent the test font (without GSUB) being used.
 skip-if(B2G) fails-if(cocoaWidget||Android) HTTP(..) == arabic-fallback-1.html arabic-fallback-1-ref.html
 fails-if(cocoaWidget||Android||B2G) HTTP(..) == arabic-fallback-2.html arabic-fallback-2-ref.html
 fails-if(cocoaWidget||Android||B2G) HTTP(..) == arabic-fallback-3.html arabic-fallback-3-ref.html
 fails-if(!cocoaWidget&&!Android&&!B2G) HTTP(..) != arabic-fallback-4.html arabic-fallback-4-notref.html
 == arabic-marks-1.html arabic-marks-1-ref.html
 
 == 726392-1.html 726392-1-ref.html
-== 726392-2.html 726392-2-ref.html
+fails-if(B2G&&browserIsRemote) == 726392-2.html 726392-2-ref.html
 skip-if(B2G) == 726392-3.html 726392-3-ref.html
 == 745555-1.html 745555-1-ref.html
 == 745555-2.html 745555-2-ref.html
 == 820255.html 820255-ref.html
 
 # ensure emoji chars don't render blank (bug 715798, bug 779042);
 # should at least render hexboxes if there's no font support
 != emoji-01.html emoji-01-notref.html
--- a/layout/reftests/transform-3d/reftest.list
+++ b/layout/reftests/transform-3d/reftest.list
@@ -6,26 +6,26 @@
 # Check that the perspectve() transform function results in some visual changes
 != rotatex-perspective-1a.html rotatex-1-ref.html
 # Check that -moz-perspective results in visual changes to child transformed elements
 != rotatex-perspective-1b.html rotatex-1-ref.html
 # -moz-perspective should only apply to child elements
 == rotatex-perspective-1c.html rotatex-1-ref.html
 == rotatex-perspective-3a.html rotatex-perspective-3-ref.html
 == scalez-1a.html scalez-1-ref.html
-== preserve3d-1a.html preserve3d-1-ref.html
+random-if(B2G&&browserIsRemote) == preserve3d-1a.html preserve3d-1-ref.html # Bug 988766
 == preserve3d-1b.html about:blank
 == preserve3d-clipped.html about:blank 
 == preserve3d-2a.html preserve3d-2-ref.html
 == preserve3d-2b.html preserve3d-2-ref.html
 == preserve3d-2c.html preserve3d-2-ref.html
 == preserve3d-2d.html preserve3d-2-ref.html
 == preserve3d-3a.html preserve3d-3-ref.html
 skip-if(B2G) == preserve3d-4a.html green-rect.html
-fuzzy-if(Android&&AndroidVersion>=15,4,300) == preserve3d-5a.html preserve3d-5-ref.html
+fuzzy-if(Android&&AndroidVersion>=15,4,300) random-if(B2G&&browserIsRemote) == preserve3d-5a.html preserve3d-5-ref.html # Bug 988767
 == scale3d-z.html scalez-1-ref.html
 fuzzy-if(winWidget,102,580) fuzzy-if(d2d,143,681) fuzzy-if(OSX==10.8,224,924) fuzzy-if(OSX==10.9,224,924) == scale3d-all.html scale3d-1-ref.html # subpixel AA
 fuzzy-if(winWidget,102,580) fuzzy-if(d2d,143,681) fuzzy-if(OSX==10.8,224,924) fuzzy-if(OSX==10.9,224,924) == scale3d-all-separate.html scale3d-1-ref.html # subpixel AA
 == scale3d-xz.html scale3d-1-ref.html
 == translatez-1a.html translatez-1-ref.html
 != translatez-1b.html translatez-1-ref.html
 == translate3d-1a.html translate3d-1-ref.html
 == matrix3d-1a.html matrix3d-1-ref.html
--- a/layout/reftests/transform/reftest.list
+++ b/layout/reftests/transform/reftest.list
@@ -1,19 +1,19 @@
 # Transforms specifying singular matrices shouldn't display at all.
 # NOTE: Regressions might manifest themselves as reftest timeouts on
 # this test.
 == singular-1a.html about:blank
 # Multiple transforms should act identically to nested divs.
 == compound-1a.html compound-1-ref.html
 != compound-1a.html compound-1-fail.html
 == dynamic-inherit-1.html dynamic-inherit-1-ref.html
-== dynamic-addremove-1a.html dynamic-addremove-1-ref.html
-== dynamic-addremove-1b.html dynamic-addremove-1-ref.html
-== dynamic-addremove-1c.html dynamic-addremove-1-ref.html
+fails-if(B2G&&browserIsRemote) == dynamic-addremove-1a.html dynamic-addremove-1-ref.html
+fails-if(B2G&&browserIsRemote) == dynamic-addremove-1b.html dynamic-addremove-1-ref.html
+fails-if(B2G&&browserIsRemote) == dynamic-addremove-1c.html dynamic-addremove-1-ref.html
 # translatex should act like position: relative
 skip-if(B2G) == translatex-1a.html translatex-1-ref.html # bug 773482
 skip-if(B2G) == translatex-1b.html translatex-1-ref.html
 skip-if(B2G) == translatex-1c.html translatex-1-ref.html
 skip-if(B2G) == translatex-1d.html translatex-1-ref.html # bug 773482
 skip-if(B2G) == translatex-1e.html translatex-1-ref.html
 skip-if(B2G) == translatex-1a.html translatex-1-ref-2.html
 # translatey should act like position: relative
@@ -110,17 +110,17 @@ skip-if(B2G) == stresstest-1.html stress
 # Some simple checks that it obeys selector operations
 == descendant-1.html descendant-1-ref.html
 == propagate-inherit-boolean.html propagate-inherit-boolean-ref.html
 # Ensure you can't move outside an iframe
 == iframe-1.html iframe-1-ref.html
 # Bugs
 == 601894-1.html 601894-ref.html
 == 601894-2.html 601894-ref.html
-== 830299-1.html 830299-1-ref.html
+random-if(B2G&&browserIsRemote) == 830299-1.html 830299-1-ref.html
 # Bug 722777
 == table-1a.html table-1-ref.html
 == table-1b.html table-1-ref.html
 == table-1c.html table-1-ref.html
 == table-2a.html table-2-ref.html
 == table-2b.html table-2-ref.html
 # Bug 722463
 == inline-1a.html inline-1-ref.html
--- a/layout/reftests/w3c-css/submitted/ui3/reftest.list
+++ b/layout/reftests/w3c-css/submitted/ui3/reftest.list
@@ -3,11 +3,11 @@
 == box-sizing-border-box-003.xht box-sizing-border-box-003-ref.xht
 == box-sizing-border-box-004.xht box-sizing-border-box-004-ref.xht
 == box-sizing-content-box-001.xht box-sizing-content-box-001-ref.xht
 == box-sizing-content-box-002.xht box-sizing-content-box-002-ref.xht
 == box-sizing-content-box-003.xht box-sizing-content-box-003-ref.xht
 == box-sizing-padding-box-001.xht box-sizing-padding-box-001-ref.xht
 == box-sizing-padding-box-002.xht box-sizing-padding-box-002-ref.xht
 == box-sizing-padding-box-003.xht box-sizing-padding-box-003-ref.xht
-fails-if(B2G) random-if(Android) == box-sizing-replaced-001.xht box-sizing-replaced-001-ref.xht
-== box-sizing-replaced-002.xht box-sizing-replaced-002-ref.xht
-== box-sizing-replaced-003.xht box-sizing-replaced-003-ref.xht
+random-if(Android) skip-if(B2G&&browserIsRemote) == box-sizing-replaced-001.xht box-sizing-replaced-001-ref.xht # Bug 982547
+random-if(B2G&&browserIsRemote) == box-sizing-replaced-002.xht box-sizing-replaced-002-ref.xht
+random-if(B2G&&browserIsRemote) == box-sizing-replaced-003.xht box-sizing-replaced-003-ref.xht
--- a/layout/reftests/webcomponents/reftest.list
+++ b/layout/reftests/webcomponents/reftest.list
@@ -1,9 +1,9 @@
-pref(dom.webcomponents.enabled,true) == cross-tree-selection-1.html cross-tree-selection-1-ref.html
+pref(dom.webcomponents.enabled,true) random-if(B2G&&browserIsRemote) == cross-tree-selection-1.html cross-tree-selection-1-ref.html
 pref(dom.webcomponents.enabled,true) == basic-shadow-1.html basic-shadow-1-ref.html
 pref(dom.webcomponents.enabled,true) == basic-shadow-2.html basic-shadow-2-ref.html
 pref(dom.webcomponents.enabled,true) == basic-shadow-3.html basic-shadow-3-ref.html
 pref(dom.webcomponents.enabled,true) == basic-shadow-4.html basic-shadow-4-ref.html
 pref(dom.webcomponents.enabled,true) == basic-insertion-point-1.html basic-insertion-point-1-ref.html
 pref(dom.webcomponents.enabled,true) == basic-insertion-point-2.html basic-insertion-point-2-ref.html
 pref(dom.webcomponents.enabled,true) == adjacent-insertion-points-1.html adjacent-insertion-points-1-ref.html
 pref(dom.webcomponents.enabled,true) == adjacent-insertion-points-2.html adjacent-insertion-points-2-ref.html
--- a/layout/reftests/xul-document-load/reftest.list
+++ b/layout/reftests/xul-document-load/reftest.list
@@ -1,23 +1,23 @@
-== test001.xul reference-green-window.xul
-== test002.xul reference-green-window.xul
-== test003.xul reference-green-window.xul
-== test004.xul reference-green-window.xul
-== test005.xul reference-green-window.xul
-== test006.xul reference-green-window.xul
-== test007.xul reference-green-window.xul
-== test008.xul reference-green-window.xul
-== test009.xul reference-green-window.xul
-== test010.xul reference-green-window.xul
-== test011.xul reference-green-window.xul
-== test012.xul reference-green-window.xul
-== test013.xul reference-green-window.xul
-== test014.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test001.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test002.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test003.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test004.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test005.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test006.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test007.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test008.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test009.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test010.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test011.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test012.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test013.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test014.xul reference-green-window.xul
 # Disabled due to compartments for now.
-#== test015.xul reference-green-window.xul
-== test016.xul reference-green-window.xul
-== test017.xul reference-green-window.xul
-== test018.xul reference-green-window.xul
-== test019.xul reference-green-window.xul
-== test020.xul reference-green-window.xul
-== test021.xul reference-green-window.xul
-== test022.xul reference-green-window.xul
+#skip-if(B2G&&browserIsRemote) == test015.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test016.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test017.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test018.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test019.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test020.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test021.xul reference-green-window.xul
+skip-if(B2G&&browserIsRemote) == test022.xul reference-green-window.xul
--- a/layout/reftests/xul/reftest.list
+++ b/layout/reftests/xul/reftest.list
@@ -1,9 +1,9 @@
-== menuitem-key.xul menuitem-key-ref.xul
+skip-if(B2G&&browserIsRemote)  == menuitem-key.xul menuitem-key-ref.xul
 # these random-if(Android) are due to differences between Android Native & Xul, see bug 732569
-random-if(Android||B2G) == menulist-shrinkwrap-1.xul menulist-shrinkwrap-1-ref.xul
-random-if(Android||B2G) fails-if(winWidget) == menulist-shrinkwrap-2.xul menulist-shrinkwrap-2-ref.xul
-== textbox-overflow-1.xul textbox-overflow-1-ref.xul # for bug 749658
+random-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == menulist-shrinkwrap-1.xul menulist-shrinkwrap-1-ref.xul
+random-if(Android||(B2G&&browserIsRemote)) fails-if(winWidget) skip-if(B2G&&browserIsRemote) == menulist-shrinkwrap-2.xul menulist-shrinkwrap-2-ref.xul
+skip-if(B2G&&browserIsRemote) == textbox-overflow-1.xul textbox-overflow-1-ref.xul # for bug 749658
 # accesskeys are not normally displayed on Mac, so skip this test
-skip-if(cocoaWidget) == accesskey.xul accesskey-ref.xul
-fails-if(cocoaWidget) == tree-row-outline-1.xul tree-row-outline-1-ref.xul
-!= tree-row-outline-1.xul tree-row-outline-1-notref.xul
+skip-if(cocoaWidget) skip-if(B2G&&browserIsRemote) == accesskey.xul accesskey-ref.xul
+fails-if(cocoaWidget) skip-if(B2G&&browserIsRemote) == tree-row-outline-1.xul tree-row-outline-1-ref.xul
+skip-if(B2G&&browserIsRemote) != tree-row-outline-1.xul tree-row-outline-1-notref.xul
--- a/layout/tools/reftest/mach_commands.py
+++ b/layout/tools/reftest/mach_commands.py
@@ -200,16 +200,21 @@ class ReftestRunner(MozbuildObject):
             # TODO Find adb automatically if it isn't on the path
             raise Exception(ADB_NOT_FOUND % ('%s-remote' % suite, b2g_home))
 
         options.b2gPath = b2g_home
         options.logcat_dir = self.reftest_dir
         options.httpdPath = os.path.join(self.topsrcdir, 'netwerk', 'test', 'httpserver')
         options.xrePath = xre_path
         options.ignoreWindowSize = True
+
+        # Don't enable oop for crashtest until they run oop in automation
+        if suite == 'reftest':
+            options.oop = True
+
         return reftest.run_remote_reftests(parser, options, args)
 
     def run_desktop_test(self, test_file=None, filter=None, suite=None,
             debugger=None, parallel=False, shuffle=False,
             e10s=False, this_chunk=None, total_chunks=None):
         """Runs a reftest.
 
         test_file is a path to a test file. It can be a relative path from the
--- a/layout/xul/grid/reftests/reftest.list
+++ b/layout/xul/grid/reftests/reftest.list
@@ -1,18 +1,18 @@
-== row-sizing-1.xul row-sizing-1-ref.xul
-== column-sizing-1.xul column-sizing-1-ref.xul
-== row-or-column-sizing-1.xul row-or-column-sizing-2.xul
-== row-or-column-sizing-1.xul row-or-column-sizing-3.xul
-== row-or-column-sizing-1.xul row-or-column-sizing-4.xul
-== z-order-1.xul z-order-1-ref.xul
-== z-order-2.xul z-order-2-ref.xul
-== not-full-basic.xul not-full-basic-ref.xhtml
-== not-full-grid-pack-align.xul not-full-basic-ref.xhtml
-== not-full-row-group-align.xul not-full-row-group-align-ref.xhtml # does anyone want/need this behavior?
-== not-full-row-group-pack.xul not-full-row-group-pack-ref.xhtml
-== not-full-row-group-direction.xul not-full-row-group-direction-ref.xhtml
-== not-full-row-leaf-align.xul not-full-basic-ref.xhtml
-== not-full-row-leaf-pack.xul not-full-row-leaf-pack-ref.xhtml
-== not-full-row-leaf-direction.xul not-full-row-leaf-pack-ref.xhtml
+skip-if(B2G&&browserIsRemote) == row-sizing-1.xul row-sizing-1-ref.xul
+skip-if(B2G&&browserIsRemote) == column-sizing-1.xul column-sizing-1-ref.xul
+skip-if(B2G&&browserIsRemote) == row-or-column-sizing-1.xul row-or-column-sizing-2.xul
+skip-if(B2G&&browserIsRemote) == row-or-column-sizing-1.xul row-or-column-sizing-3.xul
+skip-if(B2G&&browserIsRemote) == row-or-column-sizing-1.xul row-or-column-sizing-4.xul
+skip-if(B2G&&browserIsRemote) == z-order-1.xul z-order-1-ref.xul
+skip-if(B2G&&browserIsRemote) == z-order-2.xul z-order-2-ref.xul
+skip-if(B2G&&browserIsRemote) == not-full-basic.xul not-full-basic-ref.xhtml
+skip-if(B2G&&browserIsRemote) == not-full-grid-pack-align.xul not-full-basic-ref.xhtml
+skip-if(B2G&&browserIsRemote) == not-full-row-group-align.xul not-full-row-group-align-ref.xhtml # does anyone want/need this behavior?
+skip-if(B2G&&browserIsRemote) == not-full-row-group-pack.xul not-full-row-group-pack-ref.xhtml
+skip-if(B2G&&browserIsRemote) == not-full-row-group-direction.xul not-full-row-group-direction-ref.xhtml
+skip-if(B2G&&browserIsRemote) == not-full-row-leaf-align.xul not-full-basic-ref.xhtml
+skip-if(B2G&&browserIsRemote) == not-full-row-leaf-pack.xul not-full-row-leaf-pack-ref.xhtml
+skip-if(B2G&&browserIsRemote) == not-full-row-leaf-direction.xul not-full-row-leaf-pack-ref.xhtml
 skip-if(B2G) fails-if(Android&&browserIsRemote) == scrollable-columns.xul scrollable-columns-ref.xhtml # bug 650597, 732569
-fails == scrollable-rows.xul scrollable-rows-ref.xhtml
-== sizing-2d.xul sizing-2d-ref.xul
+fails skip-if(B2G&&browserIsRemote) == scrollable-rows.xul scrollable-rows-ref.xhtml
+skip-if(B2G&&browserIsRemote) == sizing-2d.xul sizing-2d-ref.xul
--- a/layout/xul/reftest/reftest.list
+++ b/layout/xul/reftest/reftest.list
@@ -1,6 +1,6 @@
-fails-if(Android||B2G) == textbox-multiline-noresize.xul textbox-multiline-ref.xul # reference is blank on Android (due to no native theme support?)
-!= textbox-multiline-resize.xul textbox-multiline-ref.xul 
-== popup-explicit-size.xul popup-explicit-size-ref.xul
-random-if(Android) == image-size.xul image-size-ref.xul
-== image-scaling-min-height-1.xul image-scaling-min-height-1-ref.xul
-== textbox-text-transform.xul textbox-text-transform-ref.xul
+fails-if(Android||(B2G&&browserIsRemote)) skip-if(B2G&&browserIsRemote) == textbox-multiline-noresize.xul textbox-multiline-ref.xul # reference is blank on Android (due to no native theme support?)
+skip-if(B2G&&browserIsRemote) != textbox-multiline-resize.xul textbox-multiline-ref.xul 
+skip-if(B2G&&browserIsRemote) == popup-explicit-size.xul popup-explicit-size-ref.xul
+random-if(Android) skip-if(B2G&&browserIsRemote) == image-size.xul image-size-ref.xul
+skip-if(B2G&&browserIsRemote) == image-scaling-min-height-1.xul image-scaling-min-height-1-ref.xul
+== textbox-text-transform.xul textbox-text-transform-ref.xul
\ No newline at end of file
--- a/netwerk/protocol/rtsp/rtsp/APacketSource.cpp
+++ b/netwerk/protocol/rtsp/rtsp/APacketSource.cpp
@@ -401,17 +401,21 @@ static sp<ABuffer> MakeMPEG4VideoCodecSp
 
 APacketSource::APacketSource(
         const sp<ASessionDescription> &sessionDesc, size_t index)
     : mInitCheck(NO_INIT),
       mFormat(new MetaData) {
     unsigned long PT;
     AString desc;
     AString params;
-    sessionDesc->getFormatType(index, &PT, &desc, &params);
+
+    if (!sessionDesc->getFormatType(index, &PT, &desc, &params)) {
+      mInitCheck = ERROR_UNSUPPORTED;
+      return;
+    }
 
     int64_t durationUs;
     if (sessionDesc->getDurationUs(&durationUs)) {
         mFormat->setInt64(kKeyDuration, durationUs);
     } else {
         // Set its value to zero(long long) to indicate that this is a live stream.
         mFormat->setInt64(kKeyDuration, 0ll);
     }
--- a/netwerk/protocol/rtsp/rtsp/ASessionDescription.cpp
+++ b/netwerk/protocol/rtsp/rtsp/ASessionDescription.cpp
@@ -189,17 +189,17 @@ bool ASessionDescription::findAttribute(
         return false;
     }
 
     *value = track.valueAt(i);
 
     return true;
 }
 
-void ASessionDescription::getFormatType(
+bool ASessionDescription::getFormatType(
         size_t index, unsigned long *PT,
         AString *desc, AString *params) const {
     AString format;
     getFormat(index, &format);
 
     const char *lastSpacePos = strrchr(format.c_str(), ' ');
     CHECK(lastSpacePos != NULL);
 
@@ -208,22 +208,29 @@ void ASessionDescription::getFormatType(
     CHECK_GT(end, lastSpacePos + 1);
     CHECK_EQ(*end, '\0');
 
     *PT = x;
 
     char key[20];
     sprintf(key, "a=rtpmap:%lu", x);
 
-    CHECK(findAttribute(index, key, desc));
+    if (!findAttribute(index, key, desc)) {
+        // We only support dynamic payload type assignment for now.
+        // If SDP description doesn't have the "a=rtpmap:" line, it is static
+        // payload type assignment and we refuse to handle it.
+        return false;
+    }
 
     sprintf(key, "a=fmtp:%lu", x);
     if (!findAttribute(index, key, params)) {
         params->clear();
     }
+
+    return true;
 }
 
 bool ASessionDescription::getDimensions(
         size_t index, unsigned long PT,
         int32_t *width, int32_t *height) const {
     *width = 0;
     *height = 0;
 
--- a/netwerk/protocol/rtsp/rtsp/ASessionDescription.h
+++ b/netwerk/protocol/rtsp/rtsp/ASessionDescription.h
@@ -36,17 +36,17 @@ struct ASessionDescription : public RefB
     bool setTo(const void *data, size_t size);
     bool isValid() const;
 
     // Actually, 1 + number of tracks, as index 0 is reserved for the
     // session description root-level attributes.
     size_t countTracks() const;
     void getFormat(size_t index, AString *value) const;
 
-    void getFormatType(
+    bool getFormatType(
             size_t index, unsigned long *PT,
             AString *desc, AString *params) const;
 
     bool getDimensions(
             size_t index, unsigned long PT,
             int32_t *width, int32_t *height) const;
 
     bool getDurationUs(int64_t *durationUs) const;
--- a/testing/config/mozharness/b2g_emulator_config.py
+++ b/testing/config/mozharness/b2g_emulator_config.py
@@ -22,17 +22,17 @@ config = {
         "--quiet", "--certificate-path=%(certificate_path)s",
     ],
 
     "reftest_options": [
         "--adbpath=%(adbpath)s", "--b2gpath=%(b2gpath)s", "--emulator=%(emulator)s",
         "--emulator-res=800x1000", "--logcat-dir=%(logcat_dir)s",
         "--remote-webserver=%(remote_webserver)s", "--ignore-window-size",
         "--xre-path=%(xre_path)s", "--symbols-path=%(symbols_path)s", "--busybox=%(busybox)s",
-        "--total-chunks=%(total_chunks)s", "--this-chunk=%(this_chunk)s",
+        "--total-chunks=%(total_chunks)s", "--this-chunk=%(this_chunk)s", "--enable-oop",
         "%(test_manifest)s",
     ],
 
     "crashtest_options": [
         "--adbpath=%(adbpath)s", "--b2gpath=%(b2gpath)s", "--emulator=%(emulator)s",
         "--emulator-res=800x1000", "--logcat-dir=%(logcat_dir)s",
         "--remote-webserver=%(remote_webserver)s", "--ignore-window-size",
         "--xre-path=%(xre_path)s", "--symbols-path=%(symbols_path)s", "--busybox=%(busybox)s",
--- a/toolkit/content/tests/reftests/reftest.list
+++ b/toolkit/content/tests/reftests/reftest.list
@@ -1,2 +1,2 @@
-random-if(cocoaWidget) == bug-442419-progressmeter-max.xul bug-442419-progressmeter-max-ref.xul # fails most of the time on Mac because progress meter animates
-!= textbox-multiline-default-value.xul textbox-multiline-empty.xul
+skip-if(B2G&&browserIsRemote) random-if(cocoaWidget) == bug-442419-progressmeter-max.xul bug-442419-progressmeter-max-ref.xul # fails most of the time on Mac because progress meter animates # Bug 974780
+skip-if(B2G&&browserIsRemote) != textbox-multiline-default-value.xul textbox-multiline-empty.xul # Bug 974780
--- a/toolkit/devtools/server/actors/webapps.js
+++ b/toolkit/devtools/server/actors/webapps.js
@@ -249,17 +249,17 @@ WebappsActor.prototype = {
         aApp.manifest = manifest;
 
         // Needed to evict manifest cache on content side
         // (has to be dispatched first, otherwise other messages like
         // Install:Return:OK are going to use old manifest version)
         reg.broadcastMessage("Webapps:UpdateState", {
           app: aApp,
           manifest: manifest,
-          manifestURL: aApp.manifestURL
+          id: aApp.id
         });
         reg.broadcastMessage("Webapps:FireEvent", {
           eventType: ["downloadsuccess", "downloadapplied"],
           manifestURL: aApp.manifestURL
         });
         reg.broadcastMessage("Webapps:AddApp", { id: aId, app: aApp });
         reg.broadcastMessage("Webapps:Install:Return:OK", {
           app: aApp,
--- a/widget/gonk/libdisplay/BootAnimation.cpp
+++ b/widget/gonk/libdisplay/BootAnimation.cpp
@@ -519,17 +519,17 @@ AnimationThread(void *)
                                    GRALLOC_USAGE_SW_WRITE_OFTEN |
                                    GRALLOC_USAGE_HW_FB,
                                    0, 0, width, height, &vaddr)) {
                     LOGW("Failed to lock buffer_handle_t");
                     display->QueueBuffer(buf);
                     break;
                 }
 
-                if (buf->height == frame.height && buf->width == frame.width) {
+                if (buf->height == frame.height && buf->stride == frame.width) {
                     memcpy(vaddr, frame.buf,
                            frame.width * frame.height * frame.bytepp);
                 } else if (buf->height >= frame.height &&
                            buf->width >= frame.width) {
                     int startx = (buf->width - frame.width) / 2;
                     int starty = (buf->height - frame.height) / 2;
 
                     int src_stride = frame.width * frame.bytepp;