Merge mozilla-central to mozilla-inbound on a CLOSED TREE
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Fri, 31 Jul 2015 13:50:49 +0200
changeset 287317 3ceddaebf7e3e1d40a4a0b5b841b13ae241c7fd1
parent 287316 2b0596910897e4aca81eedbcd16860c6ca0c0247 (current diff)
parent 287257 e9389ca320fff24c030806e310ff8dfedef85cbe (diff)
child 287318 cf4c24bd630122e5d3a8ffb1f11f1f0a8bc25ebd
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)
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 mozilla-central to mozilla-inbound on a CLOSED TREE
dom/media/mediasource/MediaSource.cpp
mobile/android/base/RestrictionProvider.java
--- 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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <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="5bb657ada461be666c35f419dbe072ed2ce632fc"/>
--- 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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <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="5bb657ada461be666c35f419dbe072ed2ce632fc"/>
--- 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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="8bc59310552179f9a8bc6cdd0188e2475df52fb7"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="9d0e5057ee5404a31ec1bf76131cb11336a7c3b6"/>
   <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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="5bb657ada461be666c35f419dbe072ed2ce632fc"/>
   <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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <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="5bb657ada461be666c35f419dbe072ed2ce632fc"/>
--- 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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <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="5bb657ada461be666c35f419dbe072ed2ce632fc"/>
--- 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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="8bc59310552179f9a8bc6cdd0188e2475df52fb7"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="9d0e5057ee5404a31ec1bf76131cb11336a7c3b6"/>
   <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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <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="5bb657ada461be666c35f419dbe072ed2ce632fc"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
-        "git_revision": "7e7e92fbeea90cad8bf6f494b1a73712f79178e8", 
+        "git_revision": "8502d07cd7e68da79303471acf64eea48b3dce24", 
         "remote": "https://git.mozilla.org/releases/gaia.git", 
         "branch": ""
     }, 
-    "revision": "ad038c34edaef294c0b92f4c5f665c81c98c052a", 
+    "revision": "b328a35941a9934c652a2afbc064b69f23a35fc3", 
     "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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="5bb657ada461be666c35f419dbe072ed2ce632fc"/>
   <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="7e7e92fbeea90cad8bf6f494b1a73712f79178e8"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="8502d07cd7e68da79303471acf64eea48b3dce24"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9f45c1988fe72749f0659409e6e3320fabf7b79a"/>
   <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="5bb657ada461be666c35f419dbe072ed2ce632fc"/>
--- a/browser/devtools/styleinspector/cssruleview.xhtml
+++ b/browser/devtools/styleinspector/cssruleview.xhtml
@@ -43,20 +43,20 @@
           <input id="ruleview-searchbox"
                  class="devtools-searchinput devtools-rule-searchbox"
                  type="search" placeholder="&filterStylesPlaceholder;"/>
           <button id="ruleview-searchinput-clear" class="devtools-searchinput-clear"></button>
         </div>
         <button id="ruleview-add-rule-button" title="&addRuleButtonTooltip;" class="devtools-button"></button>
         <button id="pseudo-class-panel-toggle" title="&togglePseudoClassPanel;" class="devtools-button"></button>
       </div>
-      <div id="pseudo-class-panel" class="devtools-toolbar" hidden="true">
-        <label><input id="pseudo-hover-toggle" type="checkbox" value=":hover" />:hover</label>
-        <label><input id="pseudo-active-toggle" type="checkbox" value=":active" />:active</label>
-        <label><input id="pseudo-focus-toggle" type="checkbox" value=":focus" />:focus</label>
+      <div id="pseudo-class-panel" class="devtools-toolbar" hidden="true" tabindex="-1">
+        <label><input id="pseudo-hover-toggle" type="checkbox" value=":hover" tabindex="-1" />:hover</label>
+        <label><input id="pseudo-active-toggle" type="checkbox" value=":active" tabindex="-1" />:active</label>
+        <label><input id="pseudo-focus-toggle" type="checkbox" value=":focus" tabindex="-1" />:focus</label>
       </div>
     </div>
 
     <div id="ruleview-container" class="ruleview devtools-monospace">
     </div>
 
   </body>
 </html>
