Merge m-c to inbound, a=merge
authorWes Kocher <wkocher@mozilla.com>
Wed, 05 Aug 2015 16:47:52 -0700
changeset 288127 888019c4ff5b8338e9444efd8e3fa4e161d89a14
parent 288126 9c1f10517d2ae7d06f4a0242411908db36d03f85 (current diff)
parent 288043 07befc6f54e743b8be189cd2c14d74cf1bcef1c2 (diff)
child 288128 2f2b78e9f9ef741a07a619cbe91e24143a46c63e
push id5067
push userraliiev@mozilla.com
push dateMon, 21 Sep 2015 14:04:52 +0000
treeherdermozilla-beta@14221ffe5b2f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone42.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 m-c to inbound, a=merge
browser/app/profile/firefox.js
browser/base/content/tabbrowser.xml
browser/themes/shared/fxa/default-profile-image.svg
modules/libpref/init/all.js
--- a/b2g/config/aries/sources.xml
+++ b/b2g/config/aries/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="e862ab9177af664f00b4522e2350f4cb13866d73">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="6ddfd98cdafefaa1b60273d5568b8dbd13730dae"/>
--- 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="e862ab9177af664f00b4522e2350f4cb13866d73">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="6ddfd98cdafefaa1b60273d5568b8dbd13730dae"/>
--- 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="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="2d58f4b9206b50b8fda0d5036da6f0c62608db7c"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="d70e4bfdcb65e7514de0f9315b74aea1c811678d"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <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,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="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="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="6ddfd98cdafefaa1b60273d5568b8dbd13730dae"/>
   <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="e862ab9177af664f00b4522e2350f4cb13866d73">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="6ddfd98cdafefaa1b60273d5568b8dbd13730dae"/>
--- a/b2g/config/emulator-l/sources.xml
+++ b/b2g/config/emulator-l/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="07c383a786f188904311a37f6062c2cb84c9b61d">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="6ddfd98cdafefaa1b60273d5568b8dbd13730dae"/>
@@ -132,19 +132,19 @@
   <project name="platform/system/media" path="system/media" revision="70bfebc66d9c6a4c614a8c7efde90e8e7e1d8641"/>
   <project name="platform/system/netd" path="system/netd" revision="d113f0ceefa9ce29eb3c86e2d23c7417a70b4048"/>
   <project name="platform/system/security" path="system/security" revision="94e1617f6f2bc2286d005e79cffa6bf0721b06b3"/>
   <project name="platform/system/vold" path="system/vold" revision="c065e301e38ea0c241164e2a373e1ecefbeaf2ec"/>
   <project name="platform_frameworks_av" path="frameworks/av" remote="b2g" revision="e372b6a77f71c8f9fbbf6f8adbfa7bf8ef45dc60"/>
   <project name="platform_frameworks_base" path="frameworks/base" remote="b2g" revision="04e26ebdc36ca83f4ee3e9e2082b3fcf04c5b971"/>
   <project name="platform_frameworks_wilhelm" path="frameworks/wilhelm" remote="b2g" revision="0dbf5baafadf6d233c0a29e392fa3293f0121673"/>
   <project name="platform_system_core" path="system/core" remote="b2g" revision="f594bc64eacac490857748b1139ffcb34c856bbd"/>
+  <project name="platform_external_sepolicy" path="external/sepolicy" remote="b2g" revision="3f6be48a46c54dd8cacaf216ab5b145de5ffefd2"/>
   <default remote="caf" revision="refs/tags/android-5.1.0_r1" sync-j="4"/>
   <!-- Emulator specific things -->
   <project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="fe7df1bc8dd0fd71571505d7be1c31a4ad1e40fb"/>
   <project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="48132ec0b0dfe9fc29c7c3f0e799066be8999198"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="59e434cbecc02653f44cedeb2ef5cc88dc8bb61b"/>
-  <project name="platform_external_sepolicy" path="external/sepolicy" remote="b2g" revision="3f6be48a46c54dd8cacaf216ab5b145de5ffefd2"/>
   <project name="platform_external_wpa_supplicant_8" path="external/wpa_supplicant_8" remote="b2g" revision="cbda29a58abc4ea1f7f4611fe354ab67b606219d"/>
   <project name="platform/development" path="development" revision="0c51f6e0aa2ee57fcb75ec3b2ff6bf754cece63e"/>
   <project name="android-sdk" path="sdk" remote="b2g" revision="ff4190dc603f62a7caa48342aa268acf99863c5c"/>
-  <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="2210a0276fa000ef7224f26b24f00cb34a372e8d"/>
+  <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="10d289639ea62f2f6fcfb5bbf6121c484e95f767"/>
 </manifest>
--- 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="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="2d58f4b9206b50b8fda0d5036da6f0c62608db7c"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="d70e4bfdcb65e7514de0f9315b74aea1c811678d"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/flame-kk/sources.xml
+++ b/b2g/config/flame-kk/sources.xml
@@ -10,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="e862ab9177af664f00b4522e2350f4cb13866d73">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="6ddfd98cdafefaa1b60273d5568b8dbd13730dae"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
-        "git_revision": "581de383687dc441a878d2c91a0167c6ec688fef", 
+        "git_revision": "4ede0c6bf5fb0c2896d5393032b395999a154619", 
         "remote": "https://git.mozilla.org/releases/gaia.git", 
         "branch": ""
     }, 
-    "revision": "a0015e0f59bdec57f732c805238172bd49406ab5", 
+    "revision": "8c8613183a6efdbb9172b2c27ae1e60290398d45", 
     "repo_path": "integration/gaia-central"
 }
--- 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="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="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="6ddfd98cdafefaa1b60273d5568b8dbd13730dae"/>
   <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/nexus-5-l/sources.xml
+++ b/b2g/config/nexus-5-l/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="07c383a786f188904311a37f6062c2cb84c9b61d">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="581de383687dc441a878d2c91a0167c6ec688fef"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="4ede0c6bf5fb0c2896d5393032b395999a154619"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="6ddfd98cdafefaa1b60273d5568b8dbd13730dae"/>
@@ -132,22 +132,22 @@
   <project name="platform/system/media" path="system/media" revision="70bfebc66d9c6a4c614a8c7efde90e8e7e1d8641"/>
   <project name="platform/system/netd" path="system/netd" revision="d113f0ceefa9ce29eb3c86e2d23c7417a70b4048"/>
   <project name="platform/system/security" path="system/security" revision="94e1617f6f2bc2286d005e79cffa6bf0721b06b3"/>
   <project name="platform/system/vold" path="system/vold" revision="c065e301e38ea0c241164e2a373e1ecefbeaf2ec"/>
   <project name="platform_frameworks_av" path="frameworks/av" remote="b2g" revision="e372b6a77f71c8f9fbbf6f8adbfa7bf8ef45dc60"/>
   <project name="platform_frameworks_base" path="frameworks/base" remote="b2g" revision="04e26ebdc36ca83f4ee3e9e2082b3fcf04c5b971"/>
   <project name="platform_frameworks_wilhelm" path="frameworks/wilhelm" remote="b2g" revision="0dbf5baafadf6d233c0a29e392fa3293f0121673"/>
   <project name="platform_system_core" path="system/core" remote="b2g" revision="f594bc64eacac490857748b1139ffcb34c856bbd"/>
+  <project name="platform_external_sepolicy" path="external/sepolicy" remote="b2g" revision="3f6be48a46c54dd8cacaf216ab5b145de5ffefd2"/>
   <default remote="caf" revision="refs/tags/android-5.1.0_r1" sync-j="4"/>
   <!-- Nexus 5 specific things -->
   <project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="fe7df1bc8dd0fd71571505d7be1c31a4ad1e40fb"/>
   <project name="device-hammerhead" path="device/lge/hammerhead" remote="b2g" revision="e728bf3ff61dfab1b97c2416096a3b850b47cf25"/>
   <project name="device_lge_hammerhead-kernel" path="device/lge/hammerhead-kernel" remote="b2g" revision="8b3ffcfdd3d3852eca5488628f8bb2a08acbffa7"/>
-  <project name="platform_external_sepolicy" path="external/sepolicy" remote="b2g" revision="3f6be48a46c54dd8cacaf216ab5b145de5ffefd2"/>
   <project name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="5d0ae53d9588c3d70c005aec9be94af9a534de16"/>
   <project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="c15b6e266136cd0cdd9b94d0bbed1962d9dd6672"/>
   <project name="platform/hardware/broadcom/libbt" path="hardware/broadcom/libbt" revision="399fe3d3c8f38c599a56becddc456133e62a5d70"/>
   <project name="platform/hardware/broadcom/wlan" path="hardware/broadcom/wlan" revision="3f3134d5cb19d5ace48d36d0100467a545d430eb"/>
   <project name="platform/hardware/qcom/audio" path="hardware/qcom/audio" revision="810c3dd29d009822a71eba9910e429a9ad114533"/>
   <project name="hardware_qcom_display" path="hardware/qcom/display" remote="b2g" revision="d8a56d7215bd26a61e43dcde20e64826a5fec265"/>
   <project name="platform/hardware/qcom/keymaster" path="hardware/qcom/keymaster" revision="eaede9f8bc206736a889bc57817047c31e205589"/>
   <project name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="12364db20d6710f0003a4f00962c9790ad3c13e3"/>
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1704,18 +1704,16 @@ pref("shumway.swf.whitelist", "http://ww
 // The maximum amount of decoded image data we'll willingly keep around (we
 // might keep around more than this, but we'll try to get down to this value).
 // (This is intentionally on the high side; see bug 746055.)
 pref("image.mem.max_decoded_image_kb", 256000);
 
 pref("loop.enabled", true);
 pref("loop.textChat.enabled", true);
 pref("loop.server", "https://loop.services.mozilla.com/v0");
-pref("loop.seenToS", "unseen");
-pref("loop.showPartnerLogo", true);
 pref("loop.gettingStarted.seen", false);
 pref("loop.gettingStarted.url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/hello/start/");
 pref("loop.gettingStarted.resumeOnFirstJoin", false);
 pref("loop.learnMoreUrl", "https://www.firefox.com/hello/");
 pref("loop.legal.ToS_url", "https://www.mozilla.org/about/legal/terms/firefox-hello/");
 pref("loop.legal.privacy_url", "https://www.mozilla.org/privacy/firefox-hello/");
 pref("loop.do_not_disturb", false);
 pref("loop.ringtone", "chrome://browser/content/loop/shared/sounds/ringtone.ogg");
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -558,26 +558,38 @@
         ]]></body>
       </method>
 
       <!-- A web progress listener object definition for a given tab. -->
       <method name="mTabProgressListener">
         <parameter name="aTab"/>
         <parameter name="aBrowser"/>
         <parameter name="aStartsBlank"/>
