merge b2g-inbound to mozilla-central a=merge
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Wed, 10 Dec 2014 12:52:44 +0100
changeset 219001 be1f49e80d2da65d16134390ab8b8e8c36a883ab
parent 218985 5b01216f97f863236eccee5227abbc18319d4ab1 (current diff)
parent 219000 3d5ba00bcbd3aa2d14de5fb14d189c667be5a3d2 (diff)
child 219014 4acb2610701d7bf43f6f4da054fdda005269ce1c
child 219033 76b6d288fd3eb7b9da97b0d6856fbc5581403a60
child 219073 b6b35fd1be0929bcae655c730ec0038a2f9942e5
push id27951
push usercbook@mozilla.com
push dateWed, 10 Dec 2014 11:53:20 +0000
treeherdermozilla-central@be1f49e80d2d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone37.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
merge b2g-inbound to mozilla-central a=merge
--- a/b2g/config/dolphin/sources.xml
+++ b/b2g/config/dolphin/sources.xml
@@ -10,17 +10,17 @@
   <!--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="3ab0d9c70f0b2e1ededc679112c392303f037361">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <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="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
@@ -130,16 +130,16 @@
   <project name="platform/external/icu4c" path="external/icu4c" revision="2bb01561780583cc37bc667f0ea79f48a122d8a2"/>
   <!-- dolphin specific things -->
   <project name="device/sprd" path="device/sprd" revision="3a0f1b51e3b27b36b9df484f3c286b6099889f6e"/>
   <project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="4e58336019b5cbcfd134caf55b142236cf986618"/>
   <project name="platform/frameworks/av" path="frameworks/av" revision="4387fe988e5a1001f29ce05fcfda03ed2d32137b"/>
   <project name="platform/hardware/akm" path="hardware/akm" revision="6d3be412647b0eab0adff8a2768736cf4eb68039"/>
   <project groups="invensense" name="platform/hardware/invensense" path="hardware/invensense" revision="e6d9ab28b4f4e7684f6c07874ee819c9ea0002a2"/>
   <project name="platform/hardware/ril" path="hardware/ril" revision="865ce3b4a2ba0b3a31421ca671f4d6c5595f8690"/>
-  <project name="kernel/common" path="kernel" revision="291a7d55be6b0117786bf4d25366186c301185c2"/>
+  <project name="kernel/common" path="kernel" revision="6c6f012cea17fb8b3263605737816cf6663432f1"/>
   <project name="platform/system/core" path="system/core" revision="53d584d4a4b4316e4de9ee5f210d662f89b44e7e"/>
   <project name="u-boot" path="u-boot" revision="982c1fd67b89d5573317c1796cf5b0143de44e8a"/>
   <project name="vendor/sprd/gps" path="vendor/sprd/gps" revision="6974f8e771d4d8e910357a6739ab124768891e8f"/>
   <project name="vendor/sprd/open-source" path="vendor/sprd/open-source" revision="1d4697b16ed039fd1de0a23bda150523e743e2ad"/>
   <project name="vendor/sprd/partner" path="vendor/sprd/partner" revision="8649c7145972251af11b0639997edfecabfc7c2e"/>
   <project name="vendor/sprd/proprietories" path="vendor/sprd/proprietories" revision="d2466593022f7078aaaf69026adf3367c2adb7bb"/>
 </manifest>
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="df362ace56338da8173d30d3e09e08c42c1accfa">
     <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="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d5d3f93914558b6f168447b805cd799c8233e300"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="6fa7a4936414ceb4055fd27f7a30e76790f834fb"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
   <!-- 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,17 +12,17 @@
   <!--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="0e94c080bee081a50aa2097527b0b40852f9143f">
     <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="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
   <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"/>
--- a/b2g/config/emulator-kk/sources.xml
+++ b/b2g/config/emulator-kk/sources.xml
@@ -10,17 +10,17 @@
   <!--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="3ab0d9c70f0b2e1ededc679112c392303f037361">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <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="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
--- 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="df362ace56338da8173d30d3e09e08c42c1accfa">
     <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="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d5d3f93914558b6f168447b805cd799c8233e300"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="6fa7a4936414ceb4055fd27f7a30e76790f834fb"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/flame-kk/sources.xml
