Merge b2g-inbound to m-c a=merge
authorWes Kocher <wkocher@mozilla.com>
Tue, 17 Jun 2014 18:55:06 -0700
changeset 210039 37f08ddaea48c57d52f5fa397cc3dfc0e8e09ece
parent 209982 95a3ef4065fe1def4b8f75bdbb1af857190703f3 (current diff)
parent 210038 86fb458dcc995ef01f30eb174465e8288a7912b2 (diff)
child 210048 c58f711abe1611d939ae000b4df58b7bb00484a7
child 210065 64acc3e5307cfea45558f029d7118bb846056147
child 210071 5e2296adfe39fa8e4636bf5bc7e7a722d3c3a1e2
push id3857
push userraliiev@mozilla.com
push dateTue, 02 Sep 2014 16:39:23 +0000
treeherdermozilla-beta@5638b907b505 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone33.0a1
first release with
nightly linux32
37f08ddaea48 / 33.0a1 / 20140618030215 / files
nightly linux64
37f08ddaea48 / 33.0a1 / 20140618030215 / files
nightly mac
37f08ddaea48 / 33.0a1 / 20140618030215 / files
nightly win32
37f08ddaea48 / 33.0a1 / 20140618030215 / files
nightly win64
37f08ddaea48 / 33.0a1 / 20140618030215 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge b2g-inbound to m-c a=merge
dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_get.js
dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_set.js
--- 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="83392cae2c964fa6f8a97ac3fc515c3f94ef3c1c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="431aed0a7c7560c6eacd35ea69aa0a7a4ebe72c7"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="44b04243e31cd16f3baf54fcd4b5fecf9deb8b94"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="3326b51017252e09ccdd715dec6c5e12a7d1ecfe"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="c510babaf88dfa2cfe2c202afb2649ee124569af"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="c9cc24ebbfa5427defcc4c99d4d08c2ee6cbcea8"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89b697fee631fce716942d65b3d05fb08128bbab"/>
   <!-- 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="cc67f31dc638c0b7edba3cf7e3d87cadf0ed52bf">
     <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="83392cae2c964fa6f8a97ac3fc515c3f94ef3c1c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="431aed0a7c7560c6eacd35ea69aa0a7a4ebe72c7"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="44b04243e31cd16f3baf54fcd4b5fecf9deb8b94"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="c510babaf88dfa2cfe2c202afb2649ee124569af"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="c9cc24ebbfa5427defcc4c99d4d08c2ee6cbcea8"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89b697fee631fce716942d65b3d05fb08128bbab"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
--- a/b2g/config/emulator-kk/sources.xml
+++ b/b2g/config/emulator-kk/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="276ce45e78b09c4a4ee643646f691d22804754c1">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="83392cae2c964fa6f8a97ac3fc515c3f94ef3c1c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="431aed0a7c7560c6eacd35ea69aa0a7a4ebe72c7"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="44b04243e31cd16f3baf54fcd4b5fecf9deb8b94"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="c510babaf88dfa2cfe2c202afb2649ee124569af"/>
   <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="c9cc24ebbfa5427defcc4c99d4d08c2ee6cbcea8"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89b697fee631fce716942d65b3d05fb08128bbab"/>
   <!-- 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="83392cae2c964fa6f8a97ac3fc515c3f94ef3c1c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="431aed0a7c7560c6eacd35ea69aa0a7a4ebe72c7"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="44b04243e31cd16f3baf54fcd4b5fecf9deb8b94"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="3326b51017252e09ccdd715dec6c5e12a7d1ecfe"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="c510babaf88dfa2cfe2c202afb2649ee124569af"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="c9cc24ebbfa5427defcc4c99d4d08c2ee6cbcea8"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89b697fee631fce716942d65b3d05fb08128bbab"/>
   <!-- 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
@@ -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="cc67f31dc638c0b7edba3cf7e3d87cadf0ed52bf">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <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="83392cae2c964fa6f8a97ac3fc515c3f94ef3c1c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="431aed0a7c7560c6eacd35ea69aa0a7a4ebe72c7"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="44b04243e31cd16f3baf54fcd4b5fecf9deb8b94"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="c510babaf88dfa2cfe2c202afb2649ee124569af"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="c9cc24ebbfa5427defcc4c99d4d08c2ee6cbcea8"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89b697fee631fce716942d65b3d05fb08128bbab"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="e95b4ce22c825da44d14299e1190ea39a5260bde"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="471afab478649078ad7c75ec6b252481a59e19b8"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
         "git_revision": "", 
         "remote": "", 
         "branch": ""
     }, 
-    "revision": "d25f3c113e3543c8f15143a858f8e9d880dfc071", 
+    "revision": "371393ff791d599fe41e90ed64e17d2055605966", 
     "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="83392cae2c964fa6f8a97ac3fc515c3f94ef3c1c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="431aed0a7c7560c6eacd35ea69aa0a7a4ebe72c7"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="44b04243e31cd16f3baf54fcd4b5fecf9deb8b94"/>
   <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="c510babaf88dfa2cfe2c202afb2649ee124569af"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="c9cc24ebbfa5427defcc4c99d4d08c2ee6cbcea8"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89b697fee631fce716942d65b3d05fb08128bbab"/>
   <!-- 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="83392cae2c964fa6f8a97ac3fc515c3f94ef3c1c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="431aed0a7c7560c6eacd35ea69aa0a7a4ebe72c7"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="44b04243e31cd16f3baf54fcd4b5fecf9deb8b94"/>
   <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="c510babaf88dfa2cfe2c202afb2649ee124569af"/>
   <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/nexus-4/sources.xml
+++ b/b2g/config/nexus-4/sources.xml
@@ -12,20 +12,20 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="cc67f31dc638c0b7edba3cf7e3d87cadf0ed52bf">
     <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="83392cae2c964fa6f8a97ac3fc515c3f94ef3c1c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="431aed0a7c7560c6eacd35ea69aa0a7a4ebe72c7"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="44b04243e31cd16f3baf54fcd4b5fecf9deb8b94"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="c510babaf88dfa2cfe2c202afb2649ee124569af"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="c9cc24ebbfa5427defcc4c99d4d08c2ee6cbcea8"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89b697fee631fce716942d65b3d05fb08128bbab"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
