Merge b2ginbound to central, a=merge
authorWes Kocher <wkocher@mozilla.com>
Fri, 09 Oct 2015 16:16:31 -0700
changeset 300450 d1bb0de19476541cd517ab14017e7fedbd9f13e3
parent 300427 c00e93135684441d065791f4f98a338b872d0420 (current diff)
parent 300449 d4ee0f2d4778e93b8aa4554332e3efd273a80e4c (diff)
child 300451 97102cdb8fe5e0f4c8ac17c174de537459b92ec4
child 300461 9f8c18106b1190489a5be68289569dfdba133e53
child 300504 6e2483a77756f3e9a3b7901a096fe688fcefdedc
child 300571 444600721bbd987de37daa950566d5e37414bf3d
push id5392
push userraliiev@mozilla.com
push dateMon, 14 Dec 2015 20:08:23 +0000
treeherdermozilla-beta@16ce8562a975 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone44.0a1
first release with
nightly linux32
d1bb0de19476 / 44.0a1 / 20151010030234 / files
nightly linux64
d1bb0de19476 / 44.0a1 / 20151010030234 / files
nightly mac
d1bb0de19476 / 44.0a1 / 20151010030234 / files
nightly win32
d1bb0de19476 / 44.0a1 / 20151010030234 / files
nightly win64
d1bb0de19476 / 44.0a1 / 20151010030234 / 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 b2ginbound to central, a=merge
--- a/b2g/config/aries/sources.xml
+++ b/b2g/config/aries/sources.xml
@@ -10,26 +10,26 @@
   <!--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="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="f004530b30a63c08a16d82536858600446b2abf5"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="a32003194f707f66a2d8cdb913ed1869f1926c5d"/>
   <project name="device/common" path="device/common" revision="96d4d2006c4fcb2f19a3fa47ab10cb409faa017b"/>
--- a/b2g/config/dolphin/sources.xml
+++ b/b2g/config/dolphin/sources.xml
@@ -10,26 +10,26 @@
   <!--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="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="f004530b30a63c08a16d82536858600446b2abf5"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="83760d213fb3bec7b4117d266fcfbf6fe2ba14ab"/>
   <project name="device/common" path="device/common" revision="6a2995683de147791e516aae2ccb31fdfbe2ad30"/>
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1b0db93fb6b870b03467aff50d6419771ba0d88c">
     <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="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="4ace9aaee0e048dfda11bb787646c59982a3dc80"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="065f6361461030d32c6dc08d716b013bfadab1d9"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/emulator-jb/sources.xml
+++ b/b2g/config/emulator-jb/sources.xml
@@ -12,20 +12,20 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="660169a3d7e034a892359e39135e8c2785a6ad6f">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="f004530b30a63c08a16d82536858600446b2abf5"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
   <!-- 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="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="f004530b30a63c08a16d82536858600446b2abf5"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="f92a936f2aa97526d4593386754bdbf02db07a12"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="6e47ff2790f5656b5b074407829ceecf3e6188c4"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="1950e4760fa14688b83cdbb5acaa1af9f82ef434"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="ac6eb97a37035c09fb5ede0852f0881e9aadf9ad"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="737f591c5f95477148d26602c7be56cbea0cdeb9"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="51da9b1981be481b92a59a826d4d78dc73d0989a"/>
   <project name="device/common" path="device/common" revision="798a3664597e6041985feab9aef42e98d458bc3d"/>
--- a/b2g/config/emulator-l/sources.xml
+++ b/b2g/config/emulator-l/sources.xml
@@ -10,25 +10,25 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="c9d4fe680662ee44a4bdea42ae00366f5df399cf">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="f004530b30a63c08a16d82536858600446b2abf5"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
   <!-- Stock Android things -->
   <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="8af5ff6f5dced9eb5a8127459df6c75d24342204"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="30915518fa7ea07166efedc191a4f40aef516fe7"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="96eee58e3389fb05a835310d6a06a6ba4486097a"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="7c8a46698171aa2e0be09edb43d15a6acf832770"/>
   <project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="24b2038be8a636fd4a5d21f0abae1e466b07bcf7"/>
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1b0db93fb6b870b03467aff50d6419771ba0d88c">
     <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="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="4ace9aaee0e048dfda11bb787646c59982a3dc80"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="065f6361461030d32c6dc08d716b013bfadab1d9"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/flame-kk/config.json
+++ b/b2g/config/flame-kk/config.json
@@ -6,23 +6,25 @@
     "mock_files": [
         ["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"],
         ["/builds/crash-stats-api.token", "/builds/crash-stats-api.token"]
     ],
     "build_targets": ["", "blobfree"],
     "upload_files": [
         "{objdir}/dist/b2g-*.crashreporter-symbols.zip",
         "{objdir}/dist/b2g-*.tar.gz",
-        "{workdir}/sources.xml"
+        "{workdir}/sources.xml",
+        "{workdir}/out/target/product/flame/fota-*-update-*.mar"
     ],
     "public_upload_files": [
         "{objdir}/dist/b2g-*.crashreporter-symbols.zip",
         "{objdir}/dist/b2g-*.tar.gz",
         "{workdir}/sources.xml",
-        "{objdir}/dist/b2g-update/*.mar"
+        "{objdir}/dist/b2g-update/*.mar",
+        "{workdir}/out/target/product/flame/fota-*-update.mar"
     ],
     "zip_files": [
         ["{workdir}/out/target/product/flame/*.img", "out/target/product/flame/"],
         ["{workdir}/out/target/product/flame/bootloader", "out/target/product/flame/"],
         ["{workdir}/boot.img", "out/target/product/flame/"],
         "{workdir}/flash.sh",
         "{workdir}/load-config.sh",
         "{workdir}/.config",
--- a/b2g/config/flame-kk/sources.xml
+++ b/b2g/config/flame-kk/sources.xml
@@ -10,26 +10,26 @@
   <!--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="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="f004530b30a63c08a16d82536858600446b2abf5"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="8b880805d454664b3eed11d0f053cdeafa1ff06e"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="a1e239a0bb5cd1d69680bf1075883aa9a7bf2429"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="c7931763d41be602407ed9d71e2c0292c6597e00"/>
   <project groups="linux,x86" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="a32003194f707f66a2d8cdb913ed1869f1926c5d"/>
   <project name="device/common" path="device/common" revision="96d4d2006c4fcb2f19a3fa47ab10cb409faa017b"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
-        "git_revision": "1609aecaba381c14eff95d5084e59280f53b7d8b", 
+        "git_revision": "74b0d4b17f39d238a7997800bd9363d3c60f20c3", 
         "remote": "https://git.mozilla.org/releases/gaia.git", 
         "branch": ""
     }, 
-    "revision": "0ee9cf8106722d20ae20c83e7b91a08273c1d0fa", 
+    "revision": "f97062868fc8f228a1fa71803e75632d54aceda9", 
     "repo_path": "integration/gaia-central"
 }
--- a/b2g/config/nexus-4-kk/sources.xml
+++ b/b2g/config/nexus-4-kk/sources.xml
@@ -10,26 +10,26 @@
   <!--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="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="f004530b30a63c08a16d82536858600446b2abf5"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
   <!-- 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/nexus-4/sources.xml
+++ b/b2g/config/nexus-4/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="660169a3d7e034a892359e39135e8c2785a6ad6f">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="f004530b30a63c08a16d82536858600446b2abf5"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
--- a/b2g/config/nexus-5-l/sources.xml
+++ b/b2g/config/nexus-5-l/sources.xml
@@ -10,26 +10,26 @@
   <!--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="c9d4fe680662ee44a4bdea42ae00366f5df399cf">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="1609aecaba381c14eff95d5084e59280f53b7d8b"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="74b0d4b17f39d238a7997800bd9363d3c60f20c3"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
-  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="f004530b30a63c08a16d82536858600446b2abf5"/>
+  <project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
   <!-- Stock Android things -->
   <project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="8af5ff6f5dced9eb5a8127459df6c75d24342204"/>
   <project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="30915518fa7ea07166efedc191a4f40aef516fe7"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="96eee58e3389fb05a835310d6a06a6ba4486097a"/>
   <project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="7c8a46698171aa2e0be09edb43d15a6acf832770"/>
   <project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="24b2038be8a636fd4a5d21f0abae1e466b07bcf7"/>