+++ b/b2g/config/flame-kk/sources.xml
@@ -10,17 +10,17 @@
   <!--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="3ab0d9c70f0b2e1ededc679112c392303f037361">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <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="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
--- a/b2g/config/flame/sources.xml
+++ b/b2g/config/flame/sources.xml
@@ -12,17 +12,17 @@
   <!--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="0e94c080bee081a50aa2097527b0b40852f9143f">
     <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="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
   <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"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
         "git_revision": "", 
         "remote": "", 
         "branch": ""
     }, 
-    "revision": "0e1227044422a4fae14ec6b1d035380d693cff97", 
+    "revision": "7736b561cce1e1738de0901b796a1da3cbcc8985", 
     "repo_path": "integration/gaia-central"
 }
--- a/b2g/config/hamachi/sources.xml
+++ b/b2g/config/hamachi/sources.xml
@@ -12,17 +12,17 @@
   <!--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="df362ace56338da8173d30d3e09e08c42c1accfa">
     <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="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
   <!-- 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"/>
--- 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="df362ace56338da8173d30d3e09e08c42c1accfa">
     <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="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <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="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <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,17 +12,17 @@
   <!--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="0e94c080bee081a50aa2097527b0b40852f9143f">
     <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="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
   <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"/>
--- a/b2g/config/wasabi/sources.xml
+++ b/b2g/config/wasabi/sources.xml
@@ -12,17 +12,17 @@
   <!--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="df362ace56338da8173d30d3e09e08c42c1accfa">
     <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="4cdeee67b449db90aae9384337311547c280093c"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e17c5656dbf517d48fb61ac9bc92119e023fd717"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="50ad16a280fe9cfa0716f8c6ba16afdf7f266b49"/>
   <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="fe893bb760a3bb64375f62fdf4762a58c59df9ef"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="a3e4614c7fb0a6ffa8c748bf5d49b34612c9d6d4"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