+        <parameter name="aWasPreloadedBrowser"/>
         <body>
         <![CDATA[
+          let stateFlags = 0;
+          // Initialize mStateFlags to non-zero e.g. when creating a progress
+          // listener for preloaded browsers as there was no progress listener
+          // around when the content started loading. If the content didn't
+          // quite finish loading yet, mStateFlags will very soon be overridden
+          // with the correct value and end up at STATE_STOP again.
+          if (aWasPreloadedBrowser) {
+            stateFlags = Ci.nsIWebProgressListener.STATE_STOP |
+                         Ci.nsIWebProgressListener.STATE_IS_REQUEST;
+          }
+
           return ({
             mTabBrowser: this,
             mTab: aTab,
             mBrowser: aBrowser,
             mBlank: aStartsBlank,
 
             // cache flags for correct status UI update after tab switching
-            mStateFlags: 0,
+            mStateFlags: stateFlags,
             mStatus: 0,
             mMessage: "",
             mTotalProgress: 0,
 
             // count of open requests (should always be 0 or 1)
             mRequestCount: 0,
 
             destroy: function () {
@@ -1842,17 +1854,17 @@
             } else if (aURI.toLowerCase().startsWith("javascript:")) {
               // This can go away when bug 672618 or bug 55696 are fixed.
               t.label = aURI;
             }
 
             this.tabContainer.updateVisibility();
 
             // wire up a progress listener for the new browser object.
-            var tabListener = this.mTabProgressListener(t, b, uriIsAboutBlank);
+            var tabListener = this.mTabProgressListener(t, b, uriIsAboutBlank, usingPreloadedContent);
             const filter = Components.classes["@mozilla.org/appshell/component/browser-status-filter;1"]
                                      .createInstance(Components.interfaces.nsIWebProgress);
             filter.addProgressListener(tabListener, Components.interfaces.nsIWebProgress.NOTIFY_ALL);
             b.webProgress.addProgressListener(filter, Components.interfaces.nsIWebProgress.NOTIFY_ALL);
             this.mTabListeners[position] = tabListener;
             this.mTabFilters[position] = filter;
 
             b.droppedLinkHandler = handleDroppedLink;
@@ -2568,17 +2580,17 @@
 
             // Swap permanentKey properties.
             let ourPermanentKey = ourBrowser.permanentKey;
             ourBrowser.permanentKey = aOtherBrowser.permanentKey;
             aOtherBrowser.permanentKey = ourPermanentKey;
 
             // Restore the progress listener
             this.mTabListeners[index] = tabListener =
-              this.mTabProgressListener(aOurTab, ourBrowser, false);
+              this.mTabProgressListener(aOurTab, ourBrowser, false, false);
 
             const notifyAll = Ci.nsIWebProgress.NOTIFY_ALL;
             filter.addProgressListener(tabListener, notifyAll);
             ourBrowser.webProgress.addProgressListener(filter, notifyAll);
           ]]>
         </body>
       </method>
 
@@ -4047,17 +4059,17 @@
           this._autoScrollPopup = this.mCurrentBrowser._createAutoScrollPopup();
           this._autoScrollPopup.id = "autoscroller";
           this.appendChild(this._autoScrollPopup);
           this.mCurrentBrowser.setAttribute("autoscrollpopup", this._autoScrollPopup.id);
           this.mCurrentBrowser.droppedLinkHandler = handleDroppedLink;
           this.updateWindowResizers();
 
           // Hook up the event listeners to the first browser
-          var tabListener = this.mTabProgressListener(this.mCurrentTab, this.mCurrentBrowser, true);
+          var tabListener = this.mTabProgressListener(this.mCurrentTab, this.mCurrentBrowser, true, false);
           const nsIWebProgress = Components.interfaces.nsIWebProgress;
           const filter = Components.classes["@mozilla.org/appshell/component/browser-status-filter;1"]
                                    .createInstance(nsIWebProgress);
           filter.addProgressListener(tabListener, nsIWebProgress.NOTIFY_ALL);
           this.mTabListeners[0] = tabListener;
           this.mTabFilters[0] = filter;
           this.webProgress.addProgressListener(filter, nsIWebProgress.NOTIFY_ALL);
 
--- a/browser/components/loop/content/js/panel.js
+++ b/browser/components/loop/content/js/panel.js
@@ -258,80 +258,55 @@ loop.panel = (function(_, mozL10n) {
         )
       );
     }
   });
 
   var ToSView = React.createClass({displayName: "ToSView",
     mixins: [sharedMixins.WindowCloseMixin],
 
-    getInitialState: function() {
-      var getPref = navigator.mozLoop.getLoopPref.bind(navigator.mozLoop);
-
-      return {
-        seenToS: getPref("seenToS"),
-        gettingStartedSeen: getPref("gettingStarted.seen"),
-        showPartnerLogo: getPref("showPartnerLogo")
-      };
-    },
-
     handleLinkClick: function(event) {
       if (!event.target || !event.target.href) {
         return;
       }
 
       event.preventDefault();
       navigator.mozLoop.openURL(event.target.href);
       this.closeWindow();
     },
 
-    renderPartnerLogo: function() {
-      if (!this.state.showPartnerLogo) {
-        return null;
-      }
-
+    render: function() {
       var locale = mozL10n.getLanguage();
-      navigator.mozLoop.setLoopPref("showPartnerLogo", false);
+      var terms_of_use_url = navigator.mozLoop.getLoopPref("legal.ToS_url");
+      var privacy_notice_url = navigator.mozLoop.getLoopPref("legal.privacy_url");
+      var tosHTML = mozL10n.get("legal_text_and_links3", {
+        "clientShortname": mozL10n.get("clientShortname2"),
+        "terms_of_use": React.renderToStaticMarkup(
+          React.createElement("a", {href: terms_of_use_url, target: "_blank"}, 
+            mozL10n.get("legal_text_tos")
+          )
+        ),
+        "privacy_notice": React.renderToStaticMarkup(
+          React.createElement("a", {href: privacy_notice_url, target: "_blank"}, 
+            mozL10n.get("legal_text_privacy")
+          )
+        )
+      });
       return (
-        React.createElement("p", {className: "powered-by", id: "powered-by"}, 
-          mozL10n.get("powered_by_beforeLogo"), 
-          React.createElement("img", {className: locale, id: "powered-by-logo"}), 
-          mozL10n.get("powered_by_afterLogo")
-        )
+        React.createElement("div", {id: "powered-by-wrapper"}, 
+          React.createElement("p", {className: "powered-by", id: "powered-by"}, 
+            mozL10n.get("powered_by_beforeLogo"), 
+            React.createElement("img", {className: locale, id: "powered-by-logo"}), 
+            mozL10n.get("powered_by_afterLogo")
+          ), 
+          React.createElement("p", {className: "terms-service", 
+             dangerouslySetInnerHTML: {__html: tosHTML}, 
+             onClick: this.handleLinkClick})
+         )
       );
-    },
-
-    render: function() {
-      if (!this.state.gettingStartedSeen || this.state.seenToS == "unseen") {
-        var terms_of_use_url = navigator.mozLoop.getLoopPref("legal.ToS_url");
-        var privacy_notice_url = navigator.mozLoop.getLoopPref("legal.privacy_url");
-        var tosHTML = mozL10n.get("legal_text_and_links3", {
-          "clientShortname": mozL10n.get("clientShortname2"),
-          "terms_of_use": React.renderToStaticMarkup(
-            React.createElement("a", {href: terms_of_use_url, target: "_blank"}, 
-              mozL10n.get("legal_text_tos")
-            )
-          ),
-          "privacy_notice": React.renderToStaticMarkup(
-            React.createElement("a", {href: privacy_notice_url, target: "_blank"}, 
-              mozL10n.get("legal_text_privacy")
-            )
-          )
-        });
-        return (
-          React.createElement("div", {id: "powered-by-wrapper"}, 
-            this.renderPartnerLogo(), 
-            React.createElement("p", {className: "terms-service", 
-               dangerouslySetInnerHTML: {__html: tosHTML}, 
-               onClick: this.handleLinkClick})
-           )
-        );
-      } else {
-        return React.createElement("div", null);
-      }
     }
   });
 
   /**
    * Panel settings (gear) menu entry.
    */
   var SettingsDropdownEntry = React.createClass({displayName: "SettingsDropdownEntry",
     propTypes: {
@@ -964,18 +939,17 @@ loop.panel = (function(_, mozL10n) {
             buttonsHidden: hideButtons, 
             mozLoop: this.props.mozLoop, 
             ref: "tabView", 
             selectedTab: this.props.selectedTab}, 
             React.createElement(Tab, {name: "rooms"}, 
               React.createElement(RoomList, {dispatcher: this.props.dispatcher, 
                         mozLoop: this.props.mozLoop, 
                         store: this.props.roomStore, 
-                        userProfile: this.state.userProfile}), 
-              React.createElement(ToSView, null)
+                        userProfile: this.state.userProfile})
             ), 
             React.createElement(Tab, {name: "contacts"}, 
               React.createElement(ContactsList, {
                 notifications: this.props.notifications, 
                 selectTab: this.selectTab, 
                 startForm: this.startForm})
             ), 
             React.createElement(Tab, {hidden: true, name: "contacts_add"}, 
--- a/browser/components/loop/content/js/panel.jsx
+++ b/browser/components/loop/content/js/panel.jsx
@@ -258,80 +258,55 @@ loop.panel = (function(_, mozL10n) {
         </div>
       );
     }
   });
 
   var ToSView = React.createClass({
     mixins: [sharedMixins.WindowCloseMixin],
 
-    getInitialState: function() {
-      var getPref = navigator.mozLoop.getLoopPref.bind(navigator.mozLoop);
-
-      return {
-        seenToS: getPref("seenToS"),
-        gettingStartedSeen: getPref("gettingStarted.seen"),
-        showPartnerLogo: getPref("showPartnerLogo")
-      };
-    },
-
     handleLinkClick: function(event) {
       if (!event.target || !event.target.href) {
         return;
       }
 
       event.preventDefault();
       navigator.mozLoop.openURL(event.target.href);
       this.closeWindow();
     },
 
-    renderPartnerLogo: function() {
-      if (!this.state.showPartnerLogo) {
-        return null;
-      }
-
+    render: function() {
       var locale = mozL10n.getLanguage();
-      navigator.mozLoop.setLoopPref("showPartnerLogo", false);
+      var terms_of_use_url = navigator.mozLoop.getLoopPref("legal.ToS_url");
+      var privacy_notice_url = navigator.mozLoop.getLoopPref("legal.privacy_url");
+      var tosHTML = mozL10n.get("legal_text_and_links3", {
+        "clientShortname": mozL10n.get("clientShortname2"),
+        "terms_of_use": React.renderToStaticMarkup(
+          <a href={terms_of_use_url} target="_blank">
+            {mozL10n.get("legal_text_tos")}
+          </a>
+        ),
+        "privacy_notice": React.renderToStaticMarkup(
+          <a href={privacy_notice_url} target="_blank">
+            {mozL10n.get("legal_text_privacy")}
+          </a>
+        )
+      });
       return (
-        <p className="powered-by" id="powered-by">
-          {mozL10n.get("powered_by_beforeLogo")}
-          <img className={locale} id="powered-by-logo" />
-          {mozL10n.get("powered_by_afterLogo")}
-        </p>
+        <div id="powered-by-wrapper">
+          <p className="powered-by" id="powered-by">
+            {mozL10n.get("powered_by_beforeLogo")}
+            <img className={locale} id="powered-by-logo" />
+            {mozL10n.get("powered_by_afterLogo")}
+          </p>
+          <p className="terms-service"
+             dangerouslySetInnerHTML={{__html: tosHTML}}
+             onClick={this.handleLinkClick}></p>
+         </div>
       );
-    },
-
-    render: function() {
-      if (!this.state.gettingStartedSeen || this.state.seenToS == "unseen") {
-        var terms_of_use_url = navigator.mozLoop.getLoopPref("legal.ToS_url");
-        var privacy_notice_url = navigator.mozLoop.getLoopPref("legal.privacy_url");
-        var tosHTML = mozL10n.get("legal_text_and_links3", {
-          "clientShortname": mozL10n.get("clientShortname2"),
-          "terms_of_use": React.renderToStaticMarkup(
-            <a href={terms_of_use_url} target="_blank">
-              {mozL10n.get("legal_text_tos")}
-            </a>
-          ),
-          "privacy_notice": React.renderToStaticMarkup(
-            <a href={privacy_notice_url} target="_blank">
-              {mozL10n.get("legal_text_privacy")}
-            </a>
-          )
-        });
-        return (
-          <div id="powered-by-wrapper">
-            {this.renderPartnerLogo()}
-            <p className="terms-service"
-               dangerouslySetInnerHTML={{__html: tosHTML}}
-               onClick={this.handleLinkClick}></p>
-           </div>
-        );
-      } else {
-        return <div />;
-      }
     }
   });
 
   /**
    * Panel settings (gear) menu entry.
    */
   var SettingsDropdownEntry = React.createClass({
     propTypes: {
@@ -965,17 +940,16 @@ loop.panel = (function(_, mozL10n) {
             mozLoop={this.props.mozLoop}
             ref="tabView"
             selectedTab={this.props.selectedTab}>
             <Tab name="rooms">
               <RoomList dispatcher={this.props.dispatcher}
                         mozLoop={this.props.mozLoop}
                         store={this.props.roomStore}
                         userProfile={this.state.userProfile} />
-              <ToSView />
             </Tab>
             <Tab name="contacts">
               <ContactsList
                 notifications={this.props.notifications}
                 selectTab={this.selectTab}
                 startForm={this.startForm} />
             </Tab>
             <Tab hidden={true} name="contacts_add">
--- a/browser/components/loop/content/js/roomStore.js
+++ b/browser/components/loop/content/js/roomStore.js
@@ -365,26 +365,21 @@ loop.store = loop.store || {};
      */
     shareRoomUrl: function(actionData) {
       var providerOrigin = new URL(actionData.provider.origin).hostname;
       var shareTitle = "";
       var shareBody = null;
 
       switch (providerOrigin) {
         case "mail.google.com":
-          shareTitle = mozL10n.get("share_email_subject5", {
-            clientShortname2: mozL10n.get("clientShortname2")
+          shareTitle = mozL10n.get("share_email_subject6");
+          shareBody = mozL10n.get("share_email_body6", {
+            callUrl: actionData.roomUrl
           });
-          shareBody = mozL10n.get("share_email_body5", {
-            callUrl: actionData.roomUrl,
-            brandShortname: mozL10n.get("brandShortname"),
-            clientShortname2: mozL10n.get("clientShortname2"),
-            clientSuperShortname: mozL10n.get("clientSuperShortname"),
-            learnMoreUrl: this._mozLoop.getLoopPref("learnMoreUrl")
-          });
+          shareBody += mozL10n.get("share_email_footer");
           break;
         case "twitter.com":
         default:
           shareTitle = mozL10n.get("share_tweet", {
             clientShortname2: mozL10n.get("clientShortname2")
           });
           break;
       }
--- a/browser/components/loop/content/shared/js/activeRoomStore.js
+++ b/browser/components/loop/content/shared/js/activeRoomStore.js
@@ -757,19 +757,16 @@ loop.store.ActiveRoomStore = (function()
     /**
      * Handles recording when a remote peer has connected to the servers.
      */
     remotePeerConnected: function() {
       this.setStoreState({
         roomState: ROOM_STATES.HAS_PARTICIPANTS,
         used: true
       });
-
-      // We've connected with a third-party, therefore stop displaying the ToS etc.
-      this._mozLoop.setLoopPref("seenToS", "seen");
     },
 
     /**
      * Handles a remote peer disconnecting from the session. As we currently only
      * support 2 participants, we declare the room as SESSION_CONNECTED as soon as
      * one participantleaves.
      */
     remotePeerDisconnected: function() {
--- a/browser/components/loop/content/shared/js/utils.js
+++ b/browser/components/loop/content/shared/js/utils.js
@@ -393,50 +393,35 @@ var inChrome = typeof Components != "und
   function composeCallUrlEmail(callUrl, recipient, contextDescription, from) {
     var mozLoop = navigator.mozLoop;
     if (typeof mozLoop === "undefined") {
       console.warn("composeCallUrlEmail isn't available for Loop standalone.");
       return;
     }
 
     var subject, body;
-    var brandShortname = mozL10n.get("brandShortname");
-    var clientShortname2 = mozL10n.get("clientShortname2");
-    var clientSuperShortname = mozL10n.get("clientSuperShortname");
-    var learnMoreUrl = mozLoop.getLoopPref("learnMoreUrl");
+    var footer = mozL10n.get("share_email_footer");
 
     if (contextDescription) {
-      subject = mozL10n.get("share_email_subject_context", {
-        clientShortname2: clientShortname2,
-        title: contextDescription
-      });
-      body = mozL10n.get("share_email_body_context", {
+      subject = mozL10n.get("share_email_subject6");
+      body = mozL10n.get("share_email_body_context2", {
         callUrl: callUrl,
-        brandShortname: brandShortname,
-        clientShortname2: clientShortname2,
-        clientSuperShortname: clientSuperShortname,
-        learnMoreUrl: learnMoreUrl,
         title: contextDescription
       });
     } else {
-      subject = mozL10n.get("share_email_subject5", {
-        clientShortname2: clientShortname2
-      });
-      body = mozL10n.get("share_email_body5", {
-        callUrl: callUrl,
-        brandShortname: brandShortname,
-        clientShortname2: clientShortname2,
-        clientSuperShortname: clientSuperShortname,
-        learnMoreUrl: learnMoreUrl
+      subject = mozL10n.get("share_email_subject6");
+      body = mozL10n.get("share_email_body6", {
+        callUrl: callUrl
       });
     }
-
+    var bodyFooter =  body + footer;
+    bodyFooter = bodyFooter.replace(/\r\n/g, "\n").replace(/\n/g, "\r\n");
     mozLoop.composeEmail(
       subject,
-      body.replace(/\r\n/g, "\n").replace(/\n/g, "\r\n"),
+      bodyFooter,
       recipient
     );
 
     var bucket = mozLoop.SHARING_ROOM_URL["EMAIL_FROM_" + (from || "").toUpperCase()];
     if (typeof bucket === "undefined") {
       console.error("No URL sharing type bucket found for '" + from + "'");
       return;
     }
--- a/browser/components/loop/modules/LoopCalls.jsm
+++ b/browser/components/loop/modules/LoopCalls.jsm
@@ -205,21 +205,16 @@ let LoopCallsInternal = {
    *
    * @param {String} version The version information from the server.
    */
   onNotification: function(version, channelID) {
     if (MozLoopService.doNotDisturb) {
       return;
     }
 
-    // We set this here as it is assumed that once the user receives an incoming
-    // call, they'll have had enough time to see the terms of service. See
-    // bug 1046039 for background.
-    Services.prefs.setCharPref("loop.seenToS", "seen");
-
     // Request the information on the new call(s) associated with this version.
     // The registered FxA session is checked first, then the anonymous session.
     // Make the call to get the GUEST session regardless of whether the FXA
     // request fails.
 
     if (channelID == MozLoopService.channelIDs.callsFxA && MozLoopService.userProfile) {
       this._getCalls(LOOP_SESSION_TYPE.FXA, version);
     }
--- a/browser/components/loop/standalone/content/js/standaloneMozLoop.js
+++ b/browser/components/loop/standalone/content/js/standaloneMozLoop.js
@@ -265,20 +265,16 @@ loop.StandaloneMozLoop = (function(mozL1
      * Stores a preference in the local storage for standalone.
      * Note: Some prefs are filtered out as they are not applicable
      * to the standalone UI.
      *
      * @param {String} prefName The name of the pref
      * @param {String} value The value to set.
      */
     setLoopPref: function(prefName, value) {
-      if (prefName === "seenToS") {
-        return;
-      }
-
       localStorage.setItem(prefName, value);
     },
 
     /**
      * Gets a preference from the local storage for standalone.
      *
      * @param {String} prefName The name of the pref
      * @param {String} value The value to set.
--- a/browser/components/loop/test/desktop-local/panel_test.js
+++ b/browser/components/loop/test/desktop-local/panel_test.js
@@ -454,32 +454,36 @@ describe("loop.panel", function() {
         TestUtils.Simulate
           .click(view.getDOMNode().querySelector(".icon-help"));
 
         sinon.assert.calledOnce(fakeWindow.close);
       });
     });
 
     describe("#render", function() {
-      it("should render a ToSView", function() {
-        var view = createTestPanelView();
-
-        TestUtils.findRenderedComponentWithType(view, loop.panel.ToSView);
-      });
-
-      it("should not render a ToSView when the view has been 'seen'", function() {
+      it("should not render a ToSView when gettingStarted.seen is true", function() {
         navigator.mozLoop.getLoopPref = function() {
-          return "seen";
+          return true;
         };
         var view = createTestPanelView();
 
-        try {
+        expect(function() {
           TestUtils.findRenderedComponentWithType(view, loop.panel.ToSView);
-          sinon.assert.fail("Should not find the ToSView if it has been 'seen'");
-        } catch (ex) {}
+        }).to.Throw(/not find/);
+      });
+
+      it("should not render a ToSView when gettingStarted.seen is false", function() {
+        navigator.mozLoop.getLoopPref = function() {
+          return false;
+        };
+        var view = createTestPanelView();
+
+        expect(function() {
+          TestUtils.findRenderedComponentWithType(view, loop.panel.ToSView);
+        }).to.not.Throw();
       });
 
       it("should render a GettingStarted view", function() {
         navigator.mozLoop.getLoopPref = function(pref) {
           return false;
         };
         var view = createTestPanelView();
 
@@ -984,80 +988,16 @@ describe("loop.panel", function() {
       // Simulate being visible.
       view.onDocumentVisible();
 
       var contextPreview = view.getDOMNode().querySelector(".context-preview");
       expect(contextPreview.src).eql(favicon);
     });
   });
 
-  describe("loop.panel.ToSView", function() {
-
-    it("should render when the value of loop.seenToS is not set", function() {
-      navigator.mozLoop.getLoopPref = function(key) {
-        return {
-          "gettingStarted.seen": true,
-          "seenToS": "unseen"
-        }[key];
-      };
-
-      var view = TestUtils.renderIntoDocument(
-        React.createElement(loop.panel.ToSView));
-
-      TestUtils.findRenderedDOMComponentWithClass(view, "terms-service");
-    });
-
-    it("should not render when the value of loop.seenToS is set to 'seen'", function() {
-        navigator.mozLoop.getLoopPref = function(key) {
-          return {
-            "gettingStarted.seen": true,
-            "seenToS": "seen"
-          }[key];
-        };
-
-        var view = TestUtils.renderIntoDocument(
-          React.createElement(loop.panel.ToSView));
-
-        expect(function() {
-          TestUtils.findRenderedDOMComponentWithClass(view, "terms-service");
-        }).to.Throw(/not find/);
-    });
-
-    it("should render when the value of loop.gettingStarted.seen is false",
-       function() {
-         navigator.mozLoop.getLoopPref = function(key) {
-           return {
-             "gettingStarted.seen": false,
-             "seenToS": "seen"
-           }[key];
-         };
-         var view = TestUtils.renderIntoDocument(
-           React.createElement(loop.panel.ToSView));
-
-         TestUtils.findRenderedDOMComponentWithClass(view, "terms-service");
-       });
-
-    it("should render the telefonica logo after the first time use",
-       function() {
-         navigator.mozLoop.getLoopPref = function(key) {
-           return {
-             "gettingStarted.seen": false,
-             "seenToS": "unseen",
-             "showPartnerLogo": false
-           }[key];
-         };
-
-         var view = TestUtils.renderIntoDocument(
-           React.createElement(loop.panel.ToSView));
-
-         expect(view.getDOMNode().querySelector(".powered-by")).eql(null);
-       });
-
-  });
-
   describe("loop.panel.SignInRequestView", function() {
     var view;
 
     function mountTestComponent() {
       return TestUtils.renderIntoDocument(
         React.createElement(loop.panel.SignInRequestView, {
           mozLoop: fakeMozLoop
         }));
--- a/browser/components/loop/test/desktop-local/roomStore_test.js
+++ b/browser/components/loop/test/desktop-local/roomStore_test.js
@@ -576,17 +576,17 @@ describe("loop.store.RoomStore", functio
           roomUrl: roomUrl,
           provider: {
             origin: origin
           }
         }));
 
         sinon.assert.calledOnce(fakeMozLoop.socialShareRoom);
         sinon.assert.calledWithExactly(fakeMozLoop.socialShareRoom, origin,
-          roomUrl, "share_email_subject5", "share_email_body5");
+          roomUrl, "share_email_subject6", "share_email_body6" + "share_email_footer");
       });
 
       it("should pass the correct data for all other Social Providers", function() {
         var roomUrl = "http://invalid2";
         var origin = "https://twitter.com/share";
         store.shareRoomUrl(new sharedActions.ShareRoomUrl({
           roomUrl: roomUrl,
           provider: {
--- a/browser/components/loop/test/shared/activeRoomStore_test.js
+++ b/browser/components/loop/test/shared/activeRoomStore_test.js
@@ -1267,24 +1267,16 @@ describe("loop.store.ActiveRoomStore", f
   });
 
   describe("#remotePeerConnected", function() {
     it("should set the state to `HAS_PARTICIPANTS`", function() {
       store.remotePeerConnected();
 
       expect(store.getStoreState().roomState).eql(ROOM_STATES.HAS_PARTICIPANTS);
     });
-
-    it("should set the pref for ToS to `seen`", function() {
-      store.remotePeerConnected();
-
-      sinon.assert.calledOnce(fakeMozLoop.setLoopPref);
-      sinon.assert.calledWithExactly(fakeMozLoop.setLoopPref,
-        "seenToS", "seen");
-    });
   });
 
   describe("#remotePeerDisconnected", function() {
     it("should set the state to `SESSION_CONNECTED`", function() {
       store.remotePeerDisconnected();
 
       expect(store.getStoreState().roomState).eql(ROOM_STATES.SESSION_CONNECTED);
     });
--- a/browser/components/loop/test/shared/utils_test.js
+++ b/browser/components/loop/test/shared/utils_test.js
@@ -350,24 +350,24 @@ describe("loop.shared.utils", function()
 
   describe("#composeCallUrlEmail", function() {
     var composeEmail, telemetryAddValue;
 
     beforeEach(function() {
       // fake mozL10n
       sandbox.stub(navigator.mozL10n, "get", function(id) {
         switch(id) {
-          case "share_email_subject5":
+          case "share_email_subject6":
             return "subject";
-          case "share_email_body5":
+          case "share_email_body6":
             return "body";
-          case "share_email_subject_context":
-            return "subject_context";
-          case "share_email_body_context":
+          case "share_email_body_context2":
             return "body_context";
+          case "share_email_footer":
+            return "footer";
         }
       });
       composeEmail = sandbox.spy();
       telemetryAddValue = sandbox.spy();
       navigator.mozLoop = {
         SHARING_ROOM_URL: {
           EMAIL_FROM_CALLFAILED: 2,
           EMAIL_FROM_CONVERSATION: 3
@@ -380,24 +380,24 @@ describe("loop.shared.utils", function()
       sandbox.stub(window.console, "error");
     });
 
     it("should compose a call url email", function() {
       sharedUtils.composeCallUrlEmail("http://invalid", "fake@invalid.tld");
 
       sinon.assert.calledOnce(composeEmail);
       sinon.assert.calledWith(composeEmail,
-                              "subject", "body", "fake@invalid.tld");
+                              "subject", "body" + "footer", "fake@invalid.tld");
     });
 
     it("should compose a different email when context info is provided", function() {
       sharedUtils.composeCallUrlEmail("http://invalid", null, "Hello, is me you're looking for?");
 
       sinon.assert.calledOnce(composeEmail);
-      sinon.assert.calledWith(composeEmail, "subject_context", "body_context");
+      sinon.assert.calledWith(composeEmail, "subject", "body_context" + "footer");
     });
 
     it("should record a telemetry event when an email is composed", function() {
       sharedUtils.composeCallUrlEmail("http://invalid", null,
         "Hello, is me you're looking for?", "callfailed");
 
       sinon.assert.calledOnce(telemetryAddValue, "LOOP_SHARING_ROOM_URL",  2);
     });
--- a/browser/components/loop/test/standalone/standaloneMozLoop_test.js
+++ b/browser/components/loop/test/standalone/standaloneMozLoop_test.js
@@ -50,22 +50,16 @@ describe("loop.StandaloneMozLoop", funct
       localStorage.removeItem("fakePref");
     });
 
     it("should store the value of the preference", function() {
       mozLoop.setLoopPref("fakePref", "fakeValue");
 
       expect(localStorage.getItem("fakePref")).eql("fakeValue");
     });
-
-    it("should not store the value of seenToS", function() {
-      mozLoop.setLoopPref("seenToS", "fakeValue1");
-
-      expect(localStorage.getItem("seenToS")).eql(null);
-    });
   });
 
   describe("#getLoopPref", function() {
     afterEach(function() {
       localStorage.removeItem("fakePref");
     });
 
     it("should return the value of the preference", function() {
--- a/browser/components/loop/test/xpcshell/test_loopservice_notification.js
+++ b/browser/components/loop/test/xpcshell/test_loopservice_notification.js
@@ -5,34 +5,29 @@
 "use strict";
 
 XPCOMUtils.defineLazyModuleGetter(this, "Chat",
                                   "resource:///modules/Chat.jsm");
 
 let openChatOrig = Chat.open;
 
 add_test(function test_openChatWindow_on_notification() {
-  Services.prefs.setCharPref("loop.seenToS", "unseen");
-
   mockPushHandler.registrationPushURL = kEndPointUrl;
 
   MozLoopService.promiseRegisteredWithServers(LOOP_SESSION_TYPE.FXA).then(() => {
     let opened = false;
     Chat.open = function() {
       opened = true;
     };
 
     mockPushHandler.notify(1, MozLoopService.channelIDs.callsFxA);
 
     waitForCondition(() => opened).then(() => {
       do_check_true(opened, "should open a chat window");
 
-      do_check_eq(Services.prefs.getCharPref("loop.seenToS"), "seen",
-                  "should set the pref to 'seen'");
-
       run_next_test();
     }, () => {
       do_throw("should have opened a chat window");
     });
 
   });
 });
 
@@ -51,15 +46,12 @@ function run_test() {
     response.write(JSON.stringify({calls: [{callId: 4444333221, websocketToken: "0deadbeef0"}]}));
     response.processAsync();
     response.finish();
   });
 
   do_register_cleanup(function() {
     // Revert original Chat.open implementation
     Chat.open = openChatOrig;
-
-    // clear test pref
-    Services.prefs.clearUserPref("loop.seenToS");
   });
 
   run_next_test();
 }
--- a/browser/components/preferences/in-content/sync.js
+++ b/browser/components/preferences/in-content/sync.js
@@ -235,42 +235,38 @@ let gSyncPane = {
     setEventListener("loginErrorResetPass", "click", function () {
       gSyncPane.resetPass();
       return false;
     });
     setEventListener("loginErrorStartOver", "click", function () {
       gSyncPane.startOver(true);
       return false;
     });
-    setEventListener("noFxaSignUp", "click", function () {
+    setEventListener("noFxaSignUp", "command", function () {
       gSyncPane.signUp();
       return false;
     });
-    setEventListener("noFxaSignIn", "click", function () {
+    setEventListener("noFxaSignIn", "command", function () {
       gSyncPane.signIn();
       return false;
     });
-    setEventListener("noFxaUseOldSync", "click", function () {
-      gSyncPane.openOldSyncSupportPage();
-      return false;
-    });
     setEventListener("verifiedManage", "command",
       gSyncPane.manageFirefoxAccount);
     setEventListener("fxaUnlinkButton", "click", function () {
       gSyncPane.unlinkFirefoxAccount(true);
     });
     setEventListener("verifyFxaAccount", "command",
       gSyncPane.verifyFirefoxAccount);
-    setEventListener("unverifiedUnlinkFxaAccount", "click", function () {
+    setEventListener("unverifiedUnlinkFxaAccount", "command", function () {
       /* no warning as account can't have previously synced */
       gSyncPane.unlinkFirefoxAccount(false);
     });
     setEventListener("rejectReSignIn", "command",
       gSyncPane.reSignIn);
-    setEventListener("rejectUnlinkFxaAccount", "click", function () {
+    setEventListener("rejectUnlinkFxaAccount", "command", function () {
       gSyncPane.unlinkFirefoxAccount(true);
     });
     setEventListener("tosPP-small-ToS", "click", gSyncPane.openToS);
     setEventListener("tosPP-small-PP", "click", gSyncPane.openPrivacyPolicy);
     setEventListener("sync-migrate-upgrade", "click", function () {
       let win = Services.wm.getMostRecentWindow("navigator:browser");
       fxaMigrator.createFxAccount(win);
     });
--- a/browser/components/preferences/in-content/sync.xul
+++ b/browser/components/preferences/in-content/sync.xul
@@ -195,148 +195,181 @@
       </label>
     </hbox>
     <label id="loginErrorStartOver" class="text-link">
       &unlinkDevice.label;
     </label>
   </vbox>
 
   <!-- These panels are for the Firefox Accounts identity provider -->
-  <vbox id="noFxaAccount" align="start">
-    <label>&welcome.description;</label>
-    <label id="noFxaSignUp" class="text-link">
-      &welcome.createAccount.label;
-    </label>
-    <label id="noFxaSignIn" class="text-link">
-      &welcome.signIn.label;
-    </label>
-    <separator/>
-    <label id="noFxaUseOldSync" class="text-link">
-      &welcome.useOldSync.label;
-    </label>
+  <vbox id="noFxaAccount">
+    <hbox>
+      <groupbox id="noFxaGroup">
+        <vbox>
+          <label id="noFxaCaption">&signedOut.caption;</label>
+          <description id="noFxaDescription" flex="1">&signedOut.description;</description>
+          <hbox class="fxaAccountBox">
+            <image class="fxaFirefoxLogo"/>
+            <vbox>
+              <label id="signedOutAccountBoxTitle">&signedOut.accountBox.title;</label>
+              <hbox>
+                <button id="noFxaSignUp" label="&signedOut.accountBox.create;"/>
+                <button id="noFxaSignIn" label="&signedOut.accountBox.signin;"/>
+              </hbox>
+            </vbox>
+          </hbox>
+        </vbox>
+      </groupbox>
+      <image class="fxaSyncIllustration"/>
+    </hbox>
+    <hbox class="fxaMobilePromo">
+      <label>&mobilePromo.start;</label>
+      <image class="androidLogo"/>
+      <label class="text-link"
+             href="https://www.mozilla.org/firefox/android/">
+        &mobilePromo.androidLink;
+      </label>
+      <label>&mobilePromo.end;</label>
+    </hbox>
+    <label class="androidAttribution">&androidAttribution;</label>
   </vbox>
 
   <vbox id="hasFxaAccount">
-    <groupbox id="fxaGroup">
-      <caption><label>&syncBrand.fxAccount.label;</label></caption>
+    <hbox>
+      <vbox>
+        <groupbox id="fxaGroup">
+          <caption><label>&syncBrand.fxAccount.label;</label></caption>
 
-      <deck id="fxaLoginStatus">
+              <deck id="fxaLoginStatus">
 
-        <!-- logged in and verified and all is good -->
-        <hbox id="fxaLoginVerified"
-              align="center">
-          <hbox align="center">
-            <image id="fxaProfileImage"
-              onclick="gSyncPane.openChangeProfileImage();" hidden="true"
-              tooltiptext="&profilePicture.tooltip;"/>
-            <label id="fxaEmailAddress1"/>
-            <label id="fxaDisplayName" hidden="true"/>
-          </hbox>
-          <spacer flex="1"/>
-          <button id="verifiedManage"
-                  label="&manage.label;"/>
-          <button id="fxaUnlinkButton"
-                  label="&disconnect.label;"/>
-        </hbox>
+                <!-- logged in and verified and all is good -->
+                <hbox id="fxaLoginVerified" class="fxaAccountBox">
+                  <image id="fxaProfileImage"
+                      onclick="gSyncPane.openChangeProfileImage();" hidden="true"
+                      tooltiptext="&profilePicture.tooltip;" class="actionable"/>
+                  <vbox>
+                    <label id="fxaEmailAddress1"/>
+                    <label id="fxaDisplayName" hidden="true"/>
+                    <hbox class="fxaAccountBoxButtons">
+                      <button id="verifiedManage" label="&manage.label;"/>
+                      <button id="fxaUnlinkButton" label="&disconnect.label;"/>
+                    </hbox>
+                  </vbox>
+                </hbox>
 
-        <!-- logged in to an unverified account -->
-        <hbox id="fxaLoginUnverified"
-              flex="1">
-          <description>
-            &signedInUnverified.beforename.label;
-            <label id="fxaEmailAddress2"/>
-            &signedInUnverified.aftername.label;
-          </description>
-          <spacer flex="1"/>
-          <vbox align="end">
-            <button id="verifyFxaAccount"
-                    label="&verify.label;"/>
-            <label id="unverifiedUnlinkFxaAccount" class="text-link">
-              &forget.label;
-            </label>
-          </vbox>
-        </hbox>
+                <!-- logged in to an unverified account -->
+                <hbox id="fxaLoginUnverified" class="fxaAccountBox">
+                  <image id="fxaProfileImage"/>
+                  <vbox>
+                    <hbox>
+                      <vbox><image id="fxaLoginRejectedWarning"/></vbox>
+                      <description>
+                        &signedInUnverified.beforename.label;
+                        <label id="fxaEmailAddress2"/>
+                        &signedInUnverified.aftername.label;
+                      </description>
+                    </hbox>
+                    <hbox class="fxaAccountBoxButtons">
+                      <button id="verifyFxaAccount" label="&verify.label;"/>
+                      <button id="unverifiedUnlinkFxaAccount" label="&forget.label;"/>
+                    </hbox>
+                  </vbox>
+                </hbox>
 
-        <!-- logged in locally but server rejected credentials -->
-        <hbox id="fxaLoginRejected"
-              flex="1">
-          <vbox>
-            <image id="fxaLoginRejectedWarning"/>
-          </vbox>
-          <description>
-            &signedInLoginFailure.beforename.label;
-            <label id="fxaEmailAddress3"/>
-            &signedInLoginFailure.aftername.label;
-          </description>
-          <spacer flex="1"/>
-          <vbox align="end">
-            <button id="rejectReSignIn"
-                    label="&signIn.label;"/>
-            <label id="rejectUnlinkFxaAccount" class="text-link">
-              &forget.label;
-            </label>
-          </vbox>
-        </hbox>
-      </deck>
-    </groupbox>
-
-    <groupbox id="syncOptions">
-      <caption><label>&syncBrand.shortName.label;</label></caption>
-      <hbox id="fxaSyncEngines">
-        <vbox align="start">
-          <checkbox label="&engine.tabs.label;"
-                    accesskey="&engine.tabs.accesskey;"
-                    preference="engine.tabs"/>
-          <checkbox label="&engine.bookmarks.label;"
-                    accesskey="&engine.bookmarks.accesskey;"
-                    preference="engine.bookmarks"/>
-          <checkbox label="&engine.passwords.label;"
-                    accesskey="&engine.passwords.accesskey;"
-                    preference="engine.passwords"/>
-        </vbox>
-        <vbox align="start">
-          <checkbox label="&engine.history.label;"
-                    accesskey="&engine.history.accesskey;"
-                    preference="engine.history"/>
-          <checkbox label="&engine.addons.label;"
-                    accesskey="&engine.addons.accesskey;"
-                    preference="engine.addons"/>
-          <checkbox label="&engine.prefs.label;"
-                    accesskey="&engine.prefs.accesskey;"
-                    preference="engine.prefs"/>
-        </vbox>
-        <spacer/>
-      </hbox>
-    </groupbox>
+                <!-- logged in locally but server rejected credentials -->
+                <hbox id="fxaLoginRejected" class="fxaAccountBox">
+                  <image id="fxaProfileImage"/>
+                  <vbox>
+                    <hbox>
+                      <vbox><image id="fxaLoginRejectedWarning"/></vbox>
+                      <description>
+                        &signedInLoginFailure.beforename.label;
+                        <label id="fxaEmailAddress3"/>
+                        &signedInLoginFailure.aftername.label;
+                      </description>
+                    </hbox>
+                    <hbox class="fxaAccountBoxButtons">
+                      <button id="rejectReSignIn" label="&signIn.label;"/>
+                      <button id="rejectUnlinkFxaAccount" label="&forget.label;"/>
+                    </hbox>
+                  </vbox>
+                </hbox>
+              </deck>
+        </groupbox>
+        <groupbox id="syncOptions">
+          <caption><label>&signedIn.engines.caption;</label></caption>
+          <hbox id="fxaSyncEngines">
+            <vbox align="start">
+              <checkbox label="&engine.tabs.label;"
+                        accesskey="&engine.tabs.accesskey;"
+                        preference="engine.tabs"/>
+              <checkbox label="&engine.bookmarks.label;"
+                        accesskey="&engine.bookmarks.accesskey;"
+                        preference="engine.bookmarks"/>
+              <checkbox label="&engine.passwords.label;"
+                        accesskey="&engine.passwords.accesskey;"
+                        preference="engine.passwords"/>
+            </vbox>
+            <vbox align="start">
+              <checkbox label="&engine.history.label;"
+                        accesskey="&engine.history.accesskey;"
+                        preference="engine.history"/>
+              <checkbox label="&engine.addons.label;"
+                        accesskey="&engine.addons.accesskey;"
+                        preference="engine.addons"/>
+              <checkbox label="&engine.prefs.label;"
+                        accesskey="&engine.prefs.accesskey;"
+                        preference="engine.prefs"/>
+            </vbox>
+            <spacer/>
+          </hbox>
+        </groupbox>
+      </vbox>
+      <spacer flex="1"/>
+      <image class="fxaSyncIllustration"/>
+    </hbox>
+    <spacer class="separator"/>
     <groupbox>
       <caption>
         <label accesskey="&syncDeviceName.accesskey;"
                control="fxaSyncComputerName">
           &fxaSyncDeviceName.label;
         </label>
       </caption>
       <hbox id="fxaDeviceName">
-        <hbox flex="1">
+        <hbox>
           <textbox id="fxaSyncComputerName" disabled="true" flex="1"/>
         </hbox>
+        <spacer flex="1"/>
         <hbox>
           <button id="fxaChangeDeviceName"
                   label="&changeSyncDeviceName.label;"/>
           <button id="fxaCancelChangeDeviceName"
                   label="&cancelChangeSyncDeviceName.label;"
                   hidden="true"/>
           <button id="fxaSaveChangeDeviceName"
                   label="&saveChangeSyncDeviceName.label;"
                   hidden="true"/>
         </hbox>
       </hbox>
     </groupbox>
+    <spacer class="separator"/>
+    <hbox class="fxaMobilePromo">
+      <label>&mobilePromo.start;</label>
+      <image class="androidLogo"/>
+      <label class="text-link"
+             href="https://www.mozilla.org/firefox/android/">
+        &mobilePromo.androidLink;
+      </label>
+      <label>&mobilePromo.end;</label>
+    </hbox>
     <spacer flex="1"/>
     <vbox id="tosPP-small">
       <label id="tosPP-small-ToS" class="text-link">
         &prefs.tosLink.label;
       </label>
       <label id="tosPP-small-PP" class="text-link">
         &fxaPrivacyNotice.link.label;
       </label>
     </vbox>
+    <label class="androidAttribution">&androidAttribution;</label>
   </vbox>
 </deck>
--- a/browser/locales/en-US/chrome/browser/loop/loop.properties
+++ b/browser/locales/en-US/chrome/browser/loop/loop.properties
@@ -50,28 +50,25 @@ check_internet_connection=Please check y
 login_expired=Your Login Has Expired
 service_not_available=Service Unavailable At This Time
 problem_accessing_account=There Was A Problem Accessing Your Account
 
 ## LOCALIZATION NOTE(retry_button): Displayed when there is an error to retry
 ## the appropriate action.
 retry_button=Retry
 
-share_email_subject5={{clientShortname2}} — Join the conversation
-## LOCALIZATION NOTE (share_email_subject_context): This is the alternate email
-## subject when a conversation is shared with a context attached.
-## {{clientShortName2}} will be replaced with the respective string in this file.
-## {{title}} will be replaced with the title of an HTML document.
-share_email_subject_context={{clientShortname2}} conversation: {{title}}
-## LOCALIZATION NOTE (share_email_body4): In this item, don't translate the
+share_email_subject6=Join me for a video conversation
+## LOCALIZATION NOTE (share_email_body6): In this item, don't translate the
 ## part between {{..}} and leave the \n\n part alone
-share_email_body5=Hello!\n\nJoin me for a video conversation on {{clientShortname2}}.\n\nIt's the easiest way to connect by video with anyone anywhere.  With {{clientSuperShortname}}, you don't have to download or install anything. Just click or paste this link into your {{brandShortname}}, Opera or Chrome browser to join the conversation:\n\n{{callUrl}}\n\nIf you'd like to learn more about {{clientSuperShortname}} and how you can start your own free video conversations, visit {{learnMoreUrl}}\n\nTalk to you soon!
-## LOCALIZATION NOTE (share_email_body_context): In this item, don't translate
+share_email_body6=Click the Firefox Hello link to connect to the conversation now: {{callUrl}}
+## LOCALIZATION NOTE (share_email_body_context2): In this item, don't translate
 ## the part between {{..}} and leave the \n\n part alone.
-share_email_body_context=Hello!\n\nJoin me for a video conversation on {{clientShortname2}} about:\n{{title}}.\n\nIt's the easiest way to connect by video with anyone anywhere.  With {{clientSuperShortname}}, you don't have to download or install anything. Just click or paste this link into your {{brandShortname}}, Opera or Chrome browser to join the conversation:\n\n{{callUrl}}\n\nIf you'd like to learn more about {{clientSuperShortname}} and how you can start your own free video conversations, visit {{learnMoreUrl}}\n\nTalk to you soon!
+share_email_body_context2=Join me for a video conversation. Click the Firefox Hello link to connect now: {{callUrl}}\n\nLet’s talk about this during our conversation: {{title}}
+## LOCALIZATION NOTE (share_email_footer): Common footer content for both email types
+share_email_footer=\n\n________\nJoin and create video conversations free with Firefox Hello. Connect easily over video with anyone, anywhere. No downloads or registration. Learn more at http://www.firefox.com/hello
 ## LOCALIZATION NOTE (share_tweeet): In this item, don't translate the part
 ## between {{..}}. Please keep the text below 117 characters to make sure it fits
 ## in a tweet.
 share_tweet=Join me for a video conversation on {{clientShortname2}}!
 
 share_button3=Share Link
 share_add_service_button=Add a Service
 copy_url_button2=Copy Link
--- a/browser/locales/en-US/chrome/browser/preferences/sync.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/sync.dtd
@@ -78,8 +78,22 @@ both, to better adapt this sentence to t
 <!ENTITY verify.label                "Verify Email">
 <!ENTITY forget.label                "Forget this Email">
 
 <!ENTITY welcome.description "Access your tabs, bookmarks, passwords and more wherever you use &brandShortName;.">
 <!ENTITY welcome.signIn.label "Sign In">
 <!ENTITY welcome.createAccount.label "Create Account">
 
 <!ENTITY welcome.useOldSync.label "Using an older version of Sync?">
+
+<!ENTITY signedOut.caption            "Take your Web with you">
+<!ENTITY signedOut.description        "Synchronize your bookmarks, history, tabs, passwords, add-ons, and preferences across all your devices.">
+<!ENTITY signedOut.accountBox.title   "Connect with a &syncBrand.fxAccount.label;">
+<!ENTITY signedOut.accountBox.create  "Create Account">
+<!ENTITY signedOut.accountBox.signin  "Sign In">
+
+<!ENTITY signedIn.engines.caption     "Sync between all devices">
+
+<!ENTITY mobilePromo.start            "Download Firefox for ">
+<!-- LOCALIZATION NOTE (mobilePromo.androidLink): This is a link title that links to https://www.mozilla.org/firefox/android/ -->
+<!ENTITY mobilePromo.androidLink      "Android™">
+<!ENTITY mobilePromo.end              " to sync with your mobile device.">
+<!ENTITY androidAttribution           "Android is a trademark of Google Inc.">
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -217,17 +217,24 @@ browser.jar:
   skin/classic/browser/preferences/Options-sync.png   (preferences/Options-sync.png)
 #endif
 * skin/classic/browser/preferences/preferences.css    (preferences/preferences.css)
 * skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
 * skin/classic/browser/preferences/in-content/dialog.css      (preferences/in-content/dialog.css)
   skin/classic/browser/preferences/in-content/favicon.ico     (../shared/incontentprefs/favicon.ico)
   skin/classic/browser/preferences/in-content/icons.svg       (../shared/incontentprefs/icons.svg)
   skin/classic/browser/preferences/in-content/search.css      (../shared/incontentprefs/search.css)
-  skin/classic/browser/fxa/default-profile-image.svg   (../shared/fxa/default-profile-image.svg)
+  skin/classic/browser/fxa/default-avatar.png                 (../shared/fxa/default-avatar.png)
+  skin/classic/browser/fxa/default-avatar@2x.png              (../shared/fxa/default-avatar@2x.png)
+  skin/classic/browser/fxa/logo.png                           (../shared/fxa/logo.png)
+  skin/classic/browser/fxa/logo@2x.png                        (../shared/fxa/logo@2x.png)
+  skin/classic/browser/fxa/sync-illustration.png              (../shared/fxa/sync-illustration.png)
+  skin/classic/browser/fxa/sync-illustration@2x.png           (../shared/fxa/sync-illustration@2x.png)
+  skin/classic/browser/fxa/android.png                        (../shared/fxa/android.png)
+  skin/classic/browser/fxa/android@2x.png                     (../shared/fxa/android@2x.png)
   skin/classic/browser/preferences/applications.css   (preferences/applications.css)
   skin/classic/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
   skin/classic/browser/preferences/search.css         (preferences/search.css)
   skin/classic/browser/social/services-16.png         (social/services-16.png)
   skin/classic/browser/social/services-64.png         (social/services-64.png)
   skin/classic/browser/social/share-button.png        (social/share-button.png)
   skin/classic/browser/social/share-button-active.png (social/share-button-active.png)
   skin/classic/browser/social/chat-icons.svg          (../shared/social/chat-icons.svg)
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -293,17 +293,24 @@ browser.jar:
 #endif
   skin/classic/browser/preferences/saveFile.png             (preferences/saveFile.png)
 * skin/classic/browser/preferences/preferences.css          (preferences/preferences.css)
 * skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
 * skin/classic/browser/preferences/in-content/dialog.css      (preferences/in-content/dialog.css)
   skin/classic/browser/preferences/in-content/favicon.ico     (../shared/incontentprefs/favicon.ico)
   skin/classic/browser/preferences/in-content/icons.svg       (../shared/incontentprefs/icons.svg)
   skin/classic/browser/preferences/in-content/search.css      (../shared/incontentprefs/search.css)
-  skin/classic/browser/fxa/default-profile-image.svg   (../shared/fxa/default-profile-image.svg)
+  skin/classic/browser/fxa/default-avatar.png               (../shared/fxa/default-avatar.png)
+  skin/classic/browser/fxa/default-avatar@2x.png            (../shared/fxa/default-avatar@2x.png)
+  skin/classic/browser/fxa/logo.png                         (../shared/fxa/logo.png)
+  skin/classic/browser/fxa/logo@2x.png                      (../shared/fxa/logo@2x.png)
+  skin/classic/browser/fxa/sync-illustration.png            (../shared/fxa/sync-illustration.png)
+  skin/classic/browser/fxa/sync-illustration@2x.png         (../shared/fxa/sync-illustration@2x.png)
+  skin/classic/browser/fxa/android.png                      (../shared/fxa/android.png)
+  skin/classic/browser/fxa/android@2x.png                   (../shared/fxa/android@2x.png)
   skin/classic/browser/preferences/applications.css         (preferences/applications.css)
   skin/classic/browser/preferences/aboutPermissions.css     (preferences/aboutPermissions.css)
   skin/classic/browser/preferences/search.css               (preferences/search.css)
   skin/classic/browser/preferences/checkbox.png             (preferences/checkbox.png)
   skin/classic/browser/preferences/checkbox@2x.png          (preferences/checkbox@2x.png)
   skin/classic/browser/yosemite/preferences/checkbox.png    (preferences/checkbox-yosemite.png)
   skin/classic/browser/yosemite/preferences/checkbox@2x.png (preferences/checkbox-yosemite@2x.png)
   skin/classic/browser/social/services-16.png               (social/services-16.png)
--- a/browser/themes/osx/preferences/preferences.css
+++ b/browser/themes/osx/preferences/preferences.css
@@ -233,20 +233,16 @@ html|a.inline-link:-moz-focusring {
   list-style-image: url("chrome://mozapps/skin/profile/profileicon.png");
 }
 
 #syncAddDeviceLabel {
   margin-top: 1em;
   margin-bottom: 1em;
 }
 
-#fxaUnlinkButton {
-  margin: 0;
-}
-
 #noFxaAccount {
   margin: 12px 4px;
   line-height: 1.2em;
 }
 
 #noFxaAccount > label:first-child {
   margin-bottom: 0.6em;
 }
--- a/browser/themes/shared/customizableui/panelUIOverlay.inc.css
+++ b/browser/themes/shared/customizableui/panelUIOverlay.inc.css
@@ -697,17 +697,17 @@ toolbarpaletteitem[place="palette"] > to
   align-self: center;
   margin: 0px 7px;
   padding: 0px;
   border: 0px none;
   -moz-margin-end: 0;
 }
 
 #PanelUI-footer-fxa[fxaprofileimage="enabled"] > #PanelUI-fxa-status > #PanelUI-fxa-avatar {
-  list-style-image: url(chrome://browser/skin/fxa/default-profile-image.svg);
+  list-style-image: url(chrome://browser/skin/fxa/default-avatar.png)
 }
 
 #PanelUI-customize:hover,
 #PanelUI-help:not([disabled]):hover,
 #PanelUI-quit:not([disabled]):hover {
   -moz-image-region: rect(0, 32px, 16px, 16px);
 }
 
@@ -1493,16 +1493,20 @@ menuitem[checked="true"].subviewbutton >
     background-image: url(chrome://browser/skin/customizableui/subView-arrow-back-inverted-rtl@2x.png),
                       linear-gradient(rgba(255,255,255,0.3), transparent);
   }
 
   #PanelUI-update-status {
     list-style-image: url(chrome://branding/content/icon32.png);
   }
 
+  #PanelUI-footer-fxa[fxaprofileimage="enabled"] > #PanelUI-fxa-status > #PanelUI-fxa-avatar {
+    list-style-image: url(chrome://browser/skin/fxa/default-avatar@2x.png)
+  }
+
   #PanelUI-fxa-label,
   #PanelUI-fxa-icon {
     list-style-image: url(chrome://browser/skin/sync-horizontalbar@2x.png);
   }
 
   #PanelUI-footer-fxa[syncstatus="active"] > #PanelUI-fxa-icon {
     list-style-image: url(chrome://browser/skin/syncProgress-horizontalbar@2x.png);
   }
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bb1ada87ffa878bcafe13172a865505b73070e11
GIT binary patch
literal 15286
zc%1E<e{2(F7{`wvf=q@J#3`Vh2Ln{D_oLTdd$gUiWo&5Y?1pqmWY@d5>q*-yz1!N2
zDZl<vG??N30G$az#gL$~KtLlu9VTcr7$iuDBqI=r#K06o6cg~SKek)j%_U&`=e^|a
zde8fOpU-pe`#$fz|MZR8nnlG$(~1xTDXy;a__X`O+BxIiaoTnDr8QTz+k{wEgMuIr
zmFefGYTxWW1hM}i)%#Vy_c>0GBPL#y1HhDw#1Q>(lqX}nuo9?f05nNaCwA@2!x$=w
zPHd^gOL}8&5R$6e;-Idrre0`UDcD7<+*RaAa$0~0P<b>N2}cz!>BLfTIqkP@CNMPR
zqONpe6?y~e_tv6rISx>Z$%+f4l|@;*iL$UP!_G%(lClt_nJ|+$ZRQw~V`wyUV6GzV
z>WGU$&gZGj;It<v7E;w1M-Yib!jv$Z<aiT7+3j|MqzRhFH4j{AjjDVSk1Dg$L9%f?
zKoR0nOqJv)sz37qxmk5$SP^PCGVc|M^@E~Hrth>~B$9lLpiCrDNF)mVnpkr@oJvg;
z2oMGl5LFdTM-|k?Lb56=A$bU7fAf%FEnBa5_<SRgf=WeQ*rE=vRO(w}fbaoDZjK9J
zVT<-EvkHY$rC_jdB)w(G+(A+rLZ-K*Wv&68Lwi@w9S6KB$LnP|>`KqF+H4=8Zg*-{
zq4T`FAVqcK6AmI*R45+sXs1ip;v|dHWIe@lq?w~^+9OAjh9GIroETnNl!C2=VlW(K
zHpVb`=El$}NaR(1L{W^shB%_Y1?6~zS6xzsZvsRt+T<Vxj0VsCdBwTqupHOY0xq+I
zC}bX-r`O9>M-`Qi3ZUBK(hMd^5;@jtqXIObae=W0afWB?ct9i>90VDGB+Yh<$g-)_
z2g~z9dt{+muNSQ?y|jq3poJeui!}#m)+W%nH7M{nMX@&A###e-z|2wsU=7eDW6pvM
z!SX=Q$0cp$<HH6Y{ar*22F!pq2ZAgP1V+G_fM~~g8*jtyHil;zN(_Ram_-x_lZUF3
z6m9CYx(3bv)S6TWRt>gh8^Tg*jf(Mc1?Uy%#Ihxb<q336s**Wg&{sE?kea4iii4~}
z%cT6_99b9S$%kenLLfR^c^SNh4x-3GHNnS0MU&RkBdh&F!n__Q(p~-^428nC+}S{k
ztgh~GAdIWa|2Yr?03pOjn}FydvcjxkWMh}M4z8|j#pYL|L;pnSm8|8&r-q1f5P7y-
zf4@Er!p&)ah9R|sp!91-Yi!TeHvEgWVHoW|(~_v9y6B7~$81pPU()nyUZ-vPfXiyJ
zm@N(>*PN@Um69Or_ek2Rrs#RlOh%L2P*B)l5Za8whCE?<ungO?^xluiZ2q);C(*z0
zEHq{A{sAEn0wE9rArJx~5CS0(0wE9rArJx~5CS0(0wE9rArJx~5CS0(0wE9rArJx~
z5CS0(0wE9rArJx~5CS0(0wE9rArNwxAw>g!<pfdDi6yXd*Yzvr(+Gl~LY2>pAZ=v`
zvUUT4{B>Kq|AHXRB!XONL=bKZf|SaeSA1QGAfp`Bo{IY9*<Vj}FCJ4-GOqX9rVpod
z``+uF;`g6@<*A)N?x>0Mm2{|BRo_%kZTslyuZ};uxO?}Wy}qLx&g^>p*!N}BT))`(
z`MEWhZ>?zwCf=#s^U;x-j`NXYHz(idUa%2e5`H^Wx@%_dq1U(3mA&&z!edty|9Ril
z-J5!__1hn1`qoana{i^_mwP6i?t3us@#N#NbyJs*pSe$Nw;u~q+h?D=i2pqCyHYpy
znR^x0K7Id%HnQs*`{t_U6Hm-};LMD7e_GVp?K*n+g?0CoE!!v@xG=Br;3MbIrjwz4
zuAZ9TV`EpF=e)n|#MVijJADCgvukJhzAuj4E;-&~BRck<*t-4A`@1^l{c!oMgFC?T
zy<a_cv8;1P?Y6(4?Qpz!Y0J|K4pdLz#w6!9e$e;ijZ3AUsO#Fl{q5A~rO8RJ*+<>#
cIW!Jg7OJ~;y|?SK{?FR#g*Bc}pJ`nG5A-{~cmMzZ
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..957b9071c7cba152d3418406ff0cf915d5736578
GIT binary patch
literal 736
zc%17D@N?(olHy`uVBq!ia0vp^20(1V!3HFE2UfoVQjEnx?oJHr&dIz4aySb-B8wRq
z#8g3;(KATp15j{UiEBiObAE1aYF-ILvPY1wLUKlFUUp7uo`SKFLS}kieo<<Q6|ZBk
zv!|z(f}UQLnx5XFhC?lSdWU!EftZI^=;@Uj0J*CY^z^I_%>W7(@OrpLSSc6)fw`lR
z8HlzpurLA9ZjJ^95WcGgSl-ka%y)GJD>E>5v;>PAnwuL4c`{!Cdf~CBi(^Q|oHx_$
zy$?G`v_~I2*R;T+uxP{NV!=BxZ|*40=E!@i_TpWN_{R8!3ubq_zIgCT!%yjkzJe2z
zAM3?e@4s{{jH&)VnR}1EjjGA}yMO1Ic~&o-l<3O7Hg`k5m7S?Sch1do$(ufy{$Mce
zwk$g!Q4*UL9J}WjYaZ`${RZ|Ad|@%qgLw=2_BkF-c%vv^{X}_oR)^{bws{BjELdwl
zuq1sr+4-}&_TFWN^$%Eeo@s92eD_m5^N{Rp<^Bhu1)TeI4*4e($85CR%yplov-!d0
z4VJU_9hU!meBSF1!Z+@y?>n?TUB`++dQPL0$JBq@UVkY4XCkP(ZQ85oaDjlA>DgCf
zTlJfdTQ-IT?+s;Tyjr&{?PlwNc`6rpBhn83*y!W1JpMO(kjjP2djw-I6)PH?2~2q5
zlrUxSffG>;r^+8@uWHEq^1a{i;qj?ge(uqmAHT%%W09gnh1h}y3w85Zc7p603g=cD
z7>F=_tQ1mUL?DfA4iEqPb(?X`WnevGx%mIuC?U~gZ_P87o1Fv=^n^GZ97?{YyXyFB
zhzs2P8+mb}`V{UZ@Bgi7T5X@I^K{F)==|$DGbb`|Mu>4vXh@ytz`#^oUcBw^J?%+v
tp5^@B8@^<x_ocVtE9HSH@c(~i2JuOo5BJI+X#jE=JYD@<);T3K0RVh;BIW=9
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6ed0e7a777d3a57be0cb4a2fb6edea10854ed55e
GIT binary patch
literal 1562
zc%0=^i#OB>6#j`B@`xSLNj54(sU`IAR>O?eI~<Wmge7Y+_9$u>y)13Cc_ohsVJ($v
z5eg%un8Cz6%oxUu8S^q@p60RB-?8W1?|kR`&OP6`_ndqG2nvAdX`5&R0HEg!hlZ%w
z^&7O*zc~kOJXNHT?B(wT053~*WS2oIZJq!R@dtohD*(v94FFP=mA?)EzuEx+BMtzZ
zs{vq7Ms0tvDrkphkYA{`s$q0y@&8j3a|F^FgTog{q}wvNoWm0=QRtuM2}BBAE>|d(
zN(OuL^8yixT2v?$Br0Q_#bt8&NEG%fk;3BgQ8@Anjk&ocoWd+keO;n$aIj>WDu_&D
zPA`zC8|*p4Ds_XiN@tCsuvjuxD3YLYWIAh8Ad-AU<1kB<FAJnGG*&K`)0muzIXqt|
z<_SbXv1E<GR!uZVSYd7QMPdnVg(jA6Z*X{Wg<^V<G(L-;oG0K{XtQ`SnYKZpv&Ls}
z6b5^HTeiB+6o|wkiBv3+ZVAO4-WCeGJd0nM!7g+80veM$hQ@8nWXseI;u>R1B<Avk
zI5Lf{T1FsJD3lANHPsDdshfaR6qp?nZ~@SV-*`T;%AYhvjLG)9_jq`Y>}?L?f*)z>
z4Gcq!KBK-&4_1Wl<8*nQ8#Ug}@Xfo~M&U_V%LcEZmG2E_XLb#hZ??1|<=G$GKM~nd
z7MzDsMXSaC2!jGepzq--u`>gH5di?kmfxV}8)Cr)0Cgi@s8=X_{Ld;{l%bcw$5Z(R
z<_6}W-nRMW8ch+03ZtD%tO`x7w2Ht7tlO-$!62i3#zDoPJo({4%B1Bf7ewEHSu&A?
z$jd|Y^xS`V0y%a#4eqz%YJ;veFiVcJKYGRzgDmiCw@I;Yq$d^VZc=rl9UV%p9y#i8
zBz2M+T=6qH36a(JAPeD$8o1%+_*Ax|c&T@1zjHuCW`Aw6%R7z!42PtWx1KY7={C*v
ze7l}ET47@+<1$3>@2=+_7>sUvJP_YY(SZcTdcgP4)Os~6G%x-2v?M*wT8*UD40eOe
zTK4j0wcb6`y>dJuoOi9D#rBMD)h%Qhl&*avyKf}?gV=6o>4$%*6$cizN8KTnK8;f*
zQq4P%{_~>?8d13hCw0*FCi{1%QGu&}Lz-3{nMP@0C--(47Y<b2?JgNg9f+<anPZ<c
z9ea@oo_}ct7aJG)gOgxh(z;&)4?e47?LHSHt!Q!4B95gZQPFzWfMKW4)^}T5Q+joV
zeJYFMMew)!5^;Lv?RdrB!a-62+3mhzuEA7O;zO=&Jk1&(6OXO+fN~FM6Jcr9o#O{x
z{rZHffkvo-5AKhfF8N%t@NxrnUM+OQytsCPEo{eedT7nC<AE-9%N;|ce=ff?e19eA
zhxw@(^JA^*PzNnWiwWD}Sa^pX$nkX3-RH5v^{E|dS?-eleayF%>pew&!{7<iv)S1x
zyB36a%SJjvGhJ%PsdTC-c<s8&J*Pi|U@Hx8Zi^J$sWNj;k7$8JJjxctZ0_G(x~M;w
z%Pi)_-Ybo$>@;PYMLRQtCfb|{7u#P|2TuRQjO?8cO#mglIiGzw`iWfTorxI<W|Tp4
zavq@8Q=2pQj06{BF!wI#^dN_B%8h@s?d~>&dE&_vBGK<kHFU%K(8FPadio8p2OS&Z
zF3Rm0LTq10-9~~^#_%(??>!Nop=+cJ_0X;;JLFK37~#?7)H(I4wrINkewKe(MGD3z
zFwD*^@wAEctKo-@CE)U}ixx4TYD^N|m4hr}HJ?O9;&FI<WK@k)_bsK`TupsLM`jL8
P^)-O6cL22OY+T`g$Buwf
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0bda852f5a40a65435a73596e87664e8600a46db
GIT binary patch
literal 2560
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
Sh#`r76yW0EVc%dI3i}uSWwA&A
deleted file mode 100644
--- a/browser/themes/shared/fxa/default-profile-image.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000">
-  <path fill="#c3cfd8" d="M500-0.3c276.1,0,500,223.9,500,500s-223.9,500-500,500S0,775.8,0,499.7C0,223.5,223.9-0.3,500-0.3z"/>
-  <circle fill="#fff" cx="500" cy="317" r="139.1"/>
-  <path fill="#fff" d="M751.8,643.6L751.8,643.6c0.1-2.3,0.2-4.6,0.2-6.9c0-68-55.3-127-136.2-156.3L505.9,590.4h0 c-0.4,29.8-1.4,58.8-2.8,86.6c-1,0.1-2,0.3-3.1,0.3s-2-0.2-3.1-0.3c-1.4-27.9-2.4-56.9-2.8-86.7h0L384.3,480.4 C303.3,509.7,248,568.7,248,636.7c0,2.3,0.1,4.6,0.2,6.9l7.4,49.7c57.1,72,145.4,118.2,244.4,118.2c99,0,187.3-46.2,244.4-118.2 L751.8,643.6z"/>
-</svg>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b54b392cccd03dbac9c3e96fd88d3349fc80015a
GIT binary patch
literal 17703
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%0AVsyqamiI=J`t#wukK?cS_E>Sy-#C~t5&cdOeX
zKB;kjlEv(H8J(hXlgfRG42i0O=(*9v(N46pONUOZllf@oWhlr$Z`5hTr0!=NE-U@r
z@aYc3?4=4oY^3QcZxb88pu&cn^@|?n;%~k{^!QYE`Y?i{?=|Wj`EW+JY18rLCuq0#
z$%w4dBHwX5FQ0B{7F8s8gN4`oS-aER!cNsgTLoIy9k0B*O0S4xIPdd4Ceo@;OS6IZ
z2PKYVl^LaH#Uks+=J%QHcUuuhudF+|zgFvxR`l(eXCL;BDrcjV+cCGpq;p#`+wV!f
zlYLWDsehf__tL9-?W^#?O-h#@t@SMqc_C<xogIznPrOX8Urf{AT1_6AxtXGr{rvo$
z!KD+sRPBbOSnqN`S7`0Y9hU1#X*xEiEdX1mtj51n=}_T6)2eHR_gwy*^z^ur?Syfa
zRJ*a|_InV=^?j*NXo0+$K<n_*361N5s?PLl)emN!80i-@Z5WJwlJO)W;I8zC#}SL7
zj!PLcFDPmn^-=e{?|#ZCCzr0NT=;Tfa3v+&*k4k=`~B9kitM{+C*JMKOK*>wMg|3I
jCVlv;^@)dItP`-~y2LGImlTWt%EZdt)+~RuXY~I74ya{r
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5d25f05d8791edceb048a8766c2028f094fdf414
GIT binary patch
literal 4517
zc$@*H5nAqvP)<h;3K|Lk000e1NJLTq004jh004jp1^@s6!#-il00001b5ch_0Itp)
z=>Px#32;bRa{vGqB>(^xB>_oNB=7(L0G4z`Sad^gZEa<4bO2*WQcWOZXmxIDY-MgB
zGcq7)XKrtDWn?-HK~qCXNje}dE_x;|F2aDqgf1?_x-Kp*!hpl5E-rO2E-u5WU@k5?
z!k8{DE^rM<MOZo@FfcGMH$gHsFfcGMI50RgFfcGMMnNzzFfcGMI50&xFfcGMH#IXb
zFfcGMML{+&FfcGMGeJ2xFfcGMF*i3b5=jHp000oENkl<Zc%1B=OK%)i7RLbz!ft>K
zEP^z!j|7_$gA~LLvO)v9D9mC8ScMgQgULwq9mp_?5sbtjG9MsWRqQZv5<7O{*zw!#
zN9_37ezc#dxxebFQMppxUH9Bub*nr5myQyGU5|54oqJyQ+~=O_qKhuN=%R}*y66yi
z{Ufg^`asd26kSsEPes=h4JfK8T2oY2<cCxZ|E&`K%(d`$E``_NTCcc%uP#!c1oM)j
z_Z5Ak=s${PV}i9!v*A6y3Gexm>-T>qp&0+VqAwKvocNN9rY%KR!e@EiHD5X!iow4L
z8GTjJkwc+3qN8x>_>yOJ&99DuV&?A@{X@}q351-Lw!>$B&o%$r5{hvzDEd@UPYHx+
zN<HDbyx^LzrH5kD^C7baOCUJgG#I|y^RD?^N+`yBsOVM+1eG`Ojvu<_cWI!Qaaz%j
zB@j%}^e;tky5_$#c=dJuqUSb@b4}Hd2hWy&pkDa5imsPH0A(R~@s?}36aw|47Zh!l
zfazr;cyhtDd~$<&xl@Y1D*>a+PVnfIYk66PS9kPomVmkKLh$OeYq?p0dXaY&&AVde
zuR~-0?FUo--G?*&{fRk$WP09zIJ4-F%`W=ml_mA(qu}qOGYkHMsd;~Byy6e2pY0o-
z@O$q*bg2aJ>>bzgGlF`7kGy)pq!6av7<}jtPtN&s%WHmhd)Gfce&U<r;PA*_-Q4o0
z7M24gx;`*kq!Pfpk6g=91ohy5P_&;nlWyJ{_b29-{7ohBC+6~QiNm8~e|c>)uogXc
z3sDAm_^E4oYC%2lc`wI`9bX{=SgUU5FYy-2u(-1B_m58JtpxD$ylc5;f>+OX=OTR8
z<jMJEfA8SXso>MFv9%NU7&$A!XRhVj6zT!bc{!MUOf7;xRO@lsv9(+C?@d(lQUZ8;
z&b6FVp&smvmqS_?Q@^)=U{y$%?tNuNxGr>Xc&Hr4W2^UAR~F&+gULLU0LSo*Yk8l5
zSC8{6HedAS{Rw|<Q@+L@E01tvYuBGw5dmQzp&brmGcUeJEit!-C;fXW6vVN7w7TK%
z*7n8E@I*aBWob1JXAxePBTwMfn=)G_d2p1nhENFXNbp70)YlBd2ghcuGX2KjSdc$h
zQr<t-qZzh$_X5Gkv7?lzf5f_@2+!ST4AnziZuPMLRbSrW(NXYKH~Tr9yydm3me5g@
zg~#i8FgV>xgb~PU1M7tFXBHm^@0<L0tP0n_%3xi{TNpmiW!J*LkmW%!!vMxL`k6k(
zlpPIo%Nh<tU1sYLB+8deIFUTU3e{447jg(#r=8kf@DBW(;d8htAbItYZp*43<})(q
zFe~k6$gm~9m_{HH7_U5Px}5YWOLJ#rDo6ttp$PaEiz^!^Og~{E7B5Yyw{~j&l!|Hq
zze5_@;Qq*<*iy1rZ|2BU&tH!vYw)&{f*Vl2L6(#)jKY$jP){kD67;k(yEtsz1K`!q
zEUpx45qgzL$5&X{*b1H(MP>P`?LBP?cK7xJ3l@DG_&o;qMi#|2m3Z|omX;4j5he*T
zXD67ZOn6m&5huQK<!Hem94h`?ukHlq_9=#|--U^3j#=f=YN5hU64qxjT%xc@kz&Td
z5->8o5Lh*g$I$p}5UmLBd9f(rzv*R+_aCpPJ9LpVloTZ4SK1ezMzfDr8b%6O1DC>2
zBP?AqIsjM)5=ZzAC<#h&e^QiDL?-$77^<86l;weNbQ+m<V)VO0O=k(gmuQ5fg>gZc
zeZFk|jQ=~O=QQ9D27XYO>3kyR&rf*^|E!`XSsn)Owi$5x;zbk$i>c(r`68gZL0x|G
z|9%5&J<CEP@c(*>E!Q?A6aYnE*{Gf{>y(z$fYS)iqK^h^@axdH<lblV5<Z(YGWYFI
zEj(_j000w?W4GC&c8}#mxUIs(0;+Oagei~AKH(o00cx~#!Hc++z?l@>7a7^#eB#xs
ze3>7F7cLUq&$YnQh;E|@SUnn6a1I+`I`QEQPd3h-G$FhF171Ds)7q{@M^2F_DibK7
zq|Y+9wA!$wowS4`lLX7!kY_V2R2Tb1_odUaV0i&2%C(T25dz$<o%CH=)fD0&X(YJs
zCpHy8dlQGw3z}k8wpJEO{XrNgdq0*ALCX8OE#bc>dEp`z02m}t3ZsR`YvT7y=1ww_
z`FsL(k?-3<0Z5?qwWv0_Cc;=LUx<JN_x#>e_>5%{P3G8l(6@)FB>!Gi5lBMRC!`QK
zy2wsGu15XxSCW@(7V8!XJZio;h*T?e1rjbajofggB-~fJUtv~O-1^Ey0j^12k_1NC
z!LA@zR)A&@2}p(s?srWp{5L#7dpAuV?Eo@vt`vY2w-kbC02#g^QGhRXUyPi6ZBO1r
zStKY`yHWs1y0?LnvEY7RNEG0T?u{sbv;*iib}4*F8WK**!oe%L!hg{d3~^{ysVfVJ
zPLgF>7j%E3B6|KtZFMaOS-z;F0KeD0$$-JSRuuU1TXiNEMRWv<-k~bCUhnHDz_+?L
zpb?|2ApE<Z-*zoANj9C(P%6CNw>k>&i_XQb4~%5)>Mas9hEhl=cu#+3YSc2<3^>{R
z?oIt=>=zvcn9;d-tL`5cpz}t+q+BW4<~1wG3bL0mQXb9w&tw(;tGX{Xw=6Gm*hak_
z+g*~U88Kxf-m2cHN3a=CfT-JAkn(;tivoP0`(kDC{%1<q5gZY{{~&5zlSBe2K-4uP
z*j4mF76tgT&P8eCE@CuGR=CXYwIbTy0gfDglVs_nDj03GquosN8Cur`)DQhd=c4qu
zZI#FZkYI5w=te{}F9KCdEP*a)pj`@U2?A^Pw=4?qgU&_SfiqtsA3)eiTL_VZh(O!7
zq$Ys#7d6}pl0rXbQGlyD7o7|TDU=0e?GA=0<iycvk3cifP#W#GTw2wB*Q;3+;Ev8k
z2ghcDHO&S1+Hr_j_nFOugVbybdKt(RV`}M$8cYSDV1E_`nA5o^9j`8$KUfQKq~g!Q
z&fK!Mg_+JG;)6Q~w~z@GU_OfiZ0KB+Skwg=>FQdT5;E<Tq>vRsumo&mQ2?z;UlLE&
z2Fl#`mzM(U2D65yg1^&N#!w2)`)_4Y0IiGO6P7hi@hmC;A@1n(LeNaYbtE$otSf-4
zCXjn=x&)XEux7I<a}lB<l4P%d^(7!mZx#)vhPW1{E>V?~f*J>5<Zx`qu^{5fv;=55
zffG%3y5^0dX8@Vf&6oqH3)<O99391$5WzlyOirNI;SMN3+US#_KsKx_Lm^rbA)FNC
zIg)%9bO>h(1N(Iq0PS=Mb_Yvp|Iq;x<kU%LV^K&dr46Jqp=c9|O>4QkC)z5ODG{WV
z3g)FI!<lz3!F(MAn5E$pXNojzGt0%CVGBbX146-wT5P7wh0URvQo&lqAe_KEVQg9k
zFm;P`X}tLp=Zh&_%?2|x0>5Lb0L%%Zbh~SD&xCMt$PZZ*;F8Wo`ASI1y7U7Yfgw%x
z8GL5XRxwlphGlG8oR~r=DIAge*DMO4*$`5HkTUfI*ak@#sqjra|3<)~2%o3*4k1s_
z5(bf$>{Q_7N)=!<hdhZv#WPb&*lUuDv+i~Z5I7mmA+@}b>h3X^NG_@QHv>zWLD>6R
zO9cp(U{?3yWpV_iFc{OCO03g1&Mu6@z$wkv79J{q*2a*C4%*;Qr$!(|>oq^X;iOfZ
zwQK%yW)1c_Xl)G9-Wmo`pKdpxw8Iv^`Z(Ekj8Rg9=h504roA~7f|2b4x|o7dF&U?m
z>(YSbJ_){l&NDW6Cauk(qV3^K2rqg%SOkhBt%g&wua1MCaPaazYR2Tmvox^w8*FQ*
z!kc}2c&G&010o=oyM)<#)f*oDM&*no72DQ1zptQkegiTY0h0z4msGN#2QVVN0TH1B
zXpe}2Tt@>mOcW*PG)fx_YXY*FlzmzM4Q2y~M#PAQL_ri%T!Js9sMEx-Eb)8U-Xue<
zg<V7_g791+*^sDE2}EP!T=faYf!QQumZu_6aH7ByRSh|+#wJiEdI+KuNQI}1$;QNm
z3LqL33DLk%7SK&gMvmpd*1^u46doM}#cm|q<MG-3gV#@(%8(0M;QC~J3Pyt>85O%D
zVG!fY$^^Es(@2Vgc*kHw9LXYtpJ(-xXa<iTr6OV>0uVNUAUpY}*iZ>X!=fSEp^y#m
zWj&l-)H;ucayOQPuaI@vc6v7s6pOtUtouYS(eRB)*_i=m!=gh45RHq6_}Y$3*e4Ky
zJ&lB|Fq^NM<PA{_VH^z?m|h&p$kfwpl6T(&dmZ5&79je7n7<@EXV`pPe5eGyQYDzN
z>=<=2s^NY|%znJCB0MXg*NX5%1<*b+CL-H$ai;>qLe#QWJ-KWWQYSaTW+bae#&BrV
zkW>j6YE<T>pbVfkkz^58K$!luduUXs1X{<&C5g#hU1SHf4TF==>>e8zDuC9(k!eIP
zTNkZClwr`4e%s6A;K)!3&YCCyS-Gx1&>XaU86JSuy6?|W2{IiX-H7ODadDndJD?T}
zfi&8cl<(oup#o$+KE4s*6t;8wSRNqeH*8MX@`^Y<K2(B>CJF%E=_)}0q9ftSph^0=
z5aEXkKv<}KnrNC5Jj=@g?dP}5OnyW?p6#$NgA%;u3EIYz)EAaipCyn|7Vhm!BV_P)
zp~8<T!RIz!g0+uAOQ(Zv?4)%W^khl+(C1EsA5((MHeQ5uCruBX2C{n$w4^*vk!de1
z^;#1C-<=9SRDe^8`fO=5^Zz=*FQ|oM-6LVs%|p7Es-q=d!ShqD<sU#j$Z16tTS`C&
z?9y8MZ88BYW$_`FC;%m8%E%VS*uv}6uH}9L>VeL9^;p!}`UWH0<seGd_vlC%gpRQ3
z>Eo-%8Vrnz^ZH5RK<G2B<(&%kVCNL=+f)Lkd*C=7mON)r-Khm>?)cnf)_)pKEH<XX
z+jFkv+!S8DYA9+aZ$@;)&|Fe>MTkJ*%kuHG@boj+^34SGpy%^Y0*J2(i_mHtm<up}
zh)5=fiRJL}ylc5?A+!WmmxCk`T15_)3vgddKgYi%kA$;G`)%{(C!rqvW6!c<m_{U$
z2(#$@C$~<l%~q-%OQmN7jm4p0gJZ`mK?GjFenWWov1>URLA}7cp62vX6N={PQeYv9
zAlJ@+W17jmrxl=x*ZG-<XvRRmbTtdRacvMhd)Kx6tiY@139KcHbSUlESpJO-9^@Mc
z+1TP`dpd|A!K-q``KC}W^s=JwO2FK*6RGu=UCS#ssF%CoS*Rj*Ai<MAx|UBNP%rwn
zXQ7{<gNS;*o06_8c=e`|uRX)|vNoq`$b({=Im!gD-edUh5(uMc`q?Y0hp!3#2LJ&7
z{~9z17#I$RA#2(PI$~&zL4I@?=<ptt;4ozK31|e7>}_a+7=!#2e3(|7Hii>83~3*L
z62j3z5OI{^qfoz$+<Kl8a2Rqv!TiHyo>VeG_$$=S)Y+du3gE}pfR3))cbG;qjTGWP
zP`82HNZGM0qX0hu2Cz5~ryPc~qzAGa37V`~4|R+9K!?kS1i*l217a&6E(YQahsikV
zo&@{|YDY2DPPT#e|0uu$fDt1I#P-mf3AzJm3AA{=2*gi-_}yX1+B)Pq`yEv7B2?`X
zsNNK)S%L%YuTd}xM!_f;1*2dTi~?!_00000|NjF3WV$QkM=v*N00000NkvXXu0mjf
Dm77h_
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c6de26c9f9be668b57f9a77daa18ba570c59339a
GIT binary patch
literal 18697
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
TwgoNxXGQMLUQWjxLX-Xne0%((
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bc13da3897dda1d7deca5bd25121229a5d843bc9
GIT binary patch
literal 8682
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
OcsVI$$zpM^&wl|uD;oU(
--- a/browser/themes/shared/incontentprefs/preferences.inc.css
+++ b/browser/themes/shared/incontentprefs/preferences.inc.css
@@ -218,42 +218,16 @@ treecol {
 }
 
 /* XXX This style is for bug 740213 and should be removed once that
    bug has a solution. */
 description > html|a {
   cursor: pointer;
 }
 
-#fxaProfileImage {
-  width: 60px;
-  height: 60px;
-  border-radius: 50%;
-  border-width: 5px;
-  border-color: red;
-  background-image: url(chrome://browser/skin/fxa/default-profile-image.svg);
-  background-size: contain;
-  cursor: pointer;
-  -moz-margin-end: 15px;
-}
-
-#fxaProfileImage:hover {
-  box-shadow: 0px 0px 0px 1px #0095DD;
-}
-
-#fxaProfileImage:active {
-  box-shadow: 0px 0px 0px 1px #ff9500;
-}
-
-#noFxaAccount {
-  /* Overriding the margins from the base preferences.css theme file.
-     These overrides can be simplified by fixing bug 1027174 */
-  margin: 0;
-}
-
 #weavePrefsDeck > vbox > label,
 #weavePrefsDeck > vbox > groupbox,
 #weavePrefsDeck > vbox > description,
 #weavePrefsDeck > vbox > #pairDevice > label,
 #weavePrefsDeck > #needsUpdate > hbox > #loginError,
 #weavePrefsDeck > #hasFxaAccount > vbox > label,
 #weavePrefsDeck > #hasFxaAccount > hbox:not(#tosPP-normal) > label {
   /* no margin-start for elements at the begin of a line */
@@ -392,25 +366,167 @@ description > html|a {
   from { opacity: 0; }
   to   { opacity: 1; }
 }
 
 /**
  * Sync
  */
 
+#fxaProfileImage {
+  width: 60px;
+  max-height: 60px;
+  border-radius: 50%;
+  background-image: url(chrome://browser/skin/fxa/default-avatar.png);
+  background-size: contain;
+  margin-inline-end: 15px;
+}
+
+#fxaProfileImage.actionable {
+  cursor: pointer;
+}
+
+#fxaProfileImage.actionable:hover {
+  box-shadow: 0px 0px 0px 1px #0095DD;
+}
+
+#fxaProfileImage.actionable:hover:active {
+  box-shadow: 0px 0px 0px 1px #ff9500;
+}
+
+#noFxaAccount {
+  /* Overriding the margins from the base preferences.css theme file.
+     These overrides can be simplified by fixing bug 1027174 */
+  margin: 0;
+}
+
+#noFxaGroup {
+  -moz-box-flex: 1;
+}
+
+#noFxaGroup > vbox {
+  -moz-box-align: start;
+}
+
 #fxaSyncEngines > vbox:first-child {
   margin-right: 80px;
 }
 
 #fxaSyncComputerName {
-  margin-left: 0px;
+  margin-inline-start: 0px;
+  width: 500px;
 }
 
 #tosPP-small-ToS {
-  margin-bottom: 1em;
+  margin-bottom: 14px;
+}
+
+#noFxaCaption {
+  font-weight: bold;
+  margin-bottom: 11px;
+}
+
+.fxaSyncIllustration {
+  margin-top: 35px;
+}
+
+#syncOptions caption {
+  margin-bottom: 11px;
+}
+
+#fxaDeviceName {
+  margin-bottom: 27.5px;
+}
+
+#noFxaDescription {
+  margin-bottom: 20px !important;
+}
+
+.separator {
+  border-bottom: 1px solid var(--in-content-header-border-color);
+}
+
+.fxaAccountBox {
+  border: 1px solid #D1D2D3;
+  border-radius: 5px;
+  padding: 14px 20px 14px 14px;
+}
+
+#signedOutAccountBoxTitle {
+  margin-inline-start: 6px !important;
+  font-weight: bold;
+  margin-bottom: 11px;
+}
+
+.fxaAccountBox button {
+  padding-left: 11px;
+  padding-right: 11px;
+}
+
+.fxaSyncIllustration {
+  width: 231px;
+  max-height: 200px;
+  list-style-image: url(chrome://browser/skin/fxa/sync-illustration.png)
+}
+
+.fxaFirefoxLogo {
+  list-style-image: url(chrome://browser/skin/fxa/logo.png);
+  max-width: 64px;
+  margin-inline-end: 14px;
+}
+
+#noFxaAccount .fxaMobilePromo {
+  margin-bottom: 55px;
+}
+
+#hasFxaAccount .fxaMobilePromo {
+  margin-bottom: 41px;
+  margin-top: 27.5px;
+}
+
+.fxaMobilePromo > label {
+  margin-inline-start: 0;
+}
+
+#hasFxaAccount .fxaAccountBoxButtons {
+  margin-top: 11px;
 }
 
 #fxaLoginRejectedWarning {
   list-style-image: url(chrome://browser/skin/warning.svg);
   filter: drop-shadow(0 1px 0 hsla(206, 50%, 10%, .15));
   margin: 4px 8px 0px 0px;
 }
+
+#syncOptions {
+  margin-bottom: 27.5px;
+}
+
+.androidLogo {
+  list-style-image: url(chrome://browser/skin/fxa/android.png);
+  max-width: 24px;
+  margin-top: -4px;
+  margin-inline-end: 4px;
+}
+
+#tosPP-small {
+  margin-bottom: 20px;
+}
+
+.androidAttribution {
+  font-size: 12px;
+  color: #D1D2D3;
+}
+
+@media (min-resolution: 1.1dppx) {
+  .fxaSyncIllustration {
+    list-style-image: url(chrome://browser/skin/fxa/sync-illustration@2x.png)
+  }
+  .fxaFirefoxLogo {
+    list-style-image: url(chrome://browser/skin/fxa/logo@2x.png);
+  }
+  .androidLogo {
+    list-style-image: url(chrome://browser/skin/fxa/android@2x.png);
+  }
+  #fxaProfileImage {
+    background-image: url(chrome://browser/skin/fxa/default-avatar@2x.png);
+  }
+}
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -302,17 +302,24 @@ browser.jar:
         skin/classic/browser/preferences/saveFile.png                (preferences/saveFile.png)
         skin/classic/browser/preferences/saveFile-XP.png             (preferences/saveFile-XP.png)
 *       skin/classic/browser/preferences/preferences.css             (preferences/preferences.css)
 *       skin/classic/browser/preferences/in-content/preferences.css  (preferences/in-content/preferences.css)
 *       skin/classic/browser/preferences/in-content/dialog.css       (preferences/in-content/dialog.css)
         skin/classic/browser/preferences/in-content/favicon.ico      (../shared/incontentprefs/favicon.ico)
         skin/classic/browser/preferences/in-content/icons.svg        (../shared/incontentprefs/icons.svg)
         skin/classic/browser/preferences/in-content/search.css       (../shared/incontentprefs/search.css)
-        skin/classic/browser/fxa/default-profile-image.svg   (../shared/fxa/default-profile-image.svg)
+        skin/classic/browser/fxa/default-avatar.png                  (../shared/fxa/default-avatar.png)
+        skin/classic/browser/fxa/default-avatar@2x.png               (../shared/fxa/default-avatar@2x.png)
+        skin/classic/browser/fxa/logo.png                            (../shared/fxa/logo.png)
+        skin/classic/browser/fxa/logo@2x.png                         (../shared/fxa/logo@2x.png)
+        skin/classic/browser/fxa/sync-illustration.png               (../shared/fxa/sync-illustration.png)
+        skin/classic/browser/fxa/sync-illustration@2x.png            (../shared/fxa/sync-illustration@2x.png)
+        skin/classic/browser/fxa/android.png                         (../shared/fxa/android.png)
+        skin/classic/browser/fxa/android@2x.png                      (../shared/fxa/android@2x.png)
         skin/classic/browser/preferences/applications.css            (preferences/applications.css)
         skin/classic/browser/preferences/aboutPermissions.css        (preferences/aboutPermissions.css)
         skin/classic/browser/preferences/search.css                  (preferences/search.css)
         skin/classic/browser/preferences/checkbox.png                (preferences/checkbox.png)
         skin/classic/browser/preferences/checkbox-aero.png           (preferences/checkbox-aero.png)
         skin/classic/browser/preferences/checkbox-classic.png        (preferences/checkbox-classic.png)
         skin/classic/browser/preferences/checkbox-xp.png             (preferences/checkbox-xp.png)
         skin/classic/browser/social/services-16.png                  (social/services-16.png)
--- a/docshell/base/timeline/AutoGlobalTimelineMarker.cpp
+++ b/docshell/base/timeline/AutoGlobalTimelineMarker.cpp
@@ -17,21 +17,21 @@ AutoGlobalTimelineMarker::AutoGlobalTime
 {
   MOZ_GUARD_OBJECT_NOTIFIER_INIT;
   MOZ_ASSERT(NS_IsMainThread());
 
   if (TimelineConsumers::IsEmpty()) {
     return;
   }
 
-  TimelineConsumers::AddMarkerToAllObservedDocShells(mName, TRACING_INTERVAL_START);
+  TimelineConsumers::AddMarkerForAllObservedDocShells(mName, TRACING_INTERVAL_START);
 }
 
 AutoGlobalTimelineMarker::~AutoGlobalTimelineMarker()
 {
   if (TimelineConsumers::IsEmpty()) {
     return;
   }
 
-  TimelineConsumers::AddMarkerToAllObservedDocShells(mName, TRACING_INTERVAL_END);
+  TimelineConsumers::AddMarkerForAllObservedDocShells(mName, TRACING_INTERVAL_END);
 }
 
 } // namespace mozilla
--- a/docshell/base/timeline/TimelineConsumers.cpp
+++ b/docshell/base/timeline/TimelineConsumers.cpp
@@ -79,32 +79,32 @@ TimelineConsumers::AddMarkerForDocShell(
                                         const char* aName, TracingMetadata aMetaData)
 {
   if (aDocShell->IsObserved()) {
     aDocShell->mObserved->AddMarker(aName, aMetaData);
   }
 }
 
 void
-TimelineConsumers::AddMarkerToDocShellsList(Vector<nsRefPtr<nsDocShell>>& aDocShells,
-                                            const char* aName, TracingMetadata aMetaData)
+TimelineConsumers::AddMarkerForDocShellsList(Vector<nsRefPtr<nsDocShell>>& aDocShells,
+                                             const char* aName, TracingMetadata aMetaData)
 {
   for (Vector<nsRefPtr<nsDocShell>>::Range range = aDocShells.all();
        !range.empty();
        range.popFront()) {
     AddMarkerForDocShell(range.front(), aName, aMetaData);
   }
 }
 
 void
-TimelineConsumers::AddMarkerToAllObservedDocShells(const char* aName, TracingMetadata aMetaData)
+TimelineConsumers::AddMarkerForAllObservedDocShells(const char* aName, TracingMetadata aMetaData)
 {
   Vector<nsRefPtr<nsDocShell>> docShells;
   if (!GetKnownDocShells(docShells)) {
     // If we don't successfully populate our vector with *all* docshells being
     // observed, don't add the marker to *any* of them.
     return;
   }
 
-  AddMarkerToDocShellsList(docShells, aName, aMetaData);
+  AddMarkerForDocShellsList(docShells, aName, aMetaData);
 }
 
 } // namespace mozilla
--- a/docshell/base/timeline/TimelineConsumers.h
+++ b/docshell/base/timeline/TimelineConsumers.h
@@ -32,16 +32,16 @@ public:
 
   // Methods for adding markers to appropriate docshells. These will only add
   // markers if the docshell is currently being observed by a timeline.
   // See nsIDocShell::recordProfileTimelineMarkers
   static void AddMarkerForDocShell(nsDocShell* aDocShell,
                                    UniquePtr<TimelineMarker>&& aMarker);
   static void AddMarkerForDocShell(nsDocShell* aDocShell,
                                    const char* aName, TracingMetadata aMetaData);
-  static void AddMarkerToDocShellsList(Vector<nsRefPtr<nsDocShell>>& aDocShells,
-                                       const char* aName, TracingMetadata aMetaData);
-  static void AddMarkerToAllObservedDocShells(const char* aName, TracingMetadata aMetaData);
+  static void AddMarkerForDocShellsList(Vector<nsRefPtr<nsDocShell>>& aDocShells,
+                                        const char* aName, TracingMetadata aMetaData);
+  static void AddMarkerForAllObservedDocShells(const char* aName, TracingMetadata aMetaData);
 };
 
 } // namespace mozilla
 
 #endif /* mozilla_TimelineConsumers_h_ */
--- a/dom/bluetooth/BluetoothCommon.h
+++ b/dom/bluetooth/BluetoothCommon.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothcommon_h
-#define mozilla_dom_bluetooth_bluetoothcommon_h
+#ifndef mozilla_dom_bluetooth_BluetoothCommon_h
+#define mozilla_dom_bluetooth_BluetoothCommon_h
 
 #include "mozilla/Compiler.h"
 #include "mozilla/Observer.h"
 #include "nsPrintfCString.h"
 #include "nsString.h"
 #include "nsTArray.h"
 
 extern bool gBluetoothDebugFlag;
@@ -805,9 +805,9 @@ enum BluetoothGapDataType {
   GAP_INCOMPLETE_UUID128 = 0X06, // Incomplete List of 128-bit Service Class UUIDs
   GAP_COMPLETE_UUID128   = 0X07, // Complete List of 128-bit Service Class UUIDs
   GAP_SHORTENED_NAME     = 0X08, // Shortened Local Name
   GAP_COMPLETE_NAME      = 0X09, // Complete Local Name
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_bluetoothcommon_h__
+#endif // mozilla_dom_bluetooth_BluetoothCommon_h
--- a/dom/bluetooth/BluetoothHidManager.h
+++ b/dom/bluetooth/BluetoothHidManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothhidmanager_h__
-#define mozilla_dom_bluetooth_bluetoothhidmanager_h__
+#ifndef mozilla_dom_bluetooth_BluetoothHidManager_h
+#define mozilla_dom_bluetooth_BluetoothHidManager_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothProfileController.h"
 #include "BluetoothProfileManagerBase.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothHidManager : public BluetoothProfileManagerBase
@@ -41,9 +41,9 @@ private:
   // data member
   bool mConnected;
   nsString mDeviceAddress;
   nsRefPtr<BluetoothProfileController> mController;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif //#ifndef mozilla_dom_bluetooth_bluetoothhidmanager_h__
+#endif // mozilla_dom_bluetooth_BluetoothHidManager_h
--- a/dom/bluetooth/BluetoothInterface.h
+++ b/dom/bluetooth/BluetoothInterface.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothinterface_h__
-#define mozilla_dom_bluetooth_bluetoothinterface_h__
+#ifndef mozilla_dom_bluetooth_BluetoothInterface_h
+#define mozilla_dom_bluetooth_BluetoothInterface_h
 
 #include "BluetoothCommon.h"
 #include "mozilla/dom/bluetooth/BluetoothTypes.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 //
 // Socket Interface
@@ -1249,9 +1249,9 @@ public:
 
 protected:
   BluetoothInterface();
   virtual ~BluetoothInterface();
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothInterface_h
--- a/dom/bluetooth/BluetoothProfileManagerBase.h
+++ b/dom/bluetooth/BluetoothProfileManagerBase.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothprofilemanagerbase_h__
-#define mozilla_dom_bluetooth_bluetoothprofilemanagerbase_h__
+#ifndef mozilla_dom_bluetooth_BluetoothProfileManagerBase_h
+#define mozilla_dom_bluetooth_BluetoothProfileManagerBase_h
 
 /**
  * Error Messages used in Bluetooth profiles
  *
  * These error messages would be sent to Gaia as an argument of onError event.
  */
 #define ERR_ALREADY_CONNECTED           "AlreadyConnectedError"
 #define ERR_ALREADY_DISCONNECTED        "AlreadyDisconnectedError"
@@ -103,9 +103,9 @@ public:                                 
                        BluetoothProfileController* aController) override;    \
   virtual void Disconnect(BluetoothProfileController* aController) override; \
   virtual void OnConnect(const nsAString& aErrorStr) override;               \
   virtual void OnDisconnect(const nsAString& AErrorStr) override;            \
   virtual void Reset() override;
 
 END_BLUETOOTH_NAMESPACE
 
-#endif  //#ifndef mozilla_dom_bluetooth_bluetoothprofilemanagerbase_h__
+#endif  // mozilla_dom_bluetooth_BluetoothProfileManagerBase_h
--- a/dom/bluetooth/BluetoothRilListener.h
+++ b/dom/bluetooth/BluetoothRilListener.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothrillistener_h__
-#define mozilla_dom_bluetooth_bluetoothrillistener_h__
+#ifndef mozilla_dom_bluetooth_BluetoothRilListener_h
+#define mozilla_dom_bluetooth_BluetoothRilListener_h
 
 #include "BluetoothCommon.h"
 
 #include "nsAutoPtr.h"
 
 #include "nsIIccService.h"
 #include "nsIMobileConnectionService.h"
 #include "nsITelephonyCallInfo.h"
@@ -132,9 +132,9 @@ private:
   nsTArray<nsRefPtr<MobileConnectionListener> > mMobileConnListeners;
 
   nsRefPtr<IccListener> mIccListener;
   nsRefPtr<TelephonyListener> mTelephonyListener;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothRilListener_h
--- a/dom/bluetooth/BluetoothSocketObserver.h
+++ b/dom/bluetooth/BluetoothSocketObserver.h
@@ -47,9 +47,9 @@ public:                                 
   virtual void ReceiveSocketData(BluetoothSocket* aSocket,                  \
     nsAutoPtr<mozilla::ipc::UnixSocketBuffer>& aMessage) override;          \
   virtual void OnSocketConnectSuccess(BluetoothSocket* aSocket) override;   \
   virtual void OnSocketConnectError(BluetoothSocket* aSocket) override;     \
   virtual void OnSocketDisconnect(BluetoothSocket* aSocket) override;
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothSocketObserver_h
--- a/dom/bluetooth/BluetoothUtils.h
+++ b/dom/bluetooth/BluetoothUtils.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothutils_h
-#define mozilla_dom_bluetooth_bluetoothutils_h
+#ifndef mozilla_dom_bluetooth_BluetoothUtils_h
+#define mozilla_dom_bluetooth_BluetoothUtils_h
 
 #include "BluetoothCommon.h"
 #include "js/TypeDecls.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothNamedValue;
 class BluetoothReplyRunnable;
@@ -154,9 +154,9 @@ DispatchReplyError(BluetoothReplyRunnabl
 
 void
 DispatchStatusChangedEvent(const nsAString& aType,
                            const nsAString& aDeviceAddress,
                            bool aStatus);
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothUtils_h
--- a/dom/bluetooth/BluetoothUuid.h
+++ b/dom/bluetooth/BluetoothUuid.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothuuid_h__
-#define mozilla_dom_bluetooth_bluetoothuuid_h__
+#ifndef mozilla_dom_bluetooth_BluetoothUuid_h
+#define mozilla_dom_bluetooth_BluetoothUuid_h
 
 #include "BluetoothCommon.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothProfileManagerBase;
 
 /*
@@ -77,9 +77,9 @@ enum BluetoothReservedChannels {
   CHANNEL_SIM_ACCESS     = 15,
   CHANNEL_PBAP_PSE       = 19,
   CHANNEL_FTP            = 20,
   CHANNEL_OPUSH_L2CAP    = 5255
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothUuid_h
--- a/dom/bluetooth/ObexBase.h
+++ b/dom/bluetooth/ObexBase.h
@@ -1,16 +1,16 @@
 /* -*- 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_obexbase_h__
-#define mozilla_dom_bluetooth_obexbase_h__
+#ifndef mozilla_dom_bluetooth_ObexBase_h
+#define mozilla_dom_bluetooth_ObexBase_h
 
 #include "BluetoothCommon.h"
 #include "nsAutoPtr.h"
 #include "nsTArray.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 const char FINAL_BIT = 0x80;
@@ -332,9 +332,9 @@ void SetObexPacketInfo(uint8_t* aRetBuf,
  * @return true when the message was parsed without any error, false otherwise.
  */
 bool ParseHeaders(const uint8_t* aHeaderStart,
                   int aTotalLength,
                   ObexHeaderSet* aRetHanderSet);
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_ObexBase_h
--- a/dom/bluetooth/bluedroid/BluetoothA2dpManager.h
+++ b/dom/bluetooth/bluedroid/BluetoothA2dpManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetootha2dpmanager_h__
-#define mozilla_dom_bluetooth_bluetootha2dpmanager_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothA2dpManager_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothA2dpManager_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothInterface.h"
 #include "BluetoothProfileController.h"
 #include "BluetoothProfileManagerBase.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 class BluetoothA2dpManager : public BluetoothProfileManagerBase
--- a/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.h
+++ b/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothdaemona2dpinterface_h
-#define mozilla_dom_bluetooth_bluetoothdaemona2dpinterface_h
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothDaemonA2dpInterface_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothDaemonA2dpInterface_h
 
 #include "BluetoothDaemonHelpers.h"
 #include "BluetoothInterface.h"
 #include "mozilla/ipc/DaemonRunnables.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 using mozilla::ipc::DaemonSocketPDU;
@@ -157,9 +157,9 @@ private:
                      BluetoothStatus aStatus);
   void DispatchError(BluetoothA2dpResultHandler* aRes, nsresult aRv);
 
   BluetoothDaemonA2dpModule* mModule;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothDaemonA2dpInterface_h
--- a/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.h
+++ b/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothdaemonavrcpinterface_h
-#define mozilla_dom_bluetooth_bluetoothdaemonavrcpinterface_h
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothDaemonAvrcpInterface_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothDaemonAvrcpInterface_h
 
 #include "BluetoothDaemonHelpers.h"
 #include "BluetoothInterface.h"
 #include "mozilla/ipc/DaemonRunnables.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 using mozilla::ipc::DaemonSocketPDU;
@@ -356,9 +356,9 @@ private:
                      BluetoothStatus aStatus);
   void DispatchError(BluetoothAvrcpResultHandler* aRes, nsresult aRv);
 
   BluetoothDaemonAvrcpModule* mModule;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothDaemonAvrcpInterface_h
--- a/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.h
+++ b/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothdaemongattinterface_h
-#define mozilla_dom_bluetooth_bluetoothdaemongattinterface_h
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothDaemonGattInterface_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothDaemonGattInterface_h
 
 #include "BluetoothDaemonHelpers.h"
 #include "BluetoothInterface.h"
 #include "mozilla/ipc/DaemonRunnables.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 using mozilla::ipc::DaemonSocketPDU;
@@ -1030,9 +1030,9 @@ private:
   void DispatchError(BluetoothGattServerResultHandler* aRes,
                      BluetoothStatus aStatus);
   void DispatchError(BluetoothGattServerResultHandler* aRes, nsresult aRv);
   BluetoothDaemonGattModule* mModule;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothDaemonGattInterface_h
--- a/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.h
+++ b/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothdaemonhandsfreeinterface_h
-#define mozilla_dom_bluetooth_bluetoothdaemonhandsfreeinterface_h
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothDaemonHandsfreeInterface_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothDaemonHandsfreeInterface_h
 
 #include "BluetoothDaemonHelpers.h"
 #include "BluetoothInterface.h"
 #include "mozilla/ipc/DaemonRunnables.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 using mozilla::ipc::DaemonSocketPDU;
@@ -466,9 +466,9 @@ private:
                      BluetoothStatus aStatus);
   void DispatchError(BluetoothHandsfreeResultHandler* aRes, nsresult aRv);
 
   BluetoothDaemonHandsfreeModule* mModule;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothDaemonHandsfreeInterface_h
--- a/dom/bluetooth/bluedroid/BluetoothDaemonHelpers.h
+++ b/dom/bluetooth/bluedroid/BluetoothDaemonHelpers.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluedroid_bluetoothdaemonhelpers_h__
-#define mozilla_dom_bluetooth_bluedroid_bluetoothdaemonhelpers_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothDaemonHelpers_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothDaemonHelpers_h
 
 #include "BluetoothCommon.h"
 #include "mozilla/ArrayUtils.h"
 #include "mozilla/dom/bluetooth/BluetoothTypes.h"
 #include "mozilla/ipc/DaemonSocketPDU.h"
 #include "mozilla/ipc/DaemonSocketPDUHelpers.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
@@ -1186,9 +1186,9 @@ public:
     }
     WarnAboutTrailingData();
     return NS_OK;
   }
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothDaemonHelpers_h
--- a/dom/bluetooth/bluedroid/BluetoothDaemonInterface.h
+++ b/dom/bluetooth/bluedroid/BluetoothDaemonInterface.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluedroid_bluetoothdaemoninterface_h__
-#define mozilla_dom_bluetooth_bluedroid_bluetoothdaemoninterface_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothDaemonInterface_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothDaemonInterface_h
 
 #include "BluetoothInterface.h"
 #include "mozilla/ipc/DaemonSocketConsumer.h"
 #include "mozilla/ipc/ListenSocketConsumer.h"
 
 namespace mozilla {
 namespace ipc {
 
@@ -162,9 +162,9 @@ private:
   nsAutoPtr<BluetoothDaemonHandsfreeInterface> mHandsfreeInterface;
   nsAutoPtr<BluetoothDaemonA2dpInterface> mA2dpInterface;
   nsAutoPtr<BluetoothDaemonAvrcpInterface> mAvrcpInterface;
   nsAutoPtr<BluetoothDaemonGattInterface> mGattInterface;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothDaemonInterface_h
--- a/dom/bluetooth/bluedroid/BluetoothDaemonSetupInterface.h
+++ b/dom/bluetooth/bluedroid/BluetoothDaemonSetupInterface.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluedroid_bluetoothdaemonsetupinterface_h__
-#define mozilla_dom_bluetooth_bluedroid_bluetoothdaemonsetupinterface_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothDaemonSetupInterface_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothDaemonSetupInterface_h
 
 #include "BluetoothCommon.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothSetupResultHandler
 {
 public:
@@ -22,9 +22,9 @@ public:
   virtual void Configuration();
 
 protected:
   virtual ~BluetoothSetupResultHandler();
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothDaemonSetupInterface_h
--- a/dom/bluetooth/bluedroid/BluetoothDaemonSocketInterface.h
+++ b/dom/bluetooth/bluedroid/BluetoothDaemonSocketInterface.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluedroid_bluetoothdaemonsocketinterface_h__
-#define mozilla_dom_bluetooth_bluedroid_bluetoothdaemonsocketinterface_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothDaemonSocketInterface_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothDaemonSocketInterface_h
 
 #include "BluetoothDaemonHelpers.h"
 #include "BluetoothInterface.h"
 #include "mozilla/ipc/DaemonRunnables.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 using mozilla::ipc::DaemonSocketPDU;
@@ -117,9 +117,9 @@ private:
                      BluetoothStatus aStatus);
   void DispatchError(BluetoothSocketResultHandler* aRes, nsresult aRv);
 
   BluetoothDaemonSocketModule* mModule;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothDaemonSocketInterface_h
--- a/dom/bluetooth/bluedroid/BluetoothGattManager.h
+++ b/dom/bluetooth/bluedroid/BluetoothGattManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothgattmanager_h__
-#define mozilla_dom_bluetooth_bluetoothgattmanager_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothGattManager_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothGattManager_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothInterface.h"
 #include "BluetoothProfileManagerBase.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothGattClient;
@@ -200,9 +200,9 @@ private:
   void ProceedDiscoverProcess(BluetoothGattClient* aClient,
                               const BluetoothGattServiceId& aServiceId);
 
   static bool mInShutdown;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothGattManager_h
--- a/dom/bluetooth/bluedroid/BluetoothOppManager.h
+++ b/dom/bluetooth/bluedroid/BluetoothOppManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothoppmanager_h__
-#define mozilla_dom_bluetooth_bluetoothoppmanager_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothOppManager_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothOppManager_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothProfileManagerBase.h"
 #include "BluetoothSocketObserver.h"
 #include "DeviceStorage.h"
 #include "mozilla/ipc/SocketBase.h"
 #include "nsCOMArray.h"
 
@@ -214,9 +214,9 @@ private:
   // Server sockets. Once an inbound connection is established, it will hand
   // over the ownership to mSocket, and get a new server socket while Listen()
   // is called.
   nsRefPtr<BluetoothSocket> mServerSocket;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothOppManager_h
--- a/dom/bluetooth/bluedroid/BluetoothPbapManager.h
+++ b/dom/bluetooth/bluedroid/BluetoothPbapManager.h
@@ -1,16 +1,16 @@
 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
 /* vim: set ts=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_bluetoothpbapmanager_h__
-#define mozilla_dom_bluetooth_bluetoothpbapmanager_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothPbapManager_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothPbapManager_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothProfileManagerBase.h"
 #include "BluetoothSocketObserver.h"
 #include "mozilla/ipc/SocketBase.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
@@ -94,9 +94,9 @@ private:
   // Server socket. Once an inbound connection is established, it will hand
   // over the ownership to mSocket, and get a new server socket while Listen()
   // is called.
   nsRefPtr<BluetoothSocket> mServerSocket;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothPbapManager_h
--- a/dom/bluetooth/bluedroid/BluetoothServiceBluedroid.h
+++ b/dom/bluetooth/bluedroid/BluetoothServiceBluedroid.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothservicebluedroid_h__
-#define mozilla_dom_bluetooth_bluetoothservicebluedroid_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothServiceBluedroid_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothServiceBluedroid_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothInterface.h"
 #include "BluetoothService.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothServiceBluedroid : public BluetoothService
@@ -390,9 +390,9 @@ protected:
   uint16_t UuidToServiceClassInt(const BluetoothUuid& mUuid);
 
   static bool IsConnected(const nsAString& aRemoteBdAddr);
 #endif
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothServiceBluedroid_h
--- a/dom/bluetooth/bluedroid/BluetoothSocket.h
+++ b/dom/bluetooth/bluedroid/BluetoothSocket.h
@@ -1,16 +1,16 @@
 /* -*- 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_BluetoothSocket_h
-#define mozilla_dom_bluetooth_BluetoothSocket_h
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothSocket_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothSocket_h
 
 #include "BluetoothCommon.h"
 #include "mozilla/ipc/DataSocket.h"
 
 class MessageLoop;
 
 BEGIN_BLUETOOTH_NAMESPACE
 
@@ -93,9 +93,9 @@ private:
   BluetoothSocketObserver* mObserver;
   BluetoothSocketResultHandler* mCurrentRes;
   DroidSocketImpl* mImpl;
   nsString mDeviceAddress;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothSocket_h
--- a/dom/bluetooth/bluedroid/BluetoothSocketMessageWatcher.h
+++ b/dom/bluetooth/bluedroid/BluetoothSocketMessageWatcher.h
@@ -1,14 +1,17 @@
 /* -*- 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_bluedroid_BluetoothSocketMessageWatcher_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothSocketMessageWatcher_h
+
 #include "base/message_loop.h"
 #include "BluetoothCommon.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothSocketResultHandler;
 
 /* |SocketMessageWatcher| receives Bluedroid's socket setup
@@ -102,8 +105,10 @@ public:
 
   void Run() override;
 
 private:
   BluetoothSocketResultHandler* mRes;
 };
 
 END_BLUETOOTH_NAMESPACE
+
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothSocketMessageWatcher_h
--- a/dom/bluetooth/bluedroid/hfp-fallback/BluetoothHfpManager.h
+++ b/dom/bluetooth/bluedroid/hfp-fallback/BluetoothHfpManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothhfpmanager_h__
-#define mozilla_dom_bluetooth_bluetoothhfpmanager_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothHfpManager_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothHfpManager_h
 
 #include "BluetoothHfpManagerBase.h"
 
 /**
  * Fallback BluetoothHfpManager is built for non-phone devices (e.g., tablets).
  * These devices has no radio interface and the build flag MOZ_B2G_RIL is
  * disabled. To prevent build breaks of accessing radio interface, we implement
  * fallback BluetoothHfpManager with empty functions to keep original
@@ -43,9 +43,9 @@ protected:
 private:
   BluetoothHfpManager() { }
   bool Init();
   void HandleShutdown();
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothHfpManager_h
--- a/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.h
+++ b/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothhfpmanager_h__
-#define mozilla_dom_bluetooth_bluetoothhfpmanager_h__
+#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothHfpManager_h
+#define mozilla_dom_bluetooth_bluedroid_BluetoothHfpManager_h
 
 #include "BluetoothInterface.h"
 #include "BluetoothCommon.h"
 #include "BluetoothHfpManagerBase.h"
 #include "BluetoothRilListener.h"
 #include "BluetoothSocketObserver.h"
 #include "mozilla/ipc/SocketBase.h"
 #include "mozilla/Hal.h"
@@ -223,9 +223,9 @@ private:
   nsRefPtr<BluetoothProfileController> mController;
 
   // CDMA-specific variable
   Call mCdmaSecondCall;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluedroid_BluetoothHfpManager_h
--- a/dom/bluetooth/bluetooth2/BluetoothAdapter.h
+++ b/dom/bluetooth/bluetooth2/BluetoothAdapter.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothadapter_h__
-#define mozilla_dom_bluetooth_bluetoothadapter_h__
+#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/BluetoothAdapter2Binding.h"
 #include "mozilla/dom/BluetoothDeviceEvent.h"
 #include "mozilla/dom/Promise.h"
 #include "nsCOMPtr.h"
@@ -412,9 +412,9 @@ private:
    *      this new discovery starts.
    *   3) adapter unpaired with a device: The unpaired device will be removed.
    */
   nsTArray<nsRefPtr<BluetoothDevice> > mDevices;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothAdapter_h
--- a/dom/bluetooth/bluetooth2/BluetoothClassOfDevice.h
+++ b/dom/bluetooth/bluetooth2/BluetoothClassOfDevice.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothclassofdevice_h
-#define mozilla_dom_bluetooth_bluetoothclassofdevice_h
+#ifndef mozilla_dom_bluetooth_BluetoothClassOfDevice_h
+#define mozilla_dom_bluetooth_BluetoothClassOfDevice_h
 
 #include "BluetoothCommon.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/ErrorResult.h"
 #include "nsCycleCollectionParticipant.h"
 #include "nsPIDOMWindow.h"
 #include "nsWrapperCache.h"
 
@@ -85,9 +85,9 @@ private:
   uint8_t mMajorDeviceClass;
   uint8_t mMinorDeviceClass;
 
   nsCOMPtr<nsPIDOMWindow> mOwnerWindow;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_bluetoothclassofdevice_h
+#endif // mozilla_dom_bluetooth_BluetoothClassOfDevice_h
--- a/dom/bluetooth/bluetooth2/BluetoothDevice.h
+++ b/dom/bluetooth/bluetooth2/BluetoothDevice.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothdevice_h__
-#define mozilla_dom_bluetooth_bluetoothdevice_h__
+#ifndef mozilla_dom_bluetooth_BluetoothDevice_h
+#define mozilla_dom_bluetooth_BluetoothDevice_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/DOMEventTargetHelper.h"
 #include "mozilla/dom/BluetoothDevice2Binding.h"
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 #include "nsString.h"
 #include "nsCOMPtr.h"
 
@@ -239,9 +239,9 @@ public:
   {
     nsString deviceAddress;
     aDevice->GetAddress(deviceAddress);
 
     return deviceAddress.Equals(aAddress);
   }
 };
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothDevice_h
--- a/dom/bluetooth/bluetooth2/BluetoothDiscoveryHandle.h
+++ b/dom/bluetooth/bluetooth2/BluetoothDiscoveryHandle.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothdiscoveryhandle_h
-#define mozilla_dom_bluetooth_bluetoothdiscoveryhandle_h
+#ifndef mozilla_dom_bluetooth_BluetoothDiscoveryHandle_h
+#define mozilla_dom_bluetooth_BluetoothDiscoveryHandle_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/DOMEventTargetHelper.h"
 #include "mozilla/dom/bluetooth/BluetoothAdapter.h"
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 #include "mozilla/dom/bluetooth/BluetoothTypes.h"
 #include "nsISupportsImpl.h"
 
@@ -71,9 +71,9 @@ private:
    * This array is only used by LE scan. If BluetoothDiscoveryHandle is built
    * for classic discovery, the array should be empty.
    */
   nsTArray<nsString> mServiceUuids;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_bluetoothdiscoveryhandle_h
+#endif // mozilla_dom_bluetooth_BluetoothDiscoveryHandle_h
--- a/dom/bluetooth/bluetooth2/BluetoothGatt.h
+++ b/dom/bluetooth/bluetooth2/BluetoothGatt.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothgatt_h__
-#define mozilla_dom_bluetooth_bluetoothgatt_h__
+#ifndef mozilla_dom_bluetooth_BluetoothGatt_h
+#define mozilla_dom_bluetooth_BluetoothGatt_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/DOMEventTargetHelper.h"
 #include "mozilla/dom/BluetoothGattBinding.h"
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 #include "mozilla/dom/bluetooth/BluetoothGattService.h"
 #include "nsCOMPtr.h"
 
@@ -186,9 +186,9 @@ private:
   /**
    * Indicate whether there is ongoing discoverServices request or not.
    */
   bool mDiscoveringServices;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothGatt_h
--- a/dom/bluetooth/bluetooth2/BluetoothGattCharacteristic.h
+++ b/dom/bluetooth/bluetooth2/BluetoothGattCharacteristic.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothgattcharacteristic_h__
-#define mozilla_dom_bluetooth_bluetoothgattcharacteristic_h__
+#ifndef mozilla_dom_bluetooth_BluetoothGattCharacteristic_h
+#define mozilla_dom_bluetooth_BluetoothGattCharacteristic_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/dom/BluetoothGattCharacteristicBinding.h"
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 #include "mozilla/dom/bluetooth/BluetoothGattDescriptor.h"
 #include "mozilla/dom/TypedArray.h"
 #include "nsCOMPtr.h"
 #include "nsWrapperCache.h"
@@ -180,9 +180,9 @@ public:
   bool Equals(
     const nsRefPtr<mozilla::dom::bluetooth::BluetoothGattCharacteristic>& aChar,
     const mozilla::dom::bluetooth::BluetoothGattId& aCharId) const
   {
     return aChar->GetCharacteristicId() == aCharId;
   }
 };
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothGattCharacteristic_h
--- a/dom/bluetooth/bluetooth2/BluetoothGattDescriptor.h
+++ b/dom/bluetooth/bluetooth2/BluetoothGattDescriptor.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothgattdescriptor_h__
-#define mozilla_dom_bluetooth_bluetoothgattdescriptor_h__
+#ifndef mozilla_dom_bluetooth_BluetoothGattDescriptor_h
+#define mozilla_dom_bluetooth_BluetoothGattDescriptor_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/dom/BluetoothGattDescriptorBinding.h"
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 #include "mozilla/dom/Promise.h"
 #include "mozilla/dom/TypedArray.h"
 #include "nsCOMPtr.h"
 #include "nsWrapperCache.h"
@@ -103,9 +103,9 @@ private:
   /**
    * Value of this GATT descriptor.
    */
   nsTArray<uint8_t> mValue;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothGattDescriptor_h
--- a/dom/bluetooth/bluetooth2/BluetoothGattServer.h
+++ b/dom/bluetooth/bluetooth2/BluetoothGattServer.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothgattserver_h__
-#define mozilla_dom_bluetooth_bluetoothgattserver_h__
+#ifndef mozilla_dom_bluetooth_BluetoothGattServer_h
+#define mozilla_dom_bluetooth_BluetoothGattServer_h
 
 #include "mozilla/dom/BluetoothGattServerBinding.h"
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 #include "nsCOMPtr.h"
 #include "nsPIDOMWindow.h"
 #include "nsWrapperCache.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
@@ -61,9 +61,9 @@ private:
    ***************************************************************************/
   nsCOMPtr<nsPIDOMWindow> mOwner;
 
   bool mValid;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothGattServer_h
--- a/dom/bluetooth/bluetooth2/BluetoothGattService.h
+++ b/dom/bluetooth/bluetooth2/BluetoothGattService.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothgattservice_h__
-#define mozilla_dom_bluetooth_bluetoothgattservice_h__
+#ifndef mozilla_dom_bluetooth_BluetoothGattService_h
+#define mozilla_dom_bluetooth_BluetoothGattService_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/dom/BluetoothGattServiceBinding.h"
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 #include "mozilla/dom/bluetooth/BluetoothGattCharacteristic.h"
 #include "nsCOMPtr.h"
 #include "nsWrapperCache.h"
 #include "nsPIDOMWindow.h"
@@ -174,9 +174,9 @@ public:
   bool Equals(
     const nsRefPtr<mozilla::dom::bluetooth::BluetoothGattService>& aService,
     const mozilla::dom::bluetooth::BluetoothGattServiceId& aServiceId) const
   {
     return aService->GetServiceId() == aServiceId;
   }
 };
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothGattService_h
--- a/dom/bluetooth/bluetooth2/BluetoothLeDeviceEvent.h
+++ b/dom/bluetooth/bluetooth2/BluetoothLeDeviceEvent.h
@@ -1,16 +1,16 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
 /* 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_bluetoothledeviceevent_h
-#define mozilla_dom_bluetooth_bluetoothledeviceevent_h
+#ifndef mozilla_dom_bluetooth_BluetoothLeDeviceEvent_h
+#define mozilla_dom_bluetooth_BluetoothLeDeviceEvent_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/ErrorResult.h"
 #include "mozilla/dom/BluetoothLeDeviceEventBinding.h"
 #include "mozilla/dom/Event.h"
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
@@ -56,9 +56,9 @@ public:
                      ErrorResult& aRv);
 
   private:
     nsTArray<uint8_t> mRawScanRecord;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_bluetoothledeviceevent_h
+#endif // mozilla_dom_bluetooth_BluetoothLeDeviceEvent_h
--- a/dom/bluetooth/bluetooth2/BluetoothManager.h
+++ b/dom/bluetooth/bluetooth2/BluetoothManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothmanager_h__
-#define mozilla_dom_bluetooth_bluetoothmanager_h__
+#ifndef mozilla_dom_bluetooth_BluetoothManager_h
+#define mozilla_dom_bluetooth_BluetoothManager_h
 
 #include "BluetoothCommon.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/dom/BluetoothAdapterEvent.h"
 #include "mozilla/dom/BluetoothAttributeEvent.h"
 #include "mozilla/DOMEventTargetHelper.h"
 #include "mozilla/Observer.h"
 #include "nsISupportsImpl.h"
@@ -135,9 +135,9 @@ private:
   /**
    * The adapters array.
    */
   nsTArray<nsRefPtr<BluetoothAdapter> > mAdapters;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothManager_h
--- a/dom/bluetooth/bluetooth2/BluetoothPairingHandle.h
+++ b/dom/bluetooth/bluetooth2/BluetoothPairingHandle.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothpairinghandle_h
-#define mozilla_dom_bluetooth_bluetoothpairinghandle_h
+#ifndef mozilla_dom_bluetooth_BluetoothPairingHandle_h
+#define mozilla_dom_bluetooth_BluetoothPairingHandle_h
 
 #include "BluetoothCommon.h"
 #include "nsWrapperCache.h"
 
 namespace mozilla {
 class ErrorResult;
 namespace dom {
 class Promise;
@@ -74,9 +74,9 @@ private:
   nsCOMPtr<nsPIDOMWindow> mOwner;
   nsString mDeviceAddress;
   nsString mType;
   nsString mPasskey;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_bluetoothpairinghandle_h
+#endif // mozilla_dom_bluetooth_BluetoothPairingHandle_h
--- a/dom/bluetooth/bluetooth2/BluetoothPairingListener.h
+++ b/dom/bluetooth/bluetooth2/BluetoothPairingListener.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothpairinglistener_h
-#define mozilla_dom_bluetooth_bluetoothpairinglistener_h
+#ifndef mozilla_dom_bluetooth_BluetoothPairingListener_h
+#define mozilla_dom_bluetooth_BluetoothPairingListener_h
 
 #include "BluetoothCommon.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/DOMEventTargetHelper.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothSignal;
@@ -63,9 +63,9 @@ private:
    * Indicate whether or not this pairing listener has started listening to
    * Bluetooth signal.
    */
   bool mHasListenedToSignal;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_bluetoothpairinglistener_h
+#endif // mozilla_dom_bluetooth_BluetoothPairingListener_h
--- a/dom/bluetooth/bluetooth2/BluetoothProfileController.h
+++ b/dom/bluetooth/bluetooth2/BluetoothProfileController.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothprofilecontroller_h__
-#define mozilla_dom_bluetooth_bluetoothprofilecontroller_h__
+#ifndef mozilla_dom_bluetooth_BluetoothProfileController_h
+#define mozilla_dom_bluetooth_BluetoothProfileController_h
 
 #include "BluetoothUuid.h"
 #include "nsISupportsImpl.h"
 #include "nsAutoPtr.h"
 #include "nsITimer.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
@@ -152,9 +152,9 @@ private:
     BluetoothServiceClass service;
   } mTarget;
 
   nsCOMPtr<nsITimer> mTimer;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothProfileController_h
--- a/dom/bluetooth/bluetooth2/BluetoothReplyRunnable.h
+++ b/dom/bluetooth/bluetooth2/BluetoothReplyRunnable.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothreplyrunnable_h__
-#define mozilla_dom_bluetooth_bluetoothreplyrunnable_h__
+#ifndef mozilla_dom_bluetooth_BluetoothReplyRunnable_h
+#define mozilla_dom_bluetooth_BluetoothReplyRunnable_h
 
 #include "mozilla/Attributes.h"
 #include "BluetoothCommon.h"
 #include "nsThreadUtils.h"
 #include "js/Value.h"
 
 class nsIDOMDOMRequest;
 
@@ -85,9 +85,9 @@ protected:
   {
     aValue.setUndefined();
     return true;
   }
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothReplyRunnable_h
--- a/dom/bluetooth/bluetooth2/BluetoothService.h
+++ b/dom/bluetooth/bluetooth2/BluetoothService.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetootheventservice_h__
-#define mozilla_dom_bluetooth_bluetootheventservice_h__
+#ifndef mozilla_dom_bluetooth_BluetoothService_h
+#define mozilla_dom_bluetooth_BluetoothService_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothInterface.h"
 #include "BluetoothProfileManagerBase.h"
 #include "nsAutoPtr.h"
 #include "nsClassHashtable.h"
 #include "nsIObserver.h"
 #include "nsTObserverArray.h"
@@ -559,9 +559,9 @@ protected:
 
   nsTArray<BluetoothSignal> mPendingPairReqSignals;
 
   bool mEnabled;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_BluetoothService_h
--- a/dom/bluetooth/bluetooth2/ipc/BluetoothChild.h
+++ b/dom/bluetooth/bluetooth2/ipc/BluetoothChild.h
@@ -1,16 +1,16 @@
 /* -*- 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_ipc_bluetoothchild_h__
-#define mozilla_dom_bluetooth_ipc_bluetoothchild_h__
+#ifndef mozilla_dom_bluetooth_ipc_BluetoothChild_h
+#define mozilla_dom_bluetooth_ipc_BluetoothChild_h
 
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 
 #include "mozilla/dom/bluetooth/BluetoothTypes.h"
 #include "mozilla/dom/bluetooth/PBluetoothChild.h"
 #include "mozilla/dom/bluetooth/PBluetoothRequestChild.h"
 
 #include "mozilla/Attributes.h"
@@ -97,9 +97,9 @@ protected:
   ActorDestroy(ActorDestroyReason aWhy) override;
 
   virtual bool
   Recv__delete__(const BluetoothReply& aReply) override;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_ipc_bluetoothchild_h__
+#endif // mozilla_dom_bluetooth_ipc_BluetoothChild_h
--- a/dom/bluetooth/bluetooth2/ipc/BluetoothMessageUtils.h
+++ b/dom/bluetooth/bluetooth2/ipc/BluetoothMessageUtils.h
@@ -1,16 +1,16 @@
 /* -*- 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_ipc_bluetoothmessageutils_h__
-#define mozilla_dom_bluetooth_ipc_bluetoothmessageutils_h__
+#ifndef mozilla_dom_bluetooth_ipc_BluetoothMessageUtils_h
+#define mozilla_dom_bluetooth_ipc_BluetoothMessageUtils_h
 
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 #include "ipc/IPCMessageUtils.h"
 
 namespace IPC {
 
 template <>
 struct ParamTraits<mozilla::dom::bluetooth::BluetoothObjectType>
@@ -133,9 +133,9 @@ struct ParamTraits<mozilla::dom::bluetoo
     }
 
     return true;
   }
 };
 
 } // namespace IPC
 
-#endif // mozilla_dom_bluetooth_ipc_bluetoothmessageutils_h__
+#endif // mozilla_dom_bluetooth_ipc_BluetoothMessageUtils_h
--- a/dom/bluetooth/bluetooth2/ipc/BluetoothParent.h
+++ b/dom/bluetooth/bluetooth2/ipc/BluetoothParent.h
@@ -1,16 +1,16 @@
 /* -*- 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_ipc_bluetoothparent_h__
-#define mozilla_dom_bluetooth_ipc_bluetoothparent_h__
+#ifndef mozilla_dom_bluetooth_ipc_BluetoothParent_h
+#define mozilla_dom_bluetooth_ipc_BluetoothParent_h
 
 #include "mozilla/dom/bluetooth/BluetoothCommon.h"
 
 #include "mozilla/dom/bluetooth/PBluetoothParent.h"
 #include "mozilla/dom/bluetooth/PBluetoothRequestParent.h"
 
 #include "mozilla/Attributes.h"
 #include "mozilla/Observer.h"
@@ -260,9 +260,9 @@ protected:
   DoRequest(const GattClientReadDescriptorValueRequest& aRequest);
 
   bool
   DoRequest(const GattClientWriteDescriptorValueRequest& aRequest);
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_ipc_bluetoothparent_h__
+#endif // mozilla_dom_bluetooth_ipc_BluetoothParent_h
--- a/dom/bluetooth/bluetooth2/ipc/BluetoothServiceChildProcess.h
+++ b/dom/bluetooth/bluetooth2/ipc/BluetoothServiceChildProcess.h
@@ -1,16 +1,16 @@
 /* -*- 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_ipc_bluetoothservicechildprocess_h__
-#define mozilla_dom_bluetooth_ipc_bluetoothservicechildprocess_h__
+#ifndef mozilla_dom_bluetooth_ipc_BluetoothServiceChildProcess_h
+#define mozilla_dom_bluetooth_ipc_BluetoothServiceChildProcess_h
 
 #include "BluetoothService.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothChild;
 
 class BluetoothServiceChildProcess : public BluetoothService
@@ -290,9 +290,9 @@ private:
   bool
   IsSignalRegistered(const nsAString& aNodeName) {
     return !!mBluetoothSignalObserverTable.Get(aNodeName);
   }
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif // mozilla_dom_bluetooth_ipc_bluetoothservicechildprocess_h__
+#endif // mozilla_dom_bluetooth_ipc_BluetoothServiceChildProcess_h
--- a/dom/bluetooth/bluez/BluetoothA2dpManager.h
+++ b/dom/bluetooth/bluez/BluetoothA2dpManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetootha2dpmanager_h__
-#define mozilla_dom_bluetooth_bluetootha2dpmanager_h__
+#ifndef mozilla_dom_bluetooth_bluez_BluetoothA2dpManager_h
+#define mozilla_dom_bluetooth_bluez_BluetoothA2dpManager_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothProfileController.h"
 #include "BluetoothProfileManagerBase.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothA2dpManager : public BluetoothProfileManagerBase
@@ -82,9 +82,9 @@ private:
   uint64_t mMediaNumber;
   uint64_t mTotalMediaCount;
   uint32_t mPosition;
   ControlPlayStatus mPlayStatus;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluez_BluetoothA2dpManager_h
--- a/dom/bluetooth/bluez/BluetoothDBusService.h
+++ b/dom/bluetooth/bluez/BluetoothDBusService.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothdbusservice_h__
-#define mozilla_dom_bluetooth_bluetoothdbusservice_h__
+#ifndef mozilla_dom_bluetooth_bluez_BluetoothDBusService_h
+#define mozilla_dom_bluetooth_bluez_BluetoothDBusService_h
 
 #include "mozilla/Attributes.h"
 #include "BluetoothCommon.h"
 #include "mozilla/ipc/RawDBusConnection.h"
 #include "BluetoothService.h"
 #include "nsIThread.h"
 
 class DBusMessage;
@@ -333,9 +333,9 @@ private:
   nsresult SendAsyncDBusMessage(const nsAString& aObjectPath,
                                 const char* aInterface,
                                 const nsAString& aMessage,
                                 mozilla::ipc::DBusReplyCallback aCallback);
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluez_BluetoothDBusService_h
--- a/dom/bluetooth/bluez/BluetoothHfpManager.h
+++ b/dom/bluetooth/bluez/BluetoothHfpManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothhfpmanager_h__
-#define mozilla_dom_bluetooth_bluetoothhfpmanager_h__
+#ifndef mozilla_dom_bluetooth_bluez_BluetoothHfpManager_h
+#define mozilla_dom_bluetooth_bluez_BluetoothHfpManager_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothHfpManagerBase.h"
 #ifdef MOZ_B2G_RIL
 #include "BluetoothRilListener.h"
 #endif
 #include "BluetoothSocketObserver.h"
 #include "mozilla/ipc/SocketBase.h"
@@ -225,9 +225,9 @@ private:
 #ifdef MOZ_B2G_RIL
   // CDMA-specific variable
   Call mCdmaSecondCall;
 #endif
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluez_BluetoothHfpManager_h
--- a/dom/bluetooth/bluez/BluetoothOppManager.h
+++ b/dom/bluetooth/bluez/BluetoothOppManager.h
@@ -1,16 +1,16 @@
 /* -*- 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_bluetoothoppmanager_h__
-#define mozilla_dom_bluetooth_bluetoothoppmanager_h__
+#ifndef mozilla_dom_bluetooth_bluez_BluetoothOppManager_h
+#define mozilla_dom_bluetooth_bluez_BluetoothOppManager_h
 
 #include "BluetoothCommon.h"
 #include "BluetoothProfileManagerBase.h"
 #include "BluetoothSocketObserver.h"
 #include "DeviceStorage.h"
 #include "mozilla/ipc/SocketBase.h"
 #include "nsCOMArray.h"
 
@@ -223,9 +223,9 @@ private:
 
   // This holds the time when OPP manager fail to get service channel and
   // prepare to refresh SDP records.
   mozilla::TimeStamp mLastServiceChannelCheck;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluez_BluetoothOppManager_h
--- a/dom/bluetooth/bluez/BluetoothSocket.h
+++ b/dom/bluetooth/bluez/BluetoothSocket.h
@@ -1,16 +1,16 @@
 /* -*- 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_BluetoothSocket_h
-#define mozilla_dom_bluetooth_BluetoothSocket_h
+#ifndef mozilla_dom_bluetooth_bluez_BluetoothSocket_h
+#define mozilla_dom_bluetooth_bluez_BluetoothSocket_h
 
 #include "BluetoothCommon.h"
 #include "mozilla/ipc/DataSocket.h"
 #include "mozilla/ipc/UnixSocketWatcher.h"
 #include "nsAutoPtr.h"
 #include "nsString.h"
 
 class MessageLoop;
@@ -130,9 +130,9 @@ private:
   class ListenTask;
 
   BluetoothSocketObserver* mObserver;
   BluetoothSocketIO* mIO;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluez_BluetoothSocket_h
--- a/dom/bluetooth/bluez/BluetoothUnixSocketConnector.h
+++ b/dom/bluetooth/bluez/BluetoothUnixSocketConnector.h
@@ -1,16 +1,16 @@
 /* -*- 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_BluetoothUnixSocketConnector_h
-#define mozilla_dom_bluetooth_BluetoothUnixSocketConnector_h
+#ifndef mozilla_dom_bluetooth_bluez_BluetoothUnixSocketConnector_h
+#define mozilla_dom_bluetooth_bluez_BluetoothUnixSocketConnector_h
 
 #include <bluetooth/bluetooth.h>
 #include "BluetoothCommon.h"
 #include "mozilla/ipc/UnixSocketConnector.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothUnixSocketConnector final
@@ -56,9 +56,9 @@ private:
   BluetoothSocketType mType;
   int mChannel;
   bool mAuth;
   bool mEncrypt;
 };
 
 END_BLUETOOTH_NAMESPACE
 
-#endif
+#endif // mozilla_dom_bluetooth_bluez_BluetoothUnixSocketConnector_h
--- a/dom/indexedDB/ActorsParent.cpp
+++ b/dom/indexedDB/ActorsParent.cpp
@@ -6718,17 +6718,17 @@ struct FactoryOp::MaybeBlockedDatabaseIn
 class OpenDatabaseOp final
   : public FactoryOp
 {
   friend class Database;
   friend class VersionChangeTransaction;
 
   class VersionChangeOp;
 
-  const OptionalContentId mOptionalContentParentId;
+  OptionalContentId mOptionalContentParentId;
 
   nsRefPtr<FullDatabaseMetadata> mMetadata;
 
   uint64_t mRequestedVersion;
   nsString mDatabaseFilePath;
   nsRefPtr<FileManager> mFileManager;
 
   nsRefPtr<Database> mDatabase;
@@ -7234,17 +7234,17 @@ class ObjectStoreAddOrPutRequestOp final
 
   nsRefPtr<FileManager> mFileManager;
 
   Key mResponse;
   const nsCString mGroup;
   const nsCString mOrigin;
   const PersistenceType mPersistenceType;
   const bool mOverwrite;
-  const bool mObjectStoreMayHaveIndexes;
+  bool mObjectStoreMayHaveIndexes;
 
 private:
   // Only created by TransactionBase.
   ObjectStoreAddOrPutRequestOp(TransactionBase* aTransaction,
                                const RequestParams& aParams);
 
   ~ObjectStoreAddOrPutRequestOp()
   { }
@@ -7352,17 +7352,17 @@ private:
 
 class ObjectStoreDeleteRequestOp final
   : public NormalTransactionOp
 {
   friend class TransactionBase;
 
   const ObjectStoreDeleteParams mParams;
   ObjectStoreDeleteResponse mResponse;
-  const bool mObjectStoreMayHaveIndexes;
+  bool mObjectStoreMayHaveIndexes;
 
 private:
   ObjectStoreDeleteRequestOp(TransactionBase* aTransaction,
                              const ObjectStoreDeleteParams& aParams);
 
   ~ObjectStoreDeleteRequestOp()
   { }
 
@@ -7378,17 +7378,17 @@ private:
 
 class ObjectStoreClearRequestOp final
   : public NormalTransactionOp
 {
   friend class TransactionBase;
 
   const ObjectStoreClearParams mParams;
   ObjectStoreClearResponse mResponse;
-  const bool mObjectStoreMayHaveIndexes;
+  bool mObjectStoreMayHaveIndexes;
 
 private:
   ObjectStoreClearRequestOp(TransactionBase* aTransaction,
                             const ObjectStoreClearParams& aParams);
 
   ~ObjectStoreClearRequestOp()
   { }
 
@@ -18785,25 +18785,22 @@ OpenDatabaseOp::OpenDatabaseOp(Factory* 
                                already_AddRefed<ContentParent> aContentParent,
                                const CommonFactoryRequestParams& aParams)
   : FactoryOp(aFactory, Move(aContentParent), aParams, /* aDeleting */ false)
   , mMetadata(new FullDatabaseMetadata(aParams.metadata()))
   , mRequestedVersion(aParams.metadata().version())
   , mVersionChangeOp(nullptr)
   , mTelemetryId(0)
 {
-  auto& optionalContentParentId =
-    const_cast<OptionalContentId&>(mOptionalContentParentId);
-
   if (mContentParent) {
     // This is a little scary but it looks safe to call this off the main thread
     // for now.
-    optionalContentParentId = mContentParent->ChildID();
-  } else {
-    optionalContentParentId = void_t();
+    mOptionalContentParentId = mContentParent->ChildID();
+  } else {
+    mOptionalContentParentId = void_t();
   }
 }
 
 void
 OpenDatabaseOp::ActorDestroy(ActorDestroyReason aWhy)
 {
   AssertIsOnOwningThread();
 
@@ -22629,17 +22626,17 @@ ObjectStoreAddOrPutRequestOp::ObjectStor
 {
   MOZ_ASSERT(aParams.type() == RequestParams::TObjectStoreAddParams ||
              aParams.type() == RequestParams::TObjectStorePutParams);
 
   mMetadata =
     aTransaction->GetMetadataForObjectStoreId(mParams.objectStoreId());
   MOZ_ASSERT(mMetadata);
 
-  const_cast<bool&>(mObjectStoreMayHaveIndexes) = mMetadata->HasLiveIndexes();
+  mObjectStoreMayHaveIndexes = mMetadata->HasLiveIndexes();
 }
 
 nsresult
 ObjectStoreAddOrPutRequestOp::RemoveOldIndexDataValues(
                                                 DatabaseConnection* aConnection)
 {
   AssertIsOnConnectionThread();
   MOZ_ASSERT(aConnection);
@@ -23560,17 +23557,17 @@ ObjectStoreDeleteRequestOp::ObjectStoreD
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aTransaction);
 
   nsRefPtr<FullObjectStoreMetadata> metadata =
     aTransaction->GetMetadataForObjectStoreId(mParams.objectStoreId());
   MOZ_ASSERT(metadata);
 
-  const_cast<bool&>(mObjectStoreMayHaveIndexes) = metadata->HasLiveIndexes();
+  mObjectStoreMayHaveIndexes = metadata->HasLiveIndexes();
 }
 
 nsresult
 ObjectStoreDeleteRequestOp::DoDatabaseWork(DatabaseConnection* aConnection)
 {
   MOZ_ASSERT(aConnection);
   aConnection->AssertIsOnConnectionThread();
   PROFILER_LABEL("IndexedDB",
@@ -23652,17 +23649,17 @@ ObjectStoreClearRequestOp::ObjectStoreCl
 {
   AssertIsOnBackgroundThread();
   MOZ_ASSERT(aTransaction);
 
   nsRefPtr<FullObjectStoreMetadata> metadata =
     aTransaction->GetMetadataForObjectStoreId(mParams.objectStoreId());
   MOZ_ASSERT(metadata);
 
-  const_cast<bool&>(mObjectStoreMayHaveIndexes) = metadata->HasLiveIndexes();
+  mObjectStoreMayHaveIndexes = metadata->HasLiveIndexes();
 }
 
 nsresult
 ObjectStoreClearRequestOp::DoDatabaseWork(DatabaseConnection* aConnection)
 {
   MOZ_ASSERT(aConnection);
   aConnection->AssertIsOnConnectionThread();
 
--- a/dom/mobileconnection/gonk/MobileConnectionService.js
+++ b/dom/mobileconnection/gonk/MobileConnectionService.js
@@ -55,16 +55,24 @@ XPCOMUtils.defineLazyServiceGetter(this,
 XPCOMUtils.defineLazyServiceGetter(this, "gNetworkManager",
                                    "@mozilla.org/network/manager;1",
                                    "nsINetworkManager");
 
 XPCOMUtils.defineLazyServiceGetter(this, "gIccService",
                                    "@mozilla.org/icc/iccservice;1",
                                    "nsIIccService");
 
+XPCOMUtils.defineLazyServiceGetter(this, "gDataCallManager",
+                                   "@mozilla.org/datacall/manager;1",
+                                   "nsIDataCallManager");
+
+XPCOMUtils.defineLazyModuleGetter(this, "gTelephonyUtils",
+                                  "resource://gre/modules/TelephonyUtils.jsm",
+                                  "TelephonyUtils");
+
 XPCOMUtils.defineLazyGetter(this, "gRadioInterfaceLayer", function() {
   let ril = { numRadioInterfaces: 0 };
   try {
     ril = Cc["@mozilla.org/ril;1"].getService(Ci.nsIRadioInterfaceLayer);
   } catch(e) {}
   return ril;
 });
 
@@ -715,16 +723,115 @@ MobileConnectionProvider.prototype = {
         active.serviceId === this._clientId) {
       aNewInfo.connected = true;
     }
 
     let isUpdated = this._updateConnectionInfo(this.data, aNewInfo);
     if (isUpdated && !aBatch) {
       this.deliverListenerEvent("notifyDataChanged");
     }
+
+    if (isUpdated) {
+      this._ensureDataRegistration();
+    }
+  },
+
+  _dataRegistrationFailed: false,
+  _ensureDataRegistration: function() {
+    let isDataRegistered =
+      this.data &&
+      this.data.state == RIL.GECKO_MOBILE_CONNECTION_STATE_REGISTERED;
+    let isVoiceRegistered =
+      this.voice &&
+      this.voice.state == RIL.GECKO_MOBILE_CONNECTION_STATE_REGISTERED;
+
+    if (isVoiceRegistered && isDataRegistered) {
+      if (DEBUG) {
+        this._debug("Voice and data registered.");
+      }
+      this._dataRegistrationFailed = false;
+      return;
+    }
+
+    if (isVoiceRegistered && !isDataRegistered &&
+        this._clientId == gDataCallManager.dataDefaultServiceId) {
+
+      // We have been here before, no more recovery.
+      if (this._dataRegistrationFailed) {
+        if (DEBUG) {
+          this._debug("Voice and data not consistent: " + this.voice.state +
+                      " != " + this.data.state + ".");
+        }
+        return;
+      }
+
+      if (DEBUG) {
+        this._debug("Voice and data not consistent: " + this.voice.state +
+                    " != " + this.data.state + ", try to recover.");
+      }
+
+      this._dataRegistrationFailed = true;
+      // If there is any ongoing call, wait for them to disconnect.
+      if (gTelephonyUtils.hasAnyCalls(this._clientId)) {
+        gTelephonyUtils.waitForNoCalls(this._clientId)
+          .then(() => {
+            if (this._dataRegistrationFailed) {
+              this._recoverDataRegistration();
+            }
+          });
+        return;
+      }
+
+      this._recoverDataRegistration();
+    }
+  },
+
+
+  /**
+   * To recover data registration, get the current preferred network type first,
+   * then set it to a temporary preferred network type, and last set back to the
+   * previous preferred network type. This is will cause deregistration and
+   * registration on both voice and data networks.
+   */
+  _recoverDataRegistration: function() {
+    if (DEBUG) {
+      this._debug("Trying to recover data registration...");
+    }
+
+    let currentPreferredNetworkType;
+
+    let resetPreferredNetworkType = () => {
+      this.setPreferredNetworkType(currentPreferredNetworkType, {
+        QueryInterface: XPCOMUtils.generateQI([Ci.nsIMobileConnectionCallback]),
+        notifySuccess: () => {},
+        notifyError: aErrorMsg => {}
+      });
+    };
+
+    let setTemporaryPreferredNetworkType = () => {
+      this.setPreferredNetworkType(
+        Ci.nsIMobileConnection.PREFERRED_NETWORK_TYPE_WCDMA_GSM_CDMA_EVDO, {
+          QueryInterface: XPCOMUtils.generateQI([Ci.nsIMobileConnectionCallback]),
+          notifySuccess: () =>  resetPreferredNetworkType(),
+          notifyError: aErrorMsg => resetPreferredNetworkType()
+      });
+    };
+
+    this.getPreferredNetworkType({
+      QueryInterface: XPCOMUtils.generateQI([Ci.nsIMobileConnectionCallback]),
+      notifyGetPreferredNetworkTypeSuccess: networkType => {
+        currentPreferredNetworkType = networkType;
+        setTemporaryPreferredNetworkType();
+      },
+      notifyError: aErrorMsg => {
+        currentPreferredNetworkType =
+          Ci.nsIMobileConnection.PREFERRED_NETWORK_TYPE_LTE_WCDMA_GSM_CDMA_EVDO;
+        setTemporaryPreferredNetworkType();
+      }
+    });
   },
 
   updateOperatorInfo: function(aNewInfo, aBatch = false) {
     let isUpdated = this._updateInfo(this._operatorInfo, aNewInfo);
 
     // Update lastKnownNetwork
     if (this._operatorInfo.mcc && this._operatorInfo.mnc) {
       let network = this._operatorInfo.mcc + "-" + this._operatorInfo.mnc;
--- a/dom/system/gonk/DataCallManager.js
+++ b/dom/system/gonk/DataCallManager.js
@@ -144,16 +144,20 @@ DataCallManager.prototype = {
   // Pending function to execute when we are notified that another data call has
   // been disconnected.
   _pendingDataCallRequest: null,
 
   debug: function(aMsg) {
     dump("-*- DataCallManager: " + aMsg + "\n");
   },
 
+  get dataDefaultServiceId() {
+    return this._dataDefaultClientId;
+  },
+
   getDataCallHandler: function(aClientId) {
     let handler = this._connectionHandlers[aClientId]
     if (!handler) {
       throw Cr.NS_ERROR_UNEXPECTED;
     }
 
     return handler;
   },
--- a/dom/system/gonk/GonkGPSGeolocationProvider.cpp
+++ b/dom/system/gonk/GonkGPSGeolocationProvider.cpp
@@ -129,28 +129,101 @@ GonkGPSGeolocationProvider::LocationCall
                                                         location->speed,
                                                         PR_Now() / PR_USEC_PER_MSEC);
   // Note above: Can't use location->timestamp as the time from the satellite is a
   // minimum of 16 secs old (see http://leapsecond.com/java/gpsclock.htm).
   // All code from this point on expects the gps location to be timestamped with the
   // current time, most notably: the geolocation service which respects maximumAge
   // set in the DOM JS.
 
+  if (gDebug_isLoggingEnabled) {
+    nsContentUtils::LogMessageToConsole("geo: GPS got a fix (%f, %f). accuracy: %f",
+                                        location->latitude,
+                                        location->longitude,
+                                        location->accuracy);
+  }
 
   NS_DispatchToMainThread(new UpdateLocationEvent(somewhere));
 }
 
 void
 GonkGPSGeolocationProvider::StatusCallback(GpsStatus* status)
 {
+  if (gDebug_isLoggingEnabled) {
+    switch (status->status) {
+      case GPS_STATUS_NONE:
+        nsContentUtils::LogMessageToConsole("geo: GPS_STATUS_NONE\n");
+        break;
+      case GPS_STATUS_SESSION_BEGIN:
+        nsContentUtils::LogMessageToConsole("geo: GPS_STATUS_SESSION_BEGIN\n");
+        break;
+      case GPS_STATUS_SESSION_END:
+        nsContentUtils::LogMessageToConsole("geo: GPS_STATUS_SESSION_END\n");
+        break;
+      case GPS_STATUS_ENGINE_ON:
+        nsContentUtils::LogMessageToConsole("geo: GPS_STATUS_ENGINE_ON\n");
+        break;
+      case GPS_STATUS_ENGINE_OFF:
+        nsContentUtils::LogMessageToConsole("geo: GPS_STATUS_ENGINE_OFF\n");
+        break;
+      default:
+        nsContentUtils::LogMessageToConsole("geo: Unknown GPS status\n");
+        break;
+    }
+  }
 }
 
 void
 GonkGPSGeolocationProvider::SvStatusCallback(GpsSvStatus* sv_info)
 {
+  if (gDebug_isLoggingEnabled) {
+    static int numSvs = 0;
+    static uint32_t numEphemeris = 0;
+    static uint32_t numAlmanac = 0;
+    static uint32_t numUsedInFix = 0;
+
+    unsigned int i = 1;
+    uint32_t svAlmanacCount = 0;
+    for (i = 1; i > 0; i <<= 1) {
+      if (i & sv_info->almanac_mask) {
+        svAlmanacCount++;
+      }
+    }
+
+    uint32_t svEphemerisCount = 0;
+    for (i = 1; i > 0; i <<= 1) {
+      if (i & sv_info->ephemeris_mask) {
+        svEphemerisCount++;
+      }
+    }
+
+    uint32_t svUsedCount = 0;
+    for (i = 1; i > 0; i <<= 1) {
+      if (i & sv_info->used_in_fix_mask) {
+        svUsedCount++;
+      }
+    }
+
+    // Log the message only if the the status changed.
+    if (sv_info->num_svs != numSvs ||
+        svAlmanacCount != numAlmanac ||
+        svEphemerisCount != numEphemeris ||
+        svUsedCount != numUsedInFix) {
+
+      nsContentUtils::LogMessageToConsole(
+        "geo: Number of SVs have (visibility, almanac, ephemeris): (%d, %d, %d)."
+        "  %d of these SVs were used in fix.\n",
+        sv_info->num_svs, svAlmanacCount, svEphemerisCount, svUsedCount);
+
+      numSvs = sv_info->num_svs;
+      numAlmanac = svAlmanacCount;
+      numEphemeris = svEphemerisCount;
+      numUsedInFix = svUsedCount;
+    }
+  }
 }
 
 void
 GonkGPSGeolocationProvider::NmeaCallback(GpsUtcTime timestamp, const char* nmea, int length)
 {
   if (gDebug_isLoggingEnabled) {
     nsContentUtils::LogMessageToConsole("geo: NMEA: timestamp:\t%lld, length: %d, %s",
                                         timestamp, length, nmea);
--- a/dom/system/gonk/nsIDataCallManager.idl
+++ b/dom/system/gonk/nsIDataCallManager.idl
@@ -50,19 +50,21 @@ interface nsIDataCallHandler : nsISuppor
   void deactivateDataCalls(in nsIDeactivateDataCallsCallback callback);
 
   /**
    * Called to reconsider data call state.
    */
   void updateRILNetworkInterface();
 };
 
-[scriptable, uuid(aac54873-5771-4093-a72b-fe39967c6607)]
+[scriptable, uuid(2c46e37d-88dc-4d25-bb37-e1c0d3e9cb5f)]
 interface nsIDataCallManager : nsISupports
 {
+  readonly attribute long dataDefaultServiceId;
+
   /**
    * Get the corresponding data call handler.
    *
    * @param clientId
    *        clientId of the data call handler to get.
    */
   nsIDataCallHandler getDataCallHandler(in unsigned long clientId);
 };
\ No newline at end of file
--- a/mobile/android/base/RestrictedProfiles.java
+++ b/mobile/android/base/RestrictedProfiles.java
@@ -57,17 +57,19 @@ public class RestrictedProfiles {
     @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
     private static boolean isRestrictedProfile(Context context) {
         if (Versions.preJBMR2) {
             // Early versions don't support restrictions at all
             return false;
         }
 
         final UserManager mgr = (UserManager) context.getSystemService(Context.USER_SERVICE);
-        Bundle restrictions = mgr.getApplicationRestrictions(context.getPackageName());
+        final Bundle restrictions = new Bundle();
+        restrictions.putAll(mgr.getApplicationRestrictions(context.getPackageName()));
+        restrictions.putAll(mgr.getUserRestrictions());
 
         for (String key : restrictions.keySet()) {
             if (restrictions.getBoolean(key)) {
                 // At least one restriction is enabled -> We are a restricted profile
                 return true;
             }
         }
 
--- a/mobile/android/confvars.sh
+++ b/mobile/android/confvars.sh
@@ -95,19 +95,17 @@ MOZ_ANDROID_SHARE_OVERLAY=1
 
 # Enable the Mozilla Location Service stumbler.
 MOZ_ANDROID_MLS_STUMBLER=1
 
 # Enable adding to the system downloads list in pre-release builds.
 MOZ_ANDROID_DOWNLOADS_INTEGRATION=1
 
 # Enable Tab Queue
-if test "$NIGHTLY_BUILD"; then
-  MOZ_ANDROID_TAB_QUEUE=1
-fi
+MOZ_ANDROID_TAB_QUEUE=1
 
 # Use the low-memory GC tuning.
 export JS_GC_SMALL_CHUNK_SIZE=1
 
 # Enable FxAccount Avatar
 if test "$NIGHTLY_BUILD"; then
   MOZ_ANDROID_FIREFOX_ACCOUNT_PROFILES=1
 fi
--- a/netwerk/dns/mdns/libmdns/MDNSResponderOperator.cpp
+++ b/netwerk/dns/mdns/libmdns/MDNSResponderOperator.cpp
@@ -60,52 +60,61 @@ public:
     }
 
     DNSServiceProcessResult(mService);
   }
 
   virtual void OnSocketDetached(PRFileDesc *fd) override
   {
     MOZ_ASSERT(PR_GetCurrentThread() == gSocketThread);
+    MOZ_ASSERT(mThread);
     MOZ_ASSERT(fd == mFD);
 
     if (!mFD) {
       return;
     }
 
+    // Bug 1175387: do not double close the handle here.
+    PR_ChangeFileDescNativeHandle(mFD, -1);
     PR_Close(mFD);
     mFD = nullptr;
+
+    nsCOMPtr<nsIRunnable> ev =
+      NS_NewRunnableMethod(this, &ServiceWatcher::Deallocate);
+    mThread->Dispatch(ev, NS_DISPATCH_NORMAL);
   }
 
   virtual void IsLocal(bool *aIsLocal) override { *aIsLocal = true; }
 
   virtual void KeepWhenOffline(bool *aKeepWhenOffline) override
   {
     *aKeepWhenOffline = true;
   }
 
   virtual uint64_t ByteCountSent() override { return 0; }
   virtual uint64_t ByteCountReceived() override { return 0; }
 
   explicit ServiceWatcher(DNSServiceRef aService)
-    : mSts(nullptr)
+    : mThread(nullptr)
+    , mSts(nullptr)
     , mService(aService)
     , mFD(nullptr)
     , mAttached(false)
   {
     if (!gSocketTransportService)
     {
       nsCOMPtr<nsISocketTransportService> sts =
         do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID);
     }
   }
 
   nsresult Init()
   {
     MOZ_ASSERT(PR_GetCurrentThread() != gSocketThread);
+    mThread = NS_GetCurrentThread();
 
     if (!mService) {
       return NS_OK;
     }
 
     if (!gSocketTransportService) {
       return NS_ERROR_FAILURE;
     }
@@ -119,31 +128,35 @@ public:
     mFD = PR_ImportFile(osfd);
     return PostEvent(&ServiceWatcher::OnMsgAttach);
   }
 
   void Close()
   {
     MOZ_ASSERT(PR_GetCurrentThread() != gSocketThread);
 
-    if (mService) {
-      DNSServiceRefDeallocate(mService);
-      mService = nullptr;
-    }
-
     if (!gSocketTransportService) {
+      Deallocate();
       return;
     }
 
     PostEvent(&ServiceWatcher::OnMsgClose);
   }
 
 private:
   ~ServiceWatcher() = default;
 
+  void Deallocate()
+  {
+    if (mService) {
+      DNSServiceRefDeallocate(mService);
+      mService = nullptr;
+    }
+  }
+
   nsresult PostEvent(void(ServiceWatcher::*func)(void))
   {
     nsCOMPtr<nsIRunnable> ev = NS_NewRunnableMethod(this, func);
     return gSocketTransportService->Dispatch(ev, NS_DISPATCH_NORMAL);
   }
 
   void OnMsgClose()
   {
@@ -227,16 +240,17 @@ private:
     //
     // now, configure our poll flags for listening...
     //
     mPollFlags = (PR_POLL_READ | PR_POLL_EXCEPT);
 
     return NS_OK;
   }
 
+  nsCOMPtr<nsIThread> mThread;
   nsRefPtr<nsSocketTransportService> mSts;
   DNSServiceRef mService;
   PRFileDesc* mFD;
   bool mAttached;
 };
 
 NS_IMPL_ISUPPORTS(MDNSResponderOperator::ServiceWatcher, nsISupports)
 
--- a/toolkit/components/telemetry/TelemetryEnvironment.jsm
+++ b/toolkit/components/telemetry/TelemetryEnvironment.jsm
@@ -142,17 +142,16 @@ const DEFAULT_ENVIRONMENT_PREFS = new Ma
 
 const LOGGER_NAME = "Toolkit.Telemetry";
 
 const PREF_BLOCKLIST_ENABLED = "extensions.blocklist.enabled";
 const PREF_DISTRIBUTION_ID = "distribution.id";
 const PREF_DISTRIBUTION_VERSION = "distribution.version";
 const PREF_DISTRIBUTOR = "app.distributor";
 const PREF_DISTRIBUTOR_CHANNEL = "app.distributor.channel";
-const PREF_E10S_ENABLED = "browser.tabs.remote.autostart";
 const PREF_HOTFIX_LASTVERSION = "extensions.hotfix.lastVersion";
 const PREF_APP_PARTNER_BRANCH = "app.partner.";
 const PREF_PARTNER_ID = "mozilla.partner.id";
 const PREF_TELEMETRY_ENABLED = "toolkit.telemetry.enabled";
 const PREF_UPDATE_ENABLED = "app.update.enabled";
 const PREF_UPDATE_AUTODOWNLOAD = "app.update.auto";
 const PREF_SEARCH_COHORT = "browser.search.cohort";
 
@@ -995,17 +994,17 @@ EnvironmentCache.prototype = {
       updateChannel = UpdateChannel.get(false);
     } catch (e) {}
 
     this._currentEnvironment.settings = {
       blocklistEnabled: Preferences.get(PREF_BLOCKLIST_ENABLED, true),
 #ifndef MOZ_WIDGET_ANDROID
       isDefaultBrowser: this._isDefaultBrowser(),
 #endif
-      e10sEnabled: Preferences.get(PREF_E10S_ENABLED, false),
+      e10sEnabled: Services.appinfo.browserTabsRemoteAutostart,
       telemetryEnabled: Preferences.get(PREF_TELEMETRY_ENABLED, false),
       locale: getBrowserLocale(),
       update: {
         channel: updateChannel,
         enabled: Preferences.get(PREF_UPDATE_ENABLED, true),
         autoDownload: Preferences.get(PREF_UPDATE_AUTODOWNLOAD, true),
       },
       userPrefs: this._getPrefData(),
--- a/toolkit/components/telemetry/docs/environment.rst
+++ b/toolkit/components/telemetry/docs/environment.rst
@@ -35,17 +35,17 @@ Structure::
         blocklistEnabled: <bool>, // true on failure
         isDefaultBrowser: <bool>, // null on failure, not available on Android
         defaultSearchEngine: <string>, // e.g. "yahoo"
         defaultSearchEngineData: {, // data about the current default engine
           name: <string>, // engine name, e.g. "Yahoo"; or "NONE" if no default
           loadPath: <string>, // where the engine line is located; missing if no default
           submissionURL: <string> // missing if no default or for user-installed engines
         },
-        e10sEnabled: <bool>, // false on failure
+        e10sEnabled: <bool>, // whether e10s is on, i.e. browser tabs open by default in a different process
         telemetryEnabled: <bool>, // false on failure
         locale: <string>, // e.g. "it", null on failure
         update: {
           channel: <string>, // e.g. "release", null on failure
           enabled: <bool>, // true on failure
           autoDownload: <bool>, // true on failure
         },
         userPrefs: {
--- a/widget/gonk/HwcComposer2D.cpp
+++ b/widget/gonk/HwcComposer2D.cpp
@@ -835,24 +835,17 @@ HwcComposer2D::TryHwComposition(nsScreen
     mHal->SetEGLInfo(aScreen->GetEGLDisplay(), aScreen->GetEGLSurface());
     return !mHal->Set(mList, aScreen->GetDisplayType());
 }
 
 bool
 HwcComposer2D::Render(nsIWidget* aWidget)
 {
     nsScreenGonk* screen = static_cast<nsWindow*>(aWidget)->GetScreen();
-    GetGonkDisplay()->SwapBuffers(screen->GetEGLDisplay(), screen->GetEGLSurface());
-
-    if (!mHal->HasHwc()) {
-        return true;
-    }
-
-    mHal->Prepare(nullptr, screen->GetDisplayType(), nullptr, -1);
-    return !mHal->Set(nullptr, screen->GetDisplayType());
+    return GetGonkDisplay()->SwapBuffers(screen->GetEGLDisplay(), screen->GetEGLSurface());
 }
 #endif
 
 bool
 HwcComposer2D::TryRenderWithHwc(Layer* aRoot,
                                 nsIWidget* aWidget,
                                 bool aGeometryChanged)
 {
--- a/widget/gonk/libdisplay/GonkDisplayICS.cpp
+++ b/widget/gonk/libdisplay/GonkDisplayICS.cpp
@@ -163,17 +163,24 @@ GonkDisplayICS::GetHWCDevice()
     return mHwc;
 }
 
 bool
 GonkDisplayICS::SwapBuffers(EGLDisplay dpy, EGLSurface sur)
 {
     // Should be called when composition rendering is complete for a frame.
     // Only HWC v1.0 needs this call. ICS gonk always needs the call.
-    return !mFBSurface->compositionComplete();
+    mFBSurface->compositionComplete();
+
+    if (!mHwc) {
+        return true;
+    }
+
+    mHwc->prepare(mHwc, nullptr);
+    return !mHwc->set(mHwc, dpy, sur, 0);
 }
 
 ANativeWindowBuffer*
 GonkDisplayICS::DequeueBuffer()
 {
     ANativeWindow *window = static_cast<ANativeWindow *>(mFBSurface.get());
     ANativeWindowBuffer *buf = nullptr;
     window->dequeueBuffer(window, &buf);