--- a/b2g/config/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="83392cae2c964fa6f8a97ac3fc515c3f94ef3c1c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="431aed0a7c7560c6eacd35ea69aa0a7a4ebe72c7"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="44b04243e31cd16f3baf54fcd4b5fecf9deb8b94"/>
   <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="c510babaf88dfa2cfe2c202afb2649ee124569af"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="c9cc24ebbfa5427defcc4c99d4d08c2ee6cbcea8"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="89b697fee631fce716942d65b3d05fb08128bbab"/>
   <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/dom/bluetooth2/BluetoothService.cpp
+++ b/dom/bluetooth2/BluetoothService.cpp
@@ -162,17 +162,17 @@ BluetoothService::ToggleBtAck::Run()
   sBluetoothService->SetEnabled(mEnabled);
   sToggleInProgress = false;
 
   sBluetoothService->FireAdapterStateChanged(mEnabled);
 
   return NS_OK;
 }
 
-class BluetoothService::StartupTask : public nsISettingsServiceCallback
+class BluetoothService::StartupTask MOZ_FINAL : public nsISettingsServiceCallback
 {
 public:
   NS_DECL_ISUPPORTS
 
   NS_IMETHOD Handle(const nsAString& aName, JS::Handle<JS::Value> aResult)
   {
     MOZ_ASSERT(NS_IsMainThread());
 
--- a/dom/bluetooth2/bluedroid/BluetoothServiceBluedroid.cpp
+++ b/dom/bluetooth2/bluedroid/BluetoothServiceBluedroid.cpp
@@ -62,16 +62,18 @@ static nsTArray<nsRefPtr<BluetoothReplyR
 static nsTArray<nsRefPtr<BluetoothReplyRunnable> > sBondingRunnableArray;
 static nsTArray<nsRefPtr<BluetoothReplyRunnable> > sUnbondingRunnableArray;
 
 // Static variables below should only be used on *callback thread*
 
 
 // Atomic static variables
 static Atomic<bool> sAdapterDiscoverable(false);
+static Atomic<bool> sAdapterDiscovering(false);
+static Atomic<bool> sAdapterEnabled(false);
 static Atomic<uint32_t> sAdapterDiscoverableTimeout(0);
 
 /**
  *  Classes only used in this file
  */
 class DistributeBluetoothSignalTask MOZ_FINAL : public nsRunnable
 {
 public:
@@ -298,33 +300,32 @@ PlayStatusStringToControlPlayStatus(cons
  *  Several callbacks are dispatched to main thread to avoid racing issues.
  */
 static void
 AdapterStateChangeCallback(bt_state_t aStatus)
 {
   MOZ_ASSERT(!NS_IsMainThread());
 
   BT_LOGR("BT_STATE: %d", aStatus);
+  sAdapterEnabled = (aStatus == BT_STATE_ON);
 
-  bool isBtEnabled = (aStatus == BT_STATE_ON);
-
-  if (!isBtEnabled &&
+  if (!sAdapterEnabled &&
       NS_FAILED(NS_DispatchToMainThread(new CleanupTask()))) {
     BT_WARNING("Failed to dispatch to main thread!");
     return;
   }
 
   nsRefPtr<nsRunnable> runnable =
-    new BluetoothService::ToggleBtAck(isBtEnabled);
+    new BluetoothService::ToggleBtAck(sAdapterEnabled);
   if (NS_FAILED(NS_DispatchToMainThread(runnable))) {
     BT_WARNING("Failed to dispatch to main thread!");
     return;
   }
 
-  if (isBtEnabled &&
+  if (sAdapterEnabled &&
       NS_FAILED(NS_DispatchToMainThread(new SetupAfterEnabledTask()))) {
     BT_WARNING("Failed to dispatch to main thread!");
     return;
   }
 
   // Resolve promise if existed
   if(!sChangeAdapterStateRunnableArray.IsEmpty()) {
     DispatchBluetoothReply(sChangeAdapterStateRunnableArray[0],
@@ -376,23 +377,18 @@ AdapterPropertiesCallback(bt_status_t aS
     } else if (p.type == BT_PROPERTY_BDNAME) {
       // Construct nsCString here because Bd name returned from bluedroid
       // is missing a null terminated character after SetProperty.
       propertyValue = sAdapterBdName = NS_ConvertUTF8toUTF16(
         nsCString((char*)p.val, p.len));
       BT_APPEND_NAMED_VALUE(props, "Name", propertyValue);
     } else if (p.type == BT_PROPERTY_ADAPTER_SCAN_MODE) {
       bt_scan_mode_t newMode = *(bt_scan_mode_t*)p.val;
-
-      if (newMode == BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
-        propertyValue = sAdapterDiscoverable = true;
-      } else {
-        propertyValue = sAdapterDiscoverable = false;
-      }
-
+      propertyValue = sAdapterDiscoverable =
+        (newMode == BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);
       BT_APPEND_NAMED_VALUE(props, "Discoverable", propertyValue);
     } else if (p.type == BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT) {
       propertyValue = sAdapterDiscoverableTimeout = *(uint32_t*)p.val;
       BT_APPEND_NAMED_VALUE(props, "DiscoverableTimeout", propertyValue);
     } else if (p.type == BT_PROPERTY_ADAPTER_BONDED_DEVICES) {
       // We have to cache addresses of bonded devices. Unlike BlueZ,
       // bluedroid would not send an another BT_PROPERTY_ADAPTER_BONDED_DEVICES
       // event after bond completed
@@ -593,16 +589,18 @@ public:
   }
 };
 
 static void
 DiscoveryStateChangedCallback(bt_discovery_state_t aState)
 {
   MOZ_ASSERT(!NS_IsMainThread());
 
+  sAdapterDiscovering = (aState == BT_DISCOVERY_STARTED);
+
   // Redirect to main thread to avoid racing problem
   NS_DispatchToMainThread(new DiscoveryStateChangedCallbackTask());
 }
 
 static void
 PinRequestCallback(bt_bdaddr_t* aRemoteBdAddress,
                    bt_bdname_t* aRemoteBdName, uint32_t aRemoteClass)
 {
@@ -709,29 +707,25 @@ BondStateChangedCallback(bt_status_t aSt
   if (aState == BT_BOND_STATE_BONDING) {
     // No need to handle bonding state
     return;
   }
 
   nsAutoString remoteBdAddress;
   BdAddressTypeToString(aRemoteBdAddress, remoteBdAddress);
 
-  if (aState == BT_BOND_STATE_BONDED &&
-      sAdapterBondedAddressArray.Contains(remoteBdAddress)) {
-    // See bug 940271 for more details about this case.
-    return;
-  }
-
-  bool bonded;
-  if (aState == BT_BOND_STATE_NONE) {
-    bonded = false;
+  bool bonded = (aState == BT_BOND_STATE_BONDED);
+  if (bonded) {
+    if (sAdapterBondedAddressArray.Contains(remoteBdAddress)) {
+      // See bug 940271 for more details about this case.
+      return;
+    }
+    sAdapterBondedAddressArray.AppendElement(remoteBdAddress);
+  } else {
     sAdapterBondedAddressArray.RemoveElement(remoteBdAddress);
-  } else if (aState == BT_BOND_STATE_BONDED) {
-    bonded = true;
-    sAdapterBondedAddressArray.AppendElement(remoteBdAddress);
   }
 
   // Update bonded address list to BluetoothAdapter
   InfallibleTArray<BluetoothNamedValue> propertiesChangeArray;
   BT_APPEND_NAMED_VALUE(propertiesChangeArray, "Devices",
                         sAdapterBondedAddressArray);
 
   BluetoothValue value(propertiesChangeArray);
@@ -947,34 +941,30 @@ BluetoothServiceBluedroid::GetAdaptersIn
    *     |__ BluetoothNamedValue =
    *     |     {"Adapter", BluetoothValue = BluetoothNamedValue[]}
    *     ...
    */
   BluetoothValue adaptersProperties = InfallibleTArray<BluetoothNamedValue>();
   uint32_t numAdapters = 1; // Bluedroid supports single adapter only
 
   for (uint32_t i = 0; i < numAdapters; i++) {
-    // Since Atomic<*> is not acceptable for BT_APPEND_NAMED_VALUE(),
-    // create another variable to store data.
-    bool discoverable = sAdapterDiscoverable;
-    uint32_t discoverableTimeout = sAdapterDiscoverableTimeout;
-
     BluetoothValue properties = InfallibleTArray<BluetoothNamedValue>();
 
-    // TODO: Revise here based on new BluetoothAdapter interface
+    BT_APPEND_NAMED_VALUE(properties.get_ArrayOfBluetoothNamedValue(),
+                          "State", BluetoothValue(sAdapterEnabled));
     BT_APPEND_NAMED_VALUE(properties.get_ArrayOfBluetoothNamedValue(),
                           "Address", sAdapterBdAddress);
     BT_APPEND_NAMED_VALUE(properties.get_ArrayOfBluetoothNamedValue(),
                           "Name", sAdapterBdName);
     BT_APPEND_NAMED_VALUE(properties.get_ArrayOfBluetoothNamedValue(),
-                          "Discoverable", discoverable);
+                          "Discoverable",
+                          BluetoothValue(sAdapterDiscoverable));
     BT_APPEND_NAMED_VALUE(properties.get_ArrayOfBluetoothNamedValue(),
-                          "DiscoverableTimeout", discoverableTimeout);
-    BT_APPEND_NAMED_VALUE(properties.get_ArrayOfBluetoothNamedValue(),
-                          "Devices", sAdapterBondedAddressArray);
+                          "Discovering",
+                          BluetoothValue(sAdapterDiscovering));
 
     BT_APPEND_NAMED_VALUE(adaptersProperties.get_ArrayOfBluetoothNamedValue(),
                           "Adapter", properties);
   }
 
   DispatchBluetoothReply(aRunnable, adaptersProperties, EmptyString());
   return NS_OK;
 }
@@ -1269,39 +1259,26 @@ BluetoothServiceBluedroid::SetPairingCon
                      NS_LITERAL_STRING("SetPairingConfirmation"));
   } else {
     DispatchBluetoothReply(aRunnable, BluetoothValue(true), EmptyString());
   }
 
   return true;
 }
 
-bool
-BluetoothServiceBluedroid::SetAuthorizationInternal(
-  const nsAString& aDeviceAddress, bool aAllow,
-  BluetoothReplyRunnable* aRunnable)
-{
-  return true;
-}
-
-nsresult
-BluetoothServiceBluedroid::PrepareAdapterInternal()
-{
-  return NS_OK;
-}
-
 static void
 NextBluetoothProfileController()
 {
   MOZ_ASSERT(NS_IsMainThread());
 
-  // First, remove the task at the front which has been already done.
+  // Remove the completed task at the head
   NS_ENSURE_FALSE_VOID(sControllerArray.IsEmpty());
   sControllerArray.RemoveElementAt(0);
-  // Re-check if the task array is empty, if it's not, the next task will begin.
+
+  // Start the next task if task array is not empty
   if (!sControllerArray.IsEmpty()) {
     sControllerArray[0]->StartSession();
   }
 }
 
 static void
 ConnectDisconnect(bool aConnect, const nsAString& aDeviceAddress,
                   BluetoothReplyRunnable* aRunnable,
--- a/dom/bluetooth2/bluedroid/BluetoothServiceBluedroid.h
+++ b/dom/bluetooth2/bluedroid/BluetoothServiceBluedroid.h
@@ -69,23 +69,16 @@ public:
   virtual bool
   SetPasskeyInternal(const nsAString& aDeviceAddress, uint32_t aPasskey,
                      BluetoothReplyRunnable* aRunnable);
 
   virtual bool
   SetPairingConfirmationInternal(const nsAString& aDeviceAddress, bool aConfirm,
                                  BluetoothReplyRunnable* aRunnable);
 
-  virtual bool
-  SetAuthorizationInternal(const nsAString& aDeviceAddress, bool aAllow,
-                           BluetoothReplyRunnable* aRunnable);
-
-  virtual nsresult
-  PrepareAdapterInternal();
-
   virtual void
   Connect(const nsAString& aDeviceAddress,
           uint32_t aCod,
           uint16_t aServiceUuid,
           BluetoothReplyRunnable* aRunnable);
 
   virtual bool
   IsConnected(uint16_t aProfileId);
--- a/dom/mobileconnection/tests/marionette/manifest.ini
+++ b/dom/mobileconnection/tests/marionette/manifest.ini
@@ -23,16 +23,15 @@ qemu = true
 [test_mobile_set_radio.js]
 [test_mobile_last_known_network.js]
 [test_mobile_icc_change.js]
 [test_mobile_connections_array_uninitialized.js]
 [test_mobile_signal_strength.js]
 [test_mobile_data_ipv6.js]
 disabled = Bug 979137
 [test_mobile_supported_network_types.js]
-[test_mobile_call_forwarding_set.js]
-disabled = Bug 861725
-[test_mobile_call_forwarding_get.js]
-disabled = Bug 861725
+[test_mobile_call_forwarding.js]
+[test_mobile_call_forwarding_set_error.js]
+[test_mobile_call_forwarding_get_error.js]
 [test_mobile_voice_privacy.js]
 [test_dsds_mobile_data_connection.js]
 [test_mobile_clir.js]
 [test_mobile_clir_radio_off.js]
new file mode 100644
--- /dev/null
+++ b/dom/mobileconnection/tests/marionette/test_mobile_call_forwarding.js
@@ -0,0 +1,105 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 60000;
+MARIONETTE_HEAD_JS = "head.js";
+
+const TEST_DATA = [
+  {
+    action: MozMobileConnection.CALL_FORWARD_ACTION_REGISTRATION,
+    reason: MozMobileConnection.CALL_FORWARD_REASON_MOBILE_BUSY,
+    number: "0912345678",
+    timeSeconds: 5,
+    // Currently gecko only support ICC_SERVICE_CLASS_VOICE.
+    serviceClass: MozMobileConnection.ICC_SERVICE_CLASS_VOICE
+  }, {
+    action: MozMobileConnection.CALL_FORWARD_ACTION_ENABLE,
+    reason: MozMobileConnection.CALL_FORWARD_REASON_NO_REPLY,
+    number: "+886912345678",
+    timeSeconds: 20,
+    // Currently gecko only support ICC_SERVICE_CLASS_VOICE.
+    serviceClass: MozMobileConnection.ICC_SERVICE_CLASS_VOICE
+  }
+];
+
+function testSetCallForwardingOption(aOptions) {
+  log("Test setting call forwarding to " + JSON.stringify(aOptions));
+
+  let promises = [];
+
+  // Check cfstatechange event.
+  promises.push(waitForManagerEvent("cfstatechange").then(function(aEvent) {
+    is(aEvent.success, true, "check success");
+    is(aEvent.action, aOptions.action, "check action");
+    is(aEvent.reason, aOptions.reason, "check reason");
+    is(aEvent.number, aOptions.number, "check number");
+    is(aEvent.timeSeconds, aOptions.timeSeconds, "check timeSeconds");
+    is(aEvent.serviceClass, aOptions.serviceClass, "check serviceClass");
+  }));
+  // Check DOMRequest's result.
+  promises.push(setCallForwardingOption(aOptions).then(null, (aError) => {
+    ok(false, "got '" + aError.name + "' error");
+  }));
+
+  return Promise.all(promises);
+}
+
+function testGetCallForwardingOption(aReason, aExpectedResult) {
+  log("Test getting call forwarding for " + aReason);
+
+  return getCallForwardingOption(aReason)
+    .then(function resolve(aResults) {
+      is(Array.isArray(aResults), true, "results should be an array");
+
+      for (let i = 0; i < aResults.length; i++) {
+        let result = aResults[i];
+
+        // Only need to check the result containing the serviceClass that we are
+        // interesting in.
+        if (!(result.serviceClass & aExpectedResult.serviceClass)) {
+          continue;
+        }
+
+        let expectedActive =
+          aExpectedResult.action === MozMobileConnection.CALL_FORWARD_ACTION_ENABLE ||
+          aExpectedResult.action === MozMobileConnection.CALL_FORWARD_ACTION_REGISTRATION;
+        is(result.active, expectedActive, "check active");
+        is(result.reason, aExpectedResult.reason, "check reason");
+        is(result.number, aExpectedResult.number, "check number");
+        is(result.timeSeconds, aExpectedResult.timeSeconds, "check timeSeconds");
+      }
+    }, function reject(aError) {
+      ok(false, "got '" + aError.name + "' error");
+    });
+}
+
+function clearAllCallForwardingSettings() {
+  log("Clear all call forwarding settings");
+
+  let promise = Promise.resolve();
+  for (let reason = MozMobileConnection.CALL_FORWARD_REASON_UNCONDITIONAL;
+       reason <= MozMobileConnection.CALL_FORWARD_REASON_ALL_CONDITIONAL_CALL_FORWARDING;
+       reason++) {
+    let options = {
+      reason: reason,
+      action: MozMobileConnection.CALL_FORWARD_ACTION_ERASURE
+    };
+    promise =
+      promise.then(() => setCallForwardingOption(options).then(null, () => {}));
+  }
+  return promise;
+}
+
+// Start tests
+startTestCommon(function() {
+  let promise = Promise.resolve();
+  for (let i = 0; i < TEST_DATA.length; i++) {
+    let data = TEST_DATA[i];
+    promise = promise.then(() => testSetCallForwardingOption(data))
+                     .then(() => testGetCallForwardingOption(data.reason, data));
+  }
+  // reset call forwarding settings.
+  return promise.then(null, () => {})
+    .then(() => clearAllCallForwardingSettings());
+});
+
rename from dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_get.js
rename to dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_get_error.js
--- a/dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_get.js
+++ b/dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_get_error.js
@@ -1,58 +1,45 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 MARIONETTE_TIMEOUT = 60000;
 MARIONETTE_HEAD_JS = "head.js";
 
 const TEST_DATA = [
-  // Test get calling forwarding.
-  // TODO: Bug 861725 - B2G Emulator: support call forwarding
-  // Currently emulator doesn't support REQUEST_QUERY_CALL_FORWARD_STATUS, so
-  // we expect to get a 'RequestNotSupported' error here.
+  // Currently emulator doesn't support CALL_FORWARD_REASON_ALL_CALL_FORWARDING
+  // and CALL_FORWARD_REASON_ALL_CONDITIONAL_CALL_FORWARDING, so
+  // we expect to get a 'GenericFailure' error here.
   {
-    reason: MozMobileConnection.CALL_FORWARD_REASON_UNCONDITIONAL,
-    expectedErrorMsg: "RequestNotSupported"
-  }, {
-    reason: MozMobileConnection.CALL_FORWARD_REASON_MOBILE_BUSY,
-    expectedErrorMsg: "RequestNotSupported"
-  }, {
-    reason: MozMobileConnection.CALL_FORWARD_REASON_NO_REPLY,
-    expectedErrorMsg: "RequestNotSupported"
-  }, {
-    reason: MozMobileConnection.CALL_FORWARD_REASON_NOT_REACHABLE,
-    expectedErrorMsg: "RequestNotSupported"
-  }, {
     reason: MozMobileConnection.CALL_FORWARD_REASON_ALL_CALL_FORWARDING,
-    expectedErrorMsg: "RequestNotSupported"
+    errorMsg: "GenericFailure"
   }, {
     reason: MozMobileConnection.CALL_FORWARD_REASON_ALL_CONDITIONAL_CALL_FORWARDING,
-    expectedErrorMsg: "RequestNotSupported"
+    errorMsg: "GenericFailure"
   },
   // Test passing invalid reason
   {
     reason: 10 /* Invalid reason */,
-    expectedErrorMsg: "InvalidParameter"
+    errorMsg: "InvalidParameter"
   }
 ];
 
-function testGetCallForwardingOption(aReason, aExpectedErrorMsg) {
+function testGetCallForwardingOptionError(aReason, aErrorMsg) {
   log("Test getting call forwarding for " + aReason);
 
   return getCallForwardingOption(aReason)
     .then(function resolve() {
-      ok(!aExpectedErrorMsg, "getCallForwardingOption success");
+      ok(false, "getCallForwardingOption success");
     }, function reject(aError) {
-      is(aError.name, aExpectedErrorMsg, "failed to getCallForwardingOption");
+      is(aError.name, aErrorMsg, "failed to getCallForwardingOption");
     });
 }
 
 // Start tests
 startTestCommon(function() {
   let promise = Promise.resolve();
   for (let i = 0; i < TEST_DATA.length; i++) {
     let data = TEST_DATA[i];
-    promise = promise.then(() => testGetCallForwardingOption(data.reason,
-                                                             data.expectedErrorMsg));
+    promise = promise.then(() => testGetCallForwardingOptionError(data.reason,
+                                                                  data.errorMsg));
   }
   return promise;
 });
rename from dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_set.js
rename to dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_set_error.js
--- a/dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_set.js
+++ b/dom/mobileconnection/tests/marionette/test_mobile_call_forwarding_set_error.js
@@ -2,74 +2,73 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 MARIONETTE_TIMEOUT = 60000;
 MARIONETTE_HEAD_JS = "head.js";
 
 const TEST_NUMBER = "0912345678";
 const TEST_TIME_SECONDS = 5;
 const TEST_DATA = [
-  // Test get calling forwarding.
-  // TODO: Bug 861725 - B2G Emulator: support call forwarding
-  // Currently emulator doesn't support REQUEST_QUERY_CALL_FORWARD_STATUS, so
-  // we expect to get a 'RequestNotSupported' error here.
+  // Currently emulator doesn't support CALL_FORWARD_REASON_ALL_CALL_FORWARDING
+  // and CALL_FORWARD_REASON_ALL_CONDITIONAL_CALL_FORWARDING, so
+  // we expect to get a 'GenericFailure' error here.
   {
     options: {
       action: MozMobileConnection.CALL_FORWARD_ACTION_DISABLE,
-      reason: MozMobileConnection.CALL_FORWARD_REASON_UNCONDITIONAL,
+      reason: MozMobileConnection.CALL_FORWARD_REASON_ALL_CALL_FORWARDING,
     },
-    expectedErrorMsg: "RequestNotSupported"
+    errorMsg: "GenericFailure"
   }, {
     options: {
       action: MozMobileConnection.CALL_FORWARD_ACTION_ENABLE,
-      reason: MozMobileConnection.CALL_FORWARD_REASON_MOBILE_BUSY,
+      reason: MozMobileConnection.CALL_FORWARD_REASON_ALL_CONDITIONAL_CALL_FORWARDING,
     },
-    expectedErrorMsg: "RequestNotSupported"
+    errorMsg: "GenericFailure"
   },
   // Test passing invalid action. We expect to get a 'InvalidParameter' error.
   {
     options: {
       // Set operation doesn't allow "query" action.
       action: MozMobileConnection.CALL_FORWARD_ACTION_QUERY_STATUS,
       reason: MozMobileConnection.CALL_FORWARD_REASON_MOBILE_BUSY,
     },
-    expectedErrorMsg: "InvalidParameter"
+    errorMsg: "InvalidParameter"
   }, {
     options: {
       action: 10 /* Invalid action */,
       reason: MozMobileConnection.CALL_FORWARD_REASON_MOBILE_BUSY,
     },
-    expectedErrorMsg: "InvalidParameter"
+    errorMsg: "InvalidParameter"
   },
   // Test passing invalid reason. We expect to get a 'InvalidParameter' error.
   {
     options: {
       action: MozMobileConnection.CALL_FORWARD_ACTION_DISABLE,
       reason: 10 /*Invalid reason*/,
     },
-    expectedErrorMsg: "InvalidParameter"
+    errorMsg: "InvalidParameter"
   }
 ];
 
-function testSetCallForwardingOption(aOptions, aExpectedErrorMsg) {
+function testSetCallForwardingOption(aOptions, aErrorMsg) {
   log("Test setting call forwarding to " + JSON.stringify(aOptions));
 
   aOptions.number = TEST_NUMBER;
   aOptions.timeSeconds = TEST_TIME_SECONDS;
 
   return setCallForwardingOption(aOptions)
     .then(function resolve() {
-      ok(!aExpectedErrorMsg, "setCallForwardingOption success");
+      ok(false, "setCallForwardingOption success");
     }, function reject(aError) {
-      is(aError.name, aExpectedErrorMsg, "failed to setCallForwardingOption");
+      is(aError.name, aErrorMsg, "failed to setCallForwardingOption");
     });
 }
 
 // Start tests
 startTestCommon(function() {
   let promise = Promise.resolve();
   for (let i = 0; i < TEST_DATA.length; i++) {
     let data = TEST_DATA[i];
     promise = promise.then(() => testSetCallForwardingOption(data.options,
-                                                             data.expectedErrorMsg));
+                                                             data.errorMsg));
   }
   return promise;
 });
--- a/dom/nfc/tests/marionette/head.js
+++ b/dom/nfc/tests/marionette/head.js
@@ -17,27 +17,84 @@ let emulator = (function() {
   let originalRunEmulatorCmd = runEmulatorCmd;
 
   // Overwritten it so people could not call this function directly.
   runEmulatorCmd = function() {
     throw "Use emulator.run(cmd, callback) instead of runEmulatorCmd";
   };
 
   function run(cmd, callback) {
+    log("Executing emulator command '" + cmd + "'");
     pendingCmdCount++;
     originalRunEmulatorCmd(cmd, function(result) {
       pendingCmdCount--;
       if (callback && typeof callback === "function") {
         callback(result);
       }
     });
-  }
+  };
+
+  function activateRE(re) {
+    let deferred = Promise.defer();
+    let cmd = 'nfc nci rf_intf_activated_ntf ' + re;
+
+    this.run(cmd, function(result) {
+      is(result.pop(), 'OK', 'check activation of RE' + re);
+      deferred.resolve();
+    });
+
+    return deferred.promise;
+  };
+
+  function notifyDiscoverRE(re, type) {
+    let deferred = Promise.defer();
+    let cmd = 'nfc nci rf_discover_ntf ' + re + ' ' + type;
+
+    this.run(cmd, function(result) {
+      is(result.pop(), 'OK', 'check discovery of RE' + re);
+      deferred.resolve();
+    });
+
+    return deferred.promise;
+  };
+
+  function setTagData(re, flag, tnf, type, payload) {
+    let deferred = Promise.defer();
+    let cmd = "nfc tag set " + re +
+              " [" + flag + "," + tnf + "," + type + "," + payload + ",]";
+
+    this.run(cmd, function(result) {
+      is(result.pop(), "OK", "set NDEF data of tag" + re);
+      deferred.resolve();
+    });
+
+    return deferred.promise;
+  };
+
+  function snepPutNdef(dsap, ssap, flags, tnf, type, payload, id) {
+    let deferred = Promise.defer();
+    let cmd = "nfc snep put " + dsap + " " + ssap + " [" + flags + "," +
+                                                           tnf + "," +
+                                                           type + "," +
+                                                           payload + "," +
+                                                           id + "]";
+    this.run(cmd, function(result) {
+      is(result.pop(), "OK", "send SNEP PUT");
+      deferred.resolve();
+    });
+
+    return deferred.promise;
+  };
 
   return {
-    run: run
+    run: run,
+    activateRE: activateRE,
+    notifyDiscoverRE: notifyDiscoverRE,
+    setTagData: setTagData,
+    snepPutNdef: snepPutNdef
   };
 }());
 
 function toggleNFC(enabled) {
   let deferred = Promise.defer();
 
   let req;
   if (enabled) {
--- a/dom/nfc/tests/marionette/manifest.ini
+++ b/dom/nfc/tests/marionette/manifest.ini
@@ -1,13 +1,14 @@
 [DEFAULT]
 b2g=true
 browser=false
 qemu=true
 
 [test_ndef.js]
 [test_nfc_enabled.js]
 [test_nfc_manager_tech_discovered.js]
+[test_nfc_manager_tech_discovered_ndef.js]
 [test_nfc_peer.js]
 [test_nfc_peer_sendndef.js]
 [test_nfc_tag.js]
 [test_nfc_checkP2PRegistration.js]
 [test_nfc_error_messages.js]
--- a/dom/nfc/tests/marionette/test_nfc_manager_tech_discovered.js
+++ b/dom/nfc/tests/marionette/test_nfc_manager_tech_discovered.js
@@ -11,59 +11,35 @@ const NCI_MORE_NOTIFICATIONS = 2;
 
 function handleTechnologyDiscoveredRE0(msg) {
   log('Received \'nfc-manager-tech-discovered\'');
   is(msg.type, 'techDiscovered', 'check for correct message type');
   is(msg.techList[0], 'P2P', 'check for correct tech type');
   toggleNFC(false).then(runNextTest);
 }
 
-function activateRE(re) {
-  let deferred = Promise.defer();
-  let cmd = 'nfc nci rf_intf_activated_ntf ' + re;
-
-  emulator.run(cmd, function(result) {
-    is(result.pop(), 'OK', 'check activation of RE' + re);
-    deferred.resolve();
-  });
-
-  return deferred.promise;
-}
-
-function notifyDiscoverRE(re, type) {
-  let deferred = Promise.defer();
-  let cmd = 'nfc nci rf_discover_ntf ' + re + ' ' + type;
-
-  emulator.run(cmd, function(result) {
-    is(result.pop(), 'OK', 'check discover of RE' + re);
-    deferred.resolve();
-  });
-
-  return deferred.promise;
-}
-
 function testActivateRE0() {
   log('Running \'testActivateRE0\'');
   window.navigator.mozSetMessageHandler(
     'nfc-manager-tech-discovered', handleTechnologyDiscoveredRE0);
 
-  toggleNFC(true).then(() => activateRE(0));
+  toggleNFC(true).then(() => emulator.activateRE(0));
 }
 
 // Check NCI Spec 5.2, this will change NCI state from
 // DISCOVERY -> W4_ALL_DISCOVERIES -> W4_HOST_SELECT -> POLL_ACTIVE
 function testRfDiscover() {
   log('Running \'testRfDiscover\'');
   window.navigator.mozSetMessageHandler(
     'nfc-manager-tech-discovered', handleTechnologyDiscoveredRE0);
 
   toggleNFC(true)
-  .then(() => notifyDiscoverRE(0, NCI_MORE_NOTIFICATIONS))
-  .then(() => notifyDiscoverRE(1, NCI_LAST_NOTIFICATION))
-  .then(() => activateRE(0));
+  .then(() => emulator.notifyDiscoverRE(0, NCI_MORE_NOTIFICATIONS))
+  .then(() => emulator.notifyDiscoverRE(1, NCI_LAST_NOTIFICATION))
+  .then(() => emulator.activateRE(0));
 }
 
 let tests = [
   testActivateRE0,
   testRfDiscover
 ];
 
 SpecialPowers.pushPermissions(
new file mode 100644
--- /dev/null
+++ b/dom/nfc/tests/marionette/test_nfc_manager_tech_discovered_ndef.js
@@ -0,0 +1,53 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 30000;
+MARIONETTE_HEAD_JS = 'head.js';
+
+let tnf = NDEF.TNF_WELL_KNOWN;
+let type = "U";
+let payload = "https://www.example.com";
+let id = "";
+
+let ndef = null;
+
+// See nfc-nci.h.
+const NCI_LAST_NOTIFICATION = 0;
+const NCI_LIMIT_NOTIFICATION = 1;
+const NCI_MORE_NOTIFICATIONS = 2;
+
+function handleTechnologyDiscoveredRE0(msg) {
+  log("Received 'nfc-manager-tech-discovered'");
+  is(msg.type, "techDiscovered", "check for correct message type");
+  is(msg.techList[0], "P2P", "check for correct tech type");
+
+  if (msg.records) {
+    isnot(msg.techList.indexOf("NDEF"), -1, "check for correct tech type");
+    // validate received NDEF message against reference
+    let ndef = [new MozNDEFRecord(tnf,
+                                  new Uint8Array(NfcUtils.fromUTF8(type)),
+                                  new Uint8Array(NfcUtils.fromUTF8(id)),
+                                  new Uint8Array(NfcUtils.fromUTF8(payload)))];
+    NDEF.compare(ndef, msg.records);
+    toggleNFC(false).then(runNextTest);
+  }
+}
+
+function testReceiveNDEF() {
+  log("Running 'testReceiveNDEF'");
+  window.navigator.mozSetMessageHandler(
+    "nfc-manager-tech-discovered", handleTechnologyDiscoveredRE0);
+  toggleNFC(true)
+    .then(() => emulator.activateRE(0))
+    .then(() => emulator.snepPutNdef(4, 4, 0, tnf, btoa(type),
+                                     btoa(payload), btoa(id)));
+}
+
+let tests = [
+  testReceiveNDEF
+];
+
+SpecialPowers.pushPermissions(
+  [{'type': 'nfc', 'allow': true,
+                   'read': true, 'write': true, context: document},
+   {'type': 'nfc-manager', 'allow': true, context: document}], runTests);
--- a/dom/nfc/tests/marionette/test_nfc_tag.js
+++ b/dom/nfc/tests/marionette/test_nfc_tag.js
@@ -5,42 +5,16 @@ MARIONETTE_TIMEOUT = 30000;
 MARIONETTE_HEAD_JS = "head.js";
 
 let url = "http://www.mozilla.org";
 
 // TODO : Get this from emulator console command.
 const T1T_RE_INDEX = 2;
 const T2T_RE_INDEX = 3;
 
-function activateRE(re) {
-  let deferred = Promise.defer();
-  let cmd = "nfc nci rf_intf_activated_ntf " + re;
-
-  emulator.run(cmd, function(result) {
-    is(result.pop(), "OK", "check activation of RE" + re);
-    deferred.resolve();
-  });
-
-  return deferred.promise;
-}
-
-function setTagData(re, flag, tnf, type, payload) {
-  let deferred = Promise.defer();
-  let cmd = "nfc tag set " + re +
-            " [" + flag + "," + tnf + "," + type + "," + payload + ",]";
-
-  log("Executing \'" + cmd + "\'");
-  emulator.run(cmd, function(result) {
-    is(result.pop(), "OK", "set NDEF data of tag" + re);
-    deferred.resolve();
-  });
-
-  return deferred.promise;
-}
-
 function testUrlTagDiscover(re) {
   log("Running \'testUrlTagDiscover\'");
   // TODO : Make flag value readable.
   let flag = 0xd0;
   let tnf = NDEF.TNF_WELL_KNOWN;
   let type = "U";
   let payload = url;
 
--- a/dom/system/gonk/AutoMounter.cpp
+++ b/dom/system/gonk/AutoMounter.cpp
@@ -172,27 +172,20 @@ public:
 
   AutoMounter()
     : mResponseCallback(new AutoMounterResponseCallback),
       mMode(AUTOMOUNTER_DISABLE)
   {
     VolumeManager::RegisterStateObserver(&mVolumeManagerStateObserver);
     Volume::RegisterObserver(&mVolumeEventObserver);
 
-    VolumeManager::VolumeArray::size_type numVolumes = VolumeManager::NumVolumes();
-    VolumeManager::VolumeArray::index_type i;
-    for (i = 0; i < numVolumes; i++) {
-      RefPtr<Volume> vol = VolumeManager::GetVolume(i);
-      if (vol) {
-        vol->RegisterObserver(&mVolumeEventObserver);
-        // We need to pick up the intial value of the
-        // ums.volume.NAME.enabled setting.
-        AutoMounterSetting::CheckVolumeSettings(vol->Name());
-      }
-    }
+    // It's possible that the VolumeManager is already in the READY state,
+    // so we call CheckVolumeSettings here to cover that case. Otherwise,
+    // we'll pick it up when the VolumeManage state changes to VOLUMES_READY.
+    CheckVolumeSettings();
 
     DBG("Calling UpdateState from constructor");
     UpdateState();
   }
 
   ~AutoMounter()
   {
     VolumeManager::VolumeArray::size_type numVolumes = VolumeManager::NumVolumes();
@@ -202,16 +195,45 @@ public:
       if (vol) {
         vol->UnregisterObserver(&mVolumeEventObserver);
       }
     }
     Volume::UnregisterObserver(&mVolumeEventObserver);
     VolumeManager::UnregisterStateObserver(&mVolumeManagerStateObserver);
   }
 
+  void CheckVolumeSettings()
+  {
+    if (VolumeManager::State() != VolumeManager::VOLUMES_READY) {
+      DBG("CheckVolumeSettings: VolumeManager is NOT READY yet");
+      return;
+    }
+    DBG("CheckVolumeSettings: VolumeManager is READY");
+
+    // The VolumeManager knows about all of the volumes from vold. We now
+    // know the names of all of the volumes, so we can find out what the
+    // initial sharing settings are set to.
+
+    VolumeManager::VolumeArray::size_type numVolumes = VolumeManager::NumVolumes();
+    VolumeManager::VolumeArray::index_type i;
+    for (i = 0; i < numVolumes; i++) {
+      RefPtr<Volume> vol = VolumeManager::GetVolume(i);
+      if (vol) {
+        vol->RegisterObserver(&mVolumeEventObserver);
+        // We need to pick up the intial value of the
+        // ums.volume.NAME.enabled setting.
+        AutoMounterSetting::CheckVolumeSettings(vol->Name());
+
+        // Note: eventually CheckVolumeSettings will call
+        //       AutoMounter::SetSharingMode, which will in turn call
+        //       UpdateState if needed.
+      }
+    }
+  }
+
   void UpdateState();
 
   const char* ModeStr(int32_t aMode)
   {
     switch (aMode) {
       case AUTOMOUNTER_DISABLE:                 return "Disable";
       case AUTOMOUNTER_ENABLE:                  return "Enable";
       case AUTOMOUNTER_DISABLE_WHEN_UNPLUGGED:  return "DisableWhenUnplugged";
@@ -257,17 +279,17 @@ public:
       return;
     }
     if (vol->IsSharingEnabled() == aAllowSharing) {
       return;
     }
     vol->SetUnmountRequested(false);
     vol->SetMountRequested(false);
     vol->SetSharingEnabled(aAllowSharing);
-    DBG("Calling UpdateState due to volume %s shareing set to %d",
+    DBG("Calling UpdateState due to volume %s sharing set to %d",
         vol->NameStr(), (int)aAllowSharing);
     UpdateState();
   }
 
   void FormatVolume(const nsACString& aVolumeName)
   {
     RefPtr<Volume> vol = VolumeManager::FindVolumeByName(aVolumeName);
     if (!vol) {
@@ -331,16 +353,23 @@ static StaticRefPtr<AutoMounter> sAutoMo
 void
 AutoVolumeManagerStateObserver::Notify(const VolumeManager::StateChangedEvent &)
 {
   LOG("VolumeManager state changed event: %s", VolumeManager::StateStr());
 
   if (!sAutoMounter) {
     return;
   }
+
+  // In the event that the VolumeManager just entered the VOLUMES_READY state,
+  // we call CheckVolumeSettings here (it's possible that this method never
+  // gets called if the VolumeManager was already in the VOLUMES_READY state
+  // by the time the AutoMounter was constructed).
+  sAutoMounter->CheckVolumeSettings();
+
   DBG("Calling UpdateState due to VolumeManagerStateObserver");
   sAutoMounter->UpdateState();
 }
 
 void
 AutoVolumeEventObserver::Notify(Volume * const &)
 {
   if (!sAutoMounter) {
--- a/dom/wifi/WifiWorker.js
+++ b/dom/wifi/WifiWorker.js
@@ -1542,17 +1542,17 @@ function getNetworkKey(network)
     //   other keys
     // }
     var key_mgmt = network.key_mgmt,
         auth_alg = network.auth_alg;
     ssid = dequote(network.ssid);
 
     if (key_mgmt == "WPA-PSK") {
       encryption = "WPA-PSK";
-    } else if (key_mgmt == "WPA-EAP") {
+    } else if (key_mgmt.indexOf("WPA-EAP") != -1) {
       encryption = "WPA-EAP";
     } else if (key_mgmt == "NONE" && auth_alg === "OPEN SHARED") {
       encryption = "WEP";
     }
   }
 
   // ssid here must be dequoted, and it's safer to esacpe it.
   // encryption won't be empty and always be assigned one of the followings :
@@ -1845,17 +1845,17 @@ function WifiWorker() {
   // A list of requests to turn wifi on or off.
   this._stateRequests = [];
 
   // Given a connection status network, takes a network from
   // self.configuredNetworks and prepares it for the DOM.
   netToDOM = function(net) {
     var ssid = dequote(net.ssid);
     var security = (net.key_mgmt === "NONE" && net.wep_key0) ? ["WEP"] :
-                   (net.key_mgmt && net.key_mgmt !== "NONE") ? [net.key_mgmt] :
+                   (net.key_mgmt && net.key_mgmt !== "NONE") ? [net.key_mgmt.split(" ")[0]] :
                    [];
     var password;
     if (("psk" in net && net.psk) ||
         ("password" in net && net.password) ||
         ("wep_key0" in net && net.wep_key0)) {
       password = "*";
     }
 
@@ -1895,16 +1895,18 @@ function WifiWorker() {
 
     net.ssid = quote(net.ssid);
 
     let wep = false;
     if ("keyManagement" in net) {
       if (net.keyManagement === "WEP") {
         wep = true;
         net.keyManagement = "NONE";
+      } else if (net.keyManagement === "WPA-EAP") {
+        net.keyManagement += " IEEE8021X";
       }
 
       configured.key_mgmt = net.key_mgmt = net.keyManagement; // WPA2-PSK, WPA-PSK, etc.
       delete net.keyManagement;
     } else {
       configured.key_mgmt = net.key_mgmt = "NONE";
     }
 
--- a/media/webrtc/moz.build
+++ b/media/webrtc/moz.build
@@ -59,16 +59,17 @@ if CONFIG['MOZ_WEBRTC_SIGNALING']:
     ]
     # These files cannot be built in unified mode because they force NSPR logging.
     signaling_non_unified_sources_2 = [
         'signaling/src/callcontrol/CallControlManagerImpl.cpp',
         'signaling/src/common/browser_logging/CSFLog.cpp',
         'signaling/src/media-conduit/AudioConduit.cpp',
         'signaling/src/media-conduit/CodecStatistics.cpp',
         'signaling/src/media-conduit/VideoConduit.cpp',
+        'signaling/src/media-conduit/WebrtcOMXH264VideoCodec.cpp',
         'signaling/src/media/CSFAudioControlWrapper.cpp',
         'signaling/src/media/CSFVideoControlWrapper.cpp',
         'signaling/src/media/VcmSIPCCBinding.cpp',
         'signaling/src/mediapipeline/MediaPipeline.cpp',
         'signaling/src/mediapipeline/MediaPipelineFilter.cpp',
         'signaling/src/mediapipeline/SrtpFlow.cpp',
         'signaling/src/peerconnection/MediaStreamList.cpp',
         'signaling/src/peerconnection/PeerConnectionCtx.cpp',