--- a/dom/settings/SettingsRequestManager.jsm
+++ b/dom/settings/SettingsRequestManager.jsm
@@ -50,16 +50,20 @@ XPCOMUtils.defineLazyServiceGetter(this,
                                    "@mozilla.org/parentprocessmessagemanager;1",
                                    "nsIMessageBroadcaster");
 XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
                                    "@mozilla.org/uuid-generator;1",
                                    "nsIUUIDGenerator");
 
 let SettingsPermissions = {
   checkPermission: function(aPrincipal, aPerm) {
+    if (!aPrincipal) {
+      Cu.reportError("SettingsPermissions.checkPermission was passed a null principal. Denying all permissions.");
+      return false;
+    }
     if (aPrincipal.origin == "[System Principal]" ||
         Services.perms.testExactPermissionFromPrincipal(aPrincipal, aPerm) == Ci.nsIPermissionManager.ALLOW_ACTION) {
       return true;
     }
     return false;
   },
   hasAllReadPermission: function(aPrincipal) {
     return this.checkPermission(aPrincipal, kAllSettingsReadPermission);
@@ -80,17 +84,17 @@ let SettingsPermissions = {
     return this.hasAllReadPermission(aPrincipal) || this.checkPermission(aPrincipal, "settings:" + aSettingsName + kSettingsReadSuffix);
   },
   hasWritePermission: function(aPrincipal, aSettingsName) {
     return this.hasAllWritePermission(aPrincipal) || this.checkPermission(aPrincipal, "settings:" + aSettingsName + kSettingsWriteSuffix);
   }
 };
 
 
-function SettingsLockInfo(aDB, aMsgMgr, aLockID, aIsServiceLock, aWindowID) {
+function SettingsLockInfo(aDB, aMsgMgr, aPrincipal, aLockID, aIsServiceLock, aWindowID) {
   return {
     // ID Shared with the object on the child side
     lockID: aLockID,
     // Is this a content lock or a settings service lock?
     isServiceLock: aIsServiceLock,
     // Which inner window ID
     windowID: aWindowID,
     // Tasks to be run once the lock is at the head of the queue
@@ -109,17 +113,21 @@ function SettingsLockInfo(aDB, aMsgMgr, 
     _failed: false,
     // If we're slated to run finalize, set this to make sure we don't
     // somehow run other events afterward.
     finalizing: false,
     // Lets us know if we can use this lock for a clear command
     canClear: true,
     // Lets us know if this lock has been used to clear at any point.
     hasCleared: false,
-    getObjectStore: function(aPrincipal) {
+    // Principal the lock was created under. We assume that the lock
+    // will continue to exist under this principal for the duration of
+    // its lifetime.
+    principal: aPrincipal,
+    getObjectStore: function() {
       if (VERBOSE) debug("Getting transaction for " + this.lockID);
       let store;
       // Test for transaction validity via trying to get the
       // datastore. If it doesn't work, assume the transaction is
       // closed, create a new transaction and try again.
       if (this._transaction) {
         try {
           store = this._transaction.objectStore(SETTINGSSTORE_NAME);
@@ -131,17 +139,17 @@ function SettingsLockInfo(aDB, aMsgMgr, 
             throw e;
           }
         }
       }
       // Create one transaction with a global permission. This may be
       // slightly slower on apps with full settings permissions, but
       // it means we don't have to do our own transaction order
       // bookkeeping.
-      if (!SettingsPermissions.hasSomeWritePermission(aPrincipal)) {
+      if (!SettingsPermissions.hasSomeWritePermission(this.principal)) {
         if (VERBOSE) debug("Making READONLY transaction for " + this.lockID);
         this._transaction = aDB._db.transaction(SETTINGSSTORE_NAME, "readonly");
       } else {
         if (VERBOSE) debug("Making READWRITE transaction for " + this.lockID);
         this._transaction = aDB._db.transaction(SETTINGSSTORE_NAME, "readwrite");
       }
       this._transaction.oncomplete = function() {
         if (VERBOSE) debug("Transaction for lock " + this.lockID + " closed");
@@ -175,17 +183,21 @@ let SettingsRequestManager = {
              "Settings:CreateLock", "Settings:RegisterForMessages"],
   // Map of LockID to SettingsLockInfo objects
   lockInfo: {},
   // Queue of LockIDs. The LockID on the front of the queue is the only lock
   // that will have requests processed, all other locks will queue requests
   // until they hit the front of the queue.
   settingsLockQueue: [],
   children: [],
-  mmPrincipals: new Map(),
+  // Since we need to call observers at times when we may not have
+  // just received a message from a child process, we cache principals
+  // for message managers and check permissions on them before we send
+  // settings notifications to child processes.
+  observerPrincipalCache: new Map(),
   tasksConsumed: 0,
 
   init: function() {
     if (VERBOSE) debug("init");
     this.settingsDB.init();
     this.messages.forEach((function(msgName) {
       ppmm.addMessageListener(msgName, this);
     }).bind(this));
@@ -220,17 +232,17 @@ let SettingsRequestManager = {
     return JSON.parse(stringified, function(key, value) {
       if (value in binaries) {
         return binaries[value];
       }
       return value;
     });
   },
 
-  queueTask: function(aOperation, aData, aPrincipal) {
+  queueTask: function(aOperation, aData) {
     if (VERBOSE) debug("Queueing task: " + aOperation);
 
     let defer = {};
 
     let lock = this.lockInfo[aData.lockID];
 
     if (!lock) {
       return Promise.reject({error: "Lock already dead, cannot queue task"});
@@ -238,17 +250,16 @@ let SettingsRequestManager = {
 
     if (aOperation == "set") {
       aData.settings = this._serializePreservingBinaries(aData.settings);
     }
 
     this.lockInfo[aData.lockID].tasks.push({
       operation: aOperation,
       data: aData,
-      principal: aPrincipal,
       defer: defer
     });
 
     let promise = new Promise(function(resolve, reject) {
       defer.resolve = resolve;
       defer.reject = reject;
     });
 
@@ -261,17 +272,17 @@ let SettingsRequestManager = {
   // receive promise responses out of expected order if a get is
   // called before a set. Therefore, we wrap our resolve in a null
   // get, which means it will resolves afer the rest of the calls
   // queued to the DB.
   queueTaskReturn: function(aTask, aReturnValue) {
     if (VERBOSE) debug("Making task queuing transaction request.");
     let data = aTask.data;
     let lock = this.lockInfo[data.lockID];
-    let store = lock.getObjectStore(aTask.principal);
+    let store = lock.getObjectStore(lock.principal);
     if (!store) {
       if (DEBUG) debug("Rejecting task queue on lock " + aTask.data.lockID);
       return Promise.reject({task: aTask, error: "Cannot get object store"});
     }
     // Due to the fact that we're skipping the database, resolving
     // this without a call to the database would mean we could
     // potentially receive promise responses out of expected order if
     // a get is called before a set. Therefore, we wrap our resolve in
@@ -311,33 +322,33 @@ let SettingsRequestManager = {
 
     if (lock.hasCleared) {
       if (DEBUG) debug("Lock was used for a clear command. All subsequent requests will fail.");
       return Promise.reject({task: aTask, error: "Lock was used for a clear command. All subsequent requests will fail."});
     }
 
     lock.canClear = false;
     
-    if (!SettingsPermissions.hasReadPermission(aTask.principal, data.name)) {
+    if (!SettingsPermissions.hasReadPermission(lock.principal, data.name)) {
       if (DEBUG) debug("get not allowed for " + data.name);
       lock._failed = true;
       return Promise.reject({task: aTask, error: "No permission to get " + data.name});
     }
 
     // If the value was set during this transaction, use the cached value
     if (data.name in lock.queuedSets) {
       if (VERBOSE) debug("Returning cached set value " + lock.queuedSets[data.name] + " for " + data.name);
       let local_results = {};
       local_results[data.name] = lock.queuedSets[data.name];
       return this.queueTaskReturn(aTask, {task: aTask, results: local_results});
     }
 
     // Create/Get transaction and make request
     if (VERBOSE) debug("Making get transaction request for " + data.name);
-    let store = lock.getObjectStore(aTask.principal);
+    let store = lock.getObjectStore(lock.principal);
     if (!store) {
       if (DEBUG) debug("Rejecting Get task on lock " + aTask.data.lockID);
       return Promise.reject({task: aTask, error: "Cannot get object store"});
     }
 
     if (VERBOSE) debug("Making get request for " + data.name);
     let getReq = (data.name === "*") ? store.mozGetAll() : store.mozGetAll(data.name);
 
@@ -394,17 +405,17 @@ let SettingsRequestManager = {
 
     // If we have no keys, resolve
     if (keys.length === 0) {
       if (DEBUG) debug("No keys to change entered!");
       return Promise.resolve({task: aTask});
     }
 
     for (let i = 0; i < keys.length; i++) {
-      if (!SettingsPermissions.hasWritePermission(aTask.principal, keys[i])) {
+      if (!SettingsPermissions.hasWritePermission(lock.principal, keys[i])) {
         if (DEBUG) debug("set not allowed on " + keys[i]);
         lock._failed = true;
         return Promise.reject({task: aTask, error: "No permission to set " + keys[i]});
       }
     }
 
     for (let i = 0; i < keys.length; i++) {
       let key = keys[i];
@@ -465,17 +476,17 @@ let SettingsRequestManager = {
     }
     let keys = Object.getOwnPropertyNames(lock.queuedSets);
     if (keys.length === 0) {
       if (VERBOSE) debug("Nothing to finalize. Exiting.");
       this.removeLock(data.lockID);
       return Promise.resolve({task: aTask});
     }
 
-    let store = lock.getObjectStore(aTask.principal);
+    let store = lock.getObjectStore(lock.principal);
     if (!store) {
       if (DEBUG) debug("Rejecting Set task on lock " + aTask.data.lockID);
       this.removeLock(data.lockID);
       return Promise.reject({task: aTask, error: "Cannot get object store"});
     }
 
     // Due to the fact there may have multiple set operations to clear, and
     // they're all async, callbacks are gathered into promises, and the promises
@@ -561,25 +572,25 @@ let SettingsRequestManager = {
     }
 
     if (!lock.canClear) {
       if (DEBUG) debug("Lock tried to clear after queuing other tasks. Failing.");
       lock._failed = true;
       return Promise.reject({task: aTask, error: "Cannot call clear after queuing other tasks, all requests now failing."});
     }
 
-    if (!SettingsPermissions.hasClearPermission(aTask.principal)) {
+    if (!SettingsPermissions.hasClearPermission(lock.principal)) {
       if (DEBUG) debug("clear not allowed");
       lock._failed = true;
       return Promise.reject({task: aTask, error: "No permission to clear DB"});
     }
 
     lock.hasCleared = true;
 
-    let store = lock.getObjectStore(aTask.principal);
+    let store = lock.getObjectStore(lock.principal);
     if (!store) {
       if (DEBUG) debug("Rejecting Clear task on lock " + aTask.data.lockID);
       return Promise.reject({task: aTask, error: "Cannot get object store"});
     }
     let defer = {};
     let promiseWrapper = new Promise(function(resolve, reject) {
       defer.resolve = resolve;
       defer.reject = reject;
@@ -753,17 +764,17 @@ let SettingsRequestManager = {
     };
     setting.wrappedJSObject = setting;
     Services.obs.notifyObservers(setting, kMozSettingsChangedObserverTopic, "");
   },
 
   broadcastMessage: function broadcastMessage(aMsgName, aContent) {
     if (VERBOSE) debug("Broadcast");
     this.children.forEach(function(msgMgr) {
-      let principal = this.mmPrincipals.get(msgMgr);
+      let principal = this.observerPrincipalCache.get(msgMgr);
       if (!principal) {
         if (DEBUG) debug("Cannot find principal for message manager to check permissions");
       }
       else if (SettingsPermissions.hasReadPermission(principal, aContent.key)) {
         try {
           msgMgr.sendAsyncMessage(aMsgName, aContent);
         } catch (e) {
           if (DEBUG) debug("Failed sending message: " + aMsgName);
@@ -772,33 +783,33 @@ let SettingsRequestManager = {
     }.bind(this));
     if (VERBOSE) debug("Finished Broadcasting");
   },
 
   addObserver: function(aMsgMgr, aPrincipal) {
     if (VERBOSE) debug("Add observer for " + aPrincipal.origin);
     if (this.children.indexOf(aMsgMgr) == -1) {
       this.children.push(aMsgMgr);
-      this.mmPrincipals.set(aMsgMgr, aPrincipal);
+      this.observerPrincipalCache.set(aMsgMgr, aPrincipal);
     }
   },
 
   removeObserver: function(aMsgMgr) {
     if (VERBOSE) {
-      let principal = this.mmPrincipals.get(aMsgMgr);
+      let principal = this.observerPrincipalCache.get(aMsgMgr);
       if (principal) {
         debug("Remove observer for " + principal.origin);
       }
     }
     let index = this.children.indexOf(aMsgMgr);
     if (index != -1) {
       this.children.splice(index, 1);
-      this.mmPrincipals.delete(aMsgMgr);
+      this.observerPrincipalCache.delete(aMsgMgr);
     }
-    if (VERBOSE) debug("Principal/MessageManager pairs left: " + this.mmPrincipals.size);
+    if (VERBOSE) debug("Principal/MessageManager pairs left in observer cache: " + this.observerPrincipalCache.size);
   },
 
   removeLock: function(aLockID) {
     if (VERBOSE) debug("Removing lock " + aLockID);
     if (this.lockInfo[aLockID]) {
     let transaction = this.lockInfo[aLockID]._transaction;
     if (transaction) {
       try {
@@ -832,20 +843,20 @@ let SettingsRequestManager = {
       if (lock.tasks[task_index]
           && lock.tasks[task_index].operation === "finalize") {
         return true;
       }
     }
     return false;
   },
 
-  enqueueForceFinalize: function(lock, principal) {
+  enqueueForceFinalize: function(lock) {
     if (!this.hasLockFinalizeTask(lock)) {
       if (VERBOSE) debug("Alive lock has pending tasks: " + lock.lockID);
-      this.queueTask("finalize", {lockID: lock.lockID}, principal).then(
+      this.queueTask("finalize", {lockID: lock.lockID}).then(
         function() {
           if (VERBOSE) debug("Alive lock " + lock.lockID + " succeeded to force-finalize");
         },
         function(error) {
           if (DEBUG) debug("Alive lock " + lock.lockID + " failed to force-finalize due to error: " + error);
         }
       );
       // Finalize is considered a task running situation, but it also needs to
@@ -855,30 +866,28 @@ let SettingsRequestManager = {
   },
 
   forceFinalizeChildLocksNonOOP: function(windowId) {
     if (VERBOSE) debug("Forcing finalize on child locks, non OOP");
 
     for (let lockId of Object.keys(this.lockInfo)) {
       let lock = this.lockInfo[lockId];
       if (lock.windowID === windowId) {
-        let principal = this.mmPrincipals.get(lock._mm);
-        this.enqueueForceFinalize(lock, principal);
+        this.enqueueForceFinalize(lock);
       }
     }
   },
 
   forceFinalizeChildLocksOOP: function(aMsgMgr) {
     if (VERBOSE) debug("Forcing finalize on child locks, OOP");
 
     for (let lockId of Object.keys(this.lockInfo)) {
       let lock = this.lockInfo[lockId];
       if (lock._mm === aMsgMgr) {
-        let principal = this.mmPrincipals.get(lock._mm);
-        this.enqueueForceFinalize(lock, principal);
+        this.enqueueForceFinalize(lock);
       }
     }
   },
 
   receiveMessage: function(aMessage) {
     if (VERBOSE) debug("receiveMessage " + aMessage.name + ": " + JSON.stringify(aMessage.data));
 
     let msg = aMessage.data;
@@ -954,70 +963,71 @@ let SettingsRequestManager = {
         if (msg.lockID in this.settingsLockQueue) {
           Cu.reportError("Trying to queue a lock with the same ID as an already queued lock. Killing app.");
           aMessage.target.assertPermission("lock-id-duplicate-kill");
           return;
         }
         this.settingsLockQueue.push(msg.lockID);
         this.lockInfo[msg.lockID] = SettingsLockInfo(this.settingsDB,
                                                      mm,
+                                                     aMessage.principal,
                                                      msg.lockID,
                                                      msg.isServiceLock,
                                                      msg.windowID);
         break;
       case "Settings:Get":
         if (VERBOSE) debug("Received getRequest from " + msg.lockID);
-        this.queueTask("get", msg, aMessage.principal).then(function(settings) {
+        this.queueTask("get", msg).then(function(settings) {
             returnMessage("Settings:Get:OK", {
               lockID: msg.lockID,
               requestID: msg.requestID,
               settings: settings
             });
           }, function(error) {
             if (DEBUG) debug("getRequest FAILED " + msg.name);
             returnMessage("Settings:Get:KO", {
               lockID: msg.lockID,
               requestID: msg.requestID,
               errorMsg: error
             });
         });
         break;
       case "Settings:Set":
         if (VERBOSE) debug("Received Set Request from " + msg.lockID);
-        this.queueTask("set", msg, aMessage.principal).then(function(settings) {
+        this.queueTask("set", msg).then(function(settings) {
           returnMessage("Settings:Set:OK", {
             lockID: msg.lockID,
             requestID: msg.requestID
           });
         }, function(error) {
           returnMessage("Settings:Set:KO", {
             lockID: msg.lockID,
             requestID: msg.requestID,
             errorMsg: error
           });
         });
         break;
       case "Settings:Clear":
         if (VERBOSE) debug("Received Clear Request from " + msg.lockID);
-        this.queueTask("clear", msg, aMessage.principal).then(function() {
+        this.queueTask("clear", msg).then(function() {
           returnMessage("Settings:Clear:OK", {
             lockID: msg.lockID,
             requestID: msg.requestID
           });
         }, function(error) {
           returnMessage("Settings:Clear:KO", {
             lockID: msg.lockID,
             requestID: msg.requestID,
             errorMsg: error
           });
         });
         break;
       case "Settings:Finalize":
         if (VERBOSE) debug("Received Finalize");
-        this.queueTask("finalize", msg, aMessage.principal).then(function() {
+        this.queueTask("finalize", msg).then(function() {
           returnMessage("Settings:Finalize:OK", {
             lockID: msg.lockID
           });
         }, function(error) {
           returnMessage("Settings:Finalize:KO", {
             lockID: msg.lockID,
             errorMsg: error
           });