--- a/dom/base/nsGkAtomList.h
+++ b/dom/base/nsGkAtomList.h
@@ -827,16 +827,22 @@ GK_ATOM(onmozfullscreenchange, "onmozful
 GK_ATOM(onmozfullscreenerror, "onmozfullscreenerror")
 GK_ATOM(onmozpointerlockchange, "onmozpointerlockchange")
 GK_ATOM(onmozpointerlockerror, "onmozpointerlockerror")
 GK_ATOM(onmoztimechange, "onmoztimechange")
 GK_ATOM(onMozMousePixelScroll, "onMozMousePixelScroll")
 GK_ATOM(onMozScrolledAreaChanged, "onMozScrolledAreaChanged")
 GK_ATOM(onmoznetworkupload, "onmoznetworkupload")
 GK_ATOM(onmoznetworkdownload, "onmoznetworkdownload")
+GK_ATOM(onmapfolderlistingreq, "onmapfolderlistingreq")
+GK_ATOM(onmapmessageslistingreq, "onmapmessageslistingreq")
+GK_ATOM(onmapgetmessagereq, "onmapgetmessagereq")
+GK_ATOM(onmapsetmessagestatusreq, "onmapsetmessagestatusreq")
+GK_ATOM(onmapsendmessagereq, "onmapsendmessagereq")
+GK_ATOM(onmapmessageupdatereq, "onmapmessageupdatereq")
 GK_ATOM(onnewrdsgroup, "onnewrdsgroup")
 GK_ATOM(onnotificationclick, "onnotificationclick")
 GK_ATOM(onnoupdate, "onnoupdate")
 GK_ATOM(onobsolete, "onobsolete")
 GK_ATOM(ononline, "ononline")
 GK_ATOM(onoffline, "onoffline")
 GK_ATOM(onopen, "onopen")
 GK_ATOM(onotastatuschange, "onotastatuschange")
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -202,16 +202,20 @@ DOMInterfaces = {
     'nativeType':
       'mozilla::dom::bluetooth::BluetoothPairingListener',
 },
 
 'BluetoothPbapRequestHandle': {
     'nativeType': 'mozilla::dom::bluetooth::BluetoothPbapRequestHandle',
 },
 
+'BluetoothMapRequestHandle': {
+    'nativeType': 'mozilla::dom::bluetooth::BluetoothMapRequestHandle',
+},
+
 'BoxObject': {
     'resultNotAddRefed': ['element'],
 },
 
 'Cache': {
     'implicitJSContext': [ 'add', 'addAll' ],
     'nativeType': 'mozilla::dom::cache::Cache',
 },
--- a/dom/bluetooth/bluedroid/BluetoothMapSmsManager.cpp
+++ b/dom/bluetooth/bluedroid/BluetoothMapSmsManager.cpp
@@ -8,23 +8,29 @@
 #include "BluetoothMapSmsManager.h"
 
 #include "BluetoothService.h"
 #include "BluetoothSocket.h"
 #include "BluetoothUtils.h"
 #include "BluetoothUuid.h"
 #include "ObexBase.h"
 
+#include "mozilla/dom/BluetoothMapParametersBinding.h"
 #include "mozilla/RefPtr.h"
 #include "mozilla/Services.h"
 #include "mozilla/StaticPtr.h"
 #include "nsAutoPtr.h"
 #include "nsIObserver.h"
 #include "nsIObserverService.h"
 
+#define FILTER_NO_SMS_GSM   0x01
+#define FILTER_NO_SMS_CDMA  0x02
+#define FILTER_NO_EMAIL     0x04
+#define FILTER_NO_MMS       0x08
+
 USING_BLUETOOTH_NAMESPACE
 using namespace mozilla;
 using namespace mozilla::dom;
 using namespace mozilla::ipc;
 
 namespace {
   // UUID of Map Mas
   static const BluetoothUuid kMapMas = {
@@ -706,103 +712,148 @@ BluetoothMapSmsManager::AppendBtNamedVal
    * Follow MAP 6.3.1 Application Parameter Header
    */
   switch (aTagId) {
     case Map::AppParametersTagId::MaxListCount: {
       uint16_t maxListCount = *((uint16_t *)buf);
       // convert big endian to little endian
       maxListCount = (maxListCount >> 8) | (maxListCount << 8);
       BT_LOGR("max list count: %d", maxListCount);
-      AppendNamedValue(aValues, "maxListCount", maxListCount);
+      AppendNamedValue(aValues, "maxListCount",
+                       static_cast<uint32_t>(maxListCount));
       break;
     }
     case Map::AppParametersTagId::StartOffset: {
       uint16_t startOffset = *((uint16_t *)buf);
       // convert big endian to little endian
       startOffset = (startOffset >> 8) | (startOffset << 8);
       BT_LOGR("start offset : %d", startOffset);
-      AppendNamedValue(aValues, "startOffset", startOffset);
+      AppendNamedValue(aValues, "startOffset",
+                       static_cast<uint32_t>(startOffset));
       break;
     }
     case Map::AppParametersTagId::SubjectLength: {
       uint8_t subLength = *((uint8_t *)buf);
       BT_LOGR("msg subLength : %d", subLength);
-      AppendNamedValue(aValues, "subLength", subLength);
+      AppendNamedValue(aValues, "subLength", static_cast<uint32_t>(subLength));
       break;
     }
     case Map::AppParametersTagId::ParameterMask: {
       /* Table 6.5, MAP 6.3.1. ParameterMask is Bit 16-31 Reserved for future
        * use. The reserved bits shall be set to 0 by MCE and discarded by MSE.
        * convert big endian to little endian
        */
       uint32_t parameterMask = (buf[3] << 0) | (buf[2] << 8) |
                                (buf[1] << 16) | (buf[0] << 24);
       BT_LOGR("msg parameterMask : %d", parameterMask);
       AppendNamedValue(aValues, "parameterMask", parameterMask);
       break;
     }
     case Map::AppParametersTagId::FilterMessageType: {
-      uint8_t filterMessageType = *((uint8_t *)buf);
+      /* Follow MAP 1.2, 6.3.1
+       * 0000xxx1 = "SMS_GSM"
+       * 0000xx1x = "SMS_CDMA"
+       * 0000x1xx = "EMAIL"
+       * 00001xxx = "MMS"
+       * Where
+       * 0 = "no filtering, get this type"
+       * 1 = "filter out this type"
+       */
+      uint32_t filterMessageType = *((uint8_t *)buf);
+
+      if (filterMessageType == (FILTER_NO_EMAIL | FILTER_NO_MMS |
+                                FILTER_NO_SMS_GSM) ||
+          filterMessageType == (FILTER_NO_EMAIL | FILTER_NO_MMS |
+                                FILTER_NO_SMS_CDMA)) {
+        filterMessageType = static_cast<uint32_t>(MessageType::Sms);
+      } else if (filterMessageType == (FILTER_NO_EMAIL | FILTER_NO_SMS_GSM |
+                                       FILTER_NO_SMS_CDMA)) {
+        filterMessageType = static_cast<uint32_t>(MessageType::Mms);
+      } else if (filterMessageType == (FILTER_NO_MMS | FILTER_NO_SMS_GSM |
+                                          FILTER_NO_SMS_CDMA)) {
+        filterMessageType = static_cast<uint32_t>(MessageType::Email);
+      } else {
+        BT_LOGR("Unsupportted filter message type");
+        filterMessageType = static_cast<uint32_t>(MessageType::Sms);
+      }
+
       BT_LOGR("msg filterMessageType : %d", filterMessageType);
-      AppendNamedValue(aValues, "filterMessageType", filterMessageType);
+      AppendNamedValue(aValues, "filterMessageType",
+                       static_cast<uint32_t>(filterMessageType));
       break;
     }
     case Map::AppParametersTagId::FilterPeriodBegin: {
       nsCString filterPeriodBegin((char *) buf);
       BT_LOGR("msg FilterPeriodBegin : %s", filterPeriodBegin.get());
-      AppendNamedValue(aValues, "filterPeriodBegin", filterPeriodBegin);
+      AppendNamedValue(aValues, "filterPeriodBegin",
+                       NS_ConvertUTF8toUTF16(filterPeriodBegin));
       break;
     }
     case Map::AppParametersTagId::FilterPeriodEnd: {
       nsCString filterPeriodEnd((char*)buf);
       BT_LOGR("msg filterPeriodEnd : %s", filterPeriodEnd.get());
-      AppendNamedValue(aValues, "filterPeriodEnd", filterPeriodEnd);
+      AppendNamedValue(aValues, "filterPeriodEnd",
+                       NS_ConvertUTF8toUTF16(filterPeriodEnd));
       break;
     }
     case Map::AppParametersTagId::FilterReadStatus: {
-      uint8_t filterReadStatus = *((uint8_t *)buf);
+      using namespace mozilla::dom::ReadStatusValues;
+      uint32_t filterReadStatus =
+        buf[0] < ArrayLength(strings) ? static_cast<uint32_t>(buf[0]) : 0;
       BT_LOGR("msg filter read status : %d", filterReadStatus);
       AppendNamedValue(aValues, "filterReadStatus", filterReadStatus);
       break;
     }
     case Map::AppParametersTagId::FilterRecipient: {
+      // FilterRecipient encodes as UTF-8
       nsCString filterRecipient((char*) buf);
       BT_LOGR("msg filterRecipient : %s", filterRecipient.get());
-      AppendNamedValue(aValues, "filterRecipient", filterRecipient);
+      AppendNamedValue(aValues, "filterRecipient",
+                       NS_ConvertUTF8toUTF16(filterRecipient));
       break;
     }
     case Map::AppParametersTagId::FilterOriginator: {
+      // FilterOriginator encodes as UTF-8
       nsCString filterOriginator((char*) buf);
       BT_LOGR("msg filter Originator : %s", filterOriginator.get());
-      AppendNamedValue(aValues, "filterOriginator", filterOriginator);
+      AppendNamedValue(aValues, "filterOriginator",
+                       NS_ConvertUTF8toUTF16(filterOriginator));
       break;
     }
     case Map::AppParametersTagId::FilterPriority: {
-      uint8_t filterPriority = *((uint8_t *)buf);
+      using namespace mozilla::dom::PriorityValues;
+      uint32_t filterPriority =
+        buf[0] < ArrayLength(strings) ? static_cast<uint32_t>(buf[0]) : 0;
+
       BT_LOGR("msg filter priority: %d", filterPriority);
       AppendNamedValue(aValues, "filterPriority", filterPriority);
       break;
     }
     case Map::AppParametersTagId::Attachment: {
       uint8_t attachment = *((uint8_t *)buf);
       BT_LOGR("msg filter attachment: %d", attachment);
-      AppendNamedValue(aValues, "attachment", attachment);
+      AppendNamedValue(aValues, "attachment", static_cast<uint32_t>(attachment));
       break;
     }
     case Map::AppParametersTagId::Charset: {
-      uint8_t charset = *((uint8_t *)buf);
-      BT_LOGR("msg filter charset: %d", charset);
-      AppendNamedValue(aValues, "charset", charset);
+      using namespace mozilla::dom::FilterCharsetValues;
+      uint32_t filterCharset =
+        buf[0] < ArrayLength(strings) ? static_cast<uint32_t>(buf[0]) : 0;
+
+      BT_LOGR("msg filter charset: %d", filterCharset);
+      AppendNamedValue(aValues, "charset", filterCharset);
       break;
     }
     case Map::AppParametersTagId::StatusIndicator: {
-      uint8_t statusIndicator = *((uint8_t *)buf);
-      BT_LOGR("msg filter statusIndicator: %d", statusIndicator);
-      AppendNamedValue(aValues, "statusIndicator",
-                       static_cast<uint32_t>(statusIndicator));
+      using namespace mozilla::dom::StatusIndicatorsValues;
+      uint32_t filterStatusIndicator =
+        buf[0] < ArrayLength(strings) ? static_cast<uint32_t>(buf[0]) : 0;
+
+      BT_LOGR("msg filter statusIndicator: %d", filterStatusIndicator);
+      AppendNamedValue(aValues, "statusIndicator", filterStatusIndicator);
       break;
     }
     case Map::AppParametersTagId::StatusValue: {
       uint8_t statusValue = *((uint8_t *)buf);
       BT_LOGR("msg filter statusvalue: %d", statusValue);
       AppendNamedValue(aValues, "statusValue",
                        static_cast<uint32_t>(statusValue));
       break;
--- a/dom/bluetooth/common/BluetoothCommon.h
+++ b/dom/bluetooth/common/BluetoothCommon.h
@@ -250,16 +250,18 @@ extern bool gBluetoothDebugFlag;
 /**
  * When receiving a MAP request from a remote device,
  * we'll dispatch an event.
  */
 #define MAP_MESSAGES_LISTING_REQ_ID          "mapmessageslistingreq"
 #define MAP_GET_MESSAGE_REQ_ID               "mapgetmessagereq"
 #define MAP_SET_MESSAGE_STATUS_REQ_ID        "mapsetmessagestatusreq"
 #define MAP_PUSH_MESSAGE_REQ_ID              "mappushmessagereq"
+#define MAP_FOLDER_LISTING_REQ_ID            "mapfolderlistingreq"
+#define MAP_MESSAGE_UPDATE_REQ_ID            "mapmessageupdatereq"
 
 /**
  * When the value of a characteristic of a remote BLE device changes, we'll
  * dispatch an event
  */
 #define GATT_CHARACTERISTIC_CHANGED_ID       "characteristicchanged"
 
 /**
--- a/dom/bluetooth/common/webapi/BluetoothAdapter.cpp
+++ b/dom/bluetooth/common/webapi/BluetoothAdapter.cpp
@@ -11,16 +11,23 @@
 #include "nsIDocument.h"
 #include "nsIPrefBranch.h"
 #include "nsIPrefService.h"
 #include "nsIPrincipal.h"
 #include "nsTArrayHelpers.h"
 
 #include "mozilla/dom/BluetoothAdapterBinding.h"
 #include "mozilla/dom/BluetoothAttributeEvent.h"
+#include "mozilla/dom/BluetoothMapFolderListingEvent.h"
+#include "mozilla/dom/BluetoothMapGetMessageEvent.h"
+#include "mozilla/dom/BluetoothMapMessagesListingEvent.h"
+#include "mozilla/dom/BluetoothMapMessageUpdateEvent.h"
+#include "mozilla/dom/BluetoothMapSetMessageStatusEvent.h"
+#include "mozilla/dom/BluetoothMapSendMessageEvent.h"
+
 #include "mozilla/dom/BluetoothPhonebookPullingEvent.h"
 #include "mozilla/dom/BluetoothStatusChangedEvent.h"
 #include "mozilla/dom/BluetoothVCardListingEvent.h"
 #include "mozilla/dom/BluetoothVCardPullingEvent.h"
 #include "mozilla/dom/ContentChild.h"
 #include "mozilla/dom/Event.h"
 #include "mozilla/dom/File.h"
 
@@ -529,16 +536,28 @@ BluetoothAdapter::Notify(const Bluetooth
              aData.name().EqualsLiteral(REQUEST_MEDIA_PLAYSTATUS_ID)) {
     DispatchEmptyEvent(aData.name());
   } else if (aData.name().EqualsLiteral(PULL_PHONEBOOK_REQ_ID)) {
     HandlePullPhonebookReq(aData.value());
   } else if (aData.name().EqualsLiteral(PULL_VCARD_ENTRY_REQ_ID)) {
     HandlePullVCardEntryReq(aData.value());
   } else if (aData.name().EqualsLiteral(PULL_VCARD_LISTING_REQ_ID)) {
     HandlePullVCardListingReq(aData.value());
+  } else if (aData.name().EqualsLiteral(MAP_MESSAGES_LISTING_REQ_ID)) {
+    HandleMapMessagesListing(aData.value());
+  } else if (aData.name().EqualsLiteral(MAP_FOLDER_LISTING_REQ_ID)) {
+    HandleMapFolderListing(aData.value());
+  } else if (aData.name().EqualsLiteral(MAP_GET_MESSAGE_REQ_ID)) {
+    HandleMapGetMessage(aData.value());
+  } else if (aData.name().EqualsLiteral(MAP_SET_MESSAGE_STATUS_REQ_ID)) {
+    HandleMapSetMessageStatus(aData.value());
+  } else if (aData.name().EqualsLiteral(MAP_PUSH_MESSAGE_REQ_ID)) {
+    HandleMapSendMessage(aData.value());
+  } else if (aData.name().EqualsLiteral(MAP_MESSAGE_UPDATE_REQ_ID)) {
+    HandleMapMessageUpdate(aData.value());
   } else {
     BT_WARNING("Not handling adapter signal: %s",
                NS_ConvertUTF16toUTF8(aData.name()).get());
   }
 }
 
 void
 BluetoothAdapter::SetDiscoveryHandleInUse(
@@ -1333,16 +1352,248 @@ BluetoothAdapter::getVCardProperties(con
   for (uint32_t i = 0; i < propSelectorArr.Length(); ++i) {
     propSelector.AppendElement(
       static_cast<vCardProperties>(propSelectorArr[i]), mozilla::fallible);
   }
 
   return propSelector;
 }
 
+Sequence<ParameterMask>
+BluetoothAdapter::GetParameterMask(const BluetoothValue &aValue)
+{
+  MOZ_ASSERT(aValue.type() == BluetoothValue::TArrayOfuint32_t);
+
+  Sequence<ParameterMask> parameterMask;
+
+  const InfallibleTArray<uint32_t>& parameterMaskArr =
+    aValue.get_ArrayOfuint32_t();
+  for (uint32_t i = 0; i < parameterMaskArr.Length(); ++i) {
+    parameterMask.AppendElement(
+      static_cast<ParameterMask>(parameterMaskArr[i]), mozilla::fallible);
+  }
+
+  return parameterMask;
+}
+
+void
+BluetoothAdapter::HandleMapFolderListing(const BluetoothValue& aValue)
+{
+  MOZ_ASSERT(aValue.type() == BluetoothValue::TArrayOfBluetoothNamedValue);
+
+  const InfallibleTArray<BluetoothNamedValue>& arr =
+    aValue.get_ArrayOfBluetoothNamedValue();
+
+  MOZ_ASSERT(arr.Length() >= 1 &&
+             arr[0].value().type() == BluetoothValue::Tuint32_t);
+
+  BluetoothMapFolderListingEventInit init;
+
+  for (uint32_t i = 0, propCount = arr.Length(); i < propCount; ++i) {
+    const nsString& name = arr[i].name();
+    const BluetoothValue& value = arr[i].value();
+    if (name.EqualsLiteral("maxListCount")) {
+      init.mMaxListCount = value.get_uint32_t();
+    } else if (name.EqualsLiteral("startOffset")) {
+      init.mListStartOffset = value.get_uint32_t();
+    }
+  }
+
+  init.mHandle = BluetoothMapRequestHandle::Create(GetOwner());
+
+  nsRefPtr<BluetoothMapFolderListingEvent> event =
+    BluetoothMapFolderListingEvent::Constructor(this,
+      NS_LITERAL_STRING(MAP_FOLDER_LISTING_REQ_ID), init);
+  DispatchTrustedEvent(event);
+}
+
+void
+BluetoothAdapter::HandleMapMessagesListing(const BluetoothValue& aValue)
+{
+  MOZ_ASSERT(aValue.type() == BluetoothValue::TArrayOfBluetoothNamedValue);
+
+  const InfallibleTArray<BluetoothNamedValue>& arr =
+    aValue.get_ArrayOfBluetoothNamedValue();
+
+  MOZ_ASSERT(arr.Length() >= 1 &&
+    arr[0].value().type() == BluetoothValue::Tuint32_t);
+
+  BluetoothMapMessagesListingEventInit init;
+
+  for (uint32_t i = 0, propCount = arr.Length(); i < propCount; ++i) {
+    const nsString& name = arr[i].name();
+    const BluetoothValue& value = arr[i].value();
+    if (name.EqualsLiteral("maxListCount")) {
+      init.mMaxListCount = value.get_uint32_t();
+    } else if (name.EqualsLiteral("startOffset")) {
+      init.mListStartOffset = value.get_uint32_t();
+    } else if (name.EqualsLiteral("subLength")) {
+      init.mSubjectLength = value.get_uint32_t();
+    } else if (name.EqualsLiteral("parameterMask")) {
+      init.mParameterMask = GetParameterMask(value);
+    } else if (name.EqualsLiteral("filterMessageType")) {
+      init.mFilterMessageType = static_cast<MessageType>(value.get_uint32_t());
+    } else if (name.EqualsLiteral("filterPeriodBegin")) {
+      init.mFilterPeriodBegin = value.get_nsString();
+    } else if (name.EqualsLiteral("filterPeriodEnd")) {
+      init.mFilterPeriodEnd = value.get_nsString();
+    } else if (name.EqualsLiteral("filterReadStatus")) {
+      init.mFilterReadStatus = static_cast<ReadStatus>(value.get_uint32_t());
+    } else if (name.EqualsLiteral("filterRecipient")) {
+      init.mFilterRecipient = value.get_nsString();
+    } else if (name.EqualsLiteral("filterOriginator")) {
+      init.mFilterOriginator = value.get_nsString();
+    } else if (name.EqualsLiteral("filterPriority")) {
+      init.mFilterPriority = static_cast<Priority>(value.get_uint32_t());
+    }
+  }
+
+  init.mHandle = BluetoothMapRequestHandle::Create(GetOwner());
+
+  nsRefPtr<BluetoothMapMessagesListingEvent> event =
+    BluetoothMapMessagesListingEvent::Constructor(this,
+      NS_LITERAL_STRING(MAP_MESSAGES_LISTING_REQ_ID), init);
+  DispatchTrustedEvent(event);
+}
+
+void
+BluetoothAdapter::HandleMapGetMessage(const BluetoothValue& aValue)
+{
+  MOZ_ASSERT(aValue.type() == BluetoothValue::TArrayOfBluetoothNamedValue);
+
+  const InfallibleTArray<BluetoothNamedValue>& arr =
+    aValue.get_ArrayOfBluetoothNamedValue();
+
+  MOZ_ASSERT(arr.Length() >= 1 &&
+    arr[0].value().type() == BluetoothValue::Tbool);
+
+  BluetoothMapGetMessageEventInit init;
+
+  for (uint32_t i = 0, propCount = arr.Length(); i < propCount; ++i) {
+    const nsString& name = arr[i].name();
+    const BluetoothValue& value = arr[i].value();
+    if (name.EqualsLiteral("hasAttachment")) {
+      init.mHasAttachment = value.get_bool();
+    } else if (name.EqualsLiteral("charset")) {
+      if (value.get_uint32_t() == 0) {
+        init.mCharset = FilterCharset::Native;
+      } else {
+        init.mCharset = FilterCharset::Utf_8;
+      }
+    }
+  }
+
+  init.mHandle = BluetoothMapRequestHandle::Create(GetOwner());
+
+  nsRefPtr<BluetoothMapGetMessageEvent> event =
+    BluetoothMapGetMessageEvent::Constructor(this,
+      NS_LITERAL_STRING(MAP_GET_MESSAGE_REQ_ID), init);
+  DispatchTrustedEvent(event);
+}
+
+void
+BluetoothAdapter::HandleMapSetMessageStatus(const BluetoothValue& aValue)
+{
+  MOZ_ASSERT(aValue.type() == BluetoothValue::TArrayOfBluetoothNamedValue);
+
+  const InfallibleTArray<BluetoothNamedValue>& arr =
+    aValue.get_ArrayOfBluetoothNamedValue();
+
+  MOZ_ASSERT(arr.Length() >= 1 &&
+    arr[0].value().type() == BluetoothValue::Tuint32_t);
+
+  BluetoothMapSetMessageStatusEventInit init;
+
+  for (uint32_t i = 0, propCount = arr.Length(); i < propCount; ++i) {
+    const nsString& name = arr[i].name();
+    const BluetoothValue& value = arr[i].value();
+    if (name.EqualsLiteral("handleId")) {
+      init.mHandleId = value.get_uint32_t();
+    } else if (name.EqualsLiteral("statusIndicator")) {
+      if (value.get_uint32_t()) {
+        init.mStatusIndicator = StatusIndicators::Deletedstatus;
+      } else {
+        init.mStatusIndicator = StatusIndicators::Readstatus;
+      }
+    } else if (name.EqualsLiteral("statusValue")) {
+      init.mStatusValue = static_cast<bool>(value.get_uint32_t());
+    }
+  }
+
+  init.mHandle = BluetoothMapRequestHandle::Create(GetOwner());
+
+  nsRefPtr<BluetoothMapSetMessageStatusEvent> event =
+    BluetoothMapSetMessageStatusEvent::Constructor(this,
+      NS_LITERAL_STRING(MAP_SET_MESSAGE_STATUS_REQ_ID), init);
+  DispatchTrustedEvent(event);
+}
+
+void
+BluetoothAdapter::HandleMapSendMessage(const BluetoothValue& aValue)
+{
+  MOZ_ASSERT(aValue.type() == BluetoothValue::TArrayOfBluetoothNamedValue);
+
+  const InfallibleTArray<BluetoothNamedValue>& arr =
+    aValue.get_ArrayOfBluetoothNamedValue();
+
+  MOZ_ASSERT(arr.Length() >= 1 &&
+    arr[0].value().type() == BluetoothValue::TnsString);
+
+  BluetoothMapSendMessageEventInit init;
+
+  for (uint32_t i = 0, propCount = arr.Length(); i < propCount; ++i) {
+    const nsString& name = arr[i].name();
+    const BluetoothValue& value = arr[i].value();
+    if (name.EqualsLiteral("recipient")) {
+      init.mRecipient = value.get_nsString();
+    } else if (name.EqualsLiteral("messageBody")) {
+      init.mMessageBody = value.get_nsString();
+    } else if (name.EqualsLiteral("retry")) {
+      init.mRetry = value.get_uint32_t();
+    }
+  }
+
+  init.mHandle = BluetoothMapRequestHandle::Create(GetOwner());
+
+  nsRefPtr<BluetoothMapSendMessageEvent> event =
+    BluetoothMapSendMessageEvent::Constructor(this,
+      NS_LITERAL_STRING(MAP_PUSH_MESSAGE_REQ_ID), init);
+  DispatchTrustedEvent(event);
+}
+
+void
+BluetoothAdapter::HandleMapMessageUpdate(const BluetoothValue& aValue)
+{
+  MOZ_ASSERT(aValue.type() == BluetoothValue::TArrayOfBluetoothNamedValue);
+
+  const InfallibleTArray<BluetoothNamedValue>& arr =
+    aValue.get_ArrayOfBluetoothNamedValue();
+
+  MOZ_ASSERT(arr.Length() >= 1 &&
+    arr[0].value().type() == BluetoothValue::TnsString);
+
+  BluetoothMapMessageUpdateEventInit init;
+
+  for (uint32_t i = 0, propCount = arr.Length(); i < propCount; ++i) {
+    const nsString& name = arr[i].name();
+    const BluetoothValue& value = arr[i].value();
+    if (name.EqualsLiteral("instanceId")) {
+      init.mInstanceId = value.get_uint32_t();
+    }
+  }
+
+  init.mHandle = BluetoothMapRequestHandle::Create(GetOwner());
+
+  nsRefPtr<BluetoothMapMessageUpdateEvent> event =
+    BluetoothMapMessageUpdateEvent::Constructor(this,
+      NS_LITERAL_STRING(MAP_MESSAGE_UPDATE_REQ_ID), init);
+  DispatchTrustedEvent(event);
+}
+
+
 void
 BluetoothAdapter::DispatchAttributeEvent(const Sequence<nsString>& aTypes)
 {
   MOZ_ASSERT(!aTypes.IsEmpty());
 
   BluetoothAttributeEventInit init;
   init.mAttrs = aTypes;
 
--- a/dom/bluetooth/common/webapi/BluetoothAdapter.h
+++ b/dom/bluetooth/common/webapi/BluetoothAdapter.h
@@ -7,16 +7,17 @@
 #ifndef mozilla_dom_bluetooth_BluetoothAdapter_h
 #define mozilla_dom_bluetooth_BluetoothAdapter_h
 
 #include "BluetoothCommon.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/DOMEventTargetHelper.h"
 #include "mozilla/dom/BluetoothAdapterBinding.h"
 #include "mozilla/dom/BluetoothDeviceEvent.h"
+#include "mozilla/dom/BluetoothMapParametersBinding.h"
 #include "mozilla/dom/BluetoothPbapParametersBinding.h"
 #include "mozilla/dom/Promise.h"
 #include "nsCOMPtr.h"
 
 namespace mozilla {
 namespace dom {
 class Blob;
 class DOMRequest;
@@ -90,16 +91,22 @@ public:
   IMPL_EVENT_HANDLER(pairingaborted);
   IMPL_EVENT_HANDLER(a2dpstatuschanged);
   IMPL_EVENT_HANDLER(hfpstatuschanged);
   IMPL_EVENT_HANDLER(pullphonebookreq);
   IMPL_EVENT_HANDLER(pullvcardentryreq);
   IMPL_EVENT_HANDLER(pullvcardlistingreq);
   IMPL_EVENT_HANDLER(requestmediaplaystatus);
   IMPL_EVENT_HANDLER(scostatuschanged);
+  IMPL_EVENT_HANDLER(mapfolderlistingreq);
+  IMPL_EVENT_HANDLER(mapmessageslistingreq);
+  IMPL_EVENT_HANDLER(mapgetmessagereq);
+  IMPL_EVENT_HANDLER(mapsetmessagestatusreq);
+  IMPL_EVENT_HANDLER(mapsendmessagereq);
+  IMPL_EVENT_HANDLER(mapmessageupdatereq);
 
   /****************************************************************************
    * Methods (Web API Implementation)
    ***************************************************************************/
   already_AddRefed<Promise> Enable(ErrorResult& aRv);
   already_AddRefed<Promise> Disable(ErrorResult& aRv);
 
   already_AddRefed<Promise> SetName(const nsAString& aName, ErrorResult& aRv);
@@ -337,16 +344,94 @@ private:
    * BluetoothValue must be propSelector, vCardSelector_OR or vCardSelector_AND.
    *
    * @param aValue [in] a BluetoothValue with 'TArrayOfuint32_t' type
    *                    The name of BluetoothValue must be 'propSelector',
    *                    'vCardSelector_OR' or 'vCardSelector_AND'.
    */
   Sequence<vCardProperties> getVCardProperties(const BluetoothValue &aValue);
 
+   /**
+   * Handle "MapFolderListing" bluetooth signal.
+   *
+   * @param aValue [in] Properties array of the MAP request.
+   *                    The array should contain a few properties:
+   *                    - uint32_t  'MaxListCount'
+   *                    - uint32_t  'ListStartOffset'
+   */
+  void HandleMapFolderListing(const BluetoothValue& aValue);
+
+  /**
+   * Handle "MapMessageListing" bluetooth signal.
+   *
+   * @param aValue [in] Properties array of the MAP request.
+   *                    The array should contain a few properties:
+   *                    - uint32_t  'MaxListCount'
+   *                    - uint32_t  'ListStartOffset'
+   *                    - uint32_t  'SubjectLength'
+   *                    - uint32_t  'ParameterMask'
+   *                    - uint32_t  'FilterMessageType'
+   *                    - nsString  'FilterPeriodBegin'
+   *                    - nsString  'FilterPeriodEnd'
+   *                    - uint32_t  'FilterReadStatus'
+   *                    - nsString  'FilterRecipient'
+   *                    - nsString  'FilterOriginator'
+   *                    - uint32_t  'FilterPriority'
+   */
+  void HandleMapMessagesListing(const BluetoothValue& aValue);
+
+  /**
+   * Handle "MapGetMessage" bluetooth signal.
+   *
+   * @param aValue [in] Properties array of the MAP request.
+   *                    The array should contain a few properties:
+   *                    - bool       'Attachment'
+   *                    - nsString   'Charset'
+   */
+  void HandleMapGetMessage(const BluetoothValue& aValue);
+
+  /**
+   * Handle "MapSetMessageStatus" bluetooth signal.
+   *
+   * @param aValue [in] Properties array of the scanned device.
+   *                    The array should contain a few properties:
+   *                    - long       'HandleId'
+   *                    - uint32_t   'StatusIndicator'
+   *                    - bool       'StatusValue'
+   */
+  void HandleMapSetMessageStatus(const BluetoothValue& aValue);
+
+  /**
+   * Handle "MapSendMessage" bluetooth signal.
+   *
+   * @param aValue [in] Properties array of the scanned device.
+   *                    The array should contain a few properties:
+   *                    - nsString    'Recipient'
+   *                    - nsString    'MessageBody'
+   *                    - uint32_t    'Retry'
+   */
+  void HandleMapSendMessage(const BluetoothValue& aValue);
+
+  /**
+   * Handle "MapMessageUpdate" bluetooth signal.
+   *
+   * @param aValue [in] Properties array of the scanned device.
+   *                    - nsString     'MASInstanceID'
+   */
+  void HandleMapMessageUpdate(const BluetoothValue& aValue);
+
+  /**
+   * Get a Sequence of ParameterMask from a BluetoothValue. The name of
+   * BluetoothValue must be parameterMask.
+   *
+   * @param aValue [in] a BluetoothValue with 'TArrayOfuint32_t' type
+   *                    The name of BluetoothValue must be 'parameterMask'.
+   */
+  Sequence<ParameterMask> GetParameterMask(const BluetoothValue &aValue);
+
   /**
    * Fire BluetoothAttributeEvent to trigger onattributechanged event handler.
    *
    * @param aTypes [in] Array of changed attributes. Must be non-empty.
    */
   void DispatchAttributeEvent(const Sequence<nsString>& aTypes);
 
   /**
new file mode 100644
--- /dev/null
+++ b/dom/bluetooth/common/webapi/BluetoothMapRequestHandle.cpp
@@ -0,0 +1,109 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+#include "BluetoothCommon.h"
+#include "BluetoothMapRequestHandle.h"
+#include "BluetoothReplyRunnable.h"
+#include "BluetoothService.h"
+
+#include "mozilla/dom/BluetoothMapRequestHandleBinding.h"
+#include "mozilla/dom/Promise.h"
+
+using namespace mozilla;
+using namespace dom;
+
+USING_BLUETOOTH_NAMESPACE
+
+NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(BluetoothMapRequestHandle, mOwner)
+NS_IMPL_CYCLE_COLLECTING_ADDREF(BluetoothMapRequestHandle)
+NS_IMPL_CYCLE_COLLECTING_RELEASE(BluetoothMapRequestHandle)
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(BluetoothMapRequestHandle)
+  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
+  NS_INTERFACE_MAP_ENTRY(nsISupports)
+NS_INTERFACE_MAP_END
+
+BluetoothMapRequestHandle::BluetoothMapRequestHandle(nsPIDOMWindow* aOwner)
+  : mOwner(aOwner)
+{
+  MOZ_ASSERT(aOwner);
+}
+
+BluetoothMapRequestHandle::~BluetoothMapRequestHandle()
+{
+}
+
+already_AddRefed<BluetoothMapRequestHandle>
+BluetoothMapRequestHandle::Create(nsPIDOMWindow* aOwner)
+{
+  MOZ_ASSERT(aOwner);
+
+  nsRefPtr<BluetoothMapRequestHandle> handle =
+    new BluetoothMapRequestHandle(aOwner);
+
+  return handle.forget();
+}
+
+already_AddRefed<Promise>
+BluetoothMapRequestHandle::ReplyToFolderListing(long aMasId,
+  const nsAString& aFolderlists, ErrorResult& aRv)
+{
+  // TODO: Implement this fuction in Bug 1208492
+  return nullptr;
+}
+
+already_AddRefed<Promise>
+BluetoothMapRequestHandle::ReplyToMessagesListing(long aMasId,
+                                                  Blob& aBlob,
+                                                  bool aNewMessage,
+                                                  const nsAString& aTimestamp,
+                                                  int aSize,
+                                                  ErrorResult& aRv)
+{
+  // TODO: Implement this fuction in Bug 1208492
+  return nullptr;
+}
+
+already_AddRefed<Promise>
+BluetoothMapRequestHandle::ReplyToGetMessage(long aMasId, Blob& aBlob,
+                                             ErrorResult& aRv)
+{
+  // TODO: Implement this fuction in Bug 1208492
+  return nullptr;
+}
+
+already_AddRefed<Promise>
+BluetoothMapRequestHandle::ReplyToSetMessageStatus(long aMasId,
+                                                   bool aStatus,
+                                                   ErrorResult& aRv)
+{
+  // TODO: Implement this fuction in Bug 1208492
+  return nullptr;
+}
+
+already_AddRefed<Promise>
+BluetoothMapRequestHandle::ReplyToSendMessage(long aMasId,
+                                              bool aStatus,
+                                              ErrorResult& aRv)
+{
+  // TODO: Implement this fuction in Bug 1208492
+  return nullptr;
+}
+
+already_AddRefed<Promise>
+BluetoothMapRequestHandle::ReplyToMessageUpdate(long aMasId,
+                                                bool aStatus,
+                                                ErrorResult& aRv)
+{
+  // TODO: Implement this fuction in Bug 1208492
+  return nullptr;
+}
+
+JSObject*
+BluetoothMapRequestHandle::WrapObject(JSContext* aCx,
+                                      JS::Handle<JSObject*> aGivenProto)
+{
+  return BluetoothMapRequestHandleBinding::Wrap(aCx, this, aGivenProto);
+}
new file mode 100644
--- /dev/null
+++ b/dom/bluetooth/common/webapi/BluetoothMapRequestHandle.h
@@ -0,0 +1,117 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+#ifndef mozilla_dom_bluetooth_BluetoothMapRequestHandle_h
+#define mozilla_dom_bluetooth_BluetoothMapRequestHandle_h
+
+#include "nsCOMPtr.h"
+#include "nsPIDOMWindow.h"
+#include "nsWrapperCache.h"
+#include "mozilla/dom/File.h"
+
+namespace mozilla {
+  class ErrorResult;
+  namespace dom {
+    class Promise;
+  }
+}
+
+BEGIN_BLUETOOTH_NAMESPACE
+
+class BluetoothMapRequestHandle final : public nsISupports
+                                      , public nsWrapperCache
+{
+public:
+  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(BluetoothMapRequestHandle)
+
+  static already_AddRefed<BluetoothMapRequestHandle>
+    Create(nsPIDOMWindow* aOwner);
+
+  nsPIDOMWindow* GetParentObject() const
+  {
+    return mOwner;
+  }
+
+  virtual JSObject* WrapObject(JSContext* aCx,
+                               JS::Handle<JSObject*> aGivenProto) override;
+  /**
+   * Reply to folder listing
+   *
+   * @param aMasId         [in]  MAS ID.
+   * @param aFolderlists   [in]  MAP folder Name.
+   * @param aRv            [out] Error result to set in case of error.
+   */
+  already_AddRefed<Promise> ReplyToFolderListing(long aMasId,
+    const nsAString& aFolderlists, ErrorResult& aRv);
+
+  /**
+   * Reply to messages listing
+   *
+   * @param aMasId         [in]  MAS ID.
+   * @param aBlob          [in]  MAP messages listing content.
+   * @param aNewMessage    [in]  Whether MSE has received a new message.
+   * @param aTimestamp     [in]  The local time basis and UTC offset of the
+   *                             MSE. MCE will interpret the timestamps of The
+   *                             messages listing entries.
+   * @param aSize          [in]  The number of accessible messages in the
+   *                             corresponding folder fulfilling.
+   * @param aRv            [out] Error result to set in case of error.
+   */
+  already_AddRefed<Promise> ReplyToMessagesListing(
+    long aMasId, Blob& aBlob, bool aNewMessage, const nsAString& aTimestamp,
+    int aSize, ErrorResult& aRv);
+
+  /**
+   * Reply to get-message request
+   *
+   * @param aMasId         [in]  MAS ID.
+   * @param aBlob          [in]  MAP get messages content.
+   * @param aRv            [out] Error result to set in case of error.
+   */
+  already_AddRefed<Promise> ReplyToGetMessage(long aMasId, Blob& aBlob,
+                                              ErrorResult& aRv);
+
+  /**
+   * Reply to get-message request
+   *
+   * @param aMasId         [in]  MAS ID.
+   * @param aStatus        [in]  MAP set message result.
+   * @param aRv            [out] Error result to set in case of error.
+   */
+  already_AddRefed<Promise> ReplyToSetMessageStatus(long aMasId, bool aStatus,
+                                                    ErrorResult& aRv);
+
+  /**
+   * Reply to get-message request
+   *
+   * @param aMasId         [in]  MAS ID.
+   * @param aStatus        [in]  MAP send message result.
+   * @param aRv            [out] Error result to set in case of error.
+   */
+  already_AddRefed<Promise> ReplyToSendMessage(long aMasId, bool aStatus,
+                                               ErrorResult& aRv);
+
+  /**
+   * Reply to message update request
+   *
+   * @param aMasId         [in]  MAS ID.
+   * @param aStatus        [in]  Update inbox results.
+   * @param aRv            [out] Error result to set in case of error.
+   */
+  already_AddRefed<Promise> ReplyToMessageUpdate(long aMasId, bool aStatus,
+                                                 ErrorResult& aRv);
+
+private:
+  BluetoothMapRequestHandle(nsPIDOMWindow* aOwner);
+  ~BluetoothMapRequestHandle();
+
+  nsCOMPtr<nsPIDOMWindow> mOwner;
+};
+
+END_BLUETOOTH_NAMESPACE
+
+#endif // mozilla_dom_bluetooth_BluetoothMapRequestHandle_h
--- a/dom/bluetooth/common/webapi/BluetoothPbapRequestHandle.h
+++ b/dom/bluetooth/common/webapi/BluetoothPbapRequestHandle.h
@@ -54,9 +54,9 @@ private:
   BluetoothPbapRequestHandle(nsPIDOMWindow* aOwner);
   ~BluetoothPbapRequestHandle();
 
   nsCOMPtr<nsPIDOMWindow> mOwner;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_bluetoothpbaprequesthandle_h
\ No newline at end of file
+#endif // mozilla_dom_bluetooth_bluetoothpbaprequesthandle_h
--- a/dom/bluetooth/moz.build
+++ b/dom/bluetooth/moz.build
@@ -32,16 +32,17 @@ if CONFIG['MOZ_B2G_BT']:
         'common/webapi/BluetoothGatt.cpp',
         'common/webapi/BluetoothGattAttributeEvent.cpp',
         'common/webapi/BluetoothGattCharacteristic.cpp',
         'common/webapi/BluetoothGattDescriptor.cpp',
         'common/webapi/BluetoothGattServer.cpp',
         'common/webapi/BluetoothGattService.cpp',
         'common/webapi/BluetoothLeDeviceEvent.cpp',
         'common/webapi/BluetoothManager.cpp',
+        'common/webapi/BluetoothMapRequestHandle.cpp',
         'common/webapi/BluetoothPairingHandle.cpp',
         'common/webapi/BluetoothPairingListener.cpp',
         'common/webapi/BluetoothPbapRequestHandle.cpp',
         'ipc/BluetoothChild.cpp',
         'ipc/BluetoothParent.cpp',
         'ipc/BluetoothServiceChildProcess.cpp'
     ]
     LOCAL_INCLUDES += [
@@ -147,16 +148,17 @@ EXPORTS.mozilla.dom.bluetooth += [
     'common/webapi/BluetoothGatt.h',
     'common/webapi/BluetoothGattAttributeEvent.h',
     'common/webapi/BluetoothGattCharacteristic.h',
     'common/webapi/BluetoothGattDescriptor.h',
     'common/webapi/BluetoothGattServer.h',
     'common/webapi/BluetoothGattService.h',
     'common/webapi/BluetoothLeDeviceEvent.h',
     'common/webapi/BluetoothManager.h',
+    'common/webapi/BluetoothMapRequestHandle.h',
     'common/webapi/BluetoothPairingHandle.h',
     'common/webapi/BluetoothPairingListener.h',
     'common/webapi/BluetoothPbapRequestHandle.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
@@ -75,16 +75,40 @@ const kEventConstructors = {
   BluetoothLeDeviceEvent:                    { create: function (aName, aProps) {
                                                           return new BluetoothLeDeviceEvent(aName, aProps);
                                                        },
                                              },
   BluetoothPairingEvent:                     { create: function (aName, aProps) {
                                                           return new BluetoothPairingEvent(aName, aProps);
                                                        },
                                              },
+  BluetoothMapFolderListingEvent:            { create: function (aName, aProps) {
+                                                          return new BluetoothMapFolderListingEvent(aName, aProps);
+                                                       },
+                                             },
+  BluetoothMapGetMessageEvent:               { create: function (aName, aProps) {
+                                                          return new BluetoothMapGetMessageEvent(aName, aProps);
+                                                       },
+                                             },
+  BluetoothMapMessagesListingEvent:          { create: function (aName, aProps) {
+                                                          return new BluetoothMapMessagesListingEvent(aName, aProps);
+                                                       },
+                                             },
+  BluetoothMapMessageUpdateEvent:            { create: function (aName, aProps) {
+                                                          return new BluetoothMapMessageUpdateEvent(aName, aProps);
+                                                       },
+                                             },
+  BluetoothMapSendMessageEvent:              { create: function (aName, aProps) {
+                                                          return new BluetoothMapSendMessageEvent(aName, aProps);
+                                                       },
+                                             },
+  BluetoothMapSetMessageStatusEvent:         { create: function (aName, aProps) {
+                                                          return new BluetoothMapSetMessageStatusEvent(aName, aProps);
+                                                       },
+                                             },
   BluetoothPhonebookPullingEvent:            { create: function (aName, aProps) {
                                                           return new BluetoothPhonebookPullingEvent(aName, aProps);
                                                        },
                                              },
   BluetoothStatusChangedEvent:               { create: function (aName, aProps) {
                                                           return new BluetoothStatusChangedEvent(aName, aProps);
                                                        },
                                              },
--- a/dom/tests/mochitest/general/test_interfaces.html
+++ b/dom/tests/mochitest/general/test_interfaces.html
@@ -215,16 +215,30 @@ var interfaceNamesInGlobalScope =
     {name: "BluetoothGattServer", b2g: true, permission: ["bluetooth"]},
 // IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "BluetoothGattService", b2g: true, permission: ["bluetooth"]},
 // IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "BluetoothLeDeviceEvent", b2g: true, permission: ["bluetooth"]},
 // IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "BluetoothManager", b2g: true, permission: ["bluetooth"]},
 // IMPORTANT: Do not change this list without review from a DOM peer!
+    {name: "BluetoothMapFolderListingEvent", b2g: true, permission: ["bluetooth"]},
+// IMPORTANT: Do not change this list without review from a DOM peer!
+    {name: "BluetoothMapGetMessageEvent", b2g: true, permission: ["bluetooth"]},
+// IMPORTANT: Do not change this list without review from a DOM peer!
+    {name: "BluetoothMapMessagesListingEvent", b2g: true, permission: ["bluetooth"]},
+// IMPORTANT: Do not change this list without review from a DOM peer!
+    {name: "BluetoothMapMessageUpdateEvent", b2g: true, permission: ["bluetooth"]},
+// IMPORTANT: Do not change this list without review from a DOM peer!
+    {name: "BluetoothMapRequestHandle", b2g: true, permission: ["bluetooth"]},
+// IMPORTANT: Do not change this list without review from a DOM peer!
+    {name: "BluetoothMapSendMessageEvent", b2g: true, permission: ["bluetooth"]},
+// IMPORTANT: Do not change this list without review from a DOM peer!
+    {name: "BluetoothMapSetMessageStatusEvent", b2g: true, permission: ["bluetooth"]},
+// IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "BluetoothPbapRequestHandle", b2g: true, permission: ["bluetooth"]},
 // IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "BluetoothPairingEvent", b2g: true, permission: ["bluetooth"]},
 // IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "BluetoothPairingHandle", b2g: true, permission: ["bluetooth"]},
 // IMPORTANT: Do not change this list without review from a DOM peer!
     {name: "BluetoothPhonebookPullingEvent", b2g: true, permission: ["bluetooth"]},
 // IMPORTANT: Do not change this list without review from a DOM peer!
--- a/dom/webidl/BluetoothAdapter.webidl
+++ b/dom/webidl/BluetoothAdapter.webidl
@@ -73,16 +73,34 @@ interface BluetoothAdapter : EventTarget
            attribute EventHandler   onpullphonebookreq;
 
   // Fired when PBAP manager requests for 'pullvcardentry'
            attribute EventHandler   onpullvcardentryreq;
 
   // Fired when PBAP manager requests for 'pullvcardlisting'
            attribute EventHandler   onpullvcardlistingreq;
 
+  // Fired when remote devices request to list SMS/MMS/Email folders
+           attribute EventHandler   onmapfolderlistingreq;
+
+  // Fired when remote devices request to list SMS/MMS/Email messages
+           attribute EventHandler   onmapmessageslistingreq;
+
+  // Fired when remote devices fetch the specific message
+           attribute EventHandler   onmapgetmessagereq;
+
+  // Fired when remote devices set message status
+           attribute EventHandler   onmapsetmessagestatusreq;
+
+  // Fired when remote devices send out SMS/MMS/Email message
+           attribute EventHandler   onmapsendmessagereq;
+
+  // Fired when remote devices download SMS/MMS/Email messages
+           attribute EventHandler   onmapmessageupdatereq;
+
   /**
    * Enable/Disable a local bluetooth adapter by asynchronus methods and return
    * its result through a Promise.
    *
    * Several onattributechanged events would be triggered during processing the
    * request, and the last one indicates adapter.state becomes enabled/disabled.
    */
   [NewObject, AvailableIn=CertifiedApps]
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothMapFolderListingEvent.webidl
@@ -0,0 +1,24 @@
+/* -*- 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/.
+ */
+
+[CheckAnyPermissions="bluetooth",
+ Constructor(DOMString type,
+             optional BluetoothMapFolderListingEventInit eventInitDict)]
+interface BluetoothMapFolderListingEvent : Event
+{
+  readonly attribute unsigned long              maxListCount;
+  readonly attribute unsigned long              listStartOffset;
+
+  readonly attribute BluetoothMapRequestHandle? handle;
+};
+
+dictionary BluetoothMapFolderListingEventInit : EventInit
+{
+  unsigned long             maxListCount = 0;
+  unsigned long             listStartOffset = 0;
+
+  BluetoothMapRequestHandle? handle = null;
+};
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothMapGetMessageEvent.webidl
@@ -0,0 +1,24 @@
+/* -*- 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/.
+ */
+
+[CheckAnyPermissions="bluetooth",
+ Constructor(DOMString type,
+             optional BluetoothMapGetMessageEventInit eventInitDict)]
+interface BluetoothMapGetMessageEvent : Event
+{
+  readonly attribute boolean          hasAttachment;
+  readonly attribute FilterCharset    charset;
+
+  readonly attribute BluetoothMapRequestHandle? handle;
+};
+
+dictionary BluetoothMapGetMessageEventInit : EventInit
+{
+  boolean                   hasAttachment = false;
+  FilterCharset             charset = "utf-8";
+
+  BluetoothMapRequestHandle? handle = null;
+};
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothMapMessageUpdateEvent.webidl
@@ -0,0 +1,22 @@
+/* -*- 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/.
+ */
+
+[CheckAnyPermissions="bluetooth",
+ Constructor(DOMString type,
+             optional BluetoothMapMessageUpdateEventInit eventInitDict)]
+interface BluetoothMapMessageUpdateEvent : Event
+{
+  readonly attribute unsigned long         instanceId;
+
+  readonly attribute BluetoothMapRequestHandle? handle;
+};
+
+dictionary BluetoothMapMessageUpdateEventInit : EventInit
+{
+  unsigned long                   instanceId = 0;
+
+  BluetoothMapRequestHandle? handle = null;
+};
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothMapMessagesListingEvent.webidl
@@ -0,0 +1,43 @@
+/* -*- 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/.
+ */
+
+[CheckAnyPermissions="bluetooth",
+ Constructor(DOMString type,
+             optional BluetoothMapMessagesListingEventInit eventInitDict)]
+interface BluetoothMapMessagesListingEvent : Event
+{
+  readonly attribute unsigned long              maxListCount;
+  readonly attribute unsigned long              listStartOffset;
+  readonly attribute unsigned long              subjectLength;
+  [Cached, Constant]
+  readonly attribute sequence<ParameterMask>    parameterMask;
+  readonly attribute MessageType                filterMessageType;
+  readonly attribute DOMString                  filterPeriodBegin;
+  readonly attribute DOMString                  filterPeriodEnd;
+  readonly attribute ReadStatus                 filterReadStatus;
+  readonly attribute DOMString                  filterRecipient;
+  readonly attribute DOMString                  filterOriginator;
+  readonly attribute Priority                   filterPriority;
+
+  readonly attribute BluetoothMapRequestHandle? handle;
+};
+
+dictionary BluetoothMapMessagesListingEventInit : EventInit
+{
+  unsigned long             maxListCount = 0;
+  unsigned long             listStartOffset = 0;
+  unsigned long             subjectLength = 0;
+  sequence<ParameterMask>   parameterMask = [];
+  MessageType               filterMessageType = "no-filtering";
+  DOMString                 filterPeriodBegin = "";
+  DOMString                 filterPeriodEnd = "";
+  ReadStatus                filterReadStatus = "no-filtering";
+  DOMString                 filterRecipient = "";
+  DOMString                 filterOriginator = "";
+  Priority                  filterPriority = "no-filtering";
+
+  BluetoothMapRequestHandle? handle = null;
+};
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothMapParameters.webidl
@@ -0,0 +1,62 @@
+/* -*- 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/.
+ */
+
+/**
+ * MAP Application Parameters
+ */
+enum MessageType
+{
+  "no-filtering",
+  "sms",
+  "email",
+  "mms"
+};
+
+enum ReadStatus
+{
+  "no-filtering",
+  "unread",
+  "read"
+};
+
+enum Priority
+{
+  "no-filtering",
+  "high-priority",
+  "non-priority"
+};
+
+enum ParameterMask
+{
+  "subject",
+  "datetime",
+  "sender_name",
+  "sender_addressing",
+  "recipient_name",
+  "recipient_addressing",
+  "type",
+  "size",
+  "reception_status",
+  "text",
+  "attachment_size",
+  "priority",
+  "read",
+  "sent",
+  "protected",
+  "replyto_addressing",
+};
+
+enum FilterCharset
+{
+  "native",
+  "utf-8"
+};
+
+enum StatusIndicators
+{
+  "readstatus",
+  "deletedstatus"
+};
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothMapRequestHandle.webidl
@@ -0,0 +1,55 @@
+/* -*- 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/. */
+
+[CheckAnyPermissions="bluetooth"]
+interface BluetoothMapRequestHandle
+{
+  /**
+   * Reply to Folder-Listing object for MAP request. The Promise will be
+   * rejected if the MAP request operation fails.
+   */
+  [NewObject, Throws, AvailableIn=CertifiedApps]
+  Promise<void> replyToFolderListing(long masId, DOMString folders);
+
+  /**
+   * Reply the Messages-Listing object to the MAP request. The Promise will
+   * be rejected if the MAP request operation fails.
+   */
+  [NewObject, Throws, AvailableIn=CertifiedApps]
+  Promise<void> replyToMessagesListing(
+    long masId,
+    Blob messageslisting,
+    boolean newmessage,
+    DOMString timestamp,
+    unsigned long size);
+
+  /**
+   * Reply GetMessage object to the MAP request. The Promise will be rejected
+   * if the MAP request operation fails.
+   */
+  [NewObject, Throws, AvailableIn=CertifiedApps]
+  Promise<void> replyToGetMessage(long masId, Blob bmessage);
+
+  /**
+   * Reply SetMessage object to the MAP request. The Promise will be rejected
+   * if the MAP request operation fails.
+   */
+  [NewObject, Throws, AvailableIn=CertifiedApps]
+  Promise<void> replyToSetMessageStatus(long masId, boolean status);
+
+  /**
+   * Reply SendMessage request to the MAP request. The Promise will be rejected
+   * if the MAP request operation fails.
+   */
+  [NewObject, Throws, AvailableIn=CertifiedApps]
+  Promise<void> replyToSendMessage(long masId, boolean status);
+
+  /**
+   * Reply Message-Update object to the MAP request. The Promise will be
+   * rejected if the MAP request operation fails.
+   */
+  [NewObject, Throws, AvailableIn=CertifiedApps]
+  Promise<void> replyToMessageUpdate(long masId, boolean status);
+};
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothMapSendMessageEvent.webidl
@@ -0,0 +1,26 @@
+/* -*- 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/.
+ */
+
+[CheckAnyPermissions="bluetooth",
+ Constructor(DOMString type,
+             optional BluetoothMapSendMessageEventInit eventInitDict)]
+interface BluetoothMapSendMessageEvent : Event
+{
+  readonly attribute DOMString        recipient;
+  readonly attribute DOMString        messageBody;
+  readonly attribute unsigned long    retry;
+
+  readonly attribute BluetoothMapRequestHandle? handle;
+};
+
+dictionary BluetoothMapSendMessageEventInit : EventInit
+{
+  DOMString                 recipient = "";
+  DOMString                 messageBody = "";
+  unsigned long             retry = 0;
+
+  BluetoothMapRequestHandle? handle = null;
+};
new file mode 100644
--- /dev/null
+++ b/dom/webidl/BluetoothMapSetMessageStatusEvent.webidl
@@ -0,0 +1,26 @@
+/* -*- 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/.
+ */
+
+[CheckAnyPermissions="bluetooth",
+ Constructor(DOMString type,
+             optional BluetoothMapSetMessageStatusEventInit eventInitDict)]
+interface BluetoothMapSetMessageStatusEvent : Event
+{
+  readonly attribute unsigned long     handleId;
+  readonly attribute StatusIndicators  statusIndicator;
+  readonly attribute boolean           statusValue;
+
+  readonly attribute BluetoothMapRequestHandle? handle;
+};
+
+dictionary BluetoothMapSetMessageStatusEventInit : EventInit
+{
+  unsigned long             handleId = 0;
+  StatusIndicators          statusIndicator = "readstatus";
+  boolean                   statusValue = false;
+
+  BluetoothMapRequestHandle? handle = null;
+};
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -689,16 +689,18 @@ if CONFIG['MOZ_B2G_BT']:
         'BluetoothGatt.webidl',
         'BluetoothGattAttributeEvent.webidl',
         'BluetoothGattCharacteristic.webidl',
         'BluetoothGattDescriptor.webidl',
         'BluetoothGattServer.webidl',
         'BluetoothGattService.webidl',
         'BluetoothLeDeviceEvent.webidl',
         'BluetoothManager.webidl',
+        'BluetoothMapParameters.webidl',
+        'BluetoothMapRequestHandle.webidl',
         'BluetoothPairingHandle.webidl',
         'BluetoothPairingListener.webidl',
         'BluetoothPbapParameters.webidl',
         'BluetoothPbapRequestHandle.webidl',
     ]
 
 if CONFIG['MOZ_SIMPLEPUSH']:
     WEBIDL_FILES += [
@@ -841,16 +843,22 @@ if CONFIG['MOZ_GAMEPAD']:
     ]
 
 if CONFIG['MOZ_B2G_BT']:
     GENERATED_EVENTS_WEBIDL_FILES += [
         'BluetoothAdapterEvent.webidl',
         'BluetoothAttributeEvent.webidl',
         'BluetoothDeviceEvent.webidl',
         'BluetoothGattCharacteristicEvent.webidl',
+        'BluetoothMapFolderListingEvent.webidl',
+        'BluetoothMapGetMessageEvent.webidl',
+        'BluetoothMapMessagesListingEvent.webidl',
+        'BluetoothMapMessageUpdateEvent.webidl',
+        'BluetoothMapSendMessageEvent.webidl',
+        'BluetoothMapSetMessageStatusEvent.webidl',
         'BluetoothPairingEvent.webidl',
         'BluetoothPhonebookPullingEvent.webidl',
         'BluetoothStatusChangedEvent.webidl',
         'BluetoothVCardListingEvent.webidl',
         'BluetoothVCardPullingEvent.webidl'
     ]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':