--- a/browser/devtools/styleinspector/rule-view.js
+++ b/browser/devtools/styleinspector/rule-view.js
@@ -2293,19 +2293,26 @@ CssRuleView.prototype = {
 
   /**
    * Called when the pseudo class panel button is clicked and toggles
    * the display of the pseudo class panel.
    */
   _onTogglePseudoClassPanel: function() {
     if (this.pseudoClassPanel.hidden) {
       this.pseudoClassToggle.setAttribute("checked", "true");
+      this.hoverCheckbox.setAttribute("tabindex", "0");
+      this.activeCheckbox.setAttribute("tabindex", "0");
+      this.focusCheckbox.setAttribute("tabindex", "0");
     } else {
       this.pseudoClassToggle.removeAttribute("checked");
+      this.hoverCheckbox.setAttribute("tabindex", "-1");
+      this.activeCheckbox.setAttribute("tabindex", "-1");
+      this.focusCheckbox.setAttribute("tabindex", "-1");
     }
+
     this.pseudoClassPanel.hidden = !this.pseudoClassPanel.hidden;
   },
 
   /**
    * Called when a pseudo class checkbox is clicked and toggles
    * the pseudo class for the current selected element.
    */
   _onTogglePseudoClass: function(event) {
--- a/browser/devtools/styleinspector/test/browser_ruleview_pseudo_lock_options.js
+++ b/browser/devtools/styleinspector/test/browser_ruleview_pseudo_lock_options.js
@@ -24,81 +24,112 @@ let TEST_URI = [
   "<div>test div</div>"
 ].join("\n");
 
 add_task(function*() {
   yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
   let {inspector, view} = yield openRuleView();
   yield selectNode("div", inspector);
 
+  yield assertPseudoPanelClosed(view);
+
   info("Toggle the pseudo class panel open");
-  ok(view.pseudoClassPanel.hidden, "Pseudo Class Panel Hidden");
   view.pseudoClassToggle.click();
-  ok(!view.pseudoClassPanel.hidden, "Pseudo Class Panel Opened");
-  ok(!view.hoverCheckbox.disabled, ":hover checkbox is not disabled");
-  ok(!view.activeCheckbox.disabled, ":active checkbox is not disabled");
-  ok(!view.focusCheckbox.disabled, ":focus checkbox is not disabled");
+  yield assertPseudoPanelOpened(view);
 
   info("Toggle each pseudo lock and check that the pseudo lock is added");
-  yield togglePseudoClass(inspector, view, view.hoverCheckbox);
+  yield togglePseudoClass(inspector, view.hoverCheckbox);
   yield assertPseudoAdded(inspector, view, ":hover", 3, 1);
-  yield togglePseudoClass(inspector, view, view.hoverCheckbox);
+  yield togglePseudoClass(inspector, view.hoverCheckbox);
   yield assertPseudoRemoved(inspector, view, 2);
 
-  yield togglePseudoClass(inspector, view, view.activeCheckbox);
+  yield togglePseudoClass(inspector, view.activeCheckbox);
   yield assertPseudoAdded(inspector, view, ":active", 3, 1);
-  yield togglePseudoClass(inspector, view, view.activeCheckbox);
+  yield togglePseudoClass(inspector, view.activeCheckbox);
   yield assertPseudoRemoved(inspector, view, 2);
 
-  yield togglePseudoClass(inspector, view, view.focusCheckbox);
+  yield togglePseudoClass(inspector, view.focusCheckbox);
   yield assertPseudoAdded(inspector, view, ":focus", 3, 1);
-  yield togglePseudoClass(inspector, view, view.focusCheckbox);
+  yield togglePseudoClass(inspector, view.focusCheckbox);
   yield assertPseudoRemoved(inspector, view, 2);
 
   info("Toggle all pseudo lock and check that the pseudo lock is added");
-  yield togglePseudoClass(inspector, view, view.hoverCheckbox);
-  yield togglePseudoClass(inspector, view, view.activeCheckbox);
-  yield togglePseudoClass(inspector, view, view.focusCheckbox);
+  yield togglePseudoClass(inspector, view.hoverCheckbox);
+  yield togglePseudoClass(inspector, view.activeCheckbox);
+  yield togglePseudoClass(inspector, view.focusCheckbox);
   yield assertPseudoAdded(inspector, view, ":focus", 5, 1);
   yield assertPseudoAdded(inspector, view, ":active", 5, 2);
   yield assertPseudoAdded(inspector, view, ":hover", 5, 3);
-  yield togglePseudoClass(inspector, view, view.hoverCheckbox);
-  yield togglePseudoClass(inspector, view, view.activeCheckbox);
-  yield togglePseudoClass(inspector, view, view.focusCheckbox);
+  yield togglePseudoClass(inspector, view.hoverCheckbox);
+  yield togglePseudoClass(inspector, view.activeCheckbox);
+  yield togglePseudoClass(inspector, view.focusCheckbox);
   yield assertPseudoRemoved(inspector, view, 2);
 
   info("Select a null element");
   yield view.selectElement(null);
   ok(!view.hoverCheckbox.checked && view.hoverCheckbox.disabled,
     ":hover checkbox is unchecked and disabled");
   ok(!view.activeCheckbox.checked && view.activeCheckbox.disabled,
     ":active checkbox is unchecked and disabled");
   ok(!view.focusCheckbox.checked && view.focusCheckbox.disabled,
     ":focus checkbox is unchecked and disabled");
 
   info("Toggle the pseudo class panel close");
   view.pseudoClassToggle.click();
-  ok(view.pseudoClassPanel.hidden, "Pseudo Class Panel Closed");
+  yield assertPseudoPanelClosed(view);
 });
 
-function* togglePseudoClass(inspector, ruleView, pseudoClassOption) {
+function* togglePseudoClass(inspector, pseudoClassOption) {
   info("Toggle the pseudoclass, wait for it to be applied");
   let onRefresh = inspector.once("rule-view-refreshed");
   pseudoClassOption.click();
   yield onRefresh;
 }
 
-function* assertPseudoAdded(inspector, ruleView, pseudoClass, numRules,
+function* assertPseudoAdded(inspector, view, pseudoClass, numRules,
     childIndex) {
   info("Check that the ruleview contains the pseudo-class rule");
-  is(ruleView.element.children.length, numRules,
+  is(view.element.children.length, numRules,
     "Should have " + numRules + " rules.");
-  is(getRuleViewRuleEditor(ruleView, childIndex).rule.selectorText,
+  is(getRuleViewRuleEditor(view, childIndex).rule.selectorText,
     "div" + pseudoClass, "rule view is showing " + pseudoClass + " rule");
 }
 
-function* assertPseudoRemoved(inspector, ruleView, numRules) {
+function* assertPseudoRemoved(inspector, view, numRules) {
   info("Check that the ruleview no longer contains the pseudo-class rule");
-  is(ruleView.element.children.length, numRules,
+  is(view.element.children.length, numRules,
     "Should have " + numRules + " rules.");
-  is(getRuleViewRuleEditor(ruleView, 1).rule.selectorText, "div",
+  is(getRuleViewRuleEditor(view, 1).rule.selectorText, "div",
     "Second rule is div");
 }
+
+function* assertPseudoPanelOpened(view) {
+  info("Check the opened state of the pseudo class panel");
+
+  ok(!view.pseudoClassPanel.hidden, "Pseudo Class Panel Opened");
+  ok(!view.hoverCheckbox.disabled, ":hover checkbox is not disabled");
+  ok(!view.activeCheckbox.disabled, ":active checkbox is not disabled");
+  ok(!view.focusCheckbox.disabled, ":focus checkbox is not disabled");
+
+  is(view.pseudoClassPanel.getAttribute("tabindex"), "-1",
+    "Pseudo Class Panel has a tabindex of -1");
+  is(view.hoverCheckbox.getAttribute("tabindex"), "0",
+    ":hover checkbox has a tabindex of 0");
+  is(view.activeCheckbox.getAttribute("tabindex"), "0",
+    ":active checkbox has a tabindex of 0");
+  is(view.focusCheckbox.getAttribute("tabindex"), "0",
+    ":focus checkbox has a tabindex of 0");
+}
+
+function* assertPseudoPanelClosed(view) {
+  info("Check the closed state of the pseudo clas panel");
+
+  ok(view.pseudoClassPanel.hidden, "Pseudo Class Panel Hidden");
+
+  is(view.pseudoClassPanel.getAttribute("tabindex"), "-1",
+    "Pseudo Class Panel has a tabindex of -1");
+  is(view.hoverCheckbox.getAttribute("tabindex"), "-1",
+    ":hover checkbox has a tabindex of -1");
+  is(view.activeCheckbox.getAttribute("tabindex"), "-1",
+    ":active checkbox has a tabindex of -1");
+  is(view.focusCheckbox.getAttribute("tabindex"), "-1",
+    ":focus checkbox has a tabindex of -1");
+}
--- a/dom/media/mediasource/MediaSource.cpp
+++ b/dom/media/mediasource/MediaSource.cpp
@@ -94,17 +94,18 @@ IsTypeSupported(const nsAString& aType)
         }
         if (hasCodecs &&
             DecoderTraits::CanHandleCodecsType(mimeTypeUTF8.get(),
                                                codecs) == CANPLAY_NO) {
           return NS_ERROR_DOM_INVALID_STATE_ERR;
         }
         return NS_OK;
       } else if (DecoderTraits::IsWebMType(mimeTypeUTF8)) {
-        if (!Preferences::GetBool("media.mediasource.webm.enabled", false)) {
+        if (!Preferences::GetBool("media.mediasource.webm.enabled", false) ||
+            Preferences::GetBool("media.mediasource.format-reader", false)) {
           return NS_ERROR_DOM_NOT_SUPPORTED_ERR;
         }
         if (hasCodecs &&
             DecoderTraits::CanHandleCodecsType(mimeTypeUTF8.get(),
                                                codecs) == CANPLAY_NO) {
           return NS_ERROR_DOM_INVALID_STATE_ERR;
         }
         return NS_OK;
--- a/mobile/android/base/AndroidManifest.xml.in
+++ b/mobile/android/base/AndroidManifest.xml.in
@@ -304,17 +304,17 @@
 
         <receiver android:name="org.mozilla.gecko.webapp.TaskKiller">
           <intent-filter>
              <action android:name="org.mozilla.webapp.TASK_REMOVED" />
              <category android:name="android.intent.category.DEFAULT" />
           </intent-filter>
         </receiver>
 
-        <receiver android:name="org.mozilla.gecko.RestrictionProvider">
+        <receiver android:name="org.mozilla.gecko.restrictions.RestrictionProvider">
           <intent-filter>
             <action android:name="android.intent.action.GET_RESTRICTION_ENTRIES" />
           </intent-filter>
         </receiver>
 
         <!-- Activity used for launching non-privileged WebApps via a URL -->
         <activity android:name="org.mozilla.gecko.Webapp"
                   android:label="@string/webapp_generic_name"
--- a/mobile/android/base/BrowserApp.java
+++ b/mobile/android/base/BrowserApp.java
@@ -50,16 +50,17 @@ import org.mozilla.gecko.menu.GeckoMenuI
 import org.mozilla.gecko.mozglue.ContextUtils;
 import org.mozilla.gecko.mozglue.ContextUtils.SafeIntent;
 import org.mozilla.gecko.mozglue.RobocopTarget;
 import org.mozilla.gecko.overlays.ui.ShareDialog;
 import org.mozilla.gecko.preferences.ClearOnShutdownPref;
 import org.mozilla.gecko.preferences.GeckoPreferences;
 import org.mozilla.gecko.prompts.Prompt;
 import org.mozilla.gecko.prompts.PromptListItem;
+import org.mozilla.gecko.restrictions.Restriction;
 import org.mozilla.gecko.sync.Utils;
 import org.mozilla.gecko.sync.repositories.android.FennecTabsRepository;
 import org.mozilla.gecko.sync.setup.SyncAccounts;
 import org.mozilla.gecko.tabqueue.TabQueueHelper;
 import org.mozilla.gecko.tabqueue.TabQueuePrompt;
 import org.mozilla.gecko.tabs.TabHistoryController;
 import org.mozilla.gecko.tabs.TabHistoryController.OnShowTabHistory;
 import org.mozilla.gecko.tabs.TabHistoryFragment;
@@ -1970,17 +1971,17 @@ public class BrowserApp extends GeckoApp
                                 getSupportFragmentManager().beginTransaction().disallowAddToBackStack().add(mpm, tag).commit();
                             }
                         } catch (Exception ex) {
                             Log.e(LOGTAG, "Error initializing media manager", ex);
                         }
                     }
                 }
 
-                if (AppConstants.MOZ_STUMBLER_BUILD_TIME_ENABLED) {
+                if (AppConstants.MOZ_STUMBLER_BUILD_TIME_ENABLED && RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_LOCATION_SERVICE)) {
                     // Start (this acts as ping if started already) the stumbler lib; if the stumbler has queued data it will upload it.
                     // Stumbler operates on its own thread, and startup impact is further minimized by delaying work (such as upload) a few seconds.
                     // Avoid any potential startup CPU/thread contention by delaying the pref broadcast.
                     final long oneSecondInMillis = 1000;
                     ThreadUtils.getBackgroundHandler().postDelayed(new Runnable() {
                         @Override
                         public void run() {
                              GeckoPreferences.broadcastStumblerPref(BrowserApp.this);
@@ -2629,16 +2630,20 @@ public class BrowserApp extends GeckoApp
                 break;
 
             default:
                 super.onActivityResult(requestCode, resultCode, data);
         }
     }
 
     private void showFirstrunPager() {
+        // Do not show first run if we're in an Android Restricted Profile
+        if (RestrictedProfiles.isUserRestricted(this)) {
+            return;
+        }
         if (mFirstrunPane == null) {
             final ViewStub firstrunPagerStub = (ViewStub) findViewById(R.id.firstrun_pager_stub);
             mFirstrunPane = (FirstrunPane) firstrunPagerStub.inflate();
             mFirstrunPane.load(getSupportFragmentManager());
             mFirstrunPane.registerOnFinishListener(new FirstrunPane.OnFinishListener() {
                 @Override
                 public void onFinish() {
                     BrowserApp.this.mFirstrunPane = null;
@@ -2685,17 +2690,17 @@ public class BrowserApp extends GeckoApp
                     final Tab currentTab = Tabs.getInstance().getSelectedTab();
                     if (currentTab != null) {
                         currentTab.setMostRecentHomePanel(panelId);
                     }
                 }
             });
 
             // Don't show the banner in guest mode.
-            if (!getProfile().inGuestMode()) {
+            if (!RestrictedProfiles.isUserRestricted()) {
                 final ViewStub homeBannerStub = (ViewStub) findViewById(R.id.home_banner_stub);
                 final HomeBanner homeBanner = (HomeBanner) homeBannerStub.inflate();
                 mHomePager.setBanner(homeBanner);
 
                 // Remove the banner from the view hierarchy if it is dismissed.
                 homeBanner.setOnDismissListener(new HomeBanner.OnDismissListener() {
                     @Override
                     public void onDismiss() {
@@ -3281,22 +3286,22 @@ public class BrowserApp extends GeckoApp
         if (AboutPages.isAboutReader(url)) {
             String urlFromReader = ReaderModeUtils.getUrlFromAboutReader(url);
             if (urlFromReader != null) {
                 url = urlFromReader;
             }
         }
 
         // Disable share menuitem for about:, chrome:, file:, and resource: URIs
-        final boolean shareVisible = RestrictedProfiles.isAllowed(this, RestrictedProfiles.Restriction.DISALLOW_SHARE);
+        final boolean shareVisible = RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_SHARE);
         share.setVisible(shareVisible);
         final boolean shareEnabled = StringUtils.isShareableUrl(url) && shareVisible;
         share.setEnabled(shareEnabled);
-        MenuUtils.safeSetEnabled(aMenu, R.id.addons, RestrictedProfiles.isAllowed(this, RestrictedProfiles.Restriction.DISALLOW_INSTALL_EXTENSION));
-        MenuUtils.safeSetEnabled(aMenu, R.id.downloads, RestrictedProfiles.isAllowed(this, RestrictedProfiles.Restriction.DISALLOW_DOWNLOADS));
+        MenuUtils.safeSetEnabled(aMenu, R.id.addons, RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_INSTALL_EXTENSION));
+        MenuUtils.safeSetEnabled(aMenu, R.id.downloads, RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_DOWNLOADS));
 
         // NOTE: Use MenuUtils.safeSetEnabled because some actions might
         // be on the BrowserToolbar context menu.
         if (Versions.feature11Plus) {
             MenuUtils.safeSetEnabled(aMenu, R.id.page, !isAboutHome(tab));
         }
         MenuUtils.safeSetEnabled(aMenu, R.id.subscribe, tab.hasFeeds());
         MenuUtils.safeSetEnabled(aMenu, R.id.add_search_engine, tab.hasOpenSearch());
@@ -3351,19 +3356,22 @@ public class BrowserApp extends GeckoApp
                             shareIntent.putExtra("share_screenshot_uri", Uri.parse(outFile.getPath()));
                         }
                     }
                 }
             }
         }
 
         // Hide tools menu if restriction is active
-        final boolean toolsVisible = RestrictedProfiles.isAllowed(this, RestrictedProfiles.Restriction.DISALLOW_TOOLS_MENU);
+        final boolean toolsVisible = RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_TOOLS_MENU);
         MenuUtils.safeSetVisible(aMenu, R.id.tools, toolsVisible);
 
+        final boolean privateTabVisible = RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_PRIVATE_BROWSING);
+        MenuUtils.safeSetVisible(aMenu, R.id.new_private_tab, privateTabVisible);
+
         // Disable save as PDF for about:home and xul pages.
         saveAsPDF.setEnabled(!(isAboutHome(tab) ||
                                tab.getContentType().equals("application/vnd.mozilla.xul+xml") ||
                                tab.getContentType().startsWith("video/")));
 
         // Disable find in page for about:home, since it won't work on Java content.
         findInPage.setEnabled(!isAboutHome(tab));
 
--- a/mobile/android/base/GeckoAppShell.java
+++ b/mobile/android/base/GeckoAppShell.java
@@ -1204,22 +1204,16 @@ public class GeckoAppShell
                                    final String action,
                                    final String title) {
 
         // The resultant chooser can return non-exported activities in 4.1 and earlier.
         // https://code.google.com/p/android/issues/detail?id=29535
         final Intent intent = getOpenURIIntentInner(context, targetURI, mimeType, action, title);
 
         if (intent != null) {
-            // Setting category on file:// URIs breaks about:downloads (Bug 1176018)
-            if (!targetURI.startsWith("file:")) {
-                // Only handle applications which can accept arbitrary data from a browser.
-                intent.addCategory(Intent.CATEGORY_BROWSABLE);
-            }
-
             // Some applications use this field to return to the same browser after processing the
             // Intent. While there is some danger (e.g. denial of service), other major browsers already
             // use it and so it's the norm.
             intent.putExtra(Browser.EXTRA_APPLICATION_ID, AppConstants.ANDROID_PACKAGE_NAME);
         }
 
         return intent;
     }
@@ -1240,25 +1234,28 @@ public class GeckoAppShell
             return intent;
         }
 
         if (!isUriSafeForScheme(uri)) {
             return null;
         }
 
         final String scheme = uri.getScheme();
-        if ("intent".equals(scheme)) {
+        if ("intent".equals(scheme) || "android-app".equals(scheme)) {
             final Intent intent;
             try {
-                intent = Intent.parseUri(targetURI, Intent.URI_INTENT_SCHEME);
+                intent = Intent.parseUri(targetURI, 0);
             } catch (final URISyntaxException e) {
                 Log.e(LOGTAG, "Unable to parse URI - " + e);
                 return null;
             }
 
+            // Only open applications which can accept arbitrary data from a browser.
+            intent.addCategory(Intent.CATEGORY_BROWSABLE);
+
             // Prevent site from explicitly opening our internal activities, which can leak data.
             intent.setComponent(null);
             nullIntentSelector(intent);
 
             return intent;
         }
 
         // Compute our most likely intent, then check to see if there are any
--- a/mobile/android/base/RestrictedProfiles.java
+++ b/mobile/android/base/RestrictedProfiles.java
@@ -1,322 +1,124 @@
 /* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
  * 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/. */
 
 package org.mozilla.gecko;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-import org.json.JSONException;
-import org.json.JSONObject;
 import org.mozilla.gecko.AppConstants.Versions;
 import org.mozilla.gecko.mozglue.RobocopTarget;
 import org.mozilla.gecko.mozglue.generatorannotations.WrapElementForJNI;
+import org.mozilla.gecko.restrictions.DefaultConfiguration;
+import org.mozilla.gecko.restrictions.GuestProfileConfiguration;
+import org.mozilla.gecko.restrictions.RestrictedProfileConfiguration;
+import org.mozilla.gecko.restrictions.Restriction;
+import org.mozilla.gecko.restrictions.RestrictionConfiguration;
+
 import android.annotation.TargetApi;
 import android.content.Context;
-import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.UserManager;
 import android.util.Log;
 
 @RobocopTarget
 public class RestrictedProfiles {
     private static final String LOGTAG = "GeckoRestrictedProfiles";
 
-    private static volatile Boolean inGuest = null;
-
-    @SuppressWarnings("serial")
-    private static final List<String> BANNED_SCHEMES = new ArrayList<String>() {{
-        add("file");
-        add("chrome");
-        add("resource");
-        add("jar");
-        add("wyciwyg");
-    }};
-
-    private static final String ABOUT_ADDONS = "about:addons";
+    private static RestrictionConfiguration configuration;
 
-    /**
-     * This is a hack to allow non-GeckoApp activities to safely call into
-     * RestrictedProfiles without reworking this class or GeckoProfile.
-     *
-     * It can be removed after Bug 1077590 lands.
-     */
-    public static void initWithProfile(GeckoProfile profile) {
-        inGuest = profile.inGuestMode();
-    }
-
-    private static boolean getInGuest() {
-        if (inGuest == null) {
-            inGuest = GeckoAppShell.getGeckoInterface().getProfile().inGuestMode();
+    private static RestrictionConfiguration getConfiguration(Context context) {
+        if (configuration == null) {
+            configuration = createConfiguration(context);
         }
 
-        return inGuest;
+        return configuration;
     }
 
-    @SuppressWarnings("serial")
-    private static final List<String> BANNED_URLS = new ArrayList<String>() {{
-        add("about:config");
-    }};
-
-    /* This is a list of things we can restrict you from doing. Some of these are reflected in Android UserManager constants.
-     * Others are specific to us.
-     * These constants should be in sync with the ones from toolkit/components/parentalcontrols/nsIParentalControlServices.idl
-     */
-    public enum Restriction {
-        // These restrictions have no strings assigned because they are only used in guest mode and not shown in the
-        // restricted profiles settings UI
-        DISALLOW_DOWNLOADS(1, "no_download_files", 0, 0),
-        DISALLOW_BROWSE_FILES(4, "no_browse_files", 0, 0),
-        DISALLOW_SHARE(5, "no_share", 0, 0),
-        DISALLOW_BOOKMARK(6, "no_bookmark", 0, 0),
-        DISALLOW_ADD_CONTACTS(7, "no_add_contacts", 0, 0),
-        DISALLOW_SET_IMAGE(8, "no_set_image", 0, 0),
-        DISALLOW_MODIFY_ACCOUNTS(9, "no_modify_accounts", 0, 0), // UserManager.DISALLOW_MODIFY_ACCOUNTS
-        DISALLOW_REMOTE_DEBUGGING(10, "no_remote_debugging", 0, 0),
-
-        // These restrictions are used for restricted profiles and therefore need to have strings assigned for the profile
-        // settings UI.
-        DISALLOW_INSTALL_EXTENSION(2, "no_install_extensions", R.string.restriction_disallow_addons_title, R.string.restriction_disallow_addons_description),
-        DISALLOW_INSTALL_APPS(3, "no_install_apps", R.string.restriction_disallow_apps_title, R.string.restriction_disallow_apps_description), // UserManager.DISALLOW_INSTALL_APPS
-        DISALLOW_IMPORT_SETTINGS(11, "no_report_site_issue", R.string.restriction_disallow_import_settings_title, R.string.restriction_disallow_import_settings_description),
-        DISALLOW_TOOLS_MENU(12, "no_tools_menu", R.string.restriction_disallow_tools_menu_title, R.string.restriction_disallow_tools_menu_description),
-        DISALLOW_REPORT_SITE_ISSUE(13, "no_report_site_issue", R.string.restriction_disallow_report_site_issue_title, R.string.restriction_disallow_report_site_issue_description);
-
-        public final int id;
-        public final String name;
-        public final int titleResource;
-        public final int descriptionResource;
-
-        Restriction(final int id, final String name, int titleResource, int descriptionResource) {
-            this.id = id;
-            this.name = name;
-            this.titleResource = titleResource;
-            this.descriptionResource = descriptionResource;
+    public static synchronized RestrictionConfiguration createConfiguration(Context context) {
+        if (configuration != null) {
+            // This method is synchronized and another thread might already have created the configuration.
+            return configuration;
         }
 
-        public String getTitle(Context context) {
-            if (titleResource == 0) {
-                return toString();
-            }
-
-            return context.getResources().getString(titleResource);
-        }
-
-        public String getDescription(Context context) {
-            if (descriptionResource == 0) {
-                return name;
-            }
-
-            return context.getResources().getString(descriptionResource);
+        if (isGuestProfile()) {
+            return new GuestProfileConfiguration();
+        } else if(isRestrictedProfile(context)) {
+            return new RestrictedProfileConfiguration(context);
+        } else {
+            return new DefaultConfiguration();
         }
     }
 
-    static List<Restriction> GUEST_RESTRICTIONS = Arrays.asList(
-        Restriction.DISALLOW_DOWNLOADS,
-        Restriction.DISALLOW_INSTALL_EXTENSION,
-        Restriction.DISALLOW_INSTALL_APPS,
-        Restriction.DISALLOW_BROWSE_FILES,
-        Restriction.DISALLOW_SHARE,
-        Restriction.DISALLOW_BOOKMARK,
-        Restriction.DISALLOW_ADD_CONTACTS,
-        Restriction.DISALLOW_SET_IMAGE,
-        Restriction.DISALLOW_MODIFY_ACCOUNTS,
-        Restriction.DISALLOW_REMOTE_DEBUGGING,
-        Restriction.DISALLOW_IMPORT_SETTINGS
-    );
+    private static boolean isGuestProfile() {
+        return GeckoAppShell.getGeckoInterface().getProfile().inGuestMode();
+    }
+
+    @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;
+        }
 
-    // Restricted profiles will automatically have these restrictions by default
-    static List<Restriction> RESTRICTED_PROFILE_RESTRICTIONS = Arrays.asList(
-        Restriction.DISALLOW_INSTALL_EXTENSION,
-        Restriction.DISALLOW_INSTALL_APPS,
-        Restriction.DISALLOW_TOOLS_MENU,
-        Restriction.DISALLOW_REPORT_SITE_ISSUE,
-        Restriction.DISALLOW_IMPORT_SETTINGS
-    );
+        final UserManager mgr = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        Bundle restrictions = mgr.getApplicationRestrictions(context.getPackageName());
+
+        for (String key : restrictions.keySet()) {
+            if (restrictions.getBoolean(key)) {
+                // At least one restriction is enabled -> We are a restricted profile
+                return true;
+            }
+        }
+
+        return false;
+    }
 
     private static Restriction geckoActionToRestriction(int action) {
         for (Restriction rest : Restriction.values()) {
             if (rest.id == action) {
                 return rest;
             }
         }
 
         throw new IllegalArgumentException("Unknown action " + action);
     }
 
-    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
-    private static Bundle getRestrictions(final Context context) {
-        final UserManager mgr = (UserManager) context.getSystemService(Context.USER_SERVICE);
-        return mgr.getUserRestrictions();
-    }
-
-    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
-    private static Bundle getAppRestrictions(final Context context) {
-        final UserManager mgr = (UserManager) context.getSystemService(Context.USER_SERVICE);
-        return mgr.getApplicationRestrictions(context.getPackageName());
-    }
-
-    /**
-     * This method does the system version check for you.
-     *
-     * Returns false if the system doesn't support restrictions,
-     * or the provided value is not present in the set of user
-     * restrictions.
-     *
-     * Returns true otherwise.
-     */
-    private static boolean getRestriction(final Context context, final Restriction restriction) {
-        // Early versions don't support restrictions at all,
-        // so no action can be restricted.
-        if (Versions.preJBMR2) {
-            return false;
-        }
-
-        if (!isUserRestricted(context)) {
-            return false;
-        }
-
-        return getAppRestrictions(context).getBoolean(restriction.name, RESTRICTED_PROFILE_RESTRICTIONS.contains(restriction));
-    }
-
     private static boolean canLoadUrl(final Context context, final String url) {
-        // Null URLs are always permitted.
-        if (url == null) {
-            return true;
-        }
-
-        try {
-            // If we're not in guest mode, and the system restriction isn't in place, everything is allowed.
-            if (!getInGuest() &&
-                !getRestriction(context, Restriction.DISALLOW_BROWSE_FILES)) {
-                return true;
-            }
-        } catch (IllegalArgumentException ex) {
-            Log.i(LOGTAG, "Invalid action", ex);
-        }
-
-        final Uri u = Uri.parse(url);
-        final String scheme = u.getScheme();
-        if (BANNED_SCHEMES.contains(scheme)) {
-            return false;
-        }
-
-        for (String banned : BANNED_URLS) {
-            if (url.startsWith(banned)) {
-                return false;
-            }
-        }
-
-        // TODO: The UserManager should support blacklisting URLs by the device owner.
-        return true;
+        return getConfiguration(context).canLoadUrl(url);
     }
 
     @WrapElementForJNI
     public static boolean isUserRestricted() {
         return isUserRestricted(GeckoAppShell.getContext());
     }
 
     public static boolean isUserRestricted(final Context context) {
-        // Guest mode is supported in all Android versions.
-        if (getInGuest()) {
-            return true;
-        }
-
-        if (Versions.preJBMR2) {
-            return false;
-        }
-
-        Bundle restrictions = getRestrictions(context);
-        for (String key : restrictions.keySet()) {
-            if (restrictions.getBoolean(key)) {
-                // At least one restriction is enabled -> We are a restricted profile
-                return true;
-            }
-        }
-
-        return false;
+        return getConfiguration(context).isRestricted();
     }
 
-    public static boolean isAllowed(final Context context, final Restriction action) {
-        return isAllowed(context, action, null);
+    public static boolean isAllowed(final Context context, final Restriction restriction) {
+        return getConfiguration(context).isAllowed(restriction);
     }
 
     @WrapElementForJNI
     public static boolean isAllowed(int action, String url) {
-        return isAllowed(GeckoAppShell.getContext(), action, url);
-    }
-
-    private static boolean isAllowed(final Context context, int action, String url) {
         final Restriction restriction;
         try {
             restriction = geckoActionToRestriction(action);
         } catch (IllegalArgumentException ex) {
             // Unknown actions represent a coding error, so we
             // refuse the action and log.
             Log.e(LOGTAG, "Unknown action " + action + "; check calling code.");
             return false;
         }
 
-        return isAllowed(context, restriction, url);
-    }
-
-    private static boolean isAllowed(final Context context, final Restriction restriction, String url) {
-        if (getInGuest()) {
-            if (Restriction.DISALLOW_BROWSE_FILES == restriction) {
-                return canLoadUrl(context, url);
-            }
-
-            return !GUEST_RESTRICTIONS.contains(restriction);
-        }
-
-        // Disallow browsing about:addons if 'disallow install extension' restriction is enforced
-        if (restriction == Restriction.DISALLOW_BROWSE_FILES
-            && url.toLowerCase().startsWith(ABOUT_ADDONS)
-            && !isAllowed(context, Restriction.DISALLOW_INSTALL_EXTENSION)) {
-            return false;
-        }
-
-        // NOTE: Restrictions hold the opposite intention, so we need to flip it.
-        return !getRestriction(context, restriction);
-    }
-
-    @WrapElementForJNI
-    public static String getUserRestrictions() {
-        return getUserRestrictions(GeckoAppShell.getContext());
-    }
+        final Context context = GeckoAppShell.getContext();
 
-    private static String getUserRestrictions(final Context context) {
-        // Guest mode is supported in all Android versions
-        if (getInGuest()) {
-            StringBuilder builder = new StringBuilder("{ ");
-
-            for (Restriction restriction : Restriction.values()) {
-                builder.append("\"" + restriction.name + "\": true, ");
-            }
-
-            builder.append(" }");
-            return builder.toString();
+        if (Restriction.DISALLOW_BROWSE_FILES == restriction) {
+            return canLoadUrl(context, url);
+        } else {
+            return isAllowed(context, restriction);
         }
-
-        if (Versions.preJBMR2) {
-            return "{}";
-        }
-
-        final JSONObject json = new JSONObject();
-        final Bundle restrictions = getRestrictions(context);
-        final Set<String> keys = restrictions.keySet();
-
-        for (String key : keys) {
-            try {
-                json.put(key, restrictions.get(key));
-            } catch (JSONException e) {
-            }
-        }
-
-        return json.toString();
     }
 }
deleted file mode 100644
--- a/mobile/android/base/RestrictionProvider.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko;
-
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.RestrictionEntry;
-import android.os.Build;
-import android.os.Bundle;
-import android.util.Log;
-
-import java.util.ArrayList;
-
-/**
- * Broadcast receiver providing supported restrictions to the system.
- */
-@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
-public class RestrictionProvider extends BroadcastReceiver {
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (AppConstants.Versions.preJBMR2) {
-            // This broadcast does not make any sense prior to Jelly Bean MR2.
-            return;
-        }
-
-        final PendingResult result = goAsync();
-
-        new Thread() {
-            @Override
-            public void run() {
-                final Bundle oldRestrictions = intent.getBundleExtra(Intent.EXTRA_RESTRICTIONS_BUNDLE);
-                final Bundle extras = new Bundle();
-
-                ArrayList<RestrictionEntry> entries = initRestrictions(context, oldRestrictions);
-                extras.putParcelableArrayList(Intent.EXTRA_RESTRICTIONS_LIST, entries);
-
-                result.setResult(Activity.RESULT_OK, null, extras);
-                result.finish();
-            }
-        }.start();
-    }
-
-    private ArrayList<RestrictionEntry> initRestrictions(Context context, Bundle oldRestrictions) {
-        ArrayList<RestrictionEntry> entries = new ArrayList<RestrictionEntry>();
-
-        for (RestrictedProfiles.Restriction restriction : RestrictedProfiles.RESTRICTED_PROFILE_RESTRICTIONS) {
-            RestrictionEntry entry = createRestrictionEntryWithDefaultValue(context, restriction,
-                    oldRestrictions.getBoolean(restriction.name, true));
-            entries.add(entry);
-        }
-
-        return entries;
-    }
-
-    private RestrictionEntry createRestrictionEntryWithDefaultValue(Context context, RestrictedProfiles.Restriction restriction, boolean defaultValue) {
-        RestrictionEntry entry = new RestrictionEntry(restriction.name, defaultValue);
-
-        entry.setTitle(restriction.getTitle(context));
-        entry.setDescription(restriction.getDescription(context));
-
-        return entry;
-    }
-}
--- a/mobile/android/base/home/HomeConfigPrefsBackend.java
+++ b/mobile/android/base/home/HomeConfigPrefsBackend.java
@@ -16,16 +16,17 @@ import org.json.JSONException;
 import org.json.JSONObject;
 import org.mozilla.gecko.GeckoSharedPrefs;
 import org.mozilla.gecko.RestrictedProfiles;
 import org.mozilla.gecko.home.HomeConfig.HomeConfigBackend;
 import org.mozilla.gecko.home.HomeConfig.OnReloadListener;
 import org.mozilla.gecko.home.HomeConfig.PanelConfig;
 import org.mozilla.gecko.home.HomeConfig.PanelType;
 import org.mozilla.gecko.home.HomeConfig.State;
+import org.mozilla.gecko.restrictions.Restriction;
 import org.mozilla.gecko.util.HardwareUtils;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.SharedPreferences;
 import android.support.v4.content.LocalBroadcastManager;
@@ -75,17 +76,17 @@ class HomeConfigPrefsBackend implements 
         panelConfigs.add(createBuiltinPanelConfig(mContext, PanelType.BOOKMARKS));
         panelConfigs.add(createBuiltinPanelConfig(mContext, PanelType.READING_LIST));
 
         final PanelConfig historyEntry = createBuiltinPanelConfig(mContext, PanelType.HISTORY);
         final PanelConfig recentTabsEntry = createBuiltinPanelConfig(mContext, PanelType.RECENT_TABS);
 
         // We disable Synced Tabs for guest mode profiles.
         final PanelConfig remoteTabsEntry;
-        if (RestrictedProfiles.isAllowed(mContext, RestrictedProfiles.Restriction.DISALLOW_MODIFY_ACCOUNTS)) {
+        if (RestrictedProfiles.isAllowed(mContext, Restriction.DISALLOW_MODIFY_ACCOUNTS)) {
             remoteTabsEntry = createBuiltinPanelConfig(mContext, PanelType.REMOTE_TABS);
         } else {
             remoteTabsEntry = null;
         }
 
         panelConfigs.add(historyEntry);
         panelConfigs.add(recentTabsEntry);
         if (remoteTabsEntry != null) {
--- a/mobile/android/base/home/HomeFragment.java
+++ b/mobile/android/base/home/HomeFragment.java
@@ -2,33 +2,33 @@
  * 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/. */
 
 package org.mozilla.gecko.home;
 
 import java.util.EnumSet;
 
-import org.json.JSONException;
-import org.json.JSONObject;
 import org.mozilla.gecko.EditBookmarkDialog;
 import org.mozilla.gecko.GeckoAppShell;
 import org.mozilla.gecko.GeckoEvent;
 import org.mozilla.gecko.GeckoProfile;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.ReaderModeUtils;
+import org.mozilla.gecko.RestrictedProfiles;
 import org.mozilla.gecko.Telemetry;
 import org.mozilla.gecko.TelemetryContract;
 import org.mozilla.gecko.db.BrowserDB;
 import org.mozilla.gecko.db.BrowserContract.SuggestedSites;
 import org.mozilla.gecko.favicons.Favicons;
 import org.mozilla.gecko.home.HomeContextMenuInfo.RemoveItemType;
 import org.mozilla.gecko.home.HomePager.OnUrlOpenInBackgroundListener;
 import org.mozilla.gecko.home.HomePager.OnUrlOpenListener;
 import org.mozilla.gecko.home.TopSitesGridView.TopSitesGridContextMenuInfo;
+import org.mozilla.gecko.restrictions.Restriction;
 import org.mozilla.gecko.util.Clipboard;
 import org.mozilla.gecko.util.StringUtils;
 import org.mozilla.gecko.util.ThreadUtils;
 import org.mozilla.gecko.util.UIAsyncTask;
 
 import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -146,16 +146,20 @@ public abstract class HomeFragment exten
         // Hide the "Remove" menuitem if this item not removable.
         if (!info.canRemove()) {
             menu.findItem(R.id.home_remove).setVisible(false);
         }
 
         if (!StringUtils.isShareableUrl(info.url) || GeckoProfile.get(getActivity()).inGuestMode()) {
             menu.findItem(R.id.home_share).setVisible(false);
         }
+
+        if (!RestrictedProfiles.isAllowed(view.getContext(), Restriction.DISALLOW_PRIVATE_BROWSING)) {
+            menu.findItem(R.id.home_open_private_tab).setVisible(false);
+        }
     }
 
     @Override
     public boolean onContextItemSelected(MenuItem item) {
         // onContextItemSelected() is first dispatched to the activity and
         // then dispatched to its fragments. Since fragments cannot "override"
         // menu item selection handling, it's better to avoid menu id collisions
         // between the activity and its fragments.
--- a/mobile/android/base/home/RemoteTabsSplitPlaneFragment.java
+++ b/mobile/android/base/home/RemoteTabsSplitPlaneFragment.java
@@ -1,18 +1,20 @@
 package org.mozilla.gecko.home;
 
 import android.content.Context;
 import android.database.Cursor;
 import android.database.DataSetObserver;
 import android.os.Bundle;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewStub;
+import android.widget.AbsListView;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.ImageView;
 import android.widget.ListAdapter;
 import android.widget.TextView;
 
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.RemoteClientsDialogFragment;
@@ -192,16 +194,20 @@ public class RemoteTabsSplitPlaneFragmen
         mClientList.setAdapter(mClientsAdapter);
 
         mObserver = new RemoteTabDataSetObserver();
         mAdapter.registerDataSetObserver(mObserver);
 
         // Now the adapter is wrapped; we can remove our footer view.
         mClientList.removeFooterView(mFooterView);
 
+        // Register touch handler to conditionally enable swipe refresh layout.
+        mClientList.setOnTouchListener(new ListTouchListener(mClientList));
+        mTabList.setOnTouchListener(new ListTouchListener(mTabList));
+
         // Create callbacks before the initial loader is started
         mCursorLoaderCallbacks = new CursorLoaderCallbacks();
         loadIfVisible();
     }
 
     @Override
     protected void updateUiFromClients(List<RemoteClient> clients, List<RemoteClient> hiddenClients) {
         if (getView() == null) {
@@ -357,9 +363,40 @@ public class RemoteTabsSplitPlaneFragmen
 
             // Update the background based on the state of the selected client.
             final RemoteClient client = getItem(position);
             final boolean isSelected = client.guid.equals(sState.selectedClient);
             adapter.updateClientsItemView(isSelected, context, view, getItem(position));
             return view;
         }
     }
+
+    /**
+     * OnTouchListener implementation for ListView that enables swipe to refresh on the touch down event iff list cannot scroll up.
+     * This implementation does not consume the <code>MotionEvent</code>.
+     */
+    private class ListTouchListener implements View.OnTouchListener {
+        private final AbsListView listView;
+
+        public ListTouchListener(AbsListView listView) {
+            this.listView = listView;
+        }
+
+        @Override
+        public boolean onTouch(View v, MotionEvent event) {
+            final int action = event.getAction();
+            switch (action) {
+                case MotionEvent.ACTION_DOWN:
+                    // Enable swipe to refresh iff the first item is visible and is at the top.
+                    mRefreshLayout.setEnabled(listView.getCount() <= 0
+                    	    || (listView.getFirstVisiblePosition() <= 0 && listView.getChildAt(0).getTop() >= 0));
+                    break;
+                case MotionEvent.ACTION_CANCEL:
+                case MotionEvent.ACTION_UP:
+                    mRefreshLayout.setEnabled(true);
+                    break;
+            }
+
+            // Event is not handled here, it will be consumed in enclosing SwipeRefreshLayout.
+            return false;
+        }
+    }
 }
--- a/mobile/android/base/home/TopSitesPanel.java
+++ b/mobile/android/base/home/TopSitesPanel.java
@@ -13,31 +13,33 @@ import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
 import org.mozilla.gecko.GeckoProfile;
 import org.mozilla.gecko.Locales;
 import org.mozilla.gecko.R;
+import org.mozilla.gecko.RestrictedProfiles;
 import org.mozilla.gecko.Tab;
 import org.mozilla.gecko.Tabs;
 import org.mozilla.gecko.Telemetry;
 import org.mozilla.gecko.TelemetryContract;
 import org.mozilla.gecko.db.BrowserContract.Thumbnails;
 import org.mozilla.gecko.db.BrowserContract.TopSites;
 import org.mozilla.gecko.db.BrowserDB;
 import org.mozilla.gecko.favicons.Favicons;
 import org.mozilla.gecko.favicons.OnFaviconLoadedListener;
 import org.mozilla.gecko.gfx.BitmapUtils;
 import org.mozilla.gecko.home.HomeContextMenuInfo.RemoveItemType;
 import org.mozilla.gecko.home.HomePager.OnUrlOpenListener;
 import org.mozilla.gecko.home.PinSiteDialog.OnSiteSelectedListener;
 import org.mozilla.gecko.home.TopSitesGridView.OnEditPinnedSiteListener;
 import org.mozilla.gecko.home.TopSitesGridView.TopSitesGridContextMenuInfo;
+import org.mozilla.gecko.restrictions.Restriction;
 import org.mozilla.gecko.tiles.TilesRecorder;
 import org.mozilla.gecko.tiles.Tile;
 import org.mozilla.gecko.util.StringUtils;
 import org.mozilla.gecko.util.ThreadUtils;
 
 import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -364,16 +366,20 @@ public class TopSitesPanel extends HomeF
             menu.findItem(R.id.home_open_private_tab).setVisible(false);
             menu.findItem(R.id.top_sites_pin).setVisible(false);
             menu.findItem(R.id.top_sites_unpin).setVisible(false);
         }
 
         if (!StringUtils.isShareableUrl(info.url) || GeckoProfile.get(getActivity()).inGuestMode()) {
             menu.findItem(R.id.home_share).setVisible(false);
         }
+
+        if (!RestrictedProfiles.isAllowed(view.getContext(), Restriction.DISALLOW_PRIVATE_BROWSING)) {
+            menu.findItem(R.id.home_open_private_tab).setVisible(false);
+        }
     }
 
     @Override
     public boolean onContextItemSelected(MenuItem item) {
         if (super.onContextItemSelected(item)) {
             // HomeFragment was able to handle to selected item.
             return true;
         }
--- a/mobile/android/base/locales/en-US/android_strings.dtd
+++ b/mobile/android/base/locales/en-US/android_strings.dtd
@@ -688,9 +688,16 @@ just addresses the organization to follo
 <!ENTITY restriction_disallow_report_site_issue_title "Disallow \'Report site issue\'">
 <!ENTITY restriction_disallow_report_site_issue_description "Hide \'Report site issue\' menu item.">
 <!ENTITY restriction_disallow_import_settings_title "Disallow importing settings">
 <!ENTITY restriction_disallow_import_settings_description "Do not allow to import settings from other system browsers.">
 <!ENTITY restriction_disallow_addons_title "Disallow add-ons">
 <!ENTITY restriction_disallow_addons_description "Disallow installation of add-ons.">
 <!ENTITY restriction_disallow_apps_title "Disallow apps">
 <!ENTITY restriction_disallow_apps_description "Disallow installing apps from Firefox Marketplace.">
-
+<!ENTITY restriction_disallow_devtools_title "Disallow developer tools">
+<!ENTITY restriction_disallow_devtools_description "Disallow usage of developer tools.">
+<!ENTITY restriction_disallow_customize_home_title "Disallow customizing home">
+<!ENTITY restriction_disallow_customize_home_description "Disallow customizing home panels.">
+<!ENTITY restriction_disallow_private_browsing_title "Disallow private browsing">
+<!ENTITY restriction_disallow_private_browsing_description "Disallow private browsing mode.">
+<!ENTITY restriction_disallow_location_services_title "Disallow location services">
+<!ENTITY restriction_disallow_location_services_description "Disallow sharing of location data to improve geolocation service.">
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -429,17 +429,22 @@ gbjar.sources += [
     'prompts/PromptService.java',
     'prompts/TabInput.java',
     'ReaderModeUtils.java',
     'ReadingListHelper.java',
     'RemoteClientsDialogFragment.java',
     'RemoteTabsExpandableListAdapter.java',
     'Restarter.java',
     'RestrictedProfiles.java',
-    'RestrictionProvider.java',
+    'restrictions/DefaultConfiguration.java',
+    'restrictions/GuestProfileConfiguration.java',
+    'restrictions/RestrictedProfileConfiguration.java',
+    'restrictions/Restriction.java',
+    'restrictions/RestrictionConfiguration.java',
+    'restrictions/RestrictionProvider.java',
     'ServiceNotificationClient.java',
     'SessionParser.java',
     'SharedPreferencesHelper.java',
     'SiteIdentity.java',
     'SmsManager.java',
     'sqlite/ByteBufferInputStream.java',
     'sqlite/MatrixBlobCursor.java',
     'sqlite/SQLiteBridge.java',
--- a/mobile/android/base/preferences/AndroidImportPreference.java
+++ b/mobile/android/base/preferences/AndroidImportPreference.java
@@ -4,17 +4,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.preferences;
 
 import org.mozilla.gecko.AppConstants.Versions;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.util.ThreadUtils;
 import org.mozilla.gecko.RestrictedProfiles;
-import org.mozilla.gecko.RestrictedProfiles.Restriction;
+import org.mozilla.gecko.restrictions.Restriction;
 
 import java.util.Set;
 
 import android.app.ProgressDialog;
 import android.content.Context;
 import android.preference.Preference;
 import android.util.AttributeSet;
 import android.util.Log;
--- a/mobile/android/base/preferences/GeckoPreferences.java
+++ b/mobile/android/base/preferences/GeckoPreferences.java
@@ -2,16 +2,17 @@
  * 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/. */
 
 package org.mozilla.gecko.preferences;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
 import android.os.Build;
 
 import org.json.JSONObject;
 import org.mozilla.gecko.AppConstants;
@@ -32,16 +33,17 @@ import org.mozilla.gecko.PrefsHelper;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.RestrictedProfiles;
 import org.mozilla.gecko.Telemetry;
 import org.mozilla.gecko.TelemetryContract;
 import org.mozilla.gecko.TelemetryContract.Method;
 import org.mozilla.gecko.background.common.GlobalConstants;
 import org.mozilla.gecko.background.healthreport.HealthReportConstants;
 import org.mozilla.gecko.db.BrowserContract.SuggestedSites;
+import org.mozilla.gecko.restrictions.Restriction;
 import org.mozilla.gecko.updater.UpdateService;
 import org.mozilla.gecko.updater.UpdateServiceHelper;
 import org.mozilla.gecko.util.GeckoEventListener;
 import org.mozilla.gecko.util.HardwareUtils;
 import org.mozilla.gecko.util.ThreadUtils;
 import org.mozilla.gecko.util.InputOptionsUtils;
 import org.mozilla.gecko.widget.FloatingHintEditText;
 
@@ -125,16 +127,19 @@ OnSharedPreferenceChangeListener
     private static final String PREFS_DEVTOOLS_REMOTE_WIFI_ENABLED = "devtools.remote.wifi.enabled";
     private static final String PREFS_DISPLAY_REFLOW_ON_ZOOM = "browser.zoom.reflowOnZoom";
     private static final String PREFS_DISPLAY_TITLEBAR_MODE = "browser.chrome.titlebarMode";
     private static final String PREFS_SYNC = NON_PREF_PREFIX + "sync";
     public static final String PREFS_OPEN_URLS_IN_PRIVATE = NON_PREF_PREFIX + "openExternalURLsPrivately";
     public static final String PREFS_VOICE_INPUT_ENABLED = NON_PREF_PREFIX + "voice_input_enabled";
     public static final String PREFS_QRCODE_ENABLED = NON_PREF_PREFIX + "qrcode_enabled";
     private static final String PREFS_DEVTOOLS = NON_PREF_PREFIX + "devtools.enabled";
+    private static final String PREFS_CUSTOMIZE_HOME = NON_PREF_PREFIX + "customize_home";
+    private static final String PREFS_TRACKING_PROTECTION_PRIVATE_BROWSING = "privacy.trackingprotection.pbmode.enabled";
+    private static final String PREFS_TRACKING_PROTECTION_LEARN_MORE = NON_PREF_PREFIX + "trackingprotection.learn_more";
 
     private static final String ACTION_STUMBLER_UPLOAD_PREF = AppConstants.ANDROID_PACKAGE_NAME + ".STUMBLER_PREF";
 
 
     // This isn't a Gecko pref, even if it looks like one.
     private static final String PREFS_BROWSER_LOCALE = "locale";
 
     public static final String PREFS_RESTORE_SESSION = NON_PREF_PREFIX + "restoreSession3";
@@ -304,19 +309,16 @@ OnSharedPreferenceChangeListener
             return;
         }
 
         onLocaleChanged(currentLocale);
     }
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
-        // Make sure RestrictedProfiles is ready.
-        RestrictedProfiles.initWithProfile(GeckoProfile.get(this));
-
         // Apply the current user-selected locale, if necessary.
         checkLocale();
 
         // Track this so we can decide whether to show locale options.
         // See also the workaround below for Bug 1015209.
         localeSwitchingIsEnabled = BrowserLocaleManager.getInstance().isEnabled();
 
         // For Android v11+ where we use Fragments (v11+ only due to bug 866352),
@@ -472,25 +474,28 @@ OnSharedPreferenceChangeListener
         return GeckoPreferenceFragment.class.getName().equals(fragmentName);
     }
 
     @Override
     public void onBuildHeaders(List<Header> target) {
         if (onIsMultiPane()) {
             loadHeadersFromResource(R.xml.preference_headers, target);
 
-            // If locale switching is disabled, remove the section
-            // entirely. This logic will need to be extended when
-            // content language selection (Bug 881510) is implemented.
-            if (!localeSwitchingIsEnabled) {
-                for (Header header : target) {
-                    if (header.id == R.id.pref_header_language) {
-                        target.remove(header);
-                        break;
-                    }
+            Iterator<Header> iterator = target.iterator();
+
+            while (iterator.hasNext()) {
+                Header header = iterator.next();
+
+                if (header.id == R.id.pref_header_language && !localeSwitchingIsEnabled) {
+                    // If locale switching is disabled, remove the section
+                    // entirely. This logic will need to be extended when
+                    // content language selection (Bug 881510) is implemented.
+                    iterator.remove();
+                } else if (header.id == R.id.pref_header_devtools && !RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_DEVELOPER_TOOLS)) {
+                    iterator.remove();
                 }
             }
         }
     }
 
     @Override
     public void onWindowFocusChanged(boolean hasFocus) {
         if (!hasFocus || mInitialized)
@@ -698,16 +703,24 @@ OnSharedPreferenceChangeListener
                 }
                 if (PREFS_DEVTOOLS.equals(key) &&
                     RestrictedProfiles.isUserRestricted(this)) {
                     preferences.removePreference(pref);
                     i--;
                     continue;
                 }
 
+                if (PREFS_CUSTOMIZE_HOME.equals(key)) {
+                    if (!RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_CUSTOMIZE_HOME)) {
+                        preferences.removePreference(pref);
+                        i--;
+                        continue;
+                    }
+                }
+
                 setupPreferences((PreferenceGroup) pref, prefs);
             } else {
                 pref.setOnPreferenceChangeListener(this);
                 if (PREFS_UPDATER_AUTODOWNLOAD.equals(key)) {
                     if (!AppConstants.MOZ_UPDATER) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
@@ -722,17 +735,17 @@ OnSharedPreferenceChangeListener
                     // Remove UI for reflow on release builds.
                     if (AppConstants.RELEASE_BUILD) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
                 } else if (PREFS_OPEN_URLS_IN_PRIVATE.equals(key)) {
                     // Remove UI for opening external links in private browsing on non-Nightly builds.
-                    if (!AppConstants.NIGHTLY_BUILD) {
+                    if (!AppConstants.NIGHTLY_BUILD || !RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_PRIVATE_BROWSING)) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
                 } else if (PREFS_TELEMETRY_ENABLED.equals(key)) {
                     if (!AppConstants.MOZ_TELEMETRY_REPORTING) {
                         preferences.removePreference(pref);
                         i--;
@@ -748,29 +761,29 @@ OnSharedPreferenceChangeListener
                 } else if (PREFS_CRASHREPORTER_ENABLED.equals(key)) {
                     if (!AppConstants.MOZ_CRASHREPORTER) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
                 } else if (PREFS_GEO_REPORTING.equals(key) ||
                            PREFS_GEO_LEARN_MORE.equals(key)) {
-                    if (!AppConstants.MOZ_STUMBLER_BUILD_TIME_ENABLED) {
+                    if (!AppConstants.MOZ_STUMBLER_BUILD_TIME_ENABLED || !RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_LOCATION_SERVICE)) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
                 } else if (PREFS_DEVTOOLS_REMOTE_USB_ENABLED.equals(key)) {
-                    if (!RestrictedProfiles.isAllowed(this, RestrictedProfiles.Restriction.DISALLOW_REMOTE_DEBUGGING)) {
+                    if (!RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_REMOTE_DEBUGGING)) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
                 } else if (PREFS_DEVTOOLS_REMOTE_WIFI_ENABLED.equals(key)) {
-                    if (!RestrictedProfiles.isAllowed(this, RestrictedProfiles.Restriction.DISALLOW_REMOTE_DEBUGGING)) {
+                    if (!RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_REMOTE_DEBUGGING)) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
                     if (!InputOptionsUtils.supportsQrCodeReader(getApplicationContext())) {
                         // WiFi debugging requires a QR code reader
                         pref.setEnabled(false);
                         pref.setSummary(getString(R.string.pref_developer_remotedebugging_wifi_disabled_summary));
@@ -783,17 +796,17 @@ OnSharedPreferenceChangeListener
                     // callback, but since this pref doesn't live in Gecko, we
                     // need to handle it separately.
                     ListPreference listPref = (ListPreference) pref;
                     CharSequence selectedEntry = listPref.getEntry();
                     listPref.setSummary(selectedEntry);
                     continue;
                 } else if (PREFS_SYNC.equals(key)) {
                     // Don't show sync prefs while in guest mode.
-                    if (!RestrictedProfiles.isAllowed(this, RestrictedProfiles.Restriction.DISALLOW_MODIFY_ACCOUNTS)) {
+                    if (!RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_MODIFY_ACCOUNTS)) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
                 } else if (PREFS_SEARCH_RESTORE_DEFAULTS.equals(key)) {
                     pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
                         @Override
                         public boolean onPreferenceClick(Preference preference) {
@@ -832,16 +845,28 @@ OnSharedPreferenceChangeListener
                     }
                 } else if (PREFS_QRCODE_ENABLED.equals(key)) {
                     if (!InputOptionsUtils.supportsQrCodeReader(getApplicationContext())) {
                         // Remove UI for qr code input on non nightly builds
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
+                } else if (PREFS_TRACKING_PROTECTION_PRIVATE_BROWSING.equals(key)) {
+                    if (!RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_PRIVATE_BROWSING)) {
+                        preferences.removePreference(pref);
+                        i--;
+                        continue;
+                    }
+                } else if (PREFS_TRACKING_PROTECTION_LEARN_MORE.equals(key)) {
+                    if (!RestrictedProfiles.isAllowed(this, Restriction.DISALLOW_PRIVATE_BROWSING)) {
+                        preferences.removePreference(pref);
+                        i--;
+                        continue;
+                    }
                 }
 
                 // Some Preference UI elements are not actually preferences,
                 // but they require a key to work correctly. For example,
                 // "Clear private data" requires a key for its state to be
                 // saved when the orientation changes. It uses the
                 // "android.not_a_preference.privacy.clear" key - which doesn't
                 // exist in Gecko - to satisfy this requirement.
--- a/mobile/android/base/resources/layout-v11/new_tablet_tabs_item_cell.xml
+++ b/mobile/android/base/resources/layout-v11/new_tablet_tabs_item_cell.xml
@@ -44,22 +44,24 @@
                      android:baselineAlignBottom="true"
                      android:background="@android:color/transparent"
                      android:contentDescription="@string/close_tab"
                      android:src="@drawable/new_tablet_tab_item_close_button"
                      android:duplicateParentState="true"/>
 
     </LinearLayout>
 
-    <RelativeLayout android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:padding="@dimen/new_tablet_tab_highlight_stroke_width"
-                    android:background="@drawable/tab_thumbnail"
-                    android:duplicateParentState="true">
+    <org.mozilla.gecko.widget.TabThumbnailWrapper
+            android:id="@+id/wrapper"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:padding="@dimen/new_tablet_tab_highlight_stroke_width"
+            android:background="@drawable/tab_thumbnail"
+            android:duplicateParentState="true">
 
         <org.mozilla.gecko.widget.ThumbnailView android:id="@+id/thumbnail"
                                                 android:layout_width="@dimen/new_tablet_tab_thumbnail_width"
                                                 android:layout_height="@dimen/new_tablet_tab_thumbnail_height"
                                                 />
 
-    </RelativeLayout>
+    </org.mozilla.gecko.widget.TabThumbnailWrapper>
 
 </org.mozilla.gecko.tabs.TabsLayoutItemView>
--- a/mobile/android/base/resources/layout/home_pager.xml
+++ b/mobile/android/base/resources/layout/home_pager.xml
@@ -13,11 +13,11 @@
                                   android:layout_height="match_parent"
                                   android:background="@android:color/white">
 
     <org.mozilla.gecko.home.TabMenuStrip android:layout_width="match_parent"
                                          android:layout_height="@dimen/tabs_strip_height"
                                          android:background="@color/about_page_header_grey"
                                          android:layout_gravity="top"
                                          gecko:strip="@drawable/home_tab_menu_strip"
-                                         gecko:tabContentStart="72dp" />
+                                         gecko:tabContentStart="@dimen/tab_strip_content_start" />
 
 </org.mozilla.gecko.home.HomePager>
--- a/mobile/android/base/resources/layout/home_remote_tabs_split_plane_panel.xml
+++ b/mobile/android/base/resources/layout/home_remote_tabs_split_plane_panel.xml
@@ -11,18 +11,17 @@
     <ViewStub android:id="@id/home_empty_view_stub"
               android:layout="@layout/home_empty_panel"
               android:layout_width="match_parent"
               android:layout_height="match_parent"/>
 
     <org.mozilla.gecko.widget.GeckoSwipeRefreshLayout
             android:id="@id/remote_tabs_refresh_layout"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:enabled="false">
+            android:layout_height="match_parent">
 
         <LinearLayout android:layout_width="match_parent"
                       android:layout_height="match_parent"
                       android:orientation="horizontal">
 
             <org.mozilla.gecko.home.HomeListView
                 android:id="@+id/clients_list"
                 style="@style/Widget.RemoteTabsListView"
--- a/mobile/android/base/resources/layout/tabs_item_cell.xml
+++ b/mobile/android/base/resources/layout/tabs_item_cell.xml
@@ -10,22 +10,24 @@
                                            android:layout_width="wrap_content"
                                            android:layout_height="wrap_content"
                                            android:paddingTop="6dip"
                                            android:paddingBottom="6dip"
                                            android:paddingLeft="1dip"
                                            android:paddingRight="1dip"
                                            android:gravity="center">
 
-    <RelativeLayout android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_margin="6dip"
-                    android:padding="4dip"
-                    android:background="@drawable/tab_thumbnail"
-                    android:duplicateParentState="true">
+    <org.mozilla.gecko.widget.TabThumbnailWrapper
+            android:id="@+id/wrapper"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="6dip"
+            android:padding="4dip"
+            android:background="@drawable/tab_thumbnail"
+            android:duplicateParentState="true">
 
         <org.mozilla.gecko.widget.ThumbnailView android:id="@+id/thumbnail"
                                                 android:layout_width="@dimen/tab_thumbnail_width"
                                                 android:layout_height="@dimen/tab_thumbnail_height"/>
 
         <LinearLayout android:layout_width="@dimen/tab_thumbnail_width"
                       android:layout_height="wrap_content"
                       android:orientation="horizontal"
@@ -50,11 +52,11 @@
                          android:layout_height="match_parent"
                          android:background="@drawable/action_bar_button_inverse"
                          android:scaleType="center"
                          android:contentDescription="@string/close_tab"
                          android:src="@drawable/tab_close"/>
 
         </LinearLayout>
 
-    </RelativeLayout>
+    </org.mozilla.gecko.widget.TabThumbnailWrapper>
 
 </org.mozilla.gecko.tabs.TabsLayoutItemView>
--- a/mobile/android/base/resources/values-large-v11/dimens.xml
+++ b/mobile/android/base/resources/values-large-v11/dimens.xml
@@ -26,9 +26,11 @@
     <dimen name="reading_list_row_height">96dp</dimen>
     <dimen name="reading_list_row_padding_right">15dp</dimen>
 
     <dimen name="overlay_prompt_container_width">360dp</dimen>
 
     <!-- Should be closer to 0.83 (140/168) but various roundings mean that 0.9 works better -->
     <item name="thumbnail_aspect_ratio" format="float" type="dimen">0.9</item>
 
+    <item name="tab_strip_content_start" type="dimen">72dp</item>
+
 </resources>
--- a/mobile/android/base/resources/values/dimens.xml
+++ b/mobile/android/base/resources/values/dimens.xml
@@ -210,9 +210,11 @@
 
     <!-- This is a 4:7 ratio (as per UX decision). -->
     <item name="thumbnail_aspect_ratio" format="float" type="dimen">0.571</item>
 
     <!-- http://blog.danlew.net/2015/01/06/handling-android-resources-with-non-standard-formats/ -->
     <item name="match_parent" type="dimen">-1</item>
     <item name="wrap_content" type="dimen">-2</item>
 
+    <item name="tab_strip_content_start" type="dimen">12dp</item>
+
 </resources>
--- a/mobile/android/base/resources/xml-v11/preference_headers.xml
+++ b/mobile/android/base/resources/xml-v11/preference_headers.xml
@@ -36,14 +36,15 @@
 
     <header android:fragment="org.mozilla.gecko.preferences.GeckoPreferenceFragment"
             android:title="@string/pref_header_vendor">
         <extra android:name="resource"
                android:value="preferences_vendor"/>
     </header>
 
     <header android:fragment="org.mozilla.gecko.preferences.GeckoPreferenceFragment"
-            android:title="@string/pref_header_devtools">
+            android:title="@string/pref_header_devtools"
+            android:id="@+id/pref_header_devtools">
         <extra android:name="resource"
                android:value="preferences_devtools"/>
     </header>
 
 </preference-headers>
--- a/mobile/android/base/resources/xml-v11/preferences_customize.xml
+++ b/mobile/android/base/resources/xml-v11/preferences_customize.xml
@@ -4,17 +4,18 @@
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!-- Changes should be mirrored to preferences_customize_tablet.xml. -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                   xmlns:gecko="http://schemas.android.com/apk/res-auto"
                   android:enabled="false">
 
-    <PreferenceScreen android:title="@string/pref_category_home"
+    <PreferenceScreen android:key="android.not_a_preference.customize_home"
+                      android:title="@string/pref_category_home"
                       android:summary="@string/pref_category_home_summary"
                       android:fragment="org.mozilla.gecko.preferences.GeckoPreferenceFragment" >
             <extra android:name="resource"
                    android:value="preferences_home" />
     </PreferenceScreen>
 
      <PreferenceScreen android:title="@string/pref_category_search"
                        android:summary="@string/pref_category_search_summary"
--- a/mobile/android/base/resources/xml-v11/preferences_customize_tablet.xml
+++ b/mobile/android/base/resources/xml-v11/preferences_customize_tablet.xml
@@ -11,17 +11,18 @@
                   xmlns:gecko="http://schemas.android.com/apk/res-auto"
                   android:title="@string/pref_category_customize"
                   android:enabled="false">
 
     <org.mozilla.gecko.preferences.SyncPreference android:key="android.not_a_preference.sync"
                                                   android:title="@string/pref_sync"
                                                   android:persistent="false" />
 
-    <PreferenceScreen android:title="@string/pref_category_home"
+    <PreferenceScreen android:key="android.not_a_preference.customize_home"
+                      android:title="@string/pref_category_home"
                       android:summary="@string/pref_category_home_summary"
                       android:fragment="org.mozilla.gecko.preferences.GeckoPreferenceFragment" >
             <extra android:name="resource"
                    android:value="preferences_home" />
     </PreferenceScreen>
 
     <PreferenceScreen android:title="@string/pref_category_search"
                       android:summary="@string/pref_category_search_summary"
--- a/mobile/android/base/resources/xml/preference_headers.xml
+++ b/mobile/android/base/resources/xml/preference_headers.xml
@@ -5,9 +5,12 @@
 
 <!-- This file is a stub to allow IDs to be used in code
      even for a version-limited build. -->
 
 <preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
     <header android:fragment="org.mozilla.gecko.preferences.GeckoPreferenceFragment"
             android:id="@+id/pref_header_language">
     </header>
+    <header android:fragment="org.mozilla.gecko.preferences.GeckoPreferenceFragment"
+            android:id="@+id/pref_header_devtools">
+    </header>
 </preference-headers>
--- a/mobile/android/base/resources/xml/preferences_customize.xml
+++ b/mobile/android/base/resources/xml/preferences_customize.xml
@@ -2,17 +2,19 @@
 <!-- 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/. -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                   xmlns:gecko="http://schemas.android.com/apk/res-auto"
                   android:enabled="false">
 
-    <PreferenceScreen android:title="@string/pref_category_home"
+    <PreferenceScreen
+                      android:key="android.not_a_preference.customize_home"
+                      android:title="@string/pref_category_home"
                       android:summary="@string/pref_category_home_summary" >
         <intent android:action="android.intent.action.VIEW"
                 android:targetPackage="@string/android_package_name"
                 android:targetClass="org.mozilla.gecko.preferences.GeckoPreferences" >
             <extra
                 android:name="resource"
                 android:value="preferences_home" />
         </intent>
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/restrictions/DefaultConfiguration.java
@@ -0,0 +1,27 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.restrictions;
+
+/**
+ * Default implementation of RestrictionConfiguration interface. Used whenever no restrictions are enforced for the
+ * current profile.
+ */
+public class DefaultConfiguration implements RestrictionConfiguration {
+    @Override
+    public boolean isAllowed(Restriction restriction) {
+        return true;
+    }
+
+    @Override
+    public boolean canLoadUrl(String url) {
+        return true;
+    }
+
+    @Override
+    public boolean isRestricted() {
+        return false;
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/restrictions/GuestProfileConfiguration.java
@@ -0,0 +1,75 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.restrictions;
+
+import android.net.Uri;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * RestrictionConfiguration implementation for guest profiles.
+ */
+public class GuestProfileConfiguration implements RestrictionConfiguration {
+    static List<Restriction> DEFAULT_RESTRICTIONS = Arrays.asList(
+            Restriction.DISALLOW_DOWNLOADS,
+            Restriction.DISALLOW_INSTALL_EXTENSION,
+            Restriction.DISALLOW_INSTALL_APPS,
+            Restriction.DISALLOW_BROWSE_FILES,
+            Restriction.DISALLOW_SHARE,
+            Restriction.DISALLOW_BOOKMARK,
+            Restriction.DISALLOW_ADD_CONTACTS,
+            Restriction.DISALLOW_SET_IMAGE,
+            Restriction.DISALLOW_MODIFY_ACCOUNTS,
+            Restriction.DISALLOW_REMOTE_DEBUGGING,
+            Restriction.DISALLOW_IMPORT_SETTINGS
+    );
+
+    @SuppressWarnings("serial")
+    private static final List<String> BANNED_SCHEMES = Arrays.asList(
+            "file",
+            "chrome",
+            "resource",
+            "jar",
+            "wyciwyg"
+    );
+
+    private static final List<String> BANNED_URLS = Arrays.asList(
+            "about:config"
+    );
+
+    @Override
+    public boolean isAllowed(Restriction restriction) {
+        return !DEFAULT_RESTRICTIONS.contains(restriction);
+    }
+
+    @Override
+    public boolean canLoadUrl(String url) {
+        // Null URLs are always permitted.
+        if (url == null) {
+            return true;
+        }
+
+        final Uri u = Uri.parse(url);
+        final String scheme = u.getScheme();
+        if (BANNED_SCHEMES.contains(scheme)) {
+            return false;
+        }
+
+        for (String banned : BANNED_URLS) {
+            if (url.startsWith(banned)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    public boolean isRestricted() {
+        return true;
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/restrictions/RestrictedProfileConfiguration.java
@@ -0,0 +1,81 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.restrictions;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.UserManager;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class RestrictedProfileConfiguration implements RestrictionConfiguration {
+    static List<Restriction> DEFAULT_RESTRICTIONS = Arrays.asList(
+            Restriction.DISALLOW_INSTALL_EXTENSION,
+            Restriction.DISALLOW_INSTALL_APPS,
+            Restriction.DISALLOW_TOOLS_MENU,
+            Restriction.DISALLOW_REPORT_SITE_ISSUE,
+            Restriction.DISALLOW_IMPORT_SETTINGS,
+            Restriction.DISALLOW_DEVELOPER_TOOLS,
+            Restriction.DISALLOW_CUSTOMIZE_HOME,
+            Restriction.DISALLOW_PRIVATE_BROWSING,
+            Restriction.DISALLOW_LOCATION_SERVICE
+    );
+
+    private static final String ABOUT_ADDONS = "about:addons";
+    private static final String ABOUT_PRIVATE_BROWSING = "about:privatebrowsing";
+
+    private Context context;
+
+    public RestrictedProfileConfiguration(Context context) {
+        this.context = context.getApplicationContext();
+    }
+
+    @Override
+    public boolean isAllowed(Restriction restriction) {
+        boolean isAllowed = !getAppRestrictions(context).getBoolean(restriction.name, DEFAULT_RESTRICTIONS.contains(restriction));
+
+        if (isAllowed) {
+            // If this restriction is not enforced by the app setup then check wether this is a restriction that is
+            // enforced by the system.
+            isAllowed = !getUserRestrictions(context).getBoolean(restriction.name, false);
+        }
+
+        return isAllowed;
+    }
+
+    @Override
+    public boolean canLoadUrl(String url) {
+        if (!isAllowed(Restriction.DISALLOW_INSTALL_EXTENSION) && url.toLowerCase().startsWith(ABOUT_ADDONS)) {
+            return false;
+        }
+
+        if (!isAllowed(Restriction.DISALLOW_PRIVATE_BROWSING) && url.toLowerCase().startsWith(ABOUT_PRIVATE_BROWSING)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public boolean isRestricted() {
+        return true;
+    }
+
+    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
+    private Bundle getAppRestrictions(final Context context) {
+        final UserManager mgr = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        return mgr.getApplicationRestrictions(context.getPackageName());
+    }
+
+    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
+    private Bundle getUserRestrictions(final Context context) {
+        final UserManager mgr = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        return mgr.getUserRestrictions();
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/restrictions/Restriction.java
@@ -0,0 +1,118 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.restrictions;
+
+import org.mozilla.gecko.R;
+
+import android.content.Context;
+
+/**
+ * This is a list of things we can restrict you from doing. Some of these are reflected in Android UserManager constants.
+ * Others are specific to us.
+ * These constants should be in sync with the ones from toolkit/components/parentalcontrols/nsIParentalControlsService.idl
+ */
+public enum Restriction {
+    DISALLOW_DOWNLOADS(
+            1, "no_download_files", 0, 0),
+
+    DISALLOW_INSTALL_EXTENSION(
+            2, "no_install_extensions",
+            R.string.restriction_disallow_addons_title,
+            R.string.restriction_disallow_addons_description),
+
+    // UserManager.DISALLOW_INSTALL_APPS
+    DISALLOW_INSTALL_APPS(
+            3, "no_install_apps",
+            R.string.restriction_disallow_apps_title,
+            R.string.restriction_disallow_apps_description),
+
+    DISALLOW_BROWSE_FILES(
+            4, "no_browse_files", 0, 0),
+
+    DISALLOW_SHARE(
+            5, "no_share", 0, 0),
+
+    DISALLOW_BOOKMARK(
+            6, "no_bookmark", 0, 0),
+
+    DISALLOW_ADD_CONTACTS(
+            7, "no_add_contacts", 0, 0),
+
+    DISALLOW_SET_IMAGE(
+            8, "no_set_image", 0, 0),
+
+    // UserManager.DISALLOW_MODIFY_ACCOUNTS
+    DISALLOW_MODIFY_ACCOUNTS(
+            9, "no_modify_accounts", 0, 0),
+
+    DISALLOW_REMOTE_DEBUGGING(
+            10, "no_remote_debugging", 0, 0),
+
+    DISALLOW_IMPORT_SETTINGS(
+            11, "no_report_site_issue",
+            R.string.restriction_disallow_import_settings_title,
+            R.string.restriction_disallow_import_settings_description),
+
+    DISALLOW_TOOLS_MENU(
+            12, "no_tools_menu",
+            R.string.restriction_disallow_tools_menu_title,
+            R.string.restriction_disallow_tools_menu_description),
+
+    DISALLOW_REPORT_SITE_ISSUE(
+            13, "no_report_site_issue",
+            R.string.restriction_disallow_report_site_issue_title,
+            R.string.restriction_disallow_report_site_issue_description),
+
+    DISALLOW_DEVELOPER_TOOLS(
+            14, "no_developer_tools",
+            R.string.restriction_disallow_devtools_title,
+            R.string.restriction_disallow_devtools_description
+    ),
+
+    DISALLOW_CUSTOMIZE_HOME(
+            15, "no_customize_home",
+            R.string.restriction_disallow_customize_home_title,
+            R.string.restriction_disallow_customize_home_description
+    ),
+
+    DISALLOW_PRIVATE_BROWSING(
+            16, "no_private_browsing",
+            R.string.restriction_disallow_private_browsing_title,
+            R.string.restriction_disallow_private_browsing_description
+    ),
+
+    DISALLOW_LOCATION_SERVICE(
+            17, "no_location_service",
+            R.string.restriction_disallow_location_services_title,
+            R.string.restriction_disallow_location_services_description
+    );
+
+    public final int id;
+    public final String name;
+    public final int titleResource;
+    public final int descriptionResource;
+
+    Restriction(final int id, final String name, int titleResource, int descriptionResource) {
+        this.id = id;
+        this.name = name;
+        this.titleResource = titleResource;
+        this.descriptionResource = descriptionResource;
+    }
+
+    public String getTitle(Context context) {
+        if (titleResource == 0) {
+            return toString();
+        }
+        return context.getResources().getString(titleResource);
+    }
+
+    public String getDescription(Context context) {
+        if (descriptionResource == 0) {
+            return name;
+        }
+        return context.getResources().getString(descriptionResource);
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/restrictions/RestrictionConfiguration.java
@@ -0,0 +1,26 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.restrictions;
+
+/**
+ * Interface for classes that RestrictedProfiles will delegate to for making decisions.
+ */
+public interface RestrictionConfiguration {
+    /**
+     * Is the user allowed to perform this action?
+     */
+    boolean isAllowed(Restriction restriction);
+
+    /**
+     * Is the user allowed to load the given URL?
+     */
+    boolean canLoadUrl(String url);
+
+    /**
+     * Is this user restricted in any way?
+     */
+    boolean isRestricted();
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/restrictions/RestrictionProvider.java
@@ -0,0 +1,72 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.restrictions;
+
+import org.mozilla.gecko.AppConstants;
+import org.mozilla.gecko.restrictions.RestrictedProfileConfiguration;
+import org.mozilla.gecko.restrictions.Restriction;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.RestrictionEntry;
+import android.os.Build;
+import android.os.Bundle;
+
+import java.util.ArrayList;
+
+/**
+ * Broadcast receiver providing supported restrictions to the system.
+ */
+@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
+public class RestrictionProvider extends BroadcastReceiver {
+    @Override
+    public void onReceive(final Context context, final Intent intent) {
+        if (AppConstants.Versions.preJBMR2) {
+            // This broadcast does not make any sense prior to Jelly Bean MR2.
+            return;
+        }
+
+        final PendingResult result = goAsync();
+
+        new Thread() {
+            @Override
+            public void run() {
+                final Bundle oldRestrictions = intent.getBundleExtra(Intent.EXTRA_RESTRICTIONS_BUNDLE);
+                final Bundle extras = new Bundle();
+
+                ArrayList<RestrictionEntry> entries = initRestrictions(context, oldRestrictions);
+                extras.putParcelableArrayList(Intent.EXTRA_RESTRICTIONS_LIST, entries);
+
+                result.setResult(Activity.RESULT_OK, null, extras);
+                result.finish();
+            }
+        }.start();
+    }
+
+    private ArrayList<RestrictionEntry> initRestrictions(Context context, Bundle oldRestrictions) {
+        ArrayList<RestrictionEntry> entries = new ArrayList<RestrictionEntry>();
+
+        for (Restriction restriction : RestrictedProfileConfiguration.DEFAULT_RESTRICTIONS) {
+            RestrictionEntry entry = createRestrictionEntryWithDefaultValue(context, restriction,
+                    oldRestrictions.getBoolean(restriction.name, true));
+            entries.add(entry);
+        }
+
+        return entries;
+    }
+
+    private RestrictionEntry createRestrictionEntryWithDefaultValue(Context context, Restriction restriction, boolean defaultValue) {
+        RestrictionEntry entry = new RestrictionEntry(restriction.name, defaultValue);
+
+        entry.setTitle(restriction.getTitle(context));
+        entry.setDescription(restriction.getDescription(context));
+
+        return entry;
+    }
+}
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -544,16 +544,24 @@
   <string name="restriction_disallow_report_site_issue_title">&restriction_disallow_report_site_issue_title;</string>
   <string name="restriction_disallow_report_site_issue_description">&restriction_disallow_report_site_issue_description;</string>
   <string name="restriction_disallow_import_settings_title">&restriction_disallow_import_settings_title;</string>
   <string name="restriction_disallow_import_settings_description">&restriction_disallow_import_settings_description;</string>
   <string name="restriction_disallow_addons_title">&restriction_disallow_addons_title;</string>
   <string name="restriction_disallow_addons_description">&restriction_disallow_addons_description;</string>
   <string name="restriction_disallow_apps_title">&restriction_disallow_apps_title;</string>
   <string name="restriction_disallow_apps_description">&restriction_disallow_apps_description;</string>
+  <string name="restriction_disallow_devtools_title">&restriction_disallow_devtools_title;</string>
+  <string name="restriction_disallow_devtools_description">&restriction_disallow_devtools_description;</string>
+  <string name="restriction_disallow_customize_home_title">&restriction_disallow_customize_home_title;</string>
+  <string name="restriction_disallow_customize_home_description">&restriction_disallow_customize_home_description;</string>
+  <string name="restriction_disallow_private_browsing_title">&restriction_disallow_private_browsing_title;</string>
+  <string name="restriction_disallow_private_browsing_description">&restriction_disallow_private_browsing_description;</string>
+  <string name="restriction_disallow_location_services_title">&restriction_disallow_location_services_title;</string>
+  <string name="restriction_disallow_location_services_description">&restriction_disallow_location_services_description;</string>
 
   <!-- Miscellaneous -->
   <string name="ellipsis">&ellipsis;</string>
 
   <string name="colon">&colon;</string>
 
   <string name="percent">&percent;</string>
 
--- a/mobile/android/base/tabs/TabsPanel.java
+++ b/mobile/android/base/tabs/TabsPanel.java
@@ -4,24 +4,26 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.tabs;
 
 import org.mozilla.gecko.AppConstants.Versions;
 import org.mozilla.gecko.GeckoApp;
 import org.mozilla.gecko.GeckoApplication;
 import org.mozilla.gecko.R;
+import org.mozilla.gecko.RestrictedProfiles;
+import org.mozilla.gecko.Tab;
+import org.mozilla.gecko.Tabs;
 import org.mozilla.gecko.Telemetry;
 import org.mozilla.gecko.TelemetryContract;
 import org.mozilla.gecko.animation.PropertyAnimator;
-import org.mozilla.gecko.Tab;
-import org.mozilla.gecko.Tabs;
 import org.mozilla.gecko.animation.ViewHelper;
 import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.lwt.LightweightThemeDrawable;
+import org.mozilla.gecko.restrictions.Restriction;
 import org.mozilla.gecko.util.HardwareUtils;
 import org.mozilla.gecko.widget.GeckoPopupMenu;
 import org.mozilla.gecko.widget.IconTabWidget;
 
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Rect;
 import android.util.AttributeSet;
@@ -134,16 +136,20 @@ public class TabsPanel extends LinearLay
             }
         });
 
         mTabWidget = (IconTabWidget) findViewById(R.id.tab_widget);
 
         mTabWidget.addTab(R.drawable.tabs_normal, R.string.tabs_normal);
         mTabWidget.addTab(R.drawable.tabs_private, R.string.tabs_private);
 
+        if (!RestrictedProfiles.isAllowed(mContext, Restriction.DISALLOW_PRIVATE_BROWSING)) {
+            mTabWidget.setVisibility(View.GONE);
+        }
+
         mTabWidget.setTabSelectionListener(this);
 
         mMenuButton = (ImageButton) findViewById(R.id.menu);
         mMenuButton.setOnClickListener(new Button.OnClickListener() {
             @Override
             public void onClick(View view) {
                 showMenu();
             }
@@ -161,17 +167,18 @@ public class TabsPanel extends LinearLay
         }
     }
 
     public void showMenu() {
         final Menu menu = mPopupMenu.getMenu();
 
         // Each panel has a "+" shortcut button, so don't show it for that panel.
         menu.findItem(R.id.new_tab).setVisible(mCurrentPanel != Panel.NORMAL_TABS);
-        menu.findItem(R.id.new_private_tab).setVisible(mCurrentPanel != Panel.PRIVATE_TABS);
+        menu.findItem(R.id.new_private_tab).setVisible(mCurrentPanel != Panel.PRIVATE_TABS
+                && RestrictedProfiles.isAllowed(mContext, Restriction.DISALLOW_PRIVATE_BROWSING));
 
         // Only show "Clear * tabs" for current panel.
         menu.findItem(R.id.close_all_tabs).setVisible(mCurrentPanel == Panel.NORMAL_TABS);
         menu.findItem(R.id.close_private_tabs).setVisible(mCurrentPanel == Panel.PRIVATE_TABS);
 
         mPopupMenu.show();
     }
 
--- a/mobile/android/base/widget/TabThumbnailWrapper.java
+++ b/mobile/android/base/widget/TabThumbnailWrapper.java
@@ -1,17 +1,17 @@
 package org.mozilla.gecko.widget;
 
 import android.content.Context;
 import android.util.AttributeSet;
-import android.widget.FrameLayout;
+import android.widget.RelativeLayout;
 import org.mozilla.gecko.R;
 
 
-public class TabThumbnailWrapper extends FrameLayout {
+public class TabThumbnailWrapper extends RelativeLayout {
     private boolean mRecording;
     private static final int[] STATE_RECORDING = { R.attr.state_recording };
 
     public TabThumbnailWrapper(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
     }
 
     public TabThumbnailWrapper(Context context, AttributeSet attrs) {
--- a/mobile/android/base/widget/ThemedEditText.java
+++ b/mobile/android/base/widget/ThemedEditText.java
@@ -2,18 +2,18 @@
 
 /* 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/. */
 
 package org.mozilla.gecko.widget;
 
 import org.mozilla.gecko.GeckoApplication;
+import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.R;
-import org.mozilla.gecko.lwt.LightweightTheme;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.util.AttributeSet;
 
 public class ThemedEditText extends android.widget.EditText
                                      implements LightweightTheme.OnChangeListener {
--- a/mobile/android/base/widget/ThemedImageButton.java
+++ b/mobile/android/base/widget/ThemedImageButton.java
@@ -2,18 +2,18 @@
 
 /* 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/. */
 
 package org.mozilla.gecko.widget;
 
 import org.mozilla.gecko.GeckoApplication;
+import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.R;
-import org.mozilla.gecko.lwt.LightweightTheme;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.util.AttributeSet;
 
 public class ThemedImageButton extends android.widget.ImageButton
                                      implements LightweightTheme.OnChangeListener {
--- a/mobile/android/base/widget/ThemedImageView.java
+++ b/mobile/android/base/widget/ThemedImageView.java
@@ -2,18 +2,18 @@
 
 /* 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/. */
 
 package org.mozilla.gecko.widget;
 
 import org.mozilla.gecko.GeckoApplication;
+import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.R;
-import org.mozilla.gecko.lwt.LightweightTheme;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.util.AttributeSet;
 
 public class ThemedImageView extends android.widget.ImageView
                                      implements LightweightTheme.OnChangeListener {
--- a/mobile/android/base/widget/ThemedLinearLayout.java
+++ b/mobile/android/base/widget/ThemedLinearLayout.java
@@ -2,18 +2,18 @@
 
 /* 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/. */
 
 package org.mozilla.gecko.widget;
 
 import org.mozilla.gecko.GeckoApplication;
+import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.R;
-import org.mozilla.gecko.lwt.LightweightTheme;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.util.AttributeSet;
 
 public class ThemedLinearLayout extends android.widget.LinearLayout
                                      implements LightweightTheme.OnChangeListener {
--- a/mobile/android/base/widget/ThemedRelativeLayout.java
+++ b/mobile/android/base/widget/ThemedRelativeLayout.java
@@ -2,18 +2,18 @@
 
 /* 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/. */
 
 package org.mozilla.gecko.widget;
 
 import org.mozilla.gecko.GeckoApplication;
+import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.R;
-import org.mozilla.gecko.lwt.LightweightTheme;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.util.AttributeSet;
 
 public class ThemedRelativeLayout extends android.widget.RelativeLayout
                                      implements LightweightTheme.OnChangeListener {
--- a/mobile/android/base/widget/ThemedTextSwitcher.java
+++ b/mobile/android/base/widget/ThemedTextSwitcher.java
@@ -2,18 +2,18 @@
 
 /* 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/. */
 
 package org.mozilla.gecko.widget;
 
 import org.mozilla.gecko.GeckoApplication;
+import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.R;
-import org.mozilla.gecko.lwt.LightweightTheme;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.util.AttributeSet;
 
 public class ThemedTextSwitcher extends android.widget.TextSwitcher
                                      implements LightweightTheme.OnChangeListener {
--- a/mobile/android/base/widget/ThemedTextView.java
+++ b/mobile/android/base/widget/ThemedTextView.java
@@ -2,18 +2,18 @@
 
 /* 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/. */
 
 package org.mozilla.gecko.widget;
 
 import org.mozilla.gecko.GeckoApplication;
+import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.R;
-import org.mozilla.gecko.lwt.LightweightTheme;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.util.AttributeSet;
 
 public class ThemedTextView extends android.widget.TextView
                                      implements LightweightTheme.OnChangeListener {
--- a/mobile/android/base/widget/ThemedView.java
+++ b/mobile/android/base/widget/ThemedView.java
@@ -2,18 +2,18 @@
 
 /* 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/. */
 
 package org.mozilla.gecko.widget;
 
 import org.mozilla.gecko.GeckoApplication;
+import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.R;
-import org.mozilla.gecko.lwt.LightweightTheme;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.util.AttributeSet;
 
 public class ThemedView extends android.view.View
                                      implements LightweightTheme.OnChangeListener {
--- a/mobile/android/base/widget/ThemedView.java.frag
+++ b/mobile/android/base/widget/ThemedView.java.frag
@@ -3,17 +3,17 @@
 
 /* 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/. */
 
 package org.mozilla.gecko.widget;
 
 import org.mozilla.gecko.GeckoApplication;
-import org.mozilla.gecko.LightweightTheme;
+import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.R;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.ColorDrawable;
 import android.util.AttributeSet;
 
 public class Themed@VIEW_NAME_SUFFIX@ extends @BASE_TYPE@
--- a/mobile/android/chrome/content/aboutLogins.js
+++ b/mobile/android/chrome/content/aboutLogins.js
@@ -33,16 +33,21 @@ function copyStringAndToast(string, noti
   } catch (e) {
     debug("Error copying from about:logins");
     gChromeWin.NativeWindow.toast.show(gStringBundle.GetStringFromName("loginsDetails.copyFailed"), "short");
   }
 }
 
 // Delay filtering while typing in MS
 const FILTER_DELAY = 500;
+/* Constants for usage telemetry */
+const LOGINS_LIST_VIEWED = 0;
+const LOGIN_VIEWED = 1;
+const LOGIN_EDITED = 2;
+const LOGIN_PW_TOGGLED = 3;
 
 let Logins = {
   _logins: [],
   _filterTimer: null,
   _selectedLogin: null,
 
   _getLogins: function() {
     let logins;
@@ -157,16 +162,17 @@ let Logins = {
       let item = this._createItemForLogin(login);
       newList.appendChild(item);
     });
 
     list.parentNode.replaceChild(newList, list);
   },
 
   _showList: function () {
+    Services.telemetry.getHistogramById("PWMGR_ABOUT_LOGINS_USAGE").add(LOGINS_LIST_VIEWED);
     let loginsListPage = document.getElementById("logins-list-page");
     loginsListPage.classList.remove("hidden");
 
     let editLoginPage = document.getElementById("edit-login-page");
     editLoginPage.classList.add("hidden");
 
     // If the Show/Hide password button has been flipped, reset it
     if (this._isPasswordBtnInHideMode()) {
@@ -179,16 +185,17 @@ let Logins = {
     if (event.state) {
       this._showEditLoginDialog(event.state.id);
     } else {
       this._selectedLogin = null;
       this._showList();
     }
   },
   _showEditLoginDialog: function (login) {
+    Services.telemetry.getHistogramById("PWMGR_ABOUT_LOGINS_USAGE").add(LOGIN_VIEWED);
     let listPage = document.getElementById("logins-list-page");
     listPage.classList.add("hidden");
 
     let editLoginPage = document.getElementById("edit-login-page");
     editLoginPage.classList.remove("hidden");
 
     let usernameField = document.getElementById("username");
     usernameField.value = login.username;
@@ -205,16 +212,17 @@ let Logins = {
       headerText.textContent = login.hostname;
     }
     else {
       headerText.textContent = gStringBundle.GetStringFromName("editLogin.fallbackTitle");
     }
   },
 
   _onSaveEditLogin: function() {
+    Services.telemetry.getHistogramById("PWMGR_ABOUT_LOGINS_USAGE").add(LOGIN_EDITED);
     let newUsername = document.getElementById("username").value;
     let newPassword = document.getElementById("password").value;
     let newDomain  = document.getElementById("hostname").value;
     let origUsername = this._selectedLogin.username;
     let origPassword = this._selectedLogin.password;
     let origDomain = this._selectedLogin.hostname;
 
     try {
@@ -243,16 +251,17 @@ let Logins = {
       gChromeWin.NativeWindow.toast.show(gStringBundle.GetStringFromName("editLogin.couldNotSave"), "short");
       return;
     }
     gChromeWin.NativeWindow.toast.show(gStringBundle.GetStringFromName("editLogin.saved1"), "short");
     this._showList();
   },
 
   _onPasswordBtn: function () {
+    Services.telemetry.getHistogramById("PWMGR_ABOUT_LOGINS_USAGE").add(LOGIN_PW_TOGGLED);
     this._updatePasswordBtn(this._isPasswordBtnInHideMode());
   },
 
   _updatePasswordBtn: function (aShouldShow) {
     let passwordField = document.getElementById("password");
     let button = document.getElementById("password-btn");
     let show = gStringBundle.GetStringFromName("password-btn.show");
     let hide = gStringBundle.GetStringFromName("password-btn.hide");
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -685,37 +685,45 @@ var BrowserApp = {
           button: {
             icon: "drawable://switch_button_icon",
             label: buttonLabel,
             callback: () => { BrowserApp.selectTab(tab); },
           }
         });
       });
 
-    NativeWindow.contextmenus.add(stringGetter("contextmenu.openInPrivateTab"),
-      NativeWindow.contextmenus.linkOpenableContext,
-      function(aTarget) {
-        UITelemetry.addEvent("action.1", "contextmenu", null, "web_open_private_tab");
-        UITelemetry.addEvent("loadurl.1", "contextmenu", null);
-
-        let url = NativeWindow.contextmenus._getLinkURL(aTarget);
-        ContentAreaUtils.urlSecurityCheck(url, aTarget.ownerDocument.nodePrincipal);
-        let tab = BrowserApp.addTab(url, { selected: false, parentId: BrowserApp.selectedTab.id, isPrivate: true });
-
-        let newtabStrings = Strings.browser.GetStringFromName("newprivatetabpopup.opened");
-        let label = PluralForm.get(1, newtabStrings).replace("#1", 1);
-        let buttonLabel = Strings.browser.GetStringFromName("newtabpopup.switch");
-        NativeWindow.toast.show(label, "long", {
-          button: {
-            icon: "drawable://switch_button_icon",
-            label: buttonLabel,
-            callback: () => { BrowserApp.selectTab(tab); },
-          }
+    let showOpenInPrivateTab = true;
+    if ("@mozilla.org/parental-controls-service;1" in Cc) {
+      let pc = Cc["@mozilla.org/parental-controls-service;1"].createInstance(Ci.nsIParentalControlsService);
+      showOpenInPrivateTab = pc.isAllowed(Ci.nsIParentalControlsService.PRIVATE_BROWSING);
+    }
+
+    if (showOpenInPrivateTab) {
+      NativeWindow.contextmenus.add(stringGetter("contextmenu.openInPrivateTab"),
+        NativeWindow.contextmenus.linkOpenableContext,
+        function (aTarget) {
+          UITelemetry.addEvent("action.1", "contextmenu", null, "web_open_private_tab");
+          UITelemetry.addEvent("loadurl.1", "contextmenu", null);
+
+          let url = NativeWindow.contextmenus._getLinkURL(aTarget);
+          ContentAreaUtils.urlSecurityCheck(url, aTarget.ownerDocument.nodePrincipal);
+          let tab = BrowserApp.addTab(url, {selected: false, parentId: BrowserApp.selectedTab.id, isPrivate: true});
+
+          let newtabStrings = Strings.browser.GetStringFromName("newprivatetabpopup.opened");
+          let label = PluralForm.get(1, newtabStrings).replace("#1", 1);
+          let buttonLabel = Strings.browser.GetStringFromName("newtabpopup.switch");
+          NativeWindow.toast.show(label, "long", {
+            button: {
+              icon: "drawable://switch_button_icon",
+              label: buttonLabel,
+              callback: () => { BrowserApp.selectTab(tab); },
+            }
+          });
         });
-      });
+    }
 
     NativeWindow.contextmenus.add(stringGetter("contextmenu.addToReadingList"),
       NativeWindow.contextmenus.linkOpenableContext,
       function(aTarget) {
         let url = NativeWindow.contextmenus._getLinkURL(aTarget);
         Messaging.sendRequestForResult({
             type: "Reader:AddToList",
             title: truncate(url, MAX_TITLE_LENGTH),
--- a/mobile/android/tests/browser/robocop/testRestrictedProfiles.js
+++ b/mobile/android/tests/browser/robocop/testRestrictedProfiles.js
@@ -24,32 +24,9 @@ add_task(function test_isUserRestricted(
   do_check_true(pc.isAllowed(Ci.nsIParentalControlsService.INSTALL_APP));
   do_check_true(pc.isAllowed(Ci.nsIParentalControlsService.VISIT_FILE_URLS));
   do_check_true(pc.isAllowed(Ci.nsIParentalControlsService.SHARE));
   do_check_true(pc.isAllowed(Ci.nsIParentalControlsService.BOOKMARK));
   do_check_true(pc.isAllowed(Ci.nsIParentalControlsService.INSTALL_EXTENSION));
   do_check_true(pc.isAllowed(Ci.nsIParentalControlsService.MODIFY_ACCOUNTS));
 });
 
-add_task(function test_getUserRestrictions() {
-  // In an admin profile, like the tests: {}
-  // In a restricted profile: {"no_modify_accounts":true,"no_share_location":true}
-  let restrictions = "{}";
-
-  var jenv = null;
-  try {
-    jenv = JNI.GetForThread();
-    var profile = JNI.LoadClass(jenv, "org.mozilla.gecko.RestrictedProfiles", {
-      static_methods: [
-        { name: "getUserRestrictions", sig: "()Ljava/lang/String;" },
-      ],
-    });
-    restrictions = JNI.ReadString(jenv, profile.getUserRestrictions());
-  } finally {
-    if (jenv) {
-      JNI.UnloadClasses(jenv);
-    }
-  }
-
-  do_check_eq(restrictions, "{}");
-});
-
 run_next_test();
--- a/mobile/android/themes/core/aboutLogins.css
+++ b/mobile/android/themes/core/aboutLogins.css
@@ -208,16 +208,17 @@ body {
   align-items: center;
   text-align: center;
   justify-content: center;
 }
 
 .empty-text {
   color: #363B40;
   font-size: 25px;
+  font-weight: lighter;
   margin-bottom: 20px;
 }
 
 .empty-hint {
   color: #777777;
   font-size: 20px;
 }
 
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1092,9 +1092,9 @@ static const TransportSecurityPreload kP
   { "youtube.com", true, false, false, -1, &kPinset_google_root_pems },
   { "ytimg.com", true, false, false, -1, &kPinset_google_root_pems },
 };
 
 // Pinning Preload List Length = 354;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1445682409244000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1446756090891000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -1,12 +1,11 @@
 300651.ru: did not receive HSTS header
 56ct.com: could not connect to host
 activiti.alfresco.com: did not receive HSTS header
-adamkostecki.de: could not connect to host
 admin.google.com: did not receive HSTS header (error ignored - included regardless)
 adsfund.org: could not connect to host
 aes256.ru: could not connect to host
 afp548.tk: could not connect to host
 agrimap.com: did not receive HSTS header
 agrios.de: did not receive HSTS header
 airbnb.com: did not receive HSTS header
 aiticon.de: did not receive HSTS header
@@ -14,53 +13,52 @@ akselimedia.fi: did not receive HSTS hea
 alecvannoten.be: did not receive HSTS header
 alpha.irccloud.com: could not connect to host
 alphabit-secure.com: could not connect to host
 altmv.com: max-age too low: 7776000
 amigogeek.net: could not connect to host
 ankakaak.com: could not connect to host
 api.mega.co.nz: could not connect to host
 api.recurly.com: did not receive HSTS header
-apibot.de: did not receive HSTS header
 apis.google.com: did not receive HSTS header (error ignored - included regardless)
 apn-einstellungen.de: could not connect to host
 app.manilla.com: could not connect to host
 appengine.google.com: did not receive HSTS header (error ignored - included regardless)
-appseccalifornia.org: could not connect to host
+appseccalifornia.org: did not receive HSTS header
 arrayify.com: did not receive HSTS header
 astaxi.net: did not receive HSTS header
 at.search.yahoo.com: did not receive HSTS header
 atavio.at: could not connect to host
 atavio.ch: could not connect to host
 atavio.de: did not receive HSTS header
 au.search.yahoo.com: did not receive HSTS header
 aurainfosec.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 auraredeye.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 auraredshield.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 auszeit.bio: did not receive HSTS header
 auth.mail.ru: did not receive HSTS header
-auto4trade.nl: did not receive HSTS header
+auto4trade.nl: could not connect to host
 az.search.yahoo.com: did not receive HSTS header
 azabani.com: did not receive HSTS header
 azprep.us: could not connect to host
 baldwinkoo.com: could not connect to host
 barcodeberlin.com: did not receive HSTS header
 bassh.net: could not connect to host
 bccx.com: could not connect to host
 bcm.com.au: max-age too low: 0
 be.search.yahoo.com: did not receive HSTS header
-bedeta.de: could not connect to host
+bentertain.de: could not connect to host
 betnet.fr: could not connect to host
 bi.search.yahoo.com: did not receive HSTS header
 bidon.ca: did not receive HSTS header
 bigshinylock.minazo.net: could not connect to host
 bitfarm-archiv.com: did not receive HSTS header
 bitfarm-archiv.de: did not receive HSTS header
 bitgo.com: max-age too low: 0
-bitvigor.com: did not receive HSTS header
+bitvigor.com: could not connect to host
 bizon.sk: did not receive HSTS header
 bjornjohansen.no: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 blacklane.com: did not receive HSTS header
 blog.lookout.com: did not receive HSTS header
 blubbablasen.de: could not connect to host
 bluetenmeer.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 bochs.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 bonigo.de: did not receive HSTS header
@@ -84,92 +82,95 @@ cd.search.yahoo.com: did not receive HST
 celltek-server.de: did not receive HSTS header
 cert.se: max-age too low: 2628001
 cg.search.yahoo.com: did not receive HSTS header
 ch.search.yahoo.com: did not receive HSTS header
 chainmonitor.com: could not connect to host
 changelab.cc: max-age too low: 0
 chatbot.me: could not connect to host
 checkout.google.com: did not receive HSTS header (error ignored - included regardless)
+cheesetart.my: could not connect to host
 chfr.search.yahoo.com: did not receive HSTS header
-chippy.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 chit.search.yahoo.com: did not receive HSTS header
 chm.vn: did not receive HSTS header
 chontalpa.pw: did not receive HSTS header
 chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
 chrome.google.com: did not receive HSTS header (error ignored - included regardless)
 cl.search.yahoo.com: did not receive HSTS header
 climaprecio.es: did not receive HSTS header
+cloudcert.org: did not receive HSTS header
 cn.search.yahoo.com: did not receive HSTS header
 co.search.yahoo.com: did not receive HSTS header
 code.google.com: did not receive HSTS header (error ignored - included regardless)
 codereview.chromium.org: did not receive HSTS header (error ignored - included regardless)
 coding.net: did not receive HSTS header
 coffeeetc.co.uk: could not connect to host
 console.python.org: did not receive HSTS header
 copperhead.co: max-age too low: 0
 coursella.com: did not receive HSTS header
 cr.search.yahoo.com: did not receive HSTS header
 crate.io: did not receive HSTS header
 crbug.com: did not receive HSTS header
 crowdcurity.com: did not receive HSTS header
 crowdjuris.com: could not connect to host
+crute.me: could not connect to host
 crypto.is: max-age too low: 7776000
 csawctf.poly.edu: could not connect to host
-csuw.net: could not connect to host
 ct.search.yahoo.com: did not receive HSTS header
 cujanovic.com: did not receive HSTS header
 cyanogenmod.xxx: could not connect to host
 cybershambles.com: could not connect to host
 darchoods.net: could not connect to host
 dash-board.jp: could not connect to host
 datasnitch.co.uk: could not connect to host
 daylightcompany.com: did not receive HSTS header
 de.search.yahoo.com: did not receive HSTS header
 decibelios.li: did not receive HSTS header
 dedeo.tk: max-age too low: 0
 destinationbijoux.fr: max-age too low: 2678400
-devh.de: did not receive HSTS header
 diedrich.co: did not receive HSTS header
 digitaldaddy.net: could not connect to host
 discovery.lookout.com: did not receive HSTS header
 dk.search.yahoo.com: did not receive HSTS header
 dl.google.com: did not receive HSTS header (error ignored - included regardless)
 do.search.yahoo.com: did not receive HSTS header
 docs.google.com: did not receive HSTS header (error ignored - included regardless)
 domaris.de: did not receive HSTS header
 dotsiam.com: could not connect to host
 download.jitsi.org: did not receive HSTS header
 drive.google.com: did not receive HSTS header (error ignored - included regardless)
 dropcam.com: did not receive HSTS header
+drtroyhendrickson.com: could not connect to host
 dymersion.com: did not receive HSTS header
 dzlibs.io: could not connect to host
 e-aut.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 ebaymotorssucks.com: max-age too low: 0
 ecdn.cz: could not connect to host
 edelsteincosmetic.com: did not receive HSTS header
 edmodo.com: did not receive HSTS header
 egit.co: could not connect to host
 electromc.com: could not connect to host
 elnutricionista.es: did not receive HSTS header
 email.lookout.com: could not connect to host
 en-maktoob.search.yahoo.com: did not receive HSTS header
 encrypted.google.com: did not receive HSTS header (error ignored - included regardless)
 enterdev.co: did not receive HSTS header
 epoxate.com: did not receive HSTS header
+eroticen.com: max-age too low: 0
 errors.zenpayroll.com: could not connect to host
 es.search.yahoo.com: did not receive HSTS header
 esec.rs: did not receive HSTS header
 espanol.search.yahoo.com: did not receive HSTS header
 espra.com: could not connect to host
 etsysecure.com: could not connect to host
 ezimoeko.net: did not receive HSTS header
 eztv.ch: did not receive HSTS header
 fabianfischer.de: did not receive HSTS header
 fatzebra.com.au: did not receive HSTS header
+feen.us: did not receive HSTS header
 feminists.co: could not connect to host
 festember.com: did not receive HSTS header
 fi.search.yahoo.com: did not receive HSTS header
 fiftyshadesofluca.ml: could not connect to host
 firebaseio.com: could not connect to host
 fixingdns.com: did not receive HSTS header
 fj.search.yahoo.com: did not receive HSTS header
 floweslawncare.com: did not receive HSTS header
@@ -181,24 +182,23 @@ fotiu.com: could not connect to host
 fr.search.yahoo.com: did not receive HSTS header
 fsma.pl: did not receive HSTS header
 futos.de: did not receive HSTS header
 g2g.com: did not receive HSTS header
 gamesdepartment.co.uk: did not receive HSTS header
 gaptek.id: did not receive HSTS header
 geekandi.com: max-age too low: 7776000
 genuxation.com: could not connect to host
-getbambu.com: did not receive HSTS header
 getlantern.org: did not receive HSTS header
 getssl.uz: could not connect to host
 gl.search.yahoo.com: did not receive HSTS header
 glass.google.com: did not receive HSTS header (error ignored - included regardless)
 gm.search.yahoo.com: did not receive HSTS header
 gmail.com: did not receive HSTS header (error ignored - included regardless)
-gnetwork.eu: did not receive HSTS header
+gmantra.org: could not connect to host
 goodwin43.ru: did not receive HSTS header
 google: could not connect to host
 google: could not connect to host (error ignored - included regardless)
 googlemail.com: did not receive HSTS header (error ignored - included regardless)
 googleplex.com: could not connect to host
 googleplex.com: could not connect to host (error ignored - included regardless)
 goto.google.com: did not receive HSTS header (error ignored - included regardless)
 gotowned.org: did not receive HSTS header
@@ -208,49 +208,52 @@ grandmascookieblog.com: did not receive 
 greensolid.biz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 greplin.com: could not connect to host
 groups.google.com: did not receive HSTS header (error ignored - included regardless)
 gtraxapp.com: could not connect to host
 gvt2.com: could not connect to host
 gvt2.com: could not connect to host (error ignored - included regardless)
 gvt3.com: could not connect to host
 gvt3.com: could not connect to host (error ignored - included regardless)
+gwijaya.com: did not receive HSTS header
 haber1903.com: max-age too low: 0
 hangouts.google.com: did not receive HSTS header (error ignored - included regardless)
-haste.ch: could not connect to host
 hatoko.net: could not connect to host
-heart.ge: did not receive HSTS header
+heart.ge: could not connect to host
 helpium.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
+henriknoerr.com: could not connect to host
 hk.search.yahoo.com: did not receive HSTS header
 hn.search.yahoo.com: did not receive HSTS header
 hoerbuecher-und-hoerspiele.de: did not receive HSTS header
 homa.website: did not receive HSTS header
 honeytracks.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 horosho.in: could not connect to host
 horseboners.xxx: did not receive HSTS header
 hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless)
 howrandom.org: could not connect to host
 hstspreload.appspot.com: did not receive HSTS header
 hu.search.yahoo.com: did not receive HSTS header
+ian.sh: did not receive HSTS header
 iban.is: could not connect to host
 id.fedoraproject.org: did not receive HSTS header
 id.search.yahoo.com: did not receive HSTS header
 identitylabs.uk: did not receive HSTS header
 ie.search.yahoo.com: did not receive HSTS header
 ilikerainbows.co.uk: could not connect to host
 ilmconpm.de: did not receive HSTS header
 in.search.yahoo.com: did not receive HSTS header
 inertianetworks.com: did not receive HSTS header
 inmyarea.com: did not receive HSTS header
 intercom.io: did not receive HSTS header
 ionas-law.ro: did not receive HSTS header
 iop.intuit.com: max-age too low: 86400
 iostips.ru: did not receive HSTS header
 ipmimagazine.com: did not receive HSTS header
 irccloud.com: did not receive HSTS header
+isogram.nl: did not receive HSTS header
 it.search.yahoo.com: did not receive HSTS header
 itshost.ru: could not connect to host
 izdiwho.com: could not connect to host
 j0s.at: did not receive HSTS header
 jamesdoylephoto.com: did not receive HSTS header
 janoberst.com: could not connect to host
 janus-engineering.de: did not receive HSTS header
 jelmer.co.uk: could not connect to host
@@ -261,90 +264,87 @@ jottit.com: could not connect to host
 julian-kipka.de: did not receive HSTS header
 justlikethat.hosting: did not receive HSTS header
 k-dev.de: could not connect to host
 kamikano.com: max-age too low: 0
 kdm-online.de: did not receive HSTS header
 keeley.gq: could not connect to host
 keeley.ml: could not connect to host
 keepclean.me: could not connect to host
+keycom.co.uk: did not receive HSTS header
 keymaster.lookout.com: did not receive HSTS header
 kirkforcongress.com: could not connect to host
 kirkforsenate.com: did not receive HSTS header
 kitsta.com: could not connect to host
 kiwiirc.com: max-age too low: 5256000
+klausbrinch.dk: could not connect to host
 klaxn.com: could not connect to host
 klaxn.org: could not connect to host
 komandakovalchuk.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 koop-bremen.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 korni22.org: did not receive HSTS header
 kr.search.yahoo.com: did not receive HSTS header
 krouzkyliduska.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 kryptera.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
-kura.io: could not connect to host
 kz.search.yahoo.com: did not receive HSTS header
 labina.com.tr: did not receive HSTS header
 landscape.canonical.com: max-age too low: 2592000
 ledgerscope.net: max-age too low: 86400
 li.search.yahoo.com: did not receive HSTS header
 library.linode.com: did not receive HSTS header
 libraryfreedomproject.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 lifeguard.aecom.com: max-age too low: 86400
 lists.fedoraproject.org: did not receive HSTS header
 login.corp.google.com: max-age too low: 7776000 (error ignored - included regardless)
+lognot.net: did not receive HSTS header
 logotype.se: did not receive HSTS header
+lookzook.com: did not receive HSTS header
 lovelycorral.com: did not receive HSTS header
 lt.search.yahoo.com: did not receive HSTS header
 lu.search.yahoo.com: did not receive HSTS header
 lukonet.com: did not receive HSTS header
 lumi.do: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 luxus-russen.de: could not connect to host
 lv.search.yahoo.com: did not receive HSTS header
 m.gparent.org: could not connect to host
 mail-settings.google.com: did not receive HSTS header (error ignored - included regardless)
 mail.google.com: did not receive HSTS header (error ignored - included regardless)
 maktoob.search.yahoo.com: did not receive HSTS header
 malaysia.search.yahoo.com: did not receive HSTS header
-mammaw.com: did not receive HSTS header
 manage.zenpayroll.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 market.android.com: did not receive HSTS header (error ignored - included regardless)
 markprof.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
+markusueberallassetmanagement.de: could not connect to host
 marshut.net: could not connect to host
 martijnvhoof.nl: could not connect to host
-mattsvensson.com: could not connect to host
-mccrypto.de: did not receive HSTS header
 mebio.us: did not receive HSTS header
 medallia.io: could not connect to host
 mediacru.sh: could not connect to host
 meetingmanage.nl: did not receive HSTS header
 megashur.se: did not receive HSTS header
 megaxchange.com: did not receive HSTS header
 meinebo.it: could not connect to host
-meta-db.com: could not connect to host
 miasarafina.de: did not receive HSTS header
 micropple.net: could not connect to host
 miketabor.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 minikneet.nl: could not connect to host
 minora.io: did not receive HSTS header
 mirindadomo.ru: did not receive HSTS header
 mirrorx.com: did not receive HSTS header
-mistacms.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 mnemotiv.com: could not connect to host
 mobilethreat.net: could not connect to host
 mobilethreatnetwork.net: could not connect to host
-mojapraca.sk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 mqas.net: could not connect to host
 mt.search.yahoo.com: did not receive HSTS header
 mu.search.yahoo.com: did not receive HSTS header
 mustika.cf: max-age too low: 0
 mutamatic.com: could not connect to host
 mw.search.yahoo.com: did not receive HSTS header
 mx.search.yahoo.com: did not receive HSTS header
 my.alfresco.com: did not receive HSTS header
-my.usa.gov: did not receive HSTS header
 mydigipass.com: did not receive HSTS header
 mykolab.com: did not receive HSTS header
 mykreuzfahrt.de: did not receive HSTS header
 myni.io: could not connect to host
 neftaly.com: did not receive HSTS header
 nemovement.org: did not receive HSTS header
 neonisi.com: could not connect to host
 netzbit.de: could not connect to host
@@ -363,129 +363,136 @@ noobs-r-us.co.uk: did not receive HSTS h
 np.search.yahoo.com: did not receive HSTS header
 nz.search.yahoo.com: did not receive HSTS header
 nzb.cat: did not receive HSTS header
 ooonja.de: could not connect to host
 opendesk.cc: did not receive HSTS header
 openshift.redhat.com: did not receive HSTS header
 otakurepublic.com: did not receive HSTS header
 ottospora.nl: could not connect to host
+ourbank.com: max-age too low: 604800
 pa.search.yahoo.com: did not receive HSTS header
 partyvan.nl: could not connect to host
 partyvan.se: could not connect to host
 passwordbox.com: did not receive HSTS header
 passwords.google.com: did not receive HSTS header (error ignored - included regardless)
 pcel.com: did not receive HSTS header
 pe.search.yahoo.com: did not receive HSTS header
 ph.search.yahoo.com: did not receive HSTS header
+phcorner.net: max-age too low: 0
 phurl.de: could not connect to host
-pieterhordijk.com: could not connect to host
+picksin.club: could not connect to host
 piratenlogin.de: could not connect to host
 pisidia.de: did not receive HSTS header
 pk.search.yahoo.com: did not receive HSTS header
 pl.search.yahoo.com: did not receive HSTS header
 platform.lookout.com: could not connect to host
 play.google.com: did not receive HSTS header (error ignored - included regardless)
 poiema.com.sg: did not receive HSTS header
 popcorntime.ws: max-age too low: 2592000
 powerplannerapp.com: did not receive HSTS header
 pr.search.yahoo.com: did not receive HSTS header
 pressfreedomfoundation.org: did not receive HSTS header
 prodpad.com: did not receive HSTS header
+projektzentrisch.de: could not connect to host
 promecon-gmbh.de: did not receive HSTS header
+prontolight.com: did not receive HSTS header
 proximato.com: could not connect to host
 pult.co: could not connect to host
 py.search.yahoo.com: did not receive HSTS header
-qa.stg.fedoraproject.org: could not connect to host
 qc.search.yahoo.com: did not receive HSTS header
 qvitoo.com: did not receive HSTS header
+raiseyourflag.com: did not receive HSTS header
 rapidresearch.me: could not connect to host
 rasing.me: could not connect to host
 redlatam.org: did not receive HSTS header
 redports.org: did not receive HSTS header
-regar42.fr: could not connect to host
 reserve-online.net: did not receive HSTS header
 rika.me: could not connect to host
 riseup.net: did not receive HSTS header
 rme.li: did not receive HSTS header
 ro.search.yahoo.com: did not receive HSTS header
 roan24.pl: did not receive HSTS header
 roddis.net: did not receive HSTS header
+roeper.party: could not connect to host
+roman-pavlik.cz: could not connect to host
 ru.search.yahoo.com: did not receive HSTS header
+rugstorene.co.uk: did not receive HSTS header
 rw.search.yahoo.com: did not receive HSTS header
 sah3.net: could not connect to host
 saturngames.co.uk: could not connect to host
 savetheinternet.eu: did not receive HSTS header
 schoop.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
-scrambler.in: could not connect to host
 script.google.com: did not receive HSTS header (error ignored - included regardless)
 sdsl-speedtest.de: could not connect to host
 se.search.yahoo.com: did not receive HSTS header
 search.yahoo.com: did not receive HSTS header
 security.google.com: did not receive HSTS header (error ignored - included regardless)
 sello.com: did not receive HSTS header
 sellocdn.com: could not connect to host
 semenkovich.com: did not receive HSTS header
 seomobo.com: did not receive HSTS header
 seowarp.net: max-age too low: 1576800
 serverdensity.io: did not receive HSTS header
 sg.search.yahoo.com: did not receive HSTS header
+shamka.ru: could not connect to host
 shiinko.com: could not connect to host
 shoprose.ru: did not receive HSTS header
 shops.neonisi.com: could not connect to host
 siammedia.co: did not receive HSTS header
 silentcircle.org: could not connect to host
 simon.butcher.name: max-age too low: 2629743
 simplyfixit.co.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 sistemy48.ru: did not receive HSTS header
 sites.google.com: did not receive HSTS header (error ignored - included regardless)
 smartlend.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 snailing.org: could not connect to host
 soccergif.com: could not connect to host
-sockeye.cc: did not receive HSTS header
 sol.io: could not connect to host
 souyar.de: could not connect to host
 souyar.net: could not connect to host
 souyar.us: could not connect to host
 spartantheatre.org: did not receive HSTS header
 spdysync.com: did not receive HSTS header
+spencerbaer.com: did not receive HSTS header
 spreadsheets.google.com: did not receive HSTS header (error ignored - included regardless)
 square.com: did not receive HSTS header
 ssl.google-analytics.com: did not receive HSTS header (error ignored - included regardless)
 ssl.panoramio.com: did not receive HSTS header
 stillyarts.com: did not receive HSTS header
 stocktrade.de: could not connect to host
 stormhub.org: could not connect to host
 streamingmagazin.de: could not connect to host
 suite73.org: could not connect to host
-sunjaydhama.com: did not receive HSTS header
 sunshinepress.org: could not connect to host
 surfeasy.com: did not receive HSTS header
 suzukikenichi.com: did not receive HSTS header
 sv.search.yahoo.com: did not receive HSTS header
 sysdb.io: could not connect to host
 t.facebook.com: did not receive HSTS header
 tablet.facebook.com: did not receive HSTS header
 taglondon.org: did not receive HSTS header
 talk.google.com: could not connect to host
 talk.google.com: could not connect to host (error ignored - included regardless)
 tallr.se: could not connect to host
 tandarts-haarlem.nl: did not receive HSTS header
+tanzhijun.com: did not receive HSTS header
 tapka.cz: did not receive HSTS header
 tc-bonito.de: did not receive HSTS header
 tektoria.de: could not connect to host
 temehu.com: did not receive HSTS header
-temp.pm: did not receive HSTS header
 terrax.berlin: could not connect to host
 terrax.info: could not connect to host
 terrax.net: could not connect to host
 th.search.yahoo.com: did not receive HSTS header
 the-sky-of-valkyries.com: could not connect to host
+thecoffeehouse.xyz: did not receive HSTS header
 therapyportal.com: did not receive HSTS header
 theshadestore.com: did not receive HSTS header
+thomasgriffin.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 thorncreek.net: did not receive HSTS header
 tipsyk.ru: did not receive HSTS header
 tirex.media: did not receive HSTS header
 titties.ml: did not receive HSTS header
 tobias-kluge.de: did not receive HSTS header
 tollmanz.com: did not receive HSTS header
 tomfisher.eu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 tr.search.yahoo.com: did not receive HSTS header
@@ -494,51 +501,50 @@ translate.googleapis.com: did not receiv
 translatoruk.co.uk: did not receive HSTS header
 travador.com: did not receive HSTS header
 triop.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 tuturulianda.com: did not receive HSTS header
 tv.search.yahoo.com: could not connect to host
 tw.search.yahoo.com: did not receive HSTS header
 tzappa.net: did not receive HSTS header
 ua.search.yahoo.com: did not receive HSTS header
+uber.com: max-age too low: 0
+ubicv.com: did not receive HSTS header
 uega.net: did not receive HSTS header
 uk.search.yahoo.com: did not receive HSTS header
 unbanthe.net: did not receive HSTS header
 univz.com: could not connect to host
 uonstaffhub.com: could not connect to host
 uprotect.it: could not connect to host
 ust.space: did not receive HSTS header
 ustr.gov: max-age too low: 86400
 uy.search.yahoo.com: did not receive HSTS header
 uz.search.yahoo.com: did not receive HSTS header
 vbhelp.org: could not connect to host
 vbulletin-russia.com: could not connect to host
 vbulletinrussia.com: could not connect to host
 ve.search.yahoo.com: did not receive HSTS header
 vhost.co.id: could not connect to host
-viennan.net: did not receive HSTS header
 vn.search.yahoo.com: did not receive HSTS header
 vyncke.org: max-age too low: 2678400
 vzk.io: could not connect to host
 webeau.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 webmail.mayfirst.org: did not receive HSTS header
-wf-training-master.appspot.com: could not connect to host
-wf-training-master.appspot.com: could not connect to host (error ignored - included regardless)
+webmaniabr.com: did not receive HSTS header
 when-release.com: did not receive HSTS header
 wikidsystems.com: did not receive HSTS header
+wilf1rst.com: could not connect to host
 withustrading.com: could not connect to host
 wiz.biz: could not connect to host
 wohnungsbau-ludwigsburg.de: did not receive HSTS header
-wpletter.de: did not receive HSTS header
 www.apollo-auto.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 www.calyxinstitute.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 www.cueup.com: could not connect to host
 www.developer.mydigipass.com: could not connect to host
 www.elanex.biz: did not receive HSTS header
-www.etsy.com: did not receive HSTS header
 www.gmail.com: did not receive HSTS header (error ignored - included regardless)
 www.googlemail.com: did not receive HSTS header (error ignored - included regardless)
 www.greplin.com: could not connect to host
 www.jitsi.org: did not receive HSTS header
 www.ledgerscope.net: max-age too low: 86400
 www.logentries.com: did not receive HSTS header
 www.moneybookers.com: did not receive HSTS header
 www.neonisi.com: could not connect to host
@@ -550,12 +556,13 @@ xa.search.yahoo.com: did not receive HST
 xplore-dna.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 xtream-hosting.com: could not connect to host
 xtream-hosting.de: could not connect to host
 xtream-hosting.eu: could not connect to host
 xtreamhosting.eu: could not connect to host
 yokeepo.com: max-age too low: 0
 za.search.yahoo.com: did not receive HSTS header
 zarooba.com: did not receive HSTS header
+zeitpunkt-kulturmagazin.de: did not receive HSTS header
 zenpayroll.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134"  data: no]
 zh.search.yahoo.com: did not receive HSTS header
 zixiao.wang: could not connect to host
 zoo24.de: could not connect to host
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -3,26 +3,27 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /*****************************************************************************/
 /* This is an automatically generated file. If you're not                    */
 /* nsSiteSecurityService.cpp, you shouldn't be #including it.     */
 /*****************************************************************************/
 
 #include <stdint.h>
-const PRTime gPreloadListExpirationTime = INT64_C(1448101602453000);
+const PRTime gPreloadListExpirationTime = INT64_C(1449175283973000);
 
 class nsSTSPreload
 {
   public:
     const char *mHost;
     const bool mIncludeSubdomains;
 };
 
 static const nsSTSPreload kSTSPreloadList[] = {
+  { "0.me.uk", true },
   { "007sascha.de", true },
   { "0x0a.net", true },
   { "1000minds.com", true },
   { "17hats.com", true },
   { "188trafalgar.ca", true },
   { "18f.gsa.gov", true },
   { "1a-diamantscheiben.de", true },
   { "1a-jva.de", true },
@@ -33,17 +34,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "2bis10.de", true },
   { "301.website", true },
   { "302.nyc", true },
   { "314chan.org", true },
   { "3473-wiki.de", true },
   { "3do3dont.com", true },
   { "47ronin.com", false },
   { "4eyes.ch", true },
-  { "4g-server.eu", true },
+  { "4g-server.eu", false },
   { "4mm.org", true },
   { "4sqsu.eu", true },
   { "5apps.com", false },
   { "7183.org", true },
   { "8ack.de", true },
   { "9point6.com", true },
   { "abecodes.net", false },
   { "abiapp.net", true },
@@ -72,16 +73,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "advanced-online.eu", true },
   { "adviespuntklokkenluiders.nl", true },
   { "aerolog.co", true },
   { "aes256.ru", true },
   { "aeyoun.com", true },
   { "affinitysync.com", true },
   { "afp548.com", true },
   { "afrodigital.uk", true },
+  { "agilebits.net", false },
   { "ahoyconference.com", true },
   { "ahwatukeefoothillsmontessori.com", true },
   { "aids.gov", true },
   { "aie.de", true },
   { "aircomms.com", true },
   { "airlea.com", true },
   { "aiticon.com", true },
   { "ajouin.com", true },
@@ -91,29 +93,32 @@ static const nsSTSPreload kSTSPreloadLis
   { "aktiv-naturheilmittel.at", true },
   { "aktiv-naturheilmittel.ch", true },
   { "aktiv-naturheilmittel.de", true },
   { "al-shami.net", true },
   { "aladdinschools.appspot.com", true },
   { "alainwolf.net", true },
   { "alaninkenya.org", true },
   { "alanrickmanflipstable.com", true },
+  { "alenan.org", true },
   { "alethearose.com", true },
   { "alex-ross.co.uk", true },
   { "alexgaynor.net", true },
   { "alexsexton.com", true },
   { "alexyang.me", true },
   { "allinonecyprus.com", true },
   { "alocato.com", true },
   { "alza.cz", true },
   { "alza.de", true },
   { "alza.sk", true },
   { "alzashop.com", true },
   { "amaforums.org", false },
   { "amdouglas.uk", true },
+  { "amisharingstuff.com", true },
+  { "amunoz.org", true },
   { "anadoluefessk.org", true },
   { "anadoluefessporkulubu.org", true },
   { "anakros.me", true },
   { "andere-gedanken.net", true },
   { "andreasbreitenlohner.de", true },
   { "andreasolsson.se", true },
   { "andrewimeson.com", true },
   { "andymartin.cc", true },
@@ -134,46 +139,49 @@ static const nsSTSPreload kSTSPreloadLis
   { "antoniomarques.eu", true },
   { "anycoin.me", true },
   { "apachehaus.de", false },
   { "apadvantage.com", true },
   { "api.intercom.io", false },
   { "api.lookout.com", false },
   { "api.simple.com", false },
   { "api.xero.com", false },
+  { "apibot.de", true },
   { "apis.google.com", true },
   { "apn-einstellungen.de", true },
   { "aponow.de", true },
   { "app.lookout.com", false },
   { "app.manilla.com", true },
   { "app.recurly.com", true },
   { "app.simpletax.ca", false },
   { "app.yinxiang.com", false },
   { "appengine.google.com", true },
   { "apple-watch-zubehoer.de", true },
   { "apps-for-fishing.com", true },
   { "apps.facebook.com", false },
   { "apps.fedoraproject.org", true },
   { "apps.stg.fedoraproject.org", true },
+  { "appuro.com", true },
   { "aprz.de", true },
   { "aranycsillag.net", true },
   { "arbitrary.ch", true },
   { "archlinux.de", true },
   { "areafiftylan.nl", true },
   { "arendburgers.nl", true },
   { "arguggi.co.uk", true },
   { "arivo.com.br", true },
   { "arlen.io", true },
   { "armytricka.cz", true },
   { "aroonchande.com", true },
   { "artegusto.ru", true },
   { "arteseideias.com.pt", true },
   { "arty.name", true },
   { "ask.fedoraproject.org", true },
   { "ask.stg.fedoraproject.org", true },
+  { "askfit.cz", true },
   { "asm-x.com", true },
   { "ass.org.au", true },
   { "atc.io", true },
   { "athenelive.com", true },
   { "atishchenko.com", true },
   { "atlantischild.hu", true },
   { "atlassian.net", true },
   { "atlex.nl", true },
@@ -184,16 +192,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "augustian-life.cz", true },
   { "aurainfosec.com", true },
   { "aurainfosec.com.au", true },
   { "auraredeye.com", true },
   { "auraredshield.com", true },
   { "authentication.io", true },
   { "autoledky.sk", true },
   { "av.de", true },
+  { "axado.com.br", true },
   { "axka.com", false },
   { "azirevpn.com", true },
   { "backschues.net", true },
   { "badges.fedoraproject.org", true },
   { "badges.stg.fedoraproject.org", true },
   { "baer.im", true },
   { "baff.lu", true },
   { "bagelsbakery.com", true },
@@ -209,16 +218,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "bautied.de", true },
   { "bayrisch-fuer-anfaenger.de", true },
   { "bccx.com", true },
   { "bcrook.com", false },
   { "beach-inspector.com", true },
   { "beamitapp.com", true },
   { "beastowner.com", true },
   { "beastowner.li", true },
+  { "bebesurdoue.com", true },
   { "bedeta.de", true },
   { "bedreid.dk", true },
   { "beercandle.com", true },
   { "belairsewvac.com", true },
   { "ben-energy.com", true },
   { "benchling.com", true },
   { "beneathvt.com", true },
   { "benjamin.pe", true },
@@ -273,16 +283,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "blablacar.rs", true },
   { "blablacar.ru", true },
   { "blackberrycentral.com", true },
   { "blessnet.jp", true },
   { "blockchain.info", true },
   { "blocksatz-medien.de", true },
   { "bloemendal.me", true },
   { "blog.cyveillance.com", true },
+  { "blog.gov.uk", true },
   { "blog.gparent.org", true },
   { "blog.linode.com", false },
   { "blog.torproject.org", false },
   { "blubbablasen.de", true },
   { "bodo-wolff.de", false },
   { "bohramt.de", true },
   { "boiseonlinemall.com", true },
   { "bonitabrazilian.co.nz", true },
@@ -307,16 +318,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "brunosouza.org", true },
   { "buddhistische-weisheiten.org", true },
   { "bugzil.la", true },
   { "bugzilla.mozilla.org", true },
   { "buiko.com", true },
   { "buildkite.com", true },
   { "bulktrade.de", true },
   { "bundaberg.com", true },
+  { "burnworks.com", true },
   { "burtrum.org", true },
   { "business.facebook.com", false },
   { "business.lookout.com", false },
   { "businesshosting.nl", true },
   { "bustimes.org", true },
   { "buzzconcert.com", true },
   { "bygningsregistrering.dk", true },
   { "bytepark.de", false },
@@ -324,16 +336,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "ca.gparent.org", true },
   { "cackette.com", true },
   { "calgaryconstructionjobs.com", true },
   { "call.me", true },
   { "calomel.org", true },
   { "calories.org", true },
   { "calvin.me", true },
   { "camolist.com", true },
+  { "canadalife.de", true },
   { "canhazip.com", true },
   { "canyonshoa.com", true },
   { "cao.gov", true },
   { "capitaltg.com", true },
   { "cardoni.net", true },
   { "caremad.io", true },
   { "carezone.com", false },
   { "cargobay.net", true },
@@ -351,31 +364,36 @@ static const nsSTSPreload kSTSPreloadLis
   { "centralvacsunlimited.net", true },
   { "certible.com", true },
   { "certly.io", true },
   { "cesal.net", true },
   { "cesidianroot.eu", true },
   { "cfo.gov", true },
   { "chahub.com", true },
   { "chainmonitor.com", true },
+  { "chaosdorf.de", true },
   { "chartstoffarm.de", false },
   { "chatbot.me", true },
   { "cheapgeekts.com", true },
   { "check.torproject.org", false },
   { "checkout.google.com", true },
+  { "cheerflow.com", true },
   { "cheesetart.my", false },
+  { "chippy.ch", true },
   { "chiralsoftware.com", true },
+  { "chrisbrown.id.au", true },
   { "chrisirwin.ca", true },
   { "chrisjean.com", true },
   { "chrismckee.co.uk", true },
   { "chrisupjohn.com", true },
   { "chriswarrick.com", true },
   { "chrome-devtools-frontend.appspot.com", true },
   { "chrome.com", false },
   { "chrome.google.com", true },
+  { "chromebooksforwork.com", true },
   { "chromiumcodereview.appspot.com", false },
   { "chroniclesofgeorge.com", true },
   { "chulado.com", true },
   { "cimballa.com", true },
   { "cio.gov", true },
   { "cklie.de", true },
   { "ckliemann.com", true },
   { "ckliemann.net", true },
@@ -385,75 +403,88 @@ static const nsSTSPreload kSTSPreloadLis
   { "clapping-rhymes.com", true },
   { "classdojo.com", true },
   { "clerkendweller.uk", true },
   { "clevertarget.ru", true },
   { "clevisto.com", true },
   { "climateinteractive.org", true },
   { "clintwilson.technology", true },
   { "cloud.google.com", true },
-  { "cloudcert.org", true },
   { "cloudflareonazure.com", true },
   { "cloudimag.es", true },
+  { "cloudmigrator365.com", true },
   { "cloudns.com.au", true },
+  { "cloudpagesforwork.com", true },
   { "cloudpebble.net", true },
   { "cloudsecurityalliance.org", true },
   { "cloudstoragemaus.com", true },
   { "cloudup.com", true },
+  { "clu-in.org", true },
+  { "clubmini.jp", true },
+  { "cmc-versand.de", true },
+  { "cnlic.com", true },
   { "cobalt.io", true },
+  { "cocoaheads.at", true },
   { "code-poets.co.uk", true },
   { "code.facebook.com", false },
   { "code.google.com", true },
   { "codepoints.net", true },
   { "codepref.com", true },
   { "codepult.com", true },
   { "codepx.com", true },
   { "codereview.appspot.com", false },
   { "codereview.chromium.org", true },
+  { "codingforspeed.com", true },
   { "coinapult.com", true },
   { "coinbase.com", true },
   { "coindam.com", false },
   { "collabornation.net", true },
   { "collinmbarrett.com", true },
   { "coloradocomputernetworking.net", true },
+  { "colorlib.com", true },
   { "comdurav.com", true },
   { "commencepayments.com", true },
   { "completionist.audio", true },
   { "comssa.org.au", true },
   { "config.schokokeks.org", false },
   { "conformal.com", true },
   { "connext.de", false },
   { "conrad-kostecki.de", true },
   { "console.support", true },
   { "consumersentinel.gov", true },
   { "contributor.google.com", true },
   { "controlcenter.gigahost.dk", true },
   { "cor-ser.es", true },
   { "cordial-restaurant.com", true },
   { "core.mx", true },
+  { "corruption-mc.net", true },
+  { "corruption-rsps.net", true },
+  { "corruption-server.net", true },
   { "costablancavoorjou.com", true },
   { "cotonea.de", true },
   { "courtlistener.com", true },
   { "covenantoftheriver.org", true },
   { "covoiturage.fr", true },
   { "cpvmatch.eu", true },
   { "cracker.in.th", true },
+  { "cradlepointecm.com", true },
   { "craftbeerbarn.co.uk", true },
   { "crm.onlime.ch", false },
   { "crowdjuris.com", true },
   { "crute.me", true },
   { "crypto.cat", false },
   { "crypto.graphics", true },
   { "cryptobin.org", true },
   { "cryptography.io", true },
   { "cryptopartyatx.org", true },
   { "cryptopush.com", true },
   { "csacongress.org", true },
   { "cspbuilder.info", true },
   { "csuw.net", true },
+  { "cthulhuden.com", true },
   { "ctns.de", true },
   { "cube.de", true },
   { "cupcake.io", true },
   { "cupcake.is", true },
   { "curiosity-driven.org", true },
   { "curlybracket.co.uk", true },
   { "curtacircuitos.com.br", false },
   { "cyanogenmod.xxx", true },
@@ -483,16 +514,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "darkserver.stg.fedoraproject.org", true },
   { "darlo.co.uk", true },
   { "darom.jp", true },
   { "dash-board.jp", false },
   { "data-abundance.com", true },
   { "data.qld.gov.au", false },
   { "datasnitch.co.uk", true },
   { "datenkeks.de", true },
+  { "dateno1.com", true },
   { "daveoc64.co.uk", true },
   { "davidlyness.com", true },
   { "davidmcevoy.org.uk", true },
   { "davidnoren.com", true },
   { "daylightpirates.org", true },
   { "dbgamestudio.com", true },
   { "dccode.gov", true },
   { "deadbeef.ninja", true },
@@ -501,141 +533,163 @@ static const nsSTSPreload kSTSPreloadLis
   { "dealcruiser.nl", true },
   { "debtkit.co.uk", true },
   { "dedimax.de", true },
   { "dee.pe", true },
   { "defcon.org", true },
   { "dekasan.ru", true },
   { "delbart.se", true },
   { "deliverance.co.uk", false },
+  { "democracy.io", true },
+  { "democracychronicles.com", true },
+  { "demuzere.be", true },
   { "denh.am", true },
   { "depechemode-live.com", true },
   { "derevtsov.com", false },
   { "derhil.de", true },
   { "derp.army", true },
   { "desmaakvanplanten.be", true },
   { "detectify.com", false },
   { "developer.mydigipass.com", false },
   { "developers.facebook.com", false },
+  { "devh.de", true },
+  { "deviltracks.net", true },
   { "devinfo.net", false },
   { "devklog.net", true },
   { "diablotine.rocks", true },
   { "diamante.ro", true },
   { "die-besten-weisheiten.de", true },
+  { "dietrich.cx", true },
   { "digital1st.co.uk", true },
   { "digitalskillswap.com", true },
   { "dillonkorman.com", true },
   { "dinamoelektrik.com", true },
   { "discoveringdocker.com", true },
   { "disking.co.uk", true },
   { "disorderboutique.com", true },
+  { "dissimulo.me", true },
   { "dist.torproject.org", false },
   { "dixmag.com", false },
   { "dl.google.com", true },
   { "dlc.viasinc.com", true },
+  { "dlscomputers.com.au", true },
   { "dm.lookout.com", false },
   { "dm.mylookout.com", false },
   { "dn42.us", true },
   { "dnmlab.it", true },
   { "dnsman.se", true },
+  { "dobet.in", true },
   { "doc.python.org", true },
   { "docs.google.com", true },
   { "docs.python.org", true },
+  { "dogoodbehappyllc.com", true },
   { "dohosting.ru", true },
+  { "domainexpress.de", true },
   { "domainkauf.de", true },
   { "domains.google.com", true },
   { "donmez.uk", true },
   { "donmez.ws", true },
   { "donotcall.gov", true },
   { "dorianmuthig.com", true },
   { "doridian.com", true },
   { "doridian.de", true },
   { "doridian.net", true },
   { "doridian.org", true },
   { "dotsiam.com", true },
   { "dpsg-roden.de", true },
   { "dragons-of-highlands.cz", true },
   { "dreadbyte.com", true },
   { "dreamsforabetterworld.com.au", true },
+  { "dreid.org", true },
   { "drive.google.com", true },
   { "dropbox.com", true },
   { "dropboxer.net", true },
   { "drtroyhendrickson.com", true },
   { "drumbandesperanto.nl", true },
   { "dsebastien.net", true },
   { "dubrovskiy.net", true },
   { "ducohosting.com", true },
   { "dyeager.org", true },
   { "dylanscott.com.au", true },
   { "dynaloop.net", true },
   { "dynamicsnetwork.net", true },
   { "dzlibs.io", true },
+  { "e-deca2.org", true },
   { "e-kontakti.fi", true },
   { "e.mail.ru", true },
   { "earmarks.gov", true },
   { "easysimplecrm.com", false },
   { "eatsleeprepeat.net", true },
   { "ebanking.indovinabank.com.vn", true },
   { "ecake.in", true },
   { "ecdn.cz", true },
   { "ecfs.link", true },
   { "ecg.fr", false },
   { "eckel.co", true },
   { "ecosystem.atlassian.net", true },
   { "ecrimex.net", true },
   { "ectora.com", true },
   { "ed.gs", true },
   { "edge-cloud.net", true },
+  { "ediscomp.sk", true },
+  { "edissecurity.sk", true },
   { "edit.yahoo.com", false },
   { "edix.ru", true },
   { "eduid.se", true },
   { "eduroam.no", true },
   { "edyou.eu", true },
   { "ef.gy", true },
   { "eff.org", true },
   { "egfl.org.uk", true },
   { "egit.co", true },
   { "ego4u.com", true },
   { "ego4u.de", true },
   { "eksisozluk.com", true },
   { "electronic-ignition-system.com", true },
   { "elitegameservers.net", true },
+  { "elitehosting.de", true },
   { "ellegaard.dk", true },
   { "elliquiy.com", true },
   { "elvidence.com.au", true },
   { "emailprivacytester.com", true },
+  { "empowerdb.com", true },
   { "emptypath.com", true },
   { "encircleapp.com", true },
   { "encryptallthethings.net", true },
   { "encrypted.google.com", true },
+  { "endlesshorizon.net", true },
   { "energy-drink-magazin.de", true },
   { "enigmail.net", true },
   { "enorekcah.com", true },
   { "enskat.de", true },
   { "enskatson-sippe.de", true },
+  { "entrepreneur.or.id", true },
   { "entropia.de", false },
+  { "eol34.com", true },
   { "eqorg.com", true },
   { "erisrenee.com", true },
   { "eromixx.com", true },
   { "erotische-aanbiedingen.nl", true },
   { "errors.zenpayroll.com", false },
   { "eru.me", true },
   { "esoa.net", true },
   { "espra.com", true },
   { "ethack.org", true },
   { "ethercalc.com", true },
   { "ethercalc.org", true },
   { "ethitter.com", true },
   { "etoprekrasno.ru", true },
+  { "eucl3d.com", true },
   { "eurotramp.com", true },
   { "eva.cz", true },
   { "evalesc.com", true },
   { "everhome.de", true },
   { "eveshamglass.co.uk", true },
   { "evstatus.com", true },
+  { "ewe2.ninja", true },
   { "exceltobarcode.com", true },
   { "exiahost.com", false },
   { "exon.io", true },
   { "expatads.com", true },
   { "experienceoz.com.au", true },
   { "explodie.org", true },
   { "expoundite.net", true },
   { "extendwings.com", true },
@@ -658,17 +712,16 @@ static const nsSTSPreload kSTSPreloadLis
   { "fastcomcorp.net", true },
   { "fatherhood.gov", true },
   { "faucetbox.com", true },
   { "federalregister.gov", true },
   { "fedorahosted.org", true },
   { "fedorapeople.org", true },
   { "feedbin.com", false },
   { "feedthebot.com", true },
-  { "feen.us", true },
   { "feminists.co", true },
   { "ferienhaus-polchow-ruegen.de", false },
   { "fewo-thueringer-wald.de", true },
   { "ffbans.org", true },
   { "fidanza.eu", true },
   { "fidelapp.com", true },
   { "fiftyshadesofluca.ml", true },
   { "fightr.co", true },
@@ -677,68 +730,76 @@ static const nsSTSPreload kSTSPreloadLis
   { "filip-prochazka.com", true },
   { "finn.io", false },
   { "firebaseio-demo.com", true },
   { "firebaseio.com", true },
   { "firebirdrangecookers.com", true },
   { "firefart.at", true },
   { "firemail.io", true },
   { "firma-offshore.com", true },
+  { "firmapi.com", true },
   { "firstlook.org", true },
   { "fischer-its.com", true },
   { "fish-hook.ru", true },
   { "fitkram.cz", true },
   { "fj.simple.com", false },
   { "flagspot.net", true },
   { "flamer-scene.com", true },
   { "fleximus.org", false },
   { "floobits.com", true },
   { "florian-lillpopp.de", true },
   { "florianlillpopp.de", true },
   { "florianmitrea.uk", true },
   { "flra.gov", true },
   { "flushstudios.com", true },
+  { "fluxent.de", true },
   { "fluxfingers.net", true },
   { "flynn.io", true },
   { "fniephaus.com", true },
   { "food4health.guide", true },
   { "foodwise.marketing", true },
   { "footballmapped.com", true },
   { "forewordreviews.com", true },
   { "forgix.com", true },
+  { "formationsfactory.co.uk", false },
   { "forodeespanol.com", true },
   { "forum.linode.com", false },
   { "forum.quantifiedself.com", true },
   { "foxelbox.com", true },
   { "fralef.me", false },
   { "frederik-braun.com", true },
   { "freenetproject.org", true },
   { "freeshell.de", true },
   { "freesounding.com", true },
   { "freesounding.ru", true },
   { "freethought.org.au", true },
+  { "freeweibo.com", true },
   { "freifunk-essen.de", true },
   { "fretscha.com", true },
   { "friendica.ch", true },
   { "froggstack.de", true },
   { "fronteers.nl", true },
   { "fruchthof24.de", true },
+  { "fruitusers.com", true },
   { "frusky.de", false },
   { "frusky.net", true },
   { "ftccomplaintassistant.gov", true },
   { "fteproxy.org", true },
+  { "funchestra.at", true },
   { "fundingempire.com", true },
   { "furkancaliskan.com", true },
   { "fuzzing-project.org", true },
   { "fx5.de", true },
   { "gallery44.org", true },
   { "gambit.pro", true },
   { "gambitnash.co.uk", true },
   { "gambitnash.com", true },
   { "gambitprint.com", true },
+  { "gamenected.com", true },
+  { "gamenected.de", true },
   { "gamercredo.com", true },
   { "gamercredo.net", true },
   { "gameserver-sponsor.de", true },
   { "garron.net", true },
   { "gavick.com", true },
   { "gaytorrent.ru", true },
   { "gc.net", true },
   { "ge3k.net", true },
@@ -755,54 +816,63 @@ static const nsSTSPreload kSTSPreloadLis
   { "getcloak.com", false },
   { "getcolor.com", true },
   { "getdash.io", true },
   { "getdigitized.net", true },
   { "getfedora.org", true },
   { "getfittedstore.com", true },
   { "getmango.com", true },
   { "getnikola.com", true },
-  { "getsello.com", false },
+  { "getsello.com", true },
   { "getspire.com", true },
+  { "getsport.mobi", true },
   { "getssl.uz", true },
   { "gheorghesarcov.ga", true },
+  { "ghostblog.info", true },
   { "giacomopelagatti.it", true },
   { "gipsamsfashion.com", true },
   { "github.com", true },
   { "github.party", false },
   { "gizzo.sk", true },
   { "glasgestaltung.biz", true },
   { "glass.google.com", true },
   { "globalittech.com", false },
   { "globuli-info.de", true },
   { "glossopnorthendafc.co.uk", true },
   { "gmail.com", false },
   { "gmantra.org", true },
   { "gmcd.co", true },
+  { "gmdu.net", true },
+  { "gnetwork.eu", true },
   { "go-zh.org", true },
   { "go.xero.com", false },
   { "gocardless.com", true },
   { "gokmenguresci.com", true },
   { "goldendata.io", true },
   { "golfscape.com", false },
   { "google", true },
   { "googlemail.com", false },
   { "googleplex.com", true },
   { "gopay.cz", true },
   { "goshop.cz", true },
   { "gothamlimo.com", true },
   { "goto.google.com", true },
   { "gotspot.com", true },
   { "gplintegratedit.com", true },
   { "gpsfix.cz", true },
+  { "gpsvideocanada.com", true },
   { "gra2.com", true },
+  { "gracedays.org", true },
+  { "grafitec.ru", true },
   { "grandcapital.id", true },
   { "grandcapital.ru", true },
   { "grandlinecsk.ru", true },
   { "grc.com", false },
+  { "greatfire.org", true },
+  { "greenroach.ru", true },
   { "greensolid.biz", true },
   { "gregorytlee.me", true },
   { "grepular.com", true },
   { "grigalanzsoftware.com", true },
   { "grimm-gastrobedarf.de", true },
   { "grocock.me.uk", true },
   { "groetzner.net", true },
   { "groszek.pl", true },
@@ -815,47 +885,50 @@ static const nsSTSPreload kSTSPreloadLis
   { "gunnarhafdal.com", true },
   { "guphi.net", true },
   { "guru-naradi.cz", true },
   { "gurusupe.com", true },
   { "guthabenkarten-billiger.de", true },
   { "gvt2.com", true },
   { "gvt3.com", true },
   { "gw2treasures.com", true },
-  { "gwijaya.com", true },
   { "h2check.org", true },
+  { "hablemosdetecnologia.com.ve", true },
   { "hachre.de", false },
   { "hack.li", true },
   { "hackerone-user-content.com", true },
   { "hackerone.com", true },
   { "hafniatimes.com", true },
   { "haircrazy.com", true },
   { "hangouts.google.com", true },
   { "hansvaneijsden.com", true },
   { "happylifestyle.com", true },
   { "happyteamlabs.com", true },
+  { "hardh.at", true },
   { "harvestapp.com", true },
   { "hash-list.com", true },
   { "hashplex.com", true },
   { "hasilocke.de", true },
   { "haste.ch", true },
   { "haufschild.de", true },
   { "hausverbrauch.de", true },
+  { "haveeruexaminer.com", true },
   { "haveibeenpwned.com", true },
   { "hboeck.de", true },
   { "hda.me", true },
   { "healthcare.gov", false },
   { "heartlandrentals.com", true },
   { "heavystresser.com", true },
   { "heftkaufen.de", true },
   { "heh.ee", true },
   { "heha.co", false },
   { "heid.ws", true },
   { "heijblok.com", true },
   { "helichat.de", true },
+  { "helloacm.com", true },
   { "help.simpletax.ca", false },
   { "helpadmin.net", true },
   { "helpium.de", true },
   { "hemlockhillscabinrentals.com", true },
   { "henriknoerr.com", true },
   { "heppler.net", true },
   { "herbert.io", true },
   { "herocentral.de", true },
@@ -885,114 +958,127 @@ static const nsSTSPreload kSTSPreloadLis
   { "hrackydomino.cz", true },
   { "hs-group.net", true },
   { "hsmr.cc", true },
   { "hsr.gov", true },
   { "hstsfail.appspot.com", true },
   { "html5.org", true },
   { "httpswatch.com", true },
   { "humblefinances.com", true },
+  { "hurricanelabs.com", true },
   { "hushfile.it", true },
+  { "hyper-text.org", true },
   { "i10z.com", true },
   { "i5y.co.uk", true },
   { "iamcarrico.com", true },
-  { "ian.sh", true },
   { "iban.is", true },
   { "icq-project.net", true },
   { "id-co.in", true },
   { "id-conf.com", true },
   { "id.atlassian.com", true },
   { "id.mayfirst.org", false },
   { "ideaweb.de", true },
+  { "idndx.com", true },
   { "ieval.ro", true },
   { "ihrlotto.de", true },
   { "iispeed.com", true },
   { "ijohan.nl", true },
   { "ijsclubtilburg.nl", true },
   { "ikkatsu-satei.jp", true },
   { "ilbuongiorno.it", true },
   { "ilikerainbows.co", true },
   { "ilikerainbows.co.uk", false },
+  { "im-c-shop.com", true },
   { "imaginary.ca", true },
   { "imagr.io", true },
   { "imbrian.org", true },
   { "imgg.es", true },
   { "immoverkauf24.at", true },
   { "immoverkauf24.de", true },
   { "imouto.my", false },
   { "impex.com.bd", true },
   { "in.xero.com", false },
   { "inb4.us", true },
+  { "inbitcoin.it", true },
   { "inbounder.io", true },
   { "inbox.google.com", true },
   { "indiecert.net", true },
   { "indovinabank.com.vn", true },
   { "influxus.com", true },
   { "infogrfx.com", true },
   { "informnapalm.org", true },
   { "iniiter.com", true },
   { "initq.net", true },
   { "initrd.net", true },
   { "inkbunny.net", true },
+  { "inksupply.com", true },
   { "inleaked.com", true },
   { "innophate-security.com", true },
   { "innophate-security.nl", true },
   { "insighti.org", true },
   { "insouciant.org", true },
+  { "inspiroinc.com", false },
+  { "instant-hack.com", true },
   { "instasex.ch", true },
   { "integromat.com", true },
   { "interasistmen.se", true },
   { "internetbugbounty.org", true },
   { "interserved.com", true },
   { "interviewpipeline.co.uk", true },
   { "intim-uslugi-kazan.net", true },
   { "ipomue.com", false },
   { "ipsec.pl", true },
   { "ipv6-handbuch.de", true },
   { "iqualtech.com", true },
   { "iranianlawschool.com", true },
+  { "iraqidinar.org", true },
   { "iridiumbrowser.de", true },
   { "irische-segenswuensche.info", true },
   { "irmag.ru", true },
   { "ironfistdesign.com", true },
   { "isimonbrown.co.uk", true },
   { "isitchristmas.com", true },
-  { "isogram.nl", true },
   { "it-schwerin.de", true },
   { "itdashboard.gov", true },
   { "itriskltd.com", true },
+  { "itsagadget.com", true },
   { "itsamurai.ru", true },
   { "itshost.ru", true },
+  { "ivancacic.com", true },
   { "ix8.ru", true },
   { "izdiwho.com", true },
   { "j-lsolutions.com", true },
+  { "j0s.eu", true },
   { "jackyyf.com", false },
   { "jacobparry.ca", false },
   { "jacuzziprozone.com", true },
   { "jahliveradio.com", false },
   { "jakenbake.com", true },
   { "jakub-boucek.cz", true },
   { "jamesbywater.co.uk", true },
   { "jamesbywater.com", true },
   { "jamesbywater.me", true },
   { "jamesbywater.me.uk", true },
   { "jamesbywater.uk", true },
+  { "jamesmaurer.com", true },
   { "jamielinux.com", true },
   { "jamiemagee.co.uk", true },
   { "janoberst.com", true },
   { "jbn.mx", true },
   { "jeff393.com", true },
   { "jelmer.co.uk", true },
   { "jelmer.uk", true },
   { "jeremyness.com", true },
   { "jetaprices.com", false },
   { "jettshome.org", true },
   { "jfreitag.de", true },
   { "jh-media.eu", false },
+  { "jhburton.co.uk", true },
   { "jimshaver.net", true },
+  { "jinbo123.com", true },
   { "jira.com", true },
   { "jitsi.org", false },
   { "jkb.pics", true },
   { "jkbuster.com", true },
   { "jmdekker.it", true },
   { "jmedved.com", true },
   { "jn1.me", true },
   { "jogorama.com.br", true },
@@ -1001,55 +1087,61 @@ static const nsSTSPreload kSTSPreloadLis
   { "johnguant.com", true },
   { "johnmichel.org", true },
   { "jonas-keidel.de", true },
   { "jonaswitmer.ch", true },
   { "jonathan.ir", true },
   { "jondevin.com", true },
   { "jonnybarnes.uk", true },
   { "jonpads.com", true },
+  { "joshstroup.me", true },
   { "jpbike.cz", true },
   { "jrc9.ca", true },
   { "julianmeyer.de", true },
   { "juliansimioni.com", true },
   { "junqtion.com", false },
   { "jurriaan.ninja", true },
+  { "justyy.com", true },
   { "jwilsson.com", true },
   { "jwilsson.me", true },
   { "jwnotifier.org", true },
   { "k-dev.de", true },
   { "kaheim.de", true },
   { "kalevlamps.co.uk", true },
   { "kalmar.com", true },
   { "kaneo-gmbh.de", true },
   { "kantorosobisty.pl", true },
   { "kanzashi.com", true },
   { "karaoketonight.com", true },
   { "kardize24.pl", true },
   { "karmaspa.se", true },
   { "kartonmodellbau.org", true },
+  { "kasko.io", true },
   { "kau-boys.com", true },
   { "kau-boys.de", true },
   { "kaufberatung.community", true },
   { "kavovary-kava.cz", true },
+  { "kawaii.io", true },
+  { "kazandaemon.ru", true },
+  { "kbcequitas.hu", true },
   { "kbit.dk", true },
   { "kdex.de", true },
   { "kdyby.org", true },
   { "kedarastudios.com", true },
   { "keeleysam.com", true },
   { "keeleysam.me", true },
   { "keepa.com", true },
   { "keepclean.me", true },
   { "keeperapp.com", true },
   { "keepersecurity.com", true },
   { "kernel-error.de", true },
+  { "keskeces.com", true },
   { "kevincox.ca", true },
   { "keybase.io", true },
   { "keycdn.com", true },
-  { "keycom.co.uk", true },
   { "keyerror.com", true },
   { "khanovaskola.cz", true },
   { "khipu.com", true },
   { "khmath.com", true },
   { "ki-on.net", true },
   { "kick-in.nl", true },
   { "kickass.al", true },
   { "kinderbasar-luhe.de", true },
@@ -1090,17 +1182,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "kraken.io", true },
   { "kreativstrecke.de", true },
   { "kredite.sale", true },
   { "kredite24.de", true },
   { "ks-watch.de", true },
   { "kschv-rdeck.de", true },
   { "kuppingercole.com", true },
   { "kupschke.net", true },
-  { "kura.io", true },
+  { "kura.io", false },
   { "labaia.info", true },
   { "lachlankidson.net", true },
   { "laf.in.net", true },
   { "lagerauftrag.info", true },
   { "lancejames.com", true },
   { "lapetition.be", true },
   { "lasst-uns-beten.de", true },
   { "lastpass.com", false },
@@ -1110,21 +1202,24 @@ static const nsSTSPreload kSTSPreloadLis
   { "lavval.com", true },
   { "lb-toner.de", true },
   { "leadbook.ru", true },
   { "leakedminecraft.net", true },
   { "leanclub.org", true },
   { "ledhouse.sk", true },
   { "leerliga.de", true },
   { "legoutdesplantes.be", true },
+  { "lehighmathcircle.org", true },
   { "leibniz-remscheid.de", true },
   { "leifdreizler.com", true },
   { "lellyboi.ml", true },
   { "lence.net", true },
   { "leninalbertop.com.ve", true },
+  { "lenzw.de", true },
+  { "leon-jaekel.com", true },
   { "leonardcamacho.me", true },
   { "leonax.net", true },
   { "leonklingele.de", true },
   { "les-corsaires.net", true },
   { "libfte.org", true },
   { "libraryfreedomproject.org", true },
   { "lichtspot.de", true },
   { "liebel.org", true },
@@ -1136,16 +1231,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "limitededitionsolutions.com", true },
   { "limpid.nl", true },
   { "lingolia.com", true },
   { "linguaquote.com", true },
   { "linguatrip.com", false },
   { "linode.com", false },
   { "linorman1997.me", true },
   { "linux-admin-california.com", true },
+  { "linuxcommand.ru", true },
   { "linx.li", true },
   { "linx.net", true },
   { "liquorsanthe.in", true },
   { "lists.mayfirst.org", false },
   { "lists.stg.fedoraproject.org", true },
   { "livej.am", true },
   { "livekaarten.nl", true },
   { "liverewrite.com", true },
@@ -1165,31 +1261,31 @@ static const nsSTSPreload kSTSPreloadLis
   { "login.persona.org", true },
   { "login.sapo.pt", true },
   { "login.ubuntu.com", true },
   { "login.xero.com", false },
   { "login.yahoo.com", false },
   { "lolicore.ch", true },
   { "lookout.com", false },
   { "lookyman.net", true },
-  { "lookzook.com", true },
   { "lore.azurewebsites.net", true },
   { "ludwig.im", true },
   { "luelistan.net", true },
   { "lukasztkacz.com", true },
   { "lumi.do", false },
   { "luneta.nearbuysystems.com", false },
   { "luxwatch.com", true },
   { "lymia.moe", true },
   { "lyst.co.uk", true },
   { "m.facebook.com", false },
   { "m.mail.ru", true },
   { "m0wef.uk", true },
   { "maartenvandekamp.nl", true },
   { "mach-politik.ch", true },
+  { "maclemon.at", true },
   { "madars.org", true },
   { "madeitwor.se", true },
   { "mafamane.com", true },
   { "maff.scot", false },
   { "magneticanvil.com", true },
   { "mahamed91.pw", true },
   { "mail-settings.google.com", true },
   { "mail.de", true },
@@ -1200,16 +1296,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "makeitdynamic.com", true },
   { "makeyourlaws.org", true },
   { "mall.cz", true },
   { "mall.hu", true },
   { "mall.pl", true },
   { "mall.sk", true },
   { "malnex.de", true },
   { "malwre.io", true },
+  { "mammaw.com", true },
   { "man3s.jp", true },
   { "manage.cm", true },
   { "manage.zenpayroll.com", false },
   { "manageprojects.com", true },
   { "manager.linode.com", false },
   { "mandala-ausmalbilder.de", true },
   { "manfredimatteo.com", true },
   { "manicode.com", true },
@@ -1217,35 +1314,42 @@ static const nsSTSPreload kSTSPreloadLis
   { "markayapilandirma.com", true },
   { "market.android.com", true },
   { "markhaehnel.de", true },
   { "markusueberallassetmanagement.de", true },
   { "marshut.net", true },
   { "massivum.de", false },
   { "masters.black", true },
   { "matatall.com", false },
+  { "maternalsafety.org", true },
   { "mathiasbynens.be", true },
   { "matteomarescotti.it", true },
   { "mattfin.ch", true },
   { "mattmccutchen.net", true },
   { "mattsvensson.com", true },
+  { "max-moeglich.de", true },
   { "max.gov", true },
   { "maximelouet.me", true },
   { "mbasic.facebook.com", false },
   { "mblankhorst.nl", true },
   { "mbp.banking.co.at", false },
   { "mc-venture.net", false },
   { "mcard.vn", true },
+  { "mclab.su", true },
   { "mcnext.net", true },
   { "md5file.com", true },
+  { "mdek.at", true },
   { "mdfnet.se", false },
   { "me.net.nz", true },
   { "meamod.com", true },
   { "medallia.io", true },
+  { "meddelare.com", true },
+  { "medexpress.co.uk", true },
   { "mediacru.sh", true },
+  { "mediawiki.org", true },
   { "medium.com", true },
   { "medovea.ru", true },
   { "medtehnika.ua", true },
   { "meetfinch.com", true },
   { "meetings2.com", true },
   { "mega.co.nz", true },
   { "mega.nz", true },
   { "megaplan.cz", true },
@@ -1263,66 +1367,72 @@ static const nsSTSPreload kSTSPreloadLis
   { "metrobriefs.com", true },
   { "mevs.cz", true },
   { "mh-bloemen.co.jp", true },
   { "mhx.pw", true },
   { "michalspacek.cz", true },
   { "miconcinemas.com", true },
   { "mig5.net", true },
   { "mijn-email.org", true },
+  { "mikaela.info", true },
   { "mike-bland.com", true },
   { "miketabor.com", true },
   { "mikewest.org", true },
   { "miku.hatsune.my", false },
+  { "milahendri.com", false },
   { "millistream.com", true },
   { "mim.properties", true },
   { "mimeit.de", true },
   { "mimovrste.com", true },
   { "mindcoding.ro", true },
   { "mindoktor.se", true },
   { "minecraftvoter.com", true },
   { "mineover.es", true },
   { "minez-nightswatch.com", false },
   { "minikneet.com", true },
   { "minkondom.nu", true },
   { "minnesotadata.com", true },
   { "mironet.cz", true },
   { "miskatonic.org", true },
   { "miss-inventory.co.uk", true },
+  { "mistacms.com", true },
   { "mister.hosting", true },
   { "mitell.jp", false },
   { "mittenhacks.com", true },
   { "mjanja.ch", true },
   { "mkcert.org", true },
   { "mkw.st", true },
   { "mnsure.org", true },
   { "mobilcom-debitel-empfehlen.de", true },
   { "mobile.usaa.com", false },
   { "mobilux.lv", true },
   { "mobobe.com", true },
   { "mocloud.eu", true },
   { "modeldimension.com", true },
   { "modmountain.com", true },
+  { "mojapraca.sk", true },
   { "mokote.com", true },
   { "mondwandler.de", true },
+  { "moniquedekermadec.com", true },
   { "morethanadream.lv", true },
   { "moriz.de", true },
   { "moriz.net", true },
   { "mothereff.in", true },
   { "moula.com.au", true },
   { "mountainmusicpromotions.com", true },
   { "mountainroseherbs.com", true },
   { "movlib.org", true },
   { "mp3gratuiti.com", true },
   { "mp3juices.is", true },
   { "mpreserver.com", true },
   { "mqas.net", true },
   { "mr-hosting.com", true },
   { "msa-aesch.ch", true },
   { "msc-seereisen.net", true },
+  { "msebera.cz", true },
   { "mtau.com", true },
   { "mthode.org", true },
   { "mths.be", true },
   { "mtouch.facebook.com", false },
   { "mudcrab.us", true },
   { "mujadin.se", true },
   { "multigamecard.com", true },
   { "munich-rage.de", true },
@@ -1336,24 +1446,26 @@ static const nsSTSPreload kSTSPreloadLis
   { "mutamatic.com", true },
   { "mutantmonkey.in", true },
   { "mutantmonkey.info", true },
   { "mutantmonkey.sexy", true },
   { "mvno.io", true },
   { "mvsecurity.nl", true },
   { "mwe.st", false },
   { "my.onlime.ch", false },
+  { "my.usa.gov", false },
   { "my.xero.com", false },
   { "myaccount.google.com", true },
   { "mygadgetguardian.lookout.com", false },
   { "mygretchen.de", true },
   { "mykontool.de", true },
   { "mylookout.com", false },
   { "myni.io", true },
   { "mynigma.org", true },
+  { "mypagella.com", true },
   { "myplaceonline.com", true },
   { "myprintcard.de", true },
   { "myvirtualserver.com", true },
   { "nachsendeauftrag.net", true },
   { "nachsenden.info", true },
   { "naiharngym.com", true },
   { "nameid.org", true },
   { "namepros.com", true },
@@ -1361,16 +1473,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "nanderson.me", true },
   { "narodniki.com", true },
   { "nationalpriorities.org", true },
   { "navycs.com", true },
   { "nayahe.ru", true },
   { "nbl.org.tw", true },
   { "nctx.co.uk", true },
   { "ndarville.com", true },
+  { "necesitodinero.org", true },
   { "nectarleaf.com", true },
   { "neg9.org", false },
   { "neilwynne.com", false },
   { "neko.li", true },
   { "nella-project.org", true },
   { "nellacms.com", true },
   { "nellacms.org", true },
   { "nellafw.org", true },
@@ -1420,24 +1533,28 @@ static const nsSTSPreload kSTSPreloadLis
   { "null.tips", true },
   { "nuos.org", true },
   { "nutsandboltsmedia.com", true },
   { "nuvini.com", true },
   { "nwa.xyz", true },
   { "nwgh.org", true },
   { "nymphetomania.net", true },
   { "oakslighting.co.uk", true },
+  { "obermeiers.eu", true },
   { "ocrami.us", true },
+  { "odin.xxx", true },
   { "offshore-firma.org", true },
   { "oguya.ch", true },
   { "ohling.org", true },
   { "ohnemusik.com", true },
   { "okmx.de", true },
   { "okonetwork.org.uk", true },
   { "olivierlemoal.fr", true },
+  { "ollning.com", true },
+  { "omacostudio.com", true },
   { "omitech.co.uk", true },
   { "onedot.nl", true },
   { "onedrive.com", true },
   { "onedrive.live.com", false },
   { "onewpst.com", false },
   { "onsitemassageco.com", true },
   { "ontimestamp.com", true },
   { "ooonja.de", true },
@@ -1456,16 +1573,18 @@ static const nsSTSPreload kSTSPreloadLis
   { "ouvirmusica.com.br", true },
   { "ovenapp.io", true },
   { "oversight.io", true },
   { "ownmovies.fr", true },
   { "p.linode.com", false },
   { "p8r.de", true },
   { "packagist.org", false },
   { "pactf.com", true },
+  { "pagure.io", true },
+  { "pagure.org", true },
   { "pajonzeck.de", true },
   { "palava.tv", true },
   { "pap.la", false },
   { "parent5446.us", true },
   { "parsemail.org", true },
   { "partyvan.eu", true },
   { "partyvan.it", true },
   { "partyvan.nl", true },
@@ -1491,59 +1610,63 @@ static const nsSTSPreload kSTSPreloadLis
   { "paulschreiber.com", true },
   { "pay.gigahost.dk", true },
   { "paymentaccuracy.gov", true },
   { "payments-reference.org", true },
   { "paymill.com", true },
   { "paymill.de", true },
   { "paypal.com", false },
   { "payroll.xero.com", false },
+  { "paysera.com", true },
   { "pbprint.ru", false },
   { "pcfeuerwehr.de", true },
   { "pclob.gov", true },
   { "pdf.yt", true },
   { "peercraft.com", true },
   { "pentesterlab.com", true },
   { "perfectionis.me", true },
   { "personaldatabasen.no", true },
   { "pestici.de", true },
+  { "petersmark.com", true },
   { "petplum.com", true },
   { "petrachuk.ru", true },
   { "petrolplus.ru", true },
   { "pharmaboard.de", true },
-  { "phcorner.net", true },
   { "phil.tw", true },
   { "philosopherswool.com", true },
   { "phoenix.dj", true },
   { "phoenixlogan.com", true },
   { "phryanjr.com", false },
+  { "phryneas.de", true },
   { "phurl.de", true },
   { "pi-supply.com", true },
   { "picksin.club", true },
   { "picsto.re", true },
   { "pieperhome.de", true },
   { "pierre-schmitz.com", true },
   { "pieterhordijk.com", true },
   { "pijuice.com", true },
+  { "pinesandneedles.com", true },
   { "piratedb.com", true },
   { "piratedot.com", true },
   { "pirateproxy.sx", true },
   { "pirlitu.com", true },
   { "pirxpilot.me", true },
   { "pixel.facebook.com", false },
   { "pixi.me", true },
   { "play.google.com", true },
   { "playkh.com", true },
   { "plothost.com", true },
   { "plus.google.com", false },
   { "plus.sandbox.google.com", false },
   { "plzenskybarcamp.cz", true },
   { "pmg-offshore-company.com", true },
   { "pmg-purchase.com", true },
   { "pmg-purchase.net", true },
+  { "pmnts.io", true },
   { "poed.com.au", true },
   { "poedgirl.com", true },
   { "pollpodium.nl", true },
   { "polymathematician.com", true },
   { "polypho.nyc", true },
   { "ponythread.com", true },
   { "poolvilla-margarita.net", true },
   { "portal.tirol.gv.at", true },
@@ -1559,17 +1682,16 @@ static const nsSTSPreload kSTSPreloadLis
   { "preloaded-hsts.badssl.com", true },
   { "presidentials2016.com", true },
   { "privategiant.com", true },
   { "profiles.google.com", true },
   { "progg.no", true },
   { "progressiveplanning.com", true },
   { "projectascension.io", true },
   { "projektzentrisch.de", true },
-  { "prontolight.com", true },
   { "proofwiki.org", true },
   { "propagandism.org", true },
   { "prospo.co", true },
   { "prowhisky.de", true },
   { "proximato.com", true },
   { "proxybay.club", true },
   { "proxybay.co", true },
   { "proxybay.info", true },
@@ -1582,73 +1704,80 @@ static const nsSTSPreload kSTSPreloadLis
   { "purewebmasters.com", false },
   { "pwd.ovh", true },
   { "pypa.io", true },
   { "pypi.python.org", true },
   { "python.org", false },
   { "qa.fedoraproject.org", true },
   { "qa.stg.fedoraproject.org", true },
   { "qetesh.de", true },
+  { "qingxuan.info", true },
   { "qixxit.de", true },
   { "qualityhomesystems.com", true },
   { "quebecmailbox.com", true },
   { "quli.nl", true },
   { "quuz.org", true },
   { "r3s1stanc3.me", true },
+  { "raah.co", true },
   { "rad-route.de", true },
   { "radiormi.com", true },
   { "radtke.bayern", true },
   { "rafaelcz.de", true },
   { "ragingserenity.com", true },
   { "railgun.ac", true },
-  { "raiseyourflag.com", true },
   { "rambitteh.ru", true },
   { "ramsor-gaming.de", true },
   { "rasing.me", true },
   { "raspass.me", true },
   { "ravchat.com", true },
   { "rawstorieslondon.com", true },
   { "raydobe.me", false },
   { "raymii.org", true },
   { "reaconverter.com", true },
+  { "recon-networks.com", true },
   { "red-t-shirt.ru", true },
   { "redirect.fedoraproject.org", true },
   { "redirect.stg.fedoraproject.org", true },
   { "redletter.link", true },
   { "redlink.de", true },
   { "redteam-pentesting.de", true },
   { "reedloden.com", true },
   { "refundo.cz", true },
   { "refundo.sk", true },
   { "reg.ru", false },
+  { "regar42.fr", false },
   { "reishunger.de", true },
   { "release-monitoring.org", true },
   { "reliable-mail.de", true },
   { "renem.net", true },
+  { "renlong.org", true },
   { "report-uri.io", true },
   { "research.facebook.com", false },
   { "research.md", true },
   { "residentsinsurance.co.uk", true },
   { "resources.flowfinity.com", true },
   { "retroarms.com", true },
   { "retroarms.cz", true },
+  { "reucon.com", true },
   { "reviews.anime.my", true },
   { "riccy.org", true },
   { "richardwarrender.com", true },
   { "richiemail.net", true },
   { "ricochet.im", true },
   { "rid-wan.com", true },
   { "riesenmagnete.de", true },
   { "rigolitch.fr", false },
   { "rika.me", true },
   { "rippleunion.com", true },
   { "rischard.org", true },
+  { "ristioja.ee", true },
   { "rlalique.com", true },
   { "rmmanfredi.com", true },
   { "robertglastra.com", true },
+  { "roberthurlbut.com", true },
   { "robertof.ovh", true },
   { "robinadr.com", true },
   { "robinsonyu.com", true },
   { "robteix.com", true },
   { "robtex.com", true },
   { "robtex.net", true },
   { "rodosto.com", true },
   { "roeper.party", true },
@@ -1743,95 +1872,107 @@ static const nsSTSPreload kSTSPreloadLis
   { "servergno.me", true },
   { "servertastic.com", true },
   { "servethecity-karlsruhe.de", false },
   { "setuid.io", true },
   { "seyahatsagliksigortalari.com", true },
   { "sh-network.de", true },
   { "shaaaaaaaaaaaaa.com", true },
   { "shadex.net", true },
+  { "shadowkitsune.net", true },
   { "shakepeers.org", true },
   { "shamka.ru", true },
   { "shanewadleigh.com", true },
   { "shasso.com", true },
+  { "shaundanielz.com", true },
   { "shellsec.pw", true },
+  { "shellvatore.us", true },
   { "shenyuqi.com", true },
   { "sherbers.de", true },
   { "shft.cl", true },
   { "shiinko.com", false },
   { "shipard.com", true },
+  { "shipcloud.io", true },
   { "shodan.io", true },
   { "shopontarget.com", true },
   { "shortdiary.me", true },
   { "sidium.de", true },
   { "siewert-kau.de", true },
   { "sigterm.sh", true },
   { "sikayetvar.com", true },
   { "silentcircle.com", false },
+  { "silvergoldbull.com", true },
+  { "silvergoldbull.de", true },
   { "simbolo.co.uk", false },
   { "simple.com", false },
   { "simpletax.ca", false },
+  { "simplexsupport.com", true },
   { "simplia.cz", true },
   { "simplystudio.com", true },
   { "siraweb.org", true },
   { "siriad.com", true },
   { "sites.google.com", true },
   { "sitesko.de", true },
   { "sitesten.com", true },
   { "sizzle.co.uk", true },
   { "sjoorm.com", true },
   { "skeeley.com", true },
   { "skhosting.eu", true },
   { "skogsbruket.fi", true },
   { "skogskultur.fi", true },
   { "skydrive.live.com", false },
   { "slack-files.com", true },
   { "slack.com", true },
+  { "slainvet.net", true },
   { "slattery.co", true },
   { "sleio.com", true },
   { "slever.cz", true },
   { "slevomat.cz", true },
   { "slicketl.com", true },
   { "slidebatch.com", true },
   { "slope.haus", true },
   { "slse.ca", true },
   { "smartcleaningcenter.nl", true },
   { "smartcoin.com.br", true },
   { "smartlend.se", true },
+  { "smartlocksmith.com", true },
   { "smartship.co.jp", true },
   { "smiatek.name", true },
   { "smith.is", true },
   { "snailing.org", true },
-  { "snakehosting.dk", true },
+  { "snakehosting.dk", false },
   { "snazel.co.uk", true },
   { "sneakynote.com", true },
   { "sneberger.cz", false },
   { "sneezry.com", true },
   { "sny.no", true },
   { "soccergif.com", true },
   { "soci.ml", true },
+  { "social-media-strategies.it", true },
   { "socialrank.com", false },
   { "socialspirit.com.br", false },
+  { "sockeye.cc", true },
   { "soia.ca", true },
   { "solihullcarnival.co.uk", true },
   { "solihulllionsclub.org.uk", true },
   { "sonafe.info", true },
   { "sorz.org", true },
   { "souki.cz", true },
   { "soulfulglamour.uk", true },
   { "soulogic.com", true },
   { "sour.is", true },
   { "sourceway.de", true },
   { "southside-crew.com", true },
   { "souvik.me", true },
+  { "sparklingsparklers.com", true },
   { "spawn.cz", true },
   { "speedcounter.net", true },
-  { "spencerbaer.com", true },
   { "spideroak.com", true },
   { "spongepowered.org", true },
+  { "sportifik.com", true },
   { "spreadsheets.google.com", true },
   { "spreed.me", true },
   { "sprueche-zum-valentinstag.de", true },
   { "sprueche-zur-geburt.info", true },
   { "sprueche-zur-hochzeit.de", true },
   { "sprueche-zur-konfirmation.de", true },
   { "spyroszarzonis.com", true },
   { "squareup.com", false },
@@ -1867,16 +2008,18 @@ static const nsSTSPreload kSTSPreloadLis
   { "student.andover.edu", true },
   { "studienportal.eu", true },
   { "studydrive.net", true },
   { "stulda.cz", true },
   { "subeesu.com", true },
   { "subrosa.io", true },
   { "sufix.cz", true },
   { "suite73.org", true },
+  { "sunjaydhama.com", true },
+  { "sunnyfruit.ru", true },
   { "suos.io", true },
   { "supplies24.at", true },
   { "supplies24.es", true },
   { "support.mayfirst.org", false },
   { "surkatty.org", true },
   { "survivalmonkey.com", true },
   { "svager.cz", true },
   { "swehack.org", false },
@@ -1884,16 +2027,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "sylaps.com", true },
   { "syncappate.com", true },
   { "sysctl.se", true },
   { "sysdb.io", true },
   { "syso.name", true },
   { "syss.de", true },
   { "system.is", true },
   { "syzygy-tables.info", true },
+  { "szaydon.me", false },
   { "t23m-navi.jp", false },
   { "tadigitalstore.com", true },
   { "tageau.com", true },
   { "taken.pl", true },
   { "talideon.com", true },
   { "talk.google.com", true },
   { "talkgadget.google.com", true },
   { "tallr.se", true },
@@ -1901,77 +2045,89 @@ static const nsSTSPreload kSTSPreloadLis
   { "tas2580.net", true },
   { "taskotron.fedoraproject.org", true },
   { "taskotron.stg.fedoraproject.org", true },
   { "tatort-fanpage.de", true },
   { "tauchkater.de", true },
   { "taxsquirrel.com", true },
   { "tbarter.com", true },
   { "tbspace.de", true },
+  { "tcao.info", true },
   { "tcgrepublic.com", true },
   { "tdelmas.ovh", true },
   { "tdrs.info", true },
   { "teachforcanada.ca", true },
+  { "teamblueridge.org", true },
   { "teamnorthgermany.de", true },
   { "teamupturn.com", true },
+  { "tecart-cloud.de", true },
+  { "tecart-system.de", true },
+  { "tecartcrm.de", true },
+  { "techandtux.de", true },
   { "techhipster.net", true },
   { "techhub.ml", true },
   { "techllage.com", true },
   { "techloaner.com", true },
   { "technotonic.com.au", false },
   { "techvalue.gr", true },
   { "tegelsensanitaironline.nl", true },
+  { "tehrabbitt.com", true },
   { "tekshrek.com", true },
+  { "temp.pm", true },
   { "tempus-aquilae.de", true },
   { "tent.io", true },
   { "terraelectronica.ru", true },
   { "terraweb.net", true },
   { "terrax.info", true },
   { "terrax.net", true },
   { "terrty.net", true },
   { "testsuite.org", true },
   { "texte-zur-taufe.de", true },
   { "thca.ca", true },
   { "theamp.com", true },
   { "thebimhub.com", true },
-  { "thecoffeehouse.xyz", true },
   { "thecustomizewindows.com", true },
   { "theescapistswiki.com", true },
-  { "thefrozenfire.com", true },
+  { "thefrozenfire.com", false },
+  { "thehiddenbay.me", true },
   { "thehiddenbay.net", true },
   { "themarshallproject.org", true },
   { "themoep.at", true },
   { "thepaymentscompany.com", true },
   { "thepiratebay.al", true },
   { "therapynotes.com", true },
   { "thetomharling.com", true },
   { "theunitedstates.io", true },
-  { "theweilai.com", true },
+  { "theweilai.com", false },
   { "thom4s.info", true },
   { "thomasgriffin.io", true },
   { "thomastimepieces.com.au", true },
   { "thorgames.nl", true },
   { "thouni.de", true },
   { "throwpass.com", true },
   { "thumbtack.com", true },
   { "thusoy.com", true },
   { "thyngster.com", false },
+  { "ticketmates.com.au", true },
   { "tickopa.co.uk", true },
   { "tid.jp", true },
   { "timmy.ws", true },
   { "timotrans.de", true },
   { "timotrans.eu", true },
   { "timtaubert.de", true },
   { "tinfoilsecurity.com", false },
   { "tinkertry.com", false },
   { "tinte24.de", true },
   { "tintenfix.net", true },
+  { "tinyvpn.net", true },
+  { "tinyvpn.org", true },
   { "tipps-fuer-den-haushalt.de", true },
   { "tittelbach.at", true },
   { "tls.li", true },
+  { "tls1914.org", true },
   { "tmtopup.com", true },
   { "tno.io", true },
   { "todesschaf.org", true },
   { "todoist.com", true },
   { "tollsjekk.no", true },
   { "tom.horse", true },
   { "tomfisher.eu", true },
   { "tomharling.co.uk", true },
@@ -1993,103 +2149,117 @@ static const nsSTSPreload kSTSPreloadLis
   { "tonermaus.de", true },
   { "tonermonster.de", true },
   { "tonex.de", true },
   { "tonex.nl", true },
   { "tonytan.cn", true },
   { "tonytan.io", true },
   { "tonywebster.com", true },
   { "topbargains.com.au", true },
+  { "topnewstoday.org", true },
   { "topodin.com", true },
   { "topshelfguild.com", true },
   { "toptexture.com", true },
   { "tor2web.org", true },
   { "tormentedradio.com", true },
   { "torproject.org", false },
   { "torquato.de", false },
+  { "tosecure.link", true },
   { "toshnix.com", true },
+  { "totalcarcheck.co.uk", true },
   { "totem-eshop.cz", true },
   { "touch.facebook.com", false },
   { "touch.mail.ru", true },
   { "tox.im", true },
+  { "toxme.se", true },
   { "tpbcdn.com", true },
   { "tpbproxy.co", true },
   { "tppleague.me", true },
   { "traas.org", true },
+  { "track.plus", true },
   { "tracktivity.com.au", true },
   { "translate.fedoraproject.org", true },
   { "translate.googleapis.com", true },
   { "translate.stg.fedoraproject.org", true },
   { "trashnothing.com", true },
   { "trauertexte.info", true },
   { "tresorit.com", true },
   { "tribaldos.com", true },
   { "tribut.de", true },
+  { "trueblueessentials.com", true },
   { "ts3.consulting", true },
   { "tuamoronline.com", true },
   { "tucuxi.org", true },
   { "tuitle.com", true },
+  { "tumutanzi.com", true },
   { "tunebitfm.de", true },
   { "tuxgeo.com", true },
   { "tuxplace.nl", true },
+  { "tuzaijidi.com", true },
   { "twentymilliseconds.com", true },
   { "twisto.cz", true },
   { "twitter.com", false },
   { "twitteroauth.com", true },
   { "twofactorauth.org", true },
   { "twolinepassbrewing.com", true },
   { "typingrevolution.com", true },
   { "uae-company-service.com", true },
   { "ub3rk1tten.com", false },
   { "ubanquity.com", true },
-  { "uber.com", true },
   { "ubertt.org", true },
   { "ucfirst.nl", true },
   { "ukdefencejournal.org.uk", true },
   { "ukhas.net", true },
   { "ukrainians.ch", true },
   { "ulabox.com", true },
+  { "un-zero-un.fr", true },
   { "uniekglas.nl", true },
+  { "unionstationapp.com", true },
   { "unison.com", true },
   { "unitedadmins.com", true },
   { "unknownphenomena.net", true },
   { "unravel.ie", true },
   { "unterfrankenclan.de", true },
   { "uonstaffhub.com", true },
   { "uow.ninja", true },
   { "upitnik.rs", true },
   { "upload.facebook.com", false },
+  { "uploadbeta.com", true },
   { "uptrends.com", true },
   { "uptrends.de", true },
   { "usaa.com", false },
   { "uscntalk.com", true },
   { "uspsoig.gov", true },
   { "utilityapi.com", true },
   { "utleieplassen.no", true },
+  { "utonia.ch", true },
   { "vaddder.com", true },
   { "vanhoutte.be", true },
   { "vapemania.eu", true },
   { "varden.info", true },
   { "vasanth.org", true },
   { "vbh2o.com", true },
   { "vbhelp.org", true },
   { "vbulletin-russia.com", true },
   { "vbulletinrussia.com", true },
   { "vcsjones.com", true },
   { "vechkasov.ru", true },
   { "venicerealdeal.com", true },
   { "vhost.co.id", true },
   { "viasinc.com", false },
+  { "victorcanera.com", true },
+  { "viennan.net", true },
   { "vigo-krankenversicherung.de", true },
   { "vijos.org", true },
   { "visionless.me", false },
   { "vitrado.de", true },
   { "vmoagents.com", false },
   { "vocaloid.my", true },
   { "voicesuk.co.uk", true },
+  { "vokeapp.com", true },
   { "vomitb.in", true },
   { "vortexhobbies.com", true },
   { "votocek.cz", true },
   { "votockova.cz", true },
   { "vox.vg", true },
   { "vpnzoom.com", true },
   { "vrobert.fr", false },
   { "vrtak-cz.net", true },
@@ -2098,32 +2268,32 @@ static const nsSTSPreload kSTSPreloadLis
   { "vzk.io", false },
   { "w-spotlight.appspot.com", true },
   { "wachter.biz", true },
   { "wallet.google.com", true },
   { "walnutgaming.co.uk", true },
   { "walnutgaming.com", true },
   { "warrencreative.com", false },
   { "watsonhall.uk", true },
+  { "waze.com", true },
   { "wbg-vs.de", true },
   { "wearvr.com", true },
   { "webandmore.de", false },
   { "webandwords.com.au", true },
   { "webassadors.com", false },
   { "webcollect.org.uk", true },
   { "webeau.com", true },
   { "webfilings-eu-mirror.appspot.com", true },
   { "webfilings-eu.appspot.com", true },
   { "webfilings-mirror-hrd.appspot.com", true },
   { "webfilings.appspot.com", true },
   { "weblogzwolle.nl", true },
   { "webmail.gigahost.dk", false },
   { "webmail.onlime.ch", false },
   { "webmail.schokokeks.org", false },
-  { "webmaniabr.com", true },
   { "webmarketingfestival.it", true },
   { "webogram.org", true },
   { "webrebels.org", true },
   { "websenat.de", true },
   { "webstudio-n.com", true },
   { "webswitch.io", true },
   { "webtalis.nl", true },
   { "webtiles.co.uk", true },
@@ -2146,39 +2316,53 @@ static const nsSTSPreload kSTSPreloadLis
   { "wf-training-hrd.appspot.com", true },
   { "wf-training-master.appspot.com", true },
   { "wf-trial-hrd.appspot.com", true },
   { "whatwg.org", true },
   { "whd-guide.de", true },
   { "when-release.ru", true },
   { "when.fm", true },
   { "wherephoto.com", true },
+  { "whitehouse.gov", true },
   { "whitestagforge.com", true },
   { "whocalld.com", true },
+  { "wholebites.com", true },
   { "whonix.org", true },
   { "widememory.com", true },
   { "wieninternational.at", true },
   { "wifirst.net", true },
   { "wiki.python.org", true },
+  { "wikibooks.org", true },
   { "wikidata.org", true },
+  { "wikimediafoundation.org", true },
+  { "wikinews.org", true },
+  { "wikipedia.org", true },
+  { "wikiquote.org", true },
+  { "wikisource.org", true },
+  { "wikiversity.org", true },
+  { "wikivoyage.org", true },
+  { "wiktionary.org", true },
   { "wildbee.org", true },
   { "wilf1rst.com", true },
   { "williamsapiens.com", true },
   { "williamsonshore.com", true },
   { "willnorris.com", true },
   { "wills.co.tt", true },
   { "winhistory-forum.net", true },
   { "winsec.nl", true },
   { "wisv.ch", true },
   { "wit.ai", true },
   { "wonderhost.info", true },
   { "wondershift.biz", true },
   { "wootton95.com", true },
+  { "worcesterfestival.co.uk", true },
+  { "woresite.jp", true },
   { "worldcubeassociation.org", true },
   { "wownmedia.com", true },
+  { "wpletter.de", true },
   { "wpmeetup-berlin.de", true },
   { "writeapp.me", false },
   { "wtfismyip.com", true },
   { "wubthecaptain.eu", true },
   { "wunderlist.com", true },
   { "wundi.net", true },
   { "wurzelzwerg.net", true },
   { "wvr-law.de", true },
@@ -2188,16 +2372,17 @@ static const nsSTSPreload kSTSPreloadLis
   { "www.banking.co.at", false },
   { "www.braintreepayments.com", false },
   { "www.capitainetrain.com", false },
   { "www.cyveillance.com", true },
   { "www.dropbox.com", true },
   { "www.dropcam.com", false },
   { "www.entropia.de", false },
   { "www.eternalgoth.co.uk", true },
+  { "www.etsy.com", true },
   { "www.evernote.com", false },
   { "www.facebook.com", false },
   { "www.gamesdepartment.co.uk", false },
   { "www.getcloak.com", false },
   { "www.gmail.com", false },
   { "www.googlemail.com", false },
   { "www.gov.uk", false },
   { "www.grc.com", false },
@@ -2226,26 +2411,31 @@ static const nsSTSPreload kSTSPreloadLis
   { "www.twitter.com", false },
   { "www.usaa.com", false },
   { "www.viasinc.com", true },
   { "www.wepay.com", false },
   { "www.zenpayroll.com", false },
   { "wzrd.in", true },
   { "wzyboy.org", true },
   { "x.io", true },
+  { "x.st", true },
+  { "x64architecture.com", true },
   { "xavierbarroso.com", true },
   { "xbrlsuccess.appspot.com", true },
   { "xcoop.me", true },
   { "xenesisziarovky.sk", true },
   { "xf-liam.com", true },
   { "xgclan.com", true },
   { "xho.me", true },
   { "xiaolvmu.me", true },
+  { "xn--datenrettung-mnchen-jbc.com", true },
+  { "xn--hfk-allgu-schwaben-stb.de", true },
   { "xn--knstler-n2a.tips", false },
   { "xn--maraa-rta.org", true },
+  { "xn--mgbbh2a9fub.xn--ngbc5azd", true },
   { "xn--u9jv84l7ea468b.com", true },
   { "xpd.se", true },
   { "xps2pdf.co.uk", true },
   { "xtrim.ru", true },
   { "xuntier.ch", true },
   { "y-o-w.com", true },
   { "yafuoku.ru", true },
   { "yahvehyireh.com", true },
@@ -2255,30 +2445,32 @@ static const nsSTSPreload kSTSPreloadLis
   { "yello.website", true },
   { "yenniferallulli.com", true },
   { "yenniferallulli.de", true },
   { "yenniferallulli.es", true },
   { "yenniferallulli.moda", true },
   { "yenniferallulli.nl", true },
   { "yetcore.io", true },
   { "yetii.net", true },
+  { "yippie.nl", true },
   { "yksityisyydensuoja.fi", true },
   { "yorcom.nl", true },
   { "youdowell.com", true },
   { "yoursecondphone.co", true },
   { "ypart.eu", true },
+  { "yu.gg", true },
   { "yunzhu.li", true },
   { "yunzhu.org", true },
   { "z.ai", true },
   { "zalan.do", true },
   { "zapier.com", true },
   { "zbasenem.pl", true },
-  { "zcarot.com", true },
+  { "zcarot.com", false },
   { "zcarrot.com", true },
-  { "zeitpunkt-kulturmagazin.de", true },
+  { "zeno-system.com", true },
   { "zenpayroll.com", false },
   { "zentraler-kreditausschuss.de", true },
   { "zentralwolke.de", true },
   { "zeplin.io", true },
   { "zeropush.com", true },
   { "zhang-hao.com", true },
   { "zhovner.com", true },
   { "zifb.in", true },
--- a/toolkit/components/parentalcontrols/nsIParentalControlsService.idl
+++ b/toolkit/components/parentalcontrols/nsIParentalControlsService.idl
@@ -6,17 +6,17 @@
 
 #include "nsISupports.idl"
 
 interface nsIURI;
 interface nsIFile;
 interface nsIInterfaceRequestor;
 interface nsIArray;
 
-[scriptable, uuid(406808a5-2838-4c29-9e39-5bfb885c89bf)]
+[scriptable, uuid(4ee714a7-e9a8-43ed-a061-60155b63e290)]
 interface nsIParentalControlsService : nsISupports
 {
   /**
    * Action types that can be blocked for users.
    */
   const short DOWNLOAD = 1; // Downloading files
   const short INSTALL_EXTENSION = 2; // Installing extensions
   const short INSTALL_APP = 3; // Installing webapps
@@ -25,16 +25,18 @@ interface nsIParentalControlsService : n
   const short BOOKMARK = 6; // Creating bookmarks
   const short ADD_CONTACT = 7; // Add contacts to the system database
   const short SET_IMAGE = 8; // Setting images as wall paper
   const short MODIFY_ACCOUNTS = 9; // Modifying system accounts
   const short REMOTE_DEBUGGING = 10; // Remote debugging
   const short IMPORT_SETTINGS = 11; // Importing settings from other apps
   const short TOOLS_MENU = 12; // Hide tools menu entry
   const short REPORT_SITE_ISSUE = 13; // Hide "Report Site Issue" menu entry
+  const short PRIVATE_BROWSING = 16; // Disallow usage of private browsing
+  const short LOCATION_SERVICE = 17; // Sharing of location data to location service
 
   /**
    * @returns true if the current user account has parental controls
    * restrictions enabled.
    */
   readonly attribute boolean parentalControlsEnabled;
 
   /**
--- a/toolkit/components/telemetry/Histograms.json
+++ b/toolkit/components/telemetry/Histograms.json
@@ -3382,17 +3382,17 @@
     "kind": "exponential",
     "high": "2000",
     "n_buckets": 10,
     "cpp_guard": "ANDROID",
     "extended_statistics_ok": true,
     "description": "Number of thumbnails stored in the browser DB *** No longer needed (bug 1156565). Delete histogram and accumulation code! ***"
   },
   "FENNEC_READING_LIST_COUNT": {
-    "expires_in_version": "40",
+    "expires_in_version": "50",
     "kind": "exponential",
     "high": "1000",
     "n_buckets": 10,
     "cpp_guard": "ANDROID",
     "extended_statistics_ok": true,
     "description": "Number of reading list items stored in the browser DB *** No longer needed (bug 1156565). Delete histogram and accumulation code! ***"
   },
   "PLACES_SORTED_BOOKMARKS_PERC": {
@@ -8226,16 +8226,22 @@
   "PWMGR_ABOUT_LOGINS_GET_ALL_LOGINS_MS": {
     "expires_in_version": "55",
     "kind": "exponential",
     "high": 60000,
     "n_buckets": 30,
     "extended_statistics_ok": true,
     "description": "How long getAllLogins() on about:logins takes for mobile users"
   },
+  "PWMGR_ABOUT_LOGINS_USAGE": {
+    "expires_in_version": "55",
+    "kind": "enumerated",
+    "n_values": 12,
+    "description": "Usage of about:logins 0= list of logins viewed, 1=a login's specifics page was viewed, 2=user edited login credentials 3=user toggled the show/hide button"
+  },
   "PWMGR_BLOCKLIST_NUM_SITES": {
     "expires_in_version": "never",
     "kind": "exponential",
     "high": 100,
     "n_buckets" : 10,
     "extended_statistics_ok": true,
     "description": "The number of sites for which the user has explicitly rejected saving logins"
   },
--- a/widget/android/GeneratedJNIWrappers.cpp
+++ b/widget/android/GeneratedJNIWrappers.cpp
@@ -760,24 +760,16 @@ constexpr char GeckoJavaSampler::Unpause
 
 void GeckoJavaSampler::UnpauseJavaProfiling()
 {
     return mozilla::jni::Method<UnpauseJavaProfiling_t>::Call(nullptr, nullptr);
 }
 
 constexpr char RestrictedProfiles::name[];
 
-constexpr char RestrictedProfiles::GetUserRestrictions_t::name[];
-constexpr char RestrictedProfiles::GetUserRestrictions_t::signature[];
-
-mozilla::jni::String::LocalRef RestrictedProfiles::GetUserRestrictions()
-{
-    return mozilla::jni::Method<GetUserRestrictions_t>::Call(nullptr, nullptr);
-}
-
 constexpr char RestrictedProfiles::IsAllowed_t::name[];
 constexpr char RestrictedProfiles::IsAllowed_t::signature[];
 
 bool RestrictedProfiles::IsAllowed(int32_t a0, mozilla::jni::String::Param a1)
 {
     return mozilla::jni::Method<IsAllowed_t>::Call(nullptr, nullptr, a0, a1);
 }
 
--- a/widget/android/GeneratedJNIWrappers.h
+++ b/widget/android/GeneratedJNIWrappers.h
@@ -1814,33 +1814,16 @@ public:
 
     static constexpr char name[] =
             "org/mozilla/gecko/RestrictedProfiles";
 
 protected:
     RestrictedProfiles(jobject instance) : Class(instance) {}
 
 public:
-    struct GetUserRestrictions_t {
-        typedef RestrictedProfiles Owner;
-        typedef mozilla::jni::String::LocalRef ReturnType;
-        typedef mozilla::jni::String::Param SetterType;
-        typedef mozilla::jni::Args<> Args;
-        static constexpr char name[] = "getUserRestrictions";
-        static constexpr char signature[] =
-                "()Ljava/lang/String;";
-        static const bool isStatic = true;
-        static const bool isMultithreaded = false;
-        static const mozilla::jni::ExceptionMode exceptionMode =
-                mozilla::jni::ExceptionMode::ABORT;
-    };
-
-    static mozilla::jni::String::LocalRef GetUserRestrictions();
-
-public:
     struct IsAllowed_t {
         typedef RestrictedProfiles Owner;
         typedef bool ReturnType;
         typedef bool SetterType;
         typedef mozilla::jni::Args<
                 int32_t,
                 mozilla::jni::String::Param> Args;
         static constexpr char name[] = "isAllowed";